New Crowdin translations #479

Closed
kriztan wants to merge 32 commits from l10n_master into master
  1. 74
      .circleci/config.yml
  2. 8
      .gitignore
  3. 57
      .gitlab-ci.yml
  4. 19
      .travis.yml
  5. 21
      .tx/config
  6. 989
      CHANGELOG.md
  7. 140
      README-en.md
  8. 527
      README.md
  9. BIN
      art/Feature_OMEMO.png
  10. 237
      art/conversations_baloon.svg
  11. 462
      art/conversations_mono.svg
  12. BIN
      art/conversations_mono_dashed.png
  13. 568
      art/conversations_mono_dashed.svg
  14. 168
      art/date_bubble_grey.svg
  15. 168
      art/date_bubble_white.svg
  16. 427
      art/ic_launcher.svg
  17. 54
      art/ic_no_results_black.svg
  18. 54
      art/ic_no_results_white.svg
  19. 54
      art/ic_notifications_none_white80.svg
  20. 54
      art/ic_notifications_off_white80.svg
  21. 54
      art/ic_notifications_paused_white80.svg
  22. 54
      art/ic_notifications_white80.svg
  23. 30
      art/ic_read_indicator.svg
  24. 6
      art/ic_received_indicator.svg
  25. 54
      art/ic_search_black.svg
  26. 54
      art/ic_search_white.svg
  27. 76
      art/ic_send_cancel_away.svg
  28. 76
      art/ic_send_cancel_dnd.svg
  29. 76
      art/ic_send_cancel_offline.svg
  30. 54
      art/ic_send_cancel_offline_white.svg
  31. 76
      art/ic_send_cancel_online.svg
  32. 76
      art/ic_send_location_away.svg
  33. 76
      art/ic_send_location_dnd.svg
  34. 76
      art/ic_send_location_offline.svg
  35. 54
      art/ic_send_location_offline_white.svg
  36. 76
      art/ic_send_location_online.svg
  37. 83
      art/ic_send_photo_away.svg
  38. 83
      art/ic_send_photo_dnd.svg
  39. 83
      art/ic_send_photo_offline.svg
  40. 60
      art/ic_send_photo_offline_white.svg
  41. 83
      art/ic_send_photo_online.svg
  42. 78
      art/ic_send_picture_away.svg
  43. 78
      art/ic_send_picture_dnd.svg
  44. 78
      art/ic_send_picture_offline.svg
  45. 55
      art/ic_send_picture_offline_white.svg
  46. 78
      art/ic_send_picture_online.svg
  47. 98
      art/ic_send_text_away.svg
  48. 98
      art/ic_send_text_dnd.svg
  49. 99
      art/ic_send_text_offline.svg
  50. 70
      art/ic_send_text_offline_white.svg
  51. 98
      art/ic_send_text_online.svg
  52. 28
      art/ic_send_video_away.svg
  53. 28
      art/ic_send_video_dnd.svg
  54. 28
      art/ic_send_video_offline.svg
  55. 28
      art/ic_send_video_online.svg
  56. 54
      art/ic_send_videocam_away.svg
  57. 54
      art/ic_send_videocam_dnd.svg
  58. 54
      art/ic_send_videocam_offline.svg
  59. 54
      art/ic_send_videocam_offline_white.svg
  60. 55
      art/ic_send_videocam_online.svg
  61. 76
      art/ic_send_voice_away.svg
  62. 76
      art/ic_send_voice_dnd.svg
  63. 76
      art/ic_send_voice_offline.svg
  64. 54
      art/ic_send_voice_offline_white.svg
  65. 76
      art/ic_send_voice_online.svg
  66. 76
      art/ic_verified_fingerprint.svg
  67. BIN
      art/icon.png
  68. BIN
      art/logo.png
  69. BIN
      art/logo_highres.png
  70. 1
      art/main_logo.svg
  71. 110
      art/marker.svg
  72. 219
      art/message_bubble_received.svg
  73. 165
      art/message_bubble_received_dark.svg
  74. 167
      art/message_bubble_received_grey.svg
  75. 219
      art/message_bubble_received_warning.svg
  76. 219
      art/message_bubble_received_white.svg
  77. 219
      art/message_bubble_sent.svg
  78. 167
      art/message_bubble_sent_grey.svg
  79. 60
      art/message_bubble_sent_white.svg
  80. BIN
      art/nightly-qr.png
  81. 432
      art/omemo_logo.svg
  82. 55
      art/open_pdf_black.svg
  83. 55
      art/open_pdf_white.svg
  84. 56
      art/play_gif.svg
  85. 68
      art/play_gif_black.svg
  86. 68
      art/play_gif_white.svg
  87. 29
      art/play_video.svg
  88. 59
      art/play_video_black.svg
  89. 59
      art/play_video_white.svg
  90. BIN
      art/qr-code_suport.png
  91. BIN
      art/qr-code_suport_small.png
  92. 48
      art/qrcode-scan.svg
  93. 366
      art/quicksy.svg
  94. 1
      art/quicksy_main_logo.svg
  95. 181
      art/quicksy_mono.svg
  96. 1
      art/quicksy_splash_logo.svg
  97. 60
      art/render.rb
  98. BIN
      art/schulchat/logo.png
  99. BIN
      art/screenshots/de/Screenshot_20180128-201225.png
  100. BIN
      art/screenshots/de/Screenshot_20180128-201239.png

74
.circleci/config.yml

@ -0,0 +1,74 @@
version: 2
jobs:
test:
docker:
- image: registry.gitlab.com/fdroid/ci-images-client:latest
steps:
- checkout
- restore_cache:
key: gradle-{{ checksum "build.gradle" }}-{{ checksum ".circleci/config.yml" }}
- run: export GRADLE_USER_HOME=$PWD/.gradle
- run: echo y | sdkmanager "platforms;android-$(sed -n 's,.*compileSdkVersion\s*\([0-9][0-9]*\).*,\1,p' build.gradle)" > /dev/null
- run: ./gradlew lintGitDebug
- save_cache:
paths:
- .gradle/caches
- .gradle/wrapper
key: gradle-{{ checksum "build.gradle" }}-{{ checksum ".circleci/config.yml" }}
- store_artifacts:
path: build/outputs/apk/standard
destination: apk
build:
docker:
- image: registry.gitlab.com/fdroid/ci-images-client:latest
steps:
- checkout
- restore_cache:
key: android
- run: export GRADLE_USER_HOME=$PWD/.gradle
- run: echo y | sdkmanager "platforms;android-$(sed -n 's,.*compileSdkVersion\s*\([0-9][0-9]*\).*,\1,p' build.gradle)" > /dev/null
# build
- run: ./gradlew assembleGit
- save_cache:
paths:
- ~/.android
key: android
- store_artifacts:
path: build/outputs/apk/git
publish:
docker:
- image: registry.gitlab.com/fdroid/ci-images-client:latest
steps:
- checkout
- restore_cache:
key: android
- run: export GRADLE_USER_HOME=$PWD/.gradle
- run: echo y | sdkmanager "platforms;android-$(sed -n 's,.*compileSdkVersion\s*\([0-9][0-9]*\).*,\1,p' build.gradle)" > /dev/null
# workaround for fdroid nightly circleci bug
- run: sed -i "s/os.getenv('CIRCLE_REPOSITORY_URL')/\"https:\/\/github.com\/kriztan\/Pix-Art-Messenger\"/" /usr/lib/python3/dist-packages/fdroidserver/nightly.py
# generate version number
- run: sed -i "s/^\(\s*versionCode\s*\).*$/\1$(git rev-list --first-parent --count HEAD)/" build.gradle
- run: sed -i "0,/versionName/s/^\(\s*versionName\).*/\1 \"$(printf '%s-%05d' $(git describe --tag --abbrev=0) $(git rev-list --first-parent --count HEAD))\"/" build.gradle
- run: cat -n build.gradle
# build
- run: ./gradlew assembleGit
# publish on nightly fdroid repo
- run: fdroid nightly
- save_cache:
paths:
- ~/.android
key: android
workflows:
version: 2
test_build:
jobs:
- build:
filters:
branches:
ignore: master
- publish:
filters:
branches:
only: master

8
.gitignore

@ -2,16 +2,12 @@
*.swp
.settings
src/conversationsPlaystore/res/values/push.xml
src/quicksyPlaystore/res/values/push.xml
src/playstore/res/values/gcm.xml
# https://github.com/github/gitignore/blob/master/Gradle.gitignore
.gradle/
build/
gradle.properties
captures/
signing.properties
# Ignore Gradle GUI config
gradle-app.setting
@ -44,3 +40,5 @@ proguard/
import-summary.txt
.navigation/
src/main/res/values/api_keys.xml
src/standardPush/res/values/gcm.xml

57
.gitlab-ci.yml

