diff --git a/README.md b/README.md index 60de626c1..6986408bb 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Installs and updates the following browsers: -Browsers from Mozilla or based on Firefox: +Software from Mozilla or based on Firefox: - [Fennec F-Droid](https://f-droid.org/packages/org.mozilla.fennec_fdroid/) - [Firefox Browser](https://play.google.com/store/apps/details?id=org.mozilla.firefox), @@ -22,6 +22,9 @@ Browsers from Mozilla or based on Firefox: - [Iceraven](https://github.com/fork-maintainers/iceraven-browser) - [Tor Browser](https://www.torproject.org/download), [Tor Browser Alpha](https://www.torproject.org/download/alpha/) +- [Thunderbird for Android](https://play.google.com/store/apps/details?id=net.thunderbird.android), + [Thunderbird for Android Beta](https://play.google.com/store/apps/details?id=net.thunderbird.android.beta) + ([GitHub Repository](https://github.com/thunderbird/thunderbird-android/)) Good privacy browsers: @@ -44,7 +47,7 @@ Browser which are better than Google Chrome: Other applications: - [FairEmail](https://github.com/M66B/FairEmail) -- [K-9 Mail / Thunderbird Android](https://github.com/k9mail/k9mail.app) +- [K-9 Mail](https://k9mail.app) - [Orbot](https://github.com/guardianproject/orbot) FFUpdater checks for updates in the background and downloads them as well. Apps can be updated without user diff --git a/ffupdater/src/main/AndroidManifest.xml b/ffupdater/src/main/AndroidManifest.xml index 655a2bc21..4b8f8bbc7 100644 --- a/ffupdater/src/main/AndroidManifest.xml +++ b/ffupdater/src/main/AndroidManifest.xml @@ -59,6 +59,8 @@ + + diff --git a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/App.kt b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/App.kt index 5d157e073..a84539081 100644 --- a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/App.kt +++ b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/App.kt @@ -26,6 +26,8 @@ import de.marmaro.krt.ffupdater.app.impl.MullFromRepo import de.marmaro.krt.ffupdater.app.impl.Orbot import de.marmaro.krt.ffupdater.app.impl.PrivacyBrowser import de.marmaro.krt.ffupdater.app.impl.Thorium +import de.marmaro.krt.ffupdater.app.impl.ThunderbirdRelease +import de.marmaro.krt.ffupdater.app.impl.ThunderbirdBeta import de.marmaro.krt.ffupdater.app.impl.TorBrowser import de.marmaro.krt.ffupdater.app.impl.TorBrowserAlpha import de.marmaro.krt.ffupdater.app.impl.Vivaldi @@ -56,6 +58,8 @@ enum class App { ORBOT, PRIVACY_BROWSER, THORIUM, + THUNDERBIRD, + THUNDERBIRD_BETA, TOR_BROWSER, TOR_BROWSER_ALPHA, VIVALDI, @@ -88,6 +92,8 @@ enum class App { ORBOT -> Orbot PRIVACY_BROWSER -> PrivacyBrowser THORIUM -> Thorium + THUNDERBIRD -> ThunderbirdRelease + THUNDERBIRD_BETA -> ThunderbirdBeta TOR_BROWSER -> TorBrowser TOR_BROWSER_ALPHA -> TorBrowserAlpha VIVALDI -> Vivaldi diff --git a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxBeta.kt b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxBeta.kt index 7540a116f..d56ef9c22 100644 --- a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxBeta.kt +++ b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxBeta.kt @@ -24,8 +24,8 @@ object FirefoxBeta : AppBase() { override val packageName = "org.mozilla.firefox_beta" override val title = R.string.firefox_beta__title override val description = R.string.firefox_beta__description - override val installationWarning = R.string.firefox_beta__warning - override val downloadSource = "Github" + override val installationWarning = R.string.generic_beta__warning + override val downloadSource = "Mozilla Archive" override val icon = R.drawable.ic_logo_firefox_beta override val minApiLevel = Build.VERSION_CODES.LOLLIPOP override val supportedAbis = ARM32_ARM64_X86_X64 diff --git a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxFocus.kt b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxFocus.kt index 49b097a37..9aaab5965 100644 --- a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxFocus.kt +++ b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxFocus.kt @@ -24,7 +24,7 @@ object FirefoxFocus : AppBase() { override val packageName = "org.mozilla.focus" override val title = R.string.firefox_focus__title override val description = R.string.firefox_focus__description - override val downloadSource = "GitHub" + override val downloadSource = "Mozilla Archive" override val icon = R.drawable.ic_logo_firefox_focus_klar override val minApiLevel = Build.VERSION_CODES.LOLLIPOP override val supportedAbis = ARM32_ARM64_X86_X64 diff --git a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxFocusBeta.kt b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxFocusBeta.kt index 9fb14075b..aff3b8f09 100644 --- a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxFocusBeta.kt +++ b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxFocusBeta.kt @@ -25,7 +25,7 @@ object FirefoxFocusBeta : AppBase() { override val title = R.string.firefox_focus_beta__title override val description = R.string.firefox_focus_beta__description override val installationWarning = R.string.generic_app_warning__beta_version - override val downloadSource = "GitHub" + override val downloadSource = "Mozilla Archive" override val icon = R.drawable.ic_logo_firefox_focus_beta override val minApiLevel = Build.VERSION_CODES.LOLLIPOP override val supportedAbis = ARM32_ARM64_X86_X64 diff --git a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxKlar.kt b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxKlar.kt index 23b861604..cc43f30ae 100644 --- a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxKlar.kt +++ b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxKlar.kt @@ -24,7 +24,7 @@ object FirefoxKlar : AppBase() { override val packageName = "org.mozilla.klar" override val title = R.string.firefox_klar__title override val description = R.string.firefox_klar__description - override val downloadSource = "GitHub" + override val downloadSource = "Mozilla Archive" override val icon = R.drawable.ic_logo_firefox_focus_klar override val minApiLevel = Build.VERSION_CODES.LOLLIPOP override val supportedAbis = ARM32_ARM64_X86_X64 diff --git a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxRelease.kt b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxRelease.kt index 8cae27c8c..d61a9b324 100644 --- a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxRelease.kt +++ b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/FirefoxRelease.kt @@ -25,7 +25,7 @@ object FirefoxRelease : AppBase() { override val title = R.string.firefox_release__title override val description = R.string.firefox_release__description override val installationWarning = R.string.firefox_release__warning - override val downloadSource = "GitHub" + override val downloadSource = "Mozilla Archive" override val icon = R.drawable.ic_logo_firefox_release override val minApiLevel = Build.VERSION_CODES.LOLLIPOP override val supportedAbis = ARM32_ARM64_X86_X64 diff --git a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/ThunderbirdBeta.kt b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/ThunderbirdBeta.kt new file mode 100644 index 000000000..032b7c1a1 --- /dev/null +++ b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/ThunderbirdBeta.kt @@ -0,0 +1,61 @@ +package de.marmaro.krt.ffupdater.app.impl + +import android.content.Context +import android.os.Build +import androidx.annotation.Keep +import androidx.annotation.MainThread +import de.marmaro.krt.ffupdater.R +import de.marmaro.krt.ffupdater.app.App +import de.marmaro.krt.ffupdater.app.entity.DisplayCategory.FROM_MOZILLA +import de.marmaro.krt.ffupdater.app.entity.LatestVersion +import de.marmaro.krt.ffupdater.app.entity.Version +import de.marmaro.krt.ffupdater.device.DeviceAbiExtractor +import de.marmaro.krt.ffupdater.network.exceptions.NetworkException +import de.marmaro.krt.ffupdater.network.github.GithubConsumer +import de.marmaro.krt.ffupdater.network.website.MozillaArchiveConsumer +import de.marmaro.krt.ffupdater.settings.DeviceSettingsHelper + +/** + * https://github.com/k9mail/k9mail.app + * https://github.com/thunderbird/thunderbird-android/releases + * https://api.github.com/repos/thunderbird/thunderbird-android/releases + */ +@Keep +object ThunderbirdBeta : AppBase() { + override val app = App.THUNDERBIRD_BETA + override val packageName = "net.thunderbird.android.beta" + override val title = R.string.thunderbird_beta__title + override val description = R.string.thunderbird__description + override val installationWarning = R.string.generic_beta__warning + override val downloadSource = "Mozilla Archive" + override val icon = R.drawable.ic_logo_thunderbird_beta + override val minApiLevel = Build.VERSION_CODES.LOLLIPOP + override val supportedAbis = ARM32_ARM64_X86_X64 + override val signatureHash = "056bfafb450249502fd9226228704c2529e1b822da06760d47a85c9557741fbd" + override val projectPage = "https://github.com/thunderbird/thunderbird-android" + override val displayCategory = listOf(FROM_MOZILLA) + override val hostnameForInternetCheck = "https://api.github.com" + + @MainThread + @Throws(NetworkException::class) + override suspend fun fetchLatestUpdate(context: Context): LatestVersion { + val version = findLatestVersion() + val page = "https://archive.mozilla.org/pub/thunderbird-mobile/android/releases/$version/" + val downloadUrl = "${page}thunderbird-$version.apk" + val dateTime = MozillaArchiveConsumer.findDateTimeFromPage(page) + return LatestVersion( + downloadUrl = downloadUrl, + version = Version(version), + publishDate = dateTime.toString(), + exactFileSizeBytesOfDownload = null, + fileHash = null, + ) + } + + private suspend fun findLatestVersion(): String { + val url = "https://archive.mozilla.org/pub/thunderbird-mobile/android/releases/" + val versionRegex = Regex("""(\d+)\.(\d+b\d+)""") + val version = MozillaArchiveConsumer.findLatestVersion(url, versionRegex) + return version + } +} \ No newline at end of file diff --git a/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/ThunderbirdRelease.kt b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/ThunderbirdRelease.kt new file mode 100644 index 000000000..ff2af675a --- /dev/null +++ b/ffupdater/src/main/java/de/marmaro/krt/ffupdater/app/impl/ThunderbirdRelease.kt @@ -0,0 +1,61 @@ +package de.marmaro.krt.ffupdater.app.impl + +import android.content.Context +import android.os.Build +import androidx.annotation.Keep +import androidx.annotation.MainThread +import de.marmaro.krt.ffupdater.R +import de.marmaro.krt.ffupdater.app.App +import de.marmaro.krt.ffupdater.app.entity.DisplayCategory.FROM_MOZILLA +import de.marmaro.krt.ffupdater.app.entity.LatestVersion +import de.marmaro.krt.ffupdater.app.entity.Version +import de.marmaro.krt.ffupdater.device.DeviceAbiExtractor +import de.marmaro.krt.ffupdater.network.exceptions.NetworkException +import de.marmaro.krt.ffupdater.network.github.GithubConsumer +import de.marmaro.krt.ffupdater.network.website.MozillaArchiveConsumer +import de.marmaro.krt.ffupdater.settings.DeviceSettingsHelper + +/** + * https://github.com/k9mail/k9mail.app + * https://github.com/thunderbird/thunderbird-android/releases + * https://api.github.com/repos/thunderbird/thunderbird-android/releases + */ +@Keep +object ThunderbirdRelease : AppBase() { + override val app = App.THUNDERBIRD + override val packageName = "net.thunderbird.android" + override val title = R.string.thunderbird__title + override val description = R.string.thunderbird__description + override val installationWarning: Int? = null + override val downloadSource = "Mozilla Archive" + override val icon = R.drawable.ic_logo_thunderbird + override val minApiLevel = Build.VERSION_CODES.LOLLIPOP + override val supportedAbis = ARM32_ARM64_X86_X64 + override val signatureHash = "b6524779b3dbbc5ac17a5ac271ddb29dcfbf723578c238e03c3c217811356dd1" + override val projectPage = "https://github.com/thunderbird/thunderbird-android" + override val displayCategory = listOf(FROM_MOZILLA) + override val hostnameForInternetCheck = "https://api.github.com" + + @MainThread + @Throws(NetworkException::class) + override suspend fun fetchLatestUpdate(context: Context): LatestVersion { + val version = findLatestVersion() + val page = "https://archive.mozilla.org/pub/thunderbird-mobile/android/releases/$version/" + val downloadUrl = "${page}thunderbird-$version.apk" + val dateTime = MozillaArchiveConsumer.findDateTimeFromPage(page) + return LatestVersion( + downloadUrl = downloadUrl, + version = Version(version), + publishDate = dateTime.toString(), + exactFileSizeBytesOfDownload = null, + fileHash = null, + ) + } + + private suspend fun findLatestVersion(): String { + val url = "https://archive.mozilla.org/pub/thunderbird-mobile/android/releases/" + val versionRegex = Regex("""(\d+)\.(\d+)\.?(\d+)?""") + val version = MozillaArchiveConsumer.findLatestVersion(url, versionRegex) + return version + } +} \ No newline at end of file diff --git a/ffupdater/src/main/res/drawable/ic_logo_thunderbird.png b/ffupdater/src/main/res/drawable/ic_logo_thunderbird.png new file mode 100644 index 000000000..9fe8d0dbf Binary files /dev/null and b/ffupdater/src/main/res/drawable/ic_logo_thunderbird.png differ diff --git a/ffupdater/src/main/res/drawable/ic_logo_thunderbird_beta.png b/ffupdater/src/main/res/drawable/ic_logo_thunderbird_beta.png new file mode 100644 index 000000000..784354ce7 Binary files /dev/null and b/ffupdater/src/main/res/drawable/ic_logo_thunderbird_beta.png differ diff --git a/ffupdater/src/main/res/values/strings.xml b/ffupdater/src/main/res/values/strings.xml index ddc50b5d6..e6e83f415 100644 --- a/ffupdater/src/main/res/values/strings.xml +++ b/ffupdater/src/main/res/values/strings.xml @@ -9,6 +9,7 @@ Available: %1$s Please report this error. Click to view the error report. Background update check failed + - This is a beta app, designed for developers and testers. It may contain various bugs that can affect your experience. Privately browse the internet, for free! The Brave Private Browser App is your fast, free, and safe private web browser with ad blocker and pop-up blocker. Privately browse and search the internet without being tracked by advertisers, malware and pop-ups. Brave Private Browser - Brave uses the technical foundation of Google Chrome and thus indirectly supports the monopoly position of the Chromium render engine.\n- Due to its Basic Attention Token BAT on the Ethereum blockchain the project has ties with cryptocurrency. Blockchains have many problems and should be avoided in my view. @@ -48,7 +49,6 @@ Background errors Firefox Browser for Android is automatically private and incredibly fast. Thousands of online trackers are following you every day, collecting information about where you go online and slowing down your speed. Firefox blocks over 2000 of these trackers by default and there are ad blocker add-ons available if you want to customize your browser even more. With Firefox, you’ll get the security you deserve and the speed you need in a private, mobile browser. Firefox for Android Beta - - This app is designed for developers and testers. It may contain various bugs that can affect your usual work with the browser. This is a modification of the Firefox browser aimed to increase privacy. Firefox Focus Firefox Klar is developed for Germany, Austria and Switzerland, but can be used by users in any country. It is very similar to Firefox Focus, but the name was changed in German-speaking countries to avoid confusion with the magazine Focus by Hubert Burda Media group. Unlike Firefox Focus, Firefox Klar has telemetry disabled by default due to strict German privacy laws. @@ -295,6 +295,9 @@ - Thorium uses the technical foundation of Google Chrome and thus indirectly supports the monopoly position of the Chromium render engine. K-9 Mail Full-featured email client + Thunderbird: Free Your Inbox + Thunderbird Beta for Testers + Thunderbird is a powerful, privacy-focused email app. Effortlessly manage multiple email accounts from one app, with a Unified Inbox option for maximum productivity. Built on open-source technology and supported by a dedicated team of developers alongside a global community of volunteers, Thunderbird never treats your private data as a product. Supported solely by financial contributions from our users, so you never have to see ads mixed in with your emails again. FairEmail Fully featured, open source, privacy friendly email app for Android Self description: