@@ -1,435 +1,3 @@
-<h1 align="center">Conversations</h1>
+# Cheogram Android
-<p align="center">Conversations: the very last word in instant messaging</p>--<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>--<p align="center">- <a href="https://play.google.com/store/apps/details?id=eu.siacs.conversations&referrer=utm_source%3Dgithub">- <img src="https://conversations.im/images/en-play-badge.png" alt="Google Play">- </a>-</p>----## Design principles--* 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)--## Features--* 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-* [Encrypted audio and video calls (DTLS-SRTP)](https://help.conversations.im)-* 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---### XMPP Features--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:--* [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.--## FAQ--### General--#### How do I install Conversations?--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.--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).--Buying the App from the Play Store will also give you access to our [beta test](#beta).--#### I don't have a Google Account but I would still like to make a donation--I’m listing several options to support me financially on [my website](https://gultsch.de/donate.html). Among other things [Liberapay](https://liberapay.com/iNPUTmice/donate), [GitHub Sponsors](https://github.com/sponsors/inputmice) and bank transfer.--#### 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.--##### 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 explicitly 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 behavior 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 <= 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?