Compare commits

...

42 Commits

Author SHA1 Message Date
adbenitez a252eec698 add "Get in on F-Droid" badge 2024-08-31 01:24:09 +02:00
adbenitez 6fa725e8ff update version number 2024-08-30 16:27:33 +02:00
adbenitez efb38db3ef Merge remote-tracking branch 'upstream/main' 2024-08-30 16:24:33 +02:00
Asiel Díaz Benítez 8ef136d6b2 Merge pull request #3272 from deltachat/adb/issue-3266
allow to delete selected account
2024-08-30 16:18:06 +02:00
adbenitez 3412dc8a0f Merge remote-tracking branch 'upstream/main' 2024-08-30 16:17:44 +02:00
adbenitez 6cb1c0fad4 update release.yml 2024-08-30 15:58:55 +02:00
adbenitez bfb1fc0281 allow to delete selected account 2024-08-29 21:09:56 +02:00
adbenitez 1ae69feb80 tweak code 2024-08-29 17:00:49 +02:00
adbenitez 19fac45062 update scripts/ndk-make.sh, remove ROOT_DIR 2024-08-29 15:40:59 +02:00
adbenitez 8c7d1da9d9 update scripts/ndk-make.sh 2024-08-29 15:27:06 +02:00
adbenitez 2376777bba improve reproducible build 2024-08-29 14:04:55 +02:00
adbenitez 21d6c3c3b8 fix bug in scripts/ndk-make-fdroid.sh, also rename all vars to uppercase 2024-08-29 02:07:28 +02:00
adbenitez a3976846f6 fix: create symbolic link for sdk in ndk-make.sh 2024-08-28 21:07:15 +02:00
adbenitez f9d21b75ee use symbolic link for ANDROID_NDK_ROOT 2024-08-28 20:52:31 +02:00
Asiel Díaz Benítez fd8311cfc9 Merge pull request #3269 from deltachat/adb/issue-3199
tweak account selection style
2024-08-28 20:43:47 +02:00
adbenitez 54f487b33d use bash instead of sh in scripts/ndk-make-fdroid.sh 2024-08-28 19:49:05 +02:00
Asiel Díaz Benítez 973e278d71 Merge pull request #3267 from deltachat/adb/issue-3144
add monochrome launcher icon
2024-08-28 19:15:06 +02:00
adbenitez ed7f3db2a4 add scripts/ndk-make-fdroid.sh 2024-08-28 18:54:09 +02:00
adbenitez 2ce614dc55 try to make core build reproducible 2024-08-28 15:31:32 +02:00
adbenitez 8a044221b1 tweak ndk-make.sh and Android.mk 2024-08-27 18:43:01 +02:00
adbenitez e9317ab641 tweak RUSTFLAGS 2024-08-27 16:51:52 +02:00
adbenitez a278121498 keep trying reproducible core build 2024-08-27 16:31:47 +02:00
adbenitez c060810a82 try to make core building reproducible 2024-08-27 15:03:24 +02:00
adbenitez 95f09a67f5 select item normally instead of using checkbox 2024-08-27 13:12:52 +02:00
adbenitez 78ad04bd7b simplify AccountSelectionListItem.bind() 2024-08-27 12:40:40 +02:00
Asiel Díaz Benítez b4c15ad45f Merge pull request #27 from ArcaneChat/use-same-app-id-for-foss
use same app id for FOSS flavor
2024-08-27 11:16:00 +02:00
adbenitez 744414baeb do not strip libs 2024-08-27 11:15:21 +02:00
adbenitez cda7bcb247 use same app id for FOSS flavor 2024-08-27 10:56:08 +02:00
adbenitez 24e8fc7d25 update .github/workflows/release.yml 2024-08-27 00:01:40 +02:00
link2xt bc94eba1da update deltachat-core-rust to 'chore(release): prepare for 1.142.10' of 'v1.142.10' 2024-08-26 20:34:46 +00:00
adbenitez 088494ea86 update version number 2024-08-26 21:34:33 +02:00
adbenitez 4c4c2e248c update core 2024-08-26 21:34:01 +02:00
adbenitez 60588ab8e4 allow to build single ABI via ABI_FILTER property 2024-08-26 21:07:57 +02:00
Asiel Díaz Benítez 228a5cf4f7 Merge pull request #26 from ArcaneChat/split-apk-for-fdroid
split apks again
2024-08-26 17:07:36 +02:00
adbenitez 7075fb39e1 fix apk preview workflow 2024-08-26 17:04:51 +02:00
adbenitez da15be4739 split apks again 2024-08-26 16:38:15 +02:00
adbenitez 6427e62ed9 prepare for f-droid submission 2024-08-26 15:41:22 +02:00
adbenitez 1eb733e80f update version number 2024-08-25 23:32:19 +02:00
adbenitez 130cdfe838 update core 2024-08-25 22:46:24 +02:00
adbenitez fadcb51d7c update links and apk name 2024-08-25 22:39:12 +02:00
Asiel Díaz Benítez cea5b6ec84 Merge pull request #25 from ArcaneChat/rename-app
rename app
2024-08-25 22:25:36 +02:00
adbenitez 6c9d1592f8 add monochrome launcher icon 2024-08-25 17:34:57 +02:00
16 changed files with 119 additions and 61 deletions
+1 -1
View File
@@ -48,7 +48,7 @@ jobs:
uses: gradle/wrapper-validation-action@v1
- name: Build APK
run: ./gradlew --no-daemon assembleFossDebug
run: ./gradlew --no-daemon -PABI_FILTER=armeabi-v7a assembleFossDebug
- name: Upload APK
uses: actions/upload-artifact@v3
+5 -2
View File
@@ -54,13 +54,16 @@ jobs:
echo "DC_RELEASE_STORE_PASSWORD=${{ secrets.KEY_STORE_PASSWORD }}" >> ~/.gradle/gradle.properties
echo "DC_RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}" >> ~/.gradle/gradle.properties
echo "DC_RELEASE_KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> ~/.gradle/gradle.properties
./gradlew --no-daemon assembleFossRelease
./gradlew assembleFossRelease
rm build/outputs/apk/foss/release/*universal*
./gradlew assembleGplayRelease
mv build/outputs/apk/gplay/release/*universal* build/outputs/apk/foss/release/ArcaneChat-gplay.apk
- name: Release
uses: softprops/action-gh-release@v1
with:
token: "${{ secrets.GITHUB_TOKEN }}"
body: "Auto-generated release"
body: '[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite) [<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite) [<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite) [<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)'
prerelease: ${{ contains(github.event.ref, '-beta') }}
fail_on_unmatched_files: true
files: build/outputs/apk/foss/release/*.apk
+1 -1
View File
@@ -1,3 +1,3 @@
[submodule "jni/deltachat-core-rust"]
path = jni/deltachat-core-rust
url = https://github.com/deltalab-org/deltalab-core
url = https://github.com/ArcaneChat/core
+5 -10
View File
@@ -2,15 +2,10 @@
A [Delta Chat](https://delta.chat/) client for Android.
[<img src="store/get-it-on-IzzyOnDroid.png"
alt="Get it on IzzyOnDroid"
height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite)
[<img src="store/get-it-on-apklis.png"
alt="Disponible en Apklis"
height="48">](https://www.apklis.cu/application/chat.delta.lite)
[<img src="store/get-it-on-github.png"
alt="Get it on GitHub"
height="48">](https://github.com/deltalab-org/deltalab-android/releases/latest)
[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite)
[<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite)
[<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite)
[<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)
<img alt="Screenshot" src="fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" width="298" /> <img alt="Screenshot" src="fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" width="298" />
@@ -37,4 +32,4 @@ This app has some extended support for WebXDC apps:
This app is based on the [official Delta Chat client](https://github.com/deltachat/deltachat-android) with several improvements.
This app uses a [modified](https://github.com/deltalab-org/deltalab-core) version of the [Delta Chat Core Library](https://github.com/deltachat/deltachat-core-rust).
This app uses a [modified](https://github.com/ArcaneChat/core) version of the [Delta Chat Core Library](https://github.com/deltachat/deltachat-core-rust).
+31 -6
View File
@@ -33,8 +33,8 @@ android {
useLibrary 'org.apache.http.legacy'
defaultConfig {
versionCode 30000685
versionName "1.46.13"
versionCode 30000689
versionName "1.46.17"
applicationId "chat.delta.lite"
multiDexEnabled true
@@ -50,7 +50,11 @@ android {
buildConfigField "boolean", "DEV_BUILD", "false"
ndk {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
if(project.hasProperty("ABI_FILTER")) {
abiFilters ABI_FILTER
} else {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}
}
@@ -67,6 +71,7 @@ android {
}
packagingOptions {
jniLibs {
doNotStrip '**/*.so'
keepDebugSymbols += ['*/mips/*.so', '*/mips64/*.so']
}
resources {
@@ -126,12 +131,32 @@ android {
}
}
if(!project.hasProperty("ABI_FILTER")) {
splits {
abi {
enable true
reset()
include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
universalApk true
}
}
}
project.ext.versionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = outputFileName
.replace("deltalab-android", "deltalab")
variant.outputs.all { output ->
output.outputFileName = output.outputFileName
.replace("android", "ArcaneChat")
.replace("-release", "")
.replace(".apk", "-${variant.versionName}.apk")
if(project.hasProperty("ABI_FILTER")) {
output.versionCodeOverride =
variant.versionCode * 10 + project.ext.versionCodes.get(ABI_FILTER)
} else {
output.versionCodeOverride =
variant.versionCode * 10 + project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 4)
}
}
}
@@ -1,6 +1,21 @@
<i>ArcaneChat</i> is a friendly fork of <i>Delta Chat</i> messenger, a chat app compatible with the existing e-mail infrastructure.
ArcaneChat is a decentralized and secure messenger app that is
completely compatible with the existing e-mail infrastructure.
ArcaneChat was created with a focus on usability, good user experience, and saving data plan and comes with some different default settings than Delta Chat. Also the app usually experiments with new features and alternative paths of development that eventually might get added to the official Delta Chat client.
Some features at a glance:
💬 Reliable instant messaging with multi-profile and multi-device support.
⚡️ Sign-up easily using secure fast chatmail servers. You dont need a phone number or any private data.
📧 Alternatively, use your existing classic e-mail address to read your inbox as chats.
🎮 Interactive mini-apps in chats for gaming and collaboration.
🔒 Audited end-to-end encryption safe against network and server attacks.
ArcaneChat is a Delta Chat client and was created with a focus on usability,
good user experience, and saving data plan. Also the app usually experiments with
new features that eventually might get added to the official Delta Chat client.
<b>Main differences with official Delta Chat client:</b>
@@ -12,19 +27,14 @@ ArcaneChat was created with a focus on usability, good user experience, and savi
<li>It is possible to enable/disable accounts</li>
<li>A videochat instance is set by default</li>
<li>Replies to your messages in muted groups trigger notifications</li>
<li>Quote-reply a message with a single emoji to set it as reaction</li>
<li>Location streaming feature enabled by default and have extra option to share location for 12 hours</li>
<li>Verified icon is shown in the chat list for the "Device Messages" chat</li>
<li>Videos are played in loop, useful for short GIF videos</li>
<li>It is possible to click <b>OPENPGP4FPR:</b> and <b>mumble:</b> links in messages</li>
<li>Verified icon is shown in the chat list for the "Device Messages" chat</li>
<li>Voice messages have more aggressive compression in "worse quality" mode to save data plan</li>
<li>Default configuration changed: automatic download of messages limited to 640KB</li>
<li>Automatic download of messages limited to 640KB by default</li>
<li>Account's display name is shown in the app's title bar instead of the name of the app</li>
<li>Your avatar is visible to other users in Mailing Lists</li>
<li>Can be selected as application when clicking/opening links, this is useful to share the link with web grabber bots</li>
<li>Can be selected as app to open .xdc files</li>
<li>For mini-apps developers: there are some differences in the WebXDC API, check https://github.com/deltalab-org/deltalab-android/#webxdc</li>
<li>For mini-apps developers: there are some differences in the WebXDC API, check https://github.com/ArcaneChat/android/#webxdc</li>
<li>Better settings organization with additional "Privacy" section</li>
</ul>
<b>WARNING:</b> Be careful when running WebXDC apps in ArcaneChat, the sandboxed webview can't currently prevent WebRTC connections, so in theory information inside the WebXDC app could be leaked and also your IP, the risk is low, for most people this is not even important, but if you are a person at risk, only use trusted apps, or use official Delta Chat.
@@ -1 +1 @@
Encrypted chat over e-mail (Delta Chat client)
⚡ Fast encrypted chats for the family 🎉
+2 -2
View File
@@ -66,7 +66,7 @@
"client_info": {
"mobilesdk_app_id": "1:922391085500:android:92b4cf12669cc2083e2bb9",
"android_client_info": {
"package_name": "com.b44t.messenger"
"package_name": "com.github.arcanechat"
}
},
"oauth_client": [],
@@ -85,7 +85,7 @@
"client_info": {
"mobilesdk_app_id": "1:922391085500:android:228a205b8aa2bacc3e2bb9",
"android_client_info": {
"package_name": "com.b44t.messenger.beta"
"package_name": "com.github.arcanechat.beta"
}
},
"oauth_client": [],
+1
View File
@@ -31,5 +31,6 @@ LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -ffast-math -D__STDC_CONSTANT_MACROS
LOCAL_SRC_FILES := dc_wrapper.c
LOCAL_LDFLAGS += -Wl,--build-id=none
include $(BUILD_SHARED_LIBRARY)
+13 -8
View File
@@ -50,6 +50,15 @@ if test -z "$ANDROID_NDK_ROOT"; then
exit 1
fi
# for reproducible build:
export RUSTFLAGS="-C link-args=-Wl,--build-id=none --remap-path-prefix=$HOME/.cargo= --remap-path-prefix=$(realpath $(dirname $(dirname "$0")))="
export SOURCE_DATE_EPOCH=1
export CARGO_TARGET_DIR=/tmp/arcanechat-build
# always use the same path to NDK:
rm -f /tmp/android-ndk-root
ln -s "$ANDROID_NDK_ROOT" /tmp/android-ndk-root
ANDROID_NDK_ROOT=/tmp/android-ndk-root
echo Setting CARGO_TARGET environment variables.
if test -z "$NDK_HOST_TAG"; then
@@ -65,8 +74,6 @@ if test -z "$NDK_HOST_TAG"; then
NDK_HOST_TAG="$KERNEL-$ARCH"
fi
unset RUSTFLAGS
TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$NDK_HOST_TAG"
export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="$TOOLCHAIN/bin/armv7a-linux-androideabi16-clang"
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/aarch64-linux-android21-clang"
@@ -120,7 +127,7 @@ if test -z $1 || test $1 = armeabi-v7a; then
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
cargo build $RELEASEFLAG --target armv7-linux-androideabi -p deltachat_ffi --features jsonrpc
cp target/armv7-linux-androideabi/$RELEASE/libdeltachat.a $jnidir/armeabi-v7a
cp $CARGO_TARGET_DIR/armv7-linux-androideabi/$RELEASE/libdeltachat.a $jnidir/armeabi-v7a
fi
if test -z $1 || test $1 = arm64-v8a; then
@@ -129,7 +136,7 @@ if test -z $1 || test $1 = arm64-v8a; then
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
cargo build $RELEASEFLAG --target aarch64-linux-android -p deltachat_ffi --features jsonrpc
cp target/aarch64-linux-android/$RELEASE/libdeltachat.a $jnidir/arm64-v8a
cp $CARGO_TARGET_DIR/aarch64-linux-android/$RELEASE/libdeltachat.a $jnidir/arm64-v8a
fi
if test -z $1 || test $1 = x86; then
@@ -138,7 +145,7 @@ if test -z $1 || test $1 = x86; then
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
cargo build $RELEASEFLAG --target i686-linux-android -p deltachat_ffi --features jsonrpc
cp target/i686-linux-android/$RELEASE/libdeltachat.a $jnidir/x86
cp $CARGO_TARGET_DIR/i686-linux-android/$RELEASE/libdeltachat.a $jnidir/x86
fi
if test -z $1 || test $1 = x86_64; then
@@ -147,11 +154,9 @@ fi
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
cargo build $RELEASEFLAG --target x86_64-linux-android -p deltachat_ffi --features jsonrpc
cp target/x86_64-linux-android/$RELEASE/libdeltachat.a $jnidir/x86_64
cp $CARGO_TARGET_DIR/x86_64-linux-android/$RELEASE/libdeltachat.a $jnidir/x86_64
fi
rm -fr "$TMPLIB"
echo -- ndk-build --
cd ../..
@@ -1,6 +1,5 @@
package org.thoughtcrime.securesms.accounts;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
@@ -11,7 +10,6 @@ import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.b44t.messenger.DcAccounts;
import com.b44t.messenger.DcContact;
import com.b44t.messenger.DcContext;
import org.thoughtcrime.securesms.R;
@@ -92,7 +90,7 @@ public class AccountSelectionListAdapter extends RecyclerView.Adapter
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
int id = accountList[i];
DcContext dcContext = (id == DcContact.DC_CONTACT_ID_ADD_ACCOUNT)? null : accounts.getAccount(id);
DcContext dcContext = accounts.getAccount(id);
ViewHolder holder = (ViewHolder) viewHolder;
holder.unbind(glideRequests);
@@ -100,11 +100,7 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv
int accountId = listItem.getAccountId();
DcAccounts dcAccounts = DcHelper.getAccounts(getActivity());
if (accountId == dcAccounts.getSelectedAccount().getAccountId()) {
menu.findItem(R.id.delete).setVisible(false);
} else {
Util.redMenuItem(menu, R.id.delete);
}
Util.redMenuItem(menu, R.id.delete);
if (dcAccounts.getAccount(accountId).isMuted()) {
menu.findItem(R.id.menu_mute_notifications).setTitle(R.string.menu_unmute);
@@ -143,9 +139,15 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv
.setMessage(R.string.forget_login_confirmation_desktop)
.setNegativeButton(R.string.cancel, (d, which) -> AccountManager.getInstance().showSwitchAccountMenu(activity))
.setPositiveButton(R.string.delete, (d2, which2) -> {
boolean selected = accountId == accounts.getSelectedAccount().getAccountId();
DcHelper.getNotificationCenter(activity).removeAllNotifiations(accountId);
accounts.removeAccount(accountId);
AccountManager.getInstance().showSwitchAccountMenu(activity);
if (selected) {
DcContext selAcc = accounts.getSelectedAccount();
AccountManager.getInstance().switchAccountAndStartActivity(activity, selAcc.isOk()? selAcc.getAccountId() : 0);
} else {
AccountManager.getInstance().showSwitchAccountMenu(activity);
}
})
.show();
Util.redPositiveButton(dialog);
@@ -68,15 +68,24 @@ public class AccountSelectionListItem extends LinearLayout {
String name;
String addr = null;
int unreadCount = 0;
boolean isMuted = dcContext != null && dcContext.isMuted();
boolean isMuted = dcContext.isMuted();
Recipient recipient;
if (accountId != DcContact.DC_CONTACT_ID_ADD_ACCOUNT) {
if (accountId == DcContact.DC_CONTACT_ID_ADD_ACCOUNT) {
name = getContext().getString(R.string.add_account);
enableSwitch.setVisibility(View.INVISIBLE);
recipient = null;
this.contactPhotoImage.setSeenRecently(false); // hide connectivity dot
} else {
self = dcContext.getContact(DcContact.DC_CONTACT_ID_SELF);
addr = dcContext.isCommunity()? getContext().getString(R.string.community) : self.getAddr();
name = dcContext.getConfig("displayname");
if (TextUtils.isEmpty(name)) {
name = addr;
name = self.getAddr();
}
if (dcContext.isCommunity()) {
addr = getContext().getString(R.string.community);
} else if (!dcContext.isChatmail()) {
addr = self.getAddr();
}
unreadCount = dcContext.getFreshMsgs().length;
@@ -84,17 +93,12 @@ public class AccountSelectionListItem extends LinearLayout {
enableSwitch.setVisibility(View.VISIBLE);
recipient = new Recipient(getContext(), self, name);
this.contactPhotoImage.setConnectivity(dcContext.getConnectivity());
} else {
name = getContext().getString(R.string.add_account);
enableSwitch.setVisibility(View.INVISIBLE);
recipient = null;
this.contactPhotoImage.setSeenRecently(false); // hide connectivity dot
}
this.contactPhotoImage.setAvatar(glideRequests, recipient, false);
setSelected(selected);
nameView.setCompoundDrawablesWithIntrinsicBounds(isMuted? R.drawable.ic_volume_off_grey600_18dp : 0, 0, 0, 0);
setSelected(selected);
if (selected) {
addrView.setTypeface(null, Typeface.BOLD);
nameView.setTypeface(null, Typeface.BOLD);
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="44"
android:viewportHeight="44">
<group android:scaleX="0.43"
android:scaleY="0.43"
android:translateX="13.2"
android:translateY="13.2">
<path
android:pathData="M22,0.002C9.852,0.149 0,10.127 0,22.275 0,34.423 9.852,44.146 22,43.998 34.851,41.825 30.778,38.561 43.633,43.485 36.973,31.766 43.857,30.986 44,21.725 44,9.577 34.148,-0.146 22,0.002ZM21.853,4.515c2.535,0 4.766,0.33 6.648,1.027 1.247,0.457 2.032,1.04 2.461,1.725 0.008,0.006 0.029,-0.006 0.037,0 0.736,0.564 1.102,1.217 1.102,1.982 -0,0.589 -0.237,1.08 -0.698,1.468 -0.461,0.387 -0.965,0.55 -1.579,0.55 -0.883,0 -1.931,-0.509 -3.122,-1.578C25.491,8.604 24.461,7.848 23.616,7.414 22.79,6.965 21.828,6.717 20.715,6.717c-1.421,0 -2.604,0.259 -3.526,0.771 -0.903,0.511 -1.359,1.155 -1.359,1.945 -0,0.534 0.234,1.019 0.624,1.504 0.865,0.678 2.652,1.796 5.509,3.376 3.322,1.844 5.688,3.255 7.052,4.293 0.648,0.487 1.229,1.029 1.763,1.615 0.036,0.039 0.075,0.071 0.11,0.11 0.013,0.012 0.024,0.025 0.037,0.037 0.865,0.826 1.591,1.771 2.204,2.825 0.864,1.487 1.322,3.076 1.322,4.734 -0,2.913 -1.303,5.475 -3.856,7.706 -2.535,2.216 -5.489,3.339 -8.888,3.339 -3.092,-0 -5.692,-0.897 -7.823,-2.679 -0.382,-0.32 -0.715,-0.668 -1.028,-1.027 -1.962,-1.756 -2.938,-4.045 -2.938,-6.899 -0,-2.866 1.146,-5.271 3.489,-7.192 2.318,-1.886 5.167,-3.026 8.521,-3.449 -0.846,-0.699 -1.807,-1.471 -3.048,-2.348 -1.825,-1.292 -3.041,-2.328 -3.71,-3.082 -0.024,-0.022 -0.05,-0.052 -0.073,-0.073 -0.31,-0.282 -0.574,-0.541 -0.771,-0.771 -0.653,-0.775 -0.992,-1.618 -0.992,-2.532 -0,-1.363 0.776,-2.454 2.351,-3.229 1.575,-0.79 3.636,-1.174 6.17,-1.174zM24.167,19.56c-5.511,0.728 -8.264,3.761 -8.264,9.137 -0,2.618 0.587,4.688 1.8,6.201 0.013,0.012 0.024,0.025 0.037,0.037 1.249,1.151 2.644,1.761 4.224,1.761 1.901,0 3.472,-0.766 4.701,-2.238 1.229,-1.487 1.836,-3.492 1.836,-6.018 -0,-2.979 -1.148,-5.66 -3.416,-8.073 -0.293,-0.273 -0.594,-0.542 -0.918,-0.807z"
android:fillColor="#ffffff"
android:strokeColor="#00000000"/>
</group>
</vector>
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB