summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/build.gradle11
-rw-r--r--app/src/main/assets/.gitignore4
-rw-r--r--app/src/main/assets/LICENSE_APACHE-2.0.txt202
-rw-r--r--app/src/main/assets/LICENSE_GLIDE.txt94
-rw-r--r--app/src/main/assets/LICENSE_JSOUP.txt21
-rw-r--r--app/src/main/assets/LICENSE_OKHTTP.txt13
-rw-r--r--app/src/main/assets/LICENSE_PICTOGRAMMERS.txt20
-rw-r--r--app/src/main/assets/LICENSE_SEARCHPREFERENCE.txt21
-rw-r--r--app/src/main/assets/developers.csv235
-rw-r--r--app/src/main/assets/licenses.xml123
-rw-r--r--app/src/main/assets/special_thanks.csv6
-rw-r--r--app/src/main/assets/translators.csv51
-rw-r--r--app/src/main/assets/website-languages.txt7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/PodcastApp.java12
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/DataFolderAdapter.java139
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/SimpleIconListAdapter.java59
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java54
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java37
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/actions/FeedMultiSelectActionHandler.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/AutoDownloadPreferencesFragment.java202
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/DownloadsPreferencesFragment.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/NotificationPreferencesFragment.java28
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/AboutFragment.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/ContributorsPagerFragment.java87
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/DevelopersFragment.java57
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/LicensesFragment.java126
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/SpecialThanksFragment.java56
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/TranslatorsFragment.java56
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java279
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/NextcloudAuthenticationFragment.java111
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/SynchronizationPreferencesFragment.java221
-rw-r--r--app/src/main/java/de/danoeh/antennapod/preferences/MasterSwitchPreference.java42
-rw-r--r--app/src/main/java/de/danoeh/antennapod/preferences/MaterialListPreference.java43
-rw-r--r--app/src/main/java/de/danoeh/antennapod/preferences/MaterialMultiSelectListPreference.java47
-rw-r--r--app/src/main/java/de/danoeh/antennapod/preferences/ThemePreference.java53
-rw-r--r--app/src/main/java/de/danoeh/antennapod/preferences/VolumeAdaptationPreference.java1
-rw-r--r--app/src/main/res/anim/fade_in.xml9
-rw-r--r--app/src/main/res/anim/fade_out.xml10
-rw-r--r--app/src/main/res/anim/slide_left_in.xml9
-rw-r--r--app/src/main/res/anim/slide_left_out.xml9
-rw-r--r--app/src/main/res/anim/slide_right_in.xml9
-rw-r--r--app/src/main/res/anim/slide_right_out.xml9
-rw-r--r--app/src/main/res/drawable-nodpi/theme_preview_dark.pngbin18079 -> 0 bytes
-rw-r--r--app/src/main/res/drawable-nodpi/theme_preview_light.pngbin17760 -> 0 bytes
-rw-r--r--app/src/main/res/drawable-nodpi/theme_preview_system.pngbin34076 -> 0 bytes
-rw-r--r--app/src/main/res/layout/about_teaser.xml9
-rw-r--r--app/src/main/res/layout/alertdialog_sync_provider_chooser.xml24
-rw-r--r--app/src/main/res/layout/authentication_dialog.xml61
-rw-r--r--app/src/main/res/layout/choose_data_folder_dialog.xml12
-rw-r--r--app/src/main/res/layout/choose_data_folder_dialog_entry.xml46
-rw-r--r--app/src/main/res/layout/dialog_switch_preference.xml15
-rw-r--r--app/src/main/res/layout/gpodnetauth_credentials.xml83
-rw-r--r--app/src/main/res/layout/gpodnetauth_device.xml67
-rw-r--r--app/src/main/res/layout/gpodnetauth_device_row.xml13
-rw-r--r--app/src/main/res/layout/gpodnetauth_dialog.xml31
-rw-r--r--app/src/main/res/layout/gpodnetauth_finish.xml29
-rw-r--r--app/src/main/res/layout/gpodnetauth_host.xml38
-rw-r--r--app/src/main/res/layout/nextcloud_auth_dialog.xml75
-rw-r--r--app/src/main/res/layout/proxy_settings.xml90
-rw-r--r--app/src/main/res/layout/simple_icon_list_item.xml41
-rw-r--r--app/src/main/res/layout/theme_preference.xml123
-rw-r--r--app/src/main/res/menu/bug_report_options.xml7
-rw-r--r--app/src/main/res/xml/feed_settings.xml4
-rw-r--r--app/src/main/res/xml/preferences.xml71
-rw-r--r--app/src/main/res/xml/preferences_about.xml28
-rw-r--r--app/src/main/res/xml/preferences_autodownload.xml34
-rw-r--r--app/src/main/res/xml/preferences_downloads.xml69
-rw-r--r--app/src/main/res/xml/preferences_import_export.xml45
-rw-r--r--app/src/main/res/xml/preferences_notifications.xml19
-rw-r--r--app/src/main/res/xml/preferences_playback.xml108
-rw-r--r--app/src/main/res/xml/preferences_swipe.xml28
-rw-r--r--app/src/main/res/xml/preferences_synchronization.xml31
-rw-r--r--app/src/main/res/xml/preferences_user_interface.xml95
77 files changed, 22 insertions, 3875 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 559e36a3f..a2dc2d13b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -93,6 +93,7 @@ dependencies {
implementation project(':ui:echo')
implementation project(':ui:glide')
implementation project(':ui:i18n')
+ implementation project(':ui:preferences')
implementation project(':ui:statistics')
annotationProcessor "androidx.annotation:annotation:$annotationVersion"
@@ -142,13 +143,3 @@ if (project.hasProperty("antennaPodPlayPublisherCredentials")) {
serviceAccountCredentials.set(file(antennaPodPlayPublisherCredentials))
}
}
-
-tasks.register('copyLicense', Copy) {
- from "../LICENSE"
- into "src/main/assets/"
- rename { String fileName ->
- fileName + ".txt"
- }
-}
-
-preBuild.dependsOn copyLicense
diff --git a/app/src/main/assets/.gitignore b/app/src/main/assets/.gitignore
deleted file mode 100644
index f4de63f77..000000000
--- a/app/src/main/assets/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-# this file is generated automatically
-about.html
-LICENSE.txt
-CONTRIBUTORS.txt
diff --git a/app/src/main/assets/LICENSE_APACHE-2.0.txt b/app/src/main/assets/LICENSE_APACHE-2.0.txt
deleted file mode 100644
index d64569567..000000000
--- a/app/src/main/assets/LICENSE_APACHE-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
- 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.
diff --git a/app/src/main/assets/LICENSE_GLIDE.txt b/app/src/main/assets/LICENSE_GLIDE.txt
deleted file mode 100644
index f5111eeab..000000000
--- a/app/src/main/assets/LICENSE_GLIDE.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-License for everything not in third_party and not otherwise marked:
-
-Copyright 2014 Google, Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are
-permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this list of
- conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice, this list
- of conditions and the following disclaimer in the documentation and/or other materials
- provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE, INC. OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-The views and conclusions contained in the software and documentation are those of the
-authors and should not be interpreted as representing official policies, either expressed
-or implied, of Google, Inc.
----------------------------------------------------------------------------------------------
-License for third_party/disklrucache:
-
-Copyright 2012 Jake Wharton
-Copyright 2011 The Android Open Source Project
-
-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.
----------------------------------------------------------------------------------------------
-License for third_party/gif_decoder:
-
-Copyright (c) 2013 Xcellent Creations, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
----------------------------------------------------------------------------------------------
-License for third_party/gif_encoder/AnimatedGifEncoder.java and
-third_party/gif_encoder/LZWEncoder.java:
-
-No copyright asserted on the source code of this class. May be used for any
-purpose, however, refer to the Unisys LZW patent for restrictions on use of
-the associated LZWEncoder class. Please forward any corrections to
-kweiner@fmsware.com.
-
------------------------------------------------------------------------------
-License for third_party/gif_encoder/NeuQuant.java
-
-Copyright (c) 1994 Anthony Dekker
-
-NEUQUANT Neural-Net quantization algorithm by Anthony Dekker, 1994. See
-"Kohonen neural networks for optimal colour quantization" in "Network:
-Computation in Neural Systems" Vol. 5 (1994) pp 351-367. for a discussion of
-the algorithm.
-
-Any party obtaining a copy of these files from the author, directly or
-indirectly, is granted, free of charge, a full and unrestricted irrevocable,
-world-wide, paid up, royalty-free, nonexclusive right and license to deal in
-this software and documentation files (the "Software"), including without
-limitation the rights to use, copy, modify, merge, publish, distribute,
-sublicense, and/or sell copies of the Software, and to permit persons who
-receive copies from any such party to do so, with the only requirement being
-that this copyright notice remain intact.
diff --git a/app/src/main/assets/LICENSE_JSOUP.txt b/app/src/main/assets/LICENSE_JSOUP.txt
deleted file mode 100644
index fef8197fe..000000000
--- a/app/src/main/assets/LICENSE_JSOUP.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License
-
-Copyright (c) 2009-2022 Jonathan Hedley <https://jsoup.org/>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/app/src/main/assets/LICENSE_OKHTTP.txt b/app/src/main/assets/LICENSE_OKHTTP.txt
deleted file mode 100644
index 48164b3fc..000000000
--- a/app/src/main/assets/LICENSE_OKHTTP.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright 2019 Square, 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.
diff --git a/app/src/main/assets/LICENSE_PICTOGRAMMERS.txt b/app/src/main/assets/LICENSE_PICTOGRAMMERS.txt
deleted file mode 100644
index 382f8a138..000000000
--- a/app/src/main/assets/LICENSE_PICTOGRAMMERS.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Pictogrammers Free License
---------------------------
-
-This icon collection is released as free, open source, and GPL friendly by
-the [Pictogrammers](http://pictogrammers.com/) icon group. You may use it
-for commercial projects, open source projects, or anything really.
-
-# Icons: Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0)
-Some of the icons are redistributed under the Apache 2.0 license. All other
-icons are either redistributed under their respective licenses or are
-distributed under the Apache 2.0 license.
-
-# Fonts: Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0)
-All web and desktop fonts are distributed under the Apache 2.0 license. Web
-and desktop fonts contain some icons that are redistributed under the Apache
-2.0 license. All other icons are either redistributed under their respective
-licenses or are distributed under the Apache 2.0 license.
-
-# Code: MIT (https://opensource.org/licenses/MIT)
-The MIT license applies to all non-font and non-icon files.
diff --git a/app/src/main/assets/LICENSE_SEARCHPREFERENCE.txt b/app/src/main/assets/LICENSE_SEARCHPREFERENCE.txt
deleted file mode 100644
index 2e1603517..000000000
--- a/app/src/main/assets/LICENSE_SEARCHPREFERENCE.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2018 ByteHamster
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/app/src/main/assets/developers.csv b/app/src/main/assets/developers.csv
deleted file mode 100644
index da0fa6093..000000000
--- a/app/src/main/assets/developers.csv
+++ /dev/null
@@ -1,235 +0,0 @@
-ByteHamster;5811634;Maintainer
-danieloeh;968613;Original creator of AntennaPod (retired)
-mfietz;6860662;Maintainer (retired)
-TomHennen;5216560;Maintainer (retired)
-orionlee;250644;Contributor
-domingos86;9538859;Contributor
-TacoTheDank;32376686;Contributor
-tonytamsf;149837;Contributor
-damoasda;46045854;Contributor
-andersonvom;69922;Contributor
-ebraminio;833473;Contributor
-shortspider;5712543;Contributor
-spacecowboy;223655;Contributor
-asdoi;36813904;Contributor
-keunes;11229646;Maintainer
-patheticpat;16046;Contributor
-brad;1614;Contributor
-maxbechtold;9162198;Contributor
-Cj-Malone;10121513;Contributor
-gaul;848247;Contributor
-qkolj;6667105;Contributor
-pachecosf;46357909;Contributor
-gerardolgvr;20119298;Contributor
-johnjohndoe;144518;Contributor
-bws9000;262625;Contributor
-hannesa2;3314607;Contributor
-ahangarha;11241315;Contributor
-rharriso;570910;Contributor
-xgouchet;818706;Contributor
-ueen;5067479;Contributor
-peakvalleytech;65185819;Contributor
-vbh;56578479;Contributor
-mueller-ma;22525368;Contributor
-gitstart;1501599;Contributor
-terminalmage;328598;Contributor
-TheRealFalcon;153674;Contributor
-Slinger;75751;Contributor
-udif;809640;Contributor
-malockin;12814657;Contributor
-jas14;569991;Contributor
-jonasburian;15125616;Contributor
-dirkmueller;1029152;Contributor
-jatinkumarg;20503830;Contributor
-peschmae0;4450993;Contributor
-orelogo;15976578;Contributor
-txtd;7108931;Contributor
-ydinath;4193331;Contributor
-two-heart;12869538;Contributor
-binarytoto;75904760;Contributor
-saqura;1935380;Contributor
-drabux;10663142;Contributor
-dethstar;1239177;Contributor
-mchelen;30691;Contributor
-CedricCabessa;365097;Contributor
-matejdro;507922;Contributor
-jhenninger;197274;Contributor
-Xeitor;8825715;Contributor
-ligi;111600;Contributor
-egsavage;126165;Contributor
-cketti;218061;Contributor
-MeirAtIMDDE;4421079;Contributor
-deandreamatias;21011641;Contributor
-hzulla;1705654;Contributor
-bibz;5141956;Contributor
-HaBaLeS;730902;Contributor
-JessieVela;33134794;Contributor
-volhol;11587858;Contributor
-michaelmwhite;28901334;Contributor
-twiceyuan;2619800;Contributor
-thrillfall;15801468;Contributor
-rezanejati;16049370;Contributor
-beijingling;13600573;Contributor
-VishnuSanal;50027064;Contributor
-nereocystis;2257107;Contributor
-liesen;26872;Contributor
-dreiss;4121;Contributor
-Thom-Merrilin;76849828;Contributor
-archibishop;36948493;Contributor
-alroborol;24603829;Contributor
-avirajrsingh;69088913;Contributor
-caoilte;1500358;Contributor
-toggles;14695;Contributor
-connectety;26038710;Contributor
-matdb;48329535;Contributor
-SosoTughushi;19908097;Contributor
-Lukmannudin;32972299;Contributor
-24hours;650407;Contributor
-LatinSuD;451487;Contributor
-katrinleinweber;9948149;Contributor
-jmue;898577;Contributor
-xisberto;1914956;Contributor
-HolgerJeromin;2410353;Contributor
-HrBDev;25826502;Contributor
-CameronBanga;611354;Contributor
-mohitshah3111999;42018918;Contributor
-markamaze;17114678;Contributor
-femmdi;47671383;Contributor
-datavizard;44409076;Contributor
-wseemann;2296196;Contributor
-vinodpatildev;61724808;Contributor
-liutng;8223139;Contributor
-moralesg;14352147;Contributor
-mr-intj;6268767;Contributor
-tamizh143;50977879;Contributor
-tuxayo;2678215;Contributor
-alimemonzx;44647595;Contributor
-dev-darrell;52300159;Contributor
-jmdouglas;10855634;Contributor
-olivoto;15932680;Contributor
-PtilopsisLeucotis;54054883;Contributor
-dsmith47;14109426;Contributor
-kingargyle;177042;Contributor
-FarzanKh;14272565;Contributor
-damlayildiz;56313500;Contributor
-hannesaa2;18496079;Contributor
-myslok;2098329;Contributor
-jhunnius;9149031;Contributor
-Jared234;26669009;Contributor
-skitt;2128935;Contributor
-mamehacker;16738348;Contributor
-raghulrm;5362986;Contributor
-raghulj;57007;Contributor
-Niffler;8172446;Contributor
-JonathanZopf;47294759;Contributor
-a1291762;327162;Contributor
-ShadowIce;59123;Contributor
-victorhaggqvist;1887628;Contributor
-Toover;8531603;Contributor
-atrus6;357881;Contributor
-edent;837136;Contributor
-Carrajaula;25173082;Contributor
-vimsick;20211590;Contributor
-corecode;177979;Contributor
-Pinkolik;26690061;Contributor
-danners;116551;Contributor
-Silverwarriorin;46795935;Contributor
-shombando;42972338;Contributor
-shantanahardy;26757164;Contributor
-sethoscope;534043;Contributor
-sonnayasomnambula;7716779;Contributor
-selivan;1208989;Contributor
-SebiderSushi;23618858;Contributor
-SamWhited;512573;Contributor
-bobrippling;205673;Contributor
-ricardoborgesjr;2378440;Contributor
-rahmatrmdn;43070505;Contributor
-RafaelBod;77226971;Contributor
-panoreak;25068506;Contributor
-ortylp;470439;Contributor
-patrickdemers6;12687723;Contributor
-pganssle;1377457;Contributor
-patrickjkennedy;8617261;Contributor
-zawad2221;32180355;Contributor
-trevortabaka;1552990;Contributor
-thomasdomingos;16108830;Contributor
-tamizh138;26201258;Contributor
-struggggle;19150666;Contributor
-silansuslu;72400543;Contributor
-satis-fy;33289586;Contributor
-s3lph;5564491;Contributor
-hiasr;22374542;Contributor
-quails4Eva;16786857;Contributor
-NWuensche;15856197;Contributor
-minusf;3632883;Contributor
-loucasal;25279797;Contributor
-lightonflux;1377943;Contributor
-gregoryjtom;32783177;Contributor
-sak96;26397224;Contributor
-fossterer;4236021;Contributor
-e-t-l;40775958;Contributor
-cliambrown;17516840;Contributor
-chrk2205;44704035;Contributor
-blairun;1585872;Contributor
-axq;5077221;Contributor
-andrewc1;19559401;Contributor
-amhokies;3124968;Contributor
-agibault;15703733;Contributor
-yarons;406826;Contributor
-waylife;3348620;Contributor
-heyyviv;56256802;Contributor
-oliver;2344;Contributor
-IordanisKokk;72551397;Contributor
-harshad1;1940940;Contributor
-Geist5000;37940313;Contributor
-eerden;277513;Contributor
-eirikv;4076243;Contributor
-edwinhere;19705425;Contributor
-dhruvpatidar359;103873587;Contributor
-cdhiraj40;75211982;Contributor
-brettle;118192;Contributor
-ariedov;958646;Contributor
-danielm5;66779;Contributor
-CWftw;1498303;Contributor
-cszucko;1810383;Contributor
-britiger;2057760;Contributor
-chrissicool;232590;Contributor
-chetan882777;36985543;Contributor
-BoJacobs;25435640;Contributor
-bhaskarblur;85757758;Contributor
-arantius;84729;Contributor
-andweg;30474752;Contributor
-andrey-krutov;1488973;Contributor
-ASGusev;5954975;Contributor
-awbooze;42682253;Contributor
-alexte;7724992;Contributor
-alanorth;191754;Contributor
-adrns;13379985;Contributor
-abhinavg1997;60095795;Contributor
-nproth;48482306;Contributor
-nikhil097;35090769;Contributor
-nicoolasj;63880378;Contributor
-mounirlamouri;573590;Contributor
-MolarAmbiguity;10541979;Contributor
-Mengshi24;58278376;Contributor
-max-wittig;6639323;Contributor
-mschuetz;108637;Contributor
-Gaffen;718125;Contributor
-Mchoi8;45410115;Contributor
-mdeveloper20;2319126;Contributor
-mo;7117;Contributor
-mgborowiec;29843126;Contributor
-M-arcel;56698158;Contributor
-schwedenmut;9077622;Contributor
-mlasson;5814258;Contributor
-mjydv4548;92643506;Contributor
-MStrecke;5202211;Contributor
-LukasBrilla5;114982148;Contributor
-luiscruz;1080714;Contributor
-kvithayathil;1056073;Contributor
-Kaligule;3586246;Contributor
-CreamyCookie;3063858;Contributor
-JonOfUs;11487762;Contributor
-Foso;5015532;Contributor
-jannic;232606;Contributor
-jklippel;8657220;Contributor
diff --git a/app/src/main/assets/licenses.xml b/app/src/main/assets/licenses.xml
deleted file mode 100644
index e6745e4f5..000000000
--- a/app/src/main/assets/licenses.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<libraries>
- <library
- name="AntennaPod"
- author="The AntennaPod team"
- website="https://github.com/AntennaPod/AntennaPod"
- license="GPL-3.0"
- licenseText="LICENSE.txt" />
- <library
- name="Android Jetpack"
- author="Google"
- website="https://developer.android.com/jetpack"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="Apache Commons"
- author="The Apache Software Foundation"
- website="https://commons.apache.org/"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="Balloon"
- author="Jaewoong Eum"
- website="https://github.com/skydoves/Balloon"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="Conscrypt"
- author="Google"
- website="https://github.com/google/conscrypt"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="EventBus"
- author="greenrobot"
- website="https://github.com/greenrobot/EventBus"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="ExoPlayer"
- author="Google"
- website="https://github.com/google/ExoPlayer"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="Floating Action Button Speed Dial"
- author="Roberto Leinardi"
- website="https://github.com/leinardi/FloatingActionButtonSpeedDial"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="fyydlin"
- author="Martin Fietz"
- website="https://github.com/mfietz/fyydlin"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="Glide"
- author="bumptech"
- website="https://github.com/bumptech/glide"
- license="Simplified BSD"
- licenseText="LICENSE_GLIDE.txt" />
- <library
- name="jsoup"
- author="Jonathan Hedley"
- website="https://jsoup.org/"
- license="MIT"
- licenseText="LICENSE_JSOUP.txt" />
- <library
- name="Material Components for Android"
- author="Google"
- website="https://github.com/material-components/material-components-android"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="Material Design Icons"
- author="Google"
- website="https://github.com/google/material-design-icons"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="Material Design Icons"
- author="Templarian"
- website="https://github.com/Templarian/MaterialDesign"
- license="Pictogrammers Free License"
- licenseText="LICENSE_PICTOGRAMMERS.txt" />
- <library
- name="OkHttp"
- author="Square"
- website="https://github.com/square/okhttp"
- license="Apache 2.0"
- licenseText="LICENSE_OKHTTP.txt" />
- <library
- name="RecyclerViewSwipeDecorator"
- author="Paolo Montalto"
- website="https://github.com/xabaras/RecyclerViewSwipeDecorator"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="RxAndroid"
- author="ReactiveX"
- website="https://github.com/ReactiveX/RxAndroid"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="RxJava"
- author="ReactiveX"
- website="https://github.com/ReactiveX/RxJava"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
- <library
- name="SearchPreference"
- author="ByteHamster"
- website="https://github.com/ByteHamster/SearchPreference"
- license="MIT"
- licenseText="LICENSE_SEARCHPREFERENCE.txt" />
- <library
- name="StackBlur"
- author="Enrique López Mañas"
- website="https://github.com/kikoso/android-stackblur"
- license="Apache 2.0"
- licenseText="LICENSE_APACHE-2.0.txt" />
-</libraries>
diff --git a/app/src/main/assets/special_thanks.csv b/app/src/main/assets/special_thanks.csv
deleted file mode 100644
index 5758d48c0..000000000
--- a/app/src/main/assets/special_thanks.csv
+++ /dev/null
@@ -1,6 +0,0 @@
-ByteHamster;Project lead;https://avatars2.githubusercontent.com/u/5811634?s=60&v=4
-Keunes;Project lead;https://avatars2.githubusercontent.com/u/11229646?s=60&v=4
-Femmdi;Translations coordinator;https://avatars2.githubusercontent.com/u/47671383?s=60&v=4
-Ryan Gorley (Freehive);2023 brand design;https://avatars2.githubusercontent.com/u/12849958?s=60&v=4
-221 Pixels;2020 brand design;https://avatars2.githubusercontent.com/u/58243143?s=60&v=4
-Anxhelo Lushka;2020 website design;https://avatars2.githubusercontent.com/u/25004151?s=60&v=4
diff --git a/app/src/main/assets/translators.csv b/app/src/main/assets/translators.csv
deleted file mode 100644
index 28d659c99..000000000
--- a/app/src/main/assets/translators.csv
+++ /dev/null
@@ -1,51 +0,0 @@
-Arabic;abuzar3.khalid, AhmedHll, Ammar99, badarotti, fake4K, HeshamTB, keunes, mars_amn, Mehyar, mh.abdelhay, mhamade, moftasa, mohmans, MustafaAlgurabi, nabilMaghura, rex07, shubbar, vernandos
-Asturian (ast_ES);enolp, keunes
-Azerbaijani;5NOER227O, xxmn77
-Basque;a_mento, Asier_Iturralde_Sarasola, bipoza, gaztainalde, IngrownMink4, keunes, Osoitz, pospolos
-Bengali;laggybird
-Breton;Belvar, Eorn, EwenKorr, FlorentTroer, Iriep, keunes, technozuzici
-Bulgarian;keunes, ma4ko, mihainov, ppk89, solusitor, x7ype
-Catalan;and_dapo, arseru, badlop, bluegeekgh, carles.llacer, dvd1985, elcamilet, exort12, IvanAmarante, javiercoll, josep2, keunes, Kintu, lambdani, marcmetallextrem, prova, sandandmercury, selmins, xc70
-Chinese (zh_CN);135e2, aihenry2980, Biacke, brnme, claybiockiller, clong289734997, cyril3, Felix2yu, gaohongyuan, Guaidaodl, Huck0, iconteral, jhxie, jxj2zzz79pfp9bpo, JY3, keunes, kyleehee, molisiye, owen8877, RainSlide, RangerNJU, Sak94664, spice2wolf, tupunco, weylinn, whiye.hust, wongsyrone, Xrodo, yangyang, yiqiok
-Chinese (zh_TW);bobchao, BWsix, ijliao, keunes, LNDDYL, mapobi, pggdt, ymhuang0808
-Czech (cs_CZ);anotheranonymoususer, befeleme, Benda, elich, Hanzmeister, jjh, JStrange, kudlav, McLenin666, md.share, ShimonH, svetlemodry, Thomaash, viotalJiplk
-Danish;deusdenton, ERYpTION, Grooty12, JFreak, jhertel, keunes, mikini, petterbejo, SebastianKiwiDk, soelvraeven
-Dutch;daerts, e2jk, fvbommel, keunes, Kleurenregen, mijnheer, oldblue, rwv, twijg, Vistaus, y33per
-Estonian;beez276, Eraser, keunes, mahfiaz, Rots
-Finnish;Ban3, keunes, ktstmu, Kuutar, noppa, Sahtor, scop, teemue
-French;5moufl, 5NOER227O, AX.AGD, ayiniho, ChaoticMind, clombion, Cornegidouille, Daremo, e2jk, ebouaziz, keunes, klintom, Kuscoo, lacouture, LouFex, manuelleduc, Matth78, paolovador, petterbejo, PierreLaville, Poussinou, RomainTT, sterylmreep, teamon, Thoscellen
-Galician;antiparvos, pikamoku, Raichely, Sirgo
-German;23Ba1l598, 5NOER227O, _Er, axre, ByteHamster, Ceekay, ceving, dadosch, datesastick, Delvo, DerSilly, elkangaroo, enz, Erc187, F462, f_grubm, femmdi, finsterwalder, forght, hbilke, HolgerJeromin, JMAN, JoeMcFly, jokap, JoniArida, JonOfUs, kalei, keunes, klyneloud, Kostas_F, L.D.A., Macusercom, MahdiMoradi, max.wittig, mfietz, Michael_Strecke, mkida, muellerma, Nickname, petterbejo, pudeeh, Quiss42, repat, sadfgdf, Sargon_Isa, teamon, thetrash23, thiesrappen, timo.rohwedder, toaskoas, Tobiasff3200, tomte, Tonne11, ttick, tweimer, VfBFan, vrifox, Willhelm, ypid
-Hebrew (he_IL);amir.dafnyman, E1i9, eldaryiftach, mongoose4004, pinkasey, rellieberman, Yaron
-Hindi (hi_IN);Agyat009, itforchange, keunes, PrestigiousBeat6355, purple.coder, siddhusengar, singhrishi245021, sohailmangal72, techiethakkar, thelazyoxymoron
-Hu;hurrikan, keunes, lna91, lomapur, marthynw, mc.transifex, meskobalazs, MMate2007, naren93, Remboo
-Icelandic;keunes, marthjod
-Indonesian;awmpawl, dbrw, justch, keunes, levirs565, liimee, Matyeyev
-Italian (it_IT);aalex70, allin, alvami, atilluF, Bonnee, datesastick, dontknowcris, giulia.iuppa, giuseppep, Guybrush88, ilmanzo, juanjom, keunes, lu.por, m.chinni, marco_pag, mat650, micael_27, mircocau, neonsoftware, niccord, salorock, theloca95
-Japanese;atsukotominaga, ayiniho, giulia.iuppa, guyze, keunes, kirameister, KotaKato, Naofumi, sh3llc4t, tko_cactus, TranslatorG, Xrodo
-Kannada (kn_IN);chethanhs, chiraag.nataraj, deepu2, itforchange, keunes, thejeshgn, yogi
-Ko;changwoo, eshc123, keunes, libliboom, shinwookim
-Latin;nivaca
-Lithuanian;keunes, Sharper
-Macedonian;krisfremen
-Malayalam;joice, keunes, KiranS, rashivkp
-Modern Greek (1453-);AnimaRain, antonist, bufetr, Fotispel, Ioannis_D, keunes, Kostas_F, pavlosv, pcguy23
-Norwegian Bokmål (nb_NO);abstrakct, ahysing, bablecopherye, corkie, forteller, Gauteweb, halibut, heraldo, jakobkg, Jamiera, keunes, kongk, sevenmaster, tc5, timbast, TrymSan, ttick
-Persian;ahangarha, danialbehzadi, ebadi, ebraminio, F7D, hamidrezabayat76, K2latmanesh, keunes, khersi, MahdiMoradi, mmehdishafiee, sinamoghaddas, zarinisalman62
-Polish (pl_PL);ad.szczepanski, befeleme, ewm, Gadzinisko, hiro2020, Iwangelion, kamila.miodek1991, keunes, lomapur, M4SK1N, mandlus, maniexx, Medzik, Mephistofeles, millup, portonus, Rakowy_Manaska, scooby250319888, shark103, TheName, tyle
-Portuguese;emansije, jmelo461, keunes, lecalam, smarquespt, WalkerPt
-Portuguese (pt_BR);alexupits, alysonborges, amalvarenga, andersonvom, aracnus, arua, bandreghetti, brasileiro, caioau, carlo_valente, castrors, denisdl, diecavallax, fnogcps, jmelo461, keunes, lipefire, mbaltar, olivoto, philosp, ricardo_ramos, rogervezaro, RubeensVinicius, SamWilliam, tepadilha, tschertel, Xandefex, ziul123
-Romanian (ro_RO);AdrianMirica, andreh, eRadical, fuzzmz, Hiumee, keunes, mozartro, ralienpp
-Russian (ru_RU);ashed, btimofeev, Duke_Raven, flexagoon, gammja, homocomputeris, IgorPolyakov, keunes, mercutiy, nachoman, null, overmind88, PtilopsisLeucotis, s.chebotar, tepxd, un_logic, Vladryyu, whereisthetea, yako
-Sardinian;prova
-Slovak;ati3, jose1711, keunes, marulinko, McLenin666, real_name, tiborepcek
-Slovenian (sl_SI);asovic, filomena.pzn, keunes, panter23, TheFireFighter, trus2
-Spanish;3argueta3, 5NOER227O, AleksSyntek, andersonvom, andrespelaezp, arseru, Atreyu94, badlop, CaeM0R, carlos.levy, cartojo, deandreamatias, delthia, devarops, dvd1985, elcamilet, elojodepajaro, Fitoschido, frandavid100, Gomerick, hard_ware, Ioannis_D, israelem, javiercoll, keunes, kiekie, LatinSuD, leogrignafini, meanderingDot, Nickname, nivaca, rafael.osuna, technozuzici, tldevelopbit, tres.14159, vfmatzkin, victorzequeida96, wakutiteo, ziul123
-Swahili (macrolanguage);1silvester, keunes, kmtra
-Swedish (sv_SE);aiix, Ainali, bittin, bpnilsson, gustavkj, jrosdahl, keunes, LinAGKar, nilso, TwoD, victorhggqvst
-Tatar;seber
-Telugu;keunes, veeven
-Turkish;AhmedDuran, alianilkocak, alierdogan7, AliGaygisiz, androtuna, archixe, brsata, Erdy, firatsoygul, ibo90p, kabaqtepeli, keunes, overbite, Piryus, samsamsamsam, sismantolga, Slsdem, TZVS, xe1st
-Ukrainian (uk_UA);amatra, aserbovets, balaraz, hishak, keunes, koorool, older, paul_sm, sergiyr, voinovich_vyacheslav, zhenya97
-Uzbek;Usmon
-Vietnamese;abnvolk, bruhwut, keunes, ppanhh
diff --git a/app/src/main/assets/website-languages.txt b/app/src/main/assets/website-languages.txt
deleted file mode 100644
index 64361314b..000000000
--- a/app/src/main/assets/website-languages.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-en
-fr
-nl
-it
-da
-de
-es
diff --git a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java
index ab52bc98a..d39015834 100644
--- a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java
+++ b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java
@@ -1,13 +1,10 @@
package de.danoeh.antennapod;
import android.app.Application;
-import android.content.ComponentName;
-import android.content.Intent;
import android.os.StrictMode;
import com.google.android.material.color.DynamicColors;
-import de.danoeh.antennapod.activity.SplashActivity;
import de.danoeh.antennapod.config.ApplicationCallbacksImpl;
import de.danoeh.antennapod.core.ApCoreEventBusIndex;
import de.danoeh.antennapod.core.ClientConfig;
@@ -61,13 +58,4 @@ public class PodcastApp extends Application {
DynamicColors.applyToActivitiesIfAvailable(this);
}
-
- public static void forceRestart() {
- Intent intent = new Intent(getInstance(), SplashActivity.class);
- ComponentName cn = intent.getComponent();
- Intent mainIntent = Intent.makeRestartActivityTask(cn);
- getInstance().startActivity(mainIntent);
- Runtime.getRuntime().exit(0);
- }
-
}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
index 7afb98fd1..afbeb76ea 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
@@ -61,13 +61,13 @@ import de.danoeh.antennapod.net.common.UrlChecker;
import de.danoeh.antennapod.core.util.syndication.FeedDiscoverer;
import de.danoeh.antennapod.core.util.syndication.HtmlToPlainText;
import de.danoeh.antennapod.databinding.OnlinefeedviewActivityBinding;
-import de.danoeh.antennapod.dialog.AuthenticationDialog;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedPreferences;
import de.danoeh.antennapod.model.playback.RemoteMedia;
import de.danoeh.antennapod.parser.feed.UnsupportedFeedtypeException;
import de.danoeh.antennapod.ui.common.ThemeUtils;
import de.danoeh.antennapod.ui.glide.FastBlurTransformation;
+import de.danoeh.antennapod.ui.preferences.screen.synchronization.AuthenticationDialog;
import io.reactivex.Maybe;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java
index 67669af78..8d6ac965f 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java
@@ -23,15 +23,15 @@ import de.danoeh.antennapod.R;
import de.danoeh.antennapod.ui.common.ThemeSwitcher;
import de.danoeh.antennapod.databinding.SettingsActivityBinding;
import de.danoeh.antennapod.event.MessageEvent;
-import de.danoeh.antennapod.fragment.preferences.AutoDownloadPreferencesFragment;
import de.danoeh.antennapod.fragment.preferences.ImportExportPreferencesFragment;
import de.danoeh.antennapod.fragment.preferences.MainPreferencesFragment;
import de.danoeh.antennapod.fragment.preferences.DownloadsPreferencesFragment;
-import de.danoeh.antennapod.fragment.preferences.NotificationPreferencesFragment;
import de.danoeh.antennapod.fragment.preferences.PlaybackPreferencesFragment;
-import de.danoeh.antennapod.fragment.preferences.synchronization.SynchronizationPreferencesFragment;
import de.danoeh.antennapod.fragment.preferences.SwipePreferencesFragment;
import de.danoeh.antennapod.fragment.preferences.UserInterfacePreferencesFragment;
+import de.danoeh.antennapod.ui.preferences.screen.AutoDownloadPreferencesFragment;
+import de.danoeh.antennapod.ui.preferences.screen.NotificationPreferencesFragment;
+import de.danoeh.antennapod.ui.preferences.screen.synchronization.SynchronizationPreferencesFragment;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DataFolderAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DataFolderAdapter.java
deleted file mode 100644
index 3760c97ba..000000000
--- a/app/src/main/java/de/danoeh/antennapod/adapter/DataFolderAdapter.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package de.danoeh.antennapod.adapter;
-
-import android.content.Context;
-import android.text.format.Formatter;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ProgressBar;
-import android.widget.RadioButton;
-import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.core.util.Consumer;
-import androidx.recyclerview.widget.RecyclerView;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.storage.preferences.UserPreferences;
-import de.danoeh.antennapod.core.util.StorageUtils;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-public class DataFolderAdapter extends RecyclerView.Adapter<DataFolderAdapter.ViewHolder> {
- private final Consumer<String> selectionHandler;
- private final String currentPath;
- private final List<StoragePath> entries;
- private final String freeSpaceString;
-
- public DataFolderAdapter(Context context, @NonNull Consumer<String> selectionHandler) {
- this.entries = getStorageEntries(context);
- this.currentPath = getCurrentPath();
- this.selectionHandler = selectionHandler;
- this.freeSpaceString = context.getString(R.string.choose_data_directory_available_space);
- }
-
- @NonNull
- @Override
- public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- LayoutInflater inflater = LayoutInflater.from(parent.getContext());
- View entryView = inflater.inflate(R.layout.choose_data_folder_dialog_entry, parent, false);
- return new ViewHolder(entryView);
- }
-
- @Override
- public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
- StoragePath storagePath = entries.get(position);
- Context context = holder.root.getContext();
- String freeSpace = Formatter.formatShortFileSize(context, storagePath.getAvailableSpace());
- String totalSpace = Formatter.formatShortFileSize(context, storagePath.getTotalSpace());
-
- holder.path.setText(storagePath.getShortPath());
- holder.size.setText(String.format(freeSpaceString, freeSpace, totalSpace));
- holder.progressBar.setProgress(storagePath.getUsagePercentage());
- View.OnClickListener selectListener = v -> selectionHandler.accept(storagePath.getFullPath());
- holder.root.setOnClickListener(selectListener);
- holder.radioButton.setOnClickListener(selectListener);
-
- if (storagePath.getFullPath().equals(currentPath)) {
- holder.radioButton.toggle();
- }
- }
-
- @Override
- public int getItemCount() {
- return entries.size();
- }
-
- private String getCurrentPath() {
- File dataFolder = UserPreferences.getDataFolder(null);
- if (dataFolder != null) {
- return dataFolder.getAbsolutePath();
- }
- return null;
- }
-
- private List<StoragePath> getStorageEntries(Context context) {
- File[] mediaDirs = context.getExternalFilesDirs(null);
- final List<StoragePath> entries = new ArrayList<>(mediaDirs.length);
- for (File dir : mediaDirs) {
- if (!isWritable(dir)) {
- continue;
- }
- entries.add(new StoragePath(dir.getAbsolutePath()));
- }
- if (entries.isEmpty() && isWritable(context.getFilesDir())) {
- entries.add(new StoragePath(context.getFilesDir().getAbsolutePath()));
- }
- return entries;
- }
-
- private boolean isWritable(File dir) {
- return dir != null && dir.exists() && dir.canRead() && dir.canWrite();
- }
-
- static class ViewHolder extends RecyclerView.ViewHolder {
- private final View root;
- private final TextView path;
- private final TextView size;
- private final RadioButton radioButton;
- private final ProgressBar progressBar;
-
- ViewHolder(View itemView) {
- super(itemView);
- root = itemView.findViewById(R.id.root);
- path = itemView.findViewById(R.id.path);
- size = itemView.findViewById(R.id.size);
- radioButton = itemView.findViewById(R.id.radio_button);
- progressBar = itemView.findViewById(R.id.used_space);
- }
- }
-
- static class StoragePath {
- private final String path;
-
- StoragePath(String path) {
- this.path = path;
- }
-
- String getShortPath() {
- int prefixIndex = path.indexOf("Android");
- return (prefixIndex > 0) ? path.substring(0, prefixIndex) : path;
- }
-
- String getFullPath() {
- return this.path;
- }
-
- long getAvailableSpace() {
- return StorageUtils.getFreeSpaceAvailable(path);
- }
-
- long getTotalSpace() {
- return StorageUtils.getTotalSpaceAvailable(path);
- }
-
- int getUsagePercentage() {
- return 100 - (int) (100 * getAvailableSpace() / (float) getTotalSpace());
- }
- }
-} \ No newline at end of file
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/SimpleIconListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/SimpleIconListAdapter.java
deleted file mode 100644
index 10bda4efa..000000000
--- a/app/src/main/java/de/danoeh/antennapod/adapter/SimpleIconListAdapter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package de.danoeh.antennapod.adapter;
-
-import android.content.Context;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ImageView;
-import android.widget.TextView;
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.load.engine.DiskCacheStrategy;
-import com.bumptech.glide.request.RequestOptions;
-import de.danoeh.antennapod.R;
-
-import java.util.List;
-
-/**
- * Displays a list of items that have a subtitle and an icon.
- */
-public class SimpleIconListAdapter<T extends SimpleIconListAdapter.ListItem> extends ArrayAdapter<T> {
- private final Context context;
- private final List<T> listItems;
-
- public SimpleIconListAdapter(Context context, List<T> listItems) {
- super(context, R.layout.simple_icon_list_item, listItems);
- this.context = context;
- this.listItems = listItems;
- }
-
- @Override
- public View getView(int position, View view, ViewGroup parent) {
- if (view == null) {
- view = View.inflate(context, R.layout.simple_icon_list_item, null);
- }
-
- ListItem item = listItems.get(position);
- ((TextView) view.findViewById(R.id.title)).setText(item.title);
- ((TextView) view.findViewById(R.id.subtitle)).setText(item.subtitle);
- Glide.with(context)
- .load(item.imageUrl)
- .apply(new RequestOptions()
- .diskCacheStrategy(DiskCacheStrategy.NONE)
- .fitCenter()
- .dontAnimate())
- .into(((ImageView) view.findViewById(R.id.icon)));
- return view;
- }
-
- public static class ListItem {
- public final String title;
- public final String subtitle;
- public final String imageUrl;
-
- public ListItem(String title, String subtitle, String imageUrl) {
- this.title = title;
- this.subtitle = subtitle;
- this.imageUrl = imageUrl;
- }
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java
deleted file mode 100644
index 38ee82155..000000000
--- a/app/src/main/java/de/danoeh/antennapod/dialog/AuthenticationDialog.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package de.danoeh.antennapod.dialog;
-
-import android.content.Context;
-import android.text.method.HideReturnsTransformationMethod;
-import android.text.method.PasswordTransformationMethod;
-import android.view.LayoutInflater;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.databinding.AuthenticationDialogBinding;
-
-/**
- * Displays a dialog with a username and password text field and an optional checkbox to save username and preferences.
- */
-public abstract class AuthenticationDialog extends MaterialAlertDialogBuilder {
- boolean passwordHidden = true;
-
- public AuthenticationDialog(Context context, int titleRes, boolean enableUsernameField,
- String usernameInitialValue, String passwordInitialValue) {
- super(context);
- setTitle(titleRes);
- AuthenticationDialogBinding viewBinding = AuthenticationDialogBinding.inflate(LayoutInflater.from(context));
- setView(viewBinding.getRoot());
-
- viewBinding.usernameEditText.setEnabled(enableUsernameField);
- if (usernameInitialValue != null) {
- viewBinding.usernameEditText.setText(usernameInitialValue);
- }
- if (passwordInitialValue != null) {
- viewBinding.passwordEditText.setText(passwordInitialValue);
- }
- viewBinding.showPasswordButton.setOnClickListener(v -> {
- if (passwordHidden) {
- viewBinding.passwordEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
- viewBinding.showPasswordButton.setAlpha(1.0f);
- } else {
- viewBinding.passwordEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
- viewBinding.showPasswordButton.setAlpha(0.6f);
- }
- passwordHidden = !passwordHidden;
- });
-
- setOnCancelListener(dialog -> onCancelled());
- setNegativeButton(R.string.cancel_label, (dialog, which) -> onCancelled());
- setPositiveButton(R.string.confirm_label, (dialog, which)
- -> onConfirmed(viewBinding.usernameEditText.getText().toString(),
- viewBinding.passwordEditText.getText().toString()));
- }
-
- protected void onCancelled() {
-
- }
-
- protected abstract void onConfirmed(String username, String password);
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java
deleted file mode 100644
index 47cc60205..000000000
--- a/app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package de.danoeh.antennapod.dialog;
-
-import android.content.Context;
-
-import android.view.View;
-import androidx.appcompat.app.AlertDialog;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import androidx.core.util.Consumer;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.adapter.DataFolderAdapter;
-
-public class ChooseDataFolderDialog {
-
- public static void showDialog(final Context context, Consumer<String> handlerFunc) {
-
- View content = View.inflate(context, R.layout.choose_data_folder_dialog, null);
- AlertDialog dialog = new MaterialAlertDialogBuilder(context)
- .setView(content)
- .setTitle(R.string.choose_data_directory)
- .setMessage(R.string.choose_data_directory_message)
- .setNegativeButton(R.string.cancel_label, null)
- .create();
- ((RecyclerView) content.findViewById(R.id.recyclerView)).setLayoutManager(new LinearLayoutManager(context));
-
- DataFolderAdapter adapter = new DataFolderAdapter(context, path -> {
- dialog.dismiss();
- handlerFunc.accept(path);
- });
- ((RecyclerView) content.findViewById(R.id.recyclerView)).setAdapter(adapter);
-
- if (adapter.getItemCount() != 0) {
- dialog.show();
- }
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
index 4626c061f..c40a56dce 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
@@ -38,10 +38,10 @@ import de.danoeh.antennapod.model.feed.VolumeAdaptionSetting;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
-import de.danoeh.antennapod.dialog.AuthenticationDialog;
import de.danoeh.antennapod.dialog.EpisodeFilterDialog;
import de.danoeh.antennapod.dialog.FeedPreferenceSkipDialog;
import de.danoeh.antennapod.dialog.TagSettingsDialog;
+import de.danoeh.antennapod.ui.preferences.screen.synchronization.AuthenticationDialog;
import io.reactivex.Maybe;
import io.reactivex.MaybeOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/actions/FeedMultiSelectActionHandler.java b/app/src/main/java/de/danoeh/antennapod/fragment/actions/FeedMultiSelectActionHandler.java
index 78ddccf0b..b5a9215e6 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/actions/FeedMultiSelectActionHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/actions/FeedMultiSelectActionHandler.java
@@ -18,10 +18,10 @@ import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.databinding.PlaybackSpeedFeedSettingDialogBinding;
import de.danoeh.antennapod.dialog.RemoveFeedDialog;
import de.danoeh.antennapod.dialog.TagSettingsDialog;
-import de.danoeh.antennapod.fragment.preferences.dialog.PreferenceListDialog;
-import de.danoeh.antennapod.fragment.preferences.dialog.PreferenceSwitchDialog;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedPreferences;
+import de.danoeh.antennapod.fragment.preferences.dialog.PreferenceListDialog;
+import de.danoeh.antennapod.fragment.preferences.dialog.PreferenceSwitchDialog;
public class FeedMultiSelectActionHandler {
private static final String TAG = "FeedSelectHandler";
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/AutoDownloadPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/AutoDownloadPreferencesFragment.java
deleted file mode 100644
index 50e74bee4..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/AutoDownloadPreferencesFragment.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences;
-
-import android.annotation.SuppressLint;
-import android.app.Activity;
-import android.content.Context;
-import android.content.res.Resources;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.util.Log;
-import androidx.preference.CheckBoxPreference;
-import androidx.preference.ListPreference;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceFragmentCompat;
-import androidx.preference.PreferenceScreen;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.PreferenceActivity;
-import de.danoeh.antennapod.storage.preferences.UserPreferences;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-public class AutoDownloadPreferencesFragment extends PreferenceFragmentCompat {
- private static final String TAG = "AutoDnldPrefFragment";
-
- private CheckBoxPreference[] selectedNetworks;
-
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- addPreferencesFromResource(R.xml.preferences_autodownload);
-
- setupAutoDownloadScreen();
- buildAutodownloadSelectedNetworksPreference();
- setSelectedNetworksEnabled(UserPreferences.isEnableAutodownloadWifiFilter());
- buildEpisodeCleanupPreference();
- }
-
- @Override
- public void onStart() {
- super.onStart();
- ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.pref_automatic_download_title);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- checkAutodownloadItemVisibility(UserPreferences.isEnableAutodownload());
- }
-
- private void setupAutoDownloadScreen() {
- findPreference(UserPreferences.PREF_ENABLE_AUTODL).setOnPreferenceChangeListener(
- (preference, newValue) -> {
- if (newValue instanceof Boolean) {
- checkAutodownloadItemVisibility((Boolean) newValue);
- }
- return true;
- });
- if (Build.VERSION.SDK_INT >= 29) {
- findPreference(UserPreferences.PREF_ENABLE_AUTODL_WIFI_FILTER).setVisible(false);
- }
- findPreference(UserPreferences.PREF_ENABLE_AUTODL_WIFI_FILTER)
- .setOnPreferenceChangeListener(
- (preference, newValue) -> {
- if (newValue instanceof Boolean) {
- setSelectedNetworksEnabled((Boolean) newValue);
- return true;
- } else {
- return false;
- }
- }
- );
- }
-
- private void checkAutodownloadItemVisibility(boolean autoDownload) {
- findPreference(UserPreferences.PREF_EPISODE_CACHE_SIZE).setEnabled(autoDownload);
- findPreference(UserPreferences.PREF_ENABLE_AUTODL_ON_BATTERY).setEnabled(autoDownload);
- findPreference(UserPreferences.PREF_ENABLE_AUTODL_WIFI_FILTER).setEnabled(autoDownload);
- findPreference(UserPreferences.PREF_EPISODE_CLEANUP).setEnabled(autoDownload);
- setSelectedNetworksEnabled(autoDownload && UserPreferences.isEnableAutodownloadWifiFilter());
- }
-
- private static String blankIfNull(String val) {
- return val == null ? "" : val;
- }
-
- @SuppressLint("MissingPermission") // getConfiguredNetworks needs location permission starting with API 29
- private void buildAutodownloadSelectedNetworksPreference() {
- if (Build.VERSION.SDK_INT >= 29) {
- return;
- }
-
- final Activity activity = getActivity();
-
- if (selectedNetworks != null) {
- clearAutodownloadSelectedNetworsPreference();
- }
- // get configured networks
- WifiManager wifiservice = (WifiManager) activity.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
- List<WifiConfiguration> networks = wifiservice.getConfiguredNetworks();
-
- if (networks == null) {
- Log.e(TAG, "Couldn't get list of configure Wi-Fi networks");
- return;
- }
- Collections.sort(networks, (x, y) ->
- blankIfNull(x.SSID).compareToIgnoreCase(blankIfNull(y.SSID)));
- selectedNetworks = new CheckBoxPreference[networks.size()];
- List<String> prefValues = Arrays.asList(UserPreferences
- .getAutodownloadSelectedNetworks());
- PreferenceScreen prefScreen = getPreferenceScreen();
- Preference.OnPreferenceClickListener clickListener = preference -> {
- if (preference instanceof CheckBoxPreference) {
- String key = preference.getKey();
- List<String> prefValuesList = new ArrayList<>(
- Arrays.asList(UserPreferences
- .getAutodownloadSelectedNetworks())
- );
- boolean newValue = ((CheckBoxPreference) preference)
- .isChecked();
- Log.d(TAG, "Selected network " + key + ". New state: " + newValue);
-
- int index = prefValuesList.indexOf(key);
- if (index >= 0 && !newValue) {
- // remove network
- prefValuesList.remove(index);
- } else if (index < 0 && newValue) {
- prefValuesList.add(key);
- }
-
- UserPreferences.setAutodownloadSelectedNetworks(prefValuesList.toArray(new String[0]));
- return true;
- } else {
- return false;
- }
- };
- // create preference for each known network. attach listener and set
- // value
- for (int i = 0; i < networks.size(); i++) {
- WifiConfiguration config = networks.get(i);
-
- CheckBoxPreference pref = new CheckBoxPreference(activity);
- String key = Integer.toString(config.networkId);
- pref.setTitle(config.SSID);
- pref.setKey(key);
- pref.setOnPreferenceClickListener(clickListener);
- pref.setPersistent(false);
- pref.setChecked(prefValues.contains(key));
- selectedNetworks[i] = pref;
- prefScreen.addPreference(pref);
- }
- }
-
- private void clearAutodownloadSelectedNetworsPreference() {
- if (selectedNetworks != null) {
- PreferenceScreen prefScreen = getPreferenceScreen();
-
- for (CheckBoxPreference network : selectedNetworks) {
- if (network != null) {
- prefScreen.removePreference(network);
- }
- }
- }
- }
-
- private void buildEpisodeCleanupPreference() {
- final Resources res = getActivity().getResources();
-
- ListPreference pref = findPreference(UserPreferences.PREF_EPISODE_CLEANUP);
- String[] values = res.getStringArray(
- R.array.episode_cleanup_values);
- String[] entries = new String[values.length];
- for (int x = 0; x < values.length; x++) {
- int v = Integer.parseInt(values[x]);
- if (v == UserPreferences.EPISODE_CLEANUP_EXCEPT_FAVORITE) {
- entries[x] = res.getString(R.string.episode_cleanup_except_favorite_removal);
- } else if (v == UserPreferences.EPISODE_CLEANUP_QUEUE) {
- entries[x] = res.getString(R.string.episode_cleanup_queue_removal);
- } else if (v == UserPreferences.EPISODE_CLEANUP_NULL){
- entries[x] = res.getString(R.string.episode_cleanup_never);
- } else if (v == 0) {
- entries[x] = res.getString(R.string.episode_cleanup_after_listening);
- } else if (v > 0 && v < 24) {
- entries[x] = res.getQuantityString(R.plurals.episode_cleanup_hours_after_listening, v, v);
- } else {
- int numDays = v / 24; // assume underlying value will be NOT fraction of days, e.g., 36 (hours)
- entries[x] = res.getQuantityString(R.plurals.episode_cleanup_days_after_listening, numDays, numDays);
- }
- }
- pref.setEntries(entries);
- }
-
- private void setSelectedNetworksEnabled(boolean b) {
- if (selectedNetworks != null) {
- for (Preference p : selectedNetworks) {
- p.setEnabled(b);
- }
- }
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/DownloadsPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/DownloadsPreferencesFragment.java
index 91ffa1c4f..27028eaa2 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/DownloadsPreferencesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/DownloadsPreferencesFragment.java
@@ -11,7 +11,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.PreferenceActivity;
import de.danoeh.antennapod.core.util.download.FeedUpdateManager;
-import de.danoeh.antennapod.dialog.ChooseDataFolderDialog;
+import de.danoeh.antennapod.ui.preferences.screen.downloads.ChooseDataFolderDialog;
import de.danoeh.antennapod.dialog.ProxyDialog;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java
index 6c0e0d456..1cf19aa68 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java
@@ -24,7 +24,6 @@ import androidx.core.app.ShareCompat;
import androidx.core.content.FileProvider;
import androidx.preference.PreferenceFragmentCompat;
import com.google.android.material.snackbar.Snackbar;
-import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.OpmlImportActivity;
import de.danoeh.antennapod.activity.PreferenceActivity;
@@ -38,6 +37,7 @@ import de.danoeh.antennapod.storage.importexport.FavoritesWriter;
import de.danoeh.antennapod.storage.importexport.HtmlWriter;
import de.danoeh.antennapod.storage.importexport.OpmlWriter;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
+import de.danoeh.antennapod.ui.appstartintent.MainActivityStarter;
import io.reactivex.Completable;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -205,7 +205,7 @@ public class ImportExportPreferencesFragment extends PreferenceFragmentCompat {
builder.setTitle(R.string.successful_import_label);
builder.setMessage(R.string.import_ok);
builder.setCancelable(false);
- builder.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> PodcastApp.forceRestart());
+ builder.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> forceRestart());
builder.show();
}
@@ -362,6 +362,12 @@ public class ImportExportPreferencesFragment extends PreferenceFragmentCompat {
((SwitchPreferenceCompat) findPreference(PREF_AUTOMATIC_DATABASE_EXPORT)).setChecked(true);
}
+ private void forceRestart() {
+ Intent intent = new MainActivityStarter(getContext()).getIntent();
+ getContext().getApplicationContext().startActivity(intent);
+ Runtime.getRuntime().exit(0);
+ }
+
private static class BackupDatabase extends ActivityResultContracts.CreateDocument {
BackupDatabase() {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/NotificationPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/NotificationPreferencesFragment.java
deleted file mode 100644
index ba17cedb2..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/NotificationPreferencesFragment.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences;
-
-import android.os.Bundle;
-import androidx.preference.PreferenceFragmentCompat;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.PreferenceActivity;
-import de.danoeh.antennapod.core.sync.SynchronizationSettings;
-
-public class NotificationPreferencesFragment extends PreferenceFragmentCompat {
-
- private static final String PREF_GPODNET_NOTIFICATIONS = "pref_gpodnet_notifications";
-
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- addPreferencesFromResource(R.xml.preferences_notifications);
- setUpScreen();
- }
-
- @Override
- public void onStart() {
- super.onStart();
- ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.notification_pref_fragment);
- }
-
- private void setUpScreen() {
- findPreference(PREF_GPODNET_NOTIFICATIONS).setEnabled(SynchronizationSettings.isProviderConnected());
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/AboutFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/AboutFragment.java
index 01dd5911c..0b17da3e6 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/AboutFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/AboutFragment.java
@@ -11,6 +11,8 @@ import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.PreferenceActivity;
import de.danoeh.antennapod.core.util.IntentUtils;
+import de.danoeh.antennapod.ui.preferences.screen.about.ContributorsPagerFragment;
+import de.danoeh.antennapod.ui.preferences.screen.about.LicensesFragment;
public class AboutFragment extends PreferenceFragmentCompat {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/ContributorsPagerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/ContributorsPagerFragment.java
deleted file mode 100644
index 139413157..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/ContributorsPagerFragment.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.about;
-
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import androidx.annotation.NonNull;
-import androidx.fragment.app.Fragment;
-import androidx.viewpager2.adapter.FragmentStateAdapter;
-import androidx.viewpager2.widget.ViewPager2;
-import com.google.android.material.tabs.TabLayout;
-import com.google.android.material.tabs.TabLayoutMediator;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.PreferenceActivity;
-
-/**
- * Displays the 'about->Contributors' pager screen.
- */
-public class ContributorsPagerFragment extends Fragment {
- private static final int POS_DEVELOPERS = 0;
- private static final int POS_TRANSLATORS = 1;
- private static final int POS_SPECIAL_THANKS = 2;
- private static final int TOTAL_COUNT = 3;
-
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- super.onCreateView(inflater, container, savedInstanceState);
-
- View rootView = inflater.inflate(R.layout.pager_fragment, container, false);
- ViewPager2 viewPager = rootView.findViewById(R.id.viewpager);
- viewPager.setAdapter(new StatisticsPagerAdapter(this));
- // Give the TabLayout the ViewPager
- TabLayout tabLayout = rootView.findViewById(R.id.sliding_tabs);
- new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> {
- switch (position) {
- case POS_DEVELOPERS:
- tab.setText(R.string.developers);
- break;
- case POS_TRANSLATORS:
- tab.setText(R.string.translators);
- break;
- case POS_SPECIAL_THANKS:
- tab.setText(R.string.special_thanks);
- break;
- default:
- break;
- }
- }).attach();
-
- rootView.findViewById(R.id.toolbar).setVisibility(View.GONE);
-
- return rootView;
- }
-
- @Override
- public void onStart() {
- super.onStart();
- ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.contributors);
- }
-
- public static class StatisticsPagerAdapter extends FragmentStateAdapter {
-
- StatisticsPagerAdapter(@NonNull Fragment fragment) {
- super(fragment);
- }
-
- @NonNull
- @Override
- public Fragment createFragment(int position) {
- switch (position) {
- case POS_TRANSLATORS:
- return new TranslatorsFragment();
- case POS_SPECIAL_THANKS:
- return new SpecialThanksFragment();
- default:
- case POS_DEVELOPERS:
- return new DevelopersFragment();
- }
- }
-
- @Override
- public int getItemCount() {
- return TOTAL_COUNT;
- }
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/DevelopersFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/DevelopersFragment.java
deleted file mode 100644
index dcd720dc2..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/DevelopersFragment.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.about;
-
-import android.os.Bundle;
-import android.view.View;
-import android.widget.Toast;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.ListFragment;
-import de.danoeh.antennapod.adapter.SimpleIconListAdapter;
-import io.reactivex.Single;
-import io.reactivex.SingleOnSubscribe;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-
-public class DevelopersFragment extends ListFragment {
- private Disposable developersLoader;
-
- @Override
- public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- getListView().setDivider(null);
- getListView().setSelector(android.R.color.transparent);
-
- developersLoader = Single.create((SingleOnSubscribe<ArrayList<SimpleIconListAdapter.ListItem>>) emitter -> {
- ArrayList<SimpleIconListAdapter.ListItem> developers = new ArrayList<>();
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- getContext().getAssets().open("developers.csv"), "UTF-8"));
- String line;
- while ((line = reader.readLine()) != null) {
- String[] info = line.split(";");
- developers.add(new SimpleIconListAdapter.ListItem(info[0], info[2],
- "https://avatars2.githubusercontent.com/u/" + info[1] + "?s=60&v=4"));
- }
- emitter.onSuccess(developers);
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(
- developers -> setListAdapter(new SimpleIconListAdapter<>(getContext(), developers)),
- error -> Toast.makeText(getContext(), error.getMessage(), Toast.LENGTH_LONG).show()
- );
-
- }
-
- @Override
- public void onStop() {
- super.onStop();
- if (developersLoader != null) {
- developersLoader.dispose();
- }
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/LicensesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/LicensesFragment.java
deleted file mode 100644
index 8b86d106e..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/LicensesFragment.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.about;
-
-import android.os.Bundle;
-import android.view.View;
-import android.widget.ListView;
-import android.widget.Toast;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import androidx.fragment.app.ListFragment;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.PreferenceActivity;
-import de.danoeh.antennapod.adapter.SimpleIconListAdapter;
-import de.danoeh.antennapod.core.util.IntentUtils;
-import io.reactivex.Single;
-import io.reactivex.SingleOnSubscribe;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.NodeList;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-
-public class LicensesFragment extends ListFragment {
- private Disposable licensesLoader;
- private final ArrayList<LicenseItem> licenses = new ArrayList<>();
-
- @Override
- public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- getListView().setDivider(null);
-
- licensesLoader = Single.create((SingleOnSubscribe<ArrayList<LicenseItem>>) emitter -> {
- licenses.clear();
- InputStream stream = getContext().getAssets().open("licenses.xml");
- DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- NodeList libraryList = docBuilder.parse(stream).getElementsByTagName("library");
- for (int i = 0; i < libraryList.getLength(); i++) {
- NamedNodeMap lib = libraryList.item(i).getAttributes();
- licenses.add(new LicenseItem(
- lib.getNamedItem("name").getTextContent(),
- String.format("By %s, %s license",
- lib.getNamedItem("author").getTextContent(),
- lib.getNamedItem("license").getTextContent()),
- null,
- lib.getNamedItem("website").getTextContent(),
- lib.getNamedItem("licenseText").getTextContent()));
- }
- emitter.onSuccess(licenses);
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(
- developers -> setListAdapter(new SimpleIconListAdapter<LicenseItem>(getContext(), developers)),
- error -> Toast.makeText(getContext(), error.getMessage(), Toast.LENGTH_LONG).show()
- );
-
- }
-
- private static class LicenseItem extends SimpleIconListAdapter.ListItem {
- final String licenseUrl;
- final String licenseTextFile;
-
- LicenseItem(String title, String subtitle, String imageUrl, String licenseUrl, String licenseTextFile) {
- super(title, subtitle, imageUrl);
- this.licenseUrl = licenseUrl;
- this.licenseTextFile = licenseTextFile;
- }
- }
-
- @Override
- public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {
- super.onListItemClick(l, v, position, id);
-
- LicenseItem item = licenses.get(position);
- CharSequence[] items = {"View website", "View license"};
- new MaterialAlertDialogBuilder(getContext())
- .setTitle(item.title)
- .setItems(items, (dialog, which) -> {
- if (which == 0) {
- IntentUtils.openInBrowser(getContext(), item.licenseUrl);
- } else if (which == 1) {
- showLicenseText(item.licenseTextFile);
- }
- }).show();
- }
-
- private void showLicenseText(String licenseTextFile) {
- try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- getContext().getAssets().open(licenseTextFile), "UTF-8"));
- StringBuilder licenseText = new StringBuilder();
- String line;
- while ((line = reader.readLine()) != null) {
- licenseText.append(line).append("\n");
- }
-
- new MaterialAlertDialogBuilder(getContext())
- .setMessage(licenseText)
- .show();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void onStop() {
- super.onStop();
- if (licensesLoader != null) {
- licensesLoader.dispose();
- }
- }
-
- @Override
- public void onStart() {
- super.onStart();
- ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.licenses);
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/SpecialThanksFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/SpecialThanksFragment.java
deleted file mode 100644
index 1b4beeea0..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/SpecialThanksFragment.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.about;
-
-import android.os.Bundle;
-import android.view.View;
-import android.widget.Toast;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.ListFragment;
-import de.danoeh.antennapod.adapter.SimpleIconListAdapter;
-import io.reactivex.Single;
-import io.reactivex.SingleOnSubscribe;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-
-public class SpecialThanksFragment extends ListFragment {
- private Disposable translatorsLoader;
-
- @Override
- public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- getListView().setDivider(null);
- getListView().setSelector(android.R.color.transparent);
-
- translatorsLoader = Single.create((SingleOnSubscribe<ArrayList<SimpleIconListAdapter.ListItem>>) emitter -> {
- ArrayList<SimpleIconListAdapter.ListItem> translators = new ArrayList<>();
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- getContext().getAssets().open("special_thanks.csv"), "UTF-8"));
- String line;
- while ((line = reader.readLine()) != null) {
- String[] info = line.split(";");
- translators.add(new SimpleIconListAdapter.ListItem(info[0], info[1], info[2]));
- }
- emitter.onSuccess(translators);
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(
- translators -> setListAdapter(new SimpleIconListAdapter<>(getContext(), translators)),
- error -> Toast.makeText(getContext(), error.getMessage(), Toast.LENGTH_LONG).show()
- );
-
- }
-
- @Override
- public void onStop() {
- super.onStop();
- if (translatorsLoader != null) {
- translatorsLoader.dispose();
- }
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/TranslatorsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/TranslatorsFragment.java
deleted file mode 100644
index ed0d53145..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/TranslatorsFragment.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.about;
-
-import android.os.Bundle;
-import android.view.View;
-import android.widget.Toast;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.ListFragment;
-import de.danoeh.antennapod.adapter.SimpleIconListAdapter;
-import io.reactivex.Single;
-import io.reactivex.SingleOnSubscribe;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-
-public class TranslatorsFragment extends ListFragment {
- private Disposable translatorsLoader;
-
- @Override
- public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- getListView().setDivider(null);
- getListView().setSelector(android.R.color.transparent);
-
- translatorsLoader = Single.create((SingleOnSubscribe<ArrayList<SimpleIconListAdapter.ListItem>>) emitter -> {
- ArrayList<SimpleIconListAdapter.ListItem> translators = new ArrayList<>();
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- getContext().getAssets().open("translators.csv"), "UTF-8"));
- String line;
- while ((line = reader.readLine()) != null) {
- String[] info = line.split(";");
- translators.add(new SimpleIconListAdapter.ListItem(info[0], info[1], null));
- }
- emitter.onSuccess(translators);
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(
- translators -> setListAdapter(new SimpleIconListAdapter<>(getContext(), translators)),
- error -> Toast.makeText(getContext(), error.getMessage(), Toast.LENGTH_LONG).show()
- );
-
- }
-
- @Override
- public void onStop() {
- super.onStop();
- if (translatorsLoader != null) {
- translatorsLoader.dispose();
- }
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java
deleted file mode 100644
index ccd450345..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java
+++ /dev/null
@@ -1,279 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.synchronization;
-
-import android.app.Dialog;
-import android.content.Context;
-import android.os.Build;
-import android.os.Bundle;
-import android.view.View;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-import android.widget.ViewFlipper;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import androidx.fragment.app.DialogFragment;
-import com.google.android.material.button.MaterialButton;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.net.common.AntennapodHttpClient;
-import de.danoeh.antennapod.core.sync.SyncService;
-import de.danoeh.antennapod.core.sync.SynchronizationCredentials;
-import de.danoeh.antennapod.core.sync.SynchronizationProviderViewData;
-import de.danoeh.antennapod.core.sync.SynchronizationSettings;
-import de.danoeh.antennapod.core.util.FileNameGenerator;
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetDevice;
-import io.reactivex.Completable;
-import io.reactivex.Observable;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.schedulers.Schedulers;
-
-import java.util.List;
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Guides the user through the authentication process.
- */
-public class GpodderAuthenticationFragment extends DialogFragment {
- public static final String TAG = "GpodnetAuthActivity";
-
- private ViewFlipper viewFlipper;
-
- private static final int STEP_DEFAULT = -1;
- private static final int STEP_HOSTNAME = 0;
- private static final int STEP_LOGIN = 1;
- private static final int STEP_DEVICE = 2;
- private static final int STEP_FINISH = 3;
-
- private int currentStep = -1;
-
- private GpodnetService service;
- private volatile String username;
- private volatile String password;
- private volatile GpodnetDevice selectedDevice;
- private List<GpodnetDevice> devices;
-
- @NonNull
- @Override
- public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
- MaterialAlertDialogBuilder dialog = new MaterialAlertDialogBuilder(getContext());
- dialog.setTitle(R.string.gpodnetauth_login_butLabel);
- dialog.setNegativeButton(R.string.cancel_label, null);
- dialog.setCancelable(false);
- this.setCancelable(false);
-
- View root = View.inflate(getContext(), R.layout.gpodnetauth_dialog, null);
- viewFlipper = root.findViewById(R.id.viewflipper);
- advance();
- dialog.setView(root);
-
- return dialog.create();
- }
-
- private void setupHostView(View view) {
- final Button selectHost = view.findViewById(R.id.chooseHostButton);
- final EditText serverUrlText = view.findViewById(R.id.serverUrlText);
- selectHost.setOnClickListener(v -> {
- if (serverUrlText.getText().length() == 0) {
- return;
- }
- SynchronizationCredentials.clear(getContext());
- SynchronizationCredentials.setHosturl(serverUrlText.getText().toString());
- service = new GpodnetService(AntennapodHttpClient.getHttpClient(),
- SynchronizationCredentials.getHosturl(), SynchronizationCredentials.getDeviceID(),
- SynchronizationCredentials.getUsername(), SynchronizationCredentials.getPassword());
- getDialog().setTitle(SynchronizationCredentials.getHosturl());
- advance();
- });
- }
-
- private void setupLoginView(View view) {
- final EditText username = view.findViewById(R.id.etxtUsername);
- final EditText password = view.findViewById(R.id.etxtPassword);
- final Button login = view.findViewById(R.id.butLogin);
- final TextView txtvError = view.findViewById(R.id.credentialsError);
- final ProgressBar progressBar = view.findViewById(R.id.progBarLogin);
- final TextView createAccountWarning = view.findViewById(R.id.createAccountWarning);
-
- if (SynchronizationCredentials.getHosturl().startsWith("http://")) {
- createAccountWarning.setVisibility(View.VISIBLE);
- }
- password.setOnEditorActionListener((v, actionID, event) ->
- actionID == EditorInfo.IME_ACTION_GO && login.performClick());
-
- login.setOnClickListener(v -> {
- final String usernameStr = username.getText().toString();
- final String passwordStr = password.getText().toString();
-
- if (usernameHasUnwantedChars(usernameStr)) {
- txtvError.setText(R.string.gpodnetsync_username_characters_error);
- txtvError.setVisibility(View.VISIBLE);
- return;
- }
-
- login.setEnabled(false);
- progressBar.setVisibility(View.VISIBLE);
- txtvError.setVisibility(View.GONE);
- InputMethodManager inputManager = (InputMethodManager) getContext()
- .getSystemService(Context.INPUT_METHOD_SERVICE);
- inputManager.hideSoftInputFromWindow(login.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
-
- Completable.fromAction(() -> {
- service.setCredentials(usernameStr, passwordStr);
- service.login();
- devices = service.getDevices();
- GpodderAuthenticationFragment.this.username = usernameStr;
- GpodderAuthenticationFragment.this.password = passwordStr;
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(() -> {
- login.setEnabled(true);
- progressBar.setVisibility(View.GONE);
- advance();
- }, error -> {
- login.setEnabled(true);
- progressBar.setVisibility(View.GONE);
- txtvError.setText(error.getCause().getMessage());
- txtvError.setVisibility(View.VISIBLE);
- });
-
- });
- }
-
- private void setupDeviceView(View view) {
- final EditText deviceName = view.findViewById(R.id.deviceName);
- final LinearLayout devicesContainer = view.findViewById(R.id.devicesContainer);
- deviceName.setText(generateDeviceName());
-
- MaterialButton createDeviceButton = view.findViewById(R.id.createDeviceButton);
- createDeviceButton.setOnClickListener(v -> createDevice(view));
-
- for (GpodnetDevice device : devices) {
- View row = View.inflate(getContext(), R.layout.gpodnetauth_device_row, null);
- Button selectDeviceButton = row.findViewById(R.id.selectDeviceButton);
- selectDeviceButton.setOnClickListener(v -> {
- selectedDevice = device;
- advance();
- });
- selectDeviceButton.setText(device.getCaption());
- devicesContainer.addView(row);
- }
- }
-
- private void createDevice(View view) {
- final EditText deviceName = view.findViewById(R.id.deviceName);
- final TextView txtvError = view.findViewById(R.id.deviceSelectError);
- final ProgressBar progBarCreateDevice = view.findViewById(R.id.progbarCreateDevice);
-
- String deviceNameStr = deviceName.getText().toString();
- if (isDeviceInList(deviceNameStr)) {
- return;
- }
- progBarCreateDevice.setVisibility(View.VISIBLE);
- txtvError.setVisibility(View.GONE);
- deviceName.setEnabled(false);
-
- Observable.fromCallable(() -> {
- String deviceId = generateDeviceId(deviceNameStr);
- service.configureDevice(deviceId, deviceNameStr, GpodnetDevice.DeviceType.MOBILE);
- return new GpodnetDevice(deviceId, deviceNameStr, GpodnetDevice.DeviceType.MOBILE.toString(), 0);
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(device -> {
- progBarCreateDevice.setVisibility(View.GONE);
- selectedDevice = device;
- advance();
- }, error -> {
- deviceName.setEnabled(true);
- progBarCreateDevice.setVisibility(View.GONE);
- txtvError.setText(error.getMessage());
- txtvError.setVisibility(View.VISIBLE);
- });
- }
-
- private String generateDeviceName() {
- String baseName = getString(R.string.gpodnetauth_device_name_default, Build.MODEL);
- String name = baseName;
- int num = 1;
- while (isDeviceInList(name)) {
- name = baseName + " (" + num + ")";
- num++;
- }
- return name;
- }
-
- private String generateDeviceId(String name) {
- // devices names must be of a certain form:
- // https://gpoddernet.readthedocs.org/en/latest/api/reference/general.html#devices
- return FileNameGenerator.generateFileName(name).replaceAll("\\W", "_").toLowerCase(Locale.US);
- }
-
- private boolean isDeviceInList(String name) {
- if (devices == null) {
- return false;
- }
- String id = generateDeviceId(name);
- for (GpodnetDevice device : devices) {
- if (device.getId().equals(id) || device.getCaption().equals(name)) {
- return true;
- }
- }
- return false;
- }
-
- private void setupFinishView(View view) {
- final Button sync = view.findViewById(R.id.butSyncNow);
-
- sync.setOnClickListener(v -> {
- dismiss();
- SyncService.sync(getContext());
- });
- }
-
- private void advance() {
- if (currentStep < STEP_FINISH) {
- View view = viewFlipper.getChildAt(currentStep + 1);
- if (currentStep == STEP_DEFAULT) {
- setupHostView(view);
- } else if (currentStep == STEP_HOSTNAME) {
- setupLoginView(view);
- } else if (currentStep == STEP_LOGIN) {
- if (username == null || password == null) {
- throw new IllegalStateException("Username and password must not be null here");
- } else {
- setupDeviceView(view);
- }
- } else if (currentStep == STEP_DEVICE) {
- if (selectedDevice == null) {
- throw new IllegalStateException("Device must not be null here");
- } else {
- SynchronizationSettings.setSelectedSyncProvider(SynchronizationProviderViewData.GPODDER_NET);
- SynchronizationCredentials.setUsername(username);
- SynchronizationCredentials.setPassword(password);
- SynchronizationCredentials.setDeviceID(selectedDevice.getId());
- setupFinishView(view);
- }
- }
- if (currentStep != STEP_DEFAULT) {
- viewFlipper.showNext();
- }
- currentStep++;
- } else {
- dismiss();
- }
- }
-
- private boolean usernameHasUnwantedChars(String username) {
- Pattern special = Pattern.compile("[!@#$%&*()+=|<>?{}\\[\\]~]");
- Matcher containsUnwantedChars = special.matcher(username);
- return containsUnwantedChars.find();
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/NextcloudAuthenticationFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/NextcloudAuthenticationFragment.java
deleted file mode 100644
index 88f7ec036..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/NextcloudAuthenticationFragment.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.synchronization;
-
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import androidx.fragment.app.DialogFragment;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.net.common.AntennapodHttpClient;
-import de.danoeh.antennapod.core.sync.SyncService;
-import de.danoeh.antennapod.core.sync.SynchronizationCredentials;
-import de.danoeh.antennapod.core.sync.SynchronizationProviderViewData;
-import de.danoeh.antennapod.core.sync.SynchronizationSettings;
-import de.danoeh.antennapod.databinding.NextcloudAuthDialogBinding;
-import de.danoeh.antennapod.net.sync.nextcloud.NextcloudLoginFlow;
-
-/**
- * Guides the user through the authentication process.
- */
-public class NextcloudAuthenticationFragment extends DialogFragment
- implements NextcloudLoginFlow.AuthenticationCallback {
- public static final String TAG = "NextcloudAuthenticationFragment";
- private static final String EXTRA_LOGIN_FLOW = "LoginFlow";
- private NextcloudAuthDialogBinding viewBinding;
- private NextcloudLoginFlow nextcloudLoginFlow;
- private boolean shouldDismiss = false;
-
- @NonNull
- @Override
- public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
- MaterialAlertDialogBuilder dialog = new MaterialAlertDialogBuilder(getContext());
- dialog.setTitle(R.string.gpodnetauth_login_butLabel);
- dialog.setNegativeButton(R.string.cancel_label, null);
- dialog.setCancelable(false);
- this.setCancelable(false);
-
- viewBinding = NextcloudAuthDialogBinding.inflate(getLayoutInflater());
- dialog.setView(viewBinding.getRoot());
-
- viewBinding.chooseHostButton.setOnClickListener(v -> {
- nextcloudLoginFlow = new NextcloudLoginFlow(AntennapodHttpClient.getHttpClient(),
- viewBinding.serverUrlText.getText().toString(), getContext(), this);
- startLoginFlow();
- });
- if (savedInstanceState != null && savedInstanceState.getStringArrayList(EXTRA_LOGIN_FLOW) != null) {
- nextcloudLoginFlow = NextcloudLoginFlow.fromInstanceState(AntennapodHttpClient.getHttpClient(),
- getContext(), this, savedInstanceState.getStringArrayList(EXTRA_LOGIN_FLOW));
- startLoginFlow();
- }
- return dialog.create();
- }
-
- private void startLoginFlow() {
- viewBinding.errorText.setVisibility(View.GONE);
- viewBinding.chooseHostButton.setVisibility(View.GONE);
- viewBinding.loginProgressContainer.setVisibility(View.VISIBLE);
- viewBinding.serverUrlText.setEnabled(false);
- nextcloudLoginFlow.start();
- }
-
- @Override
- public void onSaveInstanceState(@NonNull Bundle outState) {
- super.onSaveInstanceState(outState);
- if (nextcloudLoginFlow != null) {
- outState.putStringArrayList(EXTRA_LOGIN_FLOW, nextcloudLoginFlow.saveInstanceState());
- }
- }
-
- @Override
- public void onDismiss(@NonNull DialogInterface dialog) {
- super.onDismiss(dialog);
- if (nextcloudLoginFlow != null) {
- nextcloudLoginFlow.cancel();
- }
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (shouldDismiss) {
- dismiss();
- }
- }
-
- @Override
- public void onNextcloudAuthenticated(String server, String username, String password) {
- SynchronizationSettings.setSelectedSyncProvider(SynchronizationProviderViewData.NEXTCLOUD_GPODDER);
- SynchronizationCredentials.clear(getContext());
- SynchronizationCredentials.setPassword(password);
- SynchronizationCredentials.setHosturl(server);
- SynchronizationCredentials.setUsername(username);
- SyncService.fullSync(getContext());
- if (isResumed()) {
- dismiss();
- } else {
- shouldDismiss = true;
- }
- }
-
- @Override
- public void onNextcloudAuthError(String errorMessage) {
- viewBinding.loginProgressContainer.setVisibility(View.GONE);
- viewBinding.errorText.setVisibility(View.VISIBLE);
- viewBinding.errorText.setText(errorMessage);
- viewBinding.chooseHostButton.setVisibility(View.VISIBLE);
- viewBinding.serverUrlText.setEnabled(true);
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/SynchronizationPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/SynchronizationPreferencesFragment.java
deleted file mode 100644
index 2ac1f78df..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/SynchronizationPreferencesFragment.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.synchronization;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.text.Spanned;
-import android.text.format.DateUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ImageView;
-import android.widget.ListAdapter;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import androidx.core.text.HtmlCompat;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceFragmentCompat;
-
-import com.google.android.material.snackbar.Snackbar;
-
-import org.greenrobot.eventbus.EventBus;
-import org.greenrobot.eventbus.Subscribe;
-import org.greenrobot.eventbus.ThreadMode;
-
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.PreferenceActivity;
-import de.danoeh.antennapod.event.SyncServiceEvent;
-import de.danoeh.antennapod.core.sync.SynchronizationCredentials;
-import de.danoeh.antennapod.core.sync.SyncService;
-import de.danoeh.antennapod.core.sync.SynchronizationProviderViewData;
-import de.danoeh.antennapod.core.sync.SynchronizationSettings;
-import de.danoeh.antennapod.dialog.AuthenticationDialog;
-
-public class SynchronizationPreferencesFragment extends PreferenceFragmentCompat {
- private static final String PREFERENCE_SYNCHRONIZATION_DESCRIPTION = "preference_synchronization_description";
- private static final String PREFERENCE_GPODNET_SETLOGIN_INFORMATION = "pref_gpodnet_setlogin_information";
- private static final String PREFERENCE_SYNC = "pref_synchronization_sync";
- private static final String PREFERENCE_FORCE_FULL_SYNC = "pref_synchronization_force_full_sync";
- private static final String PREFERENCE_LOGOUT = "pref_synchronization_logout";
-
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- addPreferencesFromResource(R.xml.preferences_synchronization);
- setupScreen();
- updateScreen();
- }
-
- @Override
- public void onStart() {
- super.onStart();
- ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.synchronization_pref);
- updateScreen();
- EventBus.getDefault().register(this);
- }
-
- @Override
- public void onStop() {
- super.onStop();
- EventBus.getDefault().unregister(this);
- ((PreferenceActivity) getActivity()).getSupportActionBar().setSubtitle("");
- }
-
- @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
- public void syncStatusChanged(SyncServiceEvent event) {
- if (!SynchronizationSettings.isProviderConnected()) {
- return;
- }
- updateScreen();
- if (event.getMessageResId() == R.string.sync_status_error
- || event.getMessageResId() == R.string.sync_status_success) {
- updateLastSyncReport(SynchronizationSettings.isLastSyncSuccessful(),
- SynchronizationSettings.getLastSyncAttempt());
- } else {
- ((PreferenceActivity) getActivity()).getSupportActionBar().setSubtitle(event.getMessageResId());
- }
- }
-
- private void setupScreen() {
- final Activity activity = getActivity();
- findPreference(PREFERENCE_GPODNET_SETLOGIN_INFORMATION)
- .setOnPreferenceClickListener(preference -> {
- AuthenticationDialog dialog = new AuthenticationDialog(activity,
- R.string.pref_gpodnet_setlogin_information_title,
- false, SynchronizationCredentials.getUsername(), null) {
- @Override
- protected void onConfirmed(String username, String password) {
- SynchronizationCredentials.setPassword(password);
- }
- };
- dialog.show();
- return true;
- });
- findPreference(PREFERENCE_SYNC).setOnPreferenceClickListener(preference -> {
- SyncService.syncImmediately(getActivity().getApplicationContext());
- return true;
- });
- findPreference(PREFERENCE_FORCE_FULL_SYNC).setOnPreferenceClickListener(preference -> {
- SyncService.fullSync(getContext());
- return true;
- });
- findPreference(PREFERENCE_LOGOUT).setOnPreferenceClickListener(preference -> {
- SynchronizationCredentials.clear(getContext());
- Snackbar.make(getView(), R.string.pref_synchronization_logout_toast, Snackbar.LENGTH_LONG).show();
- SynchronizationSettings.setSelectedSyncProvider(null);
- updateScreen();
- return true;
- });
- }
-
- private void updateScreen() {
- final boolean loggedIn = SynchronizationSettings.isProviderConnected();
- Preference preferenceHeader = findPreference(PREFERENCE_SYNCHRONIZATION_DESCRIPTION);
- if (loggedIn) {
- SynchronizationProviderViewData selectedProvider =
- SynchronizationProviderViewData.fromIdentifier(getSelectedSyncProviderKey());
- preferenceHeader.setTitle("");
- preferenceHeader.setSummary(selectedProvider.getSummaryResource());
- preferenceHeader.setIcon(selectedProvider.getIconResource());
- preferenceHeader.setOnPreferenceClickListener(null);
- } else {
- preferenceHeader.setTitle(R.string.synchronization_choose_title);
- preferenceHeader.setSummary(R.string.synchronization_summary_unchoosen);
- preferenceHeader.setIcon(R.drawable.ic_cloud);
- preferenceHeader.setOnPreferenceClickListener((preference) -> {
- chooseProviderAndLogin();
- return true;
- });
- }
-
- Preference gpodnetSetLoginPreference = findPreference(PREFERENCE_GPODNET_SETLOGIN_INFORMATION);
- gpodnetSetLoginPreference.setVisible(isProviderSelected(SynchronizationProviderViewData.GPODDER_NET));
- gpodnetSetLoginPreference.setEnabled(loggedIn);
- findPreference(PREFERENCE_SYNC).setEnabled(loggedIn);
- findPreference(PREFERENCE_FORCE_FULL_SYNC).setEnabled(loggedIn);
- findPreference(PREFERENCE_LOGOUT).setEnabled(loggedIn);
- if (loggedIn) {
- String summary = getString(R.string.synchronization_login_status,
- SynchronizationCredentials.getUsername(), SynchronizationCredentials.getHosturl());
- Spanned formattedSummary = HtmlCompat.fromHtml(summary, HtmlCompat.FROM_HTML_MODE_LEGACY);
- findPreference(PREFERENCE_LOGOUT).setSummary(formattedSummary);
- updateLastSyncReport(SynchronizationSettings.isLastSyncSuccessful(),
- SynchronizationSettings.getLastSyncAttempt());
- } else {
- findPreference(PREFERENCE_LOGOUT).setSummary(null);
- ((PreferenceActivity) getActivity()).getSupportActionBar().setSubtitle(null);
- }
- }
-
- private void chooseProviderAndLogin() {
- MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext());
- builder.setTitle(R.string.dialog_choose_sync_service_title);
-
- SynchronizationProviderViewData[] providers = SynchronizationProviderViewData.values();
- ListAdapter adapter = new ArrayAdapter<SynchronizationProviderViewData>(
- getContext(), R.layout.alertdialog_sync_provider_chooser, providers) {
-
- ViewHolder holder;
-
- class ViewHolder {
- ImageView icon;
- TextView title;
- }
-
- public View getView(int position, View convertView, ViewGroup parent) {
- final LayoutInflater inflater = LayoutInflater.from(getContext());
- if (convertView == null) {
- convertView = inflater.inflate(
- R.layout.alertdialog_sync_provider_chooser, null);
-
- holder = new ViewHolder();
- holder.icon = (ImageView) convertView.findViewById(R.id.icon);
- holder.title = (TextView) convertView.findViewById(R.id.title);
- convertView.setTag(holder);
- } else {
- holder = (ViewHolder) convertView.getTag();
- }
- SynchronizationProviderViewData synchronizationProviderViewData = getItem(position);
- holder.title.setText(synchronizationProviderViewData.getSummaryResource());
- holder.icon.setImageResource(synchronizationProviderViewData.getIconResource());
- return convertView;
- }
- };
-
- builder.setAdapter(adapter, (dialog, which) -> {
- switch (providers[which]) {
- case GPODDER_NET:
- new GpodderAuthenticationFragment()
- .show(getChildFragmentManager(), GpodderAuthenticationFragment.TAG);
- break;
- case NEXTCLOUD_GPODDER:
- new NextcloudAuthenticationFragment()
- .show(getChildFragmentManager(), NextcloudAuthenticationFragment.TAG);
- break;
- default:
- break;
- }
- updateScreen();
- });
-
- builder.show();
- }
-
- private boolean isProviderSelected(@NonNull SynchronizationProviderViewData provider) {
- String selectedSyncProviderKey = getSelectedSyncProviderKey();
- return provider.getIdentifier().equals(selectedSyncProviderKey);
- }
-
- private String getSelectedSyncProviderKey() {
- return SynchronizationSettings.getSelectedSyncProviderKey();
- }
-
- private void updateLastSyncReport(boolean successful, long lastTime) {
- String status = String.format("%1$s (%2$s)", getString(successful
- ? R.string.gpodnetsync_pref_report_successful : R.string.gpodnetsync_pref_report_failed),
- DateUtils.getRelativeDateTimeString(getContext(),
- lastTime, DateUtils.MINUTE_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, DateUtils.FORMAT_SHOW_TIME));
- ((PreferenceActivity) getActivity()).getSupportActionBar().setSubtitle(status);
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/MasterSwitchPreference.java b/app/src/main/java/de/danoeh/antennapod/preferences/MasterSwitchPreference.java
deleted file mode 100644
index ef527967a..000000000
--- a/app/src/main/java/de/danoeh/antennapod/preferences/MasterSwitchPreference.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package de.danoeh.antennapod.preferences;
-
-import android.content.Context;
-import android.graphics.Typeface;
-import androidx.preference.SwitchPreferenceCompat;
-import androidx.preference.PreferenceViewHolder;
-import android.util.AttributeSet;
-import android.widget.TextView;
-
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.ui.common.ThemeUtils;
-
-public class MasterSwitchPreference extends SwitchPreferenceCompat {
-
- public MasterSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
-
- public MasterSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- public MasterSwitchPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public MasterSwitchPreference(Context context) {
- super(context);
- }
-
-
- @Override
- public void onBindViewHolder(PreferenceViewHolder holder) {
- super.onBindViewHolder(holder);
-
- holder.itemView.setBackgroundColor(ThemeUtils.getColorFromAttr(getContext(), R.attr.colorSurfaceVariant));
- TextView title = (TextView) holder.findViewById(android.R.id.title);
- if (title != null) {
- title.setTypeface(title.getTypeface(), Typeface.BOLD);
- }
- }
-} \ No newline at end of file
diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/MaterialListPreference.java b/app/src/main/java/de/danoeh/antennapod/preferences/MaterialListPreference.java
deleted file mode 100644
index 3ee08f369..000000000
--- a/app/src/main/java/de/danoeh/antennapod/preferences/MaterialListPreference.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package de.danoeh.antennapod.preferences;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import androidx.preference.ListPreference;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-
-public class MaterialListPreference extends ListPreference {
-
- public MaterialListPreference(Context context) {
- super(context);
- }
-
- public MaterialListPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onClick() {
- MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext());
- builder.setTitle(getTitle());
- builder.setIcon(getDialogIcon());
- builder.setNegativeButton(getNegativeButtonText(), null);
-
- CharSequence[] values = getEntryValues();
- int selected = -1;
- for (int i = 0; i < values.length; i++) {
- if (values[i].toString().equals(getValue())) {
- selected = i;
- }
- }
- builder.setSingleChoiceItems(getEntries(), selected, (dialog, which) -> {
- dialog.dismiss();
- if (which >= 0 && getEntryValues() != null) {
- String value = getEntryValues()[which].toString();
- if (callChangeListener(value)) {
- setValue(value);
- }
- }
- });
- builder.show();
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/MaterialMultiSelectListPreference.java b/app/src/main/java/de/danoeh/antennapod/preferences/MaterialMultiSelectListPreference.java
deleted file mode 100644
index 9bc148bc6..000000000
--- a/app/src/main/java/de/danoeh/antennapod/preferences/MaterialMultiSelectListPreference.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package de.danoeh.antennapod.preferences;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.util.AttributeSet;
-import androidx.preference.MultiSelectListPreference;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public class MaterialMultiSelectListPreference extends MultiSelectListPreference {
-
- public MaterialMultiSelectListPreference(Context context) {
- super(context);
- }
-
- public MaterialMultiSelectListPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onClick() {
- MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext());
- builder.setTitle(getTitle());
- builder.setIcon(getDialogIcon());
- builder.setNegativeButton(getNegativeButtonText(), null);
-
- boolean[] selected = new boolean[getEntries().length];
- CharSequence[] values = getEntryValues();
- for (int i = 0; i < values.length; i++) {
- selected[i] = getValues().contains(values[i].toString());
- }
- builder.setMultiChoiceItems(getEntries(), selected,
- (DialogInterface dialog, int which, boolean isChecked) -> selected[which] = isChecked);
- builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {
- Set<String> selectedValues = new HashSet<>();
- for (int i = 0; i < values.length; i++) {
- if (selected[i]) {
- selectedValues.add(getEntryValues()[i].toString());
- }
- }
- setValues(selectedValues);
- });
- builder.show();
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/ThemePreference.java b/app/src/main/java/de/danoeh/antennapod/preferences/ThemePreference.java
deleted file mode 100644
index 30cbeb523..000000000
--- a/app/src/main/java/de/danoeh/antennapod/preferences/ThemePreference.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package de.danoeh.antennapod.preferences;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import androidx.cardview.widget.CardView;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceViewHolder;
-import com.google.android.material.elevation.SurfaceColors;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.databinding.ThemePreferenceBinding;
-import de.danoeh.antennapod.storage.preferences.UserPreferences;
-
-public class ThemePreference extends Preference {
- ThemePreferenceBinding viewBinding;
-
- public ThemePreference(Context context) {
- super(context);
- setLayoutResource(R.layout.theme_preference);
- }
-
- public ThemePreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- setLayoutResource(R.layout.theme_preference);
- }
-
- @Override
- public void onBindViewHolder(PreferenceViewHolder holder) {
- super.onBindViewHolder(holder);
- viewBinding = ThemePreferenceBinding.bind(holder.itemView);
- updateUi();
- }
-
- void updateThemeCard(CardView card, UserPreferences.ThemePreference theme) {
- float density = getContext().getResources().getDisplayMetrics().density;
- int surfaceColor = SurfaceColors.getColorForElevation(getContext(), 1 * density);
- int surfaceColorActive = SurfaceColors.getColorForElevation(getContext(), 32 * density);
- UserPreferences.ThemePreference activeTheme = UserPreferences.getTheme();
- card.setCardBackgroundColor(theme == activeTheme ? surfaceColorActive : surfaceColor);
- card.setOnClickListener(v -> {
- UserPreferences.setTheme(theme);
- if (getOnPreferenceChangeListener() != null) {
- getOnPreferenceChangeListener().onPreferenceChange(this, UserPreferences.getTheme());
- }
- updateUi();
- });
- }
-
- void updateUi() {
- updateThemeCard(viewBinding.themeSystemCard, UserPreferences.ThemePreference.SYSTEM);
- updateThemeCard(viewBinding.themeLightCard, UserPreferences.ThemePreference.LIGHT);
- updateThemeCard(viewBinding.themeDarkCard, UserPreferences.ThemePreference.DARK);
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/VolumeAdaptationPreference.java b/app/src/main/java/de/danoeh/antennapod/preferences/VolumeAdaptationPreference.java
index 584b7d90e..a4ed402ed 100644
--- a/app/src/main/java/de/danoeh/antennapod/preferences/VolumeAdaptationPreference.java
+++ b/app/src/main/java/de/danoeh/antennapod/preferences/VolumeAdaptationPreference.java
@@ -6,6 +6,7 @@ import android.util.AttributeSet;
import java.util.Arrays;
import de.danoeh.antennapod.model.feed.VolumeAdaptionSetting;
+import de.danoeh.antennapod.ui.preferences.preference.MaterialListPreference;
public class VolumeAdaptationPreference extends MaterialListPreference {
public VolumeAdaptationPreference(Context context) {
diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml
deleted file mode 100644
index 7d2fea5a6..000000000
--- a/app/src/main/res/anim/fade_in.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
-
- <alpha
- android:duration="@integer/fragment_transition_duration"
- android:fromAlpha="0.0"
- android:interpolator="@android:anim/accelerate_interpolator"
- android:toAlpha="1.0" />
-</set> \ No newline at end of file
diff --git a/app/src/main/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml
deleted file mode 100644
index ecfb092ae..000000000
--- a/app/src/main/res/anim/fade_out.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<set xmlns:android="http://schemas.android.com/apk/res/android">
-
- <alpha
- android:duration="@integer/fragment_transition_duration"
- android:fromAlpha="1.0"
- android:interpolator="@android:anim/accelerate_interpolator"
- android:toAlpha="0.0" />
-
-</set> \ No newline at end of file
diff --git a/app/src/main/res/anim/slide_left_in.xml b/app/src/main/res/anim/slide_left_in.xml
deleted file mode 100644
index 288e06dd8..000000000
--- a/app/src/main/res/anim/slide_left_in.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
- <translate
- android:fromXDelta="-100%" android:toXDelta="0%"
- android:fromYDelta="0%" android:toYDelta="0%"
- android:duration="@integer/fragment_transition_duration"
- android:interpolator="@android:anim/accelerate_decelerate_interpolator" />
-</set>
diff --git a/app/src/main/res/anim/slide_left_out.xml b/app/src/main/res/anim/slide_left_out.xml
deleted file mode 100644
index 873947de4..000000000
--- a/app/src/main/res/anim/slide_left_out.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
- <translate
- android:fromXDelta="0%" android:toXDelta="-100%"
- android:fromYDelta="0%" android:toYDelta="0%"
- android:duration="@integer/fragment_transition_duration"
- android:interpolator="@android:anim/accelerate_decelerate_interpolator" />
-</set>
diff --git a/app/src/main/res/anim/slide_right_in.xml b/app/src/main/res/anim/slide_right_in.xml
deleted file mode 100644
index a00815052..000000000
--- a/app/src/main/res/anim/slide_right_in.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
- <translate
- android:fromXDelta="100%" android:toXDelta="0%"
- android:fromYDelta="0%" android:toYDelta="0%"
- android:duration="@integer/fragment_transition_duration"
- android:interpolator="@android:anim/accelerate_decelerate_interpolator" />
-</set>
diff --git a/app/src/main/res/anim/slide_right_out.xml b/app/src/main/res/anim/slide_right_out.xml
deleted file mode 100644
index 46de69db3..000000000
--- a/app/src/main/res/anim/slide_right_out.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
- <translate
- android:fromXDelta="0%" android:toXDelta="100%"
- android:fromYDelta="0%" android:toYDelta="0%"
- android:duration="@integer/fragment_transition_duration"
- android:interpolator="@android:anim/accelerate_decelerate_interpolator" />
-</set>
diff --git a/app/src/main/res/drawable-nodpi/theme_preview_dark.png b/app/src/main/res/drawable-nodpi/theme_preview_dark.png
deleted file mode 100644
index b4e1e0376..000000000
--- a/app/src/main/res/drawable-nodpi/theme_preview_dark.png
+++ /dev/null
Binary files differ
diff --git a/app/src/main/res/drawable-nodpi/theme_preview_light.png b/app/src/main/res/drawable-nodpi/theme_preview_light.png
deleted file mode 100644
index 39ef47b4f..000000000
--- a/app/src/main/res/drawable-nodpi/theme_preview_light.png
+++ /dev/null
Binary files differ
diff --git a/app/src/main/res/drawable-nodpi/theme_preview_system.png b/app/src/main/res/drawable-nodpi/theme_preview_system.png
deleted file mode 100644
index cc6403a98..000000000
--- a/app/src/main/res/drawable-nodpi/theme_preview_system.png
+++ /dev/null
Binary files differ
diff --git a/app/src/main/res/layout/about_teaser.xml b/app/src/main/res/layout/about_teaser.xml
deleted file mode 100644
index 4e7f0454f..000000000
--- a/app/src/main/res/layout/about_teaser.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ImageView
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:adjustViewBounds="true"
- android:layout_height="wrap_content"
- app:srcCompat="@drawable/teaser"
- android:importantForAccessibility="no"/> \ No newline at end of file
diff --git a/app/src/main/res/layout/alertdialog_sync_provider_chooser.xml b/app/src/main/res/layout/alertdialog_sync_provider_chooser.xml
deleted file mode 100644
index 9b4d62804..000000000
--- a/app/src/main/res/layout/alertdialog_sync_provider_chooser.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="16dp">
-
- <ImageView
- android:id="@+id/icon"
- android:layout_width="48dp"
- android:layout_height="48dp"
- android:layout_marginRight="16dip"
- android:layout_marginEnd="16dip"
- android:layout_gravity="center_vertical" />
-
- <TextView
- android:id="@+id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text=""
- android:layout_gravity="center" />
-
-</LinearLayout>
diff --git a/app/src/main/res/layout/authentication_dialog.xml b/app/src/main/res/layout/authentication_dialog.xml
deleted file mode 100644
index 0d54420d4..000000000
--- a/app/src/main/res/layout/authentication_dialog.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:padding="16dp">
-
- <com.google.android.material.textfield.TextInputLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dp"
- style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
-
- <com.google.android.material.textfield.TextInputEditText
- android:id="@+id/usernameEditText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/username_label"
- android:lines="1" />
-
- </com.google.android.material.textfield.TextInputLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <com.google.android.material.textfield.TextInputLayout
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
-
- <com.google.android.material.textfield.TextInputEditText
- android:id="@+id/passwordEditText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/password_label"
- android:inputType="textPassword"
- android:lines="1" />
-
- </com.google.android.material.textfield.TextInputLayout>
-
- <ImageView
- android:id="@+id/showPasswordButton"
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:src="@drawable/ic_eye"
- android:layout_gravity="center_vertical"
- android:padding="8dp"
- android:textColor="?android:attr/textColorPrimary"
- android:background="?attr/selectableItemBackgroundBorderless"
- android:alpha="0.6"
- android:textSize="20sp"
- android:layout_marginLeft="8dp"
- android:layout_marginStart="8dp" />
-
- </LinearLayout>
-
-</LinearLayout>
diff --git a/app/src/main/res/layout/choose_data_folder_dialog.xml b/app/src/main/res/layout/choose_data_folder_dialog.xml
deleted file mode 100644
index bac14a108..000000000
--- a/app/src/main/res/layout/choose_data_folder_dialog.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <androidx.recyclerview.widget.RecyclerView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/recyclerView" />
-
-</LinearLayout>
diff --git a/app/src/main/res/layout/choose_data_folder_dialog_entry.xml b/app/src/main/res/layout/choose_data_folder_dialog_entry.xml
deleted file mode 100644
index addc63f4d..000000000
--- a/app/src/main/res/layout/choose_data_folder_dialog_entry.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/root"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_margin="16dp"
- android:background="?attr/selectableItemBackground">
-
- <RadioButton
- android:id="@+id/radio_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_alignParentLeft="true"
- android:layout_centerVertical="true"
- android:padding="4dp" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:layout_toEndOf="@+id/radio_button"
- android:layout_toRightOf="@+id/radio_button"
- android:orientation="vertical">
-
- <TextView
- android:id="@+id/path"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- tools:text="/storage/sdcard0" />
-
- <TextView
- android:id="@+id/size"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- tools:text="2 GB" />
-
- <ProgressBar
- android:id="@+id/used_space"
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>
-
-</RelativeLayout>
diff --git a/app/src/main/res/layout/dialog_switch_preference.xml b/app/src/main/res/layout/dialog_switch_preference.xml
deleted file mode 100644
index 45fe21a90..000000000
--- a/app/src/main/res/layout/dialog_switch_preference.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:padding="24dp">
-
- <com.google.android.material.materialswitch.MaterialSwitch
- android:id="@+id/dialogSwitch"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- tools:text="Switch" />
-
-</LinearLayout>
diff --git a/app/src/main/res/layout/gpodnetauth_credentials.xml b/app/src/main/res/layout/gpodnetauth_credentials.xml
deleted file mode 100644
index a5b8c594d..000000000
--- a/app/src/main/res/layout/gpodnetauth_credentials.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:text="@string/synchronization_credentials_explanation" />
-
- <TextView
- android:id="@+id/createAccountWarning"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/gpodnetauth_encryption_warning"
- android:textColor="?attr/icon_red"
- android:textStyle="bold"
- android:visibility="invisible" />
-
- <com.google.android.material.textfield.TextInputLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
-
- <com.google.android.material.textfield.TextInputEditText
- android:id="@+id/etxtUsername"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/username_label"
- android:inputType="textNoSuggestions"
- android:lines="1"
- android:imeOptions="actionNext|flagNoFullscreen" />
-
- </com.google.android.material.textfield.TextInputLayout>
-
- <com.google.android.material.textfield.TextInputLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
-
- <com.google.android.material.textfield.TextInputEditText
- android:id="@+id/etxtPassword"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/password_label"
- android:inputType="textPassword"
- android:lines="1"
- android:imeOptions="actionNext|flagNoFullscreen"
- android:imeActionLabel="@string/synchronization_login_butLabel" />
-
- </com.google.android.material.textfield.TextInputLayout>
-
- <ProgressBar
- android:id="@+id/progBarLogin"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:visibility="gone"
- android:layout_gravity="right" />
-
- <TextView
- android:id="@+id/credentialsError"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textColor="?attr/icon_red"
- android:textSize="@dimen/text_size_small"
- android:maxLines="2"
- android:ellipsize="end"
- android:gravity="center"
- android:visibility="gone"
- tools:text=" message" />
-
- <Button
- android:id="@+id/butLogin"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/synchronization_login_butLabel" />
-
-</LinearLayout>
diff --git a/app/src/main/res/layout/gpodnetauth_device.xml b/app/src/main/res/layout/gpodnetauth_device.xml
deleted file mode 100644
index 6e051ecf3..000000000
--- a/app/src/main/res/layout/gpodnetauth_device.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:text="@string/synchronization_selectDevice_explanation" />
-
- <com.google.android.material.textfield.TextInputLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
-
- <com.google.android.material.textfield.TextInputEditText
- android:id="@+id/deviceName"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/gpodnetauth_device_name"
- android:lines="1"
- android:imeOptions="actionNext|flagNoFullscreen" />
-
- </com.google.android.material.textfield.TextInputLayout>
-
- <Button
- android:id="@+id/createDeviceButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="right|end"
- android:text="@string/gpodnetauth_create_device" />
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="16dp"
- android:text="@string/gpodnetauth_existing_devices"
- style="@style/AntennaPod.TextView.Heading" />
-
- <TextView
- android:id="@+id/deviceSelectError"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textColor="?attr/icon_red"
- android:textSize="@dimen/text_size_small"
- android:visibility="gone"
- tools:text="Error message"
- tools:background="@android:color/holo_green_dark" />
-
- <LinearLayout
- android:id="@+id/devicesContainer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" />
-
- <ProgressBar
- android:id="@+id/progbarCreateDevice"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="?attr/icon_red"
- android:visibility="gone" />
-
-</LinearLayout>
diff --git a/app/src/main/res/layout/gpodnetauth_device_row.xml b/app/src/main/res/layout/gpodnetauth_device_row.xml
deleted file mode 100644
index d39c00571..000000000
--- a/app/src/main/res/layout/gpodnetauth_device_row.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="8dp">
-
- <Button
- android:id="@+id/selectDeviceButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- style="?attr/materialButtonOutlinedStyle" />
-</FrameLayout> \ No newline at end of file
diff --git a/app/src/main/res/layout/gpodnetauth_dialog.xml b/app/src/main/res/layout/gpodnetauth_dialog.xml
deleted file mode 100644
index b5814a4e5..000000000
--- a/app/src/main/res/layout/gpodnetauth_dialog.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ScrollView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:padding="16dp"
- android:clipToPadding="false">
-
- <ViewFlipper
- android:id="@+id/viewflipper"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:measureAllChildren="false"
- android:inAnimation="@anim/slide_right_in"
- android:outAnimation="@anim/slide_left_out">
-
- <include
- layout="@layout/gpodnetauth_host" />
-
- <include
- layout="@layout/gpodnetauth_credentials" />
-
- <include
- layout="@layout/gpodnetauth_device" />
-
- <include
- layout="@layout/gpodnetauth_finish" />
-
- </ViewFlipper>
-
-</ScrollView>
diff --git a/app/src/main/res/layout/gpodnetauth_finish.xml b/app/src/main/res/layout/gpodnetauth_finish.xml
deleted file mode 100644
index 8eced7304..000000000
--- a/app/src/main/res/layout/gpodnetauth_finish.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <ImageView
- android:id="@id/icon"
- android:layout_width="64dp"
- android:layout_height="64dp"
- app:srcCompat="@drawable/gpodder_icon" />
-
- <TextView
- android:id="@+id/txtvDescription"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/gpodnetauth_finish_descr"
- android:textColor="?android:attr/textColorPrimary" />
-
- <Button
- android:id="@+id/butSyncNow"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:text="@string/gpodnetauth_finish_butsyncnow"/>
-
-</LinearLayout> \ No newline at end of file
diff --git a/app/src/main/res/layout/gpodnetauth_host.xml b/app/src/main/res/layout/gpodnetauth_host.xml
deleted file mode 100644
index 7f2d16f11..000000000
--- a/app/src/main/res/layout/gpodnetauth_host.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:clipToPadding="false">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:text="@string/synchronization_host_explanation" />
-
- <com.google.android.material.textfield.TextInputLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
-
- <com.google.android.material.textfield.TextInputEditText
- android:id="@+id/serverUrlText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/synchronization_host_label"
- android:inputType="textNoSuggestions"
- android:lines="1"
- android:imeOptions="actionNext|flagNoFullscreen" />
-
- </com.google.android.material.textfield.TextInputLayout>
-
- <Button
- android:id="@+id/chooseHostButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/proceed_to_login_butLabel" />
-
-</LinearLayout>
diff --git a/app/src/main/res/layout/nextcloud_auth_dialog.xml b/app/src/main/res/layout/nextcloud_auth_dialog.xml
deleted file mode 100644
index 0f25a271f..000000000
--- a/app/src/main/res/layout/nextcloud_auth_dialog.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ScrollView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:padding="16dp"
- android:orientation="vertical"
- android:clipToPadding="false">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:text="@string/synchronization_host_explanation" />
-
- <com.google.android.material.textfield.TextInputLayout
- android:id="@+id/serverUrlTextInput"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
-
- <com.google.android.material.textfield.TextInputEditText
- android:id="@+id/serverUrlText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/synchronization_host_label"
- android:inputType="textNoSuggestions"
- android:lines="1"
- android:imeOptions="actionNext|flagNoFullscreen" />
-
- </com.google.android.material.textfield.TextInputLayout>
-
- <LinearLayout
- android:id="@+id/loginProgressContainer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="gone"
- android:orientation="horizontal"
- android:layout_gravity="center_vertical">
-
- <ProgressBar
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="8dp"
- android:layout_marginRight="8dp" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/synchronization_nextcloud_authenticate_browser" />
-
- </LinearLayout>
-
- <TextView
- android:id="@+id/errorText"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:visibility="gone"
- android:textColor="?attr/icon_red"
- android:layout_marginBottom="16dp" />
-
- <Button
- android:id="@+id/chooseHostButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/proceed_to_login_butLabel" />
-
- </LinearLayout>
-
-</ScrollView>
diff --git a/app/src/main/res/layout/proxy_settings.xml b/app/src/main/res/layout/proxy_settings.xml
deleted file mode 100644
index 3467291eb..000000000
--- a/app/src/main/res/layout/proxy_settings.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:padding="16dp">
-
- <TextView
- android:id="@+id/txtvType"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/proxy_type_label"
- android:textColor="?android:attr/textColorSecondary" />
-
- <Spinner
- android:id="@+id/spType"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-
- <TextView
- android:id="@+id/txtvHost"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:text="@string/host_label"
- android:textColor="?android:attr/textColorSecondary" />
-
- <EditText
- android:id="@+id/etHost"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:inputType="textUri"
- android:hint="www.example.com" />
-
- <TextView
- android:id="@+id/txtvPort"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:text="@string/port_label"
- android:textColor="?android:attr/textColorSecondary" />
-
- <EditText
- android:id="@+id/etPort"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="8080"
- android:inputType="number" />
-
- <TextView
- android:id="@+id/txtvUsername"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:singleLine="true"
- android:text="@string/username_label"
- android:textColor="?android:attr/textColorSecondary" />
-
- <EditText
- android:id="@+id/etUsername"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/optional_hint" />
-
- <TextView
- android:id="@+id/txtvPassword"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:text="@string/password_label"
- android:textColor="?android:attr/textColorSecondary" />
-
- <EditText
- android:id="@+id/etPassword"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/optional_hint"
- android:inputType="textPassword" />
-
- <TextView
- android:id="@+id/txtvMessage"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:visibility="invisible"
- android:gravity="center" />
-
-</LinearLayout>
diff --git a/app/src/main/res/layout/simple_icon_list_item.xml b/app/src/main/res/layout/simple_icon_list_item.xml
deleted file mode 100644
index 7ed129204..000000000
--- a/app/src/main/res/layout/simple_icon_list_item.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="16dp">
-
- <ImageView
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:id="@+id/icon"/>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:layout_marginLeft="16dp"
- android:layout_gravity="center_vertical"
- android:layout_marginStart="16dp">
-
- <TextView
- tools:text="Title"
- android:textColor="?android:attr/textColorPrimary"
- android:textSize="16sp"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/title"/>
-
- <TextView
- tools:text="Subtitle"
- android:textColor="?android:attr/textColorSecondary"
- android:textSize="14sp"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/subtitle"/>
-
- </LinearLayout>
-
-</LinearLayout>
diff --git a/app/src/main/res/layout/theme_preference.xml b/app/src/main/res/layout/theme_preference.xml
deleted file mode 100644
index 27335fbd3..000000000
--- a/app/src/main/res/layout/theme_preference.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:background="?android:attr/colorBackground"
- android:gravity="top"
- android:padding="8dp">
-
- <androidx.cardview.widget.CardView
- android:id="@+id/themeSystemCard"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_margin="4dp"
- android:clickable="true"
- android:foreground="?android:attr/selectableItemBackground"
- android:layout_weight="1"
- app:cardElevation="0dp"
- app:cardCornerRadius="16dp"
- app:contentPadding="16dp">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:gravity="center">
-
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:src="@drawable/theme_preview_system" />
-
- <TextView
- android:id="@+id/themeSystemRadio"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="4dp"
- android:textColor="?android:attr/textColorPrimary"
- android:text="@string/pref_theme_title_automatic"
- android:clickable="false" />
-
- </LinearLayout>
-
- </androidx.cardview.widget.CardView>
-
- <androidx.cardview.widget.CardView
- android:id="@+id/themeLightCard"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_margin="4dp"
- android:clickable="true"
- android:foreground="?android:attr/selectableItemBackground"
- android:layout_weight="1"
- app:cardElevation="0dp"
- app:cardCornerRadius="16dp"
- app:contentPadding="16dp">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:gravity="center">
-
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:src="@drawable/theme_preview_light" />
-
- <TextView
- android:id="@+id/themeLightRadio"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="4dp"
- android:textColor="?android:attr/textColorPrimary"
- android:text="@string/pref_theme_title_light"
- android:clickable="false" />
-
- </LinearLayout>
-
- </androidx.cardview.widget.CardView>
-
- <androidx.cardview.widget.CardView
- android:id="@+id/themeDarkCard"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_margin="4dp"
- android:clickable="true"
- android:foreground="?android:attr/selectableItemBackground"
- android:layout_weight="1"
- app:cardElevation="0dp"
- app:cardCornerRadius="16dp"
- app:contentPadding="16dp">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:gravity="center">
-
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:src="@drawable/theme_preview_dark" />
-
- <TextView
- android:id="@+id/themeDarkCardRadio"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="4dp"
- android:textColor="?android:attr/textColorPrimary"
- android:text="@string/pref_theme_title_dark"
- android:clickable="false" />
-
- </LinearLayout>
-
- </androidx.cardview.widget.CardView>
-
-</LinearLayout>
diff --git a/app/src/main/res/menu/bug_report_options.xml b/app/src/main/res/menu/bug_report_options.xml
deleted file mode 100644
index 62963210c..000000000
--- a/app/src/main/res/menu/bug_report_options.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-
- <item android:id="@+id/export_logcat"
- android:title="@string/export_logs_menu_title" />
-
-</menu> \ No newline at end of file
diff --git a/app/src/main/res/xml/feed_settings.xml b/app/src/main/res/xml/feed_settings.xml
index b322217ad..2662b1906 100644
--- a/app/src/main/res/xml/feed_settings.xml
+++ b/app/src/main/res/xml/feed_settings.xml
@@ -40,7 +40,7 @@
android:summary="@string/pref_feed_skip_sum"
android:title="@string/pref_feed_skip" />
- <de.danoeh.antennapod.preferences.MaterialListPreference
+ <de.danoeh.antennapod.ui.preferences.preference.MaterialListPreference
android:entries="@array/spnAutoDeleteItems"
android:entryValues="@array/spnAutoDeleteValues"
android:icon="@drawable/ic_delete"
@@ -57,7 +57,7 @@
android:summary="@string/feed_volume_adaptation_summary"
android:title="@string/feed_volume_adapdation" />
- <de.danoeh.antennapod.preferences.MaterialListPreference
+ <de.danoeh.antennapod.ui.preferences.preference.MaterialListPreference
android:entries="@array/feedNewEpisodesActionItems"
android:entryValues="@array/feedNewEpisodesActionValues"
android:icon="@drawable/ic_feed"
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
deleted file mode 100644
index 8f3851c09..000000000
--- a/app/src/main/res/xml/preferences.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:search="http://schemas.android.com/apk/res-auto">
-
- <com.bytehamster.lib.preferencesearch.SearchPreference
- android:key="searchPreference"
- search:textHint="@string/preference_search_hint"
- search:textNoResults="@string/preference_search_no_results"
- search:textClearHistory="@string/preference_search_clear_history" />
-
- <Preference
- android:key="prefScreenInterface"
- android:title="@string/user_interface_label"
- android:summary="@string/user_interface_sum"
- android:icon="@drawable/ic_appearance" />
-
- <Preference
- android:key="prefScreenPlayback"
- android:title="@string/playback_pref"
- android:summary="@string/playback_pref_sum"
- android:icon="@drawable/ic_play_24dp" />
-
- <Preference
- android:key="prefScreenDownloads"
- android:title="@string/downloads_pref"
- android:summary="@string/downloads_pref_sum"
- android:icon="@drawable/ic_download" />
-
- <Preference
- android:key="prefScreenSynchronization"
- android:title="@string/synchronization_pref"
- android:summary="@string/synchronization_sum"
- android:icon="@drawable/ic_cloud" />
-
- <Preference
- android:key="prefScreenImportExport"
- android:title="@string/import_export_pref"
- android:summary="@string/import_export_summary"
- android:icon="@drawable/ic_storage" />
-
- <Preference
- android:key="notifications"
- android:title="@string/notification_pref_fragment"
- android:icon="@drawable/ic_notifications"/>
-
- <PreferenceCategory
- android:key="project"
- android:title="@string/project_pref">
- <Preference
- android:key="prefDocumentation"
- android:title="@string/documentation_support"
- android:icon="@drawable/ic_questionmark" />
- <Preference
- android:key="prefViewForum"
- android:title="@string/visit_user_forum"
- android:icon="@drawable/ic_chat" />
- <Preference
- android:key="prefContribute"
- android:title="@string/pref_contribute"
- android:icon="@drawable/ic_contribute" />
- <Preference
- android:key="prefSendBugReport"
- android:title="@string/bug_report_title"
- android:icon="@drawable/ic_bug" />
- <Preference
- android:key="prefAbout"
- android:title="@string/about_pref"
- android:icon="@drawable/ic_info" />
- </PreferenceCategory>
-</PreferenceScreen>
diff --git a/app/src/main/res/xml/preferences_about.xml b/app/src/main/res/xml/preferences_about.xml
deleted file mode 100644
index 1312d5466..000000000
--- a/app/src/main/res/xml/preferences_about.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android">
-
- <Preference
- android:layout="@layout/about_teaser"/>
- <Preference
- android:key="about_version"
- android:title="@string/antennapod_version"
- android:icon="@drawable/ic_star"
- android:summary="1.7.2 (asd8qs)"/>
- <Preference
- android:key="about_contributors"
- android:icon="@drawable/ic_settings"
- android:summary="@string/contributors_summary"
- android:title="@string/contributors"/>
- <Preference
- android:key="about_privacy_policy"
- android:icon="@drawable/ic_questionmark"
- android:summary="www.antennapod.org/privacy"
- android:title="@string/privacy_policy"/>
- <Preference
- android:key="about_licenses"
- android:icon="@drawable/ic_info"
- android:summary="@string/licenses_summary"
- android:title="@string/licenses"/>
-
-</PreferenceScreen>
diff --git a/app/src/main/res/xml/preferences_autodownload.xml b/app/src/main/res/xml/preferences_autodownload.xml
deleted file mode 100644
index 79e830b7f..000000000
--- a/app/src/main/res/xml/preferences_autodownload.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:search="http://schemas.android.com/apk/com.bytehamster.lib.preferencesearch">
-
- <de.danoeh.antennapod.preferences.MasterSwitchPreference
- android:key="prefEnableAutoDl"
- android:title="@string/pref_automatic_download_title"
- search:summary="@string/pref_automatic_download_sum"
- android:defaultValue="false"/>
- <de.danoeh.antennapod.preferences.MaterialListPreference
- android:defaultValue="25"
- android:entries="@array/episode_cache_size_entries"
- android:key="prefEpisodeCacheSize"
- android:title="@string/pref_episode_cache_title"
- android:summary="@string/pref_episode_cache_summary"
- android:entryValues="@array/episode_cache_size_values"/>
- <de.danoeh.antennapod.preferences.MaterialListPreference
- android:defaultValue="-1"
- android:entries="@array/episode_cleanup_entries"
- android:key="prefEpisodeCleanup"
- android:title="@string/pref_episode_cleanup_title"
- android:summary="@string/pref_episode_cleanup_summary"
- android:entryValues="@array/episode_cleanup_values"/>
- <SwitchPreferenceCompat
- android:key="prefEnableAutoDownloadOnBattery"
- android:title="@string/pref_automatic_download_on_battery_title"
- android:summary="@string/pref_automatic_download_on_battery_sum"
- android:defaultValue="true"/>
- <SwitchPreferenceCompat
- android:key="prefEnableAutoDownloadWifiFilter"
- android:title="@string/pref_autodl_wifi_filter_title"
- android:summary="@string/pref_autodl_wifi_filter_sum"/>
-</PreferenceScreen>
diff --git a/app/src/main/res/xml/preferences_downloads.xml b/app/src/main/res/xml/preferences_downloads.xml
deleted file mode 100644
index b0a41dfb5..000000000
--- a/app/src/main/res/xml/preferences_downloads.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:search="http://schemas.android.com/apk/com.bytehamster.lib.preferencesearch">
-
- <Preference
- android:title="@string/choose_data_directory"
- android:key="prefChooseDataDir"/>
-
- <PreferenceCategory android:title="@string/automation">
- <de.danoeh.antennapod.preferences.MaterialListPreference
- android:entryValues="@array/feed_refresh_interval_values"
- android:entries="@array/feed_refresh_interval_entries"
- android:key="prefAutoUpdateIntervall"
- android:title="@string/feed_refresh_title"
- android:summary="@string/feed_refresh_sum"
- android:defaultValue="12"/>
- <de.danoeh.antennapod.preferences.MaterialListPreference
- android:entryValues="@array/globalNewEpisodesActionValues"
- android:entries="@array/globalNewEpisodesActionItems"
- android:key="prefNewEpisodesAction"
- android:title="@string/pref_new_episodes_action_title"
- android:summary="@string/pref_new_episodes_action_sum"
- android:defaultValue="1"/>
- <Preference
- android:summary="@string/pref_automatic_download_sum"
- android:key="prefAutoDownloadSettings"
- android:title="@string/pref_automatic_download_title"
- search:ignore="true" />
- <SwitchPreferenceCompat
- android:defaultValue="false"
- android:enabled="true"
- android:key="prefAutoDelete"
- android:summary="@string/pref_auto_delete_sum"
- android:title="@string/pref_auto_delete_title"/>
- <SwitchPreferenceCompat
- android:defaultValue="false"
- android:enabled="true"
- android:key="prefAutoDeleteLocal"
- android:summary="@string/pref_auto_local_delete_sum"
- android:title="@string/pref_auto_local_delete_title"/>
- <SwitchPreferenceCompat
- android:defaultValue="true"
- android:enabled="true"
- android:key="prefFavoriteKeepsEpisode"
- android:summary="@string/pref_favorite_keeps_episodes_sum"
- android:title="@string/pref_favorite_keeps_episodes_title"/>
- <SwitchPreferenceCompat
- android:defaultValue="false"
- android:enabled="true"
- android:key="prefDeleteRemovesFromQueue"
- android:summary="@string/pref_delete_removes_from_queue_sum"
- android:title="@string/pref_delete_removes_from_queue_title"/>
- </PreferenceCategory>
-
- <PreferenceCategory android:title="@string/download_pref_details">
- <de.danoeh.antennapod.preferences.MaterialMultiSelectListPreference
- android:defaultValue="@array/mobile_update_default_value"
- android:entries="@array/mobile_update_entries"
- android:entryValues="@array/mobile_update_values"
- android:key="prefMobileUpdateTypes"
- android:summary="@string/pref_mobileUpdate_sum"
- android:title="@string/pref_mobileUpdate_title"/>
- <Preference
- android:key="prefProxy"
- android:summary="@string/pref_proxy_sum"
- android:title="@string/pref_proxy_title"/>
- </PreferenceCategory>
-</PreferenceScreen>
diff --git a/app/src/main/res/xml/preferences_import_export.xml b/app/src/main/res/xml/preferences_import_export.xml
deleted file mode 100644
index 789c8c216..000000000
--- a/app/src/main/res/xml/preferences_import_export.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:search="http://schemas.android.com/apk/com.bytehamster.lib.preferencesearch">
-
- <PreferenceCategory android:title="@string/database">
- <Preference
- android:key="prefDatabaseExport"
- search:keywords="@string/import_export_search_keywords"
- android:title="@string/database_export_label"
- android:summary="@string/database_export_summary"/>
- <SwitchPreferenceCompat
- android:key="prefAutomaticDatabaseExport"
- android:title="@string/automatic_database_export_label"
- android:summary="@string/automatic_database_export_summary"
- android:defaultValue="false" />
- <Preference
- android:key="prefDatabaseImport"
- search:keywords="@string/import_export_search_keywords"
- android:title="@string/database_import_label"
- android:summary="@string/database_import_summary"/>
- </PreferenceCategory>
-
- <PreferenceCategory android:title="@string/opml">
- <Preference
- android:key="prefOpmlExport"
- android:title="@string/opml_export_label"
- android:summary="@string/opml_export_summary"/>
- <Preference
- android:key="prefOpmlImport"
- android:title="@string/opml_import_label"
- android:summary="@string/opml_import_summary"/>
- </PreferenceCategory>
-
- <PreferenceCategory android:title="@string/html">
- <Preference
- android:key="prefHtmlExport"
- android:title="@string/html_export_label"
- android:summary="@string/html_export_summary"/>
- <Preference
- android:key="prefFavoritesExport"
- android:title="@string/favorites_export_label"
- android:summary="@string/favorites_export_summary"/>
- </PreferenceCategory>
-</PreferenceScreen>
diff --git a/app/src/main/res/xml/preferences_notifications.xml b/app/src/main/res/xml/preferences_notifications.xml
deleted file mode 100644
index 34d327340..000000000
--- a/app/src/main/res/xml/preferences_notifications.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android">
-
- <PreferenceCategory
- android:title="@string/notification_group_errors">
- <SwitchPreferenceCompat
- android:defaultValue="true"
- android:enabled="true"
- android:key="prefShowDownloadReport"
- android:summary="@string/notification_channel_download_error_description"
- android:title="@string/notification_channel_download_error" />
- <SwitchPreferenceCompat
- android:defaultValue="true"
- android:key="pref_gpodnet_notifications"
- android:summary="@string/notification_channel_sync_error_description"
- android:title="@string/notification_channel_sync_error" />
- </PreferenceCategory>
-</PreferenceScreen> \ No newline at end of file
diff --git a/app/src/main/res/xml/preferences_playback.xml b/app/src/main/res/xml/preferences_playback.xml
deleted file mode 100644
index 57bfe21d7..000000000
--- a/app/src/main/res/xml/preferences_playback.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
- <PreferenceCategory android:title="@string/interruptions">
- <SwitchPreferenceCompat
- android:defaultValue="true"
- android:enabled="true"
- android:key="prefPauseOnHeadsetDisconnect"
- android:summary="@string/pref_pauseOnDisconnect_sum"
- android:title="@string/pref_pauseOnHeadsetDisconnect_title"/>
- <SwitchPreferenceCompat
- android:defaultValue="true"
- android:enabled="true"
- android:dependency="prefPauseOnHeadsetDisconnect"
- android:key="prefUnpauseOnHeadsetReconnect"
- android:summary="@string/pref_unpauseOnHeadsetReconnect_sum"
- android:title="@string/pref_unpauseOnHeadsetReconnect_title"/>
- <SwitchPreferenceCompat
- android:defaultValue="false"
- android:enabled="true"
- android:dependency="prefPauseOnHeadsetDisconnect"
- android:key="prefUnpauseOnBluetoothReconnect"
- android:summary="@string/pref_unpauseOnBluetoothReconnect_sum"
- android:title="@string/pref_unpauseOnBluetoothReconnect_title"/>
- <SwitchPreferenceCompat
- android:defaultValue="true"
- android:enabled="true"
- android:key="prefPauseForFocusLoss"
- android:summary="@string/pref_pausePlaybackForFocusLoss_sum"
- android:title="@string/pref_pausePlaybackForFocusLoss_title"/>
- </PreferenceCategory>
-
- <PreferenceCategory android:title="@string/playback_control">
- <Preference
- android:key="prefPlaybackFastForwardDeltaLauncher"
- android:summary="@string/pref_fast_forward_sum"
- android:title="@string/pref_fast_forward"/>
- <Preference
- android:key="prefPlaybackRewindDeltaLauncher"
- android:summary="@string/pref_rewind_sum"
- android:title="@string/pref_rewind"/>
- <Preference
- android:key="prefPlaybackSpeedLauncher"
- android:summary="@string/pref_playback_speed_sum"
- android:title="@string/playback_speed"/>
- <SwitchPreferenceCompat
- android:defaultValue="false"
- android:key="prefPlaybackTimeRespectsSpeed"
- android:summary="@string/pref_playback_time_respects_speed_sum"
- android:title="@string/pref_playback_time_respects_speed_title"/>
- <SwitchPreferenceCompat
- android:defaultValue="false"
- android:key="prefStreamOverDownload"
- android:summary="@string/pref_stream_over_download_sum"
- android:title="@string/pref_stream_over_download_title"/>
- </PreferenceCategory>
-
- <PreferenceCategory android:title="@string/reassign_hardware_buttons">
- <de.danoeh.antennapod.preferences.MaterialListPreference
- android:defaultValue="@string/keycode_media_fast_forward"
- android:entries="@array/button_action_options"
- android:entryValues="@array/button_action_values"
- android:key="prefHardwareForwardButton"
- android:title="@string/pref_hardware_forward_button_title"
- android:summary="@string/pref_hardware_forward_button_summary"/>
- <de.danoeh.antennapod.preferences.MaterialListPreference
- android:defaultValue="@string/keycode_media_rewind"
- android:entries="@array/button_action_options"
- android:entryValues="@array/button_action_values"
- android:key="prefHardwarePreviousButton"
- android:title="@string/pref_hardware_previous_button_title"
- android:summary="@string/pref_hardware_previous_button_summary"/>
- </PreferenceCategory>
-
- <PreferenceCategory android:title="@string/queue_label">
- <SwitchPreferenceCompat
- android:defaultValue="true"
- android:enabled="true"
- android:key="prefEnqueueDownloaded"
- android:summary="@string/pref_enqueue_downloaded_summary"
- android:title="@string/pref_enqueue_downloaded_title" />
- <de.danoeh.antennapod.preferences.MaterialListPreference
- android:defaultValue="BACK"
- android:entries="@array/enqueue_location_options"
- android:entryValues="@array/enqueue_location_values"
- android:key="prefEnqueueLocation"
- android:title="@string/pref_enqueue_location_title"/>
- <SwitchPreferenceCompat
- android:defaultValue="true"
- android:enabled="true"
- android:key="prefFollowQueue"
- android:summary="@string/pref_followQueue_sum"
- android:title="@string/pref_followQueue_title"/>
- <de.danoeh.antennapod.preferences.MaterialListPreference
- android:defaultValue="30"
- android:entries="@array/smart_mark_as_played_values"
- android:entryValues="@array/smart_mark_as_played_values"
- android:key="prefSmartMarkAsPlayedSecs"
- android:summary="@string/pref_smart_mark_as_played_sum"
- android:title="@string/pref_smart_mark_as_played_title"/>
- <SwitchPreferenceCompat
- android:defaultValue="true"
- android:enabled="true"
- android:key="prefSkipKeepsEpisode"
- android:summary="@string/pref_skip_keeps_episodes_sum"
- android:title="@string/pref_skip_keeps_episodes_title"/>
- </PreferenceCategory>
-</PreferenceScreen>
diff --git a/app/src/main/res/xml/preferences_swipe.xml b/app/src/main/res/xml/preferences_swipe.xml
deleted file mode 100644
index 10ac102dd..000000000
--- a/app/src/main/res/xml/preferences_swipe.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
- <Preference
- android:key="prefSwipeQueue"
- android:title="@string/queue_label"/>
-
- <Preference
- android:key="prefSwipeInbox"
- android:title="@string/inbox_label"/>
-
- <Preference
- android:key="prefSwipeEpisodes"
- android:title="@string/episodes_label"/>
-
- <Preference
- android:key="prefSwipeDownloads"
- android:title="@string/downloads_label"/>
-
- <Preference
- android:key="prefSwipeHistory"
- android:title="@string/playback_history_label"/>
-
- <Preference
- android:key="prefSwipeFeed"
- android:title="@string/individual_subscription"/>
-
-</PreferenceScreen>
diff --git a/app/src/main/res/xml/preferences_synchronization.xml b/app/src/main/res/xml/preferences_synchronization.xml
deleted file mode 100644
index fbd4ccc79..000000000
--- a/app/src/main/res/xml/preferences_synchronization.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto">
-
- <Preference
- android:key="preference_synchronization_description"
- android:icon="@drawable/ic_notification_sync"
- android:summary="@string/synchronization_summary_unchoosen"/>
-
- <Preference
- android:key="pref_gpodnet_setlogin_information"
- android:title="@string/pref_gpodnet_setlogin_information_title"
- android:summary="@string/pref_gpodnet_setlogin_information_sum"
- app:isPreferenceVisible="false"/>
-
- <Preference
- android:key="pref_synchronization_sync"
- android:title="@string/synchronization_sync_changes_title"
- android:summary="@string/synchronization_sync_summary"/>
-
- <Preference
- android:key="pref_synchronization_force_full_sync"
- android:title="@string/synchronization_full_sync_title"
- android:summary="@string/synchronization_force_sync_summary"/>
-
- <Preference
- android:key="pref_synchronization_logout"
- android:title="@string/synchronization_logout"/>
-
-</PreferenceScreen>
diff --git a/app/src/main/res/xml/preferences_user_interface.xml b/app/src/main/res/xml/preferences_user_interface.xml
deleted file mode 100644
index 5cd25d59f..000000000
--- a/app/src/main/res/xml/preferences_user_interface.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:search="http://schemas.android.com/apk/com.bytehamster.lib.preferencesearch">
-
- <PreferenceCategory android:title="@string/appearance">
- <de.danoeh.antennapod.preferences.ThemePreference
- android:key="prefTheme" />
- <SwitchPreferenceCompat
- android:title="@string/pref_black_theme_title"
- android:key="prefThemeBlack"
- android:summary="@string/pref_black_theme_message"
- android:defaultValue="false" />
- <SwitchPreferenceCompat
- android:title="@string/pref_tinted_theme_title"
- android:key="prefTintedColors"
- android:summary="@string/pref_tinted_theme_message"
- android:defaultValue="false" />
- <Preference
- android:key="prefHiddenDrawerItems"
- android:summary="@string/pref_nav_drawer_items_sum"
- android:title="@string/pref_nav_drawer_items_title"/>
- <SwitchPreferenceCompat
- android:title="@string/pref_episode_cover_title"
- android:key="prefEpisodeCover"
- android:summary="@string/pref_episode_cover_summary"
- android:defaultValue="true"
- android:enabled="true"/>
- <SwitchPreferenceCompat
- android:title="@string/pref_show_remain_time_title"
- android:key="showTimeLeft"
- android:summary="@string/pref_show_remain_time_summary"
- android:defaultValue="false"
- android:enabled="true"/>
- </PreferenceCategory>
- <PreferenceCategory android:title="@string/subscriptions_label">
- <Preference
- android:title="@string/pref_nav_drawer_feed_order_title"
- android:key="prefDrawerFeedOrder"
- android:summary="@string/pref_nav_drawer_feed_order_sum"/>
- <de.danoeh.antennapod.preferences.MaterialListPreference
- android:entryValues="@array/nav_drawer_feed_counter_values"
- android:entries="@array/nav_drawer_feed_counter_options"
- android:title="@string/pref_nav_drawer_feed_counter_title"
- android:key="prefDrawerFeedIndicator"
- android:summary="@string/pref_nav_drawer_feed_counter_sum"
- android:defaultValue="1"/>
- <Preference
- android:title="@string/pref_filter_feed_title"
- android:key="prefSubscriptionsFilter"
- android:summary="@string/pref_filter_feed_sum" />
- <SwitchPreferenceCompat
- android:title="@string/pref_show_subscription_title"
- android:key="prefSubscriptionTitle"
- android:summary="@string/pref_show_subscription_title_summary"
- android:defaultValue="false" />
- </PreferenceCategory>
- <PreferenceCategory android:title="@string/external_elements">
- <SwitchPreferenceCompat
- android:defaultValue="false"
- android:enabled="true"
- android:key="prefExpandNotify"
- android:summary="@string/pref_expandNotify_sum"
- android:title="@string/pref_expandNotify_title"
- search:ignore="true"/>
- <SwitchPreferenceCompat
- android:defaultValue="true"
- android:enabled="true"
- android:key="prefPersistNotify"
- android:summary="@string/pref_persistNotify_sum"
- android:title="@string/pref_persistNotify_title"/>
- <Preference
- android:key="prefFullNotificationButtons"
- android:summary="@string/pref_full_notification_buttons_sum"
- android:title="@string/pref_full_notification_buttons_title"/>
- </PreferenceCategory>
- <PreferenceCategory android:title="@string/behavior">
- <de.danoeh.antennapod.preferences.MaterialListPreference
- android:entryValues="@array/default_page_values"
- android:entries="@array/default_page_titles"
- android:key="prefDefaultPage"
- android:title="@string/pref_default_page"
- android:summary="@string/pref_default_page_sum"
- android:defaultValue="HomeFragment"/>
- <SwitchPreferenceCompat
- android:key="prefBackButtonOpensDrawer"
- android:title="@string/pref_back_button_opens_drawer"
- android:summary="@string/pref_back_button_opens_drawer_summary"
- android:defaultValue="false"/>
- <Preference
- android:key="prefSwipe"
- android:summary="@string/swipeactions_summary"
- android:title="@string/swipeactions_label"/>
- </PreferenceCategory>
-</PreferenceScreen>