Merge branch 'develop'

This commit is contained in:
daniel oeh 2014-03-29 11:09:47 +01:00
commit ae849077c7
215 changed files with 6843 additions and 1921 deletions

View File

@ -12,6 +12,7 @@ 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-he-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

View File

@ -1,42 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.danoeh.antennapod"
android:versionCode="35"
android:versionName="0.9.8.2" >
package="de.danoeh.antennapod"
android:versionCode="36"
android:versionName="0.9.8.3">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="19" />
android:targetSdkVersion="19"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />
android:xlargeScreens="true"/>
<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false" />
android:required="false"/>
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
android:required="false"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:name="de.danoeh.antennapod.PodcastApp"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:logo="@drawable/ic_launcher"
android:theme="@style/Theme.AntennaPod.Light" >
android:theme="@style/Theme.AntennaPod.Light">
<activity
android:name=".activity.MainActivity"
android:configChanges="keyboardHidden|orientation"
@ -60,7 +60,8 @@
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MainActivity" />
android:value="de.danoeh.antennapod.activity.MainActivity"/>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
@ -114,7 +115,7 @@
android:configChanges="orientation|screenSize">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MainActivity" />
android:value="de.danoeh.antennapod.activity.MainActivity"/>
<meta-data
android:name="android.app.default_searchable"
android:value="de.danoeh.antennapod.activity.SearchActivity"/>
@ -131,14 +132,14 @@
android:exported="true">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MainActivity" />
</activity>
android:value="de.danoeh.antennapod.activity.MainActivity"/>
</activity>
<activity
android:name=".activity.AudioplayerActivity"
android:launchMode="singleTop">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MainActivity" />
android:value="de.danoeh.antennapod.activity.MainActivity"/>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
@ -150,6 +151,10 @@
</intent-filter>
</activity>
<activity
android:name=".activity.DownloadAuthenticationActivity"
android:launchMode="singleInstance"/>
<service
android:name=".service.download.DownloadService"
android:enabled="true"/>
@ -170,14 +175,14 @@
android:label="@string/settings_label">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MainActivity" />
android:value="de.danoeh.antennapod.activity.MainActivity"/>
</activity>
<activity
android:name=".activity.DownloadLogActivity"
android:label="@string/download_log_label">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.DownloadActivity" />
android:value="de.danoeh.antennapod.activity.DownloadActivity"/>
</activity>
<receiver
@ -303,7 +308,7 @@
android:label="@string/miro_guide_label">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.AddFeedActivity" />
android:value="de.danoeh.antennapod.activity.AddFeedActivity"/>
<meta-data
android:name="android.app.default_searchable"
android:value="de.danoeh.antennapod.activity.MiroGuideSearchActivity"/>
@ -328,7 +333,7 @@
android:configChanges="keyboardHidden|orientation">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MiroGuideMainActivity" />
android:value="de.danoeh.antennapod.activity.MiroGuideMainActivity"/>
</activity>
<activity
android:name=".activity.MiroGuideChannelViewActivity"
@ -336,7 +341,7 @@
android:label="@string/miro_guide_label">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MiroGuideCategoryActivity" />
android:value="de.danoeh.antennapod.activity.MiroGuideCategoryActivity"/>
</activity>
<activity
android:name=".activity.VideoplayerActivity"
@ -344,7 +349,7 @@
android:screenOrientation="landscape">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MainActivity" />
android:value="de.danoeh.antennapod.activity.MainActivity"/>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
@ -360,28 +365,30 @@
android:label="@string/playback_history_label">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MainActivity" />
</activity>
android:value="de.danoeh.antennapod.activity.MainActivity"/>
</activity>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MainActiviy" />
android:value="de.danoeh.antennapod.activity.MainActiviy"/>
<activity
android:name=".activity.DirectoryChooserActivity"
android:label="@string/choose_data_directory">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.PreferenceActivity" />
</activity>
android:value="de.danoeh.antennapod.activity.PreferenceActivity"/>
</activity>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.PreferenceActivity" />
android:value="de.danoeh.antennapod.activity.PreferenceActivity"/>
<activity
android:name=".activity.OrganizeQueueActivity"
android:configChanges="orientation"
android:label="@string/organize_queue_label">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.MainActivity" />
android:value="de.danoeh.antennapod.activity.MainActivity"/>
</activity>
<activity
android:name=".activity.gpoddernet.GpodnetMainActivity"
@ -396,7 +403,7 @@
android:resource="@xml/gpodnet_searchable"/>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.AddFeedActivity" />
android:value="de.danoeh.antennapod.activity.AddFeedActivity"/>
</activity>
<activity
@ -410,7 +417,7 @@
android:resource="@xml/gpodnet_searchable"/>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.gpoddernet.GpodnetMainActivity" />
android:value="de.danoeh.antennapod.activity.gpoddernet.GpodnetMainActivity"/>
</activity>
<activity
@ -421,12 +428,13 @@
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/gpodnet_searchable"/>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.gpoddernet.GpodnetMainActivity" />
android:value="de.danoeh.antennapod.activity.gpoddernet.GpodnetMainActivity"/>
</activity>
<activity
@ -444,7 +452,7 @@
</intent-filter>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="de.danoeh.antennapod.activity.PreferenceActivity" />
android:value="de.danoeh.antennapod.activity.PreferenceActivity"/>
</activity>
@ -465,6 +473,11 @@
android:scheme="package"/>
</intent-filter>
</receiver>
<receiver android:name=".receiver.SPAReceiver">
<intent-filter>
<action android:name="de.danoeh.antennapdsp.intent.SP_APPS_QUERY_FEEDS_RESPONSE"/>
</intent-filter>
</receiver>
</application>
</manifest>

View File

@ -1,6 +1,13 @@
Change Log
==========
Version 0.9.8.3
---------------
* Added support for password-protected feeds and episodes
* Added support for more types of episode images
* Added Hebrew translation
* Several bugfixes and improvements
Version 0.9.8.2
---------------
* Several bugfixes and improvements

View File

@ -31,3 +31,4 @@ Hindi: siddhusengar
Dutch: e2jk
Polish (Poland): Mephistofeles, shark103, tyle
Korean: changwoo
Hebrew: amir.dafnyman

View File

@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.

16
assets/LICENSE_DSLV.txt Normal file
View File

@ -0,0 +1,16 @@
A subclass of the Android ListView component that enables drag
and drop re-ordering of list items.
Copyright 2012 Carl Bauer
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.

202
assets/LICENSE_FLATTR4J.txt Normal file
View File

@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.

View File

@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.

13
assets/LICENSE_PRESTO.txt Normal file
View File

@ -0,0 +1,13 @@
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.

View File

@ -41,7 +41,7 @@
<div id="header" align="center">
<img src="logo.png" alt="Logo" width="100px" height="100px"/>
<p>AntennaPod, Version 0.9.8.2</p>
<p>AntennaPod, Version 0.9.8.3</p>
<p>Copyright © 2012 Daniel Oeh</p>
@ -50,15 +50,15 @@
<h1>Used libraries</h1>
<h2>NineOldAndroids <a href="http://nineoldandroids.com">(Link)</a></h2>
by Jake Wharton, licensed under the Apache 2.0 license
by Jake Wharton, licensed under the Apache 2.0 license <a href="LICENSE_NINE_OLD_ANDROIDS.txt">(View)</a>
<h2>Apache Commons <a href="http://commons.apache.org/">(Link)</a></h2>
by The Apache Software Foundation, licensed under the Apache 2.0 license
by The Apache Software Foundation, licensed under the Apache 2.0 license <a href="LICENSE_APACHE_COMMONS.txt">(View)</a>
<h2>flattr4j <a href="http://www.shredzone.org/projects/flattr4j/wiki">(Link)</a></h2>
licensed under the Apache 2.0 license
licensed under the Apache 2.0 license <a href="LICENSE_FLATTR4J.txt">(View)</a>
<h2>drag-sort-listview <a href="https://github.com/bauerca/drag-sort-listview">(Link)</a></h2>
licensed under the Apache 2.0 license
licensed under the Apache 2.0 license <a href="LICENSE_DSLV.txt">(View)</a>
<h2>Presto Client <a href="http://www.aocate.com/presto/">(Link)</a></h2>
licensed under the Apache 2.0 license
licensed under the Apache 2.0 license <a href="LICENSE_PRESTO.txt">(View)</a>
</body>
</html>

View File

