2014-08-31 14:28:21 +00:00
package eu.siacs.conversations ;
import android.graphics.Bitmap ;
2020-06-12 06:26:33 +00:00
import android.net.Uri ;
2014-08-31 14:28:21 +00:00
2021-03-23 10:52:34 +00:00
import java.util.Arrays ;
2018-03-26 11:29:01 +00:00
import java.util.Collections ;
import java.util.List ;
2021-04-30 08:54:36 +00:00
import java.util.Locale ;
2018-03-26 11:29:01 +00:00
2021-03-23 10:52:34 +00:00
import eu.siacs.conversations.crypto.XmppDomainVerifier ;
2020-05-15 15:06:16 +00:00
import eu.siacs.conversations.xmpp.Jid ;
2021-01-23 08:25:34 +00:00
import eu.siacs.conversations.xmpp.chatstate.ChatState ;
2015-02-21 10:06:52 +00:00
2014-08-31 14:28:21 +00:00
public final class Config {
2019-01-27 19:54:45 +00:00
private static final int UNENCRYPTED = 1 ;
private static final int OPENPGP = 2 ;
private static final int OTR = 4 ;
private static final int OMEMO = 8 ;
2016-02-24 13:47:49 +00:00
2019-01-27 19:54:45 +00:00
private static final int ENCRYPTION_MASK = UNENCRYPTED | OPENPGP | OTR | OMEMO ;
2016-02-24 13:47:49 +00:00
2019-01-27 19:54:45 +00:00
public static boolean supportUnencrypted ( ) {
return ( ENCRYPTION_MASK & UNENCRYPTED ) ! = 0 ;
}
2016-02-24 13:47:49 +00:00
2019-01-27 19:54:45 +00:00
public static boolean supportOpenPgp ( ) {
return ( ENCRYPTION_MASK & OPENPGP ) ! = 0 ;
}
2016-02-24 13:47:49 +00:00
2019-01-27 19:54:45 +00:00
public static boolean supportOmemo ( ) {
return ( ENCRYPTION_MASK & OMEMO ) ! = 0 ;
}
2016-02-24 13:47:49 +00:00
2019-01-27 19:54:45 +00:00
public static boolean multipleEncryptionChoices ( ) {
return ( ENCRYPTION_MASK & ( ENCRYPTION_MASK - 1 ) ) ! = 0 ;
}
2016-02-24 13:47:49 +00:00
2021-04-30 08:54:36 +00:00
public static final String LOGTAG = BuildConfig . APP_NAME . toLowerCase ( Locale . US ) ;
2014-08-31 14:28:21 +00:00
2019-01-27 19:54:45 +00:00
public static final Jid BUG_REPORTS = Jid . of ( " bugs@conversations.im " ) ;
2020-06-12 06:26:33 +00:00
public static final Uri HELP = Uri . parse ( " https://help.conversations.im " ) ;
2016-05-28 09:04:18 +00:00
2015-08-03 20:58:17 +00:00
2019-01-27 19:54:45 +00:00
public static final String DOMAIN_LOCK = null ; //only allow account creation for this domain
public static final String MAGIC_CREATE_DOMAIN = " conversations.im " ;
2020-06-13 06:26:32 +00:00
public static final Jid QUICKSY_DOMAIN = Jid . of ( " quicksy.im " ) ;
2019-03-31 15:12:01 +00:00
2019-10-01 10:42:12 +00:00
public static final String CHANNEL_DISCOVERY = " https://search.jabber.network " ;
2019-03-31 15:12:01 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean DISALLOW_REGISTRATION_IN_UI = false ; //hide the register checkbox
2016-02-24 16:12:29 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean USE_RANDOM_RESOURCE_ON_EVERY_BIND = false ;
2018-02-24 19:47:02 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean ALLOW_NON_TLS_CONNECTIONS = false ; //very dangerous. you should have a good reason to set this to true
2018-06-14 13:01:25 +00:00
2019-01-27 19:54:45 +00:00
public static final long CONTACT_SYNC_RETRY_INTERVAL = 1000L * 60 * 5 ;
2018-10-29 11:00:25 +00:00
2018-06-14 13:01:25 +00:00
2019-01-27 19:54:45 +00:00
//Notification settings
public static final boolean HIDE_MESSAGE_TEXT_IN_NOTIFICATION = false ;
public static final boolean ALWAYS_NOTIFY_BY_DEFAULT = false ;
public static final boolean SUPPRESS_ERROR_NOTIFICATION = false ;
2018-06-14 13:01:25 +00:00
2016-05-29 20:55:01 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean DISABLE_BAN = false ; // disables the ability to ban users from rooms
2018-05-05 17:40:43 +00:00
2019-01-27 19:54:45 +00:00
public static final int PING_MAX_INTERVAL = 300 ;
public static final int IDLE_PING_INTERVAL = 600 ; //540 is minimum according to docs;
public static final int PING_MIN_INTERVAL = 30 ;
public static final int LOW_PING_TIMEOUT = 1 ; // used after push received
public static final int PING_TIMEOUT = 15 ;
public static final int SOCKET_TIMEOUT = 15 ;
public static final int CONNECT_TIMEOUT = 90 ;
public static final int POST_CONNECTIVITY_CHANGE_PING_INTERVAL = 30 ;
public static final int CONNECT_DISCO_TIMEOUT = 20 ;
public static final int MINI_GRACE_PERIOD = 750 ;
2014-08-31 14:28:21 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean XEP_0392 = true ; //enables XEP-0392 v0.6.0
2018-08-19 20:33:20 +00:00
2019-01-27 19:54:45 +00:00
public static final int AVATAR_SIZE = 192 ;
public static final Bitmap . CompressFormat AVATAR_FORMAT = Bitmap . CompressFormat . JPEG ;
public static final int AVATAR_CHAR_LIMIT = 9400 ;
2014-09-08 21:58:37 +00:00
2019-01-27 19:54:45 +00:00
public static final int IMAGE_SIZE = 1920 ;
public static final Bitmap . CompressFormat IMAGE_FORMAT = Bitmap . CompressFormat . JPEG ;
public static final int IMAGE_QUALITY = 75 ;
2015-07-21 21:49:35 +00:00
2019-01-27 19:54:45 +00:00
public static final int MESSAGE_MERGE_WINDOW = 20 ;
2014-09-08 21:58:37 +00:00
2019-01-27 19:54:45 +00:00
public static final int PAGE_SIZE = 50 ;
public static final int MAX_NUM_PAGES = 3 ;
public static final int MAX_SEARCH_RESULTS = 300 ;
2014-12-15 22:06:29 +00:00
2019-01-27 19:54:45 +00:00
public static final int REFRESH_UI_INTERVAL = 500 ;
2014-08-31 14:28:21 +00:00
2019-01-27 19:54:45 +00:00
public static final int MAX_DISPLAY_MESSAGE_CHARS = 4096 ;
2019-12-02 12:20:53 +00:00
public static final int MAX_STORAGE_MESSAGE_CHARS = 2 * 1024 * 1024 ; //2MB
2016-05-28 21:13:47 +00:00
2019-01-27 19:54:45 +00:00
public static final long MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000 ;
2016-11-19 20:39:16 +00:00
2019-12-29 14:34:02 +00:00
//remove *other* omemo devices from *your* device list announcement after not seeing any activity from them for 42 days. They will automatically add themselves after coming back online.
public static final long OMEMO_AUTO_EXPIRY = 42 * MILLISECONDS_IN_DAY ;
2021-03-23 10:52:34 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean REMOVE_BROKEN_DEVICES = false ;
public static final boolean OMEMO_PADDING = false ;
public static final boolean PUT_AUTH_TAG_INTO_KEY = true ;
2021-03-03 13:03:08 +00:00
public static final boolean AUTOMATICALLY_COMPLETE_SESSIONS = true ;
2016-12-18 10:49:27 +00:00
2019-09-28 11:14:59 +00:00
public static final boolean USE_BOOKMARKS2 = false ;
2016-11-19 20:39:16 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean DISABLE_PROXY_LOOKUP = false ; //useful to debug ibb
2019-09-04 14:14:01 +00:00
public static final boolean USE_DIRECT_JINGLE_CANDIDATES = true ;
2020-04-07 19:26:51 +00:00
public static final boolean DISABLE_HTTP_UPLOAD = false ;
2019-01-27 19:54:45 +00:00
public static final boolean EXTENDED_SM_LOGGING = false ; // log stanza counts
public static final boolean BACKGROUND_STANZA_LOGGING = false ; //log all stanzas that were received while the app is in background
public static final boolean RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE = true ; //setting to true might increase power consumption
2014-11-14 13:04:34 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean ENCRYPT_ON_HTTP_UPLOADED = false ;
2015-06-29 00:04:58 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean X509_VERIFICATION = false ; //use x509 certificates to verify OMEMO keys
2021-05-04 15:52:17 +00:00
public static final boolean REQUIRE_RTP_VERIFICATION = false ; //require a/v calls to be verified with OMEMO
2015-10-12 11:18:20 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean ONLY_INTERNAL_STORAGE = false ; //use internal storage instead of sdcard to save attachments
2016-11-08 10:45:20 +00:00
2019-01-27 19:54:45 +00:00
public static final boolean IGNORE_ID_REWRITE_IN_MUC = true ;
2020-09-02 08:14:00 +00:00
public static final boolean MUC_LEAVE_BEFORE_JOIN = false ;
2015-10-14 09:15:18 +00:00
2019-12-04 18:15:30 +00:00
public static final boolean USE_LMC_VERSION_1_1 = true ;
2019-09-13 14:38:15 +00:00
2019-01-27 19:54:45 +00:00
public static final long MAM_MAX_CATCHUP = MILLISECONDS_IN_DAY * 5 ;
public static final int MAM_MAX_MESSAGES = 750 ;
2014-12-08 20:59:14 +00:00
2020-01-18 11:08:03 +00:00
public static final ChatState DEFAULT_CHAT_STATE = ChatState . ACTIVE ;
2019-01-27 19:54:45 +00:00
public static final int TYPING_TIMEOUT = 8 ;
2015-02-21 10:06:52 +00:00
2019-01-27 19:54:45 +00:00
public static final int EXPIRY_INTERVAL = 30 * 60 * 1000 ; // 30 minutes
2017-01-23 16:14:30 +00:00
2019-04-30 09:23:15 +00:00
public static final String [ ] ENABLED_CIPHERS = {
2019-01-27 19:54:45 +00:00
" TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 " ,
" TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA384 " ,
" TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA256 " ,
" TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 " ,
" TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA " ,
" TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA " ,
2015-01-14 17:20:02 +00:00
2019-01-27 19:54:45 +00:00
" TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 " ,
" TLS_DHE_RSA_WITH_AES_128_GCM_SHA384 " ,
" TLS_DHE_RSA_WITH_AES_256_GCM_SHA256 " ,
" TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 " ,
2015-01-14 17:20:02 +00:00
2019-01-27 19:54:45 +00:00
" TLS_DHE_RSA_WITH_CAMELLIA_256_SHA " ,
2015-01-14 17:20:02 +00:00
2019-01-27 19:54:45 +00:00
// Fallback.
" TLS_RSA_WITH_AES_128_GCM_SHA256 " ,
" TLS_RSA_WITH_AES_128_GCM_SHA384 " ,
" TLS_RSA_WITH_AES_256_GCM_SHA256 " ,
" TLS_RSA_WITH_AES_256_GCM_SHA384 " ,
" TLS_RSA_WITH_AES_128_CBC_SHA256 " ,
" TLS_RSA_WITH_AES_128_CBC_SHA384 " ,
" TLS_RSA_WITH_AES_256_CBC_SHA256 " ,
" TLS_RSA_WITH_AES_256_CBC_SHA384 " ,
" TLS_RSA_WITH_AES_128_CBC_SHA " ,
" TLS_RSA_WITH_AES_256_CBC_SHA " ,
} ;
2015-01-14 17:20:02 +00:00
2019-06-17 15:37:02 +00:00
public static final String [ ] WEAK_CIPHER_PATTERNS = {
2019-01-27 19:54:45 +00:00
" _NULL_ " ,
" _EXPORT_ " ,
" _anon_ " ,
" _RC4_ " ,
" _DES_ " ,
" _MD5 " ,
} ;
public static class OMEMO_EXCEPTIONS {
//if the own account matches one of the following domains OMEMO won’ t be turned on automatically
public static final List < String > ACCOUNT_DOMAINS = Collections . singletonList ( " s.ms " ) ;
//if the contacts domain matches one of the following domains OMEMO won’ t be turned on automatically
//can be used for well known, widely used gateways
2021-03-23 10:52:34 +00:00
private static final List < String > CONTACT_DOMAINS = Arrays . asList (
" cheogram.com " ,
" *.covid.monal.im "
) ;
public static boolean matchesContactDomain ( final String domain ) {
return XmppDomainVerifier . matchDomain ( domain , CONTACT_DOMAINS ) ;
}
2019-01-27 19:54:45 +00:00
}
private Config ( ) {
}
2018-03-11 18:09:35 +00:00
2019-01-27 19:54:45 +00:00
public static final class Map {
public final static double INITIAL_ZOOM_LEVEL = 4 ;
public final static double FINAL_ZOOM_LEVEL = 15 ;
public final static int MY_LOCATION_INDICATOR_SIZE = 10 ;
public final static int MY_LOCATION_INDICATOR_OUTLINE_SIZE = 3 ;
public final static long LOCATION_FIX_TIME_DELTA = 1000 * 10 ; // ms
public final static float LOCATION_FIX_SPACE_DELTA = 10 ; // m
public final static int LOCATION_FIX_SIGNIFICANT_TIME_DELTA = 1000 * 60 * 2 ; // ms
}
2021-08-20 19:53:01 +00:00
2021-08-20 20:40:06 +00:00
// How deep nested quotes should be displayed. '2' means one quote nested in another.
2021-08-21 15:25:06 +00:00
public static final int QUOTE_MAX_DEPTH = 7 ;
2021-08-20 20:40:06 +00:00
// How deep nested quotes should be created on quoting a message.
2021-08-21 15:25:06 +00:00
public static final int QUOTING_MAX_DEPTH = 1 ;
2014-08-31 14:28:21 +00:00
}