summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md7
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java3
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java5
-rw-r--r--app/src/androidTest/java/de/test/antennapod/util/service/download/HTTPBin.java4
-rw-r--r--app/src/main/AndroidManifest.xml1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/PlaybackControlsDialog.java5
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java34
-rw-r--r--app/src/main/res/layout/feeditemlist_item.xml11
-rw-r--r--app/src/main/res/layout/statistics_listitem_total.xml68
-rw-r--r--app/src/main/res/menu/queue.xml20
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java7
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java16
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java2
-rw-r--r--core/src/main/res/drawable-hdpi/ic_drag_vertical_grey600_48dp.9.pngbin289 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_drag_vertical_white_48dp.9.pngbin265 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_drag_vertical_grey600_48dp.9.pngbin202 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_drag_vertical_white_48dp.9.pngbin191 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_drag_vertical_grey600_48dp.9.pngbin379 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_drag_vertical_white_48dp.9.pngbin349 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_drag_vertical_grey600_48dp.9.pngbin593 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_drag_vertical_white_48dp.9.pngbin544 -> 0 bytes
-rw-r--r--core/src/main/res/drawable/ic_drag_darktheme.xml9
-rw-r--r--core/src/main/res/drawable/ic_drag_lighttheme.xml9
-rw-r--r--core/src/main/res/values/strings.xml10
-rw-r--r--core/src/main/res/values/styles.xml5
-rw-r--r--core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java2
31 files changed, 145 insertions, 89 deletions
diff --git a/README.md b/README.md
index db8039a28..7415764af 100644
--- a/README.md
+++ b/README.md
@@ -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
deleted file mode 100644
index a0b47594b..000000000
--- a/core/src/main/res/drawable-hdpi/ic_drag_vertical_grey600_48dp.9.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index a4ce8fa7e..000000000
--- a/core/src/main/res/drawable-hdpi/ic_drag_vertical_white_48dp.9.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 7cd66845b..000000000
--- a/core/src/main/res/drawable-mdpi/ic_drag_vertical_grey600_48dp.9.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 3d1fd0fe3..000000000
--- a/core/src/main/res/drawable-mdpi/ic_drag_vertical_white_48dp.9.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 83cb91561..000000000
--- a/core/src/main/res/drawable-xhdpi/ic_drag_vertical_grey600_48dp.9.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 4b030e169..000000000
--- a/core/src/main/res/drawable-xhdpi/ic_drag_vertical_white_48dp.9.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index dc8682716..000000000
--- a/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_grey600_48dp.9.png
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 808186aa9..000000000
--- a/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_white_48dp.9.png
+++ /dev/null
Binary files differ
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&#8230;</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,