@ -17,11 +17,6 @@ dependencies {
println "Creating libs directory"
libsdir.mkdir()
}
def prestoLib = new File('libs/presto_client-0.8.5.jar')
if (!prestoLib.exists()) {
println "Downloading presto library into libs folder"
new URL('http://www.aocate.com/presto/client/presto_client-0.8.5.jar').withInputStream{ i -> prestoLib.withOutputStream{ it << i }}
}
compile 'com.android.support:appcompat-v7:19.0.+'
compile 'org.apache.commons:commons-lang3:3.2.1'
@ -33,7 +28,6 @@ dependencies {
compile 'commons-io:commons-io:2.4'
compile 'com.nineoldandroids:library:2.4.0'
compile project(':submodules:dslv:library')
compile files('libs/presto_client-0.8.5.jar')
}
android {

View File

@ -5,7 +5,7 @@
<groupId>de.danoeh</groupId>
<artifactId>antennapod</artifactId>
<packaging>apk</packaging>
<version>0.9.8.2</version>
<version>0.9.8.3</version>
<name>AntennaPod</name>

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 882 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,143 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/footer"
android:layout_width="fill_parent"
android:layout_height="48dp"
android:focusableInTouchMode="true"
android:layout_alignParentBottom="true">
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_alignParentTop="true"
android:background="?android:attr/dividerVertical"/>
<View
android:id="@+id/horizontal_divider"
android:layout_width="1dip"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:background="?android:attr/dividerVertical"/>
<Button
android:id="@+id/butCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@id/horizontal_divider"
android:background="?android:attr/selectableItemBackground"
android:text="@string/cancel_label"/>
<Button
android:id="@+id/butConfirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/horizontal_divider"
android:background="?android:attr/selectableItemBackground"
android:text="@string/confirm_label"/>
</RelativeLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_above="@id/footer"
android:layout_alignParentTop="true"
android:scrollbars="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtvFeedurl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_margin="16dp"
android:textSize="@dimen/text_size_large"
android:textColor="@color/bright_blue"
android:textStyle="italic"
android:text="@string/txtvfeedurl_label"/>
<EditText
android:id="@+id/etxtFeedurl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txtvFeedurl"
android:layout_margin="8dp"
android:hint="@string/feedurl_label"
android:inputType="textUri"/>
<TextView
android:id="@+id/txtvPodcastDirectories"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/etxtFeedurl"
android:layout_margin="8dp"
android:textSize="@dimen/text_size_large"
android:textColor="@color/bright_blue"
android:textStyle="italic"
android:text="@string/podcastdirectories_label"/>
<Button
android:id="@+id/butBrowseGpoddernet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txtvPodcastDirectories"
android:layout_margin="8dp"
android:text="@string/gpodnet_main_label"/>
<Button
android:id="@+id/butBrowseMiroguide"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/butBrowseGpoddernet"
android:layout_margin="8dp"
android:text="@string/miro_guide_label"/>
<TextView
android:id="@+id/txtvOpmlImport"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/butBrowseMiroguide"
android:layout_margin="8dp"
android:textSize="@dimen/text_size_large"
android:textColor="@color/bright_blue"
android:textStyle="italic"
android:text="@string/opml_import_label"/>
<TextView
android:id="@+id/txtvOpmlImportExpl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txtvOpmlImport"
android:layout_margin="8dp"
android:text="@string/opml_import_txtv_button_lable"/>
<Button
android:id="@+id/butOpmlImport"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txtvOpmlImportExpl"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:text="@string/opml_import_label"/>
</RelativeLayout>
</ScrollView>
</RelativeLayout>

View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txtvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/authentication_notification_title"
android:layout_alignParentTop="true"
android:textSize="@dimen/text_size_large"
android:layout_margin="16dp"
android:textColor="@color/bright_blue"
android:textStyle="italic"/>
<TextView
android:id="@+id/txtvDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/authentication_notification_msg"
android:layout_below="@id/txtvTitle"
android:textSize="@dimen/text_size_medium"
android:textColor="?android:attr/textColorSecondary"
android:layout_margin="16dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:id="@+id/etxtUsername"
android:hint="@string/username_label"
android:layout_below="@id/txtvDescription"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:id="@+id/etxtPassword"
android:hint="@string/password_label"
android:inputType="textPassword"
android:layout_below="@id/etxtUsername"/>
<RelativeLayout
android:id="@+id/footer"
android:layout_width="fill_parent"
android:layout_height="48dp"
android:focusableInTouchMode="true"
android:layout_alignParentBottom="true">
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_alignParentTop="true"
android:background="?android:attr/dividerVertical"/>
<View
android:id="@+id/horizontal_divider"
android:layout_width="1dip"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:background="?android:attr/dividerVertical"/>
<Button
android:id="@+id/butCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@id/horizontal_divider"
android:background="?android:attr/selectableItemBackground"
android:text="@string/cancel_label"/>
<Button
android:id="@+id/butConfirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/horizontal_divider"
android:background="?android:attr/selectableItemBackground"
android:text="@string/confirm_label"/>
</RelativeLayout>
</RelativeLayout>

View File

@ -4,33 +4,9 @@
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/footer"
style="@android:style/ButtonBar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<Button
android:id="@+id/butConfirm"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/confirm_label"/>
<Button
android:id="@+id/butCancel"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/cancel_label"/>
</LinearLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_above="@id/footer"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:scrollbars="vertical">
@ -58,11 +34,19 @@
android:hint="@string/feedurl_label"
android:inputType="textUri"/>
<Button
android:id="@+id/butConfirm"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/etxtFeedurl"
android:layout_margin="8dp"
android:text="@string/confirm_label"/>
<TextView
android:id="@+id/txtvPodcastDirectories"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/etxtFeedurl"
android:layout_below="@id/butConfirm"
android:layout_margin="8dp"
android:textSize="@dimen/text_size_large"
android:textColor="@color/bright_blue"

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txtvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/authentication_notification_title"
android:layout_alignParentTop="true"
android:textSize="@dimen/text_size_large"
android:layout_margin="16dp"
android:textColor="@color/bright_blue"
android:textStyle="italic"/>
<TextView
android:id="@+id/txtvDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/authentication_notification_msg"
android:layout_below="@id/txtvTitle"
android:textSize="@dimen/text_size_medium"
android:textColor="?android:attr/textColorSecondary"
android:layout_margin="16dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:id="@+id/etxtUsername"
android:hint="@string/username_label"
android:layout_below="@id/txtvDescription"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:id="@+id/etxtPassword"
android:hint="@string/password_label"
android:inputType="textPassword"
android:layout_below="@id/etxtUsername"/>
<LinearLayout
android:id="@+id/footer"
style="@android:style/ButtonBar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<Button
android:id="@+id/butConfirm"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/confirm_label"/>
<Button
android:id="@+id/butCancel"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/cancel_label"/>
</LinearLayout>
</RelativeLayout>

View File

@ -234,4 +234,5 @@
<!--Online feed view-->
<string name="downloading_label">Yükləmə...</string>
<!--Content descriptions for image buttons-->
<!--AntennaPodSP-->
</resources>

View File

@ -89,6 +89,7 @@
<string name="download_error_unsupported_type">Tipus de canal no suportat</string>
<string name="download_error_connection_error">Error de connexió</string>
<string name="download_error_unknown_host">Amfitrió desconegut</string>
<string name="download_error_unauthorized">Error d\'autenticació</string>
<string name="cancel_all_downloads_label">Cancel·la totes les baixades</string>
<string name="download_cancelled_msg">S\'ha cancel·lat la baixada</string>
<string name="download_report_title">Baixades completades</string>
@ -104,6 +105,8 @@
<string name="download_type_media">Fitxer</string>
<string name="download_type_image">Imatge</string>
<string name="download_request_error_dialog_message_prefix">S\'ha produït un error en intentar baixar el fitxer:\u0020</string>
<string name="authentication_notification_title">Cal autenticar-se</string>
<string name="authentication_notification_msg">Es necessita un usuari i una contrasenya per accedir al recurs</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Error</string>
<string name="player_stopped_msg">No s\'està reproduint res</string>
@ -321,4 +324,6 @@
<string name="in_queue_label">S\'ha afegit l\'episodi a la cua</string>
<string name="new_episodes_count_label">Nombre d\'episodis nous</string>
<string name="in_progress_episodes_count_label">Nombre d\'episodis que heu començat a escoltar</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">S\'estan important les subscripcions des de les apps de propòsit únic...</string>
</resources>

View File

@ -291,4 +291,5 @@
<string name="subscribed_label">Odebíráno</string>
<string name="downloading_label">Stahuji...</string>
<!--Content descriptions for image buttons-->
<!--AntennaPodSP-->
</resources>

View File

@ -89,6 +89,7 @@
<string name="download_error_unsupported_type">Feed type er ikke understøttet</string>
<string name="download_error_connection_error">Forbindelsesfejl</string>
<string name="download_error_unknown_host">Ukendt vært</string>
<string name="download_error_unauthorized">Godkendelses fejl</string>
<string name="cancel_all_downloads_label">Annuller alle downloads</string>
<string name="download_cancelled_msg">Download afbrudt</string>
<string name="download_report_title">Downloads afsluttet</string>
@ -104,6 +105,8 @@
<string name="download_type_media">Medie fil</string>
<string name="download_type_image">Billede</string>
<string name="download_request_error_dialog_message_prefix">En fejl opstod under download af filen:\u0020</string>
<string name="authentication_notification_title">Godkendelses krævet</string>
<string name="authentication_notification_msg">Den ressource du efterspurgte kræver et brugernavn og et password</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Fejl!</string>
<string name="player_stopped_msg">Ingen medier afspiller</string>
@ -321,4 +324,6 @@
<string name="in_queue_label">Episode er i køen</string>
<string name="new_episodes_count_label">Antal nye episoder</string>
<string name="in_progress_episodes_count_label">Antallet af episoder du er begyndt at lytte til</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importerer abonnementer fra single-purpose apps…</string>
</resources>

View File

@ -89,6 +89,7 @@
<string name="download_error_unsupported_type">Nicht unterstützter Feed-Typ</string>
<string name="download_error_connection_error">Verbindungsfehler</string>
<string name="download_error_unknown_host">Unbekannter Host</string>
<string name="download_error_unauthorized">Authentifizierungsfehler</string>
<string name="cancel_all_downloads_label">Alle Downloads abbrechen</string>
<string name="download_cancelled_msg">Download abgebrochen</string>
<string name="download_report_title">Download abgeschlossen</string>
@ -104,6 +105,8 @@
<string name="download_type_media">Mediendatei</string>
<string name="download_type_image">Bild</string>
<string name="download_request_error_dialog_message_prefix">Beim Herunterladen der Datei ist ein Fehler aufgetreten:\u0020</string>
<string name="authentication_notification_title">Authentifizierung erforderlich</string>
<string name="authentication_notification_msg">Die angeforderte Quelle erfordert einen Benutzernamen und ein Passwort</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Fehler!</string>
<string name="player_stopped_msg">Keine Medienwiedergabe</string>
@ -321,4 +324,6 @@
<string name="in_queue_label">Episode befindet sich inder Abspielliste</string>
<string name="new_episodes_count_label">Anzahl neuer Episoden</string>
<string name="in_progress_episodes_count_label">Anzahl der Episoden, die du angefangen hast zu hören</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importiere Abonnements aus Single-Purpose Apps</string>
</resources>

View File

@ -217,4 +217,5 @@
<string name="set_to_default_folder">Elegir carpeta predeterminada</string>
<!--Online feed view-->
<!--Content descriptions for image buttons-->
<!--AntennaPodSP-->
</resources>

View File

@ -89,6 +89,7 @@
<string name="download_error_unsupported_type">Tipo de canal no admitido</string>
<string name="download_error_connection_error">Error de conexión</string>
<string name="download_error_unknown_host">Host desconocido</string>
<string name="download_error_unauthorized">Error de autenticación</string>
<string name="cancel_all_downloads_label">Cancelar todas las descargas</string>
<string name="download_cancelled_msg">Descarga cancelada</string>
<string name="download_report_title">Descargas completadas</string>
@ -104,6 +105,8 @@
<string name="download_type_media">Archivo de medios</string>
<string name="download_type_image">Imagen</string>
<string name="download_request_error_dialog_message_prefix">Ha ocurrido un error al intentar descargar el archivo:\u0020</string>
<string name="authentication_notification_title">Autenticación requerida</string>
<string name="authentication_notification_msg">El recurso solicitado requiere usuario y contraseña</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">¡Error!</string>
<string name="player_stopped_msg">No hay medios en reproducción</string>
@ -321,4 +324,6 @@
<string name="in_queue_label">El episodio está en la cola</string>
<string name="new_episodes_count_label">Cantidad de episodios nuevos</string>
<string name="in_progress_episodes_count_label">Cantidad de episodios que ha comenzado a escuchar</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importando subscripciones de aplicaciones de uso específico...</string>
</resources>

View File

@ -89,6 +89,7 @@
<string name="download_error_unsupported_type">Type de flux non géré</string>
<string name="download_error_connection_error">Erreur de connexion</string>
<string name="download_error_unknown_host">Hôte inconnu</string>
<string name="download_error_unauthorized">Erreur d\'authentification</string>
<string name="cancel_all_downloads_label">Annuler tous les téléchargements</string>
<string name="download_cancelled_msg">Téléchargement annulé</string>
<string name="download_report_title">Téléchargements terminés</string>
@ -104,6 +105,8 @@
<string name="download_type_media">Fichier média</string>
<string name="download_type_image">Image</string>
<string name="download_request_error_dialog_message_prefix">Une erreur s\'est produite durant le téléchargement du fichier :\u0020</string>
<string name="authentication_notification_title">Authentification requise</string>
<string name="authentication_notification_msg">La ressource que vous avez demandé nécessite un nom d\'utilisateur et un mot de passe</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Erreur !</string>
<string name="player_stopped_msg">Pas de lecture en cours</string>
@ -321,4 +324,6 @@
<string name="in_queue_label">L\'épisode est dans la liste</string>
<string name="new_episodes_count_label">Nombre de nouveaux épisodes</string>
<string name="in_progress_episodes_count_label">Nombre d\'épisodes que vous avez commencé à écouter</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importation des abonnements à partir d\'applications à usage unique...</string>
</resources>

View File

@ -0,0 +1,329 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources xmlns:tools="http://schemas.android.com/tools">
<!--Activitiy titles-->
<string name="app_name">אנטנה-פוד</string>
<string name="feeds_label">הזנות</string>
<string name="podcasts_label">פודקאסטים</string>
<string name="episodes_label">פרקים</string>
<string name="new_label">חדש</string>
<string name="waiting_list_label">רשימת המתנה</string>
<string name="settings_label">הגדרות</string>
<string name="add_new_feed_label">הוסף פודקאסט</string>
<string name="downloads_label">הורדות</string>
<string name="cancel_download_label">בטל הורדה</string>
<string name="download_log_label">יומן הורדות</string>
<string name="playback_history_label">היסטוריית ניגון</string>
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">התחברות אל gpodder.net</string>
<!--Webview actions-->
<string name="open_in_browser_label">פתח בדפדפן</string>
<string name="copy_url_label">העתק כתובת אתר</string>
<string name="share_url_label">שתף כתובת אתר</string>
<string name="copied_url_msg">כתובת אתרהועתקה ללוח.</string>
<!--Playback history-->
<string name="clear_history_label">נקה היסטוריה</string>
<!--Other-->
<string name="confirm_label">אישור</string>
<string name="cancel_label">בטל</string>
<string name="author_label">מחבר</string>
<string name="language_label">שפה</string>
<string name="podcast_settings_label">הגדרות</string>
<string name="cover_label">תמונה</string>
<string name="error_label">שגיאה</string>
<string name="error_msg_prefix">אירעה שגיאה:</string>
<string name="refresh_label">רענן</string>
<string name="external_storage_error_msg">אין אחסון חיצוני זמין. אנא ודא כי אחסון חיצוני הוא מותקן כך שהאפליקציה תוכל לעבוד כמו שצריך.</string>
<string name="chapters_label">פרקים</string>
<string name="shownotes_label">הערות פרק</string>
<string name="description_label">תיאור</string>
<string name="most_recent_prefix">הפרק האחרון:\u0020</string>
<string name="episodes_suffix">\u0020פרקים</string>
<string name="published_prefix">פורסם:\u0020</string>
<string name="length_prefix">אורך:\u0020</string>
<string name="size_prefix">גודל:\u0020</string>
<string name="processing_label">מעבד</string>
<string name="loading_label">טוען...</string>
<string name="image_of_prefix">תמונה של:\u0020</string>
<string name="save_username_password_label">שמור שם משתמש וססמה</string>
<string name="close_label">סגור</string>
<string name="retry_label">נסה שוב</string>
<string name="auto_download_label">כלול בהורדות אוטומטיות</string>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">כתובת הזנה</string>
<string name="txtvfeedurl_label">הוסף פודקאסט לפי כתובת אתר</string>
<string name="podcastdirectories_label">מדריכי פודקאסט</string>
<!--Actions on feeds-->
<string name="mark_all_read_label">סמן הכל כנקרא</string>
<string name="show_info_label">הצג מידע</string>
<string name="remove_feed_label">הסר הזנה</string>
<string name="share_link_label">שתף קישור אתר</string>
<string name="share_source_label">שתף קישור הזנה</string>
<string name="feed_delete_confirmation_msg">אשר מחיקת הזנה זו ואת כל פרקי ההזנה שהורדת.</string>
<string name="feed_remover_msg">הסר הזנה</string>
<!--actions on feeditems-->
<string name="download_label">הורד</string>
<string name="play_label">נגן</string>
<string name="pause_label">השהה</string>
<string name="stream_label">הזרם</string>
<string name="remove_label">הסר</string>
<string name="mark_read_label">סמן כנקרא</string>
<string name="mark_unread_label">סמן כלא נקרא</string>
<string name="add_to_queue_label">הוסף לתור</string>
<string name="remove_from_queue_label">הסר מהתור</string>
<string name="visit_website_label">בקר באתר</string>
<string name="support_label">תרום באמצעות Flattr</string>
<string name="enqueue_all_new">הכנס לתור הכל</string>
<string name="download_all">הורד הכל</string>
<string name="skip_episode_label">דלג על הפרק</string>
<!--Download messages and labels-->
<string name="download_successful">הורדה מוצלחת</string>
<string name="download_failed">הורדה נכשלה</string>
<string name="download_pending">הורדה עתידית</string>
<string name="download_running">הורדה מתבצעת</string>
<string name="download_error_device_not_found">התקן איחסון לא נמצא</string>
<string name="download_error_insufficient_space">אין די שטח איחסון</string>
<string name="download_error_file_error">שגיאת קובץ</string>
<string name="download_error_http_data_error">שגיאת מידע HTTP</string>
<string name="download_error_error_unknown">שגיאה לא ידועה</string>
<string name="download_error_parser_exception">שגיאת תוכנית ניתוח</string>
<string name="download_error_unsupported_type">סוג ההזנה אינו נתמך</string>
<string name="download_error_connection_error">שגיאת חיבור</string>
<string name="download_error_unknown_host">שרת לא ידוע</string>
<string name="download_error_unauthorized">שגיאת אימות</string>
<string name="cancel_all_downloads_label">בטל את כל ההורדות</string>
<string name="download_cancelled_msg">הורדה בוטלה</string>
<string name="download_report_title">הורדות הושלמו</string>
<string name="download_error_malformed_url">כתובת אתר שגויה</string>
<string name="download_error_io_error">שגיאת קלט פלט</string>
<string name="download_error_request_error">שגיאת בקשה</string>
<string name="download_error_db_access">שגיאת גישה למסד הנתונים</string>
<string name="downloads_left">הורדות נותרוu0020\</string>
<string name="download_notification_title">מוריד פודקאסט</string>
<string name="download_report_content">%1$d הורדות הצליחו, %2$d ניכשלו</string>
<string name="download_log_title_unknown">כותרת לא ידועה</string>
<string name="download_type_feed">הזנה</string>
<string name="download_type_media">קובץ מדיה</string>
<string name="download_type_image">תמונה</string>
<string name="download_request_error_dialog_message_prefix">שגיאה אירעה בעת הניסיון הורדת הקובץ:\u0020</string>
<string name="authentication_notification_title">נידרש אימות</string>
<string name="authentication_notification_msg">המשאב אותה ביקשת דורש שם משתמש וססמה</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">שגיאה!</string>
<string name="player_stopped_msg">מדיה לא מתנגנת</string>
<string name="player_preparing_msg">מתכונן</string>
<string name="player_ready_msg">מוכן</string>
<string name="player_seeking_msg">מחפש</string>
<string name="playback_error_server_died">שרת מת</string>
<string name="playback_error_unknown">שגיאה לא ידועה</string>
<string name="no_media_playing_label">מדיה לא מתנגנת</string>
<string name="position_default_label">00:00:00</string>
<string name="player_buffering_msg">ממלא חוצץ</string>
<string name="playbackservice_notification_title">מנגן פודקאסט</string>
<string name="playbackservice_notification_content">הקש כאן לעוד מידע</string>
<!--Navigation-->
<string name="show_download_log">הצג יומן</string>
<string name="show_player_label">הצג נגן</string>
<!--Queue operations-->
<string name="clear_queue_label">נקה תור</string>
<string name="organize_queue_label">סדר תור</string>
<string name="undo">בטל</string>
<string name="removed_from_queue">הסר פריט</string>
<string name="move_to_top_label">העבר למעלה</string>
<string name="move_to_bottom_label">העבר למטה</string>
<!--Flattr-->
<string name="flattr_auth_label">כניסה ל-Fattr</string>
<string name="flattr_auth_explanation">לחץ על הכפתור למטה כדי להתחיל את תהליך האימות. אתה תועבר למסך כניסת flattr בדפדפן שלך ותתבקש לתת לאנטנה-פוד רשות לתרום באמצעות flattr. לאחר שקבלת אישור, תוכל לחזור למסך זה באופן אוטומטי.</string>
<string name="authenticate_label">אימות</string>
<string name="return_home_label">חזור למסך הבית</string>
<string name="flattr_auth_success">האימות הצליח! עכשיו אתה יכול לתרום באמצעות flattr מתוך האפליקציה.</string>
<string name="no_flattr_token_title">אסימון flattr לא נמצא</string>
<string name="no_flattr_token_msg">חשבון ה-flattr שלך אינו מחובר לאנטנה-פוד. אתה יכול לקשראת לחשבונך לאנטנה-פוד לתרום באמצעות flattr מתוך האפליקציה או שאתה יכול לבקר באתר האינטרנט של הדבר לו תרצה לתרום.</string>
<string name="authenticate_now_label">אמת</string>
<string name="action_forbidden_title">הפעולה אסורה</string>
<string name="action_forbidden_msg">לאנטנה-פוד אין הרשאה לפעולה זו. הסיבה לכך יכולה להיות שאסימון הגישה של אנטנה-פוד לחשבון שלך בוטל. אתה יכול לבצע אימות מחדש או לבקר באתר האינטרנט של הדבר במקום.</string>
<string name="access_revoked_title">גישה בוטלה</string>
<string name="access_revoked_info">אסימון הגישה של אנטנה-פוד לחשבונך בוטל. על מנת להשלים את התהליך, אתה צריך להסיר יישום זה מהרשימת היישומים שאושרו בהגדרות החשבונך באתר flattr.</string>
<!--Flattr-->
<string name="flattr_click_success">תרמת ב-Flattr!</string>
<string name="flattr_click_success_count">תרמת ב-Flattr %d פעמים! </string>
<string name="flattr_click_success_queue">תרומות Flattr: %s.</string>
<string name="flattr_click_failure_count">כישלון לתרום ב-Flattr %d!</string>
<string name="flattr_click_failure">לא נתרם ב-Flattr: %s.</string>
<string name="flattr_click_enqueued">תרומות ב-Flattr מאוחר יותר</string>
<string name="flattring_thing">תורם ב-Flattr %s</string>
<string name="flattring_label">אנטנה-פוד תורם ב-Flattr</string>
<string name="flattrd_label">אנטנה-פוד תרם ב-Flattr</string>
<string name="flattrd_failed_label">כישלון תרומת אנטנה-פוד ב-Flattr</string>
<string name="flattr_retrieving_status">איחזור תרומות Flattr</string>
<!--Variable Speed-->
<string name="download_plugin_label">הורד תוסף</string>
<string name="no_playback_plugin_title">תוסף לא מותקן</string>
<string name="no_playback_plugin_msg">לניגון במהירות משתנה תוסף מגורם שלישי צריך להיות מותקן. \n\nהקש על \'הורד תוסף\' להוריד תוסף חינמי מחנות Play\n\nבעיות בשימוש עם תוסף זה אינן באחריות אנטנה-פוד וצריך לדווחן ליוצר התוסף.</string>
<string name="set_playback_speed_label">מהירויות ניגון</string>
<!--Empty list labels-->
<string name="no_items_label">אין פריטים ברשימה זו.</string>
<string name="no_feeds_label">לא נרשמת עדיין להזנות.</string>
<!--Preferences-->
<string name="other_pref">אחר</string>
<string name="about_pref">אודות</string>
<string name="queue_label">תור</string>
<string name="services_label">שירותים</string>
<string name="flattr_label">Flattr</string>
<string name="pref_pauseOnHeadsetDisconnect_sum">השהה השמעה בניתוק האוזניות </string>
<string name="pref_followQueue_sum">עבור לפריט הבא בתור כאשר הניגון מסתיים</string>
<string name="playback_pref">ניגון</string>
<string name="network_pref">רשת</string>
<string name="pref_autoUpdateIntervall_title">זמן בין עידכונים</string>
<string name="pref_autoUpdateIntervall_sum">ציין פרק זמן שבו ההזנות עוברות רענון באופן אוטומטי או לבטל ריענון</string>
<string name="pref_downloadMediaOnWifiOnly_sum">הורד קבצי מדיה רק דרך חיבור אינטרנט אלחוטי</string>
<string name="pref_followQueue_title">ניגון מתמשך</string>
<string name="pref_downloadMediaOnWifiOnly_title">הורדת מדיה דרך אינטרנט אלחוטי</string>
<string name="pref_pauseOnHeadsetDisconnect_title">ניתוק אוזניות</string>
<string name="pref_mobileUpdate_title">עידכון דרך רשת סלולרית</string>
<string name="pref_mobileUpdate_sum">אפשר עידכונים דרך רשת סלולרית</string>
<string name="refreshing_label">מרענן</string>
<string name="flattr_settings_label">הגדרות Flattr</string>
<string name="pref_flattr_auth_title">כניסה ל-Fattr</string>
<string name="pref_flattr_auth_sum">היכנס לחשבון שלך לflattr לתרום ישירות מתוך האפליקציה.</string>
<string name="pref_flattr_this_app_title">תרום באמצעות Flattr לאפליקציה זו</string>
<string name="pref_flattr_this_app_sum">תמוך בפיתוח אנטנה-פוד בתרומה עם Flattr. תודה!</string>
<string name="pref_revokeAccess_title">בטל גישה</string>
<string name="pref_revokeAccess_sum">בטל הרשאת גישה לחשבון flattr ליישום זה.</string>
<string name="pref_auto_flattr_title">תרומות Flattr אוטומטיות</string>
<string name="pref_auto_flattr_sum">תרום לפרקים ש80% מתוכם נוגן </string>
<string name="pref_display_only_episodes_title">הצג רק פרקים</string>
<string name="pref_display_only_episodes_sum">הצג רק פריטים שלהם פרק.</string>
<string name="user_interface_label">ממשק משתמש</string>
<string name="pref_set_theme_title">בחר ערכת נושא</string>
<string name="pref_set_theme_sum">שנה את מראה אנטנה-פוד</string>
<string name="pref_automatic_download_title">הורדה אוטומטית</string>
<string name="pref_automatic_download_sum">הגדר הורדה אטומטית של פרקים.</string>
<string name="pref_autodl_wifi_filter_title">אפשר סינון אינטרנט אלחוטי</string>
<string name="pref_autodl_wifi_filter_sum">אפשר הורדה אוטומטית דרך רשתות אלחוטייות נבחרות.</string>
<string name="pref_episode_cache_title">מטמון פרקים</string>
<string name="pref_theme_title_light">בהיר</string>
<string name="pref_theme_title_dark">כהה</string>
<string name="pref_episode_cache_unlimited">בלתי מוגבל</string>
<string name="pref_update_interval_hours_plural">שעות</string>
<string name="pref_update_interval_hours_singular">שעה</string>
<string name="pref_update_interval_hours_manual">ידני</string>
<string name="pref_gpodnet_authenticate_title">כניסה</string>
<string name="pref_gpodnet_authenticate_sum">כנס עם חשבון gpodder.net שלך על מנת לסנכרן את ההרשמות שלך.</string>
<string name="pref_gpodnet_logout_title">התנתקות</string>
<string name="pref_gpodnet_logout_toast">ההתנתקות הייתה מוצלחת</string>
<string name="pref_gpodnet_setlogin_information_title">שינוי פרטי התחברות</string>
<string name="pref_gpodnet_setlogin_information_sum">שנה פרטי התחברות של חשבון gpodder.net.</string>
<string name="pref_playback_speed_title">מהירויות ניגון</string>
<string name="pref_playback_speed_sum">התאמת המהיריות הזמינות לניגון במהירות משתנה</string>
<string name="pref_gpodnet_sethostname_title">הגדר שם שרת</string>
<string name="pref_gpodnet_sethostname_use_default_host">השתמש בשרת ברירת מידל</string>
<!--Search-->
<string name="search_hint">חפש הזנות או פרקים</string>
<string name="found_in_shownotes_label">נמצא בהערות פרק</string>
<string name="found_in_chapters_label">נמצא בפרקים</string>
<string name="search_status_searching">מחפש...</string>
<string name="search_status_no_results">אין תוצאות</string>
<string name="search_results_label">תוצאות חיפוש</string>
<string name="search_term_label">חיפשת:\u0020</string>
<string name="search_label">חיפוש</string>
<string name="found_in_title_label">נמצא בכותרת</string>
<!--OPML import and export-->
<string name="opml_import_txtv_button_lable">קבצי OPML יאפשרו לכך לנייד פודקאסטים מלוכד פודקאסטים אחד למשנו.</string>
<string name="opml_import_explanation">לייבא קובץ OPML, אתה צריך למקם אותו בספרייה הבאה וללחוץ על הכפתור למטה כדי להתחיל את תהליך היבוא.</string>
<string name="start_import_label">התחל יבוא</string>
<string name="opml_import_label">יבוא OPML</string>
<string name="opml_directory_error">שגיאה!</string>
<string name="reading_opml_label">קורא קובץ OPML</string>
<string name="opml_reader_error">אירעה שגיאה בזמן קריאת קובץ OPML:</string>
<string name="opml_import_error_dir_empty">ספריית היבוא ריקה.</string>
<string name="select_all_label">בחר הכל</string>
<string name="deselect_all_label">בטל בחירות</string>
<string name="choose_file_to_import_label">בחר קובץ ליבוא</string>
<string name="opml_export_label">יצוא OPML</string>
<string name="exporting_label">מייצא...</string>
<string name="export_error_label">שגיאת יצוא</string>
<string name="opml_export_success_title">יצוא OPML הצליח.</string>
<string name="opml_export_success_sum">קובץ OPML נכתב ל:\u0020</string>
<!--Sleep timer-->
<string name="set_sleeptimer_label">קבע טיימר שינה</string>
<string name="disable_sleeptimer_label">בטל טיימר שינה</string>
<string name="enter_time_here_label">קבע זמן</string>
<string name="sleep_timer_label">טיימר שינה</string>
<string name="time_left_label">זמן נותר:\u0020</string>
<string name="time_dialog_invalid_input">קלט לא חוקי, זמן חייב להיות מספר שלם</string>
<!--Miro Guide-->
<string name="loading_categories_label">טוען קטגוריות...</string>
<string name="browse_miroguide_label">עיין במדריך Miro</string>
<string name="txtv_browse_miroguide_label">או עיין במדריך Miro:</string>
<string name="miro_guide_label">מדריך Miro</string>
<string name="miro_search_hint">חפש במדריך Miro</string>
<string name="popular_label">פופולארי</string>
<string name="best_rating_label">הדירוג הטוב ביותר</string>
<string name="add_feed_label">הוסף פודקאסט</string>
<string name="miro_feed_added">הזנה מוספת</string>
<!--gpodder.net-->
<string name="gpodnet_taglist_header">קטגוריות</string>
<string name="gpodnet_toplist_header">פודקאסטים בכירים</string>
<string name="gpodnet_suggestions_header">המלצות</string>
<string name="gpodnet_search_hint">חפש ב-gpodder.net</string>
<string name="gpodnetauth_login_title">התחברות</string>
<string name="gpodnetauth_login_descr">ברוך הבא להתחברות ל-gpodder.net. ראשית, הקלד את פרטי הכניסה שלך:</string>
<string name="gpodnetauth_login_butLabel">התחברות</string>
<string name="gpodnetauth_login_register">אם אין לך עדיין חשבון, אתה יכול ליצור אחד כאן:\nhttps://gpodder.net/register/</string>
<string name="username_label">שם משתמש:</string>
<string name="password_label">ססמה:</string>
<string name="gpodnetauth_device_title">בחירת מכשיר</string>
<string name="gpodnetauth_device_descr">צור מכשיר חדש לשימוש עבור חשבון gpodder.net או לבחר אחד קיים:</string>
<string name="gpodnetauth_device_deviceID">מזהה מכשיר:\u0020</string>
<string name="gpodnetauth_device_caption">כותרת</string>
<string name="gpodnetauth_device_butCreateNewDevice">צור מכשיר חדש</string>
<string name="gpodnetauth_device_chooseExistingDevice">בחר מכשיר קיים:</string>
<string name="gpodnetauth_device_errorEmpty">מזהה המכשיר אינו יכול להיות ריק</string>
<string name="gpodnetauth_device_errorAlreadyUsed">מזהה המכשיר בשימוש</string>
<string name="gpodnetauth_device_butChoose">בחר</string>
<string name="gpodnetauth_finish_title">התחברות מוצלחת!</string>
<string name="gpodnetauth_finish_descr">מזל טוב! חשבון gpodder.net שלך מקושר כעת עם המכשיר שלך. אנטנה-פוד מעתה יסנכרן באופן אוטומטי הרשמות במכשיר שלך עם חשבון gpodder.net שלך.</string>
<string name="gpodnetauth_finish_butsyncnow">התחל סנכרון כעת</string>
<string name="gpodnetauth_finish_butgomainscreen">עבור למסך הראשי</string>
<string name="gpodnetsync_auth_error_title">שגיאת אימות של gpodder.net</string>
<string name="gpodnetsync_auth_error_descr">שם משתמש או ססמה שגויים</string>
<string name="gpodnetsync_error_title">שגיאת סנכרון של gpodder.net</string>
<string name="gpodnetsync_error_descr">שגיאה במהל סינכרון:\u0020</string>
<!--Directory chooser-->
<string name="selected_folder_label">תיקיה נבחרת:</string>
<string name="create_folder_label">צור תיקיה</string>
<string name="choose_data_directory">בחר תיקיית מידע</string>
<string name="create_folder_msg">צור תיקיה חדשה בשם \"%1$s\"?</string>
<string name="create_folder_success">תיקיה חדשה נוצרה</string>
<string name="create_folder_error_no_write_access">לא ניתן לכתוב לתיקה זו</string>
<string name="create_folder_error_already_exists">תיקה כבר קיימת</string>
<string name="create_folder_error">לא ניתן ליצור תיקיה</string>
<string name="folder_not_empty_dialog_title">התיקיה אינה ריקה</string>
<string name="folder_not_empty_dialog_msg">התיקייה שבחרת אינה ריקה. הורדות מדיה וקבצים אחרים יהיו ממוקמות ישירות בתיקייה זו. להמשיך בכל זאת?</string>
<string name="set_to_default_folder">בחר תיקיית ברירת מחדל</string>
<string name="pref_pausePlaybackForFocusLoss_sum">השהה ניגון במקום החלשת עוצמת שמע כשאפליקציה אחרת מנגנת</string>
<string name="pref_pausePlaybackForFocusLoss_title">השהה בזמן הפרעה</string>
<!--Online feed view-->
<string name="subscribe_label">הרשם</string>
<string name="subscribed_label">נרשם</string>
<string name="downloading_label">מוריד...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">הצג פרקים</string>
<string name="show_shownotes_label">הצג הערות פרק</string>
<string name="show_cover_label">הצג תמונה</string>
<string name="rewind_label">הרץ לאחור</string>
<string name="fast_forward_label">הרץ קדימה</string>
<string name="media_type_audio_label">שמע</string>
<string name="media_type_video_label">וידאו</string>
<string name="navigate_upwards_label">נווט למעלה</string>
<string name="butAction_label">עוד פעולות</string>
<string name="status_playing_label">הפרק מתנגן</string>
<string name="status_downloading_label">הפרק יורד</string>
<string name="status_downloaded_label">הפרק ירד</string>
<string name="status_unread_label">פריט חדש</string>
<string name="in_queue_label">הפרק בתור</string>
<string name="new_episodes_count_label">מספר הפרקים החדשים</string>
<string name="in_progress_episodes_count_label">מספר הפרקים שהתחלת להאזין להם</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">מייבא רישום מאפליקציות יעודיות...</string>
</resources>

View File

@ -291,4 +291,5 @@
<string name="subscribed_label">सदस्यता ली गई</string>
<string name="downloading_label">डाउनलोड कर रहा है ...</string>
<!--Content descriptions for image buttons-->
<!--AntennaPodSP-->
</resources>

View File

@ -308,4 +308,5 @@
<string name="status_unread_label">L\'oggetto è nuovo</string>
<string name="in_queue_label">L\'episodio è in coda</string>
<string name="new_episodes_count_label">Numero dei nuovi episodi</string>
<!--AntennaPodSP-->
</resources>

View File

@ -5,7 +5,7 @@
<string name="feeds_label">피드</string>
<string name="podcasts_label">팟캐스트</string>
<string name="episodes_label">에피소드</string>
<string name="new_label">새로 만들기</string>
<string name="new_label">신규</string>
<string name="waiting_list_label">추가 대기 목록</string>
<string name="settings_label">설정</string>
<string name="add_new_feed_label">팟캐스트 추가</string>
@ -89,6 +89,7 @@
<string name="download_error_unsupported_type">지원하지 않는 피드 종류</string>
<string name="download_error_connection_error">연결 오류</string>
<string name="download_error_unknown_host">알 수 없는 호스트</string>
<string name="download_error_unauthorized">인증 오류</string>
<string name="cancel_all_downloads_label">모든 다운로드 취소</string>
<string name="download_cancelled_msg">다운로드 취소됨</string>
<string name="download_report_title">다운로드 마침</string>
@ -104,6 +105,8 @@
<string name="download_type_media">미디어 파일</string>
<string name="download_type_image">그림</string>
<string name="download_request_error_dialog_message_prefix">파일을 다운로드하는 중 오류가 발생했습니다:\u0020</string>
<string name="authentication_notification_title">인증이 필요합니다</string>
<string name="authentication_notification_msg">요청한 자원은 사용자 이름과 암호가 필요합니다</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">오류!</string>
<string name="player_stopped_msg">재생 중인 미디어 없음</string>
@ -321,4 +324,6 @@
<string name="in_queue_label">에피소드가 대기열에 들어 있습니다</string>
<string name="new_episodes_count_label">새 에피소드 개수</string>
<string name="in_progress_episodes_count_label">듣기를 시작한 에피소드 개수</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">단일 용도 앱에서 구독 정보를 가져옵니다...</string>
</resources>

View File

@ -4,7 +4,7 @@
<string name="app_name">AntennaPod</string>
<string name="feeds_label">Feeds</string>
<string name="podcasts_label">PODCASTS</string>
<string name="episodes_label">EPISODES</string>
<string name="episodes_label">AFLEVERINGEN</string>
<string name="new_label">Nieuw</string>
<string name="waiting_list_label">Wachtlijst</string>
<string name="settings_label">Instellingen</string>
@ -36,8 +36,8 @@
<string name="chapters_label">Hoofdstukken</string>
<string name="shownotes_label">Shownotes</string>
<string name="description_label">Beschrijving</string>
<string name="most_recent_prefix">Meest recent episode:\u0020</string>
<string name="episodes_suffix">\u0020episodes</string>
<string name="most_recent_prefix">Meest recente aflevering:\u0020</string>
<string name="episodes_suffix">\u0020afleveringen</string>
<string name="published_prefix">Gepubliceerd:\u0020</string>
<string name="length_prefix">Lengte:\u0020</string>
<string name="size_prefix">Grootte:\u0020</string>
@ -58,7 +58,7 @@
<string name="remove_feed_label">Feed verwijderen</string>
<string name="share_link_label">Website link delen</string>
<string name="share_source_label">Feed link delen</string>
<string name="feed_delete_confirmation_msg">Bevestig dat u deze feed en ALLE episodes van deze feed die u hebt gedownload wilt verwijderen.</string>
<string name="feed_delete_confirmation_msg">Bevestig dat u deze feed en ALLE afleveringen van deze feed die u hebt gedownload wilt verwijderen.</string>
<string name="feed_remover_msg">Feed verwijderen</string>
<!--actions on feeditems-->
<string name="download_label">Download</string>
@ -74,7 +74,7 @@
<string name="support_label">Flattr dit</string>
<string name="enqueue_all_new">Alle in wachtrij plaatsen</string>
<string name="download_all">Alles downloaden</string>
<string name="skip_episode_label">Episode overslaan</string>
<string name="skip_episode_label">Aflevering overslaan</string>
<!--Download messages and labels-->
<string name="download_successful">Download succesvol</string>
<string name="download_failed">Downloaden mislukt</string>
@ -89,6 +89,7 @@
<string name="download_error_unsupported_type">Niet ondersteunde feed soort</string>
<string name="download_error_connection_error">Verbindingsfout</string>
<string name="download_error_unknown_host">Onbekende host</string>
<string name="download_error_unauthorized">Authenticatie fout</string>
<string name="cancel_all_downloads_label">Alle downloads annuleren</string>
<string name="download_cancelled_msg">Download geannuleerd</string>
<string name="download_report_title">Downloads afgerond</string>
@ -104,6 +105,8 @@
<string name="download_type_media">Mediabestand</string>
<string name="download_type_image">Beeld</string>
<string name="download_request_error_dialog_message_prefix">Er is een fout opgetreden bij het downloaden van bestand:\u0020</string>
<string name="authentication_notification_title">Authenticatie vereist</string>
<string name="authentication_notification_msg">De opgevraagde bron vereist een gebruikersnaam en een wachtwoord</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Fout!</string>
<string name="player_stopped_msg">Geen media aan het afspelen</string>
@ -141,6 +144,17 @@
<string name="access_revoked_title">Toegang ingetrokken</string>
<string name="access_revoked_info">U heeft met succes het toegangstoken van AntennaPod tot uw account ingetrokken. Om het proces te voltooien, moet u deze app uit de lijst van goedgekeurde applicaties in uw accountinstellingen op de Flattr website verwijderen.</string>
<!--Flattr-->
<string name="flattr_click_success">Een ding geflattr\'d</string>
<string name="flattr_click_success_count">%d dingen geflattr\'d!</string>
<string name="flattr_click_success_queue">Geflattr\'d: %s.</string>
<string name="flattr_click_failure_count">Kon %d dingen niet flattr\'n!</string>
<string name="flattr_click_failure">Niet geflattr\'d: %s.</string>
<string name="flattr_click_enqueued">Ding wordt later geflattr\'d</string>
<string name="flattring_thing">%s aan het flattren</string>
<string name="flattring_label">AntennaPod is aan het flattren</string>
<string name="flattrd_label">AntennaPod heeft geflattr\'d</string>
<string name="flattrd_failed_label">AntennaPod flattr niet gelukt</string>
<string name="flattr_retrieving_status">Geflattr\'de dingen aan het ontvangen</string>
<!--Variable Speed-->
<string name="download_plugin_label">Plugin downloaden</string>
<string name="no_playback_plugin_title">Plugin niet geinstalleerd</string>
@ -175,16 +189,18 @@
<string name="pref_flattr_this_app_sum">Ondersteun de ontwikkeling van AntennaPod door het te flattr\'en. Bedankt!</string>
<string name="pref_revokeAccess_title">Toegang intrekken</string>
<string name="pref_revokeAccess_sum">Trek de toegang van deze app in tot je Flattr account.</string>
<string name="pref_display_only_episodes_title">Alleen episodes weergeven</string>
<string name="pref_display_only_episodes_sum">Geef alleen items weer die ook een episode hebben.</string>
<string name="pref_auto_flattr_title">Automatische Flattr</string>
<string name="pref_auto_flattr_sum">Afleveringen automatisch Flattr nadat 80 procent van de episode gespeeld is</string>
<string name="pref_display_only_episodes_title">Alleen afleveringen weergeven</string>
<string name="pref_display_only_episodes_sum">Geef alleen items weer die ook een aflevering hebben.</string>
<string name="user_interface_label">User Interface</string>
<string name="pref_set_theme_title">Kies theme</string>
<string name="pref_set_theme_sum">Verander het uiterlijk van AntennaPod.</string>
<string name="pref_automatic_download_title">Automatisch downloaden</string>
<string name="pref_automatic_download_sum">Configureer het automatisch downloaden van episoden.</string>
<string name="pref_automatic_download_sum">Configureer het automatisch downloaden van afleveringen.</string>
<string name="pref_autodl_wifi_filter_title">Wi-Fi filter inschakelen</string>
<string name="pref_autodl_wifi_filter_sum">Automatisch downloaden alleen toestaan voor geselecteerde Wi-Fi-netwerken.</string>
<string name="pref_episode_cache_title">Episode cache</string>
<string name="pref_episode_cache_title">Afleveringen cache</string>
<string name="pref_theme_title_light">Licht</string>
<string name="pref_theme_title_dark">Donker</string>
<string name="pref_episode_cache_unlimited">Onbeperkt</string>
@ -202,7 +218,7 @@
<string name="pref_gpodnet_sethostname_title">Definieer hostname</string>
<string name="pref_gpodnet_sethostname_use_default_host">Gebruik standaard host</string>
<!--Search-->
<string name="search_hint">Feeds of episodes zoeken</string>
<string name="search_hint">Feeds of afleveringen zoeken</string>
<string name="found_in_shownotes_label">Gevonden in de shownotes</string>
<string name="found_in_chapters_label">Gevonden in hoofdstukken</string>
<string name="search_status_searching">Aan het zoeken...</string>
@ -292,7 +308,22 @@
<string name="subscribed_label">Geabonneerd</string>
<string name="downloading_label">Aan het downloaden</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Hoofdstukken tonen</string>
<string name="show_shownotes_label">Shownotes tonen</string>
<string name="show_cover_label">Beeld tonen</string>
<string name="rewind_label">Terugspoelen</string>
<string name="fast_forward_label">Vooruitspoelen</string>
<string name="media_type_audio_label">Audio</string>
<string name="media_type_video_label">Video</string>
<string name="navigate_upwards_label">Navigeer naar boven</string>
<string name="butAction_label">Meer acties</string>
<string name="status_playing_label">Aflevering wordt gespeeld</string>
<string name="status_downloading_label">Aflevering wordt gedownload</string>
<string name="status_downloaded_label">Aflevering is gedownload</string>
<string name="status_unread_label">Item is nieuw</string>
<string name="in_queue_label">Aflevering is in de queue</string>
<string name="new_episodes_count_label">Aantal nieuwe afleveringen</string>
<string name="in_progress_episodes_count_label">Aantal afleveringen dat begonnen te luisteren zijn</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Abonnementen aan het importeren vanuit single-purpose apps...</string>
</resources>

View File

@ -304,4 +304,5 @@
<string name="in_queue_label">Odcinek jest w kolejce</string>
<string name="new_episodes_count_label">Liczba nowych odcinków</string>
<string name="in_progress_episodes_count_label">Liczba odcinków, których zacząłeś słuchać</string>
<!--AntennaPodSP-->
</resources>

View File

@ -299,4 +299,5 @@
<string name="status_unread_label">Item é novo</string>
<string name="in_queue_label">Episódio está na fila</string>
<string name="new_episodes_count_label">Numero de novos episódios</string>
<!--AntennaPodSP-->
</resources>

View File

@ -89,6 +89,7 @@
<string name="download_error_unsupported_type">Fonte não suportada</string>
<string name="download_error_connection_error">Erro de ligação</string>
<string name="download_error_unknown_host">Servidor desconhecido</string>
<string name="download_error_unauthorized">Erro de autenticação</string>
<string name="cancel_all_downloads_label">Cancelar transferências</string>
<string name="download_cancelled_msg">Transferência cancelada</string>
<string name="download_report_title">Transferências terminadas</string>
@ -104,6 +105,8 @@
<string name="download_type_media">Ficheiro multimédia</string>
<string name="download_type_image">Imagem</string>
<string name="download_request_error_dialog_message_prefix">Ocorreu um erro ao transferir o ficheiro:\u0020</string>
<string name="authentication_notification_title">Requer autenticação</string>
<string name="authentication_notification_msg">O recurso solicitado requer um utilizador e uma senha</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Erro!</string>
<string name="player_stopped_msg">Nada em reprodução</string>
@ -321,4 +324,5 @@
<string name="in_queue_label">Episódio está na fila</string>
<string name="new_episodes_count_label">Número de novos episódios</string>
<string name="in_progress_episodes_count_label">Número de episódios que já foi iniciada a reprodução</string>
<!--AntennaPodSP-->
</resources>

View File

@ -262,4 +262,5 @@
<string name="subscribed_label">Abonat</string>
<string name="downloading_label">Se descarcă...</string>
<!--Content descriptions for image buttons-->
<!--AntennaPodSP-->
</resources>

View File

@ -311,4 +311,5 @@
<string name="in_queue_label">Эпизод в очереди</string>
<string name="new_episodes_count_label">Количество новых эпизодов</string>
<string name="in_progress_episodes_count_label">Количество начатых эпизодов</string>
<!--AntennaPodSP-->
</resources>

View File

@ -72,7 +72,7 @@
<string name="remove_from_queue_label">Ta bort från Kön</string>
<string name="visit_website_label">Besök websidan</string>
<string name="support_label">Flattr det här</string>
<string name="enqueue_all_new">Ställ alla i kö</string>
<string name="enqueue_all_new">Lägg till alla i kön</string>
<string name="download_all">Ladda ner alla</string>
<string name="skip_episode_label">Hoppa över avsnitt</string>
<!--Download messages and labels-->
@ -89,6 +89,7 @@
<string name="download_error_unsupported_type">Flödestyp utan stöd</string>
<string name="download_error_connection_error">Anslutningsfel</string>
<string name="download_error_unknown_host">Okänd värd</string>
<string name="download_error_unauthorized">Autentiseringsproblem</string>
<string name="cancel_all_downloads_label">Avbryt alla nedladdningar</string>
<string name="download_cancelled_msg">Nedladdning avbruten</string>
<string name="download_report_title">Nedladdningar färdiga</string>
@ -104,6 +105,8 @@
<string name="download_type_media">Mediafil</string>
<string name="download_type_image">Bild</string>
<string name="download_request_error_dialog_message_prefix">Ett fel uppstod vid försöket att ladda ner filen:\u0020</string>
<string name="authentication_notification_title">Autentisering krävs</string>
<string name="authentication_notification_msg">Resursen du begärde kräver ett användarnamn och ett lösenord</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Fel! </string>
<string name="player_stopped_msg">Inget media spelar</string>
@ -122,7 +125,7 @@
<string name="show_player_label">Visa spelare</string>
<!--Queue operations-->
<string name="clear_queue_label">Rensa kön</string>
<string name="organize_queue_label">Organisera kö</string>
<string name="organize_queue_label">Organisera kön</string>
<string name="undo">Ångra</string>
<string name="removed_from_queue">Föremålet avlägsnades</string>
<string name="move_to_top_label">Flytta längst upp</string>
@ -321,4 +324,6 @@
<string name="in_queue_label">Episoden är i kön</string>
<string name="new_episodes_count_label">Antal nya episoder</string>
<string name="in_progress_episodes_count_label">Antal episoder du har börjat lyssna på</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importerar prenumerationer från appar gjorda för ett enda syfte...</string>
</resources>

View File

@ -89,6 +89,7 @@
<string name="download_error_unsupported_type">Непідтримую такий канал</string>
<string name="download_error_connection_error">Помилка з\'єднання</string>
<string name="download_error_unknown_host">Невідомий host</string>
<string name="download_error_unauthorized">Помилка автентифікації</string>
<string name="cancel_all_downloads_label">Скасувати всі завантаження</string>
<string name="download_cancelled_msg">Відмінено завантаження</string>
<string name="download_report_title">Завантажили</string>
@ -104,6 +105,8 @@
<string name="download_type_media">Файл з медіа</string>
<string name="download_type_image">Зображення</string>
<string name="download_request_error_dialog_message_prefix">Помилка при завантажені файлу:\u0020</string>
<string name="authentication_notification_title">Потрібна автентифікація</string>
<string name="authentication_notification_msg">Для доступа до цього ресурса потрібні ім\'я та пароль </string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Помилка!</string>
<string name="player_stopped_msg"> Нічого грати</string>
@ -321,4 +324,6 @@
<string name="in_queue_label">Епізод чекає в черзі</string>
<string name="new_episodes_count_label">Кількість нових епізодів</string>
<string name="in_progress_episodes_count_label">Кількість епізодів що ви почали слухати</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Імпорт подкастів з інших програм...</string>
</resources>

View File

@ -308,4 +308,5 @@
<string name="in_queue_label">曲目已经在播放列表中</string>
<string name="new_episodes_count_label">新曲目数</string>
<string name="in_progress_episodes_count_label">已收听曲目数</string>
<!--AntennaPodSP-->
</resources>

View File

@ -100,6 +100,7 @@
<string name="download_error_unsupported_type">Unsupported Feed type</string>
<string name="download_error_connection_error">Connection error</string>
<string name="download_error_unknown_host">Unknown host</string>
<string name="download_error_unauthorized">Authentication error</string>
<string name="cancel_all_downloads_label">Cancel all downloads</string>
<string name="download_cancelled_msg">Download cancelled</string>
<string name="download_report_title">Downloads completed</string>
@ -115,6 +116,8 @@
<string name="download_type_media">Media file</string>
<string name="download_type_image">Image</string>
<string name="download_request_error_dialog_message_prefix">An error occurred when trying to download the file:\u0020</string>
<string name="authentication_notification_title">Authentication required</string>
<string name="authentication_notification_msg">The resource you requested requires a username and a password</string>
<!-- Mediaplayer messages -->
<string name="player_error_msg">Error!</string>
@ -350,4 +353,8 @@
<string name="in_queue_label">Episode is in the queue</string>
<string name="new_episodes_count_label">Number of new episodes</string>
<string name="in_progress_episodes_count_label">Number of episodes you have started listening to</string>
<!-- AntennaPodSP -->
<string name="sp_apps_importing_feeds_msg">Importing subscriptions from single-purpose apps&#8230;</string>
</resources>

View File

@ -0,0 +1,470 @@
// 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 android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.util.Log;
public class AndroidMediaPlayer extends MediaPlayerImpl {
private final static String AMP_TAG = "AocateAndroidMediaPlayer";
// private static final long TIMEOUT_DURATION_MS = 500;
android.media.MediaPlayer mp = null;
private android.media.MediaPlayer.OnBufferingUpdateListener onBufferingUpdateListener = new android.media.MediaPlayer.OnBufferingUpdateListener() {
public void onBufferingUpdate(android.media.MediaPlayer mp, int percent) {
if (owningMediaPlayer != null) {
owningMediaPlayer.lock.lock();
try {
if ((owningMediaPlayer.onBufferingUpdateListener != null)
&& (owningMediaPlayer.mpi == AndroidMediaPlayer.this)) {
owningMediaPlayer.onBufferingUpdateListener.onBufferingUpdate(owningMediaPlayer, percent);
}
}
finally {
owningMediaPlayer.lock.unlock();
}
}
}
};
private android.media.MediaPlayer.OnCompletionListener onCompletionListener = new android.media.MediaPlayer.OnCompletionListener() {
public void onCompletion(android.media.MediaPlayer mp) {
Log.d(AMP_TAG, "onCompletionListener being called");
if (owningMediaPlayer != null) {
owningMediaPlayer.lock.lock();
try {
if (owningMediaPlayer.onCompletionListener != null) {
owningMediaPlayer.onCompletionListener.onCompletion(owningMediaPlayer);
}
}
finally {
owningMediaPlayer.lock.unlock();
}
}
}
};
private android.media.MediaPlayer.OnErrorListener onErrorListener = new android.media.MediaPlayer.OnErrorListener() {
public boolean onError(android.media.MediaPlayer mp, int what, int extra) {
// Once we're in errored state, any received messages are going to be junked
if (owningMediaPlayer != null) {
owningMediaPlayer.lock.lock();
try {
if (owningMediaPlayer.onErrorListener != null) {
return owningMediaPlayer.onErrorListener.onError(owningMediaPlayer, what, extra);
}
}
finally {
owningMediaPlayer.lock.unlock();
}
}
return false;
}
};
private android.media.MediaPlayer.OnInfoListener onInfoListener = new android.media.MediaPlayer.OnInfoListener() {
public boolean onInfo(android.media.MediaPlayer mp, int what, int extra) {
if (owningMediaPlayer != null) {
owningMediaPlayer.lock.lock();
try {
if ((owningMediaPlayer.onInfoListener != null)
&& (owningMediaPlayer.mpi == AndroidMediaPlayer.this)) {
return owningMediaPlayer.onInfoListener.onInfo(owningMediaPlayer, what, extra);
}
}
finally {
owningMediaPlayer.lock.unlock();
}
}
return false;
}
};
// We have to assign this.onPreparedListener because the
// onPreparedListener in owningMediaPlayer sets the state
// to PREPARED. Due to prepareAsync, that's the only
// reasonable place to do it
// The others it just didn't make sense to have a setOnXListener that didn't use the parameter
private android.media.MediaPlayer.OnPreparedListener onPreparedListener = new android.media.MediaPlayer.OnPreparedListener() {
public void onPrepared(android.media.MediaPlayer mp) {
Log.d(AMP_TAG, "Calling onPreparedListener.onPrepared()");
if (AndroidMediaPlayer.this.owningMediaPlayer != null) {
AndroidMediaPlayer.this.lockMuteOnPreparedCount.lock();
try {
if (AndroidMediaPlayer.this.muteOnPreparedCount > 0) {
AndroidMediaPlayer.this.muteOnPreparedCount--;
}
else {
AndroidMediaPlayer.this.muteOnPreparedCount = 0;
if (AndroidMediaPlayer.this.owningMediaPlayer.onPreparedListener != null) {
Log.d(AMP_TAG, "Invoking AndroidMediaPlayer.this.owningMediaPlayer.onPreparedListener.onPrepared");
AndroidMediaPlayer.this.owningMediaPlayer.onPreparedListener.onPrepared(AndroidMediaPlayer.this.owningMediaPlayer);
}
}
}
finally {
AndroidMediaPlayer.this.lockMuteOnPreparedCount.unlock();
}
if (owningMediaPlayer.mpi != AndroidMediaPlayer.this) {
Log.d(AMP_TAG, "owningMediaPlayer has changed implementation");
}
}
}
};
private android.media.MediaPlayer.OnSeekCompleteListener onSeekCompleteListener = new android.media.MediaPlayer.OnSeekCompleteListener() {
public void onSeekComplete(android.media.MediaPlayer mp) {
if (owningMediaPlayer != null) {
owningMediaPlayer.lock.lock();
try {
lockMuteOnSeekCount.lock();
try {
if (AndroidMediaPlayer.this.muteOnSeekCount > 0) {
AndroidMediaPlayer.this.muteOnSeekCount--;
}
else {
AndroidMediaPlayer.this.muteOnSeekCount = 0;
if (AndroidMediaPlayer.this.owningMediaPlayer.onSeekCompleteListener != null) {
owningMediaPlayer.onSeekCompleteListener.onSeekComplete(owningMediaPlayer);
}
}
}
finally {
lockMuteOnSeekCount.unlock();
}
}
finally {
owningMediaPlayer.lock.unlock();
}
}
}
};
public AndroidMediaPlayer(com.aocate.media.MediaPlayer owningMediaPlayer, Context context) {
super(owningMediaPlayer, context);
mp = new MediaPlayer();
// final ReentrantLock lock = new ReentrantLock();
// Handler handler = new Handler(Looper.getMainLooper()) {
// @Override
// public void handleMessage(Message msg) {
// Log.d(AMP_TAG, "Instantiating new AndroidMediaPlayer from Handler");
// lock.lock();
// if (mp == null) {
// mp = new MediaPlayer();
// }
// lock.unlock();
// }
// };
//
// long endTime = System.currentTimeMillis() + TIMEOUT_DURATION_MS;
//
// while (true) {
// // Retry messages until mp isn't null or it's time to give up
// handler.sendMessage(handler.obtainMessage());
// if ((mp != null)
// || (endTime < System.currentTimeMillis())) {
// break;
// }
// try {
// Thread.sleep(50);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
if (mp == null) {
throw new IllegalStateException("Did not instantiate android.media.MediaPlayer successfully");
}
mp.setOnBufferingUpdateListener(this.onBufferingUpdateListener);
mp.setOnCompletionListener(this.onCompletionListener);
mp.setOnErrorListener(this.onErrorListener);
mp.setOnInfoListener(this.onInfoListener);
Log.d(AMP_TAG, " ++++++++++++++++++++++++++++++++ Setting prepared listener to this.onPreparedListener");
mp.setOnPreparedListener(this.onPreparedListener);
mp.setOnSeekCompleteListener(this.onSeekCompleteListener);
}
@Override
public boolean canSetPitch() {
return false;
}
@Override
public boolean canSetSpeed() {
return false;
}
@Override
public float getCurrentPitchStepsAdjustment() {
return 0;
}
@Override
public int getCurrentPosition() {
owningMediaPlayer.lock.lock();
try {
return mp.getCurrentPosition();
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public float getCurrentSpeedMultiplier() {
return 1f;
}
@Override
public int getDuration() {
owningMediaPlayer.lock.lock();
try {
return mp.getDuration();
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public float getMaxSpeedMultiplier() {
return 1f;
}
@Override
public float getMinSpeedMultiplier() {
return 1f;
}
@Override
public boolean isLooping() {
owningMediaPlayer.lock.lock();
try {
return mp.isLooping();
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public boolean isPlaying() {
owningMediaPlayer.lock.lock();
try {
return mp.isPlaying();
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void pause() {
owningMediaPlayer.lock.lock();
try {
mp.pause();
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void prepare() throws IllegalStateException, IOException {
owningMediaPlayer.lock.lock();
Log.d(AMP_TAG, "prepare()");
try {
mp.prepare();
Log.d(AMP_TAG, "Finish prepare()");
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void prepareAsync() {
mp.prepareAsync();
}
@Override
public void release() {
owningMediaPlayer.lock.lock();
try {
if (mp != null) {
Log.d(AMP_TAG, "mp.release()");
mp.release();
}
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void reset() {
owningMediaPlayer.lock.lock();
try {
mp.reset();
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void seekTo(int msec) throws IllegalStateException {
owningMediaPlayer.lock.lock();
try {
mp.setOnSeekCompleteListener(this.onSeekCompleteListener);
mp.seekTo(msec);
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void setAudioStreamType(int streamtype) {
owningMediaPlayer.lock.lock();
try {
mp.setAudioStreamType(streamtype);
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void setDataSource(Context context, Uri uri)
throws IllegalArgumentException, IllegalStateException, IOException {
owningMediaPlayer.lock.lock();
try {
Log.d(AMP_TAG, "setDataSource(context, " + uri.toString() + ")");
mp.setDataSource(context, uri);
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void setDataSource(String path) throws IllegalArgumentException,
IllegalStateException, IOException {
owningMediaPlayer.lock.lock();
try {
Log.d(AMP_TAG, "setDataSource(" + path + ")");
mp.setDataSource(path);
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void setEnableSpeedAdjustment(boolean enableSpeedAdjustment) {
// Can't!
}
@Override
public void setLooping(boolean loop) {
owningMediaPlayer.lock.lock();
try {
mp.setLooping(loop);
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void setPitchStepsAdjustment(float pitchSteps) {
// Can't!
}
@Override
public void setPlaybackPitch(float f) {
// Can't!
}
@Override
public void setPlaybackSpeed(float f) {
// Can't!
Log.d(AMP_TAG, "setPlaybackSpeed(" + f + ")");
}
@Override
public void setSpeedAdjustmentAlgorithm(int algorithm) {
// Can't!
Log.d(AMP_TAG, "setSpeedAdjustmentAlgorithm(" + algorithm + ")");
}
@Override
public void setVolume(float leftVolume, float rightVolume) {
owningMediaPlayer.lock.lock();
try {
mp.setVolume(leftVolume, rightVolume);
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void setWakeMode(Context context, int mode) {
owningMediaPlayer.lock.lock();
try {
if (mode != 0) {
mp.setWakeMode(context, mode);
}
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void start() {
owningMediaPlayer.lock.lock();
try {
mp.start();
}
finally {
owningMediaPlayer.lock.unlock();
}
}
@Override
public void stop() {
owningMediaPlayer.lock.lock();
try {
mp.stop();
}
finally {
owningMediaPlayer.lock.unlock();
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,118 @@
// 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.concurrent.locks.ReentrantLock;
import android.content.Context;
import android.net.Uri;
import android.util.Log;
public abstract class MediaPlayerImpl {
private static final String MPI_TAG = "AocateMediaPlayerImpl";
protected final MediaPlayer owningMediaPlayer;
protected final Context mContext;
protected int muteOnPreparedCount = 0;
protected int muteOnSeekCount = 0;
public MediaPlayerImpl(MediaPlayer owningMediaPlayer, Context context) {
this.owningMediaPlayer = owningMediaPlayer;
this.mContext = context;
}
public abstract boolean canSetPitch();
public abstract boolean canSetSpeed();
public abstract float getCurrentPitchStepsAdjustment();
public abstract int getCurrentPosition();
public abstract float getCurrentSpeedMultiplier();
public abstract int getDuration();
public abstract float getMaxSpeedMultiplier();
public abstract float getMinSpeedMultiplier();
public abstract boolean isLooping();
public abstract boolean isPlaying();
public abstract void pause();
public abstract void prepare() throws IllegalStateException, IOException;
public abstract void prepareAsync();
public abstract void release();
public abstract void reset();
public abstract void seekTo(int msec) throws IllegalStateException;
public abstract void setAudioStreamType(int streamtype);
public abstract void setDataSource(Context context, Uri uri) throws IllegalArgumentException, IllegalStateException, IOException;
public abstract void setDataSource(String path) throws IllegalArgumentException, IllegalStateException, IOException;
public abstract void setEnableSpeedAdjustment(boolean enableSpeedAdjustment);
public abstract void setLooping(boolean loop);
public abstract void setPitchStepsAdjustment(float pitchSteps);
public abstract void setPlaybackPitch(float f);
public abstract void setPlaybackSpeed(float f);
public abstract void setSpeedAdjustmentAlgorithm(int algorithm);
public abstract void setVolume(float leftVolume, float rightVolume);
public abstract void setWakeMode(Context context, int mode);
public abstract void start();
public abstract void stop();
protected ReentrantLock lockMuteOnPreparedCount = new ReentrantLock();
public void muteNextOnPrepare() {
lockMuteOnPreparedCount.lock();
Log.d(MPI_TAG, "muteNextOnPrepare()");
try {
this.muteOnPreparedCount++;
}
finally {
lockMuteOnPreparedCount.unlock();
}
}
protected ReentrantLock lockMuteOnSeekCount = new ReentrantLock();
public void muteNextSeek() {
lockMuteOnSeekCount.lock();
Log.d(MPI_TAG, "muteNextOnSeek()");
try {
this.muteOnSeekCount++;
}
finally {
lockMuteOnSeekCount.unlock();
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,31 @@
// 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;
public class SpeedAdjustmentAlgorithm {
/**
* Use this to use the user-specified algorithm
*/
public static int DEFAULT = 0;
/**
* Better for voice audio
*/
public static int SONIC = 1;
/**
* Better for music audio
*/
public static int WSOLA = 2;
}

View File

@ -0,0 +1,18 @@
// 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.presto.service;
oneway interface IDeathCallback_0_8 {
}

View File

@ -0,0 +1,19 @@
// 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.presto.service;
interface IOnBufferingUpdateListenerCallback_0_8 {
void onBufferingUpdate(int percent);
}

View File

@ -0,0 +1,19 @@
// 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.presto.service;
interface IOnCompletionListenerCallback_0_8 {
void onCompletion();
}

View File

@ -0,0 +1,19 @@
// 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.presto.service;
interface IOnErrorListenerCallback_0_8 {
boolean onError(int what, int extra);
}

View File

@ -0,0 +1,19 @@
// 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.presto.service;
interface IOnInfoListenerCallback_0_8 {
boolean onInfo(int what, int extra);
}

View File

@ -0,0 +1,19 @@
// 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.presto.service;
interface IOnPitchAdjustmentAvailableChangedListenerCallback_0_8 {
void onPitchAdjustmentAvailableChanged(boolean pitchAdjustmentAvailable);
}

View File

@ -0,0 +1,19 @@
// 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.presto.service;
interface IOnPreparedListenerCallback_0_8 {
void onPrepared();
}

View File

@ -0,0 +1,19 @@
// 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.presto.service;
interface IOnSeekCompleteListenerCallback_0_8 {
void onSeekComplete();
}

View File

@ -0,0 +1,19 @@
// 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.presto.service;
interface IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8 {
void onSpeedAdjustmentAvailableChanged(boolean speedAdjustmentAvailable);
}

View File

@ -0,0 +1,75 @@
// 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.presto.service;
import com.aocate.presto.service.IDeathCallback_0_8;
import com.aocate.presto.service.IOnBufferingUpdateListenerCallback_0_8;
import com.aocate.presto.service.IOnCompletionListenerCallback_0_8;
import com.aocate.presto.service.IOnErrorListenerCallback_0_8;
import com.aocate.presto.service.IOnPitchAdjustmentAvailableChangedListenerCallback_0_8;
import com.aocate.presto.service.IOnPreparedListenerCallback_0_8;
import com.aocate.presto.service.IOnSeekCompleteListenerCallback_0_8;
import com.aocate.presto.service.IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8;
import com.aocate.presto.service.IOnInfoListenerCallback_0_8;
interface IPlayMedia_0_8 {
boolean canSetPitch(long sessionId);
boolean canSetSpeed(long sessionId);
float getCurrentPitchStepsAdjustment(long sessionId);
int getCurrentPosition(long sessionId);
float getCurrentSpeedMultiplier(long sessionId);
int getDuration(long sessionId);
float getMaxSpeedMultiplier(long sessionId);
float getMinSpeedMultiplier(long sessionId);
int getVersionCode();
String getVersionName();
boolean isLooping(long sessionId);
boolean isPlaying(long sessionId);
void pause(long sessionId);
void prepare(long sessionId);
void prepareAsync(long sessionId);
void registerOnBufferingUpdateCallback(long sessionId, IOnBufferingUpdateListenerCallback_0_8 cb);
void registerOnCompletionCallback(long sessionId, IOnCompletionListenerCallback_0_8 cb);
void registerOnErrorCallback(long sessionId, IOnErrorListenerCallback_0_8 cb);
void registerOnInfoCallback(long sessionId, IOnInfoListenerCallback_0_8 cb);
void registerOnPitchAdjustmentAvailableChangedCallback(long sessionId, IOnPitchAdjustmentAvailableChangedListenerCallback_0_8 cb);
void registerOnPreparedCallback(long sessionId, IOnPreparedListenerCallback_0_8 cb);
void registerOnSeekCompleteCallback(long sessionId, IOnSeekCompleteListenerCallback_0_8 cb);
void registerOnSpeedAdjustmentAvailableChangedCallback(long sessionId, IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8 cb);
void release(long sessionId);
void reset(long sessionId);
void seekTo(long sessionId, int msec);
void setAudioStreamType(long sessionId, int streamtype);
void setDataSourceString(long sessionId, String path);
void setDataSourceUri(long sessionId, in Uri uri);
void setEnableSpeedAdjustment(long sessionId, boolean enableSpeedAdjustment);
void setLooping(long sessionId, boolean looping);
void setPitchStepsAdjustment(long sessionId, float pitchSteps);
void setPlaybackPitch(long sessionId, float f);
void setPlaybackSpeed(long sessionId, float f);
void setSpeedAdjustmentAlgorithm(long sessionId, int algorithm);
void setVolume(long sessionId, float left, float right);
void start(long sessionId);
long startSession(IDeathCallback_0_8 cb);
void stop(long sessionId);
void unregisterOnBufferingUpdateCallback(long sessionId, IOnBufferingUpdateListenerCallback_0_8 cb);
void unregisterOnCompletionCallback(long sessionId, IOnCompletionListenerCallback_0_8 cb);
void unregisterOnErrorCallback(long sessionId, IOnErrorListenerCallback_0_8 cb);
void unregisterOnInfoCallback(long sessionId, IOnInfoListenerCallback_0_8 cb);
void unregisterOnPitchAdjustmentAvailableChangedCallback(long sessionId, IOnPitchAdjustmentAvailableChangedListenerCallback_0_8 cb);
void unregisterOnPreparedCallback(long sessionId, IOnPreparedListenerCallback_0_8 cb);
void unregisterOnSeekCompleteCallback(long sessionId, IOnSeekCompleteListenerCallback_0_8 cb);
void unregisterOnSpeedAdjustmentAvailableChangedCallback(long sessionId, IOnSpeedAdjustmentAvailableChangedListenerCallback_0_8 cb);
}

View File

@ -1,8 +1,6 @@
package de.danoeh.antennapod;
public final class AppConfig {
/** Should be used for debug logging. */
public final static boolean DEBUG = true;
/** Should be used when setting User-Agent header for HTTP-requests. */
public final static String USER_AGENT = "AntennaPod/0.9.8.2";
public final static String USER_AGENT = "AntennaPod/0.9.8.3";
}

View File

@ -7,6 +7,7 @@ import de.danoeh.antennapod.asynctask.ImageLoader;
import de.danoeh.antennapod.feed.EventDistributor;
import de.danoeh.antennapod.preferences.PlaybackPreferences;
import de.danoeh.antennapod.preferences.UserPreferences;
import de.danoeh.antennapod.spa.SPAUtil;
/** Main application class. */
public class PodcastApp extends Application {
@ -31,6 +32,8 @@ public class PodcastApp extends Application {
UserPreferences.createInstance(this);
PlaybackPreferences.createInstance(this);
EventDistributor.getInstance();
SPAUtil.sendSPAppsQueryFeedsIntent(this);
}
@Override

View File

@ -4,8 +4,6 @@ import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import de.danoeh.antennapod.R;
/** Displays the 'about' screen */

View File

@ -1,84 +1,68 @@
package de.danoeh.antennapod.activity;
import java.util.Date;
import android.support.v4.app.NavUtils;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import de.danoeh.antennapod.activity.gpoddernet.GpodnetMainActivity;
import org.apache.commons.lang3.StringUtils;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.Feed;
import de.danoeh.antennapod.activity.gpoddernet.GpodnetMainActivity;
import de.danoeh.antennapod.preferences.UserPreferences;
import de.danoeh.antennapod.storage.DownloadRequestException;
import de.danoeh.antennapod.storage.DownloadRequester;
import de.danoeh.antennapod.util.ConnectionTester;
import de.danoeh.antennapod.util.DownloadError;
import de.danoeh.antennapod.util.StorageUtils;
import de.danoeh.antennapod.util.URLChecker;
import org.apache.commons.lang3.StringUtils;
/** Activity for adding a Feed */
/**
* Activity for adding a Feed
*/
public class AddFeedActivity extends ActionBarActivity {
private static final String TAG = "AddFeedActivity";
private static final String TAG = "AddFeedActivity";
private DownloadRequester requester;
private EditText etxtFeedurl;
private Button butBrowseMiroGuide;
private EditText etxtFeedurl;
private Button butBrowseMiroGuide;
private Button butBrowserGpoddernet;
private Button butOpmlImport;
private Button butConfirm;
private Button butCancel;
private Button butOpmlImport;
private Button butConfirm;
private ProgressDialog progDialog;
private ProgressDialog progDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
if (AppConfig.DEBUG)
Log.d(TAG, "Was started with Intent " + getIntent().getAction()
+ " and Data " + getIntent().getDataString());
setTheme(UserPreferences.getTheme());
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
StorageUtils.checkStorageAvailability(this);
setContentView(R.layout.addfeed);
@Override
protected void onCreate(Bundle savedInstanceState) {
if (BuildConfig.DEBUG)
Log.d(TAG, "Was started with Intent " + getIntent().getAction()
+ " and Data " + getIntent().getDataString());
setTheme(UserPreferences.getTheme());
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
StorageUtils.checkStorageAvailability(this);
setContentView(R.layout.addfeed);
requester = DownloadRequester.getInstance();
progDialog = new ProgressDialog(this);
progDialog = new ProgressDialog(this);
etxtFeedurl = (EditText) findViewById(R.id.etxtFeedurl);
if (StringUtils.equals(getIntent().getAction(), Intent.ACTION_VIEW)) {
etxtFeedurl.setText(getIntent().getDataString());
}
etxtFeedurl = (EditText) findViewById(R.id.etxtFeedurl);
if (StringUtils.equals(getIntent().getAction(), Intent.ACTION_VIEW)) {
etxtFeedurl.setText(getIntent().getDataString());
}
butBrowseMiroGuide = (Button) findViewById(R.id.butBrowseMiroguide);
butBrowseMiroGuide = (Button) findViewById(R.id.butBrowseMiroguide);
butBrowserGpoddernet = (Button) findViewById(R.id.butBrowseGpoddernet);
butOpmlImport = (Button) findViewById(R.id.butOpmlImport);
butConfirm = (Button) findViewById(R.id.butConfirm);
butCancel = (Button) findViewById(R.id.butCancel);
butOpmlImport = (Button) findViewById(R.id.butOpmlImport);
butConfirm = (Button) findViewById(R.id.butConfirm);
butBrowseMiroGuide.setOnClickListener(new OnClickListener() {
butBrowseMiroGuide.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(AddFeedActivity.this,
MiroGuideMainActivity.class));
}
});
@Override
public void onClick(View v) {
startActivity(new Intent(AddFeedActivity.this,
MiroGuideMainActivity.class));
}
});
butBrowserGpoddernet.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@ -87,141 +71,74 @@ public class AddFeedActivity extends ActionBarActivity {
}
});
butOpmlImport.setOnClickListener(new OnClickListener() {
butOpmlImport.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(AddFeedActivity.this,
OpmlImportFromPathActivity.class));
}
});
@Override
public void onClick(View v) {
startActivity(new Intent(AddFeedActivity.this,
OpmlImportFromPathActivity.class));
}
});
butConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addNewFeed();
}
});
butConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(AddFeedActivity.this, DefaultOnlineFeedViewActivity.class);
intent.putExtra(OnlineFeedViewActivity.ARG_FEEDURL, etxtFeedurl.getText().toString());
intent.putExtra(OnlineFeedViewActivity.ARG_TITLE, getSupportActionBar().getTitle());
startActivity(intent);
}
});
butCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(RESULT_CANCELED);
finish();
}
});
}
}
@Override
protected void onResume() {
super.onResume();
StorageUtils.checkStorageAvailability(this);
Intent intent = getIntent();
if (intent.getAction() != null
&& intent.getAction().equals(Intent.ACTION_SEND)) {
if (AppConfig.DEBUG)
Log.d(TAG, "Resuming with ACTION_SEND intent");
String text = intent.getStringExtra(Intent.EXTRA_TEXT);
if (text != null) {
etxtFeedurl.setText(text);
} else {
if (AppConfig.DEBUG)
Log.d(TAG, "No text was sent");
}
}
@Override
protected void onResume() {
super.onResume();
StorageUtils.checkStorageAvailability(this);
Intent intent = getIntent();
if (intent.getAction() != null
&& intent.getAction().equals(Intent.ACTION_SEND)) {
if (BuildConfig.DEBUG)
Log.d(TAG, "Resuming with ACTION_SEND intent");
String text = intent.getStringExtra(Intent.EXTRA_TEXT);
if (text != null) {
etxtFeedurl.setText(text);
} else {
if (BuildConfig.DEBUG)
Log.d(TAG, "No text was sent");
}
}
}
}
@Override
protected void onStop() {
super.onStop();
if (AppConfig.DEBUG)
Log.d(TAG, "Stopping Activity");
}
@Override
protected void onStop() {
super.onStop();
if (BuildConfig.DEBUG)
Log.d(TAG, "Stopping Activity");
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onPause() {
super.onPause();
}
/** Read the url text field and start downloading a new feed. */
private void addNewFeed() {
String url = etxtFeedurl.getText().toString();
url = URLChecker.prepareURL(url);
if (url != null) {
final Feed feed = new Feed(url, new Date());
final ConnectionTester conTester = new ConnectionTester(url,
new ConnectionTester.Callback() {
@Override
public void onConnectionSuccessful() {
try {
requester.downloadFeed(AddFeedActivity.this,
feed);
if (progDialog.isShowing()) {
progDialog.dismiss();
finish();
}
} catch (DownloadRequestException e) {
e.printStackTrace();
onConnectionFailure(DownloadError.ERROR_REQUEST_ERROR);
}
}
@Override
public void onConnectionFailure(DownloadError reason) {
handleDownloadError(reason);
}
});
observeDownload(feed);
new Thread(conTester).start();
}
}
/** Start listening for any intents send by the DownloadService. */
private void observeDownload(Feed feed) {
progDialog.show();
progDialog.setMessage(getString(R.string.loading_label));
}
private void handleDownloadError(DownloadError reason) {
final AlertDialog errorDialog = new AlertDialog.Builder(this).create();
errorDialog.setTitle(R.string.error_label);
errorDialog.setMessage(getString(R.string.error_msg_prefix) + " "
+ reason.getErrorString(this));
errorDialog.setButton(getString(android.R.string.ok),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
errorDialog.dismiss();
}
});
if (progDialog.isShowing()) {
progDialog.dismiss();
}
errorDialog.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
return true;
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return false;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return false;
}
}
}

View File

@ -15,7 +15,7 @@ import android.view.View.OnLongClickListener;
import android.view.Window;
import android.widget.*;
import android.widget.ImageView.ScaleType;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.ChapterListAdapter;
import de.danoeh.antennapod.asynctask.ImageLoader;
@ -67,29 +67,29 @@ public class AudioplayerActivity extends MediaplayerActivity {
FragmentTransaction fT = getSupportFragmentManager().beginTransaction();
if (coverFragment != null) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Removing cover fragment");
fT.remove(coverFragment);
}
if (descriptionFragment != null) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Removing description fragment");
fT.remove(descriptionFragment);
}
if (chapterFragment != null) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Removing chapter fragment");
fT.remove(chapterFragment);
}
if (currentlyShownFragment != null) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Removing currently shown fragment");
fT.remove(currentlyShownFragment);
}
for (int i = 0; i < detachedFragments.length; i++) {
Fragment f = detachedFragments[i];
if (f != null) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Removing detached fragment");
fT.remove(f);
}
@ -106,7 +106,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
@Override
protected void onStop() {
super.onStop();
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "onStop");
}
@ -120,7 +120,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
}
private void savePreferences() {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Saving preferences");
SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
@ -147,7 +147,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
@Override
protected void onSaveInstanceState(Bundle outState) {
// super.onSaveInstanceState(outState); would cause crash
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "onSaveInstanceState");
}
@ -171,7 +171,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
* @return true if restoreFromPrefernces changed the activity's state
*/
private boolean restoreFromPreferences() {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Restoring instance state");
SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE);
int savedPosition = prefs.getInt(PREF_KEY_SELECTED_FRAGMENT_POSITION,
@ -186,11 +186,11 @@ public class AudioplayerActivity extends MediaplayerActivity {
switchToFragment(savedPosition);
return true;
} else if (controller == null || controller.getMedia() == null) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG,
"Couldn't restore from preferences: controller or media was null");
} else {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG,
"Couldn't restore from preferences: savedPosition was -1 or saved identifier and playable identifier didn't match.\nsavedPosition: "
+ savedPosition + ", id: " + playableId);
@ -205,7 +205,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
if (getIntent().getAction() != null
&& getIntent().getAction().equals(Intent.ACTION_VIEW)) {
Intent intent = getIntent();
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Received VIEW intent: "
+ intent.getData().getPath());
ExternalMedia media = new ExternalMedia(intent.getData().getPath(),
@ -233,7 +233,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
@Override
protected void onAwaitingVideoSurface() {
if (AppConfig.DEBUG) Log.d(TAG, "onAwaitingVideoSurface was called in audio player -> switching to video player");
if (BuildConfig.DEBUG) Log.d(TAG, "onAwaitingVideoSurface was called in audio player -> switching to video player");
startActivity(new Intent(this, VideoplayerActivity.class));
}
@ -255,7 +255,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
* @param pos Must be POS_COVER, POS_DESCR, or POS_CHAPTERS
*/
private void switchToFragment(int pos) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Switching contentView to position " + pos);
if (currentlyShownPosition != pos && controller != null) {
Playable media = controller.getMedia();
@ -305,7 +305,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
if (currentlyShownFragment != null) {
currentlyShownPosition = pos;
if (detachedFragments[pos] != null) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Reattaching fragment at position "
+ pos);
ft.attach(detachedFragments[pos]);
@ -330,6 +330,10 @@ public class AudioplayerActivity extends MediaplayerActivity {
R.attr.navigation_shownotes, R.attr.navigation_chapters});
final Playable media = controller.getMedia();
if (butNavLeft != null && butNavRight != null && media != null) {
butNavRight.setTag(R.id.imageloader_key, null);
butNavLeft.setTag(R.id.imageloader_key, null);
switch (currentlyShownPosition) {
case POS_COVER:
butNavLeft.setScaleType(ScaleType.CENTER);
@ -519,7 +523,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
@Override
protected void onReloadNotification(int notificationCode) {
if (notificationCode == PlaybackService.EXTRA_CODE_VIDEO) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG,
"ReloadNotification received, switching to Videoplayer now");
finish();

View File

@ -3,7 +3,6 @@ package de.danoeh.antennapod.activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
@ -90,10 +89,11 @@ public class DefaultOnlineFeedViewActivity extends OnlineFeedViewActivity {
@Override
public void onClick(View v) {
try {
Feed f = new Feed(feed.getDownload_url(), new Date(), feed.getTitle());
f.setPreferences(feed.getPreferences());
DownloadRequester.getInstance().downloadFeed(
DefaultOnlineFeedViewActivity.this,
new Feed(feed.getDownload_url(), new Date(), feed
.getTitle()));
f);
} catch (DownloadRequestException e) {
e.printStackTrace();
DownloadRequestErrorDialogCreator.newRequestErrorDialog(DefaultOnlineFeedViewActivity.this,

View File

@ -1,10 +1,5 @@
package de.danoeh.antennapod.activity;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
@ -20,19 +15,17 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.preferences.UserPreferences;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
/**
* Let's the user choose a directory on the storage device. The selected folder
* will be sent back to the starting activity as an activity result.
@ -127,7 +120,7 @@ public class DirectoryChooserActivity extends ActionBarActivity {
@Override
public void onItemClick(AdapterView<?> adapter, View view,
int position, long id) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Selected index: " + position);
if (filesInDir != null && position >= 0
&& position < filesInDir.length) {
@ -160,7 +153,7 @@ public class DirectoryChooserActivity extends ActionBarActivity {
* selected folder can also be null.
*/
private void returnSelectedFolder() {
if (selectedDir != null && AppConfig.DEBUG)
if (selectedDir != null && BuildConfig.DEBUG)
Log.d(TAG, "Returning " + selectedDir.getAbsolutePath()
+ " as result");
Intent resultData = new Intent();
@ -222,19 +215,19 @@ public class DirectoryChooserActivity extends ActionBarActivity {
listDirectoriesAdapter.notifyDataSetChanged();
fileObserver = createFileObserver(dir.getAbsolutePath());
fileObserver.startWatching();
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Changed directory to " + dir.getAbsolutePath());
} else {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG,
"Could not change folder: contents of dir were null");
}
} else {
if (dir == null) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Could not change folder: dir was null");
} else {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Could not change folder: dir is no directory");
}
}
@ -266,7 +259,7 @@ public class DirectoryChooserActivity extends ActionBarActivity {
@Override
public void onEvent(int event, String path) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "FileObserver received event " + event);
runOnUiThread(new Runnable() {

View File

@ -14,7 +14,7 @@ import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.DownloadlistAdapter;
import de.danoeh.antennapod.asynctask.DownloadObserver;
@ -53,7 +53,7 @@ public class DownloadActivity extends ActionBarActivity implements
listview = (ListView) findViewById(R.id.listview);
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Creating Activity");
requester = DownloadRequester.getInstance();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@ -78,7 +78,7 @@ public class DownloadActivity extends ActionBarActivity implements
@Override
protected void onStop() {
super.onStop();
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Stopping Activity");
}

View File

@ -0,0 +1,106 @@
package de.danoeh.antennapod.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
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;
/**
* Shows a username and a password text field.
* The activity MUST be started with the ARG_DOWNlOAD_REQUEST argument set to a non-null value.
* Other arguments are optional.
* The activity's result will be the same DownloadRequest with the entered username and password.
*/
public class DownloadAuthenticationActivity extends ActionBarActivity {
private static final String TAG = "DownloadAuthenticationActivity";
/**
* The download request object that contains information about the resource that requires a username and a password
*/
public static final String ARG_DOWNLOAD_REQUEST = "request";
/**
* True if the request should be sent to the DownloadRequester when this activity is finished, false otherwise.
* The default value is false.
*/
public static final String ARG_SEND_TO_DOWNLOAD_REQUESTER_BOOL = "send_to_downloadrequester";
public static final String RESULT_REQUEST = "request";
private EditText etxtUsername;
private EditText etxtPassword;
private Button butConfirm;
private Button butCancel;
private TextView txtvDescription;
private DownloadRequest request;
private boolean sendToDownloadRequester;
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(UserPreferences.getTheme());
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.download_authentication_activity);
etxtUsername = (EditText) findViewById(R.id.etxtUsername);
etxtPassword = (EditText) findViewById(R.id.etxtPassword);
butConfirm = (Button) findViewById(R.id.butConfirm);
butCancel = (Button) findViewById(R.id.butCancel);
txtvDescription = (TextView) findViewById(R.id.txtvDescription);
if (!getIntent().hasExtra(ARG_DOWNLOAD_REQUEST)) throw new IllegalArgumentException("Download request missing");
request = getIntent().getParcelableExtra(ARG_DOWNLOAD_REQUEST);
sendToDownloadRequester = getIntent().getBooleanExtra(ARG_SEND_TO_DOWNLOAD_REQUESTER_BOOL, false);
if (savedInstanceState != null) {
etxtUsername.setText(savedInstanceState.getString("username"));
etxtPassword.setText(savedInstanceState.getString("password"));
}
txtvDescription.setText(txtvDescription.getText() + ":\n\n" + request.getTitle());
butCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(Activity.RESULT_CANCELED);
finish();
}
});
butConfirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = etxtUsername.getText().toString();
String password = etxtPassword.getText().toString();
request.setUsername(username);
request.setPassword(password);
Intent result = new Intent();
result.putExtra(RESULT_REQUEST, request);
setResult(Activity.RESULT_OK, result);
if (sendToDownloadRequester) {
if (BuildConfig.DEBUG) Log.d(TAG, "Sending request to DownloadRequester");
DownloadRequester.getInstance().download(DownloadAuthenticationActivity.this, request);
}
finish();
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("username", etxtUsername.getText().toString());
outState.putString("password", etxtPassword.getText().toString());
}
}

View File

@ -2,10 +2,8 @@ package de.danoeh.antennapod.activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

View File

@ -11,7 +11,7 @@ import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.ImageLoader;
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
@ -65,9 +65,9 @@ public class FeedInfoActivity extends ActionBarActivity {
protected void onPostExecute(Feed result) {
if (result != null) {
feed = result;
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Language is " + feed.getLanguage());
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Author is " + feed.getAuthor());
imgvCover.post(new Runnable() {

View File

@ -2,7 +2,6 @@ package de.danoeh.antennapod.activity;
import android.annotation.SuppressLint;
import android.app.SearchManager;
import android.app.SearchableInfo;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@ -17,12 +16,10 @@ import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.Window;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.FeedRemover;
import de.danoeh.antennapod.dialog.ConfirmationDialog;
@ -81,7 +78,7 @@ public class FeedItemlistActivity extends ActionBarActivity {
@Override
protected Feed doInBackground(Long... longs) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Loading feed data in background");
return DBReader.getFeed(FeedItemlistActivity.this, longs[0]);
}
@ -89,14 +86,14 @@ public class FeedItemlistActivity extends ActionBarActivity {
@Override
protected void onCancelled(Feed feed) {
super.onCancelled(feed);
if (AppConfig.DEBUG) Log.d(TAG, "load task was cancelled");
if (BuildConfig.DEBUG) Log.d(TAG, "load task was cancelled");
}
@Override
protected void onPostExecute(Feed result) {
super.onPostExecute(result);
if (result != null) {
if (AppConfig.DEBUG) Log.d(TAG, "Finished loading feed data");
if (BuildConfig.DEBUG) Log.d(TAG, "Finished loading feed data");
feed = result;
setTitle(feed.getTitle());

View File

@ -1,24 +1,22 @@
package de.danoeh.antennapod.activity;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import org.shredzone.flattr4j.exception.FlattrException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.preferences.UserPreferences;
import de.danoeh.antennapod.util.flattr.FlattrUtils;
import org.shredzone.flattr4j.exception.FlattrException;
/** Guides the user through the authentication process */
@ -39,7 +37,7 @@ public class FlattrAuthActivity extends ActionBarActivity {
super.onCreate(savedInstanceState);
singleton = this;
authSuccessful = false;
if (AppConfig.DEBUG) Log.d(TAG, "Activity created");
if (BuildConfig.DEBUG) Log.d(TAG, "Activity created");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.flattr_auth);
txtvExplanation = (TextView) findViewById(R.id.txtvExplanation);
@ -74,10 +72,10 @@ public class FlattrAuthActivity extends ActionBarActivity {
@Override
protected void onResume() {
super.onResume();
if (AppConfig.DEBUG) Log.d(TAG, "Activity resumed");
if (BuildConfig.DEBUG) Log.d(TAG, "Activity resumed");
Uri uri = getIntent().getData();
if (uri != null) {
if (AppConfig.DEBUG) Log.d(TAG, "Received uri");
if (BuildConfig.DEBUG) Log.d(TAG, "Received uri");
FlattrUtils.handleCallback(this, uri);
}
}

View File

@ -13,7 +13,7 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.Window;
import android.widget.TextView;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
import de.danoeh.antennapod.feed.EventDistributor;
@ -75,7 +75,7 @@ public class ItemviewActivity extends ActionBarActivity {
if (currentLoadTask != null) {
currentLoadTask.cancel(true);
}
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Stopping Activity");
}
@ -93,7 +93,7 @@ public class ItemviewActivity extends ActionBarActivity {
@Override
protected void onCancelled(FeedItem feedItem) {
super.onCancelled(feedItem);
if (AppConfig.DEBUG) Log.d(TAG, "loadTask was cancelled");
if (BuildConfig.DEBUG) Log.d(TAG, "loadTask was cancelled");
}
@Override
@ -192,7 +192,7 @@ public class ItemviewActivity extends ActionBarActivity {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((EVENTS & arg) != 0) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Received contentUpdate Intent.");
if (item != null) {
loadData(item.getId());

View File

@ -1,7 +1,5 @@
package de.danoeh.antennapod.activity;
import java.util.ArrayList;
import android.app.SearchManager;
import android.app.SearchableInfo;
import android.content.Context;
@ -17,25 +15,26 @@ import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.Window;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.EventDistributor;
import de.danoeh.antennapod.fragment.EpisodesFragment;
import de.danoeh.antennapod.fragment.ExternalPlayerFragment;
import de.danoeh.antennapod.fragment.FeedlistFragment;
import de.danoeh.antennapod.preferences.UserPreferences;
import de.danoeh.antennapod.service.playback.PlaybackService;
import de.danoeh.antennapod.service.download.DownloadService;
import de.danoeh.antennapod.service.playback.PlaybackService;
import de.danoeh.antennapod.storage.DBReader;
import de.danoeh.antennapod.storage.DBTasks;
import de.danoeh.antennapod.storage.DownloadRequester;
import de.danoeh.antennapod.util.StorageUtils;
import java.util.ArrayList;
/** The activity that is shown when the user launches the app. */
public class MainActivity extends ActionBarActivity {
private static final String TAG = "MainActivity";
@ -121,7 +120,7 @@ public class MainActivity extends ActionBarActivity {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((EVENTS & arg) != 0) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Received contentUpdate Intent.");
updateProgressBarVisibility();
}

View File

@ -16,7 +16,7 @@ import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.dialog.TimeDialog;
import de.danoeh.antennapod.feed.FeedItem;
@ -135,6 +135,12 @@ public abstract class MediaplayerActivity extends ActionBarActivity
public void onPlaybackSpeedChange() {
MediaplayerActivity.this.onPlaybackSpeedChange();
}
@Override
protected void setScreenOn(boolean enable) {
super.setScreenOn(enable);
MediaplayerActivity.this.setScreenOn(enable);
}
};
}
@ -151,11 +157,14 @@ public abstract class MediaplayerActivity extends ActionBarActivity
setTheme(UserPreferences.getTheme());
}
protected void setScreenOn(boolean enable) {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
chooseTheme();
super.onCreate(savedInstanceState);
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Creating Activity");
StorageUtils.checkStorageAvailability(this);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
@ -213,7 +222,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity
@Override
protected void onStop() {
super.onStop();
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Activity stopped");
if (controller != null) {
controller.release();
@ -223,7 +232,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity
@Override
protected void onDestroy() {
super.onDestroy();
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Activity destroyed");
}
@ -243,7 +252,8 @@ public abstract class MediaplayerActivity extends ActionBarActivity
menu.findItem(R.id.support_item).setVisible(
media != null && media.getPaymentLink() != null &&
(media instanceof FeedMedia) &&
((FeedMedia) media).getItem().getFlattrStatus().flattrable());
((FeedMedia) media).getItem().getFlattrStatus().flattrable()
);
menu.findItem(R.id.share_link_item).setVisible(
media != null && media.getWebsiteLink() != null);
menu.findItem(R.id.visit_website_item).setVisible(
@ -285,7 +295,8 @@ public abstract class MediaplayerActivity extends ActionBarActivity
dialog.dismiss();
controller.disableSleepTimer();
}
});
}
);
stDialog.setNegativeButton(R.string.cancel_label,
new DialogInterface.OnClickListener() {
@ -294,7 +305,8 @@ public abstract class MediaplayerActivity extends ActionBarActivity
int which) {
dialog.dismiss();
}
});
}
);
stDialog.create().show();
}
break;
@ -343,7 +355,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity
@Override
protected void onResume() {
super.onResume();
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Resuming Activity");
StorageUtils.checkStorageAvailability(this);
controller.init();
@ -378,7 +390,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity
}
private void updateProgressbarPosition(int position, int duration) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Updating progressbar info");
float progress = ((float) position) / duration;
sbPosition.setProgress((int) (progress * sbPosition.getMax()));
@ -391,7 +403,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity
* FeedMedia object.
*/
protected boolean loadMediaInfo() {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Loading media info");
Playable media = controller.getMedia();
if (media != null) {
@ -451,7 +463,8 @@ public abstract class MediaplayerActivity extends ActionBarActivity
dialog.dismiss();
finish();
}
});
}
);
errorDialog.create().show();
}

View File

@ -8,7 +8,6 @@ import android.support.v4.app.NavUtils;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import de.danoeh.antennapod.R;

View File

@ -1,8 +1,5 @@
package de.danoeh.antennapod.activity;
import java.util.Date;
import java.util.List;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.net.Uri;
@ -15,13 +12,8 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import de.danoeh.antennapod.AppConfig;
import android.widget.*;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.MiroGuideItemlistAdapter;
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
@ -34,6 +26,9 @@ import de.danoeh.antennapod.storage.DBReader;
import de.danoeh.antennapod.storage.DownloadRequestException;
import de.danoeh.antennapod.storage.DownloadRequester;
import java.util.Date;
import java.util.List;
/**
* Displays information about one channel and lets the user add this channel to
* his library.
@ -95,7 +90,7 @@ public class MiroGuideChannelViewActivity extends ActionBarActivity {
@Override
protected Void doInBackground(Void... params) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Starting background task");
feeds = DBReader.getFeedList(MiroGuideChannelViewActivity.this);
MiroGuideService service = new MiroGuideService();
@ -111,7 +106,7 @@ public class MiroGuideChannelViewActivity extends ActionBarActivity {
@SuppressLint("NewApi")
@Override
protected void onPostExecute(Void result) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Loading finished");
if (exception == null) {
txtvTitle.setText(channel.getName());

View File

@ -2,7 +2,6 @@ package de.danoeh.antennapod.activity;
import android.annotation.SuppressLint;
import android.app.SearchManager;
import android.app.SearchableInfo;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
@ -19,8 +18,7 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.miroguide.conn.MiroGuideException;
import de.danoeh.antennapod.miroguide.conn.MiroGuideService;
@ -89,7 +87,7 @@ public class MiroGuideMainActivity extends ActionBarActivity implements AdapterV
@Override
protected void onPostExecute(Void result) {
if (exception == null) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Successfully loaded categories");
categories = c;
createAdapter();

View File

@ -7,10 +7,9 @@ import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.fragment.MiroGuideChannellistFragment;
import de.danoeh.antennapod.preferences.UserPreferences;
@ -47,7 +46,7 @@ public class MiroGuideSearchActivity extends ActionBarActivity {
}
private void handleSearchRequest(String query) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Performing search");
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
listFragment = MiroGuideChannellistFragment.newInstance("name", query,

View File

@ -1,18 +1,21 @@
package de.danoeh.antennapod.activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import de.danoeh.antennapod.AppConfig;
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;
@ -52,9 +55,9 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity {
private Downloader downloader;
@Override
protected void onCreate(Bundle arg0) {
protected void onCreate(Bundle savedInstanceState) {
setTheme(UserPreferences.getTheme());
super.onCreate(arg0);
super.onCreate(savedInstanceState);
if (getIntent() != null && getIntent().hasExtra(ARG_TITLE)) {
getSupportActionBar().setTitle(getIntent().getStringExtra(ARG_TITLE));
@ -66,10 +69,23 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity {
throw new IllegalArgumentException(
"Activity must be started with feedurl argument!");
}
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Activity was started with url " + feedUrl);
setLoadingLayout();
startFeedDownload(feedUrl);
if (savedInstanceState == null) {
startFeedDownload(feedUrl, null, null);
} else {
startFeedDownload(feedUrl, savedInstanceState.getString("username"), savedInstanceState.getString("password"));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (feed != null && feed.getPreferences() != null) {
outState.putString("username", feed.getPreferences().getUsername());
outState.putString("password", feed.getPreferences().getPassword());
}
}
@Override
@ -86,12 +102,16 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity {
@Override
public void run() {
if (AppConfig.DEBUG) Log.d(TAG, "Download was completed");
if (BuildConfig.DEBUG) Log.d(TAG, "Download was completed");
DownloadStatus status = downloader.getResult();
if (status != null) {
if (!status.isCancelled()) {
if (status.isSuccessful()) {
parseFeed();
} else if (status.getReason() == DownloadError.ERROR_UNAUTHORIZED) {
Dialog dialog = new FeedViewAuthenticationDialog(OnlineFeedViewActivity.this,
R.string.authentication_notification_title, downloader.getDownloadRequest().getSource());
dialog.show();
} else {
String errorMsg = status.getReason().getErrorString(
OnlineFeedViewActivity.this);
@ -113,17 +133,20 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity {
}
private void startFeedDownload(String url) {
if (AppConfig.DEBUG)
private void startFeedDownload(String url, String username, String password) {
if (BuildConfig.DEBUG)
Log.d(TAG, "Starting feed download");
url = URLChecker.prepareURL(url);
feed = new Feed(url, new Date());
if (username != null && password != null) {
feed.setPreferences(new FeedPreferences(0, true, username, password));
}
String fileUrl = new File(getExternalCacheDir(),
FileNameGenerator.generateFileName(feed.getDownload_url()))
.toString();
feed.setFile_url(fileUrl);
final DownloadRequest request = new DownloadRequest(feed.getFile_url(),
feed.getDownload_url(), "OnlineFeed", 0, Feed.FEEDFILETYPE_FEED);
feed.getDownload_url(), "OnlineFeed", 0, Feed.FEEDFILETYPE_FEED, username, password);
downloader = new HttpDownloader(
request);
new Thread() {
@ -163,7 +186,7 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity {
"feed must be non-null and downloaded when parseFeed is called");
}
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Parsing feed");
Thread thread = new Thread() {
@ -190,7 +213,7 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity {
reasonDetailed = e.getMessage();
} finally {
boolean rc = new File(feed.getFile_url()).delete();
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Deleted feed source file. Result: " + rc);
}
@ -259,4 +282,25 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity {
builder.show();
}
private class FeedViewAuthenticationDialog extends AuthenticationDialog {
private String feedUrl;
public FeedViewAuthenticationDialog(Context context, int titleRes, String feedUrl) {
super(context, titleRes, true, false, null, null);
this.feedUrl = feedUrl;
}
@Override
protected void onCancelled() {
super.onCancelled();
finish();
}
@Override
protected void onConfirmed(String username, String password, boolean saveUsernamePassword) {
startFeedDownload(feedUrl, username, password);
}
}
}

View File

@ -1,8 +1,5 @@
package de.danoeh.antennapod.activity;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
@ -15,11 +12,13 @@ import android.view.View.OnClickListener;
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 java.util.ArrayList;
import java.util.List;
/**
* Displays the feeds that the OPML-Importer has read and lets the user choose
* which feeds he wants to import.

View File

@ -1,17 +1,16 @@
package de.danoeh.antennapod.activity;
import java.io.Reader;
import java.util.ArrayList;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.asynctask.OpmlFeedQueuer;
import de.danoeh.antennapod.asynctask.OpmlImportWorker;
import de.danoeh.antennapod.opml.OpmlElement;
import java.io.Reader;
import java.util.ArrayList;
/**
* Base activity for Opml Import - e.g. with code what to do afterwards
* */
@ -26,10 +25,10 @@ public class OpmlImportBaseActivity extends ActionBarActivity {
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Received result");
if (resultCode == RESULT_CANCELED) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Activity was cancelled");
if (finishWhenCanceled())
finish();
@ -51,7 +50,7 @@ public class OpmlImportBaseActivity extends ActionBarActivity {
};
queuer.executeAsync();
} else {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "No items were selected");
}
}
@ -67,14 +66,14 @@ public class OpmlImportBaseActivity extends ActionBarActivity {
protected void onPostExecute(ArrayList<OpmlElement> result) {
super.onPostExecute(result);
if (result != null) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Parsing was successful");
OpmlImportHolder.setReadElements(result);
startActivityForResult(new Intent(
OpmlImportBaseActivity.this,
OpmlFeedChooserActivity.class), 0);
} else {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Parser error occurred");
}
}

View File

@ -1,14 +1,14 @@
package de.danoeh.antennapod.activity;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import android.app.AlertDialog;
import android.os.Bundle;
import de.danoeh.antennapod.preferences.UserPreferences;
import de.danoeh.antennapod.util.LangUtils;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
/** Lets the user start the OPML-import process. */
public class OpmlImportFromIntentActivity extends OpmlImportBaseActivity {

View File

@ -1,12 +1,5 @@
package de.danoeh.antennapod.activity;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.Reader;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
@ -18,13 +11,14 @@ import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import de.danoeh.antennapod.AppConfig;
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 java.io.*;
/**
* Lets the user start the OPML-import process from a path
*/
@ -70,7 +64,7 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity {
File importDir = UserPreferences.getDataFolder(this, IMPORT_DIR);
boolean success = true;
if (!importDir.exists()) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Import directory doesn't exist. Creating...");
success = importDir.mkdir();
if (!success) {
@ -112,7 +106,7 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity {
if (dir.isDirectory()) {
File[] fileList = dir.listFiles();
if (fileList.length == 1) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Found one file, choosing that one.");
startImport(fileList[0]);
} else if (fileList.length > 1) {
@ -133,7 +127,7 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity {
try {
mReader = new InputStreamReader(new FileInputStream(file),
LangUtils.UTF_8);
if (AppConfig.DEBUG) Log.d(TAG, "Parsing " + file.toString());
if (BuildConfig.DEBUG) Log.d(TAG, "Parsing " + file.toString());
startImport(mReader);
} catch (FileNotFoundException e) {
Log.d(TAG, "File not found which really should be there");
@ -156,7 +150,7 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity {
@Override
public void onClick(DialogInterface dialog, int which) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Dialog was cancelled");
dialog.dismiss();
}
@ -165,7 +159,7 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity {
@Override
public void onClick(DialogInterface dialog, int which) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "File at index " + which + " was chosen");
dialog.dismiss();
startImport(fileList[which]);

View File

@ -1,9 +1,9 @@
package de.danoeh.antennapod.activity;
import java.util.ArrayList;
import de.danoeh.antennapod.opml.OpmlElement;
import java.util.ArrayList;
/**
* Hold infos gathered by Ompl-Import
* <p/>

View File

@ -5,18 +5,13 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.v4.app.NavUtils;
import android.support.v7.app.ActionBarActivity;
import android.view.*;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.*;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.mobeta.android.dslv.DragSortListView;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.ImageLoader;

View File

@ -1,16 +1,13 @@
package de.danoeh.antennapod.activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.NavUtils;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
import de.danoeh.antennapod.preferences.UserPreferences;
@ -46,7 +43,7 @@ public class PlaybackHistoryActivity extends ActionBarActivity {
setTheme(UserPreferences.getTheme());
super.onCreate(arg0);
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Activity created");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.playbackhistory_activity);

View File

@ -19,7 +19,7 @@ import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.FlattrClickWorker;
import de.danoeh.antennapod.asynctask.OpmlExportWorker;
@ -362,7 +362,7 @@ public class PreferenceActivity extends android.preference.PreferenceActivity {
if (resultCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) {
String dir = data
.getStringExtra(DirectoryChooserActivity.RESULT_SELECTED_DIR);
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Setting data folder");
UserPreferences.setDataFolder(dir);
}
@ -392,7 +392,7 @@ public class PreferenceActivity extends android.preference.PreferenceActivity {
.getAutodownloadSelectedNetworks()));
boolean newValue = ((CheckBoxPreference) preference)
.isChecked();
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Selected network " + key
+ ". New state: " + newValue);

View File

@ -1,8 +1,5 @@
package de.danoeh.antennapod.activity;
import java.util.ArrayList;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.SearchManager;
@ -17,17 +14,19 @@ import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.SearchlistAdapter;
import de.danoeh.antennapod.feed.Feed;
import de.danoeh.antennapod.feed.FeedItem;
import de.danoeh.antennapod.storage.FeedSearcher;
import de.danoeh.antennapod.feed.SearchResult;
import de.danoeh.antennapod.fragment.FeedlistFragment;
import de.danoeh.antennapod.fragment.ItemlistFragment;
import de.danoeh.antennapod.preferences.UserPreferences;
import de.danoeh.antennapod.storage.FeedSearcher;
import java.util.ArrayList;
import java.util.List;
/**
* Displays the results when the user searches for FeedItems or Feeds.
@ -75,11 +74,11 @@ public class SearchActivity extends ActionBarActivity implements AdapterView.OnI
Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
if (intent.hasExtra(SearchActivity.EXTRA_FEED_ID)) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Found bundle extra");
feedID = intent.getLongExtra(SearchActivity.EXTRA_FEED_ID, 0);
}
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Starting search");
String query = intent.getStringExtra(SearchManager.QUERY);
getSupportActionBar()
@ -149,9 +148,9 @@ public class SearchActivity extends ActionBarActivity implements AdapterView.OnI
@Override
public void run() {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Background work finished");
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Found " + result.size()
+ " results");

View File

@ -7,8 +7,7 @@ import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.preferences.UserPreferences;
import de.danoeh.antennapod.util.StorageUtils;
@ -57,11 +56,11 @@ public class StorageErrorActivity extends ActionBarActivity {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_MEDIA_MOUNTED)) {
if (intent.getBooleanExtra("read-only", true)) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Media was mounted; Finishing activity");
leaveErrorState();
} else {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG,
"Media seemed to have been mounted read only");
}

View File

@ -14,7 +14,7 @@ import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.MediaType;
import de.danoeh.antennapod.service.playback.PlaybackService;
@ -72,7 +72,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
if (getIntent().getAction() != null
&& getIntent().getAction().equals(Intent.ACTION_VIEW)) {
Intent intent = getIntent();
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Received VIEW intent: "
+ intent.getData().getPath());
ExternalMedia media = new ExternalMedia(intent.getData().getPath(),
@ -120,13 +120,13 @@ public class VideoplayerActivity extends MediaplayerActivity {
@Override
protected void onAwaitingVideoSurface() {
if (videoSurfaceCreated) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG,
"Videosurface already created, setting videosurface now");
Pair<Integer, Integer> videoSize = controller.getVideoSize();
if (videoSize != null && videoSize.first > 0 && videoSize.second > 0) {
if (AppConfig.DEBUG) Log.d(TAG, "Width,height of video: " + videoSize.first + ", " + videoSize.second);
if (BuildConfig.DEBUG) Log.d(TAG, "Width,height of video: " + videoSize.first + ", " + videoSize.second);
videoview.setVideoSize(videoSize.first, videoSize.second);
} else {
Log.e(TAG, "Could not determine video size");
@ -215,7 +215,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
@Override
protected void onProgressUpdate(Void... values) {
if (videoControlsShowing) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Hiding video controls");
getSupportActionBar().hide();
hideVideoControls();
@ -245,7 +245,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Videoview holder created");
videoSurfaceCreated = true;
if (controller.getStatus() == PlayerStatus.PLAYING) {
@ -261,7 +261,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG, "Videosurface was destroyed");
videoSurfaceCreated = false;
controller.notifyVideoSurfaceAbandoned();
@ -272,7 +272,7 @@ public class VideoplayerActivity extends MediaplayerActivity {
@Override
protected void onReloadNotification(int notificationCode) {
if (notificationCode == PlaybackService.EXTRA_CODE_AUDIO) {
if (AppConfig.DEBUG)
if (BuildConfig.DEBUG)
Log.d(TAG,
"ReloadNotification received, switching to Audioplayer now");
finish();
@ -337,4 +337,14 @@ public class VideoplayerActivity extends MediaplayerActivity {
return R.layout.videoplayer_activity;
}
@Override
protected void setScreenOn(boolean enable) {
super.setScreenOn(enable);
if (enable) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
}

View File

@ -12,7 +12,7 @@ import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.gpoddernet.GpodnetService;
@ -113,7 +113,7 @@ public class GpodnetAuthenticationActivity extends ActionBarActivity {
final String usernameStr = username.getText().toString();
final String passwordStr = password.getText().toString();
if (AppConfig.DEBUG) Log.d(TAG, "Checking login credentials");
if (BuildConfig.DEBUG) Log.d(TAG, "Checking login credentials");
new AsyncTask<GpodnetService, Void, Void>() {
volatile Exception exception;
@ -333,7 +333,7 @@ public class GpodnetAuthenticationActivity extends ActionBarActivity {
}
private void writeLoginCredentials() {
if (AppConfig.DEBUG) Log.d(TAG, "Writing login credentials");
if (BuildConfig.DEBUG) Log.d(TAG, "Writing login credentials");
GpodnetPreferences.setUsername(username);
GpodnetPreferences.setPassword(password);
GpodnetPreferences.setDeviceID(selectedDevice.getId());

View File

@ -11,7 +11,6 @@ import de.danoeh.antennapod.R;
import de.danoeh.antennapod.fragment.gpodnet.PodcastTopListFragment;
import de.danoeh.antennapod.fragment.gpodnet.SuggestionListFragment;
import de.danoeh.antennapod.fragment.gpodnet.TagListFragment;
import de.danoeh.antennapod.preferences.GpodnetPreferences;
/**
* Created by daniel on 22.08.13.

View File

@ -7,7 +7,6 @@ import android.support.v4.app.NavUtils;
import android.view.MenuItem;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.fragment.gpodnet.PodcastListFragment;
import de.danoeh.antennapod.fragment.gpodnet.SearchListFragment;
import de.danoeh.antennapod.gpoddernet.GpodnetService;
import de.danoeh.antennapod.gpoddernet.GpodnetServiceException;
import de.danoeh.antennapod.gpoddernet.model.GpodnetPodcast;

View File

@ -1,13 +1,10 @@
package de.danoeh.antennapod.adapter;
import java.util.List;
import android.content.Context;
import android.text.Layout;
import android.text.Selection;
import android.text.Spannable;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.util.Linkify;
import android.util.Log;
@ -24,6 +21,8 @@ import de.danoeh.antennapod.util.ChapterUtils;
import de.danoeh.antennapod.util.Converter;
import de.danoeh.antennapod.util.playback.Playable;
import java.util.List;
public class ChapterListAdapter extends ArrayAdapter<Chapter> {
private static final String TAG = "ChapterListAdapter";

View File

@ -12,7 +12,6 @@ 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.util.DownloadError;
/** Displays a list of DownloadStatus entries. */
public class DownloadLogAdapter extends BaseAdapter {

View File

@ -1,7 +1,5 @@
package de.danoeh.antennapod.adapter;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
@ -10,16 +8,14 @@ import android.widget.ArrayAdapter;
import android.widget.ProgressBar;
import android.widget.TextView;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.Feed;
import de.danoeh.antennapod.feed.FeedFile;
import de.danoeh.antennapod.feed.FeedImage;
import de.danoeh.antennapod.feed.FeedMedia;
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 java.util.List;
public class DownloadlistAdapter extends ArrayAdapter<Downloader> {
private int selectedItemIndex;

View File

@ -6,11 +6,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.*;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.ImageLoader;
import de.danoeh.antennapod.feed.FeedItem;

View File

@ -7,11 +7,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.*;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.FeedItem;
import de.danoeh.antennapod.feed.FeedMedia;
@ -20,8 +16,6 @@ import de.danoeh.antennapod.storage.DownloadRequester;
import de.danoeh.antennapod.util.Converter;
import de.danoeh.antennapod.util.ThemeUtils;
import java.util.Iterator;
/** List adapter for items of feeds that the user has already subscribed to. */
public class InternalFeedItemlistAdapter extends DefaultFeedItemlistAdapter {

Some files were not shown because too many files have changed in this diff Show More