Skip to content

Commit f76dbb5

Browse files
authored
Merge branch 'signalapp:main' into group-description-length
2 parents 74e0cb0 + 9cd2838 commit f76dbb5

File tree

2,335 files changed

+147170
-69274
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,335 files changed

+147170
-69274
lines changed

.editorconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ ktlint_standard_statement-wrapping = disabled
1818
internal:ktlint-suppression = disabled
1919
ktlint_standard_unnecessary-parentheses-before-trailing-lambda = disabled
2020
ktlint_standard_value-parameter-comment = disabled
21+
ktlint_standard_class-signature = disabled
22+
ktlint_standard_function-expression-body = disabled
2123

2224
# Disable ktlint on generated source code, see
2325
# https://github.com/JLLeitschuh/ktlint-gradle/issues/746

.github/workflows/android.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
cache: gradle
2929

3030
- name: Validate Gradle Wrapper
31-
uses: gradle/wrapper-validation-action@v3
31+
uses: gradle/actions/wrapper-validation@v5
3232

3333
- name: Build with Gradle
3434
run: ./gradlew qa

.github/workflows/diffuse.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
run: echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --install "ndk;${{ env.NDK_VERSION }}"
3333

3434
- name: Validate Gradle Wrapper
35-
uses: gradle/wrapper-validation-action@v1
35+
uses: gradle/actions/wrapper-validation@v5
3636

3737
- name: Cache base apk
3838
id: cache-base

.idea/codeStyles/Project.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.tool-versions

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
java 17.0.2
1+
java openjdk-17.0.2
2+
uv latest

