From 76add8ef68dbc9997e901f4c11c397f581e8eabe Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Mon, 15 Sep 2014 21:09:09 +0200 Subject: [PATCH 01/13] Removed maven build files --- pom.xml | 269 ------------------------------------------- proguard-mvn.cfg | 66 ----------- proguard-project.txt | 20 ---- 3 files changed, 355 deletions(-) delete mode 100644 pom.xml delete mode 100644 proguard-mvn.cfg delete mode 100644 proguard-project.txt diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 81e223b10..000000000 --- a/pom.xml +++ /dev/null @@ -1,269 +0,0 @@ - - - 4.0.0 - de.danoeh - antennapod - apk - 0.9.9.3 - AntennaPod - - - - - android.support - compatibility-v4 - 19 - - - android.support - compatibility-v7-appcompat - 19 - apklib - - - android.support - compatibility-v7-appcompat - 19 - jar - - - com.google.android - android-test - 2.2.1 - - - org.apache.commons - commons-lang3 - 3.1 - - - org.shredzone.flattr4j - flattr4j-core - 2.7 - compile - - - org.apache.httpcomponents - httpcore - - - org.apache.httpcomponents - httpclient - - - org.json - json - - - - - android - android - provided - 4.4_r1 - - - com.google.android.annotations - annotations - 22.3 - provided - - - commons-io - commons-io - 2.4 - - - com.mobeta.android.dslv - drag-sort-listview - 0.6.1-SNAPSHOT - apklib - - - com.nineoldandroids - library - 2.4.0 - - - com.aocate - presto_client - 0.8.5 - jar - system - ${project.basedir}/libs/presto_client-0.8.5.jar - - - - - src - - - org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 - - 1.6 - 1.6 - - - - com.jayway.maven.plugins.android.generation2 - android-maven-plugin - 3.8.0 - - - ${env.ANDROID_HOME} - 19 - - - true - - - true - - - alignApk - package - - zipalign - - - - - - - - - - development - - - - environment - !production - - - - In Development - - - - production - - In Production - - - - release - - - - performRelease - true - - - - - - org.apache.maven.plugins - maven-jarsigner-plugin - - - signing - - sign - verify - - package - true - - true - - - ${project.build.directory}/${project.artifactId}-${project.version}.apk - - ${sign.keystore} - ${sign.alias} - ${sign.storepass} - ${sign.keypass} - true - - -sigalgMD5withRSA - -digestalgSHA1 - - - - - - - - com.jayway.maven.plugins.android.generation2 - android-maven-plugin - true - - - false - - - false - true - ${project.build.directory}/${project.artifactId}-${project.version}.apk - ${project.build.directory}/${project.artifactId}-${project.version}-signed-aligned.apk - - - - false - false - - - false - proguard-mvn.cfg - - - - - alignApk - package - - zipalign - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - - ${project.build.directory}/${project.artifactId}-${project.version}-signed-aligned.apk - apk - signed-aligned - - - ${project.build.directory}/proguard/mapping.txt - map - release - - - - - - attach-signed-aligned - package - - attach-artifact - - - - - - - - - - diff --git a/proguard-mvn.cfg b/proguard-mvn.cfg deleted file mode 100644 index 70019bfcb..000000000 --- a/proguard-mvn.cfg +++ /dev/null @@ -1,66 +0,0 @@ --printmapping out.map --renamesourcefileattribute SourceFile --keepattributes SourceFile,LineNumberTable - --dontpreverify --repackageclasses '' --allowaccessmodification --optimizations !code/simplification/arithmetic --keepattributes *Annotation* - --injars libs/presto_client-0.8.5.jar - --keep public class * extends android.app.Activity --keep public class * extends android.app.Application --keep public class * extends android.app.Service --keep public class * extends android.content.BroadcastReceiver --keep public class * extends android.content.ContentProvider - --keep public class * extends android.view.View { - public (android.content.Context); - public (android.content.Context, android.util.AttributeSet); - public (android.content.Context, android.util.AttributeSet, int); - public void set*(...); -} - --keepclassmembers enum * { - public static **[] values(); - public static ** valueOf(java.lang.String); -} - --keepclasseswithmembers class * { - public (android.content.Context, android.util.AttributeSet); -} - --keepclasseswithmembers class * { - public (android.content.Context, android.util.AttributeSet, int); -} - --keepclassmembers class * extends android.content.Context { - public void *(android.view.View); - public void *(android.view.MenuItem); -} - --keepclassmembers class * implements android.os.Parcelable { - static android.os.Parcelable$Creator CREATOR; -} - --keepclassmembers class **.R$* { - public static ; -} - --keep class android.support.v4.** { *; } --keep interface android.support.v4.** { *; } --keep class android.support.v7.** { *; } --keep interface android.support.v7.** { *; } --dontwarn android.support.v4.** --dontwarn android.support.v7.** - --keepattributes *Annotation* - --keep class org.shredzone.flattr4j.** { *; } --dontwarn org.shredzone.flattr4j.** - --keep class org.apache.commons.** { *; } - --dontskipnonpubliclibraryclassmembers diff --git a/proguard-project.txt b/proguard-project.txt deleted file mode 100644 index f2fe1559a..000000000 --- a/proguard-project.txt +++ /dev/null @@ -1,20 +0,0 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} From 072639b5b22e816df9f78b5cd8a7d4e5379b6aff Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Wed, 17 Sep 2014 20:51:45 +0200 Subject: [PATCH 02/13] Changed project structure Switched from custom layout to standard gradle project structure --- .gitmodules | 3 + app/build.gradle | 112 +++++++++++++++ app/dslv | 1 + lint.xml => app/lint.xml | 0 proguard.cfg => app/proguard.cfg | 0 app/settings.gradle | 1 + .../test/antennapod/AntennaPodTestRunner.java | 4 +- .../gpodnet/GPodnetServiceTest.java | 4 +- .../antennapod}/handler/FeedHandlerTest.java | 8 +- .../service/download/HttpDownloaderTest.java | 4 +- .../PlaybackServiceMediaPlayerTest.java | 6 +- .../PlaybackServiceTaskManagerTest.java | 2 +- .../test/antennapod/storage/DBReaderTest.java | 6 +- .../test/antennapod/storage/DBTasksTest.java | 4 +- .../test/antennapod/storage/DBTestUtils.java | 2 +- .../test/antennapod/storage/DBWriterTest.java | 2 +- .../test/antennapod/ui/MainActivityTest.java | 4 +- .../de/test/antennapod/ui/PlaybackTest.java | 2 +- .../de/test/antennapod/ui/UITestUtils.java | 7 +- .../test/antennapod/ui/UITestUtilsTest.java | 2 +- .../ui/VideoplayerActivityTest.java | 2 +- .../test/antennapod/util/ConverterTest.java | 2 +- .../util/FilenameGeneratorTest.java | 2 +- .../de/test/antennapod/util/URIUtilTest.java | 2 +- .../test/antennapod/util/URLCheckerTest.java | 2 +- .../util/playback/TimelineTest.java | 2 +- .../util/service/download/HTTPBin.java | 2 +- .../util/service/download/NanoHTTPD.java | 2 +- .../util/syndication/FeedDiscovererTest.java | 2 +- .../feedgenerator/AtomGenerator.java | 2 +- .../feedgenerator/FeedGenerator.java | 2 +- .../feedgenerator/GeneratorUtil.java | 2 +- .../feedgenerator/RSS2Generator.java | 2 +- .../src/main/AndroidManifest.xml | 0 .../presto/service/IDeathCallback_0_8.aidl | 0 ...OnBufferingUpdateListenerCallback_0_8.aidl | 0 .../IOnCompletionListenerCallback_0_8.aidl | 0 .../service/IOnErrorListenerCallback_0_8.aidl | 0 .../service/IOnInfoListenerCallback_0_8.aidl | 0 ...tAvailableChangedListenerCallback_0_8.aidl | 0 .../IOnPreparedListenerCallback_0_8.aidl | 0 .../IOnSeekCompleteListenerCallback_0_8.aidl | 0 ...tAvailableChangedListenerCallback_0_8.aidl | 0 .../aocate/presto/service/IPlayMedia_0_8.aidl | 0 {assets => app/src/main/assets}/LICENSE.html | 0 .../main/assets}/LICENSE_APACHE_COMMONS.txt | 0 .../main/assets}/LICENSE_BETTERPICKERS.txt | 0 .../src/main/assets}/LICENSE_DSLV.txt | 0 .../src/main/assets}/LICENSE_FLATTR4J.txt | 0 .../src/main/assets}/LICENSE_JSOUP.txt | 0 .../assets}/LICENSE_NINE_OLD_ANDROIDS.txt | 0 .../src/main/assets}/LICENSE_OKHTTP.txt | 0 .../src/main/assets}/LICENSE_OKIO.txt | 0 .../src/main/assets}/LICENSE_PICASSO.txt | 0 .../src/main/assets}/LICENSE_PRESTO.txt | 0 .../src/main/assets}/Roboto-Light.ttf | Bin {assets => app/src/main/assets}/Roboto.ttf | Bin {assets => app/src/main/assets}/about.html | 0 {assets => app/src/main/assets}/logo.png | Bin {assets => app/src/main/assets}/testfile.mp3 | Bin .../com/aocate/media/AndroidMediaPlayer.java | 0 .../java}/com/aocate/media/MediaPlayer.java | 0 .../com/aocate/media/MediaPlayerImpl.java | 0 .../media/ServiceBackedMediaPlayer.java | 0 .../media/SpeedAdjustmentAlgorithm.java | 0 .../java}/de/danoeh/antennapod/AppConfig.java | 0 .../de/danoeh/antennapod/PodcastApp.java | 0 .../antennapod/activity/AboutActivity.java | 0 .../activity/AudioplayerActivity.java | 0 .../DefaultOnlineFeedViewActivity.java | 0 .../activity/DirectoryChooserActivity.java | 0 .../DownloadAuthenticationActivity.java | 0 .../antennapod/activity/FeedInfoActivity.java | 0 .../activity/FlattrAuthActivity.java | 0 .../antennapod/activity/MainActivity.java | 0 .../activity/MediaplayerActivity.java | 0 .../activity/OnlineFeedViewActivity.java | 0 .../activity/OpmlFeedChooserActivity.java | 0 .../activity/OpmlImportBaseActivity.java | 0 .../OpmlImportFromIntentActivity.java | 0 .../activity/OpmlImportFromPathActivity.java | 0 .../antennapod/activity/OpmlImportHolder.java | 0 .../activity/PreferenceActivity.java | 0 .../activity/StorageErrorActivity.java | 0 .../activity/VideoplayerActivity.java | 0 .../GpodnetAuthenticationActivity.java | 0 .../adapter/ActionButtonCallback.java | 0 .../antennapod/adapter/ActionButtonUtils.java | 0 .../antennapod/adapter/AdapterUtils.java | 0 .../adapter/ChapterListAdapter.java | 0 .../adapter/DefaultActionButtonCallback.java | 0 .../adapter/DownloadLogAdapter.java | 0 .../DownloadedEpisodesListAdapter.java | 0 .../adapter/DownloadlistAdapter.java | 0 .../adapter/ExternalEpisodesListAdapter.java | 0 .../adapter/FeedItemlistAdapter.java | 0 .../FeedItemlistDescriptionAdapter.java | 0 .../antennapod/adapter/NavListAdapter.java | 0 .../adapter/NewEpisodesListAdapter.java | 0 .../antennapod/adapter/QueueListAdapter.java | 0 .../antennapod/adapter/SearchlistAdapter.java | 0 .../adapter/gpodnet/PodcastListAdapter.java | 0 .../asynctask/DownloadObserver.java | 0 .../antennapod/asynctask/FeedRemover.java | 0 .../asynctask/FlattrClickWorker.java | 0 .../asynctask/FlattrStatusFetcher.java | 0 .../asynctask/FlattrTokenFetcher.java | 0 .../asynctask/OpmlExportWorker.java | 0 .../antennapod/asynctask/OpmlFeedQueuer.java | 0 .../asynctask/OpmlImportWorker.java | 0 .../asynctask/PicassoImageResource.java | 0 .../antennapod/asynctask/PicassoProvider.java | 0 .../antennapod/backup/OpmlBackupAgent.java | 0 .../dialog/AuthenticationDialog.java | 0 .../dialog/AutoFlattrPreferenceDialog.java | 0 .../antennapod/dialog/ConfirmationDialog.java | 0 .../DownloadRequestErrorDialogCreator.java | 0 .../antennapod/dialog/FeedItemDialog.java | 0 .../dialog/GpodnetSetHostnameDialog.java | 0 .../danoeh/antennapod/dialog/TimeDialog.java | 0 .../dialog/VariableSpeedDialog.java | 0 .../de/danoeh/antennapod/feed/Chapter.java | 0 .../antennapod/feed/EventDistributor.java | 0 .../java}/de/danoeh/antennapod/feed/Feed.java | 0 .../danoeh/antennapod/feed/FeedComponent.java | 0 .../de/danoeh/antennapod/feed/FeedFile.java | 0 .../de/danoeh/antennapod/feed/FeedImage.java | 0 .../de/danoeh/antennapod/feed/FeedItem.java | 0 .../de/danoeh/antennapod/feed/FeedMedia.java | 0 .../antennapod/feed/FeedPreferences.java | 0 .../de/danoeh/antennapod/feed/ID3Chapter.java | 0 .../de/danoeh/antennapod/feed/MediaType.java | 0 .../danoeh/antennapod/feed/SearchResult.java | 0 .../danoeh/antennapod/feed/SimpleChapter.java | 0 .../antennapod/feed/VorbisCommentChapter.java | 0 .../antennapod/fragment/AddFeedFragment.java | 0 .../fragment/CompletedDownloadsFragment.java | 0 .../antennapod/fragment/CoverFragment.java | 0 .../fragment/DownloadLogFragment.java | 0 .../fragment/DownloadsFragment.java | 0 .../fragment/ExternalPlayerFragment.java | 0 .../fragment/ItemDescriptionFragment.java | 0 .../antennapod/fragment/ItemlistFragment.java | 0 .../fragment/NewEpisodesFragment.java | 0 .../fragment/PlaybackHistoryFragment.java | 0 .../antennapod/fragment/QueueFragment.java | 0 .../fragment/RunningDownloadsFragment.java | 0 .../antennapod/fragment/SearchFragment.java | 0 .../fragment/gpodnet/GpodnetMainFragment.java | 0 .../fragment/gpodnet/PodcastListFragment.java | 0 .../gpodnet/PodcastTopListFragment.java | 0 .../fragment/gpodnet/SearchListFragment.java | 0 .../gpodnet/SuggestionListFragment.java | 0 .../fragment/gpodnet/TagFragment.java | 0 .../fragment/gpodnet/TagListFragment.java | 0 .../antennapod/gpoddernet/GpodnetService.java | 0 ...GpodnetServiceAuthenticationException.java | 0 .../GpodnetServiceBadStatusCodeException.java | 0 .../gpoddernet/GpodnetServiceException.java | 0 .../gpoddernet/model/GpodnetDevice.java | 0 .../gpoddernet/model/GpodnetPodcast.java | 0 .../model/GpodnetSubscriptionChange.java | 0 .../gpoddernet/model/GpodnetTag.java | 0 .../model/GpodnetUploadChangesResponse.java | 0 .../danoeh/antennapod/opml/OpmlElement.java | 0 .../de/danoeh/antennapod/opml/OpmlReader.java | 0 .../danoeh/antennapod/opml/OpmlSymbols.java | 0 .../de/danoeh/antennapod/opml/OpmlWriter.java | 0 .../preferences/GpodnetPreferences.java | 0 .../preferences/PlaybackPreferences.java | 0 .../preferences/UserPreferences.java | 0 .../receiver/AlarmUpdateReceiver.java | 0 .../receiver/ConnectivityActionReceiver.java | 0 .../receiver/FeedUpdateReceiver.java | 0 .../receiver/MediaButtonReceiver.java | 0 .../antennapod/receiver/PlayerWidget.java | 0 .../antennapod/receiver/SPAReceiver.java | 0 .../service/GpodnetSyncService.java | 0 .../service/download/APRedirectHandler.java | 0 .../download/AntennapodHttpClient.java | 0 .../service/download/DownloadRequest.java | 0 .../service/download/DownloadService.java | 0 .../service/download/DownloadStatus.java | 0 .../service/download/Downloader.java | 0 .../service/download/DownloaderCallback.java | 0 .../service/download/HttpDownloader.java | 0 .../service/playback/PlaybackService.java | 0 .../playback/PlaybackServiceMediaPlayer.java | 0 .../playback/PlaybackServiceTaskManager.java | 0 .../service/playback/PlayerStatus.java | 0 .../service/playback/PlayerWidgetService.java | 0 .../de/danoeh/antennapod/spa/SPAUtil.java | 0 .../danoeh/antennapod/storage/DBReader.java | 0 .../de/danoeh/antennapod/storage/DBTasks.java | 0 .../danoeh/antennapod/storage/DBWriter.java | 0 .../storage/DownloadRequestException.java | 0 .../antennapod/storage/DownloadRequester.java | 0 .../storage/FeedItemStatistics.java | 0 .../antennapod/storage/FeedSearcher.java | 0 .../antennapod/storage/PodDBAdapter.java | 0 .../syndication/handler/FeedHandler.java | 0 .../handler/FeedHandlerResult.java | 0 .../syndication/handler/HandlerState.java | 0 .../syndication/handler/SyndHandler.java | 0 .../syndication/handler/TypeGetter.java | 0 .../handler/UnsupportedFeedtypeException.java | 0 .../syndication/namespace/NSContent.java | 0 .../syndication/namespace/NSITunes.java | 0 .../syndication/namespace/NSMedia.java | 0 .../syndication/namespace/NSRSS20.java | 0 .../namespace/NSSimpleChapters.java | 0 .../syndication/namespace/Namespace.java | 0 .../syndication/namespace/SyndElement.java | 0 .../syndication/namespace/atom/AtomText.java | 0 .../syndication/namespace/atom/NSAtom.java | 0 .../syndication/util/SyndDateUtils.java | 0 .../syndication/util/SyndTypeUtils.java | 0 .../danoeh/antennapod/util/ChapterUtils.java | 0 .../de/danoeh/antennapod/util/Converter.java | 0 .../danoeh/antennapod/util/DownloadError.java | 0 .../de/danoeh/antennapod/util/DuckType.java | 0 .../danoeh/antennapod/util/EpisodeFilter.java | 0 .../antennapod/util/FeedtitleComparator.java | 0 .../antennapod/util/FileNameGenerator.java | 0 .../antennapod/util/InvalidFeedException.java | 0 .../de/danoeh/antennapod/util/LangUtils.java | 0 .../danoeh/antennapod/util/NetworkUtils.java | 0 .../danoeh/antennapod/util/QueueAccess.java | 0 .../de/danoeh/antennapod/util/ShareUtils.java | 0 .../antennapod/util/ShownotesProvider.java | 0 .../danoeh/antennapod/util/StorageUtils.java | 0 .../de/danoeh/antennapod/util/ThemeUtils.java | 0 .../de/danoeh/antennapod/util/URIUtil.java | 0 .../de/danoeh/antennapod/util/URLChecker.java | 0 .../antennapod/util/UndoBarController.java | 0 .../ChapterStartTimeComparator.java | 0 .../comparator/DownloadStatusComparator.java | 0 .../comparator/FeedItemPubdateComparator.java | 0 .../PlaybackCompletionDateComparator.java | 0 .../SearchResultValueComparator.java | 0 .../exception/MediaFileNotFoundException.java | 0 .../util/flattr/FlattrServiceCreator.java | 0 .../antennapod/util/flattr/FlattrStatus.java | 0 .../antennapod/util/flattr/FlattrThing.java | 0 .../antennapod/util/flattr/FlattrUtils.java | 0 .../util/flattr/SimpleFlattrThing.java | 0 .../util/gui/FeedItemUndoToken.java | 0 .../util/id3reader/ChapterReader.java | 0 .../antennapod/util/id3reader/ID3Reader.java | 0 .../util/id3reader/ID3ReaderException.java | 0 .../util/id3reader/model/FrameHeader.java | 0 .../util/id3reader/model/Header.java | 0 .../util/id3reader/model/TagHeader.java | 0 .../util/menuhandler/FeedItemMenuHandler.java | 0 .../util/menuhandler/FeedMenuHandler.java | 0 .../util/menuhandler/MenuItemUtils.java | 0 .../util/menuhandler/NavDrawerActivity.java | 0 .../antennapod/util/playback/AudioPlayer.java | 0 .../util/playback/ExternalMedia.java | 0 .../antennapod/util/playback/IPlayer.java | 0 .../util/playback/MediaPlayerError.java | 0 .../antennapod/util/playback/Playable.java | 0 .../util/playback/PlaybackController.java | 0 .../antennapod/util/playback/Timeline.java | 0 .../antennapod/util/playback/VideoPlayer.java | 0 .../util/syndication/FeedDiscoverer.java | 0 .../vorbiscommentreader/OggInputStream.java | 0 .../VorbisCommentChapterReader.java | 0 .../VorbisCommentHeader.java | 0 .../VorbisCommentReader.java | 0 .../VorbisCommentReaderException.java | 0 .../antennapod/view/AspectRatioVideoView.java | 0 {res => app/src/main/res}/anim/fade_in.xml | 0 {res => app/src/main/res}/anim/fade_out.xml | 0 .../drawable-hdpi-v11/ic_stat_antenna.png | Bin .../ic_stat_authentication.png | Bin .../drawable-hdpi-v11/stat_notify_sync.png | Bin .../stat_notify_sync_error.png | Bin .../main/res}/drawable-hdpi/action_about.png | Bin .../res}/drawable-hdpi/action_about_dark.png | Bin .../main/res}/drawable-hdpi/action_search.png | Bin .../res}/drawable-hdpi/action_search_dark.png | Bin .../res}/drawable-hdpi/action_settings.png | Bin .../drawable-hdpi/action_settings_dark.png | Bin .../main/res}/drawable-hdpi/action_stream.png | Bin .../res}/drawable-hdpi/action_stream_dark.png | Bin .../main/res}/drawable-hdpi/av_download.png | Bin .../res}/drawable-hdpi/av_download_dark.png | Bin .../res}/drawable-hdpi/av_fast_forward.png | Bin .../drawable-hdpi/av_fast_forward_dark.png | Bin .../src/main/res}/drawable-hdpi/av_pause.png | Bin .../main/res}/drawable-hdpi/av_pause_dark.png | Bin .../src/main/res}/drawable-hdpi/av_play.png | Bin .../main/res}/drawable-hdpi/av_play_dark.png | Bin .../src/main/res}/drawable-hdpi/av_rewind.png | Bin .../res}/drawable-hdpi/av_rewind_dark.png | Bin .../res}/drawable-hdpi/content_discard.png | Bin .../drawable-hdpi/content_discard_dark.png | Bin .../main/res}/drawable-hdpi/content_new.png | Bin .../res}/drawable-hdpi/content_new_dark.png | Bin .../main/res}/drawable-hdpi/default_cover.png | Bin .../res}/drawable-hdpi/default_cover_dark.png | Bin .../res}/drawable-hdpi/device_access_time.png | Bin .../drawable-hdpi/device_access_time_dark.png | Bin .../res}/drawable-hdpi/ic_action_overflow.png | Bin .../drawable-hdpi/ic_action_overflow_dark.png | Bin .../ic_action_pause_over_video.png | Bin .../ic_action_play_over_video.png | Bin .../res}/drawable-hdpi/ic_drag_handle.png | Bin .../drawable-hdpi/ic_drag_handle_dark.png | Bin .../src/main/res}/drawable-hdpi/ic_drawer.png | Bin .../res}/drawable-hdpi/ic_drawer_dark.png | Bin .../main/res}/drawable-hdpi/ic_launcher.png | Bin .../src/main/res}/drawable-hdpi/ic_new.png | Bin .../main/res}/drawable-hdpi/ic_new_dark.png | Bin .../res}/drawable-hdpi/ic_stat_antenna.png | Bin .../drawable-hdpi/ic_stat_authentication.png | Bin .../res}/drawable-hdpi/location_web_site.png | Bin .../drawable-hdpi/location_web_site_dark.png | Bin .../res}/drawable-hdpi/navigation_accept.png | Bin .../drawable-hdpi/navigation_accept_dark.png | Bin .../res}/drawable-hdpi/navigation_cancel.png | Bin .../drawable-hdpi/navigation_cancel_dark.png | Bin .../drawable-hdpi/navigation_chapters.png | Bin .../navigation_chapters_dark.png | Bin .../drawable-hdpi/navigation_collapse.png | Bin .../navigation_collapse_dark.png | Bin .../res}/drawable-hdpi/navigation_expand.png | Bin .../drawable-hdpi/navigation_expand_dark.png | Bin .../res}/drawable-hdpi/navigation_refresh.png | Bin .../drawable-hdpi/navigation_refresh_dark.png | Bin .../drawable-hdpi/navigation_shownotes.png | Bin .../navigation_shownotes_dark.png | Bin .../main/res}/drawable-hdpi/navigation_up.png | Bin .../res}/drawable-hdpi/navigation_up_dark.png | Bin .../main/res}/drawable-hdpi/social_share.png | Bin .../res}/drawable-hdpi/social_share_dark.png | Bin .../res}/drawable-hdpi/spinner_button.9.png | Bin .../drawable-hdpi/spinner_button_dark.9.png | Bin .../res}/drawable-hdpi/stat_notify_sync.png | Bin .../drawable-hdpi/stat_notify_sync_error.png | Bin .../main/res}/drawable-hdpi/stat_playlist.png | Bin .../res}/drawable-hdpi/stat_playlist_dark.png | Bin .../main/res}/drawable-hdpi/type_audio.png | Bin .../res}/drawable-hdpi/type_audio_dark.png | Bin .../main/res}/drawable-hdpi/type_video.png | Bin .../res}/drawable-hdpi/type_video_dark.png | Bin .../drawable-ldpi-v11/ic_stat_antenna.png | Bin .../main/res}/drawable-ldpi/action_stream.png | Bin .../res}/drawable-ldpi/action_stream_dark.png | Bin .../main/res}/drawable-ldpi/ic_launcher.png | Bin .../res}/drawable-ldpi/ic_stat_antenna.png | Bin .../main/res}/drawable-ldpi/stat_playlist.png | Bin .../res}/drawable-ldpi/stat_playlist_dark.png | Bin .../drawable-mdpi-v11/ic_stat_antenna.png | Bin .../ic_stat_authentication.png | Bin .../drawable-mdpi-v11/stat_notify_sync.png | Bin .../stat_notify_sync_error.png | Bin .../main/res}/drawable-mdpi/action_about.png | Bin .../res}/drawable-mdpi/action_about_dark.png | Bin .../main/res}/drawable-mdpi/action_search.png | Bin .../res}/drawable-mdpi/action_search_dark.png | Bin .../res}/drawable-mdpi/action_settings.png | Bin .../drawable-mdpi/action_settings_dark.png | Bin .../main/res}/drawable-mdpi/action_stream.png | Bin .../res}/drawable-mdpi/action_stream_dark.png | Bin .../main/res}/drawable-mdpi/av_download.png | Bin .../res}/drawable-mdpi/av_download_dark.png | Bin .../res}/drawable-mdpi/av_fast_forward.png | Bin .../drawable-mdpi/av_fast_forward_dark.png | Bin .../src/main/res}/drawable-mdpi/av_pause.png | Bin .../main/res}/drawable-mdpi/av_pause_dark.png | Bin .../src/main/res}/drawable-mdpi/av_play.png | Bin .../main/res}/drawable-mdpi/av_play_dark.png | Bin .../src/main/res}/drawable-mdpi/av_rewind.png | Bin .../res}/drawable-mdpi/av_rewind_dark.png | Bin .../res}/drawable-mdpi/content_discard.png | Bin .../drawable-mdpi/content_discard_dark.png | Bin .../main/res}/drawable-mdpi/content_new.png | Bin .../res}/drawable-mdpi/content_new_dark.png | Bin .../main/res}/drawable-mdpi/default_cover.png | Bin .../res}/drawable-mdpi/default_cover_dark.png | Bin .../res}/drawable-mdpi/device_access_time.png | Bin .../drawable-mdpi/device_access_time_dark.png | Bin .../res}/drawable-mdpi/ic_action_overflow.png | Bin .../drawable-mdpi/ic_action_overflow_dark.png | Bin .../ic_action_pause_over_video.png | Bin .../ic_action_play_over_video.png | Bin .../res}/drawable-mdpi/ic_drag_handle.png | Bin .../drawable-mdpi/ic_drag_handle_dark.png | Bin .../src/main/res}/drawable-mdpi/ic_drawer.png | Bin .../res}/drawable-mdpi/ic_drawer_dark.png | Bin .../main/res}/drawable-mdpi/ic_launcher.png | Bin .../src/main/res}/drawable-mdpi/ic_new.png | Bin .../main/res}/drawable-mdpi/ic_new_dark.png | Bin .../res}/drawable-mdpi/ic_stat_antenna.png | Bin .../drawable-mdpi/ic_stat_authentication.png | Bin .../res}/drawable-mdpi/location_web_site.png | Bin .../drawable-mdpi/location_web_site_dark.png | Bin .../res}/drawable-mdpi/navigation_accept.png | Bin .../drawable-mdpi/navigation_accept_dark.png | Bin .../res}/drawable-mdpi/navigation_cancel.png | Bin .../drawable-mdpi/navigation_cancel_dark.png | Bin .../drawable-mdpi/navigation_chapters.png | Bin .../navigation_chapters_dark.png | Bin .../drawable-mdpi/navigation_collapse.png | Bin .../navigation_collapse_dark.png | Bin .../res}/drawable-mdpi/navigation_expand.png | Bin .../drawable-mdpi/navigation_expand_dark.png | Bin .../res}/drawable-mdpi/navigation_refresh.png | Bin .../drawable-mdpi/navigation_refresh_dark.png | Bin .../drawable-mdpi/navigation_shownotes.png | Bin .../navigation_shownotes_dark.png | Bin .../main/res}/drawable-mdpi/navigation_up.png | Bin .../res}/drawable-mdpi/navigation_up_dark.png | Bin .../main/res}/drawable-mdpi/social_share.png | Bin .../res}/drawable-mdpi/social_share_dark.png | Bin .../res}/drawable-mdpi/spinner_button.9.png | Bin .../drawable-mdpi/spinner_button_dark.9.png | Bin .../res}/drawable-mdpi/stat_notify_sync.png | Bin .../drawable-mdpi/stat_notify_sync_error.png | Bin .../main/res}/drawable-mdpi/stat_playlist.png | Bin .../res}/drawable-mdpi/stat_playlist_dark.png | Bin .../main/res}/drawable-mdpi/type_audio.png | Bin .../res}/drawable-mdpi/type_audio_dark.png | Bin .../main/res}/drawable-mdpi/type_video.png | Bin .../res}/drawable-mdpi/type_video_dark.png | Bin .../drawable-xhdpi-v11/ic_stat_antenna.png | Bin .../ic_stat_authentication.png | Bin .../drawable-xhdpi-v11/stat_notify_sync.png | Bin .../stat_notify_sync_error.png | Bin .../main/res}/drawable-xhdpi/action_about.png | Bin .../res}/drawable-xhdpi/action_about_dark.png | Bin .../res}/drawable-xhdpi/action_search.png | Bin .../drawable-xhdpi/action_search_dark.png | Bin .../res}/drawable-xhdpi/action_settings.png | Bin .../drawable-xhdpi/action_settings_dark.png | Bin .../res}/drawable-xhdpi/action_stream.png | Bin .../drawable-xhdpi/action_stream_dark.png | Bin .../main/res}/drawable-xhdpi/av_download.png | Bin .../res}/drawable-xhdpi/av_download_dark.png | Bin .../res}/drawable-xhdpi/av_fast_forward.png | Bin .../drawable-xhdpi/av_fast_forward_dark.png | Bin .../src/main/res}/drawable-xhdpi/av_pause.png | Bin .../res}/drawable-xhdpi/av_pause_dark.png | Bin .../src/main/res}/drawable-xhdpi/av_play.png | Bin .../main/res}/drawable-xhdpi/av_play_dark.png | Bin .../main/res}/drawable-xhdpi/av_rewind.png | Bin .../res}/drawable-xhdpi/av_rewind_dark.png | Bin .../res}/drawable-xhdpi/content_discard.png | Bin .../drawable-xhdpi/content_discard_dark.png | Bin .../main/res}/drawable-xhdpi/content_new.png | Bin .../res}/drawable-xhdpi/content_new_dark.png | Bin .../res}/drawable-xhdpi/content_remove.png | Bin .../drawable-xhdpi/content_remove_dark.png | Bin .../res}/drawable-xhdpi/default_cover.png | Bin .../drawable-xhdpi/default_cover_dark.png | Bin .../drawable-xhdpi/device_access_time.png | Bin .../device_access_time_dark.png | Bin .../drawable-xhdpi/ic_action_overflow.png | Bin .../ic_action_overflow_dark.png | Bin .../ic_action_pause_over_video.png | Bin .../ic_action_play_over_video.png | Bin .../res}/drawable-xhdpi/ic_drag_handle.png | Bin .../drawable-xhdpi/ic_drag_handle_dark.png | Bin .../main/res}/drawable-xhdpi/ic_drawer.png | Bin .../res}/drawable-xhdpi/ic_drawer_dark.png | Bin .../main/res}/drawable-xhdpi/ic_launcher.png | Bin .../src/main/res}/drawable-xhdpi/ic_new.png | Bin .../main/res}/drawable-xhdpi/ic_new_dark.png | Bin .../res}/drawable-xhdpi/ic_stat_antenna.png | Bin .../drawable-xhdpi/ic_stat_authentication.png | Bin .../res}/drawable-xhdpi/ic_undobar_undo.png | Bin .../res}/drawable-xhdpi/location_web_site.png | Bin .../drawable-xhdpi/location_web_site_dark.png | Bin .../res}/drawable-xhdpi/navigation_accept.png | Bin .../drawable-xhdpi/navigation_accept_dark.png | Bin .../res}/drawable-xhdpi/navigation_cancel.png | Bin .../drawable-xhdpi/navigation_cancel_dark.png | Bin .../drawable-xhdpi/navigation_chapters.png | Bin .../navigation_chapters_dark.png | Bin .../drawable-xhdpi/navigation_collapse.png | Bin .../navigation_collapse_dark.png | Bin .../res}/drawable-xhdpi/navigation_expand.png | Bin .../drawable-xhdpi/navigation_expand_dark.png | Bin .../drawable-xhdpi/navigation_refresh.png | Bin .../navigation_refresh_dark.png | Bin .../drawable-xhdpi/navigation_shownotes.png | Bin .../navigation_shownotes_dark.png | Bin .../res}/drawable-xhdpi/navigation_up.png | Bin .../drawable-xhdpi/navigation_up_dark.png | Bin .../main/res}/drawable-xhdpi/social_share.png | Bin .../res}/drawable-xhdpi/social_share_dark.png | Bin .../res}/drawable-xhdpi/spinner_button.9.png | Bin .../drawable-xhdpi/spinner_button_dark.9.png | Bin .../res}/drawable-xhdpi/stat_playlist.png | Bin .../drawable-xhdpi/stat_playlist_dark.png | Bin .../main/res}/drawable-xhdpi/type_audio.png | Bin .../res}/drawable-xhdpi/type_audio_dark.png | Bin .../main/res}/drawable-xhdpi/type_video.png | Bin .../res}/drawable-xhdpi/type_video_dark.png | Bin .../main/res}/drawable-xhdpi/undobar.9.png | Bin .../undobar_button_focused.9.png | Bin .../undobar_button_pressed.9.png | Bin .../res}/drawable-xhdpi/undobar_divider.9.png | Bin .../drawable-xxhdpi/ic_action_overflow.png | Bin .../ic_action_overflow_dark.png | Bin .../ic_action_pause_over_video.png | Bin .../ic_action_play_over_video.png | Bin .../res}/drawable-xxhdpi/ic_drag_handle.png | Bin .../drawable-xxhdpi/ic_drag_handle_dark.png | Bin .../main/res}/drawable-xxhdpi/ic_drawer.png | Bin .../res}/drawable-xxhdpi/ic_drawer_dark.png | Bin .../main/res}/drawable-xxhdpi/ic_launcher.png | Bin .../src/main/res}/drawable-xxhdpi/ic_new.png | Bin .../main/res}/drawable-xxhdpi/ic_new_dark.png | Bin .../ic_stat_authentication.png | Bin {res => app/src/main/res}/drawable/badge.xml | 0 .../main/res}/drawable/borderless_button.xml | 0 .../res}/drawable/borderless_button_dark.xml | 0 .../res}/drawable/horizontal_divider.9.png | Bin .../overlay_button_circle_background.xml | 0 .../main/res}/drawable/overlay_drawable.xml | 0 .../res}/drawable/overlay_drawable_dark.xml | 0 .../src/main/res}/drawable/type_audio.png | Bin .../src/main/res}/drawable/type_video.png | Bin .../src/main/res}/drawable/undobar_button.xml | 0 .../main/res}/drawable/vertical_divider.9.png | Bin .../src/main/res}/drawable/white_circle.xml | 0 .../res}/layout-land/audioplayer_activity.xml | 0 .../res}/layout-land/videoplayer_activity.xml | 0 .../res}/layout-v14/authentication_dialog.xml | 0 .../res}/layout-v14/directory_chooser.xml | 0 .../download_authentication_activity.xml | 0 .../main/res}/layout-v14/opml_selection.xml | 0 .../src/main/res}/layout-v14/time_dialog.xml | 0 {res => app/src/main/res}/layout/about.xml | 0 {res => app/src/main/res}/layout/addfeed.xml | 0 .../main/res}/layout/audioplayer_activity.xml | 0 .../res}/layout/authentication_dialog.xml | 0 .../layout/autoflattr_preference_dialog.xml | 0 .../src/main/res}/layout/cover_fragment.xml | 0 .../main/res}/layout/directory_chooser.xml | 0 .../download_authentication_activity.xml | 0 .../layout/downloaded_episodeslist_item.xml | 0 .../main/res}/layout/downloadlist_item.xml | 0 .../src/main/res}/layout/downloadlog_item.xml | 0 .../res}/layout/ellipsize_start_listitem.xml | 0 .../res}/layout/external_itemlist_item.xml | 0 .../res}/layout/external_player_fragment.xml | 0 {res => app/src/main/res}/layout/feedinfo.xml | 0 .../src/main/res}/layout/feeditem_dialog.xml | 0 .../main/res}/layout/feeditemlist_header.xml | 0 .../main/res}/layout/feeditemlist_item.xml | 0 .../src/main/res}/layout/flattr_auth.xml | 0 .../main/res}/layout/gpodnet_podcast_list.xml | 0 .../res}/layout/gpodnet_podcast_listitem.xml | 0 .../main/res}/layout/gpodnetauth_activity.xml | 0 .../res}/layout/gpodnetauth_credentials.xml | 0 .../main/res}/layout/gpodnetauth_device.xml | 0 .../main/res}/layout/gpodnetauth_finish.xml | 0 .../res}/layout/itemdescription_listitem.xml | 0 .../main/res}/layout/listview_activity.xml | 0 {res => app/src/main/res}/layout/main.xml | 0 .../src/main/res}/layout/nav_feedlistitem.xml | 0 .../src/main/res}/layout/nav_listitem.xml | 0 .../src/main/res}/layout/nav_section_item.xml | 0 .../res}/layout/new_episodes_fragment.xml | 0 .../res}/layout/new_episodes_listitem.xml | 0 .../res}/layout/onlinefeedview_header.xml | 0 .../src/main/res}/layout/opml_import.xml | 0 .../src/main/res}/layout/opml_selection.xml | 0 .../src/main/res}/layout/pager_fragment.xml | 0 .../src/main/res}/layout/player_widget.xml | 0 .../src/main/res}/layout/queue_fragment.xml | 0 .../src/main/res}/layout/queue_listitem.xml | 0 .../src/main/res}/layout/searchlist_item.xml | 0 .../main/res}/layout/simplechapter_item.xml | 0 .../src/main/res}/layout/storage_error.xml | 0 .../src/main/res}/layout/time_dialog.xml | 0 .../src/main/res}/menu/directory_chooser.xml | 0 {res => app/src/main/res}/menu/feedinfo.xml | 0 {res => app/src/main/res}/menu/feeditem.xml | 0 .../src/main/res}/menu/feeditem_dialog.xml | 0 {res => app/src/main/res}/menu/feedlist.xml | 0 {res => app/src/main/res}/menu/main.xml | 0 .../src/main/res}/menu/mediaplayer.xml | 0 .../src/main/res}/menu/new_episodes.xml | 0 .../src/main/res}/menu/queue_context.xml | 0 .../src/main/res}/values-az/strings.xml | 0 .../src/main/res}/values-ca/strings.xml | 0 .../src/main/res}/values-cs-rCZ/strings.xml | 0 .../src/main/res}/values-da/strings.xml | 0 .../src/main/res}/values-de/strings.xml | 0 .../src/main/res}/values-es-rES/strings.xml | 0 .../src/main/res}/values-es/strings.xml | 0 .../src/main/res}/values-fr/strings.xml | 0 .../src/main/res}/values-hi-rIN/strings.xml | 0 .../src/main/res}/values-it-rIT/strings.xml | 0 .../src/main/res}/values-iw-rIL/strings.xml | 0 .../src/main/res}/values-ko/strings.xml | 0 .../src/main/res}/values-land/styles.xml | 0 .../src/main/res}/values-large/dimens.xml | 0 .../src/main/res}/values-nl/strings.xml | 0 .../src/main/res}/values-pl-rPL/strings.xml | 0 .../src/main/res}/values-pt-rBR/strings.xml | 0 .../src/main/res}/values-pt/strings.xml | 0 .../src/main/res}/values-ro-rRO/strings.xml | 0 .../src/main/res}/values-ru/strings.xml | 0 .../src/main/res}/values-sv-rSE/strings.xml | 0 .../src/main/res}/values-uk-rUA/strings.xml | 0 .../src/main/res}/values-v11/colors.xml | 0 .../src/main/res}/values-v14/dimens.xml | 0 .../src/main/res}/values-v14/styles.xml | 0 .../src/main/res}/values-v16/styles.xml | 0 .../src/main/res}/values-v19/colors.xml | 0 .../src/main/res}/values-zh-rCN/strings.xml | 0 {res => app/src/main/res}/values/arrays.xml | 0 {res => app/src/main/res}/values/attrs.xml | 0 {res => app/src/main/res}/values/colors.xml | 0 {res => app/src/main/res}/values/dimens.xml | 0 {res => app/src/main/res}/values/ids.xml | 0 {res => app/src/main/res}/values/integers.xml | 0 {res => app/src/main/res}/values/strings.xml | 0 {res => app/src/main/res}/values/styles.xml | 0 .../src/main/res}/xml/player_widget_info.xml | 0 {res => app/src/main/res}/xml/preferences.xml | 0 {res => app/src/main/res}/xml/searchable.xml | 0 build.gradle | 132 ++---------------- settings.gradle | 3 +- tests/.classpath | 10 -- tests/.project | 33 ----- tests/AndroidManifest.xml | 19 --- tests/lint.xml | 3 - tests/proguard-project.txt | 20 --- tests/project.properties | 14 -- tests/res/drawable-hdpi/ic_launcher.png | Bin 9397 -> 0 bytes tests/res/drawable-ldpi/ic_launcher.png | Bin 2729 -> 0 bytes tests/res/drawable-mdpi/ic_launcher.png | Bin 5237 -> 0 bytes tests/res/drawable-xhdpi/ic_launcher.png | Bin 14383 -> 0 bytes tests/res/values/strings.xml | 6 - 641 files changed, 170 insertions(+), 270 deletions(-) create mode 100644 app/build.gradle create mode 160000 app/dslv rename lint.xml => app/lint.xml (100%) rename proguard.cfg => app/proguard.cfg (100%) create mode 100644 app/settings.gradle rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/AntennaPodTestRunner.java (75%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/gpodnet/GPodnetServiceTest.java (97%) rename {src/instrumentationTest/de/test/antennapod/syndication => app/src/androidTest/java/de/test/antennapod}/handler/FeedHandlerTest.java (95%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/service/download/HttpDownloaderTest.java (97%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java (99%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java (99%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/storage/DBReaderTest.java (98%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/storage/DBTasksTest.java (98%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/storage/DBTestUtils.java (97%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/storage/DBWriterTest.java (99%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/ui/MainActivityTest.java (96%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/ui/PlaybackTest.java (99%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/ui/UITestUtils.java (96%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/ui/UITestUtilsTest.java (98%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/ui/VideoplayerActivityTest.java (94%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/ConverterTest.java (95%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/FilenameGeneratorTest.java (96%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/URIUtilTest.java (92%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/URLCheckerTest.java (97%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/playback/TimelineTest.java (98%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/service/download/HTTPBin.java (99%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/service/download/NanoHTTPD.java (99%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/syndication/FeedDiscovererTest.java (98%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java (98%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java (93%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/syndication/feedgenerator/GeneratorUtil.java (88%) rename {src/instrumentationTest => app/src/androidTest/java}/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java (98%) rename AndroidManifest.xml => app/src/main/AndroidManifest.xml (100%) rename {src => app/src/main/aidl}/com/aocate/presto/service/IDeathCallback_0_8.aidl (100%) rename {src => app/src/main/aidl}/com/aocate/presto/service/IOnBufferingUpdateListenerCallback_0_8.aidl (100%) rename {src => app/src/main/aidl}/com/aocate/presto/service/IOnCompletionListenerCallback_0_8.aidl (100%) rename {src => app/src/main/aidl}/com/aocate/presto/service/IOnErrorListenerCallback_0_8.aidl (100%) rename {src => app/src/main/aidl}/com/aocate/presto/service/IOnInfoListenerCallback_0_8.aidl (100%) rename {src => app/src/main/aidl}/com/aocate/presto/service/IOnPitchAdjustmentAvailableChangedListenerCallback_0_8.aidl (100%) rename {src => app/src/main/aidl}/com/aocate/presto/service/IOnPreparedListenerCallback_0_8.aidl (100%) rename {src => app/src/main/aidl}/com/aocate/presto/service/IOnSeekCompleteListenerCallback_0_8.aidl (100%) rename {src => app/src/main/aidl}/com/aocate/presto/service/IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8.aidl (100%) rename {src => app/src/main/aidl}/com/aocate/presto/service/IPlayMedia_0_8.aidl (100%) rename {assets => app/src/main/assets}/LICENSE.html (100%) rename {assets => app/src/main/assets}/LICENSE_APACHE_COMMONS.txt (100%) rename {assets => app/src/main/assets}/LICENSE_BETTERPICKERS.txt (100%) rename {assets => app/src/main/assets}/LICENSE_DSLV.txt (100%) rename {assets => app/src/main/assets}/LICENSE_FLATTR4J.txt (100%) rename {assets => app/src/main/assets}/LICENSE_JSOUP.txt (100%) rename {assets => app/src/main/assets}/LICENSE_NINE_OLD_ANDROIDS.txt (100%) rename {assets => app/src/main/assets}/LICENSE_OKHTTP.txt (100%) rename {assets => app/src/main/assets}/LICENSE_OKIO.txt (100%) rename {assets => app/src/main/assets}/LICENSE_PICASSO.txt (100%) rename {assets => app/src/main/assets}/LICENSE_PRESTO.txt (100%) rename {assets => app/src/main/assets}/Roboto-Light.ttf (100%) rename {assets => app/src/main/assets}/Roboto.ttf (100%) rename {assets => app/src/main/assets}/about.html (100%) rename {assets => app/src/main/assets}/logo.png (100%) rename {assets => app/src/main/assets}/testfile.mp3 (100%) rename {src => app/src/main/java}/com/aocate/media/AndroidMediaPlayer.java (100%) rename {src => app/src/main/java}/com/aocate/media/MediaPlayer.java (100%) rename {src => app/src/main/java}/com/aocate/media/MediaPlayerImpl.java (100%) rename {src => app/src/main/java}/com/aocate/media/ServiceBackedMediaPlayer.java (100%) rename {src => app/src/main/java}/com/aocate/media/SpeedAdjustmentAlgorithm.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/AppConfig.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/PodcastApp.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/AboutActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/AudioplayerActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/DefaultOnlineFeedViewActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/DirectoryChooserActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/FeedInfoActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/FlattrAuthActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/MainActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/MediaplayerActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/OpmlFeedChooserActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/OpmlImportHolder.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/PreferenceActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/StorageErrorActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/VideoplayerActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/ActionButtonCallback.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/ActionButtonUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/AdapterUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/ChapterListAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/DownloadLogAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/DownloadedEpisodesListAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/DownloadlistAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/NavListAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/QueueListAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/SearchlistAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/asynctask/DownloadObserver.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/asynctask/FeedRemover.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/asynctask/FlattrClickWorker.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/asynctask/FlattrStatusFetcher.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/asynctask/FlattrTokenFetcher.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/asynctask/OpmlExportWorker.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/asynctask/OpmlImportWorker.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/asynctask/PicassoImageResource.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/asynctask/PicassoProvider.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/backup/OpmlBackupAgent.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/dialog/AuthenticationDialog.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/dialog/ConfirmationDialog.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/dialog/DownloadRequestErrorDialogCreator.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/dialog/FeedItemDialog.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/dialog/TimeDialog.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/dialog/VariableSpeedDialog.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/Chapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/EventDistributor.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/Feed.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/FeedComponent.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/FeedFile.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/FeedImage.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/FeedItem.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/FeedMedia.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/FeedPreferences.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/ID3Chapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/MediaType.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/SearchResult.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/SimpleChapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/feed/VorbisCommentChapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/AddFeedFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/CoverFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/DownloadLogFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/DownloadsFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/ItemlistFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/NewEpisodesFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/QueueFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/SearchFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/gpodnet/SuggestionListFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/gpoddernet/GpodnetService.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/gpoddernet/GpodnetServiceAuthenticationException.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/gpoddernet/GpodnetServiceBadStatusCodeException.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/gpoddernet/GpodnetServiceException.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/gpoddernet/model/GpodnetDevice.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/gpoddernet/model/GpodnetPodcast.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/gpoddernet/model/GpodnetSubscriptionChange.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/gpoddernet/model/GpodnetTag.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/gpoddernet/model/GpodnetUploadChangesResponse.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/opml/OpmlElement.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/opml/OpmlReader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/opml/OpmlSymbols.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/opml/OpmlWriter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/preferences/GpodnetPreferences.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/preferences/PlaybackPreferences.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/preferences/UserPreferences.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/receiver/AlarmUpdateReceiver.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/receiver/FeedUpdateReceiver.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/receiver/MediaButtonReceiver.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/receiver/PlayerWidget.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/receiver/SPAReceiver.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/GpodnetSyncService.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/download/APRedirectHandler.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/download/AntennapodHttpClient.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/download/DownloadRequest.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/download/DownloadService.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/download/DownloadStatus.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/download/Downloader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/download/DownloaderCallback.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/download/HttpDownloader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/playback/PlaybackService.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/playback/PlaybackServiceMediaPlayer.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/playback/PlaybackServiceTaskManager.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/playback/PlayerStatus.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/service/playback/PlayerWidgetService.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/spa/SPAUtil.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/storage/DBReader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/storage/DBTasks.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/storage/DBWriter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/storage/DownloadRequestException.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/storage/DownloadRequester.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/storage/FeedItemStatistics.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/storage/FeedSearcher.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/storage/PodDBAdapter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/handler/FeedHandler.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/handler/FeedHandlerResult.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/handler/HandlerState.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/handler/SyndHandler.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/handler/TypeGetter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/handler/UnsupportedFeedtypeException.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/namespace/NSContent.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/namespace/NSITunes.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/namespace/NSMedia.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/namespace/NSRSS20.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/namespace/NSSimpleChapters.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/namespace/Namespace.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/namespace/SyndElement.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/namespace/atom/AtomText.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/namespace/atom/NSAtom.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/util/SyndDateUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/syndication/util/SyndTypeUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/ChapterUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/Converter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/DownloadError.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/DuckType.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/EpisodeFilter.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/FeedtitleComparator.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/FileNameGenerator.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/InvalidFeedException.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/LangUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/NetworkUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/QueueAccess.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/ShareUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/ShownotesProvider.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/StorageUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/ThemeUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/URIUtil.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/URLChecker.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/UndoBarController.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/comparator/ChapterStartTimeComparator.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/comparator/FeedItemPubdateComparator.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/comparator/PlaybackCompletionDateComparator.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/comparator/SearchResultValueComparator.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/exception/MediaFileNotFoundException.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/flattr/FlattrServiceCreator.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/flattr/FlattrStatus.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/flattr/FlattrThing.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/flattr/FlattrUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/flattr/SimpleFlattrThing.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/gui/FeedItemUndoToken.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/id3reader/ChapterReader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/id3reader/ID3Reader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/id3reader/ID3ReaderException.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/id3reader/model/FrameHeader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/id3reader/model/Header.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/id3reader/model/TagHeader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/menuhandler/MenuItemUtils.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/menuhandler/NavDrawerActivity.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/playback/AudioPlayer.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/playback/ExternalMedia.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/playback/IPlayer.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/playback/MediaPlayerError.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/playback/Playable.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/playback/PlaybackController.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/playback/Timeline.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/playback/VideoPlayer.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/syndication/FeedDiscoverer.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/vorbiscommentreader/OggInputStream.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentChapterReader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentHeader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReader.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReaderException.java (100%) rename {src => app/src/main/java}/de/danoeh/antennapod/view/AspectRatioVideoView.java (100%) rename {res => app/src/main/res}/anim/fade_in.xml (100%) rename {res => app/src/main/res}/anim/fade_out.xml (100%) rename {res => app/src/main/res}/drawable-hdpi-v11/ic_stat_antenna.png (100%) rename {res => app/src/main/res}/drawable-hdpi-v11/ic_stat_authentication.png (100%) rename {res => app/src/main/res}/drawable-hdpi-v11/stat_notify_sync.png (100%) rename {res => app/src/main/res}/drawable-hdpi-v11/stat_notify_sync_error.png (100%) rename {res => app/src/main/res}/drawable-hdpi/action_about.png (100%) rename {res => app/src/main/res}/drawable-hdpi/action_about_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/action_search.png (100%) rename {res => app/src/main/res}/drawable-hdpi/action_search_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/action_settings.png (100%) rename {res => app/src/main/res}/drawable-hdpi/action_settings_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/action_stream.png (100%) rename {res => app/src/main/res}/drawable-hdpi/action_stream_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/av_download.png (100%) rename {res => app/src/main/res}/drawable-hdpi/av_download_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/av_fast_forward.png (100%) rename {res => app/src/main/res}/drawable-hdpi/av_fast_forward_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/av_pause.png (100%) rename {res => app/src/main/res}/drawable-hdpi/av_pause_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/av_play.png (100%) rename {res => app/src/main/res}/drawable-hdpi/av_play_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/av_rewind.png (100%) rename {res => app/src/main/res}/drawable-hdpi/av_rewind_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/content_discard.png (100%) rename {res => app/src/main/res}/drawable-hdpi/content_discard_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/content_new.png (100%) rename {res => app/src/main/res}/drawable-hdpi/content_new_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/default_cover.png (100%) rename {res => app/src/main/res}/drawable-hdpi/default_cover_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/device_access_time.png (100%) rename {res => app/src/main/res}/drawable-hdpi/device_access_time_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_action_overflow.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_action_overflow_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_action_pause_over_video.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_action_play_over_video.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_drag_handle.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_drag_handle_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_drawer.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_drawer_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_launcher.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_new.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_new_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_stat_antenna.png (100%) rename {res => app/src/main/res}/drawable-hdpi/ic_stat_authentication.png (100%) rename {res => app/src/main/res}/drawable-hdpi/location_web_site.png (100%) rename {res => app/src/main/res}/drawable-hdpi/location_web_site_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_accept.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_accept_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_cancel.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_cancel_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_chapters.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_chapters_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_collapse.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_collapse_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_expand.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_expand_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_refresh.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_refresh_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_shownotes.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_shownotes_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_up.png (100%) rename {res => app/src/main/res}/drawable-hdpi/navigation_up_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/social_share.png (100%) rename {res => app/src/main/res}/drawable-hdpi/social_share_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/spinner_button.9.png (100%) rename {res => app/src/main/res}/drawable-hdpi/spinner_button_dark.9.png (100%) rename {res => app/src/main/res}/drawable-hdpi/stat_notify_sync.png (100%) rename {res => app/src/main/res}/drawable-hdpi/stat_notify_sync_error.png (100%) rename {res => app/src/main/res}/drawable-hdpi/stat_playlist.png (100%) rename {res => app/src/main/res}/drawable-hdpi/stat_playlist_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/type_audio.png (100%) rename {res => app/src/main/res}/drawable-hdpi/type_audio_dark.png (100%) rename {res => app/src/main/res}/drawable-hdpi/type_video.png (100%) rename {res => app/src/main/res}/drawable-hdpi/type_video_dark.png (100%) rename {res => app/src/main/res}/drawable-ldpi-v11/ic_stat_antenna.png (100%) rename {res => app/src/main/res}/drawable-ldpi/action_stream.png (100%) rename {res => app/src/main/res}/drawable-ldpi/action_stream_dark.png (100%) rename {res => app/src/main/res}/drawable-ldpi/ic_launcher.png (100%) rename {res => app/src/main/res}/drawable-ldpi/ic_stat_antenna.png (100%) rename {res => app/src/main/res}/drawable-ldpi/stat_playlist.png (100%) rename {res => app/src/main/res}/drawable-ldpi/stat_playlist_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi-v11/ic_stat_antenna.png (100%) rename {res => app/src/main/res}/drawable-mdpi-v11/ic_stat_authentication.png (100%) rename {res => app/src/main/res}/drawable-mdpi-v11/stat_notify_sync.png (100%) rename {res => app/src/main/res}/drawable-mdpi-v11/stat_notify_sync_error.png (100%) rename {res => app/src/main/res}/drawable-mdpi/action_about.png (100%) rename {res => app/src/main/res}/drawable-mdpi/action_about_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/action_search.png (100%) rename {res => app/src/main/res}/drawable-mdpi/action_search_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/action_settings.png (100%) rename {res => app/src/main/res}/drawable-mdpi/action_settings_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/action_stream.png (100%) rename {res => app/src/main/res}/drawable-mdpi/action_stream_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/av_download.png (100%) rename {res => app/src/main/res}/drawable-mdpi/av_download_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/av_fast_forward.png (100%) rename {res => app/src/main/res}/drawable-mdpi/av_fast_forward_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/av_pause.png (100%) rename {res => app/src/main/res}/drawable-mdpi/av_pause_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/av_play.png (100%) rename {res => app/src/main/res}/drawable-mdpi/av_play_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/av_rewind.png (100%) rename {res => app/src/main/res}/drawable-mdpi/av_rewind_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/content_discard.png (100%) rename {res => app/src/main/res}/drawable-mdpi/content_discard_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/content_new.png (100%) rename {res => app/src/main/res}/drawable-mdpi/content_new_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/default_cover.png (100%) rename {res => app/src/main/res}/drawable-mdpi/default_cover_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/device_access_time.png (100%) rename {res => app/src/main/res}/drawable-mdpi/device_access_time_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_action_overflow.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_action_overflow_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_action_pause_over_video.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_action_play_over_video.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_drag_handle.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_drag_handle_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_drawer.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_drawer_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_launcher.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_new.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_new_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_stat_antenna.png (100%) rename {res => app/src/main/res}/drawable-mdpi/ic_stat_authentication.png (100%) rename {res => app/src/main/res}/drawable-mdpi/location_web_site.png (100%) rename {res => app/src/main/res}/drawable-mdpi/location_web_site_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_accept.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_accept_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_cancel.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_cancel_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_chapters.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_chapters_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_collapse.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_collapse_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_expand.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_expand_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_refresh.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_refresh_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_shownotes.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_shownotes_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_up.png (100%) rename {res => app/src/main/res}/drawable-mdpi/navigation_up_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/social_share.png (100%) rename {res => app/src/main/res}/drawable-mdpi/social_share_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/spinner_button.9.png (100%) rename {res => app/src/main/res}/drawable-mdpi/spinner_button_dark.9.png (100%) rename {res => app/src/main/res}/drawable-mdpi/stat_notify_sync.png (100%) rename {res => app/src/main/res}/drawable-mdpi/stat_notify_sync_error.png (100%) rename {res => app/src/main/res}/drawable-mdpi/stat_playlist.png (100%) rename {res => app/src/main/res}/drawable-mdpi/stat_playlist_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/type_audio.png (100%) rename {res => app/src/main/res}/drawable-mdpi/type_audio_dark.png (100%) rename {res => app/src/main/res}/drawable-mdpi/type_video.png (100%) rename {res => app/src/main/res}/drawable-mdpi/type_video_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi-v11/ic_stat_antenna.png (100%) rename {res => app/src/main/res}/drawable-xhdpi-v11/ic_stat_authentication.png (100%) rename {res => app/src/main/res}/drawable-xhdpi-v11/stat_notify_sync.png (100%) rename {res => app/src/main/res}/drawable-xhdpi-v11/stat_notify_sync_error.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/action_about.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/action_about_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/action_search.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/action_search_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/action_settings.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/action_settings_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/action_stream.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/action_stream_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/av_download.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/av_download_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/av_fast_forward.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/av_fast_forward_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/av_pause.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/av_pause_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/av_play.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/av_play_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/av_rewind.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/av_rewind_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/content_discard.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/content_discard_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/content_new.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/content_new_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/content_remove.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/content_remove_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/default_cover.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/default_cover_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/device_access_time.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/device_access_time_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_action_overflow.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_action_overflow_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_action_pause_over_video.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_action_play_over_video.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_drag_handle.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_drag_handle_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_drawer.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_drawer_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_launcher.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_new.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_new_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_stat_antenna.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_stat_authentication.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/ic_undobar_undo.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/location_web_site.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/location_web_site_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_accept.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_accept_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_cancel.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_cancel_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_chapters.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_chapters_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_collapse.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_collapse_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_expand.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_expand_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_refresh.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_refresh_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_shownotes.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_shownotes_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_up.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/navigation_up_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/social_share.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/social_share_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/spinner_button.9.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/spinner_button_dark.9.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/stat_playlist.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/stat_playlist_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/type_audio.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/type_audio_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/type_video.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/type_video_dark.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/undobar.9.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/undobar_button_focused.9.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/undobar_button_pressed.9.png (100%) rename {res => app/src/main/res}/drawable-xhdpi/undobar_divider.9.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_action_overflow.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_action_overflow_dark.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_action_pause_over_video.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_action_play_over_video.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_drag_handle.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_drag_handle_dark.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_drawer.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_drawer_dark.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_launcher.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_new.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_new_dark.png (100%) rename {res => app/src/main/res}/drawable-xxhdpi/ic_stat_authentication.png (100%) rename {res => app/src/main/res}/drawable/badge.xml (100%) rename {res => app/src/main/res}/drawable/borderless_button.xml (100%) rename {res => app/src/main/res}/drawable/borderless_button_dark.xml (100%) rename {res => app/src/main/res}/drawable/horizontal_divider.9.png (100%) rename {res => app/src/main/res}/drawable/overlay_button_circle_background.xml (100%) rename {res => app/src/main/res}/drawable/overlay_drawable.xml (100%) rename {res => app/src/main/res}/drawable/overlay_drawable_dark.xml (100%) rename {res => app/src/main/res}/drawable/type_audio.png (100%) rename {res => app/src/main/res}/drawable/type_video.png (100%) rename {res => app/src/main/res}/drawable/undobar_button.xml (100%) rename {res => app/src/main/res}/drawable/vertical_divider.9.png (100%) rename {res => app/src/main/res}/drawable/white_circle.xml (100%) rename {res => app/src/main/res}/layout-land/audioplayer_activity.xml (100%) rename {res => app/src/main/res}/layout-land/videoplayer_activity.xml (100%) rename {res => app/src/main/res}/layout-v14/authentication_dialog.xml (100%) rename {res => app/src/main/res}/layout-v14/directory_chooser.xml (100%) rename {res => app/src/main/res}/layout-v14/download_authentication_activity.xml (100%) rename {res => app/src/main/res}/layout-v14/opml_selection.xml (100%) rename {res => app/src/main/res}/layout-v14/time_dialog.xml (100%) rename {res => app/src/main/res}/layout/about.xml (100%) rename {res => app/src/main/res}/layout/addfeed.xml (100%) rename {res => app/src/main/res}/layout/audioplayer_activity.xml (100%) rename {res => app/src/main/res}/layout/authentication_dialog.xml (100%) rename {res => app/src/main/res}/layout/autoflattr_preference_dialog.xml (100%) rename {res => app/src/main/res}/layout/cover_fragment.xml (100%) rename {res => app/src/main/res}/layout/directory_chooser.xml (100%) rename {res => app/src/main/res}/layout/download_authentication_activity.xml (100%) rename {res => app/src/main/res}/layout/downloaded_episodeslist_item.xml (100%) rename {res => app/src/main/res}/layout/downloadlist_item.xml (100%) rename {res => app/src/main/res}/layout/downloadlog_item.xml (100%) rename {res => app/src/main/res}/layout/ellipsize_start_listitem.xml (100%) rename {res => app/src/main/res}/layout/external_itemlist_item.xml (100%) rename {res => app/src/main/res}/layout/external_player_fragment.xml (100%) rename {res => app/src/main/res}/layout/feedinfo.xml (100%) rename {res => app/src/main/res}/layout/feeditem_dialog.xml (100%) rename {res => app/src/main/res}/layout/feeditemlist_header.xml (100%) rename {res => app/src/main/res}/layout/feeditemlist_item.xml (100%) rename {res => app/src/main/res}/layout/flattr_auth.xml (100%) rename {res => app/src/main/res}/layout/gpodnet_podcast_list.xml (100%) rename {res => app/src/main/res}/layout/gpodnet_podcast_listitem.xml (100%) rename {res => app/src/main/res}/layout/gpodnetauth_activity.xml (100%) rename {res => app/src/main/res}/layout/gpodnetauth_credentials.xml (100%) rename {res => app/src/main/res}/layout/gpodnetauth_device.xml (100%) rename {res => app/src/main/res}/layout/gpodnetauth_finish.xml (100%) rename {res => app/src/main/res}/layout/itemdescription_listitem.xml (100%) rename {res => app/src/main/res}/layout/listview_activity.xml (100%) rename {res => app/src/main/res}/layout/main.xml (100%) rename {res => app/src/main/res}/layout/nav_feedlistitem.xml (100%) rename {res => app/src/main/res}/layout/nav_listitem.xml (100%) rename {res => app/src/main/res}/layout/nav_section_item.xml (100%) rename {res => app/src/main/res}/layout/new_episodes_fragment.xml (100%) rename {res => app/src/main/res}/layout/new_episodes_listitem.xml (100%) rename {res => app/src/main/res}/layout/onlinefeedview_header.xml (100%) rename {res => app/src/main/res}/layout/opml_import.xml (100%) rename {res => app/src/main/res}/layout/opml_selection.xml (100%) rename {res => app/src/main/res}/layout/pager_fragment.xml (100%) rename {res => app/src/main/res}/layout/player_widget.xml (100%) rename {res => app/src/main/res}/layout/queue_fragment.xml (100%) rename {res => app/src/main/res}/layout/queue_listitem.xml (100%) rename {res => app/src/main/res}/layout/searchlist_item.xml (100%) rename {res => app/src/main/res}/layout/simplechapter_item.xml (100%) rename {res => app/src/main/res}/layout/storage_error.xml (100%) rename {res => app/src/main/res}/layout/time_dialog.xml (100%) rename {res => app/src/main/res}/menu/directory_chooser.xml (100%) rename {res => app/src/main/res}/menu/feedinfo.xml (100%) rename {res => app/src/main/res}/menu/feeditem.xml (100%) rename {res => app/src/main/res}/menu/feeditem_dialog.xml (100%) rename {res => app/src/main/res}/menu/feedlist.xml (100%) rename {res => app/src/main/res}/menu/main.xml (100%) rename {res => app/src/main/res}/menu/mediaplayer.xml (100%) rename {res => app/src/main/res}/menu/new_episodes.xml (100%) rename {res => app/src/main/res}/menu/queue_context.xml (100%) rename {res => app/src/main/res}/values-az/strings.xml (100%) rename {res => app/src/main/res}/values-ca/strings.xml (100%) rename {res => app/src/main/res}/values-cs-rCZ/strings.xml (100%) rename {res => app/src/main/res}/values-da/strings.xml (100%) rename {res => app/src/main/res}/values-de/strings.xml (100%) rename {res => app/src/main/res}/values-es-rES/strings.xml (100%) rename {res => app/src/main/res}/values-es/strings.xml (100%) rename {res => app/src/main/res}/values-fr/strings.xml (100%) rename {res => app/src/main/res}/values-hi-rIN/strings.xml (100%) rename {res => app/src/main/res}/values-it-rIT/strings.xml (100%) rename {res => app/src/main/res}/values-iw-rIL/strings.xml (100%) rename {res => app/src/main/res}/values-ko/strings.xml (100%) rename {res => app/src/main/res}/values-land/styles.xml (100%) rename {res => app/src/main/res}/values-large/dimens.xml (100%) rename {res => app/src/main/res}/values-nl/strings.xml (100%) rename {res => app/src/main/res}/values-pl-rPL/strings.xml (100%) rename {res => app/src/main/res}/values-pt-rBR/strings.xml (100%) rename {res => app/src/main/res}/values-pt/strings.xml (100%) rename {res => app/src/main/res}/values-ro-rRO/strings.xml (100%) rename {res => app/src/main/res}/values-ru/strings.xml (100%) rename {res => app/src/main/res}/values-sv-rSE/strings.xml (100%) rename {res => app/src/main/res}/values-uk-rUA/strings.xml (100%) rename {res => app/src/main/res}/values-v11/colors.xml (100%) rename {res => app/src/main/res}/values-v14/dimens.xml (100%) rename {res => app/src/main/res}/values-v14/styles.xml (100%) rename {res => app/src/main/res}/values-v16/styles.xml (100%) rename {res => app/src/main/res}/values-v19/colors.xml (100%) rename {res => app/src/main/res}/values-zh-rCN/strings.xml (100%) rename {res => app/src/main/res}/values/arrays.xml (100%) rename {res => app/src/main/res}/values/attrs.xml (100%) rename {res => app/src/main/res}/values/colors.xml (100%) rename {res => app/src/main/res}/values/dimens.xml (100%) rename {res => app/src/main/res}/values/ids.xml (100%) rename {res => app/src/main/res}/values/integers.xml (100%) rename {res => app/src/main/res}/values/strings.xml (100%) rename {res => app/src/main/res}/values/styles.xml (100%) rename {res => app/src/main/res}/xml/player_widget_info.xml (100%) rename {res => app/src/main/res}/xml/preferences.xml (100%) rename {res => app/src/main/res}/xml/searchable.xml (100%) delete mode 100644 tests/.classpath delete mode 100644 tests/.project delete mode 100644 tests/AndroidManifest.xml delete mode 100644 tests/lint.xml delete mode 100644 tests/proguard-project.txt delete mode 100644 tests/project.properties delete mode 100644 tests/res/drawable-hdpi/ic_launcher.png delete mode 100644 tests/res/drawable-ldpi/ic_launcher.png delete mode 100644 tests/res/drawable-mdpi/ic_launcher.png delete mode 100644 tests/res/drawable-xhdpi/ic_launcher.png delete mode 100644 tests/res/values/strings.xml diff --git a/.gitmodules b/.gitmodules index 17dac28b0..2529169ca 100644 --- a/.gitmodules +++ b/.gitmodules @@ -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 diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 000000000..1295a81dc --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,112 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:0.12.2' + } +} +apply plugin: 'com.android.application' + +repositories { + mavenCentral() +} +dependencies { + compile 'com.android.support:support-v4:20.0.0' + compile 'com.android.support:appcompat-v7:20.0.0' + 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 ("com.doomonafireball.betterpickers:library:1.5.2") { + exclude group: 'com.android.support', module: 'support-v4' + } + compile 'org.jsoup:jsoup:1.7.3' + compile 'com.squareup.picasso:picasso:2.3.4' + compile 'com.squareup.okhttp:okhttp:2.0.0' + compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' + compile 'com.squareup.okio:okio:1.0.0' +} + +android { + compileSdkVersion 19 + buildToolsVersion "20.0" + + defaultConfig { + minSdkVersion 10 + targetSdkVersion 19 + 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 { + runProguard 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 + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } +} + +task wrapper(type: Wrapper) { + gradleVersion = '1.12' +} diff --git a/app/dslv b/app/dslv new file mode 160000 index 000000000..80011c50e --- /dev/null +++ b/app/dslv @@ -0,0 +1 @@ +Subproject commit 80011c50e444e1c7d5e13b57bdb127b524a1ff92 diff --git a/lint.xml b/app/lint.xml similarity index 100% rename from lint.xml rename to app/lint.xml diff --git a/proguard.cfg b/app/proguard.cfg similarity index 100% rename from proguard.cfg rename to app/proguard.cfg diff --git a/app/settings.gradle b/app/settings.gradle new file mode 100644 index 000000000..e2d4f844d --- /dev/null +++ b/app/settings.gradle @@ -0,0 +1 @@ +include ':app:dslv:library' diff --git a/src/instrumentationTest/de/test/antennapod/AntennaPodTestRunner.java b/app/src/androidTest/java/de/test/antennapod/AntennaPodTestRunner.java similarity index 75% rename from src/instrumentationTest/de/test/antennapod/AntennaPodTestRunner.java rename to app/src/androidTest/java/de/test/antennapod/AntennaPodTestRunner.java index cc8494632..24cd6e669 100644 --- a/src/instrumentationTest/de/test/antennapod/AntennaPodTestRunner.java +++ b/app/src/androidTest/java/de/test/antennapod/AntennaPodTestRunner.java @@ -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(); } } diff --git a/src/instrumentationTest/de/test/antennapod/gpodnet/GPodnetServiceTest.java b/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java similarity index 97% rename from src/instrumentationTest/de/test/antennapod/gpodnet/GPodnetServiceTest.java rename to app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java index a96fc7aab..971a79a81 100644 --- a/src/instrumentationTest/de/test/antennapod/gpodnet/GPodnetServiceTest.java +++ b/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java @@ -1,7 +1,7 @@ -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; diff --git a/src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java b/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java similarity index 95% rename from src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java rename to app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java index 213dac66a..3fe42dfd0 100644 --- a/src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java @@ -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.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; diff --git a/src/instrumentationTest/de/test/antennapod/service/download/HttpDownloaderTest.java b/app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java similarity index 97% rename from src/instrumentationTest/de/test/antennapod/service/download/HttpDownloaderTest.java rename to app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java index 6e44c8a0f..575bbb998 100644 --- a/src/instrumentationTest/de/test/antennapod/service/download/HttpDownloaderTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.service.download; +package de.test.antennapod.service.download; import android.test.InstrumentationTestCase; import android.util.Log; @@ -8,7 +8,7 @@ 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.test.antennapod.util.service.download.HTTPBin; import java.io.File; import java.io.IOException; diff --git a/src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java similarity index 99% rename from src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java rename to app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java index 71747dae8..b7d30a7b8 100644 --- a/src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.service.playback; +package de.test.antennapod.service.playback; import android.content.Context; import android.media.RemoteControlClient; @@ -10,7 +10,7 @@ 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.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(); diff --git a/src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java similarity index 99% rename from src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java rename to app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index 19f64b4cf..86f609d74 100644 --- a/src/instrumentationTest/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.service.playback; +package de.test.antennapod.service.playback; import android.content.Context; import android.test.InstrumentationTestCase; diff --git a/src/instrumentationTest/de/test/antennapod/storage/DBReaderTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java similarity index 98% rename from src/instrumentationTest/de/test/antennapod/storage/DBReaderTest.java rename to app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java index c42c7a0cc..fe337a5fb 100644 --- a/src/instrumentationTest/de/test/antennapod/storage/DBReaderTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.storage; +package de.test.antennapod.storage; import android.content.Context; import android.test.InstrumentationTestCase; @@ -9,14 +9,14 @@ 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 static de.test.antennapod.storage.DBTestUtils.*; 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 diff --git a/src/instrumentationTest/de/test/antennapod/storage/DBTasksTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java similarity index 98% rename from src/instrumentationTest/de/test/antennapod/storage/DBTasksTest.java rename to app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java index 1e5afd0e3..8859e50f9 100644 --- a/src/instrumentationTest/de/test/antennapod/storage/DBTasksTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.storage; +package de.test.antennapod.storage; import android.content.Context; import android.content.SharedPreferences; @@ -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 diff --git a/src/instrumentationTest/de/test/antennapod/storage/DBTestUtils.java b/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java similarity index 97% rename from src/instrumentationTest/de/test/antennapod/storage/DBTestUtils.java rename to app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java index 7e9e1b908..947984574 100644 --- a/src/instrumentationTest/de/test/antennapod/storage/DBTestUtils.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.storage; +package de.test.antennapod.storage; import android.content.Context; import de.danoeh.antennapod.feed.Feed; diff --git a/src/instrumentationTest/de/test/antennapod/storage/DBWriterTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java similarity index 99% rename from src/instrumentationTest/de/test/antennapod/storage/DBWriterTest.java rename to app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java index 67d99f9fc..c1e045b79 100644 --- a/src/instrumentationTest/de/test/antennapod/storage/DBWriterTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.storage; +package de.test.antennapod.storage; import android.content.Context; import android.database.Cursor; diff --git a/src/instrumentationTest/de/test/antennapod/ui/MainActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java similarity index 96% rename from src/instrumentationTest/de/test/antennapod/ui/MainActivityTest.java rename to app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java index 23fc224c8..9b98c5f89 100644 --- a/src/instrumentationTest/de/test/antennapod/ui/MainActivityTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java @@ -1,8 +1,7 @@ -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; @@ -10,7 +9,6 @@ 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; diff --git a/src/instrumentationTest/de/test/antennapod/ui/PlaybackTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java similarity index 99% rename from src/instrumentationTest/de/test/antennapod/ui/PlaybackTest.java rename to app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java index 98d93a35d..28271a52b 100644 --- a/src/instrumentationTest/de/test/antennapod/ui/PlaybackTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.ui; +package de.test.antennapod.ui; import android.content.Intent; import android.content.SharedPreferences; diff --git a/src/instrumentationTest/de/test/antennapod/ui/UITestUtils.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java similarity index 96% rename from src/instrumentationTest/de/test/antennapod/ui/UITestUtils.java rename to app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java index 8877d46d6..eac90e7c1 100644 --- a/src/instrumentationTest/de/test/antennapod/ui/UITestUtils.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.ui; +package de.test.antennapod.ui; import android.annotation.TargetApi; import android.content.Context; @@ -7,10 +7,9 @@ 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.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; diff --git a/src/instrumentationTest/de/test/antennapod/ui/UITestUtilsTest.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java similarity index 98% rename from src/instrumentationTest/de/test/antennapod/ui/UITestUtilsTest.java rename to app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java index 88180152c..e7782ff59 100644 --- a/src/instrumentationTest/de/test/antennapod/ui/UITestUtilsTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.ui; +package de.test.antennapod.ui; import android.test.InstrumentationTestCase; import de.danoeh.antennapod.feed.Feed; diff --git a/src/instrumentationTest/de/test/antennapod/ui/VideoplayerActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java similarity index 94% rename from src/instrumentationTest/de/test/antennapod/ui/VideoplayerActivityTest.java rename to app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java index 807552571..da6f07cab 100644 --- a/src/instrumentationTest/de/test/antennapod/ui/VideoplayerActivityTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.ui; +package de.test.antennapod.ui; import android.test.ActivityInstrumentationTestCase2; diff --git a/src/instrumentationTest/de/test/antennapod/util/ConverterTest.java b/app/src/androidTest/java/de/test/antennapod/util/ConverterTest.java similarity index 95% rename from src/instrumentationTest/de/test/antennapod/util/ConverterTest.java rename to app/src/androidTest/java/de/test/antennapod/util/ConverterTest.java index 8e5674b06..9ab444a99 100644 --- a/src/instrumentationTest/de/test/antennapod/util/ConverterTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/ConverterTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.util; +package de.test.antennapod.util; import android.test.AndroidTestCase; diff --git a/src/instrumentationTest/de/test/antennapod/util/FilenameGeneratorTest.java b/app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java similarity index 96% rename from src/instrumentationTest/de/test/antennapod/util/FilenameGeneratorTest.java rename to app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java index 552d34941..bf7f57459 100644 --- a/src/instrumentationTest/de/test/antennapod/util/FilenameGeneratorTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.util; +package de.test.antennapod.util; import java.io.File; import java.io.IOException; diff --git a/src/instrumentationTest/de/test/antennapod/util/URIUtilTest.java b/app/src/androidTest/java/de/test/antennapod/util/URIUtilTest.java similarity index 92% rename from src/instrumentationTest/de/test/antennapod/util/URIUtilTest.java rename to app/src/androidTest/java/de/test/antennapod/util/URIUtilTest.java index a7cba4c03..61d230295 100644 --- a/src/instrumentationTest/de/test/antennapod/util/URIUtilTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/URIUtilTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.util; +package de.test.antennapod.util; import android.test.AndroidTestCase; import de.danoeh.antennapod.util.URIUtil; diff --git a/src/instrumentationTest/de/test/antennapod/util/URLCheckerTest.java b/app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java similarity index 97% rename from src/instrumentationTest/de/test/antennapod/util/URLCheckerTest.java rename to app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java index 08fd0d486..fd485e0da 100644 --- a/src/instrumentationTest/de/test/antennapod/util/URLCheckerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.util; +package de.test.antennapod.util; import android.test.AndroidTestCase; import de.danoeh.antennapod.util.URLChecker; diff --git a/src/instrumentationTest/de/test/antennapod/util/playback/TimelineTest.java b/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java similarity index 98% rename from src/instrumentationTest/de/test/antennapod/util/playback/TimelineTest.java rename to app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java index 1b1d011d4..c2b7ad316 100644 --- a/src/instrumentationTest/de/test/antennapod/util/playback/TimelineTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java @@ -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; diff --git a/src/instrumentationTest/de/test/antennapod/util/service/download/HTTPBin.java b/app/src/androidTest/java/de/test/antennapod/util/service/download/HTTPBin.java similarity index 99% rename from src/instrumentationTest/de/test/antennapod/util/service/download/HTTPBin.java rename to app/src/androidTest/java/de/test/antennapod/util/service/download/HTTPBin.java index fc5025b14..5cb723446 100644 --- a/src/instrumentationTest/de/test/antennapod/util/service/download/HTTPBin.java +++ b/app/src/androidTest/java/de/test/antennapod/util/service/download/HTTPBin.java @@ -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; diff --git a/src/instrumentationTest/de/test/antennapod/util/service/download/NanoHTTPD.java b/app/src/androidTest/java/de/test/antennapod/util/service/download/NanoHTTPD.java similarity index 99% rename from src/instrumentationTest/de/test/antennapod/util/service/download/NanoHTTPD.java rename to app/src/androidTest/java/de/test/antennapod/util/service/download/NanoHTTPD.java index 916a2af6c..4a5818479 100644 --- a/src/instrumentationTest/de/test/antennapod/util/service/download/NanoHTTPD.java +++ b/app/src/androidTest/java/de/test/antennapod/util/service/download/NanoHTTPD.java @@ -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; diff --git a/src/instrumentationTest/de/test/antennapod/util/syndication/FeedDiscovererTest.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java similarity index 98% rename from src/instrumentationTest/de/test/antennapod/util/syndication/FeedDiscovererTest.java rename to app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java index 51a28089d..10414fd2a 100644 --- a/src/instrumentationTest/de/test/antennapod/util/syndication/FeedDiscovererTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.util.syndication; +package de.test.antennapod.util.syndication; import android.test.InstrumentationTestCase; import de.danoeh.antennapod.util.syndication.FeedDiscoverer; diff --git a/src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java similarity index 98% rename from src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java rename to app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java index 0e3440030..8ce6c08e4 100644 --- a/src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java @@ -1,4 +1,4 @@ -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; diff --git a/src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java similarity index 93% rename from src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java rename to app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java index e6b0f0697..23518de87 100644 --- a/src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.util.syndication.feedgenerator; +package de.test.antennapod.util.syndication.feedgenerator; import de.danoeh.antennapod.feed.Feed; diff --git a/src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/GeneratorUtil.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/GeneratorUtil.java similarity index 88% rename from src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/GeneratorUtil.java rename to app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/GeneratorUtil.java index d8bef2354..e7cbb1b42 100644 --- a/src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/GeneratorUtil.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/GeneratorUtil.java @@ -1,4 +1,4 @@ -package instrumentationTest.de.test.antennapod.util.syndication.feedgenerator; +package de.test.antennapod.util.syndication.feedgenerator; import org.xmlpull.v1.XmlSerializer; diff --git a/src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java similarity index 98% rename from src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java rename to app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java index 824a84a66..6355d4bb9 100644 --- a/src/instrumentationTest/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java @@ -1,4 +1,4 @@ -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; diff --git a/AndroidManifest.xml b/app/src/main/AndroidManifest.xml similarity index 100% rename from AndroidManifest.xml rename to app/src/main/AndroidManifest.xml diff --git a/src/com/aocate/presto/service/IDeathCallback_0_8.aidl b/app/src/main/aidl/com/aocate/presto/service/IDeathCallback_0_8.aidl similarity index 100% rename from src/com/aocate/presto/service/IDeathCallback_0_8.aidl rename to app/src/main/aidl/com/aocate/presto/service/IDeathCallback_0_8.aidl diff --git a/src/com/aocate/presto/service/IOnBufferingUpdateListenerCallback_0_8.aidl b/app/src/main/aidl/com/aocate/presto/service/IOnBufferingUpdateListenerCallback_0_8.aidl similarity index 100% rename from src/com/aocate/presto/service/IOnBufferingUpdateListenerCallback_0_8.aidl rename to app/src/main/aidl/com/aocate/presto/service/IOnBufferingUpdateListenerCallback_0_8.aidl diff --git a/src/com/aocate/presto/service/IOnCompletionListenerCallback_0_8.aidl b/app/src/main/aidl/com/aocate/presto/service/IOnCompletionListenerCallback_0_8.aidl similarity index 100% rename from src/com/aocate/presto/service/IOnCompletionListenerCallback_0_8.aidl rename to app/src/main/aidl/com/aocate/presto/service/IOnCompletionListenerCallback_0_8.aidl diff --git a/src/com/aocate/presto/service/IOnErrorListenerCallback_0_8.aidl b/app/src/main/aidl/com/aocate/presto/service/IOnErrorListenerCallback_0_8.aidl similarity index 100% rename from src/com/aocate/presto/service/IOnErrorListenerCallback_0_8.aidl rename to app/src/main/aidl/com/aocate/presto/service/IOnErrorListenerCallback_0_8.aidl diff --git a/src/com/aocate/presto/service/IOnInfoListenerCallback_0_8.aidl b/app/src/main/aidl/com/aocate/presto/service/IOnInfoListenerCallback_0_8.aidl similarity index 100% rename from src/com/aocate/presto/service/IOnInfoListenerCallback_0_8.aidl rename to app/src/main/aidl/com/aocate/presto/service/IOnInfoListenerCallback_0_8.aidl diff --git a/src/com/aocate/presto/service/IOnPitchAdjustmentAvailableChangedListenerCallback_0_8.aidl b/app/src/main/aidl/com/aocate/presto/service/IOnPitchAdjustmentAvailableChangedListenerCallback_0_8.aidl similarity index 100% rename from src/com/aocate/presto/service/IOnPitchAdjustmentAvailableChangedListenerCallback_0_8.aidl rename to app/src/main/aidl/com/aocate/presto/service/IOnPitchAdjustmentAvailableChangedListenerCallback_0_8.aidl diff --git a/src/com/aocate/presto/service/IOnPreparedListenerCallback_0_8.aidl b/app/src/main/aidl/com/aocate/presto/service/IOnPreparedListenerCallback_0_8.aidl similarity index 100% rename from src/com/aocate/presto/service/IOnPreparedListenerCallback_0_8.aidl rename to app/src/main/aidl/com/aocate/presto/service/IOnPreparedListenerCallback_0_8.aidl diff --git a/src/com/aocate/presto/service/IOnSeekCompleteListenerCallback_0_8.aidl b/app/src/main/aidl/com/aocate/presto/service/IOnSeekCompleteListenerCallback_0_8.aidl similarity index 100% rename from src/com/aocate/presto/service/IOnSeekCompleteListenerCallback_0_8.aidl rename to app/src/main/aidl/com/aocate/presto/service/IOnSeekCompleteListenerCallback_0_8.aidl diff --git a/src/com/aocate/presto/service/IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8.aidl b/app/src/main/aidl/com/aocate/presto/service/IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8.aidl similarity index 100% rename from src/com/aocate/presto/service/IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8.aidl rename to app/src/main/aidl/com/aocate/presto/service/IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8.aidl diff --git a/src/com/aocate/presto/service/IPlayMedia_0_8.aidl b/app/src/main/aidl/com/aocate/presto/service/IPlayMedia_0_8.aidl similarity index 100% rename from src/com/aocate/presto/service/IPlayMedia_0_8.aidl rename to app/src/main/aidl/com/aocate/presto/service/IPlayMedia_0_8.aidl diff --git a/assets/LICENSE.html b/app/src/main/assets/LICENSE.html similarity index 100% rename from assets/LICENSE.html rename to app/src/main/assets/LICENSE.html diff --git a/assets/LICENSE_APACHE_COMMONS.txt b/app/src/main/assets/LICENSE_APACHE_COMMONS.txt similarity index 100% rename from assets/LICENSE_APACHE_COMMONS.txt rename to app/src/main/assets/LICENSE_APACHE_COMMONS.txt diff --git a/assets/LICENSE_BETTERPICKERS.txt b/app/src/main/assets/LICENSE_BETTERPICKERS.txt similarity index 100% rename from assets/LICENSE_BETTERPICKERS.txt rename to app/src/main/assets/LICENSE_BETTERPICKERS.txt diff --git a/assets/LICENSE_DSLV.txt b/app/src/main/assets/LICENSE_DSLV.txt similarity index 100% rename from assets/LICENSE_DSLV.txt rename to app/src/main/assets/LICENSE_DSLV.txt diff --git a/assets/LICENSE_FLATTR4J.txt b/app/src/main/assets/LICENSE_FLATTR4J.txt similarity index 100% rename from assets/LICENSE_FLATTR4J.txt rename to app/src/main/assets/LICENSE_FLATTR4J.txt diff --git a/assets/LICENSE_JSOUP.txt b/app/src/main/assets/LICENSE_JSOUP.txt similarity index 100% rename from assets/LICENSE_JSOUP.txt rename to app/src/main/assets/LICENSE_JSOUP.txt diff --git a/assets/LICENSE_NINE_OLD_ANDROIDS.txt b/app/src/main/assets/LICENSE_NINE_OLD_ANDROIDS.txt similarity index 100% rename from assets/LICENSE_NINE_OLD_ANDROIDS.txt rename to app/src/main/assets/LICENSE_NINE_OLD_ANDROIDS.txt diff --git a/assets/LICENSE_OKHTTP.txt b/app/src/main/assets/LICENSE_OKHTTP.txt similarity index 100% rename from assets/LICENSE_OKHTTP.txt rename to app/src/main/assets/LICENSE_OKHTTP.txt diff --git a/assets/LICENSE_OKIO.txt b/app/src/main/assets/LICENSE_OKIO.txt similarity index 100% rename from assets/LICENSE_OKIO.txt rename to app/src/main/assets/LICENSE_OKIO.txt diff --git a/assets/LICENSE_PICASSO.txt b/app/src/main/assets/LICENSE_PICASSO.txt similarity index 100% rename from assets/LICENSE_PICASSO.txt rename to app/src/main/assets/LICENSE_PICASSO.txt diff --git a/assets/LICENSE_PRESTO.txt b/app/src/main/assets/LICENSE_PRESTO.txt similarity index 100% rename from assets/LICENSE_PRESTO.txt rename to app/src/main/assets/LICENSE_PRESTO.txt diff --git a/assets/Roboto-Light.ttf b/app/src/main/assets/Roboto-Light.ttf similarity index 100% rename from assets/Roboto-Light.ttf rename to app/src/main/assets/Roboto-Light.ttf diff --git a/assets/Roboto.ttf b/app/src/main/assets/Roboto.ttf similarity index 100% rename from assets/Roboto.ttf rename to app/src/main/assets/Roboto.ttf diff --git a/assets/about.html b/app/src/main/assets/about.html similarity index 100% rename from assets/about.html rename to app/src/main/assets/about.html diff --git a/assets/logo.png b/app/src/main/assets/logo.png similarity index 100% rename from assets/logo.png rename to app/src/main/assets/logo.png diff --git a/assets/testfile.mp3 b/app/src/main/assets/testfile.mp3 similarity index 100% rename from assets/testfile.mp3 rename to app/src/main/assets/testfile.mp3 diff --git a/src/com/aocate/media/AndroidMediaPlayer.java b/app/src/main/java/com/aocate/media/AndroidMediaPlayer.java similarity index 100% rename from src/com/aocate/media/AndroidMediaPlayer.java rename to app/src/main/java/com/aocate/media/AndroidMediaPlayer.java diff --git a/src/com/aocate/media/MediaPlayer.java b/app/src/main/java/com/aocate/media/MediaPlayer.java similarity index 100% rename from src/com/aocate/media/MediaPlayer.java rename to app/src/main/java/com/aocate/media/MediaPlayer.java diff --git a/src/com/aocate/media/MediaPlayerImpl.java b/app/src/main/java/com/aocate/media/MediaPlayerImpl.java similarity index 100% rename from src/com/aocate/media/MediaPlayerImpl.java rename to app/src/main/java/com/aocate/media/MediaPlayerImpl.java diff --git a/src/com/aocate/media/ServiceBackedMediaPlayer.java b/app/src/main/java/com/aocate/media/ServiceBackedMediaPlayer.java similarity index 100% rename from src/com/aocate/media/ServiceBackedMediaPlayer.java rename to app/src/main/java/com/aocate/media/ServiceBackedMediaPlayer.java diff --git a/src/com/aocate/media/SpeedAdjustmentAlgorithm.java b/app/src/main/java/com/aocate/media/SpeedAdjustmentAlgorithm.java similarity index 100% rename from src/com/aocate/media/SpeedAdjustmentAlgorithm.java rename to app/src/main/java/com/aocate/media/SpeedAdjustmentAlgorithm.java diff --git a/src/de/danoeh/antennapod/AppConfig.java b/app/src/main/java/de/danoeh/antennapod/AppConfig.java similarity index 100% rename from src/de/danoeh/antennapod/AppConfig.java rename to app/src/main/java/de/danoeh/antennapod/AppConfig.java diff --git a/src/de/danoeh/antennapod/PodcastApp.java b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java similarity index 100% rename from src/de/danoeh/antennapod/PodcastApp.java rename to app/src/main/java/de/danoeh/antennapod/PodcastApp.java diff --git a/src/de/danoeh/antennapod/activity/AboutActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/AboutActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java diff --git a/src/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/AudioplayerActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java diff --git a/src/de/danoeh/antennapod/activity/DefaultOnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/DefaultOnlineFeedViewActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/DefaultOnlineFeedViewActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/DefaultOnlineFeedViewActivity.java diff --git a/src/de/danoeh/antennapod/activity/DirectoryChooserActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/DirectoryChooserActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java diff --git a/src/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java diff --git a/src/de/danoeh/antennapod/activity/FeedInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/FeedInfoActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java diff --git a/src/de/danoeh/antennapod/activity/FlattrAuthActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/FlattrAuthActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/FlattrAuthActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/FlattrAuthActivity.java diff --git a/src/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/MainActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java diff --git a/src/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/MediaplayerActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java diff --git a/src/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java diff --git a/src/de/danoeh/antennapod/activity/OpmlFeedChooserActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlFeedChooserActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/OpmlFeedChooserActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/OpmlFeedChooserActivity.java diff --git a/src/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java diff --git a/src/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java diff --git a/src/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java diff --git a/src/de/danoeh/antennapod/activity/OpmlImportHolder.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportHolder.java similarity index 100% rename from src/de/danoeh/antennapod/activity/OpmlImportHolder.java rename to app/src/main/java/de/danoeh/antennapod/activity/OpmlImportHolder.java diff --git a/src/de/danoeh/antennapod/activity/PreferenceActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/PreferenceActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java diff --git a/src/de/danoeh/antennapod/activity/StorageErrorActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/StorageErrorActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java diff --git a/src/de/danoeh/antennapod/activity/VideoplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/VideoplayerActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java diff --git a/src/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java similarity index 100% rename from src/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java rename to app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java diff --git a/src/de/danoeh/antennapod/adapter/ActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonCallback.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/ActionButtonCallback.java rename to app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonCallback.java diff --git a/src/de/danoeh/antennapod/adapter/ActionButtonUtils.java b/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonUtils.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/ActionButtonUtils.java rename to app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonUtils.java diff --git a/src/de/danoeh/antennapod/adapter/AdapterUtils.java b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/AdapterUtils.java rename to app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java diff --git a/src/de/danoeh/antennapod/adapter/ChapterListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/ChapterListAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/ChapterListAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/ChapterListAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java rename to app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java diff --git a/src/de/danoeh/antennapod/adapter/DownloadLogAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/DownloadLogAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/DownloadedEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadedEpisodesListAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/DownloadedEpisodesListAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/DownloadedEpisodesListAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/DownloadlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadlistAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/DownloadlistAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/DownloadlistAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/NavListAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/QueueListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/QueueListAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/SearchlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/SearchlistAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/SearchlistAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/SearchlistAdapter.java diff --git a/src/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java rename to app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java diff --git a/src/de/danoeh/antennapod/asynctask/DownloadObserver.java b/app/src/main/java/de/danoeh/antennapod/asynctask/DownloadObserver.java similarity index 100% rename from src/de/danoeh/antennapod/asynctask/DownloadObserver.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/DownloadObserver.java diff --git a/src/de/danoeh/antennapod/asynctask/FeedRemover.java b/app/src/main/java/de/danoeh/antennapod/asynctask/FeedRemover.java similarity index 100% rename from src/de/danoeh/antennapod/asynctask/FeedRemover.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/FeedRemover.java diff --git a/src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java b/app/src/main/java/de/danoeh/antennapod/asynctask/FlattrClickWorker.java similarity index 100% rename from src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/FlattrClickWorker.java diff --git a/src/de/danoeh/antennapod/asynctask/FlattrStatusFetcher.java b/app/src/main/java/de/danoeh/antennapod/asynctask/FlattrStatusFetcher.java similarity index 100% rename from src/de/danoeh/antennapod/asynctask/FlattrStatusFetcher.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/FlattrStatusFetcher.java diff --git a/src/de/danoeh/antennapod/asynctask/FlattrTokenFetcher.java b/app/src/main/java/de/danoeh/antennapod/asynctask/FlattrTokenFetcher.java similarity index 100% rename from src/de/danoeh/antennapod/asynctask/FlattrTokenFetcher.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/FlattrTokenFetcher.java diff --git a/src/de/danoeh/antennapod/asynctask/OpmlExportWorker.java b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java similarity index 100% rename from src/de/danoeh/antennapod/asynctask/OpmlExportWorker.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java diff --git a/src/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java similarity index 100% rename from src/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java diff --git a/src/de/danoeh/antennapod/asynctask/OpmlImportWorker.java b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlImportWorker.java similarity index 100% rename from src/de/danoeh/antennapod/asynctask/OpmlImportWorker.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/OpmlImportWorker.java diff --git a/src/de/danoeh/antennapod/asynctask/PicassoImageResource.java b/app/src/main/java/de/danoeh/antennapod/asynctask/PicassoImageResource.java similarity index 100% rename from src/de/danoeh/antennapod/asynctask/PicassoImageResource.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/PicassoImageResource.java diff --git a/src/de/danoeh/antennapod/asynctask/PicassoProvider.java b/app/src/main/java/de/danoeh/antennapod/asynctask/PicassoProvider.java similarity index 100% rename from src/de/danoeh/antennapod/asynctask/PicassoProvider.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/PicassoProvider.java diff --git a/src/de/danoeh/antennapod/backup/OpmlBackupAgent.java b/app/src/main/java/de/danoeh/antennapod/backup/OpmlBackupAgent.java similarity index 100% rename from src/de/danoeh/antennapod/backup/OpmlBackupAgent.java rename to app/src/main/java/de/danoeh/antennapod/backup/OpmlBackupAgent.java diff --git a/src/de/danoeh/antennapod/dialog/AuthenticationDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java similarity index 100% rename from src/de/danoeh/antennapod/dialog/AuthenticationDialog.java rename to app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java diff --git a/src/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java similarity index 100% rename from src/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java rename to app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java diff --git a/src/de/danoeh/antennapod/dialog/ConfirmationDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ConfirmationDialog.java similarity index 100% rename from src/de/danoeh/antennapod/dialog/ConfirmationDialog.java rename to app/src/main/java/de/danoeh/antennapod/dialog/ConfirmationDialog.java diff --git a/src/de/danoeh/antennapod/dialog/DownloadRequestErrorDialogCreator.java b/app/src/main/java/de/danoeh/antennapod/dialog/DownloadRequestErrorDialogCreator.java similarity index 100% rename from src/de/danoeh/antennapod/dialog/DownloadRequestErrorDialogCreator.java rename to app/src/main/java/de/danoeh/antennapod/dialog/DownloadRequestErrorDialogCreator.java diff --git a/src/de/danoeh/antennapod/dialog/FeedItemDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemDialog.java similarity index 100% rename from src/de/danoeh/antennapod/dialog/FeedItemDialog.java rename to app/src/main/java/de/danoeh/antennapod/dialog/FeedItemDialog.java diff --git a/src/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java similarity index 100% rename from src/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java rename to app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java diff --git a/src/de/danoeh/antennapod/dialog/TimeDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/TimeDialog.java similarity index 100% rename from src/de/danoeh/antennapod/dialog/TimeDialog.java rename to app/src/main/java/de/danoeh/antennapod/dialog/TimeDialog.java diff --git a/src/de/danoeh/antennapod/dialog/VariableSpeedDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java similarity index 100% rename from src/de/danoeh/antennapod/dialog/VariableSpeedDialog.java rename to app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java diff --git a/src/de/danoeh/antennapod/feed/Chapter.java b/app/src/main/java/de/danoeh/antennapod/feed/Chapter.java similarity index 100% rename from src/de/danoeh/antennapod/feed/Chapter.java rename to app/src/main/java/de/danoeh/antennapod/feed/Chapter.java diff --git a/src/de/danoeh/antennapod/feed/EventDistributor.java b/app/src/main/java/de/danoeh/antennapod/feed/EventDistributor.java similarity index 100% rename from src/de/danoeh/antennapod/feed/EventDistributor.java rename to app/src/main/java/de/danoeh/antennapod/feed/EventDistributor.java diff --git a/src/de/danoeh/antennapod/feed/Feed.java b/app/src/main/java/de/danoeh/antennapod/feed/Feed.java similarity index 100% rename from src/de/danoeh/antennapod/feed/Feed.java rename to app/src/main/java/de/danoeh/antennapod/feed/Feed.java diff --git a/src/de/danoeh/antennapod/feed/FeedComponent.java b/app/src/main/java/de/danoeh/antennapod/feed/FeedComponent.java similarity index 100% rename from src/de/danoeh/antennapod/feed/FeedComponent.java rename to app/src/main/java/de/danoeh/antennapod/feed/FeedComponent.java diff --git a/src/de/danoeh/antennapod/feed/FeedFile.java b/app/src/main/java/de/danoeh/antennapod/feed/FeedFile.java similarity index 100% rename from src/de/danoeh/antennapod/feed/FeedFile.java rename to app/src/main/java/de/danoeh/antennapod/feed/FeedFile.java diff --git a/src/de/danoeh/antennapod/feed/FeedImage.java b/app/src/main/java/de/danoeh/antennapod/feed/FeedImage.java similarity index 100% rename from src/de/danoeh/antennapod/feed/FeedImage.java rename to app/src/main/java/de/danoeh/antennapod/feed/FeedImage.java diff --git a/src/de/danoeh/antennapod/feed/FeedItem.java b/app/src/main/java/de/danoeh/antennapod/feed/FeedItem.java similarity index 100% rename from src/de/danoeh/antennapod/feed/FeedItem.java rename to app/src/main/java/de/danoeh/antennapod/feed/FeedItem.java diff --git a/src/de/danoeh/antennapod/feed/FeedMedia.java b/app/src/main/java/de/danoeh/antennapod/feed/FeedMedia.java similarity index 100% rename from src/de/danoeh/antennapod/feed/FeedMedia.java rename to app/src/main/java/de/danoeh/antennapod/feed/FeedMedia.java diff --git a/src/de/danoeh/antennapod/feed/FeedPreferences.java b/app/src/main/java/de/danoeh/antennapod/feed/FeedPreferences.java similarity index 100% rename from src/de/danoeh/antennapod/feed/FeedPreferences.java rename to app/src/main/java/de/danoeh/antennapod/feed/FeedPreferences.java diff --git a/src/de/danoeh/antennapod/feed/ID3Chapter.java b/app/src/main/java/de/danoeh/antennapod/feed/ID3Chapter.java similarity index 100% rename from src/de/danoeh/antennapod/feed/ID3Chapter.java rename to app/src/main/java/de/danoeh/antennapod/feed/ID3Chapter.java diff --git a/src/de/danoeh/antennapod/feed/MediaType.java b/app/src/main/java/de/danoeh/antennapod/feed/MediaType.java similarity index 100% rename from src/de/danoeh/antennapod/feed/MediaType.java rename to app/src/main/java/de/danoeh/antennapod/feed/MediaType.java diff --git a/src/de/danoeh/antennapod/feed/SearchResult.java b/app/src/main/java/de/danoeh/antennapod/feed/SearchResult.java similarity index 100% rename from src/de/danoeh/antennapod/feed/SearchResult.java rename to app/src/main/java/de/danoeh/antennapod/feed/SearchResult.java diff --git a/src/de/danoeh/antennapod/feed/SimpleChapter.java b/app/src/main/java/de/danoeh/antennapod/feed/SimpleChapter.java similarity index 100% rename from src/de/danoeh/antennapod/feed/SimpleChapter.java rename to app/src/main/java/de/danoeh/antennapod/feed/SimpleChapter.java diff --git a/src/de/danoeh/antennapod/feed/VorbisCommentChapter.java b/app/src/main/java/de/danoeh/antennapod/feed/VorbisCommentChapter.java similarity index 100% rename from src/de/danoeh/antennapod/feed/VorbisCommentChapter.java rename to app/src/main/java/de/danoeh/antennapod/feed/VorbisCommentChapter.java diff --git a/src/de/danoeh/antennapod/fragment/AddFeedFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/AddFeedFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java diff --git a/src/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java diff --git a/src/de/danoeh/antennapod/fragment/CoverFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/CoverFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java diff --git a/src/de/danoeh/antennapod/fragment/DownloadLogFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/DownloadLogFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java diff --git a/src/de/danoeh/antennapod/fragment/DownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/DownloadsFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java diff --git a/src/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java diff --git a/src/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java diff --git a/src/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/ItemlistFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java diff --git a/src/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/NewEpisodesFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java diff --git a/src/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java diff --git a/src/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/QueueFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java diff --git a/src/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java diff --git a/src/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/SearchFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java diff --git a/src/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java diff --git a/src/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java diff --git a/src/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java diff --git a/src/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java diff --git a/src/de/danoeh/antennapod/fragment/gpodnet/SuggestionListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SuggestionListFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/gpodnet/SuggestionListFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SuggestionListFragment.java diff --git a/src/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java diff --git a/src/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java similarity index 100% rename from src/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java rename to app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java diff --git a/src/de/danoeh/antennapod/gpoddernet/GpodnetService.java b/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetService.java similarity index 100% rename from src/de/danoeh/antennapod/gpoddernet/GpodnetService.java rename to app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetService.java diff --git a/src/de/danoeh/antennapod/gpoddernet/GpodnetServiceAuthenticationException.java b/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceAuthenticationException.java similarity index 100% rename from src/de/danoeh/antennapod/gpoddernet/GpodnetServiceAuthenticationException.java rename to app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceAuthenticationException.java diff --git a/src/de/danoeh/antennapod/gpoddernet/GpodnetServiceBadStatusCodeException.java b/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceBadStatusCodeException.java similarity index 100% rename from src/de/danoeh/antennapod/gpoddernet/GpodnetServiceBadStatusCodeException.java rename to app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceBadStatusCodeException.java diff --git a/src/de/danoeh/antennapod/gpoddernet/GpodnetServiceException.java b/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceException.java similarity index 100% rename from src/de/danoeh/antennapod/gpoddernet/GpodnetServiceException.java rename to app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceException.java diff --git a/src/de/danoeh/antennapod/gpoddernet/model/GpodnetDevice.java b/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetDevice.java similarity index 100% rename from src/de/danoeh/antennapod/gpoddernet/model/GpodnetDevice.java rename to app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetDevice.java diff --git a/src/de/danoeh/antennapod/gpoddernet/model/GpodnetPodcast.java b/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetPodcast.java similarity index 100% rename from src/de/danoeh/antennapod/gpoddernet/model/GpodnetPodcast.java rename to app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetPodcast.java diff --git a/src/de/danoeh/antennapod/gpoddernet/model/GpodnetSubscriptionChange.java b/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetSubscriptionChange.java similarity index 100% rename from src/de/danoeh/antennapod/gpoddernet/model/GpodnetSubscriptionChange.java rename to app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetSubscriptionChange.java diff --git a/src/de/danoeh/antennapod/gpoddernet/model/GpodnetTag.java b/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetTag.java similarity index 100% rename from src/de/danoeh/antennapod/gpoddernet/model/GpodnetTag.java rename to app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetTag.java diff --git a/src/de/danoeh/antennapod/gpoddernet/model/GpodnetUploadChangesResponse.java b/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetUploadChangesResponse.java similarity index 100% rename from src/de/danoeh/antennapod/gpoddernet/model/GpodnetUploadChangesResponse.java rename to app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetUploadChangesResponse.java diff --git a/src/de/danoeh/antennapod/opml/OpmlElement.java b/app/src/main/java/de/danoeh/antennapod/opml/OpmlElement.java similarity index 100% rename from src/de/danoeh/antennapod/opml/OpmlElement.java rename to app/src/main/java/de/danoeh/antennapod/opml/OpmlElement.java diff --git a/src/de/danoeh/antennapod/opml/OpmlReader.java b/app/src/main/java/de/danoeh/antennapod/opml/OpmlReader.java similarity index 100% rename from src/de/danoeh/antennapod/opml/OpmlReader.java rename to app/src/main/java/de/danoeh/antennapod/opml/OpmlReader.java diff --git a/src/de/danoeh/antennapod/opml/OpmlSymbols.java b/app/src/main/java/de/danoeh/antennapod/opml/OpmlSymbols.java similarity index 100% rename from src/de/danoeh/antennapod/opml/OpmlSymbols.java rename to app/src/main/java/de/danoeh/antennapod/opml/OpmlSymbols.java diff --git a/src/de/danoeh/antennapod/opml/OpmlWriter.java b/app/src/main/java/de/danoeh/antennapod/opml/OpmlWriter.java similarity index 100% rename from src/de/danoeh/antennapod/opml/OpmlWriter.java rename to app/src/main/java/de/danoeh/antennapod/opml/OpmlWriter.java diff --git a/src/de/danoeh/antennapod/preferences/GpodnetPreferences.java b/app/src/main/java/de/danoeh/antennapod/preferences/GpodnetPreferences.java similarity index 100% rename from src/de/danoeh/antennapod/preferences/GpodnetPreferences.java rename to app/src/main/java/de/danoeh/antennapod/preferences/GpodnetPreferences.java diff --git a/src/de/danoeh/antennapod/preferences/PlaybackPreferences.java b/app/src/main/java/de/danoeh/antennapod/preferences/PlaybackPreferences.java similarity index 100% rename from src/de/danoeh/antennapod/preferences/PlaybackPreferences.java rename to app/src/main/java/de/danoeh/antennapod/preferences/PlaybackPreferences.java diff --git a/src/de/danoeh/antennapod/preferences/UserPreferences.java b/app/src/main/java/de/danoeh/antennapod/preferences/UserPreferences.java similarity index 100% rename from src/de/danoeh/antennapod/preferences/UserPreferences.java rename to app/src/main/java/de/danoeh/antennapod/preferences/UserPreferences.java diff --git a/src/de/danoeh/antennapod/receiver/AlarmUpdateReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/AlarmUpdateReceiver.java similarity index 100% rename from src/de/danoeh/antennapod/receiver/AlarmUpdateReceiver.java rename to app/src/main/java/de/danoeh/antennapod/receiver/AlarmUpdateReceiver.java diff --git a/src/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java similarity index 100% rename from src/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java rename to app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java diff --git a/src/de/danoeh/antennapod/receiver/FeedUpdateReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/FeedUpdateReceiver.java similarity index 100% rename from src/de/danoeh/antennapod/receiver/FeedUpdateReceiver.java rename to app/src/main/java/de/danoeh/antennapod/receiver/FeedUpdateReceiver.java diff --git a/src/de/danoeh/antennapod/receiver/MediaButtonReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/MediaButtonReceiver.java similarity index 100% rename from src/de/danoeh/antennapod/receiver/MediaButtonReceiver.java rename to app/src/main/java/de/danoeh/antennapod/receiver/MediaButtonReceiver.java diff --git a/src/de/danoeh/antennapod/receiver/PlayerWidget.java b/app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java similarity index 100% rename from src/de/danoeh/antennapod/receiver/PlayerWidget.java rename to app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java diff --git a/src/de/danoeh/antennapod/receiver/SPAReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java similarity index 100% rename from src/de/danoeh/antennapod/receiver/SPAReceiver.java rename to app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java diff --git a/src/de/danoeh/antennapod/service/GpodnetSyncService.java b/app/src/main/java/de/danoeh/antennapod/service/GpodnetSyncService.java similarity index 100% rename from src/de/danoeh/antennapod/service/GpodnetSyncService.java rename to app/src/main/java/de/danoeh/antennapod/service/GpodnetSyncService.java diff --git a/src/de/danoeh/antennapod/service/download/APRedirectHandler.java b/app/src/main/java/de/danoeh/antennapod/service/download/APRedirectHandler.java similarity index 100% rename from src/de/danoeh/antennapod/service/download/APRedirectHandler.java rename to app/src/main/java/de/danoeh/antennapod/service/download/APRedirectHandler.java diff --git a/src/de/danoeh/antennapod/service/download/AntennapodHttpClient.java b/app/src/main/java/de/danoeh/antennapod/service/download/AntennapodHttpClient.java similarity index 100% rename from src/de/danoeh/antennapod/service/download/AntennapodHttpClient.java rename to app/src/main/java/de/danoeh/antennapod/service/download/AntennapodHttpClient.java diff --git a/src/de/danoeh/antennapod/service/download/DownloadRequest.java b/app/src/main/java/de/danoeh/antennapod/service/download/DownloadRequest.java similarity index 100% rename from src/de/danoeh/antennapod/service/download/DownloadRequest.java rename to app/src/main/java/de/danoeh/antennapod/service/download/DownloadRequest.java diff --git a/src/de/danoeh/antennapod/service/download/DownloadService.java b/app/src/main/java/de/danoeh/antennapod/service/download/DownloadService.java similarity index 100% rename from src/de/danoeh/antennapod/service/download/DownloadService.java rename to app/src/main/java/de/danoeh/antennapod/service/download/DownloadService.java diff --git a/src/de/danoeh/antennapod/service/download/DownloadStatus.java b/app/src/main/java/de/danoeh/antennapod/service/download/DownloadStatus.java similarity index 100% rename from src/de/danoeh/antennapod/service/download/DownloadStatus.java rename to app/src/main/java/de/danoeh/antennapod/service/download/DownloadStatus.java diff --git a/src/de/danoeh/antennapod/service/download/Downloader.java b/app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java similarity index 100% rename from src/de/danoeh/antennapod/service/download/Downloader.java rename to app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java diff --git a/src/de/danoeh/antennapod/service/download/DownloaderCallback.java b/app/src/main/java/de/danoeh/antennapod/service/download/DownloaderCallback.java similarity index 100% rename from src/de/danoeh/antennapod/service/download/DownloaderCallback.java rename to app/src/main/java/de/danoeh/antennapod/service/download/DownloaderCallback.java diff --git a/src/de/danoeh/antennapod/service/download/HttpDownloader.java b/app/src/main/java/de/danoeh/antennapod/service/download/HttpDownloader.java similarity index 100% rename from src/de/danoeh/antennapod/service/download/HttpDownloader.java rename to app/src/main/java/de/danoeh/antennapod/service/download/HttpDownloader.java diff --git a/src/de/danoeh/antennapod/service/playback/PlaybackService.java b/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackService.java similarity index 100% rename from src/de/danoeh/antennapod/service/playback/PlaybackService.java rename to app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackService.java diff --git a/src/de/danoeh/antennapod/service/playback/PlaybackServiceMediaPlayer.java b/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackServiceMediaPlayer.java similarity index 100% rename from src/de/danoeh/antennapod/service/playback/PlaybackServiceMediaPlayer.java rename to app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackServiceMediaPlayer.java diff --git a/src/de/danoeh/antennapod/service/playback/PlaybackServiceTaskManager.java b/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackServiceTaskManager.java similarity index 100% rename from src/de/danoeh/antennapod/service/playback/PlaybackServiceTaskManager.java rename to app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackServiceTaskManager.java diff --git a/src/de/danoeh/antennapod/service/playback/PlayerStatus.java b/app/src/main/java/de/danoeh/antennapod/service/playback/PlayerStatus.java similarity index 100% rename from src/de/danoeh/antennapod/service/playback/PlayerStatus.java rename to app/src/main/java/de/danoeh/antennapod/service/playback/PlayerStatus.java diff --git a/src/de/danoeh/antennapod/service/playback/PlayerWidgetService.java b/app/src/main/java/de/danoeh/antennapod/service/playback/PlayerWidgetService.java similarity index 100% rename from src/de/danoeh/antennapod/service/playback/PlayerWidgetService.java rename to app/src/main/java/de/danoeh/antennapod/service/playback/PlayerWidgetService.java diff --git a/src/de/danoeh/antennapod/spa/SPAUtil.java b/app/src/main/java/de/danoeh/antennapod/spa/SPAUtil.java similarity index 100% rename from src/de/danoeh/antennapod/spa/SPAUtil.java rename to app/src/main/java/de/danoeh/antennapod/spa/SPAUtil.java diff --git a/src/de/danoeh/antennapod/storage/DBReader.java b/app/src/main/java/de/danoeh/antennapod/storage/DBReader.java similarity index 100% rename from src/de/danoeh/antennapod/storage/DBReader.java rename to app/src/main/java/de/danoeh/antennapod/storage/DBReader.java diff --git a/src/de/danoeh/antennapod/storage/DBTasks.java b/app/src/main/java/de/danoeh/antennapod/storage/DBTasks.java similarity index 100% rename from src/de/danoeh/antennapod/storage/DBTasks.java rename to app/src/main/java/de/danoeh/antennapod/storage/DBTasks.java diff --git a/src/de/danoeh/antennapod/storage/DBWriter.java b/app/src/main/java/de/danoeh/antennapod/storage/DBWriter.java similarity index 100% rename from src/de/danoeh/antennapod/storage/DBWriter.java rename to app/src/main/java/de/danoeh/antennapod/storage/DBWriter.java diff --git a/src/de/danoeh/antennapod/storage/DownloadRequestException.java b/app/src/main/java/de/danoeh/antennapod/storage/DownloadRequestException.java similarity index 100% rename from src/de/danoeh/antennapod/storage/DownloadRequestException.java rename to app/src/main/java/de/danoeh/antennapod/storage/DownloadRequestException.java diff --git a/src/de/danoeh/antennapod/storage/DownloadRequester.java b/app/src/main/java/de/danoeh/antennapod/storage/DownloadRequester.java similarity index 100% rename from src/de/danoeh/antennapod/storage/DownloadRequester.java rename to app/src/main/java/de/danoeh/antennapod/storage/DownloadRequester.java diff --git a/src/de/danoeh/antennapod/storage/FeedItemStatistics.java b/app/src/main/java/de/danoeh/antennapod/storage/FeedItemStatistics.java similarity index 100% rename from src/de/danoeh/antennapod/storage/FeedItemStatistics.java rename to app/src/main/java/de/danoeh/antennapod/storage/FeedItemStatistics.java diff --git a/src/de/danoeh/antennapod/storage/FeedSearcher.java b/app/src/main/java/de/danoeh/antennapod/storage/FeedSearcher.java similarity index 100% rename from src/de/danoeh/antennapod/storage/FeedSearcher.java rename to app/src/main/java/de/danoeh/antennapod/storage/FeedSearcher.java diff --git a/src/de/danoeh/antennapod/storage/PodDBAdapter.java b/app/src/main/java/de/danoeh/antennapod/storage/PodDBAdapter.java similarity index 100% rename from src/de/danoeh/antennapod/storage/PodDBAdapter.java rename to app/src/main/java/de/danoeh/antennapod/storage/PodDBAdapter.java diff --git a/src/de/danoeh/antennapod/syndication/handler/FeedHandler.java b/app/src/main/java/de/danoeh/antennapod/syndication/handler/FeedHandler.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/handler/FeedHandler.java rename to app/src/main/java/de/danoeh/antennapod/syndication/handler/FeedHandler.java diff --git a/src/de/danoeh/antennapod/syndication/handler/FeedHandlerResult.java b/app/src/main/java/de/danoeh/antennapod/syndication/handler/FeedHandlerResult.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/handler/FeedHandlerResult.java rename to app/src/main/java/de/danoeh/antennapod/syndication/handler/FeedHandlerResult.java diff --git a/src/de/danoeh/antennapod/syndication/handler/HandlerState.java b/app/src/main/java/de/danoeh/antennapod/syndication/handler/HandlerState.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/handler/HandlerState.java rename to app/src/main/java/de/danoeh/antennapod/syndication/handler/HandlerState.java diff --git a/src/de/danoeh/antennapod/syndication/handler/SyndHandler.java b/app/src/main/java/de/danoeh/antennapod/syndication/handler/SyndHandler.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/handler/SyndHandler.java rename to app/src/main/java/de/danoeh/antennapod/syndication/handler/SyndHandler.java diff --git a/src/de/danoeh/antennapod/syndication/handler/TypeGetter.java b/app/src/main/java/de/danoeh/antennapod/syndication/handler/TypeGetter.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/handler/TypeGetter.java rename to app/src/main/java/de/danoeh/antennapod/syndication/handler/TypeGetter.java diff --git a/src/de/danoeh/antennapod/syndication/handler/UnsupportedFeedtypeException.java b/app/src/main/java/de/danoeh/antennapod/syndication/handler/UnsupportedFeedtypeException.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/handler/UnsupportedFeedtypeException.java rename to app/src/main/java/de/danoeh/antennapod/syndication/handler/UnsupportedFeedtypeException.java diff --git a/src/de/danoeh/antennapod/syndication/namespace/NSContent.java b/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSContent.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/namespace/NSContent.java rename to app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSContent.java diff --git a/src/de/danoeh/antennapod/syndication/namespace/NSITunes.java b/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSITunes.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/namespace/NSITunes.java rename to app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSITunes.java diff --git a/src/de/danoeh/antennapod/syndication/namespace/NSMedia.java b/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSMedia.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/namespace/NSMedia.java rename to app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSMedia.java diff --git a/src/de/danoeh/antennapod/syndication/namespace/NSRSS20.java b/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSRSS20.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/namespace/NSRSS20.java rename to app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSRSS20.java diff --git a/src/de/danoeh/antennapod/syndication/namespace/NSSimpleChapters.java b/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSSimpleChapters.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/namespace/NSSimpleChapters.java rename to app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSSimpleChapters.java diff --git a/src/de/danoeh/antennapod/syndication/namespace/Namespace.java b/app/src/main/java/de/danoeh/antennapod/syndication/namespace/Namespace.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/namespace/Namespace.java rename to app/src/main/java/de/danoeh/antennapod/syndication/namespace/Namespace.java diff --git a/src/de/danoeh/antennapod/syndication/namespace/SyndElement.java b/app/src/main/java/de/danoeh/antennapod/syndication/namespace/SyndElement.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/namespace/SyndElement.java rename to app/src/main/java/de/danoeh/antennapod/syndication/namespace/SyndElement.java diff --git a/src/de/danoeh/antennapod/syndication/namespace/atom/AtomText.java b/app/src/main/java/de/danoeh/antennapod/syndication/namespace/atom/AtomText.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/namespace/atom/AtomText.java rename to app/src/main/java/de/danoeh/antennapod/syndication/namespace/atom/AtomText.java diff --git a/src/de/danoeh/antennapod/syndication/namespace/atom/NSAtom.java b/app/src/main/java/de/danoeh/antennapod/syndication/namespace/atom/NSAtom.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/namespace/atom/NSAtom.java rename to app/src/main/java/de/danoeh/antennapod/syndication/namespace/atom/NSAtom.java diff --git a/src/de/danoeh/antennapod/syndication/util/SyndDateUtils.java b/app/src/main/java/de/danoeh/antennapod/syndication/util/SyndDateUtils.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/util/SyndDateUtils.java rename to app/src/main/java/de/danoeh/antennapod/syndication/util/SyndDateUtils.java diff --git a/src/de/danoeh/antennapod/syndication/util/SyndTypeUtils.java b/app/src/main/java/de/danoeh/antennapod/syndication/util/SyndTypeUtils.java similarity index 100% rename from src/de/danoeh/antennapod/syndication/util/SyndTypeUtils.java rename to app/src/main/java/de/danoeh/antennapod/syndication/util/SyndTypeUtils.java diff --git a/src/de/danoeh/antennapod/util/ChapterUtils.java b/app/src/main/java/de/danoeh/antennapod/util/ChapterUtils.java similarity index 100% rename from src/de/danoeh/antennapod/util/ChapterUtils.java rename to app/src/main/java/de/danoeh/antennapod/util/ChapterUtils.java diff --git a/src/de/danoeh/antennapod/util/Converter.java b/app/src/main/java/de/danoeh/antennapod/util/Converter.java similarity index 100% rename from src/de/danoeh/antennapod/util/Converter.java rename to app/src/main/java/de/danoeh/antennapod/util/Converter.java diff --git a/src/de/danoeh/antennapod/util/DownloadError.java b/app/src/main/java/de/danoeh/antennapod/util/DownloadError.java similarity index 100% rename from src/de/danoeh/antennapod/util/DownloadError.java rename to app/src/main/java/de/danoeh/antennapod/util/DownloadError.java diff --git a/src/de/danoeh/antennapod/util/DuckType.java b/app/src/main/java/de/danoeh/antennapod/util/DuckType.java similarity index 100% rename from src/de/danoeh/antennapod/util/DuckType.java rename to app/src/main/java/de/danoeh/antennapod/util/DuckType.java diff --git a/src/de/danoeh/antennapod/util/EpisodeFilter.java b/app/src/main/java/de/danoeh/antennapod/util/EpisodeFilter.java similarity index 100% rename from src/de/danoeh/antennapod/util/EpisodeFilter.java rename to app/src/main/java/de/danoeh/antennapod/util/EpisodeFilter.java diff --git a/src/de/danoeh/antennapod/util/FeedtitleComparator.java b/app/src/main/java/de/danoeh/antennapod/util/FeedtitleComparator.java similarity index 100% rename from src/de/danoeh/antennapod/util/FeedtitleComparator.java rename to app/src/main/java/de/danoeh/antennapod/util/FeedtitleComparator.java diff --git a/src/de/danoeh/antennapod/util/FileNameGenerator.java b/app/src/main/java/de/danoeh/antennapod/util/FileNameGenerator.java similarity index 100% rename from src/de/danoeh/antennapod/util/FileNameGenerator.java rename to app/src/main/java/de/danoeh/antennapod/util/FileNameGenerator.java diff --git a/src/de/danoeh/antennapod/util/InvalidFeedException.java b/app/src/main/java/de/danoeh/antennapod/util/InvalidFeedException.java similarity index 100% rename from src/de/danoeh/antennapod/util/InvalidFeedException.java rename to app/src/main/java/de/danoeh/antennapod/util/InvalidFeedException.java diff --git a/src/de/danoeh/antennapod/util/LangUtils.java b/app/src/main/java/de/danoeh/antennapod/util/LangUtils.java similarity index 100% rename from src/de/danoeh/antennapod/util/LangUtils.java rename to app/src/main/java/de/danoeh/antennapod/util/LangUtils.java diff --git a/src/de/danoeh/antennapod/util/NetworkUtils.java b/app/src/main/java/de/danoeh/antennapod/util/NetworkUtils.java similarity index 100% rename from src/de/danoeh/antennapod/util/NetworkUtils.java rename to app/src/main/java/de/danoeh/antennapod/util/NetworkUtils.java diff --git a/src/de/danoeh/antennapod/util/QueueAccess.java b/app/src/main/java/de/danoeh/antennapod/util/QueueAccess.java similarity index 100% rename from src/de/danoeh/antennapod/util/QueueAccess.java rename to app/src/main/java/de/danoeh/antennapod/util/QueueAccess.java diff --git a/src/de/danoeh/antennapod/util/ShareUtils.java b/app/src/main/java/de/danoeh/antennapod/util/ShareUtils.java similarity index 100% rename from src/de/danoeh/antennapod/util/ShareUtils.java rename to app/src/main/java/de/danoeh/antennapod/util/ShareUtils.java diff --git a/src/de/danoeh/antennapod/util/ShownotesProvider.java b/app/src/main/java/de/danoeh/antennapod/util/ShownotesProvider.java similarity index 100% rename from src/de/danoeh/antennapod/util/ShownotesProvider.java rename to app/src/main/java/de/danoeh/antennapod/util/ShownotesProvider.java diff --git a/src/de/danoeh/antennapod/util/StorageUtils.java b/app/src/main/java/de/danoeh/antennapod/util/StorageUtils.java similarity index 100% rename from src/de/danoeh/antennapod/util/StorageUtils.java rename to app/src/main/java/de/danoeh/antennapod/util/StorageUtils.java diff --git a/src/de/danoeh/antennapod/util/ThemeUtils.java b/app/src/main/java/de/danoeh/antennapod/util/ThemeUtils.java similarity index 100% rename from src/de/danoeh/antennapod/util/ThemeUtils.java rename to app/src/main/java/de/danoeh/antennapod/util/ThemeUtils.java diff --git a/src/de/danoeh/antennapod/util/URIUtil.java b/app/src/main/java/de/danoeh/antennapod/util/URIUtil.java similarity index 100% rename from src/de/danoeh/antennapod/util/URIUtil.java rename to app/src/main/java/de/danoeh/antennapod/util/URIUtil.java diff --git a/src/de/danoeh/antennapod/util/URLChecker.java b/app/src/main/java/de/danoeh/antennapod/util/URLChecker.java similarity index 100% rename from src/de/danoeh/antennapod/util/URLChecker.java rename to app/src/main/java/de/danoeh/antennapod/util/URLChecker.java diff --git a/src/de/danoeh/antennapod/util/UndoBarController.java b/app/src/main/java/de/danoeh/antennapod/util/UndoBarController.java similarity index 100% rename from src/de/danoeh/antennapod/util/UndoBarController.java rename to app/src/main/java/de/danoeh/antennapod/util/UndoBarController.java diff --git a/src/de/danoeh/antennapod/util/comparator/ChapterStartTimeComparator.java b/app/src/main/java/de/danoeh/antennapod/util/comparator/ChapterStartTimeComparator.java similarity index 100% rename from src/de/danoeh/antennapod/util/comparator/ChapterStartTimeComparator.java rename to app/src/main/java/de/danoeh/antennapod/util/comparator/ChapterStartTimeComparator.java diff --git a/src/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java b/app/src/main/java/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java similarity index 100% rename from src/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java rename to app/src/main/java/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java diff --git a/src/de/danoeh/antennapod/util/comparator/FeedItemPubdateComparator.java b/app/src/main/java/de/danoeh/antennapod/util/comparator/FeedItemPubdateComparator.java similarity index 100% rename from src/de/danoeh/antennapod/util/comparator/FeedItemPubdateComparator.java rename to app/src/main/java/de/danoeh/antennapod/util/comparator/FeedItemPubdateComparator.java diff --git a/src/de/danoeh/antennapod/util/comparator/PlaybackCompletionDateComparator.java b/app/src/main/java/de/danoeh/antennapod/util/comparator/PlaybackCompletionDateComparator.java similarity index 100% rename from src/de/danoeh/antennapod/util/comparator/PlaybackCompletionDateComparator.java rename to app/src/main/java/de/danoeh/antennapod/util/comparator/PlaybackCompletionDateComparator.java diff --git a/src/de/danoeh/antennapod/util/comparator/SearchResultValueComparator.java b/app/src/main/java/de/danoeh/antennapod/util/comparator/SearchResultValueComparator.java similarity index 100% rename from src/de/danoeh/antennapod/util/comparator/SearchResultValueComparator.java rename to app/src/main/java/de/danoeh/antennapod/util/comparator/SearchResultValueComparator.java diff --git a/src/de/danoeh/antennapod/util/exception/MediaFileNotFoundException.java b/app/src/main/java/de/danoeh/antennapod/util/exception/MediaFileNotFoundException.java similarity index 100% rename from src/de/danoeh/antennapod/util/exception/MediaFileNotFoundException.java rename to app/src/main/java/de/danoeh/antennapod/util/exception/MediaFileNotFoundException.java diff --git a/src/de/danoeh/antennapod/util/flattr/FlattrServiceCreator.java b/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrServiceCreator.java similarity index 100% rename from src/de/danoeh/antennapod/util/flattr/FlattrServiceCreator.java rename to app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrServiceCreator.java diff --git a/src/de/danoeh/antennapod/util/flattr/FlattrStatus.java b/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrStatus.java similarity index 100% rename from src/de/danoeh/antennapod/util/flattr/FlattrStatus.java rename to app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrStatus.java diff --git a/src/de/danoeh/antennapod/util/flattr/FlattrThing.java b/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrThing.java similarity index 100% rename from src/de/danoeh/antennapod/util/flattr/FlattrThing.java rename to app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrThing.java diff --git a/src/de/danoeh/antennapod/util/flattr/FlattrUtils.java b/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrUtils.java similarity index 100% rename from src/de/danoeh/antennapod/util/flattr/FlattrUtils.java rename to app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrUtils.java diff --git a/src/de/danoeh/antennapod/util/flattr/SimpleFlattrThing.java b/app/src/main/java/de/danoeh/antennapod/util/flattr/SimpleFlattrThing.java similarity index 100% rename from src/de/danoeh/antennapod/util/flattr/SimpleFlattrThing.java rename to app/src/main/java/de/danoeh/antennapod/util/flattr/SimpleFlattrThing.java diff --git a/src/de/danoeh/antennapod/util/gui/FeedItemUndoToken.java b/app/src/main/java/de/danoeh/antennapod/util/gui/FeedItemUndoToken.java similarity index 100% rename from src/de/danoeh/antennapod/util/gui/FeedItemUndoToken.java rename to app/src/main/java/de/danoeh/antennapod/util/gui/FeedItemUndoToken.java diff --git a/src/de/danoeh/antennapod/util/id3reader/ChapterReader.java b/app/src/main/java/de/danoeh/antennapod/util/id3reader/ChapterReader.java similarity index 100% rename from src/de/danoeh/antennapod/util/id3reader/ChapterReader.java rename to app/src/main/java/de/danoeh/antennapod/util/id3reader/ChapterReader.java diff --git a/src/de/danoeh/antennapod/util/id3reader/ID3Reader.java b/app/src/main/java/de/danoeh/antennapod/util/id3reader/ID3Reader.java similarity index 100% rename from src/de/danoeh/antennapod/util/id3reader/ID3Reader.java rename to app/src/main/java/de/danoeh/antennapod/util/id3reader/ID3Reader.java diff --git a/src/de/danoeh/antennapod/util/id3reader/ID3ReaderException.java b/app/src/main/java/de/danoeh/antennapod/util/id3reader/ID3ReaderException.java similarity index 100% rename from src/de/danoeh/antennapod/util/id3reader/ID3ReaderException.java rename to app/src/main/java/de/danoeh/antennapod/util/id3reader/ID3ReaderException.java diff --git a/src/de/danoeh/antennapod/util/id3reader/model/FrameHeader.java b/app/src/main/java/de/danoeh/antennapod/util/id3reader/model/FrameHeader.java similarity index 100% rename from src/de/danoeh/antennapod/util/id3reader/model/FrameHeader.java rename to app/src/main/java/de/danoeh/antennapod/util/id3reader/model/FrameHeader.java diff --git a/src/de/danoeh/antennapod/util/id3reader/model/Header.java b/app/src/main/java/de/danoeh/antennapod/util/id3reader/model/Header.java similarity index 100% rename from src/de/danoeh/antennapod/util/id3reader/model/Header.java rename to app/src/main/java/de/danoeh/antennapod/util/id3reader/model/Header.java diff --git a/src/de/danoeh/antennapod/util/id3reader/model/TagHeader.java b/app/src/main/java/de/danoeh/antennapod/util/id3reader/model/TagHeader.java similarity index 100% rename from src/de/danoeh/antennapod/util/id3reader/model/TagHeader.java rename to app/src/main/java/de/danoeh/antennapod/util/id3reader/model/TagHeader.java diff --git a/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java similarity index 100% rename from src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java rename to app/src/main/java/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java diff --git a/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java similarity index 100% rename from src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java rename to app/src/main/java/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java diff --git a/src/de/danoeh/antennapod/util/menuhandler/MenuItemUtils.java b/app/src/main/java/de/danoeh/antennapod/util/menuhandler/MenuItemUtils.java similarity index 100% rename from src/de/danoeh/antennapod/util/menuhandler/MenuItemUtils.java rename to app/src/main/java/de/danoeh/antennapod/util/menuhandler/MenuItemUtils.java diff --git a/src/de/danoeh/antennapod/util/menuhandler/NavDrawerActivity.java b/app/src/main/java/de/danoeh/antennapod/util/menuhandler/NavDrawerActivity.java similarity index 100% rename from src/de/danoeh/antennapod/util/menuhandler/NavDrawerActivity.java rename to app/src/main/java/de/danoeh/antennapod/util/menuhandler/NavDrawerActivity.java diff --git a/src/de/danoeh/antennapod/util/playback/AudioPlayer.java b/app/src/main/java/de/danoeh/antennapod/util/playback/AudioPlayer.java similarity index 100% rename from src/de/danoeh/antennapod/util/playback/AudioPlayer.java rename to app/src/main/java/de/danoeh/antennapod/util/playback/AudioPlayer.java diff --git a/src/de/danoeh/antennapod/util/playback/ExternalMedia.java b/app/src/main/java/de/danoeh/antennapod/util/playback/ExternalMedia.java similarity index 100% rename from src/de/danoeh/antennapod/util/playback/ExternalMedia.java rename to app/src/main/java/de/danoeh/antennapod/util/playback/ExternalMedia.java diff --git a/src/de/danoeh/antennapod/util/playback/IPlayer.java b/app/src/main/java/de/danoeh/antennapod/util/playback/IPlayer.java similarity index 100% rename from src/de/danoeh/antennapod/util/playback/IPlayer.java rename to app/src/main/java/de/danoeh/antennapod/util/playback/IPlayer.java diff --git a/src/de/danoeh/antennapod/util/playback/MediaPlayerError.java b/app/src/main/java/de/danoeh/antennapod/util/playback/MediaPlayerError.java similarity index 100% rename from src/de/danoeh/antennapod/util/playback/MediaPlayerError.java rename to app/src/main/java/de/danoeh/antennapod/util/playback/MediaPlayerError.java diff --git a/src/de/danoeh/antennapod/util/playback/Playable.java b/app/src/main/java/de/danoeh/antennapod/util/playback/Playable.java similarity index 100% rename from src/de/danoeh/antennapod/util/playback/Playable.java rename to app/src/main/java/de/danoeh/antennapod/util/playback/Playable.java diff --git a/src/de/danoeh/antennapod/util/playback/PlaybackController.java b/app/src/main/java/de/danoeh/antennapod/util/playback/PlaybackController.java similarity index 100% rename from src/de/danoeh/antennapod/util/playback/PlaybackController.java rename to app/src/main/java/de/danoeh/antennapod/util/playback/PlaybackController.java diff --git a/src/de/danoeh/antennapod/util/playback/Timeline.java b/app/src/main/java/de/danoeh/antennapod/util/playback/Timeline.java similarity index 100% rename from src/de/danoeh/antennapod/util/playback/Timeline.java rename to app/src/main/java/de/danoeh/antennapod/util/playback/Timeline.java diff --git a/src/de/danoeh/antennapod/util/playback/VideoPlayer.java b/app/src/main/java/de/danoeh/antennapod/util/playback/VideoPlayer.java similarity index 100% rename from src/de/danoeh/antennapod/util/playback/VideoPlayer.java rename to app/src/main/java/de/danoeh/antennapod/util/playback/VideoPlayer.java diff --git a/src/de/danoeh/antennapod/util/syndication/FeedDiscoverer.java b/app/src/main/java/de/danoeh/antennapod/util/syndication/FeedDiscoverer.java similarity index 100% rename from src/de/danoeh/antennapod/util/syndication/FeedDiscoverer.java rename to app/src/main/java/de/danoeh/antennapod/util/syndication/FeedDiscoverer.java diff --git a/src/de/danoeh/antennapod/util/vorbiscommentreader/OggInputStream.java b/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/OggInputStream.java similarity index 100% rename from src/de/danoeh/antennapod/util/vorbiscommentreader/OggInputStream.java rename to app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/OggInputStream.java diff --git a/src/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentChapterReader.java b/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentChapterReader.java similarity index 100% rename from src/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentChapterReader.java rename to app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentChapterReader.java diff --git a/src/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentHeader.java b/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentHeader.java similarity index 100% rename from src/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentHeader.java rename to app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentHeader.java diff --git a/src/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReader.java b/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReader.java similarity index 100% rename from src/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReader.java rename to app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReader.java diff --git a/src/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReaderException.java b/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReaderException.java similarity index 100% rename from src/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReaderException.java rename to app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReaderException.java diff --git a/src/de/danoeh/antennapod/view/AspectRatioVideoView.java b/app/src/main/java/de/danoeh/antennapod/view/AspectRatioVideoView.java similarity index 100% rename from src/de/danoeh/antennapod/view/AspectRatioVideoView.java rename to app/src/main/java/de/danoeh/antennapod/view/AspectRatioVideoView.java diff --git a/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml similarity index 100% rename from res/anim/fade_in.xml rename to app/src/main/res/anim/fade_in.xml diff --git a/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml similarity index 100% rename from res/anim/fade_out.xml rename to app/src/main/res/anim/fade_out.xml diff --git a/res/drawable-hdpi-v11/ic_stat_antenna.png b/app/src/main/res/drawable-hdpi-v11/ic_stat_antenna.png similarity index 100% rename from res/drawable-hdpi-v11/ic_stat_antenna.png rename to app/src/main/res/drawable-hdpi-v11/ic_stat_antenna.png diff --git a/res/drawable-hdpi-v11/ic_stat_authentication.png b/app/src/main/res/drawable-hdpi-v11/ic_stat_authentication.png similarity index 100% rename from res/drawable-hdpi-v11/ic_stat_authentication.png rename to app/src/main/res/drawable-hdpi-v11/ic_stat_authentication.png diff --git a/res/drawable-hdpi-v11/stat_notify_sync.png b/app/src/main/res/drawable-hdpi-v11/stat_notify_sync.png similarity index 100% rename from res/drawable-hdpi-v11/stat_notify_sync.png rename to app/src/main/res/drawable-hdpi-v11/stat_notify_sync.png diff --git a/res/drawable-hdpi-v11/stat_notify_sync_error.png b/app/src/main/res/drawable-hdpi-v11/stat_notify_sync_error.png similarity index 100% rename from res/drawable-hdpi-v11/stat_notify_sync_error.png rename to app/src/main/res/drawable-hdpi-v11/stat_notify_sync_error.png diff --git a/res/drawable-hdpi/action_about.png b/app/src/main/res/drawable-hdpi/action_about.png similarity index 100% rename from res/drawable-hdpi/action_about.png rename to app/src/main/res/drawable-hdpi/action_about.png diff --git a/res/drawable-hdpi/action_about_dark.png b/app/src/main/res/drawable-hdpi/action_about_dark.png similarity index 100% rename from res/drawable-hdpi/action_about_dark.png rename to app/src/main/res/drawable-hdpi/action_about_dark.png diff --git a/res/drawable-hdpi/action_search.png b/app/src/main/res/drawable-hdpi/action_search.png similarity index 100% rename from res/drawable-hdpi/action_search.png rename to app/src/main/res/drawable-hdpi/action_search.png diff --git a/res/drawable-hdpi/action_search_dark.png b/app/src/main/res/drawable-hdpi/action_search_dark.png similarity index 100% rename from res/drawable-hdpi/action_search_dark.png rename to app/src/main/res/drawable-hdpi/action_search_dark.png diff --git a/res/drawable-hdpi/action_settings.png b/app/src/main/res/drawable-hdpi/action_settings.png similarity index 100% rename from res/drawable-hdpi/action_settings.png rename to app/src/main/res/drawable-hdpi/action_settings.png diff --git a/res/drawable-hdpi/action_settings_dark.png b/app/src/main/res/drawable-hdpi/action_settings_dark.png similarity index 100% rename from res/drawable-hdpi/action_settings_dark.png rename to app/src/main/res/drawable-hdpi/action_settings_dark.png diff --git a/res/drawable-hdpi/action_stream.png b/app/src/main/res/drawable-hdpi/action_stream.png similarity index 100% rename from res/drawable-hdpi/action_stream.png rename to app/src/main/res/drawable-hdpi/action_stream.png diff --git a/res/drawable-hdpi/action_stream_dark.png b/app/src/main/res/drawable-hdpi/action_stream_dark.png similarity index 100% rename from res/drawable-hdpi/action_stream_dark.png rename to app/src/main/res/drawable-hdpi/action_stream_dark.png diff --git a/res/drawable-hdpi/av_download.png b/app/src/main/res/drawable-hdpi/av_download.png similarity index 100% rename from res/drawable-hdpi/av_download.png rename to app/src/main/res/drawable-hdpi/av_download.png diff --git a/res/drawable-hdpi/av_download_dark.png b/app/src/main/res/drawable-hdpi/av_download_dark.png similarity index 100% rename from res/drawable-hdpi/av_download_dark.png rename to app/src/main/res/drawable-hdpi/av_download_dark.png diff --git a/res/drawable-hdpi/av_fast_forward.png b/app/src/main/res/drawable-hdpi/av_fast_forward.png similarity index 100% rename from res/drawable-hdpi/av_fast_forward.png rename to app/src/main/res/drawable-hdpi/av_fast_forward.png diff --git a/res/drawable-hdpi/av_fast_forward_dark.png b/app/src/main/res/drawable-hdpi/av_fast_forward_dark.png similarity index 100% rename from res/drawable-hdpi/av_fast_forward_dark.png rename to app/src/main/res/drawable-hdpi/av_fast_forward_dark.png diff --git a/res/drawable-hdpi/av_pause.png b/app/src/main/res/drawable-hdpi/av_pause.png similarity index 100% rename from res/drawable-hdpi/av_pause.png rename to app/src/main/res/drawable-hdpi/av_pause.png diff --git a/res/drawable-hdpi/av_pause_dark.png b/app/src/main/res/drawable-hdpi/av_pause_dark.png similarity index 100% rename from res/drawable-hdpi/av_pause_dark.png rename to app/src/main/res/drawable-hdpi/av_pause_dark.png diff --git a/res/drawable-hdpi/av_play.png b/app/src/main/res/drawable-hdpi/av_play.png similarity index 100% rename from res/drawable-hdpi/av_play.png rename to app/src/main/res/drawable-hdpi/av_play.png diff --git a/res/drawable-hdpi/av_play_dark.png b/app/src/main/res/drawable-hdpi/av_play_dark.png similarity index 100% rename from res/drawable-hdpi/av_play_dark.png rename to app/src/main/res/drawable-hdpi/av_play_dark.png diff --git a/res/drawable-hdpi/av_rewind.png b/app/src/main/res/drawable-hdpi/av_rewind.png similarity index 100% rename from res/drawable-hdpi/av_rewind.png rename to app/src/main/res/drawable-hdpi/av_rewind.png diff --git a/res/drawable-hdpi/av_rewind_dark.png b/app/src/main/res/drawable-hdpi/av_rewind_dark.png similarity index 100% rename from res/drawable-hdpi/av_rewind_dark.png rename to app/src/main/res/drawable-hdpi/av_rewind_dark.png diff --git a/res/drawable-hdpi/content_discard.png b/app/src/main/res/drawable-hdpi/content_discard.png similarity index 100% rename from res/drawable-hdpi/content_discard.png rename to app/src/main/res/drawable-hdpi/content_discard.png diff --git a/res/drawable-hdpi/content_discard_dark.png b/app/src/main/res/drawable-hdpi/content_discard_dark.png similarity index 100% rename from res/drawable-hdpi/content_discard_dark.png rename to app/src/main/res/drawable-hdpi/content_discard_dark.png diff --git a/res/drawable-hdpi/content_new.png b/app/src/main/res/drawable-hdpi/content_new.png similarity index 100% rename from res/drawable-hdpi/content_new.png rename to app/src/main/res/drawable-hdpi/content_new.png diff --git a/res/drawable-hdpi/content_new_dark.png b/app/src/main/res/drawable-hdpi/content_new_dark.png similarity index 100% rename from res/drawable-hdpi/content_new_dark.png rename to app/src/main/res/drawable-hdpi/content_new_dark.png diff --git a/res/drawable-hdpi/default_cover.png b/app/src/main/res/drawable-hdpi/default_cover.png similarity index 100% rename from res/drawable-hdpi/default_cover.png rename to app/src/main/res/drawable-hdpi/default_cover.png diff --git a/res/drawable-hdpi/default_cover_dark.png b/app/src/main/res/drawable-hdpi/default_cover_dark.png similarity index 100% rename from res/drawable-hdpi/default_cover_dark.png rename to app/src/main/res/drawable-hdpi/default_cover_dark.png diff --git a/res/drawable-hdpi/device_access_time.png b/app/src/main/res/drawable-hdpi/device_access_time.png similarity index 100% rename from res/drawable-hdpi/device_access_time.png rename to app/src/main/res/drawable-hdpi/device_access_time.png diff --git a/res/drawable-hdpi/device_access_time_dark.png b/app/src/main/res/drawable-hdpi/device_access_time_dark.png similarity index 100% rename from res/drawable-hdpi/device_access_time_dark.png rename to app/src/main/res/drawable-hdpi/device_access_time_dark.png diff --git a/res/drawable-hdpi/ic_action_overflow.png b/app/src/main/res/drawable-hdpi/ic_action_overflow.png similarity index 100% rename from res/drawable-hdpi/ic_action_overflow.png rename to app/src/main/res/drawable-hdpi/ic_action_overflow.png diff --git a/res/drawable-hdpi/ic_action_overflow_dark.png b/app/src/main/res/drawable-hdpi/ic_action_overflow_dark.png similarity index 100% rename from res/drawable-hdpi/ic_action_overflow_dark.png rename to app/src/main/res/drawable-hdpi/ic_action_overflow_dark.png diff --git a/res/drawable-hdpi/ic_action_pause_over_video.png b/app/src/main/res/drawable-hdpi/ic_action_pause_over_video.png similarity index 100% rename from res/drawable-hdpi/ic_action_pause_over_video.png rename to app/src/main/res/drawable-hdpi/ic_action_pause_over_video.png diff --git a/res/drawable-hdpi/ic_action_play_over_video.png b/app/src/main/res/drawable-hdpi/ic_action_play_over_video.png similarity index 100% rename from res/drawable-hdpi/ic_action_play_over_video.png rename to app/src/main/res/drawable-hdpi/ic_action_play_over_video.png diff --git a/res/drawable-hdpi/ic_drag_handle.png b/app/src/main/res/drawable-hdpi/ic_drag_handle.png similarity index 100% rename from res/drawable-hdpi/ic_drag_handle.png rename to app/src/main/res/drawable-hdpi/ic_drag_handle.png diff --git a/res/drawable-hdpi/ic_drag_handle_dark.png b/app/src/main/res/drawable-hdpi/ic_drag_handle_dark.png similarity index 100% rename from res/drawable-hdpi/ic_drag_handle_dark.png rename to app/src/main/res/drawable-hdpi/ic_drag_handle_dark.png diff --git a/res/drawable-hdpi/ic_drawer.png b/app/src/main/res/drawable-hdpi/ic_drawer.png similarity index 100% rename from res/drawable-hdpi/ic_drawer.png rename to app/src/main/res/drawable-hdpi/ic_drawer.png diff --git a/res/drawable-hdpi/ic_drawer_dark.png b/app/src/main/res/drawable-hdpi/ic_drawer_dark.png similarity index 100% rename from res/drawable-hdpi/ic_drawer_dark.png rename to app/src/main/res/drawable-hdpi/ic_drawer_dark.png diff --git a/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png similarity index 100% rename from res/drawable-hdpi/ic_launcher.png rename to app/src/main/res/drawable-hdpi/ic_launcher.png diff --git a/res/drawable-hdpi/ic_new.png b/app/src/main/res/drawable-hdpi/ic_new.png similarity index 100% rename from res/drawable-hdpi/ic_new.png rename to app/src/main/res/drawable-hdpi/ic_new.png diff --git a/res/drawable-hdpi/ic_new_dark.png b/app/src/main/res/drawable-hdpi/ic_new_dark.png similarity index 100% rename from res/drawable-hdpi/ic_new_dark.png rename to app/src/main/res/drawable-hdpi/ic_new_dark.png diff --git a/res/drawable-hdpi/ic_stat_antenna.png b/app/src/main/res/drawable-hdpi/ic_stat_antenna.png similarity index 100% rename from res/drawable-hdpi/ic_stat_antenna.png rename to app/src/main/res/drawable-hdpi/ic_stat_antenna.png diff --git a/res/drawable-hdpi/ic_stat_authentication.png b/app/src/main/res/drawable-hdpi/ic_stat_authentication.png similarity index 100% rename from res/drawable-hdpi/ic_stat_authentication.png rename to app/src/main/res/drawable-hdpi/ic_stat_authentication.png diff --git a/res/drawable-hdpi/location_web_site.png b/app/src/main/res/drawable-hdpi/location_web_site.png similarity index 100% rename from res/drawable-hdpi/location_web_site.png rename to app/src/main/res/drawable-hdpi/location_web_site.png diff --git a/res/drawable-hdpi/location_web_site_dark.png b/app/src/main/res/drawable-hdpi/location_web_site_dark.png similarity index 100% rename from res/drawable-hdpi/location_web_site_dark.png rename to app/src/main/res/drawable-hdpi/location_web_site_dark.png diff --git a/res/drawable-hdpi/navigation_accept.png b/app/src/main/res/drawable-hdpi/navigation_accept.png similarity index 100% rename from res/drawable-hdpi/navigation_accept.png rename to app/src/main/res/drawable-hdpi/navigation_accept.png diff --git a/res/drawable-hdpi/navigation_accept_dark.png b/app/src/main/res/drawable-hdpi/navigation_accept_dark.png similarity index 100% rename from res/drawable-hdpi/navigation_accept_dark.png rename to app/src/main/res/drawable-hdpi/navigation_accept_dark.png diff --git a/res/drawable-hdpi/navigation_cancel.png b/app/src/main/res/drawable-hdpi/navigation_cancel.png similarity index 100% rename from res/drawable-hdpi/navigation_cancel.png rename to app/src/main/res/drawable-hdpi/navigation_cancel.png diff --git a/res/drawable-hdpi/navigation_cancel_dark.png b/app/src/main/res/drawable-hdpi/navigation_cancel_dark.png similarity index 100% rename from res/drawable-hdpi/navigation_cancel_dark.png rename to app/src/main/res/drawable-hdpi/navigation_cancel_dark.png diff --git a/res/drawable-hdpi/navigation_chapters.png b/app/src/main/res/drawable-hdpi/navigation_chapters.png similarity index 100% rename from res/drawable-hdpi/navigation_chapters.png rename to app/src/main/res/drawable-hdpi/navigation_chapters.png diff --git a/res/drawable-hdpi/navigation_chapters_dark.png b/app/src/main/res/drawable-hdpi/navigation_chapters_dark.png similarity index 100% rename from res/drawable-hdpi/navigation_chapters_dark.png rename to app/src/main/res/drawable-hdpi/navigation_chapters_dark.png diff --git a/res/drawable-hdpi/navigation_collapse.png b/app/src/main/res/drawable-hdpi/navigation_collapse.png similarity index 100% rename from res/drawable-hdpi/navigation_collapse.png rename to app/src/main/res/drawable-hdpi/navigation_collapse.png diff --git a/res/drawable-hdpi/navigation_collapse_dark.png b/app/src/main/res/drawable-hdpi/navigation_collapse_dark.png similarity index 100% rename from res/drawable-hdpi/navigation_collapse_dark.png rename to app/src/main/res/drawable-hdpi/navigation_collapse_dark.png diff --git a/res/drawable-hdpi/navigation_expand.png b/app/src/main/res/drawable-hdpi/navigation_expand.png similarity index 100% rename from res/drawable-hdpi/navigation_expand.png rename to app/src/main/res/drawable-hdpi/navigation_expand.png diff --git a/res/drawable-hdpi/navigation_expand_dark.png b/app/src/main/res/drawable-hdpi/navigation_expand_dark.png similarity index 100% rename from res/drawable-hdpi/navigation_expand_dark.png rename to app/src/main/res/drawable-hdpi/navigation_expand_dark.png diff --git a/res/drawable-hdpi/navigation_refresh.png b/app/src/main/res/drawable-hdpi/navigation_refresh.png similarity index 100% rename from res/drawable-hdpi/navigation_refresh.png rename to app/src/main/res/drawable-hdpi/navigation_refresh.png diff --git a/res/drawable-hdpi/navigation_refresh_dark.png b/app/src/main/res/drawable-hdpi/navigation_refresh_dark.png similarity index 100% rename from res/drawable-hdpi/navigation_refresh_dark.png rename to app/src/main/res/drawable-hdpi/navigation_refresh_dark.png diff --git a/res/drawable-hdpi/navigation_shownotes.png b/app/src/main/res/drawable-hdpi/navigation_shownotes.png similarity index 100% rename from res/drawable-hdpi/navigation_shownotes.png rename to app/src/main/res/drawable-hdpi/navigation_shownotes.png diff --git a/res/drawable-hdpi/navigation_shownotes_dark.png b/app/src/main/res/drawable-hdpi/navigation_shownotes_dark.png similarity index 100% rename from res/drawable-hdpi/navigation_shownotes_dark.png rename to app/src/main/res/drawable-hdpi/navigation_shownotes_dark.png diff --git a/res/drawable-hdpi/navigation_up.png b/app/src/main/res/drawable-hdpi/navigation_up.png similarity index 100% rename from res/drawable-hdpi/navigation_up.png rename to app/src/main/res/drawable-hdpi/navigation_up.png diff --git a/res/drawable-hdpi/navigation_up_dark.png b/app/src/main/res/drawable-hdpi/navigation_up_dark.png similarity index 100% rename from res/drawable-hdpi/navigation_up_dark.png rename to app/src/main/res/drawable-hdpi/navigation_up_dark.png diff --git a/res/drawable-hdpi/social_share.png b/app/src/main/res/drawable-hdpi/social_share.png similarity index 100% rename from res/drawable-hdpi/social_share.png rename to app/src/main/res/drawable-hdpi/social_share.png diff --git a/res/drawable-hdpi/social_share_dark.png b/app/src/main/res/drawable-hdpi/social_share_dark.png similarity index 100% rename from res/drawable-hdpi/social_share_dark.png rename to app/src/main/res/drawable-hdpi/social_share_dark.png diff --git a/res/drawable-hdpi/spinner_button.9.png b/app/src/main/res/drawable-hdpi/spinner_button.9.png similarity index 100% rename from res/drawable-hdpi/spinner_button.9.png rename to app/src/main/res/drawable-hdpi/spinner_button.9.png diff --git a/res/drawable-hdpi/spinner_button_dark.9.png b/app/src/main/res/drawable-hdpi/spinner_button_dark.9.png similarity index 100% rename from res/drawable-hdpi/spinner_button_dark.9.png rename to app/src/main/res/drawable-hdpi/spinner_button_dark.9.png diff --git a/res/drawable-hdpi/stat_notify_sync.png b/app/src/main/res/drawable-hdpi/stat_notify_sync.png similarity index 100% rename from res/drawable-hdpi/stat_notify_sync.png rename to app/src/main/res/drawable-hdpi/stat_notify_sync.png diff --git a/res/drawable-hdpi/stat_notify_sync_error.png b/app/src/main/res/drawable-hdpi/stat_notify_sync_error.png similarity index 100% rename from res/drawable-hdpi/stat_notify_sync_error.png rename to app/src/main/res/drawable-hdpi/stat_notify_sync_error.png diff --git a/res/drawable-hdpi/stat_playlist.png b/app/src/main/res/drawable-hdpi/stat_playlist.png similarity index 100% rename from res/drawable-hdpi/stat_playlist.png rename to app/src/main/res/drawable-hdpi/stat_playlist.png diff --git a/res/drawable-hdpi/stat_playlist_dark.png b/app/src/main/res/drawable-hdpi/stat_playlist_dark.png similarity index 100% rename from res/drawable-hdpi/stat_playlist_dark.png rename to app/src/main/res/drawable-hdpi/stat_playlist_dark.png diff --git a/res/drawable-hdpi/type_audio.png b/app/src/main/res/drawable-hdpi/type_audio.png similarity index 100% rename from res/drawable-hdpi/type_audio.png rename to app/src/main/res/drawable-hdpi/type_audio.png diff --git a/res/drawable-hdpi/type_audio_dark.png b/app/src/main/res/drawable-hdpi/type_audio_dark.png similarity index 100% rename from res/drawable-hdpi/type_audio_dark.png rename to app/src/main/res/drawable-hdpi/type_audio_dark.png diff --git a/res/drawable-hdpi/type_video.png b/app/src/main/res/drawable-hdpi/type_video.png similarity index 100% rename from res/drawable-hdpi/type_video.png rename to app/src/main/res/drawable-hdpi/type_video.png diff --git a/res/drawable-hdpi/type_video_dark.png b/app/src/main/res/drawable-hdpi/type_video_dark.png similarity index 100% rename from res/drawable-hdpi/type_video_dark.png rename to app/src/main/res/drawable-hdpi/type_video_dark.png diff --git a/res/drawable-ldpi-v11/ic_stat_antenna.png b/app/src/main/res/drawable-ldpi-v11/ic_stat_antenna.png similarity index 100% rename from res/drawable-ldpi-v11/ic_stat_antenna.png rename to app/src/main/res/drawable-ldpi-v11/ic_stat_antenna.png diff --git a/res/drawable-ldpi/action_stream.png b/app/src/main/res/drawable-ldpi/action_stream.png similarity index 100% rename from res/drawable-ldpi/action_stream.png rename to app/src/main/res/drawable-ldpi/action_stream.png diff --git a/res/drawable-ldpi/action_stream_dark.png b/app/src/main/res/drawable-ldpi/action_stream_dark.png similarity index 100% rename from res/drawable-ldpi/action_stream_dark.png rename to app/src/main/res/drawable-ldpi/action_stream_dark.png diff --git a/res/drawable-ldpi/ic_launcher.png b/app/src/main/res/drawable-ldpi/ic_launcher.png similarity index 100% rename from res/drawable-ldpi/ic_launcher.png rename to app/src/main/res/drawable-ldpi/ic_launcher.png diff --git a/res/drawable-ldpi/ic_stat_antenna.png b/app/src/main/res/drawable-ldpi/ic_stat_antenna.png similarity index 100% rename from res/drawable-ldpi/ic_stat_antenna.png rename to app/src/main/res/drawable-ldpi/ic_stat_antenna.png diff --git a/res/drawable-ldpi/stat_playlist.png b/app/src/main/res/drawable-ldpi/stat_playlist.png similarity index 100% rename from res/drawable-ldpi/stat_playlist.png rename to app/src/main/res/drawable-ldpi/stat_playlist.png diff --git a/res/drawable-ldpi/stat_playlist_dark.png b/app/src/main/res/drawable-ldpi/stat_playlist_dark.png similarity index 100% rename from res/drawable-ldpi/stat_playlist_dark.png rename to app/src/main/res/drawable-ldpi/stat_playlist_dark.png diff --git a/res/drawable-mdpi-v11/ic_stat_antenna.png b/app/src/main/res/drawable-mdpi-v11/ic_stat_antenna.png similarity index 100% rename from res/drawable-mdpi-v11/ic_stat_antenna.png rename to app/src/main/res/drawable-mdpi-v11/ic_stat_antenna.png diff --git a/res/drawable-mdpi-v11/ic_stat_authentication.png b/app/src/main/res/drawable-mdpi-v11/ic_stat_authentication.png similarity index 100% rename from res/drawable-mdpi-v11/ic_stat_authentication.png rename to app/src/main/res/drawable-mdpi-v11/ic_stat_authentication.png diff --git a/res/drawable-mdpi-v11/stat_notify_sync.png b/app/src/main/res/drawable-mdpi-v11/stat_notify_sync.png similarity index 100% rename from res/drawable-mdpi-v11/stat_notify_sync.png rename to app/src/main/res/drawable-mdpi-v11/stat_notify_sync.png diff --git a/res/drawable-mdpi-v11/stat_notify_sync_error.png b/app/src/main/res/drawable-mdpi-v11/stat_notify_sync_error.png similarity index 100% rename from res/drawable-mdpi-v11/stat_notify_sync_error.png rename to app/src/main/res/drawable-mdpi-v11/stat_notify_sync_error.png diff --git a/res/drawable-mdpi/action_about.png b/app/src/main/res/drawable-mdpi/action_about.png similarity index 100% rename from res/drawable-mdpi/action_about.png rename to app/src/main/res/drawable-mdpi/action_about.png diff --git a/res/drawable-mdpi/action_about_dark.png b/app/src/main/res/drawable-mdpi/action_about_dark.png similarity index 100% rename from res/drawable-mdpi/action_about_dark.png rename to app/src/main/res/drawable-mdpi/action_about_dark.png diff --git a/res/drawable-mdpi/action_search.png b/app/src/main/res/drawable-mdpi/action_search.png similarity index 100% rename from res/drawable-mdpi/action_search.png rename to app/src/main/res/drawable-mdpi/action_search.png diff --git a/res/drawable-mdpi/action_search_dark.png b/app/src/main/res/drawable-mdpi/action_search_dark.png similarity index 100% rename from res/drawable-mdpi/action_search_dark.png rename to app/src/main/res/drawable-mdpi/action_search_dark.png diff --git a/res/drawable-mdpi/action_settings.png b/app/src/main/res/drawable-mdpi/action_settings.png similarity index 100% rename from res/drawable-mdpi/action_settings.png rename to app/src/main/res/drawable-mdpi/action_settings.png diff --git a/res/drawable-mdpi/action_settings_dark.png b/app/src/main/res/drawable-mdpi/action_settings_dark.png similarity index 100% rename from res/drawable-mdpi/action_settings_dark.png rename to app/src/main/res/drawable-mdpi/action_settings_dark.png diff --git a/res/drawable-mdpi/action_stream.png b/app/src/main/res/drawable-mdpi/action_stream.png similarity index 100% rename from res/drawable-mdpi/action_stream.png rename to app/src/main/res/drawable-mdpi/action_stream.png diff --git a/res/drawable-mdpi/action_stream_dark.png b/app/src/main/res/drawable-mdpi/action_stream_dark.png similarity index 100% rename from res/drawable-mdpi/action_stream_dark.png rename to app/src/main/res/drawable-mdpi/action_stream_dark.png diff --git a/res/drawable-mdpi/av_download.png b/app/src/main/res/drawable-mdpi/av_download.png similarity index 100% rename from res/drawable-mdpi/av_download.png rename to app/src/main/res/drawable-mdpi/av_download.png diff --git a/res/drawable-mdpi/av_download_dark.png b/app/src/main/res/drawable-mdpi/av_download_dark.png similarity index 100% rename from res/drawable-mdpi/av_download_dark.png rename to app/src/main/res/drawable-mdpi/av_download_dark.png diff --git a/res/drawable-mdpi/av_fast_forward.png b/app/src/main/res/drawable-mdpi/av_fast_forward.png similarity index 100% rename from res/drawable-mdpi/av_fast_forward.png rename to app/src/main/res/drawable-mdpi/av_fast_forward.png diff --git a/res/drawable-mdpi/av_fast_forward_dark.png b/app/src/main/res/drawable-mdpi/av_fast_forward_dark.png similarity index 100% rename from res/drawable-mdpi/av_fast_forward_dark.png rename to app/src/main/res/drawable-mdpi/av_fast_forward_dark.png diff --git a/res/drawable-mdpi/av_pause.png b/app/src/main/res/drawable-mdpi/av_pause.png similarity index 100% rename from res/drawable-mdpi/av_pause.png rename to app/src/main/res/drawable-mdpi/av_pause.png diff --git a/res/drawable-mdpi/av_pause_dark.png b/app/src/main/res/drawable-mdpi/av_pause_dark.png similarity index 100% rename from res/drawable-mdpi/av_pause_dark.png rename to app/src/main/res/drawable-mdpi/av_pause_dark.png diff --git a/res/drawable-mdpi/av_play.png b/app/src/main/res/drawable-mdpi/av_play.png similarity index 100% rename from res/drawable-mdpi/av_play.png rename to app/src/main/res/drawable-mdpi/av_play.png diff --git a/res/drawable-mdpi/av_play_dark.png b/app/src/main/res/drawable-mdpi/av_play_dark.png similarity index 100% rename from res/drawable-mdpi/av_play_dark.png rename to app/src/main/res/drawable-mdpi/av_play_dark.png diff --git a/res/drawable-mdpi/av_rewind.png b/app/src/main/res/drawable-mdpi/av_rewind.png similarity index 100% rename from res/drawable-mdpi/av_rewind.png rename to app/src/main/res/drawable-mdpi/av_rewind.png diff --git a/res/drawable-mdpi/av_rewind_dark.png b/app/src/main/res/drawable-mdpi/av_rewind_dark.png similarity index 100% rename from res/drawable-mdpi/av_rewind_dark.png rename to app/src/main/res/drawable-mdpi/av_rewind_dark.png diff --git a/res/drawable-mdpi/content_discard.png b/app/src/main/res/drawable-mdpi/content_discard.png similarity index 100% rename from res/drawable-mdpi/content_discard.png rename to app/src/main/res/drawable-mdpi/content_discard.png diff --git a/res/drawable-mdpi/content_discard_dark.png b/app/src/main/res/drawable-mdpi/content_discard_dark.png similarity index 100% rename from res/drawable-mdpi/content_discard_dark.png rename to app/src/main/res/drawable-mdpi/content_discard_dark.png diff --git a/res/drawable-mdpi/content_new.png b/app/src/main/res/drawable-mdpi/content_new.png similarity index 100% rename from res/drawable-mdpi/content_new.png rename to app/src/main/res/drawable-mdpi/content_new.png diff --git a/res/drawable-mdpi/content_new_dark.png b/app/src/main/res/drawable-mdpi/content_new_dark.png similarity index 100% rename from res/drawable-mdpi/content_new_dark.png rename to app/src/main/res/drawable-mdpi/content_new_dark.png diff --git a/res/drawable-mdpi/default_cover.png b/app/src/main/res/drawable-mdpi/default_cover.png similarity index 100% rename from res/drawable-mdpi/default_cover.png rename to app/src/main/res/drawable-mdpi/default_cover.png diff --git a/res/drawable-mdpi/default_cover_dark.png b/app/src/main/res/drawable-mdpi/default_cover_dark.png similarity index 100% rename from res/drawable-mdpi/default_cover_dark.png rename to app/src/main/res/drawable-mdpi/default_cover_dark.png diff --git a/res/drawable-mdpi/device_access_time.png b/app/src/main/res/drawable-mdpi/device_access_time.png similarity index 100% rename from res/drawable-mdpi/device_access_time.png rename to app/src/main/res/drawable-mdpi/device_access_time.png diff --git a/res/drawable-mdpi/device_access_time_dark.png b/app/src/main/res/drawable-mdpi/device_access_time_dark.png similarity index 100% rename from res/drawable-mdpi/device_access_time_dark.png rename to app/src/main/res/drawable-mdpi/device_access_time_dark.png diff --git a/res/drawable-mdpi/ic_action_overflow.png b/app/src/main/res/drawable-mdpi/ic_action_overflow.png similarity index 100% rename from res/drawable-mdpi/ic_action_overflow.png rename to app/src/main/res/drawable-mdpi/ic_action_overflow.png diff --git a/res/drawable-mdpi/ic_action_overflow_dark.png b/app/src/main/res/drawable-mdpi/ic_action_overflow_dark.png similarity index 100% rename from res/drawable-mdpi/ic_action_overflow_dark.png rename to app/src/main/res/drawable-mdpi/ic_action_overflow_dark.png diff --git a/res/drawable-mdpi/ic_action_pause_over_video.png b/app/src/main/res/drawable-mdpi/ic_action_pause_over_video.png similarity index 100% rename from res/drawable-mdpi/ic_action_pause_over_video.png rename to app/src/main/res/drawable-mdpi/ic_action_pause_over_video.png diff --git a/res/drawable-mdpi/ic_action_play_over_video.png b/app/src/main/res/drawable-mdpi/ic_action_play_over_video.png similarity index 100% rename from res/drawable-mdpi/ic_action_play_over_video.png rename to app/src/main/res/drawable-mdpi/ic_action_play_over_video.png diff --git a/res/drawable-mdpi/ic_drag_handle.png b/app/src/main/res/drawable-mdpi/ic_drag_handle.png similarity index 100% rename from res/drawable-mdpi/ic_drag_handle.png rename to app/src/main/res/drawable-mdpi/ic_drag_handle.png diff --git a/res/drawable-mdpi/ic_drag_handle_dark.png b/app/src/main/res/drawable-mdpi/ic_drag_handle_dark.png similarity index 100% rename from res/drawable-mdpi/ic_drag_handle_dark.png rename to app/src/main/res/drawable-mdpi/ic_drag_handle_dark.png diff --git a/res/drawable-mdpi/ic_drawer.png b/app/src/main/res/drawable-mdpi/ic_drawer.png similarity index 100% rename from res/drawable-mdpi/ic_drawer.png rename to app/src/main/res/drawable-mdpi/ic_drawer.png diff --git a/res/drawable-mdpi/ic_drawer_dark.png b/app/src/main/res/drawable-mdpi/ic_drawer_dark.png similarity index 100% rename from res/drawable-mdpi/ic_drawer_dark.png rename to app/src/main/res/drawable-mdpi/ic_drawer_dark.png diff --git a/res/drawable-mdpi/ic_launcher.png b/app/src/main/res/drawable-mdpi/ic_launcher.png similarity index 100% rename from res/drawable-mdpi/ic_launcher.png rename to app/src/main/res/drawable-mdpi/ic_launcher.png diff --git a/res/drawable-mdpi/ic_new.png b/app/src/main/res/drawable-mdpi/ic_new.png similarity index 100% rename from res/drawable-mdpi/ic_new.png rename to app/src/main/res/drawable-mdpi/ic_new.png diff --git a/res/drawable-mdpi/ic_new_dark.png b/app/src/main/res/drawable-mdpi/ic_new_dark.png similarity index 100% rename from res/drawable-mdpi/ic_new_dark.png rename to app/src/main/res/drawable-mdpi/ic_new_dark.png diff --git a/res/drawable-mdpi/ic_stat_antenna.png b/app/src/main/res/drawable-mdpi/ic_stat_antenna.png similarity index 100% rename from res/drawable-mdpi/ic_stat_antenna.png rename to app/src/main/res/drawable-mdpi/ic_stat_antenna.png diff --git a/res/drawable-mdpi/ic_stat_authentication.png b/app/src/main/res/drawable-mdpi/ic_stat_authentication.png similarity index 100% rename from res/drawable-mdpi/ic_stat_authentication.png rename to app/src/main/res/drawable-mdpi/ic_stat_authentication.png diff --git a/res/drawable-mdpi/location_web_site.png b/app/src/main/res/drawable-mdpi/location_web_site.png similarity index 100% rename from res/drawable-mdpi/location_web_site.png rename to app/src/main/res/drawable-mdpi/location_web_site.png diff --git a/res/drawable-mdpi/location_web_site_dark.png b/app/src/main/res/drawable-mdpi/location_web_site_dark.png similarity index 100% rename from res/drawable-mdpi/location_web_site_dark.png rename to app/src/main/res/drawable-mdpi/location_web_site_dark.png diff --git a/res/drawable-mdpi/navigation_accept.png b/app/src/main/res/drawable-mdpi/navigation_accept.png similarity index 100% rename from res/drawable-mdpi/navigation_accept.png rename to app/src/main/res/drawable-mdpi/navigation_accept.png diff --git a/res/drawable-mdpi/navigation_accept_dark.png b/app/src/main/res/drawable-mdpi/navigation_accept_dark.png similarity index 100% rename from res/drawable-mdpi/navigation_accept_dark.png rename to app/src/main/res/drawable-mdpi/navigation_accept_dark.png diff --git a/res/drawable-mdpi/navigation_cancel.png b/app/src/main/res/drawable-mdpi/navigation_cancel.png similarity index 100% rename from res/drawable-mdpi/navigation_cancel.png rename to app/src/main/res/drawable-mdpi/navigation_cancel.png diff --git a/res/drawable-mdpi/navigation_cancel_dark.png b/app/src/main/res/drawable-mdpi/navigation_cancel_dark.png similarity index 100% rename from res/drawable-mdpi/navigation_cancel_dark.png rename to app/src/main/res/drawable-mdpi/navigation_cancel_dark.png diff --git a/res/drawable-mdpi/navigation_chapters.png b/app/src/main/res/drawable-mdpi/navigation_chapters.png similarity index 100% rename from res/drawable-mdpi/navigation_chapters.png rename to app/src/main/res/drawable-mdpi/navigation_chapters.png diff --git a/res/drawable-mdpi/navigation_chapters_dark.png b/app/src/main/res/drawable-mdpi/navigation_chapters_dark.png similarity index 100% rename from res/drawable-mdpi/navigation_chapters_dark.png rename to app/src/main/res/drawable-mdpi/navigation_chapters_dark.png diff --git a/res/drawable-mdpi/navigation_collapse.png b/app/src/main/res/drawable-mdpi/navigation_collapse.png similarity index 100% rename from res/drawable-mdpi/navigation_collapse.png rename to app/src/main/res/drawable-mdpi/navigation_collapse.png diff --git a/res/drawable-mdpi/navigation_collapse_dark.png b/app/src/main/res/drawable-mdpi/navigation_collapse_dark.png similarity index 100% rename from res/drawable-mdpi/navigation_collapse_dark.png rename to app/src/main/res/drawable-mdpi/navigation_collapse_dark.png diff --git a/res/drawable-mdpi/navigation_expand.png b/app/src/main/res/drawable-mdpi/navigation_expand.png similarity index 100% rename from res/drawable-mdpi/navigation_expand.png rename to app/src/main/res/drawable-mdpi/navigation_expand.png diff --git a/res/drawable-mdpi/navigation_expand_dark.png b/app/src/main/res/drawable-mdpi/navigation_expand_dark.png similarity index 100% rename from res/drawable-mdpi/navigation_expand_dark.png rename to app/src/main/res/drawable-mdpi/navigation_expand_dark.png diff --git a/res/drawable-mdpi/navigation_refresh.png b/app/src/main/res/drawable-mdpi/navigation_refresh.png similarity index 100% rename from res/drawable-mdpi/navigation_refresh.png rename to app/src/main/res/drawable-mdpi/navigation_refresh.png diff --git a/res/drawable-mdpi/navigation_refresh_dark.png b/app/src/main/res/drawable-mdpi/navigation_refresh_dark.png similarity index 100% rename from res/drawable-mdpi/navigation_refresh_dark.png rename to app/src/main/res/drawable-mdpi/navigation_refresh_dark.png diff --git a/res/drawable-mdpi/navigation_shownotes.png b/app/src/main/res/drawable-mdpi/navigation_shownotes.png similarity index 100% rename from res/drawable-mdpi/navigation_shownotes.png rename to app/src/main/res/drawable-mdpi/navigation_shownotes.png diff --git a/res/drawable-mdpi/navigation_shownotes_dark.png b/app/src/main/res/drawable-mdpi/navigation_shownotes_dark.png similarity index 100% rename from res/drawable-mdpi/navigation_shownotes_dark.png rename to app/src/main/res/drawable-mdpi/navigation_shownotes_dark.png diff --git a/res/drawable-mdpi/navigation_up.png b/app/src/main/res/drawable-mdpi/navigation_up.png similarity index 100% rename from res/drawable-mdpi/navigation_up.png rename to app/src/main/res/drawable-mdpi/navigation_up.png diff --git a/res/drawable-mdpi/navigation_up_dark.png b/app/src/main/res/drawable-mdpi/navigation_up_dark.png similarity index 100% rename from res/drawable-mdpi/navigation_up_dark.png rename to app/src/main/res/drawable-mdpi/navigation_up_dark.png diff --git a/res/drawable-mdpi/social_share.png b/app/src/main/res/drawable-mdpi/social_share.png similarity index 100% rename from res/drawable-mdpi/social_share.png rename to app/src/main/res/drawable-mdpi/social_share.png diff --git a/res/drawable-mdpi/social_share_dark.png b/app/src/main/res/drawable-mdpi/social_share_dark.png similarity index 100% rename from res/drawable-mdpi/social_share_dark.png rename to app/src/main/res/drawable-mdpi/social_share_dark.png diff --git a/res/drawable-mdpi/spinner_button.9.png b/app/src/main/res/drawable-mdpi/spinner_button.9.png similarity index 100% rename from res/drawable-mdpi/spinner_button.9.png rename to app/src/main/res/drawable-mdpi/spinner_button.9.png diff --git a/res/drawable-mdpi/spinner_button_dark.9.png b/app/src/main/res/drawable-mdpi/spinner_button_dark.9.png similarity index 100% rename from res/drawable-mdpi/spinner_button_dark.9.png rename to app/src/main/res/drawable-mdpi/spinner_button_dark.9.png diff --git a/res/drawable-mdpi/stat_notify_sync.png b/app/src/main/res/drawable-mdpi/stat_notify_sync.png similarity index 100% rename from res/drawable-mdpi/stat_notify_sync.png rename to app/src/main/res/drawable-mdpi/stat_notify_sync.png diff --git a/res/drawable-mdpi/stat_notify_sync_error.png b/app/src/main/res/drawable-mdpi/stat_notify_sync_error.png similarity index 100% rename from res/drawable-mdpi/stat_notify_sync_error.png rename to app/src/main/res/drawable-mdpi/stat_notify_sync_error.png diff --git a/res/drawable-mdpi/stat_playlist.png b/app/src/main/res/drawable-mdpi/stat_playlist.png similarity index 100% rename from res/drawable-mdpi/stat_playlist.png rename to app/src/main/res/drawable-mdpi/stat_playlist.png diff --git a/res/drawable-mdpi/stat_playlist_dark.png b/app/src/main/res/drawable-mdpi/stat_playlist_dark.png similarity index 100% rename from res/drawable-mdpi/stat_playlist_dark.png rename to app/src/main/res/drawable-mdpi/stat_playlist_dark.png diff --git a/res/drawable-mdpi/type_audio.png b/app/src/main/res/drawable-mdpi/type_audio.png similarity index 100% rename from res/drawable-mdpi/type_audio.png rename to app/src/main/res/drawable-mdpi/type_audio.png diff --git a/res/drawable-mdpi/type_audio_dark.png b/app/src/main/res/drawable-mdpi/type_audio_dark.png similarity index 100% rename from res/drawable-mdpi/type_audio_dark.png rename to app/src/main/res/drawable-mdpi/type_audio_dark.png diff --git a/res/drawable-mdpi/type_video.png b/app/src/main/res/drawable-mdpi/type_video.png similarity index 100% rename from res/drawable-mdpi/type_video.png rename to app/src/main/res/drawable-mdpi/type_video.png diff --git a/res/drawable-mdpi/type_video_dark.png b/app/src/main/res/drawable-mdpi/type_video_dark.png similarity index 100% rename from res/drawable-mdpi/type_video_dark.png rename to app/src/main/res/drawable-mdpi/type_video_dark.png diff --git a/res/drawable-xhdpi-v11/ic_stat_antenna.png b/app/src/main/res/drawable-xhdpi-v11/ic_stat_antenna.png similarity index 100% rename from res/drawable-xhdpi-v11/ic_stat_antenna.png rename to app/src/main/res/drawable-xhdpi-v11/ic_stat_antenna.png diff --git a/res/drawable-xhdpi-v11/ic_stat_authentication.png b/app/src/main/res/drawable-xhdpi-v11/ic_stat_authentication.png similarity index 100% rename from res/drawable-xhdpi-v11/ic_stat_authentication.png rename to app/src/main/res/drawable-xhdpi-v11/ic_stat_authentication.png diff --git a/res/drawable-xhdpi-v11/stat_notify_sync.png b/app/src/main/res/drawable-xhdpi-v11/stat_notify_sync.png similarity index 100% rename from res/drawable-xhdpi-v11/stat_notify_sync.png rename to app/src/main/res/drawable-xhdpi-v11/stat_notify_sync.png diff --git a/res/drawable-xhdpi-v11/stat_notify_sync_error.png b/app/src/main/res/drawable-xhdpi-v11/stat_notify_sync_error.png similarity index 100% rename from res/drawable-xhdpi-v11/stat_notify_sync_error.png rename to app/src/main/res/drawable-xhdpi-v11/stat_notify_sync_error.png diff --git a/res/drawable-xhdpi/action_about.png b/app/src/main/res/drawable-xhdpi/action_about.png similarity index 100% rename from res/drawable-xhdpi/action_about.png rename to app/src/main/res/drawable-xhdpi/action_about.png diff --git a/res/drawable-xhdpi/action_about_dark.png b/app/src/main/res/drawable-xhdpi/action_about_dark.png similarity index 100% rename from res/drawable-xhdpi/action_about_dark.png rename to app/src/main/res/drawable-xhdpi/action_about_dark.png diff --git a/res/drawable-xhdpi/action_search.png b/app/src/main/res/drawable-xhdpi/action_search.png similarity index 100% rename from res/drawable-xhdpi/action_search.png rename to app/src/main/res/drawable-xhdpi/action_search.png diff --git a/res/drawable-xhdpi/action_search_dark.png b/app/src/main/res/drawable-xhdpi/action_search_dark.png similarity index 100% rename from res/drawable-xhdpi/action_search_dark.png rename to app/src/main/res/drawable-xhdpi/action_search_dark.png diff --git a/res/drawable-xhdpi/action_settings.png b/app/src/main/res/drawable-xhdpi/action_settings.png similarity index 100% rename from res/drawable-xhdpi/action_settings.png rename to app/src/main/res/drawable-xhdpi/action_settings.png diff --git a/res/drawable-xhdpi/action_settings_dark.png b/app/src/main/res/drawable-xhdpi/action_settings_dark.png similarity index 100% rename from res/drawable-xhdpi/action_settings_dark.png rename to app/src/main/res/drawable-xhdpi/action_settings_dark.png diff --git a/res/drawable-xhdpi/action_stream.png b/app/src/main/res/drawable-xhdpi/action_stream.png similarity index 100% rename from res/drawable-xhdpi/action_stream.png rename to app/src/main/res/drawable-xhdpi/action_stream.png diff --git a/res/drawable-xhdpi/action_stream_dark.png b/app/src/main/res/drawable-xhdpi/action_stream_dark.png similarity index 100% rename from res/drawable-xhdpi/action_stream_dark.png rename to app/src/main/res/drawable-xhdpi/action_stream_dark.png diff --git a/res/drawable-xhdpi/av_download.png b/app/src/main/res/drawable-xhdpi/av_download.png similarity index 100% rename from res/drawable-xhdpi/av_download.png rename to app/src/main/res/drawable-xhdpi/av_download.png diff --git a/res/drawable-xhdpi/av_download_dark.png b/app/src/main/res/drawable-xhdpi/av_download_dark.png similarity index 100% rename from res/drawable-xhdpi/av_download_dark.png rename to app/src/main/res/drawable-xhdpi/av_download_dark.png diff --git a/res/drawable-xhdpi/av_fast_forward.png b/app/src/main/res/drawable-xhdpi/av_fast_forward.png similarity index 100% rename from res/drawable-xhdpi/av_fast_forward.png rename to app/src/main/res/drawable-xhdpi/av_fast_forward.png diff --git a/res/drawable-xhdpi/av_fast_forward_dark.png b/app/src/main/res/drawable-xhdpi/av_fast_forward_dark.png similarity index 100% rename from res/drawable-xhdpi/av_fast_forward_dark.png rename to app/src/main/res/drawable-xhdpi/av_fast_forward_dark.png diff --git a/res/drawable-xhdpi/av_pause.png b/app/src/main/res/drawable-xhdpi/av_pause.png similarity index 100% rename from res/drawable-xhdpi/av_pause.png rename to app/src/main/res/drawable-xhdpi/av_pause.png diff --git a/res/drawable-xhdpi/av_pause_dark.png b/app/src/main/res/drawable-xhdpi/av_pause_dark.png similarity index 100% rename from res/drawable-xhdpi/av_pause_dark.png rename to app/src/main/res/drawable-xhdpi/av_pause_dark.png diff --git a/res/drawable-xhdpi/av_play.png b/app/src/main/res/drawable-xhdpi/av_play.png similarity index 100% rename from res/drawable-xhdpi/av_play.png rename to app/src/main/res/drawable-xhdpi/av_play.png diff --git a/res/drawable-xhdpi/av_play_dark.png b/app/src/main/res/drawable-xhdpi/av_play_dark.png similarity index 100% rename from res/drawable-xhdpi/av_play_dark.png rename to app/src/main/res/drawable-xhdpi/av_play_dark.png diff --git a/res/drawable-xhdpi/av_rewind.png b/app/src/main/res/drawable-xhdpi/av_rewind.png similarity index 100% rename from res/drawable-xhdpi/av_rewind.png rename to app/src/main/res/drawable-xhdpi/av_rewind.png diff --git a/res/drawable-xhdpi/av_rewind_dark.png b/app/src/main/res/drawable-xhdpi/av_rewind_dark.png similarity index 100% rename from res/drawable-xhdpi/av_rewind_dark.png rename to app/src/main/res/drawable-xhdpi/av_rewind_dark.png diff --git a/res/drawable-xhdpi/content_discard.png b/app/src/main/res/drawable-xhdpi/content_discard.png similarity index 100% rename from res/drawable-xhdpi/content_discard.png rename to app/src/main/res/drawable-xhdpi/content_discard.png diff --git a/res/drawable-xhdpi/content_discard_dark.png b/app/src/main/res/drawable-xhdpi/content_discard_dark.png similarity index 100% rename from res/drawable-xhdpi/content_discard_dark.png rename to app/src/main/res/drawable-xhdpi/content_discard_dark.png diff --git a/res/drawable-xhdpi/content_new.png b/app/src/main/res/drawable-xhdpi/content_new.png similarity index 100% rename from res/drawable-xhdpi/content_new.png rename to app/src/main/res/drawable-xhdpi/content_new.png diff --git a/res/drawable-xhdpi/content_new_dark.png b/app/src/main/res/drawable-xhdpi/content_new_dark.png similarity index 100% rename from res/drawable-xhdpi/content_new_dark.png rename to app/src/main/res/drawable-xhdpi/content_new_dark.png diff --git a/res/drawable-xhdpi/content_remove.png b/app/src/main/res/drawable-xhdpi/content_remove.png similarity index 100% rename from res/drawable-xhdpi/content_remove.png rename to app/src/main/res/drawable-xhdpi/content_remove.png diff --git a/res/drawable-xhdpi/content_remove_dark.png b/app/src/main/res/drawable-xhdpi/content_remove_dark.png similarity index 100% rename from res/drawable-xhdpi/content_remove_dark.png rename to app/src/main/res/drawable-xhdpi/content_remove_dark.png diff --git a/res/drawable-xhdpi/default_cover.png b/app/src/main/res/drawable-xhdpi/default_cover.png similarity index 100% rename from res/drawable-xhdpi/default_cover.png rename to app/src/main/res/drawable-xhdpi/default_cover.png diff --git a/res/drawable-xhdpi/default_cover_dark.png b/app/src/main/res/drawable-xhdpi/default_cover_dark.png similarity index 100% rename from res/drawable-xhdpi/default_cover_dark.png rename to app/src/main/res/drawable-xhdpi/default_cover_dark.png diff --git a/res/drawable-xhdpi/device_access_time.png b/app/src/main/res/drawable-xhdpi/device_access_time.png similarity index 100% rename from res/drawable-xhdpi/device_access_time.png rename to app/src/main/res/drawable-xhdpi/device_access_time.png diff --git a/res/drawable-xhdpi/device_access_time_dark.png b/app/src/main/res/drawable-xhdpi/device_access_time_dark.png similarity index 100% rename from res/drawable-xhdpi/device_access_time_dark.png rename to app/src/main/res/drawable-xhdpi/device_access_time_dark.png diff --git a/res/drawable-xhdpi/ic_action_overflow.png b/app/src/main/res/drawable-xhdpi/ic_action_overflow.png similarity index 100% rename from res/drawable-xhdpi/ic_action_overflow.png rename to app/src/main/res/drawable-xhdpi/ic_action_overflow.png diff --git a/res/drawable-xhdpi/ic_action_overflow_dark.png b/app/src/main/res/drawable-xhdpi/ic_action_overflow_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_action_overflow_dark.png rename to app/src/main/res/drawable-xhdpi/ic_action_overflow_dark.png diff --git a/res/drawable-xhdpi/ic_action_pause_over_video.png b/app/src/main/res/drawable-xhdpi/ic_action_pause_over_video.png similarity index 100% rename from res/drawable-xhdpi/ic_action_pause_over_video.png rename to app/src/main/res/drawable-xhdpi/ic_action_pause_over_video.png diff --git a/res/drawable-xhdpi/ic_action_play_over_video.png b/app/src/main/res/drawable-xhdpi/ic_action_play_over_video.png similarity index 100% rename from res/drawable-xhdpi/ic_action_play_over_video.png rename to app/src/main/res/drawable-xhdpi/ic_action_play_over_video.png diff --git a/res/drawable-xhdpi/ic_drag_handle.png b/app/src/main/res/drawable-xhdpi/ic_drag_handle.png similarity index 100% rename from res/drawable-xhdpi/ic_drag_handle.png rename to app/src/main/res/drawable-xhdpi/ic_drag_handle.png diff --git a/res/drawable-xhdpi/ic_drag_handle_dark.png b/app/src/main/res/drawable-xhdpi/ic_drag_handle_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_drag_handle_dark.png rename to app/src/main/res/drawable-xhdpi/ic_drag_handle_dark.png diff --git a/res/drawable-xhdpi/ic_drawer.png b/app/src/main/res/drawable-xhdpi/ic_drawer.png similarity index 100% rename from res/drawable-xhdpi/ic_drawer.png rename to app/src/main/res/drawable-xhdpi/ic_drawer.png diff --git a/res/drawable-xhdpi/ic_drawer_dark.png b/app/src/main/res/drawable-xhdpi/ic_drawer_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_drawer_dark.png rename to app/src/main/res/drawable-xhdpi/ic_drawer_dark.png diff --git a/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png similarity index 100% rename from res/drawable-xhdpi/ic_launcher.png rename to app/src/main/res/drawable-xhdpi/ic_launcher.png diff --git a/res/drawable-xhdpi/ic_new.png b/app/src/main/res/drawable-xhdpi/ic_new.png similarity index 100% rename from res/drawable-xhdpi/ic_new.png rename to app/src/main/res/drawable-xhdpi/ic_new.png diff --git a/res/drawable-xhdpi/ic_new_dark.png b/app/src/main/res/drawable-xhdpi/ic_new_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_new_dark.png rename to app/src/main/res/drawable-xhdpi/ic_new_dark.png diff --git a/res/drawable-xhdpi/ic_stat_antenna.png b/app/src/main/res/drawable-xhdpi/ic_stat_antenna.png similarity index 100% rename from res/drawable-xhdpi/ic_stat_antenna.png rename to app/src/main/res/drawable-xhdpi/ic_stat_antenna.png diff --git a/res/drawable-xhdpi/ic_stat_authentication.png b/app/src/main/res/drawable-xhdpi/ic_stat_authentication.png similarity index 100% rename from res/drawable-xhdpi/ic_stat_authentication.png rename to app/src/main/res/drawable-xhdpi/ic_stat_authentication.png diff --git a/res/drawable-xhdpi/ic_undobar_undo.png b/app/src/main/res/drawable-xhdpi/ic_undobar_undo.png similarity index 100% rename from res/drawable-xhdpi/ic_undobar_undo.png rename to app/src/main/res/drawable-xhdpi/ic_undobar_undo.png diff --git a/res/drawable-xhdpi/location_web_site.png b/app/src/main/res/drawable-xhdpi/location_web_site.png similarity index 100% rename from res/drawable-xhdpi/location_web_site.png rename to app/src/main/res/drawable-xhdpi/location_web_site.png diff --git a/res/drawable-xhdpi/location_web_site_dark.png b/app/src/main/res/drawable-xhdpi/location_web_site_dark.png similarity index 100% rename from res/drawable-xhdpi/location_web_site_dark.png rename to app/src/main/res/drawable-xhdpi/location_web_site_dark.png diff --git a/res/drawable-xhdpi/navigation_accept.png b/app/src/main/res/drawable-xhdpi/navigation_accept.png similarity index 100% rename from res/drawable-xhdpi/navigation_accept.png rename to app/src/main/res/drawable-xhdpi/navigation_accept.png diff --git a/res/drawable-xhdpi/navigation_accept_dark.png b/app/src/main/res/drawable-xhdpi/navigation_accept_dark.png similarity index 100% rename from res/drawable-xhdpi/navigation_accept_dark.png rename to app/src/main/res/drawable-xhdpi/navigation_accept_dark.png diff --git a/res/drawable-xhdpi/navigation_cancel.png b/app/src/main/res/drawable-xhdpi/navigation_cancel.png similarity index 100% rename from res/drawable-xhdpi/navigation_cancel.png rename to app/src/main/res/drawable-xhdpi/navigation_cancel.png diff --git a/res/drawable-xhdpi/navigation_cancel_dark.png b/app/src/main/res/drawable-xhdpi/navigation_cancel_dark.png similarity index 100% rename from res/drawable-xhdpi/navigation_cancel_dark.png rename to app/src/main/res/drawable-xhdpi/navigation_cancel_dark.png diff --git a/res/drawable-xhdpi/navigation_chapters.png b/app/src/main/res/drawable-xhdpi/navigation_chapters.png similarity index 100% rename from res/drawable-xhdpi/navigation_chapters.png rename to app/src/main/res/drawable-xhdpi/navigation_chapters.png diff --git a/res/drawable-xhdpi/navigation_chapters_dark.png b/app/src/main/res/drawable-xhdpi/navigation_chapters_dark.png similarity index 100% rename from res/drawable-xhdpi/navigation_chapters_dark.png rename to app/src/main/res/drawable-xhdpi/navigation_chapters_dark.png diff --git a/res/drawable-xhdpi/navigation_collapse.png b/app/src/main/res/drawable-xhdpi/navigation_collapse.png similarity index 100% rename from res/drawable-xhdpi/navigation_collapse.png rename to app/src/main/res/drawable-xhdpi/navigation_collapse.png diff --git a/res/drawable-xhdpi/navigation_collapse_dark.png b/app/src/main/res/drawable-xhdpi/navigation_collapse_dark.png similarity index 100% rename from res/drawable-xhdpi/navigation_collapse_dark.png rename to app/src/main/res/drawable-xhdpi/navigation_collapse_dark.png diff --git a/res/drawable-xhdpi/navigation_expand.png b/app/src/main/res/drawable-xhdpi/navigation_expand.png similarity index 100% rename from res/drawable-xhdpi/navigation_expand.png rename to app/src/main/res/drawable-xhdpi/navigation_expand.png diff --git a/res/drawable-xhdpi/navigation_expand_dark.png b/app/src/main/res/drawable-xhdpi/navigation_expand_dark.png similarity index 100% rename from res/drawable-xhdpi/navigation_expand_dark.png rename to app/src/main/res/drawable-xhdpi/navigation_expand_dark.png diff --git a/res/drawable-xhdpi/navigation_refresh.png b/app/src/main/res/drawable-xhdpi/navigation_refresh.png similarity index 100% rename from res/drawable-xhdpi/navigation_refresh.png rename to app/src/main/res/drawable-xhdpi/navigation_refresh.png diff --git a/res/drawable-xhdpi/navigation_refresh_dark.png b/app/src/main/res/drawable-xhdpi/navigation_refresh_dark.png similarity index 100% rename from res/drawable-xhdpi/navigation_refresh_dark.png rename to app/src/main/res/drawable-xhdpi/navigation_refresh_dark.png diff --git a/res/drawable-xhdpi/navigation_shownotes.png b/app/src/main/res/drawable-xhdpi/navigation_shownotes.png similarity index 100% rename from res/drawable-xhdpi/navigation_shownotes.png rename to app/src/main/res/drawable-xhdpi/navigation_shownotes.png diff --git a/res/drawable-xhdpi/navigation_shownotes_dark.png b/app/src/main/res/drawable-xhdpi/navigation_shownotes_dark.png similarity index 100% rename from res/drawable-xhdpi/navigation_shownotes_dark.png rename to app/src/main/res/drawable-xhdpi/navigation_shownotes_dark.png diff --git a/res/drawable-xhdpi/navigation_up.png b/app/src/main/res/drawable-xhdpi/navigation_up.png similarity index 100% rename from res/drawable-xhdpi/navigation_up.png rename to app/src/main/res/drawable-xhdpi/navigation_up.png diff --git a/res/drawable-xhdpi/navigation_up_dark.png b/app/src/main/res/drawable-xhdpi/navigation_up_dark.png similarity index 100% rename from res/drawable-xhdpi/navigation_up_dark.png rename to app/src/main/res/drawable-xhdpi/navigation_up_dark.png diff --git a/res/drawable-xhdpi/social_share.png b/app/src/main/res/drawable-xhdpi/social_share.png similarity index 100% rename from res/drawable-xhdpi/social_share.png rename to app/src/main/res/drawable-xhdpi/social_share.png diff --git a/res/drawable-xhdpi/social_share_dark.png b/app/src/main/res/drawable-xhdpi/social_share_dark.png similarity index 100% rename from res/drawable-xhdpi/social_share_dark.png rename to app/src/main/res/drawable-xhdpi/social_share_dark.png diff --git a/res/drawable-xhdpi/spinner_button.9.png b/app/src/main/res/drawable-xhdpi/spinner_button.9.png similarity index 100% rename from res/drawable-xhdpi/spinner_button.9.png rename to app/src/main/res/drawable-xhdpi/spinner_button.9.png diff --git a/res/drawable-xhdpi/spinner_button_dark.9.png b/app/src/main/res/drawable-xhdpi/spinner_button_dark.9.png similarity index 100% rename from res/drawable-xhdpi/spinner_button_dark.9.png rename to app/src/main/res/drawable-xhdpi/spinner_button_dark.9.png diff --git a/res/drawable-xhdpi/stat_playlist.png b/app/src/main/res/drawable-xhdpi/stat_playlist.png similarity index 100% rename from res/drawable-xhdpi/stat_playlist.png rename to app/src/main/res/drawable-xhdpi/stat_playlist.png diff --git a/res/drawable-xhdpi/stat_playlist_dark.png b/app/src/main/res/drawable-xhdpi/stat_playlist_dark.png similarity index 100% rename from res/drawable-xhdpi/stat_playlist_dark.png rename to app/src/main/res/drawable-xhdpi/stat_playlist_dark.png diff --git a/res/drawable-xhdpi/type_audio.png b/app/src/main/res/drawable-xhdpi/type_audio.png similarity index 100% rename from res/drawable-xhdpi/type_audio.png rename to app/src/main/res/drawable-xhdpi/type_audio.png diff --git a/res/drawable-xhdpi/type_audio_dark.png b/app/src/main/res/drawable-xhdpi/type_audio_dark.png similarity index 100% rename from res/drawable-xhdpi/type_audio_dark.png rename to app/src/main/res/drawable-xhdpi/type_audio_dark.png diff --git a/res/drawable-xhdpi/type_video.png b/app/src/main/res/drawable-xhdpi/type_video.png similarity index 100% rename from res/drawable-xhdpi/type_video.png rename to app/src/main/res/drawable-xhdpi/type_video.png diff --git a/res/drawable-xhdpi/type_video_dark.png b/app/src/main/res/drawable-xhdpi/type_video_dark.png similarity index 100% rename from res/drawable-xhdpi/type_video_dark.png rename to app/src/main/res/drawable-xhdpi/type_video_dark.png diff --git a/res/drawable-xhdpi/undobar.9.png b/app/src/main/res/drawable-xhdpi/undobar.9.png similarity index 100% rename from res/drawable-xhdpi/undobar.9.png rename to app/src/main/res/drawable-xhdpi/undobar.9.png diff --git a/res/drawable-xhdpi/undobar_button_focused.9.png b/app/src/main/res/drawable-xhdpi/undobar_button_focused.9.png similarity index 100% rename from res/drawable-xhdpi/undobar_button_focused.9.png rename to app/src/main/res/drawable-xhdpi/undobar_button_focused.9.png diff --git a/res/drawable-xhdpi/undobar_button_pressed.9.png b/app/src/main/res/drawable-xhdpi/undobar_button_pressed.9.png similarity index 100% rename from res/drawable-xhdpi/undobar_button_pressed.9.png rename to app/src/main/res/drawable-xhdpi/undobar_button_pressed.9.png diff --git a/res/drawable-xhdpi/undobar_divider.9.png b/app/src/main/res/drawable-xhdpi/undobar_divider.9.png similarity index 100% rename from res/drawable-xhdpi/undobar_divider.9.png rename to app/src/main/res/drawable-xhdpi/undobar_divider.9.png diff --git a/res/drawable-xxhdpi/ic_action_overflow.png b/app/src/main/res/drawable-xxhdpi/ic_action_overflow.png similarity index 100% rename from res/drawable-xxhdpi/ic_action_overflow.png rename to app/src/main/res/drawable-xxhdpi/ic_action_overflow.png diff --git a/res/drawable-xxhdpi/ic_action_overflow_dark.png b/app/src/main/res/drawable-xxhdpi/ic_action_overflow_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_action_overflow_dark.png rename to app/src/main/res/drawable-xxhdpi/ic_action_overflow_dark.png diff --git a/res/drawable-xxhdpi/ic_action_pause_over_video.png b/app/src/main/res/drawable-xxhdpi/ic_action_pause_over_video.png similarity index 100% rename from res/drawable-xxhdpi/ic_action_pause_over_video.png rename to app/src/main/res/drawable-xxhdpi/ic_action_pause_over_video.png diff --git a/res/drawable-xxhdpi/ic_action_play_over_video.png b/app/src/main/res/drawable-xxhdpi/ic_action_play_over_video.png similarity index 100% rename from res/drawable-xxhdpi/ic_action_play_over_video.png rename to app/src/main/res/drawable-xxhdpi/ic_action_play_over_video.png diff --git a/res/drawable-xxhdpi/ic_drag_handle.png b/app/src/main/res/drawable-xxhdpi/ic_drag_handle.png similarity index 100% rename from res/drawable-xxhdpi/ic_drag_handle.png rename to app/src/main/res/drawable-xxhdpi/ic_drag_handle.png diff --git a/res/drawable-xxhdpi/ic_drag_handle_dark.png b/app/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_drag_handle_dark.png rename to app/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.png diff --git a/res/drawable-xxhdpi/ic_drawer.png b/app/src/main/res/drawable-xxhdpi/ic_drawer.png similarity index 100% rename from res/drawable-xxhdpi/ic_drawer.png rename to app/src/main/res/drawable-xxhdpi/ic_drawer.png diff --git a/res/drawable-xxhdpi/ic_drawer_dark.png b/app/src/main/res/drawable-xxhdpi/ic_drawer_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_drawer_dark.png rename to app/src/main/res/drawable-xxhdpi/ic_drawer_dark.png diff --git a/res/drawable-xxhdpi/ic_launcher.png b/app/src/main/res/drawable-xxhdpi/ic_launcher.png similarity index 100% rename from res/drawable-xxhdpi/ic_launcher.png rename to app/src/main/res/drawable-xxhdpi/ic_launcher.png diff --git a/res/drawable-xxhdpi/ic_new.png b/app/src/main/res/drawable-xxhdpi/ic_new.png similarity index 100% rename from res/drawable-xxhdpi/ic_new.png rename to app/src/main/res/drawable-xxhdpi/ic_new.png diff --git a/res/drawable-xxhdpi/ic_new_dark.png b/app/src/main/res/drawable-xxhdpi/ic_new_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_new_dark.png rename to app/src/main/res/drawable-xxhdpi/ic_new_dark.png diff --git a/res/drawable-xxhdpi/ic_stat_authentication.png b/app/src/main/res/drawable-xxhdpi/ic_stat_authentication.png similarity index 100% rename from res/drawable-xxhdpi/ic_stat_authentication.png rename to app/src/main/res/drawable-xxhdpi/ic_stat_authentication.png diff --git a/res/drawable/badge.xml b/app/src/main/res/drawable/badge.xml similarity index 100% rename from res/drawable/badge.xml rename to app/src/main/res/drawable/badge.xml diff --git a/res/drawable/borderless_button.xml b/app/src/main/res/drawable/borderless_button.xml similarity index 100% rename from res/drawable/borderless_button.xml rename to app/src/main/res/drawable/borderless_button.xml diff --git a/res/drawable/borderless_button_dark.xml b/app/src/main/res/drawable/borderless_button_dark.xml similarity index 100% rename from res/drawable/borderless_button_dark.xml rename to app/src/main/res/drawable/borderless_button_dark.xml diff --git a/res/drawable/horizontal_divider.9.png b/app/src/main/res/drawable/horizontal_divider.9.png similarity index 100% rename from res/drawable/horizontal_divider.9.png rename to app/src/main/res/drawable/horizontal_divider.9.png diff --git a/res/drawable/overlay_button_circle_background.xml b/app/src/main/res/drawable/overlay_button_circle_background.xml similarity index 100% rename from res/drawable/overlay_button_circle_background.xml rename to app/src/main/res/drawable/overlay_button_circle_background.xml diff --git a/res/drawable/overlay_drawable.xml b/app/src/main/res/drawable/overlay_drawable.xml similarity index 100% rename from res/drawable/overlay_drawable.xml rename to app/src/main/res/drawable/overlay_drawable.xml diff --git a/res/drawable/overlay_drawable_dark.xml b/app/src/main/res/drawable/overlay_drawable_dark.xml similarity index 100% rename from res/drawable/overlay_drawable_dark.xml rename to app/src/main/res/drawable/overlay_drawable_dark.xml diff --git a/res/drawable/type_audio.png b/app/src/main/res/drawable/type_audio.png similarity index 100% rename from res/drawable/type_audio.png rename to app/src/main/res/drawable/type_audio.png diff --git a/res/drawable/type_video.png b/app/src/main/res/drawable/type_video.png similarity index 100% rename from res/drawable/type_video.png rename to app/src/main/res/drawable/type_video.png diff --git a/res/drawable/undobar_button.xml b/app/src/main/res/drawable/undobar_button.xml similarity index 100% rename from res/drawable/undobar_button.xml rename to app/src/main/res/drawable/undobar_button.xml diff --git a/res/drawable/vertical_divider.9.png b/app/src/main/res/drawable/vertical_divider.9.png similarity index 100% rename from res/drawable/vertical_divider.9.png rename to app/src/main/res/drawable/vertical_divider.9.png diff --git a/res/drawable/white_circle.xml b/app/src/main/res/drawable/white_circle.xml similarity index 100% rename from res/drawable/white_circle.xml rename to app/src/main/res/drawable/white_circle.xml diff --git a/res/layout-land/audioplayer_activity.xml b/app/src/main/res/layout-land/audioplayer_activity.xml similarity index 100% rename from res/layout-land/audioplayer_activity.xml rename to app/src/main/res/layout-land/audioplayer_activity.xml diff --git a/res/layout-land/videoplayer_activity.xml b/app/src/main/res/layout-land/videoplayer_activity.xml similarity index 100% rename from res/layout-land/videoplayer_activity.xml rename to app/src/main/res/layout-land/videoplayer_activity.xml diff --git a/res/layout-v14/authentication_dialog.xml b/app/src/main/res/layout-v14/authentication_dialog.xml similarity index 100% rename from res/layout-v14/authentication_dialog.xml rename to app/src/main/res/layout-v14/authentication_dialog.xml diff --git a/res/layout-v14/directory_chooser.xml b/app/src/main/res/layout-v14/directory_chooser.xml similarity index 100% rename from res/layout-v14/directory_chooser.xml rename to app/src/main/res/layout-v14/directory_chooser.xml diff --git a/res/layout-v14/download_authentication_activity.xml b/app/src/main/res/layout-v14/download_authentication_activity.xml similarity index 100% rename from res/layout-v14/download_authentication_activity.xml rename to app/src/main/res/layout-v14/download_authentication_activity.xml diff --git a/res/layout-v14/opml_selection.xml b/app/src/main/res/layout-v14/opml_selection.xml similarity index 100% rename from res/layout-v14/opml_selection.xml rename to app/src/main/res/layout-v14/opml_selection.xml diff --git a/res/layout-v14/time_dialog.xml b/app/src/main/res/layout-v14/time_dialog.xml similarity index 100% rename from res/layout-v14/time_dialog.xml rename to app/src/main/res/layout-v14/time_dialog.xml diff --git a/res/layout/about.xml b/app/src/main/res/layout/about.xml similarity index 100% rename from res/layout/about.xml rename to app/src/main/res/layout/about.xml diff --git a/res/layout/addfeed.xml b/app/src/main/res/layout/addfeed.xml similarity index 100% rename from res/layout/addfeed.xml rename to app/src/main/res/layout/addfeed.xml diff --git a/res/layout/audioplayer_activity.xml b/app/src/main/res/layout/audioplayer_activity.xml similarity index 100% rename from res/layout/audioplayer_activity.xml rename to app/src/main/res/layout/audioplayer_activity.xml diff --git a/res/layout/authentication_dialog.xml b/app/src/main/res/layout/authentication_dialog.xml similarity index 100% rename from res/layout/authentication_dialog.xml rename to app/src/main/res/layout/authentication_dialog.xml diff --git a/res/layout/autoflattr_preference_dialog.xml b/app/src/main/res/layout/autoflattr_preference_dialog.xml similarity index 100% rename from res/layout/autoflattr_preference_dialog.xml rename to app/src/main/res/layout/autoflattr_preference_dialog.xml diff --git a/res/layout/cover_fragment.xml b/app/src/main/res/layout/cover_fragment.xml similarity index 100% rename from res/layout/cover_fragment.xml rename to app/src/main/res/layout/cover_fragment.xml diff --git a/res/layout/directory_chooser.xml b/app/src/main/res/layout/directory_chooser.xml similarity index 100% rename from res/layout/directory_chooser.xml rename to app/src/main/res/layout/directory_chooser.xml diff --git a/res/layout/download_authentication_activity.xml b/app/src/main/res/layout/download_authentication_activity.xml similarity index 100% rename from res/layout/download_authentication_activity.xml rename to app/src/main/res/layout/download_authentication_activity.xml diff --git a/res/layout/downloaded_episodeslist_item.xml b/app/src/main/res/layout/downloaded_episodeslist_item.xml similarity index 100% rename from res/layout/downloaded_episodeslist_item.xml rename to app/src/main/res/layout/downloaded_episodeslist_item.xml diff --git a/res/layout/downloadlist_item.xml b/app/src/main/res/layout/downloadlist_item.xml similarity index 100% rename from res/layout/downloadlist_item.xml rename to app/src/main/res/layout/downloadlist_item.xml diff --git a/res/layout/downloadlog_item.xml b/app/src/main/res/layout/downloadlog_item.xml similarity index 100% rename from res/layout/downloadlog_item.xml rename to app/src/main/res/layout/downloadlog_item.xml diff --git a/res/layout/ellipsize_start_listitem.xml b/app/src/main/res/layout/ellipsize_start_listitem.xml similarity index 100% rename from res/layout/ellipsize_start_listitem.xml rename to app/src/main/res/layout/ellipsize_start_listitem.xml diff --git a/res/layout/external_itemlist_item.xml b/app/src/main/res/layout/external_itemlist_item.xml similarity index 100% rename from res/layout/external_itemlist_item.xml rename to app/src/main/res/layout/external_itemlist_item.xml diff --git a/res/layout/external_player_fragment.xml b/app/src/main/res/layout/external_player_fragment.xml similarity index 100% rename from res/layout/external_player_fragment.xml rename to app/src/main/res/layout/external_player_fragment.xml diff --git a/res/layout/feedinfo.xml b/app/src/main/res/layout/feedinfo.xml similarity index 100% rename from res/layout/feedinfo.xml rename to app/src/main/res/layout/feedinfo.xml diff --git a/res/layout/feeditem_dialog.xml b/app/src/main/res/layout/feeditem_dialog.xml similarity index 100% rename from res/layout/feeditem_dialog.xml rename to app/src/main/res/layout/feeditem_dialog.xml diff --git a/res/layout/feeditemlist_header.xml b/app/src/main/res/layout/feeditemlist_header.xml similarity index 100% rename from res/layout/feeditemlist_header.xml rename to app/src/main/res/layout/feeditemlist_header.xml diff --git a/res/layout/feeditemlist_item.xml b/app/src/main/res/layout/feeditemlist_item.xml similarity index 100% rename from res/layout/feeditemlist_item.xml rename to app/src/main/res/layout/feeditemlist_item.xml diff --git a/res/layout/flattr_auth.xml b/app/src/main/res/layout/flattr_auth.xml similarity index 100% rename from res/layout/flattr_auth.xml rename to app/src/main/res/layout/flattr_auth.xml diff --git a/res/layout/gpodnet_podcast_list.xml b/app/src/main/res/layout/gpodnet_podcast_list.xml similarity index 100% rename from res/layout/gpodnet_podcast_list.xml rename to app/src/main/res/layout/gpodnet_podcast_list.xml diff --git a/res/layout/gpodnet_podcast_listitem.xml b/app/src/main/res/layout/gpodnet_podcast_listitem.xml similarity index 100% rename from res/layout/gpodnet_podcast_listitem.xml rename to app/src/main/res/layout/gpodnet_podcast_listitem.xml diff --git a/res/layout/gpodnetauth_activity.xml b/app/src/main/res/layout/gpodnetauth_activity.xml similarity index 100% rename from res/layout/gpodnetauth_activity.xml rename to app/src/main/res/layout/gpodnetauth_activity.xml diff --git a/res/layout/gpodnetauth_credentials.xml b/app/src/main/res/layout/gpodnetauth_credentials.xml similarity index 100% rename from res/layout/gpodnetauth_credentials.xml rename to app/src/main/res/layout/gpodnetauth_credentials.xml diff --git a/res/layout/gpodnetauth_device.xml b/app/src/main/res/layout/gpodnetauth_device.xml similarity index 100% rename from res/layout/gpodnetauth_device.xml rename to app/src/main/res/layout/gpodnetauth_device.xml diff --git a/res/layout/gpodnetauth_finish.xml b/app/src/main/res/layout/gpodnetauth_finish.xml similarity index 100% rename from res/layout/gpodnetauth_finish.xml rename to app/src/main/res/layout/gpodnetauth_finish.xml diff --git a/res/layout/itemdescription_listitem.xml b/app/src/main/res/layout/itemdescription_listitem.xml similarity index 100% rename from res/layout/itemdescription_listitem.xml rename to app/src/main/res/layout/itemdescription_listitem.xml diff --git a/res/layout/listview_activity.xml b/app/src/main/res/layout/listview_activity.xml similarity index 100% rename from res/layout/listview_activity.xml rename to app/src/main/res/layout/listview_activity.xml diff --git a/res/layout/main.xml b/app/src/main/res/layout/main.xml similarity index 100% rename from res/layout/main.xml rename to app/src/main/res/layout/main.xml diff --git a/res/layout/nav_feedlistitem.xml b/app/src/main/res/layout/nav_feedlistitem.xml similarity index 100% rename from res/layout/nav_feedlistitem.xml rename to app/src/main/res/layout/nav_feedlistitem.xml diff --git a/res/layout/nav_listitem.xml b/app/src/main/res/layout/nav_listitem.xml similarity index 100% rename from res/layout/nav_listitem.xml rename to app/src/main/res/layout/nav_listitem.xml diff --git a/res/layout/nav_section_item.xml b/app/src/main/res/layout/nav_section_item.xml similarity index 100% rename from res/layout/nav_section_item.xml rename to app/src/main/res/layout/nav_section_item.xml diff --git a/res/layout/new_episodes_fragment.xml b/app/src/main/res/layout/new_episodes_fragment.xml similarity index 100% rename from res/layout/new_episodes_fragment.xml rename to app/src/main/res/layout/new_episodes_fragment.xml diff --git a/res/layout/new_episodes_listitem.xml b/app/src/main/res/layout/new_episodes_listitem.xml similarity index 100% rename from res/layout/new_episodes_listitem.xml rename to app/src/main/res/layout/new_episodes_listitem.xml diff --git a/res/layout/onlinefeedview_header.xml b/app/src/main/res/layout/onlinefeedview_header.xml similarity index 100% rename from res/layout/onlinefeedview_header.xml rename to app/src/main/res/layout/onlinefeedview_header.xml diff --git a/res/layout/opml_import.xml b/app/src/main/res/layout/opml_import.xml similarity index 100% rename from res/layout/opml_import.xml rename to app/src/main/res/layout/opml_import.xml diff --git a/res/layout/opml_selection.xml b/app/src/main/res/layout/opml_selection.xml similarity index 100% rename from res/layout/opml_selection.xml rename to app/src/main/res/layout/opml_selection.xml diff --git a/res/layout/pager_fragment.xml b/app/src/main/res/layout/pager_fragment.xml similarity index 100% rename from res/layout/pager_fragment.xml rename to app/src/main/res/layout/pager_fragment.xml diff --git a/res/layout/player_widget.xml b/app/src/main/res/layout/player_widget.xml similarity index 100% rename from res/layout/player_widget.xml rename to app/src/main/res/layout/player_widget.xml diff --git a/res/layout/queue_fragment.xml b/app/src/main/res/layout/queue_fragment.xml similarity index 100% rename from res/layout/queue_fragment.xml rename to app/src/main/res/layout/queue_fragment.xml diff --git a/res/layout/queue_listitem.xml b/app/src/main/res/layout/queue_listitem.xml similarity index 100% rename from res/layout/queue_listitem.xml rename to app/src/main/res/layout/queue_listitem.xml diff --git a/res/layout/searchlist_item.xml b/app/src/main/res/layout/searchlist_item.xml similarity index 100% rename from res/layout/searchlist_item.xml rename to app/src/main/res/layout/searchlist_item.xml diff --git a/res/layout/simplechapter_item.xml b/app/src/main/res/layout/simplechapter_item.xml similarity index 100% rename from res/layout/simplechapter_item.xml rename to app/src/main/res/layout/simplechapter_item.xml diff --git a/res/layout/storage_error.xml b/app/src/main/res/layout/storage_error.xml similarity index 100% rename from res/layout/storage_error.xml rename to app/src/main/res/layout/storage_error.xml diff --git a/res/layout/time_dialog.xml b/app/src/main/res/layout/time_dialog.xml similarity index 100% rename from res/layout/time_dialog.xml rename to app/src/main/res/layout/time_dialog.xml diff --git a/res/menu/directory_chooser.xml b/app/src/main/res/menu/directory_chooser.xml similarity index 100% rename from res/menu/directory_chooser.xml rename to app/src/main/res/menu/directory_chooser.xml diff --git a/res/menu/feedinfo.xml b/app/src/main/res/menu/feedinfo.xml similarity index 100% rename from res/menu/feedinfo.xml rename to app/src/main/res/menu/feedinfo.xml diff --git a/res/menu/feeditem.xml b/app/src/main/res/menu/feeditem.xml similarity index 100% rename from res/menu/feeditem.xml rename to app/src/main/res/menu/feeditem.xml diff --git a/res/menu/feeditem_dialog.xml b/app/src/main/res/menu/feeditem_dialog.xml similarity index 100% rename from res/menu/feeditem_dialog.xml rename to app/src/main/res/menu/feeditem_dialog.xml diff --git a/res/menu/feedlist.xml b/app/src/main/res/menu/feedlist.xml similarity index 100% rename from res/menu/feedlist.xml rename to app/src/main/res/menu/feedlist.xml diff --git a/res/menu/main.xml b/app/src/main/res/menu/main.xml similarity index 100% rename from res/menu/main.xml rename to app/src/main/res/menu/main.xml diff --git a/res/menu/mediaplayer.xml b/app/src/main/res/menu/mediaplayer.xml similarity index 100% rename from res/menu/mediaplayer.xml rename to app/src/main/res/menu/mediaplayer.xml diff --git a/res/menu/new_episodes.xml b/app/src/main/res/menu/new_episodes.xml similarity index 100% rename from res/menu/new_episodes.xml rename to app/src/main/res/menu/new_episodes.xml diff --git a/res/menu/queue_context.xml b/app/src/main/res/menu/queue_context.xml similarity index 100% rename from res/menu/queue_context.xml rename to app/src/main/res/menu/queue_context.xml diff --git a/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml similarity index 100% rename from res/values-az/strings.xml rename to app/src/main/res/values-az/strings.xml diff --git a/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml similarity index 100% rename from res/values-ca/strings.xml rename to app/src/main/res/values-ca/strings.xml diff --git a/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml similarity index 100% rename from res/values-cs-rCZ/strings.xml rename to app/src/main/res/values-cs-rCZ/strings.xml diff --git a/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml similarity index 100% rename from res/values-da/strings.xml rename to app/src/main/res/values-da/strings.xml diff --git a/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml similarity index 100% rename from res/values-de/strings.xml rename to app/src/main/res/values-de/strings.xml diff --git a/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml similarity index 100% rename from res/values-es-rES/strings.xml rename to app/src/main/res/values-es-rES/strings.xml diff --git a/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml similarity index 100% rename from res/values-es/strings.xml rename to app/src/main/res/values-es/strings.xml diff --git a/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml similarity index 100% rename from res/values-fr/strings.xml rename to app/src/main/res/values-fr/strings.xml diff --git a/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml similarity index 100% rename from res/values-hi-rIN/strings.xml rename to app/src/main/res/values-hi-rIN/strings.xml diff --git a/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml similarity index 100% rename from res/values-it-rIT/strings.xml rename to app/src/main/res/values-it-rIT/strings.xml diff --git a/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml similarity index 100% rename from res/values-iw-rIL/strings.xml rename to app/src/main/res/values-iw-rIL/strings.xml diff --git a/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml similarity index 100% rename from res/values-ko/strings.xml rename to app/src/main/res/values-ko/strings.xml diff --git a/res/values-land/styles.xml b/app/src/main/res/values-land/styles.xml similarity index 100% rename from res/values-land/styles.xml rename to app/src/main/res/values-land/styles.xml diff --git a/res/values-large/dimens.xml b/app/src/main/res/values-large/dimens.xml similarity index 100% rename from res/values-large/dimens.xml rename to app/src/main/res/values-large/dimens.xml diff --git a/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml similarity index 100% rename from res/values-nl/strings.xml rename to app/src/main/res/values-nl/strings.xml diff --git a/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml similarity index 100% rename from res/values-pl-rPL/strings.xml rename to app/src/main/res/values-pl-rPL/strings.xml diff --git a/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml similarity index 100% rename from res/values-pt-rBR/strings.xml rename to app/src/main/res/values-pt-rBR/strings.xml diff --git a/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml similarity index 100% rename from res/values-pt/strings.xml rename to app/src/main/res/values-pt/strings.xml diff --git a/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml similarity index 100% rename from res/values-ro-rRO/strings.xml rename to app/src/main/res/values-ro-rRO/strings.xml diff --git a/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml similarity index 100% rename from res/values-ru/strings.xml rename to app/src/main/res/values-ru/strings.xml diff --git a/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml similarity index 100% rename from res/values-sv-rSE/strings.xml rename to app/src/main/res/values-sv-rSE/strings.xml diff --git a/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml similarity index 100% rename from res/values-uk-rUA/strings.xml rename to app/src/main/res/values-uk-rUA/strings.xml diff --git a/res/values-v11/colors.xml b/app/src/main/res/values-v11/colors.xml similarity index 100% rename from res/values-v11/colors.xml rename to app/src/main/res/values-v11/colors.xml diff --git a/res/values-v14/dimens.xml b/app/src/main/res/values-v14/dimens.xml similarity index 100% rename from res/values-v14/dimens.xml rename to app/src/main/res/values-v14/dimens.xml diff --git a/res/values-v14/styles.xml b/app/src/main/res/values-v14/styles.xml similarity index 100% rename from res/values-v14/styles.xml rename to app/src/main/res/values-v14/styles.xml diff --git a/res/values-v16/styles.xml b/app/src/main/res/values-v16/styles.xml similarity index 100% rename from res/values-v16/styles.xml rename to app/src/main/res/values-v16/styles.xml diff --git a/res/values-v19/colors.xml b/app/src/main/res/values-v19/colors.xml similarity index 100% rename from res/values-v19/colors.xml rename to app/src/main/res/values-v19/colors.xml diff --git a/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml similarity index 100% rename from res/values-zh-rCN/strings.xml rename to app/src/main/res/values-zh-rCN/strings.xml diff --git a/res/values/arrays.xml b/app/src/main/res/values/arrays.xml similarity index 100% rename from res/values/arrays.xml rename to app/src/main/res/values/arrays.xml diff --git a/res/values/attrs.xml b/app/src/main/res/values/attrs.xml similarity index 100% rename from res/values/attrs.xml rename to app/src/main/res/values/attrs.xml diff --git a/res/values/colors.xml b/app/src/main/res/values/colors.xml similarity index 100% rename from res/values/colors.xml rename to app/src/main/res/values/colors.xml diff --git a/res/values/dimens.xml b/app/src/main/res/values/dimens.xml similarity index 100% rename from res/values/dimens.xml rename to app/src/main/res/values/dimens.xml diff --git a/res/values/ids.xml b/app/src/main/res/values/ids.xml similarity index 100% rename from res/values/ids.xml rename to app/src/main/res/values/ids.xml diff --git a/res/values/integers.xml b/app/src/main/res/values/integers.xml similarity index 100% rename from res/values/integers.xml rename to app/src/main/res/values/integers.xml diff --git a/res/values/strings.xml b/app/src/main/res/values/strings.xml similarity index 100% rename from res/values/strings.xml rename to app/src/main/res/values/strings.xml diff --git a/res/values/styles.xml b/app/src/main/res/values/styles.xml similarity index 100% rename from res/values/styles.xml rename to app/src/main/res/values/styles.xml diff --git a/res/xml/player_widget_info.xml b/app/src/main/res/xml/player_widget_info.xml similarity index 100% rename from res/xml/player_widget_info.xml rename to app/src/main/res/xml/player_widget_info.xml diff --git a/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml similarity index 100% rename from res/xml/preferences.xml rename to app/src/main/res/xml/preferences.xml diff --git a/res/xml/searchable.xml b/app/src/main/res/xml/searchable.xml similarity index 100% rename from res/xml/searchable.xml rename to app/src/main/res/xml/searchable.xml diff --git a/build.gradle b/build.gradle index 441b17385..48f4e4684 100644 --- a/build.gradle +++ b/build.gradle @@ -1,129 +1,19 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + buildscript { repositories { - mavenCentral() + jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:0.12.+' - } -} -apply plugin: 'com.android.application' + classpath 'com.android.tools.build:gradle:0.12.2' -repositories { - mavenCentral() -} -dependencies { - def libsdir = new File('libs'); - if (!libsdir.exists()) { - println "Creating libs directory" - libsdir.mkdir() - } - compile 'com.android.support:support-v4:19.1.+' - compile 'com.android.support:appcompat-v7:19.1.+' - 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(':submodules:dslv:library') - - compile 'com.jayway.android.robotium:robotium-solo:5.2.1' - compile ("com.doomonafireball.betterpickers:library:1.5.2") { - exclude group: 'com.android.support', module: 'support-v4' - } - compile 'org.jsoup:jsoup:1.7.3' - compile 'com.squareup.picasso:picasso:2.3.+' - compile 'com.squareup.okhttp:okhttp:2.0.+' - compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' - compile 'com.squareup.okio:okio:1.0.0' -} - -android { - compileSdkVersion 19 - buildToolsVersion "20.0" - - defaultConfig { - minSdkVersion 10 - targetSdkVersion 19 - testApplicationId "de.test.antennapod" - testInstrumentationRunner "instrumentationTest.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" - } - } - } - - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - resources.srcDirs = ['src'] - aidl.srcDirs = ['src'] - renderscript.srcDirs = ['src'] - res.srcDirs = ['res'] - assets.srcDirs = ['assets'] - } - } - - 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 { - runProguard 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 - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files } } -task wrapper(type: Wrapper) { - gradleVersion = '1.12' -} +allprojects { + repositories { + jcenter() + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 6de43d84c..d33586960 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,2 @@ -include ':submodules:dslv:library' +include ':app' +include ':app:dslv:library' diff --git a/tests/.classpath b/tests/.classpath deleted file mode 100644 index 62d428f2b..000000000 --- a/tests/.classpath +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/tests/.project b/tests/.project deleted file mode 100644 index 22c678688..000000000 --- a/tests/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - AntennaPodTest - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml deleted file mode 100644 index d2d661e83..000000000 --- a/tests/AndroidManifest.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/lint.xml b/tests/lint.xml deleted file mode 100644 index ee0eead5b..000000000 --- a/tests/lint.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/tests/proguard-project.txt b/tests/proguard-project.txt deleted file mode 100644 index f2fe1559a..000000000 --- a/tests/proguard-project.txt +++ /dev/null @@ -1,20 +0,0 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/tests/project.properties b/tests/project.properties deleted file mode 100644 index 0840b4a05..000000000 --- a/tests/project.properties +++ /dev/null @@ -1,14 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-15 diff --git a/tests/res/drawable-hdpi/ic_launcher.png b/tests/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index 96a442e5b8e9394ccf50bab9988cb2316026245d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9397 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 diff --git a/tests/res/drawable-mdpi/ic_launcher.png b/tests/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index 359047dfa4ed206e41e2354f9c6b307e713efe32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5237 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 diff --git a/tests/res/drawable-xhdpi/ic_launcher.png b/tests/res/drawable-xhdpi/ic_launcher.png deleted file mode 100644 index 71c6d760f05183ef8a47c614d8d13380c8528499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14383 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 diff --git a/tests/res/values/strings.xml b/tests/res/values/strings.xml deleted file mode 100644 index 8f0a2c82b..000000000 --- a/tests/res/values/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - AntennapodTestTest - - \ No newline at end of file From 984454bf4302d1432a533ff4294a52d5e73cd525 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Thu, 18 Sep 2014 19:09:17 +0200 Subject: [PATCH 03/13] Created core package for storing callback classes --- app/core/build.gradle | 83 +++++++++++++++++++ .../activity/OpmlImportFromPathActivity.java | 3 +- .../danoeh/antennapod/core/ClientConfig.java | 27 ++++++ .../core/DownloadServiceCallbacks.java | 43 ++++++++++ .../antennapod/core/FlattrCallbacks.java | 24 ++++++ .../antennapod/core/GpodnetCallbacks.java | 26 ++++++ .../core/PlaybackServiceCallbacks.java | 20 +++++ .../antennapod/core/StorageCallbacks.java | 27 ++++++ .../preferences/UserPreferences.java | 4 +- .../service/GpodnetSyncService.java | 2 +- .../service/download/DownloadService.java | 5 +- .../service/playback/PlaybackService.java | 2 +- .../antennapod/storage/PodDBAdapter.java | 2 +- 13 files changed, 259 insertions(+), 9 deletions(-) create mode 100644 app/core/build.gradle create mode 100644 app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java create mode 100644 app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java create mode 100644 app/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java create mode 100644 app/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java create mode 100644 app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java create mode 100644 app/src/main/java/de/danoeh/antennapod/core/StorageCallbacks.java diff --git a/app/core/build.gradle b/app/core/build.gradle new file mode 100644 index 000000000..a552f8313 --- /dev/null +++ b/app/core/build.gradle @@ -0,0 +1,83 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:0.12.2' + } +} +apply plugin: 'android-library' + +repositories { + mavenCentral() +} +dependencies { + compile 'com.android.support:support-v4:20.0.0' + compile 'com.android.support:appcompat-v7:20.0.0' + 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 ("com.doomonafireball.betterpickers:library:1.5.2") { + exclude group: 'com.android.support', module: 'support-v4' + } + compile 'org.jsoup:jsoup:1.7.3' + compile 'com.squareup.picasso:picasso:2.3.4' + compile 'com.squareup.okhttp:okhttp:2.0.0' + compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' + compile 'com.squareup.okio:okio:1.0.0' +} + +android { + compileSdkVersion 19 + buildToolsVersion "20.0" + + defaultConfig { + minSdkVersion 10 + targetSdkVersion 19 + testApplicationId "de.test.antennapod" + testInstrumentationRunner "de.test.antennapod.AntennaPodTestRunner" + } + + 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 { + runProguard 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 + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java index 94f100321..631e69f78 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java @@ -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) diff --git a/app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java b/app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java new file mode 100644 index 000000000..72ebe6347 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java @@ -0,0 +1,27 @@ +package de.danoeh.antennapod.core; + +/** + * Stores callbacks for core classes like Services, DB classes etc. and other configuration variables. + * Apps using the core module of AntennaPod should register implementations of all interfaces here. + */ +public class ClientConfig { + + /** + * Package name of the client. This string is used as a prefix + * for internal intents. + */ + public static String CLIENT_PACKAGE_NAME; + + /** + * Should be used when setting User-Agent header for HTTP-requests. + */ + public static String USER_AGENT; + + public static DownloadServiceCallbacks downloadServiceCallbacks; + + public static PlaybackServiceCallbacks playbackServiceCallbacks; + + public static GpodnetCallbacks gpodnetCallbacks; + + public static StorageCallbacks storageCallbacks; +} diff --git a/app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java b/app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java new file mode 100644 index 000000000..1b0c4aab4 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java @@ -0,0 +1,43 @@ +package de.danoeh.antennapod.core; + +import android.app.PendingIntent; + +import de.danoeh.antennapod.service.download.DownloadRequest; + +/** + * Callbacks for the DownloadService of the core module + */ +public interface DownloadServiceCallbacks { + + /** + * Returns a PendingIntent for a notification the main notification of the DownloadService. + *

+ * The PendingIntent takes the users to a screen where they can observe all currently running + * downloads. + * + * @return A non-null PendingIntent for the notification. + */ + public PendingIntent getNotificationContentIntent(); + + /** + * Returns a PendingIntent for a notification that tells the user to enter a username + * or a password for a requested download. + *

+ * The PendingIntent takes users to an Activity that lets the user enter their username + * and password to retry the download. + * + * @return A non-null PendingIntent for the notification. + */ + public PendingIntent getAuthentificationNotificationContentIntent(DownloadRequest request); + + /** + * Returns a PendingIntent for notification that notifies the user about the completion of downloads + * along with information about failed and successful downloads. + *

+ * The PendingIntent takes users to an activity where they can look at all successful and failed downloads. + * + * @return A non-null PendingIntent for the notification. + */ + public PendingIntent getReportNotificationContentIntent(); +} + diff --git a/app/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java b/app/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java new file mode 100644 index 000000000..2dde4d8f3 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java @@ -0,0 +1,24 @@ +package de.danoeh.antennapod.core; + +import android.content.Intent; + +/** + * Callbacks for the flattr integration of the app. + */ +public interface FlattrCallbacks { + + /** + * Returns if true if the flattr integration should be activated, + * false otherwise. + */ + public boolean flattrEnabled(); + + /** + * Returns an intent that starts the activity that is responsible for + * letting users log into their flattr account. + * + * @return The intent that starts the authentication activity or null + * if flattr integration is disabled (i.e. flattrEnabled() == false). + */ + public Intent getFlattrAuthenticationActivityIntent(); +} diff --git a/app/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java b/app/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java new file mode 100644 index 000000000..e937bf35c --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java @@ -0,0 +1,26 @@ +package de.danoeh.antennapod.core; + +import android.app.PendingIntent; + +/** + * Callbacks related to the gpodder.net integration of the core module + */ +public interface GpodnetCallbacks { + + + /** + * Returns if true if the gpodder.net integration should be activated, + * false otherwise. + */ + public boolean gpodnetEnabled(); + + /** + * Returns a PendingIntent for the error notification of the GpodnetSyncService. + *

+ * What the PendingIntent does may be implementation-specific. + * + * @return A PendingIntent for the notification or null if gpodder.net integration + * has been disabled (i.e. gpodnetEnabled() == false). + */ + public PendingIntent getGpodnetSyncServiceErrorNotificationPendingIntent(); +} diff --git a/app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java b/app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java new file mode 100644 index 000000000..da64b38ad --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java @@ -0,0 +1,20 @@ +package de.danoeh.antennapod.core; + +import android.content.Intent; + +import de.danoeh.antennapod.feed.MediaType; + +/** + * Callbacks for the PlaybackService of the core module + */ +public interface PlaybackServiceCallbacks { + + /** + * Returns an intent which starts an audio- or videoplayer, depending on the + * type of media that is being played. + * + * @param mediaType The type of media that is being played. + * @return A non-null activity intent. + */ + public Intent getPlayerActivityIntent(MediaType mediaType); +} diff --git a/app/src/main/java/de/danoeh/antennapod/core/StorageCallbacks.java b/app/src/main/java/de/danoeh/antennapod/core/StorageCallbacks.java new file mode 100644 index 000000000..5d1a0fffc --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/core/StorageCallbacks.java @@ -0,0 +1,27 @@ +package de.danoeh.antennapod.core; + +import android.database.sqlite.SQLiteDatabase; + +/** + * Callbacks for the classes in the storage package of the core module. + */ +public interface StorageCallbacks { + + /** + * Returns the current version of the database. + * + * @return The non-negative version number of the database. + */ + public int getDatabaseVersion(); + + /** + * Upgrades the given database from an old version to a newer version. + * + * @param db The database that is supposed to be upgraded. + * @param oldVersion The old version of the database. + * @param newVersion The version that the database is supposed to be upgraded to. + */ + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion); + + +} diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/UserPreferences.java b/app/src/main/java/de/danoeh/antennapod/preferences/UserPreferences.java index 2020ddfae..d7807ddac 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/UserPreferences.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/UserPreferences.java @@ -21,7 +21,6 @@ import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.OpmlImportFromPathActivity; import de.danoeh.antennapod.receiver.FeedUpdateReceiver; /** @@ -32,6 +31,7 @@ import de.danoeh.antennapod.receiver.FeedUpdateReceiver; */ public class UserPreferences implements SharedPreferences.OnSharedPreferenceChangeListener { + public static final String IMPORT_DIR = "import/"; private static final String TAG = "UserPreferences"; public static final String PREF_PAUSE_ON_HEADSET_DISCONNECT = "prefPauseOnHeadsetDisconnect"; @@ -523,7 +523,7 @@ public class UserPreferences implements */ private static void createImportDirectory() { File importDir = getDataFolder(instance.context, - OpmlImportFromPathActivity.IMPORT_DIR); + IMPORT_DIR); if (importDir != null) { if (importDir.exists()) { if (BuildConfig.DEBUG) diff --git a/app/src/main/java/de/danoeh/antennapod/service/GpodnetSyncService.java b/app/src/main/java/de/danoeh/antennapod/service/GpodnetSyncService.java index c8c9fc31e..efc44c66a 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/GpodnetSyncService.java +++ b/app/src/main/java/de/danoeh/antennapod/service/GpodnetSyncService.java @@ -166,7 +166,7 @@ public class GpodnetSyncService extends Service { } PendingIntent activityIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); - +// TODO getGpodnetSyncServiceErrorNotificationPendingIntent Notification notification = builder.setContentTitle(title) .setContentText(description) .setContentIntent(activityIntent) diff --git a/app/src/main/java/de/danoeh/antennapod/service/download/DownloadService.java b/app/src/main/java/de/danoeh/antennapod/service/download/DownloadService.java index 63be91b57..d0d75d2d7 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/download/DownloadService.java +++ b/app/src/main/java/de/danoeh/antennapod/service/download/DownloadService.java @@ -331,7 +331,7 @@ public class DownloadService extends Service { } @SuppressLint("NewApi") - private void setupNotificationBuilders() { + private void setupNotificationBuilders() { // TODO getNotificationContentIntent Intent intent = new Intent(this, MainActivity.class); intent.putExtra(MainActivity.EXTRA_NAV_TYPE, NavListAdapter.VIEW_TYPE_NAV); intent.putExtra(MainActivity.EXTRA_NAV_INDEX, MainActivity.POS_DOWNLOADS); @@ -556,7 +556,7 @@ public class DownloadService extends Service { } } - if (createReport) { + if (createReport) { // TODO getReportNotificationContentIntent if (BuildConfig.DEBUG) Log.d(TAG, "Creating report"); Intent intent = new Intent(this, MainActivity.class); @@ -633,6 +633,7 @@ public class DownloadService extends Service { final String resourceTitle = (downloadRequest.getTitle() != null) ? downloadRequest.getTitle() : downloadRequest.getSource(); + // TODO getAuthentificationNotificationContentIntent final Intent activityIntent = new Intent(getApplicationContext(), DownloadAuthenticationActivity.class); activityIntent.putExtra(DownloadAuthenticationActivity.ARG_DOWNLOAD_REQUEST, downloadRequest); activityIntent.putExtra(DownloadAuthenticationActivity.ARG_SEND_TO_DOWNLOAD_REQUESTER_BOOL, true); diff --git a/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackService.java b/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackService.java index 59d7ddbb9..96b9588c4 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackService.java +++ b/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackService.java @@ -172,7 +172,7 @@ public class PlaybackService extends Service { * running, the type of the last played media will be looked up. */ public static Intent getPlayerActivityIntent(Context context) { - if (isRunning) { + if (isRunning) { // TODO getPlayerActivityIntent if (currentMediaType == MediaType.VIDEO) { return new Intent(context, VideoplayerActivity.class); } else { diff --git a/app/src/main/java/de/danoeh/antennapod/storage/PodDBAdapter.java b/app/src/main/java/de/danoeh/antennapod/storage/PodDBAdapter.java index 671ac30d5..2a3aafe8c 100644 --- a/app/src/main/java/de/danoeh/antennapod/storage/PodDBAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/storage/PodDBAdapter.java @@ -1302,7 +1302,7 @@ public class PodDBAdapter { @Override public void onUpgrade(final SQLiteDatabase db, final int oldVersion, - final int newVersion) { + final int newVersion) { // TODO onUpgrade Log.w("DBAdapter", "Upgrading from version " + oldVersion + " to " + newVersion + "."); if (oldVersion <= 1) { From 21b5b835e3a9c83410120d38a63e51be2981a38b Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Fri, 19 Sep 2014 22:51:35 +0200 Subject: [PATCH 04/13] Moved non-gui classes to 'core' package --- .../gpodnet/GPodnetServiceTest.java | 8 +-- .../antennapod/handler/FeedHandlerTest.java | 6 +-- .../service/download/HttpDownloaderTest.java | 12 ++--- .../PlaybackServiceMediaPlayerTest.java | 14 +++--- .../PlaybackServiceTaskManagerTest.java | 12 ++--- .../test/antennapod/storage/DBReaderTest.java | 15 +++--- .../test/antennapod/storage/DBTasksTest.java | 16 +++--- .../test/antennapod/storage/DBTestUtils.java | 12 ++--- .../test/antennapod/storage/DBWriterTest.java | 14 +++--- .../test/antennapod/ui/MainActivityTest.java | 4 +- .../de/test/antennapod/ui/PlaybackTest.java | 12 ++--- .../de/test/antennapod/ui/UITestUtils.java | 4 +- .../test/antennapod/ui/UITestUtilsTest.java | 4 +- .../test/antennapod/util/ConverterTest.java | 2 +- .../util/FilenameGeneratorTest.java | 2 +- .../de/test/antennapod/util/URIUtilTest.java | 2 +- .../test/antennapod/util/URLCheckerTest.java | 2 +- .../util/playback/TimelineTest.java | 10 ++-- .../util/syndication/FeedDiscovererTest.java | 2 +- .../feedgenerator/AtomGenerator.java | 8 +-- .../feedgenerator/FeedGenerator.java | 2 +- .../feedgenerator/RSS2Generator.java | 6 +-- app/src/main/AndroidManifest.xml | 20 ++++---- .../java/de/danoeh/antennapod/PodcastApp.java | 8 +-- .../activity/AudioplayerActivity.java | 28 +++++------ .../DefaultOnlineFeedViewActivity.java | 16 +++--- .../activity/DirectoryChooserActivity.java | 2 +- .../DownloadAuthenticationActivity.java | 6 +-- .../antennapod/activity/FeedInfoActivity.java | 20 ++++---- .../activity/FlattrAuthActivity.java | 4 +- .../antennapod/activity/MainActivity.java | 12 ++--- .../activity/MediaplayerActivity.java | 27 +++++----- .../activity/OnlineFeedViewActivity.java | 30 +++++------ .../activity/OpmlFeedChooserActivity.java | 4 +- .../activity/OpmlImportBaseActivity.java | 6 +-- .../OpmlImportFromIntentActivity.java | 4 +- .../activity/OpmlImportFromPathActivity.java | 6 +-- .../antennapod/activity/OpmlImportHolder.java | 2 +- .../activity/PreferenceActivity.java | 14 +++--- .../activity/StorageErrorActivity.java | 4 +- .../activity/VideoplayerActivity.java | 10 ++-- .../GpodnetAuthenticationActivity.java | 12 ++--- .../adapter/ActionButtonCallback.java | 2 +- .../antennapod/adapter/ActionButtonUtils.java | 6 +-- .../antennapod/adapter/AdapterUtils.java | 6 +-- .../adapter/ChapterListAdapter.java | 8 +-- .../adapter/DefaultActionButtonCallback.java | 14 +++--- .../adapter/DownloadLogAdapter.java | 8 +-- .../DownloadedEpisodesListAdapter.java | 6 +-- .../adapter/DownloadlistAdapter.java | 10 ++-- .../adapter/ExternalEpisodesListAdapter.java | 10 ++-- .../adapter/FeedItemlistAdapter.java | 11 ++-- .../FeedItemlistDescriptionAdapter.java | 2 +- .../antennapod/adapter/NavListAdapter.java | 4 +- .../adapter/NewEpisodesListAdapter.java | 10 ++-- .../antennapod/adapter/QueueListAdapter.java | 8 +-- .../antennapod/adapter/SearchlistAdapter.java | 10 ++-- .../adapter/gpodnet/PodcastListAdapter.java | 4 +- .../danoeh/antennapod/core/ClientConfig.java | 6 --- .../core/DownloadServiceCallbacks.java | 2 +- .../core/PlaybackServiceCallbacks.java | 2 +- .../asynctask/DownloadObserver.java | 6 +-- .../{ => core}/asynctask/FeedRemover.java | 6 +-- .../asynctask/FlattrClickWorker.java | 12 ++--- .../asynctask/FlattrStatusFetcher.java | 6 +-- .../asynctask/FlattrTokenFetcher.java | 4 +- .../asynctask/OpmlExportWorker.java | 10 ++-- .../{ => core}/asynctask/OpmlFeedQueuer.java | 10 ++-- .../asynctask/OpmlImportWorker.java | 6 +-- .../asynctask/PicassoImageResource.java | 2 +- .../{ => core}/asynctask/PicassoProvider.java | 2 +- .../{ => core}/backup/OpmlBackupAgent.java | 19 ++++--- .../{ => core}/dialog/ConfirmationDialog.java | 2 +- .../DownloadRequestErrorDialogCreator.java | 2 +- .../{ => core}/dialog/TimeDialog.java | 2 +- .../antennapod/{ => core}/feed/Chapter.java | 2 +- .../{ => core}/feed/EventDistributor.java | 2 +- .../antennapod/{ => core}/feed/Feed.java | 14 +++--- .../{ => core}/feed/FeedComponent.java | 2 +- .../antennapod/{ => core}/feed/FeedFile.java | 2 +- .../antennapod/{ => core}/feed/FeedImage.java | 10 +--- .../antennapod/{ => core}/feed/FeedItem.java | 13 +++-- .../antennapod/{ => core}/feed/FeedMedia.java | 15 +++--- .../{ => core}/feed/FeedPreferences.java | 4 +- .../{ => core}/feed/ID3Chapter.java | 2 +- .../antennapod/{ => core}/feed/MediaType.java | 2 +- .../{ => core}/feed/SearchResult.java | 2 +- .../{ => core}/feed/SimpleChapter.java | 2 +- .../{ => core}/feed/VorbisCommentChapter.java | 4 +- .../{ => core}/gpoddernet/GpodnetService.java | 20 ++++---- ...GpodnetServiceAuthenticationException.java | 2 +- .../GpodnetServiceBadStatusCodeException.java | 2 +- .../gpoddernet/GpodnetServiceException.java | 2 +- .../gpoddernet/model/GpodnetDevice.java | 2 +- .../gpoddernet/model/GpodnetPodcast.java | 2 +- .../model/GpodnetSubscriptionChange.java | 2 +- .../gpoddernet/model/GpodnetTag.java | 2 +- .../model/GpodnetUploadChangesResponse.java | 4 +- .../{ => core}/opml/OpmlElement.java | 2 +- .../{ => core}/opml/OpmlReader.java | 2 +- .../{ => core}/opml/OpmlSymbols.java | 2 +- .../{ => core}/opml/OpmlWriter.java | 4 +- .../preferences/GpodnetPreferences.java | 6 +-- .../preferences/PlaybackPreferences.java | 2 +- .../preferences/UserPreferences.java | 4 +- .../receiver/AlarmUpdateReceiver.java | 4 +- .../receiver/ConnectivityActionReceiver.java | 8 +-- .../receiver/FeedUpdateReceiver.java | 6 +-- .../receiver/MediaButtonReceiver.java | 6 +-- .../{ => core}/receiver/PlayerWidget.java | 4 +- .../service/GpodnetSyncService.java | 26 +++++----- .../service/download/APRedirectHandler.java | 2 +- .../download/AntennapodHttpClient.java | 2 +- .../service/download/DownloadRequest.java | 2 +- .../service/download/DownloadService.java | 41 ++++++++------- .../service/download/DownloadStatus.java | 6 +-- .../service/download/Downloader.java | 2 +- .../service/download/DownloaderCallback.java | 2 +- .../service/download/HttpDownloader.java | 10 ++-- .../service/playback/PlaybackService.java | 50 +++++++++---------- .../playback/PlaybackServiceMediaPlayer.java | 20 ++++---- .../playback/PlaybackServiceTaskManager.java | 10 ++-- .../service/playback/PlayerStatus.java | 2 +- .../service/playback/PlayerWidgetService.java | 10 ++-- .../{ => core}/storage/DBReader.java | 30 +++++------ .../{ => core}/storage/DBTasks.java | 28 +++++------ .../{ => core}/storage/DBWriter.java | 22 ++++---- .../storage/DownloadRequestException.java | 2 +- .../{ => core}/storage/DownloadRequester.java | 15 +++--- .../storage/FeedItemStatistics.java | 2 +- .../{ => core}/storage/FeedSearcher.java | 8 +-- .../{ => core}/storage/PodDBAdapter.java | 20 ++++---- .../syndication/handler/FeedHandler.java | 4 +- .../handler/FeedHandlerResult.java | 4 +- .../syndication/handler/HandlerState.java | 10 ++-- .../syndication/handler/SyndHandler.java | 8 +-- .../syndication/handler/TypeGetter.java | 5 +- .../handler/UnsupportedFeedtypeException.java | 4 +- .../syndication/namespace/NSContent.java | 4 +- .../syndication/namespace/NSITunes.java | 6 +-- .../syndication/namespace/NSMedia.java | 8 +-- .../syndication/namespace/NSRSS20.java | 14 +++--- .../namespace/NSSimpleChapters.java | 10 ++-- .../syndication/namespace/Namespace.java | 4 +- .../syndication/namespace/SyndElement.java | 2 +- .../syndication/namespace/atom/AtomText.java | 6 +-- .../syndication/namespace/atom/NSAtom.java | 20 ++++---- .../syndication/util/SyndDateUtils.java | 2 +- .../syndication/util/SyndTypeUtils.java | 2 +- .../{ => core}/util/ChapterUtils.java | 16 +++--- .../antennapod/{ => core}/util/Converter.java | 2 +- .../{ => core}/util/DownloadError.java | 2 +- .../antennapod/{ => core}/util/DuckType.java | 2 +- .../{ => core}/util/EpisodeFilter.java | 4 +- .../{ => core}/util/FeedtitleComparator.java | 4 +- .../{ => core}/util/FileNameGenerator.java | 2 +- .../{ => core}/util/InvalidFeedException.java | 2 +- .../antennapod/{ => core}/util/LangUtils.java | 2 +- .../{ => core}/util/NetworkUtils.java | 4 +- .../{ => core}/util/QueueAccess.java | 4 +- .../{ => core}/util/ShareUtils.java | 6 +-- .../{ => core}/util/ShownotesProvider.java | 2 +- .../{ => core}/util/StorageUtils.java | 4 +- .../{ => core}/util/ThemeUtils.java | 4 +- .../antennapod/{ => core}/util/URIUtil.java | 2 +- .../{ => core}/util/URLChecker.java | 2 +- .../{ => core}/util/UndoBarController.java | 2 +- .../ChapterStartTimeComparator.java | 4 +- .../comparator/DownloadStatusComparator.java | 4 +- .../comparator/FeedItemPubdateComparator.java | 4 +- .../PlaybackCompletionDateComparator.java | 4 +- .../SearchResultValueComparator.java | 4 +- .../exception/MediaFileNotFoundException.java | 4 +- .../util/flattr/FlattrServiceCreator.java | 2 +- .../{ => core}/util/flattr/FlattrStatus.java | 2 +- .../{ => core}/util/flattr/FlattrThing.java | 2 +- .../{ => core}/util/flattr/FlattrUtils.java | 6 +-- .../util/flattr/SimpleFlattrThing.java | 2 +- .../util/gui/FeedItemUndoToken.java | 4 +- .../util/id3reader/ChapterReader.java | 10 ++-- .../{ => core}/util/id3reader/ID3Reader.java | 6 +-- .../util/id3reader/ID3ReaderException.java | 2 +- .../util/id3reader/model/FrameHeader.java | 2 +- .../util/id3reader/model/Header.java | 2 +- .../util/id3reader/model/TagHeader.java | 2 +- .../util/menuhandler/FeedItemMenuHandler.java | 18 +++---- .../util/menuhandler/FeedMenuHandler.java | 17 +++---- .../util/menuhandler/MenuItemUtils.java | 2 +- .../util/menuhandler/NavDrawerActivity.java | 2 +- .../{ => core}/util/playback/AudioPlayer.java | 2 +- .../util/playback/ExternalMedia.java | 10 ++-- .../{ => core}/util/playback/IPlayer.java | 2 +- .../util/playback/MediaPlayerError.java | 2 +- .../{ => core}/util/playback/Playable.java | 14 +++--- .../util/playback/PlaybackController.java | 24 ++++----- .../{ => core}/util/playback/Timeline.java | 6 +-- .../{ => core}/util/playback/VideoPlayer.java | 2 +- .../util/syndication/FeedDiscoverer.java | 2 +- .../vorbiscommentreader/OggInputStream.java | 2 +- .../VorbisCommentChapterReader.java | 6 +-- .../VorbisCommentHeader.java | 2 +- .../VorbisCommentReader.java | 2 +- .../VorbisCommentReaderException.java | 2 +- .../dialog/AutoFlattrPreferenceDialog.java | 2 +- .../antennapod/dialog/FeedItemDialog.java | 20 ++++---- .../dialog/GpodnetSetHostnameDialog.java | 4 +- .../dialog/VariableSpeedDialog.java | 2 +- .../fragment/CompletedDownloadsFragment.java | 10 ++-- .../antennapod/fragment/CoverFragment.java | 4 +- .../fragment/DownloadLogFragment.java | 6 +-- .../fragment/ExternalPlayerFragment.java | 10 ++-- .../fragment/ItemDescriptionFragment.java | 18 +++---- .../antennapod/fragment/ItemlistFragment.java | 36 ++++++------- .../fragment/NewEpisodesFragment.java | 30 +++++------ .../fragment/PlaybackHistoryFragment.java | 20 ++++---- .../antennapod/fragment/QueueFragment.java | 20 ++++---- .../fragment/RunningDownloadsFragment.java | 6 +-- .../antennapod/fragment/SearchFragment.java | 12 ++--- .../fragment/gpodnet/PodcastListFragment.java | 14 +++--- .../gpodnet/PodcastTopListFragment.java | 6 +-- .../fragment/gpodnet/SearchListFragment.java | 10 ++-- .../gpodnet/SuggestionListFragment.java | 8 +-- .../fragment/gpodnet/TagFragment.java | 8 +-- .../fragment/gpodnet/TagListFragment.java | 10 ++-- .../antennapod/receiver/SPAReceiver.java | 6 +-- 225 files changed, 846 insertions(+), 876 deletions(-) rename app/src/main/java/de/danoeh/antennapod/{ => core}/asynctask/DownloadObserver.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/asynctask/FeedRemover.java (91%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/asynctask/FlattrClickWorker.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/asynctask/FlattrStatusFetcher.java (90%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/asynctask/FlattrTokenFetcher.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/asynctask/OpmlExportWorker.java (91%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/asynctask/OpmlFeedQueuer.java (86%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/asynctask/OpmlImportWorker.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/asynctask/PicassoImageResource.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/asynctask/PicassoProvider.java (99%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/backup/OpmlBackupAgent.java (94%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/dialog/ConfirmationDialog.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/dialog/DownloadRequestErrorDialogCreator.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/dialog/TimeDialog.java (99%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/Chapter.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/EventDistributor.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/Feed.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/FeedComponent.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/FeedFile.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/FeedImage.java (85%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/FeedItem.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/FeedMedia.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/FeedPreferences.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/ID3Chapter.java (94%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/MediaType.java (55%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/SearchResult.java (94%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/SimpleChapter.java (92%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/feed/VorbisCommentChapter.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/gpoddernet/GpodnetService.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/gpoddernet/GpodnetServiceAuthenticationException.java (91%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/gpoddernet/GpodnetServiceBadStatusCodeException.java (84%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/gpoddernet/GpodnetServiceException.java (89%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/gpoddernet/model/GpodnetDevice.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/gpoddernet/model/GpodnetPodcast.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/gpoddernet/model/GpodnetSubscriptionChange.java (94%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/gpoddernet/model/GpodnetTag.java (94%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/gpoddernet/model/GpodnetUploadChangesResponse.java (91%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/opml/OpmlElement.java (94%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/opml/OpmlReader.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/opml/OpmlSymbols.java (93%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/opml/OpmlWriter.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/preferences/GpodnetPreferences.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/preferences/PlaybackPreferences.java (99%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/preferences/UserPreferences.java (99%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/receiver/AlarmUpdateReceiver.java (90%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/receiver/ConnectivityActionReceiver.java (87%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/receiver/FeedUpdateReceiver.java (89%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/receiver/MediaButtonReceiver.java (85%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/receiver/PlayerWidget.java (92%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/GpodnetSyncService.java (92%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/download/APRedirectHandler.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/download/AntennapodHttpClient.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/download/DownloadRequest.java (99%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/download/DownloadService.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/download/DownloadStatus.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/download/Downloader.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/download/DownloaderCallback.java (80%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/download/HttpDownloader.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/playback/PlaybackService.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/playback/PlaybackServiceMediaPlayer.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/playback/PlaybackServiceTaskManager.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/playback/PlayerStatus.java (88%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/service/playback/PlayerWidgetService.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/storage/DBReader.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/storage/DBTasks.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/storage/DBWriter.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/storage/DownloadRequestException.java (92%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/storage/DownloadRequester.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/storage/FeedItemStatistics.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/storage/FeedSearcher.java (90%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/storage/PodDBAdapter.java (99%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/handler/FeedHandler.java (91%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/handler/FeedHandlerResult.java (78%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/handler/HandlerState.java (89%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/handler/SyndHandler.java (94%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/handler/TypeGetter.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/handler/UnsupportedFeedtypeException.java (85%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/namespace/NSContent.java (83%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/namespace/NSITunes.java (89%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/namespace/NSMedia.java (89%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/namespace/NSRSS20.java (91%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/namespace/NSSimpleChapters.java (79%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/namespace/Namespace.java (84%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/namespace/SyndElement.java (86%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/namespace/atom/AtomText.java (83%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/namespace/atom/NSAtom.java (93%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/util/SyndDateUtils.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/syndication/util/SyndTypeUtils.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/ChapterUtils.java (92%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/Converter.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/DownloadError.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/DuckType.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/EpisodeFilter.java (91%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/FeedtitleComparator.java (76%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/FileNameGenerator.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/InvalidFeedException.java (91%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/LangUtils.java (99%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/NetworkUtils.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/QueueAccess.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/ShareUtils.java (86%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/ShownotesProvider.java (91%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/StorageUtils.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/ThemeUtils.java (84%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/URIUtil.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/URLChecker.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/UndoBarController.java (99%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/comparator/ChapterStartTimeComparator.java (76%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/comparator/DownloadStatusComparator.java (73%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/comparator/FeedItemPubdateComparator.java (81%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/comparator/PlaybackCompletionDateComparator.java (82%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/comparator/SearchResultValueComparator.java (68%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/exception/MediaFileNotFoundException.java (79%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/flattr/FlattrServiceCreator.java (93%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/flattr/FlattrStatus.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/flattr/FlattrThing.java (74%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/flattr/FlattrUtils.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/flattr/SimpleFlattrThing.java (92%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/gui/FeedItemUndoToken.java (93%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/id3reader/ChapterReader.java (92%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/id3reader/ID3Reader.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/id3reader/ID3ReaderException.java (85%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/id3reader/model/FrameHeader.java (86%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/id3reader/model/Header.java (86%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/id3reader/model/TagHeader.java (88%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/menuhandler/FeedItemMenuHandler.java (93%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/menuhandler/FeedMenuHandler.java (83%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/menuhandler/MenuItemUtils.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/menuhandler/NavDrawerActivity.java (74%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/playback/AudioPlayer.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/playback/ExternalMedia.java (95%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/playback/IPlayer.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/playback/MediaPlayerError.java (91%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/playback/Playable.java (94%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/playback/PlaybackController.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/playback/Timeline.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/playback/VideoPlayer.java (97%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/syndication/FeedDiscoverer.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/vorbiscommentreader/OggInputStream.java (96%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/vorbiscommentreader/VorbisCommentChapterReader.java (93%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/vorbiscommentreader/VorbisCommentHeader.java (90%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/vorbiscommentreader/VorbisCommentReader.java (98%) rename app/src/main/java/de/danoeh/antennapod/{ => core}/util/vorbiscommentreader/VorbisCommentReaderException.java (89%) diff --git a/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java b/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java index 971a79a81..14a3b27b0 100644 --- a/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java +++ b/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java @@ -2,10 +2,10 @@ package de.test.antennapod.gpodnet; import android.test.AndroidTestCase; -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; diff --git a/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java b/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java index 3fe42dfd0..52067c971 100644 --- a/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java @@ -2,9 +2,9 @@ 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 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; diff --git a/app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java b/app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java index 575bbb998..1a561f282 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java @@ -2,12 +2,12 @@ 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 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; diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java index b7d30a7b8..aac4c245a 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java @@ -3,13 +3,13 @@ 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 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; diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index 86f609d74..81d684595 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -2,12 +2,12 @@ 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; diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java index fe337a5fb..63286d11d 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java @@ -2,14 +2,13 @@ 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 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; diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java index 8859e50f9..fd5b1c393 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java @@ -4,14 +4,14 @@ 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; diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java b/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java index 947984574..e7d6396f5 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java @@ -1,12 +1,12 @@ 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; diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java index c1e045b79..4678a843b 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java @@ -4,13 +4,13 @@ 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; diff --git a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java index 9b98c5f89..3656582e1 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java @@ -9,8 +9,8 @@ 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.Feed; -import de.danoeh.antennapod.storage.PodDBAdapter; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.storage.PodDBAdapter; /** * User interface tests for MainActivity diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java index 28271a52b..daae4bd62 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java @@ -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; diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java index eac90e7c1..55fffb80a 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java @@ -6,8 +6,8 @@ import android.graphics.Bitmap; import android.os.Build; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.feed.*; -import de.danoeh.antennapod.storage.PodDBAdapter; +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; diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java index e7782ff59..6c5a350de 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java @@ -1,8 +1,8 @@ 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; diff --git a/app/src/androidTest/java/de/test/antennapod/util/ConverterTest.java b/app/src/androidTest/java/de/test/antennapod/util/ConverterTest.java index 9ab444a99..47fca41ba 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/ConverterTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/ConverterTest.java @@ -2,7 +2,7 @@ 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 diff --git a/app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java b/app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java index bf7f57459..6d24fa526 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java @@ -3,7 +3,7 @@ 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 { diff --git a/app/src/androidTest/java/de/test/antennapod/util/URIUtilTest.java b/app/src/androidTest/java/de/test/antennapod/util/URIUtilTest.java index 61d230295..7bdcfb898 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/URIUtilTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/URIUtilTest.java @@ -1,7 +1,7 @@ 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 diff --git a/app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java b/app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java index fd485e0da..d1bfb592a 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java @@ -1,7 +1,7 @@ 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 diff --git a/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java b/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java index c2b7ad316..2c56b71cc 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java @@ -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 diff --git a/app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java index 10414fd2a..4e5d0297f 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java @@ -1,7 +1,7 @@ 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; diff --git a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java index 8ce6c08e4..69cc827ec 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java @@ -1,10 +1,10 @@ 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; diff --git a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java index 23518de87..fe5afd847 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/FeedGenerator.java @@ -1,6 +1,6 @@ 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; diff --git a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java index 6355d4bb9..d37434f06 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java @@ -1,9 +1,9 @@ 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; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 65eac99ea..768a4abb0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,7 +35,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"> @@ -75,16 +75,16 @@ android:launchMode="singleInstance"/> @@ -98,7 +98,7 @@ @@ -112,12 +112,12 @@ - + @@ -133,7 +133,7 @@ - + @@ -324,12 +324,12 @@ - + - + diff --git a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java index 74628f3d6..25aa9fb68 100644 --- a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java +++ b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java @@ -2,10 +2,10 @@ 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.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. */ diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 18d27ddda..5622bc987 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -31,23 +31,23 @@ 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.asynctask.PicassoProvider; 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.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.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.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.playback.PlaybackService; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.core.util.playback.ExternalMedia; +import de.danoeh.antennapod.core.util.playback.Playable; +import de.danoeh.antennapod.core.util.playback.PlaybackController; /** * Activity for playing audio files. diff --git a/app/src/main/java/de/danoeh/antennapod/activity/DefaultOnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/DefaultOnlineFeedViewActivity.java index a03fa7949..239fe1893 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/DefaultOnlineFeedViewActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/DefaultOnlineFeedViewActivity.java @@ -30,14 +30,14 @@ 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.asynctask.PicassoProvider; +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, diff --git a/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java index 06a11c775..559fa0574 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/DirectoryChooserActivity.java @@ -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; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java index c5f25d813..365c4216d 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java @@ -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. diff --git a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java index 5cf187eb6..80484df37 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java @@ -12,16 +12,16 @@ import android.view.MenuItem; import android.widget.*; 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.asynctask.PicassoProvider; +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.core.util.menuhandler.FeedMenuHandler; /** * Displays information about a feed. diff --git a/app/src/main/java/de/danoeh/antennapod/activity/FlattrAuthActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/FlattrAuthActivity.java index 8dde14d3b..f4a973fac 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/FlattrAuthActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/FlattrAuthActivity.java @@ -14,8 +14,8 @@ 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 org.shredzone.flattr4j.exception.FlattrException; /** Guides the user through the authentication process */ diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index b7014dab2..2c660019c 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -25,13 +25,13 @@ import org.apache.commons.lang3.Validate; 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.core.feed.EventDistributor; +import de.danoeh.antennapod.core.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 de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.util.StorageUtils; +import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java index 2e5372b60..249a3c5c3 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -3,13 +3,11 @@ 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; @@ -24,19 +22,18 @@ 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.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; +import de.danoeh.antennapod.core.dialog.TimeDialog; +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; /** * Provides general features which are both needed for playing audio and video diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java index 2c6d75cd8..d84e6cc03 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java @@ -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; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlFeedChooserActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlFeedChooserActivity.java index e09941abf..8a9ec58d3 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlFeedChooserActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlFeedChooserActivity.java @@ -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; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java index d3fd3949c..2e66978fd 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java @@ -4,9 +4,9 @@ import android.content.Intent; import android.support.v7.app.ActionBarActivity; 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.asynctask.OpmlFeedQueuer; +import de.danoeh.antennapod.core.asynctask.OpmlImportWorker; +import de.danoeh.antennapod.core.opml.OpmlElement; import java.io.Reader; import java.util.ArrayList; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java index 16e663fac..e42072ead 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java @@ -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; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java index 631e69f78..162a8f2e5 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java @@ -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.*; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportHolder.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportHolder.java index ec53ed7b6..7afa270cc 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportHolder.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportHolder.java @@ -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; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java index cd6731c02..65efcc230 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java @@ -21,17 +21,17 @@ import android.view.MenuItem; import android.widget.Toast; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.asynctask.FlattrClickWorker; -import de.danoeh.antennapod.asynctask.OpmlExportWorker; +import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; +import de.danoeh.antennapod.core.asynctask.OpmlExportWorker; import de.danoeh.antennapod.dialog.AuthenticationDialog; import de.danoeh.antennapod.dialog.AutoFlattrPreferenceDialog; import de.danoeh.antennapod.dialog.GpodnetSetHostnameDialog; import de.danoeh.antennapod.dialog.VariableSpeedDialog; -import de.danoeh.antennapod.preferences.GpodnetPreferences; -import de.danoeh.antennapod.preferences.UserPreferences; -import de.danoeh.antennapod.util.flattr.FlattrStatus; -import de.danoeh.antennapod.util.flattr.FlattrUtils; -import de.danoeh.antennapod.util.flattr.SimpleFlattrThing; +import de.danoeh.antennapod.core.preferences.GpodnetPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.util.flattr.FlattrStatus; +import de.danoeh.antennapod.core.util.flattr.FlattrUtils; +import de.danoeh.antennapod.core.util.flattr.SimpleFlattrThing; import java.io.File; import java.util.ArrayList; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java index d8a137eb9..173bec6b2 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java @@ -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 { diff --git a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java index 81661a288..d3df40afb 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java @@ -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; /** diff --git a/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java index 6a60f65fe..d7b069b19 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java @@ -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; diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonCallback.java index 30ad2d03f..a75789815 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonCallback.java @@ -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. */ diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonUtils.java b/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonUtils.java index 1de071a73..fecddeaf4 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonUtils.java @@ -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 diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java index f393fb7d7..c3902639a 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AdapterUtils.java @@ -5,9 +5,9 @@ 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 diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/ChapterListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/ChapterListAdapter.java index c12de6ebd..9e59a2a1a 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/ChapterListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/ChapterListAdapter.java @@ -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; diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java index 0c4cbe685..800462023 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java @@ -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 diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java index 2cc216227..f982e86ce 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java @@ -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 { diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadedEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadedEpisodesListAdapter.java index ef5af67de..8785916a0 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadedEpisodesListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadedEpisodesListAdapter.java @@ -11,9 +11,9 @@ import android.widget.ImageView; import android.widget.TextView; 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.asynctask.PicassoProvider; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.util.Converter; /** * Shows a list of downloaded episodes diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadlistAdapter.java index 658af9e4e..4257c6eb9 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadlistAdapter.java @@ -9,11 +9,11 @@ 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 { diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java index 3f666eb8b..8b1ed9112 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java @@ -13,11 +13,11 @@ import android.widget.ProgressBar; import android.widget.TextView; 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.asynctask.PicassoProvider; +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; /** * Displays unread items and items in the queue in one combined list. The diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index 357b5f8b4..2f69e6580 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -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. diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java index c2c2285ac..9011c8b02 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java @@ -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; diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java index ef8e8ce07..a917633e6 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java @@ -11,8 +11,8 @@ import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.asynctask.PicassoProvider; -import de.danoeh.antennapod.feed.Feed; +import de.danoeh.antennapod.core.asynctask.PicassoProvider; +import de.danoeh.antennapod.core.feed.Feed; /** * BaseAdapter for the navigation drawer diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java index 8abe49133..a0829286c 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java @@ -12,11 +12,11 @@ import android.widget.ProgressBar; import android.widget.TextView; 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.asynctask.PicassoProvider; +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 diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java index ebe519592..bc42ad063 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java @@ -6,10 +6,10 @@ import android.view.View; import android.view.ViewGroup; import android.widget.*; 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.asynctask.PicassoProvider; +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. diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/SearchlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/SearchlistAdapter.java index 2314c2269..79c1f6f99 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/SearchlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/SearchlistAdapter.java @@ -9,11 +9,11 @@ import android.widget.ImageView; import android.widget.TextView; 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.asynctask.PicassoProvider; +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. diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java index f2e78a57e..9063d35c9 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java @@ -11,8 +11,8 @@ import android.widget.TextView; 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.asynctask.PicassoProvider; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast; /** * Adapter for displaying a list of GPodnetPodcast-Objects. diff --git a/app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java b/app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java index 72ebe6347..bf28c17ea 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java +++ b/app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java @@ -6,12 +6,6 @@ package de.danoeh.antennapod.core; */ public class ClientConfig { - /** - * Package name of the client. This string is used as a prefix - * for internal intents. - */ - public static String CLIENT_PACKAGE_NAME; - /** * Should be used when setting User-Agent header for HTTP-requests. */ diff --git a/app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java b/app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java index 1b0c4aab4..9e4ed8e2b 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java +++ b/app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core; import android.app.PendingIntent; -import de.danoeh.antennapod.service.download.DownloadRequest; +import de.danoeh.antennapod.core.service.download.DownloadRequest; /** * Callbacks for the DownloadService of the core module diff --git a/app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java b/app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java index da64b38ad..a74c441c4 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java +++ b/app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core; import android.content.Intent; -import de.danoeh.antennapod.feed.MediaType; +import de.danoeh.antennapod.core.feed.MediaType; /** * Callbacks for the PlaybackService of the core module diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/DownloadObserver.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/asynctask/DownloadObserver.java rename to app/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java index 21ae5291e..8b3635af8 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/DownloadObserver.java +++ b/app/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.asynctask; +package de.danoeh.antennapod.core.asynctask; import android.app.Activity; import android.content.*; @@ -9,8 +9,8 @@ import android.util.Log; import org.apache.commons.lang3.Validate; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.service.download.DownloadService; -import de.danoeh.antennapod.service.download.Downloader; +import de.danoeh.antennapod.core.service.download.DownloadService; +import de.danoeh.antennapod.core.service.download.Downloader; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/FeedRemover.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/asynctask/FeedRemover.java rename to app/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java index 0549a4255..2201dfbe7 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/FeedRemover.java +++ b/app/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.asynctask; +package de.danoeh.antennapod.core.asynctask; import android.annotation.SuppressLint; import android.app.ProgressDialog; @@ -7,8 +7,8 @@ import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.os.AsyncTask; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.storage.DBWriter; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.storage.DBWriter; import java.util.concurrent.ExecutionException; diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/FlattrClickWorker.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/asynctask/FlattrClickWorker.java rename to app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java index 9210ac1d1..44ad91981 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/FlattrClickWorker.java +++ b/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.asynctask; +package de.danoeh.antennapod.core.asynctask; import android.annotation.TargetApi; import android.app.Notification; @@ -23,11 +23,11 @@ import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.FlattrAuthActivity; import de.danoeh.antennapod.activity.MainActivity; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.DBWriter; -import de.danoeh.antennapod.util.NetworkUtils; -import de.danoeh.antennapod.util.flattr.FlattrThing; -import de.danoeh.antennapod.util.flattr.FlattrUtils; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.core.util.flattr.FlattrThing; +import de.danoeh.antennapod.core.util.flattr.FlattrUtils; /** * Performs a click action in a background thread. diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/FlattrStatusFetcher.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrStatusFetcher.java similarity index 90% rename from app/src/main/java/de/danoeh/antennapod/asynctask/FlattrStatusFetcher.java rename to app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrStatusFetcher.java index 04d349671..ddc4370e6 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/FlattrStatusFetcher.java +++ b/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrStatusFetcher.java @@ -1,10 +1,10 @@ -package de.danoeh.antennapod.asynctask; +package de.danoeh.antennapod.core.asynctask; import android.content.Context; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.storage.DBWriter; -import de.danoeh.antennapod.util.flattr.FlattrUtils; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.util.flattr.FlattrUtils; import org.shredzone.flattr4j.exception.FlattrException; import org.shredzone.flattr4j.model.Flattr; diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/FlattrTokenFetcher.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/asynctask/FlattrTokenFetcher.java rename to app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java index 0dcf832f7..6f8319c7d 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/FlattrTokenFetcher.java +++ b/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.asynctask; +package de.danoeh.antennapod.core.asynctask; import android.annotation.SuppressLint; @@ -10,7 +10,7 @@ import android.util.Log; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.FlattrAuthActivity; -import de.danoeh.antennapod.util.flattr.FlattrUtils; +import de.danoeh.antennapod.core.util.flattr.FlattrUtils; import org.shredzone.flattr4j.exception.FlattrException; import org.shredzone.flattr4j.oauth.AccessToken; import org.shredzone.flattr4j.oauth.AndroidAuthenticator; diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlExportWorker.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java rename to app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlExportWorker.java index 4abb1a67d..9f887bda6 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java +++ b/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlExportWorker.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.asynctask; +package de.danoeh.antennapod.core.asynctask; import android.annotation.SuppressLint; import android.app.AlertDialog; @@ -9,10 +9,10 @@ import android.os.AsyncTask; import android.util.Log; import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.opml.OpmlWriter; -import de.danoeh.antennapod.preferences.UserPreferences; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.util.LangUtils; +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; import java.io.File; import java.io.FileOutputStream; diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlFeedQueuer.java similarity index 86% rename from app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java rename to app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlFeedQueuer.java index 038b8dcc5..13144faa9 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java +++ b/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlFeedQueuer.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.asynctask; +package de.danoeh.antennapod.core.asynctask; import android.annotation.SuppressLint; import android.app.ProgressDialog; @@ -6,10 +6,10 @@ import android.content.Context; import android.os.AsyncTask; import de.danoeh.antennapod.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; diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlImportWorker.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlImportWorker.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/asynctask/OpmlImportWorker.java rename to app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlImportWorker.java index 13534fa64..a4308be9b 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlImportWorker.java +++ b/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlImportWorker.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.asynctask; +package de.danoeh.antennapod.core.asynctask; import android.annotation.SuppressLint; import android.app.AlertDialog; @@ -10,8 +10,8 @@ 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.opml.OpmlElement; +import de.danoeh.antennapod.core.opml.OpmlReader; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/PicassoImageResource.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoImageResource.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/asynctask/PicassoImageResource.java rename to app/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoImageResource.java index 26f9d9278..c0d8049db 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/PicassoImageResource.java +++ b/app/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoImageResource.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.asynctask; +package de.danoeh.antennapod.core.asynctask; import android.net.Uri; diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/PicassoProvider.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/asynctask/PicassoProvider.java rename to app/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java index 849725630..6ace92800 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/PicassoProvider.java +++ b/app/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.asynctask; +package de.danoeh.antennapod.core.asynctask; import android.content.Context; import android.media.MediaMetadataRetriever; diff --git a/app/src/main/java/de/danoeh/antennapod/backup/OpmlBackupAgent.java b/app/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/backup/OpmlBackupAgent.java rename to app/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java index 56d1ca092..72b5066b3 100644 --- a/app/src/main/java/de/danoeh/antennapod/backup/OpmlBackupAgent.java +++ b/app/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.backup; +package de.danoeh.antennapod.core.backup; import android.app.backup.BackupAgentHelper; import android.app.backup.BackupDataInputStream; @@ -28,15 +28,14 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; -import de.danoeh.antennapod.AppConfig; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.opml.OpmlElement; -import de.danoeh.antennapod.opml.OpmlReader; -import de.danoeh.antennapod.opml.OpmlWriter; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.DownloadRequestException; -import de.danoeh.antennapod.storage.DownloadRequester; -import de.danoeh.antennapod.util.LangUtils; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.opml.OpmlElement; +import de.danoeh.antennapod.core.opml.OpmlReader; +import de.danoeh.antennapod.core.opml.OpmlWriter; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DownloadRequestException; +import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.LangUtils; public class OpmlBackupAgent extends BackupAgentHelper { private static final String OPML_BACKUP_KEY = "opml"; diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ConfirmationDialog.java b/app/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/dialog/ConfirmationDialog.java rename to app/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java index df71fff77..e51d70708 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/ConfirmationDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.dialog; +package de.danoeh.antennapod.core.dialog; import android.app.AlertDialog; import android.content.Context; diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/DownloadRequestErrorDialogCreator.java b/app/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/dialog/DownloadRequestErrorDialogCreator.java rename to app/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java index e363a6911..a1c3a4c6a 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/DownloadRequestErrorDialogCreator.java +++ b/app/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.dialog; +package de.danoeh.antennapod.core.dialog; import android.app.AlertDialog; import android.content.Context; diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/TimeDialog.java b/app/src/main/java/de/danoeh/antennapod/core/dialog/TimeDialog.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/dialog/TimeDialog.java rename to app/src/main/java/de/danoeh/antennapod/core/dialog/TimeDialog.java index bbd514640..a95e8c6c5 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/TimeDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/core/dialog/TimeDialog.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.dialog; +package de.danoeh.antennapod.core.dialog; import android.app.Dialog; import android.content.Context; diff --git a/app/src/main/java/de/danoeh/antennapod/feed/Chapter.java b/app/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/feed/Chapter.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java index d6151ee9f..ce3352ed6 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/Chapter.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; public abstract class Chapter extends FeedComponent { diff --git a/app/src/main/java/de/danoeh/antennapod/feed/EventDistributor.java b/app/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/feed/EventDistributor.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java index 5fb72048e..65c55a361 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/EventDistributor.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; import android.os.Handler; import android.util.Log; diff --git a/app/src/main/java/de/danoeh/antennapod/feed/Feed.java b/app/src/main/java/de/danoeh/antennapod/core/feed/Feed.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/feed/Feed.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/Feed.java index b5415c69c..3f83ab8b6 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/Feed.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/Feed.java @@ -1,14 +1,14 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; import android.content.Context; import android.net.Uri; -import de.danoeh.antennapod.asynctask.PicassoImageResource; -import de.danoeh.antennapod.preferences.UserPreferences; -import de.danoeh.antennapod.storage.DBWriter; -import de.danoeh.antennapod.util.EpisodeFilter; -import de.danoeh.antennapod.util.flattr.FlattrStatus; -import de.danoeh.antennapod.util.flattr.FlattrThing; +import de.danoeh.antennapod.core.asynctask.PicassoImageResource; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.util.EpisodeFilter; +import de.danoeh.antennapod.core.util.flattr.FlattrStatus; +import de.danoeh.antennapod.core.util.flattr.FlattrThing; import java.util.ArrayList; import java.util.Date; diff --git a/app/src/main/java/de/danoeh/antennapod/feed/FeedComponent.java b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/feed/FeedComponent.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java index 48b243770..05115c1ea 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/FeedComponent.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; /** * Represents every possible component of a feed diff --git a/app/src/main/java/de/danoeh/antennapod/feed/FeedFile.java b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedFile.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/feed/FeedFile.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/FeedFile.java index a05533ebc..3dc58654b 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/FeedFile.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedFile.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; import java.io.File; diff --git a/app/src/main/java/de/danoeh/antennapod/feed/FeedImage.java b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java similarity index 85% rename from app/src/main/java/de/danoeh/antennapod/feed/FeedImage.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java index c588f5e71..51605691d 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/FeedImage.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java @@ -1,16 +1,10 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; import android.net.Uri; -import de.danoeh.antennapod.asynctask.PicassoImageResource; - -import org.apache.commons.io.IOUtils; +import de.danoeh.antennapod.core.asynctask.PicassoImageResource; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.InputStream; - public class FeedImage extends FeedFile implements PicassoImageResource { diff --git a/app/src/main/java/de/danoeh/antennapod/feed/FeedItem.java b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/feed/FeedItem.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 78091ea33..55143b13b 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/FeedItem.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -1,15 +1,14 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; import android.net.Uri; import de.danoeh.antennapod.PodcastApp; -import de.danoeh.antennapod.asynctask.PicassoImageResource; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.util.ShownotesProvider; -import de.danoeh.antennapod.util.flattr.FlattrStatus; -import de.danoeh.antennapod.util.flattr.FlattrThing; +import de.danoeh.antennapod.core.asynctask.PicassoImageResource; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.util.ShownotesProvider; +import de.danoeh.antennapod.core.util.flattr.FlattrStatus; +import de.danoeh.antennapod.core.util.flattr.FlattrThing; -import java.io.InputStream; import java.util.Date; import java.util.List; import java.util.concurrent.Callable; diff --git a/app/src/main/java/de/danoeh/antennapod/feed/FeedMedia.java b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/feed/FeedMedia.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 9298ebe8a..ab87e822d 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/FeedMedia.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; @@ -6,19 +6,16 @@ import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; import java.util.Date; import java.util.List; import java.util.concurrent.Callable; import de.danoeh.antennapod.PodcastApp; -import de.danoeh.antennapod.preferences.PlaybackPreferences; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.DBWriter; -import de.danoeh.antennapod.util.ChapterUtils; -import de.danoeh.antennapod.util.playback.Playable; +import de.danoeh.antennapod.core.preferences.PlaybackPreferences; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.util.ChapterUtils; +import de.danoeh.antennapod.core.util.playback.Playable; public class FeedMedia extends FeedFile implements Playable { private static final String TAG = "FeedMedia"; diff --git a/app/src/main/java/de/danoeh/antennapod/feed/FeedPreferences.java b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/feed/FeedPreferences.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java index 29bc5ef0c..2f0304182 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/FeedPreferences.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java @@ -1,7 +1,7 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; import android.content.Context; -import de.danoeh.antennapod.storage.DBWriter; +import de.danoeh.antennapod.core.storage.DBWriter; import org.apache.commons.lang3.StringUtils; /** diff --git a/app/src/main/java/de/danoeh/antennapod/feed/ID3Chapter.java b/app/src/main/java/de/danoeh/antennapod/core/feed/ID3Chapter.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/feed/ID3Chapter.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/ID3Chapter.java index 6dde7854e..f0ff03a93 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/ID3Chapter.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/ID3Chapter.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; public class ID3Chapter extends Chapter { public static final int CHAPTERTYPE_ID3CHAPTER = 2; diff --git a/app/src/main/java/de/danoeh/antennapod/feed/MediaType.java b/app/src/main/java/de/danoeh/antennapod/core/feed/MediaType.java similarity index 55% rename from app/src/main/java/de/danoeh/antennapod/feed/MediaType.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/MediaType.java index 324d0a221..7b3cb829d 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/MediaType.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/MediaType.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; public enum MediaType { AUDIO, VIDEO, UNKNOWN diff --git a/app/src/main/java/de/danoeh/antennapod/feed/SearchResult.java b/app/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/feed/SearchResult.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java index 1cba389ec..9aa8d3170 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/SearchResult.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; public class SearchResult { private FeedComponent component; diff --git a/app/src/main/java/de/danoeh/antennapod/feed/SimpleChapter.java b/app/src/main/java/de/danoeh/antennapod/core/feed/SimpleChapter.java similarity index 92% rename from app/src/main/java/de/danoeh/antennapod/feed/SimpleChapter.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/SimpleChapter.java index 3dab1b74d..2dadd3ec8 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/SimpleChapter.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/SimpleChapter.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; public class SimpleChapter extends Chapter { public static final int CHAPTERTYPE_SIMPLECHAPTER = 0; diff --git a/app/src/main/java/de/danoeh/antennapod/feed/VorbisCommentChapter.java b/app/src/main/java/de/danoeh/antennapod/core/feed/VorbisCommentChapter.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/feed/VorbisCommentChapter.java rename to app/src/main/java/de/danoeh/antennapod/core/feed/VorbisCommentChapter.java index 59844ae1f..5b54a2d59 100644 --- a/app/src/main/java/de/danoeh/antennapod/feed/VorbisCommentChapter.java +++ b/app/src/main/java/de/danoeh/antennapod/core/feed/VorbisCommentChapter.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.feed; +package de.danoeh.antennapod.core.feed; -import de.danoeh.antennapod.util.vorbiscommentreader.VorbisCommentReaderException; +import de.danoeh.antennapod.core.util.vorbiscommentreader.VorbisCommentReaderException; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetService.java b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetService.java rename to app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java index 038b2a367..117cbf96b 100644 --- a/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetService.java +++ b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.gpoddernet; +package de.danoeh.antennapod.core.gpoddernet; import org.apache.commons.lang3.Validate; import org.apache.http.Header; @@ -30,13 +30,13 @@ import java.util.Collection; import java.util.LinkedList; import java.util.List; -import de.danoeh.antennapod.gpoddernet.model.GpodnetDevice; -import de.danoeh.antennapod.gpoddernet.model.GpodnetPodcast; -import de.danoeh.antennapod.gpoddernet.model.GpodnetSubscriptionChange; -import de.danoeh.antennapod.gpoddernet.model.GpodnetTag; -import de.danoeh.antennapod.gpoddernet.model.GpodnetUploadChangesResponse; -import de.danoeh.antennapod.preferences.GpodnetPreferences; -import de.danoeh.antennapod.service.download.AntennapodHttpClient; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetDevice; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetSubscriptionChange; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetTag; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetUploadChangesResponse; +import de.danoeh.antennapod.core.preferences.GpodnetPreferences; +import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; /** * Communicates with the gpodder.net service. @@ -396,10 +396,10 @@ public class GpodnetService { * @param deviceId The ID of the device whose subscriptions should be updated. * @param added Collection of feed URLs of added feeds. This Collection MUST NOT contain any duplicates * @param removed Collection of feed URLs of removed feeds. This Collection MUST NOT contain any duplicates - * @return a GpodnetUploadChangesResponse. See {@link de.danoeh.antennapod.gpoddernet.model.GpodnetUploadChangesResponse} + * @return a GpodnetUploadChangesResponse. See {@link de.danoeh.antennapod.core.gpoddernet.model.GpodnetUploadChangesResponse} * for details. * @throws java.lang.IllegalArgumentException if username, deviceId, added or removed is null. - * @throws de.danoeh.antennapod.gpoddernet.GpodnetServiceException if added or removed contain duplicates or if there + * @throws de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException if added or removed contain duplicates or if there * is an authentication error. */ public GpodnetUploadChangesResponse uploadChanges(String username, String deviceId, Collection added, diff --git a/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceAuthenticationException.java b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceAuthenticationException.java rename to app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java index 3b0140826..8bd56218c 100644 --- a/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceAuthenticationException.java +++ b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.gpoddernet; +package de.danoeh.antennapod.core.gpoddernet; public class GpodnetServiceAuthenticationException extends GpodnetServiceException { diff --git a/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceBadStatusCodeException.java b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java similarity index 84% rename from app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceBadStatusCodeException.java rename to app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java index a32e9357b..16f01f0f4 100644 --- a/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceBadStatusCodeException.java +++ b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.gpoddernet; +package de.danoeh.antennapod.core.gpoddernet; public class GpodnetServiceBadStatusCodeException extends GpodnetServiceException { int statusCode; diff --git a/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceException.java b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java similarity index 89% rename from app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceException.java rename to app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java index bdb394454..ce704f7e3 100644 --- a/app/src/main/java/de/danoeh/antennapod/gpoddernet/GpodnetServiceException.java +++ b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.gpoddernet; +package de.danoeh.antennapod.core.gpoddernet; public class GpodnetServiceException extends Exception { diff --git a/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetDevice.java b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetDevice.java rename to app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java index 86a2171fa..4885a243a 100644 --- a/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetDevice.java +++ b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.gpoddernet.model; +package de.danoeh.antennapod.core.gpoddernet.model; import org.apache.commons.lang3.Validate; diff --git a/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetPodcast.java b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetPodcast.java rename to app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java index b002035c9..afebf66ac 100644 --- a/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetPodcast.java +++ b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.gpoddernet.model; +package de.danoeh.antennapod.core.gpoddernet.model; import org.apache.commons.lang3.Validate; diff --git a/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetSubscriptionChange.java b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetSubscriptionChange.java rename to app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java index a4617118d..a5cb8c0f0 100644 --- a/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetSubscriptionChange.java +++ b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.gpoddernet.model; +package de.danoeh.antennapod.core.gpoddernet.model; import org.apache.commons.lang3.Validate; diff --git a/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetTag.java b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetTag.java rename to app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java index 80b84095e..7178f4be5 100644 --- a/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetTag.java +++ b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.gpoddernet.model; +package de.danoeh.antennapod.core.gpoddernet.model; import org.apache.commons.lang3.Validate; diff --git a/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetUploadChangesResponse.java b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetUploadChangesResponse.java rename to app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java index fee8c7d28..5a37efa5e 100644 --- a/app/src/main/java/de/danoeh/antennapod/gpoddernet/model/GpodnetUploadChangesResponse.java +++ b/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.gpoddernet.model; +package de.danoeh.antennapod.core.gpoddernet.model; import org.json.JSONArray; import org.json.JSONException; @@ -8,7 +8,7 @@ import java.util.HashMap; import java.util.Map; /** - * Object returned by {@link de.danoeh.antennapod.gpoddernet.GpodnetService} in uploadChanges method. + * Object returned by {@link de.danoeh.antennapod.core.gpoddernet.GpodnetService} in uploadChanges method. */ public class GpodnetUploadChangesResponse { diff --git a/app/src/main/java/de/danoeh/antennapod/opml/OpmlElement.java b/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlElement.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/opml/OpmlElement.java rename to app/src/main/java/de/danoeh/antennapod/core/opml/OpmlElement.java index 4cb563c04..8d0a4a842 100644 --- a/app/src/main/java/de/danoeh/antennapod/opml/OpmlElement.java +++ b/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlElement.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.opml; +package de.danoeh.antennapod.core.opml; /** Represents a single feed in an OPML file. */ public class OpmlElement { diff --git a/app/src/main/java/de/danoeh/antennapod/opml/OpmlReader.java b/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlReader.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/opml/OpmlReader.java rename to app/src/main/java/de/danoeh/antennapod/core/opml/OpmlReader.java index 19a980dee..aa484954d 100644 --- a/app/src/main/java/de/danoeh/antennapod/opml/OpmlReader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlReader.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.opml; +package de.danoeh.antennapod.core.opml; import android.util.Log; import de.danoeh.antennapod.BuildConfig; diff --git a/app/src/main/java/de/danoeh/antennapod/opml/OpmlSymbols.java b/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlSymbols.java similarity index 93% rename from app/src/main/java/de/danoeh/antennapod/opml/OpmlSymbols.java rename to app/src/main/java/de/danoeh/antennapod/core/opml/OpmlSymbols.java index 4b0b7316a..2b831ca2a 100644 --- a/app/src/main/java/de/danoeh/antennapod/opml/OpmlSymbols.java +++ b/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlSymbols.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.opml; +package de.danoeh.antennapod.core.opml; /** Contains symbols for reading and writing OPML documents. */ public final class OpmlSymbols { diff --git a/app/src/main/java/de/danoeh/antennapod/opml/OpmlWriter.java b/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlWriter.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/opml/OpmlWriter.java rename to app/src/main/java/de/danoeh/antennapod/core/opml/OpmlWriter.java index 405a5e35a..fe14b4954 100644 --- a/app/src/main/java/de/danoeh/antennapod/opml/OpmlWriter.java +++ b/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlWriter.java @@ -1,9 +1,9 @@ -package de.danoeh.antennapod.opml; +package de.danoeh.antennapod.core.opml; import android.util.Log; import android.util.Xml; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.Feed; +import de.danoeh.antennapod.core.feed.Feed; import org.xmlpull.v1.XmlSerializer; import java.io.IOException; diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/GpodnetPreferences.java b/app/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/preferences/GpodnetPreferences.java rename to app/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java index bdfe297a6..716a74f53 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/GpodnetPreferences.java +++ b/app/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java @@ -1,12 +1,12 @@ -package de.danoeh.antennapod.preferences; +package de.danoeh.antennapod.core.preferences; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.PodcastApp; -import de.danoeh.antennapod.gpoddernet.GpodnetService; -import de.danoeh.antennapod.service.GpodnetSyncService; +import de.danoeh.antennapod.core.gpoddernet.GpodnetService; +import de.danoeh.antennapod.core.service.GpodnetSyncService; import java.util.Collection; import java.util.HashSet; diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PlaybackPreferences.java b/app/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/preferences/PlaybackPreferences.java rename to app/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java index 1d1ab052f..756b4067c 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PlaybackPreferences.java +++ b/app/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.preferences; +package de.danoeh.antennapod.core.preferences; import android.content.Context; import android.content.SharedPreferences; diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/UserPreferences.java b/app/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/preferences/UserPreferences.java rename to app/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index d7807ddac..1669fc601 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/UserPreferences.java +++ b/app/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.preferences; +package de.danoeh.antennapod.core.preferences; import android.app.AlarmManager; import android.app.PendingIntent; @@ -21,7 +21,7 @@ import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.receiver.FeedUpdateReceiver; +import de.danoeh.antennapod.core.receiver.FeedUpdateReceiver; /** * Provides access to preferences set by the user in the settings screen. A diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/AlarmUpdateReceiver.java b/app/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java similarity index 90% rename from app/src/main/java/de/danoeh/antennapod/receiver/AlarmUpdateReceiver.java rename to app/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java index a0539e276..2057b0881 100644 --- a/app/src/main/java/de/danoeh/antennapod/receiver/AlarmUpdateReceiver.java +++ b/app/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.receiver; +package de.danoeh.antennapod.core.receiver; import android.content.BroadcastReceiver; import android.content.Context; @@ -8,7 +8,7 @@ import android.util.Log; import org.apache.commons.lang3.StringUtils; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.preferences.UserPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; /** Listens for events that make it necessary to reset the update alarm. */ public class AlarmUpdateReceiver extends BroadcastReceiver { diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java b/app/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java similarity index 87% rename from app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java rename to app/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java index 4dcf0b6aa..e6b1a1b49 100644 --- a/app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java +++ b/app/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.receiver; +package de.danoeh.antennapod.core.receiver; import android.content.BroadcastReceiver; import android.content.Context; @@ -10,9 +10,9 @@ import android.util.Log; import org.apache.commons.lang3.StringUtils; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.storage.DBTasks; -import de.danoeh.antennapod.storage.DownloadRequester; -import de.danoeh.antennapod.util.NetworkUtils; +import de.danoeh.antennapod.core.storage.DBTasks; +import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.NetworkUtils; public class ConnectivityActionReceiver extends BroadcastReceiver { private static final String TAG = "ConnectivityActionReceiver"; diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/FeedUpdateReceiver.java b/app/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java similarity index 89% rename from app/src/main/java/de/danoeh/antennapod/receiver/FeedUpdateReceiver.java rename to app/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java index 3c283a30b..ec63bc2ae 100644 --- a/app/src/main/java/de/danoeh/antennapod/receiver/FeedUpdateReceiver.java +++ b/app/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.receiver; +package de.danoeh.antennapod.core.receiver; import android.content.BroadcastReceiver; import android.content.Context; @@ -10,8 +10,8 @@ import android.util.Log; import org.apache.commons.lang3.StringUtils; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.preferences.UserPreferences; -import de.danoeh.antennapod.storage.DBTasks; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.DBTasks; /** Refreshes all feeds when it receives an intent */ public class FeedUpdateReceiver extends BroadcastReceiver { diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/MediaButtonReceiver.java b/app/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java similarity index 85% rename from app/src/main/java/de/danoeh/antennapod/receiver/MediaButtonReceiver.java rename to app/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java index 1edebd275..be54148cf 100644 --- a/app/src/main/java/de/danoeh/antennapod/receiver/MediaButtonReceiver.java +++ b/app/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.receiver; +package de.danoeh.antennapod.core.receiver; import android.content.BroadcastReceiver; import android.content.Context; @@ -6,12 +6,12 @@ import android.content.Intent; import android.util.Log; import android.view.KeyEvent; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.service.playback.PlaybackService; +import de.danoeh.antennapod.core.service.playback.PlaybackService; /** Receives media button events. */ public class MediaButtonReceiver extends BroadcastReceiver { private static final String TAG = "MediaButtonReceiver"; - public static final String EXTRA_KEYCODE = "de.danoeh.antennapod.service.extra.MediaButtonReceiver.KEYCODE"; + public static final String EXTRA_KEYCODE = "de.danoeh.antennapod.core.service.extra.MediaButtonReceiver.KEYCODE"; public static final String NOTIFY_BUTTON_RECEIVER = "de.danoeh.antennapod.NOTIFY_BUTTON_RECEIVER"; diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java b/app/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java similarity index 92% rename from app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java rename to app/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java index 9f8892181..3dcfecdbd 100644 --- a/app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java +++ b/app/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.receiver; +package de.danoeh.antennapod.core.receiver; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; @@ -9,7 +9,7 @@ import android.util.Log; import org.apache.commons.lang3.StringUtils; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.service.playback.PlayerWidgetService; +import de.danoeh.antennapod.core.service.playback.PlayerWidgetService; public class PlayerWidget extends AppWidgetProvider { private static final String TAG = "PlayerWidget"; diff --git a/app/src/main/java/de/danoeh/antennapod/service/GpodnetSyncService.java b/app/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java similarity index 92% rename from app/src/main/java/de/danoeh/antennapod/service/GpodnetSyncService.java rename to app/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java index efc44c66a..8a2659029 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/GpodnetSyncService.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service; +package de.danoeh.antennapod.core.service; import android.app.Notification; import android.app.NotificationManager; @@ -12,18 +12,18 @@ import android.util.Log; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.gpoddernet.GpodnetService; -import de.danoeh.antennapod.gpoddernet.GpodnetServiceAuthenticationException; -import de.danoeh.antennapod.gpoddernet.GpodnetServiceException; -import de.danoeh.antennapod.gpoddernet.model.GpodnetSubscriptionChange; -import de.danoeh.antennapod.gpoddernet.model.GpodnetUploadChangesResponse; -import de.danoeh.antennapod.preferences.GpodnetPreferences; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.DBTasks; -import de.danoeh.antennapod.storage.DownloadRequestException; -import de.danoeh.antennapod.storage.DownloadRequester; -import de.danoeh.antennapod.util.NetworkUtils; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.gpoddernet.GpodnetService; +import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceAuthenticationException; +import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetSubscriptionChange; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetUploadChangesResponse; +import de.danoeh.antennapod.core.preferences.GpodnetPreferences; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBTasks; +import de.danoeh.antennapod.core.storage.DownloadRequestException; +import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.NetworkUtils; import java.util.Date; import java.util.LinkedList; diff --git a/app/src/main/java/de/danoeh/antennapod/service/download/APRedirectHandler.java b/app/src/main/java/de/danoeh/antennapod/core/service/download/APRedirectHandler.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/service/download/APRedirectHandler.java rename to app/src/main/java/de/danoeh/antennapod/core/service/download/APRedirectHandler.java index ddf8d605d..1c62eaa77 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/download/APRedirectHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/download/APRedirectHandler.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.download; +package de.danoeh.antennapod.core.service.download; import android.util.Log; import de.danoeh.antennapod.BuildConfig; diff --git a/app/src/main/java/de/danoeh/antennapod/service/download/AntennapodHttpClient.java b/app/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/service/download/AntennapodHttpClient.java rename to app/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java index be331ce9b..dc792db81 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/download/AntennapodHttpClient.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.download; +package de.danoeh.antennapod.core.service.download; import android.util.Log; import de.danoeh.antennapod.AppConfig; diff --git a/app/src/main/java/de/danoeh/antennapod/service/download/DownloadRequest.java b/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/service/download/DownloadRequest.java rename to app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java index e803d30d4..c79da0a48 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/download/DownloadRequest.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.download; +package de.danoeh.antennapod.core.service.download; import android.os.Parcel; import android.os.Parcelable; diff --git a/app/src/main/java/de/danoeh/antennapod/service/download/DownloadService.java b/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/service/download/DownloadService.java rename to app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index d0d75d2d7..e9381d509 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/download/DownloadService.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.download; +package de.danoeh.antennapod.core.service.download; import android.annotation.SuppressLint; import android.app.Notification; @@ -34,7 +34,6 @@ import java.util.Collections; import java.util.Date; import java.util.LinkedList; import java.util.List; -import java.util.Queue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; @@ -59,23 +58,23 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.DownloadAuthenticationActivity; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.NavListAdapter; -import de.danoeh.antennapod.feed.EventDistributor; -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.feed.FeedPreferences; +import de.danoeh.antennapod.core.feed.EventDistributor; +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.feed.FeedPreferences; import de.danoeh.antennapod.fragment.DownloadsFragment; -import de.danoeh.antennapod.storage.DBReader; -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.syndication.handler.FeedHandler; -import de.danoeh.antennapod.syndication.handler.UnsupportedFeedtypeException; -import de.danoeh.antennapod.util.ChapterUtils; -import de.danoeh.antennapod.util.DownloadError; -import de.danoeh.antennapod.util.InvalidFeedException; +import de.danoeh.antennapod.core.storage.DBReader; +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; +import de.danoeh.antennapod.core.syndication.handler.FeedHandler; +import de.danoeh.antennapod.core.syndication.handler.UnsupportedFeedtypeException; +import de.danoeh.antennapod.core.util.ChapterUtils; +import de.danoeh.antennapod.core.util.DownloadError; +import de.danoeh.antennapod.core.util.InvalidFeedException; /** * Manages the download of feedfiles in the app. Downloads can be enqueued viathe startService intent. @@ -91,12 +90,12 @@ public class DownloadService extends Service { * Cancels one download. The intent MUST have an EXTRA_DOWNLOAD_URL extra that contains the download URL of the * object whose download should be cancelled. */ - public static final String ACTION_CANCEL_DOWNLOAD = "action.de.danoeh.antennapod.service.cancelDownload"; + public static final String ACTION_CANCEL_DOWNLOAD = "action.de.danoeh.antennapod.core.service.cancelDownload"; /** * Cancels all running downloads. */ - public static final String ACTION_CANCEL_ALL_DOWNLOADS = "action.de.danoeh.antennapod.service.cancelAllDownloads"; + public static final String ACTION_CANCEL_ALL_DOWNLOADS = "action.de.danoeh.antennapod.core.service.cancelAllDownloads"; /** * Extra for ACTION_CANCEL_DOWNLOAD @@ -107,7 +106,7 @@ public class DownloadService extends Service { * Sent by the DownloadService when the content of the downloads list * changes. */ - public static final String ACTION_DOWNLOADS_CONTENT_CHANGED = "action.de.danoeh.antennapod.service.downloadsContentChanged"; + public static final String ACTION_DOWNLOADS_CONTENT_CHANGED = "action.de.danoeh.antennapod.core.service.downloadsContentChanged"; /** * Extra for ACTION_ENQUEUE_DOWNLOAD intent. diff --git a/app/src/main/java/de/danoeh/antennapod/service/download/DownloadStatus.java b/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/service/download/DownloadStatus.java rename to app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java index 1d76770bb..d05650d10 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/download/DownloadStatus.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java @@ -1,9 +1,9 @@ -package de.danoeh.antennapod.service.download; +package de.danoeh.antennapod.core.service.download; import org.apache.commons.lang3.Validate; -import de.danoeh.antennapod.feed.FeedFile; -import de.danoeh.antennapod.util.DownloadError; +import de.danoeh.antennapod.core.feed.FeedFile; +import de.danoeh.antennapod.core.util.DownloadError; import java.util.Date; diff --git a/app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java b/app/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java rename to app/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java index 80cc5b3f8..5af9c2d05 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/download/Downloader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.download; +package de.danoeh.antennapod.core.service.download; import android.content.Context; import android.net.wifi.WifiManager; diff --git a/app/src/main/java/de/danoeh/antennapod/service/download/DownloaderCallback.java b/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderCallback.java similarity index 80% rename from app/src/main/java/de/danoeh/antennapod/service/download/DownloaderCallback.java rename to app/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderCallback.java index 08420e83a..2d9347b0a 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/download/DownloaderCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderCallback.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.download; +package de.danoeh.antennapod.core.service.download; /** * Callback used by the Downloader-classes to notify the requester that the diff --git a/app/src/main/java/de/danoeh/antennapod/service/download/HttpDownloader.java b/app/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/service/download/HttpDownloader.java rename to app/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java index 7ae96dc07..cba59be01 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/download/HttpDownloader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java @@ -1,14 +1,14 @@ -package de.danoeh.antennapod.service.download; +package de.danoeh.antennapod.core.service.download; import android.net.http.AndroidHttpClient; import android.util.Log; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.feed.FeedImage; -import de.danoeh.antennapod.util.DownloadError; -import de.danoeh.antennapod.util.StorageUtils; -import de.danoeh.antennapod.util.URIUtil; +import de.danoeh.antennapod.core.feed.FeedImage; +import de.danoeh.antennapod.core.util.DownloadError; +import de.danoeh.antennapod.core.util.StorageUtils; +import de.danoeh.antennapod.core.util.URIUtil; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.http.Header; diff --git a/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackService.java b/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackService.java rename to app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index 96b9588c4..c191c9521 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackService.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.playback; +package de.danoeh.antennapod.core.service.playback; import android.annotation.SuppressLint; import android.app.Notification; @@ -38,20 +38,20 @@ import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.AudioplayerActivity; import de.danoeh.antennapod.activity.VideoplayerActivity; -import de.danoeh.antennapod.asynctask.PicassoProvider; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.feed.MediaType; -import de.danoeh.antennapod.preferences.PlaybackPreferences; -import de.danoeh.antennapod.preferences.UserPreferences; -import de.danoeh.antennapod.receiver.MediaButtonReceiver; -import de.danoeh.antennapod.receiver.PlayerWidget; -import de.danoeh.antennapod.storage.DBTasks; -import de.danoeh.antennapod.storage.DBWriter; -import de.danoeh.antennapod.util.QueueAccess; -import de.danoeh.antennapod.util.flattr.FlattrUtils; -import de.danoeh.antennapod.util.playback.Playable; +import de.danoeh.antennapod.core.asynctask.PicassoProvider; +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.feed.MediaType; +import de.danoeh.antennapod.core.preferences.PlaybackPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.receiver.MediaButtonReceiver; +import de.danoeh.antennapod.core.receiver.PlayerWidget; +import de.danoeh.antennapod.core.storage.DBTasks; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.flattr.FlattrUtils; +import de.danoeh.antennapod.core.util.playback.Playable; /** * Controls the MediaPlayer that plays a FeedMedia-file @@ -69,34 +69,34 @@ public class PlaybackService extends Service { /** * True if media should be streamed. */ - public static final String EXTRA_SHOULD_STREAM = "extra.de.danoeh.antennapod.service.shouldStream"; + public static final String EXTRA_SHOULD_STREAM = "extra.de.danoeh.antennapod.core.service.shouldStream"; /** * True if playback should be started immediately after media has been * prepared. */ - public static final String EXTRA_START_WHEN_PREPARED = "extra.de.danoeh.antennapod.service.startWhenPrepared"; + public static final String EXTRA_START_WHEN_PREPARED = "extra.de.danoeh.antennapod.core.service.startWhenPrepared"; - public static final String EXTRA_PREPARE_IMMEDIATELY = "extra.de.danoeh.antennapod.service.prepareImmediately"; + public static final String EXTRA_PREPARE_IMMEDIATELY = "extra.de.danoeh.antennapod.core.service.prepareImmediately"; - public static final String ACTION_PLAYER_STATUS_CHANGED = "action.de.danoeh.antennapod.service.playerStatusChanged"; + public static final String ACTION_PLAYER_STATUS_CHANGED = "action.de.danoeh.antennapod.core.service.playerStatusChanged"; private static final String AVRCP_ACTION_PLAYER_STATUS_CHANGED = "com.android.music.playstatechanged"; private static final String AVRCP_ACTION_META_CHANGED = "com.android.music.metachanged"; - public static final String ACTION_PLAYER_NOTIFICATION = "action.de.danoeh.antennapod.service.playerNotification"; - public static final String EXTRA_NOTIFICATION_CODE = "extra.de.danoeh.antennapod.service.notificationCode"; - public static final String EXTRA_NOTIFICATION_TYPE = "extra.de.danoeh.antennapod.service.notificationType"; + public static final String ACTION_PLAYER_NOTIFICATION = "action.de.danoeh.antennapod.core.service.playerNotification"; + public static final String EXTRA_NOTIFICATION_CODE = "extra.de.danoeh.antennapod.core.service.notificationCode"; + public static final String EXTRA_NOTIFICATION_TYPE = "extra.de.danoeh.antennapod.core.service.notificationType"; /** * If the PlaybackService receives this action, it will stop playback and * try to shutdown. */ - public static final String ACTION_SHUTDOWN_PLAYBACK_SERVICE = "action.de.danoeh.antennapod.service.actionShutdownPlaybackService"; + public static final String ACTION_SHUTDOWN_PLAYBACK_SERVICE = "action.de.danoeh.antennapod.core.service.actionShutdownPlaybackService"; /** * If the PlaybackService receives this action, it will end playback of the * current episode and load the next episode if there is one available. */ - public static final String ACTION_SKIP_CURRENT_EPISODE = "action.de.danoeh.antennapod.service.skipCurrentEpisode"; + public static final String ACTION_SKIP_CURRENT_EPISODE = "action.de.danoeh.antennapod.core.service.skipCurrentEpisode"; /** * Used in NOTIFICATION_TYPE_RELOAD. @@ -1038,7 +1038,7 @@ public class PlaybackService extends Service { } /** - * @see de.danoeh.antennapod.service.playback.PlaybackServiceMediaPlayer#seekToChapter(de.danoeh.antennapod.feed.Chapter) + * @see de.danoeh.antennapod.core.service.playback.PlaybackServiceMediaPlayer#seekToChapter(de.danoeh.antennapod.core.feed.Chapter) */ public void seekToChapter(Chapter c) { mediaPlayer.seekToChapter(c); diff --git a/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackServiceMediaPlayer.java b/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackServiceMediaPlayer.java rename to app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java index 49f20012d..62ad59166 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackServiceMediaPlayer.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.playback; +package de.danoeh.antennapod.core.service.playback; import android.content.ComponentName; import android.content.Context; @@ -22,14 +22,14 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.MediaType; -import de.danoeh.antennapod.preferences.UserPreferences; -import de.danoeh.antennapod.receiver.MediaButtonReceiver; -import de.danoeh.antennapod.util.playback.AudioPlayer; -import de.danoeh.antennapod.util.playback.IPlayer; -import de.danoeh.antennapod.util.playback.Playable; -import de.danoeh.antennapod.util.playback.VideoPlayer; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.MediaType; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.receiver.MediaButtonReceiver; +import de.danoeh.antennapod.core.util.playback.AudioPlayer; +import de.danoeh.antennapod.core.util.playback.IPlayer; +import de.danoeh.antennapod.core.util.playback.Playable; +import de.danoeh.antennapod.core.util.playback.VideoPlayer; /** * Manages the MediaPlayer object of the PlaybackService. @@ -149,7 +149,7 @@ public class PlaybackServiceMediaPlayer { *

* This method requires the playerLock and is executed on the caller's thread. * - * @see #playMediaObject(de.danoeh.antennapod.util.playback.Playable, boolean, boolean, boolean) + * @see #playMediaObject(de.danoeh.antennapod.core.util.playback.Playable, boolean, boolean, boolean) */ private void playMediaObject(final Playable playable, final boolean forceReset, final boolean stream, final boolean startWhenPrepared, final boolean prepareImmediately) { Validate.notNull(playable); diff --git a/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackServiceTaskManager.java b/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackServiceTaskManager.java rename to app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java index 680ec2e2f..1b33e8667 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/playback/PlaybackServiceTaskManager.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.playback; +package de.danoeh.antennapod.core.service.playback; import android.content.Context; import android.util.Log; @@ -6,10 +6,10 @@ import android.util.Log; import org.apache.commons.lang3.Validate; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.EventDistributor; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.util.playback.Playable; +import de.danoeh.antennapod.core.feed.EventDistributor; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.util.playback.Playable; import java.util.List; import java.util.concurrent.*; diff --git a/app/src/main/java/de/danoeh/antennapod/service/playback/PlayerStatus.java b/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java similarity index 88% rename from app/src/main/java/de/danoeh/antennapod/service/playback/PlayerStatus.java rename to app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java index 3d2b4ad39..1ad0c25d9 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/playback/PlayerStatus.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.playback; +package de.danoeh.antennapod.core.service.playback; public enum PlayerStatus { INDETERMINATE, // player is currently changing its state, listeners should wait until the player has left this state. diff --git a/app/src/main/java/de/danoeh/antennapod/service/playback/PlayerWidgetService.java b/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerWidgetService.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/service/playback/PlayerWidgetService.java rename to app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerWidgetService.java index 71bc40c2a..495e2c0f2 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/playback/PlayerWidgetService.java +++ b/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerWidgetService.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.service.playback; +package de.danoeh.antennapod.core.service.playback; import android.app.PendingIntent; import android.app.Service; @@ -14,10 +14,10 @@ import android.view.View; import android.widget.RemoteViews; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.receiver.MediaButtonReceiver; -import de.danoeh.antennapod.receiver.PlayerWidget; -import de.danoeh.antennapod.util.Converter; -import de.danoeh.antennapod.util.playback.Playable; +import de.danoeh.antennapod.core.receiver.MediaButtonReceiver; +import de.danoeh.antennapod.core.receiver.PlayerWidget; +import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.playback.Playable; /** Updates the state of the player widget */ public class PlayerWidgetService extends Service { diff --git a/app/src/main/java/de/danoeh/antennapod/storage/DBReader.java b/app/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/storage/DBReader.java rename to app/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index e49ea4f83..1b93e6ea2 100644 --- a/app/src/main/java/de/danoeh/antennapod/storage/DBReader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -1,18 +1,18 @@ -package de.danoeh.antennapod.storage; +package de.danoeh.antennapod.core.storage; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.*; -import de.danoeh.antennapod.service.download.DownloadStatus; -import de.danoeh.antennapod.util.DownloadError; -import de.danoeh.antennapod.util.comparator.DownloadStatusComparator; -import de.danoeh.antennapod.util.comparator.FeedItemPubdateComparator; -import de.danoeh.antennapod.util.comparator.PlaybackCompletionDateComparator; -import de.danoeh.antennapod.util.flattr.FlattrStatus; -import de.danoeh.antennapod.util.flattr.FlattrThing; +import de.danoeh.antennapod.core.feed.*; +import de.danoeh.antennapod.core.service.download.DownloadStatus; +import de.danoeh.antennapod.core.util.DownloadError; +import de.danoeh.antennapod.core.util.comparator.DownloadStatusComparator; +import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator; +import de.danoeh.antennapod.core.util.comparator.PlaybackCompletionDateComparator; +import de.danoeh.antennapod.core.util.flattr.FlattrStatus; +import de.danoeh.antennapod.core.util.flattr.FlattrThing; import java.util.ArrayList; import java.util.Collections; @@ -23,7 +23,7 @@ import java.util.List; * Provides methods for reading data from the AntennaPod database. * In general, all database calls in DBReader-methods are executed on the caller's thread. * This means that the caller should make sure that DBReader-methods are not executed on the GUI-thread. - * This class will use the {@link de.danoeh.antennapod.feed.EventDistributor} to notify listeners about changes in the database. + * This class will use the {@link de.danoeh.antennapod.core.feed.EventDistributor} to notify listeners about changes in the database. */ public final class DBReader { private static final String TAG = "DBReader"; @@ -48,7 +48,7 @@ public final class DBReader { * @param context A context that is used for opening a database connection. * @return A list of Feeds, sorted alphabetically by their title. A Feed-object * of the returned list does NOT have its list of FeedItems yet. The FeedItem-list - * can be loaded separately with {@link #getFeedItemList(android.content.Context, de.danoeh.antennapod.feed.Feed)}. + * can be loaded separately with {@link #getFeedItemList(android.content.Context, de.danoeh.antennapod.core.feed.Feed)}. */ public static List getFeedList(final Context context) { if (BuildConfig.DEBUG) @@ -108,7 +108,7 @@ public final class DBReader { * A Feed is considered expired if 'lastUpdate < (currentTime - expirationTime)' evaluates to true. * @return A list of Feeds, sorted alphabetically by their title. A Feed-object * of the returned list does NOT have its list of FeedItems yet. The FeedItem-list - * can be loaded separately with {@link #getFeedItemList(android.content.Context, de.danoeh.antennapod.feed.Feed)}. + * can be loaded separately with {@link #getFeedItemList(android.content.Context, de.danoeh.antennapod.core.feed.Feed)}. */ public static List getExpiredFeedsList(final Context context, final long expirationTime) { if (BuildConfig.DEBUG) @@ -394,7 +394,7 @@ public final class DBReader { * * @param context A context that is used for opening a database connection. * @return A list of IDs sorted by the same order as the queue. The caller can wrap the returned - * list in a {@link de.danoeh.antennapod.util.QueueAccess} object for easier access to the queue's properties. + * list in a {@link de.danoeh.antennapod.core.util.QueueAccess} object for easier access to the queue's properties. */ public static List getQueueIDList(Context context) { PodDBAdapter adapter = new PodDBAdapter(context); @@ -426,7 +426,7 @@ public final class DBReader { * * @param context A context that is used for opening a database connection. * @return A list of FeedItems sorted by the same order as the queue. The caller can wrap the returned - * list in a {@link de.danoeh.antennapod.util.QueueAccess} object for easier access to the queue's properties. + * list in a {@link de.danoeh.antennapod.core.util.QueueAccess} object for easier access to the queue's properties. */ public static List getQueue(Context context) { if (BuildConfig.DEBUG) @@ -619,7 +619,7 @@ public final class DBReader { /** * Loads the FeedItemStatistics objects of all Feeds in the database. This method should be preferred over - * {@link #getFeedItemList(android.content.Context, de.danoeh.antennapod.feed.Feed)} if only metadata about + * {@link #getFeedItemList(android.content.Context, de.danoeh.antennapod.core.feed.Feed)} if only metadata about * the FeedItems is needed. * * @param context A context that is used for opening a database connection. diff --git a/app/src/main/java/de/danoeh/antennapod/storage/DBTasks.java b/app/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/storage/DBTasks.java rename to app/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java index a230ba797..28cab29b9 100644 --- a/app/src/main/java/de/danoeh/antennapod/storage/DBTasks.java +++ b/app/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java @@ -1,23 +1,23 @@ -package de.danoeh.antennapod.storage; +package de.danoeh.antennapod.core.storage; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.asynctask.FlattrClickWorker; -import de.danoeh.antennapod.asynctask.FlattrStatusFetcher; -import de.danoeh.antennapod.feed.*; -import de.danoeh.antennapod.preferences.UserPreferences; -import de.danoeh.antennapod.service.GpodnetSyncService; -import de.danoeh.antennapod.service.download.DownloadStatus; -import de.danoeh.antennapod.service.playback.PlaybackService; -import de.danoeh.antennapod.util.DownloadError; -import de.danoeh.antennapod.util.NetworkUtils; -import de.danoeh.antennapod.util.QueueAccess; -import de.danoeh.antennapod.util.comparator.FeedItemPubdateComparator; -import de.danoeh.antennapod.util.exception.MediaFileNotFoundException; -import de.danoeh.antennapod.util.flattr.FlattrUtils; +import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; +import de.danoeh.antennapod.core.asynctask.FlattrStatusFetcher; +import de.danoeh.antennapod.core.feed.*; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.GpodnetSyncService; +import de.danoeh.antennapod.core.service.download.DownloadStatus; +import de.danoeh.antennapod.core.service.playback.PlaybackService; +import de.danoeh.antennapod.core.util.DownloadError; +import de.danoeh.antennapod.core.util.NetworkUtils; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator; +import de.danoeh.antennapod.core.util.exception.MediaFileNotFoundException; +import de.danoeh.antennapod.core.util.flattr.FlattrUtils; import java.util.*; import java.util.concurrent.*; diff --git a/app/src/main/java/de/danoeh/antennapod/storage/DBWriter.java b/app/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/storage/DBWriter.java rename to app/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 9916ac97f..225f74c96 100644 --- a/app/src/main/java/de/danoeh/antennapod/storage/DBWriter.java +++ b/app/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.storage; +package de.danoeh.antennapod.core.storage; import android.app.backup.BackupManager; import android.content.Context; @@ -8,16 +8,16 @@ import android.database.Cursor; import android.preference.PreferenceManager; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.asynctask.FlattrClickWorker; -import de.danoeh.antennapod.feed.*; -import de.danoeh.antennapod.preferences.GpodnetPreferences; -import de.danoeh.antennapod.preferences.PlaybackPreferences; -import de.danoeh.antennapod.service.download.DownloadStatus; -import de.danoeh.antennapod.service.playback.PlaybackService; -import de.danoeh.antennapod.util.QueueAccess; -import de.danoeh.antennapod.util.flattr.FlattrStatus; -import de.danoeh.antennapod.util.flattr.FlattrThing; -import de.danoeh.antennapod.util.flattr.SimpleFlattrThing; +import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; +import de.danoeh.antennapod.core.feed.*; +import de.danoeh.antennapod.core.preferences.GpodnetPreferences; +import de.danoeh.antennapod.core.preferences.PlaybackPreferences; +import de.danoeh.antennapod.core.service.download.DownloadStatus; +import de.danoeh.antennapod.core.service.playback.PlaybackService; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.flattr.FlattrStatus; +import de.danoeh.antennapod.core.util.flattr.FlattrThing; +import de.danoeh.antennapod.core.util.flattr.SimpleFlattrThing; import org.shredzone.flattr4j.model.Flattr; import java.io.File; diff --git a/app/src/main/java/de/danoeh/antennapod/storage/DownloadRequestException.java b/app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java similarity index 92% rename from app/src/main/java/de/danoeh/antennapod/storage/DownloadRequestException.java rename to app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java index 0ef766e58..c85559e20 100644 --- a/app/src/main/java/de/danoeh/antennapod/storage/DownloadRequestException.java +++ b/app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.storage; +package de.danoeh.antennapod.core.storage; /** * Thrown by the DownloadRequester if a download request contains invalid data diff --git a/app/src/main/java/de/danoeh/antennapod/storage/DownloadRequester.java b/app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/storage/DownloadRequester.java rename to app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java index d305c572b..c313055a5 100644 --- a/app/src/main/java/de/danoeh/antennapod/storage/DownloadRequester.java +++ b/app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java @@ -1,18 +1,17 @@ -package de.danoeh.antennapod.storage; +package de.danoeh.antennapod.core.storage; import android.content.Context; import android.content.Intent; import android.util.Log; import android.webkit.URLUtil; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.*; -import de.danoeh.antennapod.preferences.UserPreferences; -import de.danoeh.antennapod.service.download.DownloadRequest; -import de.danoeh.antennapod.service.download.DownloadService; -import de.danoeh.antennapod.util.FileNameGenerator; -import de.danoeh.antennapod.util.URLChecker; +import de.danoeh.antennapod.core.feed.*; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.download.DownloadRequest; +import de.danoeh.antennapod.core.service.download.DownloadService; +import de.danoeh.antennapod.core.util.FileNameGenerator; +import de.danoeh.antennapod.core.util.URLChecker; import org.apache.commons.io.FilenameUtils; -import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; diff --git a/app/src/main/java/de/danoeh/antennapod/storage/FeedItemStatistics.java b/app/src/main/java/de/danoeh/antennapod/core/storage/FeedItemStatistics.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/storage/FeedItemStatistics.java rename to app/src/main/java/de/danoeh/antennapod/core/storage/FeedItemStatistics.java index 8cb040756..f6a59836b 100644 --- a/app/src/main/java/de/danoeh/antennapod/storage/FeedItemStatistics.java +++ b/app/src/main/java/de/danoeh/antennapod/core/storage/FeedItemStatistics.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.storage; +package de.danoeh.antennapod.core.storage; import java.util.Date; diff --git a/app/src/main/java/de/danoeh/antennapod/storage/FeedSearcher.java b/app/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java similarity index 90% rename from app/src/main/java/de/danoeh/antennapod/storage/FeedSearcher.java rename to app/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java index e7aa93f83..41b379471 100644 --- a/app/src/main/java/de/danoeh/antennapod/storage/FeedSearcher.java +++ b/app/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java @@ -1,10 +1,10 @@ -package de.danoeh.antennapod.storage; +package de.danoeh.antennapod.core.storage; import android.content.Context; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.SearchResult; -import de.danoeh.antennapod.util.comparator.SearchResultValueComparator; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.feed.SearchResult; +import de.danoeh.antennapod.core.util.comparator.SearchResultValueComparator; import java.util.ArrayList; import java.util.Collections; diff --git a/app/src/main/java/de/danoeh/antennapod/storage/PodDBAdapter.java b/app/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/storage/PodDBAdapter.java rename to app/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 2a3aafe8c..eb6592510 100644 --- a/app/src/main/java/de/danoeh/antennapod/storage/PodDBAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.storage; +package de.danoeh.antennapod.core.storage; import android.content.ContentValues; import android.content.Context; @@ -17,15 +17,15 @@ import java.util.Arrays; import java.util.List; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.feed.FeedComponent; -import de.danoeh.antennapod.feed.FeedImage; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.feed.FeedPreferences; -import de.danoeh.antennapod.service.download.DownloadStatus; -import de.danoeh.antennapod.util.flattr.FlattrStatus; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedComponent; +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.feed.FeedPreferences; +import de.danoeh.antennapod.core.service.download.DownloadStatus; +import de.danoeh.antennapod.core.util.flattr.FlattrStatus; // TODO Remove media column from feeditem table diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/handler/FeedHandler.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandler.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/syndication/handler/FeedHandler.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandler.java index aafa1c209..9efc5888f 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/handler/FeedHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandler.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.syndication.handler; +package de.danoeh.antennapod.core.syndication.handler; -import de.danoeh.antennapod.feed.Feed; +import de.danoeh.antennapod.core.feed.Feed; import org.apache.commons.io.input.XmlStreamReader; import org.xml.sax.InputSource; import org.xml.sax.SAXException; diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/handler/FeedHandlerResult.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandlerResult.java similarity index 78% rename from app/src/main/java/de/danoeh/antennapod/syndication/handler/FeedHandlerResult.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandlerResult.java index 41aa29b52..45d1413bf 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/handler/FeedHandlerResult.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandlerResult.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.syndication.handler; +package de.danoeh.antennapod.core.syndication.handler; -import de.danoeh.antennapod.feed.Feed; +import de.danoeh.antennapod.core.feed.Feed; import java.util.Map; diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/handler/HandlerState.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java similarity index 89% rename from app/src/main/java/de/danoeh/antennapod/syndication/handler/HandlerState.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java index 17f84724f..4fe8e1aff 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/handler/HandlerState.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java @@ -1,9 +1,9 @@ -package de.danoeh.antennapod.syndication.handler; +package de.danoeh.antennapod.core.syndication.handler; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.syndication.namespace.Namespace; -import de.danoeh.antennapod.syndication.namespace.SyndElement; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.syndication.namespace.Namespace; +import de.danoeh.antennapod.core.syndication.namespace.SyndElement; import java.util.*; diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/handler/SyndHandler.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/syndication/handler/SyndHandler.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java index 15dc94d65..573c873eb 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/handler/SyndHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java @@ -1,10 +1,10 @@ -package de.danoeh.antennapod.syndication.handler; +package de.danoeh.antennapod.core.syndication.handler; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.syndication.namespace.*; -import de.danoeh.antennapod.syndication.namespace.atom.NSAtom; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.syndication.namespace.*; +import de.danoeh.antennapod.core.syndication.namespace.atom.NSAtom; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/handler/TypeGetter.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/syndication/handler/TypeGetter.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java index 2496e112a..e1ebd63a5 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/handler/TypeGetter.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java @@ -1,11 +1,10 @@ -package de.danoeh.antennapod.syndication.handler; +package de.danoeh.antennapod.core.syndication.handler; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.Feed; +import de.danoeh.antennapod.core.feed.Feed; import org.apache.commons.io.input.XmlStreamReader; import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/handler/UnsupportedFeedtypeException.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java similarity index 85% rename from app/src/main/java/de/danoeh/antennapod/syndication/handler/UnsupportedFeedtypeException.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java index 605dad2fb..3da9251d9 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/handler/UnsupportedFeedtypeException.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.syndication.handler; +package de.danoeh.antennapod.core.syndication.handler; -import de.danoeh.antennapod.syndication.handler.TypeGetter.Type; +import de.danoeh.antennapod.core.syndication.handler.TypeGetter.Type; public class UnsupportedFeedtypeException extends Exception { private static final long serialVersionUID = 9105878964928170669L; diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSContent.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSContent.java similarity index 83% rename from app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSContent.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSContent.java index 9ad3026be..71bf69ffa 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSContent.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSContent.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.syndication.namespace; +package de.danoeh.antennapod.core.syndication.namespace; -import de.danoeh.antennapod.syndication.handler.HandlerState; +import de.danoeh.antennapod.core.syndication.handler.HandlerState; import org.xml.sax.Attributes; public class NSContent extends Namespace { diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSITunes.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java similarity index 89% rename from app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSITunes.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java index d8cbe040b..fb794d7e0 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSITunes.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java @@ -1,7 +1,7 @@ -package de.danoeh.antennapod.syndication.namespace; +package de.danoeh.antennapod.core.syndication.namespace; -import de.danoeh.antennapod.feed.FeedImage; -import de.danoeh.antennapod.syndication.handler.HandlerState; +import de.danoeh.antennapod.core.feed.FeedImage; +import de.danoeh.antennapod.core.syndication.handler.HandlerState; import org.xml.sax.Attributes; public class NSITunes extends Namespace { diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSMedia.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java similarity index 89% rename from app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSMedia.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java index cc23167c1..15c377f79 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSMedia.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java @@ -1,10 +1,10 @@ -package de.danoeh.antennapod.syndication.namespace; +package de.danoeh.antennapod.core.syndication.namespace; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.syndication.handler.HandlerState; -import de.danoeh.antennapod.syndication.util.SyndTypeUtils; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.syndication.handler.HandlerState; +import de.danoeh.antennapod.core.syndication.util.SyndTypeUtils; import org.xml.sax.Attributes; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSRSS20.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSRSS20.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java index 9572f87ae..fd8f6176b 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSRSS20.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java @@ -1,13 +1,13 @@ -package de.danoeh.antennapod.syndication.namespace; +package de.danoeh.antennapod.core.syndication.namespace; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.FeedImage; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.syndication.handler.HandlerState; -import de.danoeh.antennapod.syndication.util.SyndDateUtils; -import de.danoeh.antennapod.syndication.util.SyndTypeUtils; +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.syndication.handler.HandlerState; +import de.danoeh.antennapod.core.syndication.util.SyndDateUtils; +import de.danoeh.antennapod.core.syndication.util.SyndTypeUtils; import org.xml.sax.Attributes; /** diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSSimpleChapters.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSSimpleChapters.java similarity index 79% rename from app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSSimpleChapters.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSSimpleChapters.java index 3f983ee88..2b4a2767d 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/NSSimpleChapters.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSSimpleChapters.java @@ -1,9 +1,9 @@ -package de.danoeh.antennapod.syndication.namespace; +package de.danoeh.antennapod.core.syndication.namespace; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.SimpleChapter; -import de.danoeh.antennapod.syndication.handler.HandlerState; -import de.danoeh.antennapod.syndication.util.SyndDateUtils; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.SimpleChapter; +import de.danoeh.antennapod.core.syndication.handler.HandlerState; +import de.danoeh.antennapod.core.syndication.util.SyndDateUtils; import org.xml.sax.Attributes; import java.util.ArrayList; diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/Namespace.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/Namespace.java similarity index 84% rename from app/src/main/java/de/danoeh/antennapod/syndication/namespace/Namespace.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/Namespace.java index 910131feb..cf118d202 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/Namespace.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/Namespace.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.syndication.namespace; +package de.danoeh.antennapod.core.syndication.namespace; -import de.danoeh.antennapod.syndication.handler.HandlerState; +import de.danoeh.antennapod.core.syndication.handler.HandlerState; import org.xml.sax.Attributes; diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/SyndElement.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/SyndElement.java similarity index 86% rename from app/src/main/java/de/danoeh/antennapod/syndication/namespace/SyndElement.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/SyndElement.java index 187312c9e..8adcd2086 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/SyndElement.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/SyndElement.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.syndication.namespace; +package de.danoeh.antennapod.core.syndication.namespace; /** Defines a XML Element that is pushed on the tagstack */ public class SyndElement { diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/atom/AtomText.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java similarity index 83% rename from app/src/main/java/de/danoeh/antennapod/syndication/namespace/atom/AtomText.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java index 86b80d2ed..43fe0edb7 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/atom/AtomText.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java @@ -1,7 +1,7 @@ -package de.danoeh.antennapod.syndication.namespace.atom; +package de.danoeh.antennapod.core.syndication.namespace.atom; -import de.danoeh.antennapod.syndication.namespace.Namespace; -import de.danoeh.antennapod.syndication.namespace.SyndElement; +import de.danoeh.antennapod.core.syndication.namespace.Namespace; +import de.danoeh.antennapod.core.syndication.namespace.SyndElement; import org.apache.commons.lang3.StringEscapeUtils; /** Represents Atom Element which contains text (content, title, summary). */ diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/atom/NSAtom.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java similarity index 93% rename from app/src/main/java/de/danoeh/antennapod/syndication/namespace/atom/NSAtom.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java index 2c8e232ff..1547dc222 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/namespace/atom/NSAtom.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java @@ -1,16 +1,16 @@ -package de.danoeh.antennapod.syndication.namespace.atom; +package de.danoeh.antennapod.core.syndication.namespace.atom; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.FeedImage; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.syndication.handler.HandlerState; -import de.danoeh.antennapod.syndication.namespace.NSRSS20; -import de.danoeh.antennapod.syndication.namespace.Namespace; -import de.danoeh.antennapod.syndication.namespace.SyndElement; -import de.danoeh.antennapod.syndication.util.SyndDateUtils; -import de.danoeh.antennapod.syndication.util.SyndTypeUtils; +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.syndication.handler.HandlerState; +import de.danoeh.antennapod.core.syndication.namespace.NSRSS20; +import de.danoeh.antennapod.core.syndication.namespace.Namespace; +import de.danoeh.antennapod.core.syndication.namespace.SyndElement; +import de.danoeh.antennapod.core.syndication.util.SyndDateUtils; +import de.danoeh.antennapod.core.syndication.util.SyndTypeUtils; import org.xml.sax.Attributes; public class NSAtom extends Namespace { diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/util/SyndDateUtils.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndDateUtils.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/syndication/util/SyndDateUtils.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndDateUtils.java index 3138f087a..977d92304 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/util/SyndDateUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndDateUtils.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.syndication.util; +package de.danoeh.antennapod.core.syndication.util; import android.util.Log; diff --git a/app/src/main/java/de/danoeh/antennapod/syndication/util/SyndTypeUtils.java b/app/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndTypeUtils.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/syndication/util/SyndTypeUtils.java rename to app/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndTypeUtils.java index d0fa3a5fc..8d1d8ffde 100644 --- a/app/src/main/java/de/danoeh/antennapod/syndication/util/SyndTypeUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndTypeUtils.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.syndication.util; +package de.danoeh.antennapod.core.syndication.util; import android.webkit.MimeTypeMap; import org.apache.commons.io.FilenameUtils; diff --git a/app/src/main/java/de/danoeh/antennapod/util/ChapterUtils.java b/app/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java similarity index 92% rename from app/src/main/java/de/danoeh/antennapod/util/ChapterUtils.java rename to app/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java index 9e1c50674..d6046026f 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/ChapterUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java @@ -1,14 +1,14 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.util.comparator.ChapterStartTimeComparator; -import de.danoeh.antennapod.util.id3reader.ChapterReader; -import de.danoeh.antennapod.util.id3reader.ID3ReaderException; -import de.danoeh.antennapod.util.playback.Playable; -import de.danoeh.antennapod.util.vorbiscommentreader.VorbisCommentChapterReader; -import de.danoeh.antennapod.util.vorbiscommentreader.VorbisCommentReaderException; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.util.comparator.ChapterStartTimeComparator; +import de.danoeh.antennapod.core.util.id3reader.ChapterReader; +import de.danoeh.antennapod.core.util.id3reader.ID3ReaderException; +import de.danoeh.antennapod.core.util.playback.Playable; +import de.danoeh.antennapod.core.util.vorbiscommentreader.VorbisCommentChapterReader; +import de.danoeh.antennapod.core.util.vorbiscommentreader.VorbisCommentReaderException; import org.apache.commons.io.IOUtils; import java.io.*; diff --git a/app/src/main/java/de/danoeh/antennapod/util/Converter.java b/app/src/main/java/de/danoeh/antennapod/core/util/Converter.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/util/Converter.java rename to app/src/main/java/de/danoeh/antennapod/core/util/Converter.java index f4c2b2f66..a0b514bd6 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/Converter.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/Converter.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import android.util.Log; diff --git a/app/src/main/java/de/danoeh/antennapod/util/DownloadError.java b/app/src/main/java/de/danoeh/antennapod/core/util/DownloadError.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/util/DownloadError.java rename to app/src/main/java/de/danoeh/antennapod/core/util/DownloadError.java index 1a64991a6..447e7d256 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/DownloadError.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/DownloadError.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import android.content.Context; import de.danoeh.antennapod.R; diff --git a/app/src/main/java/de/danoeh/antennapod/util/DuckType.java b/app/src/main/java/de/danoeh/antennapod/core/util/DuckType.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/util/DuckType.java rename to app/src/main/java/de/danoeh/antennapod/core/util/DuckType.java index 163110418..5d2803b84 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/DuckType.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/DuckType.java @@ -1,6 +1,6 @@ /* Adapted from: http://thinking-in-code.blogspot.com/2008/11/duck-typing-in-java-using-dynamic.html */ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; diff --git a/app/src/main/java/de/danoeh/antennapod/util/EpisodeFilter.java b/app/src/main/java/de/danoeh/antennapod/core/util/EpisodeFilter.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/util/EpisodeFilter.java rename to app/src/main/java/de/danoeh/antennapod/core/util/EpisodeFilter.java index 115913bca..4c23b161b 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/EpisodeFilter.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/EpisodeFilter.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; -import de.danoeh.antennapod.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedItem; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/util/FeedtitleComparator.java b/app/src/main/java/de/danoeh/antennapod/core/util/FeedtitleComparator.java similarity index 76% rename from app/src/main/java/de/danoeh/antennapod/util/FeedtitleComparator.java rename to app/src/main/java/de/danoeh/antennapod/core/util/FeedtitleComparator.java index 112b6678d..bf14cd23e 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/FeedtitleComparator.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/FeedtitleComparator.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; -import de.danoeh.antennapod.feed.Feed; +import de.danoeh.antennapod.core.feed.Feed; import java.util.Comparator; diff --git a/app/src/main/java/de/danoeh/antennapod/util/FileNameGenerator.java b/app/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/util/FileNameGenerator.java rename to app/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java index 702df62b8..00c023b64 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/FileNameGenerator.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import java.util.Arrays; diff --git a/app/src/main/java/de/danoeh/antennapod/util/InvalidFeedException.java b/app/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/util/InvalidFeedException.java rename to app/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java index 50adae216..c98c2d82a 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/InvalidFeedException.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; /** Thrown if a feed has invalid attribute values. */ public class InvalidFeedException extends Exception { diff --git a/app/src/main/java/de/danoeh/antennapod/util/LangUtils.java b/app/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/util/LangUtils.java rename to app/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java index e6e1d8399..07432d28a 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/LangUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import java.nio.charset.Charset; import java.util.HashMap; diff --git a/app/src/main/java/de/danoeh/antennapod/util/NetworkUtils.java b/app/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/util/NetworkUtils.java rename to app/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java index 0c8065e94..89bba290c 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/NetworkUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import android.content.Context; import android.net.ConnectivityManager; @@ -7,7 +7,7 @@ import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.preferences.UserPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; import java.util.Arrays; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/util/QueueAccess.java b/app/src/main/java/de/danoeh/antennapod/core/util/QueueAccess.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/util/QueueAccess.java rename to app/src/main/java/de/danoeh/antennapod/core/util/QueueAccess.java index 7a1c7fef2..8e40ae184 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/QueueAccess.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/QueueAccess.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; -import de.danoeh.antennapod.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedItem; import java.util.Iterator; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/util/ShareUtils.java b/app/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java similarity index 86% rename from app/src/main/java/de/danoeh/antennapod/util/ShareUtils.java rename to app/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java index 941fc62ae..85f32ed50 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/ShareUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java @@ -1,9 +1,9 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import android.content.Context; import android.content.Intent; -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; /** Utility methods for sharing data */ public class ShareUtils { diff --git a/app/src/main/java/de/danoeh/antennapod/util/ShownotesProvider.java b/app/src/main/java/de/danoeh/antennapod/core/util/ShownotesProvider.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/util/ShownotesProvider.java rename to app/src/main/java/de/danoeh/antennapod/core/util/ShownotesProvider.java index 8345ca34d..7e7c6c08b 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/ShownotesProvider.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/ShownotesProvider.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import java.util.concurrent.Callable; diff --git a/app/src/main/java/de/danoeh/antennapod/util/StorageUtils.java b/app/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/util/StorageUtils.java rename to app/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java index ff0bde280..f899c211f 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/StorageUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import android.app.Activity; import android.content.Context; @@ -9,7 +9,7 @@ import android.util.Log; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.activity.StorageErrorActivity; -import de.danoeh.antennapod.preferences.UserPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; import java.io.File; diff --git a/app/src/main/java/de/danoeh/antennapod/util/ThemeUtils.java b/app/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java similarity index 84% rename from app/src/main/java/de/danoeh/antennapod/util/ThemeUtils.java rename to app/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java index 8e593f3fb..72d73138d 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/ThemeUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java @@ -1,8 +1,8 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import android.util.Log; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.preferences.UserPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; public class ThemeUtils { private static final String TAG = "ThemeUtils"; diff --git a/app/src/main/java/de/danoeh/antennapod/util/URIUtil.java b/app/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/util/URIUtil.java rename to app/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java index 5af40d591..c614abbc1 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/URIUtil.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import android.util.Log; import de.danoeh.antennapod.BuildConfig; diff --git a/app/src/main/java/de/danoeh/antennapod/util/URLChecker.java b/app/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/util/URLChecker.java rename to app/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java index 9997daaf7..c707e55bc 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/URLChecker.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import android.util.Log; diff --git a/app/src/main/java/de/danoeh/antennapod/util/UndoBarController.java b/app/src/main/java/de/danoeh/antennapod/core/util/UndoBarController.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/util/UndoBarController.java rename to app/src/main/java/de/danoeh/antennapod/core/util/UndoBarController.java index 332cc22e0..d0721ac23 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/UndoBarController.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/UndoBarController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package de.danoeh.antennapod.util; +package de.danoeh.antennapod.core.util; import android.os.Bundle; import android.os.Handler; diff --git a/app/src/main/java/de/danoeh/antennapod/util/comparator/ChapterStartTimeComparator.java b/app/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java similarity index 76% rename from app/src/main/java/de/danoeh/antennapod/util/comparator/ChapterStartTimeComparator.java rename to app/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java index bfc2fd057..5274ffc9e 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/comparator/ChapterStartTimeComparator.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.util.comparator; +package de.danoeh.antennapod.core.util.comparator; -import de.danoeh.antennapod.feed.Chapter; +import de.danoeh.antennapod.core.feed.Chapter; import java.util.Comparator; diff --git a/app/src/main/java/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java b/app/src/main/java/de/danoeh/antennapod/core/util/comparator/DownloadStatusComparator.java similarity index 73% rename from app/src/main/java/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java rename to app/src/main/java/de/danoeh/antennapod/core/util/comparator/DownloadStatusComparator.java index 14b8f1194..ebdbfe2a5 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/comparator/DownloadStatusComparator.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.util.comparator; +package de.danoeh.antennapod.core.util.comparator; -import de.danoeh.antennapod.service.download.DownloadStatus; +import de.danoeh.antennapod.core.service.download.DownloadStatus; import java.util.Comparator; diff --git a/app/src/main/java/de/danoeh/antennapod/util/comparator/FeedItemPubdateComparator.java b/app/src/main/java/de/danoeh/antennapod/core/util/comparator/FeedItemPubdateComparator.java similarity index 81% rename from app/src/main/java/de/danoeh/antennapod/util/comparator/FeedItemPubdateComparator.java rename to app/src/main/java/de/danoeh/antennapod/core/util/comparator/FeedItemPubdateComparator.java index f92c23d05..a1f3ec699 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/comparator/FeedItemPubdateComparator.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/comparator/FeedItemPubdateComparator.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.util.comparator; +package de.danoeh.antennapod.core.util.comparator; -import de.danoeh.antennapod.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedItem; import java.util.Comparator; diff --git a/app/src/main/java/de/danoeh/antennapod/util/comparator/PlaybackCompletionDateComparator.java b/app/src/main/java/de/danoeh/antennapod/core/util/comparator/PlaybackCompletionDateComparator.java similarity index 82% rename from app/src/main/java/de/danoeh/antennapod/util/comparator/PlaybackCompletionDateComparator.java rename to app/src/main/java/de/danoeh/antennapod/core/util/comparator/PlaybackCompletionDateComparator.java index 0147e0cdc..84d244660 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/comparator/PlaybackCompletionDateComparator.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/comparator/PlaybackCompletionDateComparator.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.util.comparator; +package de.danoeh.antennapod.core.util.comparator; -import de.danoeh.antennapod.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedItem; import java.util.Comparator; diff --git a/app/src/main/java/de/danoeh/antennapod/util/comparator/SearchResultValueComparator.java b/app/src/main/java/de/danoeh/antennapod/core/util/comparator/SearchResultValueComparator.java similarity index 68% rename from app/src/main/java/de/danoeh/antennapod/util/comparator/SearchResultValueComparator.java rename to app/src/main/java/de/danoeh/antennapod/core/util/comparator/SearchResultValueComparator.java index 02b084a01..b16e0949d 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/comparator/SearchResultValueComparator.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/comparator/SearchResultValueComparator.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.util.comparator; +package de.danoeh.antennapod.core.util.comparator; -import de.danoeh.antennapod.feed.SearchResult; +import de.danoeh.antennapod.core.feed.SearchResult; import java.util.Comparator; diff --git a/app/src/main/java/de/danoeh/antennapod/util/exception/MediaFileNotFoundException.java b/app/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java similarity index 79% rename from app/src/main/java/de/danoeh/antennapod/util/exception/MediaFileNotFoundException.java rename to app/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java index 4586cea87..287fe1100 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/exception/MediaFileNotFoundException.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java @@ -1,6 +1,6 @@ -package de.danoeh.antennapod.util.exception; +package de.danoeh.antennapod.core.util.exception; -import de.danoeh.antennapod.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.FeedMedia; public class MediaFileNotFoundException extends Exception { private static final long serialVersionUID = 1L; diff --git a/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrServiceCreator.java b/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java similarity index 93% rename from app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrServiceCreator.java rename to app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java index eda83b7aa..5a7cfa47f 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrServiceCreator.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.flattr; +package de.danoeh.antennapod.core.util.flattr; import android.util.Log; import de.danoeh.antennapod.BuildConfig; diff --git a/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrStatus.java b/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrStatus.java rename to app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java index a1d6d3bc4..d82171d1a 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrStatus.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.flattr; +package de.danoeh.antennapod.core.util.flattr; import java.util.Calendar; diff --git a/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrThing.java b/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java similarity index 74% rename from app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrThing.java rename to app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java index f17ef1d83..515028ab6 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrThing.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.flattr; +package de.danoeh.antennapod.core.util.flattr; public interface FlattrThing { public String getTitle(); diff --git a/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrUtils.java b/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrUtils.java rename to app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java index 3e2ea3132..e07ed11e9 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/flattr/FlattrUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.flattr; +package de.danoeh.antennapod.core.util.flattr; import android.app.AlertDialog; import android.content.Context; @@ -30,8 +30,8 @@ import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.FlattrAuthActivity; -import de.danoeh.antennapod.asynctask.FlattrTokenFetcher; -import de.danoeh.antennapod.storage.DBWriter; +import de.danoeh.antennapod.core.asynctask.FlattrTokenFetcher; +import de.danoeh.antennapod.core.storage.DBWriter; /** * Utility methods for doing something with flattr. diff --git a/app/src/main/java/de/danoeh/antennapod/util/flattr/SimpleFlattrThing.java b/app/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java similarity index 92% rename from app/src/main/java/de/danoeh/antennapod/util/flattr/SimpleFlattrThing.java rename to app/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java index 296610871..2c178496e 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/flattr/SimpleFlattrThing.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.flattr; +package de.danoeh.antennapod.core.util.flattr; /* SimpleFlattrThing is a trivial implementation of the FlattrThing interface */ public class SimpleFlattrThing implements FlattrThing { diff --git a/app/src/main/java/de/danoeh/antennapod/util/gui/FeedItemUndoToken.java b/app/src/main/java/de/danoeh/antennapod/core/util/gui/FeedItemUndoToken.java similarity index 93% rename from app/src/main/java/de/danoeh/antennapod/util/gui/FeedItemUndoToken.java rename to app/src/main/java/de/danoeh/antennapod/core/util/gui/FeedItemUndoToken.java index b920559db..17581d3e9 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/gui/FeedItemUndoToken.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/gui/FeedItemUndoToken.java @@ -1,8 +1,8 @@ -package de.danoeh.antennapod.util.gui; +package de.danoeh.antennapod.core.util.gui; import android.os.Parcel; import android.os.Parcelable; -import de.danoeh.antennapod.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedItem; /** * Used by an UndoBarController for saving a removed FeedItem diff --git a/app/src/main/java/de/danoeh/antennapod/util/id3reader/ChapterReader.java b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java similarity index 92% rename from app/src/main/java/de/danoeh/antennapod/util/id3reader/ChapterReader.java rename to app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java index 257635129..a0bce1c79 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/id3reader/ChapterReader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java @@ -1,11 +1,11 @@ -package de.danoeh.antennapod.util.id3reader; +package de.danoeh.antennapod.core.util.id3reader; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.ID3Chapter; -import de.danoeh.antennapod.util.id3reader.model.FrameHeader; -import de.danoeh.antennapod.util.id3reader.model.TagHeader; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.ID3Chapter; +import de.danoeh.antennapod.core.util.id3reader.model.FrameHeader; +import de.danoeh.antennapod.core.util.id3reader.model.TagHeader; import java.io.IOException; import java.io.InputStream; diff --git a/app/src/main/java/de/danoeh/antennapod/util/id3reader/ID3Reader.java b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3Reader.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/util/id3reader/ID3Reader.java rename to app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3Reader.java index 252d64107..a238c11e9 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/id3reader/ID3Reader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3Reader.java @@ -1,7 +1,7 @@ -package de.danoeh.antennapod.util.id3reader; +package de.danoeh.antennapod.core.util.id3reader; -import de.danoeh.antennapod.util.id3reader.model.FrameHeader; -import de.danoeh.antennapod.util.id3reader.model.TagHeader; +import de.danoeh.antennapod.core.util.id3reader.model.FrameHeader; +import de.danoeh.antennapod.core.util.id3reader.model.TagHeader; import org.apache.commons.io.IOUtils; import java.io.IOException; diff --git a/app/src/main/java/de/danoeh/antennapod/util/id3reader/ID3ReaderException.java b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java similarity index 85% rename from app/src/main/java/de/danoeh/antennapod/util/id3reader/ID3ReaderException.java rename to app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java index c458540ee..0c746d7e5 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/id3reader/ID3ReaderException.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.id3reader; +package de.danoeh.antennapod.core.util.id3reader; public class ID3ReaderException extends Exception { diff --git a/app/src/main/java/de/danoeh/antennapod/util/id3reader/model/FrameHeader.java b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/FrameHeader.java similarity index 86% rename from app/src/main/java/de/danoeh/antennapod/util/id3reader/model/FrameHeader.java rename to app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/FrameHeader.java index df73393a5..89eab1398 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/id3reader/model/FrameHeader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/FrameHeader.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.id3reader.model; +package de.danoeh.antennapod.core.util.id3reader.model; public class FrameHeader extends Header { diff --git a/app/src/main/java/de/danoeh/antennapod/util/id3reader/model/Header.java b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/Header.java similarity index 86% rename from app/src/main/java/de/danoeh/antennapod/util/id3reader/model/Header.java rename to app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/Header.java index 22d5b6376..346e2893f 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/id3reader/model/Header.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/Header.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.id3reader.model; +package de.danoeh.antennapod.core.util.id3reader.model; public abstract class Header { diff --git a/app/src/main/java/de/danoeh/antennapod/util/id3reader/model/TagHeader.java b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/TagHeader.java similarity index 88% rename from app/src/main/java/de/danoeh/antennapod/util/id3reader/model/TagHeader.java rename to app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/TagHeader.java index ec99ef14e..0a6b8357f 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/id3reader/model/TagHeader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/TagHeader.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.id3reader.model; +package de.danoeh.antennapod.core.util.id3reader.model; public class TagHeader extends Header { diff --git a/app/src/main/java/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedItemMenuHandler.java similarity index 93% rename from app/src/main/java/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java rename to app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedItemMenuHandler.java index 2c7a7f074..f85ac412d 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedItemMenuHandler.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.menuhandler; +package de.danoeh.antennapod.core.util.menuhandler; import android.content.Context; import android.content.Intent; @@ -6,14 +6,14 @@ import android.net.Uri; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.service.playback.PlaybackService; -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.util.QueueAccess; -import de.danoeh.antennapod.util.ShareUtils; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.service.playback.PlaybackService; +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; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.ShareUtils; /** * Handles interactions with the FeedItemMenu. diff --git a/app/src/main/java/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedMenuHandler.java similarity index 83% rename from app/src/main/java/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java rename to app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedMenuHandler.java index a3adec66d..757cc5f56 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedMenuHandler.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.menuhandler; +package de.danoeh.antennapod.core.util.menuhandler; import android.content.Context; import android.content.Intent; @@ -9,14 +9,13 @@ import android.view.MenuInflater; import android.view.MenuItem; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.FeedInfoActivity; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.service.download.DownloadService; -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.util.ShareUtils; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.service.download.DownloadService; +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; +import de.danoeh.antennapod.core.util.ShareUtils; /** Handles interactions with the FeedItemMenu. */ public class FeedMenuHandler { diff --git a/app/src/main/java/de/danoeh/antennapod/util/menuhandler/MenuItemUtils.java b/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/MenuItemUtils.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/util/menuhandler/MenuItemUtils.java rename to app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/MenuItemUtils.java index 7aa04d24c..4258c4d22 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/menuhandler/MenuItemUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/MenuItemUtils.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.menuhandler; +package de.danoeh.antennapod.core.util.menuhandler; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; diff --git a/app/src/main/java/de/danoeh/antennapod/util/menuhandler/NavDrawerActivity.java b/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/NavDrawerActivity.java similarity index 74% rename from app/src/main/java/de/danoeh/antennapod/util/menuhandler/NavDrawerActivity.java rename to app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/NavDrawerActivity.java index 9c611a452..61bf9960f 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/menuhandler/NavDrawerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/NavDrawerActivity.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.menuhandler; +package de.danoeh.antennapod.core.util.menuhandler; /** * Defines useful methods for activities that have a navigation drawer diff --git a/app/src/main/java/de/danoeh/antennapod/util/playback/AudioPlayer.java b/app/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/util/playback/AudioPlayer.java rename to app/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java index bd49b0d18..aafcea307 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/playback/AudioPlayer.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.playback; +package de.danoeh.antennapod.core.util.playback; import android.content.Context; import android.util.Log; diff --git a/app/src/main/java/de/danoeh/antennapod/util/playback/ExternalMedia.java b/app/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/util/playback/ExternalMedia.java rename to app/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java index 3f6e6ae0a..49769f4f0 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/playback/ExternalMedia.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.playback; +package de.danoeh.antennapod.core.util.playback; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; @@ -6,12 +6,10 @@ import android.media.MediaMetadataRetriever; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.MediaType; -import de.danoeh.antennapod.util.ChapterUtils; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.MediaType; +import de.danoeh.antennapod.core.util.ChapterUtils; -import java.io.File; -import java.io.InputStream; import java.util.List; import java.util.concurrent.Callable; diff --git a/app/src/main/java/de/danoeh/antennapod/util/playback/IPlayer.java b/app/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/util/playback/IPlayer.java rename to app/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java index 2d4551b13..147c7848d 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/playback/IPlayer.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.playback; +package de.danoeh.antennapod.core.util.playback; import android.content.Context; import android.view.SurfaceHolder; diff --git a/app/src/main/java/de/danoeh/antennapod/util/playback/MediaPlayerError.java b/app/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/util/playback/MediaPlayerError.java rename to app/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java index 23ead581f..a3a907e48 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/playback/MediaPlayerError.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.playback; +package de.danoeh.antennapod.core.util.playback; import android.content.Context; import android.media.MediaPlayer; diff --git a/app/src/main/java/de/danoeh/antennapod/util/playback/Playable.java b/app/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/util/playback/Playable.java rename to app/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java index 004ae56bb..7ebd580f7 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/playback/Playable.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.playback; +package de.danoeh.antennapod.core.util.playback; import android.content.Context; import android.content.SharedPreferences; @@ -7,12 +7,12 @@ import android.util.Log; import java.util.List; -import de.danoeh.antennapod.asynctask.PicassoImageResource; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.feed.MediaType; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.util.ShownotesProvider; +import de.danoeh.antennapod.core.asynctask.PicassoImageResource; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.MediaType; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.util.ShownotesProvider; /** * Interface for objects that can be played by the PlaybackService. diff --git a/app/src/main/java/de/danoeh/antennapod/util/playback/PlaybackController.java b/app/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/util/playback/PlaybackController.java rename to app/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java index 64dbf4868..35bd27057 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/playback/PlaybackController.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.playback; +package de.danoeh.antennapod.core.util.playback; import android.app.Activity; import android.content.*; @@ -21,17 +21,17 @@ import org.apache.commons.lang3.Validate; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.feed.MediaType; -import de.danoeh.antennapod.preferences.PlaybackPreferences; -import de.danoeh.antennapod.preferences.UserPreferences; -import de.danoeh.antennapod.service.playback.PlaybackService; -import de.danoeh.antennapod.service.playback.PlaybackServiceMediaPlayer; -import de.danoeh.antennapod.service.playback.PlayerStatus; -import de.danoeh.antennapod.storage.DBTasks; -import de.danoeh.antennapod.util.Converter; -import de.danoeh.antennapod.util.playback.Playable.PlayableUtils; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.MediaType; +import de.danoeh.antennapod.core.preferences.PlaybackPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.playback.PlaybackService; +import de.danoeh.antennapod.core.service.playback.PlaybackServiceMediaPlayer; +import de.danoeh.antennapod.core.service.playback.PlayerStatus; +import de.danoeh.antennapod.core.storage.DBTasks; +import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.playback.Playable.PlayableUtils; import java.util.concurrent.*; diff --git a/app/src/main/java/de/danoeh/antennapod/util/playback/Timeline.java b/app/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/util/playback/Timeline.java rename to app/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java index ceed68183..5177bbca3 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/playback/Timeline.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.playback; +package de.danoeh.antennapod.core.util.playback; import android.content.Context; import android.content.res.TypedArray; @@ -15,8 +15,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.util.Converter; -import de.danoeh.antennapod.util.ShownotesProvider; +import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.ShownotesProvider; /** * Connects chapter information and shownotes of a shownotesProvider, for example by making it possible to use the diff --git a/app/src/main/java/de/danoeh/antennapod/util/playback/VideoPlayer.java b/app/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/util/playback/VideoPlayer.java rename to app/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java index ea9c692ab..dc5270d8f 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/playback/VideoPlayer.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.playback; +package de.danoeh.antennapod.core.util.playback; import android.media.MediaPlayer; import android.util.Log; diff --git a/app/src/main/java/de/danoeh/antennapod/util/syndication/FeedDiscoverer.java b/app/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/util/syndication/FeedDiscoverer.java rename to app/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java index ac38ec876..9588265b8 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/syndication/FeedDiscoverer.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.syndication; +package de.danoeh.antennapod.core.util.syndication; import android.net.Uri; import org.apache.commons.lang3.StringUtils; diff --git a/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/OggInputStream.java b/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/OggInputStream.java rename to app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java index 767034ed2..4799d3881 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/OggInputStream.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.vorbiscommentreader; +package de.danoeh.antennapod.core.util.vorbiscommentreader; import org.apache.commons.io.IOUtils; diff --git a/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentChapterReader.java b/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentChapterReader.java similarity index 93% rename from app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentChapterReader.java rename to app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentChapterReader.java index b2f149ddd..a6934c60e 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentChapterReader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentChapterReader.java @@ -1,9 +1,9 @@ -package de.danoeh.antennapod.util.vorbiscommentreader; +package de.danoeh.antennapod.core.util.vorbiscommentreader; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.feed.Chapter; -import de.danoeh.antennapod.feed.VorbisCommentChapter; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.VorbisCommentChapter; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentHeader.java b/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentHeader.java similarity index 90% rename from app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentHeader.java rename to app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentHeader.java index 8c47393c9..5f9dd0faf 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentHeader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentHeader.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.vorbiscommentreader; +package de.danoeh.antennapod.core.util.vorbiscommentreader; public class VorbisCommentHeader { private String vendorString; private long userCommentLength; diff --git a/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReader.java b/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReader.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReader.java rename to app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReader.java index 718a4f30f..9639b9c42 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReader.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReader.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.vorbiscommentreader; +package de.danoeh.antennapod.core.util.vorbiscommentreader; import org.apache.commons.io.EndianUtils; import org.apache.commons.io.IOUtils; diff --git a/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReaderException.java b/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java similarity index 89% rename from app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReaderException.java rename to app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java index 574373241..89ab20db0 100644 --- a/app/src/main/java/de/danoeh/antennapod/util/vorbiscommentreader/VorbisCommentReaderException.java +++ b/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.util.vorbiscommentreader; +package de.danoeh.antennapod.core.util.vorbiscommentreader; public class VorbisCommentReaderException extends Exception { public VorbisCommentReaderException() { diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java index d1ed795dc..1585f9b86 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/AutoFlattrPreferenceDialog.java @@ -13,7 +13,7 @@ import android.widget.TextView; import org.apache.commons.lang3.Validate; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.preferences.UserPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; /** * Creates a new AlertDialog that displays preferences for auto-flattring to the user. diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemDialog.java index 7384463de..e62daa08b 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemDialog.java @@ -33,16 +33,16 @@ import java.util.concurrent.Callable; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.adapter.DefaultActionButtonCallback; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.preferences.UserPreferences; -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.util.QueueAccess; -import de.danoeh.antennapod.util.ShownotesProvider; -import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler; +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.DBTasks; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.storage.DownloadRequestException; +import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.ShownotesProvider; +import de.danoeh.antennapod.core.util.menuhandler.FeedItemMenuHandler; /** * Shows information about a specific FeedItem and provides actions like playing, downloading, etc. diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java index a9c596d2e..16fb77f2a 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/GpodnetSetHostnameDialog.java @@ -10,8 +10,8 @@ import android.view.ViewGroup; import android.widget.EditText; import android.widget.LinearLayout; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.gpoddernet.GpodnetService; -import de.danoeh.antennapod.preferences.GpodnetPreferences; +import de.danoeh.antennapod.core.gpoddernet.GpodnetService; +import de.danoeh.antennapod.core.preferences.GpodnetPreferences; /** * Creates a dialog that lets the user change the hostname for the gpodder.net service. diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java index b009e76a7..8eba51540 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java @@ -7,7 +7,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.preferences.UserPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; import java.util.Arrays; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java index 082fe93fc..21e4cbd80 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java @@ -9,11 +9,11 @@ import android.view.View; import android.widget.ListView; import de.danoeh.antennapod.adapter.DownloadedEpisodesListAdapter; import de.danoeh.antennapod.dialog.FeedItemDialog; -import de.danoeh.antennapod.feed.EventDistributor; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.DBWriter; -import de.danoeh.antennapod.util.QueueAccess; +import de.danoeh.antennapod.core.feed.EventDistributor; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.util.QueueAccess; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java index ffce518bf..69bd2b099 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java @@ -12,8 +12,8 @@ import android.widget.ImageView; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.AudioplayerActivity.AudioplayerContentFragment; -import de.danoeh.antennapod.asynctask.PicassoProvider; -import de.danoeh.antennapod.util.playback.Playable; +import de.danoeh.antennapod.core.asynctask.PicassoProvider; +import de.danoeh.antennapod.core.util.playback.Playable; /** * Displays the cover and the title of a FeedItem. diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java index d81ba4b86..9c7fade67 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java @@ -6,9 +6,9 @@ import android.os.Bundle; import android.support.v4.app.ListFragment; import android.view.View; import de.danoeh.antennapod.adapter.DownloadLogAdapter; -import de.danoeh.antennapod.feed.EventDistributor; -import de.danoeh.antennapod.service.download.DownloadStatus; -import de.danoeh.antennapod.storage.DBReader; +import de.danoeh.antennapod.core.feed.EventDistributor; +import de.danoeh.antennapod.core.service.download.DownloadStatus; +import de.danoeh.antennapod.core.storage.DBReader; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java index 985673dd3..99320cffa 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java @@ -13,11 +13,11 @@ import android.widget.TextView; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.asynctask.PicassoProvider; -import de.danoeh.antennapod.service.playback.PlaybackService; -import de.danoeh.antennapod.util.Converter; -import de.danoeh.antennapod.util.playback.Playable; -import de.danoeh.antennapod.util.playback.PlaybackController; +import de.danoeh.antennapod.core.asynctask.PicassoProvider; +import de.danoeh.antennapod.core.service.playback.PlaybackService; +import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.playback.Playable; +import de.danoeh.antennapod.core.util.playback.PlaybackController; /** * Fragment which is supposed to be displayed outside of the MediaplayerActivity diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java index 04c7fbf8e..f0e73a372 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java @@ -28,15 +28,15 @@ import android.widget.Toast; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.preferences.UserPreferences; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.util.Converter; -import de.danoeh.antennapod.util.ShareUtils; -import de.danoeh.antennapod.util.ShownotesProvider; -import de.danoeh.antennapod.util.playback.Playable; -import de.danoeh.antennapod.util.playback.PlaybackController; -import de.danoeh.antennapod.util.playback.Timeline; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.util.Converter; +import de.danoeh.antennapod.core.util.ShareUtils; +import de.danoeh.antennapod.core.util.ShownotesProvider; +import de.danoeh.antennapod.core.util.playback.Playable; +import de.danoeh.antennapod.core.util.playback.PlaybackController; +import de.danoeh.antennapod.core.util.playback.Timeline; /** * Displays the description of a Playable object in a Webview. diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index 909774467..b16e4f930 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -32,25 +32,25 @@ import de.danoeh.antennapod.activity.FeedInfoActivity; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.DefaultActionButtonCallback; import de.danoeh.antennapod.adapter.FeedItemlistAdapter; -import de.danoeh.antennapod.asynctask.DownloadObserver; -import de.danoeh.antennapod.asynctask.FeedRemover; -import de.danoeh.antennapod.asynctask.PicassoProvider; -import de.danoeh.antennapod.dialog.ConfirmationDialog; -import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator; +import de.danoeh.antennapod.core.asynctask.DownloadObserver; +import de.danoeh.antennapod.core.asynctask.FeedRemover; +import de.danoeh.antennapod.core.asynctask.PicassoProvider; +import de.danoeh.antennapod.core.dialog.ConfirmationDialog; +import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.dialog.FeedItemDialog; -import de.danoeh.antennapod.feed.EventDistributor; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.service.download.DownloadService; -import de.danoeh.antennapod.service.download.Downloader; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.DownloadRequestException; -import de.danoeh.antennapod.storage.DownloadRequester; -import de.danoeh.antennapod.util.QueueAccess; -import de.danoeh.antennapod.util.menuhandler.FeedMenuHandler; -import de.danoeh.antennapod.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.util.menuhandler.NavDrawerActivity; +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.feed.FeedMedia; +import de.danoeh.antennapod.core.service.download.DownloadService; +import de.danoeh.antennapod.core.service.download.Downloader; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DownloadRequestException; +import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.menuhandler.FeedMenuHandler; +import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; /** * Displays a list of FeedItems. diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java index fe995256b..4f37f4613 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java @@ -19,22 +19,22 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.DefaultActionButtonCallback; import de.danoeh.antennapod.adapter.NewEpisodesListAdapter; -import de.danoeh.antennapod.asynctask.DownloadObserver; +import de.danoeh.antennapod.core.asynctask.DownloadObserver; import de.danoeh.antennapod.dialog.FeedItemDialog; -import de.danoeh.antennapod.feed.EventDistributor; -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.service.download.DownloadService; -import de.danoeh.antennapod.service.download.Downloader; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.DBTasks; -import de.danoeh.antennapod.storage.DBWriter; -import de.danoeh.antennapod.storage.DownloadRequester; -import de.danoeh.antennapod.util.QueueAccess; -import de.danoeh.antennapod.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.util.menuhandler.NavDrawerActivity; +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.feed.FeedMedia; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.download.DownloadService; +import de.danoeh.antennapod.core.service.download.Downloader; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBTasks; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; import java.util.List; import java.util.concurrent.atomic.AtomicReference; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index 470186180..61e4ae1bb 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -16,17 +16,17 @@ import android.widget.ListView; import de.danoeh.antennapod.R; import de.danoeh.antennapod.adapter.DefaultActionButtonCallback; import de.danoeh.antennapod.adapter.FeedItemlistAdapter; -import de.danoeh.antennapod.asynctask.DownloadObserver; +import de.danoeh.antennapod.core.asynctask.DownloadObserver; import de.danoeh.antennapod.dialog.FeedItemDialog; -import de.danoeh.antennapod.feed.EventDistributor; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.service.download.Downloader; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.DBWriter; -import de.danoeh.antennapod.util.QueueAccess; -import de.danoeh.antennapod.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.core.feed.EventDistributor; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.service.download.Downloader; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; import java.util.List; import java.util.concurrent.atomic.AtomicReference; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 2f322f75b..c1191d933 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -28,17 +28,17 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.DefaultActionButtonCallback; import de.danoeh.antennapod.adapter.QueueListAdapter; -import de.danoeh.antennapod.asynctask.DownloadObserver; +import de.danoeh.antennapod.core.asynctask.DownloadObserver; import de.danoeh.antennapod.dialog.FeedItemDialog; -import de.danoeh.antennapod.feed.EventDistributor; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.service.download.Downloader; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.DBWriter; -import de.danoeh.antennapod.util.QueueAccess; -import de.danoeh.antennapod.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.core.feed.EventDistributor; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.service.download.Downloader; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; /** * Shows all items in the queue diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java index 89c30e34b..514b05efd 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java @@ -5,9 +5,9 @@ import android.os.Handler; import android.support.v4.app.ListFragment; import android.view.View; import de.danoeh.antennapod.adapter.DownloadlistAdapter; -import de.danoeh.antennapod.asynctask.DownloadObserver; -import de.danoeh.antennapod.service.download.Downloader; -import de.danoeh.antennapod.storage.DownloadRequester; +import de.danoeh.antennapod.core.asynctask.DownloadObserver; +import de.danoeh.antennapod.core.service.download.Downloader; +import de.danoeh.antennapod.core.storage.DownloadRequester; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java index b3ade4d70..23cc1d0b8 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java @@ -16,12 +16,12 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.SearchlistAdapter; import de.danoeh.antennapod.dialog.FeedItemDialog; -import de.danoeh.antennapod.feed.*; -import de.danoeh.antennapod.storage.DBReader; -import de.danoeh.antennapod.storage.FeedSearcher; -import de.danoeh.antennapod.util.QueueAccess; -import de.danoeh.antennapod.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.core.feed.*; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.FeedSearcher; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java index 1b4616207..14b3a9c40 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java @@ -5,23 +5,21 @@ import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; -import android.support.v7.widget.*; import android.util.Log; import android.view.*; import android.widget.*; -import android.widget.SearchView; + import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.DefaultOnlineFeedViewActivity; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.activity.OnlineFeedViewActivity; import de.danoeh.antennapod.adapter.gpodnet.PodcastListAdapter; -import de.danoeh.antennapod.fragment.SearchFragment; -import de.danoeh.antennapod.gpoddernet.GpodnetService; -import de.danoeh.antennapod.gpoddernet.GpodnetServiceException; -import de.danoeh.antennapod.gpoddernet.model.GpodnetPodcast; -import de.danoeh.antennapod.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.core.gpoddernet.GpodnetService; +import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast; +import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java index 5717a74e7..33a35fa90 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java @@ -1,8 +1,8 @@ package de.danoeh.antennapod.fragment.gpodnet; -import de.danoeh.antennapod.gpoddernet.GpodnetService; -import de.danoeh.antennapod.gpoddernet.GpodnetServiceException; -import de.danoeh.antennapod.gpoddernet.model.GpodnetPodcast; +import de.danoeh.antennapod.core.gpoddernet.GpodnetService; +import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java index 801024787..b099953a8 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java @@ -10,11 +10,11 @@ import org.apache.commons.lang3.Validate; import java.util.List; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.gpoddernet.GpodnetService; -import de.danoeh.antennapod.gpoddernet.GpodnetServiceException; -import de.danoeh.antennapod.gpoddernet.model.GpodnetPodcast; -import de.danoeh.antennapod.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.core.gpoddernet.GpodnetService; +import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast; +import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; /** * Performs a search on the gpodder.net directory and displays the results. diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SuggestionListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SuggestionListFragment.java index 45fe25580..133bb0281 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SuggestionListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SuggestionListFragment.java @@ -1,9 +1,9 @@ package de.danoeh.antennapod.fragment.gpodnet; -import de.danoeh.antennapod.gpoddernet.GpodnetService; -import de.danoeh.antennapod.gpoddernet.GpodnetServiceException; -import de.danoeh.antennapod.gpoddernet.model.GpodnetPodcast; -import de.danoeh.antennapod.preferences.GpodnetPreferences; +import de.danoeh.antennapod.core.gpoddernet.GpodnetService; +import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast; +import de.danoeh.antennapod.core.preferences.GpodnetPreferences; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java index 204dda992..7e02b647f 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java @@ -5,10 +5,10 @@ import android.os.Bundle; import org.apache.commons.lang3.Validate; import de.danoeh.antennapod.activity.MainActivity; -import de.danoeh.antennapod.gpoddernet.GpodnetService; -import de.danoeh.antennapod.gpoddernet.GpodnetServiceException; -import de.danoeh.antennapod.gpoddernet.model.GpodnetPodcast; -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.GpodnetPodcast; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetTag; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java index a7e1033df..819a28c2d 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java @@ -18,11 +18,11 @@ import java.util.List; 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.GpodnetTag; -import de.danoeh.antennapod.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.core.gpoddernet.GpodnetService; +import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetTag; +import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; public class TagListFragment extends ListFragment { private static final String TAG = "TagListFragment"; diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java index b0430d170..359a546f6 100644 --- a/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java +++ b/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java @@ -7,9 +7,9 @@ import android.util.Log; import android.widget.Toast; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.storage.DownloadRequestException; -import de.danoeh.antennapod.storage.DownloadRequester; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.storage.DownloadRequestException; +import de.danoeh.antennapod.core.storage.DownloadRequester; import org.apache.commons.lang3.StringUtils; import java.util.Arrays; From 658559699f5cd482bb19ade298db43a65d750664 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sat, 11 Oct 2014 17:43:07 +0200 Subject: [PATCH 05/13] Moved core classes into subproject --- app/build.gradle | 6 +- app/core/build.gradle | 83 -- app/src/main/AndroidManifest.xml | 4 +- .../java/com/aocate/media/MediaPlayer.java | 1296 ----------------- .../java/de/danoeh/antennapod/PodcastApp.java | 1 - .../activity/AudioplayerActivity.java | 4 +- .../antennapod/activity/FeedInfoActivity.java | 2 +- .../antennapod/activity/MainActivity.java | 2 +- .../activity/MediaplayerActivity.java | 2 +- .../activity/OpmlImportBaseActivity.java | 4 +- .../activity/PreferenceActivity.java | 2 +- .../asynctask/OpmlExportWorker.java | 118 ++ .../{core => }/asynctask/OpmlFeedQueuer.java | 4 +- .../asynctask/OpmlImportWorker.java | 6 +- .../config/ApplicationCallbacksImpl.java | 23 + .../antennapod/config/ClientConfigurator.java | 19 + .../config/DownloadServiceCallbacksImpl.java | 49 + .../config/FlattrCallbacksImpl.java | 53 + .../config/GpodnetCallbacksImpl.java | 22 + .../config/PlaybackServiceCallbacksImpl.java | 21 + .../config/StorageCallbacksImpl.java | 107 ++ .../core/asynctask/FlattrTokenFetcher.java | 95 -- .../core/asynctask/OpmlExportWorker.java | 114 -- .../core/service/download/Downloader.java | 69 - .../antennapod/core/util/StorageUtils.java | 66 - .../antennapod/core/util/ThemeUtils.java | 22 - .../antennapod/dialog/FeedItemDialog.java | 2 +- .../{core => }/dialog/TimeDialog.java | 4 +- .../antennapod/fragment/ItemlistFragment.java | 6 +- .../fragment/NewEpisodesFragment.java | 4 +- .../fragment/PlaybackHistoryFragment.java | 4 +- .../antennapod/fragment/QueueFragment.java | 4 +- .../antennapod/fragment/SearchFragment.java | 4 +- .../fragment/gpodnet/PodcastListFragment.java | 4 +- .../fragment/gpodnet/SearchListFragment.java | 4 +- .../fragment/gpodnet/TagListFragment.java | 4 +- .../menuhandler/FeedItemMenuHandler.java | 4 +- .../menuhandler/FeedMenuHandler.java | 4 +- .../util => }/menuhandler/MenuItemUtils.java | 4 +- .../menuhandler/NavDrawerActivity.java | 2 +- .../{core => }/receiver/PlayerWidget.java | 15 +- .../PlayerWidgetService.java | 8 +- core/.gitignore | 1 + core/build.gradle | 43 + core/proguard-rules.pro | 17 + .../antennapod/core/ApplicationTest.java | 13 + core/src/main/AndroidManifest.xml | 11 + .../presto/service/IDeathCallback_0_8.aidl | 0 ...OnBufferingUpdateListenerCallback_0_8.aidl | 0 .../IOnCompletionListenerCallback_0_8.aidl | 0 .../service/IOnErrorListenerCallback_0_8.aidl | 0 .../service/IOnInfoListenerCallback_0_8.aidl | 0 ...tAvailableChangedListenerCallback_0_8.aidl | 0 .../IOnPreparedListenerCallback_0_8.aidl | 0 .../IOnSeekCompleteListenerCallback_0_8.aidl | 0 ...tAvailableChangedListenerCallback_0_8.aidl | 0 .../aocate/presto/service/IPlayMedia_0_8.aidl | 0 .../com/aocate/media/AndroidMediaPlayer.java | 0 .../java/com/aocate/media/MediaPlayer.java | 1278 ++++++++++++++++ .../com/aocate/media/MediaPlayerImpl.java | 0 .../media/ServiceBackedMediaPlayer.java | 0 .../media/SpeedAdjustmentAlgorithm.java | 0 .../antennapod/core/ApplicationCallbacks.java | 22 + .../danoeh/antennapod/core/ClientConfig.java | 4 + .../core/DownloadServiceCallbacks.java | 7 +- .../antennapod/core/FlattrCallbacks.java | 14 +- .../antennapod/core/GpodnetCallbacks.java | 3 +- .../core/PlaybackServiceCallbacks.java | 3 +- .../antennapod/core/StorageCallbacks.java | 0 .../core/asynctask/DownloadObserver.java | 2 +- .../core/asynctask/FeedRemover.java | 2 +- .../core/asynctask/FlattrClickWorker.java | 13 +- .../core/asynctask/FlattrStatusFetcher.java | 2 +- .../core/asynctask/FlattrTokenFetcher.java | 92 ++ .../core/asynctask/PicassoImageResource.java | 0 .../core/asynctask/PicassoProvider.java | 0 .../core/backup/OpmlBackupAgent.java | 2 +- .../core/dialog/ConfirmationDialog.java | 4 +- .../DownloadRequestErrorDialogCreator.java | 2 +- .../danoeh/antennapod/core/feed/Chapter.java | 0 .../core/feed/EventDistributor.java | 2 +- .../de/danoeh/antennapod/core/feed/Feed.java | 0 .../antennapod/core/feed/FeedComponent.java | 0 .../danoeh/antennapod/core/feed/FeedFile.java | 0 .../antennapod/core/feed/FeedImage.java | 0 .../danoeh/antennapod/core/feed/FeedItem.java | 12 +- .../antennapod/core/feed/FeedMedia.java | 14 +- .../antennapod/core/feed/FeedPreferences.java | 0 .../antennapod/core/feed/ID3Chapter.java | 0 .../antennapod/core/feed/MediaType.java | 0 .../antennapod/core/feed/SearchResult.java | 0 .../antennapod/core/feed/SimpleChapter.java | 0 .../core/feed/VorbisCommentChapter.java | 0 .../core/gpoddernet/GpodnetService.java | 0 ...GpodnetServiceAuthenticationException.java | 0 .../GpodnetServiceBadStatusCodeException.java | 0 .../gpoddernet/GpodnetServiceException.java | 0 .../core/gpoddernet/model/GpodnetDevice.java | 0 .../core/gpoddernet/model/GpodnetPodcast.java | 0 .../model/GpodnetSubscriptionChange.java | 0 .../core/gpoddernet/model/GpodnetTag.java | 0 .../model/GpodnetUploadChangesResponse.java | 0 .../antennapod/core/opml/OpmlElement.java | 0 .../antennapod/core/opml/OpmlReader.java | 2 +- .../antennapod/core/opml/OpmlSymbols.java | 0 .../antennapod/core/opml/OpmlWriter.java | 2 +- .../core/preferences/GpodnetPreferences.java | 15 +- .../core/preferences/PlaybackPreferences.java | 2 +- .../core/preferences/UserPreferences.java | 4 +- .../core/receiver/AlarmUpdateReceiver.java | 2 +- .../receiver/ConnectivityActionReceiver.java | 2 +- .../core/receiver/FeedUpdateReceiver.java | 2 +- .../core/receiver/MediaButtonReceiver.java | 2 +- .../core/service/GpodnetSyncService.java | 40 +- .../service/download/APRedirectHandler.java | 2 +- .../download/AntennapodHttpClient.java | 8 +- .../service/download/DownloadRequest.java | 0 .../service/download/DownloadService.java | 52 +- .../core/service/download/DownloadStatus.java | 0 .../core/service/download/Downloader.java | 73 + .../service/download/DownloaderCallback.java | 0 .../core/service/download/HttpDownloader.java | 24 +- .../service/playback/PlaybackService.java | 32 +- .../playback/PlaybackServiceMediaPlayer.java | 2 +- .../playback/PlaybackServiceTaskManager.java | 2 +- .../core/service/playback/PlayerStatus.java | 0 .../antennapod/core/storage/DBReader.java | 2 +- .../antennapod/core/storage/DBTasks.java | 2 +- .../antennapod/core/storage/DBWriter.java | 2 +- .../storage/DownloadRequestException.java | 0 .../core/storage/DownloadRequester.java | 2 +- .../core/storage/FeedItemStatistics.java | 0 .../antennapod/core/storage/FeedSearcher.java | 2 +- .../antennapod/core/storage/PodDBAdapter.java | 93 +- .../core/syndication/handler/FeedHandler.java | 0 .../handler/FeedHandlerResult.java | 0 .../syndication/handler/HandlerState.java | 0 .../core/syndication/handler/SyndHandler.java | 2 +- .../core/syndication/handler/TypeGetter.java | 2 +- .../handler/UnsupportedFeedtypeException.java | 0 .../core/syndication/namespace/NSContent.java | 0 .../core/syndication/namespace/NSITunes.java | 0 .../core/syndication/namespace/NSMedia.java | 2 +- .../core/syndication/namespace/NSRSS20.java | 2 +- .../namespace/NSSimpleChapters.java | 0 .../core/syndication/namespace/Namespace.java | 0 .../syndication/namespace/SyndElement.java | 0 .../syndication/namespace/atom/AtomText.java | 0 .../syndication/namespace/atom/NSAtom.java | 2 +- .../core/syndication/util/SyndDateUtils.java | 0 .../core/syndication/util/SyndTypeUtils.java | 0 .../antennapod/core/util/ChapterUtils.java | 2 +- .../antennapod/core/util/Converter.java | 0 .../antennapod/core/util/DownloadError.java | 2 +- .../danoeh/antennapod/core/util/DuckType.java | 2 +- .../antennapod/core/util/EpisodeFilter.java | 0 .../core/util/FeedtitleComparator.java | 0 .../core/util/FileNameGenerator.java | 0 .../core/util/InvalidFeedException.java | 0 .../antennapod/core/util/LangUtils.java | 0 .../antennapod/core/util/NetworkUtils.java | 2 +- .../antennapod/core/util/QueueAccess.java | 0 .../antennapod/core/util/ShareUtils.java | 0 .../core/util/ShownotesProvider.java | 0 .../antennapod/core/util/StorageUtils.java | 67 + .../antennapod/core/util/ThemeUtils.java | 23 + .../danoeh/antennapod/core/util/URIUtil.java | 2 +- .../antennapod/core/util/URLChecker.java | 2 +- .../core/util/UndoBarController.java | 2 +- .../ChapterStartTimeComparator.java | 0 .../comparator/DownloadStatusComparator.java | 0 .../comparator/FeedItemPubdateComparator.java | 0 .../PlaybackCompletionDateComparator.java | 0 .../SearchResultValueComparator.java | 0 .../exception/MediaFileNotFoundException.java | 0 .../util/flattr/FlattrServiceCreator.java | 2 +- .../core/util/flattr/FlattrStatus.java | 0 .../core/util/flattr/FlattrThing.java | 0 .../core/util/flattr/FlattrUtils.java | 29 +- .../core/util/flattr/SimpleFlattrThing.java | 0 .../core/util/gui/FeedItemUndoToken.java | 0 .../core/util/id3reader/ChapterReader.java | 2 +- .../core/util/id3reader/ID3Reader.java | 0 .../util/id3reader/ID3ReaderException.java | 0 .../util/id3reader/model/FrameHeader.java | 0 .../core/util/id3reader/model/Header.java | 0 .../core/util/id3reader/model/TagHeader.java | 0 .../core/util/playback/AudioPlayer.java | 0 .../core/util/playback/ExternalMedia.java | 0 .../core/util/playback/IPlayer.java | 0 .../core/util/playback/MediaPlayerError.java | 2 +- .../core/util/playback/Playable.java | 0 .../util/playback/PlaybackController.java | 4 +- .../core/util/playback/Timeline.java | 2 +- .../core/util/playback/VideoPlayer.java | 0 .../core/util/syndication/FeedDiscoverer.java | 0 .../vorbiscommentreader/OggInputStream.java | 0 .../VorbisCommentChapterReader.java | 2 +- .../VorbisCommentHeader.java | 0 .../VorbisCommentReader.java | 0 .../VorbisCommentReaderException.java | 0 .../res/drawable-hdpi-v11/ic_stat_antenna.png | Bin .../ic_stat_authentication.png | Bin .../drawable-hdpi-v11/stat_notify_sync.png | Bin .../stat_notify_sync_error.png | Bin .../main/res/drawable-hdpi/action_about.png | Bin .../res/drawable-hdpi/action_about_dark.png | Bin .../main/res/drawable-hdpi/action_search.png | Bin .../res/drawable-hdpi/action_search_dark.png | Bin .../res/drawable-hdpi/action_settings.png | Bin .../drawable-hdpi/action_settings_dark.png | Bin .../main/res/drawable-hdpi/action_stream.png | Bin .../res/drawable-hdpi/action_stream_dark.png | Bin .../main/res/drawable-hdpi/av_download.png | Bin .../res/drawable-hdpi/av_download_dark.png | Bin .../res/drawable-hdpi/av_fast_forward.png | Bin .../drawable-hdpi/av_fast_forward_dark.png | Bin .../src/main/res/drawable-hdpi/av_pause.png | Bin .../main/res/drawable-hdpi/av_pause_dark.png | Bin .../src/main/res/drawable-hdpi/av_play.png | Bin .../main/res/drawable-hdpi/av_play_dark.png | Bin .../src/main/res/drawable-hdpi/av_rewind.png | Bin .../main/res/drawable-hdpi/av_rewind_dark.png | Bin .../res/drawable-hdpi/content_discard.png | Bin .../drawable-hdpi/content_discard_dark.png | Bin .../main/res/drawable-hdpi/content_new.png | Bin .../res/drawable-hdpi/content_new_dark.png | Bin .../main/res/drawable-hdpi/default_cover.png | Bin .../res/drawable-hdpi/default_cover_dark.png | Bin .../res/drawable-hdpi/device_access_time.png | Bin .../drawable-hdpi/device_access_time_dark.png | Bin .../res/drawable-hdpi/ic_action_overflow.png | Bin .../drawable-hdpi/ic_action_overflow_dark.png | Bin .../ic_action_pause_over_video.png | Bin .../ic_action_play_over_video.png | Bin .../main/res/drawable-hdpi/ic_drag_handle.png | Bin .../res/drawable-hdpi/ic_drag_handle_dark.png | Bin .../src/main/res/drawable-hdpi/ic_drawer.png | Bin .../main/res/drawable-hdpi/ic_drawer_dark.png | Bin .../main/res/drawable-hdpi/ic_launcher.png | Bin .../src/main/res/drawable-hdpi/ic_new.png | Bin .../main/res/drawable-hdpi/ic_new_dark.png | Bin .../res/drawable-hdpi/ic_stat_antenna.png | Bin .../drawable-hdpi/ic_stat_authentication.png | Bin .../res/drawable-hdpi/location_web_site.png | Bin .../drawable-hdpi/location_web_site_dark.png | Bin .../res/drawable-hdpi/navigation_accept.png | Bin .../drawable-hdpi/navigation_accept_dark.png | Bin .../res/drawable-hdpi/navigation_cancel.png | Bin .../drawable-hdpi/navigation_cancel_dark.png | Bin .../res/drawable-hdpi/navigation_chapters.png | Bin .../navigation_chapters_dark.png | Bin .../res/drawable-hdpi/navigation_collapse.png | Bin .../navigation_collapse_dark.png | Bin .../res/drawable-hdpi/navigation_expand.png | Bin .../drawable-hdpi/navigation_expand_dark.png | Bin .../res/drawable-hdpi/navigation_refresh.png | Bin .../drawable-hdpi/navigation_refresh_dark.png | Bin .../drawable-hdpi/navigation_shownotes.png | Bin .../navigation_shownotes_dark.png | Bin .../main/res/drawable-hdpi/navigation_up.png | Bin .../res/drawable-hdpi/navigation_up_dark.png | Bin .../main/res/drawable-hdpi/social_share.png | Bin .../res/drawable-hdpi/social_share_dark.png | Bin .../res/drawable-hdpi/spinner_button.9.png | Bin .../drawable-hdpi/spinner_button_dark.9.png | Bin .../res/drawable-hdpi/stat_notify_sync.png | Bin .../drawable-hdpi/stat_notify_sync_error.png | Bin .../main/res/drawable-hdpi/stat_playlist.png | Bin .../res/drawable-hdpi/stat_playlist_dark.png | Bin .../src/main/res/drawable-hdpi/type_audio.png | Bin .../res/drawable-hdpi/type_audio_dark.png | Bin .../src/main/res/drawable-hdpi/type_video.png | Bin .../res/drawable-hdpi/type_video_dark.png | Bin .../res/drawable-ldpi-v11/ic_stat_antenna.png | Bin .../main/res/drawable-ldpi/action_stream.png | Bin .../res/drawable-ldpi/action_stream_dark.png | Bin .../main/res/drawable-ldpi/ic_launcher.png | Bin .../res/drawable-ldpi/ic_stat_antenna.png | Bin .../main/res/drawable-ldpi/stat_playlist.png | Bin .../res/drawable-ldpi/stat_playlist_dark.png | Bin .../res/drawable-mdpi-v11/ic_stat_antenna.png | Bin .../ic_stat_authentication.png | Bin .../drawable-mdpi-v11/stat_notify_sync.png | Bin .../stat_notify_sync_error.png | Bin .../main/res/drawable-mdpi/action_about.png | Bin .../res/drawable-mdpi/action_about_dark.png | Bin .../main/res/drawable-mdpi/action_search.png | Bin .../res/drawable-mdpi/action_search_dark.png | Bin .../res/drawable-mdpi/action_settings.png | Bin .../drawable-mdpi/action_settings_dark.png | Bin .../main/res/drawable-mdpi/action_stream.png | Bin .../res/drawable-mdpi/action_stream_dark.png | Bin .../main/res/drawable-mdpi/av_download.png | Bin .../res/drawable-mdpi/av_download_dark.png | Bin .../res/drawable-mdpi/av_fast_forward.png | Bin .../drawable-mdpi/av_fast_forward_dark.png | Bin .../src/main/res/drawable-mdpi/av_pause.png | Bin .../main/res/drawable-mdpi/av_pause_dark.png | Bin .../src/main/res/drawable-mdpi/av_play.png | Bin .../main/res/drawable-mdpi/av_play_dark.png | Bin .../src/main/res/drawable-mdpi/av_rewind.png | Bin .../main/res/drawable-mdpi/av_rewind_dark.png | Bin .../res/drawable-mdpi/content_discard.png | Bin .../drawable-mdpi/content_discard_dark.png | Bin .../main/res/drawable-mdpi/content_new.png | Bin .../res/drawable-mdpi/content_new_dark.png | Bin .../main/res/drawable-mdpi/default_cover.png | Bin .../res/drawable-mdpi/default_cover_dark.png | Bin .../res/drawable-mdpi/device_access_time.png | Bin .../drawable-mdpi/device_access_time_dark.png | Bin .../res/drawable-mdpi/ic_action_overflow.png | Bin .../drawable-mdpi/ic_action_overflow_dark.png | Bin .../ic_action_pause_over_video.png | Bin .../ic_action_play_over_video.png | Bin .../main/res/drawable-mdpi/ic_drag_handle.png | Bin .../res/drawable-mdpi/ic_drag_handle_dark.png | Bin .../src/main/res/drawable-mdpi/ic_drawer.png | Bin .../main/res/drawable-mdpi/ic_drawer_dark.png | Bin .../main/res/drawable-mdpi/ic_launcher.png | Bin .../src/main/res/drawable-mdpi/ic_new.png | Bin .../main/res/drawable-mdpi/ic_new_dark.png | Bin .../res/drawable-mdpi/ic_stat_antenna.png | Bin .../drawable-mdpi/ic_stat_authentication.png | Bin .../res/drawable-mdpi/location_web_site.png | Bin .../drawable-mdpi/location_web_site_dark.png | Bin .../res/drawable-mdpi/navigation_accept.png | Bin .../drawable-mdpi/navigation_accept_dark.png | Bin .../res/drawable-mdpi/navigation_cancel.png | Bin .../drawable-mdpi/navigation_cancel_dark.png | Bin .../res/drawable-mdpi/navigation_chapters.png | Bin .../navigation_chapters_dark.png | Bin .../res/drawable-mdpi/navigation_collapse.png | Bin .../navigation_collapse_dark.png | Bin .../res/drawable-mdpi/navigation_expand.png | Bin .../drawable-mdpi/navigation_expand_dark.png | Bin .../res/drawable-mdpi/navigation_refresh.png | Bin .../drawable-mdpi/navigation_refresh_dark.png | Bin .../drawable-mdpi/navigation_shownotes.png | Bin .../navigation_shownotes_dark.png | Bin .../main/res/drawable-mdpi/navigation_up.png | Bin .../res/drawable-mdpi/navigation_up_dark.png | Bin .../main/res/drawable-mdpi/social_share.png | Bin .../res/drawable-mdpi/social_share_dark.png | Bin .../res/drawable-mdpi/spinner_button.9.png | Bin .../drawable-mdpi/spinner_button_dark.9.png | Bin .../res/drawable-mdpi/stat_notify_sync.png | Bin .../drawable-mdpi/stat_notify_sync_error.png | Bin .../main/res/drawable-mdpi/stat_playlist.png | Bin .../res/drawable-mdpi/stat_playlist_dark.png | Bin .../src/main/res/drawable-mdpi/type_audio.png | Bin .../res/drawable-mdpi/type_audio_dark.png | Bin .../src/main/res/drawable-mdpi/type_video.png | Bin .../res/drawable-mdpi/type_video_dark.png | Bin .../drawable-xhdpi-v11/ic_stat_antenna.png | Bin .../ic_stat_authentication.png | Bin .../drawable-xhdpi-v11/stat_notify_sync.png | Bin .../stat_notify_sync_error.png | Bin .../main/res/drawable-xhdpi/action_about.png | Bin .../res/drawable-xhdpi/action_about_dark.png | Bin .../main/res/drawable-xhdpi/action_search.png | Bin .../res/drawable-xhdpi/action_search_dark.png | Bin .../res/drawable-xhdpi/action_settings.png | Bin .../drawable-xhdpi/action_settings_dark.png | Bin .../main/res/drawable-xhdpi/action_stream.png | Bin .../res/drawable-xhdpi/action_stream_dark.png | Bin .../main/res/drawable-xhdpi/av_download.png | Bin .../res/drawable-xhdpi/av_download_dark.png | Bin .../res/drawable-xhdpi/av_fast_forward.png | Bin .../drawable-xhdpi/av_fast_forward_dark.png | Bin .../src/main/res/drawable-xhdpi/av_pause.png | Bin .../main/res/drawable-xhdpi/av_pause_dark.png | Bin .../src/main/res/drawable-xhdpi/av_play.png | Bin .../main/res/drawable-xhdpi/av_play_dark.png | Bin .../src/main/res/drawable-xhdpi/av_rewind.png | Bin .../res/drawable-xhdpi/av_rewind_dark.png | Bin .../res/drawable-xhdpi/content_discard.png | Bin .../drawable-xhdpi/content_discard_dark.png | Bin .../main/res/drawable-xhdpi/content_new.png | Bin .../res/drawable-xhdpi/content_new_dark.png | Bin .../res/drawable-xhdpi/content_remove.png | Bin .../drawable-xhdpi/content_remove_dark.png | Bin .../main/res/drawable-xhdpi/default_cover.png | Bin .../res/drawable-xhdpi/default_cover_dark.png | Bin .../res/drawable-xhdpi/device_access_time.png | Bin .../device_access_time_dark.png | Bin .../res/drawable-xhdpi/ic_action_overflow.png | Bin .../ic_action_overflow_dark.png | Bin .../ic_action_pause_over_video.png | Bin .../ic_action_play_over_video.png | Bin .../res/drawable-xhdpi/ic_drag_handle.png | Bin .../drawable-xhdpi/ic_drag_handle_dark.png | Bin .../src/main/res/drawable-xhdpi/ic_drawer.png | Bin .../res/drawable-xhdpi/ic_drawer_dark.png | Bin .../main/res/drawable-xhdpi/ic_launcher.png | Bin .../src/main/res/drawable-xhdpi/ic_new.png | Bin .../main/res/drawable-xhdpi/ic_new_dark.png | Bin .../res/drawable-xhdpi/ic_stat_antenna.png | Bin .../drawable-xhdpi/ic_stat_authentication.png | Bin .../res/drawable-xhdpi/ic_undobar_undo.png | Bin .../res/drawable-xhdpi/location_web_site.png | Bin .../drawable-xhdpi/location_web_site_dark.png | Bin .../res/drawable-xhdpi/navigation_accept.png | Bin .../drawable-xhdpi/navigation_accept_dark.png | Bin .../res/drawable-xhdpi/navigation_cancel.png | Bin .../drawable-xhdpi/navigation_cancel_dark.png | Bin .../drawable-xhdpi/navigation_chapters.png | Bin .../navigation_chapters_dark.png | Bin .../drawable-xhdpi/navigation_collapse.png | Bin .../navigation_collapse_dark.png | Bin .../res/drawable-xhdpi/navigation_expand.png | Bin .../drawable-xhdpi/navigation_expand_dark.png | Bin .../res/drawable-xhdpi/navigation_refresh.png | Bin .../navigation_refresh_dark.png | Bin .../drawable-xhdpi/navigation_shownotes.png | Bin .../navigation_shownotes_dark.png | Bin .../main/res/drawable-xhdpi/navigation_up.png | Bin .../res/drawable-xhdpi/navigation_up_dark.png | Bin .../main/res/drawable-xhdpi/social_share.png | Bin .../res/drawable-xhdpi/social_share_dark.png | Bin .../res/drawable-xhdpi/spinner_button.9.png | Bin .../drawable-xhdpi/spinner_button_dark.9.png | Bin .../main/res/drawable-xhdpi/stat_playlist.png | Bin .../res/drawable-xhdpi/stat_playlist_dark.png | Bin .../main/res/drawable-xhdpi/type_audio.png | Bin .../res/drawable-xhdpi/type_audio_dark.png | Bin .../main/res/drawable-xhdpi/type_video.png | Bin .../res/drawable-xhdpi/type_video_dark.png | Bin .../src/main/res/drawable-xhdpi/undobar.9.png | Bin .../undobar_button_focused.9.png | Bin .../undobar_button_pressed.9.png | Bin .../res/drawable-xhdpi/undobar_divider.9.png | Bin .../drawable-xxhdpi/ic_action_overflow.png | Bin .../ic_action_overflow_dark.png | Bin .../ic_action_pause_over_video.png | Bin .../ic_action_play_over_video.png | Bin .../res/drawable-xxhdpi/ic_drag_handle.png | Bin .../drawable-xxhdpi/ic_drag_handle_dark.png | Bin .../main/res/drawable-xxhdpi/ic_drawer.png | Bin .../res/drawable-xxhdpi/ic_drawer_dark.png | Bin .../main/res/drawable-xxhdpi/ic_launcher.png | Bin .../src/main/res/drawable-xxhdpi/ic_new.png | Bin .../main/res/drawable-xxhdpi/ic_new_dark.png | Bin .../ic_stat_authentication.png | Bin {app => core}/src/main/res/drawable/badge.xml | 0 .../main/res/drawable/borderless_button.xml | 0 .../res/drawable/borderless_button_dark.xml | 0 .../res/drawable/horizontal_divider.9.png | Bin .../overlay_button_circle_background.xml | 0 .../main/res/drawable/overlay_drawable.xml | 0 .../res/drawable/overlay_drawable_dark.xml | 0 .../src/main/res/drawable/type_audio.png | Bin .../src/main/res/drawable/type_video.png | Bin .../src/main/res/drawable/undobar_button.xml | 0 .../main/res/drawable/vertical_divider.9.png | Bin .../src/main/res/drawable/white_circle.xml | 0 .../src/main/res/values-az/strings.xml | 0 .../src/main/res/values-ca/strings.xml | 0 .../src/main/res/values-cs-rCZ/strings.xml | 0 .../src/main/res/values-da/strings.xml | 0 .../src/main/res/values-de/strings.xml | 0 .../src/main/res/values-es-rES/strings.xml | 0 .../src/main/res/values-es/strings.xml | 0 .../src/main/res/values-fr/strings.xml | 0 .../src/main/res/values-hi-rIN/strings.xml | 0 .../src/main/res/values-it-rIT/strings.xml | 0 .../src/main/res/values-iw-rIL/strings.xml | 0 .../src/main/res/values-ko/strings.xml | 0 .../src/main/res/values-land/styles.xml | 0 .../src/main/res/values-large/dimens.xml | 0 .../src/main/res/values-nl/strings.xml | 0 .../src/main/res/values-pl-rPL/strings.xml | 0 .../src/main/res/values-pt-rBR/strings.xml | 0 .../src/main/res/values-pt/strings.xml | 0 .../src/main/res/values-ro-rRO/strings.xml | 0 .../src/main/res/values-ru/strings.xml | 0 .../src/main/res/values-sv-rSE/strings.xml | 0 .../src/main/res/values-uk-rUA/strings.xml | 0 .../src/main/res/values-v11/colors.xml | 0 .../src/main/res/values-v14/dimens.xml | 0 .../src/main/res/values-v14/styles.xml | 0 .../src/main/res/values-v16/styles.xml | 0 .../src/main/res/values-v19/colors.xml | 0 .../src/main/res/values-zh-rCN/strings.xml | 0 {app => core}/src/main/res/values/arrays.xml | 0 {app => core}/src/main/res/values/attrs.xml | 0 {app => core}/src/main/res/values/colors.xml | 0 {app => core}/src/main/res/values/dimens.xml | 0 {app => core}/src/main/res/values/ids.xml | 0 .../src/main/res/values/integers.xml | 0 {app => core}/src/main/res/values/strings.xml | 0 {app => core}/src/main/res/values/styles.xml | 0 settings.gradle | 2 +- 493 files changed, 2293 insertions(+), 2071 deletions(-) delete mode 100644 app/core/build.gradle delete mode 100644 app/src/main/java/com/aocate/media/MediaPlayer.java create mode 100644 app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java rename app/src/main/java/de/danoeh/antennapod/{core => }/asynctask/OpmlFeedQueuer.java (96%) rename app/src/main/java/de/danoeh/antennapod/{core => }/asynctask/OpmlImportWorker.java (95%) create mode 100644 app/src/main/java/de/danoeh/antennapod/config/ApplicationCallbacksImpl.java create mode 100644 app/src/main/java/de/danoeh/antennapod/config/ClientConfigurator.java create mode 100644 app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java create mode 100644 app/src/main/java/de/danoeh/antennapod/config/FlattrCallbacksImpl.java create mode 100644 app/src/main/java/de/danoeh/antennapod/config/GpodnetCallbacksImpl.java create mode 100644 app/src/main/java/de/danoeh/antennapod/config/PlaybackServiceCallbacksImpl.java create mode 100644 app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlExportWorker.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java rename app/src/main/java/de/danoeh/antennapod/{core => }/dialog/TimeDialog.java (98%) rename app/src/main/java/de/danoeh/antennapod/{core/util => }/menuhandler/FeedItemMenuHandler.java (98%) rename app/src/main/java/de/danoeh/antennapod/{core/util => }/menuhandler/FeedMenuHandler.java (96%) rename app/src/main/java/de/danoeh/antennapod/{core/util => }/menuhandler/MenuItemUtils.java (92%) rename app/src/main/java/de/danoeh/antennapod/{core/util => }/menuhandler/NavDrawerActivity.java (74%) rename app/src/main/java/de/danoeh/antennapod/{core => }/receiver/PlayerWidget.java (66%) rename app/src/main/java/de/danoeh/antennapod/{core/service/playback => service}/PlayerWidgetService.java (95%) create mode 100644 core/.gitignore create mode 100644 core/build.gradle create mode 100644 core/proguard-rules.pro create mode 100644 core/src/androidTest/java/de/danoeh/antennapod/core/ApplicationTest.java create mode 100644 core/src/main/AndroidManifest.xml rename {app => core}/src/main/aidl/com/aocate/presto/service/IDeathCallback_0_8.aidl (100%) rename {app => core}/src/main/aidl/com/aocate/presto/service/IOnBufferingUpdateListenerCallback_0_8.aidl (100%) rename {app => core}/src/main/aidl/com/aocate/presto/service/IOnCompletionListenerCallback_0_8.aidl (100%) rename {app => core}/src/main/aidl/com/aocate/presto/service/IOnErrorListenerCallback_0_8.aidl (100%) rename {app => core}/src/main/aidl/com/aocate/presto/service/IOnInfoListenerCallback_0_8.aidl (100%) rename {app => core}/src/main/aidl/com/aocate/presto/service/IOnPitchAdjustmentAvailableChangedListenerCallback_0_8.aidl (100%) rename {app => core}/src/main/aidl/com/aocate/presto/service/IOnPreparedListenerCallback_0_8.aidl (100%) rename {app => core}/src/main/aidl/com/aocate/presto/service/IOnSeekCompleteListenerCallback_0_8.aidl (100%) rename {app => core}/src/main/aidl/com/aocate/presto/service/IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8.aidl (100%) rename {app => core}/src/main/aidl/com/aocate/presto/service/IPlayMedia_0_8.aidl (100%) rename {app => core}/src/main/java/com/aocate/media/AndroidMediaPlayer.java (100%) create mode 100644 core/src/main/java/com/aocate/media/MediaPlayer.java rename {app => core}/src/main/java/com/aocate/media/MediaPlayerImpl.java (100%) rename {app => core}/src/main/java/com/aocate/media/ServiceBackedMediaPlayer.java (100%) rename {app => core}/src/main/java/com/aocate/media/SpeedAdjustmentAlgorithm.java (100%) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java rename {app => core}/src/main/java/de/danoeh/antennapod/core/ClientConfig.java (85%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java (85%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java (58%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java (92%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java (81%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/StorageCallbacks.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java (97%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java (95%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrStatusFetcher.java (97%) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java rename {app => core}/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoImageResource.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java (95%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java (96%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java (98%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/Feed.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/FeedFile.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java (97%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java (94%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/ID3Chapter.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/MediaType.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/SimpleChapter.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/feed/VorbisCommentChapter.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/opml/OpmlElement.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/opml/OpmlReader.java (98%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/opml/OpmlSymbols.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/opml/OpmlWriter.java (97%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java (95%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java (95%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java (97%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java (97%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java (96%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java (89%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/download/APRedirectHandler.java (97%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java (95%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java (94%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java (100%) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderCallback.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java (96%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java (97%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/storage/FeedItemStatistics.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java (98%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java (92%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandler.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandlerResult.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java (98%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java (98%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSContent.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java (97%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSSimpleChapters.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/namespace/Namespace.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/namespace/SyndElement.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndDateUtils.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndTypeUtils.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/Converter.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/DownloadError.java (97%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/DuckType.java (98%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/EpisodeFilter.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/FeedtitleComparator.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java (98%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/QueueAccess.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/ShownotesProvider.java (100%) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java create mode 100644 core/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java (95%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java (97%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/UndoBarController.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/comparator/DownloadStatusComparator.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/comparator/FeedItemPubdateComparator.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/comparator/PlaybackCompletionDateComparator.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/comparator/SearchResultValueComparator.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java (93%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java (91%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/gui/FeedItemUndoToken.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java (98%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3Reader.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/FrameHeader.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/Header.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/TagHeader.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java (94%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java (99%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentChapterReader.java (98%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentHeader.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReader.java (100%) rename {app => core}/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java (100%) rename {app => core}/src/main/res/drawable-hdpi-v11/ic_stat_antenna.png (100%) rename {app => core}/src/main/res/drawable-hdpi-v11/ic_stat_authentication.png (100%) rename {app => core}/src/main/res/drawable-hdpi-v11/stat_notify_sync.png (100%) rename {app => core}/src/main/res/drawable-hdpi-v11/stat_notify_sync_error.png (100%) rename {app => core}/src/main/res/drawable-hdpi/action_about.png (100%) rename {app => core}/src/main/res/drawable-hdpi/action_about_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/action_search.png (100%) rename {app => core}/src/main/res/drawable-hdpi/action_search_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/action_settings.png (100%) rename {app => core}/src/main/res/drawable-hdpi/action_settings_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/action_stream.png (100%) rename {app => core}/src/main/res/drawable-hdpi/action_stream_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/av_download.png (100%) rename {app => core}/src/main/res/drawable-hdpi/av_download_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/av_fast_forward.png (100%) rename {app => core}/src/main/res/drawable-hdpi/av_fast_forward_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/av_pause.png (100%) rename {app => core}/src/main/res/drawable-hdpi/av_pause_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/av_play.png (100%) rename {app => core}/src/main/res/drawable-hdpi/av_play_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/av_rewind.png (100%) rename {app => core}/src/main/res/drawable-hdpi/av_rewind_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/content_discard.png (100%) rename {app => core}/src/main/res/drawable-hdpi/content_discard_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/content_new.png (100%) rename {app => core}/src/main/res/drawable-hdpi/content_new_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/default_cover.png (100%) rename {app => core}/src/main/res/drawable-hdpi/default_cover_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/device_access_time.png (100%) rename {app => core}/src/main/res/drawable-hdpi/device_access_time_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_action_overflow.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_action_overflow_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_action_pause_over_video.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_action_play_over_video.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_drag_handle.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_drag_handle_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_drawer.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_drawer_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_launcher.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_new.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_new_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_stat_antenna.png (100%) rename {app => core}/src/main/res/drawable-hdpi/ic_stat_authentication.png (100%) rename {app => core}/src/main/res/drawable-hdpi/location_web_site.png (100%) rename {app => core}/src/main/res/drawable-hdpi/location_web_site_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_accept.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_accept_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_cancel.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_cancel_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_chapters.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_chapters_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_collapse.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_collapse_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_expand.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_expand_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_refresh.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_refresh_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_shownotes.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_shownotes_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_up.png (100%) rename {app => core}/src/main/res/drawable-hdpi/navigation_up_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/social_share.png (100%) rename {app => core}/src/main/res/drawable-hdpi/social_share_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/spinner_button.9.png (100%) rename {app => core}/src/main/res/drawable-hdpi/spinner_button_dark.9.png (100%) rename {app => core}/src/main/res/drawable-hdpi/stat_notify_sync.png (100%) rename {app => core}/src/main/res/drawable-hdpi/stat_notify_sync_error.png (100%) rename {app => core}/src/main/res/drawable-hdpi/stat_playlist.png (100%) rename {app => core}/src/main/res/drawable-hdpi/stat_playlist_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/type_audio.png (100%) rename {app => core}/src/main/res/drawable-hdpi/type_audio_dark.png (100%) rename {app => core}/src/main/res/drawable-hdpi/type_video.png (100%) rename {app => core}/src/main/res/drawable-hdpi/type_video_dark.png (100%) rename {app => core}/src/main/res/drawable-ldpi-v11/ic_stat_antenna.png (100%) rename {app => core}/src/main/res/drawable-ldpi/action_stream.png (100%) rename {app => core}/src/main/res/drawable-ldpi/action_stream_dark.png (100%) rename {app => core}/src/main/res/drawable-ldpi/ic_launcher.png (100%) rename {app => core}/src/main/res/drawable-ldpi/ic_stat_antenna.png (100%) rename {app => core}/src/main/res/drawable-ldpi/stat_playlist.png (100%) rename {app => core}/src/main/res/drawable-ldpi/stat_playlist_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi-v11/ic_stat_antenna.png (100%) rename {app => core}/src/main/res/drawable-mdpi-v11/ic_stat_authentication.png (100%) rename {app => core}/src/main/res/drawable-mdpi-v11/stat_notify_sync.png (100%) rename {app => core}/src/main/res/drawable-mdpi-v11/stat_notify_sync_error.png (100%) rename {app => core}/src/main/res/drawable-mdpi/action_about.png (100%) rename {app => core}/src/main/res/drawable-mdpi/action_about_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/action_search.png (100%) rename {app => core}/src/main/res/drawable-mdpi/action_search_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/action_settings.png (100%) rename {app => core}/src/main/res/drawable-mdpi/action_settings_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/action_stream.png (100%) rename {app => core}/src/main/res/drawable-mdpi/action_stream_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/av_download.png (100%) rename {app => core}/src/main/res/drawable-mdpi/av_download_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/av_fast_forward.png (100%) rename {app => core}/src/main/res/drawable-mdpi/av_fast_forward_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/av_pause.png (100%) rename {app => core}/src/main/res/drawable-mdpi/av_pause_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/av_play.png (100%) rename {app => core}/src/main/res/drawable-mdpi/av_play_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/av_rewind.png (100%) rename {app => core}/src/main/res/drawable-mdpi/av_rewind_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/content_discard.png (100%) rename {app => core}/src/main/res/drawable-mdpi/content_discard_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/content_new.png (100%) rename {app => core}/src/main/res/drawable-mdpi/content_new_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/default_cover.png (100%) rename {app => core}/src/main/res/drawable-mdpi/default_cover_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/device_access_time.png (100%) rename {app => core}/src/main/res/drawable-mdpi/device_access_time_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_action_overflow.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_action_overflow_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_action_pause_over_video.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_action_play_over_video.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_drag_handle.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_drag_handle_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_drawer.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_drawer_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_launcher.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_new.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_new_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_stat_antenna.png (100%) rename {app => core}/src/main/res/drawable-mdpi/ic_stat_authentication.png (100%) rename {app => core}/src/main/res/drawable-mdpi/location_web_site.png (100%) rename {app => core}/src/main/res/drawable-mdpi/location_web_site_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_accept.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_accept_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_cancel.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_cancel_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_chapters.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_chapters_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_collapse.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_collapse_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_expand.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_expand_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_refresh.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_refresh_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_shownotes.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_shownotes_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_up.png (100%) rename {app => core}/src/main/res/drawable-mdpi/navigation_up_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/social_share.png (100%) rename {app => core}/src/main/res/drawable-mdpi/social_share_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/spinner_button.9.png (100%) rename {app => core}/src/main/res/drawable-mdpi/spinner_button_dark.9.png (100%) rename {app => core}/src/main/res/drawable-mdpi/stat_notify_sync.png (100%) rename {app => core}/src/main/res/drawable-mdpi/stat_notify_sync_error.png (100%) rename {app => core}/src/main/res/drawable-mdpi/stat_playlist.png (100%) rename {app => core}/src/main/res/drawable-mdpi/stat_playlist_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/type_audio.png (100%) rename {app => core}/src/main/res/drawable-mdpi/type_audio_dark.png (100%) rename {app => core}/src/main/res/drawable-mdpi/type_video.png (100%) rename {app => core}/src/main/res/drawable-mdpi/type_video_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi-v11/ic_stat_antenna.png (100%) rename {app => core}/src/main/res/drawable-xhdpi-v11/ic_stat_authentication.png (100%) rename {app => core}/src/main/res/drawable-xhdpi-v11/stat_notify_sync.png (100%) rename {app => core}/src/main/res/drawable-xhdpi-v11/stat_notify_sync_error.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/action_about.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/action_about_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/action_search.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/action_search_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/action_settings.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/action_settings_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/action_stream.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/action_stream_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/av_download.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/av_download_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/av_fast_forward.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/av_fast_forward_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/av_pause.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/av_pause_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/av_play.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/av_play_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/av_rewind.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/av_rewind_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/content_discard.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/content_discard_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/content_new.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/content_new_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/content_remove.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/content_remove_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/default_cover.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/default_cover_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/device_access_time.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/device_access_time_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_action_overflow.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_action_overflow_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_action_pause_over_video.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_action_play_over_video.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_drag_handle.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_drag_handle_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_drawer.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_drawer_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_launcher.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_new.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_new_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_stat_antenna.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_stat_authentication.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/ic_undobar_undo.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/location_web_site.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/location_web_site_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_accept.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_accept_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_cancel.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_cancel_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_chapters.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_chapters_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_collapse.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_collapse_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_expand.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_expand_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_refresh.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_refresh_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_shownotes.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_shownotes_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_up.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/navigation_up_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/social_share.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/social_share_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/spinner_button.9.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/spinner_button_dark.9.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/stat_playlist.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/stat_playlist_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/type_audio.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/type_audio_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/type_video.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/type_video_dark.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/undobar.9.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/undobar_button_focused.9.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/undobar_button_pressed.9.png (100%) rename {app => core}/src/main/res/drawable-xhdpi/undobar_divider.9.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_action_overflow.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_action_overflow_dark.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_action_pause_over_video.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_action_play_over_video.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_drag_handle.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_drawer.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_drawer_dark.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_launcher.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_new.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_new_dark.png (100%) rename {app => core}/src/main/res/drawable-xxhdpi/ic_stat_authentication.png (100%) rename {app => core}/src/main/res/drawable/badge.xml (100%) rename {app => core}/src/main/res/drawable/borderless_button.xml (100%) rename {app => core}/src/main/res/drawable/borderless_button_dark.xml (100%) rename {app => core}/src/main/res/drawable/horizontal_divider.9.png (100%) rename {app => core}/src/main/res/drawable/overlay_button_circle_background.xml (100%) rename {app => core}/src/main/res/drawable/overlay_drawable.xml (100%) rename {app => core}/src/main/res/drawable/overlay_drawable_dark.xml (100%) rename {app => core}/src/main/res/drawable/type_audio.png (100%) rename {app => core}/src/main/res/drawable/type_video.png (100%) rename {app => core}/src/main/res/drawable/undobar_button.xml (100%) rename {app => core}/src/main/res/drawable/vertical_divider.9.png (100%) rename {app => core}/src/main/res/drawable/white_circle.xml (100%) rename {app => core}/src/main/res/values-az/strings.xml (100%) rename {app => core}/src/main/res/values-ca/strings.xml (100%) rename {app => core}/src/main/res/values-cs-rCZ/strings.xml (100%) rename {app => core}/src/main/res/values-da/strings.xml (100%) rename {app => core}/src/main/res/values-de/strings.xml (100%) rename {app => core}/src/main/res/values-es-rES/strings.xml (100%) rename {app => core}/src/main/res/values-es/strings.xml (100%) rename {app => core}/src/main/res/values-fr/strings.xml (100%) rename {app => core}/src/main/res/values-hi-rIN/strings.xml (100%) rename {app => core}/src/main/res/values-it-rIT/strings.xml (100%) rename {app => core}/src/main/res/values-iw-rIL/strings.xml (100%) rename {app => core}/src/main/res/values-ko/strings.xml (100%) rename {app => core}/src/main/res/values-land/styles.xml (100%) rename {app => core}/src/main/res/values-large/dimens.xml (100%) rename {app => core}/src/main/res/values-nl/strings.xml (100%) rename {app => core}/src/main/res/values-pl-rPL/strings.xml (100%) rename {app => core}/src/main/res/values-pt-rBR/strings.xml (100%) rename {app => core}/src/main/res/values-pt/strings.xml (100%) rename {app => core}/src/main/res/values-ro-rRO/strings.xml (100%) rename {app => core}/src/main/res/values-ru/strings.xml (100%) rename {app => core}/src/main/res/values-sv-rSE/strings.xml (100%) rename {app => core}/src/main/res/values-uk-rUA/strings.xml (100%) rename {app => core}/src/main/res/values-v11/colors.xml (100%) rename {app => core}/src/main/res/values-v14/dimens.xml (100%) rename {app => core}/src/main/res/values-v14/styles.xml (100%) rename {app => core}/src/main/res/values-v16/styles.xml (100%) rename {app => core}/src/main/res/values-v19/colors.xml (100%) rename {app => core}/src/main/res/values-zh-rCN/strings.xml (100%) rename {app => core}/src/main/res/values/arrays.xml (100%) rename {app => core}/src/main/res/values/attrs.xml (100%) rename {app => core}/src/main/res/values/colors.xml (100%) rename {app => core}/src/main/res/values/dimens.xml (100%) rename {app => core}/src/main/res/values/ids.xml (100%) rename {app => core}/src/main/res/values/integers.xml (100%) rename {app => core}/src/main/res/values/strings.xml (100%) rename {app => core}/src/main/res/values/styles.xml (100%) diff --git a/app/build.gradle b/app/build.gradle index 1295a81dc..2e4b1da7d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ dependencies { compile 'com.android.support:support-v4:20.0.0' compile 'com.android.support:appcompat-v7:20.0.0' compile 'org.apache.commons:commons-lang3:3.3.2' - compile ('org.shredzone.flattr4j:flattr4j-core:2.10') { + 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' @@ -23,9 +23,8 @@ dependencies { 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 ("com.doomonafireball.betterpickers:library:1.5.2") { + compile('com.doomonafireball.betterpickers:library:1.5.2') { exclude group: 'com.android.support', module: 'support-v4' } compile 'org.jsoup:jsoup:1.7.3' @@ -33,6 +32,7 @@ dependencies { compile 'com.squareup.okhttp:okhttp:2.0.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' compile 'com.squareup.okio:okio:1.0.0' + compile project(':core') } android { diff --git a/app/core/build.gradle b/app/core/build.gradle deleted file mode 100644 index a552f8313..000000000 --- a/app/core/build.gradle +++ /dev/null @@ -1,83 +0,0 @@ -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath 'com.android.tools.build:gradle:0.12.2' - } -} -apply plugin: 'android-library' - -repositories { - mavenCentral() -} -dependencies { - compile 'com.android.support:support-v4:20.0.0' - compile 'com.android.support:appcompat-v7:20.0.0' - 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 ("com.doomonafireball.betterpickers:library:1.5.2") { - exclude group: 'com.android.support', module: 'support-v4' - } - compile 'org.jsoup:jsoup:1.7.3' - compile 'com.squareup.picasso:picasso:2.3.4' - compile 'com.squareup.okhttp:okhttp:2.0.0' - compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' - compile 'com.squareup.okio:okio:1.0.0' -} - -android { - compileSdkVersion 19 - buildToolsVersion "20.0" - - defaultConfig { - minSdkVersion 10 - targetSdkVersion 19 - testApplicationId "de.test.antennapod" - testInstrumentationRunner "de.test.antennapod.AntennaPodTestRunner" - } - - 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 { - runProguard 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 - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 768a4abb0..3410d9d53 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -112,12 +112,12 @@ - + diff --git a/app/src/main/java/com/aocate/media/MediaPlayer.java b/app/src/main/java/com/aocate/media/MediaPlayer.java deleted file mode 100644 index 04ecd58a9..000000000 --- a/app/src/main/java/com/aocate/media/MediaPlayer.java +++ /dev/null @@ -1,1296 +0,0 @@ -// Copyright 2011, Aocate, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.aocate.media; - -import java.io.IOException; -import java.util.List; -import java.util.concurrent.locks.ReentrantLock; - -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.ServiceConnection; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.media.AudioManager; -import android.net.Uri; -import android.os.Handler; -import android.os.IBinder; -import android.os.Message; -import android.os.Handler.Callback; -import android.util.Log; - -import de.danoeh.antennapod.BuildConfig; - -public class MediaPlayer { - public interface OnBufferingUpdateListener { - public abstract void onBufferingUpdate(MediaPlayer arg0, int percent); - } - - public interface OnCompletionListener { - public abstract void onCompletion(MediaPlayer arg0); - } - - public interface OnErrorListener { - public abstract boolean onError(MediaPlayer arg0, int what, int extra); - } - - public interface OnInfoListener { - public abstract boolean onInfo(MediaPlayer arg0, int what, int extra); - } - - public interface OnPitchAdjustmentAvailableChangedListener { - /** - * - * @param arg0 - * The owning media player - * @param pitchAdjustmentAvailable - * True if pitch adjustment is available, false if not - */ - public abstract void onPitchAdjustmentAvailableChanged( - MediaPlayer arg0, boolean pitchAdjustmentAvailable); - } - - public interface OnPreparedListener { - public abstract void onPrepared(MediaPlayer arg0); - } - - public interface OnSeekCompleteListener { - public abstract void onSeekComplete(MediaPlayer arg0); - } - - public interface OnSpeedAdjustmentAvailableChangedListener { - /** - * - * @param arg0 - * The owning media player - * @param speedAdjustmentAvailable - * True if speed adjustment is available, false if not - */ - public abstract void onSpeedAdjustmentAvailableChanged( - MediaPlayer arg0, boolean speedAdjustmentAvailable); - } - - public enum State { - IDLE, INITIALIZED, PREPARED, STARTED, PAUSED, STOPPED, PREPARING, PLAYBACK_COMPLETED, END, ERROR - } - - private static Uri SPEED_ADJUSTMENT_MARKET_URI = Uri - .parse("market://details?id=com.aocate.presto"); - - private static Intent prestoMarketIntent = null; - - public static final int MEDIA_ERROR_SERVER_DIED = android.media.MediaPlayer.MEDIA_ERROR_SERVER_DIED; - public static final int MEDIA_ERROR_UNKNOWN = android.media.MediaPlayer.MEDIA_ERROR_UNKNOWN; - public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = android.media.MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK; - - /** - * Indicates whether the specified action can be used as an intent. This - * method queries the package manager for installed packages that can - * respond to an intent with the specified action. If no suitable package is - * found, this method returns false. - * - * @param context - * The application's environment. - * @param action - * The Intent action to check for availability. - * - * @return True if an Intent with the specified action can be sent and - * responded to, false otherwise. - */ - public static boolean isIntentAvailable(Context context, String action) { - final PackageManager packageManager = context.getPackageManager(); - final Intent intent = new Intent(action); - List list = packageManager.queryIntentServices(intent, - PackageManager.MATCH_DEFAULT_ONLY); - return list.size() > 0; - } - - /** - * Indicates whether the Presto library is installed - * - * @param context - * The context to use to query the package manager. - * @return True if the Presto library is installed, false if not. - */ - public static boolean isPrestoLibraryInstalled(Context context) { - return isIntentAvailable(context, ServiceBackedMediaPlayer.INTENT_NAME); - } - - /** - * Return an Intent that opens the Android Market page for the speed - * alteration library - * - * @return The Intent for the Presto library on the Android Market - */ - public static Intent getPrestoMarketIntent() { - if (prestoMarketIntent == null) { - prestoMarketIntent = new Intent(Intent.ACTION_VIEW, - SPEED_ADJUSTMENT_MARKET_URI); - } - return prestoMarketIntent; - } - - /** - * Open the Android Market page for the Presto library - * - * @param context - * The context from which to open the Android Market page - */ - public static void openPrestoMarketIntent(Context context) { - context.startActivity(getPrestoMarketIntent()); - } - - private static final String MP_TAG = "AocateReplacementMediaPlayer"; - - private static final double PITCH_STEP_CONSTANT = 1.0594630943593; - - private AndroidMediaPlayer amp = null; - // This is whether speed adjustment should be enabled (by the Service) - // To avoid the Service entirely, set useService to false - protected boolean enableSpeedAdjustment = true; - private int lastKnownPosition = 0; - // In some cases, we're going to have to replace the - // android.media.MediaPlayer on the fly, and we don't want to touch the - // wrong media player, so lock it way too much. - ReentrantLock lock = new ReentrantLock(); - private int mAudioStreamType = AudioManager.STREAM_MUSIC; - private Context mContext; - private boolean mIsLooping = false; - private float mLeftVolume = 1f; - private float mPitchStepsAdjustment = 0f; - private float mRightVolume = 1f; - private float mSpeedMultiplier = 1f; - private int mWakeMode = 0; - MediaPlayerImpl mpi = null; - protected boolean pitchAdjustmentAvailable = false; - private ServiceBackedMediaPlayer sbmp = null; - protected boolean speedAdjustmentAvailable = false; - - private Handler mServiceDisconnectedHandler = null; - - // Some parts of state cannot be found by calling MediaPlayerImpl functions, - // so store our own state. This also helps copy state when changing - // implementations - State state = State.INITIALIZED; - String stringDataSource = null; - Uri uriDataSource = null; - private boolean useService = false; - - // Naming Convention for Listeners - // Most listeners can both be set by clients and called by MediaPlayImpls - // There are a few that have to do things in this class as well as calling - // the function. In all cases, onX is what is called by MediaPlayerImpl - // If there is work to be done in this class, then the listener that is - // set by setX is X (with the first letter lowercase). - OnBufferingUpdateListener onBufferingUpdateListener = null; - OnCompletionListener onCompletionListener = null; - OnErrorListener onErrorListener = null; - OnInfoListener onInfoListener = null; - - // Special case. Pitch adjustment ceases to be available when we switch - // to the android.media.MediaPlayer (though it is not guaranteed to be - // available when using the ServiceBackedMediaPlayer) - OnPitchAdjustmentAvailableChangedListener onPitchAdjustmentAvailableChangedListener = new OnPitchAdjustmentAvailableChangedListener() { - public void onPitchAdjustmentAvailableChanged(MediaPlayer arg0, - boolean pitchAdjustmentAvailable) { - lock.lock(); - try { - Log - .d( - MP_TAG, - "onPitchAdjustmentAvailableChangedListener.onPitchAdjustmentAvailableChanged being called"); - if (MediaPlayer.this.pitchAdjustmentAvailable != pitchAdjustmentAvailable) { - Log.d(MP_TAG, "Pitch adjustment state has changed from " - + MediaPlayer.this.pitchAdjustmentAvailable - + " to " + pitchAdjustmentAvailable); - MediaPlayer.this.pitchAdjustmentAvailable = pitchAdjustmentAvailable; - if (MediaPlayer.this.pitchAdjustmentAvailableChangedListener != null) { - MediaPlayer.this.pitchAdjustmentAvailableChangedListener - .onPitchAdjustmentAvailableChanged(arg0, - pitchAdjustmentAvailable); - } - } - } finally { - lock.unlock(); - } - } - }; - OnPitchAdjustmentAvailableChangedListener pitchAdjustmentAvailableChangedListener = null; - - MediaPlayer.OnPreparedListener onPreparedListener = new MediaPlayer.OnPreparedListener() { - public void onPrepared(MediaPlayer arg0) { - Log.d(MP_TAG, "onPreparedListener 242 setting state to PREPARED"); - MediaPlayer.this.state = State.PREPARED; - if (MediaPlayer.this.preparedListener != null) { - Log.d(MP_TAG, "Calling preparedListener"); - MediaPlayer.this.preparedListener.onPrepared(arg0); - } - Log.d(MP_TAG, "Wrap up onPreparedListener"); - } - }; - - OnPreparedListener preparedListener = null; - OnSeekCompleteListener onSeekCompleteListener = null; - - // Special case. Speed adjustment ceases to be available when we switch - // to the android.media.MediaPlayer (though it is not guaranteed to be - // available when using the ServiceBackedMediaPlayer) - OnSpeedAdjustmentAvailableChangedListener onSpeedAdjustmentAvailableChangedListener = new OnSpeedAdjustmentAvailableChangedListener() { - public void onSpeedAdjustmentAvailableChanged(MediaPlayer arg0, - boolean speedAdjustmentAvailable) { - lock.lock(); - try { - Log - .d( - MP_TAG, - "onSpeedAdjustmentAvailableChangedListener.onSpeedAdjustmentAvailableChanged being called"); - if (MediaPlayer.this.speedAdjustmentAvailable != speedAdjustmentAvailable) { - Log.d(MP_TAG, "Speed adjustment state has changed from " - + MediaPlayer.this.speedAdjustmentAvailable - + " to " + speedAdjustmentAvailable); - MediaPlayer.this.speedAdjustmentAvailable = speedAdjustmentAvailable; - if (MediaPlayer.this.speedAdjustmentAvailableChangedListener != null) { - MediaPlayer.this.speedAdjustmentAvailableChangedListener - .onSpeedAdjustmentAvailableChanged(arg0, - speedAdjustmentAvailable); - } - } - } finally { - lock.unlock(); - } - } - }; - OnSpeedAdjustmentAvailableChangedListener speedAdjustmentAvailableChangedListener = null; - - private int speedAdjustmentAlgorithm = SpeedAdjustmentAlgorithm.SONIC; - - public MediaPlayer(final Context context) { - this(context, true); - } - - public MediaPlayer(final Context context, boolean useService) { - this.mContext = context; - this.useService = useService; - - // So here's the major problem - // Sometimes the service won't exist or won't be connected, - // so start with an android.media.MediaPlayer, and when - // the service is connected, use that from then on - this.mpi = this.amp = new AndroidMediaPlayer(this, context); - - // setupMpi will go get the Service, if it can, then bring that - // implementation into sync - Log.d(MP_TAG, "setupMpi"); - setupMpi(context); - } - - private boolean invalidServiceConnectionConfiguration() { - if (!(this.mpi instanceof ServiceBackedMediaPlayer)) { - if (this.useService && isPrestoLibraryInstalled()) { - // In this case, the Presto library has been installed - // or something while playing sound - // We could be using the service, but we're not - Log.d(MP_TAG, "We could be using the service, but we're not 316"); - return true; - } - // If useService is false, then we shouldn't be using the SBMP - // If the Presto library isn't installed, ditto - Log.d(MP_TAG, "this.mpi is not a ServiceBackedMediaPlayer, but we couldn't use it anyway 321"); - return false; - } else { - if (BuildConfig.DEBUG && !(this.mpi instanceof ServiceBackedMediaPlayer)) throw new AssertionError(); - if (this.useService && isPrestoLibraryInstalled()) { - // We should be using the service, and we are. Great! - Log.d(MP_TAG, "We could be using a ServiceBackedMediaPlayer and we are 327"); - return false; - } - // We're trying to use the service when we shouldn't, - // that's an invalid configuration - Log.d(MP_TAG, "We're trying to use a ServiceBackedMediaPlayer but we shouldn't be 332"); - return true; - } - } - - private void setupMpi(final Context context) { - lock.lock(); - try { - Log.d(MP_TAG, "setupMpi 336"); - // Check if the client wants to use the service at all, - // then if we're already using the right kind of media player - if (this.useService && isPrestoLibraryInstalled()) { - if ((this.mpi != null) - && (this.mpi instanceof ServiceBackedMediaPlayer)) { - Log.d(MP_TAG, "Already using ServiceBackedMediaPlayer"); - return; - } - if (this.sbmp == null) { - Log.d(MP_TAG, "Instantiating new ServiceBackedMediaPlayer 346"); - this.sbmp = new ServiceBackedMediaPlayer(this, context, - new ServiceConnection() { - public void onServiceConnected( - ComponentName className, - final IBinder service) { - Thread t = new Thread(new Runnable() { - public void run() { - // This lock probably isn't granular - // enough - MediaPlayer.this.lock.lock(); - Log.d(MP_TAG, - "onServiceConnected 257"); - try { - MediaPlayer.this - .switchMediaPlayerImpl( - MediaPlayer.this.amp, - MediaPlayer.this.sbmp); - Log.d(MP_TAG, "End onServiceConnected 362"); - } finally { - MediaPlayer.this.lock.unlock(); - } - } - }); - t.start(); - } - - public void onServiceDisconnected( - ComponentName className) { - MediaPlayer.this.lock.lock(); - try { - // Can't get any more useful information - // out of sbmp - if (MediaPlayer.this.sbmp != null) { - MediaPlayer.this.sbmp.release(); - } - // Unlike most other cases, sbmp gets set - // to null since there's nothing useful - // backing it now - MediaPlayer.this.sbmp = null; - - if (mServiceDisconnectedHandler == null) { - mServiceDisconnectedHandler = new Handler(new Callback() { - public boolean handleMessage(Message msg) { - // switchMediaPlayerImpl won't try to - // clone anything from null - lock.lock(); - try { - if (MediaPlayer.this.amp == null) { - // This should never be in this state - MediaPlayer.this.amp = new AndroidMediaPlayer( - MediaPlayer.this, - MediaPlayer.this.mContext); - } - // Use sbmp instead of null in case by some miracle it's - // been restored in the meantime - MediaPlayer.this.switchMediaPlayerImpl( - MediaPlayer.this.sbmp, - MediaPlayer.this.amp); - return true; - } - finally { - lock.unlock(); - } - } - }); - } - - // This code needs to execute on the - // original thread to instantiate - // the new object in the right place - mServiceDisconnectedHandler - .sendMessage( - mServiceDisconnectedHandler - .obtainMessage()); - // Note that we do NOT want to set - // useService. useService is about - // what the user wants, not what they - // get - } finally { - MediaPlayer.this.lock.unlock(); - } - } - } - ); - } - switchMediaPlayerImpl(this.amp, this.sbmp); - } else { - if ((this.mpi != null) - && (this.mpi instanceof AndroidMediaPlayer)) { - Log.d(MP_TAG, "Already using AndroidMediaPlayer"); - return; - } - if (this.amp == null) { - Log.d(MP_TAG, "Instantiating new AndroidMediaPlayer (this should be impossible)"); - this.amp = new AndroidMediaPlayer(this, context); - } - switchMediaPlayerImpl(this.sbmp, this.amp); - } - } finally { - lock.unlock(); - } - } - - private void switchMediaPlayerImpl(MediaPlayerImpl from, MediaPlayerImpl to) { - lock.lock(); - try { - Log.d(MP_TAG, "switchMediaPlayerImpl"); - if ((from == to) - // Same object, nothing to synchronize - || (to == null) - // Nothing to copy to (maybe this should throw an error?) - || ((to instanceof ServiceBackedMediaPlayer) && !((ServiceBackedMediaPlayer) to).isConnected()) - // ServiceBackedMediaPlayer hasn't yet connected, onServiceConnected will take care of the transition - || (MediaPlayer.this.state == State.END)) { - // State.END is after a release(), no further functions should - // be called on this class and from is likely to have problems - // retrieving state that won't be used anyway - return; - } - // Extract all that we can from the existing implementation - // and copy it to the new implementation - - Log.d(MP_TAG, "switchMediaPlayerImpl(), current state is " - + this.state.toString()); - - to.reset(); - - // Do this first so we don't have to prepare the same - // data file twice - to.setEnableSpeedAdjustment(MediaPlayer.this.enableSpeedAdjustment); - - // This is a reasonable place to set all of these, - // none of them require prepare() or the like first - to.setAudioStreamType(this.mAudioStreamType); - to.setSpeedAdjustmentAlgorithm(this.speedAdjustmentAlgorithm); - to.setLooping(this.mIsLooping); - to.setPitchStepsAdjustment(this.mPitchStepsAdjustment); - Log.d(MP_TAG, "Setting playback speed to " + this.mSpeedMultiplier); - to.setPlaybackSpeed(this.mSpeedMultiplier); - to.setVolume(MediaPlayer.this.mLeftVolume, - MediaPlayer.this.mRightVolume); - to.setWakeMode(this.mContext, this.mWakeMode); - - Log.d(MP_TAG, "asserting at least one data source is null"); - assert ((MediaPlayer.this.stringDataSource == null) || (MediaPlayer.this.uriDataSource == null)); - - if (uriDataSource != null) { - Log.d(MP_TAG, "switchMediaPlayerImpl(): uriDataSource != null"); - try { - to.setDataSource(this.mContext, uriDataSource); - } catch (IllegalArgumentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IllegalStateException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - if (stringDataSource != null) { - Log.d(MP_TAG, - "switchMediaPlayerImpl(): stringDataSource != null"); - try { - to.setDataSource(stringDataSource); - } catch (IllegalArgumentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IllegalStateException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - if ((this.state == State.PREPARED) - || (this.state == State.PREPARING) - || (this.state == State.PAUSED) - || (this.state == State.STOPPED) - || (this.state == State.STARTED) - || (this.state == State.PLAYBACK_COMPLETED)) { - Log.d(MP_TAG, "switchMediaPlayerImpl(): prepare and seek"); - // Use prepare here instead of prepareAsync so that - // we wait for it to be ready before we try to use it - try { - to.muteNextOnPrepare(); - to.prepare(); - } catch (IllegalStateException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - int seekPos = 0; - if (from != null) { - seekPos = from.getCurrentPosition(); - } else if (this.lastKnownPosition < to.getDuration()) { - // This can happen if the Service unexpectedly - // disconnected. Because it would result in too much - // information being passed around, we don't constantly - // poll for the lastKnownPosition, but we'll save it - // when getCurrentPosition is called - seekPos = this.lastKnownPosition; - } - to.muteNextSeek(); - to.seekTo(seekPos); - } - if ((from != null) - && from.isPlaying()) { - from.pause(); - } - if ((this.state == State.STARTED) - || (this.state == State.PAUSED) - || (this.state == State.STOPPED)) { - Log.d(MP_TAG, "switchMediaPlayerImpl(): start"); - if (to != null) { - to.start(); - } - } - - if (this.state == State.PAUSED) { - Log.d(MP_TAG, "switchMediaPlayerImpl(): paused"); - if (to != null) { - to.pause(); - } - } else if (this.state == State.STOPPED) { - Log.d(MP_TAG, "switchMediaPlayerImpl(): stopped"); - if (to != null) { - to.stop(); - } - } - - this.mpi = to; - - // Cheating here by relying on the side effect in - // on(Pitch|Speed)AdjustmentAvailableChanged - if ((to.canSetPitch() != this.pitchAdjustmentAvailable) - && (this.onPitchAdjustmentAvailableChangedListener != null)) { - this.onPitchAdjustmentAvailableChangedListener - .onPitchAdjustmentAvailableChanged(this, to - .canSetPitch()); - } - if ((to.canSetSpeed() != this.speedAdjustmentAvailable) - && (this.onSpeedAdjustmentAvailableChangedListener != null)) { - this.onSpeedAdjustmentAvailableChangedListener - .onSpeedAdjustmentAvailableChanged(this, to - .canSetSpeed()); - } - Log.d(MP_TAG, "switchMediaPlayerImpl() 625 " + this.state.toString()); - } finally { - lock.unlock(); - } - } - - /** - * Returns true if pitch can be changed at this moment - * - * @return True if pitch can be changed - */ - public boolean canSetPitch() { - lock.lock(); - try { - return this.mpi.canSetPitch(); - } finally { - lock.unlock(); - } - } - - /** - * Returns true if speed can be changed at this moment - * - * @return True if speed can be changed - */ - public boolean canSetSpeed() { - lock.lock(); - try { - return this.mpi.canSetSpeed(); - } finally { - lock.unlock(); - } - } - - protected void finalize() throws Throwable { - lock.lock(); - try { - Log.d(MP_TAG, "finalize() 626"); - this.release(); - } finally { - lock.unlock(); - } - } - - /** - * Returns the number of steps (in a musical scale) by which playback is - * currently shifted. When greater than zero, pitch is shifted up. When less - * than zero, pitch is shifted down. - * - * @return The number of steps pitch is currently shifted by - */ - public float getCurrentPitchStepsAdjustment() { - lock.lock(); - try { - return this.mpi.getCurrentPitchStepsAdjustment(); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.getCurrentPosition() - * Accurate only to frame size of encoded data (26 ms for MP3s) - * - * @return Current position (in milliseconds) - */ - public int getCurrentPosition() { - lock.lock(); - try { - return (this.lastKnownPosition = this.mpi.getCurrentPosition()); - } finally { - lock.unlock(); - } - } - - /** - * Returns the current speed multiplier. Defaults to 1.0 (normal speed) - * - * @return The current speed multiplier - */ - public float getCurrentSpeedMultiplier() { - lock.lock(); - try { - return this.mpi.getCurrentSpeedMultiplier(); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.getDuration() - * - * @return Length of the track (in milliseconds) - */ - public int getDuration() { - lock.lock(); - try { - return this.mpi.getDuration(); - } finally { - lock.unlock(); - } - } - - /** - * Get the maximum value that can be passed to setPlaybackSpeed - * - * @return The maximum speed multiplier - */ - public float getMaxSpeedMultiplier() { - lock.lock(); - try { - return this.mpi.getMaxSpeedMultiplier(); - } finally { - lock.unlock(); - } - } - - /** - * Get the minimum value that can be passed to setPlaybackSpeed - * - * @return The minimum speed multiplier - */ - public float getMinSpeedMultiplier() { - lock.lock(); - try { - return this.mpi.getMinSpeedMultiplier(); - } finally { - lock.unlock(); - } - } - - /** - * Gets the version code of the backing service - * @return -1 if ServiceBackedMediaPlayer is not used, 0 if the service is not - * connected, otherwise the version code retrieved from the service - */ - public int getServiceVersionCode() { - lock.lock(); - try { - if (this.mpi instanceof ServiceBackedMediaPlayer) { - return ((ServiceBackedMediaPlayer) this.mpi).getServiceVersionCode(); - } - else { - return -1; - } - } - finally { - lock.unlock(); - } - } - - /** - * Gets the version name of the backing service - * @return null if ServiceBackedMediaPlayer is not used, empty string if - * the service is not connected, otherwise the version name retrieved from - * the service - */ - public String getServiceVersionName() { - lock.lock(); - try { - if (this.mpi instanceof ServiceBackedMediaPlayer) { - return ((ServiceBackedMediaPlayer) this.mpi).getServiceVersionName(); - } - else { - return null; - } - } - finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.isLooping() - * - * @return True if the track is looping - */ - public boolean isLooping() { - lock.lock(); - try { - return this.mpi.isLooping(); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.isPlaying() - * - * @return True if the track is playing - */ - public boolean isPlaying() { - lock.lock(); - try { - return this.mpi.isPlaying(); - } finally { - lock.unlock(); - } - } - - /** - * Returns true if this MediaPlayer has access to the Presto - * library - * - * @return True if the Presto library is installed - */ - public boolean isPrestoLibraryInstalled() { - if ((this.mpi == null) || (this.mpi.mContext == null)) { - return false; - } - return isPrestoLibraryInstalled(this.mpi.mContext); - } - - /** - * Open the Android Market page in the same context as this MediaPlayer - */ - public void openPrestoMarketIntent() { - if ((this.mpi != null) && (this.mpi.mContext != null)) { - openPrestoMarketIntent(this.mpi.mContext); - } - } - - /** - * Functions identically to android.media.MediaPlayer.pause() Pauses the - * track - */ - public void pause() { - lock.lock(); - try { - if (invalidServiceConnectionConfiguration()) { - setupMpi(this.mpi.mContext); - } - this.state = State.PAUSED; - this.mpi.pause(); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.prepare() Prepares the - * track. This or prepareAsync must be called before start() - */ - public void prepare() throws IllegalStateException, IOException { - lock.lock(); - try { - Log.d(MP_TAG, "prepare() 746 using " + ((this.mpi == null) ? "null (this shouldn't happen)" : this.mpi.getClass().toString()) + " state " + this.state.toString()); - Log.d(MP_TAG, "onPreparedListener is: " + ((this.onPreparedListener == null) ? "null" : "non-null")); - Log.d(MP_TAG, "preparedListener is: " + ((this.preparedListener == null) ? "null" : "non-null")); - if (invalidServiceConnectionConfiguration()) { - setupMpi(this.mpi.mContext); - } - this.mpi.prepare(); - this.state = State.PREPARED; - Log.d(MP_TAG, "prepare() finished 778"); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.prepareAsync() - * Prepares the track. This or prepare must be called before start() - */ - public void prepareAsync() { - lock.lock(); - try { - Log.d(MP_TAG, "prepareAsync() 779"); - if (invalidServiceConnectionConfiguration()) { - setupMpi(this.mpi.mContext); - } - this.state = State.PREPARING; - this.mpi.prepareAsync(); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.release() Releases the - * underlying resources used by the media player. - */ - public void release() { - lock.lock(); - try { - Log.d(MP_TAG, "Releasing MediaPlayer 791"); - - this.state = State.END; - if (this.amp != null) { - this.amp.release(); - } - if (this.sbmp != null) { - this.sbmp.release(); - } - - this.onBufferingUpdateListener = null; - this.onCompletionListener = null; - this.onErrorListener = null; - this.onInfoListener = null; - this.preparedListener = null; - this.onPitchAdjustmentAvailableChangedListener = null; - this.pitchAdjustmentAvailableChangedListener = null; - Log.d(MP_TAG, "Setting onSeekCompleteListener to null 871"); - this.onSeekCompleteListener = null; - this.onSpeedAdjustmentAvailableChangedListener = null; - this.speedAdjustmentAvailableChangedListener = null; - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.reset() Resets the - * track to idle state - */ - public void reset() { - lock.lock(); - try { - this.state = State.IDLE; - this.stringDataSource = null; - this.uriDataSource = null; - this.mpi.reset(); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.seekTo(int msec) Seeks - * to msec in the track - */ - public void seekTo(int msec) throws IllegalStateException { - lock.lock(); - try { - this.mpi.seekTo(msec); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.setAudioStreamType(int - * streamtype) Sets the audio stream type. - */ - public void setAudioStreamType(int streamtype) { - lock.lock(); - try { - this.mAudioStreamType = streamtype; - this.mpi.setAudioStreamType(streamtype); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.setDataSource(Context - * context, Uri uri) Sets uri as data source in the context given - */ - public void setDataSource(Context context, Uri uri) - throws IllegalArgumentException, IllegalStateException, IOException { - lock.lock(); - try { - Log.d(MP_TAG, "In setDataSource(context, " + uri.toString() + "), using " + this.mpi.getClass().toString()); - if (invalidServiceConnectionConfiguration()) { - setupMpi(this.mpi.mContext); - } - this.state = State.INITIALIZED; - this.stringDataSource = null; - this.uriDataSource = uri; - this.mpi.setDataSource(context, uri); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.setDataSource(String - * path) Sets the data source of the track to a file given. - */ - public void setDataSource(String path) throws IllegalArgumentException, - IllegalStateException, IOException { - lock.lock(); - try { - Log.d(MP_TAG, "In setDataSource(context, " + path + ")"); - if (invalidServiceConnectionConfiguration()) { - setupMpi(this.mpi.mContext); - } - this.state = State.INITIALIZED; - this.stringDataSource = path; - this.uriDataSource = null; - this.mpi.setDataSource(path); - } finally { - lock.unlock(); - } - } - - /** - * Sets whether to use speed adjustment or not. Speed adjustment on is more - * computation-intensive than with it off. - * - * @param enableSpeedAdjustment - * Whether speed adjustment should be supported. - */ - public void setEnableSpeedAdjustment(boolean enableSpeedAdjustment) { - lock.lock(); - try { - this.enableSpeedAdjustment = enableSpeedAdjustment; - this.mpi.setEnableSpeedAdjustment(enableSpeedAdjustment); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.setLooping(boolean - * loop) Sets the track to loop infinitely if loop is true, play once if - * loop is false - */ - public void setLooping(boolean loop) { - lock.lock(); - try { - this.mIsLooping = loop; - this.mpi.setLooping(loop); - } finally { - lock.unlock(); - } - } - - /** - * Sets the number of steps (in a musical scale) by which playback is - * currently shifted. When greater than zero, pitch is shifted up. When less - * than zero, pitch is shifted down. - * - * @param pitchSteps - * The number of steps by which to shift playback - */ - public void setPitchStepsAdjustment(float pitchSteps) { - lock.lock(); - try { - this.mPitchStepsAdjustment = pitchSteps; - this.mpi.setPitchStepsAdjustment(pitchSteps); - } finally { - lock.unlock(); - } - } - - /** - * Set the algorithm to use for changing the speed and pitch of audio - * See SpeedAdjustmentAlgorithm constants for more details - * @param algorithm The algorithm to use. - */ - public void setSpeedAdjustmentAlgorithm(int algorithm) { - lock.lock(); - try { - this.speedAdjustmentAlgorithm = algorithm; - if (this.mpi != null) { - this.mpi.setSpeedAdjustmentAlgorithm(algorithm); - } - } - finally { - lock.unlock(); - } - } - - private static float getPitchStepsAdjustment(float pitch) { - return (float) (Math.log(pitch) / (2 * Math.log(PITCH_STEP_CONSTANT))); - } - - /** - * Sets the percentage by which pitch is currently shifted. When greater - * than zero, pitch is shifted up. When less than zero, pitch is shifted - * down - * - * @param f - * The percentage to shift pitch - */ - public void setPlaybackPitch(float pitch) { - lock.lock(); - try { - this.mPitchStepsAdjustment = getPitchStepsAdjustment(pitch); - this.mpi.setPlaybackPitch(pitch); - } finally { - lock.unlock(); - } - } - - /** - * Set playback speed. 1.0 is normal speed, 2.0 is double speed, and so on. - * Speed should never be set to 0 or below. - * - * @param f - * The speed multiplier to use for further playback - */ - public void setPlaybackSpeed(float f) { - lock.lock(); - try { - this.mSpeedMultiplier = f; - this.mpi.setPlaybackSpeed(f); - } finally { - lock.unlock(); - } - } - - /** - * Sets whether to use speed adjustment or not. Speed adjustment on is more - * computation-intensive than with it off. - * - * @param enableSpeedAdjustment - * Whether speed adjustment should be supported. - */ - public void setUseService(boolean useService) { - lock.lock(); - try { - this.useService = useService; - setupMpi(this.mpi.mContext); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.setVolume(float - * leftVolume, float rightVolume) Sets the stereo volume - */ - public void setVolume(float leftVolume, float rightVolume) { - lock.lock(); - try { - this.mLeftVolume = leftVolume; - this.mRightVolume = rightVolume; - this.mpi.setVolume(leftVolume, rightVolume); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.setWakeMode(Context - * context, int mode) Acquires a wake lock in the context given. You must - * request the appropriate permissions in your AndroidManifest.xml file. - */ - public void setWakeMode(Context context, int mode) { - lock.lock(); - try { - this.mWakeMode = mode; - this.mpi.setWakeMode(context, mode); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to - * android.media.MediaPlayer.setOnCompletionListener(OnCompletionListener - * listener) Sets a listener to be used when a track completes playing. - */ - public void setOnBufferingUpdateListener(OnBufferingUpdateListener listener) { - lock.lock(); - try { - this.onBufferingUpdateListener = listener; - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to - * android.media.MediaPlayer.setOnCompletionListener(OnCompletionListener - * listener) Sets a listener to be used when a track completes playing. - */ - public void setOnCompletionListener(OnCompletionListener listener) { - lock.lock(); - try { - this.onCompletionListener = listener; - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to - * android.media.MediaPlayer.setOnErrorListener(OnErrorListener listener) - * Sets a listener to be used when a track encounters an error. - */ - public void setOnErrorListener(OnErrorListener listener) { - lock.lock(); - try { - this.onErrorListener = listener; - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to - * android.media.MediaPlayer.setOnInfoListener(OnInfoListener listener) Sets - * a listener to be used when a track has info. - */ - public void setOnInfoListener(OnInfoListener listener) { - lock.lock(); - try { - this.onInfoListener = listener; - } finally { - lock.unlock(); - } - } - - /** - * Sets a listener that will fire when pitch adjustment becomes available or - * stops being available - */ - public void setOnPitchAdjustmentAvailableChangedListener( - OnPitchAdjustmentAvailableChangedListener listener) { - lock.lock(); - try { - this.pitchAdjustmentAvailableChangedListener = listener; - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to - * android.media.MediaPlayer.setOnPreparedListener(OnPreparedListener - * listener) Sets a listener to be used when a track finishes preparing. - */ - public void setOnPreparedListener(OnPreparedListener listener) { - lock.lock(); - Log.d(MP_TAG, " ++++++++++++++++++++++++++++++++++++++++++++ setOnPreparedListener"); - try { - this.preparedListener = listener; - // For this one, we do not explicitly set the MediaPlayer or the - // Service listener. This is because in addition to calling the - // listener provided by the client, it's necessary to change - // state to PREPARED. See prepareAsync for implementation details - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to - * android.media.MediaPlayer.setOnSeekCompleteListener - * (OnSeekCompleteListener listener) Sets a listener to be used when a track - * finishes seeking. - */ - public void setOnSeekCompleteListener(OnSeekCompleteListener listener) { - lock.lock(); - try { - this.onSeekCompleteListener = listener; - } finally { - lock.unlock(); - } - } - - /** - * Sets a listener that will fire when speed adjustment becomes available or - * stops being available - */ - public void setOnSpeedAdjustmentAvailableChangedListener( - OnSpeedAdjustmentAvailableChangedListener listener) { - lock.lock(); - try { - this.speedAdjustmentAvailableChangedListener = listener; - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.start() Starts a track - * playing - */ - public void start() { - lock.lock(); - try { - Log.d(MP_TAG, "start() 1149"); - if (invalidServiceConnectionConfiguration()) { - setupMpi(this.mpi.mContext); - } - this.state = State.STARTED; - Log.d(MP_TAG, "start() 1154"); - this.mpi.start(); - } finally { - lock.unlock(); - } - } - - /** - * Functions identically to android.media.MediaPlayer.stop() Stops a track - * playing and resets its position to the start. - */ - public void stop() { - lock.lock(); - try { - if (invalidServiceConnectionConfiguration()) { - setupMpi(this.mpi.mContext); - } - this.state = State.STOPPED; - this.mpi.stop(); - } finally { - lock.unlock(); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java index 25aa9fb68..12213d6f9 100644 --- a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java +++ b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java @@ -12,7 +12,6 @@ import de.danoeh.antennapod.spa.SPAUtil; public class PodcastApp extends Application { private static final String TAG = "PodcastApp"; - public static final String EXPORT_DIR = "export/"; private static float LOGICAL_DENSITY; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 5622bc987..f9001adad 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -43,8 +43,8 @@ import de.danoeh.antennapod.fragment.ItemDescriptionFragment; 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.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import de.danoeh.antennapod.core.util.playback.ExternalMedia; import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackController; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java index 80484df37..3000cfaeb 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java @@ -21,7 +21,7 @@ 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.core.util.menuhandler.FeedMenuHandler; +import de.danoeh.antennapod.menuhandler.FeedMenuHandler; /** * Displays information about a feed. diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index 2c660019c..7029fd32c 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -31,7 +31,7 @@ import de.danoeh.antennapod.fragment.*; 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.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java index 249a3c5c3..14cb2727f 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -22,7 +22,7 @@ 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.dialog.TimeDialog; +import de.danoeh.antennapod.dialog.TimeDialog; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.preferences.UserPreferences; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java index 2e66978fd..d974e0e1b 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java @@ -4,8 +4,8 @@ import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.util.Log; import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.core.asynctask.OpmlFeedQueuer; -import de.danoeh.antennapod.core.asynctask.OpmlImportWorker; +import de.danoeh.antennapod.asynctask.OpmlFeedQueuer; +import de.danoeh.antennapod.asynctask.OpmlImportWorker; import de.danoeh.antennapod.core.opml.OpmlElement; import java.io.Reader; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java index 65efcc230..484550a6a 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java @@ -22,7 +22,7 @@ import android.widget.Toast; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; -import de.danoeh.antennapod.core.asynctask.OpmlExportWorker; +import de.danoeh.antennapod.asynctask.OpmlExportWorker; import de.danoeh.antennapod.dialog.AuthenticationDialog; import de.danoeh.antennapod.dialog.AutoFlattrPreferenceDialog; import de.danoeh.antennapod.dialog.GpodnetSetHostnameDialog; diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java new file mode 100644 index 000000000..6bba956a6 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlExportWorker.java @@ -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 { + 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(); + } + } + +} diff --git a/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlFeedQueuer.java b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlFeedQueuer.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java index 13144faa9..cb9197b8e 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlFeedQueuer.java +++ b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java @@ -1,10 +1,10 @@ -package de.danoeh.antennapod.core.asynctask; +package de.danoeh.antennapod.asynctask; 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.core.feed.Feed; import de.danoeh.antennapod.core.opml.OpmlElement; diff --git a/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlImportWorker.java b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlImportWorker.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlImportWorker.java rename to app/src/main/java/de/danoeh/antennapod/asynctask/OpmlImportWorker.java index a4308be9b..cfe0703ca 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlImportWorker.java +++ b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlImportWorker.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.core.asynctask; +package de.danoeh.antennapod.asynctask; import android.annotation.SuppressLint; import android.app.AlertDialog; @@ -8,8 +8,8 @@ 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.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; diff --git a/app/src/main/java/de/danoeh/antennapod/config/ApplicationCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/ApplicationCallbacksImpl.java new file mode 100644 index 000000000..fdbb2139d --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/config/ApplicationCallbacksImpl.java @@ -0,0 +1,23 @@ +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; + +public class ApplicationCallbacksImpl implements ApplicationCallbacks { + + @Override + public Application getApplicationInstance() { + return PodcastApp.getInstance(); + } + + @Override + public Intent getStorageErrorActivity(Context context) { + return new Intent(context, StorageErrorActivity.class); + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/config/ClientConfigurator.java b/app/src/main/java/de/danoeh/antennapod/config/ClientConfigurator.java new file mode 100644 index 000000000..5dc3416c6 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/config/ClientConfigurator.java @@ -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.3"; + ClientConfig.applicationCallbacks = new ApplicationCallbacksImpl(); + ClientConfig.downloadServiceCallbacks = new DownloadServiceCallbacksImpl(); + ClientConfig.gpodnetCallbacks = new GpodnetCallbacksImpl(); + ClientConfig.playbackServiceCallbacks = new PlaybackServiceCallbacksImpl(); + ClientConfig.storageCallbacks = new StorageCallbacksImpl(); + ClientConfig.flattrCallbacks = new FlattrCallbacksImpl(); + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java new file mode 100644 index 000000000..0f180e9c5 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java @@ -0,0 +1,49 @@ +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.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); + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/config/FlattrCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/FlattrCallbacksImpl.java new file mode 100644 index 000000000..3817db6de --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/config/FlattrCallbacksImpl.java @@ -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"); + } + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/config/GpodnetCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/GpodnetCallbacksImpl.java new file mode 100644 index 000000000..5f8da6894 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/config/GpodnetCallbacksImpl.java @@ -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); + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/config/PlaybackServiceCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/PlaybackServiceCallbacksImpl.java new file mode 100644 index 000000000..d1e3a8379 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/config/PlaybackServiceCallbacksImpl.java @@ -0,0 +1,21 @@ +package de.danoeh.antennapod.config; + +import android.content.Context; +import android.content.Intent; + +import de.danoeh.antennapod.activity.AudioplayerActivity; +import de.danoeh.antennapod.activity.VideoplayerActivity; +import de.danoeh.antennapod.core.PlaybackServiceCallbacks; +import de.danoeh.antennapod.core.feed.MediaType; + + +public class PlaybackServiceCallbacksImpl implements PlaybackServiceCallbacks { + @Override + public Intent getPlayerActivityIntent(Context context, MediaType mediaType) { + if (mediaType == MediaType.VIDEO) { + return new Intent(context, VideoplayerActivity.class); + } else { + return new Intent(context, AudioplayerActivity.class); + } + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java new file mode 100644 index 000000000..ec133aed1 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java @@ -0,0 +1,107 @@ +package de.danoeh.antennapod.config; + + +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.util.Log; + +import de.danoeh.antennapod.core.StorageCallbacks; +import de.danoeh.antennapod.core.storage.PodDBAdapter; + +public class StorageCallbacksImpl implements StorageCallbacks { + + @Override + public int getDatabaseVersion() { + return 12; + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + Log.w("DBAdapter", "Upgrading from version " + oldVersion + " to " + + newVersion + "."); + if (oldVersion <= 1) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + " ADD COLUMN " + + PodDBAdapter.KEY_TYPE + " TEXT"); + } + if (oldVersion <= 2) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_SIMPLECHAPTERS + + " ADD COLUMN " + PodDBAdapter.KEY_LINK + " TEXT"); + } + if (oldVersion <= 3) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS + + " ADD COLUMN " + PodDBAdapter.KEY_ITEM_IDENTIFIER + " TEXT"); + } + if (oldVersion <= 4) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + " ADD COLUMN " + + PodDBAdapter.KEY_FEED_IDENTIFIER + " TEXT"); + } + if (oldVersion <= 5) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_DOWNLOAD_LOG + + " ADD COLUMN " + PodDBAdapter.KEY_REASON_DETAILED + " TEXT"); + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_DOWNLOAD_LOG + + " ADD COLUMN " + PodDBAdapter.KEY_DOWNLOADSTATUS_TITLE + " TEXT"); + } + if (oldVersion <= 6) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_SIMPLECHAPTERS + + " ADD COLUMN " + PodDBAdapter.KEY_CHAPTER_TYPE + " INTEGER"); + } + if (oldVersion <= 7) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA + + " ADD COLUMN " + PodDBAdapter.KEY_PLAYBACK_COMPLETION_DATE + + " INTEGER"); + } + if (oldVersion <= 8) { + final int KEY_ID_POSITION = 0; + final int KEY_MEDIA_POSITION = 1; + + // Add feeditem column to feedmedia table + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA + + " ADD COLUMN " + PodDBAdapter.KEY_FEEDITEM + + " INTEGER"); + Cursor feeditemCursor = db.query(PodDBAdapter.TABLE_NAME_FEED_ITEMS, + new String[]{PodDBAdapter.KEY_ID, PodDBAdapter.KEY_MEDIA}, "? > 0", + new String[]{PodDBAdapter.KEY_MEDIA}, null, null, null); + if (feeditemCursor.moveToFirst()) { + db.beginTransaction(); + ContentValues contentValues = new ContentValues(); + do { + long mediaId = feeditemCursor.getLong(KEY_MEDIA_POSITION); + contentValues.put(PodDBAdapter.KEY_FEEDITEM, feeditemCursor.getLong(KEY_ID_POSITION)); + db.update(PodDBAdapter.TABLE_NAME_FEED_MEDIA, contentValues, PodDBAdapter.KEY_ID + "=?", new String[]{String.valueOf(mediaId)}); + contentValues.clear(); + } while (feeditemCursor.moveToNext()); + db.setTransactionSuccessful(); + db.endTransaction(); + } + feeditemCursor.close(); + } + if (oldVersion <= 9) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + + " ADD COLUMN " + PodDBAdapter.KEY_AUTO_DOWNLOAD + + " INTEGER DEFAULT 1"); + } + if (oldVersion <= 10) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + + " ADD COLUMN " + PodDBAdapter.KEY_FLATTR_STATUS + + " INTEGER"); + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS + + " ADD COLUMN " + PodDBAdapter.KEY_FLATTR_STATUS + + " INTEGER"); + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA + + " ADD COLUMN " + PodDBAdapter.KEY_PLAYED_DURATION + + " INTEGER"); + } + if (oldVersion <= 11) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + + " ADD COLUMN " + PodDBAdapter.KEY_USERNAME + + " TEXT"); + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + + " ADD COLUMN " + PodDBAdapter.KEY_PASSWORD + + " TEXT"); + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS + + " ADD COLUMN " + PodDBAdapter.KEY_IMAGE + + " INTEGER"); + } + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java deleted file mode 100644 index 6f8319c7d..000000000 --- a/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java +++ /dev/null @@ -1,95 +0,0 @@ -package de.danoeh.antennapod.core.asynctask; - - -import android.annotation.SuppressLint; -import android.app.ProgressDialog; -import android.content.Context; -import android.net.Uri; -import android.os.AsyncTask; -import android.util.Log; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.FlattrAuthActivity; -import de.danoeh.antennapod.core.util.flattr.FlattrUtils; -import org.shredzone.flattr4j.exception.FlattrException; -import org.shredzone.flattr4j.oauth.AccessToken; -import org.shredzone.flattr4j.oauth.AndroidAuthenticator; - -/** Fetches the access token in the background in order to avoid networkOnMainThread exception. */ - -public class FlattrTokenFetcher extends AsyncTask { - private static final String TAG = "FlattrTokenFetcher"; - Context context; - AndroidAuthenticator auth; - AccessToken token; - Uri uri; - ProgressDialog dialog; - FlattrException exception; - - public FlattrTokenFetcher(Context context, AndroidAuthenticator auth, Uri uri) { - super(); - this.context = context; - this.auth = auth; - this.uri = uri; - } - - @Override - protected void onPostExecute(AccessToken result) { - if (result != null) { - FlattrUtils.storeToken(result); - } - dialog.dismiss(); - if (exception == null) { - FlattrAuthActivity instance = FlattrAuthActivity.getInstance(); - if (instance != null) { - instance.handleAuthenticationSuccess(); - } else { - Log.e(TAG, "FlattrAuthActivity instance was null"); - } - } else { - FlattrUtils.showErrorDialog(context, exception.getMessage()); - } - } - - - - @Override - protected void onPreExecute() { - super.onPreExecute(); - dialog = new ProgressDialog(context); - dialog.setMessage(context.getString(R.string.processing_label)); - dialog.setIndeterminate(true); - dialog.setCancelable(false); - dialog.show(); - } - - - - @Override - protected AccessToken doInBackground(Void... params) { - try { - token = auth.fetchAccessToken(uri); - } catch (FlattrException e) { - e.printStackTrace(); - exception = e; - return null; - } - if (token != null) { - if (BuildConfig.DEBUG) Log.d(TAG, "Successfully got token"); - return token; - } else { - Log.w(TAG, "Flattr token was null"); - return null; - } - } - - @SuppressLint("NewApi") - public void executeAsync() { - if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) { - executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } else { - execute(); - } - } - -} diff --git a/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlExportWorker.java b/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlExportWorker.java deleted file mode 100644 index 9f887bda6..000000000 --- a/app/src/main/java/de/danoeh/antennapod/core/asynctask/OpmlExportWorker.java +++ /dev/null @@ -1,114 +0,0 @@ -package de.danoeh.antennapod.core.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 de.danoeh.antennapod.PodcastApp; -import de.danoeh.antennapod.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; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; - -/** Writes an OPML file into the export directory in the background. */ -public class OpmlExportWorker extends AsyncTask { - private static final String TAG = "OpmlExportWorker"; - private static final String DEFAULT_OUTPUT_NAME = "antennapod-feeds.opml"; - 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, PodcastApp.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(); - } - } - -} diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java b/app/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java deleted file mode 100644 index 5af9c2d05..000000000 --- a/app/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java +++ /dev/null @@ -1,69 +0,0 @@ -package de.danoeh.antennapod.core.service.download; - -import android.content.Context; -import android.net.wifi.WifiManager; -import de.danoeh.antennapod.PodcastApp; -import de.danoeh.antennapod.R; - -import java.util.concurrent.Callable; - -/** Downloads files */ -public abstract class Downloader implements Callable { - private static final String TAG = "Downloader"; - - protected volatile boolean finished; - - protected volatile boolean cancelled; - - protected DownloadRequest request; - protected DownloadStatus result; - - public Downloader(DownloadRequest request) { - super(); - this.request = request; - this.request.setStatusMsg(R.string.download_pending); - this.cancelled = false; - this.result = new DownloadStatus(request, null, false, false, null); - } - - protected abstract void download(); - - public final Downloader call() { - WifiManager wifiManager = (WifiManager) PodcastApp.getInstance().getSystemService(Context.WIFI_SERVICE); - WifiManager.WifiLock wifiLock = null; - if (wifiManager != null) { - wifiLock = wifiManager.createWifiLock(TAG); - wifiLock.acquire(); - } - - download(); - - if (wifiLock != null) { - wifiLock.release(); - } - - if (result == null) { - throw new IllegalStateException( - "Downloader hasn't created DownloadStatus object"); - } - finished = true; - return this; - } - - public DownloadRequest getDownloadRequest() { - return request; - } - - public DownloadStatus getResult() { - return result; - } - - public boolean isFinished() { - return finished; - } - - public void cancel() { - cancelled = true; - } - -} \ No newline at end of file diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java b/app/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java deleted file mode 100644 index f899c211f..000000000 --- a/app/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java +++ /dev/null @@ -1,66 +0,0 @@ -package de.danoeh.antennapod.core.util; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.os.Build; -import android.os.StatFs; -import android.util.Log; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.PodcastApp; -import de.danoeh.antennapod.activity.StorageErrorActivity; -import de.danoeh.antennapod.core.preferences.UserPreferences; - -import java.io.File; - -/** Utility functions for handling storage errors */ -public class StorageUtils { - private static final String TAG = "StorageUtils"; - - public static boolean storageAvailable(Context context) { - File dir = UserPreferences.getDataFolder(context, null); - if (dir != null) { - return dir.exists() && dir.canRead() && dir.canWrite(); - } else { - if (BuildConfig.DEBUG) - Log.d(TAG, "Storage not available: data folder is null"); - return false; - } - } - - /** - * Checks if external storage is available. If external storage isn't - * available, the current activity is finsished an an error activity is - * launched. - * - * @param activity - * the activity which would be finished if no storage is - * available - * @return true if external storage is available - */ - public static boolean checkStorageAvailability(Activity activity) { - boolean storageAvailable = storageAvailable(activity); - if (!storageAvailable) { - activity.finish(); - activity.startActivity(new Intent(activity, - StorageErrorActivity.class)); - } - return storageAvailable; - } - - /** Get the number of free bytes that are available on the external storage. */ - public static long getFreeSpaceAvailable() { - StatFs stat = new StatFs(UserPreferences.getDataFolder( - PodcastApp.getInstance(), null).getAbsolutePath()); - long availableBlocks; - long blockSize; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - availableBlocks = stat.getAvailableBlocksLong(); - blockSize = stat.getBlockSizeLong(); - } else { - availableBlocks = stat.getAvailableBlocks(); - blockSize = stat.getBlockSize(); - } - return availableBlocks * blockSize; - } -} diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java b/app/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java deleted file mode 100644 index 72d73138d..000000000 --- a/app/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.danoeh.antennapod.core.util; - -import android.util.Log; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.preferences.UserPreferences; - -public class ThemeUtils { - private static final String TAG = "ThemeUtils"; - - public static int getSelectionBackgroundColor() { - switch (UserPreferences.getTheme()) { - case R.style.Theme_AntennaPod_Dark: - return R.color.selection_background_color_dark; - case R.style.Theme_AntennaPod_Light: - return R.color.selection_background_color_light; - default: - Log.e(TAG, - "getSelectionBackgroundColor could not match the current theme to any color!"); - return R.color.selection_background_color_light; - } - } -} diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemDialog.java index e62daa08b..8cdddc121 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/FeedItemDialog.java @@ -42,7 +42,7 @@ import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.QueueAccess; import de.danoeh.antennapod.core.util.ShownotesProvider; -import de.danoeh.antennapod.core.util.menuhandler.FeedItemMenuHandler; +import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; /** * Shows information about a specific FeedItem and provides actions like playing, downloading, etc. diff --git a/app/src/main/java/de/danoeh/antennapod/core/dialog/TimeDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/TimeDialog.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/dialog/TimeDialog.java rename to app/src/main/java/de/danoeh/antennapod/dialog/TimeDialog.java index a95e8c6c5..6561d501e 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/dialog/TimeDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/TimeDialog.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.core.dialog; +package de.danoeh.antennapod.dialog; import android.app.Dialog; import android.content.Context; @@ -10,7 +10,7 @@ import android.view.View; import android.view.Window; import android.view.inputmethod.InputMethodManager; import android.widget.*; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.R; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index b16e4f930..9eaeb56dd 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -48,9 +48,9 @@ import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.QueueAccess; -import de.danoeh.antennapod.core.util.menuhandler.FeedMenuHandler; -import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.menuhandler.FeedMenuHandler; +import de.danoeh.antennapod.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.menuhandler.NavDrawerActivity; /** * Displays a list of FeedItems. diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java index 4f37f4613..d126f2980 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java @@ -33,8 +33,8 @@ import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.QueueAccess; -import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import java.util.List; import java.util.concurrent.atomic.AtomicReference; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index 61e4ae1bb..4a07ce2b7 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -25,8 +25,8 @@ import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.QueueAccess; -import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import java.util.List; import java.util.concurrent.atomic.AtomicReference; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index c1191d933..3192a84de 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -37,8 +37,8 @@ import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.QueueAccess; -import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.menuhandler.NavDrawerActivity; /** * Shows all items in the queue diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java index 23cc1d0b8..c16ba426e 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java @@ -20,8 +20,8 @@ import de.danoeh.antennapod.core.feed.*; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.FeedSearcher; import de.danoeh.antennapod.core.util.QueueAccess; -import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java index 14b3a9c40..15a0b55b1 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java @@ -18,8 +18,8 @@ import de.danoeh.antennapod.adapter.gpodnet.PodcastListAdapter; import de.danoeh.antennapod.core.gpoddernet.GpodnetService; import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast; -import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import java.util.List; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java index b099953a8..635842196 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java @@ -13,8 +13,8 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.gpoddernet.GpodnetService; import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast; -import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.menuhandler.NavDrawerActivity; /** * Performs a search on the gpodder.net directory and displays the results. diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java index 819a28c2d..24e0e4caa 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java @@ -21,8 +21,8 @@ import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.gpoddernet.GpodnetService; import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetTag; -import de.danoeh.antennapod.core.util.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.core.util.menuhandler.NavDrawerActivity; +import de.danoeh.antennapod.menuhandler.MenuItemUtils; +import de.danoeh.antennapod.menuhandler.NavDrawerActivity; public class TagListFragment extends ListFragment { private static final String TAG = "TagListFragment"; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedItemMenuHandler.java rename to app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index f85ac412d..8ccbdafc6 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -1,10 +1,10 @@ -package de.danoeh.antennapod.core.util.menuhandler; +package de.danoeh.antennapod.menuhandler; import android.content.Context; import android.content.Intent; import android.net.Uri; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.service.playback.PlaybackService; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedMenuHandler.java rename to app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java index 757cc5f56..62ae28820 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/FeedMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.core.util.menuhandler; +package de.danoeh.antennapod.menuhandler; import android.content.Context; import android.content.Intent; @@ -7,7 +7,7 @@ import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.service.download.DownloadService; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/MenuItemUtils.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java similarity index 92% rename from app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/MenuItemUtils.java rename to app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java index 4258c4d22..c4a96ac3f 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/MenuItemUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java @@ -1,11 +1,11 @@ -package de.danoeh.antennapod.core.util.menuhandler; +package de.danoeh.antennapod.menuhandler; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; -import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.R; /** * Utilities for menu items diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/NavDrawerActivity.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/NavDrawerActivity.java similarity index 74% rename from app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/NavDrawerActivity.java rename to app/src/main/java/de/danoeh/antennapod/menuhandler/NavDrawerActivity.java index 61bf9960f..6ceaaada4 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/menuhandler/NavDrawerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/NavDrawerActivity.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.core.util.menuhandler; +package de.danoeh.antennapod.menuhandler; /** * Defines useful methods for activities that have a navigation drawer diff --git a/app/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java b/app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java similarity index 66% rename from app/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java rename to app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java index 3dcfecdbd..7ab386edf 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java +++ b/app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.core.receiver; +package de.danoeh.antennapod.receiver; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; @@ -8,19 +8,18 @@ import android.util.Log; import org.apache.commons.lang3.StringUtils; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.core.service.playback.PlayerWidgetService; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.service.playback.PlaybackService; +import de.danoeh.antennapod.service.PlayerWidgetService; public class PlayerWidget extends AppWidgetProvider { private static final String TAG = "PlayerWidget"; - public static final String FORCE_WIDGET_UPDATE = "de.danoeh.antennapod.FORCE_WIDGET_UPDATE"; - public static final String STOP_WIDGET_UPDATE = "de.danoeh.antennapod.STOP_WIDGET_UPDATE"; - @Override + @Override public void onReceive(Context context, Intent intent) { - if (StringUtils.equals(intent.getAction(), FORCE_WIDGET_UPDATE)) { + if (StringUtils.equals(intent.getAction(), PlaybackService.FORCE_WIDGET_UPDATE)) { startUpdate(context); - } else if (StringUtils.equals(intent.getAction(), STOP_WIDGET_UPDATE)) { + } else if (StringUtils.equals(intent.getAction(), PlaybackService.STOP_WIDGET_UPDATE)) { stopUpdate(context); } diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerWidgetService.java b/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerWidgetService.java rename to app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java index 495e2c0f2..514cbb74e 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerWidgetService.java +++ b/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.core.service.playback; +package de.danoeh.antennapod.service; import android.app.PendingIntent; import android.app.Service; @@ -12,10 +12,12 @@ import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.RemoteViews; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.receiver.MediaButtonReceiver; -import de.danoeh.antennapod.core.receiver.PlayerWidget; +import de.danoeh.antennapod.receiver.PlayerWidget; +import de.danoeh.antennapod.core.service.playback.PlaybackService; +import de.danoeh.antennapod.core.service.playback.PlayerStatus; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.playback.Playable; diff --git a/core/.gitignore b/core/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/core/.gitignore @@ -0,0 +1 @@ +/build diff --git a/core/build.gradle b/core/build.gradle new file mode 100644 index 000000000..132d68084 --- /dev/null +++ b/core/build.gradle @@ -0,0 +1,43 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 20 + buildToolsVersion "20.0.0" + + defaultConfig { + applicationId "de.danoeh.antennapod.core" + minSdkVersion 10 + targetSdkVersion 20 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + runProguard false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + compile 'com.android.support:appcompat-v7:20.0.0' + compile 'com.android.support:support-v4:20.0.0' + 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 'com.jayway.android.robotium:robotium-solo:5.2.1' + compile ("com.doomonafireball.betterpickers:library:1.5.2") { + exclude group: 'com.android.support', module: 'support-v4' + } + compile 'org.jsoup:jsoup:1.7.3' + compile 'com.squareup.picasso:picasso:2.3.4' + compile 'com.squareup.okhttp:okhttp:2.0.0' + compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' + compile 'com.squareup.okio:okio:1.0.0' +} diff --git a/core/proguard-rules.pro b/core/proguard-rules.pro new file mode 100644 index 000000000..41a9efda7 --- /dev/null +++ b/core/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/daniel/bin/android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/core/src/androidTest/java/de/danoeh/antennapod/core/ApplicationTest.java b/core/src/androidTest/java/de/danoeh/antennapod/core/ApplicationTest.java new file mode 100644 index 000000000..894bcfa63 --- /dev/null +++ b/core/src/androidTest/java/de/danoeh/antennapod/core/ApplicationTest.java @@ -0,0 +1,13 @@ +package de.danoeh.antennapod.core; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml new file mode 100644 index 000000000..db67b8003 --- /dev/null +++ b/core/src/main/AndroidManifest.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/app/src/main/aidl/com/aocate/presto/service/IDeathCallback_0_8.aidl b/core/src/main/aidl/com/aocate/presto/service/IDeathCallback_0_8.aidl similarity index 100% rename from app/src/main/aidl/com/aocate/presto/service/IDeathCallback_0_8.aidl rename to core/src/main/aidl/com/aocate/presto/service/IDeathCallback_0_8.aidl diff --git a/app/src/main/aidl/com/aocate/presto/service/IOnBufferingUpdateListenerCallback_0_8.aidl b/core/src/main/aidl/com/aocate/presto/service/IOnBufferingUpdateListenerCallback_0_8.aidl similarity index 100% rename from app/src/main/aidl/com/aocate/presto/service/IOnBufferingUpdateListenerCallback_0_8.aidl rename to core/src/main/aidl/com/aocate/presto/service/IOnBufferingUpdateListenerCallback_0_8.aidl diff --git a/app/src/main/aidl/com/aocate/presto/service/IOnCompletionListenerCallback_0_8.aidl b/core/src/main/aidl/com/aocate/presto/service/IOnCompletionListenerCallback_0_8.aidl similarity index 100% rename from app/src/main/aidl/com/aocate/presto/service/IOnCompletionListenerCallback_0_8.aidl rename to core/src/main/aidl/com/aocate/presto/service/IOnCompletionListenerCallback_0_8.aidl diff --git a/app/src/main/aidl/com/aocate/presto/service/IOnErrorListenerCallback_0_8.aidl b/core/src/main/aidl/com/aocate/presto/service/IOnErrorListenerCallback_0_8.aidl similarity index 100% rename from app/src/main/aidl/com/aocate/presto/service/IOnErrorListenerCallback_0_8.aidl rename to core/src/main/aidl/com/aocate/presto/service/IOnErrorListenerCallback_0_8.aidl diff --git a/app/src/main/aidl/com/aocate/presto/service/IOnInfoListenerCallback_0_8.aidl b/core/src/main/aidl/com/aocate/presto/service/IOnInfoListenerCallback_0_8.aidl similarity index 100% rename from app/src/main/aidl/com/aocate/presto/service/IOnInfoListenerCallback_0_8.aidl rename to core/src/main/aidl/com/aocate/presto/service/IOnInfoListenerCallback_0_8.aidl diff --git a/app/src/main/aidl/com/aocate/presto/service/IOnPitchAdjustmentAvailableChangedListenerCallback_0_8.aidl b/core/src/main/aidl/com/aocate/presto/service/IOnPitchAdjustmentAvailableChangedListenerCallback_0_8.aidl similarity index 100% rename from app/src/main/aidl/com/aocate/presto/service/IOnPitchAdjustmentAvailableChangedListenerCallback_0_8.aidl rename to core/src/main/aidl/com/aocate/presto/service/IOnPitchAdjustmentAvailableChangedListenerCallback_0_8.aidl diff --git a/app/src/main/aidl/com/aocate/presto/service/IOnPreparedListenerCallback_0_8.aidl b/core/src/main/aidl/com/aocate/presto/service/IOnPreparedListenerCallback_0_8.aidl similarity index 100% rename from app/src/main/aidl/com/aocate/presto/service/IOnPreparedListenerCallback_0_8.aidl rename to core/src/main/aidl/com/aocate/presto/service/IOnPreparedListenerCallback_0_8.aidl diff --git a/app/src/main/aidl/com/aocate/presto/service/IOnSeekCompleteListenerCallback_0_8.aidl b/core/src/main/aidl/com/aocate/presto/service/IOnSeekCompleteListenerCallback_0_8.aidl similarity index 100% rename from app/src/main/aidl/com/aocate/presto/service/IOnSeekCompleteListenerCallback_0_8.aidl rename to core/src/main/aidl/com/aocate/presto/service/IOnSeekCompleteListenerCallback_0_8.aidl diff --git a/app/src/main/aidl/com/aocate/presto/service/IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8.aidl b/core/src/main/aidl/com/aocate/presto/service/IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8.aidl similarity index 100% rename from app/src/main/aidl/com/aocate/presto/service/IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8.aidl rename to core/src/main/aidl/com/aocate/presto/service/IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8.aidl diff --git a/app/src/main/aidl/com/aocate/presto/service/IPlayMedia_0_8.aidl b/core/src/main/aidl/com/aocate/presto/service/IPlayMedia_0_8.aidl similarity index 100% rename from app/src/main/aidl/com/aocate/presto/service/IPlayMedia_0_8.aidl rename to core/src/main/aidl/com/aocate/presto/service/IPlayMedia_0_8.aidl diff --git a/app/src/main/java/com/aocate/media/AndroidMediaPlayer.java b/core/src/main/java/com/aocate/media/AndroidMediaPlayer.java similarity index 100% rename from app/src/main/java/com/aocate/media/AndroidMediaPlayer.java rename to core/src/main/java/com/aocate/media/AndroidMediaPlayer.java diff --git a/core/src/main/java/com/aocate/media/MediaPlayer.java b/core/src/main/java/com/aocate/media/MediaPlayer.java new file mode 100644 index 000000000..c73c5219e --- /dev/null +++ b/core/src/main/java/com/aocate/media/MediaPlayer.java @@ -0,0 +1,1278 @@ +// Copyright 2011, Aocate, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.aocate.media; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.media.AudioManager; +import android.net.Uri; +import android.os.Handler; +import android.os.Handler.Callback; +import android.os.IBinder; +import android.os.Message; +import android.util.Log; + +import java.io.IOException; +import java.util.List; +import java.util.concurrent.locks.ReentrantLock; + +import de.danoeh.antennapod.core.BuildConfig; + +public class MediaPlayer { + public interface OnBufferingUpdateListener { + public abstract void onBufferingUpdate(MediaPlayer arg0, int percent); + } + + public interface OnCompletionListener { + public abstract void onCompletion(MediaPlayer arg0); + } + + public interface OnErrorListener { + public abstract boolean onError(MediaPlayer arg0, int what, int extra); + } + + public interface OnInfoListener { + public abstract boolean onInfo(MediaPlayer arg0, int what, int extra); + } + + public interface OnPitchAdjustmentAvailableChangedListener { + /** + * @param arg0 The owning media player + * @param pitchAdjustmentAvailable True if pitch adjustment is available, false if not + */ + public abstract void onPitchAdjustmentAvailableChanged( + MediaPlayer arg0, boolean pitchAdjustmentAvailable); + } + + public interface OnPreparedListener { + public abstract void onPrepared(MediaPlayer arg0); + } + + public interface OnSeekCompleteListener { + public abstract void onSeekComplete(MediaPlayer arg0); + } + + public interface OnSpeedAdjustmentAvailableChangedListener { + /** + * @param arg0 The owning media player + * @param speedAdjustmentAvailable True if speed adjustment is available, false if not + */ + public abstract void onSpeedAdjustmentAvailableChanged( + MediaPlayer arg0, boolean speedAdjustmentAvailable); + } + + public enum State { + IDLE, INITIALIZED, PREPARED, STARTED, PAUSED, STOPPED, PREPARING, PLAYBACK_COMPLETED, END, ERROR + } + + private static Uri SPEED_ADJUSTMENT_MARKET_URI = Uri + .parse("market://details?id=com.aocate.presto"); + + private static Intent prestoMarketIntent = null; + + public static final int MEDIA_ERROR_SERVER_DIED = android.media.MediaPlayer.MEDIA_ERROR_SERVER_DIED; + public static final int MEDIA_ERROR_UNKNOWN = android.media.MediaPlayer.MEDIA_ERROR_UNKNOWN; + public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = android.media.MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK; + + /** + * Indicates whether the specified action can be used as an intent. This + * method queries the package manager for installed packages that can + * respond to an intent with the specified action. If no suitable package is + * found, this method returns false. + * + * @param context The application's environment. + * @param action The Intent action to check for availability. + * @return True if an Intent with the specified action can be sent and + * responded to, false otherwise. + */ + public static boolean isIntentAvailable(Context context, String action) { + final PackageManager packageManager = context.getPackageManager(); + final Intent intent = new Intent(action); + List list = packageManager.queryIntentServices(intent, + PackageManager.MATCH_DEFAULT_ONLY); + return list.size() > 0; + } + + /** + * Indicates whether the Presto library is installed + * + * @param context The context to use to query the package manager. + * @return True if the Presto library is installed, false if not. + */ + public static boolean isPrestoLibraryInstalled(Context context) { + return isIntentAvailable(context, ServiceBackedMediaPlayer.INTENT_NAME); + } + + /** + * Return an Intent that opens the Android Market page for the speed + * alteration library + * + * @return The Intent for the Presto library on the Android Market + */ + public static Intent getPrestoMarketIntent() { + if (prestoMarketIntent == null) { + prestoMarketIntent = new Intent(Intent.ACTION_VIEW, + SPEED_ADJUSTMENT_MARKET_URI); + } + return prestoMarketIntent; + } + + /** + * Open the Android Market page for the Presto library + * + * @param context The context from which to open the Android Market page + */ + public static void openPrestoMarketIntent(Context context) { + context.startActivity(getPrestoMarketIntent()); + } + + private static final String MP_TAG = "AocateReplacementMediaPlayer"; + + private static final double PITCH_STEP_CONSTANT = 1.0594630943593; + + private AndroidMediaPlayer amp = null; + // This is whether speed adjustment should be enabled (by the Service) + // To avoid the Service entirely, set useService to false + protected boolean enableSpeedAdjustment = true; + private int lastKnownPosition = 0; + // In some cases, we're going to have to replace the + // android.media.MediaPlayer on the fly, and we don't want to touch the + // wrong media player, so lock it way too much. + ReentrantLock lock = new ReentrantLock(); + private int mAudioStreamType = AudioManager.STREAM_MUSIC; + private Context mContext; + private boolean mIsLooping = false; + private float mLeftVolume = 1f; + private float mPitchStepsAdjustment = 0f; + private float mRightVolume = 1f; + private float mSpeedMultiplier = 1f; + private int mWakeMode = 0; + MediaPlayerImpl mpi = null; + protected boolean pitchAdjustmentAvailable = false; + private ServiceBackedMediaPlayer sbmp = null; + protected boolean speedAdjustmentAvailable = false; + + private Handler mServiceDisconnectedHandler = null; + + // Some parts of state cannot be found by calling MediaPlayerImpl functions, + // so store our own state. This also helps copy state when changing + // implementations + State state = State.INITIALIZED; + String stringDataSource = null; + Uri uriDataSource = null; + private boolean useService = false; + + // Naming Convention for Listeners + // Most listeners can both be set by clients and called by MediaPlayImpls + // There are a few that have to do things in this class as well as calling + // the function. In all cases, onX is what is called by MediaPlayerImpl + // If there is work to be done in this class, then the listener that is + // set by setX is X (with the first letter lowercase). + OnBufferingUpdateListener onBufferingUpdateListener = null; + OnCompletionListener onCompletionListener = null; + OnErrorListener onErrorListener = null; + OnInfoListener onInfoListener = null; + + // Special case. Pitch adjustment ceases to be available when we switch + // to the android.media.MediaPlayer (though it is not guaranteed to be + // available when using the ServiceBackedMediaPlayer) + OnPitchAdjustmentAvailableChangedListener onPitchAdjustmentAvailableChangedListener = new OnPitchAdjustmentAvailableChangedListener() { + public void onPitchAdjustmentAvailableChanged(MediaPlayer arg0, + boolean pitchAdjustmentAvailable) { + lock.lock(); + try { + Log + .d( + MP_TAG, + "onPitchAdjustmentAvailableChangedListener.onPitchAdjustmentAvailableChanged being called"); + if (MediaPlayer.this.pitchAdjustmentAvailable != pitchAdjustmentAvailable) { + Log.d(MP_TAG, "Pitch adjustment state has changed from " + + MediaPlayer.this.pitchAdjustmentAvailable + + " to " + pitchAdjustmentAvailable); + MediaPlayer.this.pitchAdjustmentAvailable = pitchAdjustmentAvailable; + if (MediaPlayer.this.pitchAdjustmentAvailableChangedListener != null) { + MediaPlayer.this.pitchAdjustmentAvailableChangedListener + .onPitchAdjustmentAvailableChanged(arg0, + pitchAdjustmentAvailable); + } + } + } finally { + lock.unlock(); + } + } + }; + OnPitchAdjustmentAvailableChangedListener pitchAdjustmentAvailableChangedListener = null; + + MediaPlayer.OnPreparedListener onPreparedListener = new MediaPlayer.OnPreparedListener() { + public void onPrepared(MediaPlayer arg0) { + Log.d(MP_TAG, "onPreparedListener 242 setting state to PREPARED"); + MediaPlayer.this.state = State.PREPARED; + if (MediaPlayer.this.preparedListener != null) { + Log.d(MP_TAG, "Calling preparedListener"); + MediaPlayer.this.preparedListener.onPrepared(arg0); + } + Log.d(MP_TAG, "Wrap up onPreparedListener"); + } + }; + + OnPreparedListener preparedListener = null; + OnSeekCompleteListener onSeekCompleteListener = null; + + // Special case. Speed adjustment ceases to be available when we switch + // to the android.media.MediaPlayer (though it is not guaranteed to be + // available when using the ServiceBackedMediaPlayer) + OnSpeedAdjustmentAvailableChangedListener onSpeedAdjustmentAvailableChangedListener = new OnSpeedAdjustmentAvailableChangedListener() { + public void onSpeedAdjustmentAvailableChanged(MediaPlayer arg0, + boolean speedAdjustmentAvailable) { + lock.lock(); + try { + Log + .d( + MP_TAG, + "onSpeedAdjustmentAvailableChangedListener.onSpeedAdjustmentAvailableChanged being called"); + if (MediaPlayer.this.speedAdjustmentAvailable != speedAdjustmentAvailable) { + Log.d(MP_TAG, "Speed adjustment state has changed from " + + MediaPlayer.this.speedAdjustmentAvailable + + " to " + speedAdjustmentAvailable); + MediaPlayer.this.speedAdjustmentAvailable = speedAdjustmentAvailable; + if (MediaPlayer.this.speedAdjustmentAvailableChangedListener != null) { + MediaPlayer.this.speedAdjustmentAvailableChangedListener + .onSpeedAdjustmentAvailableChanged(arg0, + speedAdjustmentAvailable); + } + } + } finally { + lock.unlock(); + } + } + }; + OnSpeedAdjustmentAvailableChangedListener speedAdjustmentAvailableChangedListener = null; + + private int speedAdjustmentAlgorithm = SpeedAdjustmentAlgorithm.SONIC; + + public MediaPlayer(final Context context) { + this(context, true); + } + + public MediaPlayer(final Context context, boolean useService) { + this.mContext = context; + this.useService = useService; + + // So here's the major problem + // Sometimes the service won't exist or won't be connected, + // so start with an android.media.MediaPlayer, and when + // the service is connected, use that from then on + this.mpi = this.amp = new AndroidMediaPlayer(this, context); + + // setupMpi will go get the Service, if it can, then bring that + // implementation into sync + Log.d(MP_TAG, "setupMpi"); + setupMpi(context); + } + + private boolean invalidServiceConnectionConfiguration() { + if (!(this.mpi instanceof ServiceBackedMediaPlayer)) { + if (this.useService && isPrestoLibraryInstalled()) { + // In this case, the Presto library has been installed + // or something while playing sound + // We could be using the service, but we're not + Log.d(MP_TAG, "We could be using the service, but we're not 316"); + return true; + } + // If useService is false, then we shouldn't be using the SBMP + // If the Presto library isn't installed, ditto + Log.d(MP_TAG, "this.mpi is not a ServiceBackedMediaPlayer, but we couldn't use it anyway 321"); + return false; + } else { + if (BuildConfig.DEBUG && !(this.mpi instanceof ServiceBackedMediaPlayer)) + throw new AssertionError(); + if (this.useService && isPrestoLibraryInstalled()) { + // We should be using the service, and we are. Great! + Log.d(MP_TAG, "We could be using a ServiceBackedMediaPlayer and we are 327"); + return false; + } + // We're trying to use the service when we shouldn't, + // that's an invalid configuration + Log.d(MP_TAG, "We're trying to use a ServiceBackedMediaPlayer but we shouldn't be 332"); + return true; + } + } + + private void setupMpi(final Context context) { + lock.lock(); + try { + Log.d(MP_TAG, "setupMpi 336"); + // Check if the client wants to use the service at all, + // then if we're already using the right kind of media player + if (this.useService && isPrestoLibraryInstalled()) { + if ((this.mpi != null) + && (this.mpi instanceof ServiceBackedMediaPlayer)) { + Log.d(MP_TAG, "Already using ServiceBackedMediaPlayer"); + return; + } + if (this.sbmp == null) { + Log.d(MP_TAG, "Instantiating new ServiceBackedMediaPlayer 346"); + this.sbmp = new ServiceBackedMediaPlayer(this, context, + new ServiceConnection() { + public void onServiceConnected( + ComponentName className, + final IBinder service) { + Thread t = new Thread(new Runnable() { + public void run() { + // This lock probably isn't granular + // enough + MediaPlayer.this.lock.lock(); + Log.d(MP_TAG, + "onServiceConnected 257"); + try { + MediaPlayer.this + .switchMediaPlayerImpl( + MediaPlayer.this.amp, + MediaPlayer.this.sbmp); + Log.d(MP_TAG, "End onServiceConnected 362"); + } finally { + MediaPlayer.this.lock.unlock(); + } + } + }); + t.start(); + } + + public void onServiceDisconnected( + ComponentName className) { + MediaPlayer.this.lock.lock(); + try { + // Can't get any more useful information + // out of sbmp + if (MediaPlayer.this.sbmp != null) { + MediaPlayer.this.sbmp.release(); + } + // Unlike most other cases, sbmp gets set + // to null since there's nothing useful + // backing it now + MediaPlayer.this.sbmp = null; + + if (mServiceDisconnectedHandler == null) { + mServiceDisconnectedHandler = new Handler(new Callback() { + public boolean handleMessage(Message msg) { + // switchMediaPlayerImpl won't try to + // clone anything from null + lock.lock(); + try { + if (MediaPlayer.this.amp == null) { + // This should never be in this state + MediaPlayer.this.amp = new AndroidMediaPlayer( + MediaPlayer.this, + MediaPlayer.this.mContext); + } + // Use sbmp instead of null in case by some miracle it's + // been restored in the meantime + MediaPlayer.this.switchMediaPlayerImpl( + MediaPlayer.this.sbmp, + MediaPlayer.this.amp); + return true; + } finally { + lock.unlock(); + } + } + }); + } + + // This code needs to execute on the + // original thread to instantiate + // the new object in the right place + mServiceDisconnectedHandler + .sendMessage( + mServiceDisconnectedHandler + .obtainMessage()); + // Note that we do NOT want to set + // useService. useService is about + // what the user wants, not what they + // get + } finally { + MediaPlayer.this.lock.unlock(); + } + } + } + ); + } + switchMediaPlayerImpl(this.amp, this.sbmp); + } else { + if ((this.mpi != null) + && (this.mpi instanceof AndroidMediaPlayer)) { + Log.d(MP_TAG, "Already using AndroidMediaPlayer"); + return; + } + if (this.amp == null) { + Log.d(MP_TAG, "Instantiating new AndroidMediaPlayer (this should be impossible)"); + this.amp = new AndroidMediaPlayer(this, context); + } + switchMediaPlayerImpl(this.sbmp, this.amp); + } + } finally { + lock.unlock(); + } + } + + private void switchMediaPlayerImpl(MediaPlayerImpl from, MediaPlayerImpl to) { + lock.lock(); + try { + Log.d(MP_TAG, "switchMediaPlayerImpl"); + if ((from == to) + // Same object, nothing to synchronize + || (to == null) + // Nothing to copy to (maybe this should throw an error?) + || ((to instanceof ServiceBackedMediaPlayer) && !((ServiceBackedMediaPlayer) to).isConnected()) + // ServiceBackedMediaPlayer hasn't yet connected, onServiceConnected will take care of the transition + || (MediaPlayer.this.state == State.END)) { + // State.END is after a release(), no further functions should + // be called on this class and from is likely to have problems + // retrieving state that won't be used anyway + return; + } + // Extract all that we can from the existing implementation + // and copy it to the new implementation + + Log.d(MP_TAG, "switchMediaPlayerImpl(), current state is " + + this.state.toString()); + + to.reset(); + + // Do this first so we don't have to prepare the same + // data file twice + to.setEnableSpeedAdjustment(MediaPlayer.this.enableSpeedAdjustment); + + // This is a reasonable place to set all of these, + // none of them require prepare() or the like first + to.setAudioStreamType(this.mAudioStreamType); + to.setSpeedAdjustmentAlgorithm(this.speedAdjustmentAlgorithm); + to.setLooping(this.mIsLooping); + to.setPitchStepsAdjustment(this.mPitchStepsAdjustment); + Log.d(MP_TAG, "Setting playback speed to " + this.mSpeedMultiplier); + to.setPlaybackSpeed(this.mSpeedMultiplier); + to.setVolume(MediaPlayer.this.mLeftVolume, + MediaPlayer.this.mRightVolume); + to.setWakeMode(this.mContext, this.mWakeMode); + + Log.d(MP_TAG, "asserting at least one data source is null"); + assert ((MediaPlayer.this.stringDataSource == null) || (MediaPlayer.this.uriDataSource == null)); + + if (uriDataSource != null) { + Log.d(MP_TAG, "switchMediaPlayerImpl(): uriDataSource != null"); + try { + to.setDataSource(this.mContext, uriDataSource); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + if (stringDataSource != null) { + Log.d(MP_TAG, + "switchMediaPlayerImpl(): stringDataSource != null"); + try { + to.setDataSource(stringDataSource); + } catch (IllegalArgumentException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + if ((this.state == State.PREPARED) + || (this.state == State.PREPARING) + || (this.state == State.PAUSED) + || (this.state == State.STOPPED) + || (this.state == State.STARTED) + || (this.state == State.PLAYBACK_COMPLETED)) { + Log.d(MP_TAG, "switchMediaPlayerImpl(): prepare and seek"); + // Use prepare here instead of prepareAsync so that + // we wait for it to be ready before we try to use it + try { + to.muteNextOnPrepare(); + to.prepare(); + } catch (IllegalStateException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + int seekPos = 0; + if (from != null) { + seekPos = from.getCurrentPosition(); + } else if (this.lastKnownPosition < to.getDuration()) { + // This can happen if the Service unexpectedly + // disconnected. Because it would result in too much + // information being passed around, we don't constantly + // poll for the lastKnownPosition, but we'll save it + // when getCurrentPosition is called + seekPos = this.lastKnownPosition; + } + to.muteNextSeek(); + to.seekTo(seekPos); + } + if ((from != null) + && from.isPlaying()) { + from.pause(); + } + if ((this.state == State.STARTED) + || (this.state == State.PAUSED) + || (this.state == State.STOPPED)) { + Log.d(MP_TAG, "switchMediaPlayerImpl(): start"); + if (to != null) { + to.start(); + } + } + + if (this.state == State.PAUSED) { + Log.d(MP_TAG, "switchMediaPlayerImpl(): paused"); + if (to != null) { + to.pause(); + } + } else if (this.state == State.STOPPED) { + Log.d(MP_TAG, "switchMediaPlayerImpl(): stopped"); + if (to != null) { + to.stop(); + } + } + + this.mpi = to; + + // Cheating here by relying on the side effect in + // on(Pitch|Speed)AdjustmentAvailableChanged + if ((to.canSetPitch() != this.pitchAdjustmentAvailable) + && (this.onPitchAdjustmentAvailableChangedListener != null)) { + this.onPitchAdjustmentAvailableChangedListener + .onPitchAdjustmentAvailableChanged(this, to + .canSetPitch()); + } + if ((to.canSetSpeed() != this.speedAdjustmentAvailable) + && (this.onSpeedAdjustmentAvailableChangedListener != null)) { + this.onSpeedAdjustmentAvailableChangedListener + .onSpeedAdjustmentAvailableChanged(this, to + .canSetSpeed()); + } + Log.d(MP_TAG, "switchMediaPlayerImpl() 625 " + this.state.toString()); + } finally { + lock.unlock(); + } + } + + /** + * Returns true if pitch can be changed at this moment + * + * @return True if pitch can be changed + */ + public boolean canSetPitch() { + lock.lock(); + try { + return this.mpi.canSetPitch(); + } finally { + lock.unlock(); + } + } + + /** + * Returns true if speed can be changed at this moment + * + * @return True if speed can be changed + */ + public boolean canSetSpeed() { + lock.lock(); + try { + return this.mpi.canSetSpeed(); + } finally { + lock.unlock(); + } + } + + protected void finalize() throws Throwable { + lock.lock(); + try { + Log.d(MP_TAG, "finalize() 626"); + this.release(); + } finally { + lock.unlock(); + } + } + + /** + * Returns the number of steps (in a musical scale) by which playback is + * currently shifted. When greater than zero, pitch is shifted up. When less + * than zero, pitch is shifted down. + * + * @return The number of steps pitch is currently shifted by + */ + public float getCurrentPitchStepsAdjustment() { + lock.lock(); + try { + return this.mpi.getCurrentPitchStepsAdjustment(); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.getCurrentPosition() + * Accurate only to frame size of encoded data (26 ms for MP3s) + * + * @return Current position (in milliseconds) + */ + public int getCurrentPosition() { + lock.lock(); + try { + return (this.lastKnownPosition = this.mpi.getCurrentPosition()); + } finally { + lock.unlock(); + } + } + + /** + * Returns the current speed multiplier. Defaults to 1.0 (normal speed) + * + * @return The current speed multiplier + */ + public float getCurrentSpeedMultiplier() { + lock.lock(); + try { + return this.mpi.getCurrentSpeedMultiplier(); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.getDuration() + * + * @return Length of the track (in milliseconds) + */ + public int getDuration() { + lock.lock(); + try { + return this.mpi.getDuration(); + } finally { + lock.unlock(); + } + } + + /** + * Get the maximum value that can be passed to setPlaybackSpeed + * + * @return The maximum speed multiplier + */ + public float getMaxSpeedMultiplier() { + lock.lock(); + try { + return this.mpi.getMaxSpeedMultiplier(); + } finally { + lock.unlock(); + } + } + + /** + * Get the minimum value that can be passed to setPlaybackSpeed + * + * @return The minimum speed multiplier + */ + public float getMinSpeedMultiplier() { + lock.lock(); + try { + return this.mpi.getMinSpeedMultiplier(); + } finally { + lock.unlock(); + } + } + + /** + * Gets the version code of the backing service + * + * @return -1 if ServiceBackedMediaPlayer is not used, 0 if the service is not + * connected, otherwise the version code retrieved from the service + */ + public int getServiceVersionCode() { + lock.lock(); + try { + if (this.mpi instanceof ServiceBackedMediaPlayer) { + return ((ServiceBackedMediaPlayer) this.mpi).getServiceVersionCode(); + } else { + return -1; + } + } finally { + lock.unlock(); + } + } + + /** + * Gets the version name of the backing service + * + * @return null if ServiceBackedMediaPlayer is not used, empty string if + * the service is not connected, otherwise the version name retrieved from + * the service + */ + public String getServiceVersionName() { + lock.lock(); + try { + if (this.mpi instanceof ServiceBackedMediaPlayer) { + return ((ServiceBackedMediaPlayer) this.mpi).getServiceVersionName(); + } else { + return null; + } + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.isLooping() + * + * @return True if the track is looping + */ + public boolean isLooping() { + lock.lock(); + try { + return this.mpi.isLooping(); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.isPlaying() + * + * @return True if the track is playing + */ + public boolean isPlaying() { + lock.lock(); + try { + return this.mpi.isPlaying(); + } finally { + lock.unlock(); + } + } + + /** + * Returns true if this MediaPlayer has access to the Presto + * library + * + * @return True if the Presto library is installed + */ + public boolean isPrestoLibraryInstalled() { + if ((this.mpi == null) || (this.mpi.mContext == null)) { + return false; + } + return isPrestoLibraryInstalled(this.mpi.mContext); + } + + /** + * Open the Android Market page in the same context as this MediaPlayer + */ + public void openPrestoMarketIntent() { + if ((this.mpi != null) && (this.mpi.mContext != null)) { + openPrestoMarketIntent(this.mpi.mContext); + } + } + + /** + * Functions identically to android.media.MediaPlayer.pause() Pauses the + * track + */ + public void pause() { + lock.lock(); + try { + if (invalidServiceConnectionConfiguration()) { + setupMpi(this.mpi.mContext); + } + this.state = State.PAUSED; + this.mpi.pause(); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.prepare() Prepares the + * track. This or prepareAsync must be called before start() + */ + public void prepare() throws IllegalStateException, IOException { + lock.lock(); + try { + Log.d(MP_TAG, "prepare() 746 using " + ((this.mpi == null) ? "null (this shouldn't happen)" : this.mpi.getClass().toString()) + " state " + this.state.toString()); + Log.d(MP_TAG, "onPreparedListener is: " + ((this.onPreparedListener == null) ? "null" : "non-null")); + Log.d(MP_TAG, "preparedListener is: " + ((this.preparedListener == null) ? "null" : "non-null")); + if (invalidServiceConnectionConfiguration()) { + setupMpi(this.mpi.mContext); + } + this.mpi.prepare(); + this.state = State.PREPARED; + Log.d(MP_TAG, "prepare() finished 778"); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.prepareAsync() + * Prepares the track. This or prepare must be called before start() + */ + public void prepareAsync() { + lock.lock(); + try { + Log.d(MP_TAG, "prepareAsync() 779"); + if (invalidServiceConnectionConfiguration()) { + setupMpi(this.mpi.mContext); + } + this.state = State.PREPARING; + this.mpi.prepareAsync(); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.release() Releases the + * underlying resources used by the media player. + */ + public void release() { + lock.lock(); + try { + Log.d(MP_TAG, "Releasing MediaPlayer 791"); + + this.state = State.END; + if (this.amp != null) { + this.amp.release(); + } + if (this.sbmp != null) { + this.sbmp.release(); + } + + this.onBufferingUpdateListener = null; + this.onCompletionListener = null; + this.onErrorListener = null; + this.onInfoListener = null; + this.preparedListener = null; + this.onPitchAdjustmentAvailableChangedListener = null; + this.pitchAdjustmentAvailableChangedListener = null; + Log.d(MP_TAG, "Setting onSeekCompleteListener to null 871"); + this.onSeekCompleteListener = null; + this.onSpeedAdjustmentAvailableChangedListener = null; + this.speedAdjustmentAvailableChangedListener = null; + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.reset() Resets the + * track to idle state + */ + public void reset() { + lock.lock(); + try { + this.state = State.IDLE; + this.stringDataSource = null; + this.uriDataSource = null; + this.mpi.reset(); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.seekTo(int msec) Seeks + * to msec in the track + */ + public void seekTo(int msec) throws IllegalStateException { + lock.lock(); + try { + this.mpi.seekTo(msec); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.setAudioStreamType(int + * streamtype) Sets the audio stream type. + */ + public void setAudioStreamType(int streamtype) { + lock.lock(); + try { + this.mAudioStreamType = streamtype; + this.mpi.setAudioStreamType(streamtype); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.setDataSource(Context + * context, Uri uri) Sets uri as data source in the context given + */ + public void setDataSource(Context context, Uri uri) + throws IllegalArgumentException, IllegalStateException, IOException { + lock.lock(); + try { + Log.d(MP_TAG, "In setDataSource(context, " + uri.toString() + "), using " + this.mpi.getClass().toString()); + if (invalidServiceConnectionConfiguration()) { + setupMpi(this.mpi.mContext); + } + this.state = State.INITIALIZED; + this.stringDataSource = null; + this.uriDataSource = uri; + this.mpi.setDataSource(context, uri); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.setDataSource(String + * path) Sets the data source of the track to a file given. + */ + public void setDataSource(String path) throws IllegalArgumentException, + IllegalStateException, IOException { + lock.lock(); + try { + Log.d(MP_TAG, "In setDataSource(context, " + path + ")"); + if (invalidServiceConnectionConfiguration()) { + setupMpi(this.mpi.mContext); + } + this.state = State.INITIALIZED; + this.stringDataSource = path; + this.uriDataSource = null; + this.mpi.setDataSource(path); + } finally { + lock.unlock(); + } + } + + /** + * Sets whether to use speed adjustment or not. Speed adjustment on is more + * computation-intensive than with it off. + * + * @param enableSpeedAdjustment Whether speed adjustment should be supported. + */ + public void setEnableSpeedAdjustment(boolean enableSpeedAdjustment) { + lock.lock(); + try { + this.enableSpeedAdjustment = enableSpeedAdjustment; + this.mpi.setEnableSpeedAdjustment(enableSpeedAdjustment); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.setLooping(boolean + * loop) Sets the track to loop infinitely if loop is true, play once if + * loop is false + */ + public void setLooping(boolean loop) { + lock.lock(); + try { + this.mIsLooping = loop; + this.mpi.setLooping(loop); + } finally { + lock.unlock(); + } + } + + /** + * Sets the number of steps (in a musical scale) by which playback is + * currently shifted. When greater than zero, pitch is shifted up. When less + * than zero, pitch is shifted down. + * + * @param pitchSteps The number of steps by which to shift playback + */ + public void setPitchStepsAdjustment(float pitchSteps) { + lock.lock(); + try { + this.mPitchStepsAdjustment = pitchSteps; + this.mpi.setPitchStepsAdjustment(pitchSteps); + } finally { + lock.unlock(); + } + } + + /** + * Set the algorithm to use for changing the speed and pitch of audio + * See SpeedAdjustmentAlgorithm constants for more details + * + * @param algorithm The algorithm to use. + */ + public void setSpeedAdjustmentAlgorithm(int algorithm) { + lock.lock(); + try { + this.speedAdjustmentAlgorithm = algorithm; + if (this.mpi != null) { + this.mpi.setSpeedAdjustmentAlgorithm(algorithm); + } + } finally { + lock.unlock(); + } + } + + private static float getPitchStepsAdjustment(float pitch) { + return (float) (Math.log(pitch) / (2 * Math.log(PITCH_STEP_CONSTANT))); + } + + /** + * Sets the percentage by which pitch is currently shifted. When greater + * than zero, pitch is shifted up. When less than zero, pitch is shifted + * down + * + * @param f The percentage to shift pitch + */ + public void setPlaybackPitch(float pitch) { + lock.lock(); + try { + this.mPitchStepsAdjustment = getPitchStepsAdjustment(pitch); + this.mpi.setPlaybackPitch(pitch); + } finally { + lock.unlock(); + } + } + + /** + * Set playback speed. 1.0 is normal speed, 2.0 is double speed, and so on. + * Speed should never be set to 0 or below. + * + * @param f The speed multiplier to use for further playback + */ + public void setPlaybackSpeed(float f) { + lock.lock(); + try { + this.mSpeedMultiplier = f; + this.mpi.setPlaybackSpeed(f); + } finally { + lock.unlock(); + } + } + + /** + * Sets whether to use speed adjustment or not. Speed adjustment on is more + * computation-intensive than with it off. + * + * @param enableSpeedAdjustment Whether speed adjustment should be supported. + */ + public void setUseService(boolean useService) { + lock.lock(); + try { + this.useService = useService; + setupMpi(this.mpi.mContext); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.setVolume(float + * leftVolume, float rightVolume) Sets the stereo volume + */ + public void setVolume(float leftVolume, float rightVolume) { + lock.lock(); + try { + this.mLeftVolume = leftVolume; + this.mRightVolume = rightVolume; + this.mpi.setVolume(leftVolume, rightVolume); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.setWakeMode(Context + * context, int mode) Acquires a wake lock in the context given. You must + * request the appropriate permissions in your AndroidManifest.xml file. + */ + public void setWakeMode(Context context, int mode) { + lock.lock(); + try { + this.mWakeMode = mode; + this.mpi.setWakeMode(context, mode); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to + * android.media.MediaPlayer.setOnCompletionListener(OnCompletionListener + * listener) Sets a listener to be used when a track completes playing. + */ + public void setOnBufferingUpdateListener(OnBufferingUpdateListener listener) { + lock.lock(); + try { + this.onBufferingUpdateListener = listener; + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to + * android.media.MediaPlayer.setOnCompletionListener(OnCompletionListener + * listener) Sets a listener to be used when a track completes playing. + */ + public void setOnCompletionListener(OnCompletionListener listener) { + lock.lock(); + try { + this.onCompletionListener = listener; + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to + * android.media.MediaPlayer.setOnErrorListener(OnErrorListener listener) + * Sets a listener to be used when a track encounters an error. + */ + public void setOnErrorListener(OnErrorListener listener) { + lock.lock(); + try { + this.onErrorListener = listener; + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to + * android.media.MediaPlayer.setOnInfoListener(OnInfoListener listener) Sets + * a listener to be used when a track has info. + */ + public void setOnInfoListener(OnInfoListener listener) { + lock.lock(); + try { + this.onInfoListener = listener; + } finally { + lock.unlock(); + } + } + + /** + * Sets a listener that will fire when pitch adjustment becomes available or + * stops being available + */ + public void setOnPitchAdjustmentAvailableChangedListener( + OnPitchAdjustmentAvailableChangedListener listener) { + lock.lock(); + try { + this.pitchAdjustmentAvailableChangedListener = listener; + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to + * android.media.MediaPlayer.setOnPreparedListener(OnPreparedListener + * listener) Sets a listener to be used when a track finishes preparing. + */ + public void setOnPreparedListener(OnPreparedListener listener) { + lock.lock(); + Log.d(MP_TAG, " ++++++++++++++++++++++++++++++++++++++++++++ setOnPreparedListener"); + try { + this.preparedListener = listener; + // For this one, we do not explicitly set the MediaPlayer or the + // Service listener. This is because in addition to calling the + // listener provided by the client, it's necessary to change + // state to PREPARED. See prepareAsync for implementation details + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to + * android.media.MediaPlayer.setOnSeekCompleteListener + * (OnSeekCompleteListener listener) Sets a listener to be used when a track + * finishes seeking. + */ + public void setOnSeekCompleteListener(OnSeekCompleteListener listener) { + lock.lock(); + try { + this.onSeekCompleteListener = listener; + } finally { + lock.unlock(); + } + } + + /** + * Sets a listener that will fire when speed adjustment becomes available or + * stops being available + */ + public void setOnSpeedAdjustmentAvailableChangedListener( + OnSpeedAdjustmentAvailableChangedListener listener) { + lock.lock(); + try { + this.speedAdjustmentAvailableChangedListener = listener; + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.start() Starts a track + * playing + */ + public void start() { + lock.lock(); + try { + Log.d(MP_TAG, "start() 1149"); + if (invalidServiceConnectionConfiguration()) { + setupMpi(this.mpi.mContext); + } + this.state = State.STARTED; + Log.d(MP_TAG, "start() 1154"); + this.mpi.start(); + } finally { + lock.unlock(); + } + } + + /** + * Functions identically to android.media.MediaPlayer.stop() Stops a track + * playing and resets its position to the start. + */ + public void stop() { + lock.lock(); + try { + if (invalidServiceConnectionConfiguration()) { + setupMpi(this.mpi.mContext); + } + this.state = State.STOPPED; + this.mpi.stop(); + } finally { + lock.unlock(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aocate/media/MediaPlayerImpl.java b/core/src/main/java/com/aocate/media/MediaPlayerImpl.java similarity index 100% rename from app/src/main/java/com/aocate/media/MediaPlayerImpl.java rename to core/src/main/java/com/aocate/media/MediaPlayerImpl.java diff --git a/app/src/main/java/com/aocate/media/ServiceBackedMediaPlayer.java b/core/src/main/java/com/aocate/media/ServiceBackedMediaPlayer.java similarity index 100% rename from app/src/main/java/com/aocate/media/ServiceBackedMediaPlayer.java rename to core/src/main/java/com/aocate/media/ServiceBackedMediaPlayer.java diff --git a/app/src/main/java/com/aocate/media/SpeedAdjustmentAlgorithm.java b/core/src/main/java/com/aocate/media/SpeedAdjustmentAlgorithm.java similarity index 100% rename from app/src/main/java/com/aocate/media/SpeedAdjustmentAlgorithm.java rename to core/src/main/java/com/aocate/media/SpeedAdjustmentAlgorithm.java diff --git a/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java new file mode 100644 index 000000000..69a959ba8 --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java @@ -0,0 +1,22 @@ +package de.danoeh.antennapod.core; + +import android.app.Application; +import android.content.Context; +import android.content.Intent; + +/** + * Callbacks related to the application in general + */ +public interface ApplicationCallbacks { + + /** + * Returns a non-null instance of the application class + */ + public Application getApplicationInstance(); + + /** + * Returns a non-null intent that starts the storage error + * activity. + */ + public Intent getStorageErrorActivity(Context context); +} diff --git a/app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java b/core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java similarity index 85% rename from app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java rename to core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java index bf28c17ea..e5e609f5f 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/ClientConfig.java +++ b/core/src/main/java/de/danoeh/antennapod/core/ClientConfig.java @@ -11,11 +11,15 @@ public class ClientConfig { */ public static String USER_AGENT; + public static ApplicationCallbacks applicationCallbacks; + public static DownloadServiceCallbacks downloadServiceCallbacks; public static PlaybackServiceCallbacks playbackServiceCallbacks; public static GpodnetCallbacks gpodnetCallbacks; + public static FlattrCallbacks flattrCallbacks; + public static StorageCallbacks storageCallbacks; } diff --git a/app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java similarity index 85% rename from app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java rename to core/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java index 9e4ed8e2b..55b69fdec 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.core; import android.app.PendingIntent; +import android.content.Context; import de.danoeh.antennapod.core.service.download.DownloadRequest; @@ -17,7 +18,7 @@ public interface DownloadServiceCallbacks { * * @return A non-null PendingIntent for the notification. */ - public PendingIntent getNotificationContentIntent(); + public PendingIntent getNotificationContentIntent(Context context); /** * Returns a PendingIntent for a notification that tells the user to enter a username @@ -28,7 +29,7 @@ public interface DownloadServiceCallbacks { * * @return A non-null PendingIntent for the notification. */ - public PendingIntent getAuthentificationNotificationContentIntent(DownloadRequest request); + public PendingIntent getAuthentificationNotificationContentIntent(Context context, DownloadRequest request); /** * Returns a PendingIntent for notification that notifies the user about the completion of downloads @@ -38,6 +39,6 @@ public interface DownloadServiceCallbacks { * * @return A non-null PendingIntent for the notification. */ - public PendingIntent getReportNotificationContentIntent(); + public PendingIntent getReportNotificationContentIntent(Context context); } diff --git a/app/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java similarity index 58% rename from app/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java rename to core/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java index 2dde4d8f3..cee1029d8 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java @@ -1,7 +1,11 @@ package de.danoeh.antennapod.core; +import android.app.PendingIntent; +import android.content.Context; import android.content.Intent; +import org.shredzone.flattr4j.oauth.AccessToken; + /** * Callbacks for the flattr integration of the app. */ @@ -20,5 +24,13 @@ public interface FlattrCallbacks { * @return The intent that starts the authentication activity or null * if flattr integration is disabled (i.e. flattrEnabled() == false). */ - public Intent getFlattrAuthenticationActivityIntent(); + public Intent getFlattrAuthenticationActivityIntent(Context context); + + public PendingIntent getFlattrFailedNotificationContentIntent(Context context); + + public String getFlattrAppKey(); + + public String getFlattrAppSecret(); + + public void handleFlattrAuthenticationSuccess(AccessToken token); } diff --git a/app/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java similarity index 92% rename from app/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java rename to core/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java index e937bf35c..6174bce29 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/GpodnetCallbacks.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.core; import android.app.PendingIntent; +import android.content.Context; /** * Callbacks related to the gpodder.net integration of the core module @@ -22,5 +23,5 @@ public interface GpodnetCallbacks { * @return A PendingIntent for the notification or null if gpodder.net integration * has been disabled (i.e. gpodnetEnabled() == false). */ - public PendingIntent getGpodnetSyncServiceErrorNotificationPendingIntent(); + public PendingIntent getGpodnetSyncServiceErrorNotificationPendingIntent(Context context); } diff --git a/app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java similarity index 81% rename from app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java rename to core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java index a74c441c4..e37c8fcfd 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java @@ -1,5 +1,6 @@ package de.danoeh.antennapod.core; +import android.content.Context; import android.content.Intent; import de.danoeh.antennapod.core.feed.MediaType; @@ -16,5 +17,5 @@ public interface PlaybackServiceCallbacks { * @param mediaType The type of media that is being played. * @return A non-null activity intent. */ - public Intent getPlayerActivityIntent(MediaType mediaType); + public Intent getPlayerActivityIntent(Context context, MediaType mediaType); } diff --git a/app/src/main/java/de/danoeh/antennapod/core/StorageCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/StorageCallbacks.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/StorageCallbacks.java rename to core/src/main/java/de/danoeh/antennapod/core/StorageCallbacks.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java rename to core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java index 8b3635af8..a13130082 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java @@ -8,7 +8,7 @@ import android.util.Log; import org.apache.commons.lang3.Validate; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; diff --git a/app/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java rename to core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java index 2201dfbe7..255b95119 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java +++ b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java @@ -6,7 +6,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.os.AsyncTask; -import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.storage.DBWriter; diff --git a/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java rename to core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java index 44ad91981..5d2d5d441 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java +++ b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java @@ -5,7 +5,6 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; -import android.content.Intent; import android.os.AsyncTask; import android.support.v4.app.NotificationCompat; import android.util.Log; @@ -19,10 +18,9 @@ import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.FlattrAuthActivity; -import de.danoeh.antennapod.activity.MainActivity; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.NetworkUtils; @@ -177,7 +175,8 @@ public class FlattrClickWorker extends AsyncTask { + private static final String TAG = "FlattrTokenFetcher"; + Context context; + AndroidAuthenticator auth; + AccessToken token; + Uri uri; + ProgressDialog dialog; + FlattrException exception; + + public FlattrTokenFetcher(Context context, AndroidAuthenticator auth, Uri uri) { + super(); + this.context = context; + this.auth = auth; + this.uri = uri; + } + + @Override + protected void onPostExecute(AccessToken result) { + if (result != null) { + FlattrUtils.storeToken(result); + } + dialog.dismiss(); + if (exception == null) { + ClientConfig.flattrCallbacks.handleFlattrAuthenticationSuccess(result); + } else { + FlattrUtils.showErrorDialog(context, exception.getMessage()); + } + } + + + @Override + protected void onPreExecute() { + super.onPreExecute(); + dialog = new ProgressDialog(context); + dialog.setMessage(context.getString(R.string.processing_label)); + dialog.setIndeterminate(true); + dialog.setCancelable(false); + dialog.show(); + } + + + @Override + protected AccessToken doInBackground(Void... params) { + try { + token = auth.fetchAccessToken(uri); + } catch (FlattrException e) { + e.printStackTrace(); + exception = e; + return null; + } + if (token != null) { + if (BuildConfig.DEBUG) Log.d(TAG, "Successfully got token"); + return token; + } else { + Log.w(TAG, "Flattr token was null"); + return null; + } + } + + @SuppressLint("NewApi") + public void executeAsync() { + if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) { + executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } else { + execute(); + } + } + +} diff --git a/app/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoImageResource.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoImageResource.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoImageResource.java rename to core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoImageResource.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java rename to core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java b/core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java rename to core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java index 72b5066b3..1535e2e9a 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java @@ -8,7 +8,7 @@ import android.content.Context; import android.os.ParcelFileDescriptor; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import org.xmlpull.v1.XmlPullParserException; import java.io.ByteArrayOutputStream; diff --git a/app/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java b/core/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java rename to core/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java index e51d70708..ba1add895 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java +++ b/core/src/main/java/de/danoeh/antennapod/core/dialog/ConfirmationDialog.java @@ -4,8 +4,8 @@ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.R; /** * Creates an AlertDialog which asks the user to confirm something. Other diff --git a/app/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java b/core/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java rename to core/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java index a1c3a4c6a..3d174bd8e 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java +++ b/core/src/main/java/de/danoeh/antennapod/core/dialog/DownloadRequestErrorDialogCreator.java @@ -3,7 +3,7 @@ package de.danoeh.antennapod.core.dialog; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; -import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.R; /** Creates Alert Dialogs if a DownloadRequestException has happened. */ public class DownloadRequestErrorDialogCreator { diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java b/core/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java b/core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java index 65c55a361..f8815dcf0 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java @@ -5,7 +5,7 @@ import android.util.Log; import org.apache.commons.lang3.Validate; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import java.util.AbstractQueue; import java.util.Observable; diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/Feed.java b/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/Feed.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/FeedFile.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedFile.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/FeedFile.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/FeedFile.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 55143b13b..8a513de43 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -2,17 +2,17 @@ package de.danoeh.antennapod.core.feed; import android.net.Uri; -import de.danoeh.antennapod.PodcastApp; +import java.util.Date; +import java.util.List; +import java.util.concurrent.Callable; + +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.asynctask.PicassoImageResource; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.util.ShownotesProvider; import de.danoeh.antennapod.core.util.flattr.FlattrStatus; import de.danoeh.antennapod.core.util.flattr.FlattrThing; -import java.util.Date; -import java.util.List; -import java.util.concurrent.Callable; - /** * Data Object for a XML message * @@ -253,7 +253,7 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr public String call() throws Exception { if (contentEncoded == null || description == null) { - DBReader.loadExtraInformationOfFeedItem(PodcastApp.getInstance(), FeedItem.this); + DBReader.loadExtraInformationOfFeedItem(ClientConfig.applicationCallbacks.getApplicationInstance(), FeedItem.this); } return (contentEncoded != null) ? contentEncoded : description; diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index ab87e822d..37186ee79 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -10,7 +10,7 @@ import java.util.Date; import java.util.List; import java.util.concurrent.Callable; -import de.danoeh.antennapod.PodcastApp; +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.preferences.PlaybackPreferences; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; @@ -239,7 +239,7 @@ public class FeedMedia extends FeedFile implements Playable { @Override public void loadMetadata() throws PlayableException { if (item == null && itemID != 0) { - item = DBReader.getFeedItem(PodcastApp.getInstance(), itemID); + item = DBReader.getFeedItem(ClientConfig.applicationCallbacks.getApplicationInstance(), itemID); } } @@ -248,7 +248,7 @@ public class FeedMedia extends FeedFile implements Playable { if (getChapters() == null && !localFileAvailable()) { ChapterUtils.loadChaptersFromStreamUrl(this); if (getChapters() != null && item != null) { - DBWriter.setFeedItem(PodcastApp.getInstance(), + DBWriter.setFeedItem(ClientConfig.applicationCallbacks.getApplicationInstance(), item); } } @@ -327,7 +327,7 @@ public class FeedMedia extends FeedFile implements Playable { @Override public void saveCurrentPosition(SharedPreferences pref, int newPosition) { setPosition(newPosition); - DBWriter.setFeedMediaPlaybackInformation(PodcastApp.getInstance(), this); + DBWriter.setFeedMediaPlaybackInformation(ClientConfig.applicationCallbacks.getApplicationInstance(), this); } @Override @@ -355,10 +355,12 @@ public class FeedMedia extends FeedFile implements Playable { @Override public String call() throws Exception { if (item == null) { - item = DBReader.getFeedItem(PodcastApp.getInstance(), itemID); + item = DBReader.getFeedItem( + ClientConfig.applicationCallbacks.getApplicationInstance(), itemID); } if (item.getContentEncoded() == null || item.getDescription() == null) { - DBReader.loadExtraInformationOfFeedItem(PodcastApp.getInstance(), item); + DBReader.loadExtraInformationOfFeedItem( + ClientConfig.applicationCallbacks.getApplicationInstance(), item); } return (item.getContentEncoded() != null) ? item.getContentEncoded() : item.getDescription(); diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/ID3Chapter.java b/core/src/main/java/de/danoeh/antennapod/core/feed/ID3Chapter.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/ID3Chapter.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/ID3Chapter.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/MediaType.java b/core/src/main/java/de/danoeh/antennapod/core/feed/MediaType.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/MediaType.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/MediaType.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java b/core/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/SearchResult.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/SimpleChapter.java b/core/src/main/java/de/danoeh/antennapod/core/feed/SimpleChapter.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/SimpleChapter.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/SimpleChapter.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/feed/VorbisCommentChapter.java b/core/src/main/java/de/danoeh/antennapod/core/feed/VorbisCommentChapter.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/feed/VorbisCommentChapter.java rename to core/src/main/java/de/danoeh/antennapod/core/feed/VorbisCommentChapter.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java rename to core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java rename to core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java rename to core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java rename to core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java rename to core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetDevice.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java rename to core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java rename to core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetSubscriptionChange.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java rename to core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetTag.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java rename to core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetUploadChangesResponse.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlElement.java b/core/src/main/java/de/danoeh/antennapod/core/opml/OpmlElement.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/opml/OpmlElement.java rename to core/src/main/java/de/danoeh/antennapod/core/opml/OpmlElement.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlReader.java b/core/src/main/java/de/danoeh/antennapod/core/opml/OpmlReader.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/opml/OpmlReader.java rename to core/src/main/java/de/danoeh/antennapod/core/opml/OpmlReader.java index aa484954d..775129d09 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/opml/OpmlReader.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.opml; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; diff --git a/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlSymbols.java b/core/src/main/java/de/danoeh/antennapod/core/opml/OpmlSymbols.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/opml/OpmlSymbols.java rename to core/src/main/java/de/danoeh/antennapod/core/opml/OpmlSymbols.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlWriter.java b/core/src/main/java/de/danoeh/antennapod/core/opml/OpmlWriter.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/core/opml/OpmlWriter.java rename to core/src/main/java/de/danoeh/antennapod/core/opml/OpmlWriter.java index fe14b4954..641190f62 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/opml/OpmlWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/opml/OpmlWriter.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.opml; import android.util.Log; import android.util.Xml; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.Feed; import org.xmlpull.v1.XmlSerializer; diff --git a/app/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java rename to core/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java index 716a74f53..af04df017 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/GpodnetPreferences.java @@ -3,16 +3,17 @@ package de.danoeh.antennapod.core.preferences; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.PodcastApp; -import de.danoeh.antennapod.core.gpoddernet.GpodnetService; -import de.danoeh.antennapod.core.service.GpodnetSyncService; import java.util.Collection; import java.util.HashSet; import java.util.Set; import java.util.concurrent.locks.ReentrantLock; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.gpoddernet.GpodnetService; +import de.danoeh.antennapod.core.service.GpodnetSyncService; + /** * Manages preferences for accessing gpodder.net service */ @@ -48,7 +49,7 @@ public class GpodnetPreferences { private static boolean preferencesLoaded = false; private static SharedPreferences getPreferences() { - return PodcastApp.getInstance().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); + return ClientConfig.applicationCallbacks.getApplicationInstance().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); } private static synchronized void ensurePreferencesLoaded() { @@ -148,7 +149,7 @@ public class GpodnetPreferences { writePreference(PREF_SYNC_REMOVED, removedFeeds); } feedListLock.unlock(); - GpodnetSyncService.sendSyncIntent(PodcastApp.getInstance()); + GpodnetSyncService.sendSyncIntent(ClientConfig.applicationCallbacks.getApplicationInstance()); } public static void addRemovedFeed(String feed) { @@ -161,7 +162,7 @@ public class GpodnetPreferences { writePreference(PREF_SYNC_ADDED, addedFeeds); } feedListLock.unlock(); - GpodnetSyncService.sendSyncIntent(PodcastApp.getInstance()); + GpodnetSyncService.sendSyncIntent(ClientConfig.applicationCallbacks.getApplicationInstance()); } public static Set getAddedFeedsCopy() { diff --git a/app/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java rename to core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java index 756b4067c..d88543f73 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java @@ -7,7 +7,7 @@ import android.util.Log; import org.apache.commons.lang3.Validate; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; /** * Provides access to preferences set by the playback service. A private diff --git a/app/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java rename to core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 1669fc601..5cac4837d 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -19,8 +19,8 @@ import java.util.LinkedList; import java.util.List; import java.util.concurrent.TimeUnit; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.receiver.FeedUpdateReceiver; /** diff --git a/app/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java rename to core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java index 2057b0881..0777a7a2e 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java @@ -7,7 +7,7 @@ import android.util.Log; import org.apache.commons.lang3.StringUtils; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.preferences.UserPreferences; /** Listens for events that make it necessary to reset the update alarm. */ diff --git a/app/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java rename to core/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java index e6b1a1b49..6a9a4166a 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java @@ -9,7 +9,7 @@ import android.util.Log; import org.apache.commons.lang3.StringUtils; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.NetworkUtils; diff --git a/app/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java rename to core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java index ec63bc2ae..6ce30763d 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java @@ -9,7 +9,7 @@ import android.util.Log; import org.apache.commons.lang3.StringUtils; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DBTasks; diff --git a/app/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java rename to core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java index be54148cf..a900248d2 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/MediaButtonReceiver.java @@ -5,7 +5,7 @@ import android.content.Context; import android.content.Intent; import android.util.Log; import android.view.KeyEvent; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.service.playback.PlaybackService; /** Receives media button events. */ diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java b/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java similarity index 89% rename from app/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java rename to core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java index 8a2659029..0f2a81dfb 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java @@ -9,9 +9,15 @@ import android.content.Intent; import android.os.IBinder; import android.support.v4.app.NotificationCompat; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.MainActivity; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; + +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.gpoddernet.GpodnetService; import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceAuthenticationException; @@ -25,11 +31,6 @@ import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.NetworkUtils; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; - /** * Synchronizes local subscriptions with gpodder.net service. The service should be started with ACTION_SYNC as an action argument. * This class also provides static methods for starting the GpodnetSyncService. @@ -89,14 +90,17 @@ public class GpodnetSyncService extends Service { // first sync: download all subscriptions... GpodnetSubscriptionChange changes = service.getSubscriptionChanges(GpodnetPreferences.getUsername(), GpodnetPreferences.getDeviceID(), 0); - if (BuildConfig.DEBUG) Log.d(TAG, "Downloaded subscription changes: " + changes); + if (BuildConfig.DEBUG) + Log.d(TAG, "Downloaded subscription changes: " + changes); processSubscriptionChanges(localSubscriptions, changes); // ... then upload all local subscriptions - if (BuildConfig.DEBUG) Log.d(TAG, "Uploading subscription list: " + localSubscriptions); + if (BuildConfig.DEBUG) + Log.d(TAG, "Uploading subscription list: " + localSubscriptions); GpodnetUploadChangesResponse uploadChangesResponse = service.uploadChanges(GpodnetPreferences.getUsername(), GpodnetPreferences.getDeviceID(), localSubscriptions, new LinkedList()); - if (BuildConfig.DEBUG) Log.d(TAG, "Uploading changes response: " + uploadChangesResponse); + if (BuildConfig.DEBUG) + Log.d(TAG, "Uploading changes response: " + uploadChangesResponse); GpodnetPreferences.removeAddedFeeds(localSubscriptions); GpodnetPreferences.removeRemovedFeeds(GpodnetPreferences.getRemovedFeedsCopy()); GpodnetPreferences.setLastSyncTimestamp(uploadChangesResponse.timestamp); @@ -106,14 +110,17 @@ public class GpodnetSyncService extends Service { // download remote changes first... GpodnetSubscriptionChange subscriptionChanges = service.getSubscriptionChanges(GpodnetPreferences.getUsername(), GpodnetPreferences.getDeviceID(), timestamp); - if (BuildConfig.DEBUG) Log.d(TAG, "Downloaded subscription changes: " + subscriptionChanges); + if (BuildConfig.DEBUG) + Log.d(TAG, "Downloaded subscription changes: " + subscriptionChanges); processSubscriptionChanges(localSubscriptions, subscriptionChanges); // ... then upload changes local changes - if (BuildConfig.DEBUG) Log.d(TAG, String.format("Uploading subscriptions, Added: %s\nRemoved: %s", - added.toString(), removed)); + if (BuildConfig.DEBUG) + Log.d(TAG, String.format("Uploading subscriptions, Added: %s\nRemoved: %s", + added.toString(), removed)); GpodnetUploadChangesResponse uploadChangesResponse = service.uploadChanges(GpodnetPreferences.getUsername(), GpodnetPreferences.getDeviceID(), added, removed); - if (BuildConfig.DEBUG) Log.d(TAG, "Upload subscriptions response: " + uploadChangesResponse); + if (BuildConfig.DEBUG) + Log.d(TAG, "Upload subscriptions response: " + uploadChangesResponse); GpodnetPreferences.removeAddedFeeds(added); GpodnetPreferences.removeRemovedFeeds(removed); @@ -165,8 +172,7 @@ public class GpodnetSyncService extends Service { id = R.id.notification_gpodnet_sync_error; } - PendingIntent activityIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); -// TODO getGpodnetSyncServiceErrorNotificationPendingIntent + PendingIntent activityIntent = ClientConfig.gpodnetCallbacks.getGpodnetSyncServiceErrorNotificationPendingIntent(this); Notification notification = builder.setContentTitle(title) .setContentText(description) .setContentIntent(activityIntent) diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/download/APRedirectHandler.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/APRedirectHandler.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/core/service/download/APRedirectHandler.java rename to core/src/main/java/de/danoeh/antennapod/core/service/download/APRedirectHandler.java index 1c62eaa77..3efcf4da8 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/service/download/APRedirectHandler.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/APRedirectHandler.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.service.download; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.impl.client.DefaultRedirectHandler; diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java rename to core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java index dc792db81..67f059d7d 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java @@ -1,8 +1,7 @@ package de.danoeh.antennapod.core.service.download; import android.util.Log; -import de.danoeh.antennapod.AppConfig; -import de.danoeh.antennapod.BuildConfig; + import org.apache.http.client.HttpClient; import org.apache.http.client.params.HttpClientParams; import org.apache.http.conn.ClientConnectionManager; @@ -21,6 +20,9 @@ import org.apache.http.params.HttpParams; import java.util.concurrent.TimeUnit; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; + /** * Provides access to a HttpClient singleton. */ @@ -46,7 +48,7 @@ public class AntennapodHttpClient { if (BuildConfig.DEBUG) Log.d(TAG, "Creating new instance of HTTP client"); HttpParams params = new BasicHttpParams(); - params.setParameter(CoreProtocolPNames.USER_AGENT, AppConfig.USER_AGENT); + params.setParameter(CoreProtocolPNames.USER_AGENT, ClientConfig.USER_AGENT); params.setIntParameter("http.protocol.max-redirects", MAX_REDIRECTS); params.setBooleanParameter("http.protocol.reject-relative-redirect", false); diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java rename to core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java rename to core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index e9381d509..9229622ed 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -3,7 +3,6 @@ package de.danoeh.antennapod.core.service.download; import android.annotation.SuppressLint; import android.app.Notification; import android.app.NotificationManager; -import android.app.PendingIntent; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; @@ -13,7 +12,6 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.MediaMetadataRetriever; import android.os.Binder; -import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.support.v4.app.NotificationCompat; @@ -53,18 +51,15 @@ import java.util.concurrent.atomic.AtomicInteger; import javax.xml.parsers.ParserConfigurationException; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.DownloadAuthenticationActivity; -import de.danoeh.antennapod.activity.MainActivity; -import de.danoeh.antennapod.adapter.NavListAdapter; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.feed.EventDistributor; 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.feed.FeedPreferences; -import de.danoeh.antennapod.fragment.DownloadsFragment; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; @@ -330,31 +325,19 @@ public class DownloadService extends Service { } @SuppressLint("NewApi") - private void setupNotificationBuilders() { // TODO getNotificationContentIntent - Intent intent = new Intent(this, 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); - - PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, - PendingIntent.FLAG_UPDATE_CURRENT - ); - - + private void setupNotificationBuilders() { Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.stat_notify_sync); if (android.os.Build.VERSION.SDK_INT >= 16) { notificationBuilder = new Notification.BigTextStyle( new Notification.Builder(this).setOngoing(true) - .setContentIntent(pIntent).setLargeIcon(icon) + .setContentIntent(ClientConfig.downloadServiceCallbacks.getNotificationContentIntent(this)).setLargeIcon(icon) .setSmallIcon(R.drawable.stat_notify_sync) ); } else { notificationCompatBuilder = new NotificationCompat.Builder(this) - .setOngoing(true).setContentIntent(pIntent) + .setOngoing(true).setContentIntent(ClientConfig.downloadServiceCallbacks.getNotificationContentIntent(this)) .setLargeIcon(icon) .setSmallIcon(R.drawable.stat_notify_sync); } @@ -555,22 +538,15 @@ public class DownloadService extends Service { } } - if (createReport) { // TODO getReportNotificationContentIntent + if (createReport) { if (BuildConfig.DEBUG) Log.d(TAG, "Creating report"); - Intent intent = new Intent(this, 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); - // create notification object Notification notification = new NotificationCompat.Builder(this) .setTicker( - getString(de.danoeh.antennapod.R.string.download_report_title)) + getString(R.string.download_report_title)) .setContentTitle( - getString(de.danoeh.antennapod.R.string.download_report_title)) + getString(R.string.download_report_title)) .setContentText( String.format( getString(R.string.download_report_content), @@ -582,7 +558,7 @@ public class DownloadService extends Service { R.drawable.stat_notify_sync) ) .setContentIntent( - PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) + ClientConfig.downloadServiceCallbacks.getReportNotificationContentIntent(this) ) .setAutoCancel(true).build(); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); @@ -632,12 +608,6 @@ public class DownloadService extends Service { final String resourceTitle = (downloadRequest.getTitle() != null) ? downloadRequest.getTitle() : downloadRequest.getSource(); - // TODO getAuthentificationNotificationContentIntent - final Intent activityIntent = new Intent(getApplicationContext(), DownloadAuthenticationActivity.class); - activityIntent.putExtra(DownloadAuthenticationActivity.ARG_DOWNLOAD_REQUEST, downloadRequest); - activityIntent.putExtra(DownloadAuthenticationActivity.ARG_SEND_TO_DOWNLOAD_REQUESTER_BOOL, true); - final PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, activityIntent, PendingIntent.FLAG_ONE_SHOT); - NotificationCompat.Builder builder = new NotificationCompat.Builder(DownloadService.this); builder.setTicker(getText(R.string.authentication_notification_title)) .setContentTitle(getText(R.string.authentication_notification_title)) @@ -647,7 +617,7 @@ public class DownloadService extends Service { .setSmallIcon(R.drawable.ic_stat_authentication) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_stat_authentication)) .setAutoCancel(true) - .setContentIntent(contentIntent); + .setContentIntent(ClientConfig.downloadServiceCallbacks.getAuthentificationNotificationContentIntent(DownloadService.this, downloadRequest)); Notification n = builder.build(); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(downloadRequest.getSource().hashCode(), n); diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java rename to core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadStatus.java diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java new file mode 100644 index 000000000..d8042d202 --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/Downloader.java @@ -0,0 +1,73 @@ +package de.danoeh.antennapod.core.service.download; + +import android.content.Context; +import android.net.wifi.WifiManager; + +import java.util.concurrent.Callable; + +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.R; + +/** + * Downloads files + */ +public abstract class Downloader implements Callable { + private static final String TAG = "Downloader"; + + protected volatile boolean finished; + + protected volatile boolean cancelled; + + protected DownloadRequest request; + protected DownloadStatus result; + + public Downloader(DownloadRequest request) { + super(); + this.request = request; + this.request.setStatusMsg(R.string.download_pending); + this.cancelled = false; + this.result = new DownloadStatus(request, null, false, false, null); + } + + protected abstract void download(); + + public final Downloader call() { + WifiManager wifiManager = (WifiManager) + ClientConfig.applicationCallbacks.getApplicationInstance().getSystemService(Context.WIFI_SERVICE); + WifiManager.WifiLock wifiLock = null; + if (wifiManager != null) { + wifiLock = wifiManager.createWifiLock(TAG); + wifiLock.acquire(); + } + + download(); + + if (wifiLock != null) { + wifiLock.release(); + } + + if (result == null) { + throw new IllegalStateException( + "Downloader hasn't created DownloadStatus object"); + } + finished = true; + return this; + } + + public DownloadRequest getDownloadRequest() { + return request; + } + + public DownloadStatus getResult() { + return result; + } + + public boolean isFinished() { + return finished; + } + + public void cancel() { + cancelled = true; + } + +} \ No newline at end of file diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderCallback.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderCallback.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderCallback.java rename to core/src/main/java/de/danoeh/antennapod/core/service/download/DownloaderCallback.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java similarity index 96% rename from app/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java rename to core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java index cba59be01..32d0d351a 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java @@ -2,13 +2,7 @@ package de.danoeh.antennapod.core.service.download; import android.net.http.AndroidHttpClient; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.PodcastApp; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.feed.FeedImage; -import de.danoeh.antennapod.core.util.DownloadError; -import de.danoeh.antennapod.core.util.StorageUtils; -import de.danoeh.antennapod.core.util.URIUtil; + import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.http.Header; @@ -21,11 +15,23 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.auth.BasicScheme; import org.apache.http.message.BasicHeader; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.SocketTimeoutException; import java.net.UnknownHostException; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.R; +import de.danoeh.antennapod.core.feed.FeedImage; +import de.danoeh.antennapod.core.util.DownloadError; +import de.danoeh.antennapod.core.util.StorageUtils; +import de.danoeh.antennapod.core.util.URIUtil; + public class HttpDownloader extends Downloader { private static final String TAG = "HttpDownloader"; @@ -104,7 +110,7 @@ public class HttpDownloader extends Downloader { return; } - if (!StorageUtils.storageAvailable(PodcastApp.getInstance())) { + if (!StorageUtils.storageAvailable(ClientConfig.applicationCallbacks.getApplicationInstance())) { onFail(DownloadError.ERROR_DEVICE_NOT_FOUND, null); return; } diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java rename to core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index c191c9521..5123e40c7 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -34,10 +34,9 @@ import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.util.List; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.AudioplayerActivity; -import de.danoeh.antennapod.activity.VideoplayerActivity; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.asynctask.PicassoProvider; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.FeedItem; @@ -46,7 +45,6 @@ import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.preferences.PlaybackPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.receiver.MediaButtonReceiver; -import de.danoeh.antennapod.core.receiver.PlayerWidget; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.QueueAccess; @@ -57,6 +55,8 @@ import de.danoeh.antennapod.core.util.playback.Playable; * Controls the MediaPlayer that plays a FeedMedia-file */ public class PlaybackService extends Service { + public static final String FORCE_WIDGET_UPDATE = "de.danoeh.antennapod.FORCE_WIDGET_UPDATE"; + public static final String STOP_WIDGET_UPDATE = "de.danoeh.antennapod.STOP_WIDGET_UPDATE"; /** * Logging tag */ @@ -172,17 +172,13 @@ public class PlaybackService extends Service { * running, the type of the last played media will be looked up. */ public static Intent getPlayerActivityIntent(Context context) { - if (isRunning) { // TODO getPlayerActivityIntent - if (currentMediaType == MediaType.VIDEO) { - return new Intent(context, VideoplayerActivity.class); - } else { - return new Intent(context, AudioplayerActivity.class); - } + if (isRunning) { + return ClientConfig.playbackServiceCallbacks.getPlayerActivityIntent(context, currentMediaType); } else { if (PlaybackPreferences.getCurrentEpisodeIsVideo()) { - return new Intent(context, VideoplayerActivity.class); + return ClientConfig.playbackServiceCallbacks.getPlayerActivityIntent(context, MediaType.VIDEO); } else { - return new Intent(context, AudioplayerActivity.class); + return ClientConfig.playbackServiceCallbacks.getPlayerActivityIntent(context, MediaType.AUDIO); } } } @@ -193,11 +189,7 @@ public class PlaybackService extends Service { */ public static Intent getPlayerActivityIntent(Context context, Playable media) { MediaType mt = media.getMediaType(); - if (mt == MediaType.VIDEO) { - return new Intent(context, VideoplayerActivity.class); - } else { - return new Intent(context, AudioplayerActivity.class); - } + return ClientConfig.playbackServiceCallbacks.getPlayerActivityIntent(context, mt); } @SuppressLint("NewApi") @@ -796,12 +788,12 @@ public class PlaybackService extends Service { private void stopWidgetUpdater() { taskManager.cancelWidgetUpdater(); - sendBroadcast(new Intent(PlayerWidget.STOP_WIDGET_UPDATE)); + sendBroadcast(new Intent(STOP_WIDGET_UPDATE)); } private void updateWidget() { PlaybackService.this.sendBroadcast(new Intent( - PlayerWidget.FORCE_WIDGET_UPDATE)); + FORCE_WIDGET_UPDATE)); } public boolean sleepTimerActive() { diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java rename to core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java index 62ad59166..590b67853 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java @@ -21,7 +21,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.preferences.UserPreferences; diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java rename to core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java index 1b33e8667..1865afa6f 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java @@ -5,7 +5,7 @@ import android.util.Log; import org.apache.commons.lang3.Validate; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.storage.DBReader; diff --git a/app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java rename to core/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java rename to core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index 1b93e6ea2..62edaae29 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -4,7 +4,7 @@ import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.*; import de.danoeh.antennapod.core.service.download.DownloadStatus; import de.danoeh.antennapod.core.util.DownloadError; diff --git a/app/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java rename to core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java index 28cab29b9..982959bc2 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java @@ -4,7 +4,7 @@ import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; import de.danoeh.antennapod.core.asynctask.FlattrStatusFetcher; import de.danoeh.antennapod.core.feed.*; diff --git a/app/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java rename to core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 225f74c96..eec15acd2 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -7,7 +7,7 @@ import android.content.SharedPreferences; import android.database.Cursor; import android.preference.PreferenceManager; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; import de.danoeh.antennapod.core.feed.*; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; diff --git a/app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java rename to core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java rename to core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java index c313055a5..2fd653d32 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java @@ -4,7 +4,7 @@ import android.content.Context; import android.content.Intent; import android.util.Log; import android.webkit.URLUtil; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.*; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadRequest; diff --git a/app/src/main/java/de/danoeh/antennapod/core/storage/FeedItemStatistics.java b/core/src/main/java/de/danoeh/antennapod/core/storage/FeedItemStatistics.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/storage/FeedItemStatistics.java rename to core/src/main/java/de/danoeh/antennapod/core/storage/FeedItemStatistics.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java b/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java rename to core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java index 41b379471..3a63685ba 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.storage; import android.content.Context; -import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.SearchResult; import de.danoeh.antennapod.core.util.comparator.SearchResultValueComparator; diff --git a/app/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java similarity index 92% rename from app/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java rename to core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index eb6592510..1407080dc 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -16,7 +16,8 @@ import org.apache.commons.lang3.Validate; import java.util.Arrays; import java.util.List; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedComponent; @@ -34,7 +35,6 @@ import de.danoeh.antennapod.core.util.flattr.FlattrStatus; */ public class PodDBAdapter { private static final String TAG = "PodDBAdapter"; - private static final int DATABASE_VERSION = 12; public static final String DATABASE_NAME = "Antennapod.db"; /** @@ -318,7 +318,8 @@ public class PodDBAdapter { private static synchronized PodDBHelper getDbHelperSingleton(Context appContext) { if (dbHelperSingleton == null) { - dbHelperSingleton = new PodDBHelper(appContext, DATABASE_NAME, null, DATABASE_VERSION); + dbHelperSingleton = new PodDBHelper(appContext, DATABASE_NAME, null, + ClientConfig.storageCallbacks.getDatabaseVersion()); } return dbHelperSingleton; } @@ -1302,90 +1303,8 @@ public class PodDBAdapter { @Override public void onUpgrade(final SQLiteDatabase db, final int oldVersion, - final int newVersion) { // TODO onUpgrade - Log.w("DBAdapter", "Upgrading from version " + oldVersion + " to " - + newVersion + "."); - if (oldVersion <= 1) { - db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS + " ADD COLUMN " - + KEY_TYPE + " TEXT"); - } - if (oldVersion <= 2) { - db.execSQL("ALTER TABLE " + TABLE_NAME_SIMPLECHAPTERS - + " ADD COLUMN " + KEY_LINK + " TEXT"); - } - if (oldVersion <= 3) { - db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_ITEMS - + " ADD COLUMN " + KEY_ITEM_IDENTIFIER + " TEXT"); - } - if (oldVersion <= 4) { - db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS + " ADD COLUMN " - + KEY_FEED_IDENTIFIER + " TEXT"); - } - if (oldVersion <= 5) { - db.execSQL("ALTER TABLE " + TABLE_NAME_DOWNLOAD_LOG - + " ADD COLUMN " + KEY_REASON_DETAILED + " TEXT"); - db.execSQL("ALTER TABLE " + TABLE_NAME_DOWNLOAD_LOG - + " ADD COLUMN " + KEY_DOWNLOADSTATUS_TITLE + " TEXT"); - } - if (oldVersion <= 6) { - db.execSQL("ALTER TABLE " + TABLE_NAME_SIMPLECHAPTERS - + " ADD COLUMN " + KEY_CHAPTER_TYPE + " INTEGER"); - } - if (oldVersion <= 7) { - db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_MEDIA - + " ADD COLUMN " + KEY_PLAYBACK_COMPLETION_DATE - + " INTEGER"); - } - if (oldVersion <= 8) { - final int KEY_ID_POSITION = 0; - final int KEY_MEDIA_POSITION = 1; - - // Add feeditem column to feedmedia table - db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_MEDIA - + " ADD COLUMN " + KEY_FEEDITEM - + " INTEGER"); - Cursor feeditemCursor = db.query(TABLE_NAME_FEED_ITEMS, new String[]{KEY_ID, KEY_MEDIA}, "? > 0", new String[]{KEY_MEDIA}, null, null, null); - if (feeditemCursor.moveToFirst()) { - db.beginTransaction(); - ContentValues contentValues = new ContentValues(); - do { - long mediaId = feeditemCursor.getLong(KEY_MEDIA_POSITION); - contentValues.put(KEY_FEEDITEM, feeditemCursor.getLong(KEY_ID_POSITION)); - db.update(TABLE_NAME_FEED_MEDIA, contentValues, KEY_ID + "=?", new String[]{String.valueOf(mediaId)}); - contentValues.clear(); - } while (feeditemCursor.moveToNext()); - db.setTransactionSuccessful(); - db.endTransaction(); - } - feeditemCursor.close(); - } - if (oldVersion <= 9) { - db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS - + " ADD COLUMN " + KEY_AUTO_DOWNLOAD - + " INTEGER DEFAULT 1"); - } - if (oldVersion <= 10) { - db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS - + " ADD COLUMN " + KEY_FLATTR_STATUS - + " INTEGER"); - db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_ITEMS - + " ADD COLUMN " + KEY_FLATTR_STATUS - + " INTEGER"); - db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_MEDIA - + " ADD COLUMN " + KEY_PLAYED_DURATION - + " INTEGER"); - } - if (oldVersion <= 11) { - db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS - + " ADD COLUMN " + KEY_USERNAME - + " TEXT"); - db.execSQL("ALTER TABLE " + TABLE_NAME_FEEDS - + " ADD COLUMN " + KEY_PASSWORD - + " TEXT"); - db.execSQL("ALTER TABLE " + TABLE_NAME_FEED_ITEMS - + " ADD COLUMN " + KEY_IMAGE - + " INTEGER"); - } + final int newVersion) { + ClientConfig.storageCallbacks.onUpgrade(db, oldVersion, newVersion); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandler.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandler.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandler.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandler.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandlerResult.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandlerResult.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandlerResult.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/handler/FeedHandlerResult.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java index 573c873eb..1dda24944 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.syndication.handler; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.syndication.namespace.*; import de.danoeh.antennapod.core.syndication.namespace.atom.NSAtom; diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java index e1ebd63a5..32cd538d5 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.syndication.handler; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.Feed; import org.apache.commons.io.input.XmlStreamReader; import org.jsoup.Jsoup; diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSContent.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSContent.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSContent.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSContent.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java index 15c377f79..7f03f1139 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.syndication.namespace; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.syndication.handler.HandlerState; import de.danoeh.antennapod.core.syndication.util.SyndTypeUtils; diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java index fd8f6176b..c29741456 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.syndication.namespace; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.FeedImage; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSSimpleChapters.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSSimpleChapters.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSSimpleChapters.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSSimpleChapters.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/Namespace.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/Namespace.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/Namespace.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/Namespace.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/SyndElement.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/SyndElement.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/SyndElement.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/SyndElement.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java index 1547dc222..61cb9ec65 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.syndication.namespace.atom; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.FeedImage; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndDateUtils.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndDateUtils.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndDateUtils.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndDateUtils.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndTypeUtils.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndTypeUtils.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndTypeUtils.java rename to core/src/main/java/de/danoeh/antennapod/core/syndication/util/SyndTypeUtils.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java rename to core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java index d6046026f..759a60f43 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.util; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.util.comparator.ChapterStartTimeComparator; import de.danoeh.antennapod.core.util.id3reader.ChapterReader; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/Converter.java b/core/src/main/java/de/danoeh/antennapod/core/util/Converter.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/Converter.java rename to core/src/main/java/de/danoeh/antennapod/core/util/Converter.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/DownloadError.java b/core/src/main/java/de/danoeh/antennapod/core/util/DownloadError.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/core/util/DownloadError.java rename to core/src/main/java/de/danoeh/antennapod/core/util/DownloadError.java index 447e7d256..602c221bf 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/DownloadError.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/DownloadError.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.util; import android.content.Context; -import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.R; /** Utility class for Download Errors. */ public enum DownloadError { diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/DuckType.java b/core/src/main/java/de/danoeh/antennapod/core/util/DuckType.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/util/DuckType.java rename to core/src/main/java/de/danoeh/antennapod/core/util/DuckType.java index 5d2803b84..f432424f8 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/DuckType.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/DuckType.java @@ -6,7 +6,7 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; /** * Allows "duck typing" or dynamic invocation based on method signature rather diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/EpisodeFilter.java b/core/src/main/java/de/danoeh/antennapod/core/util/EpisodeFilter.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/EpisodeFilter.java rename to core/src/main/java/de/danoeh/antennapod/core/util/EpisodeFilter.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/FeedtitleComparator.java b/core/src/main/java/de/danoeh/antennapod/core/util/FeedtitleComparator.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/FeedtitleComparator.java rename to core/src/main/java/de/danoeh/antennapod/core/util/FeedtitleComparator.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java b/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java rename to core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java b/core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java rename to core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java rename to core/src/main/java/de/danoeh/antennapod/core/util/LangUtils.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java rename to core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java index 89bba290c..b321536a3 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java @@ -6,7 +6,7 @@ import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.preferences.UserPreferences; import java.util.Arrays; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/QueueAccess.java b/core/src/main/java/de/danoeh/antennapod/core/util/QueueAccess.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/QueueAccess.java rename to core/src/main/java/de/danoeh/antennapod/core/util/QueueAccess.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java rename to core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/ShownotesProvider.java b/core/src/main/java/de/danoeh/antennapod/core/util/ShownotesProvider.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/ShownotesProvider.java rename to core/src/main/java/de/danoeh/antennapod/core/util/ShownotesProvider.java diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java new file mode 100644 index 000000000..dea380937 --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/util/StorageUtils.java @@ -0,0 +1,67 @@ +package de.danoeh.antennapod.core.util; + +import android.app.Activity; +import android.content.Context; +import android.os.Build; +import android.os.StatFs; +import android.util.Log; + +import java.io.File; + +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.preferences.UserPreferences; + +/** + * Utility functions for handling storage errors + */ +public class StorageUtils { + private static final String TAG = "StorageUtils"; + + public static boolean storageAvailable(Context context) { + File dir = UserPreferences.getDataFolder(context, null); + if (dir != null) { + return dir.exists() && dir.canRead() && dir.canWrite(); + } else { + if (BuildConfig.DEBUG) + Log.d(TAG, "Storage not available: data folder is null"); + return false; + } + } + + /** + * Checks if external storage is available. If external storage isn't + * available, the current activity is finsished an an error activity is + * launched. + * + * @param activity the activity which would be finished if no storage is + * available + * @return true if external storage is available + */ + public static boolean checkStorageAvailability(Activity activity) { + boolean storageAvailable = storageAvailable(activity); + if (!storageAvailable) { + activity.finish(); + activity.startActivity(ClientConfig.applicationCallbacks.getStorageErrorActivity(activity)); + } + return storageAvailable; + } + + /** + * Get the number of free bytes that are available on the external storage. + */ + public static long getFreeSpaceAvailable() { + StatFs stat = new StatFs(UserPreferences.getDataFolder( + ClientConfig.applicationCallbacks.getApplicationInstance(), null).getAbsolutePath()); + long availableBlocks; + long blockSize; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { + availableBlocks = stat.getAvailableBlocksLong(); + blockSize = stat.getBlockSizeLong(); + } else { + availableBlocks = stat.getAvailableBlocks(); + blockSize = stat.getBlockSize(); + } + return availableBlocks * blockSize; + } +} diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java new file mode 100644 index 000000000..f67367643 --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/util/ThemeUtils.java @@ -0,0 +1,23 @@ +package de.danoeh.antennapod.core.util; + +import android.util.Log; + +import de.danoeh.antennapod.core.R; +import de.danoeh.antennapod.core.preferences.UserPreferences; + +public class ThemeUtils { + private static final String TAG = "ThemeUtils"; + + public static int getSelectionBackgroundColor() { + int theme = UserPreferences.getTheme(); + if (theme == R.style.Theme_AntennaPod_Dark) { + return R.color.selection_background_color_dark; + } else if (theme == R.style.Theme_AntennaPod_Light) { + return R.color.selection_background_color_light; + } else { + Log.e(TAG, + "getSelectionBackgroundColor could not match the current theme to any color!"); + return R.color.selection_background_color_light; + } + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java b/core/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java similarity index 95% rename from app/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java rename to core/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java index c614abbc1..092c06b4a 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/URIUtil.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.util; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import java.net.MalformedURLException; import java.net.URI; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java b/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java similarity index 97% rename from app/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java rename to core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java index c707e55bc..ca49427c0 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java @@ -4,7 +4,7 @@ import android.util.Log; import org.apache.commons.lang3.StringUtils; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; /** * Provides methods for checking and editing a URL. diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/UndoBarController.java b/core/src/main/java/de/danoeh/antennapod/core/util/UndoBarController.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/util/UndoBarController.java rename to core/src/main/java/de/danoeh/antennapod/core/util/UndoBarController.java index d0721ac23..5843c5f8f 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/UndoBarController.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/UndoBarController.java @@ -26,7 +26,7 @@ import com.nineoldandroids.animation.Animator; import com.nineoldandroids.animation.AnimatorListenerAdapter; import com.nineoldandroids.view.ViewHelper; import com.nineoldandroids.view.ViewPropertyAnimator; -import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.R; import static com.nineoldandroids.view.ViewPropertyAnimator.animate; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java b/core/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java rename to core/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/comparator/DownloadStatusComparator.java b/core/src/main/java/de/danoeh/antennapod/core/util/comparator/DownloadStatusComparator.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/comparator/DownloadStatusComparator.java rename to core/src/main/java/de/danoeh/antennapod/core/util/comparator/DownloadStatusComparator.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/comparator/FeedItemPubdateComparator.java b/core/src/main/java/de/danoeh/antennapod/core/util/comparator/FeedItemPubdateComparator.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/comparator/FeedItemPubdateComparator.java rename to core/src/main/java/de/danoeh/antennapod/core/util/comparator/FeedItemPubdateComparator.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/comparator/PlaybackCompletionDateComparator.java b/core/src/main/java/de/danoeh/antennapod/core/util/comparator/PlaybackCompletionDateComparator.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/comparator/PlaybackCompletionDateComparator.java rename to core/src/main/java/de/danoeh/antennapod/core/util/comparator/PlaybackCompletionDateComparator.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/comparator/SearchResultValueComparator.java b/core/src/main/java/de/danoeh/antennapod/core/util/comparator/SearchResultValueComparator.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/comparator/SearchResultValueComparator.java rename to core/src/main/java/de/danoeh/antennapod/core/util/comparator/SearchResultValueComparator.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java b/core/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java rename to core/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java similarity index 93% rename from app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java rename to core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java index 5a7cfa47f..e4818214e 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.util.flattr; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import org.shredzone.flattr4j.FlattrFactory; import org.shredzone.flattr4j.FlattrService; import org.shredzone.flattr4j.oauth.AccessToken; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java rename to core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java rename to core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java similarity index 91% rename from app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java rename to core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java index e07ed11e9..42eeeadce 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java @@ -26,10 +26,9 @@ import java.util.EnumSet; import java.util.List; import java.util.TimeZone; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.PodcastApp; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.FlattrAuthActivity; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.asynctask.FlattrTokenFetcher; import de.danoeh.antennapod.core.storage.DBWriter; @@ -53,8 +52,8 @@ public class FlattrUtils { private static volatile AccessToken cachedToken; private static AndroidAuthenticator createAuthenticator() { - return new AndroidAuthenticator(HOST_NAME, BuildConfig.FLATTR_APP_KEY, - BuildConfig.FLATTR_APP_SECRET); + return new AndroidAuthenticator(HOST_NAME, ClientConfig.flattrCallbacks.getFlattrAppKey(), + ClientConfig.flattrCallbacks.getFlattrAppSecret()); } public static void startAuthProcess(Context context) throws FlattrException { @@ -69,7 +68,7 @@ public class FlattrUtils { if (BuildConfig.DEBUG) Log.d(TAG, "Retrieving access token"); String token = PreferenceManager.getDefaultSharedPreferences( - PodcastApp.getInstance()) + ClientConfig.applicationCallbacks.getApplicationInstance()) .getString(PREF_ACCESS_TOKEN, null); if (token != null) { if (BuildConfig.DEBUG) @@ -89,8 +88,8 @@ public class FlattrUtils { * Returns true if FLATTR_APP_KEY and FLATTR_APP_SECRET in BuildConfig are not null and not empty */ public static boolean hasAPICredentials() { - return StringUtils.isNotEmpty(BuildConfig.FLATTR_APP_KEY) - && StringUtils.isNotEmpty(BuildConfig.FLATTR_APP_SECRET); + return StringUtils.isNotEmpty(ClientConfig.flattrCallbacks.getFlattrAppKey()) + && StringUtils.isNotEmpty(ClientConfig.flattrCallbacks.getFlattrAppSecret()); } public static boolean hasToken() { @@ -101,7 +100,7 @@ public class FlattrUtils { if (BuildConfig.DEBUG) Log.d(TAG, "Storing token"); SharedPreferences.Editor editor = PreferenceManager - .getDefaultSharedPreferences(PodcastApp.getInstance()).edit(); + .getDefaultSharedPreferences(ClientConfig.applicationCallbacks.getApplicationInstance()).edit(); if (token != null) { editor.putString(PREF_ACCESS_TOKEN, token.getToken()); } else { @@ -220,7 +219,7 @@ public class FlattrUtils { * Opens a dialog that ask the user to either connect the app with flattr or to be redirected to * the thing's website. * If no API credentials are available, the user will immediately be redirected to the thing's website. - * */ + */ public static void showNoTokenDialogOrRedirect(final Context context, final String url) { if (hasAPICredentials()) { AlertDialog.Builder builder = new AlertDialog.Builder(context); @@ -231,8 +230,8 @@ public class FlattrUtils { @Override public void onClick(DialogInterface dialog, int which) { - context.startActivity(new Intent(context, - FlattrAuthActivity.class)); + context.startActivity( + ClientConfig.flattrCallbacks.getFlattrAuthenticationActivityIntent(context)); } } @@ -267,8 +266,8 @@ public class FlattrUtils { @Override public void onClick(DialogInterface dialog, int which) { - context.startActivity(new Intent(context, - FlattrAuthActivity.class)); + context.startActivity( + ClientConfig.flattrCallbacks.getFlattrAuthenticationActivityIntent(context)); } } diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java rename to core/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/gui/FeedItemUndoToken.java b/core/src/main/java/de/danoeh/antennapod/core/util/gui/FeedItemUndoToken.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/gui/FeedItemUndoToken.java rename to core/src/main/java/de/danoeh/antennapod/core/util/gui/FeedItemUndoToken.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java rename to core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java index a0bce1c79..9f3c4c6d5 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ChapterReader.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.util.id3reader; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.ID3Chapter; import de.danoeh.antennapod.core.util.id3reader.model.FrameHeader; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3Reader.java b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3Reader.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3Reader.java rename to core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3Reader.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java rename to core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/FrameHeader.java b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/FrameHeader.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/FrameHeader.java rename to core/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/FrameHeader.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/Header.java b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/Header.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/Header.java rename to core/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/Header.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/TagHeader.java b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/TagHeader.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/TagHeader.java rename to core/src/main/java/de/danoeh/antennapod/core/util/id3reader/model/TagHeader.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java rename to core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java rename to core/src/main/java/de/danoeh/antennapod/core/util/playback/ExternalMedia.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java rename to core/src/main/java/de/danoeh/antennapod/core/util/playback/IPlayer.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java similarity index 94% rename from app/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java rename to core/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java index a3a907e48..0650225f0 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.core.util.playback; import android.content.Context; import android.media.MediaPlayer; -import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.R; /** Utility class for MediaPlayer errors. */ public class MediaPlayerError { diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java rename to core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java rename to core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java index 35bd27057..5118d92ae 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java @@ -19,8 +19,8 @@ import android.widget.TextView; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.MediaType; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java similarity index 99% rename from app/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java rename to core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java index 5177bbca3..443ff0ad1 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java @@ -14,7 +14,7 @@ import org.jsoup.select.Elements; import java.util.regex.Matcher; import java.util.regex.Pattern; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.ShownotesProvider; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java rename to core/src/main/java/de/danoeh/antennapod/core/util/playback/VideoPlayer.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java b/core/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java rename to core/src/main/java/de/danoeh/antennapod/core/util/syndication/FeedDiscoverer.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java b/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java rename to core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentChapterReader.java b/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentChapterReader.java similarity index 98% rename from app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentChapterReader.java rename to core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentChapterReader.java index a6934c60e..c4961a3ab 100644 --- a/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentChapterReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentChapterReader.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.util.vorbiscommentreader; import android.util.Log; -import de.danoeh.antennapod.BuildConfig; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.VorbisCommentChapter; diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentHeader.java b/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentHeader.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentHeader.java rename to core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentHeader.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReader.java b/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReader.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReader.java rename to core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReader.java diff --git a/app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java b/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java similarity index 100% rename from app/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java rename to core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java diff --git a/app/src/main/res/drawable-hdpi-v11/ic_stat_antenna.png b/core/src/main/res/drawable-hdpi-v11/ic_stat_antenna.png similarity index 100% rename from app/src/main/res/drawable-hdpi-v11/ic_stat_antenna.png rename to core/src/main/res/drawable-hdpi-v11/ic_stat_antenna.png diff --git a/app/src/main/res/drawable-hdpi-v11/ic_stat_authentication.png b/core/src/main/res/drawable-hdpi-v11/ic_stat_authentication.png similarity index 100% rename from app/src/main/res/drawable-hdpi-v11/ic_stat_authentication.png rename to core/src/main/res/drawable-hdpi-v11/ic_stat_authentication.png diff --git a/app/src/main/res/drawable-hdpi-v11/stat_notify_sync.png b/core/src/main/res/drawable-hdpi-v11/stat_notify_sync.png similarity index 100% rename from app/src/main/res/drawable-hdpi-v11/stat_notify_sync.png rename to core/src/main/res/drawable-hdpi-v11/stat_notify_sync.png diff --git a/app/src/main/res/drawable-hdpi-v11/stat_notify_sync_error.png b/core/src/main/res/drawable-hdpi-v11/stat_notify_sync_error.png similarity index 100% rename from app/src/main/res/drawable-hdpi-v11/stat_notify_sync_error.png rename to core/src/main/res/drawable-hdpi-v11/stat_notify_sync_error.png diff --git a/app/src/main/res/drawable-hdpi/action_about.png b/core/src/main/res/drawable-hdpi/action_about.png similarity index 100% rename from app/src/main/res/drawable-hdpi/action_about.png rename to core/src/main/res/drawable-hdpi/action_about.png diff --git a/app/src/main/res/drawable-hdpi/action_about_dark.png b/core/src/main/res/drawable-hdpi/action_about_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/action_about_dark.png rename to core/src/main/res/drawable-hdpi/action_about_dark.png diff --git a/app/src/main/res/drawable-hdpi/action_search.png b/core/src/main/res/drawable-hdpi/action_search.png similarity index 100% rename from app/src/main/res/drawable-hdpi/action_search.png rename to core/src/main/res/drawable-hdpi/action_search.png diff --git a/app/src/main/res/drawable-hdpi/action_search_dark.png b/core/src/main/res/drawable-hdpi/action_search_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/action_search_dark.png rename to core/src/main/res/drawable-hdpi/action_search_dark.png diff --git a/app/src/main/res/drawable-hdpi/action_settings.png b/core/src/main/res/drawable-hdpi/action_settings.png similarity index 100% rename from app/src/main/res/drawable-hdpi/action_settings.png rename to core/src/main/res/drawable-hdpi/action_settings.png diff --git a/app/src/main/res/drawable-hdpi/action_settings_dark.png b/core/src/main/res/drawable-hdpi/action_settings_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/action_settings_dark.png rename to core/src/main/res/drawable-hdpi/action_settings_dark.png diff --git a/app/src/main/res/drawable-hdpi/action_stream.png b/core/src/main/res/drawable-hdpi/action_stream.png similarity index 100% rename from app/src/main/res/drawable-hdpi/action_stream.png rename to core/src/main/res/drawable-hdpi/action_stream.png diff --git a/app/src/main/res/drawable-hdpi/action_stream_dark.png b/core/src/main/res/drawable-hdpi/action_stream_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/action_stream_dark.png rename to core/src/main/res/drawable-hdpi/action_stream_dark.png diff --git a/app/src/main/res/drawable-hdpi/av_download.png b/core/src/main/res/drawable-hdpi/av_download.png similarity index 100% rename from app/src/main/res/drawable-hdpi/av_download.png rename to core/src/main/res/drawable-hdpi/av_download.png diff --git a/app/src/main/res/drawable-hdpi/av_download_dark.png b/core/src/main/res/drawable-hdpi/av_download_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/av_download_dark.png rename to core/src/main/res/drawable-hdpi/av_download_dark.png diff --git a/app/src/main/res/drawable-hdpi/av_fast_forward.png b/core/src/main/res/drawable-hdpi/av_fast_forward.png similarity index 100% rename from app/src/main/res/drawable-hdpi/av_fast_forward.png rename to core/src/main/res/drawable-hdpi/av_fast_forward.png diff --git a/app/src/main/res/drawable-hdpi/av_fast_forward_dark.png b/core/src/main/res/drawable-hdpi/av_fast_forward_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/av_fast_forward_dark.png rename to core/src/main/res/drawable-hdpi/av_fast_forward_dark.png diff --git a/app/src/main/res/drawable-hdpi/av_pause.png b/core/src/main/res/drawable-hdpi/av_pause.png similarity index 100% rename from app/src/main/res/drawable-hdpi/av_pause.png rename to core/src/main/res/drawable-hdpi/av_pause.png diff --git a/app/src/main/res/drawable-hdpi/av_pause_dark.png b/core/src/main/res/drawable-hdpi/av_pause_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/av_pause_dark.png rename to core/src/main/res/drawable-hdpi/av_pause_dark.png diff --git a/app/src/main/res/drawable-hdpi/av_play.png b/core/src/main/res/drawable-hdpi/av_play.png similarity index 100% rename from app/src/main/res/drawable-hdpi/av_play.png rename to core/src/main/res/drawable-hdpi/av_play.png diff --git a/app/src/main/res/drawable-hdpi/av_play_dark.png b/core/src/main/res/drawable-hdpi/av_play_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/av_play_dark.png rename to core/src/main/res/drawable-hdpi/av_play_dark.png diff --git a/app/src/main/res/drawable-hdpi/av_rewind.png b/core/src/main/res/drawable-hdpi/av_rewind.png similarity index 100% rename from app/src/main/res/drawable-hdpi/av_rewind.png rename to core/src/main/res/drawable-hdpi/av_rewind.png diff --git a/app/src/main/res/drawable-hdpi/av_rewind_dark.png b/core/src/main/res/drawable-hdpi/av_rewind_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/av_rewind_dark.png rename to core/src/main/res/drawable-hdpi/av_rewind_dark.png diff --git a/app/src/main/res/drawable-hdpi/content_discard.png b/core/src/main/res/drawable-hdpi/content_discard.png similarity index 100% rename from app/src/main/res/drawable-hdpi/content_discard.png rename to core/src/main/res/drawable-hdpi/content_discard.png diff --git a/app/src/main/res/drawable-hdpi/content_discard_dark.png b/core/src/main/res/drawable-hdpi/content_discard_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/content_discard_dark.png rename to core/src/main/res/drawable-hdpi/content_discard_dark.png diff --git a/app/src/main/res/drawable-hdpi/content_new.png b/core/src/main/res/drawable-hdpi/content_new.png similarity index 100% rename from app/src/main/res/drawable-hdpi/content_new.png rename to core/src/main/res/drawable-hdpi/content_new.png diff --git a/app/src/main/res/drawable-hdpi/content_new_dark.png b/core/src/main/res/drawable-hdpi/content_new_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/content_new_dark.png rename to core/src/main/res/drawable-hdpi/content_new_dark.png diff --git a/app/src/main/res/drawable-hdpi/default_cover.png b/core/src/main/res/drawable-hdpi/default_cover.png similarity index 100% rename from app/src/main/res/drawable-hdpi/default_cover.png rename to core/src/main/res/drawable-hdpi/default_cover.png diff --git a/app/src/main/res/drawable-hdpi/default_cover_dark.png b/core/src/main/res/drawable-hdpi/default_cover_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/default_cover_dark.png rename to core/src/main/res/drawable-hdpi/default_cover_dark.png diff --git a/app/src/main/res/drawable-hdpi/device_access_time.png b/core/src/main/res/drawable-hdpi/device_access_time.png similarity index 100% rename from app/src/main/res/drawable-hdpi/device_access_time.png rename to core/src/main/res/drawable-hdpi/device_access_time.png diff --git a/app/src/main/res/drawable-hdpi/device_access_time_dark.png b/core/src/main/res/drawable-hdpi/device_access_time_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/device_access_time_dark.png rename to core/src/main/res/drawable-hdpi/device_access_time_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_overflow.png b/core/src/main/res/drawable-hdpi/ic_action_overflow.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_overflow.png rename to core/src/main/res/drawable-hdpi/ic_action_overflow.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_overflow_dark.png b/core/src/main/res/drawable-hdpi/ic_action_overflow_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_overflow_dark.png rename to core/src/main/res/drawable-hdpi/ic_action_overflow_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_pause_over_video.png b/core/src/main/res/drawable-hdpi/ic_action_pause_over_video.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_pause_over_video.png rename to core/src/main/res/drawable-hdpi/ic_action_pause_over_video.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_play_over_video.png b/core/src/main/res/drawable-hdpi/ic_action_play_over_video.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_action_play_over_video.png rename to core/src/main/res/drawable-hdpi/ic_action_play_over_video.png diff --git a/app/src/main/res/drawable-hdpi/ic_drag_handle.png b/core/src/main/res/drawable-hdpi/ic_drag_handle.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_drag_handle.png rename to core/src/main/res/drawable-hdpi/ic_drag_handle.png diff --git a/app/src/main/res/drawable-hdpi/ic_drag_handle_dark.png b/core/src/main/res/drawable-hdpi/ic_drag_handle_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_drag_handle_dark.png rename to core/src/main/res/drawable-hdpi/ic_drag_handle_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_drawer.png b/core/src/main/res/drawable-hdpi/ic_drawer.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_drawer.png rename to core/src/main/res/drawable-hdpi/ic_drawer.png diff --git a/app/src/main/res/drawable-hdpi/ic_drawer_dark.png b/core/src/main/res/drawable-hdpi/ic_drawer_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_drawer_dark.png rename to core/src/main/res/drawable-hdpi/ic_drawer_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_launcher.png b/core/src/main/res/drawable-hdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_launcher.png rename to core/src/main/res/drawable-hdpi/ic_launcher.png diff --git a/app/src/main/res/drawable-hdpi/ic_new.png b/core/src/main/res/drawable-hdpi/ic_new.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_new.png rename to core/src/main/res/drawable-hdpi/ic_new.png diff --git a/app/src/main/res/drawable-hdpi/ic_new_dark.png b/core/src/main/res/drawable-hdpi/ic_new_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_new_dark.png rename to core/src/main/res/drawable-hdpi/ic_new_dark.png diff --git a/app/src/main/res/drawable-hdpi/ic_stat_antenna.png b/core/src/main/res/drawable-hdpi/ic_stat_antenna.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_stat_antenna.png rename to core/src/main/res/drawable-hdpi/ic_stat_antenna.png diff --git a/app/src/main/res/drawable-hdpi/ic_stat_authentication.png b/core/src/main/res/drawable-hdpi/ic_stat_authentication.png similarity index 100% rename from app/src/main/res/drawable-hdpi/ic_stat_authentication.png rename to core/src/main/res/drawable-hdpi/ic_stat_authentication.png diff --git a/app/src/main/res/drawable-hdpi/location_web_site.png b/core/src/main/res/drawable-hdpi/location_web_site.png similarity index 100% rename from app/src/main/res/drawable-hdpi/location_web_site.png rename to core/src/main/res/drawable-hdpi/location_web_site.png diff --git a/app/src/main/res/drawable-hdpi/location_web_site_dark.png b/core/src/main/res/drawable-hdpi/location_web_site_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/location_web_site_dark.png rename to core/src/main/res/drawable-hdpi/location_web_site_dark.png diff --git a/app/src/main/res/drawable-hdpi/navigation_accept.png b/core/src/main/res/drawable-hdpi/navigation_accept.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_accept.png rename to core/src/main/res/drawable-hdpi/navigation_accept.png diff --git a/app/src/main/res/drawable-hdpi/navigation_accept_dark.png b/core/src/main/res/drawable-hdpi/navigation_accept_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_accept_dark.png rename to core/src/main/res/drawable-hdpi/navigation_accept_dark.png diff --git a/app/src/main/res/drawable-hdpi/navigation_cancel.png b/core/src/main/res/drawable-hdpi/navigation_cancel.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_cancel.png rename to core/src/main/res/drawable-hdpi/navigation_cancel.png diff --git a/app/src/main/res/drawable-hdpi/navigation_cancel_dark.png b/core/src/main/res/drawable-hdpi/navigation_cancel_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_cancel_dark.png rename to core/src/main/res/drawable-hdpi/navigation_cancel_dark.png diff --git a/app/src/main/res/drawable-hdpi/navigation_chapters.png b/core/src/main/res/drawable-hdpi/navigation_chapters.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_chapters.png rename to core/src/main/res/drawable-hdpi/navigation_chapters.png diff --git a/app/src/main/res/drawable-hdpi/navigation_chapters_dark.png b/core/src/main/res/drawable-hdpi/navigation_chapters_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_chapters_dark.png rename to core/src/main/res/drawable-hdpi/navigation_chapters_dark.png diff --git a/app/src/main/res/drawable-hdpi/navigation_collapse.png b/core/src/main/res/drawable-hdpi/navigation_collapse.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_collapse.png rename to core/src/main/res/drawable-hdpi/navigation_collapse.png diff --git a/app/src/main/res/drawable-hdpi/navigation_collapse_dark.png b/core/src/main/res/drawable-hdpi/navigation_collapse_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_collapse_dark.png rename to core/src/main/res/drawable-hdpi/navigation_collapse_dark.png diff --git a/app/src/main/res/drawable-hdpi/navigation_expand.png b/core/src/main/res/drawable-hdpi/navigation_expand.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_expand.png rename to core/src/main/res/drawable-hdpi/navigation_expand.png diff --git a/app/src/main/res/drawable-hdpi/navigation_expand_dark.png b/core/src/main/res/drawable-hdpi/navigation_expand_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_expand_dark.png rename to core/src/main/res/drawable-hdpi/navigation_expand_dark.png diff --git a/app/src/main/res/drawable-hdpi/navigation_refresh.png b/core/src/main/res/drawable-hdpi/navigation_refresh.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_refresh.png rename to core/src/main/res/drawable-hdpi/navigation_refresh.png diff --git a/app/src/main/res/drawable-hdpi/navigation_refresh_dark.png b/core/src/main/res/drawable-hdpi/navigation_refresh_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_refresh_dark.png rename to core/src/main/res/drawable-hdpi/navigation_refresh_dark.png diff --git a/app/src/main/res/drawable-hdpi/navigation_shownotes.png b/core/src/main/res/drawable-hdpi/navigation_shownotes.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_shownotes.png rename to core/src/main/res/drawable-hdpi/navigation_shownotes.png diff --git a/app/src/main/res/drawable-hdpi/navigation_shownotes_dark.png b/core/src/main/res/drawable-hdpi/navigation_shownotes_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_shownotes_dark.png rename to core/src/main/res/drawable-hdpi/navigation_shownotes_dark.png diff --git a/app/src/main/res/drawable-hdpi/navigation_up.png b/core/src/main/res/drawable-hdpi/navigation_up.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_up.png rename to core/src/main/res/drawable-hdpi/navigation_up.png diff --git a/app/src/main/res/drawable-hdpi/navigation_up_dark.png b/core/src/main/res/drawable-hdpi/navigation_up_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/navigation_up_dark.png rename to core/src/main/res/drawable-hdpi/navigation_up_dark.png diff --git a/app/src/main/res/drawable-hdpi/social_share.png b/core/src/main/res/drawable-hdpi/social_share.png similarity index 100% rename from app/src/main/res/drawable-hdpi/social_share.png rename to core/src/main/res/drawable-hdpi/social_share.png diff --git a/app/src/main/res/drawable-hdpi/social_share_dark.png b/core/src/main/res/drawable-hdpi/social_share_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/social_share_dark.png rename to core/src/main/res/drawable-hdpi/social_share_dark.png diff --git a/app/src/main/res/drawable-hdpi/spinner_button.9.png b/core/src/main/res/drawable-hdpi/spinner_button.9.png similarity index 100% rename from app/src/main/res/drawable-hdpi/spinner_button.9.png rename to core/src/main/res/drawable-hdpi/spinner_button.9.png diff --git a/app/src/main/res/drawable-hdpi/spinner_button_dark.9.png b/core/src/main/res/drawable-hdpi/spinner_button_dark.9.png similarity index 100% rename from app/src/main/res/drawable-hdpi/spinner_button_dark.9.png rename to core/src/main/res/drawable-hdpi/spinner_button_dark.9.png diff --git a/app/src/main/res/drawable-hdpi/stat_notify_sync.png b/core/src/main/res/drawable-hdpi/stat_notify_sync.png similarity index 100% rename from app/src/main/res/drawable-hdpi/stat_notify_sync.png rename to core/src/main/res/drawable-hdpi/stat_notify_sync.png diff --git a/app/src/main/res/drawable-hdpi/stat_notify_sync_error.png b/core/src/main/res/drawable-hdpi/stat_notify_sync_error.png similarity index 100% rename from app/src/main/res/drawable-hdpi/stat_notify_sync_error.png rename to core/src/main/res/drawable-hdpi/stat_notify_sync_error.png diff --git a/app/src/main/res/drawable-hdpi/stat_playlist.png b/core/src/main/res/drawable-hdpi/stat_playlist.png similarity index 100% rename from app/src/main/res/drawable-hdpi/stat_playlist.png rename to core/src/main/res/drawable-hdpi/stat_playlist.png diff --git a/app/src/main/res/drawable-hdpi/stat_playlist_dark.png b/core/src/main/res/drawable-hdpi/stat_playlist_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/stat_playlist_dark.png rename to core/src/main/res/drawable-hdpi/stat_playlist_dark.png diff --git a/app/src/main/res/drawable-hdpi/type_audio.png b/core/src/main/res/drawable-hdpi/type_audio.png similarity index 100% rename from app/src/main/res/drawable-hdpi/type_audio.png rename to core/src/main/res/drawable-hdpi/type_audio.png diff --git a/app/src/main/res/drawable-hdpi/type_audio_dark.png b/core/src/main/res/drawable-hdpi/type_audio_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/type_audio_dark.png rename to core/src/main/res/drawable-hdpi/type_audio_dark.png diff --git a/app/src/main/res/drawable-hdpi/type_video.png b/core/src/main/res/drawable-hdpi/type_video.png similarity index 100% rename from app/src/main/res/drawable-hdpi/type_video.png rename to core/src/main/res/drawable-hdpi/type_video.png diff --git a/app/src/main/res/drawable-hdpi/type_video_dark.png b/core/src/main/res/drawable-hdpi/type_video_dark.png similarity index 100% rename from app/src/main/res/drawable-hdpi/type_video_dark.png rename to core/src/main/res/drawable-hdpi/type_video_dark.png diff --git a/app/src/main/res/drawable-ldpi-v11/ic_stat_antenna.png b/core/src/main/res/drawable-ldpi-v11/ic_stat_antenna.png similarity index 100% rename from app/src/main/res/drawable-ldpi-v11/ic_stat_antenna.png rename to core/src/main/res/drawable-ldpi-v11/ic_stat_antenna.png diff --git a/app/src/main/res/drawable-ldpi/action_stream.png b/core/src/main/res/drawable-ldpi/action_stream.png similarity index 100% rename from app/src/main/res/drawable-ldpi/action_stream.png rename to core/src/main/res/drawable-ldpi/action_stream.png diff --git a/app/src/main/res/drawable-ldpi/action_stream_dark.png b/core/src/main/res/drawable-ldpi/action_stream_dark.png similarity index 100% rename from app/src/main/res/drawable-ldpi/action_stream_dark.png rename to core/src/main/res/drawable-ldpi/action_stream_dark.png diff --git a/app/src/main/res/drawable-ldpi/ic_launcher.png b/core/src/main/res/drawable-ldpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-ldpi/ic_launcher.png rename to core/src/main/res/drawable-ldpi/ic_launcher.png diff --git a/app/src/main/res/drawable-ldpi/ic_stat_antenna.png b/core/src/main/res/drawable-ldpi/ic_stat_antenna.png similarity index 100% rename from app/src/main/res/drawable-ldpi/ic_stat_antenna.png rename to core/src/main/res/drawable-ldpi/ic_stat_antenna.png diff --git a/app/src/main/res/drawable-ldpi/stat_playlist.png b/core/src/main/res/drawable-ldpi/stat_playlist.png similarity index 100% rename from app/src/main/res/drawable-ldpi/stat_playlist.png rename to core/src/main/res/drawable-ldpi/stat_playlist.png diff --git a/app/src/main/res/drawable-ldpi/stat_playlist_dark.png b/core/src/main/res/drawable-ldpi/stat_playlist_dark.png similarity index 100% rename from app/src/main/res/drawable-ldpi/stat_playlist_dark.png rename to core/src/main/res/drawable-ldpi/stat_playlist_dark.png diff --git a/app/src/main/res/drawable-mdpi-v11/ic_stat_antenna.png b/core/src/main/res/drawable-mdpi-v11/ic_stat_antenna.png similarity index 100% rename from app/src/main/res/drawable-mdpi-v11/ic_stat_antenna.png rename to core/src/main/res/drawable-mdpi-v11/ic_stat_antenna.png diff --git a/app/src/main/res/drawable-mdpi-v11/ic_stat_authentication.png b/core/src/main/res/drawable-mdpi-v11/ic_stat_authentication.png similarity index 100% rename from app/src/main/res/drawable-mdpi-v11/ic_stat_authentication.png rename to core/src/main/res/drawable-mdpi-v11/ic_stat_authentication.png diff --git a/app/src/main/res/drawable-mdpi-v11/stat_notify_sync.png b/core/src/main/res/drawable-mdpi-v11/stat_notify_sync.png similarity index 100% rename from app/src/main/res/drawable-mdpi-v11/stat_notify_sync.png rename to core/src/main/res/drawable-mdpi-v11/stat_notify_sync.png diff --git a/app/src/main/res/drawable-mdpi-v11/stat_notify_sync_error.png b/core/src/main/res/drawable-mdpi-v11/stat_notify_sync_error.png similarity index 100% rename from app/src/main/res/drawable-mdpi-v11/stat_notify_sync_error.png rename to core/src/main/res/drawable-mdpi-v11/stat_notify_sync_error.png diff --git a/app/src/main/res/drawable-mdpi/action_about.png b/core/src/main/res/drawable-mdpi/action_about.png similarity index 100% rename from app/src/main/res/drawable-mdpi/action_about.png rename to core/src/main/res/drawable-mdpi/action_about.png diff --git a/app/src/main/res/drawable-mdpi/action_about_dark.png b/core/src/main/res/drawable-mdpi/action_about_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/action_about_dark.png rename to core/src/main/res/drawable-mdpi/action_about_dark.png diff --git a/app/src/main/res/drawable-mdpi/action_search.png b/core/src/main/res/drawable-mdpi/action_search.png similarity index 100% rename from app/src/main/res/drawable-mdpi/action_search.png rename to core/src/main/res/drawable-mdpi/action_search.png diff --git a/app/src/main/res/drawable-mdpi/action_search_dark.png b/core/src/main/res/drawable-mdpi/action_search_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/action_search_dark.png rename to core/src/main/res/drawable-mdpi/action_search_dark.png diff --git a/app/src/main/res/drawable-mdpi/action_settings.png b/core/src/main/res/drawable-mdpi/action_settings.png similarity index 100% rename from app/src/main/res/drawable-mdpi/action_settings.png rename to core/src/main/res/drawable-mdpi/action_settings.png diff --git a/app/src/main/res/drawable-mdpi/action_settings_dark.png b/core/src/main/res/drawable-mdpi/action_settings_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/action_settings_dark.png rename to core/src/main/res/drawable-mdpi/action_settings_dark.png diff --git a/app/src/main/res/drawable-mdpi/action_stream.png b/core/src/main/res/drawable-mdpi/action_stream.png similarity index 100% rename from app/src/main/res/drawable-mdpi/action_stream.png rename to core/src/main/res/drawable-mdpi/action_stream.png diff --git a/app/src/main/res/drawable-mdpi/action_stream_dark.png b/core/src/main/res/drawable-mdpi/action_stream_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/action_stream_dark.png rename to core/src/main/res/drawable-mdpi/action_stream_dark.png diff --git a/app/src/main/res/drawable-mdpi/av_download.png b/core/src/main/res/drawable-mdpi/av_download.png similarity index 100% rename from app/src/main/res/drawable-mdpi/av_download.png rename to core/src/main/res/drawable-mdpi/av_download.png diff --git a/app/src/main/res/drawable-mdpi/av_download_dark.png b/core/src/main/res/drawable-mdpi/av_download_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/av_download_dark.png rename to core/src/main/res/drawable-mdpi/av_download_dark.png diff --git a/app/src/main/res/drawable-mdpi/av_fast_forward.png b/core/src/main/res/drawable-mdpi/av_fast_forward.png similarity index 100% rename from app/src/main/res/drawable-mdpi/av_fast_forward.png rename to core/src/main/res/drawable-mdpi/av_fast_forward.png diff --git a/app/src/main/res/drawable-mdpi/av_fast_forward_dark.png b/core/src/main/res/drawable-mdpi/av_fast_forward_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/av_fast_forward_dark.png rename to core/src/main/res/drawable-mdpi/av_fast_forward_dark.png diff --git a/app/src/main/res/drawable-mdpi/av_pause.png b/core/src/main/res/drawable-mdpi/av_pause.png similarity index 100% rename from app/src/main/res/drawable-mdpi/av_pause.png rename to core/src/main/res/drawable-mdpi/av_pause.png diff --git a/app/src/main/res/drawable-mdpi/av_pause_dark.png b/core/src/main/res/drawable-mdpi/av_pause_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/av_pause_dark.png rename to core/src/main/res/drawable-mdpi/av_pause_dark.png diff --git a/app/src/main/res/drawable-mdpi/av_play.png b/core/src/main/res/drawable-mdpi/av_play.png similarity index 100% rename from app/src/main/res/drawable-mdpi/av_play.png rename to core/src/main/res/drawable-mdpi/av_play.png diff --git a/app/src/main/res/drawable-mdpi/av_play_dark.png b/core/src/main/res/drawable-mdpi/av_play_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/av_play_dark.png rename to core/src/main/res/drawable-mdpi/av_play_dark.png diff --git a/app/src/main/res/drawable-mdpi/av_rewind.png b/core/src/main/res/drawable-mdpi/av_rewind.png similarity index 100% rename from app/src/main/res/drawable-mdpi/av_rewind.png rename to core/src/main/res/drawable-mdpi/av_rewind.png diff --git a/app/src/main/res/drawable-mdpi/av_rewind_dark.png b/core/src/main/res/drawable-mdpi/av_rewind_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/av_rewind_dark.png rename to core/src/main/res/drawable-mdpi/av_rewind_dark.png diff --git a/app/src/main/res/drawable-mdpi/content_discard.png b/core/src/main/res/drawable-mdpi/content_discard.png similarity index 100% rename from app/src/main/res/drawable-mdpi/content_discard.png rename to core/src/main/res/drawable-mdpi/content_discard.png diff --git a/app/src/main/res/drawable-mdpi/content_discard_dark.png b/core/src/main/res/drawable-mdpi/content_discard_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/content_discard_dark.png rename to core/src/main/res/drawable-mdpi/content_discard_dark.png diff --git a/app/src/main/res/drawable-mdpi/content_new.png b/core/src/main/res/drawable-mdpi/content_new.png similarity index 100% rename from app/src/main/res/drawable-mdpi/content_new.png rename to core/src/main/res/drawable-mdpi/content_new.png diff --git a/app/src/main/res/drawable-mdpi/content_new_dark.png b/core/src/main/res/drawable-mdpi/content_new_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/content_new_dark.png rename to core/src/main/res/drawable-mdpi/content_new_dark.png diff --git a/app/src/main/res/drawable-mdpi/default_cover.png b/core/src/main/res/drawable-mdpi/default_cover.png similarity index 100% rename from app/src/main/res/drawable-mdpi/default_cover.png rename to core/src/main/res/drawable-mdpi/default_cover.png diff --git a/app/src/main/res/drawable-mdpi/default_cover_dark.png b/core/src/main/res/drawable-mdpi/default_cover_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/default_cover_dark.png rename to core/src/main/res/drawable-mdpi/default_cover_dark.png diff --git a/app/src/main/res/drawable-mdpi/device_access_time.png b/core/src/main/res/drawable-mdpi/device_access_time.png similarity index 100% rename from app/src/main/res/drawable-mdpi/device_access_time.png rename to core/src/main/res/drawable-mdpi/device_access_time.png diff --git a/app/src/main/res/drawable-mdpi/device_access_time_dark.png b/core/src/main/res/drawable-mdpi/device_access_time_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/device_access_time_dark.png rename to core/src/main/res/drawable-mdpi/device_access_time_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_overflow.png b/core/src/main/res/drawable-mdpi/ic_action_overflow.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_overflow.png rename to core/src/main/res/drawable-mdpi/ic_action_overflow.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_overflow_dark.png b/core/src/main/res/drawable-mdpi/ic_action_overflow_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_overflow_dark.png rename to core/src/main/res/drawable-mdpi/ic_action_overflow_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_pause_over_video.png b/core/src/main/res/drawable-mdpi/ic_action_pause_over_video.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_pause_over_video.png rename to core/src/main/res/drawable-mdpi/ic_action_pause_over_video.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_play_over_video.png b/core/src/main/res/drawable-mdpi/ic_action_play_over_video.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_action_play_over_video.png rename to core/src/main/res/drawable-mdpi/ic_action_play_over_video.png diff --git a/app/src/main/res/drawable-mdpi/ic_drag_handle.png b/core/src/main/res/drawable-mdpi/ic_drag_handle.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_drag_handle.png rename to core/src/main/res/drawable-mdpi/ic_drag_handle.png diff --git a/app/src/main/res/drawable-mdpi/ic_drag_handle_dark.png b/core/src/main/res/drawable-mdpi/ic_drag_handle_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_drag_handle_dark.png rename to core/src/main/res/drawable-mdpi/ic_drag_handle_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_drawer.png b/core/src/main/res/drawable-mdpi/ic_drawer.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_drawer.png rename to core/src/main/res/drawable-mdpi/ic_drawer.png diff --git a/app/src/main/res/drawable-mdpi/ic_drawer_dark.png b/core/src/main/res/drawable-mdpi/ic_drawer_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_drawer_dark.png rename to core/src/main/res/drawable-mdpi/ic_drawer_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_launcher.png b/core/src/main/res/drawable-mdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_launcher.png rename to core/src/main/res/drawable-mdpi/ic_launcher.png diff --git a/app/src/main/res/drawable-mdpi/ic_new.png b/core/src/main/res/drawable-mdpi/ic_new.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_new.png rename to core/src/main/res/drawable-mdpi/ic_new.png diff --git a/app/src/main/res/drawable-mdpi/ic_new_dark.png b/core/src/main/res/drawable-mdpi/ic_new_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_new_dark.png rename to core/src/main/res/drawable-mdpi/ic_new_dark.png diff --git a/app/src/main/res/drawable-mdpi/ic_stat_antenna.png b/core/src/main/res/drawable-mdpi/ic_stat_antenna.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_stat_antenna.png rename to core/src/main/res/drawable-mdpi/ic_stat_antenna.png diff --git a/app/src/main/res/drawable-mdpi/ic_stat_authentication.png b/core/src/main/res/drawable-mdpi/ic_stat_authentication.png similarity index 100% rename from app/src/main/res/drawable-mdpi/ic_stat_authentication.png rename to core/src/main/res/drawable-mdpi/ic_stat_authentication.png diff --git a/app/src/main/res/drawable-mdpi/location_web_site.png b/core/src/main/res/drawable-mdpi/location_web_site.png similarity index 100% rename from app/src/main/res/drawable-mdpi/location_web_site.png rename to core/src/main/res/drawable-mdpi/location_web_site.png diff --git a/app/src/main/res/drawable-mdpi/location_web_site_dark.png b/core/src/main/res/drawable-mdpi/location_web_site_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/location_web_site_dark.png rename to core/src/main/res/drawable-mdpi/location_web_site_dark.png diff --git a/app/src/main/res/drawable-mdpi/navigation_accept.png b/core/src/main/res/drawable-mdpi/navigation_accept.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_accept.png rename to core/src/main/res/drawable-mdpi/navigation_accept.png diff --git a/app/src/main/res/drawable-mdpi/navigation_accept_dark.png b/core/src/main/res/drawable-mdpi/navigation_accept_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_accept_dark.png rename to core/src/main/res/drawable-mdpi/navigation_accept_dark.png diff --git a/app/src/main/res/drawable-mdpi/navigation_cancel.png b/core/src/main/res/drawable-mdpi/navigation_cancel.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_cancel.png rename to core/src/main/res/drawable-mdpi/navigation_cancel.png diff --git a/app/src/main/res/drawable-mdpi/navigation_cancel_dark.png b/core/src/main/res/drawable-mdpi/navigation_cancel_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_cancel_dark.png rename to core/src/main/res/drawable-mdpi/navigation_cancel_dark.png diff --git a/app/src/main/res/drawable-mdpi/navigation_chapters.png b/core/src/main/res/drawable-mdpi/navigation_chapters.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_chapters.png rename to core/src/main/res/drawable-mdpi/navigation_chapters.png diff --git a/app/src/main/res/drawable-mdpi/navigation_chapters_dark.png b/core/src/main/res/drawable-mdpi/navigation_chapters_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_chapters_dark.png rename to core/src/main/res/drawable-mdpi/navigation_chapters_dark.png diff --git a/app/src/main/res/drawable-mdpi/navigation_collapse.png b/core/src/main/res/drawable-mdpi/navigation_collapse.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_collapse.png rename to core/src/main/res/drawable-mdpi/navigation_collapse.png diff --git a/app/src/main/res/drawable-mdpi/navigation_collapse_dark.png b/core/src/main/res/drawable-mdpi/navigation_collapse_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_collapse_dark.png rename to core/src/main/res/drawable-mdpi/navigation_collapse_dark.png diff --git a/app/src/main/res/drawable-mdpi/navigation_expand.png b/core/src/main/res/drawable-mdpi/navigation_expand.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_expand.png rename to core/src/main/res/drawable-mdpi/navigation_expand.png diff --git a/app/src/main/res/drawable-mdpi/navigation_expand_dark.png b/core/src/main/res/drawable-mdpi/navigation_expand_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_expand_dark.png rename to core/src/main/res/drawable-mdpi/navigation_expand_dark.png diff --git a/app/src/main/res/drawable-mdpi/navigation_refresh.png b/core/src/main/res/drawable-mdpi/navigation_refresh.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_refresh.png rename to core/src/main/res/drawable-mdpi/navigation_refresh.png diff --git a/app/src/main/res/drawable-mdpi/navigation_refresh_dark.png b/core/src/main/res/drawable-mdpi/navigation_refresh_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_refresh_dark.png rename to core/src/main/res/drawable-mdpi/navigation_refresh_dark.png diff --git a/app/src/main/res/drawable-mdpi/navigation_shownotes.png b/core/src/main/res/drawable-mdpi/navigation_shownotes.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_shownotes.png rename to core/src/main/res/drawable-mdpi/navigation_shownotes.png diff --git a/app/src/main/res/drawable-mdpi/navigation_shownotes_dark.png b/core/src/main/res/drawable-mdpi/navigation_shownotes_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_shownotes_dark.png rename to core/src/main/res/drawable-mdpi/navigation_shownotes_dark.png diff --git a/app/src/main/res/drawable-mdpi/navigation_up.png b/core/src/main/res/drawable-mdpi/navigation_up.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_up.png rename to core/src/main/res/drawable-mdpi/navigation_up.png diff --git a/app/src/main/res/drawable-mdpi/navigation_up_dark.png b/core/src/main/res/drawable-mdpi/navigation_up_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/navigation_up_dark.png rename to core/src/main/res/drawable-mdpi/navigation_up_dark.png diff --git a/app/src/main/res/drawable-mdpi/social_share.png b/core/src/main/res/drawable-mdpi/social_share.png similarity index 100% rename from app/src/main/res/drawable-mdpi/social_share.png rename to core/src/main/res/drawable-mdpi/social_share.png diff --git a/app/src/main/res/drawable-mdpi/social_share_dark.png b/core/src/main/res/drawable-mdpi/social_share_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/social_share_dark.png rename to core/src/main/res/drawable-mdpi/social_share_dark.png diff --git a/app/src/main/res/drawable-mdpi/spinner_button.9.png b/core/src/main/res/drawable-mdpi/spinner_button.9.png similarity index 100% rename from app/src/main/res/drawable-mdpi/spinner_button.9.png rename to core/src/main/res/drawable-mdpi/spinner_button.9.png diff --git a/app/src/main/res/drawable-mdpi/spinner_button_dark.9.png b/core/src/main/res/drawable-mdpi/spinner_button_dark.9.png similarity index 100% rename from app/src/main/res/drawable-mdpi/spinner_button_dark.9.png rename to core/src/main/res/drawable-mdpi/spinner_button_dark.9.png diff --git a/app/src/main/res/drawable-mdpi/stat_notify_sync.png b/core/src/main/res/drawable-mdpi/stat_notify_sync.png similarity index 100% rename from app/src/main/res/drawable-mdpi/stat_notify_sync.png rename to core/src/main/res/drawable-mdpi/stat_notify_sync.png diff --git a/app/src/main/res/drawable-mdpi/stat_notify_sync_error.png b/core/src/main/res/drawable-mdpi/stat_notify_sync_error.png similarity index 100% rename from app/src/main/res/drawable-mdpi/stat_notify_sync_error.png rename to core/src/main/res/drawable-mdpi/stat_notify_sync_error.png diff --git a/app/src/main/res/drawable-mdpi/stat_playlist.png b/core/src/main/res/drawable-mdpi/stat_playlist.png similarity index 100% rename from app/src/main/res/drawable-mdpi/stat_playlist.png rename to core/src/main/res/drawable-mdpi/stat_playlist.png diff --git a/app/src/main/res/drawable-mdpi/stat_playlist_dark.png b/core/src/main/res/drawable-mdpi/stat_playlist_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/stat_playlist_dark.png rename to core/src/main/res/drawable-mdpi/stat_playlist_dark.png diff --git a/app/src/main/res/drawable-mdpi/type_audio.png b/core/src/main/res/drawable-mdpi/type_audio.png similarity index 100% rename from app/src/main/res/drawable-mdpi/type_audio.png rename to core/src/main/res/drawable-mdpi/type_audio.png diff --git a/app/src/main/res/drawable-mdpi/type_audio_dark.png b/core/src/main/res/drawable-mdpi/type_audio_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/type_audio_dark.png rename to core/src/main/res/drawable-mdpi/type_audio_dark.png diff --git a/app/src/main/res/drawable-mdpi/type_video.png b/core/src/main/res/drawable-mdpi/type_video.png similarity index 100% rename from app/src/main/res/drawable-mdpi/type_video.png rename to core/src/main/res/drawable-mdpi/type_video.png diff --git a/app/src/main/res/drawable-mdpi/type_video_dark.png b/core/src/main/res/drawable-mdpi/type_video_dark.png similarity index 100% rename from app/src/main/res/drawable-mdpi/type_video_dark.png rename to core/src/main/res/drawable-mdpi/type_video_dark.png diff --git a/app/src/main/res/drawable-xhdpi-v11/ic_stat_antenna.png b/core/src/main/res/drawable-xhdpi-v11/ic_stat_antenna.png similarity index 100% rename from app/src/main/res/drawable-xhdpi-v11/ic_stat_antenna.png rename to core/src/main/res/drawable-xhdpi-v11/ic_stat_antenna.png diff --git a/app/src/main/res/drawable-xhdpi-v11/ic_stat_authentication.png b/core/src/main/res/drawable-xhdpi-v11/ic_stat_authentication.png similarity index 100% rename from app/src/main/res/drawable-xhdpi-v11/ic_stat_authentication.png rename to core/src/main/res/drawable-xhdpi-v11/ic_stat_authentication.png diff --git a/app/src/main/res/drawable-xhdpi-v11/stat_notify_sync.png b/core/src/main/res/drawable-xhdpi-v11/stat_notify_sync.png similarity index 100% rename from app/src/main/res/drawable-xhdpi-v11/stat_notify_sync.png rename to core/src/main/res/drawable-xhdpi-v11/stat_notify_sync.png diff --git a/app/src/main/res/drawable-xhdpi-v11/stat_notify_sync_error.png b/core/src/main/res/drawable-xhdpi-v11/stat_notify_sync_error.png similarity index 100% rename from app/src/main/res/drawable-xhdpi-v11/stat_notify_sync_error.png rename to core/src/main/res/drawable-xhdpi-v11/stat_notify_sync_error.png diff --git a/app/src/main/res/drawable-xhdpi/action_about.png b/core/src/main/res/drawable-xhdpi/action_about.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/action_about.png rename to core/src/main/res/drawable-xhdpi/action_about.png diff --git a/app/src/main/res/drawable-xhdpi/action_about_dark.png b/core/src/main/res/drawable-xhdpi/action_about_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/action_about_dark.png rename to core/src/main/res/drawable-xhdpi/action_about_dark.png diff --git a/app/src/main/res/drawable-xhdpi/action_search.png b/core/src/main/res/drawable-xhdpi/action_search.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/action_search.png rename to core/src/main/res/drawable-xhdpi/action_search.png diff --git a/app/src/main/res/drawable-xhdpi/action_search_dark.png b/core/src/main/res/drawable-xhdpi/action_search_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/action_search_dark.png rename to core/src/main/res/drawable-xhdpi/action_search_dark.png diff --git a/app/src/main/res/drawable-xhdpi/action_settings.png b/core/src/main/res/drawable-xhdpi/action_settings.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/action_settings.png rename to core/src/main/res/drawable-xhdpi/action_settings.png diff --git a/app/src/main/res/drawable-xhdpi/action_settings_dark.png b/core/src/main/res/drawable-xhdpi/action_settings_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/action_settings_dark.png rename to core/src/main/res/drawable-xhdpi/action_settings_dark.png diff --git a/app/src/main/res/drawable-xhdpi/action_stream.png b/core/src/main/res/drawable-xhdpi/action_stream.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/action_stream.png rename to core/src/main/res/drawable-xhdpi/action_stream.png diff --git a/app/src/main/res/drawable-xhdpi/action_stream_dark.png b/core/src/main/res/drawable-xhdpi/action_stream_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/action_stream_dark.png rename to core/src/main/res/drawable-xhdpi/action_stream_dark.png diff --git a/app/src/main/res/drawable-xhdpi/av_download.png b/core/src/main/res/drawable-xhdpi/av_download.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/av_download.png rename to core/src/main/res/drawable-xhdpi/av_download.png diff --git a/app/src/main/res/drawable-xhdpi/av_download_dark.png b/core/src/main/res/drawable-xhdpi/av_download_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/av_download_dark.png rename to core/src/main/res/drawable-xhdpi/av_download_dark.png diff --git a/app/src/main/res/drawable-xhdpi/av_fast_forward.png b/core/src/main/res/drawable-xhdpi/av_fast_forward.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/av_fast_forward.png rename to core/src/main/res/drawable-xhdpi/av_fast_forward.png diff --git a/app/src/main/res/drawable-xhdpi/av_fast_forward_dark.png b/core/src/main/res/drawable-xhdpi/av_fast_forward_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/av_fast_forward_dark.png rename to core/src/main/res/drawable-xhdpi/av_fast_forward_dark.png diff --git a/app/src/main/res/drawable-xhdpi/av_pause.png b/core/src/main/res/drawable-xhdpi/av_pause.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/av_pause.png rename to core/src/main/res/drawable-xhdpi/av_pause.png diff --git a/app/src/main/res/drawable-xhdpi/av_pause_dark.png b/core/src/main/res/drawable-xhdpi/av_pause_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/av_pause_dark.png rename to core/src/main/res/drawable-xhdpi/av_pause_dark.png diff --git a/app/src/main/res/drawable-xhdpi/av_play.png b/core/src/main/res/drawable-xhdpi/av_play.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/av_play.png rename to core/src/main/res/drawable-xhdpi/av_play.png diff --git a/app/src/main/res/drawable-xhdpi/av_play_dark.png b/core/src/main/res/drawable-xhdpi/av_play_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/av_play_dark.png rename to core/src/main/res/drawable-xhdpi/av_play_dark.png diff --git a/app/src/main/res/drawable-xhdpi/av_rewind.png b/core/src/main/res/drawable-xhdpi/av_rewind.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/av_rewind.png rename to core/src/main/res/drawable-xhdpi/av_rewind.png diff --git a/app/src/main/res/drawable-xhdpi/av_rewind_dark.png b/core/src/main/res/drawable-xhdpi/av_rewind_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/av_rewind_dark.png rename to core/src/main/res/drawable-xhdpi/av_rewind_dark.png diff --git a/app/src/main/res/drawable-xhdpi/content_discard.png b/core/src/main/res/drawable-xhdpi/content_discard.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/content_discard.png rename to core/src/main/res/drawable-xhdpi/content_discard.png diff --git a/app/src/main/res/drawable-xhdpi/content_discard_dark.png b/core/src/main/res/drawable-xhdpi/content_discard_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/content_discard_dark.png rename to core/src/main/res/drawable-xhdpi/content_discard_dark.png diff --git a/app/src/main/res/drawable-xhdpi/content_new.png b/core/src/main/res/drawable-xhdpi/content_new.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/content_new.png rename to core/src/main/res/drawable-xhdpi/content_new.png diff --git a/app/src/main/res/drawable-xhdpi/content_new_dark.png b/core/src/main/res/drawable-xhdpi/content_new_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/content_new_dark.png rename to core/src/main/res/drawable-xhdpi/content_new_dark.png diff --git a/app/src/main/res/drawable-xhdpi/content_remove.png b/core/src/main/res/drawable-xhdpi/content_remove.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/content_remove.png rename to core/src/main/res/drawable-xhdpi/content_remove.png diff --git a/app/src/main/res/drawable-xhdpi/content_remove_dark.png b/core/src/main/res/drawable-xhdpi/content_remove_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/content_remove_dark.png rename to core/src/main/res/drawable-xhdpi/content_remove_dark.png diff --git a/app/src/main/res/drawable-xhdpi/default_cover.png b/core/src/main/res/drawable-xhdpi/default_cover.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/default_cover.png rename to core/src/main/res/drawable-xhdpi/default_cover.png diff --git a/app/src/main/res/drawable-xhdpi/default_cover_dark.png b/core/src/main/res/drawable-xhdpi/default_cover_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/default_cover_dark.png rename to core/src/main/res/drawable-xhdpi/default_cover_dark.png diff --git a/app/src/main/res/drawable-xhdpi/device_access_time.png b/core/src/main/res/drawable-xhdpi/device_access_time.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/device_access_time.png rename to core/src/main/res/drawable-xhdpi/device_access_time.png diff --git a/app/src/main/res/drawable-xhdpi/device_access_time_dark.png b/core/src/main/res/drawable-xhdpi/device_access_time_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/device_access_time_dark.png rename to core/src/main/res/drawable-xhdpi/device_access_time_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_overflow.png b/core/src/main/res/drawable-xhdpi/ic_action_overflow.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_overflow.png rename to core/src/main/res/drawable-xhdpi/ic_action_overflow.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_overflow_dark.png b/core/src/main/res/drawable-xhdpi/ic_action_overflow_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_overflow_dark.png rename to core/src/main/res/drawable-xhdpi/ic_action_overflow_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_pause_over_video.png b/core/src/main/res/drawable-xhdpi/ic_action_pause_over_video.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_pause_over_video.png rename to core/src/main/res/drawable-xhdpi/ic_action_pause_over_video.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_play_over_video.png b/core/src/main/res/drawable-xhdpi/ic_action_play_over_video.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_action_play_over_video.png rename to core/src/main/res/drawable-xhdpi/ic_action_play_over_video.png diff --git a/app/src/main/res/drawable-xhdpi/ic_drag_handle.png b/core/src/main/res/drawable-xhdpi/ic_drag_handle.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_drag_handle.png rename to core/src/main/res/drawable-xhdpi/ic_drag_handle.png diff --git a/app/src/main/res/drawable-xhdpi/ic_drag_handle_dark.png b/core/src/main/res/drawable-xhdpi/ic_drag_handle_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_drag_handle_dark.png rename to core/src/main/res/drawable-xhdpi/ic_drag_handle_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_drawer.png b/core/src/main/res/drawable-xhdpi/ic_drawer.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_drawer.png rename to core/src/main/res/drawable-xhdpi/ic_drawer.png diff --git a/app/src/main/res/drawable-xhdpi/ic_drawer_dark.png b/core/src/main/res/drawable-xhdpi/ic_drawer_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_drawer_dark.png rename to core/src/main/res/drawable-xhdpi/ic_drawer_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher.png b/core/src/main/res/drawable-xhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_launcher.png rename to core/src/main/res/drawable-xhdpi/ic_launcher.png diff --git a/app/src/main/res/drawable-xhdpi/ic_new.png b/core/src/main/res/drawable-xhdpi/ic_new.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_new.png rename to core/src/main/res/drawable-xhdpi/ic_new.png diff --git a/app/src/main/res/drawable-xhdpi/ic_new_dark.png b/core/src/main/res/drawable-xhdpi/ic_new_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_new_dark.png rename to core/src/main/res/drawable-xhdpi/ic_new_dark.png diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_antenna.png b/core/src/main/res/drawable-xhdpi/ic_stat_antenna.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_stat_antenna.png rename to core/src/main/res/drawable-xhdpi/ic_stat_antenna.png diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_authentication.png b/core/src/main/res/drawable-xhdpi/ic_stat_authentication.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_stat_authentication.png rename to core/src/main/res/drawable-xhdpi/ic_stat_authentication.png diff --git a/app/src/main/res/drawable-xhdpi/ic_undobar_undo.png b/core/src/main/res/drawable-xhdpi/ic_undobar_undo.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_undobar_undo.png rename to core/src/main/res/drawable-xhdpi/ic_undobar_undo.png diff --git a/app/src/main/res/drawable-xhdpi/location_web_site.png b/core/src/main/res/drawable-xhdpi/location_web_site.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/location_web_site.png rename to core/src/main/res/drawable-xhdpi/location_web_site.png diff --git a/app/src/main/res/drawable-xhdpi/location_web_site_dark.png b/core/src/main/res/drawable-xhdpi/location_web_site_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/location_web_site_dark.png rename to core/src/main/res/drawable-xhdpi/location_web_site_dark.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_accept.png b/core/src/main/res/drawable-xhdpi/navigation_accept.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_accept.png rename to core/src/main/res/drawable-xhdpi/navigation_accept.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_accept_dark.png b/core/src/main/res/drawable-xhdpi/navigation_accept_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_accept_dark.png rename to core/src/main/res/drawable-xhdpi/navigation_accept_dark.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_cancel.png b/core/src/main/res/drawable-xhdpi/navigation_cancel.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_cancel.png rename to core/src/main/res/drawable-xhdpi/navigation_cancel.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_cancel_dark.png b/core/src/main/res/drawable-xhdpi/navigation_cancel_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_cancel_dark.png rename to core/src/main/res/drawable-xhdpi/navigation_cancel_dark.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_chapters.png b/core/src/main/res/drawable-xhdpi/navigation_chapters.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_chapters.png rename to core/src/main/res/drawable-xhdpi/navigation_chapters.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_chapters_dark.png b/core/src/main/res/drawable-xhdpi/navigation_chapters_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_chapters_dark.png rename to core/src/main/res/drawable-xhdpi/navigation_chapters_dark.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_collapse.png b/core/src/main/res/drawable-xhdpi/navigation_collapse.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_collapse.png rename to core/src/main/res/drawable-xhdpi/navigation_collapse.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_collapse_dark.png b/core/src/main/res/drawable-xhdpi/navigation_collapse_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_collapse_dark.png rename to core/src/main/res/drawable-xhdpi/navigation_collapse_dark.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_expand.png b/core/src/main/res/drawable-xhdpi/navigation_expand.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_expand.png rename to core/src/main/res/drawable-xhdpi/navigation_expand.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_expand_dark.png b/core/src/main/res/drawable-xhdpi/navigation_expand_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_expand_dark.png rename to core/src/main/res/drawable-xhdpi/navigation_expand_dark.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_refresh.png b/core/src/main/res/drawable-xhdpi/navigation_refresh.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_refresh.png rename to core/src/main/res/drawable-xhdpi/navigation_refresh.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_refresh_dark.png b/core/src/main/res/drawable-xhdpi/navigation_refresh_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_refresh_dark.png rename to core/src/main/res/drawable-xhdpi/navigation_refresh_dark.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_shownotes.png b/core/src/main/res/drawable-xhdpi/navigation_shownotes.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_shownotes.png rename to core/src/main/res/drawable-xhdpi/navigation_shownotes.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_shownotes_dark.png b/core/src/main/res/drawable-xhdpi/navigation_shownotes_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_shownotes_dark.png rename to core/src/main/res/drawable-xhdpi/navigation_shownotes_dark.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_up.png b/core/src/main/res/drawable-xhdpi/navigation_up.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_up.png rename to core/src/main/res/drawable-xhdpi/navigation_up.png diff --git a/app/src/main/res/drawable-xhdpi/navigation_up_dark.png b/core/src/main/res/drawable-xhdpi/navigation_up_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/navigation_up_dark.png rename to core/src/main/res/drawable-xhdpi/navigation_up_dark.png diff --git a/app/src/main/res/drawable-xhdpi/social_share.png b/core/src/main/res/drawable-xhdpi/social_share.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/social_share.png rename to core/src/main/res/drawable-xhdpi/social_share.png diff --git a/app/src/main/res/drawable-xhdpi/social_share_dark.png b/core/src/main/res/drawable-xhdpi/social_share_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/social_share_dark.png rename to core/src/main/res/drawable-xhdpi/social_share_dark.png diff --git a/app/src/main/res/drawable-xhdpi/spinner_button.9.png b/core/src/main/res/drawable-xhdpi/spinner_button.9.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/spinner_button.9.png rename to core/src/main/res/drawable-xhdpi/spinner_button.9.png diff --git a/app/src/main/res/drawable-xhdpi/spinner_button_dark.9.png b/core/src/main/res/drawable-xhdpi/spinner_button_dark.9.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/spinner_button_dark.9.png rename to core/src/main/res/drawable-xhdpi/spinner_button_dark.9.png diff --git a/app/src/main/res/drawable-xhdpi/stat_playlist.png b/core/src/main/res/drawable-xhdpi/stat_playlist.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/stat_playlist.png rename to core/src/main/res/drawable-xhdpi/stat_playlist.png diff --git a/app/src/main/res/drawable-xhdpi/stat_playlist_dark.png b/core/src/main/res/drawable-xhdpi/stat_playlist_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/stat_playlist_dark.png rename to core/src/main/res/drawable-xhdpi/stat_playlist_dark.png diff --git a/app/src/main/res/drawable-xhdpi/type_audio.png b/core/src/main/res/drawable-xhdpi/type_audio.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/type_audio.png rename to core/src/main/res/drawable-xhdpi/type_audio.png diff --git a/app/src/main/res/drawable-xhdpi/type_audio_dark.png b/core/src/main/res/drawable-xhdpi/type_audio_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/type_audio_dark.png rename to core/src/main/res/drawable-xhdpi/type_audio_dark.png diff --git a/app/src/main/res/drawable-xhdpi/type_video.png b/core/src/main/res/drawable-xhdpi/type_video.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/type_video.png rename to core/src/main/res/drawable-xhdpi/type_video.png diff --git a/app/src/main/res/drawable-xhdpi/type_video_dark.png b/core/src/main/res/drawable-xhdpi/type_video_dark.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/type_video_dark.png rename to core/src/main/res/drawable-xhdpi/type_video_dark.png diff --git a/app/src/main/res/drawable-xhdpi/undobar.9.png b/core/src/main/res/drawable-xhdpi/undobar.9.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/undobar.9.png rename to core/src/main/res/drawable-xhdpi/undobar.9.png diff --git a/app/src/main/res/drawable-xhdpi/undobar_button_focused.9.png b/core/src/main/res/drawable-xhdpi/undobar_button_focused.9.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/undobar_button_focused.9.png rename to core/src/main/res/drawable-xhdpi/undobar_button_focused.9.png diff --git a/app/src/main/res/drawable-xhdpi/undobar_button_pressed.9.png b/core/src/main/res/drawable-xhdpi/undobar_button_pressed.9.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/undobar_button_pressed.9.png rename to core/src/main/res/drawable-xhdpi/undobar_button_pressed.9.png diff --git a/app/src/main/res/drawable-xhdpi/undobar_divider.9.png b/core/src/main/res/drawable-xhdpi/undobar_divider.9.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/undobar_divider.9.png rename to core/src/main/res/drawable-xhdpi/undobar_divider.9.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_overflow.png b/core/src/main/res/drawable-xxhdpi/ic_action_overflow.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_overflow.png rename to core/src/main/res/drawable-xxhdpi/ic_action_overflow.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_overflow_dark.png b/core/src/main/res/drawable-xxhdpi/ic_action_overflow_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_overflow_dark.png rename to core/src/main/res/drawable-xxhdpi/ic_action_overflow_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_pause_over_video.png b/core/src/main/res/drawable-xxhdpi/ic_action_pause_over_video.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_pause_over_video.png rename to core/src/main/res/drawable-xxhdpi/ic_action_pause_over_video.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_play_over_video.png b/core/src/main/res/drawable-xxhdpi/ic_action_play_over_video.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_action_play_over_video.png rename to core/src/main/res/drawable-xxhdpi/ic_action_play_over_video.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_drag_handle.png b/core/src/main/res/drawable-xxhdpi/ic_drag_handle.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_drag_handle.png rename to core/src/main/res/drawable-xxhdpi/ic_drag_handle.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.png b/core/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.png rename to core/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_drawer.png b/core/src/main/res/drawable-xxhdpi/ic_drawer.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_drawer.png rename to core/src/main/res/drawable-xxhdpi/ic_drawer.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_drawer_dark.png b/core/src/main/res/drawable-xxhdpi/ic_drawer_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_drawer_dark.png rename to core/src/main/res/drawable-xxhdpi/ic_drawer_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher.png b/core/src/main/res/drawable-xxhdpi/ic_launcher.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_launcher.png rename to core/src/main/res/drawable-xxhdpi/ic_launcher.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_new.png b/core/src/main/res/drawable-xxhdpi/ic_new.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_new.png rename to core/src/main/res/drawable-xxhdpi/ic_new.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_new_dark.png b/core/src/main/res/drawable-xxhdpi/ic_new_dark.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_new_dark.png rename to core/src/main/res/drawable-xxhdpi/ic_new_dark.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_stat_authentication.png b/core/src/main/res/drawable-xxhdpi/ic_stat_authentication.png similarity index 100% rename from app/src/main/res/drawable-xxhdpi/ic_stat_authentication.png rename to core/src/main/res/drawable-xxhdpi/ic_stat_authentication.png diff --git a/app/src/main/res/drawable/badge.xml b/core/src/main/res/drawable/badge.xml similarity index 100% rename from app/src/main/res/drawable/badge.xml rename to core/src/main/res/drawable/badge.xml diff --git a/app/src/main/res/drawable/borderless_button.xml b/core/src/main/res/drawable/borderless_button.xml similarity index 100% rename from app/src/main/res/drawable/borderless_button.xml rename to core/src/main/res/drawable/borderless_button.xml diff --git a/app/src/main/res/drawable/borderless_button_dark.xml b/core/src/main/res/drawable/borderless_button_dark.xml similarity index 100% rename from app/src/main/res/drawable/borderless_button_dark.xml rename to core/src/main/res/drawable/borderless_button_dark.xml diff --git a/app/src/main/res/drawable/horizontal_divider.9.png b/core/src/main/res/drawable/horizontal_divider.9.png similarity index 100% rename from app/src/main/res/drawable/horizontal_divider.9.png rename to core/src/main/res/drawable/horizontal_divider.9.png diff --git a/app/src/main/res/drawable/overlay_button_circle_background.xml b/core/src/main/res/drawable/overlay_button_circle_background.xml similarity index 100% rename from app/src/main/res/drawable/overlay_button_circle_background.xml rename to core/src/main/res/drawable/overlay_button_circle_background.xml diff --git a/app/src/main/res/drawable/overlay_drawable.xml b/core/src/main/res/drawable/overlay_drawable.xml similarity index 100% rename from app/src/main/res/drawable/overlay_drawable.xml rename to core/src/main/res/drawable/overlay_drawable.xml diff --git a/app/src/main/res/drawable/overlay_drawable_dark.xml b/core/src/main/res/drawable/overlay_drawable_dark.xml similarity index 100% rename from app/src/main/res/drawable/overlay_drawable_dark.xml rename to core/src/main/res/drawable/overlay_drawable_dark.xml diff --git a/app/src/main/res/drawable/type_audio.png b/core/src/main/res/drawable/type_audio.png similarity index 100% rename from app/src/main/res/drawable/type_audio.png rename to core/src/main/res/drawable/type_audio.png diff --git a/app/src/main/res/drawable/type_video.png b/core/src/main/res/drawable/type_video.png similarity index 100% rename from app/src/main/res/drawable/type_video.png rename to core/src/main/res/drawable/type_video.png diff --git a/app/src/main/res/drawable/undobar_button.xml b/core/src/main/res/drawable/undobar_button.xml similarity index 100% rename from app/src/main/res/drawable/undobar_button.xml rename to core/src/main/res/drawable/undobar_button.xml diff --git a/app/src/main/res/drawable/vertical_divider.9.png b/core/src/main/res/drawable/vertical_divider.9.png similarity index 100% rename from app/src/main/res/drawable/vertical_divider.9.png rename to core/src/main/res/drawable/vertical_divider.9.png diff --git a/app/src/main/res/drawable/white_circle.xml b/core/src/main/res/drawable/white_circle.xml similarity index 100% rename from app/src/main/res/drawable/white_circle.xml rename to core/src/main/res/drawable/white_circle.xml diff --git a/app/src/main/res/values-az/strings.xml b/core/src/main/res/values-az/strings.xml similarity index 100% rename from app/src/main/res/values-az/strings.xml rename to core/src/main/res/values-az/strings.xml diff --git a/app/src/main/res/values-ca/strings.xml b/core/src/main/res/values-ca/strings.xml similarity index 100% rename from app/src/main/res/values-ca/strings.xml rename to core/src/main/res/values-ca/strings.xml diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/core/src/main/res/values-cs-rCZ/strings.xml similarity index 100% rename from app/src/main/res/values-cs-rCZ/strings.xml rename to core/src/main/res/values-cs-rCZ/strings.xml diff --git a/app/src/main/res/values-da/strings.xml b/core/src/main/res/values-da/strings.xml similarity index 100% rename from app/src/main/res/values-da/strings.xml rename to core/src/main/res/values-da/strings.xml diff --git a/app/src/main/res/values-de/strings.xml b/core/src/main/res/values-de/strings.xml similarity index 100% rename from app/src/main/res/values-de/strings.xml rename to core/src/main/res/values-de/strings.xml diff --git a/app/src/main/res/values-es-rES/strings.xml b/core/src/main/res/values-es-rES/strings.xml similarity index 100% rename from app/src/main/res/values-es-rES/strings.xml rename to core/src/main/res/values-es-rES/strings.xml diff --git a/app/src/main/res/values-es/strings.xml b/core/src/main/res/values-es/strings.xml similarity index 100% rename from app/src/main/res/values-es/strings.xml rename to core/src/main/res/values-es/strings.xml diff --git a/app/src/main/res/values-fr/strings.xml b/core/src/main/res/values-fr/strings.xml similarity index 100% rename from app/src/main/res/values-fr/strings.xml rename to core/src/main/res/values-fr/strings.xml diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/core/src/main/res/values-hi-rIN/strings.xml similarity index 100% rename from app/src/main/res/values-hi-rIN/strings.xml rename to core/src/main/res/values-hi-rIN/strings.xml diff --git a/app/src/main/res/values-it-rIT/strings.xml b/core/src/main/res/values-it-rIT/strings.xml similarity index 100% rename from app/src/main/res/values-it-rIT/strings.xml rename to core/src/main/res/values-it-rIT/strings.xml diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/core/src/main/res/values-iw-rIL/strings.xml similarity index 100% rename from app/src/main/res/values-iw-rIL/strings.xml rename to core/src/main/res/values-iw-rIL/strings.xml diff --git a/app/src/main/res/values-ko/strings.xml b/core/src/main/res/values-ko/strings.xml similarity index 100% rename from app/src/main/res/values-ko/strings.xml rename to core/src/main/res/values-ko/strings.xml diff --git a/app/src/main/res/values-land/styles.xml b/core/src/main/res/values-land/styles.xml similarity index 100% rename from app/src/main/res/values-land/styles.xml rename to core/src/main/res/values-land/styles.xml diff --git a/app/src/main/res/values-large/dimens.xml b/core/src/main/res/values-large/dimens.xml similarity index 100% rename from app/src/main/res/values-large/dimens.xml rename to core/src/main/res/values-large/dimens.xml diff --git a/app/src/main/res/values-nl/strings.xml b/core/src/main/res/values-nl/strings.xml similarity index 100% rename from app/src/main/res/values-nl/strings.xml rename to core/src/main/res/values-nl/strings.xml diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/core/src/main/res/values-pl-rPL/strings.xml similarity index 100% rename from app/src/main/res/values-pl-rPL/strings.xml rename to core/src/main/res/values-pl-rPL/strings.xml diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/core/src/main/res/values-pt-rBR/strings.xml similarity index 100% rename from app/src/main/res/values-pt-rBR/strings.xml rename to core/src/main/res/values-pt-rBR/strings.xml diff --git a/app/src/main/res/values-pt/strings.xml b/core/src/main/res/values-pt/strings.xml similarity index 100% rename from app/src/main/res/values-pt/strings.xml rename to core/src/main/res/values-pt/strings.xml diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/core/src/main/res/values-ro-rRO/strings.xml similarity index 100% rename from app/src/main/res/values-ro-rRO/strings.xml rename to core/src/main/res/values-ro-rRO/strings.xml diff --git a/app/src/main/res/values-ru/strings.xml b/core/src/main/res/values-ru/strings.xml similarity index 100% rename from app/src/main/res/values-ru/strings.xml rename to core/src/main/res/values-ru/strings.xml diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/core/src/main/res/values-sv-rSE/strings.xml similarity index 100% rename from app/src/main/res/values-sv-rSE/strings.xml rename to core/src/main/res/values-sv-rSE/strings.xml diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/core/src/main/res/values-uk-rUA/strings.xml similarity index 100% rename from app/src/main/res/values-uk-rUA/strings.xml rename to core/src/main/res/values-uk-rUA/strings.xml diff --git a/app/src/main/res/values-v11/colors.xml b/core/src/main/res/values-v11/colors.xml similarity index 100% rename from app/src/main/res/values-v11/colors.xml rename to core/src/main/res/values-v11/colors.xml diff --git a/app/src/main/res/values-v14/dimens.xml b/core/src/main/res/values-v14/dimens.xml similarity index 100% rename from app/src/main/res/values-v14/dimens.xml rename to core/src/main/res/values-v14/dimens.xml diff --git a/app/src/main/res/values-v14/styles.xml b/core/src/main/res/values-v14/styles.xml similarity index 100% rename from app/src/main/res/values-v14/styles.xml rename to core/src/main/res/values-v14/styles.xml diff --git a/app/src/main/res/values-v16/styles.xml b/core/src/main/res/values-v16/styles.xml similarity index 100% rename from app/src/main/res/values-v16/styles.xml rename to core/src/main/res/values-v16/styles.xml diff --git a/app/src/main/res/values-v19/colors.xml b/core/src/main/res/values-v19/colors.xml similarity index 100% rename from app/src/main/res/values-v19/colors.xml rename to core/src/main/res/values-v19/colors.xml diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/core/src/main/res/values-zh-rCN/strings.xml similarity index 100% rename from app/src/main/res/values-zh-rCN/strings.xml rename to core/src/main/res/values-zh-rCN/strings.xml diff --git a/app/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml similarity index 100% rename from app/src/main/res/values/arrays.xml rename to core/src/main/res/values/arrays.xml diff --git a/app/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml similarity index 100% rename from app/src/main/res/values/attrs.xml rename to core/src/main/res/values/attrs.xml diff --git a/app/src/main/res/values/colors.xml b/core/src/main/res/values/colors.xml similarity index 100% rename from app/src/main/res/values/colors.xml rename to core/src/main/res/values/colors.xml diff --git a/app/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml similarity index 100% rename from app/src/main/res/values/dimens.xml rename to core/src/main/res/values/dimens.xml diff --git a/app/src/main/res/values/ids.xml b/core/src/main/res/values/ids.xml similarity index 100% rename from app/src/main/res/values/ids.xml rename to core/src/main/res/values/ids.xml diff --git a/app/src/main/res/values/integers.xml b/core/src/main/res/values/integers.xml similarity index 100% rename from app/src/main/res/values/integers.xml rename to core/src/main/res/values/integers.xml diff --git a/app/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml similarity index 100% rename from app/src/main/res/values/strings.xml rename to core/src/main/res/values/strings.xml diff --git a/app/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml similarity index 100% rename from app/src/main/res/values/styles.xml rename to core/src/main/res/values/styles.xml diff --git a/settings.gradle b/settings.gradle index d33586960..de34bc1c1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ -include ':app' +include ':app', ':core' include ':app:dslv:library' From 94f514f95875ec84f83cacc8229a78c2ae9b222d Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sun, 12 Oct 2014 18:18:36 +0200 Subject: [PATCH 06/13] Fixed manifests --- app/src/androidTest/assets/testfile.mp3 | Bin 0 -> 20606 bytes app/src/main/AndroidManifest.xml | 53 ++---------------- .../java/de/danoeh/antennapod/PodcastApp.java | 9 +++ core/src/main/AndroidManifest.xml | 51 ++++++++++++++++- 4 files changed, 64 insertions(+), 49 deletions(-) create mode 100644 app/src/androidTest/assets/testfile.mp3 diff --git a/app/src/androidTest/assets/testfile.mp3 b/app/src/androidTest/assets/testfile.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f15faadf3eaad3d64b136647a7534475867a4d91 GIT binary patch literal 20606 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 + package="de.danoeh.antennapod" + android:versionCode="40" + android:versionName="0.9.9.3"> - - - - - - - - - - - - - - - - - - - @@ -133,11 +103,6 @@ - - - - - @@ -323,13 +288,12 @@ android:value="de.danoeh.antennapod.activity.PreferenceActivity"/> - - + - + - + @@ -341,11 +305,6 @@ android:scheme="package"/> - - - - - diff --git a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java index 12213d6f9..87474dbdd 100644 --- a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java +++ b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java @@ -11,6 +11,15 @@ 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"; private static float LOGICAL_DENSITY; diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml index db67b8003..006b3f123 100644 --- a/core/src/main/AndroidManifest.xml +++ b/core/src/main/AndroidManifest.xml @@ -1,10 +1,57 @@ + + + + + + + + android:icon="@drawable/ic_launcher"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 189eb6acf1d862cee84188867c5a6ea2398c31d6 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sun, 12 Oct 2014 21:36:06 +0200 Subject: [PATCH 07/13] Check gpodnetEnabled() method before using gpodder.net API --- .../de/danoeh/antennapod/core/storage/DBTasks.java | 5 ++++- .../de/danoeh/antennapod/core/storage/DBWriter.java | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java index 982959bc2..cc0a3d058 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.database.Cursor; import android.util.Log; import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; import de.danoeh.antennapod.core.asynctask.FlattrStatusFetcher; import de.danoeh.antennapod.core.feed.*; @@ -162,7 +163,9 @@ public final class DBTasks { new FlattrStatusFetcher(context).start(); } - GpodnetSyncService.sendSyncIntent(context); + if (ClientConfig.gpodnetCallbacks.gpodnetEnabled()) { + GpodnetSyncService.sendSyncIntent(context); + } autodownloadUndownloadedItems(context); } }.start(); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index eec15acd2..d71d19433 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -8,6 +8,7 @@ import android.database.Cursor; import android.preference.PreferenceManager; import android.util.Log; import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; import de.danoeh.antennapod.core.feed.*; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; @@ -196,7 +197,9 @@ public class DBWriter { adapter.removeFeed(feed); adapter.close(); - GpodnetPreferences.addRemovedFeed(feed.getDownload_url()); + if (ClientConfig.gpodnetCallbacks.gpodnetEnabled()) { + GpodnetPreferences.addRemovedFeed(feed.getDownload_url()); + } EventDistributor.getInstance().sendFeedUpdateBroadcast(); BackupManager backupManager = new BackupManager(context); @@ -697,8 +700,10 @@ public class DBWriter { adapter.setCompleteFeed(feeds); adapter.close(); - for (Feed feed : feeds) { - GpodnetPreferences.addAddedFeed(feed.getDownload_url()); + if (ClientConfig.gpodnetCallbacks.gpodnetEnabled()) { + for (Feed feed : feeds) { + GpodnetPreferences.addAddedFeed(feed.getDownload_url()); + } } BackupManager backupManager = new BackupManager(context); From 1995a18a21002a578d2ca22ddcbef8ffe5d3c686 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Tue, 14 Oct 2014 18:41:13 +0200 Subject: [PATCH 08/13] Updated build files --- app/build.gradle | 14 +------------- build.gradle | 6 +++++- gradle/wrapper/gradle-wrapper.jar | Bin 51106 -> 51017 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2e4b1da7d..a28f77985 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,11 +1,3 @@ -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath 'com.android.tools.build:gradle:0.12.2' - } -} apply plugin: 'com.android.application' repositories { @@ -105,8 +97,4 @@ android { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } -} - -task wrapper(type: Wrapper) { - gradleVersion = '1.12' -} +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 48f4e4684..d59e200b9 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:0.12.2' + classpath 'com.android.tools.build:gradle:0.13.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -16,4 +16,8 @@ allprojects { repositories { jcenter() } +} + +task wrapper(type: Wrapper) { + gradleVersion = '2.1' } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 3c7abdf12790879c06b07176de29647f77aa4129..3d0dee6e8edfecc92e04653ec780de06f7b34f8b 100644 GIT binary patch delta 22605 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

WUfn%{sd!SLH)2+-ii>wOvbP}0O?kN_ioh+H9B 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 Vm+5}d(1gIhJ_s7xaMR^~{{!0{?oj{$ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b83aa49f2..b6dc96bf1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun May 18 21:50:42 CEST 2014 +#Sun Oct 12 21:44:21 CEST 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-bin.zip From aa535ac240bc1dfae0db7e85f54747f3cabeb96d Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Fri, 17 Oct 2014 20:56:28 +0200 Subject: [PATCH 09/13] Added more callbacks for SP --- .../core/DownloadServiceCallbacks.java | 16 +++++++++++++++- .../core/PlaybackServiceCallbacks.java | 7 +++++++ .../danoeh/antennapod/core/feed/FeedItem.java | 4 +++- .../antennapod/core/feed/FeedMedia.java | 2 ++ .../service/download/DownloadService.java | 10 +++++++++- .../service/playback/PlaybackService.java | 19 +++++++++++++++---- .../antennapod/core/storage/PodDBAdapter.java | 14 +++++++------- 7 files changed, 58 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java index 55b69fdec..286e830c5 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/DownloadServiceCallbacks.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.core; import android.app.PendingIntent; import android.content.Context; +import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.service.download.DownloadRequest; /** @@ -37,8 +38,21 @@ public interface DownloadServiceCallbacks { *

* The PendingIntent takes users to an activity where they can look at all successful and failed downloads. * - * @return A non-null PendingIntent for the notification. + * @return A non-null PendingIntent for the notification or null if shouldCreateReport()==false */ public PendingIntent getReportNotificationContentIntent(Context context); + + /** + * Called by the FeedSyncThread after a feed has been downloaded and parsed. + * + * @param feed The non-null feed that has been parsed. + */ + public void onFeedParsed(Context context, Feed feed); + + /** + * Returns true if the DownloadService should create a report that shows the number of failed + * downloads when the service shuts down. + * */ + public boolean shouldCreateReport(); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java index e37c8fcfd..7aa99dcef 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java @@ -18,4 +18,11 @@ public interface PlaybackServiceCallbacks { * @return A non-null activity intent. */ public Intent getPlayerActivityIntent(Context context, MediaType mediaType); + + /** + * Returns true if the PlaybackService should load new episodes from the queue when playback ends + * and false if the PlaybackService should ignore the queue and load no more episodes when playback + * finishes. + * */ + public boolean useQueue(); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 8a513de43..d056917e1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -263,7 +263,9 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr @Override public Uri getImageUri() { - if (hasMedia()) { + if (hasItemImageDownloaded()) { + return image.getImageUri(); + } else if (hasMedia()) { return media.getImageUri(); } else if (feed != null) { return feed.getImageUri(); diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 37186ee79..defcfd598 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -395,6 +395,8 @@ public class FeedMedia extends FeedFile implements Playable { builder.appendQueryParameter(PARAM_FALLBACK, feedImgUri.toString()); } return builder.build(); + } else if (item.hasItemImageDownloaded()) { + return item.getImage().getImageUri(); } else { return feedImgUri; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index 9229622ed..b8db5a387 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -305,7 +305,10 @@ public class DownloadService extends Service { if (BuildConfig.DEBUG) Log.d(TAG, "Service shutting down"); isRunning = false; - updateReport(); + + if (ClientConfig.downloadServiceCallbacks.shouldCreateReport()) { + updateReport(); + } stopForeground(true); NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); @@ -813,6 +816,9 @@ public class DownloadService extends Service { } } + ClientConfig.downloadServiceCallbacks.onFeedParsed(DownloadService.this, + savedFeed); + numberOfDownloads.decrementAndGet(); } @@ -833,6 +839,8 @@ public class DownloadService extends Service { } } + + if (BuildConfig.DEBUG) Log.d(TAG, "Shutting down"); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index 5123e40c7..bbf0bfb38 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -521,9 +521,14 @@ public class PlaybackService extends Service { // is an episode in the queue left. // Start playback immediately if continuous playback is enabled Playable nextMedia = null; - boolean loadNextItem = isInQueue && nextItem != null; - playNextEpisode = playNextEpisode && loadNextItem - && UserPreferences.isFollowQueue(); + boolean loadNextItem = ClientConfig.playbackServiceCallbacks.useQueue() && + isInQueue && + nextItem != null; + + playNextEpisode = playNextEpisode && + loadNextItem && + UserPreferences.isFollowQueue(); + if (loadNextItem) { if (BuildConfig.DEBUG) Log.d(TAG, "Loading next item in queue"); @@ -699,6 +704,10 @@ public class PlaybackService extends Service { @Override protected void onPostExecute(Void result) { super.onPostExecute(result); + if (mediaPlayer == null) { + return; + } + PlaybackServiceMediaPlayer.PSMPInfo newInfo = mediaPlayer.getPSMPInfo(); if (!isCancelled() && info.playerStatus == PlayerStatus.PLAYING && info.playable != null) { String contentText = info.playable.getFeedTitle(); @@ -735,7 +744,9 @@ public class PlaybackService extends Service { .setSmallIcon(R.drawable.ic_stat_antenna); notification = notificationBuilder.getNotification(); } - startForeground(NOTIFICATION_ID, notification); + if (newInfo.playerStatus == PlayerStatus.PLAYING) { + startForeground(NOTIFICATION_ID, notification); + } if (BuildConfig.DEBUG) Log.d(TAG, "Notification set up"); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index 1407080dc..6b6e09369 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -158,7 +158,7 @@ public class PodDBAdapter { private static final String TABLE_PRIMARY_KEY = KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT ,"; - private static final String CREATE_TABLE_FEEDS = "CREATE TABLE " + public static final String CREATE_TABLE_FEEDS = "CREATE TABLE " + TABLE_NAME_FEEDS + " (" + TABLE_PRIMARY_KEY + KEY_TITLE + " TEXT," + KEY_FILE_URL + " TEXT," + KEY_DOWNLOAD_URL + " TEXT," + KEY_DOWNLOADED + " INTEGER," + KEY_LINK + " TEXT," @@ -170,7 +170,7 @@ public class PodDBAdapter { + KEY_USERNAME + " TEXT," + KEY_PASSWORD + " TEXT)"; - private static final String CREATE_TABLE_FEED_ITEMS = "CREATE TABLE " + public static final String CREATE_TABLE_FEED_ITEMS = "CREATE TABLE " + TABLE_NAME_FEED_ITEMS + " (" + TABLE_PRIMARY_KEY + KEY_TITLE + " TEXT," + KEY_CONTENT_ENCODED + " TEXT," + KEY_PUBDATE + " INTEGER," + KEY_READ + " INTEGER," + KEY_LINK + " TEXT," @@ -180,12 +180,12 @@ public class PodDBAdapter { + KEY_FLATTR_STATUS + " INTEGER," + KEY_IMAGE + " INTEGER)"; - private static final String CREATE_TABLE_FEED_IMAGES = "CREATE TABLE " + public static final String CREATE_TABLE_FEED_IMAGES = "CREATE TABLE " + TABLE_NAME_FEED_IMAGES + " (" + TABLE_PRIMARY_KEY + KEY_TITLE + " TEXT," + KEY_FILE_URL + " TEXT," + KEY_DOWNLOAD_URL + " TEXT," + KEY_DOWNLOADED + " INTEGER)"; - private static final String CREATE_TABLE_FEED_MEDIA = "CREATE TABLE " + public static final String CREATE_TABLE_FEED_MEDIA = "CREATE TABLE " + TABLE_NAME_FEED_MEDIA + " (" + TABLE_PRIMARY_KEY + KEY_DURATION + " INTEGER," + KEY_FILE_URL + " TEXT," + KEY_DOWNLOAD_URL + " TEXT," + KEY_DOWNLOADED + " INTEGER," + KEY_POSITION @@ -194,18 +194,18 @@ public class PodDBAdapter { + KEY_FEEDITEM + " INTEGER," + KEY_PLAYED_DURATION + " INTEGER)"; - private static final String CREATE_TABLE_DOWNLOAD_LOG = "CREATE TABLE " + public static final String CREATE_TABLE_DOWNLOAD_LOG = "CREATE TABLE " + TABLE_NAME_DOWNLOAD_LOG + " (" + TABLE_PRIMARY_KEY + KEY_FEEDFILE + " INTEGER," + KEY_FEEDFILETYPE + " INTEGER," + KEY_REASON + " INTEGER," + KEY_SUCCESSFUL + " INTEGER," + KEY_COMPLETION_DATE + " INTEGER," + KEY_REASON_DETAILED + " TEXT," + KEY_DOWNLOADSTATUS_TITLE + " TEXT)"; - private static final String CREATE_TABLE_QUEUE = "CREATE TABLE " + public static final String CREATE_TABLE_QUEUE = "CREATE TABLE " + TABLE_NAME_QUEUE + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_FEEDITEM + " INTEGER," + KEY_FEED + " INTEGER)"; - private static final String CREATE_TABLE_SIMPLECHAPTERS = "CREATE TABLE " + public static final String CREATE_TABLE_SIMPLECHAPTERS = "CREATE TABLE " + TABLE_NAME_SIMPLECHAPTERS + " (" + TABLE_PRIMARY_KEY + KEY_TITLE + " TEXT," + KEY_START + " INTEGER," + KEY_FEEDITEM + " INTEGER," + KEY_LINK + " TEXT," + KEY_CHAPTER_TYPE + " INTEGER)"; From 3a1ced0301e5e9a3067967b0c83f49723d9d37b4 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Fri, 17 Oct 2014 22:07:03 +0200 Subject: [PATCH 10/13] Added more changes to support SP --- core/src/main/AndroidManifest.xml | 42 ++++++++---------- .../antennapod/core/ApplicationCallbacks.java | 2 + .../core/PlaybackServiceCallbacks.java | 7 ++- .../core/preferences/UserPreferences.java | 18 ++++---- .../core/receiver/AlarmUpdateReceiver.java | 3 +- .../service/playback/PlaybackService.java | 14 ++++-- .../core/service/playback/PlayerStatus.java | 12 ++++- .../util/playback/PlaybackController.java | 6 +++ ...ntenna.png => ic_stat_antenna_default.png} | Bin ...ntenna.png => ic_stat_antenna_default.png} | Bin ...ntenna.png => ic_stat_antenna_default.png} | Bin ...ntenna.png => ic_stat_antenna_default.png} | Bin ...ntenna.png => ic_stat_antenna_default.png} | Bin ...ntenna.png => ic_stat_antenna_default.png} | Bin ...ntenna.png => ic_stat_antenna_default.png} | Bin ...ntenna.png => ic_stat_antenna_default.png} | Bin 16 files changed, 63 insertions(+), 41 deletions(-) rename core/src/main/res/drawable-hdpi-v11/{ic_stat_antenna.png => ic_stat_antenna_default.png} (100%) rename core/src/main/res/drawable-hdpi/{ic_stat_antenna.png => ic_stat_antenna_default.png} (100%) rename core/src/main/res/drawable-ldpi-v11/{ic_stat_antenna.png => ic_stat_antenna_default.png} (100%) rename core/src/main/res/drawable-ldpi/{ic_stat_antenna.png => ic_stat_antenna_default.png} (100%) rename core/src/main/res/drawable-mdpi-v11/{ic_stat_antenna.png => ic_stat_antenna_default.png} (100%) rename core/src/main/res/drawable-mdpi/{ic_stat_antenna.png => ic_stat_antenna_default.png} (100%) rename core/src/main/res/drawable-xhdpi-v11/{ic_stat_antenna.png => ic_stat_antenna_default.png} (100%) rename core/src/main/res/drawable-xhdpi/{ic_stat_antenna.png => ic_stat_antenna_default.png} (100%) diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml index 006b3f123..c660cd805 100644 --- a/core/src/main/AndroidManifest.xml +++ b/core/src/main/AndroidManifest.xml @@ -1,55 +1,49 @@ - - - - - - + + + + + + - + + android:enabled="true" /> - + android:exported="true"/> - + android:enabled="true"/> - + - + - - - - - - + - + + android:scheme="package" /> diff --git a/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java index 69a959ba8..d88e8fbb1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java @@ -19,4 +19,6 @@ public interface ApplicationCallbacks { * activity. */ public Intent getStorageErrorActivity(Context context); + + public void setUpateInterval(long upateInterval); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java index 7aa99dcef..fb01fa703 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/PlaybackServiceCallbacks.java @@ -23,6 +23,11 @@ public interface PlaybackServiceCallbacks { * Returns true if the PlaybackService should load new episodes from the queue when playback ends * and false if the PlaybackService should ignore the queue and load no more episodes when playback * finishes. - * */ + */ public boolean useQueue(); + + /** + * Returns a drawable resource that is used for the notification of the playback service. + */ + public int getNotificationIconResource(Context context); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 5cac4837d..93fff71ba 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.receiver.FeedUpdateReceiver; @@ -329,7 +330,7 @@ public class UserPreferences implements } else if (key.equals(PREF_UPDATE_INTERVAL)) { updateInterval = readUpdateInterval(sp.getString( PREF_UPDATE_INTERVAL, "0")); - restartUpdateAlarm(updateInterval); + ClientConfig.applicationCallbacks.setUpateInterval(updateInterval); } else if (key.equals(PREF_AUTO_DELETE)) { autoDelete = sp.getBoolean(PREF_AUTO_DELETE, false); @@ -541,23 +542,19 @@ public class UserPreferences implements /** * Updates alarm registered with the AlarmManager service or deactivates it. - * - * @param millis new value to register with AlarmManager. If millis is 0, the - * alarm is deactivated. */ - public static void restartUpdateAlarm(long millis) { + public static void restartUpdateAlarm(long triggerAtMillis, long intervalMillis) { instanceAvailable(); if (BuildConfig.DEBUG) - Log.d(TAG, "Restarting update alarm. New value: " + millis); + Log.d(TAG, "Restarting update alarm."); AlarmManager alarmManager = (AlarmManager) instance.context .getSystemService(Context.ALARM_SERVICE); PendingIntent updateIntent = PendingIntent.getBroadcast( instance.context, 0, new Intent( - FeedUpdateReceiver.ACTION_REFRESH_FEEDS), 0 - ); + FeedUpdateReceiver.ACTION_REFRESH_FEEDS), 0); alarmManager.cancel(updateIntent); - if (millis != 0) { - alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, millis, millis, + if (intervalMillis != 0) { + alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, updateIntent); if (BuildConfig.DEBUG) Log.d(TAG, "Changed alarm to new interval"); @@ -567,6 +564,7 @@ public class UserPreferences implements } } + /** * Reads episode cache size as it is saved in the episode_cache_size_values array. */ diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java index 0777a7a2e..0a002825a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java @@ -8,6 +8,7 @@ import android.util.Log; import org.apache.commons.lang3.StringUtils; import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.preferences.UserPreferences; /** Listens for events that make it necessary to reset the update alarm. */ @@ -26,7 +27,7 @@ public class AlarmUpdateReceiver extends BroadcastReceiver { Log.d(TAG, "Resetting update alarm after app upgrade"); } - UserPreferences.restartUpdateAlarm(UserPreferences.getUpdateInterval()); + ClientConfig.applicationCallbacks.setUpateInterval(UserPreferences.getUpdateInterval()); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index bbf0bfb38..6c1b9491b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -79,6 +79,7 @@ public class PlaybackService extends Service { public static final String EXTRA_PREPARE_IMMEDIATELY = "extra.de.danoeh.antennapod.core.service.prepareImmediately"; public static final String ACTION_PLAYER_STATUS_CHANGED = "action.de.danoeh.antennapod.core.service.playerStatusChanged"; + public static final String EXTRA_NEW_PLAYER_STATUS = "extra.de.danoeh.antennapod.service.playerStatusChanged.newStatus"; private static final String AVRCP_ACTION_PLAYER_STATUS_CHANGED = "com.android.music.playstatechanged"; private static final String AVRCP_ACTION_META_CHANGED = "com.android.music.metachanged"; @@ -417,6 +418,9 @@ public class PlaybackService extends Service { } + Intent statusUpdate = new Intent(ACTION_PLAYER_STATUS_CHANGED); + statusUpdate.putExtra(EXTRA_NEW_PLAYER_STATUS, newInfo.playerStatus.ordinal()); + sendBroadcast(statusUpdate); sendBroadcast(new Intent(ACTION_PLAYER_STATUS_CHANGED)); updateWidget(); refreshRemoteControlClientState(newInfo); @@ -694,8 +698,8 @@ public class PlaybackService extends Service { } if (icon == null) { - icon = BitmapFactory.decodeResource(getResources(), - R.drawable.ic_stat_antenna); + icon = BitmapFactory.decodeResource(getApplicationContext().getResources(), + ClientConfig.playbackServiceCallbacks.getNotificationIconResource(getApplicationContext())); } return null; @@ -708,6 +712,8 @@ public class PlaybackService extends Service { return; } PlaybackServiceMediaPlayer.PSMPInfo newInfo = mediaPlayer.getPSMPInfo(); + final int smallIcon = ClientConfig.playbackServiceCallbacks.getNotificationIconResource(getApplicationContext()); + if (!isCancelled() && info.playerStatus == PlayerStatus.PLAYING && info.playable != null) { String contentText = info.playable.getFeedTitle(); @@ -730,7 +736,7 @@ public class PlaybackService extends Service { .setOngoing(true) .setContentIntent(pIntent) .setLargeIcon(icon) - .setSmallIcon(R.drawable.ic_stat_antenna) + .setSmallIcon(smallIcon) .addAction(android.R.drawable.ic_media_pause, getString(R.string.pause_label), pauseButtonPendingIntent); @@ -741,7 +747,7 @@ public class PlaybackService extends Service { .setContentTitle(contentTitle) .setContentText(contentText).setOngoing(true) .setContentIntent(pIntent).setLargeIcon(icon) - .setSmallIcon(R.drawable.ic_stat_antenna); + .setSmallIcon(smallIcon); notification = notificationBuilder.getNotification(); } if (newInfo.playerStatus == PlayerStatus.PLAYING) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java index 1ad0c25d9..7c666abd5 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlayerStatus.java @@ -10,5 +10,15 @@ public enum PlayerStatus { PREPARED, SEEKING, INITIALIZING, // playback service is loading the Playable's metadata - INITIALIZED // playback service was started, data source of media player was set. + INITIALIZED; // playback service was started, data source of media player was set. + + private static final PlayerStatus[] fromOrdinalLookup; + + static { + fromOrdinalLookup = PlayerStatus.values(); + } + + public static PlayerStatus fromOrdinal(int o) { + return fromOrdinalLookup[o]; + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java index 5118d92ae..6b843e040 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java @@ -394,6 +394,12 @@ public abstract class PlaybackController { public abstract void onPlaybackEnd(); + public void repeatHandleStatus() { + if (status != null && playbackService != null) { + handleStatus(); + } + } + /** * Is called whenever the PlaybackService changes it's status. This method * should be used to update the GUI or start/cancel background threads. diff --git a/core/src/main/res/drawable-hdpi-v11/ic_stat_antenna.png b/core/src/main/res/drawable-hdpi-v11/ic_stat_antenna_default.png similarity index 100% rename from core/src/main/res/drawable-hdpi-v11/ic_stat_antenna.png rename to core/src/main/res/drawable-hdpi-v11/ic_stat_antenna_default.png diff --git a/core/src/main/res/drawable-hdpi/ic_stat_antenna.png b/core/src/main/res/drawable-hdpi/ic_stat_antenna_default.png similarity index 100% rename from core/src/main/res/drawable-hdpi/ic_stat_antenna.png rename to core/src/main/res/drawable-hdpi/ic_stat_antenna_default.png diff --git a/core/src/main/res/drawable-ldpi-v11/ic_stat_antenna.png b/core/src/main/res/drawable-ldpi-v11/ic_stat_antenna_default.png similarity index 100% rename from core/src/main/res/drawable-ldpi-v11/ic_stat_antenna.png rename to core/src/main/res/drawable-ldpi-v11/ic_stat_antenna_default.png diff --git a/core/src/main/res/drawable-ldpi/ic_stat_antenna.png b/core/src/main/res/drawable-ldpi/ic_stat_antenna_default.png similarity index 100% rename from core/src/main/res/drawable-ldpi/ic_stat_antenna.png rename to core/src/main/res/drawable-ldpi/ic_stat_antenna_default.png diff --git a/core/src/main/res/drawable-mdpi-v11/ic_stat_antenna.png b/core/src/main/res/drawable-mdpi-v11/ic_stat_antenna_default.png similarity index 100% rename from core/src/main/res/drawable-mdpi-v11/ic_stat_antenna.png rename to core/src/main/res/drawable-mdpi-v11/ic_stat_antenna_default.png diff --git a/core/src/main/res/drawable-mdpi/ic_stat_antenna.png b/core/src/main/res/drawable-mdpi/ic_stat_antenna_default.png similarity index 100% rename from core/src/main/res/drawable-mdpi/ic_stat_antenna.png rename to core/src/main/res/drawable-mdpi/ic_stat_antenna_default.png diff --git a/core/src/main/res/drawable-xhdpi-v11/ic_stat_antenna.png b/core/src/main/res/drawable-xhdpi-v11/ic_stat_antenna_default.png similarity index 100% rename from core/src/main/res/drawable-xhdpi-v11/ic_stat_antenna.png rename to core/src/main/res/drawable-xhdpi-v11/ic_stat_antenna_default.png diff --git a/core/src/main/res/drawable-xhdpi/ic_stat_antenna.png b/core/src/main/res/drawable-xhdpi/ic_stat_antenna_default.png similarity index 100% rename from core/src/main/res/drawable-xhdpi/ic_stat_antenna.png rename to core/src/main/res/drawable-xhdpi/ic_stat_antenna_default.png From eff021c14962e7b89742b6097a4133ae841ecaf1 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sun, 19 Oct 2014 19:07:26 +0200 Subject: [PATCH 11/13] Added support for itunes:duration tag in feeds Ported from AntennaPodSP --- .../syndication/handler/HandlerState.java | 17 ++++++++++-- .../core/syndication/namespace/NSITunes.java | 26 +++++++++++++++++-- .../core/syndication/namespace/NSRSS20.java | 7 +++++ .../syndication/namespace/atom/NSAtom.java | 8 ++++++ 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java index 4fe8e1aff..413a11f8e 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/HandlerState.java @@ -1,12 +1,16 @@ package de.danoeh.antennapod.core.syndication.handler; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Stack; + import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.syndication.namespace.Namespace; import de.danoeh.antennapod.core.syndication.namespace.SyndElement; -import java.util.*; - /** * Contains all relevant information to describe the current state of a * SyndHandler. @@ -35,6 +39,11 @@ public class HandlerState { */ protected StringBuffer contentBuf; + /** + * Temporarily saved objects. + */ + protected HashMap tempObjects; + public HandlerState(Feed feed) { this.feed = feed; alternateUrls = new LinkedHashMap(); @@ -42,6 +51,7 @@ public class HandlerState { tagstack = new Stack(); namespaces = new HashMap(); defaultNamespaces = new Stack(); + tempObjects = new HashMap(); } public Feed getFeed() { @@ -95,4 +105,7 @@ public class HandlerState { alternateUrls.put(url, title); } + public HashMap getTempObjects() { + return tempObjects; + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java index fb794d7e0..7f07b54f6 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java @@ -4,6 +4,8 @@ import de.danoeh.antennapod.core.feed.FeedImage; import de.danoeh.antennapod.core.syndication.handler.HandlerState; import org.xml.sax.Attributes; +import java.util.concurrent.TimeUnit; + public class NSITunes extends Namespace { public static final String NSTAG = "itunes"; public static final String NSURI = "http://www.itunes.com/dtds/podcast-1.0.dtd"; @@ -13,6 +15,7 @@ public class NSITunes extends Namespace { private static final String IMAGE_HREF = "href"; private static final String AUTHOR = "author"; + public static final String DURATION = "duration"; @Override @@ -25,10 +28,10 @@ public class NSITunes extends Namespace { if (state.getCurrentItem() != null) { // this is an items image - image.setTitle(state.getCurrentItem().getTitle() + IMAGE_TITLE); + image.setTitle(state.getCurrentItem().getTitle()+IMAGE_TITLE); state.getCurrentItem().setImage(image); - } else { + } else { // this is the feed image if (state.getFeed().getImage() == null) { state.getFeed().setImage(image); @@ -44,6 +47,25 @@ public class NSITunes extends Namespace { public void handleElementEnd(String localName, HandlerState state) { if (localName.equals(AUTHOR)) { state.getFeed().setAuthor(state.getContentBuf().toString()); + } else if (localName.equals(DURATION)) { + String[] parts = state.getContentBuf().toString().split(":"); + try { + int duration = 0; + if (parts.length == 2) { + duration += TimeUnit.MINUTES.toMillis(Long.valueOf(parts[0])) + + TimeUnit.SECONDS.toMillis(Long.valueOf(parts[1])); + } else if (parts.length >= 3) { + duration += TimeUnit.HOURS.toMillis(Long.valueOf(parts[0])) + + TimeUnit.MINUTES.toMillis(Long.valueOf(parts[1])) + + TimeUnit.SECONDS.toMillis(Long.valueOf(parts[2])); + } else { + return; + } + + state.getTempObjects().put(DURATION, duration); + } catch (NumberFormatException e) { + e.printStackTrace(); + } } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java index c29741456..ba26dbac2 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java @@ -85,6 +85,13 @@ public class NSRSS20 extends Namespace { state.getCurrentItem().setTitle( state.getCurrentItem().getDescription()); } + + if (state.getTempObjects().containsKey(NSITunes.DURATION)) { + if (state.getCurrentItem().hasMedia()) { + state.getCurrentItem().getMedia().setDuration((Integer) state.getTempObjects().get(NSITunes.DURATION)); + } + state.getTempObjects().remove(NSITunes.DURATION); + } } state.setCurrentItem(null); } else if (state.getTagstack().size() >= 2 diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java index 61cb9ec65..3719e7103 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java @@ -6,6 +6,7 @@ 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.syndication.handler.HandlerState; +import de.danoeh.antennapod.core.syndication.namespace.NSITunes; import de.danoeh.antennapod.core.syndication.namespace.NSRSS20; import de.danoeh.antennapod.core.syndication.namespace.Namespace; import de.danoeh.antennapod.core.syndication.namespace.SyndElement; @@ -128,6 +129,13 @@ public class NSAtom extends Namespace { @Override public void handleElementEnd(String localName, HandlerState state) { if (localName.equals(ENTRY)) { + if (state.getCurrentItem() != null && + state.getTempObjects().containsKey(NSITunes.DURATION)) { + if (state.getCurrentItem().hasMedia()) { + state.getCurrentItem().getMedia().setDuration((Integer) state.getTempObjects().get(NSITunes.DURATION)); + } + state.getTempObjects().remove(NSITunes.DURATION); + } state.setCurrentItem(null); } From 2cd504b9d093203e5861f3cbe917a07bbc92c70e Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sun, 19 Oct 2014 19:21:51 +0200 Subject: [PATCH 12/13] Updated config in app module, fixed typo --- .tx/config | 48 +++++++++---------- app/src/main/AndroidManifest.xml | 6 +++ .../config/ApplicationCallbacksImpl.java | 6 +++ .../config/DownloadServiceCallbacksImpl.java | 11 +++++ .../config/PlaybackServiceCallbacksImpl.java | 11 +++++ .../receiver/ConnectivityActionReceiver.java | 2 +- .../antennapod/core/ApplicationCallbacks.java | 2 +- .../core/preferences/UserPreferences.java | 2 +- .../core/receiver/AlarmUpdateReceiver.java | 2 +- 9 files changed, 62 insertions(+), 28 deletions(-) rename {core/src/main/java/de/danoeh/antennapod/core => app/src/main/java/de/danoeh/antennapod}/receiver/ConnectivityActionReceiver.java (97%) diff --git a/.tx/config b/.tx/config index e45dcd70c..ee84a774e 100644 --- a/.tx/config +++ b/.tx/config @@ -2,31 +2,31 @@ 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.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 [antennapod.description] file_filter = description/.txt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7de13e7c1..572b7137d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -288,6 +288,12 @@ android:value="de.danoeh.antennapod.activity.PreferenceActivity"/> + + + + + + diff --git a/app/src/main/java/de/danoeh/antennapod/config/ApplicationCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/ApplicationCallbacksImpl.java index fdbb2139d..4d9be5d78 100644 --- a/app/src/main/java/de/danoeh/antennapod/config/ApplicationCallbacksImpl.java +++ b/app/src/main/java/de/danoeh/antennapod/config/ApplicationCallbacksImpl.java @@ -8,6 +8,7 @@ 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 { @@ -20,4 +21,9 @@ public class ApplicationCallbacksImpl implements ApplicationCallbacks { public Intent getStorageErrorActivity(Context context) { return new Intent(context, StorageErrorActivity.class); } + + @Override + public void setUpdateInterval(long updateInterval) { + UserPreferences.restartUpdateAlarm(updateInterval, updateInterval); + } } diff --git a/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java index 0f180e9c5..3a9e62435 100644 --- a/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java +++ b/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java @@ -9,6 +9,7 @@ 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; @@ -46,4 +47,14 @@ public class DownloadServiceCallbacksImpl implements DownloadServiceCallbacks { 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; + } } diff --git a/app/src/main/java/de/danoeh/antennapod/config/PlaybackServiceCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/PlaybackServiceCallbacksImpl.java index d1e3a8379..997befe99 100644 --- a/app/src/main/java/de/danoeh/antennapod/config/PlaybackServiceCallbacksImpl.java +++ b/app/src/main/java/de/danoeh/antennapod/config/PlaybackServiceCallbacksImpl.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.config; import android.content.Context; import android.content.Intent; +import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.AudioplayerActivity; import de.danoeh.antennapod.activity.VideoplayerActivity; import de.danoeh.antennapod.core.PlaybackServiceCallbacks; @@ -18,4 +19,14 @@ public class PlaybackServiceCallbacksImpl implements PlaybackServiceCallbacks { return new Intent(context, AudioplayerActivity.class); } } + + @Override + public boolean useQueue() { + return true; + } + + @Override + public int getNotificationIconResource(Context context) { + return R.drawable.ic_stat_antenna_default; + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java similarity index 97% rename from core/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java rename to app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java index 6a9a4166a..f55a7603f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/ConnectivityActionReceiver.java +++ b/app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java @@ -1,4 +1,4 @@ -package de.danoeh.antennapod.core.receiver; +package de.danoeh.antennapod.receiver; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java index d88e8fbb1..3bc1ce4eb 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/ApplicationCallbacks.java @@ -20,5 +20,5 @@ public interface ApplicationCallbacks { */ public Intent getStorageErrorActivity(Context context); - public void setUpateInterval(long upateInterval); + public void setUpdateInterval(long updateInterval); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 93fff71ba..30ce83d2c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -330,7 +330,7 @@ public class UserPreferences implements } else if (key.equals(PREF_UPDATE_INTERVAL)) { updateInterval = readUpdateInterval(sp.getString( PREF_UPDATE_INTERVAL, "0")); - ClientConfig.applicationCallbacks.setUpateInterval(updateInterval); + ClientConfig.applicationCallbacks.setUpdateInterval(updateInterval); } else if (key.equals(PREF_AUTO_DELETE)) { autoDelete = sp.getBoolean(PREF_AUTO_DELETE, false); diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java index 0a002825a..84277b6d5 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java @@ -27,7 +27,7 @@ public class AlarmUpdateReceiver extends BroadcastReceiver { Log.d(TAG, "Resetting update alarm after app upgrade"); } - ClientConfig.applicationCallbacks.setUpateInterval(UserPreferences.getUpdateInterval()); + ClientConfig.applicationCallbacks.setUpdateInterval(UserPreferences.getUpdateInterval()); } From b5066d02b4acf31da093190a1a57a9d961bb04ca Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Mon, 20 Oct 2014 22:51:26 +0200 Subject: [PATCH 13/13] Set image owner when parsing feed --- .../de/danoeh/antennapod/core/feed/FeedImage.java | 11 ++++++----- .../core/syndication/namespace/NSITunes.java | 2 ++ .../core/syndication/namespace/NSRSS20.java | 1 + .../core/syndication/namespace/atom/NSAtom.java | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java index 51605691d..b01747f7f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedImage.java @@ -13,10 +13,11 @@ public class FeedImage extends FeedFile implements PicassoImageResource { protected String title; protected FeedComponent owner; - public FeedImage(String download_url, String title) { + public FeedImage(FeedComponent owner, String download_url, String title) { super(null, download_url, false); this.download_url = download_url; this.title = title; + this.owner = owner; } public FeedImage(long id, String title, String file_url, @@ -26,6 +27,10 @@ public class FeedImage extends FeedFile implements PicassoImageResource { this.title = title; } + public FeedImage() { + super(); + } + @Override public String getHumanReadableIdentifier() { if (owner != null && owner.getHumanReadableIdentifier() != null) { @@ -40,10 +45,6 @@ public class FeedImage extends FeedFile implements PicassoImageResource { return FEEDFILETYPE_FEEDIMAGE; } - public FeedImage() { - super(); - } - public String getTitle() { return title; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java index 7f07b54f6..70e1126b9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java @@ -29,11 +29,13 @@ public class NSITunes extends Namespace { if (state.getCurrentItem() != null) { // this is an items image image.setTitle(state.getCurrentItem().getTitle()+IMAGE_TITLE); + image.setOwner(state.getCurrentItem()); state.getCurrentItem().setImage(image); } else { // this is the feed image if (state.getFeed().getImage() == null) { + image.setOwner(state.getFeed()); state.getFeed().setImage(image); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java index ba26dbac2..0ca261a0e 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java @@ -68,6 +68,7 @@ public class NSRSS20 extends Namespace { String parent = state.getTagstack().peek().getName(); if (parent.equals(CHANNEL)) { state.getFeed().setImage(new FeedImage()); + state.getFeed().getImage().setOwner(state.getFeed()); } } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java index 3719e7103..1de001c55 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java @@ -193,7 +193,7 @@ public class NSAtom extends Namespace { SyndDateUtils.parseRFC3339Date(content)); } } else if (top.equals(IMAGE)) { - state.getFeed().setImage(new FeedImage(content, null)); + state.getFeed().setImage(new FeedImage(state.getFeed(), content, null)); } }