diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b86273d942..b589d56e9f 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 78c9588e5a..11c42166b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,7 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'de.undercouch.download' +plugins { + id 'com.android.application' + id 'de.undercouch.download' +} def getVersionCode = { -> return 2315 } def getRevision = { -> return "a" } @@ -100,11 +101,12 @@ android { // https://developer.android.com/studio/write/java8-support#groovy // sudo update-alternatives --install /usr/bin/java java /usr/local/android-studio/jbr/bin/java 1 coreLibraryDesugaringEnabled = true - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 } - kotlinOptions { - jvmTarget = '1.8' + + java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } externalNativeBuild { @@ -177,7 +179,7 @@ android { release { debuggable = false minifyEnabled = true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig = signingConfigs.release buildConfigField "String", "TX_URI", "\"\"" buildConfigField "String", "GPA_URI", "\"\"" @@ -188,7 +190,7 @@ android { applicationIdSuffix '.debug' debuggable = true minifyEnabled = false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' buildConfigField "String", "TX_URI", localProperties.getProperty("paypal.uri", "\"\"") buildConfigField "String", "GPA_URI", localProperties.getProperty("gpa.uri", "\"\"") buildConfigField "String", "INFO_URI", localProperties.getProperty("info.uri", "\"\"") @@ -348,42 +350,18 @@ android { } } - variantFilter { variant -> - def flavors = variant.flavors*.name - // Builds: release, debug - // Flavors: github, large, fdroid, play - if (variant.buildType.name == "debug" && - (flavors.contains("amazon") || - flavors.contains("fdroid") || - flavors.contains("large") || - flavors.contains("play"))) { - setIgnore(true) + androidComponents { + beforeVariants(selector().all()) { variantBuilder -> + def flavors = variantBuilder.productFlavors.collect { it.second } + if (variantBuilder.buildType == "debug" && + (flavors.contains("amazon") || + flavors.contains("fdroid") || + flavors.contains("large") || + flavors.contains("play"))) { + variantBuilder.enable = false + } } } - - // https://stackoverflow.com/questions/28948538/ - applicationVariants.configureEach { variant -> - if (variant.buildType.name == "debug") - variant.buildConfigField "String", "MXTOOLBOX_URI", "\"https://mxtoolbox.com\"" - else - variant.buildConfigField "String", "MXTOOLBOX_URI", "\"\"" - - //if (variant.getBuildType().isMinifyEnabled()) - // variant.assembleProvider.get().doLast { - // for (file in variant.getMappingFileProvider().get().files) - // if (file != null && file.exists()) { - // def dir = "${rootDir}/app/schemas/mapping" - // def name = "$archivesBaseName-$variant.baseName-$file.name" - // def target = new File(dir, name) - // if (!target.exists()) - // copy { - // from file - // into dir - // rename { String fileName -> name } - // } - // } - // } - } } tasks.register('copyMarkdown', Copy) { @@ -487,14 +465,6 @@ tasks.register('upload', Exec) { "filename=FairEmail-v1." + getVersionCode() + getRevision() + "-" + target + "-release.apk" } -repositories { - google() - mavenCentral() - maven { url = "https://jitpack.io" } - //maven { url "https://oss.sonatype.org/content/repositories/snapshots" } - //maven { url "https://jakarta.oss.sonatype.org/content/repositories/snapshots/" } -} - configurations.configureEach { // Workaround https://issuetracker.google.com/issues/138441698 // Support @69c481c39a17d4e1e44a4eb298bb81c48f226eef diff --git a/app/src/amazon/AndroidManifest.xml b/app/src/amazon/AndroidManifest.xml index 070c14acd4..80f185cad7 100644 --- a/app/src/amazon/AndroidManifest.xml +++ b/app/src/amazon/AndroidManifest.xml @@ -116,7 +116,6 @@ android:backupAgent=".FairEmailBackupAgent" android:dataExtractionRules="@xml/data_extraction_rules" android:description="@string/app_name" - android:extractNativeLibs="true" android:forceDarkAllowed="false" android:fullBackupContent="false" android:icon="@mipmap/ic_launcher" diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml index d1e066285c..050fdb3420 100644 --- a/app/src/debug/AndroidManifest.xml +++ b/app/src/debug/AndroidManifest.xml @@ -125,7 +125,6 @@ android:backupAgent=".FairEmailBackupAgent" android:dataExtractionRules="@xml/data_extraction_rules" android:description="@string/app_name" - android:extractNativeLibs="true" android:forceDarkAllowed="false" android:fullBackupContent="false" android:icon="@mipmap/ic_launcher" diff --git a/app/src/fdroid/AndroidManifest.xml b/app/src/fdroid/AndroidManifest.xml index c800108306..bc3b6189ce 100644 --- a/app/src/fdroid/AndroidManifest.xml +++ b/app/src/fdroid/AndroidManifest.xml @@ -124,7 +124,6 @@ android:backupAgent=".FairEmailBackupAgent" android:dataExtractionRules="@xml/data_extraction_rules" android:description="@string/app_name" - android:extractNativeLibs="true" android:forceDarkAllowed="false" android:fullBackupContent="false" android:icon="@mipmap/ic_launcher" diff --git a/app/src/github/AndroidManifest.xml b/app/src/github/AndroidManifest.xml index 3d3d329711..433abd0c8f 100644 --- a/app/src/github/AndroidManifest.xml +++ b/app/src/github/AndroidManifest.xml @@ -124,7 +124,6 @@ android:backupAgent=".FairEmailBackupAgent" android:dataExtractionRules="@xml/data_extraction_rules" android:description="@string/app_name" - android:extractNativeLibs="true" android:forceDarkAllowed="false" android:fullBackupContent="false" android:icon="@mipmap/ic_launcher" diff --git a/app/src/large/AndroidManifest.xml b/app/src/large/AndroidManifest.xml index 3d3d329711..433abd0c8f 100644 --- a/app/src/large/AndroidManifest.xml +++ b/app/src/large/AndroidManifest.xml @@ -124,7 +124,6 @@ android:backupAgent=".FairEmailBackupAgent" android:dataExtractionRules="@xml/data_extraction_rules" android:description="@string/app_name" - android:extractNativeLibs="true" android:forceDarkAllowed="false" android:fullBackupContent="false" android:icon="@mipmap/ic_launcher" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3494350a74..d2139a6aa6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -116,7 +116,6 @@ android:backupAgent=".FairEmailBackupAgent" android:dataExtractionRules="@xml/data_extraction_rules" android:description="@string/app_name" - android:extractNativeLibs="true" android:forceDarkAllowed="false" android:fullBackupContent="false" android:icon="@mipmap/ic_launcher" diff --git a/app/src/main/java/androidx/recyclerview/selection/SelectionTracker.java b/app/src/main/java/androidx/recyclerview/selection/SelectionTracker.java index 8c86d4adbc..1006e1c37e 100644 --- a/app/src/main/java/androidx/recyclerview/selection/SelectionTracker.java +++ b/app/src/main/java/androidx/recyclerview/selection/SelectionTracker.java @@ -672,7 +672,7 @@ public abstract class SelectionTracker { * * @param toolTypes the tool types to be used * @return this - * @deprecated GestureSelection is best bound to {@link MotionEvent#TOOL_TYPE_FINGER}, + * deprecated GestureSelection is best bound to {@link MotionEvent#TOOL_TYPE_FINGER}, * and only that tool type. This method will be removed in a future release. */ //@Deprecated @@ -710,7 +710,7 @@ public abstract class SelectionTracker { * * @param toolTypes the tool types to be used * @return this - * @deprecated PointerSelection is best bound to {@link MotionEvent#TOOL_TYPE_MOUSE}, + * deprecated PointerSelection is best bound to {@link MotionEvent#TOOL_TYPE_MOUSE}, * and only that tool type. This method will be removed in a future release. */ //@Deprecated diff --git a/app/src/main/java/eu/faircode/email/DnsBlockList.java b/app/src/main/java/eu/faircode/email/DnsBlockList.java index 3573ccd28b..6f1f58e353 100644 --- a/app/src/main/java/eu/faircode/email/DnsBlockList.java +++ b/app/src/main/java/eu/faircode/email/DnsBlockList.java @@ -331,23 +331,6 @@ public class DnsBlockList { return null; } - static void show(Context context, String received) { - String host = DnsBlockList.getFromHost(MimeUtility.unfold(received)); - if (host == null) - return; - - if (host.startsWith("[") && host.endsWith("]")) - host = host.substring(1, host.length() - 1); - - Uri uri = Uri.parse(BuildConfig.MXTOOLBOX_URI) - .buildUpon() - .appendPath("/SuperTool.aspx") - .appendQueryParameter("action", "blacklist:" + host) - .appendQueryParameter("run", "toolpage") - .build(); - Helper.view(context, uri, true); - } - private static class CacheEntry { private final long time; private final boolean blocked; diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index ffb09ed019..01409f5124 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -3180,17 +3180,6 @@ public class HtmlHelper { ssb.append(" \uFFFC"); // Object replacement character ssb.setSpan(new ImageSpan(d), ssb.length() - 1, ssb.length(), 0); - - if (!TextUtils.isEmpty(BuildConfig.MXTOOLBOX_URI)) { - final String header = received[i]; - ClickableSpan click = new ClickableSpan() { - @Override - public void onClick(@NonNull View widget) { - DnsBlockList.show(widget.getContext(), header); - } - }; - ssb.setSpan(click, ssb.length() - 1, ssb.length(), 0); - } } ssb.append('\n'); diff --git a/app/src/main/java/javax/activation/ActivationDataFlavor.java b/app/src/main/java/javax/activation/ActivationDataFlavor.java index 9e62dae742..6dd89a5e5b 100644 --- a/app/src/main/java/javax/activation/ActivationDataFlavor.java +++ b/app/src/main/java/javax/activation/ActivationDataFlavor.java @@ -209,7 +209,7 @@ public class ActivationDataFlavor /*extends DataFlavor*/ { * @param parameterName the parameter name * @param parameterValue the parameter value * @return the normalized parameter value - * @deprecated + * deprecated */ protected String normalizeMimeTypeParameter(String parameterName, String parameterValue) { @@ -226,7 +226,7 @@ public class ActivationDataFlavor /*extends DataFlavor*/ { * * @param mimeType the MIME type * @return the normalized MIME type - * @deprecated + * deprecated */ protected String normalizeMimeType(String mimeType) { return mimeType; diff --git a/app/src/play/AndroidManifest.xml b/app/src/play/AndroidManifest.xml index 4fd91839c0..0e3bcbf66a 100644 --- a/app/src/play/AndroidManifest.xml +++ b/app/src/play/AndroidManifest.xml @@ -114,7 +114,6 @@ android:backupAgent=".FairEmailBackupAgent" android:dataExtractionRules="@xml/data_extraction_rules" android:description="@string/app_name" - android:extractNativeLibs="true" android:forceDarkAllowed="false" android:fullBackupContent="false" android:icon="@mipmap/ic_launcher" diff --git a/build.gradle b/build.gradle index fa9075711e..47e2f7e882 100644 --- a/build.gradle +++ b/build.gradle @@ -1,28 +1,9 @@ -buildscript { - repositories { - google() - mavenCentral() - maven { url = "https://jitpack.io" } - } - - dependencies { - // https://developer.android.com/studio/releases/gradle-plugin - classpath 'com.android.tools.build:gradle:8.13.2' - // https://kotlinlang.org/docs/releases.html#release-details - // https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-gradle-plugin - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.21" - classpath "org.jetbrains.kotlin:kotlin-android-extensions:2.1.21" - // https://plugins.gradle.org/plugin/de.undercouch.download - classpath "de.undercouch:gradle-download-task:5.6.0" - } -} - -allprojects { - repositories { - google() - mavenCentral() - maven { url = "https://jitpack.io" } - } +plugins { + // https://developer.android.com/studio/releases/gradle-plugin + id 'com.android.application' version '9.2.0' apply false + //id 'com.android.library' version '9.2.0' apply false + // https://plugins.gradle.org/plugin/de.undercouch.download + id 'de.undercouch.download' version '5.6.0' apply false } tasks.register('clean', Delete) { diff --git a/colorpicker/build.gradle b/colorpicker/build.gradle index 9a7dbf0cb3..af66c75c17 100644 --- a/colorpicker/build.gradle +++ b/colorpicker/build.gradle @@ -13,7 +13,7 @@ android { buildTypes { release { minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } diff --git a/gradle.properties b/gradle.properties index 69571f9d2c..590756bc91 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,18 @@ android.nonTransitiveRClass=true android.nonFinalResIds=true # https://issuetracker.google.com/issues/332788833 -android.javaCompile.suppressSourceTargetDeprecationWarning=true \ No newline at end of file +android.javaCompile.suppressSourceTargetDeprecationWarning=true +android.r8.strictFullModeForKeepRules=true +android.r8.optimizedResourceShrinking=true + +#android.defaults.buildfeatures.resvalues=true +#android.sdk.defaultTargetSdkToCompileSdkIfUnset=false +#android.enableAppCompileTimeRClass=false +#android.onlyEnableUnitTestForTheTestedBuildType=false +#android.usesSdkInManifest.disallowed=false +#android.uniquePackageNames=false +#android.dependency.useConstraints=true +#android.r8.strictFullModeForKeepRules=false +#android.r8.optimizedResourceShrinking=false +#android.builtInKotlin=false +#android.newDsl=false \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1ddd66ccfe..5419c3c7fa 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -4,5 +4,5 @@ distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists #https://docs.gradle.org/current/userguide/gradle_wrapper.html -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-all.zip #distributionSha256Sum=23e7d37e9bb4f8dabb8a3ea7fdee9dd0428b9b1a71d298aefd65b11dccea220f diff --git a/settings.gradle b/settings.gradle index 247746043c..2c0061fbd0 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,26 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + maven { url = "https://jitpack.io" } + } +} + +rootProject.name = "email" + include ':app', ':colorpicker', ':openpgp-api' project(':colorpicker').projectDir = new File('colorpicker') project(':openpgp-api').projectDir = new File('openpgp-api')