app/build.gradle.kts

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ plugins {
1212
alias(libs.plugins.jetbrains.kotlin.android)
1313
alias(libs.plugins.ktlint)
1414
alias(libs.plugins.compose.compiler)
15+
alias(libs.plugins.kotlinx.serialization)
1516
id("androidx.navigation.safeargs")
1617
id("kotlin-parcelize")
1718
id("com.squareup.wire")
@@ -21,14 +22,16 @@ plugins {
2122

2223
apply(from = "static-ips.gradle.kts")
2324

24-
val canonicalVersionCode = 1547
25-
val canonicalVersionName = "7.43.1"
25+
val canonicalVersionCode = 1620
26+
val canonicalVersionName = "7.66.0"
2627
val currentHotfixVersion = 0
2728
val maxHotfixVersions = 100
2829

2930
val keystores: Map<String, Properties?> = mapOf("debug" to loadKeystoreProperties("keystore.debug.properties"))
3031

3132
val selectableVariants = listOf(
33+
"nightlyBackupRelease",
34+
"nightlyBackupSpinner",
3235
"nightlyProdSpinner",
3336
"nightlyProdPerf",
3437
"nightlyProdRelease",
@@ -70,6 +73,8 @@ wire {
7073
protoPath {
7174
srcDir("${project.rootDir}/libsignal-service/src/main/protowire")
7275
}
76+
// Handled by libsignal
77+
prune("signalservice.DecryptionErrorMessage")
7378
}
7479

7580
ktlint {
@@ -210,9 +215,9 @@ android {
210215
buildConfigField("String[]", "SIGNAL_CDSI_IPS", rootProject.extra["cdsi_ips"] as String)
211216
buildConfigField("String[]", "SIGNAL_SVR2_IPS", rootProject.extra["svr2_ips"] as String)
212217
buildConfigField("String", "SIGNAL_AGENT", "\"OWA\"")
213-
buildConfigField("String", "SVR2_MRENCLAVE_LEGACY", "\"9314436a9a144992bb3680770ea5fd7934a7ffd29257844a33763a238903d570\"")
214-
buildConfigField("String", "SVR2_MRENCLAVE", "\"093be9ea32405e85ae28dbb48eb668aebeb7dbe29517b9b86ad4bec4dfe0e6a6\"")
215-
buildConfigField("String", "UNIDENTIFIED_SENDER_TRUST_ROOT", "\"BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF\"")
218+
buildConfigField("String", "SVR2_MRENCLAVE_LEGACY", "\"093be9ea32405e85ae28dbb48eb668aebeb7dbe29517b9b86ad4bec4dfe0e6a6\"")
219+
buildConfigField("String", "SVR2_MRENCLAVE", "\"29cd63c87bea751e3bfd0fbd401279192e2e5c99948b4ee9437eafc4968355fb\"")
220+
buildConfigField("String[]", "UNIDENTIFIED_SENDER_TRUST_ROOTS", "new String[]{ \"BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF\", \"BUkY0I+9+oPgDCn4+Ac6Iu813yvqkDr/ga8DzLxFxuk6\"}")
216221
buildConfigField("String", "ZKGROUP_SERVER_PUBLIC_PARAMS", "\"AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X36nOoGPs54XsEGzPdEV+itQNGUFEjY6X9Uv+Acuks7NpyGvCoKxGwgKgE5XyJ+nNKlyHHOLb6N1NuHyBrZrgtY/JYJHRooo5CEqYKBqdFnmbTVGEkCvJKxLnjwKWf+fEPoWeQFj5ObDjcKMZf2Jm2Ae69x+ikU5gBXsRmoF94GXTLfN0/vLt98KDPnxwAQL9j5V1jGOY8jQl6MLxEs56cwXN0dqCnImzVH3TZT1cJ8SW1BRX6qIVxEzjsSGx3yxF3suAilPMqGRp4ffyopjMD1JXiKR2RwLKzizUe5e8XyGOy9fplzhw3jVzTRyUZTRSZKkMLWcQ/gv0E4aONNqs4P+NameAZYOD12qRkxosQQP5uux6B2nRyZ7sAV54DgFyLiRcq1FvwKw2EPQdk4HDoePrO/RNUbyNddnM/mMgj4FW65xCoT1LmjrIjsv/Ggdlx46ueczhMgtBunx1/w8k8V+l8LVZ8gAT6wkU5J+DPQalQguMg12Jzug3q4TbdHiGCmD9EunCwOmsLuLJkz6EcSYXtrlDEnAM+hicw7iergYLLlMXpfTdGxJCWJmP4zqUFeTTmsmhsjGBt7NiEB/9pFFEB3pSbf4iiUukw63Eo8Aqnf4iwob6X1QviCWuc8t0LUlT9vALgh/f2DPVOOmR0RW6bgRvc7DSF20V/omg+YBw==\"")
217222
buildConfigField("String", "GENERIC_SERVER_PUBLIC_PARAMS", "\"AByD873dTilmOSG0TjKrvpeaKEsUmIO8Vx9BeMmftwUs9v7ikPwM8P3OHyT0+X3EUMZrSe9VUp26Wai51Q9I8mdk0hX/yo7CeFGJyzoOqn8e/i4Ygbn5HoAyXJx5eXfIbqpc0bIxzju4H/HOQeOpt6h742qii5u/cbwOhFZCsMIbElZTaeU+BWMBQiZHIGHT5IE0qCordQKZ5iPZom0HeFa8Yq0ShuEyAl0WINBiY6xE3H/9WnvzXBbMuuk//eRxXgzO8ieCeK8FwQNxbfXqZm6Ro1cMhCOF3u7xoX83QhpN\"")
218223
buildConfigField("String", "BACKUP_SERVER_PUBLIC_PARAMS", "\"AJwNSU55fsFCbgaxGRD11wO1juAs8Yr5GF8FPlGzzvdJJIKH5/4CC7ZJSOe3yL2vturVaRU2Cx0n751Vt8wkj1bozK3CBV1UokxV09GWf+hdVImLGjXGYLLhnI1J2TWEe7iWHyb553EEnRb5oxr9n3lUbNAJuRmFM7hrr0Al0F0wrDD4S8lo2mGaXe0MJCOM166F8oYRQqpFeEHfiLnxA1O8ZLh7vMdv4g9jI5phpRBTsJ5IjiJrWeP0zdIGHEssUeprDZ9OUJ14m0v61eYJMKsf59Bn+mAT2a7YfB+Don9O\"")
@@ -232,7 +237,8 @@ android {
232237
buildConfigField("String", "STRIPE_BASE_URL", "\"https://api.stripe.com/v1\"")
233238
buildConfigField("String", "STRIPE_PUBLISHABLE_KEY", "\"pk_live_6cmGZopuTsV8novGgJJW9JpC00vLIgtQ1D\"")
234239
buildConfigField("boolean", "TRACING_ENABLED", "false")
235-
buildConfigField("boolean", "MESSAGE_BACKUP_RESTORE_ENABLED", "false")
240+
buildConfigField("boolean", "LINK_DEVICE_UX_ENABLED", "false")
241+
buildConfigField("boolean", "USE_STRING_ID", "true")
236242

237243
ndk {
238244
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
@@ -287,6 +293,7 @@ android {
287293
manifestPlaceholders["mapsKey"] = getMapsKey()
288294

289295
buildConfigField("String", "BUILD_VARIANT_TYPE", "\"Debug\"")
296+
buildConfigField("boolean", "LINK_DEVICE_UX_ENABLED", "true")
290297
}
291298

292299
getByName("release") {
@@ -371,7 +378,7 @@ android {
371378
buildConfigField("boolean", "MANAGES_APP_UPDATES", "true")
372379
buildConfigField("String", "APK_UPDATE_MANIFEST_URL", "\"${apkUpdateManifestUrl}\"")
373380
buildConfigField("String", "BUILD_DISTRIBUTION_TYPE", "\"nightly\"")
374-
buildConfigField("boolean", "MESSAGE_BACKUP_RESTORE_ENABLED", "true")
381+
buildConfigField("boolean", "LINK_DEVICE_UX_ENABLED", "true")
375382
}
376383

377384
create("prod") {
@@ -395,9 +402,9 @@ android {
395402
buildConfigField("String", "SIGNAL_CDN3_URL", "\"https://cdn3-staging.signal.org\"")
396403
buildConfigField("String", "SIGNAL_CDSI_URL", "\"https://cdsi.staging.signal.org\"")
397404
buildConfigField("String", "SIGNAL_SVR2_URL", "\"https://svr2.staging.signal.org\"")
398-
buildConfigField("String", "SVR2_MRENCLAVE_LEGACY", "\"38e01eff4fe357dc0b0e8ef7a44b4abc5489fbccba3a78780f3872c277f62bf3\"")
399-
buildConfigField("String", "SVR2_MRENCLAVE", "\"2e8cefe6e3f389d8426adb24e9b7fb7adf10902c96f06f7bbcee36277711ed91\"")
400-
buildConfigField("String", "UNIDENTIFIED_SENDER_TRUST_ROOT", "\"BbqY1DzohE4NUZoVF+L18oUPrK3kILllLEJh2UnPSsEx\"")
405+
buildConfigField("String", "SVR2_MRENCLAVE_LEGACY", "\"2e8cefe6e3f389d8426adb24e9b7fb7adf10902c96f06f7bbcee36277711ed91\"")
406+
buildConfigField("String", "SVR2_MRENCLAVE", "\"a75542d82da9f6914a1e31f8a7407053b99cc99a0e7291d8fbd394253e19b036\"")
407+
buildConfigField("String[]", "UNIDENTIFIED_SENDER_TRUST_ROOTS", "new String[]{\"BbqY1DzohE4NUZoVF+L18oUPrK3kILllLEJh2UnPSsEx\", \"BYhU6tPjqP46KGZEzRs1OL4U39V5dlPJ/X09ha4rErkm\"}")
401408
buildConfigField("String", "ZKGROUP_SERVER_PUBLIC_PARAMS", "\"ABSY21VckQcbSXVNCGRYJcfWHiAMZmpTtTELcDmxgdFbtp/bWsSxZdMKzfCp8rvIs8ocCU3B37fT3r4Mi5qAemeGeR2X+/YmOGR5ofui7tD5mDQfstAI9i+4WpMtIe8KC3wU5w3Inq3uNWVmoGtpKndsNfwJrCg0Hd9zmObhypUnSkfYn2ooMOOnBpfdanRtrvetZUayDMSC5iSRcXKpdlukrpzzsCIvEwjwQlJYVPOQPj4V0F4UXXBdHSLK05uoPBCQG8G9rYIGedYsClJXnbrgGYG3eMTG5hnx4X4ntARBgELuMWWUEEfSK0mjXg+/2lPmWcTZWR9nkqgQQP0tbzuiPm74H2wMO4u1Wafe+UwyIlIT9L7KLS19Aw8r4sPrXZSSsOZ6s7M1+rTJN0bI5CKY2PX29y5Ok3jSWufIKcgKOnWoP67d5b2du2ZVJjpjfibNIHbT/cegy/sBLoFwtHogVYUewANUAXIaMPyCLRArsKhfJ5wBtTminG/PAvuBdJ70Z/bXVPf8TVsR292zQ65xwvWTejROW6AZX6aqucUjlENAErBme1YHmOSpU6tr6doJ66dPzVAWIanmO/5mgjNEDeK7DDqQdB1xd03HT2Qs2TxY3kCK8aAb/0iM0HQiXjxZ9HIgYhbtvGEnDKW5ILSUydqH/KBhW4Pb0jZWnqN/YgbWDKeJxnDbYcUob5ZY5Lt5ZCMKuaGUvCJRrCtuugSMaqjowCGRempsDdJEt+cMaalhZ6gczklJB/IbdwENW9KeVFPoFNFzhxWUIS5ML9riVYhAtE6JE5jX0xiHNVIIPthb458cfA8daR0nYfYAUKogQArm0iBezOO+mPk5vCNWI+wwkyFCqNDXz/qxl1gAntuCJtSfq9OC3NkdhQlgYQ==\"")
402409
buildConfigField("String", "GENERIC_SERVER_PUBLIC_PARAMS", "\"AHILOIrFPXX9laLbalbA9+L1CXpSbM/bTJXZGZiuyK1JaI6dK5FHHWL6tWxmHKYAZTSYmElmJ5z2A5YcirjO/yfoemE03FItyaf8W1fE4p14hzb5qnrmfXUSiAIVrhaXVwIwSzH6RL/+EO8jFIjJ/YfExfJ8aBl48CKHgu1+A6kWynhttonvWWx6h7924mIzW0Czj2ROuh4LwQyZypex4GuOPW8sgIT21KNZaafgg+KbV7XM1x1tF3XA17B4uGUaDbDw2O+nR1+U5p6qHPzmJ7ggFjSN6Utu+35dS1sS0P9N\"")
403410
buildConfigField("String", "BACKUP_SERVER_PUBLIC_PARAMS", "\"AHYrGb9IfugAAJiPKp+mdXUx+OL9zBolPYHYQz6GI1gWjpEu5me3zVNSvmYY4zWboZHif+HG1sDHSuvwFd0QszSwuSF4X4kRP3fJREdTZ5MCR0n55zUppTwfHRW2S4sdQ0JGz7YDQIJCufYSKh0pGNEHL6hv79Agrdnr4momr3oXdnkpVBIp3HWAQ6IbXQVSG18X36GaicI1vdT0UFmTwU2KTneluC2eyL9c5ff8PcmiS+YcLzh0OKYQXB5ZfQ06d6DiINvDQLy75zcfUOniLAj0lGJiHxGczin/RXisKSR8\"")
@@ -406,10 +413,21 @@ android {
406413
buildConfigField("String", "RECAPTCHA_PROOF_URL", "\"https://signalcaptchas.org/staging/challenge/generate.html\"")
407414
buildConfigField("org.signal.libsignal.net.Network.Environment", "LIBSIGNAL_NET_ENV", "org.signal.libsignal.net.Network.Environment.STAGING")
408415
buildConfigField("int", "LIBSIGNAL_LOG_LEVEL", "org.signal.libsignal.protocol.logging.SignalProtocolLogger.DEBUG")
416+
buildConfigField("boolean", "USE_STRING_ID", "false")
409417

410418
buildConfigField("String", "BUILD_ENVIRONMENT_TYPE", "\"Staging\"")
411419
buildConfigField("String", "STRIPE_PUBLISHABLE_KEY", "\"pk_test_sngOd8FnXNkpce9nPXawKrJD00kIDngZkD\"")
412-
buildConfigField("boolean", "MESSAGE_BACKUP_RESTORE_ENABLED", "true")
420+
}
421+
422+
create("backup") {
423+
initWith(getByName("staging"))
424+
425+
dimension = "environment"
426+
427+
applicationIdSuffix = ".backup"
428+
429+
buildConfigField("boolean", "MANAGES_APP_UPDATES", "true")
430+
buildConfigField("String", "BUILD_ENVIRONMENT_TYPE", "\"Backup\"")
413431
}
414432
}
415433

@@ -483,14 +501,14 @@ dependencies {
483501
implementation(project(":device-transfer"))
484502
implementation(project(":image-editor"))
485503
implementation(project(":donations"))
504+
implementation(project(":debuglogs-viewer"))
486505
implementation(project(":contacts"))
487506
implementation(project(":qr"))
488507
implementation(project(":sticky-header-grid"))
489508
implementation(project(":photoview"))
490509
implementation(project(":core-ui"))
491510

492511
implementation(libs.androidx.fragment.ktx)
493-
implementation(libs.androidx.fragment.compose)
494512
implementation(libs.androidx.appcompat) {
495513
version {
496514
strictly("1.6.1")
@@ -540,6 +558,7 @@ dependencies {
540558
}
541559
implementation(libs.google.play.services.maps)
542560
implementation(libs.google.play.services.auth)
561+
implementation(libs.google.signin)
543562
implementation(libs.bundles.media3)
544563
implementation(libs.conscrypt.android)
545564
implementation(libs.signal.aesgcmprovider)
@@ -583,9 +602,11 @@ dependencies {
583602
implementation(libs.rxjava3.rxandroid)
584603
implementation(libs.rxjava3.rxkotlin)
585604
implementation(libs.rxdogtag)
605+
implementation(libs.androidx.credentials)
606+
implementation(libs.androidx.credentials.compat)
607+
implementation(libs.kotlinx.serialization.json)
586608

587-
"playImplementation"(project(":billing"))
588-
"nightlyImplementation"(project(":billing"))
609+
implementation(project(":billing"))
589610

590611
"spinnerImplementation"(project(":spinner"))
591612

@@ -616,6 +637,9 @@ dependencies {
616637
testImplementation(testFixtures(project(":libsignal-service")))
617638
testImplementation(testLibs.espresso.core)
618639
testImplementation(testLibs.kotlinx.coroutines.test)
640+
testImplementation(libs.androidx.compose.ui.test.junit4)
641+
642+
"perfImplementation"(libs.androidx.compose.ui.test.manifest)
619643

620644
androidTestImplementation(platform(libs.androidx.compose.bom))
621645
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
@@ -626,7 +650,6 @@ dependencies {
626650
androidTestImplementation(testLibs.androidx.test.ext.junit.ktx)
627651
androidTestImplementation(testLibs.assertk)
628652
androidTestImplementation(testLibs.mockk.android)
629-
androidTestImplementation(testLibs.square.okhttp.mockserver)
630653
androidTestImplementation(testLibs.diff.utils)
631654

632655
androidTestUtil(testLibs.androidx.test.orchestrator)
@@ -714,13 +737,18 @@ fun getMapsKey(): String {
714737
}
715738

716739
fun Project.languageList(): List<String> {
740+
// In API 35, language codes for Hebrew and Indonesian now use the ISO 639-1 code ("he" and "id").
741+
// However, the value resources still only support the outdated code ("iw" and "in") so we have
742+
// to manually indicate that we support these languages.
743+
val updatedLanguageCodes = listOf("he", "id")
744+
717745
return fileTree("src/main/res") { include("**/strings.xml") }
718746
.map { stringFile -> stringFile.parentFile.name }
719747
.map { valuesFolderName -> valuesFolderName.replace("values-", "") }
720748
.filter { valuesFolderName -> valuesFolderName != "values" }
721749
.map { languageCode -> languageCode.replace("-r", "_") }
722750
.distinct()
723-
.sorted() + "en"
751+
.sorted() + updatedLanguageCodes + "en"
724752
}
725753

726754
fun String.capitalize(): String {

app/lint.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,7 @@
4444

4545
<issue id="OptionalUsedAsFieldOrParameterType" severity="ignore" />
4646
<issue id="SameParameterValue" severity="ignore" />
47+
48+
<!-- Disables check for digital asset linking in manifest. It's not needed, since we are not using CredentialManager for passkey support. -->
49+
<issue id="CredManMissingDal" severity="ignore" />
4750
</lint>

app/proguard/proguard.cfg

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
-keepclassmembers class ** {
1111
public void onEvent*(**);
1212
}
13-
-keep class org.signal.libsignal.internal.CompletableFuture** { *; }
1413

1514
# Protobuf lite
1615
-keep class * extends com.google.protobuf.GeneratedMessageLite { *; }
36 Bytes
Binary file not shown.
143 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)