From 5bc497009aded82d2767470abea24a79179f1837 Mon Sep 17 00:00:00 2001 From: orionlee Date: Sat, 12 May 2018 13:13:38 -0700 Subject: [PATCH 01/10] #2685: add "12 hours after finishing" option for auto download episodes cleanup --- .../preferences/PreferenceController.java | 9 ++++-- .../core/preferences/UserPreferences.java | 2 +- .../core/storage/APCleanupAlgorithm.java | 29 ++++++++++++++----- .../antennapod/core/util/Converter.java | 5 ++++ core/src/main/res/values/arrays.xml | 1 + core/src/main/res/values/strings.xml | 4 +++ 6 files changed, 40 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java index 31b2cbcb2..7f497c7aa 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -67,6 +67,7 @@ import de.danoeh.antennapod.core.export.opml.OpmlWriter; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.GpodnetSyncService; +import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.flattr.FlattrUtils; import de.danoeh.antennapod.core.util.gui.PictureInPictureUtil; import de.danoeh.antennapod.dialog.AuthenticationDialog; @@ -839,15 +840,19 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc R.array.episode_cleanup_values); String[] entries = new String[values.length]; for (int x = 0; x < values.length; x++) { - int v = Integer.parseInt(values[x]); + float v = Float.parseFloat(values[x]); if (v == UserPreferences.EPISODE_CLEANUP_QUEUE) { entries[x] = res.getString(R.string.episode_cleanup_queue_removal); } else if (v == UserPreferences.EPISODE_CLEANUP_NULL){ entries[x] = res.getString(R.string.episode_cleanup_never); } else if (v == 0) { entries[x] = res.getString(R.string.episode_cleanup_after_listening); + } else if (v > 0 && v < 1) { + int numHours = Converter.numberOfDaysFloatToNumberOfHours(v); + entries[x] = res.getQuantityString(R.plurals.episode_cleanup_hours_after_listening, numHours, numHours); } else { - entries[x] = res.getQuantityString(R.plurals.episode_cleanup_days_after_listening, v, v); + int vInt = (int)v; + entries[x] = res.getQuantityString(R.plurals.episode_cleanup_days_after_listening, vInt, vInt); } } pref.setEntries(entries); diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index c44999c88..a8d0b6ba1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -674,7 +674,7 @@ public class UserPreferences { } public static EpisodeCleanupAlgorithm getEpisodeCleanupAlgorithm() { - int cleanupValue = Integer.parseInt(prefs.getString(PREF_EPISODE_CLEANUP, "-1")); + float cleanupValue = Float.parseFloat(prefs.getString(PREF_EPISODE_CLEANUP, "-1")); if (cleanupValue == EPISODE_CLEANUP_QUEUE) { return new APQueueCleanupAlgorithm(); } else if (cleanupValue == EPISODE_CLEANUP_NULL) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java index e94874453..c9dd8f374 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java @@ -13,6 +13,7 @@ import java.util.concurrent.ExecutionException; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.util.Converter; /** * Implementation of the EpisodeCleanupAlgorithm interface used by AntennaPod. @@ -20,10 +21,11 @@ import de.danoeh.antennapod.core.feed.FeedMedia; public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { private static final String TAG = "APCleanupAlgorithm"; - /** the number of days after playback to wait before an item is eligible to be cleaned up */ - private final int numberOfDaysAfterPlayback; + /** the number of days after playback to wait before an item is eligible to be cleaned up. + Fractional for number of hours, e.g., 0.5 = 12 hours, 0.0416 = 1 hour. */ + private final float numberOfDaysAfterPlayback; - public APCleanupAlgorithm(int numberOfDaysAfterPlayback) { + public APCleanupAlgorithm(float numberOfDaysAfterPlayback) { this.numberOfDaysAfterPlayback = numberOfDaysAfterPlayback; } @@ -81,9 +83,8 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { private List getCandidates() { List candidates = new ArrayList<>(); List downloadedItems = DBReader.getDownloadedItems(); - Calendar cal = Calendar.getInstance(); - cal.add(Calendar.DAY_OF_MONTH, -1 * numberOfDaysAfterPlayback); - Date mostRecentDateForDeletion = cal.getTime(); + + Date mostRecentDateForDeletion = minusDays(new Date(), numberOfDaysAfterPlayback); for (FeedItem item : downloadedItems) { if (item.hasMedia() && item.getMedia().isDownloaded() @@ -108,5 +109,19 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { return getNumEpisodesToCleanup(0); } - public int getNumberOfDaysAfterPlayback() { return numberOfDaysAfterPlayback; } + public float getNumberOfDaysAfterPlayback() { return numberOfDaysAfterPlayback; } + + private static Date minusDays(Date baseDate, float numberOfDays) { + Calendar cal = Calendar.getInstance(); + cal.setTime(baseDate); + + int integral = (int)numberOfDays; + float fraction = numberOfDays - integral; + + cal.add(Calendar.DAY_OF_MONTH, -1 * integral); + cal.add(Calendar.HOUR_OF_DAY, -1 * Converter.numberOfDaysFloatToNumberOfHours(fraction)); + + return cal.getTime(); + } + } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java index 3cb226add..5915d216c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java @@ -130,6 +130,11 @@ public final class Converter { return String.format(Locale.getDefault(), "%.1f ", hours) + context.getString(R.string.time_hours); } + + public static int numberOfDaysFloatToNumberOfHours(float numberOfDays) { + return (int)Math.ceil(numberOfDays * 24); + } + /** * Converts the volume as read as the progress from a SeekBar scaled to 100 and as saved in * UserPreferences to the format taken by setVolume methods. diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml index 12961504c..2c2ad0847 100644 --- a/core/src/main/res/values/arrays.xml +++ b/core/src/main/res/values/arrays.xml @@ -68,6 +68,7 @@ -1 0 + 0.5 1 3 5 diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 9dd928311..e217dda80 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -105,6 +105,10 @@ Never When not in queue After finishing + + 1 hour after finishing + %d hours after finishing + 1 day after finishing %d days after finishing From 33810b203e6d1863d6a1aceaf9db7cc71bb1a6b5 Mon Sep 17 00:00:00 2001 From: orionlee Date: Sat, 12 May 2018 13:14:23 -0700 Subject: [PATCH 02/10] Mark method only used in testing. --- .../de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java index c9dd8f374..6d71bbc9f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java @@ -2,6 +2,7 @@ package de.danoeh.antennapod.core.storage; import android.content.Context; import android.support.annotation.NonNull; +import android.support.annotation.VisibleForTesting; import android.util.Log; import java.util.ArrayList; @@ -109,6 +110,7 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { return getNumEpisodesToCleanup(0); } + @VisibleForTesting public float getNumberOfDaysAfterPlayback() { return numberOfDaysAfterPlayback; } private static Date minusDays(Date baseDate, float numberOfDays) { From df6424be6037f220e2553a2d9ae521b3d846d6df Mon Sep 17 00:00:00 2001 From: orionlee Date: Sat, 12 May 2018 13:13:38 -0700 Subject: [PATCH 03/10] #2685: add "12 hours after finishing" option for auto download episodes cleanup --- .../de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java index 6d71bbc9f..7803ef220 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java @@ -110,7 +110,6 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { return getNumEpisodesToCleanup(0); } - @VisibleForTesting public float getNumberOfDaysAfterPlayback() { return numberOfDaysAfterPlayback; } private static Date minusDays(Date baseDate, float numberOfDays) { From 1bb0694403460aedf0bd7a2839fe5d4e19842a6b Mon Sep 17 00:00:00 2001 From: orionlee Date: Sat, 12 May 2018 13:14:23 -0700 Subject: [PATCH 04/10] Mark method only used in testing. --- .../de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java index 7803ef220..6d71bbc9f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java @@ -110,6 +110,7 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { return getNumEpisodesToCleanup(0); } + @VisibleForTesting public float getNumberOfDaysAfterPlayback() { return numberOfDaysAfterPlayback; } private static Date minusDays(Date baseDate, float numberOfDays) { From 4ff5690341d6969f73010003d28b7a9e0d31f0c8 Mon Sep 17 00:00:00 2001 From: orionlee Date: Wed, 14 Nov 2018 12:01:40 -0800 Subject: [PATCH 05/10] episode cleanup 12 hour option: add unit test to prepare for using hours rather than days as data structure --- .../core/storage/APCleanupAlgorithm.java | 7 ++++++- .../core/storage/APCleanupAlgorithmTest.java | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java index 6d71bbc9f..3bec93d29 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java @@ -80,12 +80,17 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { return counter; } + @VisibleForTesting + Date calcMostRecentDateForDeletion(@NonNull Date currentDate) { + return minusDays(currentDate, numberOfDaysAfterPlayback); + } + @NonNull private List getCandidates() { List candidates = new ArrayList<>(); List downloadedItems = DBReader.getDownloadedItems(); - Date mostRecentDateForDeletion = minusDays(new Date(), numberOfDaysAfterPlayback); + Date mostRecentDateForDeletion = calcMostRecentDateForDeletion(new Date()); for (FeedItem item : downloadedItems) { if (item.hasMedia() && item.getMedia().isDownloaded() diff --git a/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java b/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java new file mode 100644 index 000000000..dc4054af8 --- /dev/null +++ b/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java @@ -0,0 +1,20 @@ +package de.danoeh.antennapod.core.storage; + +import org.junit.Test; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import static org.junit.Assert.assertEquals; + +public class APCleanupAlgorithmTest { + + @Test + public void testCalcMostRecentDateForDeletion() throws Exception { + APCleanupAlgorithm algo = new APCleanupAlgorithm(1.0f); + Date curDateForTest = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse("2018-11-13T14:08:56-0800"); + Date resExpected = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse("2018-11-12T14:08:56-0800"); + Date resActual = algo.calcMostRecentDateForDeletion(curDateForTest); + assertEquals("cutoff for retaining most recent 1 day", resExpected, resActual); + } +} \ No newline at end of file From 566a682122a8438a656b72ec603e6ddaae90727c Mon Sep 17 00:00:00 2001 From: orionlee Date: Wed, 14 Nov 2018 12:20:20 -0800 Subject: [PATCH 06/10] episode cleanup 12 hour option - use hours internally part 1 (actual algorithm, no persistence) --- .../test/antennapod/ui/PreferencesTest.java | 13 +++++++++-- .../core/storage/APCleanupAlgorithm.java | 23 +++++++++---------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java index f217ecffa..0cbeccf4a 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java @@ -7,6 +7,7 @@ import android.support.test.espresso.contrib.RecyclerViewActions; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import android.view.View; + import com.robotium.solo.Solo; import com.robotium.solo.Timeout; import de.danoeh.antennapod.R; @@ -30,6 +31,14 @@ import org.junit.runner.RunWith; import java.util.Arrays; import java.util.concurrent.TimeUnit; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.activity.PreferenceActivity; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.APCleanupAlgorithm; +import de.danoeh.antennapod.core.storage.APNullCleanupAlgorithm; +import de.danoeh.antennapod.core.storage.APQueueCleanupAlgorithm; +import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithm; + import static android.support.test.InstrumentationRegistry.getInstrumentation; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; @@ -397,7 +406,7 @@ public class PreferencesTest { EpisodeCleanupAlgorithm alg = UserPreferences.getEpisodeCleanupAlgorithm(); if (alg instanceof APCleanupAlgorithm) { APCleanupAlgorithm cleanupAlg = (APCleanupAlgorithm)alg; - return cleanupAlg.getNumberOfDaysAfterPlayback() == 0; + return cleanupAlg.getNumberOfHoursAfterPlayback() == 0; } return false; }, @@ -416,7 +425,7 @@ public class PreferencesTest { EpisodeCleanupAlgorithm alg = UserPreferences.getEpisodeCleanupAlgorithm(); if (alg instanceof APCleanupAlgorithm) { APCleanupAlgorithm cleanupAlg = (APCleanupAlgorithm)alg; - return cleanupAlg.getNumberOfDaysAfterPlayback() == 5; + return cleanupAlg.getNumberOfHoursAfterPlayback() == 120; // 5 days } return false; }, diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java index 3bec93d29..1b446dd6f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java @@ -14,7 +14,6 @@ import java.util.concurrent.ExecutionException; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.util.Converter; /** * Implementation of the EpisodeCleanupAlgorithm interface used by AntennaPod. @@ -24,10 +23,14 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { private static final String TAG = "APCleanupAlgorithm"; /** the number of days after playback to wait before an item is eligible to be cleaned up. Fractional for number of hours, e.g., 0.5 = 12 hours, 0.0416 = 1 hour. */ - private final float numberOfDaysAfterPlayback; + private final int numberOfHoursAfterPlayback; - public APCleanupAlgorithm(float numberOfDaysAfterPlayback) { - this.numberOfDaysAfterPlayback = numberOfDaysAfterPlayback; + public APCleanupAlgorithm(int numberOfHoursAfterPlayback) { + this.numberOfHoursAfterPlayback = numberOfHoursAfterPlayback; + } + + public APCleanupAlgorithm(float numberOfDaysAfterPlayback) { // TODO: temporary, until callers are migrated + this.numberOfHoursAfterPlayback = (int)(24 * numberOfDaysAfterPlayback); } /** @@ -82,7 +85,7 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { @VisibleForTesting Date calcMostRecentDateForDeletion(@NonNull Date currentDate) { - return minusDays(currentDate, numberOfDaysAfterPlayback); + return minusHours(currentDate, numberOfHoursAfterPlayback); } @NonNull @@ -116,17 +119,13 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { } @VisibleForTesting - public float getNumberOfDaysAfterPlayback() { return numberOfDaysAfterPlayback; } + public int getNumberOfHoursAfterPlayback() { return numberOfHoursAfterPlayback; } - private static Date minusDays(Date baseDate, float numberOfDays) { + private static Date minusHours(Date baseDate, int numberOfHours) { Calendar cal = Calendar.getInstance(); cal.setTime(baseDate); - int integral = (int)numberOfDays; - float fraction = numberOfDays - integral; - - cal.add(Calendar.DAY_OF_MONTH, -1 * integral); - cal.add(Calendar.HOUR_OF_DAY, -1 * Converter.numberOfDaysFloatToNumberOfHours(fraction)); + cal.add(Calendar.HOUR_OF_DAY, -1 * numberOfHours); return cal.getTime(); } From d1c73dda5b5e7d9346c24d323461810bac18499e Mon Sep 17 00:00:00 2001 From: orionlee Date: Wed, 14 Nov 2018 14:14:15 -0800 Subject: [PATCH 07/10] episode cleanup 12 hour option - use hours internally part 2 (persisted shared preference) requires data migartion: app versionCode increased to 1070196 --- app/src/main/AndroidManifest.xml | 2 +- .../antennapod/preferences/PreferenceController.java | 12 +++++------- .../de/danoeh/antennapod/core/UpdateManager.java | 8 ++++++++ .../antennapod/core/preferences/UserPreferences.java | 12 +++++++++++- .../antennapod/core/storage/APCleanupAlgorithm.java | 4 ---- .../de/danoeh/antennapod/core/util/Converter.java | 4 ---- core/src/main/res/values/arrays.xml | 10 +++++----- .../core/storage/APCleanupAlgorithmTest.java | 2 +- 8 files changed, 31 insertions(+), 23 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cff85e905..55b54775b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,7 @@ - 1 - 3 - 5 - 7 + 12 + 24 + 72 + 120 + 168 -2 diff --git a/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java b/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java index dc4054af8..9f354c7c2 100644 --- a/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java +++ b/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java @@ -11,7 +11,7 @@ public class APCleanupAlgorithmTest { @Test public void testCalcMostRecentDateForDeletion() throws Exception { - APCleanupAlgorithm algo = new APCleanupAlgorithm(1.0f); + APCleanupAlgorithm algo = new APCleanupAlgorithm(24); Date curDateForTest = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse("2018-11-13T14:08:56-0800"); Date resExpected = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse("2018-11-12T14:08:56-0800"); Date resActual = algo.calcMostRecentDateForDeletion(curDateForTest); From 5d75fd645dea8d77994d972c37ca56768415c7da Mon Sep 17 00:00:00 2001 From: orionlee Date: Wed, 14 Nov 2018 14:35:37 -0800 Subject: [PATCH 08/10] correct the misleading comment --- .../de/danoeh/antennapod/preferences/PreferenceController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java index 906dcfebb..7132d26ef 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -849,7 +849,7 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc } else if (v > 0 && v < 24) { entries[x] = res.getQuantityString(R.plurals.episode_cleanup_hours_after_listening, v, v); } else { - int numDays = (int)(v / 24); // assume underlying value will be fractions, e.g., 36 (hours) + int numDays = (int)(v / 24); // assume underlying value will be NOT fraction of days, e.g., 36 (hours) entries[x] = res.getQuantityString(R.plurals.episode_cleanup_days_after_listening, numDays, numDays); } } From eff2f154b52fec478890edf4716b0c4bb5f013a2 Mon Sep 17 00:00:00 2001 From: orionlee Date: Wed, 14 Nov 2018 14:53:51 -0800 Subject: [PATCH 09/10] fix code formatting --- .../main/java/de/danoeh/antennapod/core/UpdateManager.java | 4 ++-- .../antennapod/core/storage/APCleanupAlgorithmTest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java b/core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java index 9b8806d5b..29e2456b2 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java @@ -58,13 +58,13 @@ class UpdateManager { } private static void onUpgrade(final int oldVersionCode, final int newVersionCode) { - if(oldVersionCode < 1050004) { + if (oldVersionCode < 1050004) { if(MediaPlayer.isPrestoLibraryInstalled(context) && Build.VERSION.SDK_INT >= 16) { UserPreferences.enableSonic(); } } - if(oldVersionCode < 1070196) { + if (oldVersionCode < 1070196) { // migrate episode cleanup value (unit changed from days to hours) int oldValueInDays = UserPreferences.getEpisodeCleanupValue(); if (oldValueInDays > 0) { diff --git a/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java b/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java index 9f354c7c2..946181d52 100644 --- a/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java +++ b/core/src/test/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithmTest.java @@ -17,4 +17,4 @@ public class APCleanupAlgorithmTest { Date resActual = algo.calcMostRecentDateForDeletion(curDateForTest); assertEquals("cutoff for retaining most recent 1 day", resExpected, resActual); } -} \ No newline at end of file +} From 56a72088591ce1909b77baef53cd1a54b06d68cb Mon Sep 17 00:00:00 2001 From: orionlee Date: Fri, 4 Jan 2019 10:51:33 -0800 Subject: [PATCH 10/10] fix import order --- .../java/de/test/antennapod/ui/PreferencesTest.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java index 0cbeccf4a..81084e684 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java @@ -10,16 +10,6 @@ import android.view.View; import com.robotium.solo.Solo; import com.robotium.solo.Timeout; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.PreferenceActivity; -import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.core.storage.APCleanupAlgorithm; -import de.danoeh.antennapod.core.storage.APNullCleanupAlgorithm; -import de.danoeh.antennapod.core.storage.APQueueCleanupAlgorithm; -import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithm; -import de.danoeh.antennapod.fragment.EpisodesFragment; -import de.danoeh.antennapod.fragment.QueueFragment; -import de.danoeh.antennapod.fragment.SubscriptionFragment; import org.hamcrest.Matcher; import org.junit.After; @@ -38,6 +28,9 @@ import de.danoeh.antennapod.core.storage.APCleanupAlgorithm; import de.danoeh.antennapod.core.storage.APNullCleanupAlgorithm; import de.danoeh.antennapod.core.storage.APQueueCleanupAlgorithm; import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithm; +import de.danoeh.antennapod.fragment.EpisodesFragment; +import de.danoeh.antennapod.fragment.QueueFragment; +import de.danoeh.antennapod.fragment.SubscriptionFragment; import static android.support.test.InstrumentationRegistry.getInstrumentation; import static android.support.test.espresso.Espresso.onView;