diff options
31 files changed, 145 insertions, 89 deletions
@@ -4,10 +4,13 @@ This is the official repository of AntennaPod, the easy-to-use, flexible and ope [<img src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png" alt="Get it on Google Play" - height="90">](https://play.google.com/store/apps/details?id=de.danoeh.antennapod) + height="70">](https://play.google.com/store/apps/details?id=de.danoeh.antennapod) [<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" - height="90">](https://f-droid.org/app/de.danoeh.antennapod) + height="70">](https://f-droid.org/app/de.danoeh.antennapod) + +<img src="https://raw.githubusercontent.com/AntennaPod/AntennaPod/develop/app/src/main/play/listings/en-US/graphics/phone-screenshots/00.png" alt="Screenshot 0" height="200"> <img src="https://raw.githubusercontent.com/AntennaPod/AntennaPod/develop/app/src/main/play/listings/en-US/graphics/phone-screenshots/01.png" alt="Screenshot 1" height="200"> <img src="https://raw.githubusercontent.com/AntennaPod/AntennaPod/develop/app/src/main/play/listings/en-US/graphics/phone-screenshots/02.png" alt="Screenshot 2" height="200"> <img src="https://raw.githubusercontent.com/AntennaPod/AntennaPod/develop/app/src/main/play/listings/en-US/graphics/phone-screenshots/03.png" alt="Screenshot 3" height="200"> <img src="https://raw.githubusercontent.com/AntennaPod/AntennaPod/develop/app/src/main/play/listings/en-US/graphics/phone-screenshots/04.png" alt="Screenshot 4" height="200"> <img src="https://raw.githubusercontent.com/AntennaPod/AntennaPod/develop/app/src/main/play/listings/en-US/graphics/phone-screenshots/05.png" alt="Screenshot 5" height="200"> + ## Feedback You can use the [AntennaPod Google Group](https://groups.google.com/forum/#!forum/antennapod) for discussions about the app. diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java index 4910882e3..d82e366da 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -685,7 +686,7 @@ public class DBWriterTest { if (from == to) { continue; } - Log.d(TAG, String.format("testMoveQueueItem: From=%d, To=%d", from, to)); + Log.d(TAG, String.format(Locale.US, "testMoveQueueItem: From=%d, To=%d", from, to)); final long fromID = feed.getItems().get(from).getId(); adapter = PodDBAdapter.getInstance(); diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java index 4365fa0ae..4294349fc 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java @@ -17,6 +17,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Locale; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.event.QueueEvent; @@ -89,13 +90,13 @@ public class UITestUtils { out.close(); int id = server.serveFile(feedFile); Assert.assertTrue(id != -1); - return String.format("%s/files/%d", server.getBaseUrl(), id); + return String.format(Locale.US, "%s/files/%d", server.getBaseUrl(), id); } private String hostFile(File file) { int id = server.serveFile(file); Assert.assertTrue(id != -1); - return String.format("%s/files/%d", server.getBaseUrl(), id); + return String.format(Locale.US, "%s/files/%d", server.getBaseUrl(), id); } private File newMediaFile(String name) throws IOException { diff --git a/app/src/androidTest/java/de/test/antennapod/util/service/download/HTTPBin.java b/app/src/androidTest/java/de/test/antennapod/util/service/download/HTTPBin.java index c588cdbc2..f99a7f9dc 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/service/download/HTTPBin.java +++ b/app/src/androidTest/java/de/test/antennapod/util/service/download/HTTPBin.java @@ -19,6 +19,7 @@ import java.net.URLConnection; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Random; import java.util.zip.GZIPOutputStream; @@ -88,7 +89,8 @@ public class HTTPBin extends NanoHTTPD { String[] segments = session.getUri().split("/"); if (segments.length < 3) { - Log.w(TAG, String.format("Invalid number of URI segments: %d %s", segments.length, Arrays.toString(segments))); + Log.w(TAG, String.format(Locale.US, "Invalid number of URI segments: %d %s", + segments.length, Arrays.toString(segments))); get404Error(); } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 31b832b26..bd539c70f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -73,6 +73,7 @@ <activity android:name=".activity.MainActivity" android:configChanges="keyboardHidden|orientation|screenSize" + android:windowSoftInputMode="stateHidden" android:launchMode="singleTask" android:label="@string/app_name"> </activity> diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index 6b1e5e7d6..0b8ff90d5 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -431,6 +431,7 @@ public class MainActivity extends CastEnabledActivity { } else if (feedId > 0) { loadFeedFragmentById(feedId, args); } + sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } else if (intent.getBooleanExtra(EXTRA_OPEN_PLAYER, false)) { sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); bottomSheetCallback.onSlide(null, 1.0f); diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java index 821defd86..fd4e31074 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java @@ -535,14 +535,14 @@ public class OnlineFeedViewActivity extends AppCompatActivity { } else { builder.setMessage(R.string.error_msg_prefix); } - builder.setNeutralButton(android.R.string.ok, + builder.setPositiveButton(android.R.string.ok, (dialog, which) -> dialog.cancel() ); - builder.setOnCancelListener(dialog -> { + builder.setOnDismissListener(dialog -> { setResult(RESULT_ERROR); finish(); }); - if(dialog != null && dialog.isShowing()) { + if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } dialog = builder.show(); diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java index c435bcdc3..83debaecb 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java @@ -20,6 +20,7 @@ import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackController; import java.util.List; +import java.util.Locale; public class PlaybackControlsDialog extends DialogFragment { private static final String ARGUMENT_IS_PLAYING_VIDEO = "isPlayingVideo"; @@ -99,7 +100,7 @@ public class PlaybackControlsDialog extends DialogFragment { final TextView txtvPlaybackSpeed = dialog.findViewById(R.id.txtvPlaybackSpeed); float currentSpeed = getCurrentSpeed(); - txtvPlaybackSpeed.setText(String.format("%.2fx", currentSpeed)); + txtvPlaybackSpeed.setText(String.format(Locale.getDefault(), "%.2fx", currentSpeed)); barPlaybackSpeed.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { @@ -114,7 +115,7 @@ public class PlaybackControlsDialog extends DialogFragment { UserPreferences.setPlaybackSpeed(playbackSpeed); } - String speedStr = String.format("%.2fx", playbackSpeed); + String speedStr = String.format(Locale.getDefault(), "%.2fx", playbackSpeed); txtvPlaybackSpeed.setText(speedStr); } else if (fromUser) { float speed = getCurrentSpeed(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java index c8abe0dc5..5275f5f7e 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java @@ -5,6 +5,7 @@ import android.app.ProgressDialog; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; @@ -173,16 +174,29 @@ public class ImportExportPreferencesFragment extends PreferenceFragmentCompat { } private void importDatabase() { - if (Build.VERSION.SDK_INT >= 19) { - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); - intent.setType("*/*"); - startActivityForResult(intent, REQUEST_CODE_RESTORE_DATABASE); - } else { - Intent intent = new Intent(Intent.ACTION_GET_CONTENT); - intent.setType("*/*"); - startActivityForResult(Intent.createChooser(intent, - getString(R.string.import_select_file)), REQUEST_CODE_RESTORE_DATABASE); - } + // setup the alert builder + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(R.string.database_import_label); + builder.setMessage(R.string.database_import_warning); + + // add a button + builder.setNegativeButton(R.string.no, null); + builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { + if (Build.VERSION.SDK_INT >= 19) { + Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); + intent.setType("*/*"); + startActivityForResult(intent, REQUEST_CODE_RESTORE_DATABASE); + } else { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("*/*"); + startActivityForResult(Intent.createChooser(intent, + getString(R.string.import_select_file)), REQUEST_CODE_RESTORE_DATABASE); + } + } + ); + + // create and show the alert dialog + builder.show(); } private void showDatabaseImportSuccessDialog() { diff --git a/app/src/main/res/layout/feeditemlist_item.xml b/app/src/main/res/layout/feeditemlist_item.xml index 66febc1d0..e68232663 100644 --- a/app/src/main/res/layout/feeditemlist_item.xml +++ b/app/src/main/res/layout/feeditemlist_item.xml @@ -18,15 +18,14 @@ android:minWidth="4dp"> <ImageView android:id="@+id/drag_handle" - android:layout_width="24dp" + android:layout_width="16dp" android:layout_height="match_parent" android:contentDescription="@string/drag_handle_content_description" - android:scaleType="center" + android:scaleType="fitCenter" android:src="?attr/dragview_background" - android:paddingEnd="8dp" - android:paddingRight="8dp" - android:visibility="gone" - tools:src="@drawable/ic_drag_vertical_grey600_48dp" + android:paddingEnd="4dp" + android:paddingRight="4dp" + tools:src="@drawable/ic_drag_darktheme" tools:background="@android:color/holo_green_dark"/> </LinearLayout> diff --git a/app/src/main/res/layout/statistics_listitem_total.xml b/app/src/main/res/layout/statistics_listitem_total.xml index 2efe37bfe..628e26c1f 100644 --- a/app/src/main/res/layout/statistics_listitem_total.xml +++ b/app/src/main/res/layout/statistics_listitem_total.xml @@ -1,44 +1,48 @@ <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:padding="16dp"> + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="16dp"> <de.danoeh.antennapod.view.PieChartView - android:id="@+id/pie_chart" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_centerInParent="true" - android:layout_marginLeft="8dp" - android:layout_marginRight="8dp" - android:maxWidth="800dp" - android:minWidth="460dp" /> + android:id="@+id/pie_chart" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerInParent="true" + android:layout_marginRight="8dp" + android:maxWidth="800dp" + android:minWidth="460dp" + android:layout_marginLeft="8dp" /> <TextView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:id="@+id/total_description" - android:textSize="14sp" - android:gravity="center_horizontal" - android:layout_above="@+id/total_time"/> + android:id="@+id/total_description" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_centerHorizontal="true" + android:textAlignment="center" + android:layout_marginLeft="56dp" + android:layout_marginRight="56dp" + android:maxLines="3" + android:layout_above="@id/total_time" + android:textSize="14sp" /> <TextView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:id="@+id/total_time" - android:textColor="?android:attr/textColorPrimary" - android:gravity="center_horizontal" - android:textSize="28sp" - android:layout_marginBottom="16dp" - android:layout_alignBottom="@id/pie_chart" - tools:text="10.0 hours"/> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/total_time" + android:textColor="?android:attr/textColorPrimary" + android:gravity="center_horizontal" + android:textSize="28sp" + android:layout_marginBottom="16dp" + android:layout_alignBottom="@id/pie_chart" + tools:text="10.0 hours"/> <View - android:layout_width="match_parent" - android:layout_height="1dp" - android:layout_marginTop="16dp" - android:background="?android:attr/dividerVertical" - android:layout_below="@+id/pie_chart"/> + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_marginTop="16dp" + android:background="?android:attr/dividerVertical" + android:layout_below="@+id/pie_chart"/> </RelativeLayout>
\ No newline at end of file diff --git a/app/src/main/res/menu/queue.xml b/app/src/main/res/menu/queue.xml index f9aae20f7..43702e07f 100644 --- a/app/src/main/res/menu/queue.xml +++ b/app/src/main/res/menu/queue.xml @@ -35,10 +35,10 @@ <menu> <item android:id="@+id/queue_sort_date_asc" - android:title="@string/sort_old_to_new"/> + android:title="@string/sort_old_new"/> <item android:id="@+id/queue_sort_date_desc" - android:title="@string/sort_new_to_old"/> + android:title="@string/sort_new_old"/> </menu> </item> @@ -49,10 +49,10 @@ <menu> <item android:id="@+id/queue_sort_duration_asc" - android:title="@string/ascending"/> + android:title="@string/sort_short_long"/> <item android:id="@+id/queue_sort_duration_desc" - android:title="@string/descending"/> + android:title="@string/sort_long_short"/> </menu> </item> @@ -63,10 +63,10 @@ <menu> <item android:id="@+id/queue_sort_episode_title_asc" - android:title="@string/ascending"/> + android:title="@string/sort_a_z"/> <item android:id="@+id/queue_sort_episode_title_desc" - android:title="@string/descending"/> + android:title="@string/sort_z_a"/> </menu> </item> @@ -77,10 +77,10 @@ <menu> <item android:id="@+id/queue_sort_feed_title_asc" - android:title="@string/ascending"/> + android:title="@string/sort_a_z"/> <item android:id="@+id/queue_sort_feed_title_desc" - android:title="@string/descending"/> + android:title="@string/sort_z_a"/> </menu> </item> @@ -96,10 +96,10 @@ <menu> <item android:id="@+id/queue_sort_smart_shuffle_asc" - android:title="@string/sort_old_to_new"/> + android:title="@string/sort_old_new"/> <item android:id="@+id/queue_sort_smart_shuffle_desc" - android:title="@string/sort_new_to_old"/> + android:title="@string/sort_new_old"/> </menu> </item> 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 b88793e87..4765f9f4f 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 @@ -10,6 +10,7 @@ import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.concurrent.ExecutionException; import de.danoeh.antennapod.core.feed.FeedItem; @@ -72,7 +73,7 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { int counter = delete.size(); - Log.i(TAG, String.format( + Log.i(TAG, String.format(Locale.US, "Auto-delete deleted %d episodes (%d requested)", counter, numberOfEpisodesToDelete)); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java index dfe0b5201..4f33af959 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.concurrent.ExecutionException; import de.danoeh.antennapod.core.feed.FeedItem; @@ -64,7 +65,7 @@ public class APQueueCleanupAlgorithm extends EpisodeCleanupAlgorithm { int counter = delete.size(); - Log.i(TAG, String.format( + Log.i(TAG, String.format(Locale.US, "Auto-delete deleted %d episodes (%d requested)", counter, numberOfEpisodesToDelete)); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 6c7f69680..e33b67719 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -94,7 +95,7 @@ public class DBWriter { private static boolean deleteFeedMediaSynchronous( @NonNull Context context, @NonNull FeedMedia media) { - Log.i(TAG, String.format("Requested to delete FeedMedia [id=%d, title=%s, downloaded=%s", + Log.i(TAG, String.format(Locale.US, "Requested to delete FeedMedia [id=%d, title=%s, downloaded=%s", media.getId(), media.getEpisodeTitle(), media.isDownloaded())); if (media.isDownloaded()) { // delete downloaded media file diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 06ed59c26..6ca3419cf 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.Set; import de.danoeh.antennapod.core.feed.Chapter; @@ -425,7 +426,7 @@ public class PodDBAdapter { public void setFeedItemFilter(long feedId, Set<String> filterValues) { String valuesList = TextUtils.join(",", filterValues); - Log.d(TAG, String.format( + Log.d(TAG, String.format(Locale.US, "setFeedItemFilter() called with: feedId = [%d], filterValues = [%s]", feedId, valuesList)); ContentValues values = new ContentValues(); values.put(KEY_HIDE, valuesList); @@ -782,7 +783,7 @@ public class PodDBAdapter { } private boolean isItemInFavorites(FeedItem item) { - String query = String.format("SELECT %s from %s WHERE %s=%d", + String query = String.format(Locale.US, "SELECT %s from %s WHERE %s=%d", KEY_ID, TABLE_NAME_FAVORITES, KEY_FEEDITEM, item.getId()); Cursor c = db.rawQuery(query, null); int count = c.getCount(); @@ -1031,7 +1032,7 @@ public class PodDBAdapter { return db.query(TABLE_NAME_FEED_MEDIA, null, KEY_PLAYBACK_COMPLETION_DATE + " > 0", null, null, - null, String.format("%s DESC LIMIT %d", KEY_PLAYBACK_COMPLETION_DATE, limit)); + null, String.format(Locale.US, "%s DESC LIMIT %d", KEY_PLAYBACK_COMPLETION_DATE, limit)); } public final Cursor getSingleFeedMediaCursor(long id) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java b/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java index a35c961eb..eae7a08af 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java @@ -38,6 +38,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; +import java.util.Locale; /** * Communicates with the gpodder.net service. @@ -70,7 +71,7 @@ public class GpodnetService implements ISyncService { public List<GpodnetTag> getTopTags(int count) throws GpodnetServiceException { URL url; try { - url = new URI(BASE_SCHEME, baseHost, String.format("/api/2/tags/%d.json", count), null).toURL(); + url = new URI(BASE_SCHEME, baseHost, String.format(Locale.US, "/api/2/tags/%d.json", count), null).toURL(); } catch (MalformedURLException | URISyntaxException e) { e.printStackTrace(); throw new GpodnetServiceException(e); @@ -103,7 +104,7 @@ public class GpodnetService implements ISyncService { public List<GpodnetPodcast> getPodcastsForTag(@NonNull GpodnetTag tag, int count) throws GpodnetServiceException { try { - URL url = new URI(BASE_SCHEME, baseHost, String.format( + URL url = new URI(BASE_SCHEME, baseHost, String.format(Locale.US, "/api/2/tag/%s/%d.json", tag.getTag(), count), null).toURL(); Request.Builder request = new Request.Builder().url(url); String response = executeRequest(request); @@ -129,7 +130,7 @@ public class GpodnetService implements ISyncService { } try { - URL url = new URI(BASE_SCHEME, baseHost, String.format("/toplist/%d.json", count), null).toURL(); + URL url = new URI(BASE_SCHEME, baseHost, String.format(Locale.US, "/toplist/%d.json", count), null).toURL(); Request.Builder request = new Request.Builder().url(url); String response = executeRequest(request); @@ -160,7 +161,8 @@ public class GpodnetService implements ISyncService { } try { - URL url = new URI(BASE_SCHEME, baseHost, String.format("/suggestions/%d.json", count), null).toURL(); + URL url = new URI(BASE_SCHEME, baseHost, + String.format(Locale.US, "/suggestions/%d.json", count), null).toURL(); Request.Builder request = new Request.Builder().url(url); String response = executeRequest(request); @@ -182,7 +184,7 @@ public class GpodnetService implements ISyncService { */ public List<GpodnetPodcast> searchPodcasts(String query, int scaledLogoSize) throws GpodnetServiceException { String parameters = (scaledLogoSize > 0 && scaledLogoSize <= 256) ? String - .format("q=%s&scale_logo=%d", query, scaledLogoSize) : String + .format(Locale.US, "q=%s&scale_logo=%d", query, scaledLogoSize) : String .format("q=%s", query); try { URL url = new URI(BASE_SCHEME, null, baseHost, -1, "/search.json", @@ -384,7 +386,7 @@ public class GpodnetService implements ISyncService { public SubscriptionChanges getSubscriptionChanges(@NonNull String deviceId, long timestamp) throws GpodnetServiceException { requireLoggedIn(); - String params = String.format("since=%d", timestamp); + String params = String.format(Locale.US, "since=%d", timestamp); String path = String.format("/api/2/subscriptions/%s/%s.json", username, deviceId); try { URL url = new URI(BASE_SCHEME, null, baseHost, -1, path, params, @@ -466,7 +468,7 @@ public class GpodnetService implements ISyncService { @Override public EpisodeActionChanges getEpisodeActionChanges(long timestamp) throws SyncServiceException { requireLoggedIn(); - String params = String.format("since=%d", timestamp); + String params = String.format(Locale.US, "since=%d", timestamp); String path = String.format("/api/2/episodes/%s.json", username); try { URL url = new URI(BASE_SCHEME, null, baseHost, -1, path, params, null).toURL(); diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java index be4c0668c..b59a95cd9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java @@ -193,7 +193,7 @@ public class Timeline { String replacementText = group; if (time < playableDuration) { - replacementText = String.format(Locale.getDefault(), TIMECODE_LINK, time, group); + replacementText = String.format(Locale.US, TIMECODE_LINK, time, group); } matcherForElement.appendReplacement(buffer, replacementText); diff --git a/core/src/main/res/drawable-hdpi/ic_drag_vertical_grey600_48dp.9.png b/core/src/main/res/drawable-hdpi/ic_drag_vertical_grey600_48dp.9.png Binary files differdeleted file mode 100644 index a0b47594b..000000000 --- a/core/src/main/res/drawable-hdpi/ic_drag_vertical_grey600_48dp.9.png +++ /dev/null diff --git a/core/src/main/res/drawable-hdpi/ic_drag_vertical_white_48dp.9.png b/core/src/main/res/drawable-hdpi/ic_drag_vertical_white_48dp.9.png Binary files differdeleted file mode 100644 index a4ce8fa7e..000000000 --- a/core/src/main/res/drawable-hdpi/ic_drag_vertical_white_48dp.9.png +++ /dev/null diff --git a/core/src/main/res/drawable-mdpi/ic_drag_vertical_grey600_48dp.9.png b/core/src/main/res/drawable-mdpi/ic_drag_vertical_grey600_48dp.9.png Binary files differdeleted file mode 100644 index 7cd66845b..000000000 --- a/core/src/main/res/drawable-mdpi/ic_drag_vertical_grey600_48dp.9.png +++ /dev/null diff --git a/core/src/main/res/drawable-mdpi/ic_drag_vertical_white_48dp.9.png b/core/src/main/res/drawable-mdpi/ic_drag_vertical_white_48dp.9.png Binary files differdeleted file mode 100644 index 3d1fd0fe3..000000000 --- a/core/src/main/res/drawable-mdpi/ic_drag_vertical_white_48dp.9.png +++ /dev/null diff --git a/core/src/main/res/drawable-xhdpi/ic_drag_vertical_grey600_48dp.9.png b/core/src/main/res/drawable-xhdpi/ic_drag_vertical_grey600_48dp.9.png Binary files differdeleted file mode 100644 index 83cb91561..000000000 --- a/core/src/main/res/drawable-xhdpi/ic_drag_vertical_grey600_48dp.9.png +++ /dev/null diff --git a/core/src/main/res/drawable-xhdpi/ic_drag_vertical_white_48dp.9.png b/core/src/main/res/drawable-xhdpi/ic_drag_vertical_white_48dp.9.png Binary files differdeleted file mode 100644 index 4b030e169..000000000 --- a/core/src/main/res/drawable-xhdpi/ic_drag_vertical_white_48dp.9.png +++ /dev/null diff --git a/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_grey600_48dp.9.png b/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_grey600_48dp.9.png Binary files differdeleted file mode 100644 index dc8682716..000000000 --- a/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_grey600_48dp.9.png +++ /dev/null diff --git a/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_white_48dp.9.png b/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_white_48dp.9.png Binary files differdeleted file mode 100644 index 808186aa9..000000000 --- a/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_white_48dp.9.png +++ /dev/null diff --git a/core/src/main/res/drawable/ic_drag_darktheme.xml b/core/src/main/res/drawable/ic_drag_darktheme.xml new file mode 100644 index 000000000..b2ef2e5ec --- /dev/null +++ b/core/src/main/res/drawable/ic_drag_darktheme.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="20dp" + android:height="30dp" + android:viewportWidth="3" + android:viewportHeight="4.5"> + <path + android:pathData="M0.74983,0.25011A0.5,0.5 0,0 0,0.25011 0.74983A0.5,0.5 135,0 0,0.74983 1.25005A0.5,0.5 0,0 0,1.25005 0.74983A0.5,0.5 45,0 0,0.74983 0.25011zM2.24999,0.25011A0.5,0.5 0,0 0,1.74976 0.74983A0.5,0.5 0,0 0,2.24999 1.25005A0.5,0.5 0,0 0,2.75022 0.74983A0.5,0.5 0,0 0,2.24999 0.25011zM0.74983,1.74976A0.5,0.5 0,0 0,0.25011 2.24999A0.5,0.5 0,0 0,0.74983 2.75022A0.5,0.5 0,0 0,1.25005 2.24999A0.5,0.5 0,0 0,0.74983 1.74976zM2.24999,1.74976A0.5,0.5 0,0 0,1.74976 2.24999A0.5,0.5 0,0 0,2.24999 2.75022A0.5,0.5 0,0 0,2.75022 2.24999A0.5,0.5 0,0 0,2.24999 1.74976zM0.74983,3.24993A0.5,0.5 0,0 0,0.25011 3.75016A0.5,0.5 45,0 0,0.74983 4.24987A0.5,0.5 45,0 0,1.25005 3.75016A0.5,0.5 0,0 0,0.74983 3.24993zM2.24999,3.24993A0.5,0.5 0,0 0,1.74976 3.75016A0.5,0.5 45,0 0,2.24999 4.24987A0.5,0.5 45,0 0,2.75022 3.75016A0.5,0.5 0,0 0,2.24999 3.24993z" + android:fillColor="#a9a9a9"/> +</vector> diff --git a/core/src/main/res/drawable/ic_drag_lighttheme.xml b/core/src/main/res/drawable/ic_drag_lighttheme.xml new file mode 100644 index 000000000..42714d5db --- /dev/null +++ b/core/src/main/res/drawable/ic_drag_lighttheme.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="20dp" + android:height="30dp" + android:viewportWidth="3" + android:viewportHeight="4.5"> + <path + android:pathData="M0.74983,0.25011A0.5,0.5 0,0 0,0.25011 0.74983A0.5,0.5 135,0 0,0.74983 1.25005A0.5,0.5 0,0 0,1.25005 0.74983A0.5,0.5 45,0 0,0.74983 0.25011zM2.24999,0.25011A0.5,0.5 0,0 0,1.74976 0.74983A0.5,0.5 0,0 0,2.24999 1.25005A0.5,0.5 0,0 0,2.75022 0.74983A0.5,0.5 0,0 0,2.24999 0.25011zM0.74983,1.74976A0.5,0.5 0,0 0,0.25011 2.24999A0.5,0.5 0,0 0,0.74983 2.75022A0.5,0.5 0,0 0,1.25005 2.24999A0.5,0.5 0,0 0,0.74983 1.74976zM2.24999,1.74976A0.5,0.5 0,0 0,1.74976 2.24999A0.5,0.5 0,0 0,2.24999 2.75022A0.5,0.5 0,0 0,2.75022 2.24999A0.5,0.5 0,0 0,2.24999 1.74976zM0.74983,3.24993A0.5,0.5 0,0 0,0.25011 3.75016A0.5,0.5 45,0 0,0.74983 4.24987A0.5,0.5 45,0 0,1.25005 3.75016A0.5,0.5 0,0 0,0.74983 3.24993zM2.24999,3.24993A0.5,0.5 0,0 0,1.74976 3.75016A0.5,0.5 45,0 0,2.24999 4.24987A0.5,0.5 45,0 0,2.75022 3.75016A0.5,0.5 0,0 0,2.24999 3.24993z" + android:fillColor="#9d9d9d"/> +</vector> diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index ac402946e..3740bda03 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -305,8 +305,6 @@ <string name="ascending">Ascending</string> <string name="descending">Descending</string> <string name="clear_queue_confirmation_msg">Please confirm that you want to clear the queue of ALL of the episodes in it</string> - <string name="sort_old_to_new">Old to new</string> - <string name="sort_new_to_old">New to old</string> <string name="time_left_label">Time left:\u0020</string> <!-- Variable Speed --> @@ -561,6 +559,7 @@ <string name="html_export_label">HTML export</string> <string name="database_export_label">Database export</string> <string name="database_import_label">Database import</string> + <string name="database_import_warning">Importing a database will replace all of your current subscriptions and playing history. You should export your current database as a backup. Do you want to replace?</string> <string name="please_wait">Please wait…</string> <string name="export_error_label">Export error</string> <string name="export_success_title">Export successful</string> @@ -730,6 +729,13 @@ <string name="sort_duration_short_long">Duration (Short \u2192 Long)</string> <string name="sort_duration_long_short">Duration (Long \u2192 Short)</string> + <string name="sort_a_z">A \u2192 Z</string> + <string name="sort_z_a">Z \u2192 A</string> + <string name="sort_new_old">New \u2192 Old</string> + <string name="sort_old_new">Old \u2192 New</string> + <string name="sort_short_long">Short \u2192 Long</string> + <string name="sort_long_short">Long \u2192 Short</string> + <!-- Rating dialog --> <string name="rating_title">Like AntennaPod?</string> <string name="rating_message">We would appreciate it if you take the time to rate AntennaPod.</string> diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index c880ba5c0..28747df30 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -38,7 +38,7 @@ <item name="navigation_up">@drawable/navigation_up</item> <item name="stat_playlist">@drawable/ic_playlist_black</item> <item name="type_video">@drawable/ic_videocam_black_24dp</item> - <item name="dragview_background">@drawable/ic_drag_vertical_grey600_48dp</item> + <item name="dragview_background">@drawable/ic_drag_lighttheme</item> <item name="drawer_activated_color">@color/highlight_light</item> <item name="ic_history">@drawable/ic_history_black</item> <item name="ic_folder">@drawable/ic_folder_black</item> @@ -108,7 +108,7 @@ <item name="navigation_up">@drawable/navigation_up_dark</item> <item name="stat_playlist">@drawable/ic_playlist_white</item> <item name="type_video">@drawable/ic_videocam_white_24dp</item> - <item name="dragview_background">@drawable/ic_drag_vertical_white_48dp</item> + <item name="dragview_background">@drawable/ic_drag_darktheme</item> <item name="drawer_activated_color">@color/highlight_dark</item> <item name="ic_history">@drawable/ic_history_white</item> <item name="ic_folder">@drawable/ic_folder_white</item> @@ -145,7 +145,6 @@ <style name="Theme.Base.AntennaPod.TrueBlack" parent="Theme.Base.AntennaPod.Dark"> <item name="progressBarTheme">@style/ProgressBarTrueBlack</item> - <item name="dragview_background">@drawable/ic_drag_vertical_white_48dp</item> <item name="batch_edit_fab_icon">@drawable/ic_fab_edit_black</item> <item name="drawer_activated_color">@color/highlight_trueblack</item> <item name="android:textColorPrimary">@color/white</item> diff --git a/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java b/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java index 5014a1fc5..48c3bfbfc 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java +++ b/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java @@ -1520,7 +1520,7 @@ public class CastManager extends BaseCastManager implements OnFailedListener { private void onQueueUpdated(List<MediaQueueItem> queueItems, MediaQueueItem item, int repeatMode, boolean shuffle) { Log.d(TAG, "onQueueUpdated() reached"); - Log.d(TAG, String.format("Queue Items size: %d, Item: %s, Repeat Mode: %d, Shuffle: %s", + Log.d(TAG, String.format(Locale.US, "Queue Items size: %d, Item: %s, Repeat Mode: %d, Shuffle: %s", queueItems == null ? 0 : queueItems.size(), item, repeatMode, shuffle)); if (queueItems != null) { mediaQueue = new MediaQueue(new CopyOnWriteArrayList<>(queueItems), item, shuffle, |