Merge branch 'master' into master-android

This commit is contained in:
Evgeny Poberezkin
2024-04-26 15:42:30 +01:00
8 changed files with 72 additions and 70 deletions

View File

@@ -32,14 +32,22 @@ struct ProfileImage: View {
}
}
private let squareToCircleRatio = 0.935
private let radiusFactor = (1 - squareToCircleRatio) / 50
@ViewBuilder func clipProfileImage(_ img: Image, size: CGFloat, radius: Double) -> some View {
let v = img.resizable().frame(width: size, height: size)
if radius <= 0 {
v.clipShape(Rectangle())
} else if radius >= 50 {
v.clipShape(Circle())
let v = img.resizable()
if radius >= 50 {
v.frame(width: size, height: size).clipShape(Circle())
} else if radius <= 0 {
let sz = size * squareToCircleRatio
v.frame(width: sz, height: sz).padding((size - sz) / 2)
} else {
v.clipShape(RoundedRectangle(cornerRadius: size * radius / 100, style: .continuous))
let sz = size * (squareToCircleRatio + radius * radiusFactor)
v.frame(width: sz, height: sz)
.clipShape(RoundedRectangle(cornerRadius: sz * radius / 100, style: .continuous))
.padding((size - sz) / 2)
}
}

View File

@@ -29,11 +29,11 @@
5C116CDC27AABE0400E66D01 /* ContactRequestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C116CDB27AABE0400E66D01 /* ContactRequestView.swift */; };
5C13730B28156D2700F43030 /* ContactConnectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C13730A28156D2700F43030 /* ContactConnectionView.swift */; };
5C1A4C1E27A715B700EAD5AD /* ChatItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1A4C1D27A715B700EAD5AD /* ChatItemView.swift */; };
5C2217A22BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C22179D2BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a */; };
5C2217A32BD7132100A8B0E7 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C22179E2BD7132100A8B0E7 /* libgmpxx.a */; };
5C2217A42BD7132100A8B0E7 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C22179F2BD7132100A8B0E7 /* libffi.a */; };
5C2217A52BD7132100A8B0E7 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217A02BD7132100A8B0E7 /* libgmp.a */; };
5C2217A62BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217A12BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a */; };
5C2217B62BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217B12BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a */; };
5C2217B72BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217B22BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a */; };
5C2217B82BDA9B7000A8B0E7 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217B32BDA9B7000A8B0E7 /* libgmp.a */; };
5C2217B92BDA9B7000A8B0E7 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217B42BDA9B7000A8B0E7 /* libgmpxx.a */; };
5C2217BA2BDA9B7000A8B0E7 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2217B52BDA9B7000A8B0E7 /* libffi.a */; };
5C2E260727A2941F00F70299 /* SimpleXAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260627A2941F00F70299 /* SimpleXAPI.swift */; };
5C2E260B27A30CFA00F70299 /* ChatListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260A27A30CFA00F70299 /* ChatListView.swift */; };
5C2E260F27A30FDC00F70299 /* ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260E27A30FDC00F70299 /* ChatView.swift */; };
@@ -284,11 +284,11 @@
5C13730A28156D2700F43030 /* ContactConnectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactConnectionView.swift; sourceTree = "<group>"; };
5C13730C2815740A00F43030 /* DebugJSON.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = DebugJSON.playground; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
5C1A4C1D27A715B700EAD5AD /* ChatItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemView.swift; sourceTree = "<group>"; };
5C22179D2BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a"; sourceTree = "<group>"; };
5C22179E2BD7132100A8B0E7 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
5C22179F2BD7132100A8B0E7 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
5C2217A02BD7132100A8B0E7 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
5C2217A12BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a"; sourceTree = "<group>"; };
5C2217B12BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a"; sourceTree = "<group>"; };
5C2217B22BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a"; sourceTree = "<group>"; };
5C2217B32BDA9B7000A8B0E7 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
5C2217B42BDA9B7000A8B0E7 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
5C2217B52BDA9B7000A8B0E7 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
5C245F3C2B501E98001CC39F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = "<group>"; };
5C245F3D2B501F13001CC39F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = "tr.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = "<group>"; };
5C245F3E2B501F13001CC39F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
@@ -535,13 +535,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
5C2217A32BD7132100A8B0E7 /* libgmpxx.a in Frameworks */,
5C2217B92BDA9B7000A8B0E7 /* libgmpxx.a in Frameworks */,
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
5C2217A22BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a in Frameworks */,
5C2217A42BD7132100A8B0E7 /* libffi.a in Frameworks */,
5C2217A52BD7132100A8B0E7 /* libgmp.a in Frameworks */,
5C2217A62BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a in Frameworks */,
5C2217B82BDA9B7000A8B0E7 /* libgmp.a in Frameworks */,
5C2217B62BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a in Frameworks */,
5C2217BA2BDA9B7000A8B0E7 /* libffi.a in Frameworks */,
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
5C2217B72BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -605,11 +605,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup;
children = (
5C22179F2BD7132100A8B0E7 /* libffi.a */,
5C2217A02BD7132100A8B0E7 /* libgmp.a */,
5C22179E2BD7132100A8B0E7 /* libgmpxx.a */,
5C22179D2BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD-ghc9.6.3.a */,
5C2217A12BD7132100A8B0E7 /* libHSsimplex-chat-5.7.0.3-1gdwVzNNUlPBAUpdkOuWsD.a */,
5C2217B52BDA9B7000A8B0E7 /* libffi.a */,
5C2217B32BDA9B7000A8B0E7 /* libgmp.a */,
5C2217B42BDA9B7000A8B0E7 /* libgmpxx.a */,
5C2217B12BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV-ghc9.6.3.a */,
5C2217B22BDA9B7000A8B0E7 /* libHSsimplex-chat-5.7.0.4-9w48ibH0KftLfWfQjuLznV.a */,
);
path = Libraries;
sourceTree = "<group>";
@@ -1554,7 +1554,7 @@
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 209;
CURRENT_PROJECT_VERSION = 210;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
@@ -1603,7 +1603,7 @@
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 209;
CURRENT_PROJECT_VERSION = 210;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
@@ -1689,7 +1689,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 209;
CURRENT_PROJECT_VERSION = 210;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GCC_OPTIMIZATION_LEVEL = s;
@@ -1726,7 +1726,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 209;
CURRENT_PROJECT_VERSION = 210;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_CODE_COVERAGE = NO;
@@ -1763,7 +1763,7 @@
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 209;
CURRENT_PROJECT_VERSION = 210;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -1814,7 +1814,7 @@
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 209;
CURRENT_PROJECT_VERSION = 210;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;