@ -0,0 +1,57 @@
image: registry.gitlab.com/fdroid/ci-images-client:latest
cache:
paths:
- .gradle/wrapper
- .gradle/caches
stages:
- build
before_script:
- export GRADLE_USER_HOME=$PWD/.gradle
- export ANDROID_COMPILE_SDK=`sed -n 's,.*compileSdkVersion\s*\([0-9][0-9]*\).*,\1,p' build.gradle`
- echo y | sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" > /dev/null
build:
stage: build
#except:
#- master
script:
# generate version number
- export versionCode="$CI_JOB_ID"
- export versionName="$(git describe --tag --abbrev=0)-${CI_JOB_ID}_${CI_COMMIT_REF_NAME}"
- echo "set VersionCode '${versionCode}' and VersonName '${versionName}'"
- sed -i "s/^\(\s*versionCode\s*\).*$/\1$versionCode/" build.gradle
- sed -i "0,/versionName/s/^\(\s*versionName\).*/\1 \"$versionName\"/" build.gradle
# build
- ./gradlew assembleStandard
artifacts:
paths:
- build/outputs/apk/standard
publish:
stage: build
only:
#- master
- master--not-build-on-my-repo
script:
# generate version number
- export versionCode="$CI_JOB_ID"
- export versionName="$(git describe --tag --abbrev=0)-${CI_JOB_ID}_${CI_COMMIT_REF_NAME}"
- echo "set VersionCode '${versionCode}' and VersonName '${versionName}'"
- sed -i "s/^\(\s*versionCode\s*\).*$/\1$versionCode/" build.gradle
- sed -i "0,/versionName/s/^\(\s*versionName\).*/\1 \"$versionName\"/" build.gradle
# build
- ./gradlew assembleStandard
# publish on nightly fdroid repo
- fdroid nightly -v
artifacts:
paths:
- build/outputs/apk/standard
after_script:
# this file changes every time but should not be cached
- rm -f $GRADLE_USER_HOME/caches/modules-2/modules-2.lock
- rm -fr $GRADLE_USER_HOME/caches/*/plugin-resolution/

19
.travis.yml

@ -1,19 +0,0 @@
language: android
jdk:
- oraclejdk8
android:
components:
- platform-tools
- tools
- build-tools-28.0.3
- extra-google-google_play_services
licenses:
- '.+'
before_script:
- wget -O libs/libwebrtc-m81.aar http://gultsch.de/files/libwebrtc-m81.aar
script:
- ./gradlew assembleConversationsFreeSystemRelease
- ./gradlew assembleQuicksyFreeCompatRelease
before_install:
- yes | sdkmanager "platforms;android-28"

21
.tx/config

@ -1,21 +0,0 @@
[main]
host = https://www.transifex.com
lang_map = af_ZA: af-rZA, am_ET: am-rET, ar_AE: ar-rAE, ar_BH: ar-rBH, ar_DZ: ar-rDZ, ar_EG: ar-rEG, ar_IQ: ar-rIQ, ar_JO: ar-rJO, ar_KW: ar-rKW, ar_LB: ar-rLB, ar_LY: ar-rLY, ar_MA: ar-rMA, ar_OM: ar-rOM, ar_QA: ar-rQA, ar_SA: ar-rSA, ar_SY: ar-rSY, ar_TN: ar-rTN, ar_YE: ar-rYE, arn_CL: arn-rCL, as_IN: as-rIN, az_AZ: az-rAZ, ba_RU: ba-rRU, be_BY: be-rBY, bg_BG: bg-rBG, bn_BD: bn-rBD, bn_IN: bn-rIN, bo_CN: bo-rCN, br_FR: br-rFR, bs_BA: bs-rBA, ca_ES: ca-rES, co_FR: co-rFR, cs_CZ: cs-rCZ, cy_GB: cy-rGB, da_DK: da-rDK, de_AT: de-rAT, de_CH: de-rCH, de_DE: de-rDE, de_LI: de-rLI, de_LU: de-rLU, dsb_DE: dsb-rDE, dv_MV: dv-rMV, el_GR: el-rGR, en_AU: en-rAU, en_BZ: en-rBZ, en_CA: en-rCA, en_GB: en-rGB, en_IE: en-rIE, en_IN: en-rIN, en_JM: en-rJM, en_MY: en-rMY, en_NZ: en-rNZ, en_PH: en-rPH, en_SG: en-rSG, en_TT: en-rTT, en_US: en-rUS, en_ZA: en-rZA, en_ZW: en-rZW, es_AR: es-rAR, es_BO: es-rBO, es_CL: es-rCL, es_CO: es-rCO, es_CR: es-rCR, es_DO: es-rDO, es_EC: es-rEC, es_ES: es-rES, es_GT: es-rGT, es_HN: es-rHN, es_MX: es-rMX, es_NI: es-rNI, es_PA: es-rPA, es_PE: es-rPE, es_PR: es-rPR, es_PY: es-rPY, es_SV: es-rSV, es_US: es-rUS, es_UY: es-rUY, es_VE: es-rVE, et_EE: et-rEE, eu_ES: eu-rES, fa_IR: fa-rIR, fi_FI: fi-rFI, fil_PH: fil-rPH, fo_FO: fo-rFO, fr_BE: fr-rBE, fr_CA: fr-rCA, fr_CH: fr-rCH, fr_FR: fr-rFR, fr_LU: fr-rLU, fr_MC: fr-rMC, fy_NL: fy-rNL, ga_IE: ga-rIE, gd_GB: gd-rGB, gl_ES: gl-rES, gsw_FR: gsw-rFR, gu_IN: gu-rIN, ha_NG: ha-rNG, hi_IN: hi-rIN, hr_BA: hr-rBA, hr_HR: hr-rHR, hsb_DE: hsb-rDE, hu_HU: hu-rHU, hy_AM: hy-rAM, id_ID: id-rID, ig_NG: ig-rNG, ii_CN: ii-rCN, is_IS: is-rIS, it_CH: it-rCH, it_IT: it-rIT, iu_CA: iu-rCA, ja_JP: ja-rJP, ka_GE: ka-rGE, kk_KZ: kk-rKZ, kl_GL: kl-rGL, km_KH: km-rKH, kn_IN: kn-rIN, ko_KR: ko-rKR, kok_IN: kok-rIN, ky_KG: ky-rKG, lb_LU: lb-rLU, lo_LA: lo-rLA, lt_LT: lt-rLT, lv_LV: lv-rLV, mi_NZ: mi-rNZ, mk_MK: mk-rMK, ml_IN: ml-rIN, mn_CN: mn-rCN, mn_MN: mn-rMN, moh_CA: moh-rCA, mr_IN: mr-rIN, ms_BN: ms-rBN, ms_MY: ms-rMY, mt_MT: mt-rMT, nb_NO: nb-rNO, ne_NP: ne-rNP, nl_BE: nl-rBE, nl_NL: nl-rNL, nn_NO: nn-rNO, nso_ZA: nso-rZA, oc_FR: oc-rFR, or_IN: or-rIN, pa_IN: pa-rIN, pl_PL: pl-rPL, prs_AF: prs-rAF, ps_AF: ps-rAF, pt_BR: pt-rBR, pt_PT: pt-rPT, qut_GT: qut-rGT, quz_BO: quz-rBO, quz_EC: quz-rEC, quz_PE: quz-rPE, rm_CH: rm-rCH, ro_RO: ro-rRO, ru_RU: ru-rRU, rw_RW: rw-rRW, sa_IN: sa-rIN, sah_RU: sah-rRU, se_FI: se-rFI, se_NO: se-rNO, se_SE: se-rSE, si_LK: si-rLK, sk_SK: sk-rSK, sl_SI: sl-rSI, sma_NO: sma-rNO, sma_SE: sma-rSE, smj_NO: smj-rNO, smj_SE: smj-rSE, smn_FI: smn-rFI, sms_FI: sms-rFI, sq_AL: sq-rAL, sr_BA: sr-rBA, sr_CS: sr-rCS, sr_ME: sr-rME, sr_RS: sr-rRS, sv_FI: sv-rFI, sv_SE: sv-rSE, sw_KE: sw-rKE, syr_SY: syr-rSY, ta_IN: ta-rIN, te_IN: te-rIN, tg_TJ: tg-rTJ, th_TH: th-rTH, tk_TM: tk-rTM, tn_ZA: tn-rZA, tr_TR: tr-rTR, tt_RU: tt-rRU, tzm_DZ: tzm-rDZ, ug_CN: ug-rCN, uk_UA: uk-rUA, ur_PK: ur-rPK, uz_UZ: uz-rUZ, vi_VN: vi-rVN, wo_SN: wo-rSN, xh_ZA: xh-rZA, yo_NG: yo-rNG, zh_CN: zh-rCN, zh_HK: zh-rHK, zh_MO: zh-rMO, zh_SG: zh-rSG, zh_TW: zh-rTW, zu_ZA: zu-rZA, no_NO: no-rNO, he_IL: iw-rIL, he: iw
[conversations.strings]
file_filter = src/main/res/values-<lang>/strings.xml
source_file = src/main/res/values/strings.xml
source_lang = en
[conversations.quicksy-strings]
file_filter = src/quicksy/res/values-<lang>/strings.xml
source_file = src/quicksy/res/values/strings.xml
source_lang = en
type = ANDROID
[conversations.conversations-strings]
file_filter = src/conversations/res/values-<lang>/strings.xml
source_file = src/conversations/res/values/strings.xml
source_lang = en
type = ANDROID

989
CHANGELOG.md

File diff suppressed because it is too large

140
README-en.md

@ -0,0 +1,140 @@
![logo](/art/icon.png)
# Pix-Art Messenger [![CircleCI](https://circleci.com/gh/kriztan/Pix-Art-Messenger/tree/master.svg?style=shield)](https://circleci.com/gh/kriztan/Pix-Art-Messenger/tree/master)
🇩🇪 <a href='README.md' style="font-size:150%">Deutsche Version der Readme hier verfügbar.</a>
Pix-Art Messenger is a fork of [Conversations](https://github.com/siacs/Conversations).
The changes aim to improve usability and ease transition from pre-installed and other widespread messengers. Here are some screenshots:
<img src="metadata/en-US/phoneScreenshots/00.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/01.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/02.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/03.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/04.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/05.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/06.png" width="200" />
(Images used were taken from http://freestockgallery.de)
## Download
Pix-Art is available for install in the F-Droid and Google-Play stores.
Alternatively release and beta-release APKs are available via github: [Releases](https://github.com/kriztan/Pix-Art-Messenger/releases/latest)
<a href='https://play.google.com/store/apps/details?id=de.pixart.messenger'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height="100"/></a> <a href="https://f-droid.org/app/de.pixart.messenger"><img src="https://f-droid.org/badge/get-it-on.png" alt="Get it on F-Droid" height="100"></a>
#### Pix-Art-Messenger nightly and beta
##### F-Droid
Scan the QR-Code below and add it to your F-Droid repositories.
<img src="https://raw.githubusercontent.com/kriztan/Pix-Art-Messenger-nightly/master/icon.png" width="220">
#### Google Play
Google-Users can join the Google-Play beta program:
[Pix-Art Messenger beta](https://play.google.com/apps/testing/de.pixart.messenger)
## Social Media
<a rel="me" href="https://social.tchncs.de/@pixart">Pix-Art Messenger on Mastodon (German)</a>
There are also English and German speaking XMPP-MUCs focusing on support and development of the Pix-Art Messenger.
If you are interested in the development of the messenger, here is a MUC for you (English and German speaking):
Development-Chat: [development@room.pix-art.de](https://jabber.pix-art.de/j/development@room.pix-art.de?join)
[![Users in muc](https://inverse.chat/badge.svg?room=development@room.pix-art.de)](https://jabber.pix-art.de/j/development@room.pix-art.de?join)
There also is an Support-MUC where you can ask questions and get help with issues you may encounter, see further below for details.
## How can I support translations ?
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/pix-art-messenger/localized.svg)](https://crowdin.com/project/pix-art-messenger)
Translation of in-app text is organised via [crowdin.com](https://crowdin.com/project/pix-art-messenger). You can add new languages as locales and add and edit translations already existing.
[Here is the project page on crowdin.com](https://crowdin.com/project/pix-art-messenger/invite?d=75l6j4k6k6k523f4j4m4e473u663d3m4p4t4q4)
## Help! I've encountered issues!
The easiest way to get some help is to join our support-MUC (both English and German).
Support-Chat invite link: [support@room.pix-art.de](https://jabber.pix-art.de/j/support@room.pix-art.de?join)
[![Users in muc](https://inverse.chat/badge.svg?room=support@room.pix-art.de)](https://jabber.pix-art.de/j/support@room.pix-art.de?join)
Or scan this QR-Code:
<img src="art/qr-code_suport_small.png" width="220">
If we can't fix your problem there, you can open an issue here on github, detailing your problem, how to reproduce it and provide logs. See instructions below on how to create log files.
### How to create debug logs? (adb)
#### GNU/Linux, OSX and other Unix-like systems:
1. First install The **A**ndroid **D**ebugging **B**ridge, if not already present.
###### Ubuntu / Linux Mint
```
sudo apt-get update
sudo apt-get install android-tools-adb
```
###### openSUSE 42.2 and 42.3
```
sudo zypper ref
sudo zypper install android-tools
```
###### openSUSE Tumbleweed
here you need to add the following repo (e.g. via Yast):
http://download.opensuse.org/repositories/hardware/openSUSE_Tumbleweed/
alternatively you have the option to use the `1 Click installer`
https://software.opensuse.org/package/android-tools
###### other systems
install adb using a method appropriate for your system
2. Now open a terminal in a directory of you're choice, or navigate to the directory using `cd`.
3. Follow steps [6] to [10] of the Windows instructions.
4. Start outputting your log to a file on your computer. We will be using `logcat.txt`. Enter:
```
$ adb -d logcat -v time | grep -i Pix-Art > logcat.txt
```
5. Follow the remaining steps [12] and [13] of the Windows instructions.
#### Windows:
1. Download Google's SDK-platform tools for your operating system:
https://developer.android.com/studio/releases/platform-tools.html
2. In case they were not included: You also need the ADB_drivers for your version of Microsoft Windows:
https://developer.android.com/studio/run/win-usb.html
3. Extract the zip-archive (e.g. to `C:\ADB\`)
4. Open the command line (CMD) using the start menu: Start > Execute: cmd
5. Navigate to the directory you extracted the zip to as following. We will be using `C:\ADB\`
```
c:
cd ADB
```
6. On your smartphone open the settings and search for the item `Developer Options`. If this option is not already present on your phone you will need to unlock it beforehand. To do this navigate to `Settings > About phone`, there locate `Build number` (or similar) and tap it 7-times in succession. You should now see a notification, that you are now a developer. Congrats, `Developer Options` are now available in your settings menu.
7. Inside `Developer Options` search activate the setting `USB-Debugging` (sometimes just called `Android Debugging`).
8. Connect your phone to your computer via USB cable. The necessary drivers should now be downloaded and installed if not already present. On Windows all necessary drivers should be downloaded automatically if you followed step [2] beforehand. On most GNU/Linux systems no additional action is required.
9. If everything worked out, you can now return to the command line and test if your device is being recognised. Enter `adb devices -l`; you should see output similar to:
```
> adb devices -l
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
042111560169500303f4 unauthorized
```
10. If your devices is labelled as `unautorized`, you must first accept a prompt on your phone asking if debugging over USB should be allowed. When rerunning `adb devices` you should now see:
```
> adb devices
List of devices attached
042111560169500303f4 device
```
11. Start outputting your log to a file on your computer. We will be using `logcat.txt` in `C:\ADB\`. Just enter the following (without `> ` into the command line):
```
> adb -d logcat -v time | FINDSTR Pix-Art > logcat.txt
```
12. Now reproduce the issue encountered.
13. Stop logging. Now take a close look at your log file and remove any personal and private information you may find before sending it together with a detailed description of your issue, instructions on how to reproduce to me. You can use GitHub's issue tracker: [Issues](https://github.com/kriztan/Pix-Art-Messenger/issues)

527
README.md

@ -1,468 +1,115 @@
<h1 align="center">Conversations</h1>
![logo](/art/icon.png)
# Pix-Art Messenger [![CircleCI](https://circleci.com/gh/kriztan/Pix-Art-Messenger/tree/master.svg?style=shield)](https://circleci.com/gh/kriztan/Pix-Art-Messenger/tree/master)
<p align="center">Conversations: the very last word in instant messaging</p>
🇬🇧🇺🇸… <a href='README-en.md' style="font-size:150%">English Readme version available here</a>
<p align="center">
<a href="https://conversations.im/j/conversations@conference.siacs.eu">
<img src="https://inverse.chat/badge.svg?room=conversations@conference.siacs.eu"
alt="chat on our conference room">
</a>
<a href="https://travis-ci.org/inputmice/Conversations">
<img src="https://travis-ci.org/inputmice/Conversations.svg?branch=master"
alt="build status">
</a>
</p>
Pix-Art Messenger ist eine Kopie der offiziellen Android-App [Conversations](https://github.com/siacs/Conversations) mit einigen Änderungen, insbesondere zur Verbesserung der Benutzerfreundlichkeit, um den Umstieg von oftmals vorinstallierten Messengern zu erleichtern. Die folgenden Bilder geben erste Eindrücke der App:
<p align="center">
<a href="https://play.google.com/store/apps/details?id=eu.siacs.conversations&amp;referrer=utm_source%3Dgithub">
<img src="https://conversations.im/images/en-play-badge.png" alt="Google Play">
</a>
</p>
<img src="metadata/en-US/phoneScreenshots/00.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/01.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/02.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/03.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/04.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/05.png" width="200" /> <img src="metadata/en-US/phoneScreenshots/06.png" width="200" />
![screenshots](https://raw.githubusercontent.com/inputmice/Conversations/master/screenshots.png)
(Bilder wurden über http://freestockgallery.de bezogen)
## Design principles
Download ist hier möglich:
* Be as beautiful and easy to use as possible without sacrificing security or
privacy
* Rely on existing, well established protocols (XMPP)
* Do not require a Google Account or specifically Google Cloud Messaging (GCM)
<a href='https://play.google.com/store/apps/details?id=de.pixart.messenger'><img alt='Jeztz bei Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/de_badge_web_generic.png' height="100"/></a> <a href="https://f-droid.org/app/de.pixart.messenger"><img src="https://f-droid.org/badge/get-it-on-de.png" alt="Jetzt bei F-Droid" height="100"></a>
## Features
Alternativ kannst du den Messenger auch direkt hier von GitHub unter [Releases](https://github.com/kriztan/Pix-Art-Messenger/releases/latest) herunterladen.
* End-to-end encryption with [OMEMO](http://conversations.im/omemo/) or [OpenPGP](http://openpgp.org/about/)
* Send and receive images as well as other kind of files
* Make audio and video calls
* Share your location
* Send voice messages
* Indication when your contact has read your message
* Intuitive UI that follows Android Design guidelines
* Pictures / Avatars for your Contacts
* Synchronizes with desktop client
* Conferences (with support for bookmarks)
* Address book integration
* Multiple accounts / unified inbox
* Very low impact on battery life
<a rel="me" href="https://social.tchncs.de/@pixart">Pix-Art Messenger bei Mastodon</a>
#### Pix-Art-Messenger nightly bzw. beta
### XMPP Features
Scanne den QR-Code und füge es zu deinen F-Droid Quellen hinzu:
Conversations works with every XMPP server out there. However XMPP is an
extensible protocol. These extensions are standardized as well in so called
XEP's. Conversations supports a couple of these to make the overall user
experience better. There is a chance that your current XMPP server does not
support these extensions; therefore to get the most out of Conversations you
should consider either switching to an XMPP server that does or — even better —
run your own XMPP server for you and your friends. These XEP's are:
<img src="https://raw.githubusercontent.com/kriztan/Pix-Art-Messenger-nightly/master/icon.png" width="220">
* [XEP-0065: SOCKS5 Bytestreams](http://xmpp.org/extensions/xep-0065.html) (or mod_proxy65). Will be used to transfer
files if both parties are behind a firewall (NAT).
* [XEP-0163: Personal Eventing Protocol](http://xmpp.org/extensions/xep-0163.html) for avatars and OMEMO.
* [XEP-0191: Blocking command](http://xmpp.org/extensions/xep-0191.html) lets you blacklist spammers or block contacts
without removing them from your roster.
* [XEP-0198: Stream Management](http://xmpp.org/extensions/xep-0198.html) allows XMPP to survive small network outages and
changes of the underlying TCP connection.
* [XEP-0280: Message Carbons](http://xmpp.org/extensions/xep-0280.html) which automatically syncs the messages you send to
your desktop client and thus allows you to switch seamlessly from your mobile
client to your desktop client and back within one conversation.
* [XEP-0237: Roster Versioning](http://xmpp.org/extensions/xep-0237.html) mainly to save bandwidth on poor mobile connections
* [XEP-0313: Message Archive Management](http://xmpp.org/extensions/xep-0313.html) synchronize message history with the
server. Catch up with messages that were sent while Conversations was
offline.
* [XEP-0352: Client State Indication](http://xmpp.org/extensions/xep-0352.html) lets the server know whether or not
Conversations is in the background. Allows the server to save bandwidth by
withholding unimportant packages.
* [XEP-0363: HTTP File Upload](http://xmpp.org/extensions/xep-0363.html) allows you to share files in conferences
and with offline contacts.
Google-Nutzer können dem Betaprogramm beitreten:
[Pix-Art Messenger beta](https://play.google.com/apps/testing/de.pixart.messenger)
## FAQ
#### Wie kann ich bei der Übersetzung helfen?
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/pix-art-messenger/localized.svg)](https://crowdin.com/project/pix-art-messenger)
### General
Übersetzungen werden bei [crowdin.com](https://crowdin.com/project/pix-art-messenger) geführt. Dort können Übersetzungen erstellt, geändert und ergänzt werden.
#### How do I install Conversations?
[Hier geht's zur Projektseite bei crowdin.com](https://crowdin.com/project/pix-art-messenger/invite?d=75l6j4k6k6k523f4j4m4e473u663d3m4p4t4q4)
Conversations is entirely open source and licensed under GPLv3. So if you are a
software developer you can check out the sources from GitHub and use Gradle to
build your apk file.
#### Ich habe Probleme, was soll ich tun?
Am einfachsten ist es, wenn du unserer Support-Gruppe beitrittst, dort werden deine Probleme mit Sicherheit schnell gelöst.
The more convenient way — which not only gives you automatic updates but also
supports the further development of Conversations — is to buy the App in the
Google [Play Store](https://play.google.com/store/apps/details?id=eu.siacs.conversations&referrer=utm_source%3Dgithub).
Support-Chat: [support@room.pix-art.de](https://jabber.pix-art.de/j/support@room.pix-art.de?join)
[![Users in muc](https://inverse.chat/badge.svg?room=support@room.pix-art.de)](https://jabber.pix-art.de/j/support@room.pix-art.de?join)
Buying the App from the Play Store will also give you access to our [beta test](#beta).
Development-Chat: [development@room.pix-art.de](https://jabber.pix-art.de/j/development@room.pix-art.de?join)
[![Users in muc](https://inverse.chat/badge.svg?room=development@room.pix-art.de)](https://jabber.pix-art.de/j/development@room.pix-art.de?join)
#### I don't have a Google Account but I would still like to make a contribution
Scanne den QR-Code um in den Support-Chat zu gelangen:
I accept donations over PayPal, bank transfer and various crypto currencies. For donations via PayPal use the button below:
<img src="art/qr-code_suport_small.png" width="220">
[![Donate with PayPal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.me/ConversationsIM)
**Disclaimer:** I'm not a huge fan of PayPal and their business policies. For
larger contributions please get in touch with me beforehand and we can talk
about bank transfer (SEPA).
##### Crypto currencies
Solltest du dort nicht weiter kommen kannst du hier ein Issue erstellen, in welchem du dein Problem genau beschreibst und welche Schritte erforderlich sind, um zu dem Problem zu gelangen.
Bitcoin: `3KAD8vew6tPZDjiUJNnZ3YUoUxrCEVNwFL`
#### Wie erstelle ich Debug- bzw. ADB-Logs?
Bitcoin Cash: `16ABkXzYAwWz8Y5DcWFfbBRqL63g3hzEaU`
##### Linux:
Ether: `0x5c4e5239cd9c6f4a909e4e8361526e2e3c8ba9fa`
1. Installation von ADB
###### Ubuntu / Linux Mint
```
sudo apt-get update
sudo apt-get install android-tools-adb
```
###### openSUSE 42.2 und 42.3
```
sudo zypper ref
sudo zypper install android-tools
```
###### openSUSE Tumbleweed
hier muss für das benötigte Packet folgende Repo eingebunden werden (z.B. bequem über Yast):
http://download.opensuse.org/repositories/hardware/openSUSE_Tumbleweed/
alternativ kann auch der `1 Click Installer` benutzt werden:
https://software.opensuse.org/package/android-tools
2. Navigiere mit `cd` in das Verzeichnis deines Vertrauens und fahre mit Schritt [6] unter [Windows] fort. s.u.
#### How do I create an account?
XMPP, like email, is a federated protocol, which means that there is not one company you can create an *official XMPP account* with. Instead there are hundreds, or even thousands, of providers out there. One of those providers is our very own [conversations.im](https://account.conversations.im). If you don’t like to use *conversations.im* use a web search engine of your choice to find another provider. Or maybe your university has one. Or you can run your own. Or ask a friend to run one. Once you've found one, you can use Conversations to create an account. Just select *register new account* on server within the create account dialog.
##### Windows:
##### Domain hosting
Using your own domain not only gives you a more recognizable Jabber ID, it also gives you the flexibility to migrate your account between different XMPP providers. This is a good compromise between the responsibilities of having to operate your own server and the downsides of being dependent on a single provider.
Learn more about [conversations.im Jabber/XMPP domain hosting](https://account.conversations.im/domain/).
##### Running your own
If you already have a server somewhere and are willing and able to put the necessary work in you can run your own XMPP server.
As of 2019 we recommend you use [ejabberd](https://ejabberd.im). The default configuration file already enables everything you need to pass the [Conversations Compliance Suite](https://compliance.conversations.im). Make sure your Linux distribution ships a fairly recent version.
With a little bit of effort [Prosody](https://prosody.im) can be configured to support all necessary extensions as well. However you will have to rely on so called [Community Modules](https://modules.prosody.im/) of varying quality. Prosody can be interesting to people who like to modify their server and create / prototype own modules.
Performance wise - for small deployments - both ejabberd and Prosody should be fine.
#### Where can I set up a custom hostname / port
Conversations will automatically look up the SRV records for your domain name
which can point to any hostname port combination. If your server doesn’t provide
those please contact your admin and have them read
[this](http://prosody.im/doc/dns#srv_records). If your server operator is unwilling
to fix this you can enable advanced server settings in the expert settings of
Conversations.
#### I get 'Incompatible Server'
As regular user you should be picking a different server. The server you selected
is probably insecure and/or very old.
If you are a server administrator you should make sure that your server provides
either STARTTLS or [XEP-0368: SRV records for XMPP over TLS](https://xmpp.org/extensions/xep-0368.html).
On rare occasions this error message might also be caused by a server not providing
a login (SASL) mechanism that Conversations is able to handle. Conversations supports
SCRAM-SHA1, PLAIN, EXTERNAL (client certs) and DIGEST-MD5.
#### I get 'Bind failure'. What does that mean?
Some Bind failures are transient and resolve themselves after a reconnect.
When trying to connect to OpenFire the bind failure can be a permanent problem when the domain part of the Jabber ID entered in Conversations doesn’t match the domain the OpenFire server feels responsible for. For example OpenFire is configured to use the domain `a.tld` but the Jabber ID entered is `user@b.tld` where `b.tld` also points to the same host. During bind OpenFire tries to reassign the Jabber to `user@a.tld`. Conversations doesn’t like that.
This can be fixed by creating a new account in Conversations that uses the Jabber ID `user@a.tld`.
Note: This is kind of a weird quirk in OpenFire. Most other servers would just throw a 'Server not responsible for domain' error instead of attempting to reassign the Jabber ID.
Maybe you attempted to use the Jabber ID `test@b.tld` because `a.tld` doesn’t point to the correct host. In that case you might have to enable the extended connection settings in the expert settings of Conversations and set a host name.
### I get 'Stream opening error'. What does that mean?
In most cases this error is caused by ejabberd advertising support for TLSv1.3 but not properly supporting it. This can happen if the openssl version on the server already supports TLSv1.3 but the fast\_tls wrapper library used by ejabberd not (properly) support it. Upgrading fast\_tls and ejabberd or - theoretically - downgrading openssl should fix the issue. A work around is to explicity disable TLSv1.3 support in the ejabberd configuration. More information can be found on [this issue on the ejabberd issue tracker](https://github.com/processone/ejabberd/issues/2614).
#### I’m getting this annoying permanent notification
Starting with Conversations 2.3.6 Conversations releases distributed over the Google Play Store will display a permanent notification if you are running it on Android 8 and above. This is a rule that it is essentially enforced by the Google Play Store. (You won’t have the problem of a *forced* foreground notification if you are getting your app from F-Droid.)
However you can disable the notification via settings of the operating system. (Not settings in Conversations.)
**The battery consumption and the entire behaviour of Conversations will remain the same (as good or as bad as it was before). Why is Google doing this to you? We have no idea.**
##### Android &lt;= 7.1 or Conversations from F-Droid (all Android versions)
The foreground notification is still controlled over the expert settings within Conversations as it always has been. Whether or not you need to enable it depends on how aggressive the non-standard 'power saving' features are that your phone vendor has built into the operating system.
##### Android 8.x
Long press the permanent notification and disable that particular type of notification by moving the slider to the left. This will make the notification disappear but create another notification (this time created by the operating system itself.) that will complain about Conversations (and other apps) using battery. Starting with Android 8.1 you can disable that notification again with the same method described above.
##### Android 9.0+
Long press the permanent notification and press the info `(i)` button to get into the App info screen. In that screen touch the 'Notification' entry. In the next screen remove the checkbox for the 'Foreground service' entry.
#### How do XEP-0357: Push Notifications work?
You need to be running the Play Store version of Conversations and your server needs to support push notifications.¹ Because *Google’s Firebase Cloud Messaging (FCM)* are tied with an API key to a specific app your server can not initiate the push message directly. Instead your server will send the push notification to the [Conversations App server](https://github.com/iNPUTmice/p2) (operated by us) which then acts as a proxy and initiates the push message for you. The push message sent from our App server through FCM doesn’t contain any personal information. It is just an empty message which will wake up your device and tell Conversations to reconnect to your server. The information sent from your server to our App server depends on the configuration of your server but can be limited to your account name. (In any case the Conversations App server won't redirect any information through FCM even if your server sends this information.)
In summary Google will never get hold of any personal information besides that *something* happened. (Which doesn’t even have to be a message but can be some automated event as well.) We - as the operator of the App server - will just get hold of your account name (without being able to tie this to your specific device).
If you don’t want this simply pick a server which does not offer Push Notifications or build Conversations yourself without support for push notifications. (This is available via a gradle build flavor.) Non-play store source of Conversations like the Amazon App store will also offer a version without push notifications. Conversations will just work as before and maintain its own TCP connection in the background.
You can find a detailed description of how your server, the app server and FCM are interacting with each other in the [README](https://github.com/iNPUTmice/p2/blob/master/README.md) of the Conversations App Server.
¹ If you use the Play Store version you do **not** need to run your own app server. Your server only needs to support the server side of [XEP-0357: Push Notifications](http://xmpp.org/extensions/xep-0357.html) and [XEP-0198: Stream Management](https://xmpp.org/extensions/xep-0198.html). The prosody server modules are called *mod_cloud_notify* and *mod_smacks*. The ejabberd server modules are called *mod_push* and *mod_stream_mgmt*.
#### But why do I need a permanent notification if I use Google Push?
FCM (Google Push) allows an app to wake up from *Doze* which is (as the name suggests) a hibernation feature of the Android operating system that cuts the network connection and also reduces the number of times the app is allowed to wake up (to ping the server for example). The app can ask to be excluded from doze. Non push variants of the app (from F-Droid or if the server doesn’t support it) will do this on first start up. So if you get exemption from *Doze*, or if you get regular push events sent to you, Doze should not pose a threat to Conversatons working properly. But even with *Doze* the app is still open in the background (kept in memory); it is just limited in the actions it can do. Conversations needs to stay in memory to hold certain session state (online status of contacts, join status of group chats, …). However with Android 8 Google changed all of this again and now an App that wants to stay in memory needs to have a foreground service which is visible to the user via the annoying notification. But why does Conversations need to hold that state? XMPP is a stateful protocol that has a lot of per-session information; packets need to be counted, presence information needs to be held, some features like Message Carbons get activated once per session, MAM catchup happens once, service discovery happens only once; the list goes on. When Conversations was created in early 2014 none of this was a problem because apps were just allowed to stay in memory. Basically every XMPP client out there holds that information in memory because it would be a lot more complicated trying to persist it to disk. An entire rewrite of Conversations in the year 2019 would attempt to do that and would probably succeed however it would require exactly that; a complete rewrite which is not feasible right now. That’s by the way also the reason why it is difficult to write an XMPP client on iOS. Or more broadly put this is also the reason why other protocols are designed as or migrated to stateless protocols (often based on HTTP); take for example the migration of IMAP to [JMAP](https://jmap.io/).
#### Conversations doesn’t work for me. Where can I get help?
You can join our conference room on [`conversations@conference.siacs.eu`](https://conversations.im/j/conversations@conference.siacs.eu).
A lot of people in there are able to answer basic questions about the usage of
Conversations or can provide you with tips on running your own XMPP server. If
you found a bug or your app crashes please read the Developer / Report Bugs
section of this document.
#### I need professional support with Conversations or setting up my server
I'm available for hire. Contact information can be found on [my website](https://gultsch.de).
#### How does the address book integration work?
The address book integration was designed to protect your privacy. Conversations
neither uploads contacts from your address book to your server nor fills your
address book with unnecessary contacts from your online roster. If you manually
add a Jabber ID to your phones address book Conversations will use the name and
the profile picture of this contact. To make the process of adding Jabber IDs to
your address book easier you can click on the profile picture in the contact
details within Conversations. This will start an "add to address book" intent
with the JID as the payload. This doesn't require Conversations to have write
permissions on your address book but also doesn't require you to copy/paste a
JID from one app to another.
#### I get 'delivery failed' on my messages
If you get delivery failed on images it's probably because the recipient lost
network connectivity during reception. In that case you can try it again at a
later time.
For text messages the answer to your question is a little bit more complex.
When you see 'delivery failed' on text messages, it is always something that is
being reported by the server. The most common reason for this is that the
recipient failed to resume a connection. When a client loses connectivity for a
short time the client usually has a five minute window to pick up that
connection again. When the client fails to do so because the network
connectivity is out for longer than that all messages sent to that client will
be returned to the sender resulting in a delivery failed.
Instead of returning a message to the sender both ejabberd and prosody have the
ability to store messages in offline storage when the disconnecting client is
the only client. In prosody this is available via an extra module called
```mod_smacks_offline```. In ejabberd this is available via some configuration
settings.
Other less common reasons are that the message you sent didn't meet some
criteria enforced by the server (too large, too many). Another reason could be
that the recipient is offline and the server doesn't provide offline storage.
Usually you are able to distinguish between these two groups in the fact that
the first one happens always after some time and the second one happens almost
instantly.
#### Where can I see the status of my contacts? How can I set a status or priority?
Statuses are a horrible metric. Setting them manually to a proper value rarely
works because users are either lazy or just forget about them. Setting them
automatically does not provide quality results either. Keyboard or mouse
activity as indicator for example fails when the user is just looking at
something (reading an article, watching a movie). Furthermore automatic setting
of status always implies an impact on your privacy (are you sure you want
everybody in your contact list to know that you have been using your computer at
4am‽).
In the past status has been used to judge the likelihood of whether or not your
messages are being read. This is no longer necessary. With Chat Markers
(XEP-0333, supported by Conversations since 0.4) we have the ability to **know**
whether or not your messages are being read. Similar things can be said for
priorities. In the past priorities have been used (by servers, not by clients!)
to route your messages to one specific client. With carbon messages (XEP-0280,
supported by Conversations since 0.1) this is no longer necessary. Using
priorities to route OTR messages isn't practical either because they are not
changeable on the fly. Metrics like last active client (the client which sent
the last message) are much better.
Unfortunately these modern replacements for legacy XMPP features are not widely
adopted. However Conversations should be an instant messenger for the future and
instead of making Conversations compatible with the past we should work on
implementing new, improved technologies and getting them into other XMPP clients
as well.
Making these status and priority optional isn't a solution either because
Conversations is trying to get rid of old behaviours and set an example for
other clients.
#### Translations
Translations are managed on [Transifex](https://www.transifex.com/projects/p/conversations/).
If you want to become a translator Please register on transifex, apply to join
the translation team and then step by our group chat on
[conversations@conference.siacs.eu](https://conversations.im/j/conversations@conference.siacs.eu)
and introduce yourself to `iNPUTmice` so he can approve your join request.
#### How do I backup / move Conversations to a new device?
On the one hand Conversations supports Message Archive Management to keep a server side history of your messages so when migrating to a new device that device can display your entire history. However that does not work if you enable OMEMO due to its forward secrecy. (Read [The State of Mobile XMPP in 2016](https://gultsch.de/xmpp_2016.html) especially the section on encryption.)
As of version 2.4.0 an integrated Backup & Restore function will help with this, go to Settings and you’ll find a setting called Create backup. A notification will pop-up during the creation process that will announce you when it's ready. After the files, one for each account, are created, you can move the **Conversations** folder *(if you want your old media files too)* or only the **Conversations/Backup** folder *(for OMEMO keys and history only)* to your new device (or to a storage place) where a freshly installed Conversations can restore each account. Don't forget to enable the accounts after a succesful restore.
This backup method will include your OMEMO keys. Due to forward secrecy you will not be able to recover messages sent and received between creating the backup and restoring it. If you have a server side archive (MAM) those messages will be retrieved but displayed as *unable to decrypt*. For technical reasons you might also lose the first message you either sent or receive after the restore; for each conversation you have. This message will then also show up as *unable to decrypt*, but this will automatically recover itself as long as both participants are on Conversations 2.3.11+. Note that this doesn’t happen if you just transfer to a new phone and no messages have been exchanged between backup and restore.
In the vast, vast majority of cases you won’t have to manually delete OMEMO keys or do anything like that. Conversations only introduced the offical backup feature in 2.4.0 after making sure the *OMEMO self healing* mechanism introduced in 2.3.11 works fine.
**WARNING**: Be sure to know your accounts passwords or find ways to reset them **before** doing the backup as the files are encrypted using those passwords and the Restore process will ask for them.
**WARNING**: Do not use the restore backup feature in an attempt to clone (run simultaneously) an installation. Restoring a backup is only meant for migrations or in case you’ve lost the original device.
#### Conversations is missing a certain feature
I'm open for new feature suggestions. You can use the [issue tracker][issues] on
GitHub. Please take some time to browse through the issues to see if someone
else already suggested it. Be assured that I read each and every ticket. If I
like it I will leave it open until it's implemented. If I don't like it I will
close it (usually with a short comment). If I don't comment on an feature
request that's probably a good sign because this means I agree with you.
Commenting with +1 on either open or closed issues won't change my mind, nor
will it accelerate the development.
#### You closed my feature request but I want it really really badly
Just write it yourself and send me a pull request. If I like it I will happily
merge it if I don't at least you and like minded people get to enjoy it.
#### I need a feature and I need it now!
I am available for hire. Find contact information on [my website](https://gultsch.de).
### Security
#### Why are there two end-to-end encryption methods and which one should I choose?
* OMEMO works even when a contact is offline, and works with multiple devices. It also allows asynchronous file-transfer when the server has [HTTP File Upload](http://xmpp.org/extensions/xep-0363.html). However, OMEMO not widely support and is currently implemented only [by a handful of clients](https://omemo.top).
* OpenPGP (XEP-0027) is a very old encryption method that has some advantages over OMEMO but should only be used by people who know what they are doing.
#### How do I use OpenPGP
Before you continue reading you should note that the OpenPGP support in
Conversations is experimental. This is not because it will make the app unstable
but because the fundamental concepts of PGP aren't ready for widespread use.
The way PGP works is that you trust Key IDs instead of JID's or email addresses.
So in theory your contact list should consist of Public-Key-IDs instead of
JID's. But of course no email or XMPP client out there implements these
concepts. Plus PGP in the context of instant messaging has a couple of
downsides: It is vulnerable to replay attacks and it is rather verbose.
To use OpenPGP you have to install the open source app
[OpenKeychain](http://www.openkeychain.org) and then long press on the account in
manage accounts and choose renew PGP announcement from the contextual menu.
#### OMEMO is grayed out. What do I do?
OMEMO is only available in 1:1 chats and private (members-only, non-anonymous) group chats. Encrypting public group chats makes little to no sense since anyone (including a hypothetical attacker) can join and a user couldn’t possibily verify all participants anyway. Furthermore for a lot of public group chat it is desirable to give new comers access to the full history.
#### OMEMO doesn’t work. I get a 'Something went wrong' message in the 'Trust OMEMO Fingerprints' screen.
OMEMO has two requirements: Your server and the server of your contact need to support PEP. Both of you can verify that individually by opening your account details and selecting ```Server info``` from the menu. The appearing table should list PEP as available. The second requirement is that the initial sender needs to have access to the published key material. This can either be achieved by having mutual presence subscription (you can verify that by opening the contact details and see if both check boxes *Send presence updates* and *Receive presence updates* are checked) or by using a server that makes the public key material accessible to anyone. In the [Compliance Tester](https://compliance.conversations.im) this is indicated by the 'OMEMO' feature. Since it is very common that the first messages are exchanged *before* adding each other to the contact list it is desirable to use servers that have 'OMEMO support'.
#### How does the encryption for group chats work?
##### OMEMO
OMEMO encryption works only in private (members only) conferences that are non-anonymous. Non-anonymous (being able to discover the real JID of other participants) is a technical requirement to discover the key material. Members only is a sort of arbitrary requirement imposed by Conversations. (see 'OMEMO is grayed out')
The server of all participants need to pass the OMEMO [Compliance Test](https://conversations.im/compliance/).
In other words they either need to run Ejabberd 18.01+ or Prosody 0.11+.
(Alternatively it would also work if all participants had each other in their contact list; But that rarely is the case in larger group chats.)
The owner of a conference can make a public conference private by going into the conference
details and hit the settings button (the one with the gears) and select both *private* and
*members only*.
##### OpenPGP
Every participant has to announce their OpenPGP key (see answer above).
If you would like to send encrypted messages to a conference you have to make
sure that you have every participant's public key in your OpenKeychain.
Right now there is no check in Conversations to ensure that.
You have to take care of that yourself. Go to the conference details and
touch every key id (The hexadecimal number below a contact). This will send you
to OpenKeychain which will assist you on adding the key. This works best in
very small conferences with contacts you are already using OpenPGP with. This
feature is regarded experimental. Conversations is the only client that uses
XEP-0027 with conferences. (The XEP neither specifically allows nor disallows
this.)
#### What is Blind Trust Before Verification / why are messages marked with a red lock?
Read more about the concept on https://gultsch.de/trust.html
#### What happened to OTR support?
OTR was removed because it was highly unreliable. It didn’t work with multiple devices and was never really specified to work with XMPP. The codebase was a mess (There was an HTML parser in there for crying out loud to deal with the garbage some OTR clients would send.) Verification was implemented in a non-blocking way. It would tell you if the current session was using an unknown fingerprint but it didn’t actively stopped you from sending messages until you have confirmed the new fingerprint. (Like Conversations would do now with BTBV after verification or when BTBV is turned off.) Considering the previous points there was little to no desire from my point to fix this potential security issue or clean up the code base. Another reason for the removal was that people would use it *accidentally* even to communicate between two Conversations clients because they read somewhere that OTR is good.
### What clients do I use on other platforms
There are XMPP Clients available for all major platforms.
#### Windows / Linux
For your desktop computer we recommend that you use [Gajim](https://gajim.org). You need to install the plugins `OMEMO`, `HTTP Upload` and `URL image preview` to get the best compatibility with Conversations. Plugins can be installed from within the app.
#### iOS
Unfortunately we don‘t have a recommendation for iPhones right now. There are two clients available [ChatSecure](https://chatsecure.org/) and [Monal](https://monal.im/). Both with their own pros and cons.
### Development
<a name="beta"></a>
#### Beta testing
If you bought the App on [Google Play](https://play.google.com/store/apps/details?id=eu.siacs.conversations)
you can get access to the the latest beta version by signing up using [this link](https://play.google.com/apps/testing/eu.siacs.conversations).
#### How do I build Conversations
**Note:** Starting with version 2.8.0 you will need to compile libwebrtc.
[Instructions](https://webrtc.github.io/webrtc-org/native-code/android/) can be found on the WebRTC
website. Place the resulting libwebrtc.aar in the `libs/` directory. The PlayStore release currently
uses the stable M81 release and renamed the file name to `libwebrtc-m81.aar` put potentially you can
reference any file name by modifying `build.gradle`.
Make sure to have ANDROID_HOME point to your Android SDK. Use the Android SDK Manager to install missing dependencies.
git clone https://github.com/inputmice/Conversations.git
cd Conversations
./gradlew assembleConversationsFreeSystemDebug
There are two build flavors available. *free* and *playstore*. Unless you know what you are doing you only need *free*.
[![Build Status](https://travis-ci.org/inputmice/Conversations.svg?branch=development)](https://travis-ci.org/inputmice/Conversations)
#### How do I update/add external libraries?
If the library you want to update is in Maven Central or JCenter (or has its own
Maven repo), add it or update its version in `build.gradle`. If the library is
in the `libs/` directory, you can update it using a subtree merge by doing the
following (using `minidns` as an example):
git remote add minidns https://github.com/rtreffer/minidns.git
git fetch minidns
git merge -s subtree minidns master
To add a new dependency to the `libs/` directory (replacing "name", "branch" and
"url" as necessary):
git remote add name url
git merge -s ours --no-commit name/branch
git read-tree --prefix=libs/name -u name/branch
git commit -m "Subtree merged in name"
#### How do I debug Conversations
If something goes wrong Conversations usually exposes very little information in
the UI (other than the fact that something didn't work). However with adb
(android debug bridge) you can squeeze some more information out of Conversations.
These information are especially useful if you are experiencing trouble with
your connection or with file transfer.
To use adb you have to connect your mobile phone to your computer with an USB cable
and install `adb`. Most Linux systems have prebuilt packages for that tool. On
Debian/Ubuntu for example it is called `android-tools-adb`.
Furthermore you might have to enable 'USB debugging' in the Developer options of your
phone. After that you can just execute the following on your computer:
adb -d logcat -v time -s conversations
If need be there are also some Apps on the PlayStore that can be used to show the logcat
directly on your rooted phone. (Search for logcat). However in regards to further processing
(for example to create an issue here on Github) it is more convenient to just use your PC.
#### I found a bug
Please report it to our [issue tracker][issues]. If your app crashes please
provide a stack trace. If you are experiencing misbehavior please provide
detailed steps to reproduce. Always mention whether you are running the latest
Play Store version or the current HEAD. If you are having problems connecting to
your XMPP server your file transfer doesn’t work as expected please always
include a logcat debug output with your issue (see above).
[issues]: https://github.com/inputmice/Conversations/issues
1. Lade dir die SDK-Plattform-Tools für dein Betriebssystem von Google herunter:
https://developer.android.com/studio/releases/platform-tools.html
2. Falls noch nicht getan, lade dir die ADB Treiber für dein Betriebssystem von Google herunter, für Windows hier:
https://developer.android.com/studio/run/win-usb.html
3. Entpacke die zip (z.B. nach C:\ADB\)
4. Öffne die Kommandozeile (CMD) mit Start > Ausführen: cmd
5. Wechsele in der Kommandozeile in das Verzeichnis C:\ADB wie folgt
```
c:
cd ADB
```
6. Auf deinem Telefon gehst du in die Einstellungen und suchst nach dem Punkt `Entwickleroptionen`. Sollte dieser bei dir nicht vorhanden sein, musst du diese Optionen erst noch freischalten. Dazu wechselst du in den Einstellungen in den Punkt `über das Telefon` und suchst dort nach `Buildnummer` oder Ähnlichem. Diese Zeile musst Du mindestens 7 mal hintereinander antippen, es sollte dann ein Hinweis eingeblendet werden, der dir bestätigt, dass du nun Entwickler bist.
7. In den `Entwickleroptionen` suchst du nach dem Eintrag `USB-Debugging` und aktivierst ihn.
8. Schließe dein Handy mit dem USB-Kabel an deinen PC an. Die erforderlichen Treiber sollten zumindest in Windows automatisch installiert werden.
9. Wenn alles ohne Fehler geklappt hat, kannst du wieder in die Kommandozeile gehen und testen, ob alles funktioniert. Gib dazu in CMD `adb devices -l` ein, es sollte in etwa sowas bei dir stehen:
```
> adb devices -l
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
042111560169500303f4 unauthorized
```
10. Falls dein Handy als `unauthorized` markiert wird, sollte am Handy eine Meldung `USB-Debugging zulassen?` kommen, diese mit `OK` bestätigen, sodass bei `adb devices` folgendes dort stehen sollte:
```
> adb devices
List of devices attached
042111560169500303f4 device
```
11. Nun kannst du mit der Ausgabe der Debug-Logs beginnen. Dazu gibst du im CMD folgendes ein und die Ausgabe beginnt in die Datei `logcat.txt` im Verzeichnis `C:\ADB`:
```
> adb -d logcat -v time | FINDSTR Pix-Art > logcat.txt
```
12. Führe nun die Schritte aus, die zum Fehler führen.
13. Zum Schluss schaue dir die `logcat.txt` an, lösche ggf. persönliche Angaben und sende diese Datei zur Problemlösung mit einer Beschreibung des Fehlers und was man tun muss, um diesen Fehler zu erhalten, an mich. Nutz dafür den Menüpunkt [Issues](https://github.com/kriztan/Pix-Art-Messenger/issues)

BIN
art/Feature_OMEMO.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

237
art/conversations_baloon.svg

@ -0,0 +1,237 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="57mm" height="57mm"
viewBox="0 0 201.96849 201.96849" id="svg4211" version="1.1" inkscape:version="0.91 r13725"
sodipodi:docname="conversations_baloon.svg">
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0"
showgrid="false" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0"
fit-margin-bottom="0" showguides="false" inkscape:zoom="2.2196812" inkscape:cx="39.109276"
inkscape:cy="132.27753" inkscape:window-width="1600" inkscape:window-height="836"
inkscape:window-x="0" inkscape:window-y="27" inkscape:window-maximized="1"
inkscape:current-layer="layer8" />
<defs id="defs4213">
<linearGradient osb:paint="solid" id="linearGradient5393">
<stop id="stop5395" offset="0" style="stop-color:#ffffff;stop-opacity:1;" />
</linearGradient>
<clipPath id="clipPath4831" clipPathUnits="userSpaceOnUse">
<circle
style="display:inline;opacity:1;fill:#a00e00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="circle4833" cx="883.16943" cy="677.19611" r="229.80969" />
</clipPath>
<clipPath id="clipPath4859" clipPathUnits="userSpaceOnUse">
<circle
style="display:inline;opacity:1;fill:#a00e00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="circle4861" cx="883.16943" cy="677.19611" r="229.80969" />
</clipPath>
<clipPath id="clipPath5624" clipPathUnits="userSpaceOnUse">
<g style="display:inline" id="g5626"
transform="matrix(0.3835576,0,0,0.3835576,-250.60108,-156.11014)">
<path sodipodi:nodetypes="ccsssc" inkscape:connector-curvature="0" id="path5628"
d="m 1120.8042,772.36056 -118.0025,103.66316 118.5792,46.01918 c 8.4859,3.29325 19.6524,7.94481 27.2622,0.71376 7.3868,-7.01907 5.6502,-14.13839 3.0935,-24.54095 z"
style="display:inline;fill:#4caf50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<circle transform="matrix(1.0878566,0,0,1.0878566,-57.401992,-79.686482)"
clip-path="url(#clipPath4859)" r="229.80969" cy="677.19611" cx="883.16943"
id="circle5630"
style="display:inline;opacity:1;fill:#4caf50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath10653">
<g style="display:inline" id="g10655"
transform="matrix(0.3835576,0,0,0.3835576,-250.60108,-156.11015)"
inkscape:export-xdpi="100" inkscape:export-ydpi="100">
<path sodipodi:nodetypes="ccsssc" inkscape:connector-curvature="0" id="path10657"
d="m 1120.8042,772.36056 -118.0025,103.66316 118.5792,46.01918 c 8.4859,3.29325 19.6524,7.94481 27.2622,0.71376 7.3868,-7.01907 5.6502,-14.13839 3.0935,-24.54095 z"
style="display:inline;fill:#4caf50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<circle transform="matrix(1.0878566,0,0,1.0878566,-57.401992,-79.686482)"
clip-path="url(#clipPath4859)" r="229.80969" cy="677.19611" cx="883.16943"
id="circle10659"
style="display:inline;opacity:1;fill:#4caf50;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
</clipPath>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3913"
id="radialGradient3883" gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.68662089,-0.30388739,0.24146012,0.54605188,-300.74233,-264.46964)"
cx="262.33273" cy="945.23846" fx="262.33273" fy="945.23846" r="185.49754" />
<linearGradient inkscape:collect="always" id="linearGradient3913">
<stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop3915" />
<stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3917" />
</linearGradient>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath5315">
<g inkscape:export-ydpi="100" inkscape:export-xdpi="100"
transform="matrix(0.3835576,0,0,0.3835576,-246.60108,-156.11013)" id="g5317"
style="display:inline;fill:#0043A0;fill-opacity:1">
<path
style="display:inline;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 1120.8042,772.36056 -118.0025,103.66316 118.5792,46.01918 c 8.4859,3.29325 19.6524,7.94481 27.2622,0.71376 7.3868,-7.01907 5.6502,-14.13839 3.0935,-24.54095 z"
id="path5319" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsssc" />
<circle
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="circle5321" cx="883.16943" cy="677.19611" r="229.80969"
clip-path="url(#clipPath4859)"
transform="matrix(1.0878566,0,0,1.0878566,-57.401992,-79.686482)" />
</g>
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6882">
<path inkscape:connector-curvature="0" id="path6884"
d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z"
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6886">
<path inkscape:connector-curvature="0" id="path6888"
d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z"
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6890">
<path inkscape:connector-curvature="0" id="path6892"
d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z"
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6894">
<path inkscape:connector-curvature="0" id="path6896"
d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z"
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6898">
<path inkscape:connector-curvature="0" id="path6900"
d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z"
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6902">
<path inkscape:connector-curvature="0" id="path6904"
d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z"
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6906">
<path inkscape:connector-curvature="0" id="path6908"
d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z"
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath6910">
<path inkscape:connector-curvature="0" id="path6912"
d="M 99.88867,-2.3837657e-4 A 95.889392,95.889392 0 0 0 4,95.888436 95.889392,95.889392 0 0 0 99.88867,191.77906 95.889392,95.889392 0 0 0 142.59375,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.7793,95.888466 95.889392,95.889392 0 0 0 99.88867,-2.0837657e-4 Z"
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</clipPath>
<filter inkscape:collect="always" style="color-interpolation-filters:sRGB" id="filter5640"
x="-0.012227737" width="1.0244555" y="-0.011780591" height="1.0235612">
<feGaussianBlur inkscape:collect="always" stdDeviation="0.9782166"
id="feGaussianBlur5642" />
</filter>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath5745">
<path inkscape:connector-curvature="0" id="path5747"
d="M 99.908581,-2.3831968e-4 A 95.889392,95.889392 0 0 0 4.0199102,95.888436 95.889392,95.889392 0 0 0 99.908581,191.77906 95.889392,95.889392 0 0 0 142.61366,181.70093 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 L 183.8285,142.24002 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 195.79921,95.888466 95.889392,95.889392 0 0 0 99.908581,-2.0831968e-4 Z"
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</clipPath>
</defs>
<metadata id="metadata4216">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g inkscape:groupmode="layer" id="layer9" inkscape:label="shaddow"
transform="translate(-4,2.6816164)" style="display:inline">
<path inkscape:connector-curvature="0" id="path6914"
d="M 104.88867,0.06226191 A 95.889392,95.889392 0 0 0 8.9999996,95.950936 95.889392,95.889392 0 0 0 104.88867,191.84156 95.889392,95.889392 0 0 0 147.59375,181.76343 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 l -11.34766,-46.16797 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 200.7793,95.950966 95.889392,95.889392 0 0 0 104.88867,0.06229191 Z"
style="display:inline;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5640)" />
</g>
<g style="display:inline" inkscape:label="bubble" id="layer4" inkscape:groupmode="layer"
transform="translate(-4,2.6816348)">
<path
style="display:inline;opacity:1;fill:#0043A0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="M 104.88867,-1.9377566 A 95.889392,95.889392 0 0 0 8.9999996,93.950918 95.889392,95.889392 0 0 0 104.88867,189.84154 95.889392,95.889392 0 0 0 147.59375,179.76341 l 0.12695,0.0137 40.79297,15.83204 c 3.25479,1.26313 7.53628,3.04697 10.45508,0.27343 2.83326,-2.69222 2.16811,-5.42213 1.1875,-9.41211 L 188.80859,140.3025 a 95.889392,95.889392 0 0 1 -0.002,0.002 l 0,-0.008 0.002,0.006 A 95.889392,95.889392 0 0 0 200.7793,93.950948 95.889392,95.889392 0 0 0 104.88867,-1.9377266 Z"
id="circle6661" inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:125px;line-height:1000%;font-family:Sans;letter-spacing:-10.89000034px;word-spacing:5px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="85.862968"
y="-55.271603"
id="text6634"
sodipodi:linespacing="1000%"><tspan
sodipodi:role="line"
id="tspan6636"
x="85.862968"
y="-55.271603" /></text>
</g>
<g inkscape:groupmode="layer" id="layer8" inkscape:label="dotted line" style="display:inline"
transform="translate(-4,2.6816164)">
<path
style="opacity:1;fill:#80A1D0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
clip-path="url(#clipPath6910)"
d="m 145.16406,11.183594 -5.13232,9.649402 c -0.77924,1.465076 -0.65974,2.41396 0.66876,3.18097 9.66686,5.488467 18.12303,12.874168 24.86104,21.711122 1.05534,1.616079 2.08054,1.713076 3.67763,0.571565 L 178.04883,40 C 169.45271,27.990203 158.19857,18.128379 145.16406,11.183594 Z"
id="path7364" inkscape:connector-curvature="0" sodipodi:nodetypes="csccscc"
transform="translate(4.9999996,-1.9374999)" />
<path
style="opacity:1;fill:#80A1D0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
clip-path="url(#clipPath6906)"
d="m 193.80469,75.615234 -9.62713,2.062751 c -2.66266,0.570512 -3.40763,1.172953 -2.90593,3.917433 0.85823,4.714633 1.30424,9.497137 1.33189,14.293254 -0.028,5.578758 -0.62194,11.137108 -1.77093,16.589918 -0.86591,3.23162 0.13682,3.77092 3.16149,4.58138 l 8.98639,2.30136 c 1.98177,-7.66828 3.00584,-15.55255 3.04883,-23.472658 -0.0187,-6.817681 -0.76446,-13.613926 -2.22461,-20.273438 z"
id="path7366" inkscape:connector-curvature="0" sodipodi:nodetypes="csccccccc"
transform="translate(4.9999996,-1.9374999)" />
<path
style="opacity:1;fill:#80A1D0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
clip-path="url(#clipPath6902)"
d="m 14.264281,102.76512 -10.2076406,0.87943 c 1.2093798,14.83154 5.8540346,29.17808 13.5664056,41.90429 l 8.544301,-5.23239 c 2.394983,-1.46665 1.895406,-3.37834 0.986202,-5.04513 -5.118253,-9.40257 -8.359018,-19.71635 -9.536202,-30.36553 0,-2.09418 -1.881577,-2.26744 -3.353066,-2.14067 z"
id="path7372" inkscape:connector-curvature="0" sodipodi:nodetypes="sccsccs"
transform="translate(4.9999996,-1.9374999)" />
<path
style="opacity:1;fill:#80A1D0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
clip-path="url(#clipPath6898)"
d="m 51.504371,166.60235 -5.82273,8.50898 c 12.710503,8.71282 27.333669,14.23394 42.630859,16.0957 l 1.220329,-9.90843 c 0.355066,-2.88295 -1.085712,-3.52946 -3.332252,-3.90256 -10.402329,-1.73697 -20.373956,-5.45322 -29.373754,-10.94516 -1.647505,-1.06744 -3.639993,-2.30718 -5.322452,0.15147 z"
id="path7370" inkscape:connector-curvature="0" sodipodi:nodetypes="sccsccs"
transform="translate(4.9999996,-1.9374999)" />
<path
style="opacity:1;fill:#80A1D0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
clip-path="url(#clipPath6894)"
d="M 32.208984,27.683594 C 21.779177,38.079001 13.883707,50.736882 9.1347656,64.675781 L 19.33617,68.090365 c 1.658147,0.55501 2.832564,-0.120955 3.374272,-1.591979 3.777598,-10.021698 9.470788,-19.210103 16.759132,-27.052307 1.561136,-1.561136 1.567283,-2.960058 0.447507,-4.076606 z"
id="path7374" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsccsc"
transform="translate(4.9999996,-1.9374999)" />
<path
style="opacity:1;fill:#80A1D0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
clip-path="url(#clipPath6890)"
d="M 99.888672,-0.25 C 87.701045,-0.2239408 75.630114,2.1252837 64.322266,6.671875 l 3.530435,8.74898 c 1.063314,2.635062 1.616754,3.526314 4.973913,2.352259 8.692057,-3.031338 17.839027,-4.588849 27.062058,-4.599286 5.555828,0 6.486278,0.350026 6.780788,-3.4460223 l 0.74851,-9.64772758 C 104.9135,-0.12857239 102.40179,-0.23868346 99.888672,-0.25 Z"
id="path7376" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsccscc"
transform="translate(4.9999996,-1.9374999)" />
<path
style="display:inline;fill:#80A1D0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
clip-path="url(#clipPath6886)"
d="m 138.72416,168.48439 c -4.17634,2.25458 -8.55959,4.09055 -13.0504,5.63418 -1.00363,0.34498 -1.20742,1.18222 -0.8682,2.27372 l 3.44056,11.0706 c 4.92985,-1.53124 9.72799,-3.45808 14.34766,-5.76172 l 0.12695,0.0137 14.0293,5.44532 4.12174,-10.20577 c 0.7548,-1.86894 -0.0184,-2.7016 -1.59462,-3.31324 l -14.72114,-5.71251 c -1.86679,-0.7244 -3.68834,-0.60144 -5.83185,0.55572 z"
id="path5005" inkscape:connector-curvature="0" sodipodi:nodetypes="cssccccsssc"
transform="translate(4.9999996,-1.9374999)" />
<path
style="display:inline;fill:#80A1D0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
clip-path="url(#clipPath6882)"
d="m 186.53125,152.80469 -10.6386,2.70888 c -0.78879,0.20085 -1.67397,1.02386 -1.35494,2.33801 l 9.75918,40.15428 c 8.56713,5.97538 15.30408,3.06731 11.01563,-9.47266 z"
id="path5071" inkscape:connector-curvature="0" sodipodi:nodetypes="cssccc"
transform="translate(4.9999996,-1.9374999)" />
</g>
<g style="display:inline" inkscape:label="dots" id="layer2" inkscape:groupmode="layer"
transform="translate(-4,2.6816348)">
<g inkscape:export-ydpi="100" inkscape:export-xdpi="100" style="fill:#f5f5f5;fill-opacity:1"
transform="matrix(0.3835576,0,0,0.3835576,-248.17635,-138.86977)" id="g5126">
<circle r="27.299093"
style="opacity:1;fill:#f5f5f5;fill-opacity:1;fill-rule:evenodd;stroke:none"
id="path3047-4" cx="799.11273" cy="609.86285" />
<circle r="27.299093"
style="opacity:1;fill:#f5f5f5;fill-opacity:1;fill-rule:evenodd;stroke:none"
id="path3047-1-2" cx="918.91962" cy="609.86285" />
<circle r="27.299093"
style="opacity:1;fill:#f5f5f5;fill-opacity:1;fill-rule:evenodd;stroke:none"
id="path3047-1-8-6" cx="1039.0352" cy="609.86285" />
</g>
</g>
<g inkscape:groupmode="layer" id="layer1" inkscape:label="light" style="display:inline"
transform="translate(-4,2.6816164)">
<path
style="display:inline;opacity:0.19211821;fill:url(#radialGradient3883);fill-opacity:1;stroke:none"
d="m 192.44891,47.715674 c -61.69765,0 -111.704333,49.103472 -111.704333,109.668976 0,12.77573 2.228815,25.0414 6.321575,36.4393 5.069139,0.70557 10.251828,1.06876 15.514978,1.06876 18.80489,0 30.91434,7.28449 47.46533,1.26909 l 54.00234,6.06606 c 5.24363,2.11897 11.63381,1.37954 10.27166,-4.11162 l -14.23663,-57.56735 c 9.15073,-16.06873 12.27539,-34.36633 12.27539,-53.240271 0,-13.72556 -2.63167,-26.842322 -7.42478,-38.909717 -4.09925,-0.447474 -8.2658,-0.683228 -12.48553,-0.683228 z"
id="path3878" inkscape:connector-curvature="0" clip-path="url(#clipPath5745)"
transform="translate(4.9800894,-1.9374999)" sodipodi:nodetypes="sscsccccscs" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 25 KiB

462
art/conversations_mono.svg

@ -1,337 +1,129 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
id="svg2"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="conversations_mono.svg"
inkscape:export-filename="/home/diesys/diesys/grafica/conversation/conversation_bubble.png"
inkscape:export-xdpi="100"
inkscape:export-ydpi="100">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient3874">
<stop
style="stop-color:#00a000;stop-opacity:1;"
offset="0"
id="stop3876" />
<stop
style="stop-color:#00a000;stop-opacity:0;"
offset="1"
id="stop3878" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3913">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3915" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3917" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3818">
<stop
style="stop-color:#669900;stop-opacity:1"
offset="0"
id="stop3820" />
<stop
style="stop-color:#99cc00;stop-opacity:1"
offset="1"
id="stop3822" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3818"
id="radialGradient3824"
cx="212.07048"
cy="1045.9178"
fx="212.07048"
fy="1045.9178"
r="238.57143"
gradientTransform="matrix(1.9491621,-0.90817722,0.65829208,1.4128498,-879.63121,-248.98648)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3913"
id="radialGradient3919"
cx="362.98563"
cy="379.77524"
fx="362.98563"
fy="379.77524"
r="139.95312"
gradientTransform="matrix(1.3800477,1.0445431,-1.3325077,1.7605059,339.09383,-577.83938)"
gradientUnits="userSpaceOnUse" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="-155.75885"
x2="114.59022"
y1="35.545681"
x1="114.55434"
id="linearGradient3794"
xlink:href="#linearGradient3788"
inkscape:collect="always" />
<linearGradient
id="linearGradient3788">
<stop
id="stop3790"
offset="0"
style="stop-color:#1eed00;stop-opacity:1;" />
<stop
id="stop3792"
offset="1"
style="stop-color:#abff28;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3821">
<stop
style="stop-color:#ff283d;stop-opacity:1;"
offset="0"
id="stop3823" />
<stop
style="stop-color:#ff28ae;stop-opacity:1;"
offset="1"
id="stop3825" />
</linearGradient>
<linearGradient
id="linearGradient4543">
<stop
style="stop-color:#2e45bf;stop-opacity:1;"
offset="0"
id="stop4545" />
<stop
style="stop-color:#28a7ff;stop-opacity:1;"
offset="1"
id="stop4547" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4098">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4100" />
<stop
style="stop-color:#e6e6e6;stop-opacity:1"
offset="1"
id="stop4102" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4098"
id="linearGradient3833"
x1="273.81851"
y1="764.74677"
x2="304.14023"
y2="936.47272"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4098"
id="linearGradient3853"
gradientUnits="userSpaceOnUse"
x1="273.81851"
y1="764.74677"
x2="304.14023"
y2="936.47272" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3818"
id="radialGradient3863"
cx="262.33273"
cy="945.23846"
fx="262.33273"
fy="945.23846"
r="185.49754"
gradientTransform="matrix(1.2253203,-0.54206726,0.43090148,0.97403458,-466.4135,170.11831)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3818"
id="radialGradient3866"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.2253203,-0.54206726,0.43090148,0.97403458,-466.4135,170.11831)"
cx="262.33273"
cy="945.23846"
fx="262.33273"
fy="945.23846"
r="185.49754" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3913"
id="radialGradient3873"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3800477,1.0445431,-1.3325077,1.7605059,339.09383,-577.83938)"
cx="321.75275"
cy="386.38751"
fx="321.75275"
fy="386.38751"
r="139.95312" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3818"
id="radialGradient3880"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.2253203,-0.54206726,0.43090148,0.97403458,-466.4135,-370.24387)"
cx="262.33273"
cy="945.23846"
fx="262.33273"
fy="945.23846"
r="185.49754" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3913"
id="radialGradient3883"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.4430075,-0.63865195,0.50745433,1.1475866,-594.40824,44.803037)"
cx="262.33273"
cy="945.23846"
fx="262.33273"
fy="945.23846"
r="185.49754" />
<filter
inkscape:collect="always"
id="filter3895">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="2.0013623"
id="feGaussianBlur3897" />
</filter>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3874"
id="radialGradient3881"
cx="150.35715"
cy="236.28571"
fx="150.35715"
fy="236.28571"
r="26.887305"
gradientTransform="matrix(1,0,0,0.98671703,0,3.1385771)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4142136"
inkscape:cx="387.25645"
inkscape:cy="294.41185"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="2560"
inkscape:window-height="1020"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
showguides="false"
inkscape:guide-bbox="true"
inkscape:snap-to-guides="true"
inkscape:snap-grids="false"
inkscape:object-paths="true"
inkscape:object-nodes="false"
inkscape:snap-nodes="false">
<sodipodi:guide
orientation="1,0"
position="0,534.28571"
id="guide3004" />
<sodipodi:guide
orientation="0,1"
position="394.28571,511.42857"
id="guide3006" />
<sodipodi:guide
orientation="1,0"
position="511.42857,320"
id="guide3008" />
<sodipodi:guide
orientation="0,1"
position="401.42857,0"
id="guide3010" />
<sodipodi:guide
orientation="1,0"
position="17.142857,258.57143"
id="guide3012" />
<sodipodi:guide
orientation="0,1"
position="327.14286,494.28571"
id="guide3014" />
<sodipodi:guide
orientation="0,1"
position="324.28571,17.142857"
id="guide3016" />
<sodipodi:guide
orientation="1,0"
position="494.28571,237.14286"
id="guide3018" />
<sodipodi:guide
orientation="1,0"
position="255.71429,302.85714"
id="guide3022" />
<sodipodi:guide
orientation="1,0"
position="660,-315"
id="guide3904" />
<sodipodi:guide
orientation="0,1"
position="554.28571,475.71429"
id="guide3931" />
<sodipodi:guide
orientation="0,1"
position="581.42857,244.28571"
id="guide3933" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-540.36218)"
style="display:inline">
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="M 253.21875 17.71875 C 126.14405 17.71875 22.46875 118.88367 22.46875 243.75 C 22.46875 368.61632 126.13807 469.84375 253.21875 469.84375 C 292.73931 469.84375 323.2163 461.73599 358 449.09375 L 468.46875 493.625 A 14.555609 14.562046 0 0 0 488.0625 476.625 L 458.125 355.65625 C 477.35631 321.88611 483.9375 283.41561 483.9375 243.75 C 483.9375 118.88673 380.29349 17.71875 253.21875 17.71875 z M 143.84375 222 C 157.65087 222 168.84375 233.19288 168.84375 247 C 168.84375 260.80712 157.65087 272 143.84375 272 C 130.03663 272 118.84375 260.80712 118.84375 247 C 118.84375 233.19288 130.03663 222 143.84375 222 z M 253.5625 222 C 267.36962 222 278.5625 233.19288 278.5625 247 C 278.5625 260.80712 267.36962 272 253.5625 272 C 239.75538 272 228.5625 260.80712 228.5625 247 C 228.5625 233.19288 239.75538 222 253.5625 222 z M 363.5625 222 C 377.36962 222 388.5625 233.19288 388.5625 247 C 388.5625 260.80712 377.36962 272 363.5625 272 C 349.75538 272 338.5625 260.80712 338.5625 247 C 338.5625 233.19288 349.75538 222 363.5625 222 z "
transform="translate(0,540.36218)"
id="path3868" />
<path
sodipodi:nodetypes="ccsssscc"
inkscape:connector-curvature="0"
id="path3845"
d="M 478.64112,1025.218 447.36049,898.60749 c 19.89028,-31.99834 26.74288,-69.57172 26.74288,-109.76189 0,-116.81686 -96.79943,-211.48385 -216.18374,-211.48385 -119.38425,0 -216.183656,94.66699 -216.183656,211.48385 0,116.81685 96.799406,211.5536 216.183656,211.5536 39.63617,0 68.58847,-8.14219 105.19417,-21.76075 z"
style="opacity:0;fill:none;stroke:#000000;stroke-width:23.55835724;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:94.23343197, 94.23343197;stroke-dashoffset:0" />
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Dots" />
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="512" height="512" id="svg2"
version="1.1" inkscape:version="0.48.5 r10040" sodipodi:docname="conversations_mono.svg"
inkscape:export-filename="/home/diesys/diesys/grafica/conversation/conversation_bubble.png"
inkscape:export-xdpi="100" inkscape:export-ydpi="100">
<defs id="defs4">
<linearGradient inkscape:collect="always" id="linearGradient3874">
<stop style="stop-color:#00a000;stop-opacity:1;" offset="0" id="stop3876" />
<stop style="stop-color:#00a000;stop-opacity:0;" offset="1" id="stop3878" />
</linearGradient>
<linearGradient inkscape:collect="always" id="linearGradient3913">
<stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop3915" />
<stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3917" />
</linearGradient>
<linearGradient inkscape:collect="always" id="linearGradient3818">
<stop style="stop-color:#669900;stop-opacity:1" offset="0" id="stop3820" />
<stop style="stop-color:#99cc00;stop-opacity:1" offset="1" id="stop3822" />
</linearGradient>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3818"
id="radialGradient3824" cx="212.07048" cy="1045.9178" fx="212.07048" fy="1045.9178"
r="238.57143"
gradientTransform="matrix(1.9491621,-0.90817722,0.65829208,1.4128498,-879.63121,-248.98648)"
gradientUnits="userSpaceOnUse" />
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3913"
id="radialGradient3919" cx="362.98563" cy="379.77524" fx="362.98563" fy="379.77524"
r="139.95312"
gradientTransform="matrix(1.3800477,1.0445431,-1.3325077,1.7605059,339.09383,-577.83938)"
gradientUnits="userSpaceOnUse" />
<linearGradient gradientUnits="userSpaceOnUse" y2="-155.75885" x2="114.59022" y1="35.545681"
x1="114.55434" id="linearGradient3794" xlink:href="#linearGradient3788"
inkscape:collect="always" />
<linearGradient id="linearGradient3788">
<stop id="stop3790" offset="0" style="stop-color:#1eed00;stop-opacity:1;" />
<stop id="stop3792" offset="1" style="stop-color:#abff28;stop-opacity:1;" />
</linearGradient>
<linearGradient id="linearGradient3821">
<stop style="stop-color:#ff283d;stop-opacity:1;" offset="0" id="stop3823" />
<stop style="stop-color:#ff28ae;stop-opacity:1;" offset="1" id="stop3825" />
</linearGradient>
<linearGradient id="linearGradient4543">
<stop style="stop-color:#2e45bf;stop-opacity:1;" offset="0" id="stop4545" />
<stop style="stop-color:#28a7ff;stop-opacity:1;" offset="1" id="stop4547" />
</linearGradient>
<linearGradient inkscape:collect="always" id="linearGradient4098">
<stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop4100" />
<stop style="stop-color:#e6e6e6;stop-opacity:1" offset="1" id="stop4102" />
</linearGradient>
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4098"
id="linearGradient3833" x1="273.81851" y1="764.74677" x2="304.14023" y2="936.47272"
gradientUnits="userSpaceOnUse" />
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4098"
id="linearGradient3853" gradientUnits="userSpaceOnUse" x1="273.81851" y1="764.74677"
x2="304.14023" y2="936.47272" />
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3818"
id="radialGradient3863" cx="262.33273" cy="945.23846" fx="262.33273" fy="945.23846"
r="185.49754"
gradientTransform="matrix(1.2253203,-0.54206726,0.43090148,0.97403458,-466.4135,170.11831)"
gradientUnits="userSpaceOnUse" />
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3818"
id="radialGradient3866" gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.2253203,-0.54206726,0.43090148,0.97403458,-466.4135,170.11831)"
cx="262.33273" cy="945.23846" fx="262.33273" fy="945.23846" r="185.49754" />
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3913"
id="radialGradient3873" gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3800477,1.0445431,-1.3325077,1.7605059,339.09383,-577.83938)"
cx="321.75275" cy="386.38751" fx="321.75275" fy="386.38751" r="139.95312" />
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3818"
id="radialGradient3880" gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.2253203,-0.54206726,0.43090148,0.97403458,-466.4135,-370.24387)"
cx="262.33273" cy="945.23846" fx="262.33273" fy="945.23846" r="185.49754" />
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3913"
id="radialGradient3883" gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.4430075,-0.63865195,0.50745433,1.1475866,-594.40824,44.803037)"
cx="262.33273" cy="945.23846" fx="262.33273" fy="945.23846" r="185.49754" />
<filter inkscape:collect="always" id="filter3895">
<feGaussianBlur inkscape:collect="always" stdDeviation="2.0013623"
id="feGaussianBlur3897" />
</filter>
<radialGradient inkscape:collect="always" xlink:href="#linearGradient3874"
id="radialGradient3881" cx="150.35715" cy="236.28571" fx="150.35715" fy="236.28571"
r="26.887305" gradientTransform="matrix(1,0,0,0.98671703,0,3.1385771)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1.4142136"
inkscape:cx="387.25645" inkscape:cy="294.41185" inkscape:document-units="px"
inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="2560"
inkscape:window-height="1020" inkscape:window-x="0" inkscape:window-y="27"
inkscape:window-maximized="1" showguides="false" inkscape:guide-bbox="true"
inkscape:snap-to-guides="true" inkscape:snap-grids="false" inkscape:object-paths="true"
inkscape:object-nodes="false" inkscape:snap-nodes="false">
<sodipodi:guide orientation="1,0" position="0,534.28571" id="guide3004" />
<sodipodi:guide orientation="0,1" position="394.28571,511.42857" id="guide3006" />
<sodipodi:guide orientation="1,0" position="511.42857,320" id="guide3008" />
<sodipodi:guide orientation="0,1" position="401.42857,0" id="guide3010" />
<sodipodi:guide orientation="1,0" position="17.142857,258.57143" id="guide3012" />
<sodipodi:guide orientation="0,1" position="327.14286,494.28571" id="guide3014" />
<sodipodi:guide orientation="0,1" position="324.28571,17.142857" id="guide3016" />
<sodipodi:guide orientation="1,0" position="494.28571,237.14286" id="guide3018" />
<sodipodi:guide orientation="1,0" position="255.71429,302.85714" id="guide3022" />
<sodipodi:guide orientation="1,0" position="660,-315" id="guide3904" />
<sodipodi:guide orientation="0,1" position="554.28571,475.71429" id="guide3931" />
<sodipodi:guide orientation="0,1" position="581.42857,244.28571" id="guide3933" />
</sodipodi:namedview>
<metadata id="metadata7">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1"
transform="translate(0,-540.36218)" style="display:inline">
<path style="fill:#ffffff;fill-opacity:1;stroke:none"
d="M 253.21875 17.71875 C 126.14405 17.71875 22.46875 118.88367 22.46875 243.75 C 22.46875 368.61632 126.13807 469.84375 253.21875 469.84375 C 292.73931 469.84375 323.2163 461.73599 358 449.09375 L 468.46875 493.625 A 14.555609 14.562046 0 0 0 488.0625 476.625 L 458.125 355.65625 C 477.35631 321.88611 483.9375 283.41561 483.9375 243.75 C 483.9375 118.88673 380.29349 17.71875 253.21875 17.71875 z M 143.84375 222 C 157.65087 222 168.84375 233.19288 168.84375 247 C 168.84375 260.80712 157.65087 272 143.84375 272 C 130.03663 272 118.84375 260.80712 118.84375 247 C 118.84375 233.19288 130.03663 222 143.84375 222 z M 253.5625 222 C 267.36962 222 278.5625 233.19288 278.5625 247 C 278.5625 260.80712 267.36962 272 253.5625 272 C 239.75538 272 228.5625 260.80712 228.5625 247 C 228.5625 233.19288 239.75538 222 253.5625 222 z M 363.5625 222 C 377.36962 222 388.5625 233.19288 388.5625 247 C 388.5625 260.80712 377.36962 272 363.5625 272 C 349.75538 272 338.5625 260.80712 338.5625 247 C 338.5625 233.19288 349.75538 222 363.5625 222 z "
transform="translate(0,540.36218)" id="path3868" />
<path sodipodi:nodetypes="ccsssscc" inkscape:connector-curvature="0" id="path3845"
d="M 478.64112,1025.218 447.36049,898.60749 c 19.89028,-31.99834 26.74288,-69.57172 26.74288,-109.76189 0,-116.81686 -96.79943,-211.48385 -216.18374,-211.48385 -119.38425,0 -216.183656,94.66699 -216.183656,211.48385 0,116.81685 96.799406,211.5536 216.183656,211.5536 39.63617,0 68.58847,-8.14219 105.19417,-21.76075 z"
style="opacity:0;fill:none;stroke:#000000;stroke-width:23.55835724;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:94.23343197, 94.23343197;stroke-dashoffset:0" />
</g>
<g inkscape:groupmode="layer" id="layer4" inkscape:label="Dots" />
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 10 KiB

BIN
art/conversations_mono_dashed.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

568
art/conversations_mono_dashed.svg