Merge remote-tracking branch 'upstream/develop' into picture-in-picture

This commit is contained in:
ByteHamster 2018-04-02 22:19:09 +02:00
commit 02da84b93a
19 changed files with 374 additions and 326 deletions

View File

@ -1,6 +1,13 @@
Change Log
==========
Version 1.6.4
-------------
* Fixes issues on Android Oreo
* Avoids duplicate chapters
* Beta: Database import & export
Version 1.6.3
-------------

View File

@ -1,7 +1,6 @@
import org.apache.tools.ant.filters.ReplaceTokens
apply plugin: "com.android.application"
apply plugin: "me.tatarka.retrolambda"
apply plugin: 'com.github.triplet.play'
apply plugin: 'com.getkeepsafe.dexcount'
@ -113,10 +112,13 @@ android {
additionalParameters "--no-version-vectors"
}
flavorDimensions "market"
productFlavors {
free {
dimension "market"
}
play {
dimension "market"
}
}
@ -126,58 +128,58 @@ android {
}
configurations {
freeDebugCompile
freeReleaseCompile
playDebugCompile
playReleaseCompile
freeDebugImplementation
freeReleaseImplementation
playDebugImplementation
playReleaseImplementation
}
dependencies {
freeDebugCompile project(path: ":core", configuration: "freeDebug")
freeReleaseCompile project(path: ":core", configuration: "freeRelease")
freeImplementation project(":core")
// free build hack: skip some dependencies
if (!doFreeBuild()) {
playDebugCompile project(path: ":core", configuration: "playDebug")
playReleaseCompile project(path: ":core", configuration: "playRelease")
playImplementation project(":core")
} else {
System.out.println("app: free build hack, skipping some dependencies")
}
compile "com.android.support:support-v4:$supportVersion"
compile "com.android.support:appcompat-v7:$supportVersion"
compile "com.android.support:design:$supportVersion"
compile "com.android.support:gridlayout-v7:$supportVersion"
compile "com.android.support:percent:$supportVersion"
compile "com.android.support:recyclerview-v7:$supportVersion"
compile "org.apache.commons:commons-lang3:$commonslangVersion"
compile("org.shredzone.flattr4j:flattr4j-core:$flattr4jVersion") {
implementation "com.android.support:support-v4:$supportVersion"
implementation "com.android.support:appcompat-v7:$supportVersion"
implementation "com.android.support:design:$supportVersion"
implementation "com.android.support:gridlayout-v7:$supportVersion"
implementation "com.android.support:percent:$supportVersion"
implementation "com.android.support:recyclerview-v7:$supportVersion"
implementation "org.apache.commons:commons-lang3:$commonslangVersion"
implementation("org.shredzone.flattr4j:flattr4j-core:$flattr4jVersion") {
exclude group: "org.json", module: "json"
}
compile "commons-io:commons-io:$commonsioVersion"
compile "org.jsoup:jsoup:$jsoupVersion"
compile "com.github.bumptech.glide:glide:$glideVersion"
compile "com.squareup.okhttp3:okhttp:$okhttpVersion"
compile "com.squareup.okhttp3:okhttp-urlconnection:$okhttpVersion"
compile "com.squareup.okio:okio:$okioVersion"
compile "de.greenrobot:eventbus:$eventbusVersion"
compile "io.reactivex:rxandroid:$rxAndroidVersion"
compile "io.reactivex:rxjava:$rxJavaVersion"
implementation "commons-io:commons-io:$commonsioVersion"
implementation "org.jsoup:jsoup:$jsoupVersion"
implementation "com.github.bumptech.glide:glide:$glideVersion"
implementation "com.squareup.okhttp3:okhttp:$okhttpVersion"
implementation "com.squareup.okhttp3:okhttp-urlconnection:$okhttpVersion"
implementation "com.squareup.okio:okio:$okioVersion"
implementation "de.greenrobot:eventbus:$eventbusVersion"
implementation "io.reactivex:rxandroid:$rxAndroidVersion"
implementation "io.reactivex:rxjava:$rxJavaVersion"
// And ProGuard rules for RxJava!
compile "com.artemzin.rxjava:proguard-rules:$rxJavaRulesVersion"
compile "com.joanzapata.iconify:android-iconify-fontawesome:$iconifyVersion"
compile "com.joanzapata.iconify:android-iconify-material:$iconifyVersion"
compile("com.afollestad.material-dialogs:commons:$materialDialogsVersion") {
implementation "com.artemzin.rxjava:proguard-rules:$rxJavaRulesVersion"
implementation "com.joanzapata.iconify:android-iconify-fontawesome:$iconifyVersion"
implementation "com.joanzapata.iconify:android-iconify-material:$iconifyVersion"
implementation("com.afollestad.material-dialogs:commons:$materialDialogsVersion") {
transitive = true
}
compile "com.yqritc:recyclerview-flexibledivider:$recyclerviewFlexibledividerVersion"
compile("com.githang:viewpagerindicator:2.5@aar") {
implementation "com.yqritc:recyclerview-flexibledivider:$recyclerviewFlexibledividerVersion"
implementation("com.githang:viewpagerindicator:2.5@aar") {
exclude module: "support-v4"
}
compile "com.github.shts:TriangleLabelView:$triangleLabelViewVersion"
implementation "com.github.shts:TriangleLabelView:$triangleLabelViewVersion"
compile "com.github.AntennaPod:AntennaPod-AudioPlayer:$audioPlayerVersion"
implementation "com.github.AntennaPod:AntennaPod-AudioPlayer:$audioPlayerVersion"
compile 'com.github.mfietz:fyydlin:v0.3'
implementation 'com.github.mfietz:fyydlin:v0.3'
androidTestImplementation "com.jayway.android.robotium:robotium-solo:$robotiumSoloVersion"
}
play {

View File

@ -2,8 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.danoeh.antennapod"
android:installLocation="auto"
android:versionCode="1060402"
android:versionName="1.6.4.2">
android:versionCode="1060405"
android:versionName="1.6.4.5">
<!--
Version code schema:
"1.2.3-SNAPSHOT" -> 1020300

View File

@ -389,17 +389,29 @@ public class QueueFragment extends Fragment {
itemTouchHelper = new ItemTouchHelper(
new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT) {
// Position tracking whilst dragging
int dragFrom = -1;
int dragTo = -1;
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
int fromPosition = viewHolder.getAdapterPosition();
int toPosition = target.getAdapterPosition();
// Update tracked position
if(dragFrom == -1) {
dragFrom = fromPosition;
}
dragTo = toPosition;
int from = viewHolder.getAdapterPosition();
int to = target.getAdapterPosition();
Log.d(TAG, "move(" + from + ", " + to + ")");
Log.d(TAG, "move(" + from + ", " + to + ") in memory");
if(from >= queue.size() || to >= queue.size()) {
return false;
}
queue.add(to, queue.remove(from));
recyclerAdapter.notifyItemMoved(from, to);
DBWriter.moveQueueItem(from, to, true);
return true;
}
@ -453,12 +465,25 @@ public class QueueFragment extends Fragment {
RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
// Check if drag finished
if(dragFrom != -1 && dragTo != -1 && dragFrom != dragTo) {
reallyMoved(dragFrom, dragTo);
}
dragFrom = dragTo = -1;
if (viewHolder instanceof QueueRecyclerAdapter.ItemTouchHelperViewHolder) {
QueueRecyclerAdapter.ItemTouchHelperViewHolder itemViewHolder =
(QueueRecyclerAdapter.ItemTouchHelperViewHolder) viewHolder;
itemViewHolder.onItemClear();
}
}
private void reallyMoved(int from, int to) {
// Write drag operation to database
Log.d(TAG, "Write to database move(" + dragFrom + ", " + dragTo + ")");
DBWriter.moveQueueItem(dragFrom, dragTo, true);
}
}
);
itemTouchHelper.attachToRecyclerView(recyclerView);

View File

@ -764,6 +764,10 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
}
}
private static String blankIfNull(String val) {
return val == null ? "" : val;
}
private void buildAutodownloadSelectedNetworsPreference() {
final Activity activity = ui.getActivity();
@ -778,7 +782,8 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
Log.e(TAG, "Couldn't get list of configure Wi-Fi networks");
return;
}
Collections.sort(networks, (x, y) -> x.SSID.compareTo(y.SSID));
Collections.sort(networks, (x, y) ->
blankIfNull(x.SSID).compareTo(blankIfNull(y.SSID)));
selectedNetworks = new CheckBoxPreference[networks.size()];
List<String> prefValues = Arrays.asList(UserPreferences
.getAutodownloadSelectedNetworks());

View File

@ -4,12 +4,11 @@ buildscript {
repositories {
jcenter()
mavenCentral()
google()
}
dependencies {
classpath "com.android.tools.build:gradle:2.3.3"
classpath "me.tatarka:gradle-retrolambda:3.7.0"
classpath "me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2"
classpath "com.github.triplet.gradle:play-publisher:1.1.4"
classpath "com.android.tools.build:gradle:3.0.1"
classpath "com.github.triplet.gradle:play-publisher:1.2.0"
// Exclude the version that the android plugin depends on.
configurations.classpath.exclude group: "com.android.tools.external.lombok"
}
@ -18,6 +17,7 @@ buildscript {
allprojects {
repositories {
jcenter()
google()
}
}
@ -38,7 +38,7 @@ subprojects {
project.ext {
compileSdkVersion = 25
buildToolsVersion = "25.0.3"
buildToolsVersion = "27.0.3"
minSdkVersion = 14
targetSdkVersion = 25

View File

@ -3,7 +3,8 @@ general:
- app/build/outputs/apk
machine:
environment:
GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError"'
GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx1536m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError"'
_JAVA_OPTIONS: "-Xms256m -Xmx1280m -XX:MaxPermSize=350m"
java:
version: oraclejdk8
dependencies:
@ -12,11 +13,11 @@ dependencies:
- ~/android
pre:
- echo y | android update sdk --no-ui --all --filter "tool,extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository,android-25"
- echo y | android update sdk --no-ui --all --filter "build-tools-25.0.3"
- echo y | android update sdk --no-ui --all --filter "build-tools-27.0.3"
override:
- echo override dependencies
test:
override:
- ./gradlew assembleDebug -PdisablePreDex:
timeout: 1800
timeout: 1800

View File

@ -1,5 +1,4 @@
apply plugin: "com.android.library"
apply plugin: "me.tatarka.retrolambda"
android {
compileSdkVersion rootProject.ext.compileSdkVersion
@ -30,11 +29,13 @@ android {
targetCompatibility JavaVersion.VERSION_1_8
}
publishNonDefault true
flavorDimensions "market"
productFlavors {
free {
dimension "market"
}
play {
dimension "market"
}
}
@ -46,32 +47,32 @@ repositories {
}
dependencies {
compile "com.android.support:support-v4:$supportVersion"
compile "com.android.support:appcompat-v7:$supportVersion"
compile "org.apache.commons:commons-lang3:$commonslangVersion"
compile ("org.shredzone.flattr4j:flattr4j-core:$flattr4jVersion") {
implementation "com.android.support:support-v4:$supportVersion"
implementation "com.android.support:appcompat-v7:$supportVersion"
implementation "org.apache.commons:commons-lang3:$commonslangVersion"
implementation ("org.shredzone.flattr4j:flattr4j-core:$flattr4jVersion") {
exclude group: "org.json", module: "json"
}
compile "commons-io:commons-io:$commonsioVersion"
compile "com.jayway.android.robotium:robotium-solo:$robotiumSoloVersion"
compile "org.jsoup:jsoup:$jsoupVersion"
compile "com.github.bumptech.glide:glide:$glideVersion"
compile "com.github.bumptech.glide:okhttp3-integration:$glideOkhttpIntegrationVersion@aar"
compile "com.squareup.okhttp3:okhttp:$okhttpVersion"
compile "com.squareup.okhttp3:okhttp-urlconnection:$okhttpVersion"
compile "com.squareup.okio:okio:$okioVersion"
compile "de.greenrobot:eventbus:$eventbusVersion"
compile "io.reactivex:rxandroid:$rxAndroidVersion"
implementation "commons-io:commons-io:$commonsioVersion"
implementation "com.jayway.android.robotium:robotium-solo:$robotiumSoloVersion"
implementation "org.jsoup:jsoup:$jsoupVersion"
implementation "com.github.bumptech.glide:glide:$glideVersion"
implementation "com.github.bumptech.glide:okhttp3-integration:$glideOkhttpIntegrationVersion@aar"
implementation "com.squareup.okhttp3:okhttp:$okhttpVersion"
implementation "com.squareup.okhttp3:okhttp-urlconnection:$okhttpVersion"
implementation "com.squareup.okio:okio:$okioVersion"
implementation "de.greenrobot:eventbus:$eventbusVersion"
implementation "io.reactivex:rxandroid:$rxAndroidVersion"
compile "com.github.AntennaPod:AntennaPod-AudioPlayer:$audioPlayerVersion"
implementation "com.github.AntennaPod:AntennaPod-AudioPlayer:$audioPlayerVersion"
// Add casting features
// free build hack: skip some dependencies
if (!doFreeBuild()) {
playCompile "com.google.android.libraries.cast.companionlibrary:ccl:$castCompanionLibVer"
compile "com.android.support:mediarouter-v7:$supportVersion"
playCompile "com.google.android.gms:play-services-cast:$playServicesVersion"
compile "com.google.android.support:wearable:$wearableSupportVersion"
playApi "com.google.android.libraries.cast.companionlibrary:ccl:$castCompanionLibVer"
api "com.android.support:mediarouter-v7:$supportVersion"
playApi "com.google.android.gms:play-services-cast:$playServicesVersion"
api "com.google.android.support:wearable:$wearableSupportVersion"
} else {
System.out.println("core: free build hack, skipping some dependencies")
}

View File

@ -305,8 +305,10 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
if (super.compareWithOther(other)) {
return true;
}
if(other.image != null && !TextUtils.equals(image.download_url, other.image.download_url)) {
return true;
if (other.image != null) {
if (image == null || !TextUtils.equals(image.download_url, other.image.download_url)) {
return true;
}
}
if (!TextUtils.equals(feedTitle, other.feedTitle)) {
return true;

View File

@ -339,12 +339,9 @@ public class DownloadService extends Service {
}
private void setupNotificationBuilders() {
Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.stat_notify_sync);
notificationCompatBuilder = new NotificationCompat.Builder(this)
.setOngoing(true)
.setContentIntent(ClientConfig.downloadServiceCallbacks.getNotificationContentIntent(this))
.setLargeIcon(icon)
.setSmallIcon(R.drawable.stat_notify_sync);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
notificationCompatBuilder.setVisibility(Notification.VISIBILITY_PUBLIC);
@ -511,10 +508,6 @@ public class DownloadService extends Service {
successfulDownloads, failedDownloads)
)
.setSmallIcon(R.drawable.stat_notify_sync_error)
.setLargeIcon(
BitmapFactory.decodeResource(getResources(),
R.drawable.stat_notify_sync_error)
)
.setContentIntent(
ClientConfig.downloadServiceCallbacks.getReportNotificationContentIntent(this)
)
@ -565,7 +558,6 @@ public class DownloadService extends Service {
.setStyle(new NotificationCompat.BigTextStyle().bigText(getText(R.string.authentication_notification_msg)
+ ": " + resourceTitle))
.setSmallIcon(R.drawable.ic_stat_authentication)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_stat_authentication))
.setAutoCancel(true)
.setContentIntent(ClientConfig.downloadServiceCallbacks.getAuthentificationNotificationContentIntent(DownloadService.this, downloadRequest));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

View File

@ -93,7 +93,7 @@ public class HttpDownloader extends Downloader {
// add range header if necessary
if (fileExists) {
if (fileExists && destination.length() > 0) {
request.setSoFar(destination.length());
httpReq.addHeader("Range", "bytes=" + request.getSoFar() + "-");
Log.d(TAG, "Adding range header: " + request.getSoFar());

View File

@ -11,6 +11,7 @@ import android.view.SurfaceHolder;
import org.antennapod.audio.MediaPlayer;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Future;
@ -165,8 +166,10 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
callback.onMediaChanged(false);
if (stream) {
mediaPlayer.setDataSource(media.getStreamUrl());
} else {
} else if (new File(media.getLocalMediaUrl()).canRead()) {
mediaPlayer.setDataSource(media.getLocalMediaUrl());
} else {
throw new IOException("Unable to read local file " + media.getLocalMediaUrl());
}
setPlayerStatus(PlayerStatus.INITIALIZED, media);

View File

@ -3,7 +3,9 @@ package de.danoeh.antennapod.core.storage;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.DatabaseUtils;
import android.database.DefaultDatabaseErrorHandler;
import android.database.MergeCursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
@ -13,13 +15,12 @@ import android.media.MediaMetadataRetriever;
import android.text.TextUtils;
import android.util.Log;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import de.danoeh.antennapod.core.R;
import de.danoeh.antennapod.core.event.ProgressEvent;
@ -35,6 +36,7 @@ import de.danoeh.antennapod.core.service.download.DownloadStatus;
import de.danoeh.antennapod.core.util.LongIntMap;
import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
import de.greenrobot.event.EventBus;
import org.apache.commons.io.FileUtils;
// TODO Remove media column from feeditem table
@ -309,8 +311,7 @@ public class PodDBAdapter {
private static PodDBHelper dbHelper;
private static volatile SQLiteDatabase db;
private static final Lock dbLock = new ReentrantLock();
private static final AtomicInteger counter = new AtomicInteger(0);
private static int counter = 0;
public static void init(Context context) {
PodDBAdapter.context = context.getApplicationContext();
@ -328,25 +329,18 @@ public class PodDBAdapter {
private PodDBAdapter() {
}
public PodDBAdapter open() {
int adapters = counter.incrementAndGet();
Log.v(TAG, "Opening DB #" + adapters);
public synchronized PodDBAdapter open() {
counter++;
Log.v(TAG, "Opening DB #" + counter);
if ((db == null) || (!db.isOpen()) || (db.isReadOnly())) {
try {
dbLock.lock();
if ((db == null) || (!db.isOpen()) || (db.isReadOnly())) {
db = openDb();
}
} finally {
dbLock.unlock();
}
if (db == null || !db.isOpen() || db.isReadOnly()) {
db = openDb();
}
return this;
}
private SQLiteDatabase openDb() {
SQLiteDatabase newDb = null;
SQLiteDatabase newDb;
try {
newDb = dbHelper.getWritableDatabase();
newDb.enableWriteAheadLogging();
@ -357,19 +351,14 @@ public class PodDBAdapter {
return newDb;
}
public void close() {
int adapters = counter.decrementAndGet();
Log.v(TAG, "Closing DB #" + adapters);
public synchronized void close() {
counter--;
Log.v(TAG, "Closing DB #" + counter);
if (adapters == 0) {
if (counter == 0) {
Log.v(TAG, "Closing DB, really");
try {
dbLock.lock();
db.close();
db = null;
} finally {
dbLock.unlock();
}
db.close();
db = null;
}
}
@ -1656,6 +1645,28 @@ public class PodDBAdapter {
return db.rawQuery(FEED_STATISTICS_QUERY, null);
}
/**
* Called when a database corruption happens
*/
public static class PodDbErrorHandler implements DatabaseErrorHandler {
@Override
public void onCorruption(SQLiteDatabase db) {
Log.e(TAG, "Database corrupted: " + db.getPath());
File dbPath = new File(db.getPath());
File backupFolder = PodDBAdapter.context.getExternalFilesDir(null);
File backupFile = new File(backupFolder, "CorruptedDatabaseBackup.db");
try {
FileUtils.copyFile(dbPath, backupFile);
Log.d(TAG, "Dumped database to " + backupFile.getPath());
} catch (IOException e) {
Log.d(TAG, Log.getStackTraceString(e));
}
new DefaultDatabaseErrorHandler().onCorruption(db); // This deletes the database
}
}
/**
* Helper class for opening the Antennapod database.
*/
@ -1674,7 +1685,7 @@ public class PodDBAdapter {
*/
public PodDBHelper(final Context context, final String name,
final CursorFactory factory) {
super(context, name, factory, VERSION);
super(context, name, factory, VERSION, new PodDbErrorHandler());
this.context = context;
}

View File

@ -37,7 +37,7 @@ public class HandlerState {
/**
* Buffer for saving characters.
*/
StringBuffer contentBuf;
protected StringBuilder contentBuf;
/**
* Temporarily saved objects.
@ -97,7 +97,7 @@ public class HandlerState {
return third;
}
public StringBuffer getContentBuf() {
public StringBuilder getContentBuf() {
return contentBuf;
}

View File

@ -33,7 +33,7 @@ class SyndHandler extends DefaultHandler {
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
state.contentBuf = new StringBuffer();
state.contentBuf = new StringBuilder();
Namespace handler = getHandlingNamespace(uri, qName);
if (handler != null) {
SyndElement element = handler.handleElementStart(localName, state,

View File

@ -43,7 +43,7 @@ public class ChapterReader extends ID3Reader {
currentChapter = null;
}
}
StringBuffer elementId = new StringBuffer();
StringBuilder elementId = new StringBuilder();
readISOString(elementId, input, Integer.MAX_VALUE);
char[] startTimeSource = readBytes(input, 4);
long startTime = ((int) startTimeSource[0] << 24)
@ -54,7 +54,7 @@ public class ChapterReader extends ID3Reader {
return ID3Reader.ACTION_DONT_SKIP;
case FRAME_ID_TITLE:
if (currentChapter != null && currentChapter.getTitle() == null) {
StringBuffer title = new StringBuffer();
StringBuilder title = new StringBuilder();
readString(title, input, header.getSize());
currentChapter
.setTitle(title.toString());
@ -67,7 +67,7 @@ public class ChapterReader extends ID3Reader {
if (currentChapter != null) {
// skip description
int descriptionLength = readString(null, input, header.getSize());
StringBuffer link = new StringBuffer();
StringBuilder link = new StringBuilder();
readISOString(link, input, header.getSize() - descriptionLength);
String decodedLink = URLDecoder.decode(link.toString(), "UTF-8");

View File

@ -170,7 +170,7 @@ public class ID3Reader {
return out;
}
int readString(StringBuffer buffer, InputStream input, int max) throws IOException,
protected int readString(StringBuilder buffer, InputStream input, int max) throws IOException,
ID3ReaderException {
if (max > 0) {
char[] encoding = readBytes(input, 1);
@ -191,9 +191,8 @@ public class ID3Reader {
}
}
int readISOString(StringBuffer buffer, InputStream input, int max)
throws IOException {
protected int readISOString(StringBuilder buffer, InputStream input, int max)
throws IOException, ID3ReaderException {
int bytesRead = 0;
char c;
while (++bytesRead <= max && (c = (char) input.read()) > 0) {
@ -204,8 +203,8 @@ public class ID3Reader {
return bytesRead;
}
private int readUnicodeString(StringBuffer strBuffer, InputStream input, int max, Charset charset)
throws IOException {
private int readUnicodeString(StringBuilder strBuffer, InputStream input, int max, Charset charset)
throws IOException, ID3ReaderException {
byte[] buffer = new byte[max];
int c, cZero = -1;
int i = 0;

View File

@ -668,7 +668,7 @@
<string name="label_import">Import</string>
<string name="label_export">Export</string>
<string name="import_select_file">Select file to import</string>
<string name="export_ok">Export successful. The database was written to the SD card.</string>
<string name="export_ok">Export successful.</string>
<string name="import_ok">Import successful.\n\nPlease press OK to restart AntennaPod</string>
<!-- Casting -->

View File

@ -11,57 +11,57 @@
<item name="progressBarTheme">@style/ProgressBarLight</item>
<item name="buttonStyle">@style/Widget.AntennaPod.Button</item>
<item name="alertDialogTheme">@style/AntennaPod.Dialog.Light</item>
<item name="attr/action_bar_icon_color">@color/grey600</item>
<item name="attr/action_about">@drawable/ic_info_grey600_24dp</item>
<item name="attr/action_search">@drawable/ic_search_grey600_24dp</item>
<item name="attr/action_stream">@drawable/ic_settings_input_antenna_grey600_24dp</item>
<item name="attr/av_download">@drawable/ic_file_download_grey600_24dp</item>
<item name="attr/av_fast_forward">@drawable/ic_fast_forward_grey600_24dp</item>
<item name="attr/av_pause">@drawable/ic_pause_grey600_24dp</item>
<item name="attr/av_play">@drawable/ic_play_arrow_grey600_24dp</item>
<item name="attr/av_rewind">@drawable/ic_fast_rewind_grey600_24dp</item>
<item name="attr/content_discard">@drawable/ic_delete_grey600_24dp</item>
<item name="attr/content_new">@drawable/ic_add_grey600_24dp</item>
<item name="attr/feed">@drawable/ic_feed_grey600_24dp</item>
<item name="attr/location_web_site">@drawable/ic_web_grey600_24dp</item>
<item name="attr/navigation_accept">@drawable/ic_done_grey600_24dp</item>
<item name="attr/navigation_cancel">@drawable/ic_cancel_grey600_24dp</item>
<item name="attr/navigation_expand">@drawable/ic_expand_more_grey600_36dp</item>
<item name="attr/navigation_refresh">@drawable/ic_refresh_grey600_24dp</item>
<item name="attr/navigation_up">@drawable/navigation_up</item>
<item name="attr/social_share">@drawable/ic_share_grey600_24dp</item>
<item name="attr/stat_playlist">@drawable/ic_list_grey600_24dp</item>
<item name="attr/type_audio">@drawable/ic_hearing_grey600_18dp</item>
<item name="attr/type_video">@drawable/ic_remove_red_eye_grey600_18dp</item>
<item name="attr/non_transparent_background">@color/white</item>
<item name="attr/overlay_background">@color/overlay_light</item>
<item name="attr/overlay_drawable">@drawable/overlay_drawable</item>
<item name="attr/dragview_background">@drawable/ic_drag_vertical_grey600_48dp</item>
<item name="attr/dragview_float_background">@color/white</item>
<item name="attr/nav_drawer_background">@color/white</item>
<item name="attr/ic_new">@drawable/ic_new_releases_grey600_24dp</item>
<item name="attr/ic_history">@drawable/ic_history_grey600_24dp</item>
<item name="attr/ic_folder">@drawable/ic_folder_grey600_24dp</item>
<item name="attr/av_play_big">@drawable/ic_play_arrow_grey600_36dp</item>
<item name="attr/av_pause_big">@drawable/ic_pause_grey600_36dp</item>
<item name="attr/av_ff_big">@drawable/ic_fast_forward_grey600_36dp</item>
<item name="attr/av_rew_big">@drawable/ic_fast_rewind_grey600_36dp</item>
<item name="attr/av_skip_big">@drawable/ic_skip_grey600_36dp</item>
<item name="attr/ic_fav">@drawable/ic_star_border_grey600_24dp</item>
<item name="attr/ic_unfav">@drawable/ic_star_grey600_24dp</item>
<item name="attr/ic_settings">@drawable/ic_settings_grey600_24dp</item>
<item name="attr/ic_lock_open">@drawable/ic_lock_open_grey600_24dp</item>
<item name="attr/ic_lock_closed">@drawable/ic_lock_closed_grey600_24dp</item>
<item name="attr/ic_filter">@drawable/ic_filter_grey600_24dp</item>
<item name="attr/ic_sleep">@drawable/ic_sleep_grey600_24dp</item>
<item name="attr/ic_sleep_off">@drawable/ic_sleep_off_grey600_24dp</item>
<item name="attr/ic_check_box">@drawable/ic_check_box_grey600_24dp</item>
<item name="attr/ic_check_box_outline">@drawable/ic_check_box_outline_blank_grey600_24dp</item>
<item name="attr/ic_indeterminate_check_box">@drawable/ic_indeterminate_check_box_grey600_24dp</item>
<item name="attr/ic_sort">@drawable/ic_sort_grey600_24dp</item>
<item name="attr/ic_sd_storage">@drawable/ic_sd_storage_grey600_36dp</item>
<item name="attr/ic_create_new_folder">@drawable/ic_create_new_folder_grey600_24dp</item>
<item name="attr/ic_cast_disconnect">@drawable/ic_cast_disconnect_grey600_36dp</item>
<item type="attr" name="action_bar_icon_color">@color/grey600</item>
<item type="attr" name="action_about">@drawable/ic_info_grey600_24dp</item>
<item type="attr" name="action_search">@drawable/ic_search_grey600_24dp</item>
<item type="attr" name="action_stream">@drawable/ic_settings_input_antenna_grey600_24dp</item>
<item type="attr" name="av_download">@drawable/ic_file_download_grey600_24dp</item>
<item type="attr" name="av_fast_forward">@drawable/ic_fast_forward_grey600_24dp</item>
<item type="attr" name="av_pause">@drawable/ic_pause_grey600_24dp</item>
<item type="attr" name="av_play">@drawable/ic_play_arrow_grey600_24dp</item>
<item type="attr" name="av_rewind">@drawable/ic_fast_rewind_grey600_24dp</item>
<item type="attr" name="content_discard">@drawable/ic_delete_grey600_24dp</item>
<item type="attr" name="content_new">@drawable/ic_add_grey600_24dp</item>
<item type="attr" name="feed">@drawable/ic_feed_grey600_24dp</item>
<item type="attr" name="location_web_site">@drawable/ic_web_grey600_24dp</item>
<item type="attr" name="navigation_accept">@drawable/ic_done_grey600_24dp</item>
<item type="attr" name="navigation_cancel">@drawable/ic_cancel_grey600_24dp</item>
<item type="attr" name="navigation_expand">@drawable/ic_expand_more_grey600_36dp</item>
<item type="attr" name="navigation_refresh">@drawable/ic_refresh_grey600_24dp</item>
<item type="attr" name="navigation_up">@drawable/navigation_up</item>
<item type="attr" name="social_share">@drawable/ic_share_grey600_24dp</item>
<item type="attr" name="stat_playlist">@drawable/ic_list_grey600_24dp</item>
<item type="attr" name="type_audio">@drawable/ic_hearing_grey600_18dp</item>
<item type="attr" name="type_video">@drawable/ic_remove_red_eye_grey600_18dp</item>
<item type="attr" name="non_transparent_background">@color/white</item>
<item type="attr" name="overlay_background">@color/overlay_light</item>
<item type="attr" name="overlay_drawable">@drawable/overlay_drawable</item>
<item type="attr" name="dragview_background">@drawable/ic_drag_vertical_grey600_48dp</item>
<item type="attr" name="dragview_float_background">@color/white</item>
<item type="attr" name="nav_drawer_background">@color/white</item>
<item type="attr" name="ic_new">@drawable/ic_new_releases_grey600_24dp</item>
<item type="attr" name="ic_history">@drawable/ic_history_grey600_24dp</item>
<item type="attr" name="ic_folder">@drawable/ic_folder_grey600_24dp</item>
<item type="attr" name="av_play_big">@drawable/ic_play_arrow_grey600_36dp</item>
<item type="attr" name="av_pause_big">@drawable/ic_pause_grey600_36dp</item>
<item type="attr" name="av_ff_big">@drawable/ic_fast_forward_grey600_36dp</item>
<item type="attr" name="av_rew_big">@drawable/ic_fast_rewind_grey600_36dp</item>
<item type="attr" name="av_skip_big">@drawable/ic_skip_grey600_36dp</item>
<item type="attr" name="ic_fav">@drawable/ic_star_border_grey600_24dp</item>
<item type="attr" name="ic_unfav">@drawable/ic_star_grey600_24dp</item>
<item type="attr" name="ic_settings">@drawable/ic_settings_grey600_24dp</item>
<item type="attr" name="ic_lock_open">@drawable/ic_lock_open_grey600_24dp</item>
<item type="attr" name="ic_lock_closed">@drawable/ic_lock_closed_grey600_24dp</item>
<item type="attr" name="ic_filter">@drawable/ic_filter_grey600_24dp</item>
<item type="attr" name="ic_sleep">@drawable/ic_sleep_grey600_24dp</item>
<item type="attr" name="ic_sleep_off">@drawable/ic_sleep_off_grey600_24dp</item>
<item type="attr" name="ic_check_box">@drawable/ic_check_box_grey600_24dp</item>
<item type="attr" name="ic_check_box_outline">@drawable/ic_check_box_outline_blank_grey600_24dp</item>
<item type="attr" name="ic_indeterminate_check_box">@drawable/ic_indeterminate_check_box_grey600_24dp</item>
<item type="attr" name="ic_sort">@drawable/ic_sort_grey600_24dp</item>
<item type="attr" name="ic_sd_storage">@drawable/ic_sd_storage_grey600_36dp</item>
<item type="attr" name="ic_create_new_folder">@drawable/ic_create_new_folder_grey600_24dp</item>
<item type="attr" name="ic_cast_disconnect">@drawable/ic_cast_disconnect_grey600_36dp</item>
</style>
<style name="Theme.AntennaPod.Dark" parent="Theme.Base.AntennaPod.Dark">
@ -74,57 +74,57 @@
<item name="buttonStyle">@style/Widget.AntennaPod.Button</item>
<item name="progressBarTheme">@style/ProgressBarDark</item>
<item name="alertDialogTheme">@style/AntennaPod.Dialog.Dark</item>
<item name="attr/action_bar_icon_color">@color/white</item>
<item name="attr/action_about">@drawable/ic_info_white_24dp</item>g
<item name="attr/action_search">@drawable/ic_search_white_24dp</item>
<item name="attr/action_stream">@drawable/ic_settings_input_antenna_white_24dp</item>
<item name="attr/av_download">@drawable/ic_file_download_white_24dp</item>
<item name="attr/av_fast_forward">@drawable/ic_fast_forward_white_24dp</item>
<item name="attr/av_pause">@drawable/ic_pause_white_24dp</item>
<item name="attr/av_play">@drawable/ic_play_arrow_white_24dp</item>
<item name="attr/av_rewind">@drawable/ic_fast_rewind_white_24dp</item>
<item name="attr/content_discard">@drawable/ic_delete_white_24dp</item>
<item name="attr/content_new">@drawable/ic_add_white_24dp</item>
<item name="attr/feed">@drawable/ic_feed_white_24dp</item>
<item name="attr/location_web_site">@drawable/ic_web_white_24dp</item>
<item name="attr/navigation_accept">@drawable/ic_done_white_24dp</item>
<item name="attr/navigation_cancel">@drawable/ic_cancel_white_24dp</item>
<item name="attr/navigation_expand">@drawable/ic_expand_more_white_36dp</item>
<item name="attr/navigation_refresh">@drawable/ic_refresh_white_24dp</item>
<item name="attr/navigation_up">@drawable/navigation_up_dark</item>
<item name="attr/social_share">@drawable/ic_share_white_24dp</item>
<item name="attr/stat_playlist">@drawable/ic_list_white_24dp</item>
<item name="attr/type_audio">@drawable/ic_hearing_white_18dp</item>
<item name="attr/type_video">@drawable/ic_remove_red_eye_white_18dp</item>
<item name="attr/non_transparent_background">@color/black</item>
<item name="attr/overlay_background">@color/overlay_dark</item>
<item name="attr/overlay_drawable">@drawable/overlay_drawable_dark</item>
<item name="attr/dragview_background">@drawable/ic_drag_vertical_white_48dp</item>
<item name="attr/dragview_float_background">@color/black</item>
<item name="attr/nav_drawer_background">#3B3B3B</item>
<item name="attr/ic_new">@drawable/ic_new_releases_white_24dp</item>
<item name="attr/ic_history">@drawable/ic_history_white_24dp</item>
<item name="attr/ic_folder">@drawable/ic_folder_white_24dp</item>
<item name="attr/av_play_big">@drawable/ic_play_arrow_white_36dp</item>
<item name="attr/av_pause_big">@drawable/ic_pause_white_36dp</item>
<item name="attr/av_ff_big">@drawable/ic_fast_forward_white_36dp</item>
<item name="attr/av_rew_big">@drawable/ic_fast_rewind_white_36dp</item>
<item name="attr/av_skip_big">@drawable/ic_skip_white_36dp</item>
<item name="attr/ic_fav">@drawable/ic_star_border_white_24dp</item>
<item name="attr/ic_unfav">@drawable/ic_star_white_24dp</item>
<item name="attr/ic_settings">@drawable/ic_settings_white_24dp</item>
<item name="attr/ic_lock_open">@drawable/ic_lock_open_white_24dp</item>
<item name="attr/ic_lock_closed">@drawable/ic_lock_closed_white_24dp</item>
<item name="attr/ic_filter">@drawable/ic_filter_white_24dp</item>
<item name="attr/ic_sleep">@drawable/ic_sleep_white_24dp</item>
<item name="attr/ic_sleep_off">@drawable/ic_sleep_off_white_24dp</item>
<item name="attr/ic_check_box">@drawable/ic_check_box_white_24dp</item>
<item name="attr/ic_check_box_outline">@drawable/ic_check_box_outline_blank_white_24dp</item>
<item name="attr/ic_indeterminate_check_box">@drawable/ic_indeterminate_check_box_white_24dp</item>
<item name="attr/ic_sort">@drawable/ic_sort_white_24dp</item>
<item name="attr/ic_sd_storage">@drawable/ic_sd_storage_white_36dp</item>
<item name="attr/ic_create_new_folder">@drawable/ic_create_new_folder_white_24dp</item>
<item name="attr/ic_cast_disconnect">@drawable/ic_cast_disconnect_white_36dp</item>
<item type="attr" name="action_bar_icon_color">@color/white</item>
<item type="attr" name="action_about">@drawable/ic_info_white_24dp</item>g
<item type="attr" name="action_search">@drawable/ic_search_white_24dp</item>
<item type="attr" name="action_stream">@drawable/ic_settings_input_antenna_white_24dp</item>
<item type="attr" name="av_download">@drawable/ic_file_download_white_24dp</item>
<item type="attr" name="av_fast_forward">@drawable/ic_fast_forward_white_24dp</item>
<item type="attr" name="av_pause">@drawable/ic_pause_white_24dp</item>
<item type="attr" name="av_play">@drawable/ic_play_arrow_white_24dp</item>
<item type="attr" name="av_rewind">@drawable/ic_fast_rewind_white_24dp</item>
<item type="attr" name="content_discard">@drawable/ic_delete_white_24dp</item>
<item type="attr" name="content_new">@drawable/ic_add_white_24dp</item>
<item type="attr" name="feed">@drawable/ic_feed_white_24dp</item>
<item type="attr" name="location_web_site">@drawable/ic_web_white_24dp</item>
<item type="attr" name="navigation_accept">@drawable/ic_done_white_24dp</item>
<item type="attr" name="navigation_cancel">@drawable/ic_cancel_white_24dp</item>
<item type="attr" name="navigation_expand">@drawable/ic_expand_more_white_36dp</item>
<item type="attr" name="navigation_refresh">@drawable/ic_refresh_white_24dp</item>
<item type="attr" name="navigation_up">@drawable/navigation_up_dark</item>
<item type="attr" name="social_share">@drawable/ic_share_white_24dp</item>
<item type="attr" name="stat_playlist">@drawable/ic_list_white_24dp</item>
<item type="attr" name="type_audio">@drawable/ic_hearing_white_18dp</item>
<item type="attr" name="type_video">@drawable/ic_remove_red_eye_white_18dp</item>
<item type="attr" name="non_transparent_background">@color/black</item>
<item type="attr" name="overlay_background">@color/overlay_dark</item>
<item type="attr" name="overlay_drawable">@drawable/overlay_drawable_dark</item>
<item type="attr" name="dragview_background">@drawable/ic_drag_vertical_white_48dp</item>
<item type="attr" name="dragview_float_background">@color/black</item>
<item type="attr" name="nav_drawer_background">#3B3B3B</item>
<item type="attr" name="ic_new">@drawable/ic_new_releases_white_24dp</item>
<item type="attr" name="ic_history">@drawable/ic_history_white_24dp</item>
<item type="attr" name="ic_folder">@drawable/ic_folder_white_24dp</item>
<item type="attr" name="av_play_big">@drawable/ic_play_arrow_white_36dp</item>
<item type="attr" name="av_pause_big">@drawable/ic_pause_white_36dp</item>
<item type="attr" name="av_ff_big">@drawable/ic_fast_forward_white_36dp</item>
<item type="attr" name="av_rew_big">@drawable/ic_fast_rewind_white_36dp</item>
<item type="attr" name="av_skip_big">@drawable/ic_skip_white_36dp</item>
<item type="attr" name="ic_fav">@drawable/ic_star_border_white_24dp</item>
<item type="attr" name="ic_unfav">@drawable/ic_star_white_24dp</item>
<item type="attr" name="ic_settings">@drawable/ic_settings_white_24dp</item>
<item type="attr" name="ic_lock_open">@drawable/ic_lock_open_white_24dp</item>
<item type="attr" name="ic_lock_closed">@drawable/ic_lock_closed_white_24dp</item>
<item type="attr" name="ic_filter">@drawable/ic_filter_white_24dp</item>
<item type="attr" name="ic_sleep">@drawable/ic_sleep_white_24dp</item>
<item type="attr" name="ic_sleep_off">@drawable/ic_sleep_off_white_24dp</item>
<item type="attr" name="ic_check_box">@drawable/ic_check_box_white_24dp</item>
<item type="attr" name="ic_check_box_outline">@drawable/ic_check_box_outline_blank_white_24dp</item>
<item type="attr" name="ic_indeterminate_check_box">@drawable/ic_indeterminate_check_box_white_24dp</item>
<item type="attr" name="ic_sort">@drawable/ic_sort_white_24dp</item>
<item type="attr" name="ic_sd_storage">@drawable/ic_sd_storage_white_36dp</item>
<item type="attr" name="ic_create_new_folder">@drawable/ic_create_new_folder_white_24dp</item>
<item type="attr" name="ic_cast_disconnect">@drawable/ic_cast_disconnect_white_36dp</item>
</style>
<style name="Theme.AntennaPod.Light.NoTitle" parent="Theme.Base.AntennaPod.Light.NoTitle">
@ -139,56 +139,56 @@
<item name="colorAccent">@color/holo_blue_light</item>
<item name="buttonStyle">@style/Widget.AntennaPod.Button</item>
<item name="alertDialogTheme">@style/AntennaPod.Dialog.Light</item>
<item name="attr/action_about">@drawable/ic_info_grey600_24dp</item>
<item name="attr/action_search">@drawable/ic_search_grey600_24dp</item>
<item name="attr/action_stream">@drawable/ic_settings_input_antenna_grey600_24dp</item>
<item name="attr/av_download">@drawable/ic_file_download_grey600_24dp</item>
<item name="attr/av_fast_forward">@drawable/ic_fast_forward_grey600_24dp</item>
<item name="attr/av_pause">@drawable/ic_pause_grey600_24dp</item>
<item name="attr/av_play">@drawable/ic_play_arrow_grey600_24dp</item>
<item name="attr/av_rewind">@drawable/ic_fast_rewind_grey600_24dp</item>
<item name="attr/content_discard">@drawable/ic_delete_grey600_24dp</item>
<item name="attr/content_new">@drawable/ic_add_grey600_24dp</item>
<item name="attr/feed">@drawable/ic_feed_grey600_24dp</item>
<item name="attr/location_web_site">@drawable/ic_web_grey600_24dp</item>
<item name="attr/navigation_accept">@drawable/ic_done_grey600_24dp</item>
<item name="attr/navigation_cancel">@drawable/ic_cancel_grey600_24dp</item>
<item name="attr/navigation_expand">@drawable/ic_expand_more_grey600_36dp</item>
<item name="attr/navigation_refresh">@drawable/ic_refresh_grey600_24dp</item>
<item name="attr/navigation_up">@drawable/navigation_up</item>
<item name="attr/social_share">@drawable/ic_share_grey600_24dp</item>
<item name="attr/stat_playlist">@drawable/ic_list_grey600_24dp</item>
<item name="attr/type_audio">@drawable/ic_hearing_grey600_18dp</item>
<item name="attr/type_video">@drawable/ic_remove_red_eye_grey600_18dp</item>
<item name="attr/non_transparent_background">@color/white</item>
<item name="attr/overlay_background">@color/overlay_light</item>
<item name="attr/overlay_drawable">@drawable/overlay_drawable</item>
<item name="attr/dragview_background">@drawable/ic_drag_vertical_grey600_48dp</item>
<item name="attr/dragview_float_background">@color/white</item>
<item name="attr/nav_drawer_background">@color/white</item>
<item name="attr/ic_new">@drawable/ic_new_releases_grey600_24dp</item>
<item name="attr/ic_history">@drawable/ic_history_grey600_24dp</item>
<item name="attr/ic_folder">@drawable/ic_folder_grey600_24dp</item>
<item name="attr/av_play_big">@drawable/ic_play_arrow_grey600_36dp</item>
<item name="attr/av_pause_big">@drawable/ic_pause_grey600_36dp</item>
<item name="attr/av_ff_big">@drawable/ic_fast_forward_grey600_36dp</item>
<item name="attr/av_rew_big">@drawable/ic_fast_rewind_grey600_36dp</item>
<item name="attr/av_skip_big">@drawable/ic_skip_grey600_36dp</item>
<item name="attr/ic_fav">@drawable/ic_star_border_grey600_24dp</item>
<item name="attr/ic_unfav">@drawable/ic_star_grey600_24dp</item>
<item name="attr/ic_settings">@drawable/ic_settings_grey600_24dp</item>
<item name="attr/ic_lock_open">@drawable/ic_lock_open_grey600_24dp</item>
<item name="attr/ic_lock_closed">@drawable/ic_lock_closed_grey600_24dp</item>
<item name="attr/ic_filter">@drawable/ic_filter_grey600_24dp</item>
<item name="attr/ic_sleep">@drawable/ic_sleep_grey600_24dp</item>
<item name="attr/ic_sleep_off">@drawable/ic_sleep_off_grey600_24dp</item>
<item name="attr/ic_check_box">@drawable/ic_check_box_grey600_24dp</item>
<item name="attr/ic_check_box_outline">@drawable/ic_check_box_outline_blank_grey600_24dp</item>
<item name="attr/ic_indeterminate_check_box">@drawable/ic_indeterminate_check_box_grey600_24dp</item>
<item name="attr/ic_sort">@drawable/ic_sort_grey600_24dp</item>
<item name="attr/ic_sd_storage">@drawable/ic_sd_storage_grey600_36dp</item>
<item name="attr/ic_create_new_folder">@drawable/ic_create_new_folder_grey600_24dp</item>
<item name="attr/ic_cast_disconnect">@drawable/ic_cast_disconnect_grey600_36dp</item>
<item type="attr" name="action_about">@drawable/ic_info_grey600_24dp</item>
<item type="attr" name="action_search">@drawable/ic_search_grey600_24dp</item>
<item type="attr" name="action_stream">@drawable/ic_settings_input_antenna_grey600_24dp</item>
<item type="attr" name="av_download">@drawable/ic_file_download_grey600_24dp</item>
<item type="attr" name="av_fast_forward">@drawable/ic_fast_forward_grey600_24dp</item>
<item type="attr" name="av_pause">@drawable/ic_pause_grey600_24dp</item>
<item type="attr" name="av_play">@drawable/ic_play_arrow_grey600_24dp</item>
<item type="attr" name="av_rewind">@drawable/ic_fast_rewind_grey600_24dp</item>
<item type="attr" name="content_discard">@drawable/ic_delete_grey600_24dp</item>
<item type="attr" name="content_new">@drawable/ic_add_grey600_24dp</item>
<item type="attr" name="feed">@drawable/ic_feed_grey600_24dp</item>
<item type="attr" name="location_web_site">@drawable/ic_web_grey600_24dp</item>
<item type="attr" name="navigation_accept">@drawable/ic_done_grey600_24dp</item>
<item type="attr" name="navigation_cancel">@drawable/ic_cancel_grey600_24dp</item>
<item type="attr" name="navigation_expand">@drawable/ic_expand_more_grey600_36dp</item>
<item type="attr" name="navigation_refresh">@drawable/ic_refresh_grey600_24dp</item>
<item type="attr" name="navigation_up">@drawable/navigation_up</item>
<item type="attr" name="social_share">@drawable/ic_share_grey600_24dp</item>
<item type="attr" name="stat_playlist">@drawable/ic_list_grey600_24dp</item>
<item type="attr" name="type_audio">@drawable/ic_hearing_grey600_18dp</item>
<item type="attr" name="type_video">@drawable/ic_remove_red_eye_grey600_18dp</item>
<item type="attr" name="non_transparent_background">@color/white</item>
<item type="attr" name="overlay_background">@color/overlay_light</item>
<item type="attr" name="overlay_drawable">@drawable/overlay_drawable</item>
<item type="attr" name="dragview_background">@drawable/ic_drag_vertical_grey600_48dp</item>
<item type="attr" name="dragview_float_background">@color/white</item>
<item type="attr" name="nav_drawer_background">@color/white</item>
<item type="attr" name="ic_new">@drawable/ic_new_releases_grey600_24dp</item>
<item type="attr" name="ic_history">@drawable/ic_history_grey600_24dp</item>
<item type="attr" name="ic_folder">@drawable/ic_folder_grey600_24dp</item>
<item type="attr" name="av_play_big">@drawable/ic_play_arrow_grey600_36dp</item>
<item type="attr" name="av_pause_big">@drawable/ic_pause_grey600_36dp</item>
<item type="attr" name="av_ff_big">@drawable/ic_fast_forward_grey600_36dp</item>
<item type="attr" name="av_rew_big">@drawable/ic_fast_rewind_grey600_36dp</item>
<item type="attr" name="av_skip_big">@drawable/ic_skip_grey600_36dp</item>
<item type="attr" name="ic_fav">@drawable/ic_star_border_grey600_24dp</item>
<item type="attr" name="ic_unfav">@drawable/ic_star_grey600_24dp</item>
<item type="attr" name="ic_settings">@drawable/ic_settings_grey600_24dp</item>
<item type="attr" name="ic_lock_open">@drawable/ic_lock_open_grey600_24dp</item>
<item type="attr" name="ic_lock_closed">@drawable/ic_lock_closed_grey600_24dp</item>
<item type="attr" name="ic_filter">@drawable/ic_filter_grey600_24dp</item>
<item type="attr" name="ic_sleep">@drawable/ic_sleep_grey600_24dp</item>
<item type="attr" name="ic_sleep_off">@drawable/ic_sleep_off_grey600_24dp</item>
<item type="attr" name="ic_check_box">@drawable/ic_check_box_grey600_24dp</item>
<item type="attr" name="ic_check_box_outline">@drawable/ic_check_box_outline_blank_grey600_24dp</item>
<item type="attr" name="ic_indeterminate_check_box">@drawable/ic_indeterminate_check_box_grey600_24dp</item>
<item type="attr" name="ic_sort">@drawable/ic_sort_grey600_24dp</item>
<item type="attr" name="ic_sd_storage">@drawable/ic_sd_storage_grey600_36dp</item>
<item type="attr" name="ic_create_new_folder">@drawable/ic_create_new_folder_grey600_24dp</item>
<item type="attr" name="ic_cast_disconnect">@drawable/ic_cast_disconnect_grey600_36dp</item>
</style>
<style name="Theme.AntennaPod.Dark.NoTitle" parent="Theme.Base.AntennaPod.Dark.NoTitle">
@ -203,56 +203,56 @@
<item name="colorControlNormal">@color/white</item>
<item name="buttonStyle">@style/Widget.AntennaPod.Button</item>
<item name="alertDialogTheme">@style/AntennaPod.Dialog.Dark</item>
<item name="attr/action_about">@drawable/ic_info_white_24dp</item>
<item name="attr/action_search">@drawable/ic_search_white_24dp</item>
<item name="attr/action_stream">@drawable/ic_settings_input_antenna_white_24dp</item>
<item name="attr/av_download">@drawable/ic_file_download_white_24dp</item>
<item name="attr/av_fast_forward">@drawable/ic_fast_forward_white_24dp</item>
<item name="attr/av_pause">@drawable/ic_pause_white_24dp</item>
<item name="attr/av_play">@drawable/ic_play_arrow_white_24dp</item>
<item name="attr/av_rewind">@drawable/ic_fast_rewind_white_24dp</item>
<item name="attr/content_discard">@drawable/ic_delete_white_24dp</item>
<item name="attr/content_new">@drawable/ic_add_white_24dp</item>
<item name="attr/feed">@drawable/ic_feed_white_24dp</item>
<item name="attr/location_web_site">@drawable/ic_web_white_24dp</item>
<item name="attr/navigation_accept">@drawable/ic_done_white_24dp</item>
<item name="attr/navigation_cancel">@drawable/ic_cancel_white_24dp</item>
<item name="attr/navigation_expand">@drawable/ic_expand_more_white_36dp</item>
<item name="attr/navigation_refresh">@drawable/ic_refresh_white_24dp</item>
<item name="attr/navigation_up">@drawable/navigation_up_dark</item>
<item name="attr/social_share">@drawable/ic_share_white_24dp</item>
<item name="attr/stat_playlist">@drawable/ic_list_white_24dp</item>
<item name="attr/type_audio">@drawable/ic_hearing_white_18dp</item>
<item name="attr/type_video">@drawable/ic_remove_red_eye_white_18dp</item>
<item name="attr/non_transparent_background">@color/black</item>
<item name="attr/overlay_background">@color/overlay_dark</item>
<item name="attr/overlay_drawable">@drawable/overlay_drawable_dark</item>
<item name="attr/dragview_background">@drawable/ic_drag_vertical_white_48dp</item>
<item name="attr/dragview_float_background">@color/black</item>
<item name="attr/nav_drawer_background">#3B3B3B</item>
<item name="attr/ic_new">@drawable/ic_new_releases_white_24dp</item>
<item name="attr/ic_history">@drawable/ic_history_white_24dp</item>
<item name="attr/ic_folder">@drawable/ic_folder_white_24dp</item>
<item name="attr/av_play_big">@drawable/ic_play_arrow_white_36dp</item>
<item name="attr/av_pause_big">@drawable/ic_pause_white_36dp</item>
<item name="attr/av_ff_big">@drawable/ic_fast_forward_white_36dp</item>
<item name="attr/av_rew_big">@drawable/ic_fast_rewind_white_36dp</item>
<item name="attr/av_skip_big">@drawable/ic_skip_white_36dp</item>
<item name="attr/ic_fav">@drawable/ic_star_border_white_24dp</item>
<item name="attr/ic_unfav">@drawable/ic_star_white_24dp</item>
<item name="attr/ic_settings">@drawable/ic_settings_white_24dp</item>
<item name="attr/ic_lock_open">@drawable/ic_lock_open_white_24dp</item>
<item name="attr/ic_lock_closed">@drawable/ic_lock_closed_white_24dp</item>
<item name="attr/ic_filter">@drawable/ic_filter_white_24dp</item>
<item name="attr/ic_sleep">@drawable/ic_sleep_white_24dp</item>
<item name="attr/ic_sleep_off">@drawable/ic_sleep_off_white_24dp</item>
<item name="attr/ic_check_box">@drawable/ic_check_box_white_24dp</item>
<item name="attr/ic_check_box_outline">@drawable/ic_check_box_outline_blank_white_24dp</item>
<item name="attr/ic_indeterminate_check_box">@drawable/ic_indeterminate_check_box_white_24dp</item>
<item name="attr/ic_sort">@drawable/ic_sort_white_24dp</item>
<item name="attr/ic_sd_storage">@drawable/ic_sd_storage_white_36dp</item>
<item name="attr/ic_create_new_folder">@drawable/ic_create_new_folder_white_24dp</item>
<item name="attr/ic_cast_disconnect">@drawable/ic_cast_disconnect_white_36dp</item>
<item type="attr" name="action_about">@drawable/ic_info_white_24dp</item>
<item type="attr" name="action_search">@drawable/ic_search_white_24dp</item>
<item type="attr" name="action_stream">@drawable/ic_settings_input_antenna_white_24dp</item>
<item type="attr" name="av_download">@drawable/ic_file_download_white_24dp</item>
<item type="attr" name="av_fast_forward">@drawable/ic_fast_forward_white_24dp</item>
<item type="attr" name="av_pause">@drawable/ic_pause_white_24dp</item>
<item type="attr" name="av_play">@drawable/ic_play_arrow_white_24dp</item>
<item type="attr" name="av_rewind">@drawable/ic_fast_rewind_white_24dp</item>
<item type="attr" name="content_discard">@drawable/ic_delete_white_24dp</item>
<item type="attr" name="content_new">@drawable/ic_add_white_24dp</item>
<item type="attr" name="feed">@drawable/ic_feed_white_24dp</item>
<item type="attr" name="location_web_site">@drawable/ic_web_white_24dp</item>
<item type="attr" name="navigation_accept">@drawable/ic_done_white_24dp</item>
<item type="attr" name="navigation_cancel">@drawable/ic_cancel_white_24dp</item>
<item type="attr" name="navigation_expand">@drawable/ic_expand_more_white_36dp</item>
<item type="attr" name="navigation_refresh">@drawable/ic_refresh_white_24dp</item>
<item type="attr" name="navigation_up">@drawable/navigation_up_dark</item>
<item type="attr" name="social_share">@drawable/ic_share_white_24dp</item>
<item type="attr" name="stat_playlist">@drawable/ic_list_white_24dp</item>
<item type="attr" name="type_audio">@drawable/ic_hearing_white_18dp</item>
<item type="attr" name="type_video">@drawable/ic_remove_red_eye_white_18dp</item>
<item type="attr" name="non_transparent_background">@color/black</item>
<item type="attr" name="overlay_background">@color/overlay_dark</item>
<item type="attr" name="overlay_drawable">@drawable/overlay_drawable_dark</item>
<item type="attr" name="dragview_background">@drawable/ic_drag_vertical_white_48dp</item>
<item type="attr" name="dragview_float_background">@color/black</item>
<item type="attr" name="nav_drawer_background">#3B3B3B</item>
<item type="attr" name="ic_new">@drawable/ic_new_releases_white_24dp</item>
<item type="attr" name="ic_history">@drawable/ic_history_white_24dp</item>
<item type="attr" name="ic_folder">@drawable/ic_folder_white_24dp</item>
<item type="attr" name="av_play_big">@drawable/ic_play_arrow_white_36dp</item>
<item type="attr" name="av_pause_big">@drawable/ic_pause_white_36dp</item>
<item type="attr" name="av_ff_big">@drawable/ic_fast_forward_white_36dp</item>
<item type="attr" name="av_rew_big">@drawable/ic_fast_rewind_white_36dp</item>
<item type="attr" name="av_skip_big">@drawable/ic_skip_white_36dp</item>
<item type="attr" name="ic_fav">@drawable/ic_star_border_white_24dp</item>
<item type="attr" name="ic_unfav">@drawable/ic_star_white_24dp</item>
<item type="attr" name="ic_settings">@drawable/ic_settings_white_24dp</item>
<item type="attr" name="ic_lock_open">@drawable/ic_lock_open_white_24dp</item>
<item type="attr" name="ic_lock_closed">@drawable/ic_lock_closed_white_24dp</item>
<item type="attr" name="ic_filter">@drawable/ic_filter_white_24dp</item>
<item type="attr" name="ic_sleep">@drawable/ic_sleep_white_24dp</item>
<item type="attr" name="ic_sleep_off">@drawable/ic_sleep_off_white_24dp</item>
<item type="attr" name="ic_check_box">@drawable/ic_check_box_white_24dp</item>
<item type="attr" name="ic_check_box_outline">@drawable/ic_check_box_outline_blank_white_24dp</item>
<item type="attr" name="ic_indeterminate_check_box">@drawable/ic_indeterminate_check_box_white_24dp</item>
<item type="attr" name="ic_sort">@drawable/ic_sort_white_24dp</item>
<item type="attr" name="ic_sd_storage">@drawable/ic_sd_storage_white_36dp</item>
<item type="attr" name="ic_create_new_folder">@drawable/ic_create_new_folder_white_24dp</item>
<item type="attr" name="ic_cast_disconnect">@drawable/ic_cast_disconnect_white_36dp</item>
</style>
<style name="Theme.AntennaPod.Dark.Splash" parent="Theme.AppCompat.NoActionBar">