View File

@@ -18,11 +18,11 @@ import androidx.compose.ui.unit.*
import dev.icerock.moko.resources.compose.painterResource
import dev.icerock.moko.resources.compose.stringResource
import chat.simplex.common.model.ChatInfo
import chat.simplex.common.platform.appPreferences
import chat.simplex.common.platform.base64ToBitmap
import chat.simplex.common.platform.*
import chat.simplex.common.ui.theme.*
import chat.simplex.res.MR
import dev.icerock.moko.resources.ImageResource
import kotlin.math.max
@Composable
fun ChatInfoImage(chatInfo: ChatInfo, size: Dp, iconColor: Color = MaterialTheme.colors.secondaryVariant) {
@@ -81,7 +81,7 @@ fun ProfileImage(
imageBitmap,
stringResource(MR.strings.image_descr_profile_image),
contentScale = ContentScale.Crop,
modifier = Modifier.size(size).padding(size / 12).clip(ProfileIconShape())
modifier = ProfileIconModifier(size)
)
}
}
@@ -93,17 +93,31 @@ fun ProfileImage(size: Dp, image: ImageResource) {
painterResource(image),
stringResource(MR.strings.image_descr_profile_image),
contentScale = ContentScale.Crop,
modifier = Modifier.size(size).padding(size / 12).clip(ProfileIconShape())
modifier = ProfileIconModifier(size)
)
}
private const val squareToCircleRatio = 0.935f
private const val radiusFactor = (1 - squareToCircleRatio) / 50
@Composable
fun ProfileIconShape(): Shape {
fun ProfileIconModifier(size: Dp, padding: Boolean = true): Modifier {
val percent = remember { appPreferences.profileImageCornerRadius.state }
val r = max(0f, percent.value)
val pad = if (padding) size / 12 else 0.dp
val m = Modifier.size(size)
return when {
percent.value <= 0 -> RectangleShape
percent.value >= 50 -> CircleShape
else -> RoundedCornerShape(PercentCornerSize(percent.value))
r >= 50 ->
m.padding(pad).clip(CircleShape)
r <= 0 -> {
val sz = (size - 2 * pad) * squareToCircleRatio
m.padding((size - sz) / 2)
}
else -> {
val sz = (size - 2 * pad) * (squareToCircleRatio + r * radiusFactor)
m.padding((size - sz) / 2).clip(RoundedCornerShape(size = sz * r / 100))
}
}
}
@@ -131,31 +145,11 @@ fun ProfileImageForActiveCall(
imageBitmap,
stringResource(MR.strings.image_descr_profile_image),
contentScale = ContentScale.Crop,
modifier = Modifier.size(size).clip(ProfileIconShape())
modifier = ProfileIconModifier(size, padding = false)
)
}
}
/** (c) [androidx.compose.foundation.shape.CornerSize] */
private data class PercentCornerSize(
private val percent: Float
) : CornerSize, InspectableValue {
init {
if (percent < 0 || percent > 100) {
throw IllegalArgumentException("The percent should be in the range of [0, 100]")
}
}
override fun toPx(shapeSize: Size, density: Density) =
shapeSize.minDimension * (percent / 100f)
override fun toString(): String = "CornerSize(size = $percent%)"
override val valueOverride: String
get() = "$percent%"
}
@Preview
@Composable
fun PreviewChatInfoImage() {

View File

@@ -26,11 +26,11 @@ android.enableJetifier=true
kotlin.mpp.androidSourceSetLayoutVersion=2
kotlin.jvm.target=11
android.version_name=5.7-beta.2
android.version_code=198
android.version_name=5.7-beta.3
android.version_code=199
desktop.version_name=5.7-beta.2
desktop.version_code=39
desktop.version_name=5.7-beta.3
desktop.version_code=40
kotlin.version=1.9.23
gradle.plugin.version=8.2.0

View File

@@ -1,5 +1,5 @@
name: simplex-chat
version: 5.7.0.4
version: 5.7.0.5
#synopsis:
#description:
homepage: https://github.com/simplex-chat/simplex-chat#readme

View File

@@ -3,7 +3,7 @@
# libsimplex.so and libsupport.so binaries should be in ~/Downloads folder in their directories based on archive name
mkdir -p ./apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a/
rm ./apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a/*
unzip -o ~/Downloads/pkg-aarch64-android-libsupport.zip -d ./apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a
unzip -o ~/Downloads/pkg-aarch64-android-libsupport.zip -d ./apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a/
unzip -o ~/Downloads/pkg-aarch64-android-libsimplex.zip -d ./apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a/
mkdir -p ./apps/multiplatform/common/src/commonMain/cpp/android/libs/armeabi-v7a/

View File

@@ -5,7 +5,7 @@ cabal-version: 1.12
-- see: https://github.com/sol/hpack
name: simplex-chat
version: 5.7.0.4
version: 5.7.0.5
category: Web, System, Services, Cryptography
homepage: https://github.com/simplex-chat/simplex-chat#readme
author: simplex.chat

View File

@@ -72,11 +72,11 @@ import UnliftIO.Directory (copyFile, createDirectoryIfMissing, doesDirectoryExis
-- when acting as host
minRemoteCtrlVersion :: AppVersion
minRemoteCtrlVersion = AppVersion [5, 6, 0, 0]
minRemoteCtrlVersion = AppVersion [5, 7, 0, 3]
-- when acting as controller
minRemoteHostVersion :: AppVersion
minRemoteHostVersion = AppVersion [5, 7, 0, 0]
minRemoteHostVersion = AppVersion [5, 7, 0, 3]
currentAppVersion :: AppVersion
currentAppVersion = AppVersion SC.version