Merge branch 'develop'
This commit is contained in:
commit
563ceaf393
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +1,6 @@
|
||||
[submodule "submodules/dslv"]
|
||||
path = submodules/dslv
|
||||
url = git://github.com/danieloeh/drag-sort-listview.git
|
||||
[submodule "app/dslv"]
|
||||
path = app/dslv
|
||||
url = https://github.com/danieloeh/drag-sort-listview.git
|
||||
|
50
.tx/config
50
.tx/config
@ -2,31 +2,33 @@
|
||||
host = https://www.transifex.com
|
||||
|
||||
[antennapod.english]
|
||||
source_file = res/values/strings.xml
|
||||
source_file = core/src/main/res/values/strings.xml
|
||||
source_lang = en
|
||||
trans.az = res/values-az/strings.xml
|
||||
trans.ca = res/values-ca/strings.xml
|
||||
trans.cs_CZ = res/values-cs-rCZ/strings.xml
|
||||
trans.da = res/values-da/strings.xml
|
||||
trans.de = res/values-de/strings.xml
|
||||
trans.es = res/values-es/strings.xml
|
||||
trans.es_ES = res/values-es-rES/strings.xml
|
||||
trans.fr = res/values-fr/strings.xml
|
||||
trans.he_IL = res/values-iw-rIL/strings.xml
|
||||
trans.hi_IN = res/values-hi-rIN/strings.xml
|
||||
trans.it_IT = res/values-it-rIT/strings.xml
|
||||
trans.ko = res/values-ko/strings.xml
|
||||
trans.nl = res/values-nl/strings.xml
|
||||
trans.pl_PL = res/values-pl-rPL/strings.xml
|
||||
trans.pt = res/values-pt/strings.xml
|
||||
trans.pt_BR = res/values-pt-rBR/strings.xml
|
||||
trans.ro_RO = res/values-ro-rRO/strings.xml
|
||||
trans.ru = res/values-ru/strings.xml
|
||||
trans.ru-RU = res/values-ru/strings.xml
|
||||
trans.ru_RU = res/values-ru/strings.xml
|
||||
trans.uk_UA = res/values-uk-rUA/strings.xml
|
||||
trans.zh_CN = res/values-zh-rCN/strings.xml
|
||||
trans.sv_SE = res/values-sv-rSE/strings.xml
|
||||
trans.az = core/src/main/res/values-az/strings.xml
|
||||
trans.ca = core/src/main/res/values-ca/strings.xml
|
||||
trans.cs_CZ = core/src/main/res/values-cs-rCZ/strings.xml
|
||||
trans.da = core/src/main/res/values-da/strings.xml
|
||||
trans.de = core/src/main/res/values-de/strings.xml
|
||||
trans.es = core/src/main/res/values-es/strings.xml
|
||||
trans.es_ES = core/src/main/res/values-es-rES/strings.xml
|
||||
trans.fr = core/src/main/res/values-fr/strings.xml
|
||||
trans.he_IL = core/src/main/res/values-iw-rIL/strings.xml
|
||||
trans.hi_IN = core/src/main/res/values-hi-rIN/strings.xml
|
||||
trans.it_IT = core/src/main/res/values-it-rIT/strings.xml
|
||||
trans.ja = core/src/main/res/values-ja/strings.xml
|
||||
trans.ko = core/src/main/res/values-ko/strings.xml
|
||||
trans.nl = core/src/main/res/values-nl/strings.xml
|
||||
trans.pl_PL = core/src/main/res/values-pl-rPL/strings.xml
|
||||
trans.pt = core/src/main/res/values-pt/strings.xml
|
||||
trans.pt_BR = core/src/main/res/values-pt-rBR/strings.xml
|
||||
trans.ro_RO = core/src/main/res/values-ro-rRO/strings.xml
|
||||
trans.ru = core/src/main/res/values-ru/strings.xml
|
||||
trans.ru-RU = core/src/main/res/values-ru/strings.xml
|
||||
trans.ru_RU = core/src/main/res/values-ru/strings.xml
|
||||
trans.uk_UA = core/src/main/res/values-uk-rUA/strings.xml
|
||||
trans.zh_CN = core/src/main/res/values-zh-rCN/strings.xml
|
||||
trans.sv_SE = core/src/main/res/values-sv-rSE/strings.xml
|
||||
trans.tr = core/src/main/res/values-tr/strings.xml
|
||||
|
||||
[antennapod.description]
|
||||
file_filter = description/<lang>.txt
|
||||
|
@ -1,6 +1,14 @@
|
||||
Change Log
|
||||
==========
|
||||
|
||||
Version 0.9.9.5
|
||||
---------------
|
||||
* Added support for paged feeds
|
||||
* Improved user interface
|
||||
* Added Japanese and Turkish translations
|
||||
* Fixed more image loading problems
|
||||
* Other bugfixes and improvements
|
||||
|
||||
Version 0.9.9.4
|
||||
---------------
|
||||
* Added option to keep notification and lockscreen controls when playback is paused
|
||||
|
@ -37,3 +37,5 @@ Information on how to build AntennaPod can be found in the [Wiki](https://github
|
||||
Bitcoin address: `1DzvtuvdW8VhDsq9GUytMyALmsHeaHEKbg`
|
||||
|
||||
[![Bountysource](https://www.bountysource.com/badge/tracker?tracker_id=370084)](https://www.bountysource.com/trackers/370084-antennapod?utm_source=370084&utm_medium=shield&utm_campaign=TRACKER_BADGE)
|
||||
|
||||
[![Support via Gratipay](https://cdn.rawgit.com/gratipay/gratipay-badge/2.3.0/dist/gratipay.png)](https://gratipay.com/danieloeh/)
|
||||
|
92
app/build.gradle
Normal file
92
app/build.gradle
Normal file
@ -0,0 +1,92 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
compile 'com.android.support:support-v4:21.0.2'
|
||||
compile 'com.android.support:appcompat-v7:21.0.2'
|
||||
compile 'org.apache.commons:commons-lang3:3.3.2'
|
||||
compile('org.shredzone.flattr4j:flattr4j-core:2.10') {
|
||||
exclude group: 'org.apache.httpcomponents', module: 'httpcore'
|
||||
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
|
||||
exclude group: 'org.json', module: 'json'
|
||||
}
|
||||
compile 'commons-io:commons-io:2.4'
|
||||
compile 'com.nineoldandroids:library:2.4.0'
|
||||
compile project('dslv:library')
|
||||
compile 'com.jayway.android.robotium:robotium-solo:5.2.1'
|
||||
compile 'org.jsoup:jsoup:1.7.3'
|
||||
compile 'com.squareup.picasso:picasso:2.4.0'
|
||||
compile 'com.squareup.okhttp:okhttp:2.1.0'
|
||||
compile 'com.squareup.okhttp:okhttp-urlconnection:2.1.0'
|
||||
compile 'com.squareup.okio:okio:1.0.1'
|
||||
compile project(':core')
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 21
|
||||
buildToolsVersion "21.1.1"
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 10
|
||||
targetSdkVersion 21
|
||||
testApplicationId "de.test.antennapod"
|
||||
testInstrumentationRunner "de.test.antennapod.AntennaPodTestRunner"
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
releaseConfig {
|
||||
if (project.hasProperty('releaseStoreFile')) {
|
||||
storeFile file(releaseStoreFile)
|
||||
} else {
|
||||
storeFile file('keystore')
|
||||
}
|
||||
if (project.hasProperty('releaseStorePassword')) {
|
||||
storePassword releaseStorePassword
|
||||
} else {
|
||||
storePassword "password"
|
||||
}
|
||||
if (project.hasProperty('releaseKeyAlias')) {
|
||||
keyAlias releaseKeyAlias
|
||||
} else {
|
||||
keyAlias "alias"
|
||||
}
|
||||
if (project.hasProperty('releaseKeyPassword')) {
|
||||
keyPassword releaseKeyPassword
|
||||
} else {
|
||||
keyPassword "password"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
def STRING = "String"
|
||||
def FLATTR_APP_KEY = "FLATTR_APP_KEY"
|
||||
def FLATTR_APP_SECRET = "FLATTR_APP_SECRET"
|
||||
def mFlattrAppKey = (project.hasProperty('flattrAppKey')) ? flattrAppKey : "\"\""
|
||||
def mFlattrAppSecret = (project.hasProperty('flattrAppSecret')) ? flattrAppSecret : "\"\""
|
||||
|
||||
debug {
|
||||
applicationIdSuffix ".debug"
|
||||
buildConfigField STRING, FLATTR_APP_KEY, mFlattrAppKey
|
||||
buildConfigField STRING, FLATTR_APP_SECRET, mFlattrAppSecret
|
||||
}
|
||||
release {
|
||||
minifyEnabled true
|
||||
proguardFile 'proguard.cfg'
|
||||
signingConfig signingConfigs.releaseConfig
|
||||
buildConfigField STRING, FLATTR_APP_KEY, mFlattrAppKey
|
||||
buildConfigField STRING, FLATTR_APP_SECRET, mFlattrAppSecret
|
||||
}
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/LICENSE.txt'
|
||||
exclude 'META-INF/NOTICE.txt'
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
}
|
1
app/dslv
Submodule
1
app/dslv
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 80011c50e444e1c7d5e13b57bdb127b524a1ff92
|
1
app/settings.gradle
Normal file
1
app/settings.gradle
Normal file
@ -0,0 +1 @@
|
||||
include ':app:dslv:library'
|
@ -1,4 +1,4 @@
|
||||
package instrumentationTest.de.test.antennapod;
|
||||
package de.test.antennapod;
|
||||
|
||||
import android.test.InstrumentationTestRunner;
|
||||
import android.test.suitebuilder.TestSuiteBuilder;
|
||||
@ -10,7 +10,7 @@ public class AntennaPodTestRunner extends InstrumentationTestRunner {
|
||||
public TestSuite getAllTests() {
|
||||
return new TestSuiteBuilder(AntennaPodTestRunner.class)
|
||||
.includeAllPackagesUnderHere()
|
||||
.excludePackages("instrumentationTest.de.test.antennapod.gpodnet")
|
||||
.excludePackages("de.test.antennapod.gpodnet")
|
||||
.build();
|
||||
}
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
package instrumentationTest.de.test.antennapod.gpodnet;
|
||||
package de.test.antennapod.gpodnet;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
import android.util.Log;
|
||||
import de.danoeh.antennapod.gpoddernet.GpodnetService;
|
||||
import de.danoeh.antennapod.gpoddernet.GpodnetServiceException;
|
||||
import de.danoeh.antennapod.gpoddernet.model.GpodnetDevice;
|
||||
import de.danoeh.antennapod.gpoddernet.model.GpodnetTag;
|
||||
|
||||
import de.danoeh.antennapod.core.gpoddernet.GpodnetService;
|
||||
import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException;
|
||||
import de.danoeh.antennapod.core.gpoddernet.model.GpodnetDevice;
|
||||
import de.danoeh.antennapod.core.gpoddernet.model.GpodnetTag;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
@ -1,13 +1,13 @@
|
||||
package instrumentationTest.de.test.antennapod.syndication.handler;
|
||||
package de.test.antennapod.handler;
|
||||
|
||||
import android.content.Context;
|
||||
import android.test.InstrumentationTestCase;
|
||||
import de.danoeh.antennapod.feed.*;
|
||||
import de.danoeh.antennapod.syndication.handler.FeedHandler;
|
||||
import de.danoeh.antennapod.syndication.handler.UnsupportedFeedtypeException;
|
||||
import instrumentationTest.de.test.antennapod.util.syndication.feedgenerator.AtomGenerator;
|
||||
import instrumentationTest.de.test.antennapod.util.syndication.feedgenerator.FeedGenerator;
|
||||
import instrumentationTest.de.test.antennapod.util.syndication.feedgenerator.RSS2Generator;
|
||||
import de.danoeh.antennapod.core.feed.*;
|
||||
import de.danoeh.antennapod.core.syndication.handler.FeedHandler;
|
||||
import de.danoeh.antennapod.core.syndication.handler.UnsupportedFeedtypeException;
|
||||
import de.test.antennapod.util.syndication.feedgenerator.AtomGenerator;
|
||||
import de.test.antennapod.util.syndication.feedgenerator.FeedGenerator;
|
||||
import de.test.antennapod.util.syndication.feedgenerator.RSS2Generator;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
@ -1,14 +1,14 @@
|
||||
package instrumentationTest.de.test.antennapod.service.download;
|
||||
package de.test.antennapod.service.download;
|
||||
|
||||
import android.test.InstrumentationTestCase;
|
||||
import android.util.Log;
|
||||
import de.danoeh.antennapod.feed.FeedFile;
|
||||
import de.danoeh.antennapod.service.download.DownloadRequest;
|
||||
import de.danoeh.antennapod.service.download.DownloadStatus;
|
||||
import de.danoeh.antennapod.service.download.Downloader;
|
||||
import de.danoeh.antennapod.service.download.HttpDownloader;
|
||||
import de.danoeh.antennapod.util.DownloadError;
|
||||
import instrumentationTest.de.test.antennapod.util.service.download.HTTPBin;
|
||||
import de.danoeh.antennapod.core.feed.FeedFile;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadRequest;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadStatus;
|
||||
import de.danoeh.antennapod.core.service.download.Downloader;
|
||||
import de.danoeh.antennapod.core.service.download.HttpDownloader;
|
||||
import de.danoeh.antennapod.core.util.DownloadError;
|
||||
import de.test.antennapod.util.service.download.HTTPBin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@ -65,7 +65,7 @@ public class HttpDownloaderTest extends InstrumentationTestCase {
|
||||
|
||||
private Downloader download(String url, String title, boolean expectedResult, boolean deleteExisting, String username, String password, boolean deleteOnFail) {
|
||||
FeedFile feedFile = setupFeedFile(url, title, deleteExisting);
|
||||
DownloadRequest request = new DownloadRequest(feedFile.getFile_url(), url, title, 0, feedFile.getTypeAsInt(), username, password, deleteOnFail);
|
||||
DownloadRequest request = new DownloadRequest(feedFile.getFile_url(), url, title, 0, feedFile.getTypeAsInt(), username, password, deleteOnFail, null);
|
||||
Downloader downloader = new HttpDownloader(request);
|
||||
downloader.call();
|
||||
DownloadStatus status = downloader.getResult();
|
@ -1,16 +1,16 @@
|
||||
package instrumentationTest.de.test.antennapod.service.playback;
|
||||
package de.test.antennapod.service.playback;
|
||||
|
||||
import android.content.Context;
|
||||
import android.media.RemoteControlClient;
|
||||
import android.test.InstrumentationTestCase;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.service.playback.PlaybackServiceMediaPlayer;
|
||||
import de.danoeh.antennapod.service.playback.PlayerStatus;
|
||||
import de.danoeh.antennapod.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.util.playback.Playable;
|
||||
import instrumentationTest.de.test.antennapod.util.service.download.HTTPBin;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackServiceMediaPlayer;
|
||||
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||
import de.test.antennapod.util.service.download.HTTPBin;
|
||||
import junit.framework.AssertionFailedError;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
@ -69,7 +69,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
|
||||
assertTrue(cacheDir.canWrite());
|
||||
assertTrue(cacheDir.canRead());
|
||||
if (!dest.exists()) {
|
||||
InputStream i = getInstrumentation().getTargetContext().getAssets().open("testfile.mp3");
|
||||
InputStream i = getInstrumentation().getContext().getAssets().open("testfile.mp3");
|
||||
OutputStream o = new FileOutputStream(new File(cacheDir, PLAYABLE_DEST_URL));
|
||||
IOUtils.copy(i, o);
|
||||
o.flush();
|
@ -1,13 +1,13 @@
|
||||
package instrumentationTest.de.test.antennapod.service.playback;
|
||||
package de.test.antennapod.service.playback;
|
||||
|
||||
import android.content.Context;
|
||||
import android.test.InstrumentationTestCase;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.service.playback.PlaybackServiceTaskManager;
|
||||
import de.danoeh.antennapod.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.util.playback.Playable;
|
||||
import de.danoeh.antennapod.core.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackServiceTaskManager;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
@ -1,22 +1,21 @@
|
||||
package instrumentationTest.de.test.antennapod.storage;
|
||||
package de.test.antennapod.storage;
|
||||
|
||||
import android.content.Context;
|
||||
import android.test.InstrumentationTestCase;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.FeedItemStatistics;
|
||||
import de.danoeh.antennapod.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.util.flattr.FlattrStatus;
|
||||
import static instrumentationTest.de.test.antennapod.storage.DBTestUtils.*;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
import de.danoeh.antennapod.core.storage.FeedItemStatistics;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import static instrumentationTest.de.test.antennapod.storage.DBTestUtils.saveFeedlist;
|
||||
import static de.test.antennapod.storage.DBTestUtils.saveFeedlist;
|
||||
|
||||
/**
|
||||
* Test class for DBReader
|
||||
@ -44,7 +43,7 @@ public class DBReaderTest extends InstrumentationTestCase {
|
||||
private void expiredFeedListTestHelper(long lastUpdate, long expirationTime, boolean shouldReturn) {
|
||||
final Context context = getInstrumentation().getTargetContext();
|
||||
Feed feed = new Feed(0, new Date(lastUpdate), "feed", "link", "descr", null,
|
||||
null, null, null, "feed", null, null, "url", false, new FlattrStatus());
|
||||
null, null, null, "feed", null, null, "url", false, new FlattrStatus(), false, null);
|
||||
feed.setItems(new ArrayList<FeedItem>());
|
||||
PodDBAdapter adapter = new PodDBAdapter(context);
|
||||
adapter.open();
|
||||
@ -326,8 +325,9 @@ public class DBReaderTest extends InstrumentationTestCase {
|
||||
|
||||
public void testGetPlaybackHistory() {
|
||||
final Context context = getInstrumentation().getTargetContext();
|
||||
final int numItems = 10;
|
||||
final int playedItems = 5;
|
||||
final int numItems = (DBReader.PLAYBACK_HISTORY_SIZE+1) * 2;
|
||||
final int playedItems = DBReader.PLAYBACK_HISTORY_SIZE + 1;
|
||||
final int numReturnedItems = Math.min(playedItems, DBReader.PLAYBACK_HISTORY_SIZE);
|
||||
final int numFeeds = 1;
|
||||
|
||||
Feed feed = DBTestUtils.saveFeedlist(context, numFeeds, numItems, true).get(0);
|
||||
@ -345,8 +345,8 @@ public class DBReaderTest extends InstrumentationTestCase {
|
||||
|
||||
List<FeedItem> saved = DBReader.getPlaybackHistory(context);
|
||||
assertNotNull(saved);
|
||||
assertEquals("Wrong size: ", playedItems, saved.size());
|
||||
for (int i = 0; i < playedItems; i++) {
|
||||
assertEquals("Wrong size: ", numReturnedItems, saved.size());
|
||||
for (int i = 0; i < numReturnedItems; i++) {
|
||||
FeedItem item = saved.get(i);
|
||||
assertNotNull(item.getMedia().getPlaybackCompletionDate());
|
||||
assertEquals("Wrong sort order: ", item.getId(), ids[i]);
|
@ -1,17 +1,17 @@
|
||||
package instrumentationTest.de.test.antennapod.storage;
|
||||
package de.test.antennapod.storage;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.test.InstrumentationTestCase;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DBTasks;
|
||||
import de.danoeh.antennapod.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.util.flattr.FlattrStatus;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
import de.danoeh.antennapod.core.storage.DBTasks;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@ -20,7 +20,7 @@ import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import static instrumentationTest.de.test.antennapod.storage.DBTestUtils.*;
|
||||
import static de.test.antennapod.storage.DBTestUtils.*;
|
||||
|
||||
/**
|
||||
* Test class for DBTasks
|
||||
@ -296,7 +296,7 @@ public class DBTasksTest extends InstrumentationTestCase {
|
||||
final Context context = getInstrumentation().getTargetContext();
|
||||
UserPreferences.setUpdateInterval(context, expirationTime);
|
||||
Feed feed = new Feed(0, new Date(lastUpdate), "feed", "link", "descr", null,
|
||||
null, null, null, "feed", null, null, "url", false, new FlattrStatus());
|
||||
null, null, null, "feed", null, null, "url", false, new FlattrStatus(), false, null);
|
||||
feed.setItems(new ArrayList<FeedItem>());
|
||||
PodDBAdapter adapter = new PodDBAdapter(context);
|
||||
adapter.open();
|
@ -1,12 +1,12 @@
|
||||
package instrumentationTest.de.test.antennapod.storage;
|
||||
package de.test.antennapod.storage;
|
||||
|
||||
import android.content.Context;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.util.comparator.FeedItemPubdateComparator;
|
||||
import de.danoeh.antennapod.util.flattr.FlattrStatus;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
|
||||
import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
|
||||
import junit.framework.Assert;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -32,7 +32,7 @@ public class DBTestUtils {
|
||||
adapter.open();
|
||||
for (int i = 0; i < numFeeds; i++) {
|
||||
Feed f = new Feed(0, new Date(), "feed " + i, "link" + i, "descr", null, null,
|
||||
null, null, "id" + i, null, null, "url" + i, false, new FlattrStatus());
|
||||
null, null, "id" + i, null, null, "url" + i, false, new FlattrStatus(), false, null);
|
||||
f.setItems(new ArrayList<FeedItem>());
|
||||
for (int j = 0; j < numItems; j++) {
|
||||
FeedItem item = new FeedItem(0, "item " + j, "id" + j, "link" + j, new Date(),
|
@ -1,16 +1,16 @@
|
||||
package instrumentationTest.de.test.antennapod.storage;
|
||||
package de.test.antennapod.storage;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.test.InstrumentationTestCase;
|
||||
import android.util.Log;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedImage;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
import de.danoeh.antennapod.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedImage;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
import de.danoeh.antennapod.core.storage.DBWriter;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
@ -1,18 +1,17 @@
|
||||
package instrumentationTest.de.test.antennapod.ui;
|
||||
package de.test.antennapod.ui;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.test.ActivityInstrumentationTestCase2;
|
||||
import android.view.View;
|
||||
import com.robotium.solo.Solo;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.DefaultOnlineFeedViewActivity;
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
import de.danoeh.antennapod.activity.PreferenceActivity;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.activity.PreferenceActivityGingerbread;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.preferences.PreferenceController;
|
||||
|
||||
/**
|
||||
* User interface tests for MainActivity
|
||||
@ -112,6 +111,6 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
|
||||
public void testGoToPreferences() {
|
||||
solo.setNavigationDrawer(Solo.CLOSED);
|
||||
solo.clickOnMenuItem(solo.getString(R.string.settings_label));
|
||||
solo.waitForActivity(PreferenceActivity.class);
|
||||
solo.waitForActivity(PreferenceController.getPreferenceActivity());
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package instrumentationTest.de.test.antennapod.ui;
|
||||
package de.test.antennapod.ui;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
@ -9,12 +9,12 @@ import com.robotium.solo.Solo;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.AudioplayerActivity;
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
import de.danoeh.antennapod.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
import de.danoeh.antennapod.core.storage.DBWriter;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package instrumentationTest.de.test.antennapod.ui;
|
||||
package de.test.antennapod.ui;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
@ -6,11 +6,10 @@ import android.graphics.Bitmap;
|
||||
import android.os.Build;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.*;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
import de.danoeh.antennapod.storage.PodDBAdapter;
|
||||
import instrumentationTest.de.test.antennapod.util.service.download.HTTPBin;
|
||||
import instrumentationTest.de.test.antennapod.util.syndication.feedgenerator.RSS2Generator;
|
||||
import de.danoeh.antennapod.core.feed.*;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
import de.test.antennapod.util.service.download.HTTPBin;
|
||||
import de.test.antennapod.util.syndication.feedgenerator.RSS2Generator;
|
||||
import junit.framework.Assert;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
@ -1,8 +1,8 @@
|
||||
package instrumentationTest.de.test.antennapod.ui;
|
||||
package de.test.antennapod.ui;
|
||||
|
||||
import android.test.InstrumentationTestCase;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import java.io.File;
|
@ -1,4 +1,4 @@
|
||||
package instrumentationTest.de.test.antennapod.ui;
|
||||
package de.test.antennapod.ui;
|
||||
|
||||
import android.test.ActivityInstrumentationTestCase2;
|
||||
|
@ -1,8 +1,8 @@
|
||||
package instrumentationTest.de.test.antennapod.util;
|
||||
package de.test.antennapod.util;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
import de.danoeh.antennapod.core.util.Converter;
|
||||
|
||||
/**
|
||||
* Test class for converter
|
@ -1,9 +1,9 @@
|
||||
package instrumentationTest.de.test.antennapod.util;
|
||||
package de.test.antennapod.util;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import de.danoeh.antennapod.util.FileNameGenerator;
|
||||
import de.danoeh.antennapod.core.util.FileNameGenerator;
|
||||
import android.test.AndroidTestCase;
|
||||
|
||||
public class FilenameGeneratorTest extends AndroidTestCase {
|
@ -1,7 +1,7 @@
|
||||
package instrumentationTest.de.test.antennapod.util;
|
||||
package de.test.antennapod.util;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
import de.danoeh.antennapod.util.URIUtil;
|
||||
import de.danoeh.antennapod.core.util.URIUtil;
|
||||
|
||||
/**
|
||||
* Test class for URIUtil
|
@ -1,7 +1,7 @@
|
||||
package instrumentationTest.de.test.antennapod.util;
|
||||
package de.test.antennapod.util;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
import de.danoeh.antennapod.util.URLChecker;
|
||||
import de.danoeh.antennapod.core.util.URLChecker;
|
||||
|
||||
/**
|
||||
* Test class for URLChecker
|
@ -1,4 +1,4 @@
|
||||
package instrumentationTest.de.test.antennapod.util.playback;
|
||||
package de.test.antennapod.util.playback;
|
||||
|
||||
import android.content.Context;
|
||||
import android.test.InstrumentationTestCase;
|
||||
@ -11,11 +11,11 @@ import org.jsoup.select.Elements;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import de.danoeh.antennapod.feed.Chapter;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.util.playback.Playable;
|
||||
import de.danoeh.antennapod.util.playback.Timeline;
|
||||
import de.danoeh.antennapod.core.feed.Chapter;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||
import de.danoeh.antennapod.core.util.playback.Timeline;
|
||||
|
||||
/**
|
||||
* Test class for timeline
|
@ -1,4 +1,4 @@
|
||||
package instrumentationTest.de.test.antennapod.util.service.download;
|
||||
package de.test.antennapod.util.service.download;
|
||||
|
||||
import android.util.Base64;
|
||||
import android.util.Log;
|
@ -1,4 +1,4 @@
|
||||
package instrumentationTest.de.test.antennapod.util.service.download;
|
||||
package de.test.antennapod.util.service.download;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.InetAddress;
|
@ -1,7 +1,7 @@
|
||||
package instrumentationTest.de.test.antennapod.util.syndication;
|
||||
package de.test.antennapod.util.syndication;
|
||||
|
||||
import android.test.InstrumentationTestCase;
|
||||
import de.danoeh.antennapod.util.syndication.FeedDiscoverer;
|
||||
import de.danoeh.antennapod.core.util.syndication.FeedDiscoverer;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
@ -1,10 +1,10 @@
|
||||
package instrumentationTest.de.test.antennapod.util.syndication.feedgenerator;
|
||||
package de.test.antennapod.util.syndication.feedgenerator;
|
||||
|
||||
import android.util.Xml;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.syndication.util.SyndDateUtils;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.syndication.util.SyndDateUtils;
|
||||
import org.xmlpull.v1.XmlSerializer;
|
||||
|
||||
import java.io.IOException;
|
@ -1,6 +1,6 @@
|
||||
package instrumentationTest.de.test.antennapod.util.syndication.feedgenerator;
|
||||
package de.test.antennapod.util.syndication.feedgenerator;
|
||||
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
@ -1,4 +1,4 @@
|
||||
package instrumentationTest.de.test.antennapod.util.syndication.feedgenerator;
|
||||
package de.test.antennapod.util.syndication.feedgenerator;
|
||||
|
||||
import org.xmlpull.v1.XmlSerializer;
|
||||
|
@ -1,9 +1,9 @@
|
||||
package instrumentationTest.de.test.antennapod.util.syndication.feedgenerator;
|
||||
package de.test.antennapod.util.syndication.feedgenerator;
|
||||
|
||||
import android.util.Xml;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.syndication.util.SyndDateUtils;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.syndication.util.SyndDateUtils;
|
||||
import org.xmlpull.v1.XmlSerializer;
|
||||
|
||||
import java.io.IOException;
|
@ -1,13 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="de.danoeh.antennapod"
|
||||
android:versionCode="41"
|
||||
android:versionName="0.9.9.4">
|
||||
package="de.danoeh.antennapod"
|
||||
android:versionCode="42"
|
||||
android:versionName="0.9.9.5">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
|
||||
<supports-screens
|
||||
@ -31,7 +30,7 @@
|
||||
android:name="de.danoeh.antennapod.PodcastApp"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:backupAgent=".backup.OpmlBackupAgent"
|
||||
android:backupAgent=".core.backup.OpmlBackupAgent"
|
||||
android:restoreAnyVersion="true"
|
||||
android:logo="@drawable/ic_launcher"
|
||||
android:theme="@style/Theme.AntennaPod.Light">
|
||||
@ -70,19 +69,14 @@
|
||||
android:name=".activity.DownloadAuthenticationActivity"
|
||||
android:launchMode="singleInstance"/>
|
||||
|
||||
<service
|
||||
android:name=".service.download.DownloadService"
|
||||
android:enabled="true"/>
|
||||
<service
|
||||
android:name=".service.playback.PlaybackService"
|
||||
android:enabled="true"
|
||||
android:exported="true">
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".service.GpodnetSyncService"
|
||||
android:enabled="true">
|
||||
</service>
|
||||
<activity
|
||||
android:name=".activity.PreferenceActivityGingerbread"
|
||||
android:configChanges="keyboardHidden|orientation"
|
||||
android:label="@string/settings_label">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="de.danoeh.antennapod.activity.MainActivity"/>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".activity.PreferenceActivity"
|
||||
@ -93,22 +87,11 @@
|
||||
android:value="de.danoeh.antennapod.activity.MainActivity"/>
|
||||
</activity>
|
||||
|
||||
<receiver
|
||||
android:name=".receiver.MediaButtonReceiver"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MEDIA_BUTTON"/>
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="de.danoeh.antennapod.NOTIFY_BUTTON_RECEIVER"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<activity android:name=".activity.FeedInfoActivity">
|
||||
</activity>
|
||||
|
||||
<service
|
||||
android:name=".service.playback.PlayerWidgetService"
|
||||
android:name=".service.PlayerWidgetService"
|
||||
android:enabled="true"
|
||||
android:exported="false">
|
||||
</service>
|
||||
@ -129,11 +112,6 @@
|
||||
<action android:name="de.danoeh.antennapod.STOP_WIDGET_UPDATE"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<receiver android:name=".receiver.FeedUpdateReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="de.danoeh.antennapod.feedupdatereceiver.refreshFeeds"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<activity android:name=".activity.StorageErrorActivity">
|
||||
</activity>
|
||||
@ -320,13 +298,18 @@
|
||||
android:value="de.danoeh.antennapod.activity.PreferenceActivity"/>
|
||||
</activity>
|
||||
|
||||
|
||||
<receiver android:name=".receiver.ConnectivityActionReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<receiver android:name=".receiver.AlarmUpdateReceiver">
|
||||
|
||||
<receiver android:name=".receiver.SPAReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="de.danoeh.antennapdsp.intent.SP_APPS_QUERY_FEEDS_RESPONSE"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<receiver android:name="de.danoeh.antennapod.core.receiver.AlarmUpdateReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.BOOT_COMPLETED"/>
|
||||
</intent-filter>
|
||||
@ -338,11 +321,6 @@
|
||||
android:scheme="package"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<receiver android:name=".receiver.SPAReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="de.danoeh.antennapdsp.intent.SP_APPS_QUERY_FEEDS_RESPONSE"/>
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
</application>
|
||||
|
||||
</manifest>
|
425
app/src/main/assets/LICENSE_MATERIAL_DESIGN_ICONS.txt
Normal file
425
app/src/main/assets/LICENSE_MATERIAL_DESIGN_ICONS.txt
Normal file
@ -0,0 +1,425 @@
|
||||
Attribution-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More_considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
|
||||
including for purposes of Section 3(b); and
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public licenses.
|
||||
Notwithstanding, Creative Commons may elect to apply one of its public
|
||||
licenses to material it publishes and in those instances will be
|
||||
considered the "Licensor." Except for the limited purpose of indicating
|
||||
that material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the public
|
||||
licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
@ -41,7 +41,7 @@
|
||||
<div id="header" align="center">
|
||||
<img src="logo.png" alt="Logo" width="100px" height="100px"/>
|
||||
|
||||
<p>AntennaPod, Version 0.9.9.4</p>
|
||||
<p>AntennaPod, Version 0.9.9.5</p>
|
||||
|
||||
<p>Copyright © 2014 Daniel Oeh</p>
|
||||
|
||||
@ -80,4 +80,7 @@ licensed under the Apache 2.0 license <a href="LICENSE_OKHTTP.txt">(View)</a>
|
||||
<h2>Okio <a href="https://github.com/square/okio">(Link)</a></h2>
|
||||
licensed under the Apache 2.0 license <a href="LICENSE_OKIO.txt">(View)</a>
|
||||
|
||||
<h2>Material Design Icons <a href="https://github.com/google/material-design-icons">(Link)</a></h2>
|
||||
by Google, licensed under an Attribution-ShareAlike 4.0 International license <a href="LICENSE_MATERIAL_DESIGN_ICONS.txt">(View)</a>
|
||||
|
||||
</html>
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
BIN
app/src/main/assets/testfile.mp3
Normal file
BIN
app/src/main/assets/testfile.mp3
Normal file
Binary file not shown.
@ -2,17 +2,26 @@ package de.danoeh.antennapod;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.res.Configuration;
|
||||
import android.util.Log;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.preferences.PlaybackPreferences;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
|
||||
import de.danoeh.antennapod.core.asynctask.PicassoProvider;
|
||||
import de.danoeh.antennapod.core.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.spa.SPAUtil;
|
||||
|
||||
/** Main application class. */
|
||||
public class PodcastApp extends Application {
|
||||
|
||||
// make sure that ClientConfigurator executes its static code
|
||||
static {
|
||||
try {
|
||||
Class.forName("de.danoeh.antennapod.config.ClientConfigurator");
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("ClientConfigurator not found");
|
||||
}
|
||||
}
|
||||
|
||||
private static final String TAG = "PodcastApp";
|
||||
public static final String EXPORT_DIR = "export/";
|
||||
|
||||
private static float LOGICAL_DENSITY;
|
||||
|
||||
@ -28,6 +37,7 @@ public class PodcastApp extends Application {
|
||||
singleton = this;
|
||||
LOGICAL_DENSITY = getResources().getDisplayMetrics().density;
|
||||
|
||||
PicassoProvider.setupPicassoInstance(this);
|
||||
UserPreferences.createInstance(this);
|
||||
PlaybackPreferences.createInstance(this);
|
||||
EventDistributor.getInstance();
|
@ -6,11 +6,11 @@ import android.content.res.Configuration;
|
||||
import android.content.res.TypedArray;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.ActionBarDrawerToggle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.app.ListFragment;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v7.app.ActionBarDrawerToggle;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
@ -25,29 +25,30 @@ import android.widget.ImageView.ScaleType;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.adapter.ChapterListAdapter;
|
||||
import de.danoeh.antennapod.adapter.NavListAdapter;
|
||||
import de.danoeh.antennapod.asynctask.PicassoProvider;
|
||||
import de.danoeh.antennapod.core.feed.Chapter;
|
||||
import de.danoeh.antennapod.core.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.MediaType;
|
||||
import de.danoeh.antennapod.core.feed.SimpleChapter;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
import de.danoeh.antennapod.core.util.playback.ExternalMedia;
|
||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||
import de.danoeh.antennapod.core.util.playback.PlaybackController;
|
||||
import de.danoeh.antennapod.dialog.VariableSpeedDialog;
|
||||
import de.danoeh.antennapod.feed.Chapter;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.MediaType;
|
||||
import de.danoeh.antennapod.feed.SimpleChapter;
|
||||
import de.danoeh.antennapod.fragment.CoverFragment;
|
||||
import de.danoeh.antennapod.fragment.ItemDescriptionFragment;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.util.menuhandler.MenuItemUtils;
|
||||
import de.danoeh.antennapod.util.menuhandler.NavDrawerActivity;
|
||||
import de.danoeh.antennapod.util.playback.ExternalMedia;
|
||||
import de.danoeh.antennapod.util.playback.Playable;
|
||||
import de.danoeh.antennapod.util.playback.PlaybackController;
|
||||
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
|
||||
import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
|
||||
|
||||
/**
|
||||
* Activity for playing audio files.
|
||||
@ -269,14 +270,17 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc
|
||||
|
||||
@Override
|
||||
protected void postStatusMsg(int resId) {
|
||||
setSupportProgressBarIndeterminateVisibility(resId == R.string.player_preparing_msg
|
||||
if (resId == R.string.player_preparing_msg
|
||||
|| resId == R.string.player_seeking_msg
|
||||
|| resId == R.string.player_buffering_msg);
|
||||
|| resId == R.string.player_buffering_msg) {
|
||||
// TODO Show progress bar here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void clearStatusMsg() {
|
||||
setSupportProgressBarIndeterminateVisibility(false);
|
||||
// TODO Hide progress bar here
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -380,7 +384,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
PicassoProvider.getMediaMetadataPicassoInstance(AudioplayerActivity.this)
|
||||
Picasso.with(AudioplayerActivity.this)
|
||||
.load(media.getImageUri())
|
||||
.fit()
|
||||
.into(butNavLeft);
|
||||
@ -397,7 +401,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
PicassoProvider.getMediaMetadataPicassoInstance(AudioplayerActivity.this)
|
||||
Picasso.with(AudioplayerActivity.this)
|
||||
.load(media.getImageUri())
|
||||
.fit()
|
||||
.into(butNavLeft);
|
||||
@ -424,14 +428,13 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc
|
||||
butNavRight = (ImageButton) findViewById(R.id.butNavRight);
|
||||
butPlaybackSpeed = (Button) findViewById(R.id.butPlaybackSpeed);
|
||||
|
||||
TypedArray typedArray = obtainStyledAttributes(new int[]{R.attr.nav_drawer_toggle});
|
||||
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, typedArray.getResourceId(0, 0), R.string.drawer_open, R.string.drawer_close) {
|
||||
String currentTitle = getSupportActionBar().getTitle().toString();
|
||||
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) {
|
||||
CharSequence currentTitle = getSupportActionBar().getTitle();
|
||||
|
||||
@Override
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
super.onDrawerOpened(drawerView);
|
||||
currentTitle = getSupportActionBar().getTitle().toString();
|
||||
currentTitle = getSupportActionBar().getTitle();
|
||||
getSupportActionBar().setTitle(R.string.app_name);
|
||||
supportInvalidateOptionsMenu();
|
||||
}
|
||||
@ -443,7 +446,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc
|
||||
supportInvalidateOptionsMenu();
|
||||
}
|
||||
};
|
||||
typedArray.recycle();
|
||||
|
||||
drawerToggle.setDrawerIndicatorEnabled(false);
|
||||
drawerLayout.setDrawerListener(drawerToggle);
|
||||
|
@ -17,6 +17,8 @@ import android.widget.ListView;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jsoup.Jsoup;
|
||||
import org.jsoup.examples.HtmlToPlainText;
|
||||
@ -30,14 +32,13 @@ import java.util.Map;
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.adapter.FeedItemlistDescriptionAdapter;
|
||||
import de.danoeh.antennapod.asynctask.PicassoProvider;
|
||||
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.core.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
||||
|
||||
/**
|
||||
* Default implementation of OnlineFeedViewActivity. Shows the downloaded feed's items with their descriptions,
|
||||
@ -123,7 +124,7 @@ public class DefaultOnlineFeedViewActivity extends OnlineFeedViewActivity {
|
||||
subscribeButton = (Button) header.findViewById(R.id.butSubscribe);
|
||||
|
||||
if (feed.getImage() != null && StringUtils.isNoneBlank(feed.getImage().getDownload_url())) {
|
||||
PicassoProvider.getDefaultPicassoInstance(this)
|
||||
Picasso.with(this)
|
||||
.load(feed.getImage().getDownload_url())
|
||||
.fit()
|
||||
.into(cover);
|
@ -19,7 +19,7 @@ import android.widget.*;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
@ -14,9 +14,9 @@ import org.apache.commons.lang3.Validate;
|
||||
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.service.download.DownloadRequest;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadRequest;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
||||
|
||||
/**
|
||||
* Shows a username and a password text field.
|
@ -9,19 +9,25 @@ import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.*;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.PicassoProvider;
|
||||
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedPreferences;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.util.LangUtils;
|
||||
import de.danoeh.antennapod.util.menuhandler.FeedMenuHandler;
|
||||
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedPreferences;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
import de.danoeh.antennapod.core.storage.DBWriter;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.core.util.LangUtils;
|
||||
import de.danoeh.antennapod.menuhandler.FeedMenuHandler;
|
||||
|
||||
/**
|
||||
* Displays information about a feed.
|
||||
@ -78,7 +84,7 @@ public class FeedInfoActivity extends ActionBarActivity {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
PicassoProvider.getDefaultPicassoInstance(FeedInfoActivity.this)
|
||||
Picasso.with(FeedInfoActivity.this)
|
||||
.load(feed.getImageUri())
|
||||
.fit()
|
||||
.into(imgvCover);
|
||||
@ -167,7 +173,7 @@ public class FeedInfoActivity extends ActionBarActivity {
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
menu.findItem(R.id.support_item).setVisible(
|
||||
feed != null && feed.getPaymentLink() != null);
|
||||
menu.findItem(R.id.share_link_item).setVisible(feed != null &&feed.getLink() != null);
|
||||
menu.findItem(R.id.share_link_item).setVisible(feed != null && feed.getLink() != null);
|
||||
menu.findItem(R.id.visit_website_item).setVisible(feed != null && feed.getLink() != null);
|
||||
return true;
|
||||
}
|
@ -14,8 +14,10 @@ import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.util.flattr.FlattrUtils;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.util.flattr.FlattrUtils;
|
||||
import de.danoeh.antennapod.preferences.PreferenceController;
|
||||
|
||||
import org.shredzone.flattr4j.exception.FlattrException;
|
||||
|
||||
/** Guides the user through the authentication process */
|
||||
@ -108,7 +110,7 @@ public class FlattrAuthActivity extends ActionBarActivity {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
if (authSuccessful) {
|
||||
Intent intent = new Intent(this, PreferenceActivity.class);
|
||||
Intent intent = new Intent(this, PreferenceController.getPreferenceActivity());
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
startActivity(intent);
|
||||
} else {
|
@ -3,42 +3,51 @@ package de.danoeh.antennapod.activity;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.TypedArray;
|
||||
import android.media.AudioManager;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.v4.app.ActionBarDrawerToggle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.support.v7.app.ActionBarDrawerToggle;
|
||||
import android.util.Log;
|
||||
import android.view.*;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
|
||||
import org.apache.commons.lang3.Validate;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.adapter.NavListAdapter;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.fragment.*;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.util.StorageUtils;
|
||||
import de.danoeh.antennapod.util.menuhandler.NavDrawerActivity;
|
||||
|
||||
import java.util.List;
|
||||
import de.danoeh.antennapod.core.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
import de.danoeh.antennapod.core.util.StorageUtils;
|
||||
import de.danoeh.antennapod.fragment.AddFeedFragment;
|
||||
import de.danoeh.antennapod.fragment.DownloadsFragment;
|
||||
import de.danoeh.antennapod.fragment.ExternalPlayerFragment;
|
||||
import de.danoeh.antennapod.fragment.ItemlistFragment;
|
||||
import de.danoeh.antennapod.fragment.NewEpisodesFragment;
|
||||
import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
|
||||
import de.danoeh.antennapod.fragment.QueueFragment;
|
||||
import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
|
||||
import de.danoeh.antennapod.preferences.PreferenceController;
|
||||
|
||||
/**
|
||||
* The activity that is shown when the user launches the app.
|
||||
*/
|
||||
public class MainActivity extends ActionBarActivity implements NavDrawerActivity{
|
||||
public class MainActivity extends ActionBarActivity implements NavDrawerActivity {
|
||||
private static final String TAG = "MainActivity";
|
||||
private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED
|
||||
| EventDistributor.DOWNLOAD_QUEUED
|
||||
@ -75,7 +84,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
setTheme(UserPreferences.getTheme());
|
||||
super.onCreate(savedInstanceState);
|
||||
supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
||||
StorageUtils.checkStorageAvailability(this);
|
||||
setContentView(R.layout.main);
|
||||
setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
||||
@ -85,8 +93,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
|
||||
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
|
||||
navList = (ListView) findViewById(R.id.nav_list);
|
||||
|
||||
TypedArray typedArray = obtainStyledAttributes(new int[]{R.attr.nav_drawer_toggle});
|
||||
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, typedArray.getResourceId(0, 0), R.string.drawer_open, R.string.drawer_close) {
|
||||
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) {
|
||||
@Override
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
super.onDrawerOpened(drawerView);
|
||||
@ -103,7 +110,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
|
||||
|
||||
}
|
||||
};
|
||||
typedArray.recycle();
|
||||
|
||||
drawerLayout.setDrawerListener(drawerToggle);
|
||||
FragmentManager fm = getSupportFragmentManager();
|
||||
@ -309,7 +315,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
|
||||
}
|
||||
switch (item.getItemId()) {
|
||||
case R.id.show_preferences:
|
||||
startActivity(new Intent(this, PreferenceActivity.class));
|
||||
startActivity(new Intent(this, PreferenceController.getPreferenceActivity()));
|
||||
return true;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
@ -3,13 +3,10 @@ package de.danoeh.antennapod.activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.media.AudioManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
@ -20,23 +17,21 @@ import android.widget.ImageButton;
|
||||
import android.widget.SeekBar;
|
||||
import android.widget.SeekBar.OnSeekBarChangeListener;
|
||||
import android.widget.TextView;
|
||||
import com.doomonafireball.betterpickers.hmspicker.HmsPickerBuilder;
|
||||
import com.doomonafireball.betterpickers.hmspicker.HmsPickerDialogFragment;
|
||||
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.core.storage.DBTasks;
|
||||
import de.danoeh.antennapod.core.util.Converter;
|
||||
import de.danoeh.antennapod.core.util.ShareUtils;
|
||||
import de.danoeh.antennapod.core.util.StorageUtils;
|
||||
import de.danoeh.antennapod.core.util.playback.MediaPlayerError;
|
||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||
import de.danoeh.antennapod.core.util.playback.PlaybackController;
|
||||
import de.danoeh.antennapod.dialog.TimeDialog;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.storage.DBTasks;
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
import de.danoeh.antennapod.util.ShareUtils;
|
||||
import de.danoeh.antennapod.util.StorageUtils;
|
||||
import de.danoeh.antennapod.util.playback.MediaPlayerError;
|
||||
import de.danoeh.antennapod.util.playback.Playable;
|
||||
import de.danoeh.antennapod.util.playback.PlaybackController;
|
||||
import org.shredzone.flattr4j.model.User;
|
||||
|
||||
/**
|
||||
* Provides general features which are both needed for playing audio and video
|
||||
@ -172,9 +167,6 @@ public abstract class MediaplayerActivity extends ActionBarActivity
|
||||
chooseTheme();
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// subclasses might use this feature
|
||||
supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
||||
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, "Creating Activity");
|
||||
StorageUtils.checkStorageAvailability(this);
|
||||
@ -323,34 +315,17 @@ public abstract class MediaplayerActivity extends ActionBarActivity
|
||||
break;
|
||||
case R.id.set_sleeptimer_item:
|
||||
if (controller.serviceAvailable()) {
|
||||
int pickerStyle = (UserPreferences.getTheme() == R.style.Theme_AntennaPod_Light) ?
|
||||
R.style.AntennaPodBetterPickerThemeLight : R.style.AntennaPodBetterPickerThemeDark;
|
||||
if (Build.VERSION.SDK_INT > 10) { // TODO remove this as soon as dialog is shown correctly on 2.3
|
||||
HmsPickerBuilder hpb = new HmsPickerBuilder()
|
||||
.setStyleResId(pickerStyle)
|
||||
.setFragmentManager(getSupportFragmentManager());
|
||||
TimeDialog td = new TimeDialog(this,
|
||||
R.string.set_sleeptimer_label,
|
||||
R.string.set_sleeptimer_label) {
|
||||
|
||||
hpb.addHmsPickerDialogHandler(new HmsPickerDialogFragment.HmsPickerDialogHandler() {
|
||||
@Override
|
||||
public void onDialogHmsSet(int ref, int hours, int minutes, int seconds) {
|
||||
if (controller != null && controller.serviceAvailable()) {
|
||||
controller.setSleepTimer((hours * 3600 + minutes * 60 + seconds) * 1000);
|
||||
}
|
||||
}
|
||||
});
|
||||
hpb.show();
|
||||
} else {
|
||||
TimeDialog td = new TimeDialog(this,
|
||||
R.string.set_sleeptimer_label,
|
||||
R.string.set_sleeptimer_label) {
|
||||
@Override
|
||||
public void onTimeEntered(long millis) {
|
||||
controller.setSleepTimer(millis);
|
||||
}
|
||||
};
|
||||
td.show();
|
||||
|
||||
@Override
|
||||
public void onTimeEntered(long millis) {
|
||||
controller.setSleepTimer(millis);
|
||||
}
|
||||
};
|
||||
td.show();
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
@ -16,21 +16,21 @@ import android.widget.RelativeLayout;
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.dialog.AuthenticationDialog;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedPreferences;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.service.download.DownloadRequest;
|
||||
import de.danoeh.antennapod.service.download.DownloadStatus;
|
||||
import de.danoeh.antennapod.service.download.Downloader;
|
||||
import de.danoeh.antennapod.service.download.HttpDownloader;
|
||||
import de.danoeh.antennapod.syndication.handler.FeedHandler;
|
||||
import de.danoeh.antennapod.syndication.handler.FeedHandlerResult;
|
||||
import de.danoeh.antennapod.syndication.handler.UnsupportedFeedtypeException;
|
||||
import de.danoeh.antennapod.util.DownloadError;
|
||||
import de.danoeh.antennapod.util.FileNameGenerator;
|
||||
import de.danoeh.antennapod.util.StorageUtils;
|
||||
import de.danoeh.antennapod.util.URLChecker;
|
||||
import de.danoeh.antennapod.util.syndication.FeedDiscoverer;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedPreferences;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadRequest;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadStatus;
|
||||
import de.danoeh.antennapod.core.service.download.Downloader;
|
||||
import de.danoeh.antennapod.core.service.download.HttpDownloader;
|
||||
import de.danoeh.antennapod.core.syndication.handler.FeedHandler;
|
||||
import de.danoeh.antennapod.core.syndication.handler.FeedHandlerResult;
|
||||
import de.danoeh.antennapod.core.syndication.handler.UnsupportedFeedtypeException;
|
||||
import de.danoeh.antennapod.core.util.DownloadError;
|
||||
import de.danoeh.antennapod.core.util.FileNameGenerator;
|
||||
import de.danoeh.antennapod.core.util.StorageUtils;
|
||||
import de.danoeh.antennapod.core.util.URLChecker;
|
||||
import de.danoeh.antennapod.core.util.syndication.FeedDiscoverer;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
@ -183,14 +183,14 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity {
|
||||
url = URLChecker.prepareURL(url);
|
||||
feed = new Feed(url, new Date());
|
||||
if (username != null && password != null) {
|
||||
feed.setPreferences(new FeedPreferences(0, true, username, password));
|
||||
feed.setPreferences(new FeedPreferences(0, false, username, password));
|
||||
}
|
||||
String fileUrl = new File(getExternalCacheDir(),
|
||||
FileNameGenerator.generateFileName(feed.getDownload_url()))
|
||||
.toString();
|
||||
feed.setFile_url(fileUrl);
|
||||
final DownloadRequest request = new DownloadRequest(feed.getFile_url(),
|
||||
feed.getDownload_url(), "OnlineFeed", 0, Feed.FEEDFILETYPE_FEED, username, password, true);
|
||||
feed.getDownload_url(), "OnlineFeed", 0, Feed.FEEDFILETYPE_FEED, username, password, true, null);
|
||||
downloader = new HttpDownloader(
|
||||
request);
|
||||
new Thread() {
|
@ -13,8 +13,8 @@ import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.ListView;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.opml.OpmlElement;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.opml.OpmlElement;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
@ -6,7 +6,7 @@ import android.util.Log;
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.asynctask.OpmlFeedQueuer;
|
||||
import de.danoeh.antennapod.asynctask.OpmlImportWorker;
|
||||
import de.danoeh.antennapod.opml.OpmlElement;
|
||||
import de.danoeh.antennapod.core.opml.OpmlElement;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
@ -2,8 +2,8 @@ package de.danoeh.antennapod.activity;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.os.Bundle;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.util.LangUtils;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.util.LangUtils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
@ -13,9 +13,9 @@ import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.util.LangUtils;
|
||||
import de.danoeh.antennapod.util.StorageUtils;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.util.LangUtils;
|
||||
import de.danoeh.antennapod.core.util.StorageUtils;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
@ -23,7 +23,6 @@ import java.io.*;
|
||||
* Lets the user start the OPML-import process from a path
|
||||
*/
|
||||
public class OpmlImportFromPathActivity extends OpmlImportBaseActivity {
|
||||
public static final String IMPORT_DIR = "import/";
|
||||
private static final String TAG = "OpmlImportFromPathActivity";
|
||||
private TextView txtvPath;
|
||||
private Button butStart;
|
||||
@ -61,7 +60,7 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity {
|
||||
* directory.
|
||||
*/
|
||||
private void setImportPath() {
|
||||
File importDir = UserPreferences.getDataFolder(this, IMPORT_DIR);
|
||||
File importDir = UserPreferences.getDataFolder(this, UserPreferences.IMPORT_DIR);
|
||||
boolean success = true;
|
||||
if (!importDir.exists()) {
|
||||
if (BuildConfig.DEBUG)
|
@ -1,6 +1,6 @@
|
||||
package de.danoeh.antennapod.activity;
|
||||
|
||||
import de.danoeh.antennapod.opml.OpmlElement;
|
||||
import de.danoeh.antennapod.core.opml.OpmlElement;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -0,0 +1,120 @@
|
||||
package de.danoeh.antennapod.activity;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.preferences.PreferenceController;
|
||||
|
||||
/**
|
||||
* PreferenceActivity for API 11+. In order to change the behavior of the preference UI, see
|
||||
* PreferenceController.
|
||||
*/
|
||||
public class PreferenceActivity extends ActionBarActivity {
|
||||
|
||||
private PreferenceController preferenceController;
|
||||
private MainFragment prefFragment;
|
||||
private static PreferenceActivity instance;
|
||||
|
||||
|
||||
private final PreferenceController.PreferenceUI preferenceUI = new PreferenceController.PreferenceUI() {
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
@Override
|
||||
public Preference findPreference(CharSequence key) {
|
||||
return prefFragment.findPreference(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Activity getActivity() {
|
||||
return PreferenceActivity.this;
|
||||
}
|
||||
};
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
setTheme(UserPreferences.getTheme());
|
||||
super.onCreate(savedInstanceState);
|
||||
instance = this;
|
||||
|
||||
ActionBar ab = getSupportActionBar();
|
||||
if (ab != null) {
|
||||
ab.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
||||
// set up layout
|
||||
FrameLayout root = new FrameLayout(this);
|
||||
root.setId(R.id.content);
|
||||
root.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.MATCH_PARENT));
|
||||
setContentView(root);
|
||||
prefFragment = new MainFragment();
|
||||
getFragmentManager().beginTransaction().replace(R.id.content, prefFragment).commit();
|
||||
|
||||
preferenceController = new PreferenceController(preferenceUI);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
preferenceController.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
// The default back button behavior has to be overwritten because changing the theme clears the back stack
|
||||
Intent destIntent = new Intent(this, MainActivity.class);
|
||||
destIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(destIntent);
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
super.onCreateOptionsMenu(menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
Intent destIntent = new Intent(this, MainActivity.class);
|
||||
destIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(destIntent);
|
||||
finish();
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
public static class MainFragment extends PreferenceFragment {
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(R.xml.preferences);
|
||||
instance.preferenceController.onCreate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
instance.preferenceController.onResume();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
package de.danoeh.antennapod.activity;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources.Theme;
|
||||
import android.os.Bundle;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceScreen;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.preferences.PreferenceController;
|
||||
|
||||
/**
|
||||
* PreferenceActivity for API 10. In order to change the behavior of the preference UI, see
|
||||
* PreferenceController.
|
||||
*/
|
||||
public class PreferenceActivityGingerbread extends android.preference.PreferenceActivity {
|
||||
private static final String TAG = "PreferenceActivity";
|
||||
|
||||
private PreferenceController preferenceController;
|
||||
|
||||
private final PreferenceController.PreferenceUI preferenceUI = new PreferenceController.PreferenceUI() {
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public Preference findPreference(CharSequence key) {
|
||||
return PreferenceActivityGingerbread.this.findPreference(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Activity getActivity() {
|
||||
return PreferenceActivityGingerbread.this;
|
||||
}
|
||||
};
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
setTheme(UserPreferences.getTheme());
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
addPreferencesFromResource(R.xml.preferences);
|
||||
preferenceController = new PreferenceController(preferenceUI);
|
||||
preferenceController.onCreate();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
preferenceController.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onApplyThemeResource(Theme theme, int resid, boolean first) {
|
||||
theme.applyStyle(UserPreferences.getTheme(), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
preferenceController.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
|
||||
Preference preference) {
|
||||
super.onPreferenceTreeClick(preferenceScreen, preference);
|
||||
if (preference != null)
|
||||
if (preference instanceof PreferenceScreen)
|
||||
if (((PreferenceScreen) preference).getDialog() != null)
|
||||
((PreferenceScreen) preference)
|
||||
.getDialog()
|
||||
.getWindow()
|
||||
.getDecorView()
|
||||
.setBackgroundDrawable(
|
||||
this.getWindow().getDecorView()
|
||||
.getBackground().getConstantState()
|
||||
.newDrawable()
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
// The default back button behavior has to be overwritten because changing the theme clears the back stack
|
||||
Intent destIntent = new Intent(this, MainActivity.class);
|
||||
destIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(destIntent);
|
||||
finish();
|
||||
}
|
||||
}
|
@ -12,8 +12,8 @@ import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.util.StorageUtils;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.util.StorageUtils;
|
||||
|
||||
/** Is show if there is now external storage available. */
|
||||
public class StorageErrorActivity extends ActionBarActivity {
|
@ -6,12 +6,12 @@ import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.view.WindowCompat;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.SurfaceHolder;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
@ -21,11 +21,11 @@ import android.widget.SeekBar;
|
||||
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.MediaType;
|
||||
import de.danoeh.antennapod.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.service.playback.PlayerStatus;
|
||||
import de.danoeh.antennapod.util.playback.ExternalMedia;
|
||||
import de.danoeh.antennapod.util.playback.Playable;
|
||||
import de.danoeh.antennapod.core.feed.MediaType;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
||||
import de.danoeh.antennapod.core.util.playback.ExternalMedia;
|
||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||
import de.danoeh.antennapod.view.AspectRatioVideoView;
|
||||
|
||||
/**
|
||||
@ -47,16 +47,14 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
||||
|
||||
@Override
|
||||
protected void chooseTheme() {
|
||||
setTheme(R.style.Theme_AntennaPod_Dark);
|
||||
setTheme(R.style.Theme_AntennaPod_VideoPlayer);
|
||||
}
|
||||
|
||||
@SuppressLint("AppCompatMethod")
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
if (Build.VERSION.SDK_INT >= 11) {
|
||||
requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
|
||||
}
|
||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY); // has to be called before setting layout content
|
||||
super.onCreate(savedInstanceState);
|
||||
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0x80000000));
|
||||
}
|
||||
@ -336,6 +334,9 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= 14) {
|
||||
videoview.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
|
||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
|
||||
|
||||
}
|
||||
videoOverlay.setVisibility(View.GONE);
|
||||
butPlay.setVisibility(View.GONE);
|
@ -15,12 +15,12 @@ import android.widget.*;
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
import de.danoeh.antennapod.gpoddernet.GpodnetService;
|
||||
import de.danoeh.antennapod.gpoddernet.GpodnetServiceException;
|
||||
import de.danoeh.antennapod.gpoddernet.model.GpodnetDevice;
|
||||
import de.danoeh.antennapod.preferences.GpodnetPreferences;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.service.GpodnetSyncService;
|
||||
import de.danoeh.antennapod.core.gpoddernet.GpodnetService;
|
||||
import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException;
|
||||
import de.danoeh.antennapod.core.gpoddernet.model.GpodnetDevice;
|
||||
import de.danoeh.antennapod.core.preferences.GpodnetPreferences;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.service.GpodnetSyncService;
|
||||
|
||||
import java.security.SecureRandom;
|
||||
import java.util.ArrayList;
|
@ -1,6 +1,6 @@
|
||||
package de.danoeh.antennapod.adapter;
|
||||
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
|
||||
public interface ActionButtonCallback {
|
||||
/** Is called when the action button of a list item has been pressed. */
|
@ -8,9 +8,9 @@ import android.widget.ImageButton;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
||||
|
||||
/**
|
||||
* Utility methods for the action button that is displayed on the right hand side
|
||||
@ -27,7 +27,7 @@ public class ActionButtonUtils {
|
||||
|
||||
this.context = context;
|
||||
drawables = context.obtainStyledAttributes(new int[]{
|
||||
R.attr.av_play, R.attr.navigation_cancel, R.attr.av_download, R.attr.navigation_chapters, R.attr.navigation_accept});
|
||||
R.attr.av_play, R.attr.navigation_cancel, R.attr.av_download, R.attr.av_pause, R.attr.navigation_accept});
|
||||
labels = new int[]{R.string.play_label, R.string.cancel_download_label, R.string.download_label, R.string.mark_read_label};
|
||||
}
|
||||
|
@ -4,10 +4,10 @@ import android.content.res.Resources;
|
||||
import android.view.View;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.util.Converter;
|
||||
|
||||
/**
|
||||
* Utility methods for adapters
|
||||
@ -44,13 +44,9 @@ public class AdapterUtils {
|
||||
- media.getPosition()));
|
||||
}
|
||||
} else if (!media.isDownloaded()) {
|
||||
txtvPos.setText(res.getString(
|
||||
R.string.size_prefix)
|
||||
+ Converter.byteToString(media.getSize()));
|
||||
txtvPos.setText(Converter.byteToString(media.getSize()));
|
||||
} else {
|
||||
txtvPos.setText(res.getString(
|
||||
R.string.length_prefix)
|
||||
+ Converter.getDurationStringLong(media
|
||||
txtvPos.setText(Converter.getDurationStringLong(media
|
||||
.getDuration()));
|
||||
}
|
||||
}
|
@ -16,10 +16,10 @@ import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.TextView;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.Chapter;
|
||||
import de.danoeh.antennapod.util.ChapterUtils;
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
import de.danoeh.antennapod.util.playback.Playable;
|
||||
import de.danoeh.antennapod.core.feed.Chapter;
|
||||
import de.danoeh.antennapod.core.util.ChapterUtils;
|
||||
import de.danoeh.antennapod.core.util.Converter;
|
||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -6,13 +6,13 @@ import android.widget.Toast;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.storage.DBTasks;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.storage.DBTasks;
|
||||
import de.danoeh.antennapod.core.storage.DBWriter;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
||||
|
||||
/**
|
||||
* Default implementation of an ActionButtonCallback
|
@ -8,10 +8,10 @@ import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.TextView;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedImage;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.service.download.DownloadStatus;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedImage;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadStatus;
|
||||
|
||||
/** Displays a list of DownloadStatus entries. */
|
||||
public class DownloadLogAdapter extends BaseAdapter {
|
@ -10,10 +10,11 @@ import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.PicassoProvider;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.util.Converter;
|
||||
|
||||
/**
|
||||
* Shows a list of downloaded episodes
|
||||
@ -72,7 +73,7 @@ public class DownloadedEpisodesListAdapter extends BaseAdapter {
|
||||
}
|
||||
|
||||
holder.title.setText(item.getTitle());
|
||||
holder.pubDate.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_SHOW_DATE));
|
||||
holder.pubDate.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_ABBREV_ALL));
|
||||
holder.txtvSize.setText(Converter.byteToString(item.getMedia().getSize()));
|
||||
FeedItem.State state = item.getState();
|
||||
|
||||
@ -87,7 +88,7 @@ public class DownloadedEpisodesListAdapter extends BaseAdapter {
|
||||
holder.butSecondary.setOnClickListener(secondaryActionListener);
|
||||
|
||||
|
||||
PicassoProvider.getMediaMetadataPicassoInstance(context)
|
||||
Picasso.with(context)
|
||||
.load(item.getImageUri())
|
||||
.fit()
|
||||
.into(holder.imageView);
|
@ -8,12 +8,13 @@ import android.widget.BaseAdapter;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.service.download.DownloadRequest;
|
||||
import de.danoeh.antennapod.service.download.DownloadStatus;
|
||||
import de.danoeh.antennapod.service.download.Downloader;
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
import de.danoeh.antennapod.util.ThemeUtils;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadRequest;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadStatus;
|
||||
import de.danoeh.antennapod.core.service.download.Downloader;
|
||||
import de.danoeh.antennapod.core.util.Converter;
|
||||
import de.danoeh.antennapod.core.util.ThemeUtils;
|
||||
|
||||
public class DownloadlistAdapter extends BaseAdapter {
|
||||
|
||||
@ -49,7 +50,7 @@ public class DownloadlistAdapter extends BaseAdapter {
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
Holder holder;
|
||||
Downloader downloader = getItem(position);
|
||||
Downloader downloader = getItem(position);
|
||||
DownloadRequest request = downloader.getDownloadRequest();
|
||||
// Inflate layout
|
||||
if (convertView == null) {
|
||||
@ -58,8 +59,6 @@ public class DownloadlistAdapter extends BaseAdapter {
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
convertView = inflater.inflate(R.layout.downloadlist_item, parent, false);
|
||||
holder.title = (TextView) convertView.findViewById(R.id.txtvTitle);
|
||||
holder.message = (TextView) convertView
|
||||
.findViewById(R.id.txtvMessage);
|
||||
holder.downloaded = (TextView) convertView
|
||||
.findViewById(R.id.txtvDownloaded);
|
||||
holder.percent = (TextView) convertView
|
||||
@ -82,9 +81,9 @@ public class DownloadlistAdapter extends BaseAdapter {
|
||||
}
|
||||
|
||||
holder.title.setText(request.getTitle());
|
||||
if (request.getStatusMsg() != 0) {
|
||||
holder.message.setText(request.getStatusMsg());
|
||||
}
|
||||
|
||||
holder.progbar.setIndeterminate(request.getSoFar() <= 0);
|
||||
|
||||
String strDownloaded = Converter.byteToString(request.getSoFar());
|
||||
if (request.getSize() != DownloadStatus.SIZE_UNKNOWN) {
|
||||
strDownloaded += " / " + Converter.byteToString(request.getSize());
|
||||
@ -115,7 +114,6 @@ public class DownloadlistAdapter extends BaseAdapter {
|
||||
|
||||
static class Holder {
|
||||
TextView title;
|
||||
TextView message;
|
||||
TextView downloaded;
|
||||
TextView percent;
|
||||
ProgressBar progbar;
|
@ -9,12 +9,11 @@ import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.*;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.feed.MediaType;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
import de.danoeh.antennapod.util.ThemeUtils;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.feed.MediaType;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.core.util.ThemeUtils;
|
||||
|
||||
/**
|
||||
* List adapter for items of feeds that the user has already subscribed to.
|
||||
@ -108,22 +107,22 @@ public class FeedItemlistAdapter extends BaseAdapter {
|
||||
FeedItem.State state = item.getState();
|
||||
switch (state) {
|
||||
case PLAYING:
|
||||
holder.statusUnread.setVisibility(View.GONE);
|
||||
holder.statusUnread.setVisibility(View.INVISIBLE);
|
||||
holder.episodeProgress.setVisibility(View.VISIBLE);
|
||||
break;
|
||||
case IN_PROGRESS:
|
||||
holder.statusUnread.setVisibility(View.GONE);
|
||||
holder.statusUnread.setVisibility(View.INVISIBLE);
|
||||
holder.episodeProgress.setVisibility(View.VISIBLE);
|
||||
break;
|
||||
case NEW:
|
||||
holder.statusUnread.setVisibility(View.VISIBLE);
|
||||
break;
|
||||
default:
|
||||
holder.statusUnread.setVisibility(View.GONE);
|
||||
holder.statusUnread.setVisibility(View.INVISIBLE);
|
||||
break;
|
||||
}
|
||||
|
||||
holder.published.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_SHOW_DATE));
|
||||
holder.published.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_ABBREV_ALL));
|
||||
|
||||
|
||||
FeedMedia media = item.getMedia();
|
||||
@ -146,6 +145,10 @@ public class FeedItemlistAdapter extends BaseAdapter {
|
||||
item.getMedia())) {
|
||||
holder.episodeProgress.setVisibility(View.VISIBLE);
|
||||
holder.episodeProgress.setProgress(((ItemAccess) itemAccess).getItemDownloadProgressPercent(item));
|
||||
holder.published.setVisibility(View.GONE);
|
||||
} else {
|
||||
holder.episodeProgress.setVisibility(View.GONE);
|
||||
holder.published.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
TypedArray typeDrawables = context.obtainStyledAttributes(
|
@ -7,7 +7,7 @@ import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.TextView;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -10,9 +10,11 @@ import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.PicassoProvider;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
|
||||
/**
|
||||
* BaseAdapter for the navigation drawer
|
||||
@ -37,7 +39,7 @@ public class NavListAdapter extends BaseAdapter {
|
||||
this.context = context;
|
||||
|
||||
TypedArray ta = context.obtainStyledAttributes(new int[]{R.attr.ic_new, R.attr.stat_playlist,
|
||||
R.attr.av_download, R.attr.device_access_time, R.attr.content_new});
|
||||
R.attr.av_download, R.attr.ic_history, R.attr.content_new});
|
||||
drawables = new Drawable[]{ta.getDrawable(0), ta.getDrawable(1), ta.getDrawable(2),
|
||||
ta.getDrawable(3), ta.getDrawable(4)};
|
||||
ta.recycle();
|
||||
@ -54,7 +56,7 @@ public class NavListAdapter extends BaseAdapter {
|
||||
if (viewType == VIEW_TYPE_NAV) {
|
||||
return context.getString(NAV_TITLES[position]);
|
||||
} else if (viewType == VIEW_TYPE_SECTION_DIVIDER) {
|
||||
return context.getString(R.string.podcasts_label);
|
||||
return "";
|
||||
} else {
|
||||
return itemAccess.getItem(position);
|
||||
}
|
||||
@ -88,11 +90,11 @@ public class NavListAdapter extends BaseAdapter {
|
||||
if (viewType == VIEW_TYPE_NAV) {
|
||||
v = getNavView((String) getItem(position), position, convertView, parent);
|
||||
} else if (viewType == VIEW_TYPE_SECTION_DIVIDER) {
|
||||
v = getSectionDividerView((String) getItem(position), position, convertView, parent);
|
||||
v = getSectionDividerView(convertView, parent);
|
||||
} else {
|
||||
v = getFeedView(position - SUBSCRIPTION_OFFSET, convertView, parent);
|
||||
}
|
||||
if (v != null) {
|
||||
if (v != null && viewType != VIEW_TYPE_SECTION_DIVIDER) {
|
||||
TextView txtvTitle = (TextView) v.findViewById(R.id.txtvTitle);
|
||||
if (position == itemAccess.getSelectedItemIndex()) {
|
||||
txtvTitle.setTypeface(null, Typeface.BOLD);
|
||||
@ -147,22 +149,11 @@ public class NavListAdapter extends BaseAdapter {
|
||||
return convertView;
|
||||
}
|
||||
|
||||
private View getSectionDividerView(String title, int position, View convertView, ViewGroup parent) {
|
||||
SectionHolder holder;
|
||||
if (convertView == null) {
|
||||
holder = new SectionHolder();
|
||||
LayoutInflater inflater = (LayoutInflater) context
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
private View getSectionDividerView(View convertView, ViewGroup parent) {
|
||||
LayoutInflater inflater = (LayoutInflater) context
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
|
||||
convertView = inflater.inflate(R.layout.nav_section_item, parent, false);
|
||||
|
||||
holder.title = (TextView) convertView.findViewById(R.id.txtvTitle);
|
||||
convertView.setTag(holder);
|
||||
} else {
|
||||
holder = (SectionHolder) convertView.getTag();
|
||||
}
|
||||
|
||||
holder.title.setText(title);
|
||||
convertView = inflater.inflate(R.layout.nav_section_item, parent, false);
|
||||
|
||||
convertView.setEnabled(false);
|
||||
convertView.setOnClickListener(null);
|
||||
@ -190,7 +181,7 @@ public class NavListAdapter extends BaseAdapter {
|
||||
|
||||
holder.title.setText(feed.getTitle());
|
||||
|
||||
PicassoProvider.getDefaultPicassoInstance(context)
|
||||
Picasso.with(context)
|
||||
.load(feed.getImageUri())
|
||||
.fit()
|
||||
.into(holder.image);
|
||||
@ -204,10 +195,6 @@ public class NavListAdapter extends BaseAdapter {
|
||||
ImageView image;
|
||||
}
|
||||
|
||||
static class SectionHolder {
|
||||
TextView title;
|
||||
}
|
||||
|
||||
static class FeedHolder {
|
||||
TextView title;
|
||||
ImageView image;
|
@ -11,12 +11,13 @@ import android.widget.ImageView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.PicassoProvider;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.util.Converter;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.core.util.Converter;
|
||||
|
||||
/**
|
||||
* List adapter for the list of new episodes
|
||||
@ -86,9 +87,9 @@ public class NewEpisodesListAdapter extends BaseAdapter {
|
||||
}
|
||||
|
||||
holder.title.setText(item.getTitle());
|
||||
holder.pubDate.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_SHOW_DATE));
|
||||
holder.pubDate.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_ABBREV_ALL));
|
||||
if (item.isRead()) {
|
||||
holder.statusUnread.setVisibility(View.GONE);
|
||||
holder.statusUnread.setVisibility(View.INVISIBLE);
|
||||
} else {
|
||||
holder.statusUnread.setVisibility(View.VISIBLE);
|
||||
}
|
||||
@ -99,6 +100,8 @@ public class NewEpisodesListAdapter extends BaseAdapter {
|
||||
|
||||
if (media.getDuration() > 0) {
|
||||
holder.txtvDuration.setText(Converter.getDurationStringLong(media.getDuration()));
|
||||
} else if (media.getSize() > 0) {
|
||||
holder.txtvDuration.setText(Converter.byteToString(media.getSize()));
|
||||
} else {
|
||||
holder.txtvDuration.setText("");
|
||||
}
|
||||
@ -106,8 +109,10 @@ public class NewEpisodesListAdapter extends BaseAdapter {
|
||||
if (isDownloadingMedia) {
|
||||
holder.downloadProgress.setVisibility(View.VISIBLE);
|
||||
holder.txtvDuration.setVisibility(View.GONE);
|
||||
holder.pubDate.setVisibility(View.GONE);
|
||||
} else {
|
||||
holder.txtvDuration.setVisibility(View.VISIBLE);
|
||||
holder.pubDate.setVisibility(View.VISIBLE);
|
||||
holder.downloadProgress.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@ -129,7 +134,7 @@ public class NewEpisodesListAdapter extends BaseAdapter {
|
||||
holder.butSecondary.setTag(item);
|
||||
holder.butSecondary.setOnClickListener(secondaryActionListener);
|
||||
|
||||
PicassoProvider.getMediaMetadataPicassoInstance(context)
|
||||
Picasso.with(context)
|
||||
.load(item.getImageUri())
|
||||
.fit()
|
||||
.into(holder.imageView);
|
@ -4,12 +4,18 @@ import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.*;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.PicassoProvider;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
||||
|
||||
/**
|
||||
* List adapter for the queue.
|
||||
@ -92,7 +98,7 @@ public class QueueListAdapter extends BaseAdapter {
|
||||
holder.butSecondary.setTag(item);
|
||||
holder.butSecondary.setOnClickListener(secondaryActionListener);
|
||||
|
||||
PicassoProvider.getMediaMetadataPicassoInstance(context)
|
||||
Picasso.with(context)
|
||||
.load(item.getImageUri())
|
||||
.fit()
|
||||
.into(holder.imageView);
|
@ -8,12 +8,13 @@ import android.widget.BaseAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.PicassoProvider;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedComponent;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.SearchResult;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.feed.FeedComponent;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.SearchResult;
|
||||
|
||||
/**
|
||||
* List adapter for search activity.
|
||||
@ -72,7 +73,7 @@ public class SearchlistAdapter extends BaseAdapter {
|
||||
holder.title.setText(feed.getTitle());
|
||||
holder.subtitle.setVisibility(View.GONE);
|
||||
|
||||
PicassoProvider.getDefaultPicassoInstance(context)
|
||||
Picasso.with(context)
|
||||
.load(feed.getImageUri())
|
||||
.fit()
|
||||
.into(holder.cover);
|
||||
@ -85,7 +86,7 @@ public class SearchlistAdapter extends BaseAdapter {
|
||||
holder.subtitle.setText(result.getSubtitle());
|
||||
}
|
||||
|
||||
PicassoProvider.getDefaultPicassoInstance(context)
|
||||
Picasso.with(context)
|
||||
.load(item.getFeed().getImageUri())
|
||||
.fit()
|
||||
.into(holder.cover);
|
@ -8,13 +8,14 @@ import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.asynctask.PicassoProvider;
|
||||
import de.danoeh.antennapod.gpoddernet.model.GpodnetPodcast;
|
||||
import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast;
|
||||
|
||||
/**
|
||||
* Adapter for displaying a list of GPodnetPodcast-Objects.
|
||||
@ -39,7 +40,6 @@ public class PodcastListAdapter extends ArrayAdapter<GpodnetPodcast> {
|
||||
|
||||
convertView = inflater.inflate(R.layout.gpodnet_podcast_listitem, parent, false);
|
||||
holder.title = (TextView) convertView.findViewById(R.id.txtvTitle);
|
||||
holder.description = (TextView) convertView.findViewById(R.id.txtvDescription);
|
||||
holder.image = (ImageView) convertView.findViewById(R.id.imgvCover);
|
||||
|
||||
convertView.setTag(holder);
|
||||
@ -48,10 +48,9 @@ public class PodcastListAdapter extends ArrayAdapter<GpodnetPodcast> {
|
||||
}
|
||||
|
||||
holder.title.setText(podcast.getTitle());
|
||||
holder.description.setText(podcast.getDescription());
|
||||
|
||||
if (StringUtils.isNoneBlank(podcast.getLogoUrl())) {
|
||||
PicassoProvider.getDefaultPicassoInstance(convertView.getContext())
|
||||
if (StringUtils.isNotBlank(podcast.getLogoUrl())) {
|
||||
Picasso.with(convertView.getContext())
|
||||
.load(podcast.getLogoUrl())
|
||||
.fit()
|
||||
.into(holder.image);
|
||||
@ -62,7 +61,6 @@ public class PodcastListAdapter extends ArrayAdapter<GpodnetPodcast> {
|
||||
|
||||
static class Holder {
|
||||
TextView title;
|
||||
TextView description;
|
||||
ImageView image;
|
||||
}
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
package de.danoeh.antennapod.asynctask;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.AsyncTask;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
|
||||
import de.danoeh.antennapod.core.R;
|
||||
import de.danoeh.antennapod.core.opml.OpmlWriter;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
import de.danoeh.antennapod.core.util.LangUtils;
|
||||
|
||||
/**
|
||||
* Writes an OPML file into the export directory in the background.
|
||||
*/
|
||||
public class OpmlExportWorker extends AsyncTask<Void, Void, Void> {
|
||||
private static final String TAG = "OpmlExportWorker";
|
||||
private static final String DEFAULT_OUTPUT_NAME = "antennapod-feeds.opml";
|
||||
public static final String EXPORT_DIR = "export/";
|
||||
|
||||
private Context context;
|
||||
private File output;
|
||||
|
||||
private ProgressDialog progDialog;
|
||||
private Exception exception;
|
||||
|
||||
public OpmlExportWorker(Context context, File output) {
|
||||
this.context = context;
|
||||
this.output = output;
|
||||
}
|
||||
|
||||
public OpmlExportWorker(Context context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
OpmlWriter opmlWriter = new OpmlWriter();
|
||||
if (output == null) {
|
||||
output = new File(
|
||||
UserPreferences.getDataFolder(context, EXPORT_DIR),
|
||||
DEFAULT_OUTPUT_NAME);
|
||||
if (output.exists()) {
|
||||
Log.w(TAG, "Overwriting previously exported file.");
|
||||
output.delete();
|
||||
}
|
||||
}
|
||||
OutputStreamWriter writer = null;
|
||||
try {
|
||||
writer = new OutputStreamWriter(new FileOutputStream(output), LangUtils.UTF_8);
|
||||
opmlWriter.writeDocument(DBReader.getFeedList(context), writer);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
exception = e;
|
||||
} finally {
|
||||
if (writer != null) {
|
||||
try {
|
||||
writer.close();
|
||||
} catch (IOException ioe) {
|
||||
exception = ioe;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
progDialog.dismiss();
|
||||
AlertDialog.Builder alert = new AlertDialog.Builder(context)
|
||||
.setNeutralButton(android.R.string.ok,
|
||||
new DialogInterface.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog,
|
||||
int which) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
if (exception != null) {
|
||||
alert.setTitle(R.string.export_error_label);
|
||||
alert.setMessage(exception.getMessage());
|
||||
} else {
|
||||
alert.setTitle(R.string.opml_export_success_title);
|
||||
alert.setMessage(context
|
||||
.getString(R.string.opml_export_success_sum)
|
||||
+ output.toString());
|
||||
}
|
||||
alert.create().show();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
progDialog = new ProgressDialog(context);
|
||||
progDialog.setMessage(context.getString(R.string.exporting_label));
|
||||
progDialog.setIndeterminate(true);
|
||||
progDialog.show();
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
public void executeAsync() {
|
||||
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {
|
||||
executeOnExecutor(THREAD_POOL_EXECUTOR);
|
||||
} else {
|
||||
execute();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -4,12 +4,12 @@ import android.annotation.SuppressLint;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.core.R;
|
||||
import de.danoeh.antennapod.activity.OpmlImportHolder;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.opml.OpmlElement;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.opml.OpmlElement;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
@ -8,10 +8,10 @@ import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnClickListener;
|
||||
import android.os.AsyncTask;
|
||||
import android.util.Log;
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.opml.OpmlElement;
|
||||
import de.danoeh.antennapod.opml.OpmlReader;
|
||||
import de.danoeh.antennapod.core.BuildConfig;
|
||||
import de.danoeh.antennapod.core.R;
|
||||
import de.danoeh.antennapod.core.opml.OpmlElement;
|
||||
import de.danoeh.antennapod.core.opml.OpmlReader;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -74,7 +74,7 @@ public class OpmlImportWorker extends
|
||||
if (exception != null) {
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG,
|
||||
"An error occured while trying to parse the opml document");
|
||||
"An error occurred while trying to parse the opml document");
|
||||
AlertDialog.Builder alert = new AlertDialog.Builder(context);
|
||||
alert.setTitle(R.string.error_label);
|
||||
alert.setMessage(context.getString(R.string.opml_reader_error)
|
@ -0,0 +1,29 @@
|
||||
package de.danoeh.antennapod.config;
|
||||
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import de.danoeh.antennapod.PodcastApp;
|
||||
import de.danoeh.antennapod.activity.StorageErrorActivity;
|
||||
import de.danoeh.antennapod.core.ApplicationCallbacks;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
|
||||
public class ApplicationCallbacksImpl implements ApplicationCallbacks {
|
||||
|
||||
@Override
|
||||
public Application getApplicationInstance() {
|
||||
return PodcastApp.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Intent getStorageErrorActivity(Context context) {
|
||||
return new Intent(context, StorageErrorActivity.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUpdateInterval(long updateInterval) {
|
||||
UserPreferences.restartUpdateAlarm(updateInterval, updateInterval);
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package de.danoeh.antennapod.config;
|
||||
|
||||
import de.danoeh.antennapod.core.ClientConfig;
|
||||
|
||||
/**
|
||||
* Configures the ClientConfig class of the core package.
|
||||
*/
|
||||
public class ClientConfigurator {
|
||||
|
||||
static {
|
||||
ClientConfig.USER_AGENT = "AntennaPod/0.9.9.5";
|
||||
ClientConfig.applicationCallbacks = new ApplicationCallbacksImpl();
|
||||
ClientConfig.downloadServiceCallbacks = new DownloadServiceCallbacksImpl();
|
||||
ClientConfig.gpodnetCallbacks = new GpodnetCallbacksImpl();
|
||||
ClientConfig.playbackServiceCallbacks = new PlaybackServiceCallbacksImpl();
|
||||
ClientConfig.storageCallbacks = new StorageCallbacksImpl();
|
||||
ClientConfig.flattrCallbacks = new FlattrCallbacksImpl();
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package de.danoeh.antennapod.config;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import de.danoeh.antennapod.activity.DownloadAuthenticationActivity;
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
import de.danoeh.antennapod.adapter.NavListAdapter;
|
||||
import de.danoeh.antennapod.core.DownloadServiceCallbacks;
|
||||
import de.danoeh.antennapod.core.feed.Feed;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadRequest;
|
||||
import de.danoeh.antennapod.fragment.DownloadsFragment;
|
||||
|
||||
|
||||
public class DownloadServiceCallbacksImpl implements DownloadServiceCallbacks {
|
||||
|
||||
@Override
|
||||
public PendingIntent getNotificationContentIntent(Context context) {
|
||||
Intent intent = new Intent(context, MainActivity.class);
|
||||
intent.putExtra(MainActivity.EXTRA_NAV_TYPE, NavListAdapter.VIEW_TYPE_NAV);
|
||||
intent.putExtra(MainActivity.EXTRA_NAV_INDEX, MainActivity.POS_DOWNLOADS);
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(DownloadsFragment.ARG_SELECTED_TAB, DownloadsFragment.POS_RUNNING);
|
||||
intent.putExtra(MainActivity.EXTRA_FRAGMENT_ARGS, args);
|
||||
|
||||
return PendingIntent.getActivity(context, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PendingIntent getAuthentificationNotificationContentIntent(Context context, DownloadRequest request) {
|
||||
final Intent activityIntent = new Intent(context.getApplicationContext(), DownloadAuthenticationActivity.class);
|
||||
activityIntent.putExtra(DownloadAuthenticationActivity.ARG_DOWNLOAD_REQUEST, request);
|
||||
activityIntent.putExtra(DownloadAuthenticationActivity.ARG_SEND_TO_DOWNLOAD_REQUESTER_BOOL, true);
|
||||
return PendingIntent.getActivity(context.getApplicationContext(), 0, activityIntent, PendingIntent.FLAG_ONE_SHOT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PendingIntent getReportNotificationContentIntent(Context context) {
|
||||
Intent intent = new Intent(context, MainActivity.class);
|
||||
intent.putExtra(MainActivity.EXTRA_NAV_TYPE, NavListAdapter.VIEW_TYPE_NAV);
|
||||
intent.putExtra(MainActivity.EXTRA_NAV_INDEX, MainActivity.POS_DOWNLOADS);
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(DownloadsFragment.ARG_SELECTED_TAB, DownloadsFragment.POS_LOG);
|
||||
intent.putExtra(MainActivity.EXTRA_FRAGMENT_ARGS, args);
|
||||
return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFeedParsed(Context context, Feed feed) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldCreateReport() {
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package de.danoeh.antennapod.config;
|
||||
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import org.shredzone.flattr4j.oauth.AccessToken;
|
||||
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.activity.FlattrAuthActivity;
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
import de.danoeh.antennapod.core.FlattrCallbacks;
|
||||
|
||||
public class FlattrCallbacksImpl implements FlattrCallbacks {
|
||||
private static final String TAG = "FlattrCallbacksImpl";
|
||||
|
||||
@Override
|
||||
public boolean flattrEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Intent getFlattrAuthenticationActivityIntent(Context context) {
|
||||
return new Intent(context, FlattrAuthActivity.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PendingIntent getFlattrFailedNotificationContentIntent(Context context) {
|
||||
return PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFlattrAppKey() {
|
||||
return BuildConfig.FLATTR_APP_KEY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFlattrAppSecret() {
|
||||
return BuildConfig.FLATTR_APP_SECRET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleFlattrAuthenticationSuccess(AccessToken token) {
|
||||
FlattrAuthActivity instance = FlattrAuthActivity.getInstance();
|
||||
if (instance != null) {
|
||||
instance.handleAuthenticationSuccess();
|
||||
} else {
|
||||
Log.e(TAG, "FlattrAuthActivity instance was null");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package de.danoeh.antennapod.config;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
import de.danoeh.antennapod.core.GpodnetCallbacks;
|
||||
|
||||
|
||||
public class GpodnetCallbacksImpl implements GpodnetCallbacks {
|
||||
@Override
|
||||
public boolean gpodnetEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PendingIntent getGpodnetSyncServiceErrorNotificationPendingIntent(Context context) {
|
||||
return PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class),
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user