mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
Compare commits
674 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ad6f232d34 | |||
| efbe43ec70 | |||
| 5e38b25c43 | |||
| 6f3f356997 | |||
| d6f485511c | |||
| a527b2f404 | |||
| 7c77b946ed | |||
| ca77886012 | |||
| fa5e305dff | |||
| 9e70bfb5ae | |||
| f4c7a9439d | |||
| 5d05e99ad6 | |||
| 79bd1c7cb3 | |||
| 848a86c718 | |||
| e759efc389 | |||
| 63ea218b98 | |||
| 07f4a859f3 | |||
| 34eeec4a39 | |||
| 7f1734b57c | |||
| 83fa4c493d | |||
| cbc8d2b659 | |||
| 6ff1c7a689 | |||
| b10185b6b9 | |||
| 6ef35c6ce1 | |||
| e04e6dfe06 | |||
| 60b322d83e | |||
| 94e597d2d1 | |||
| c1168566f3 | |||
| 72fc6ca4dc | |||
| b2a3042d02 | |||
| ed4c5e7a72 | |||
| 29a0f3dadb | |||
| 1820af288e | |||
| be48179a25 | |||
| 2aa4245563 | |||
| 54b5dba6ea | |||
| 60fa0c98df | |||
| ea60418a70 | |||
| 2bd1493a42 | |||
| 04a22cc8c6 | |||
| d2780c4c03 | |||
| bc73e1a2ba | |||
| 0522aef0fd | |||
| d5a0be0c9c | |||
| d66acbb71e | |||
| 5c06156463 | |||
| c07b2b4aa1 | |||
| 389dddc9ea | |||
| 5dfdc94468 | |||
| 52d65c1bbb | |||
| f0f07055cf | |||
| c6c66f19f2 | |||
| fb3d95264a | |||
| 92e67bd80a | |||
| 1518bab671 | |||
| 632da643af | |||
| 7353873281 | |||
| f9ac0375b9 | |||
| 78820ec18a | |||
| 3c0e4fd853 | |||
| 31c9de1f03 | |||
| 4240c8b324 | |||
| f47fff292f | |||
| 9106f12b77 | |||
| be709fb6df | |||
| fca0c03087 | |||
| 2613be7216 | |||
| 43941f9075 | |||
| 765e2b490e | |||
| cfae361b88 | |||
| bdebd98627 | |||
| be159407ff | |||
| 9daa2d77cd | |||
| 05d2d0964f | |||
| 10c4a105bb | |||
| fe602004c7 | |||
| e2d7f2c3d3 | |||
| 6996836f80 | |||
| 7d689dc1d6 | |||
| 9960423b57 | |||
| 06183a9135 | |||
| 796acf1bb0 | |||
| 64e4816f5e | |||
| 1680d332f5 | |||
| 77ee5c6bc0 | |||
| f8c678b7ff | |||
| cde74ae2e1 | |||
| 5fd3352d81 | |||
| e41b7a4701 | |||
| dd85322333 | |||
| c7bffb85fd | |||
| 3518f3d213 | |||
| b31774c899 | |||
| eebb64ff04 | |||
| ee1a6ea5c6 | |||
| 063e80bbf7 | |||
| 9f30ebd62c | |||
| ae53415545 | |||
| 8a495411a3 | |||
| 2f432bfd3b | |||
| b2b006c512 | |||
| 7b63d383ee | |||
| 2b3a56bb26 | |||
| e3408af5be | |||
| b14b8eea9d | |||
| 5e6c5d7c5e | |||
| c1eff8362f | |||
| fbca401488 | |||
| 39fe0dd523 | |||
| 0491018c24 | |||
| f91ceb8463 | |||
| 9f1def20cd | |||
| 64a8c7755d | |||
| 12807763d6 | |||
| fbf8637c97 | |||
| 8aedbc60a4 | |||
| 38c3b5561b | |||
| 3e21f9be4d | |||
| ad1159c05c | |||
| 314ecf1639 | |||
| df6ac480c6 | |||
| 8974a62a0c | |||
| d2c8e2e63a | |||
| 11600184be | |||
| ee78397614 | |||
| b33311b9fb | |||
| b90f6e296a | |||
| 5789390451 | |||
| 1a84cd05a5 | |||
| 3578a9bef1 | |||
| 52280bf744 | |||
| 26645da56d | |||
| 828ff3d8ca | |||
| 7954e94d45 | |||
| c1e47f4a9c | |||
| d3193221f6 | |||
| e7b4accea0 | |||
| 67baedc0dc | |||
| 74c02932c3 | |||
| 2968d033f2 | |||
| 43d48fa510 | |||
| 337f353220 | |||
| 218295c4f3 | |||
| bf86d4f1b7 | |||
| d383bcc451 | |||
| 2e1a40b606 | |||
| 10c538ac8e | |||
| 35852604ea | |||
| 0c8ecaf8df | |||
| cbe70a93db | |||
| 7768ef3ff9 | |||
| d337230a4b | |||
| de76377f3b | |||
| f223b22ff8 | |||
| 9850e6fff7 | |||
| 6ab94814ca | |||
| e0db504b18 | |||
| fe44eec6c8 | |||
| 7bc595a889 | |||
| 5133461eb7 | |||
| b4b12862fd | |||
| 1340166a91 | |||
| 1663502d35 | |||
| 9a67f5b32a | |||
| 773913409f | |||
| e6988e3f61 | |||
| 0047259457 | |||
| 3e9c977b3f | |||
| 3a49e30d93 | |||
| 11addb6522 | |||
| 6353bb94f4 | |||
| 5df2ba4325 | |||
| 2f79310db6 | |||
| 129278443d | |||
| 0e27692c32 | |||
| 92be6947db | |||
| 884ba32ce9 | |||
| fe2ac243c7 | |||
| 4b978c0124 | |||
| 8bf799ec2a | |||
| f92225528c | |||
| 796b723be7 | |||
| 544ab41aa4 | |||
| cca9dfb04a | |||
| faa94acbcb | |||
| e7517c23ad | |||
| 370afbf2ce | |||
| bcee64317d | |||
| 6fe4d57b48 | |||
| 906db9155a | |||
| 9b7b35acb1 | |||
| 5d25ed7715 | |||
| 5691ab9e84 | |||
| 64aa0fb49c | |||
| d3fe672ec0 | |||
| 4e199c0080 | |||
| 8fd8927293 | |||
| 320f0ba27d | |||
| c7d903f64a | |||
| f394b22e45 | |||
| e7ced91670 | |||
| 35836ad18f | |||
| 2e99f6ee93 | |||
| 5c551cb2a8 | |||
| 6490a641da | |||
| 06164d240d | |||
| b729e93b8a | |||
| d7345f75e2 | |||
| 695e1e06dd | |||
| ccedf31b96 | |||
| 31f89cec02 | |||
| 42561266ba | |||
| 17a182625d | |||
| 625d0ed66c | |||
| f7f1f29531 | |||
| 134fbc7188 | |||
| 5d26387aa3 | |||
| 4a3070bb54 | |||
| 8377f23c58 | |||
| ec4c96dd92 | |||
| f0fb8e62f8 | |||
| 823e6b6e1f | |||
| 49a59fbebe | |||
| 3424d60ea4 | |||
| 1ead71c87a | |||
| 7a44182c3f | |||
| 75c111cb0b | |||
| 1c9b51f5dc | |||
| 5e88059283 | |||
| 76307706f1 | |||
| 4db770b1f8 | |||
| 96e635f0bd | |||
| 7dd3176a06 | |||
| 16037e7693 | |||
| 6f5756c331 | |||
| 8aa7dfabe6 | |||
| 13c45f37e7 | |||
| c45b5fe9e4 | |||
| 0a9d042747 | |||
| 6cbbb9608e | |||
| f8766820db | |||
| a2847ea45e | |||
| 841e5ee30a | |||
| 624f797888 | |||
| a640c81c73 | |||
| cd344daf5a | |||
| 247ddfcf1a | |||
| d09ad5748d | |||
| 4658adc2cd | |||
| 30ddf2b03e | |||
| edb2c963c6 | |||
| cf2f6bd2ec | |||
| 62ad0e942f | |||
| 8cc8ee404d | |||
| 180b278a95 | |||
| e91671b958 | |||
| 7e0fc59687 | |||
| 255a96d393 | |||
| dfed8aec00 | |||
| a498d58c2a | |||
| 4ec02a59de | |||
| 276c0785fa | |||
| 6a4efb3358 | |||
| bcad4a7302 | |||
| 120007d87a | |||
| 55eab9dd0b | |||
| ea99f0cd48 | |||
| 6f6cd80516 | |||
| 2bb63878b1 | |||
| c5d7ec0946 | |||
| da7a3fc50a | |||
| 9c36749619 | |||
| cb3fd74af9 | |||
| 7b11c5dd79 | |||
| e3c108c773 | |||
| 6621046d6d | |||
| ed23c93526 | |||
| 19cd640dc8 | |||
| f1fe3e0807 | |||
| fce62453d1 | |||
| 441f943190 | |||
| fb759e12f0 | |||
| d1737cb69f | |||
| c94f9371fe | |||
| c88a1b53b0 | |||
| 2e2aeed127 | |||
| 6e764a6f2f | |||
| 669d8f4cba | |||
| d8cdc21880 | |||
| c083195acf | |||
| 139dafab7a | |||
| ef8ac7ae04 | |||
| 7c6d47bfae | |||
| 185fd5d730 | |||
| ef4f79b4a3 | |||
| c09be6c35b | |||
| 2a385c6768 | |||
| 93a114cff4 | |||
| 49dab181aa | |||
| 3ad9ffd94f | |||
| 53f1c73e52 | |||
| 641c3da629 | |||
| 491bbfade0 | |||
| f8dc6bb3db | |||
| b0d842b3c4 | |||
| 9cc4422f9e | |||
| dce7d56fb2 | |||
| 9b9a546e69 | |||
| 1787d8665c | |||
| f29f8bf5f9 | |||
| 3b7fd24fcb | |||
| acdbba6351 | |||
| 2134f97956 | |||
| f45fd60ccd | |||
| dabe68fbf8 | |||
| 7193b4d64e | |||
| bf138aa2e7 | |||
| b5000e2fb9 | |||
| cbd4e2b520 | |||
| bf4087792d | |||
| 25164af440 | |||
| 9579bd5bc8 | |||
| 713623c11d | |||
| f2ee08a7f1 | |||
| 66339d77bf | |||
| 1da80e9264 | |||
| f501c41d16 | |||
| ec7e3fc91a | |||
| 5e91902a26 | |||
| 8b5b2d2f95 | |||
| 523b62cfeb | |||
| 19c158d1c4 | |||
| af1cbd09ce | |||
| 9b3dc7d434 | |||
| 4547f771f5 | |||
| be6f30da24 | |||
| bb0ae0772e | |||
| c38c5a5d36 | |||
| bd3ab20981 | |||
| 3dc216ca7f | |||
| 9d9630041e | |||
| 5095892847 | |||
| 25d0f4d017 | |||
| 3306c3e8d1 | |||
| fa0c59d01c | |||
| 94291bd0ab | |||
| ff0e004e20 | |||
| 415785b59d | |||
| a8f17d618b | |||
| c0e45abd3d | |||
| ca8767e0b0 | |||
| de96a4dc6e | |||
| 04d8437b89 | |||
| 38ed95003f | |||
| ca174e82a2 | |||
| f08d5a64b0 | |||
| d467285036 | |||
| 7b833b43d7 | |||
| f8cee59e28 | |||
| 2f85654567 | |||
| 205a7fd10e | |||
| b0ab464ef8 | |||
| c1a49332d0 | |||
| a69ff20ac4 | |||
| ddd4cacd1d | |||
| 836e11ca27 | |||
| 4fc53a4632 | |||
| 1391a902b0 | |||
| 876bdcacf1 | |||
| 37e6bbc53c | |||
| ab05222c32 | |||
| e87a3de296 | |||
| 9d96d7311c | |||
| 52b7f10c1b | |||
| 3ae4bf238e | |||
| a630fad9b0 | |||
| 6543ad0893 | |||
| 4ca4d81345 | |||
| 3b8a3e10ad | |||
| 814f892e98 | |||
| 8a2149b67d | |||
| ebfd9ca122 | |||
| ba34971d2b | |||
| 91f8e88db3 | |||
| a93b12909d | |||
| 8403abc5b9 | |||
| c49599f9c8 | |||
| deed7a569c | |||
| ec590613d0 | |||
| 24d1ca9015 | |||
| 0c914b3771 | |||
| 24e363e130 | |||
| 85b9444f86 | |||
| 19f6bd3b5c | |||
| 1999bab9a0 | |||
| e6325578ca | |||
| 44eb9b32fd | |||
| c5cf11d36a | |||
| fc36c6793e | |||
| 669a1a769d | |||
| 257e200c9c | |||
| 2c2bd2bf48 | |||
| 95fbe25b0a | |||
| ab7b2f4b1b | |||
| 97552bc751 | |||
| a81cdb79ad | |||
| 1b8de09c41 | |||
| db427a036e | |||
| ab2151b974 | |||
| 0fa59fa22d | |||
| ec7807e662 | |||
| d47196d899 | |||
| b692abc235 | |||
| 07b55b739e | |||
| e3809cf1f8 | |||
| 564c0fe27d | |||
| 705e283cf5 | |||
| 40b5e10999 | |||
| d1f77d9de5 | |||
| 0704f7f1e7 | |||
| 78b3c3883d | |||
| e28e6b9b73 | |||
| 4ed51b6b56 | |||
| 084707eb67 | |||
| 0eb02b59a3 | |||
| 00d411dd5a | |||
| 770861d6db | |||
| 17986e9d86 | |||
| 5ce1f415ce | |||
| e1c92712a0 | |||
| 1816a50dee | |||
| 6ec0f1bfce | |||
| db410d8b44 | |||
| 6c6c04ba53 | |||
| cd07f3de96 | |||
| 145432a57d | |||
| 12072a0342 | |||
| c6f3761bb9 | |||
| 673f0e78b1 | |||
| 20acd38ab4 | |||
| 65c8960ec8 | |||
| bf7095d0ee | |||
| 089ecc67d1 | |||
| 0f84af5b32 | |||
| 710ed6dd56 | |||
| a6b168f4eb | |||
| 335aabd4ff | |||
| 98c97a8aed | |||
| 23d18d2ac5 | |||
| a136b8b1e5 | |||
| 7f8b71cf28 | |||
| 9e5f2b18b9 | |||
| bdfeddecd5 | |||
| 883536a3a5 | |||
| 23cbe63cd4 | |||
| 3013af2a7a | |||
| f0f53455a5 | |||
| d8b49f57a9 | |||
| 7eaaf3bbb4 | |||
| d4f83cd38b | |||
| 9eca5f518e | |||
| 7b52bb6c85 | |||
| d17bed02e6 | |||
| b4b194a59b | |||
| 1439bc0a86 | |||
| c6f62a2b81 | |||
| e3a9f42a56 | |||
| 323bcef1fe | |||
| 095b92b498 | |||
| 18c2ccd66c | |||
| 9a5415eb66 | |||
| 28fdeac01c | |||
| a7e4267b9b | |||
| d6837aa121 | |||
| 5a2913b36f | |||
| 20180fa89c | |||
| 5da3748a6a | |||
| c6b89055d8 | |||
| 2308feea8c | |||
| bfda7ab2c3 | |||
| 953ce32bea | |||
| 961fa5ffe6 | |||
| b1b2959bcb | |||
| a3b0ee1ef9 | |||
| 70ef715dc6 | |||
| ffa58aae34 | |||
| 24f5209c03 | |||
| 7fd96732d6 | |||
| 4fa5f1f5c6 | |||
| 6e0759f719 | |||
| 63434e1e2f | |||
| f4701b92e2 | |||
| 9c17bc412a | |||
| d40144d50c | |||
| 131c0f5a37 | |||
| 7086314d8b | |||
| 6649165b56 | |||
| d75b2c2bb7 | |||
| c46d174869 | |||
| 17e03f2903 | |||
| 2c12a34051 | |||
| 2d3dde2101 | |||
| d539f5ecf2 | |||
| b17d6be4fc | |||
| 1c9b5977a8 | |||
| 3c737f2360 | |||
| 49471999b9 | |||
| 9ac5e714b8 | |||
| 94defa3091 | |||
| 052ada221e | |||
| 1d5e4cf2a9 | |||
| c46aef3ea0 | |||
| 86a8fbf463 | |||
| d30e141693 | |||
| 305940396e | |||
| 2ab567a9d3 | |||
| 238ec5b299 | |||
| a9c488ff03 | |||
| 8817b50c95 | |||
| 4c810c2b50 | |||
| 84c3710a35 | |||
| be7be9bba4 | |||
| f4d5547da7 | |||
| b50ae284fb | |||
| 97716d5c26 | |||
| 52850c25b0 | |||
| e77253c843 | |||
| 6aed8d003f | |||
| 0083e60c49 | |||
| 0fc79fd845 | |||
| 5117e103bb | |||
| a7c3bc7ac5 | |||
| 056f9bd4fb | |||
| 83b16e5f4b | |||
| ee17c6d75e | |||
| 877989b5c1 | |||
| c0525ac69c | |||
| e9d2a39098 | |||
| eef8609a66 | |||
| 4d6fd16767 | |||
| b43685bcdf | |||
| 794062b9ed | |||
| b398870823 | |||
| e68c50d614 | |||
| f6a27718a2 | |||
| 876721fae5 | |||
| f136fa3e3a | |||
| 0fdac57c68 | |||
| 8e55a3dbf3 | |||
| b3375f4f19 | |||
| 923227a0e8 | |||
| 14ecafe0e2 | |||
| b607ca21ff | |||
| b93f8323ab | |||
| 77f43cde9a | |||
| d6efa3c7e5 | |||
| e4d018393d | |||
| 9a816090de | |||
| 4b04aa65be | |||
| e461e2f7f1 | |||
| 489bb55788 | |||
| 684f8834fa | |||
| 9d244611bc | |||
| 3533916149 | |||
| 46bc3e7f72 | |||
| ed0f0107e3 | |||
| a855d7043a | |||
| 66fd795763 | |||
| b440a31820 | |||
| 05da43484f | |||
| a58de2278b | |||
| 6743df23e9 | |||
| 568a3f383f | |||
| 35ec0d05e2 | |||
| 6c212a5d3d | |||
| 6ead7207ec | |||
| 0d5223036d | |||
| 640fc433b8 | |||
| b6e43a6994 | |||
| 3390b865e0 | |||
| 883486da9c | |||
| d048203f45 | |||
| f9d70d1196 | |||
| d1f85e6dc4 | |||
| 4413b7b4fb | |||
| 7a4f263a62 | |||
| 1a360d5282 | |||
| 74ef8dc1c6 | |||
| dc785fc116 | |||
| 1da2d35af4 | |||
| 884be3a93e | |||
| 9a25328787 | |||
| bb3f4a2e06 | |||
| 8e4c5d6b63 | |||
| 1b46edaddf | |||
| aa0c72356f | |||
| ee8fd429f4 | |||
| bc022f5196 | |||
| d4dcdcf3bd | |||
| 74b2369ca9 | |||
| 9eafdbd817 | |||
| 0a21d1d1b4 | |||
| b0cb6c73ba | |||
| b6367416e5 | |||
| 0b582dd287 | |||
| d5cf919bcb | |||
| 490f1efe36 | |||
| c125d4fa24 | |||
| 389098699a | |||
| df696e5fab | |||
| e8801d1b64 | |||
| 8bfc44c8ca | |||
| 36e963e717 | |||
| 9e8fcf8ed7 | |||
| 6412d25420 | |||
| a470366f03 | |||
| 1434ce6f57 | |||
| 654ba5b460 | |||
| e3835f70f7 | |||
| bbb803f91c | |||
| 6a4c73c821 | |||
| 853ce3c7a3 | |||
| d2ab4817b1 | |||
| 9ff1cafd5e | |||
| bf6b678e2b | |||
| 6c1f787a38 | |||
| b059741161 | |||
| fdd5cc5d4b | |||
| 77465b5802 | |||
| d17567029d | |||
| 4610a64732 | |||
| 0358e8ffcb | |||
| 406c263d82 | |||
| 6ed070e437 | |||
| 1e4cfa124e | |||
| c42ba0f599 | |||
| 8798275170 | |||
| ac6495ff20 | |||
| 8ae47e97cf | |||
| 6a1ff0bace | |||
| 047cd9a121 | |||
| 555547b6cc | |||
| 5fe355fe90 | |||
| 6af3b0d985 | |||
| 92d6147644 | |||
| 72fb9992a1 | |||
| e8413019ff | |||
| 289118e671 | |||
| 286a84b1d4 | |||
| 8c8c003f2b | |||
| a06e36993d | |||
| ce054d93a8 | |||
| cabc159cd8 | |||
| c78cbbe145 | |||
| a297c71a90 | |||
| 247de63362 | |||
| 20f7c7c616 | |||
| 6364903a28 | |||
| 48bb77cfae | |||
| 53bfe52797 | |||
| a8bc01e6c1 | |||
| 3fbccf3408 | |||
| 86656f1155 | |||
| 89473b8067 | |||
| 887f5881f0 | |||
| aee757e71c | |||
| 30d5eeeb45 | |||
| d2c2f2cf07 | |||
| f83d5a0dbb | |||
| c30ddf9c77 | |||
| e14b878aef | |||
| 9e3ebda12a | |||
| 4bb42b9995 | |||
| 59b158fe09 |
@@ -0,0 +1,3 @@
|
||||
ko_fi: adbenitez
|
||||
liberapay: adbenitez
|
||||
custom: "https://arcanechat.me/#contribute"
|
||||
@@ -1 +1 @@
|
||||
blank_issues_enabled: true
|
||||
blank_issues_enabled: false
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
version: 2
|
||||
mergeable:
|
||||
- when: pull_request.*
|
||||
name: "Changelog check"
|
||||
validate:
|
||||
- do: or
|
||||
validate:
|
||||
- do: description
|
||||
must_include:
|
||||
regex: '#skip-changelog'
|
||||
- do: and
|
||||
validate:
|
||||
- do: dependent
|
||||
changed:
|
||||
file: '**/*.java'
|
||||
required: ['CHANGELOG.md']
|
||||
fail:
|
||||
- do: checks
|
||||
status: 'action_required'
|
||||
payload:
|
||||
title: CHANGELOG.md might need an update
|
||||
summary: "Please update CHANGELOG.md or add #skip-changelog to the description"
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
run: ./gradlew --no-daemon -PABI_FILTER=armeabi-v7a assembleFossDebug
|
||||
|
||||
- name: Upload APK
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: app-preview.apk
|
||||
path: 'build/outputs/apk/foss/debug/*.apk'
|
||||
|
||||
@@ -49,11 +49,12 @@ jobs:
|
||||
- name: Build APK
|
||||
run: |
|
||||
mkdir -p ~/.gradle
|
||||
echo -n ${{ secrets.SIGNING_KEY }} | base64 -d >> ~/app.keystore
|
||||
echo "DC_RELEASE_STORE_FILE=$HOME/app.keystore" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_STORE_PASSWORD=${{ secrets.KEY_STORE_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
echo -n ${{ secrets.KEYSTORE_FILE }} | base64 -d >> ~/keystore.jks
|
||||
echo "DC_RELEASE_STORE_FILE=$HOME/keystore.jks" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_STORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_ALIAS_FDROID=${{ secrets.ALIAS_FDROID }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_ALIAS_GPLAY=${{ secrets.ALIAS_GPLAY }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
./gradlew assembleFossRelease
|
||||
rm build/outputs/apk/foss/release/*universal*
|
||||
./gradlew assembleGplayRelease
|
||||
@@ -63,7 +64,7 @@ jobs:
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
body: '[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite) [<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite) [<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite) [<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)'
|
||||
body: '[<img src="store/get-it-on-gplay.png" alt="Get it on Google Play" height="48">](https://play.google.com/store/apps/details?id=com.github.arcanechat) [<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite) [<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)'
|
||||
prerelease: ${{ contains(github.event.ref, '-beta') }}
|
||||
fail_on_unmatched_files: true
|
||||
files: build/outputs/apk/foss/release/*.apk
|
||||
|
||||
@@ -1,4 +1,148 @@
|
||||
# ArcaneChat Android Changelog
|
||||
# Delta Chat Android Changelog
|
||||
|
||||
## Unreleased
|
||||
|
||||
* fix: webxdc.selfName uses the name otherwise displayed
|
||||
|
||||
## v1.58.2
|
||||
2025-04
|
||||
|
||||
* fix draft writing area disappearing for some chats
|
||||
* update to core 1.159.2
|
||||
|
||||
## v1.58.1
|
||||
2025-04
|
||||
|
||||
* tapping info messages with contacts open the contact's profile
|
||||
* hide superfluous "Show Classic E-mails" advanced setting for chatmail
|
||||
* show profile bio/status under name in main settings screen
|
||||
* remove mostly non-telling transport addresses when referring to a contact;
|
||||
the contact's profile gives a much better overview
|
||||
* Disable AEAP to enable us to overhaul some things - there are big changes underway in this area, which will come in a few months
|
||||
* don't display email address in contact list and member list for contacts with green-checkmark
|
||||
* avoid crash in Notifications preferences if ringtone title can't be read
|
||||
* don't display forwarded messages as "edited" if original message was edited
|
||||
* support importing contact from ProtonMail vCard attachments received in chats
|
||||
* send encrypted in the experimental broadcast lists feature
|
||||
* wait for QR scan (or invite link click) process to complete before allowing to send messages
|
||||
* show connectivity status dot when profile is connecting or not connected
|
||||
* never send Autocrypt-Gossip in broadcast lists.
|
||||
* update to core 1.159.1
|
||||
|
||||
## v1.56.1
|
||||
2025-03
|
||||
|
||||
* ignore click in info-messages from deleted in-chat apps
|
||||
* data saving: do not send messages to the server if user is the only member of the chat in single-device usage
|
||||
* protect metadata: encrypt message's sent date
|
||||
* do not fail to send messages in groups if some encryption keys are missing
|
||||
* synchronize contact name changes across devices
|
||||
* fix changing group names that was not working in some situations
|
||||
* fix: do not show outdated message text in "Message Info" of an edited message
|
||||
* some more small bug fixes and updated translations
|
||||
* update to core 1.158.0
|
||||
|
||||
## v1.56.0
|
||||
2025-03
|
||||
|
||||
* allow to edit messages
|
||||
* allow to delete messages for everyone
|
||||
* add mute option "8 hours"
|
||||
* add menu option to easily save/unsave selected message
|
||||
* improve deletion confirmation for "Device Messages"
|
||||
* remove dangerous encryption options
|
||||
* always paste as plain text in message draft area
|
||||
* some small bug fixes and updated translations
|
||||
* update to core 1.157.2
|
||||
|
||||
## v1.54.4
|
||||
2025-03
|
||||
|
||||
* allow better avatar (profile picture) quality
|
||||
* remove notifications from chat that was deleted from other device
|
||||
* when a chat is deleted, also delete its messages from server
|
||||
* avoid freezing when opening the app for the first time after install
|
||||
* avoid crash when adding chat shortcut to home screen
|
||||
* some small bug fixes and updated translations
|
||||
* update to core 1.156.3
|
||||
|
||||
## v1.54.3
|
||||
2025-03
|
||||
|
||||
* allow to add any chat to the home screen
|
||||
* update "forward message" icon and organize the messages actions bar
|
||||
* do not allow non-members to change ephemeral timer settings of groups
|
||||
* properly display padlock when the message is not sent over the network
|
||||
* sync message deletion to other devices
|
||||
* sync chat deletion across devices
|
||||
* Show sender in "Saved Messages"
|
||||
* allow scanning multiple QR-invitation codes without needing to wait for completion to scan the next one
|
||||
* when reactions are seen in one device, remove notification from your other devices
|
||||
* don't disturb with notification when someone leave a group
|
||||
* detect incompatible profiles from newer app version when importing them
|
||||
* prepare the app for receiving edited messages
|
||||
* prepare the app for receiving message deletion requests
|
||||
* do some small bug fixes
|
||||
* update translations
|
||||
* update to core 1.156.2
|
||||
|
||||
## v1.54.0
|
||||
2025-02
|
||||
|
||||
* enhanced "Saved Messages" feature, now when forwarding a message to "Saved Messages" chat, it retains the sender information and a button to jump to the original message
|
||||
* Saved messages are marked by a bookmark sign
|
||||
* improve explanation when blocking a contact
|
||||
* improve wording in empty "apps" and "files" tabs in chat media screen
|
||||
* remove deprecated/legacy built-in "half-camera"
|
||||
* UI improvement: keep avatars aligned to message bubble when message has reactions
|
||||
* fix problems when opening attachments in external apps
|
||||
* fix a bug with some big images appearing as blank/transparent
|
||||
* some other small bug fixes
|
||||
* update translations
|
||||
* update to core 1.155.4
|
||||
|
||||
## v1.52.1
|
||||
2025-01
|
||||
|
||||
* the app now requires less storage on your SD card by deduplicating newly received/sent files
|
||||
* some small bug fixes
|
||||
* update translations
|
||||
* update to core 1.155.1
|
||||
|
||||
## v1.52.0
|
||||
2025-01
|
||||
|
||||
* new group consistency algorithm
|
||||
* fix: don't show animated .webp stickers as static stickers
|
||||
* fix the chat shortcuts (created via long-press in launcher) to properly support multi-profile
|
||||
* fix some small bugs in certain android versions and special situations
|
||||
* avoid the app freezing in slow phones in some situations
|
||||
* improve menu in the help screen
|
||||
* update translations
|
||||
* update to core 1.155.0
|
||||
|
||||
## v1.50.5
|
||||
2025-01
|
||||
|
||||
* fix push-notifications handling for certain devices where it was not working correctly
|
||||
* update translations
|
||||
* using core 1.153.0
|
||||
|
||||
## v1.50.4
|
||||
2025-01
|
||||
|
||||
* properly send as animated stickers GIF files selected from keyboard
|
||||
* improve emoji picker in landscape mode and when changing from landscape to portrait
|
||||
* avoid crash when receiving push notifications if the user restricted the app from working in background
|
||||
* improve UI when attaching a file or image to easily recognize it is attached but not sent yet
|
||||
* avoid slow loading of in-chat apps in some devices when quickly re-opening an app after closing it
|
||||
* allow to select multiple images at once in the media picker via "Gallery" button
|
||||
* mark holiday notice messages as bot-generated
|
||||
* don't mark contacts as bot when receiving location-only and sync messages
|
||||
* prefer to encrypt even if peers have their preference to "no preference"
|
||||
* start ephemeral messages timers when the chat is archived or noticed
|
||||
* several bug fixes and updated translations
|
||||
* update to core 1.153.0
|
||||
|
||||
## v1.50.3
|
||||
2024-12
|
||||
@@ -1,10 +1,9 @@
|
||||
## ArcaneChat Android Client
|
||||
|
||||
A [Delta Chat](https://delta.chat/) client for Android.
|
||||
A [Delta Chat](https://delta.chat/) client for Android. Learn more at: https://arcanechat.me
|
||||
|
||||
[<img src="store/get-it-on-gplay.png" alt="Get it on Google Play" height="48">](https://play.google.com/store/apps/details?id=com.github.arcanechat)
|
||||
[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite)
|
||||
[<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite)
|
||||
[<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite)
|
||||
[<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)
|
||||
|
||||
|
||||
@@ -16,7 +15,6 @@ This app has some extended support for WebXDC apps:
|
||||
|
||||
- `window.webxdc.arcanechat` a string with the ArcaneChat version and can be used by app developers
|
||||
to detect when they can use the ArcaneChat-specific features.
|
||||
- `window.webxdc.isCommunity` true if the current account is a community account
|
||||
- `sendToChat()`: extra property `subject` can be set to a text string to set message/email's subject.
|
||||
- `sendToChat()`: extra property `html` can be set to a string of html markup to set the HTML part of the email/message.
|
||||
- `sendToChat()`: the file object parameter also accepts a `type` field that can be one of:
|
||||
|
||||
+12
-13
@@ -13,25 +13,24 @@ on the command-line, in a PR called "update-core-and-stuff-DATE":
|
||||
./scripts/ndk-make.sh
|
||||
```
|
||||
|
||||
a) Update `CHANGELOG.md`
|
||||
from <https://github.com/chatmail/core/blob/main/CHANGELOG.md>,
|
||||
do not just copy and avoid technical terms.
|
||||
The changelog is for the end user and shall show impacts form that angle.
|
||||
Add used core version to end of changelog entry
|
||||
as `update to core 1.2.3` or `using core 1.2.3`
|
||||
|
||||
|
||||
2. update translations and local help:
|
||||
```
|
||||
./scripts/tx-pull-translations.sh
|
||||
./scripts/create-local-help.sh # requires deltachat-pages checked out at ../deltachat-pages
|
||||
```
|
||||
|
||||
the "update-core-and-stuff-DATE" PR can be merged without review
|
||||
(as everything was already reviewed in their repos).
|
||||
|
||||
the following steps are done in a PR called `prep-VERSION` (no leading "v"):
|
||||
|
||||
3. a) update `CHANGELOG.md`
|
||||
from <https://github.com/deltachat/deltachat-core-rust/blob/main/CHANGELOG.md>
|
||||
and <https://github.com/deltachat/deltachat-android/pulls?q=is%3Apr+is%3Aclosed+sort%3Aupdated-desc>.
|
||||
do not just copy and avoid technical terms.
|
||||
the changelog is for the end user and shall show impacts form that angle.
|
||||
b) update changelog date as `YYYY-MM`
|
||||
c) add used core version to end of changelog entry
|
||||
as `update to core 1.2.3` or `using core 1.2.3`
|
||||
3. Update `CHANGELOG.md`:
|
||||
Rename header with version number and add date as `YYYY-MM`
|
||||
|
||||
in case previous entries of the changelog refer to betas or to not officially released versions,
|
||||
the entries can be summarized.
|
||||
@@ -114,7 +113,7 @@ This may take some days.
|
||||
|
||||
on <https://developer.amazon.com/dashboard>:
|
||||
|
||||
12. a) for "Delta Chat", select "Add upcoming version" on the left
|
||||
12. a) click "App List", for "Delta Chat", select "Add upcoming version" on the left
|
||||
b) at "Step 1 / Existing file(s)" hit "Replace", upload the APK from above
|
||||
c) on the "Step 1" page, add "Release notes" from CHANGELOG.md, hit "Next"
|
||||
d) on "Step 2" and "Step 3" pages, hit "Next"
|
||||
@@ -131,7 +130,7 @@ on <https://developer.huawei.com/consumer/en/appgallery>:
|
||||
d) Hit "Submit"; on the next page, confirm version and language
|
||||
|
||||
|
||||
## Releases on Apklis, Passkoocheh
|
||||
## Releases on other stores (ex. Passkoocheh)
|
||||
|
||||
These stores are not under our control.
|
||||
On important updates **ping store maintainers** and ask to update.
|
||||
|
||||
+46
-29
@@ -1,5 +1,5 @@
|
||||
plugins {
|
||||
id 'com.android.application' version '8.1.4'
|
||||
id 'com.android.application' version '8.5.2'
|
||||
id 'com.google.gms.google-services' version '4.4.1'
|
||||
}
|
||||
|
||||
@@ -33,8 +33,8 @@ android {
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
|
||||
defaultConfig {
|
||||
versionCode 30000702
|
||||
versionName "1.50.6"
|
||||
versionCode 30000720
|
||||
versionName "1.58.2"
|
||||
|
||||
applicationId "chat.delta.lite"
|
||||
multiDexEnabled true
|
||||
@@ -87,15 +87,45 @@ android {
|
||||
storeFile file(DC_DEBUG_STORE_FILE )
|
||||
}
|
||||
}
|
||||
release {
|
||||
releaseFdroid {
|
||||
// can be defined at `~/.gradle/gradle.properties` or at "Build/Generate signed APK"
|
||||
if(project.hasProperty("DC_RELEASE_STORE_FILE")) {
|
||||
storeFile file(DC_RELEASE_STORE_FILE)
|
||||
storePassword DC_RELEASE_STORE_PASSWORD
|
||||
keyAlias DC_RELEASE_KEY_ALIAS
|
||||
keyAlias DC_RELEASE_KEY_ALIAS_FDROID
|
||||
keyPassword DC_RELEASE_KEY_PASSWORD
|
||||
}
|
||||
}
|
||||
releaseApk {
|
||||
// can be defined at `~/.gradle/gradle.properties` or at "Build/Generate signed APK"
|
||||
if(project.hasProperty("DC_RELEASE_STORE_FILE")) {
|
||||
storeFile file(DC_RELEASE_STORE_FILE)
|
||||
storePassword DC_RELEASE_STORE_PASSWORD
|
||||
keyAlias DC_RELEASE_KEY_ALIAS_GPLAY
|
||||
keyPassword DC_RELEASE_KEY_PASSWORD
|
||||
}
|
||||
}
|
||||
releaseBundle {
|
||||
if(project.hasProperty("DC_BUNDLE_STORE_FILE")) {
|
||||
storeFile file(DC_BUNDLE_STORE_FILE)
|
||||
storePassword DC_BUNDLE_STORE_PASSWORD
|
||||
keyAlias DC_BUNDLE_KEY_ALIAS
|
||||
keyPassword DC_BUNDLE_STORE_PASSWORD
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
productFlavors {
|
||||
foss {
|
||||
dimension "none"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "false"
|
||||
}
|
||||
gplay {
|
||||
dimension "none"
|
||||
apply plugin: "com.google.gms.google-services"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "true"
|
||||
applicationId "com.github.arcanechat"
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -114,23 +144,12 @@ android {
|
||||
// nb: it is highly recommended to use the same settings in debug+release -
|
||||
// otherwise problems might be noticed delayed only
|
||||
minifyEnabled true
|
||||
signingConfig signingConfigs.release
|
||||
productFlavors.foss.signingConfig signingConfigs.releaseFdroid
|
||||
productFlavors.gplay.signingConfig signingConfigs.releaseApk
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
|
||||
productFlavors {
|
||||
foss {
|
||||
dimension "none"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "false"
|
||||
}
|
||||
gplay {
|
||||
dimension "none"
|
||||
apply plugin: "com.google.gms.google-services"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "true"
|
||||
}
|
||||
}
|
||||
|
||||
if(!project.hasProperty("ABI_FILTER")) {
|
||||
splits {
|
||||
abi {
|
||||
@@ -190,7 +209,7 @@ dependencies {
|
||||
implementation 'com.airbnb.android:lottie:4.2.2' // Lottie animations support.
|
||||
|
||||
implementation 'androidx.sharetarget:sharetarget:1.2.0'
|
||||
implementation 'androidx.webkit:webkit:1.11.0'
|
||||
implementation 'androidx.webkit:webkit:1.12.1'
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.7.0'
|
||||
implementation 'com.google.android.material:material:1.12.0'
|
||||
@@ -210,22 +229,21 @@ dependencies {
|
||||
implementation 'com.google.guava:guava:31.1-android'
|
||||
implementation 'com.google.android.exoplayer:exoplayer-core:2.19.1' // plays video and audio
|
||||
implementation 'com.google.android.exoplayer:exoplayer-ui:2.19.1'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
|
||||
implementation 'com.google.zxing:core:3.3.0' // fixed version to support SDK<24
|
||||
implementation ('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false } // QR Code scanner
|
||||
implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.1' // used as JSON library
|
||||
implementation 'com.google.code.gson:gson:2.9.1' // used as JSON library. Don't upgrade to 2.10.1: https://github.com/deltachat/deltachat-android/pull/2610
|
||||
implementation 'com.google.code.gson:gson:2.12.1' // used as JSON library.
|
||||
implementation "me.leolin:ShortcutBadger:1.1.16" // display messagecount on the home screen icon.
|
||||
implementation 'com.jpardogo.materialtabstrip:library:1.0.9' // used in the emoji selector for the tab selection.
|
||||
implementation 'com.github.chrisbanes:PhotoView:2.1.3' // does the zooming on photos / media
|
||||
implementation 'com.github.penfeizhou.android.animation:glide-plugin:2.25.0' // APNG & animated webp support.
|
||||
implementation 'com.github.Baseflow:PhotoView:2.3.0' // does the zooming on photos / media
|
||||
implementation 'com.github.penfeizhou.android.animation:awebp:3.0.2' // animated webp support.
|
||||
implementation 'com.caverock:androidsvg-aar:1.4' // SVG support.
|
||||
implementation 'com.github.bumptech.glide:glide:4.12.0'
|
||||
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
|
||||
annotationProcessor 'androidx.annotation:annotation:1.8.2'
|
||||
annotationProcessor 'androidx.annotation:annotation:1.9.1'
|
||||
implementation 'com.makeramen:roundedimageview:2.1.0' // crops the avatars to circles
|
||||
implementation 'com.pnikosis:materialish-progress:1.5' // used only in the "Progress Wheel" in Share Activity.
|
||||
implementation 'com.soundcloud.android:android-crop:1.0.1@aar' // used for profile and group avatar selection in Android SDK<19
|
||||
implementation 'com.github.amulyakhare:TextDrawable:558677ea31' // number of unread messages,
|
||||
// the one-letter circle for the contacts (when there is not avatar) and a white background.
|
||||
implementation 'com.googlecode.mp4parser:isoparser:1.0.6' // MP4 recoding; upgrading eg. to 1.1.22 breaks recoding, however, i have not investigated further, just reset to 1.0.6
|
||||
@@ -234,13 +252,12 @@ dependencies {
|
||||
}
|
||||
implementation 'com.annimon:stream:1.1.8' // brings future java streams api to SDK Version < 24
|
||||
|
||||
implementation 'com.getkeepsafe.relinker:relinker:1.4.4' // needed to avoid safe-content-resolver-v14 trying to fetch older non-existing version
|
||||
// Replacement for ContentResolver
|
||||
// that protects against the Surreptitious Sharing attack.
|
||||
// <https://github.com/cketti/SafeContentResolver>
|
||||
implementation 'de.cketti.safecontentresolver:safe-content-resolver-v14:1.0.0'
|
||||
implementation 'de.cketti.safecontentresolver:safe-content-resolver-v21:1.0.0'
|
||||
|
||||
gplayImplementation('com.google.firebase:firebase-messaging:24.0.0') { // for PUSH notifications
|
||||
gplayImplementation('com.google.firebase:firebase-messaging:24.1.0') { // for PUSH notifications
|
||||
exclude group: 'com.google.firebase', module: 'firebase-core'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-analytics'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
|
||||
@@ -254,7 +271,7 @@ dependencies {
|
||||
testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.1'
|
||||
testImplementation 'org.powermock:powermock-classloading-xstream:1.6.1'
|
||||
|
||||
androidTestImplementation 'androidx.test:runner:1.6.1'
|
||||
androidTestImplementation 'androidx.test:runner:1.6.2'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.6.1'
|
||||
androidTestImplementation 'androidx.test:rules:1.6.1'
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
ArcaneChat is a decentralized and secure messenger app that is compatible with the existing e-mail infrastructure.
|
||||
ArcaneChat is a decentralized and secure instant messenger that is easy to use for friends and family.
|
||||
|
||||
Some features at a glance:
|
||||
• Anonymous. Instant onboarding without a phone number, e-mail or other private data.
|
||||
|
||||
💬 Reliable instant messaging with multi-profile and multi-device support.
|
||||
• Flexible. Supports multiple chat profiles and is easy to setup on multiple devices.
|
||||
|
||||
⚡️ Sign-up easily using secure fast chatmail servers. You don’t need a phone number or any private data.
|
||||
• Extensible. Use mini-apps in chats like shopping lists, calendars or games.
|
||||
|
||||
📧 Alternatively, use your existing classic e-mail address to read your inbox as chats.
|
||||
• Reliable. Works under bad and adverserial network conditions.
|
||||
|
||||
🎮 Interactive mini-apps in chats for gaming and collaboration.
|
||||
• Secure. Audited End-to-End encryption safe against network and server attacks.
|
||||
|
||||
🔒 Audited end-to-end encryption safe against network and server attacks.
|
||||
• Sovereign. Can be run with your own e-mail address or server.
|
||||
|
||||
ArcaneChat is a Delta Chat client and was created with a focus on usability, good user experience, and saving data plan. Also the app usually experiments with new features that eventually might get added to the official Delta Chat client.
|
||||
|
||||
@@ -24,7 +24,7 @@ ArcaneChat is a Delta Chat client and was created with a focus on usability, goo
|
||||
<li>It is possible to disable profiles to completely disconnect them saving data/bandwidth</li>
|
||||
<li>You can easily see the connection status of all your profiles in the profile switcher</li>
|
||||
<li>A videochat instance is set by default</li>
|
||||
<li>Location streaming feature enabled by default and extra option to share location for 12 hours</li>
|
||||
<li>Extra option to share location for 12 hours</li>
|
||||
<li>Clicking on a message with a POI location, will open the POI on the map</li>
|
||||
<li>Last-seen status of contacts is shown in your contact list, like in WhatsApp, Telegram, etc.</li>
|
||||
<li>Videos are played in loop, useful for short GIF videos</li>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 171 KiB After Width: | Height: | Size: 137 KiB |
@@ -15,19 +15,22 @@
|
||||
pkgs = import nixpkgs { inherit system overlays; };
|
||||
android-sdk = android.sdk.${system} (sdkPkgs:
|
||||
with sdkPkgs; [
|
||||
build-tools-33-0-1
|
||||
build-tools-34-0-0
|
||||
cmdline-tools-latest
|
||||
platform-tools
|
||||
platforms-android-34
|
||||
ndk-27-0-11902837
|
||||
ndk-27-2-12479018
|
||||
]);
|
||||
rust-version = pkgs.lib.removeSuffix "\n"
|
||||
(builtins.readFile ./scripts/rust-toolchain);
|
||||
in {
|
||||
in
|
||||
{
|
||||
formatter = pkgs.nixpkgs-fmt;
|
||||
|
||||
devShells.default = pkgs.mkShell {
|
||||
ANDROID_SDK_ROOT = "${android-sdk}/share/android-sdk";
|
||||
ANDROID_NDK_ROOT =
|
||||
"${android-sdk}/share/android-sdk/ndk/27.0.11902837";
|
||||
"${android-sdk}/share/android-sdk/ndk/27.2.12479018";
|
||||
buildInputs = [
|
||||
android-sdk
|
||||
pkgs.openjdk17
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:6f54e2c4e49405673e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.delta.lite.beta"
|
||||
"package_name": "com.github.arcanechat.beta"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
@@ -47,7 +47,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:aff82fbc40c8172e3e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.delta.lite"
|
||||
"package_name": "com.github.arcanechat"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
@@ -66,7 +66,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:92b4cf12669cc2083e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "com.github.arcanechat"
|
||||
"package_name": "chat.delta.lite"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
@@ -85,7 +85,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:228a205b8aa2bacc3e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "com.github.arcanechat.beta"
|
||||
"package_name": "chat.delta.lite.beta"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
android.defaults.buildfeatures.buildconfig=true
|
||||
android.enableJetifier=true
|
||||
android.nonFinalResIds=false
|
||||
android.nonTransitiveRClass=false
|
||||
android.useAndroidX=true
|
||||
org.gradle.jvmargs=-Xmx4608m
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionSha256Sum=ff7bf6a86f09b9b2c40bb8f48b25fc19cf2b2664fd1d220cd7ab833ec758d0d7
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
|
||||
distributionSha256Sum=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
networkTimeout=10000
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
+57
-45
@@ -231,12 +231,6 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcAccounts_backgroundFetch(JNIEnv *en
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcAccounts_addAccount(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_accounts_add_account(get_dc_accounts(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcAccounts_migrateAccount(JNIEnv *env, jobject obj, jstring dbfile)
|
||||
{
|
||||
CHAR_REF(dbfile);
|
||||
@@ -659,6 +653,14 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getMsgInfo(JNIEnv *env, jobj
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_sendEditRequest(JNIEnv *env, jobject obj, jint msg_id, jstring text)
|
||||
{
|
||||
CHAR_REF(text);
|
||||
dc_send_edit_request(get_dc_context(env, obj), msg_id, textPtr);
|
||||
CHAR_UNREF(text);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getMsgHtml(JNIEnv *env, jobject obj, jint msg_id)
|
||||
{
|
||||
char* temp = dc_get_msg_html(get_dc_context(env, obj), msg_id);
|
||||
@@ -683,6 +685,15 @@ JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteMsgs(JNIEnv *env, jobject
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_sendDeleteRequest(JNIEnv *env, jobject obj, jintArray msg_ids)
|
||||
{
|
||||
int msg_ids_cnt = 0;
|
||||
uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
|
||||
dc_send_delete_request(get_dc_context(env, obj), msg_ids_ptr, msg_ids_cnt);
|
||||
free(msg_ids_ptr);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_forwardMsgs(JNIEnv *env, jobject obj, jintArray msg_ids, jint chat_id)
|
||||
{
|
||||
int msg_ids_cnt = 0;
|
||||
@@ -691,6 +702,13 @@ JNIEXPORT void Java_com_b44t_messenger_DcContext_forwardMsgs(JNIEnv *env, jobjec
|
||||
free(msg_ids_ptr);
|
||||
}
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_saveMsgs(JNIEnv *env, jobject obj, jintArray msg_ids)
|
||||
{
|
||||
int msg_ids_cnt = 0;
|
||||
uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
|
||||
dc_save_msgs(get_dc_context(env, obj), msg_ids_ptr, msg_ids_cnt);
|
||||
free(msg_ids_ptr);
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_resendMsgs(JNIEnv *env, jobject obj, jintArray msg_ids)
|
||||
{
|
||||
@@ -904,15 +922,6 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_initiateKeyTransfer(JNIEnv *
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_continueKeyTransfer(JNIEnv *env, jobject obj, jint msg_id, jstring setupCode)
|
||||
{
|
||||
CHAR_REF(setupCode);
|
||||
jboolean ret = dc_continue_key_transfer(get_dc_context(env, obj), msg_id, setupCodePtr);
|
||||
CHAR_UNREF(setupCode);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_imex(JNIEnv *env, jobject obj, jint what, jstring dir)
|
||||
{
|
||||
CHAR_REF(dir);
|
||||
@@ -1364,11 +1373,6 @@ JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getId(JNIEnv *env, jobject obj)
|
||||
return dc_msg_get_id(get_dc_msg(env, obj));
|
||||
}
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getSenderColor(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_get_sender_color(get_dc_msg(env, obj));
|
||||
}
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getText(JNIEnv *env, jobject obj)
|
||||
{
|
||||
char* temp = dc_msg_get_text(get_dc_msg(env, obj));
|
||||
@@ -1423,6 +1427,12 @@ JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getInfoType(JNIEnv *env, jobject ob
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getInfoContactId(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_get_info_contact_id(get_dc_msg(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getState(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_get_state(get_dc_msg(env, obj));
|
||||
@@ -1582,12 +1592,6 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isInfo(JNIEnv *env, jobject obj
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isSetupMessage(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_is_setupmessage(get_dc_msg(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_hasHtml(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_has_html(get_dc_msg(env, obj))!=0;
|
||||
@@ -1642,16 +1646,6 @@ JNIEXPORT void Java_com_b44t_messenger_DcMsg_setHtml(JNIEnv *env, jobject obj, j
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcMsg_setFile(JNIEnv *env, jobject obj, jstring file, jstring filemime)
|
||||
{
|
||||
CHAR_REF(file);
|
||||
CHAR_REF(filemime);
|
||||
dc_msg_set_file(get_dc_msg(env, obj), filePtr, filemimePtr);
|
||||
CHAR_UNREF(filemime);
|
||||
CHAR_UNREF(file);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcMsg_forceSticker(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_msg_force_sticker(get_dc_msg(env, obj));
|
||||
@@ -1667,6 +1661,24 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getPOILocation(JNIEnv *env, jobj
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isEdited(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_is_edited(get_dc_msg(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcMsg_setFileAndDeduplicate(JNIEnv *env, jobject obj, jstring file, jstring name, jstring filemime)
|
||||
{
|
||||
CHAR_REF(file);
|
||||
CHAR_REF(name);
|
||||
CHAR_REF(filemime);
|
||||
dc_msg_set_file_and_deduplicate(get_dc_msg(env, obj), filePtr, namePtr, filemimePtr);
|
||||
CHAR_UNREF(filemime);
|
||||
CHAR_UNREF(name);
|
||||
CHAR_UNREF(file);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcMsg_setDimension(JNIEnv *env, jobject obj, int width, int height)
|
||||
{
|
||||
dc_msg_set_dimension(get_dc_msg(env, obj), width, height);
|
||||
@@ -1711,6 +1723,15 @@ JNIEXPORT jlong Java_com_b44t_messenger_DcMsg_getParentCPtr(JNIEnv *env, jobject
|
||||
return (jlong)dc_msg_get_parent(get_dc_msg(env, obj));
|
||||
}
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getOriginalMsgId(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return (jint)dc_msg_get_original_msg_id(get_dc_msg(env, obj));
|
||||
}
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getSavedMsgId(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return (jint)dc_msg_get_saved_msg_id(get_dc_msg(env, obj));
|
||||
}
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getError(JNIEnv *env, jobject obj)
|
||||
{
|
||||
@@ -1788,15 +1809,6 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getAddr(JNIEnv *env, jobject
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getNameNAddr(JNIEnv *env, jobject obj)
|
||||
{
|
||||
char* temp = dc_contact_get_name_n_addr(get_dc_contact(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
dc_str_unref(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getProfileImage(JNIEnv *env, jobject obj)
|
||||
{
|
||||
char* temp = dc_contact_get_profile_image(get_dc_contact(env, obj));
|
||||
|
||||
+1
-1
Submodule jni/deltachat-core-rust updated: 7da0662be0...771fd87e53
@@ -0,0 +1 @@
|
||||
Schreibe Nachrichten mit E-Mails. Retro, Offen. Privatsphäre im Design.
|
||||
@@ -1,7 +0,0 @@
|
||||
- nuovo inserimento: puoi creare un nuovo profilo con un tocco su "Crea Nuovo Profilo" - oppure utilizzare un accesso esistente o la configurazione del secondo dispositivo come al solito
|
||||
i contatti possono essere allegati come "Schede" in "Allega/Contatto"; quando il destinatario tocca le carte, è possibile stabilire la crittografia end-to-end garantita
|
||||
- aggiungi contatti manualmente in "Nuova Chat / Nuovo Contatto / Aggiungi Contatto Manualmente"
|
||||
- invia qualsiasi emoji come reazione
|
||||
- mostrare le reazioni nei riepiloghi
|
||||
- blocca/archivia/ecc. le chat direttamente dai risultati di ricerca
|
||||
- Risolti bug e altro ancora
|
||||
@@ -1,4 +0,0 @@
|
||||
- aggiungi un'opzione per contrassegnare tutte le chat selezionate come "Lette" (tocca a lungo una chat per avviare la modalità di selezione)
|
||||
- i nuovi profili chatmail per dispositivo singolo hanno come impostazione predefinita "Elimina Messaggi Dopo il Download"
|
||||
- quando si utilizza un profilo chatmail su più dispositivi, la cancellazione viene modificata in "Automatica" (la strategia di cancellazione dipende quindi dal server)
|
||||
- Risolti bug e altro ancora
|
||||
@@ -0,0 +1,12 @@
|
||||
Delta Chat é um aplicativo de mensagens que é completamente compatível com a infraestrutura de email já existente.
|
||||
Assim, com o Delta Chat você tem a facilidade de muitos aplicativos de mensagens com o alcance de email. Além disso, você é independente de outras companhias e sercviços -- já que suas informações e dados não estão relacionadas com o Delta Chat, você não vai nem adicionar novas permissões aqui.
|
||||
Resumo de alguns recursos:
|
||||
* Seguro com criptografia de ponta a ponta, com suporte ao novo padrão <a href="https://autocrypt.org">Autocrypt</a>
|
||||
* Rápido usando Push-IMAP
|
||||
* Maior base de usuários -- destinatários que não estiverem usando Delta Chat podem ser alcançados também
|
||||
* Compatívle -- não apenas consigo mesmo
|
||||
* Interface de usuário elegante e simples
|
||||
* Sistema distribuído
|
||||
* Sem spam -- apenas mensages de usuários conhecidos são mostradas por padrão
|
||||
* Confiável -- pode até ser usado para mensagens comerciais
|
||||
* Completamente OpenSource e baseado em padrões
|
||||
@@ -11,13 +11,13 @@ echo "==================== ANDROID USAGE ===================="
|
||||
grep --exclude={*.apk,*.a,*.o,*.so,strings.xml,*symbols.zip} --exclude-dir={.git,.gradle,obj,release,.idea,build,deltachat-core-rust} -ri $TEXT .
|
||||
|
||||
echo "==================== IOS USAGE ===================="
|
||||
grep --exclude=*.strings --exclude-dir={.git,libraries,Pods,deltachat-ios.xcodeproj,deltachat-ios.xcworkspace} -ri $TEXT ../deltachat-ios/
|
||||
grep --exclude=*.strings* --exclude-dir={.git,libraries,Pods,deltachat-ios.xcodeproj,deltachat-ios.xcworkspace} -ri $TEXT ../deltachat-ios/
|
||||
|
||||
echo "==================== DESKTOP USAGE ===================="
|
||||
grep --exclude-dir={.cache,.git,html-dist,node_modules,_locales} -ri $TEXT ../deltachat-desktop/
|
||||
|
||||
echo "==================== JSONRPC USAGE ===================="
|
||||
grep --exclude-dir={.git} -ri $TEXT ../deltachat-core-rust/deltachat-jsonrpc
|
||||
grep --exclude-dir={.git} -ri $TEXT ../chatmail/core/deltachat-jsonrpc
|
||||
|
||||
echo "==================== UBUNTU TOUCH USAGE ===================="
|
||||
grep --exclude-dir={.git} -ri $TEXT ../deltatouch/
|
||||
|
||||
+18
-15
@@ -53,7 +53,6 @@ fi
|
||||
# for reproducible build:
|
||||
export RUSTFLAGS="-C link-args=-Wl,--build-id=none --remap-path-prefix=$HOME/.cargo= --remap-path-prefix=$(realpath $(dirname $(dirname "$0")))="
|
||||
export SOURCE_DATE_EPOCH=1
|
||||
export CARGO_TARGET_DIR=/tmp/arcanechat-build
|
||||
# always use the same path to NDK:
|
||||
rm -f /tmp/android-ndk-root
|
||||
ln -s "$ANDROID_NDK_ROOT" /tmp/android-ndk-root
|
||||
@@ -74,6 +73,10 @@ if test -z "$NDK_HOST_TAG"; then
|
||||
NDK_HOST_TAG="$KERNEL-$ARCH"
|
||||
fi
|
||||
|
||||
if test -z "$CARGO_TARGET_DIR"; then
|
||||
export CARGO_TARGET_DIR=/tmp/arcanechat-build
|
||||
fi
|
||||
|
||||
TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$NDK_HOST_TAG"
|
||||
export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang"
|
||||
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/aarch64-linux-android21-clang"
|
||||
@@ -126,8 +129,8 @@ if test -z $1 || test $1 = armeabi-v7a; then
|
||||
TARGET_CC="$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target armv7-linux-androideabi -p deltachat_ffi --features jsonrpc
|
||||
cp $CARGO_TARGET_DIR/armv7-linux-androideabi/$RELEASE/libdeltachat.a $jnidir/armeabi-v7a
|
||||
cargo build $RELEASEFLAG --target armv7-linux-androideabi -p deltachat_ffi
|
||||
cp "$CARGO_TARGET_DIR/armv7-linux-androideabi/$RELEASE/libdeltachat.a" "$jnidir/armeabi-v7a"
|
||||
fi
|
||||
|
||||
if test -z $1 || test $1 = arm64-v8a; then
|
||||
@@ -135,8 +138,8 @@ if test -z $1 || test $1 = arm64-v8a; then
|
||||
TARGET_CC="$TOOLCHAIN/bin/aarch64-linux-android21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target aarch64-linux-android -p deltachat_ffi --features jsonrpc
|
||||
cp $CARGO_TARGET_DIR/aarch64-linux-android/$RELEASE/libdeltachat.a $jnidir/arm64-v8a
|
||||
cargo build $RELEASEFLAG --target aarch64-linux-android -p deltachat_ffi
|
||||
cp "$CARGO_TARGET_DIR/aarch64-linux-android/$RELEASE/libdeltachat.a" "$jnidir/arm64-v8a"
|
||||
fi
|
||||
|
||||
if test -z $1 || test $1 = x86; then
|
||||
@@ -144,18 +147,18 @@ if test -z $1 || test $1 = x86; then
|
||||
TARGET_CC="$TOOLCHAIN/bin/i686-linux-android21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target i686-linux-android -p deltachat_ffi --features jsonrpc
|
||||
cp $CARGO_TARGET_DIR/i686-linux-android/$RELEASE/libdeltachat.a $jnidir/x86
|
||||
cargo build $RELEASEFLAG --target i686-linux-android -p deltachat_ffi
|
||||
cp "$CARGO_TARGET_DIR/i686-linux-android/$RELEASE/libdeltachat.a" "$jnidir/x86"
|
||||
fi
|
||||
|
||||
if test -z $1 || test $1 = x86_64; then
|
||||
echo "-- cross compiling to x86_64-linux-android (x86_64) --"
|
||||
TARGET_CC="$TOOLCHAIN/bin/x86_64-linux-android21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target x86_64-linux-android -p deltachat_ffi --features jsonrpc
|
||||
cp $CARGO_TARGET_DIR/x86_64-linux-android/$RELEASE/libdeltachat.a $jnidir/x86_64
|
||||
fi
|
||||
if test -z $1 || test $1 = x86_64; then
|
||||
echo "-- cross compiling to x86_64-linux-android (x86_64) --"
|
||||
TARGET_CC="$TOOLCHAIN/bin/x86_64-linux-android21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target x86_64-linux-android -p deltachat_ffi
|
||||
cp "$CARGO_TARGET_DIR/x86_64-linux-android/$RELEASE/libdeltachat.a" "$jnidir/x86_64"
|
||||
fi
|
||||
|
||||
echo -- ndk-build --
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ echo ""
|
||||
echo "and now: here is Delta Chat $VERSION - choose your flavour and mind your backups:"
|
||||
echo "- 🍋 https://download.delta.chat/android/beta/deltachat-gplay-release-$VERSION.apk (google play candidate, overwrites existing installs, should keep data)"
|
||||
echo "- 🍉 https://download.delta.chat/android/beta/deltachat-foss-debug-$VERSION.apk (f-droid candidate, can be installed beside google play)"
|
||||
echo "- 🍏 https://testflight.apple.com/join/uEMc1NxS (ios, update to $VERSION may take a day or so)"
|
||||
echo ""
|
||||
echo "what to test: PLEASE_FILL_OUT"
|
||||
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package com.b44t.messenger;
|
||||
|
||||
import static androidx.test.espresso.Espresso.onView;
|
||||
import static androidx.test.espresso.action.ViewActions.typeText;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.isRoot;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
|
||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
@@ -23,12 +29,6 @@ import org.thoughtcrime.securesms.util.AccessibilityUtil;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
|
||||
import static androidx.test.espresso.Espresso.onView;
|
||||
import static androidx.test.espresso.action.ViewActions.typeText;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.isRoot;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
|
||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
public class TestUtils {
|
||||
private static int createdAccountId = 0;
|
||||
private static boolean resetEnterSends = false;
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
package com.b44t.messenger.uibenchmarks;
|
||||
|
||||
import static androidx.test.espresso.Espresso.onView;
|
||||
import static androidx.test.espresso.Espresso.pressBack;
|
||||
import static androidx.test.espresso.action.ViewActions.click;
|
||||
import static androidx.test.espresso.action.ViewActions.replaceText;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.test.espresso.contrib.RecyclerViewActions;
|
||||
@@ -17,15 +26,6 @@ import org.junit.runner.RunWith;
|
||||
import org.thoughtcrime.securesms.ConversationListActivity;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
|
||||
import static androidx.test.espresso.Espresso.onView;
|
||||
import static androidx.test.espresso.Espresso.pressBack;
|
||||
import static androidx.test.espresso.action.ViewActions.click;
|
||||
import static androidx.test.espresso.action.ViewActions.replaceText;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
||||
|
||||
@Ignore("This is not a test, but a benchmark. Remove the @Ignore to run it.")
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@LargeTest
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
package com.b44t.messenger.uitests.offline;
|
||||
|
||||
import static androidx.test.espresso.Espresso.onView;
|
||||
import static androidx.test.espresso.Espresso.pressBack;
|
||||
import static androidx.test.espresso.action.ViewActions.click;
|
||||
import static androidx.test.espresso.assertion.ViewAssertions.matches;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.isClickable;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
@@ -25,17 +36,6 @@ import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import static androidx.test.espresso.Espresso.onView;
|
||||
import static androidx.test.espresso.Espresso.pressBack;
|
||||
import static androidx.test.espresso.action.ViewActions.click;
|
||||
import static androidx.test.espresso.assertion.ViewAssertions.matches;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.isClickable;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@LargeTest
|
||||
@@ -93,7 +93,7 @@ public class SharingTest {
|
||||
}
|
||||
}
|
||||
Uri uri = Uri.parse("content://" + BuildConfig.APPLICATION_ID + ".attachments/" + Uri.encode(pngImage));
|
||||
DcHelper.sharedFiles.put("/" + pngImage, 1);
|
||||
DcHelper.sharedFiles.put(pngImage, "image/png");
|
||||
|
||||
Intent i = new Intent(Intent.ACTION_SEND);
|
||||
i.setType("image/png");
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
package com.b44t.messenger.uitests.online;
|
||||
|
||||
|
||||
import static androidx.test.espresso.Espresso.onView;
|
||||
import static androidx.test.espresso.action.ViewActions.click;
|
||||
import static androidx.test.espresso.action.ViewActions.replaceText;
|
||||
import static androidx.test.espresso.assertion.ViewAssertions.matches;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.isClickable;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.test.ext.junit.rules.ActivityScenarioRule;
|
||||
@@ -17,15 +26,6 @@ import org.thoughtcrime.securesms.BuildConfig;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.WelcomeActivity;
|
||||
|
||||
import static androidx.test.espresso.Espresso.onView;
|
||||
import static androidx.test.espresso.action.ViewActions.click;
|
||||
import static androidx.test.espresso.action.ViewActions.replaceText;
|
||||
import static androidx.test.espresso.assertion.ViewAssertions.matches;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.isClickable;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@LargeTest
|
||||
public class OnboardingTest {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.thoughtcrime.securesms.notifications;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
/*
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
@@ -329,8 +328,6 @@
|
||||
android:theme="@style/TextSecure.ScribbleTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name="com.soundcloud.android.crop.CropImageActivity" />
|
||||
|
||||
<activity android:name=".InstantOnboardingActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:windowSoftInputMode="stateHidden|adjustResize"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="cs"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#co-je-delta-chat">Co je Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#jak-najít-lidi-k-hovoru">Jak najít lidi k hovoru?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#kdo-uvidí-můj-profilový-obrázek">Kdo uvidí můj profilový obrázek?</a></li>
|
||||
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li>
|
||||
<li><a href="#what-do-pinning-muting-and-archiving-mean">What do Pinning, Muting and Archiving mean?</a></li>
|
||||
<li><a href="#save">How do “Saved Messages” work?</a></li>
|
||||
<li><a href="#what-does-the-green-dot-mean">What does the green dot mean?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li>
|
||||
<li><a href="#importkey">Lze znovu použít můj stávající soukromý klíč?</a></li>
|
||||
<li><a href="#nemohu-do-delta-chatu-zavést-můj-stávající-pgp-klíč">Nemohu do Delta Chatu zavést můj stávající PGP klíč.</a></li>
|
||||
<li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#lze-delta-chat-používat-souběžně-na-více-zařízeních">Lze Delta Chat používat souběžně na více zařízeních?</a></li>
|
||||
<li><a href="#troubleshooting">Troubleshooting</a></li>
|
||||
<li><a href="#backup">Manual Transfer</a></li>
|
||||
<li><a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices?</a></li>
|
||||
<li><a href="#je-v-plánu-vytvořit-webovou-verzi-delta-chatu">Je v plánu vytvořit webovou verzi Delta Chatu?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#k-čemu-je-dobré-nastavení-posílat-si-kopii">K čemu je dobré nastavení “Posílat si kopii”?</a></li>
|
||||
<li><a href="#proč-můžu-nastavit-sledování-složky-odeslané">Proč můžu nastavit sledování složky Odeslané?</a></li>
|
||||
<li><a href="#proč-mohu-zvolit-nesledovat-složku-deltachat">Proč mohu zvolit nesledovat složku DeltaChat?</a></li>
|
||||
<li><a href="#lze-delta-chat-používat-s-protonmail--tutanota--criptext">Lze Delta Chat používat s Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#lze-delta-chat-používat-s-proton-mail--tutanota--criptext">Lze Delta Chat používat s Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">How can I delete my account?</a></li>
|
||||
<li><a href="#mám-zájem-o-technické-podrobnosti-kde-najdu-víc">Mám zájem o technické podrobnosti. Kde najdu víc?</a></li>
|
||||
<li><a href="#where-can-my-friends-find-delta-chat">Where can my friends find Delta Chat?</a></li>
|
||||
@@ -182,15 +184,20 @@ Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If a message comes from an unknown contact, it appears as a <strong>request</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>If a message comes from an unknown contact, it appears as a <strong>request</strong>. You
|
||||
need to accept the request before you can reply.</li>
|
||||
<li>You can also “delete” it if you don’t want to chat with them for now. This
|
||||
does <em>not</em> delete the message on the server, only on your device. So you can
|
||||
still deal with the message in a different mail app.</li>
|
||||
<li>If you delete a request, future messages from that contact will still appear
|
||||
<li>
|
||||
<p>You need to <strong>accept</strong> the request before you can reply.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>You can also <strong>delete</strong> it if you don’t want to chat with them for now.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you delete a request, future messages from that contact will still appear
|
||||
as message request, so you can change your mind. If you really don’t want to
|
||||
receive messages from this person, consider <em>blocking</em> them.</li>
|
||||
receive messages from this person, consider <strong>blocking</strong> them.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="podporuje-delta-chat-obrázky-videa-a-jiné-přílohy">
|
||||
@@ -300,6 +307,41 @@ Archived chats remain accessible above the chat list or via search.</p>
|
||||
|
||||
<p>To use the functions, long tap or right click a chat in the chat list.</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
How do “Saved Messages” work? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Saved Messages</strong> is a chat that you can use to easily remember and find messages.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In any chat, long tap or right click a message and select <strong>Save</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Saved messages are marked by the symbol
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
next to the timestamp</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Later, open the “Saved Messages” chat - and you will see the saved messages there.
|
||||
By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Messages stay saved even if they are edited or deleted -
|
||||
may it be by <a href="#edit">sender</a>, by <a href="#delold">device cleanup</a> or by <a href="#ephemeralmsgs">disappearing messages of other chats</a>.</p>
|
||||
|
||||
<h3 id="what-does-the-green-dot-mean">
|
||||
|
||||
|
||||
@@ -308,25 +350,53 @@ Archived chats remain accessible above the chat list or via search.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>You can sometimes see a <strong>green dot</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" />
|
||||
next to the avatar of a contact.
|
||||
It means they were <strong>recently seen</strong> in the last 10 minutes:</p>
|
||||
|
||||
<ul>
|
||||
<li>Since Delta Chat 1.34 you can sometimes see a “green dot” next to the avatar
|
||||
of a contact. It means they were “recently seen”.</li>
|
||||
<li>In detail: it means, that in the last 10 minutes, Delta Chat has seen them:
|
||||
<ul>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>or because they sent data to your Delta Chat app by using a
|
||||
<a href="#webxdc">webxdc app</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>So this is not a real time online status - and if someone doesn’t answer
|
||||
right away even though they seem to be online, don’t worry and give them some
|
||||
space ;-)</li>
|
||||
<li>On the other hand, others will not always “see that you are online”. If you
|
||||
have turned off read receipts, they will not see the green dot until you
|
||||
message them or write to a group they’re in as well.</li>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>because they edit or delete a message in a chat shared with you,</li>
|
||||
<li>or because they use an <a href="#webxdc">app</a> in a chat shared with you.</li>
|
||||
</ul>
|
||||
|
||||
<p>So this is not a real time online status -
|
||||
and if someone doesn’t answer right away even though they seem to be online,
|
||||
don’t worry and give them some space :)</p>
|
||||
|
||||
<p>On the other hand, others will not always “see that you are online”.
|
||||
If you have turned off read receipts,
|
||||
they will not see the green dot
|
||||
until one of the above conditions are met.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Correct typos and delete messages after sending <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can edit the text of your messages after sending.
|
||||
For that, long tap or right click the message and select <strong>Edit</strong>
|
||||
or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have sent a message accidentally,
|
||||
from the same menu, select <strong>Delete</strong> and then <strong>Delete for Everyone</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>While edited messages will have the word “Edited” next to the timestamp,
|
||||
deleted messages will be removed without a marker in the chat.
|
||||
Notifications are not sent and there is no time limit.</p>
|
||||
|
||||
<p>Note, that the original message may still be received by chat members
|
||||
who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -599,16 +669,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -621,14 +691,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
@@ -643,7 +714,7 @@ would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
<p>Delta Chat is a free and open source decentralized messenger with free server choice,
|
||||
but we want users to reliably experience “instant delivery” of messages,
|
||||
like they experience from Whatsapp, Signal or Telegram apps,
|
||||
like they experience from WhatsApp, Signal or Telegram apps,
|
||||
without asking questions up-front that are more suited to expert users or developers.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
@@ -882,14 +953,14 @@ if the whole message is properly encrypted and signed.
|
||||
For example, “Detached signatures” are not treated as secure.</p>
|
||||
|
||||
<p>OpenPGP is not insecure by itself.
|
||||
Most publically discussed OpenPGP security problems
|
||||
Most publicly discussed OpenPGP security problems
|
||||
actually stem from bad usability or bad implementations of tools or apps (or both).
|
||||
It is particularly important to distinguish between OpenPGP, the IETF encryption standard,
|
||||
and GnuPG (GPG), a command line tool implementing OpenPGP.
|
||||
Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used.
|
||||
Delta Chat rather uses the OpenPGP Rust implementation <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
available as <a href="https://crates.io/crates/pgp">an independent “pgp” package</a>,
|
||||
and <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">security-audited in 2019</a>.</p>
|
||||
and <a href="#security-audits">security-audited in 2019 and 2024</a>.</p>
|
||||
|
||||
<p>We aim, along with other OpenPGP implementors,
|
||||
to further improve security characteristics by implementing the
|
||||
@@ -1138,7 +1209,7 @@ but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</
|
||||
that are safe against compromised servers or corrupted networks.
|
||||
Signal and most other PFS-supporting messengers do not provide
|
||||
a practical scheme for protecting chat groups from network attacks
|
||||
which are arguably more worrysome
|
||||
which are arguably more worrisome
|
||||
than a potential attacker who seizes your phone and private encryption setup
|
||||
but somehow not your messages, yet has a full record of all
|
||||
past encrypted messages.</p>
|
||||
@@ -1154,40 +1225,14 @@ which has been <a href="https://delta.chat/assets/blog/2019-first-security-revie
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>No.</p>
|
||||
|
||||
<p>Alternatively, you can import the key manually in “Settings -> Advanced settings -> Import secret keys”.
|
||||
Caution: Make sure the key is not protected by a password, or remove the password beforehand.</p>
|
||||
<p>Delta Chat generates secure OpenPGP keys according to the Autocrypt specification 1.1.
|
||||
You can export your private key but you can not import additional private keys.</p>
|
||||
|
||||
<p>If you don’t have a key or don’t even know you would need one - don’t worry: Delta Chat generates keys as needed, you don’t have to hit a button for it.</p>
|
||||
|
||||
<h3 id="nemohu-do-delta-chatu-zavést-můj-stávající-pgp-klíč">
|
||||
|
||||
|
||||
Nemohu do Delta Chatu zavést můj stávající PGP klíč. <a href="#nemohu-do-delta-chatu-zavést-můj-stávající-pgp-klíč" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Nejpravděpodobnější příčinou jsou zašifrované klíče, nebo klíče s heslem.
|
||||
Takové klíče Delta Chat nepodporuje. Můžeš odstranit šifrování nebo heslo a
|
||||
zkusit to znovu. Pokud je potřeba použít zaheslovaný klíč vytvoř / použij zástupnou
|
||||
adresua a pak přidej nový Delta Chat účet s tímto klíčem.</p>
|
||||
|
||||
<p>Another common error is having the wrong file ending.
|
||||
Use the ASCII armored format and an <code class="language-plaintext highlighter-rouge">.asc</code> file ending.</p>
|
||||
|
||||
<p>Delta Chat podporuje běžné formáty OpenPGP klíčů, nicméně neočekáváme,
|
||||
že soukromé klíče ze všech aplikací budou fungovat. To není cíl, a
|
||||
ve skutečnosti věttšina nových uživatelů Delta Chatu nemá žádný stávající klíč.
|
||||
Přesto se snažíme podporovat soukromé klíče z co nejvíce možných zdrojů.</p>
|
||||
|
||||
<p>Odstranění hesla ze soukromého klíče závisí na programu ze kterého PGP klíč pochází.
|
||||
Enigmail umí nastavit prázdnou hodnotu hesla v okně Key Management.
|
||||
U GnuPG lze to samé nastavit <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">z příkazové řádky</a>.
|
||||
Pro ostatní programy by mělo jít nalézt řešení na Interentu.</p>
|
||||
<p>In general, we do not recommend or offer users to perform manual key management.
|
||||
We want to ensure that security audits can focus on a few proven cryptographic algorithms
|
||||
instead of the full breadth of possible algorithms allowed with OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1197,10 +1242,25 @@ Pro ostatní programy by mělo jít nalézt řešení na Interentu.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The Delta Chat project underwent four independent security audits and one
|
||||
independent security analysis, from most recent to older:</p>
|
||||
<p>Yes, multiple times.
|
||||
The Delta Chat project continuously undergoes independent security audits and analysis,
|
||||
from most recent to older:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
|
||||
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
|
||||
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
|
||||
Two advisories were released related to the findings of this audit:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panics on Malformed Untrusted Input”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potential Resource Exhaustion when handling Untrusted Messages”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>The issues outlined in these advisories have been fixed and are part of Delta Chat
|
||||
releases on all appstores since December 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2024 March, we received a deep security analysis from the Applied Cryptography
|
||||
research group at ETH Zuerich and addressed all raised issues.
|
||||
@@ -1266,7 +1326,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Yes. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1323,6 +1383,10 @@ which is known to cause problems (especially on Windows).
|
||||
<li>
|
||||
<p><strong>Guest Networks</strong> may not allow devices to communicate with each other.
|
||||
If possible, use a non-guest network.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you still have troubles using the same network,
|
||||
try to open <strong>Mobile Hotspot</strong> on one device and join that Wi-Fi from the other one</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ensure there is <strong>enough storage</strong> on the destination device</p>
|
||||
@@ -1370,6 +1434,23 @@ help you.</li>
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">
|
||||
|
||||
|
||||
Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices? <a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.</p>
|
||||
|
||||
<p>If you e.g. delete a chat or a message from your phone,
|
||||
it will be deleted on your desktop as soon as it comes online again.</p>
|
||||
|
||||
<p>Notable exceptions are <a href="#delold">Delete old messages from Device</a>,
|
||||
as different devices may have different storage capacities,
|
||||
and system specific settings as notification sounds.</p>
|
||||
|
||||
<h3 id="je-v-plánu-vytvořit-webovou-verzi-delta-chatu">
|
||||
|
||||
|
||||
@@ -1490,7 +1571,7 @@ will not get interrupted by a video chat invite.</li>
|
||||
link in the settings.</li>
|
||||
<li>For example, to use the flagship Jitsi Meet instance, you could enter
|
||||
<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$ROOM</code>. The <code class="language-plaintext highlighter-rouge">$ROOM</code> variable will be a random value;
|
||||
this way, you will have a new random jitsi room every time you call someone.</li>
|
||||
this way, you will have a new random Jitsi room every time you call someone.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="what-are-broadcast-lists-and-how-can-i-use-them">
|
||||
@@ -1502,7 +1583,7 @@ this way, you will have a new random jitsi room every time you call someone.</li
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>With a Broadcast List you can send a message to many recipents at once; when
|
||||
<li>With a Broadcast List you can send a message to many recipients at once; when
|
||||
they reply to you, you get the reply in your direct 1:1 chat with them. The
|
||||
recipients can’t see each other.</li>
|
||||
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
|
||||
@@ -1815,25 +1896,24 @@ složku Příchozí / Inbox pro všechny zprávy i místo složky DeltaChat. Pok
|
||||
“Sleduj složku DeltaChat”, zruš také “přesouvat zprávy do složky DeltaChat”. Jinak
|
||||
hrozí, že mazání zpráv či nastavení na několika zařízeních nebude správně fungovat.</p>
|
||||
|
||||
<h3 id="lze-delta-chat-používat-s-protonmail--tutanota--criptext">
|
||||
<h3 id="lze-delta-chat-používat-s-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
Lze Delta Chat používat s Protonmail / Tutanota / Criptext? <a href="#lze-delta-chat-používat-s-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
Lze Delta Chat používat s Proton Mail / Tutanota / Criptext? <a href="#lze-delta-chat-používat-s-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Yes and No.</li>
|
||||
<li>No, you can not use your Protonmail, Tutanota, or Criptext account with Delta
|
||||
Chat; they do not offer receiving mails via IMAP.</li>
|
||||
<li>In any case you can use Delta Chat to send Messages to people who use
|
||||
Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end
|
||||
encrypted, though. The end-to-end encryption those providers offer is not
|
||||
compatible with <a href="https://autocrypt.org/">Autocrypt</a>, the standard Delta Chat
|
||||
uses.</li>
|
||||
<li>Delta Chat can end-to-end-encrypt through any e-mail provider with any
|
||||
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
|
||||
<li>Ano a Ne.</li>
|
||||
<li>Nelze používat účty na Proton Mail, Tutanota, či Criptext z aplikace Delta
|
||||
Chat; protože neposkytují příjem e-mailů pomocí IMAPu.</li>
|
||||
<li>Každopádně ale lze Delta Chat použít k posílání zpráv lidem užívající
|
||||
Protonmail, Tutanota, či Criptext. Tyto zprávy však nebudou šifrované end-to-end.
|
||||
End-to-end šifrování nabízené těmito poskytovateli funguje pouze na jejich platformě,
|
||||
a není slučitelné s chodem běžných E-mail serverů.</li>
|
||||
<li>Delta Chat je schopen výměny end-to-end šifrovaných zpráv s jakýmkoli poskytovatelem
|
||||
e-mailu s podporou <a href="https://autocrypt.org/dev-status.html">Autocryptu</a>.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="remove-account">
|
||||
@@ -2000,7 +2080,7 @@ stavu.</p>
|
||||
Freiburg (Germany), and is distributed to more than a dozen contributors world-wide.</p>
|
||||
|
||||
<p>Please see <a href="https://delta.chat/cs/contribute">Delta Chat Contribution channels</a>
|
||||
for both monetary and and other contribution possibilities.</p>
|
||||
for both monetary and other contribution possibilities.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="de"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#was-ist-delta-chat">Was ist Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#wie-finde-ich-leute-mit-denen-ich-chatten-kann">Wie finde ich Leute, mit denen ich chatten kann?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#wer-sieht-mein-profilbild">Wer sieht mein Profilbild?</a></li>
|
||||
<li><a href="#signature">Kann ich eine Signatur (Status/Motto) festlegen?</a></li>
|
||||
<li><a href="#was-bedeutet-anheften-stummschalten-archivieren">Was bedeutet Anheften, Stummschalten, Archivieren?</a></li>
|
||||
<li><a href="#save">Wie funktionieren “Gespeicherte Nachrichten”?</a></li>
|
||||
<li><a href="#was-bedeutet-der-grüne-punkt">Was bedeutet der grüne Punkt?</a></li>
|
||||
<li><a href="#edit">Schreibfehler korrigieren und Nachrichten nach dem Senden löschen</a></li>
|
||||
<li><a href="#ephemeralmsgs">Wie funktionieren “Verschwindende Nachrichten”?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Unterstützt Delta Chat “Perfect Forward Secrecy”?</a></li>
|
||||
<li><a href="#ist-die-ende-zu-ende-verschlüsselung-von-delta-chat-genauso-sicher-wie-die-von-signal">Ist die Ende-zu-Ende-Verschlüsselung von Delta Chat genauso sicher wie die von Signal?</a></li>
|
||||
<li><a href="#importkey">Kann ich meinen existierenden privaten Schlüssel weiter verwenden?</a></li>
|
||||
<li><a href="#ich-kann-meinen-existierenden-pgp-schlüssel-nicht-in-delta-chat-importieren">Ich kann meinen existierenden PGP-Schlüssel nicht in Delta Chat importieren.</a></li>
|
||||
<li><a href="#security-audits">Wurde Delta Chat unabhängig auf Sicherheitslücken geprüft?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#kann-ich-delta-chat-auf-mehreren-geräten-zur-selben-zeit-verwenden">Kann ich Delta Chat auf mehreren Geräten zur selben Zeit verwenden?</a></li>
|
||||
<li><a href="#fehlersuche">Fehlersuche</a></li>
|
||||
<li><a href="#backup">Manueller Transfer</a></li>
|
||||
<li><a href="#wird-löschen-anheften-archivieren-speichern-stummschalten-usw-über-alle-geräte-synchronisiert">Wird Löschen, Anheften, Archivieren, Speichern, Stummschalten usw. über alle Geräte synchronisiert?</a></li>
|
||||
<li><a href="#gibt-es-pläne-für-eine-delta-chat-web-anwendung">Gibt es Pläne für eine Delta-Chat-Web-Anwendung?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#was-macht-die-option-kopie-an-mich-selbst-senden">Was macht die Option “Kopie an mich selbst senden”?</a></li>
|
||||
<li><a href="#warum-gibt-es-die-funktion-gesendet-ordner-beobachten">Warum gibt es die Funktion “Gesendet-Ordner beobachten”?</a></li>
|
||||
<li><a href="#warum-kann-ich-deltachat-ordner-beobachten-ausschalten">Warum kann ich “DeltaChat-Ordner beobachten” ausschalten?</a></li>
|
||||
<li><a href="#ist-delta-chat-kompatibel-mit-protonmail--tutanota--criptext">Ist Delta Chat kompatibel mit Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#ist-delta-chat-kompatibel-mit-proton-mail--tutanota--criptext">Ist Delta Chat kompatibel mit Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">Wie kann ich mein Konto löschen?</a></li>
|
||||
<li><a href="#ich-bin-an-technischen-details-interessiert-gibt-es-hierzu-weitere-infos">Ich bin an technischen Details interessiert. Gibt es hierzu weitere Infos?</a></li>
|
||||
<li><a href="#wo-können-meine-freunde-delta-chat-finden">Wo können meine Freunde Delta Chat finden?</a></li>
|
||||
@@ -177,10 +179,20 @@ um das <a href="https://xkcd.com/927/">„Noch-ein-Standard-Syndrom“ (xkcd 927
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Wenn eine Nachricht von einem unbekannten Kontakt stammt, erscheint sie als <strong>Anfrage</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>Wenn eine Nachricht von einem unbekannten Kontakt stammt, erscheint sie als <strong>Anfrage</strong>. Sie müssen die Anfrage akzeptieren, bevor Sie antworten können.</li>
|
||||
<li>Sie können sie auch “löschen”, wenn Sie vorerst nicht mit ihm chatten möchten. Dadurch wird die Nachricht <em>nicht</em> auf dem Server gelöscht, sondern nur auf Ihrem Gerät. Sie können die Nachricht also weiterhin in einer anderen E-Mail-App bearbeiten.</li>
|
||||
<li>Wenn Sie eine Anfrage löschen, werden zukünftige Nachrichten von diesem Kontakt weiterhin als Nachrichtenanfrage angezeigt, sodass Sie Ihre Meinung ändern können. Wenn Sie wirklich keine Nachrichten von dieser Person erhalten möchten, sollten Sie sie <em>blockieren</em>.</li>
|
||||
<li>
|
||||
<p>Sie müssen die Anfrage <strong>akzeptieren</strong>, bevor Sie antworten können.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Sie können sie auch “löschen”, wenn Sie vorerst nicht mit ihm chatten möchten.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you delete a request, future messages from that contact will still appear
|
||||
as message request, so you can change your mind. If you really don’t want to
|
||||
receive messages from this person, consider <strong>blocking</strong> them.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="unterstützt-delta-chat-bilder-videos-und-dateianhänge">
|
||||
@@ -193,7 +205,7 @@ um das <a href="https://xkcd.com/927/">„Noch-ein-Standard-Syndrom“ (xkcd 927
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Ja. Alle E-Mail-Anhänge werden als separate Nachrichten angezeigt. Ausgehende Nachrichten erhalten bei Bedarf automatisch Anhänge.</p>
|
||||
<p>Ja. Bilder, Videos, Dokumente, Sprachnachrichten usw. funktionieren wie üblich.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Um die Leistung zu verbessern, werden die Bilder standardmäßig optimiert und in einer kleineren Größe gesendet, aber Sie können sie auch als “Datei” senden, um das Original zu erhalten.</p>
|
||||
@@ -289,6 +301,41 @@ unter dem Text Ihrer Nachrichten.</p>
|
||||
|
||||
<p>Um die Funktionen zu nutzen, lang auf einen Chat in der Chatliste tippen oder den Chat mit der rechten Maustaste anklicken.</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
Wie funktionieren “Gespeicherte Nachrichten”? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Gespeicherte Nachrichten</strong> ist ein Chat, den Sie verwenden können, um sich Nachrichten zu merken und wiederzufinden.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Tippen Sie in einem beliebigen Chat lange auf eine Nachricht oder klicken Sie mit der rechten Maustaste darauf und wählen <strong>Speichern</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Gespeicherte Nachrichten werden mit dem Symbol
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
neben dem Datum markiert</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Öffnen Sie später den Chat „Gespeicherte Nachrichten“, sehen Sie dort die gespeicherten Nachrichten.
|
||||
Durch Tippen auf <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
können Sie zu der ursprünglichen Nachricht im ursprünglichen Chat zurückkehren</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Schließlich können Sie auch „Gespeicherte Nachrichten“ verwenden, um <strong>persönliche Notizen</strong> zu machen - öffnen Sie den Chat, geben Sie etwas ein, fügen Sie ein Foto oder eine Sprachnachricht hinzu usw.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Da „Gespeicherte Nachrichten“ synchronisiert werden, können sie sehr praktisch für die Übertragung von Daten zwischen Geräten sein</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Nachrichten bleiben gespeichert, auch wenn sie bearbeitet oder gelöscht werden -
|
||||
sei es durch den <a href="#edit">Absender</a>, durch <a href="#delold">Automatisches Löschen</a> oder durch <a href="#ephemeralmsgs">verschwindende Nachrichten anderer Chats</a>.</p>
|
||||
|
||||
<h3 id="was-bedeutet-der-grüne-punkt">
|
||||
|
||||
|
||||
@@ -297,19 +344,45 @@ unter dem Text Ihrer Nachrichten.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Sie können manchmal einen “grünen Punkt” <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" /> neben dem Avatar eines Kontakts sehen. Es bedeutet, dass der Kontakt <strong>kürzlich gesehen</strong> wurde, in den letzten 10 Minuten:</p>
|
||||
|
||||
<ul>
|
||||
<li>Seit Delta Chat 1.34 sehen Sie manchmal einen “grünen Punkt” neben dem Avatar eines Kontakts. Es bedeutet, dass der Kontakt “kürzlich gesehen” wurde.</li>
|
||||
<li>Im Detail: Das bedeutet, dass Delta Chat den Kontakt in den letzten 10 Minuten gesehen hat:
|
||||
<ul>
|
||||
<li>entweder weil der Kontakt Ihnen direkt eine Nachricht gesendet hat,</li>
|
||||
<li>weil der Kontakt etwas an eine Gruppe geschrieben hat, in der sie beide Mitglied sind,</li>
|
||||
<li>weil der Kontakt Ihnen eine Lesebestätigung für eine von Ihnen geschriebene Nachricht gesendet hat</li>
|
||||
<li>oder weil der Kontakt Daten mithilfe einer <a href="#webxdc">Webxdc-App</a> an Ihre Delta-Chat-App gesendet hat.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Dies ist also kein Echtzeit-Online-Status - und wenn jemand nicht sofort antwortet, obwohl er online zu sein scheint, machen Sie sich keine Sorgen und geben Sie ihm etwas Raum. ;-)</li>
|
||||
<li>Andererseits werden andere nicht immer “sehen, dass Sie online sind”. Wenn Sie Lesebestätigungen deaktiviert haben, sehen sie den grünen Punkt erst, wenn Sie ihnen eine Nachricht senden oder einer Gruppe schreiben, in der sie sich ebenfalls befinden.</li>
|
||||
<li>entweder weil der Kontakt Ihnen direkt eine Nachricht gesendet hat,</li>
|
||||
<li>weil der Kontakt etwas an eine Gruppe geschrieben hat, in der sie beide Mitglied sind,</li>
|
||||
<li>weil der Kontakt Ihnen eine Lesebestätigung für eine von Ihnen geschriebene Nachricht gesendet hat</li>
|
||||
<li>weil der Kontakt eine Nachricht bearbeitet oder gelöscht hat</li>
|
||||
<li>oder weil der Kontakt Daten mithilfe einer <a href="#webxdc">App</a> in einem geteilten Chat gesendet hat.</li>
|
||||
</ul>
|
||||
|
||||
<p>Dies ist also kein Echtzeit-Online-Status - und wenn jemand nicht sofort antwortet, obwohl er online zu sein scheint, machen Sie sich keine Sorgen und geben Sie ihm etwas Raum. ;-)</p>
|
||||
|
||||
<p>Andererseits werden andere nicht immer “sehen, dass Sie online sind”. Wenn Sie Lesebestätigungen deaktiviert haben, sehen sie den grünen Punkt erst, wenn einer der oben aufgeführten Punkte erfüllt ist.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Schreibfehler korrigieren und Nachrichten nach dem Senden löschen <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Sie können den Text Ihrer Nachrichten nach dem Senden bearbeiten.
|
||||
Tippen Sie dazu lange auf die Nachricht oder klicken Sie mit der rechten Maustaste auf die Nachricht und wählen Sie <strong>Bearbeiten</strong> oder <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" /></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wenn Sie versehentlich eine Nachricht gesendet haben,
|
||||
wählen Sie im selben Menü <strong>Löschen</strong> und dann <strong>Für alle löschen</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Während bei bearbeiteten Nachrichten das „Bearbeitet“ neben dem Datum erscheint,
|
||||
werden gelöschte Nachrichten ohne Markierung im Chat entfernt.
|
||||
Es werden keine Benachrichtigungen verschickt und es gibt kein Zeitlimit.</p>
|
||||
|
||||
<p>Beachten Sie, dass die ursprüngliche Nachricht dennoch von Chatteilnehmern empfangen werden konnte,
|
||||
die die Nachricht bereits beantwortet, weitergeleitet, gespeichert, mit einem Screenshot versehen oder anderweitig kopiert haben könnten.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -557,16 +630,15 @@ an irgendein System, das an der Zustellung von Push-Benachrichtigungen beteiligt
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Eine Delta-Chat-Anwendung erhält lokal ein „Geräte-Token“ (eine zufällige Zahl) und speichert es
|
||||
<p>Eine Delta-Chat-Anwendung erhält lokal ein „Geräte-Token“, verschlüsselt und speichert es
|
||||
auf dem <a href="https://delta.chat/chatmail">Chatmail</a>-Server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wenn ein <a href="https://delta.chat/chatmail">Chatmail</a>-Server eine E-Mail für einen Delta-Chat-Benutzer erhält
|
||||
erhält, leitet er den „Geräte-Token“ an den zentralen Delta-Chat-Benachrichtigungs-Proxy weiter.</p>
|
||||
erhält, leitet er das verschlüsselte Geräte-Token an den zentralen Delta-Chat-Benachrichtigungs-Proxy weiter.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Der zentrale Delta-Chat-Benachrichtigungs-Proxy leitet
|
||||
das „Geräte-Token“ an den jeweiligen Push-Dienst (Apple, Google, etc.) weiter,
|
||||
<p>Der zentrale Delta-Chat-Benachrichtigungs-Proxy entschlüsselt das Geräte-Token und leitet es an den jeweiligen Push-Dienst (Apple, Google, etc.) weiter,
|
||||
ohne jemals die IP- oder E-Mail-Adresse des Delta-Chat-Benutzers zu kennen.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -578,14 +650,15 @@ und auch nie den Inhalt einer Nachricht (auch nicht in verschlüsselter Form).</
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Stand Mai 2024 kennen die Chatmail-Server die Geräte-Token,
|
||||
aber wir planen, diese Informationen an den Benachrichtigungs-Proxy zu verschlüsseln
|
||||
zu verschlüsseln, so dass der Chatmail-Server niemals das „Geräte-Token“ erfährt.</p>
|
||||
|
||||
<p>Der zentrale Delta-Chat-Benachrichtigungs-Proxy <a href="https://github.com/deltachat/notifiers">ist klein und vollständig in Rust implementiert</a>
|
||||
und vergisst die Geräte-Token, sobald Apple/Google/etc. sie verarbeitet hat,
|
||||
normalerweise innerhalb weniger Millisekunden.</p>
|
||||
|
||||
<p>Beachten Sie, dass das Geräte-Token zwischen Anwendungen und dem Benachrichtigungs-Proxy verschlüsselt,
|
||||
aber nicht signiert ist.
|
||||
Der Benachrichtigungs-Proxy sieht also niemals E-Mail-Adressen, IP-Adressen oder
|
||||
irgendwelche kryptografischen Identitätsinformationen, die mit dem Gerät oder dem Geräte-Token eines Nutzers verbunden sind.</p>
|
||||
|
||||
<p>Aufgrund dieses umfassenden Datenschutzkonzepts würde sogar die Beschlagnahmung eines Chatmail-Servers,
|
||||
oder die vollständige Beschlagnahmung des zentralen Delta-Chat-Benachrichtigungsproxys
|
||||
keine privaten Informationen preisgeben, die den zentralen Push-Diensten nicht bereits vorliegen.</p>
|
||||
@@ -600,7 +673,7 @@ keine privaten Informationen preisgeben, die den zentralen Push-Diensten nicht b
|
||||
|
||||
<p>Delta Chat ist ein freier, quelloffener, dezentraler Messenger mit freier Serverwahl,
|
||||
aber wir wollen, dass die Nutzer eine zuverlässige „Sofortzustellung“ von Nachrichten haben,
|
||||
wie sie es von Whatsapp, Signal oder Telegram kennen,
|
||||
wie sie es von WhatsApp, Signal oder Telegram kennen,
|
||||
ohne im Vorfeld Fragen zu stellen, die eher für erfahrene Nutzer oder Entwickler geeignet sind.</p>
|
||||
|
||||
<p>Beachten Sie, dass Delta Chat ein <a href="#privacy-notifications">kleines, die Privatsphäre wahrendes Push-Benachrichtigungssystem</a>
|
||||
@@ -836,7 +909,7 @@ und <em>GnuPG (GPG)</em>, einem Kommandozeilenprogramm, das OpenPGP implementier
|
||||
In vielen öffentlichen Kritiken zu OpenPGP wird GnuPG diskutiert, das Delta Chat nie verwendet hat.
|
||||
Delta Chat verwendet stattdessen die OpenPGP-Rust-Implementierung <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
die als <a href="https://crates.io/crates/pgp">ein unabhängiges “pgp”-Paket</a>,
|
||||
verfügbar und <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">2019 sicherheitsgeprüft</a> wurde.</p>
|
||||
verfügbar ist und <a href="#security-audits">2019 und 2024 sicherheitsgeprüft</a> wurde.</p>
|
||||
|
||||
<p>Unser Ziel ist, zusammen mit anderen OpenPGP-Implementierungen,
|
||||
die Sicherheitseigenschaften durch das im Sommer 2023 angenommene
|
||||
@@ -1080,7 +1153,7 @@ aber irgendwie nicht Ihre Nachrichten - gleichzeitig aber eine vollständige Auf
|
||||
vergangenen verschlüsselten Nachrichten hat.</p>
|
||||
|
||||
<p>In jedem Fall verwendet die Ende-zu-Ende-Verschlüsselung von Delta Chat eine <a href="#openpgp-secure">sichere Untermenge von OpenPGP</a>
|
||||
das [unabhängig sicherheitsgeprüft] wurde (../assets/blog/2019-first-security-review.pdf).</p>
|
||||
das <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">unabhängig sicherheitsgeprüft</a> wurde.</p>
|
||||
|
||||
<h3 id="importkey">
|
||||
|
||||
@@ -1090,45 +1163,13 @@ das [unabhängig sicherheitsgeprüft] wurde (../assets/blog/2019-first-security-
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Ja.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>Nein.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Alternativ können Sie den Schlüssel manuell unter “Einstellungen → Erweitert → Schlüssel verwalten → Importiere geheime Schlüssel” importieren. Achtung: Stellen Sie sicher, dass der Schlüssel nicht durch ein Passwort geschützt ist, oder entfernen Sie das Passwort vorher.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wenn Sie keinen Schlüssel besitzen oder nicht einmal wissen, dass Sie einen benötigen - keine Sorge: Delta Chat erstellt einen Schlüssel, wenn er benötigt wird. Sie müssen nichts weiter tun.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="ich-kann-meinen-existierenden-pgp-schlüssel-nicht-in-delta-chat-importieren">
|
||||
|
||||
|
||||
Ich kann meinen existierenden PGP-Schlüssel nicht in Delta Chat importieren. <a href="#ich-kann-meinen-existierenden-pgp-schlüssel-nicht-in-delta-chat-importieren" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
<p>Delta Chat erzeugt sichere OpenPGP-Schlüssel gemäß der Autocrypt-Spezifikation 1.1.
|
||||
Sie können Ihren privaten Schlüssel exportieren, aber Sie können keine weiteren privaten Schlüssel importieren.</p>
|
||||
|
||||
<p>Mit sehr großer Wahrscheinlichkeit besteht das Problem darin, dass Ihr Schlüssel verschlüsselt ist und/oder ein Passwort verwendet. Solche Schlüssel werden von Delta Chat nicht unterstützt. Bitte entfernen Sie die Verschlüsselung und das Passwort und versuchen Sie den Import danach erneut.</p>
|
||||
|
||||
<p>Ein weiterer häufiger Fehler ist die falsche Dateiendung.
|
||||
Verwenden Sie das ASCII-Armored-Format und die Dateiendung <code class="language-plaintext highlighter-rouge">.asc</code>.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Delta Chat unterstützt “gängige” private Schlüsselformate, allerdings ist es unwahrscheinlich, dass wir 100% aller privaten Schlüssel aus sämtlichen Quellen unterstützen.
|
||||
Dies ist auch nicht das Hauptaugenmerk von Delta Chat. Tatsächlich besitzt die große Mehrheit der Delta-Chat-NutzerInnen keinen Schlüssel, bevor sie Delta Chat verwendet.
|
||||
Wir versuchen jedoch, private Schlüssel aus anderen Quellen so gut wie möglich zu unterstützen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Das Entfernen des Passworts vom privaten Schlüssel ist abhängig von der Software, mit der Sie Ihre PGP-Schlüssel verwalten.
|
||||
Bei Enigmail können Sie Ihr Passwort im Fenster Schlüsselverwaltung auf einen leeren Wert setzen.
|
||||
Bei GnuPG können Sie es über die <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">Kommandozeile einstellen</a>.
|
||||
Für andere Programme können Sie online eine Lösung finden.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Im Allgemeinen empfehlen wir, die Schlüsselverwaltung nicht manuell vorzunehmen, und bieten dies auch nicht an.
|
||||
Wir wollen sicherstellen, dass sich Sicherheitsaudits auf wenige, bewährte kryptographische Algorithmen konzentrieren können - statt einen Strauß möglicher Algorithmen, die mit OpenPGP erlaubt sind.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1138,9 +1179,22 @@ Für andere Programme können Sie online eine Lösung finden.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Das Delta-Chat-Projekt wurde in den letzten Jahren fünf unabhängigen Sicherheitsprüfungen und -analysen unterzogen:</p>
|
||||
<p>Ja, mehrfach.
|
||||
Das Delta-Chat-Projekt wird kontinuierlich unabhängigen Sicherheitsaudits und -analysen unterzogen:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Im Dezember 2024 fand eine <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">von NLNET in Auftrag gegebene Bewertung von rPGP</a> durch <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> statt.
|
||||
rPGP wird für die <a href="https://openpgp.org">OpenPGP</a>-Ende-zu-Ende-Verschlüsselung verwendet.
|
||||
Im Zusammenhang mit den Ergebnissen dieser Prüfung wurden zwei Hinweise veröffentlicht:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panics on Malformed Untrusted Input”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potential Resource Exhaustion when handling Untrusted Messages”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>Die in diesen Hinweisen beschriebenen Probleme wurden behoben und sind Bestandteil der Delta Chat Veröffentlichungen in allen Appstores seit Dezember 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Im März 2024 erhielten wir von der Forschungsgruppe “Applied Cryptography” der ETH Zürich eine umfassende Sicherheitsanalyse und haben alle aufgeworfenen Fragen adressiert.
|
||||
Weitere Informationen finden Sie in unserem Blogbeitrag über <a href="https://delta.chat/en/2024-03-25-crypto-analysis-securejoin">Hardening Guaranteed End-to-End encryption</a> und in der hinterher publizierten <a href="https://eprint.iacr.org/2024/918.pdf">Kryptografischen Analyse von Delta Chat</a></p>
|
||||
@@ -1157,7 +1211,7 @@ Es wurden keine kritischen oder hochgradig gefährlichen Probleme gefunden. Der
|
||||
</li>
|
||||
<li>
|
||||
<p>Im Jahr 2019 analysierte <a href="https://includesecurity.com">Include Security</a> die von Delta Chat verwendeten <a href="https://github.com/rpgp/rpgp">PGP-</a> und <a href="https://github.com/RustCrypto/RSA">RSA-</a> Bibliotheken.
|
||||
Es wurden keine kritischen Probleme gefunden, aber zwei Probleme mit hohem Schweregrad, die wir anschließend behoben haben. Außerdem wurden ein mittelschweres und einige weniger schwerwiegende Probleme gefunden, aber es gab keine Möglichkeit, diese Schwachstellen in der Delta-Chat-Implementierung auszunutzen. Einige dieser Schwachstellen haben wir dennoch nach Abschluss des Audits behoben. Sie können den [vollständigen Bericht hier] lesen (../assets/blog/2019-first-security-review.pdf).</p>
|
||||
Es wurden keine kritischen Probleme gefunden, aber zwei Probleme mit hohem Schweregrad, die wir anschließend behoben haben. Außerdem wurden ein mittelschweres und einige weniger schwerwiegende Probleme gefunden, aber es gab keine Möglichkeit, diese Schwachstellen in der Delta-Chat-Implementierung auszunutzen. Einige dieser Schwachstellen haben wir dennoch nach Abschluss des Audits behoben. Sie können den <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">vollständigen Bericht hier</a> lesen.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -1177,7 +1231,7 @@ Es wurden keine kritischen Probleme gefunden, aber zwei Probleme mit hohem Schwe
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Ja. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Ja. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1228,6 +1282,10 @@ und sicherstellen, dass <strong>Privates Netzwerk</strong> als “Netzwerkprofil
|
||||
<li>
|
||||
<p>In <strong>Gastnetzwerken</strong> z.B. der <strong>Fritz!Box</strong>, können Geräte möglicherweise nicht miteinander kommunizieren.
|
||||
Verwenden Sie nach Möglichkeit ein Nicht-Gast-Netzwerk. Wenn Sie Zugriff auf den Router haben, können Sie auch die Kommunikation der Geräte untereinander für die Dauer der Übertragung erlauben.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wenn Sie immer noch Probleme bei der Verwendung desselben Netzwerks haben,
|
||||
versuchen Sie, einen <strong>Mobilen Hotspot</strong> auf einem Gerät zu öffnen und sich mit dem anderen Gerät in dieses WLAN einzuwählen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Vergewissern Sie sich, dass das Zielgerät über <strong>genügend Speicher</strong> verfügt</p>
|
||||
@@ -1263,6 +1321,23 @@ Verwenden Sie nach Möglichkeit ein Nicht-Gast-Netzwerk. Wenn Sie Zugriff auf de
|
||||
<li>Sie sind nun synchronisiert und können beide Geräte zum Senden und Empfangen von Ende-zu-Ende-verschlüsselten-Nachrichten mit Ihren Kommunikationspartnern verwenden.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="wird-löschen-anheften-archivieren-speichern-stummschalten-usw-über-alle-geräte-synchronisiert">
|
||||
|
||||
|
||||
Wird Löschen, Anheften, Archivieren, Speichern, Stummschalten usw. über alle Geräte synchronisiert? <a href="#wird-löschen-anheften-archivieren-speichern-stummschalten-usw-über-alle-geräte-synchronisiert" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Ja.</p>
|
||||
|
||||
<p>Wenn Sie z.B. einen Chat oder eine Nachricht von Ihrem Telefon löschen,
|
||||
wird sie auch auf Ihrem Desktop gelöscht, sobald dieser online ist.</p>
|
||||
|
||||
<p>Ausnahmen sind <a href="#delold">Alte Nachrichten vom Gerät löschen</a>,
|
||||
da verschiedene Geräte unterschiedliche Speicherkapazitäten haben können,
|
||||
und systemspezifische Einstellungen wie Benachrichtigungstöne.</p>
|
||||
|
||||
<h3 id="gibt-es-pläne-für-eine-delta-chat-web-anwendung">
|
||||
|
||||
|
||||
@@ -1632,17 +1707,17 @@ wenn Sie eine <a href="#signature">Signaturtext</a> einfügen.</p>
|
||||
|
||||
<p>Einige BenutzerInnen verwenden Delta Chat als reguläres E-Mail-Programm und möchten lieber den Posteingang anstatt des DeltaChat-Ordners verwenden. Wenn Sie “DeltaChat-Ordner beobachten” ausschalten, sollten Sie auch “Autom. Verschieben in den DeltaChat-Ordner” ausschalten. Andernfalls funktioniert die Verwendung auf mehreren Geräten möglicherweise nicht richtig.</p>
|
||||
|
||||
<h3 id="ist-delta-chat-kompatibel-mit-protonmail--tutanota--criptext">
|
||||
<h3 id="ist-delta-chat-kompatibel-mit-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
Ist Delta Chat kompatibel mit Protonmail / Tutanota / Criptext? <a href="#ist-delta-chat-kompatibel-mit-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
Ist Delta Chat kompatibel mit Proton Mail / Tutanota / Criptext? <a href="#ist-delta-chat-kompatibel-mit-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Ja und Nein.</li>
|
||||
<li>Nein, Sie können sich nicht mit Delta Chat in ein Protonmail-, Tutanota- oder Criptext-Konto einloggen, da diese keinen Standard-E-Mail-Empfang über IMAP anbieten.</li>
|
||||
<li>Nein, Sie können sich nicht mit Delta Chat in ein Proton-Mail-, Tutanota- oder Criptext-Konto einloggen, da diese keinen Standard-E-Mail-Empfang über IMAP anbieten.</li>
|
||||
<li>Ja, Sie können Delta Chat verwenden, um Nachrichten an Personen zu senden, die Protonmail, Tutanota oder Criptext verwenden. Diese Nachrichten werden jedoch nicht Ende-zu-Ende-verschlüsselt, da diese Anbieter keine mit dem <a href="https://autocrypt.org/">Autocrypt</a>-Standard kompatible Verschlüsselung verwenden.</li>
|
||||
<li>Delta Chat kann Ende-zu-Ende-Verschlüsselung über jeden E-Mail-Anbieter mit jeder
|
||||
<a href="https://autocrypt.org/dev-status.html">Autocrypt-fähige E-Mail-Anwendung</a> herstellen</li>
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 183 B |
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#what-is-delta-chat">What is Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#how-can-i-find-people-to-chat-with">How can I find people to chat with?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#who-sees-my-profile-picture">Who sees my profile picture?</a></li>
|
||||
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li>
|
||||
<li><a href="#what-do-pinning-muting-and-archiving-mean">What do Pinning, Muting and Archiving mean?</a></li>
|
||||
<li><a href="#save">How do “Saved Messages” work?</a></li>
|
||||
<li><a href="#what-does-the-green-dot-mean">What does the green dot mean?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li>
|
||||
<li><a href="#importkey">Can I reuse my existing private key?</a></li>
|
||||
<li><a href="#i-cant-import-my-existing-pgp-key-into-delta-chat">I can’t import my existing PGP key into Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#can-i-use-delta-chat-on-multiple-devices-at-the-same-time">Can I use Delta Chat on multiple devices at the same time?</a></li>
|
||||
<li><a href="#troubleshooting">Troubleshooting</a></li>
|
||||
<li><a href="#backup">Manual Transfer</a></li>
|
||||
<li><a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices?</a></li>
|
||||
<li><a href="#are-there-any-plans-for-introducing-a-delta-chat-web-client">Are there any plans for introducing a Delta Chat Web Client?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#what-is-the-send-copy-to-self-setting-good-for">What is the “Send Copy to Self” setting good for?</a></li>
|
||||
<li><a href="#why-can-i-choose-to-watch-the-sent-folder">Why can I choose to watch the “Sent” folder?</a></li>
|
||||
<li><a href="#why-can-i-choose-not-to-watch-the-deltachat-folder">Why can I choose not to watch the DeltaChat folder?</a></li>
|
||||
<li><a href="#is-delta-chat-compatible-with-protonmail--tutanota--criptext">Is Delta Chat compatible with Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#is-delta-chat-compatible-with-proton-mail--tutanota--criptext">Is Delta Chat compatible with Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">How can I delete my account?</a></li>
|
||||
<li><a href="#im-interested-in-the-technical-details-can-you-tell-me-more">I’m interested in the technical details. Can you tell me more?</a></li>
|
||||
<li><a href="#where-can-my-friends-find-delta-chat">Where can my friends find Delta Chat?</a></li>
|
||||
@@ -182,15 +184,20 @@ Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If a message comes from an unknown contact, it appears as a <strong>request</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>If a message comes from an unknown contact, it appears as a <strong>request</strong>. You
|
||||
need to accept the request before you can reply.</li>
|
||||
<li>You can also “delete” it if you don’t want to chat with them for now. This
|
||||
does <em>not</em> delete the message on the server, only on your device. So you can
|
||||
still deal with the message in a different mail app.</li>
|
||||
<li>If you delete a request, future messages from that contact will still appear
|
||||
<li>
|
||||
<p>You need to <strong>accept</strong> the request before you can reply.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>You can also <strong>delete</strong> it if you don’t want to chat with them for now.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you delete a request, future messages from that contact will still appear
|
||||
as message request, so you can change your mind. If you really don’t want to
|
||||
receive messages from this person, consider <em>blocking</em> them.</li>
|
||||
receive messages from this person, consider <strong>blocking</strong> them.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="does-delta-chat-support-images-videos-and-other-attachments">
|
||||
@@ -203,7 +210,7 @@ receive messages from this person, consider <em>blocking</em> them.</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Yes. Beside the plain text, all e-mail attachments are displayed as separate messages. Outgoing messages get attachments as needed automatically.</p>
|
||||
<p>Yes. Images, videos, files, voice messages etc. are handled as usual.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</p>
|
||||
@@ -304,6 +311,41 @@ Archived chats remain accessible above the chat list or via search.</p>
|
||||
|
||||
<p>To use the functions, long tap or right click a chat in the chat list.</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
How do “Saved Messages” work? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Saved Messages</strong> is a chat that you can use to easily remember and find messages.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In any chat, long tap or right click a message and select <strong>Save</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Saved messages are marked by the symbol
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
next to the timestamp</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Later, open the “Saved Messages” chat - and you will see the saved messages there.
|
||||
By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Messages stay saved even if they are edited or deleted -
|
||||
may it be by <a href="#edit">sender</a>, by <a href="#delold">device cleanup</a> or by <a href="#ephemeralmsgs">disappearing messages of other chats</a>.</p>
|
||||
|
||||
<h3 id="what-does-the-green-dot-mean">
|
||||
|
||||
|
||||
@@ -312,25 +354,53 @@ Archived chats remain accessible above the chat list or via search.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>You can sometimes see a <strong>green dot</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" />
|
||||
next to the avatar of a contact.
|
||||
It means they were <strong>recently seen</strong> in the last 10 minutes:</p>
|
||||
|
||||
<ul>
|
||||
<li>Since Delta Chat 1.34 you can sometimes see a “green dot” next to the avatar
|
||||
of a contact. It means they were “recently seen”.</li>
|
||||
<li>In detail: it means, that in the last 10 minutes, Delta Chat has seen them:
|
||||
<ul>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>or because they sent data to your Delta Chat app by using a
|
||||
<a href="#webxdc">webxdc app</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>So this is not a real time online status - and if someone doesn’t answer
|
||||
right away even though they seem to be online, don’t worry and give them some
|
||||
space ;-)</li>
|
||||
<li>On the other hand, others will not always “see that you are online”. If you
|
||||
have turned off read receipts, they will not see the green dot until you
|
||||
message them or write to a group they’re in as well.</li>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>because they edit or delete a message in a chat shared with you,</li>
|
||||
<li>or because they use an <a href="#webxdc">app</a> in a chat shared with you.</li>
|
||||
</ul>
|
||||
|
||||
<p>So this is not a real time online status -
|
||||
and if someone doesn’t answer right away even though they seem to be online,
|
||||
don’t worry and give them some space :)</p>
|
||||
|
||||
<p>On the other hand, others will not always “see that you are online”.
|
||||
If you have turned off read receipts,
|
||||
they will not see the green dot
|
||||
until one of the above conditions are met.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Correct typos and delete messages after sending <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can edit the text of your messages after sending.
|
||||
For that, long tap or right click the message and select <strong>Edit</strong>
|
||||
or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have sent a message accidentally,
|
||||
from the same menu, select <strong>Delete</strong> and then <strong>Delete for Everyone</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>While edited messages will have the word “Edited” next to the timestamp,
|
||||
deleted messages will be removed without a marker in the chat.
|
||||
Notifications are not sent and there is no time limit.</p>
|
||||
|
||||
<p>Note, that the original message may still be received by chat members
|
||||
who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -603,16 +673,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -625,14 +695,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
@@ -647,7 +718,7 @@ would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
<p>Delta Chat is a free and open source decentralized messenger with free server choice,
|
||||
but we want users to reliably experience “instant delivery” of messages,
|
||||
like they experience from Whatsapp, Signal or Telegram apps,
|
||||
like they experience from WhatsApp, Signal or Telegram apps,
|
||||
without asking questions up-front that are more suited to expert users or developers.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
@@ -886,14 +957,14 @@ if the whole message is properly encrypted and signed.
|
||||
For example, “Detached signatures” are not treated as secure.</p>
|
||||
|
||||
<p>OpenPGP is not insecure by itself.
|
||||
Most publically discussed OpenPGP security problems
|
||||
Most publicly discussed OpenPGP security problems
|
||||
actually stem from bad usability or bad implementations of tools or apps (or both).
|
||||
It is particularly important to distinguish between OpenPGP, the IETF encryption standard,
|
||||
and GnuPG (GPG), a command line tool implementing OpenPGP.
|
||||
Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used.
|
||||
Delta Chat rather uses the OpenPGP Rust implementation <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
available as <a href="https://crates.io/crates/pgp">an independent “pgp” package</a>,
|
||||
and <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">security-audited in 2019</a>.</p>
|
||||
and <a href="#security-audits">security-audited in 2019 and 2024</a>.</p>
|
||||
|
||||
<p>We aim, along with other OpenPGP implementors,
|
||||
to further improve security characteristics by implementing the
|
||||
@@ -1142,7 +1213,7 @@ but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</
|
||||
that are safe against compromised servers or corrupted networks.
|
||||
Signal and most other PFS-supporting messengers do not provide
|
||||
a practical scheme for protecting chat groups from network attacks
|
||||
which are arguably more worrysome
|
||||
which are arguably more worrisome
|
||||
than a potential attacker who seizes your phone and private encryption setup
|
||||
but somehow not your messages, yet has a full record of all
|
||||
past encrypted messages.</p>
|
||||
@@ -1158,42 +1229,14 @@ which has been <a href="https://delta.chat/assets/blog/2019-first-security-revie
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>No.</p>
|
||||
|
||||
<p>Alternatively, you can import the key manually in “Settings -> Advanced settings -> Import secret keys”.
|
||||
Caution: Make sure the key is not protected by a password, or remove the password beforehand.</p>
|
||||
<p>Delta Chat generates secure OpenPGP keys according to the Autocrypt specification 1.1.
|
||||
You can export your private key but you can not import additional private keys.</p>
|
||||
|
||||
<p>If you don’t have a key or don’t even know you would need one - don’t worry: Delta Chat generates keys as needed, you don’t have to hit a button for it.</p>
|
||||
|
||||
<h3 id="i-cant-import-my-existing-pgp-key-into-delta-chat">
|
||||
|
||||
|
||||
I can’t import my existing PGP key into Delta Chat. <a href="#i-cant-import-my-existing-pgp-key-into-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The most likely cause is that your key is encrypted and/or uses a password.
|
||||
Such keys are not supported by Delta Chat.
|
||||
You could remove the passphrase encryption and the password and try the import again.</p>
|
||||
|
||||
<p>Another common error is having the wrong file ending.
|
||||
Use the ASCII armored format and an <code class="language-plaintext highlighter-rouge">.asc</code> file ending.</p>
|
||||
|
||||
<p>Delta Chat supports common OpenPGP private key formats, however, it
|
||||
is unlikely that private keys from all sources will be fully supported. This
|
||||
is not the main goal of Delta Chat. In fact, the majority of new users
|
||||
will not have any key prior to using Delta Chat.
|
||||
We do, however, try to support private keys from as many sources as possible.</p>
|
||||
|
||||
<p>Removing the password from the private key will depend on the
|
||||
software you use to manage your PGP keys. With Enigmail, you can set your
|
||||
password to an empty value in the Key Management window. With GnuPG you can set
|
||||
it <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">via the command
|
||||
line</a>.
|
||||
For other programs, you should be able to find a solution online.</p>
|
||||
<p>In general, we do not recommend or offer users to perform manual key management.
|
||||
We want to ensure that security audits can focus on a few proven cryptographic algorithms
|
||||
instead of the full breadth of possible algorithms allowed with OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1203,10 +1246,25 @@ For other programs, you should be able to find a solution online.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The Delta Chat project underwent four independent security audits and one
|
||||
independent security analysis, from most recent to older:</p>
|
||||
<p>Yes, multiple times.
|
||||
The Delta Chat project continuously undergoes independent security audits and analysis,
|
||||
from most recent to older:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
|
||||
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
|
||||
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
|
||||
Two advisories were released related to the findings of this audit:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panics on Malformed Untrusted Input”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potential Resource Exhaustion when handling Untrusted Messages”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>The issues outlined in these advisories have been fixed and are part of Delta Chat
|
||||
releases on all appstores since December 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2024 March, we received a deep security analysis from the Applied Cryptography
|
||||
research group at ETH Zuerich and addressed all raised issues.
|
||||
@@ -1272,7 +1330,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Yes. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1329,6 +1387,10 @@ which is known to cause problems (especially on Windows).
|
||||
<li>
|
||||
<p><strong>Guest Networks</strong> may not allow devices to communicate with each other.
|
||||
If possible, use a non-guest network.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you still have troubles using the same network,
|
||||
try to open <strong>Mobile Hotspot</strong> on one device and join that Wi-Fi from the other one</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ensure there is <strong>enough storage</strong> on the destination device</p>
|
||||
@@ -1376,6 +1438,23 @@ help you.</li>
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">
|
||||
|
||||
|
||||
Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices? <a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.</p>
|
||||
|
||||
<p>If you e.g. delete a chat or a message from your phone,
|
||||
it will be deleted on your desktop as soon as it comes online again.</p>
|
||||
|
||||
<p>Notable exceptions are <a href="#delold">Delete old messages from Device</a>,
|
||||
as different devices may have different storage capacities,
|
||||
and system specific settings as notification sounds.</p>
|
||||
|
||||
<h3 id="are-there-any-plans-for-introducing-a-delta-chat-web-client">
|
||||
|
||||
|
||||
@@ -1497,7 +1576,7 @@ will not get interrupted by a video chat invite.</li>
|
||||
link in the settings.</li>
|
||||
<li>For example, to use the flagship Jitsi Meet instance, you could enter
|
||||
<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$ROOM</code>. The <code class="language-plaintext highlighter-rouge">$ROOM</code> variable will be a random value;
|
||||
this way, you will have a new random jitsi room every time you call someone.</li>
|
||||
this way, you will have a new random Jitsi room every time you call someone.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="what-are-broadcast-lists-and-how-can-i-use-them">
|
||||
@@ -1509,7 +1588,7 @@ this way, you will have a new random jitsi room every time you call someone.</li
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>With a Broadcast List you can send a message to many recipents at once; when
|
||||
<li>With a Broadcast List you can send a message to many recipients at once; when
|
||||
they reply to you, you get the reply in your direct 1:1 chat with them. The
|
||||
recipients can’t see each other.</li>
|
||||
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
|
||||
@@ -1824,17 +1903,17 @@ folder for their mail, instead of the DeltaChat folder. If you disable “Watch
|
||||
DeltaChat folder”, you should also disable “move chat messages to DeltaChat”.
|
||||
Otherwise, deleting messages or multi-device setups might not work properly.</p>
|
||||
|
||||
<h3 id="is-delta-chat-compatible-with-protonmail--tutanota--criptext">
|
||||
<h3 id="is-delta-chat-compatible-with-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
Is Delta Chat compatible with Protonmail / Tutanota / Criptext? <a href="#is-delta-chat-compatible-with-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
Is Delta Chat compatible with Proton Mail / Tutanota / Criptext? <a href="#is-delta-chat-compatible-with-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Yes and No.</li>
|
||||
<li>No, you can not use your Protonmail, Tutanota, or Criptext account with Delta
|
||||
<li>No, you can not use your Proton Mail, Tutanota, or Criptext account with Delta
|
||||
Chat; they do not offer receiving mails via IMAP.</li>
|
||||
<li>In any case you can use Delta Chat to send Messages to people who use
|
||||
Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end
|
||||
@@ -2009,7 +2088,7 @@ even close.</p>
|
||||
Freiburg (Germany), and is distributed to more than a dozen contributors world-wide.</p>
|
||||
|
||||
<p>Please see <a href="https://delta.chat/en/contribute">Delta Chat Contribution channels</a>
|
||||
for both monetary and and other contribution possibilities.</p>
|
||||
for both monetary and other contribution possibilities.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="es"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#qué-es-delta-chat">¿Qué es Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#cómo-puedo-encontrar-personas-con-las-que-chatear">¿Cómo puedo encontrar personas con las que chatear?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#quién-ve-mi-foto-de-perfil">¿Quién ve mi foto de perfil?</a></li>
|
||||
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li>
|
||||
<li><a href="#qué-significa-fijar-mutear-archivar">¿Qué significa fijar, mutear, archivar?</a></li>
|
||||
<li><a href="#save">How do “Saved Messages” work?</a></li>
|
||||
<li><a href="#qué-significa-el-punto-verde">¿Qué significa el punto verde?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">¿Cómo funciona la desaparición de mensajes?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">¿Soporta Delta Chat Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#es-el-cifrado-de-extremo-a-extremo-de-delta-chat-tan-seguro-como-el-de-signal">¿Es el cifrado de extremo a extremo de Delta Chat tan seguro como el de Signal?</a></li>
|
||||
<li><a href="#importkey">¿Puedo reutilizar mi clave privada existente?</a></li>
|
||||
<li><a href="#no-puedo-importar-mi-clave-pgp-existente-en-delta-chat">No puedo importar mi clave PGP existente en Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">¿Se auditó Delta Chat de forma independiente en busca de vulnerabilidades de seguridad?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#puedo-usar-delta-chat-en-varios-dispositivos-al-mismo-tiempo">¿Puedo usar Delta Chat en varios dispositivos al mismo tiempo?</a></li>
|
||||
<li><a href="#solución-de-problemas">Solución de problemas</a></li>
|
||||
<li><a href="#backup">Transferencia manual</a></li>
|
||||
<li><a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices?</a></li>
|
||||
<li><a href="#tienen-planeado-crear-un-cliente-web-de-delta-chat">¿Tienen planeado crear un cliente web de Delta Chat?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#para-qué-sirve-la-configuración-enviar-autocopia">¿Para qué sirve la configuración “Enviar autocopia”?</a></li>
|
||||
<li><a href="#por-qué-puedo-elegir-monitorear-la-carpeta-enviados">¿Por qué puedo elegir monitorear la carpeta “Enviados”?</a></li>
|
||||
<li><a href="#por-qué-puedo-elegir-no-monitorear-la-carpeta-deltachat">¿Por qué puedo elegir no monitorear la carpeta DeltaChat?</a></li>
|
||||
<li><a href="#delta-chat-es-compatible-con-protonmail--tutanota--criptext">¿Delta Chat es compatible con Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#delta-chat-es-compatible-con-proton-mail--tutanota--criptext">¿Delta Chat es compatible con Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">¿Cómo puedo eliminar mi cuenta?</a></li>
|
||||
<li><a href="#estoy-interesado-en-los-detalles-técnicos-pueden-decirme-más">Estoy interesado en los detalles técnicos. ¿Pueden decirme más?</a></li>
|
||||
<li><a href="#where-can-my-friends-find-delta-chat">Where can my friends find Delta Chat?</a></li>
|
||||
@@ -182,10 +184,18 @@ Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Si un mensaje proviene de un contacto desconocido, aparece como una <strong>solicitud</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>Si un mensaje proviene de un contacto desconocido, aparece como una <strong>solicitud</strong>. Necesitas aceptar la solicitud antes de poder responder.</li>
|
||||
<li>También puedes “eliminarlo” si no quieres chatear con ellos por ahora. Esto <em>no</em> elimina el mensaje en el servidor, solo en tu dispositivo. Por lo tanto, aún puedes manejar el mensaje en una aplicación de correo diferente.</li>
|
||||
<li>Si eliminas una solicitud, los mensajes futuros de ese contacto seguirán apareciendo como solicitud de mensaje, por lo que puedes cambiar de opinión. Si realmente no quieres recibir mensajes de esta persona, considera <em>bloquearlos</em>.</li>
|
||||
<li>
|
||||
<p>Necesitas <strong>aceptar</strong> la solicitud antes de poder responder.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>También puedes <strong>eliminarlo</strong> si no quieres chatear con ellos por ahora.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Si eliminas una solicitud, los mensajes futuros de ese contacto seguirán apareciendo como solicitud de mensaje, por lo que puedes cambiar de opinión. Si realmente no quieres recibir mensajes de esta persona, considera <strong>bloquearlos</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="delta-chat-soporta-envío-de-imágenes-videos-documentos-y-otros-archivos">
|
||||
@@ -299,6 +309,41 @@ Los chats <strong>silenciados permanecen archivados</strong> hasta que los desar
|
||||
<p>Para archivar o fijar un chat, toque prolongadamente (Android), use el menú del chat (Android/Escritorio) o deslícese hacia la izquierda (iOS);
|
||||
para silenciar un chat, use el menú del chat (Android/Escritorio) o el perfil del chat (iOS).</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
How do “Saved Messages” work? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Saved Messages</strong> is a chat that you can use to easily remember and find messages.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In any chat, long tap or right click a message and select <strong>Save</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Saved messages are marked by the symbol
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
next to the timestamp</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Later, open the “Saved Messages” chat - and you will see the saved messages there.
|
||||
By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Messages stay saved even if they are edited or deleted -
|
||||
may it be by <a href="#edit">sender</a>, by <a href="#delold">device cleanup</a> or by <a href="#ephemeralmsgs">disappearing messages of other chats</a>.</p>
|
||||
|
||||
<h3 id="qué-significa-el-punto-verde">
|
||||
|
||||
|
||||
@@ -307,25 +352,53 @@ para silenciar un chat, use el menú del chat (Android/Escritorio) o el perfil d
|
||||
|
||||
</h3>
|
||||
|
||||
<p>You can sometimes see a <strong>green dot</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" />
|
||||
next to the avatar of a contact.
|
||||
It means they were <strong>recently seen</strong> in the last 10 minutes:</p>
|
||||
|
||||
<ul>
|
||||
<li>Since Delta Chat 1.34 you can sometimes see a “green dot” next to the avatar
|
||||
of a contact. It means they were “recently seen”.</li>
|
||||
<li>In detail: it means, that in the last 10 minutes, Delta Chat has seen them:
|
||||
<ul>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>or because they sent data to your Delta Chat app by using a
|
||||
<a href="#webxdc">webxdc app</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>So this is not a real time online status - and if someone doesn’t answer
|
||||
right away even though they seem to be online, don’t worry and give them some
|
||||
space ;-)</li>
|
||||
<li>On the other hand, others will not always “see that you are online”. If you
|
||||
have turned off read receipts, they will not see the green dot until you
|
||||
message them or write to a group they’re in as well.</li>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>because they edit or delete a message in a chat shared with you,</li>
|
||||
<li>or because they use an <a href="#webxdc">app</a> in a chat shared with you.</li>
|
||||
</ul>
|
||||
|
||||
<p>So this is not a real time online status -
|
||||
and if someone doesn’t answer right away even though they seem to be online,
|
||||
don’t worry and give them some space :)</p>
|
||||
|
||||
<p>On the other hand, others will not always “see that you are online”.
|
||||
If you have turned off read receipts,
|
||||
they will not see the green dot
|
||||
until one of the above conditions are met.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Correct typos and delete messages after sending <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can edit the text of your messages after sending.
|
||||
For that, long tap or right click the message and select <strong>Edit</strong>
|
||||
or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have sent a message accidentally,
|
||||
from the same menu, select <strong>Delete</strong> and then <strong>Delete for Everyone</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>While edited messages will have the word “Edited” next to the timestamp,
|
||||
deleted messages will be removed without a marker in the chat.
|
||||
Notifications are not sent and there is no time limit.</p>
|
||||
|
||||
<p>Note, that the original message may still be received by chat members
|
||||
who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -597,16 +670,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -619,14 +692,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
@@ -641,7 +715,7 @@ would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
<p>Delta Chat is a free and open source decentralized messenger with free server choice,
|
||||
but we want users to reliably experience “instant delivery” of messages,
|
||||
like they experience from Whatsapp, Signal or Telegram apps,
|
||||
like they experience from WhatsApp, Signal or Telegram apps,
|
||||
without asking questions up-front that are more suited to expert users or developers.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
@@ -864,14 +938,14 @@ si todo el mensaje está correctamente cifrado y firmado.
|
||||
Por ejemplo, las “firmas desvinculadas” no se consideran seguras.</p>
|
||||
|
||||
<p>OpenPGP is not insecure by itself.
|
||||
Most publically discussed OpenPGP security problems
|
||||
Most publicly discussed OpenPGP security problems
|
||||
actually stem from bad usability or bad implementations of tools or apps (or both).
|
||||
It is particularly important to distinguish between OpenPGP, the IETF encryption standard,
|
||||
and GnuPG (GPG), a command line tool implementing OpenPGP.
|
||||
Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used.
|
||||
Delta Chat rather uses the OpenPGP Rust implementation <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
available as <a href="https://crates.io/crates/pgp">an independent “pgp” package</a>,
|
||||
and <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">security-audited in 2019</a>.</p>
|
||||
and <a href="#security-audits">security-audited in 2019 and 2024</a>.</p>
|
||||
|
||||
<p>We aim, along with other OpenPGP implementors,
|
||||
to further improve security characteristics by implementing the
|
||||
@@ -1103,7 +1177,7 @@ but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</
|
||||
that are safe against compromised servers or corrupted networks.
|
||||
Signal and most other PFS-supporting messengers do not provide
|
||||
a practical scheme for protecting chat groups from network attacks
|
||||
which are arguably more worrysome
|
||||
which are arguably more worrisome
|
||||
than a potential attacker who seizes your phone and private encryption setup
|
||||
but somehow not your messages, yet has a full record of all
|
||||
past encrypted messages.</p>
|
||||
@@ -1119,44 +1193,14 @@ which has been <a href="https://delta.chat/assets/blog/2019-first-security-revie
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Si. La mejor manera es enviar un Mensaje de Configuración de Autocrypt desde el otro cliente de correo electrónico. Busca algo como <strong>Iniciar la Transferencia de la Configuración Autocrypt</strong> en la configuración del otro cliente y seguir las instrucciones que se muestren allí.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Alternativamente, puede importar la clave manualmente en “Configuración avanzada / Administrar claves privadas”. Precaución: asegúrese de que la clave no esté protegida por una contraseña o elimine la contraseña de antemano.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>No.</p>
|
||||
|
||||
<p>Si no tienes una clave o ni siquiera sabes para qué necesitarías una, no te preocupes: Delta Chat genera claves según sea necesario, no tienes que presionar un botón para ello.</p>
|
||||
|
||||
<h3 id="no-puedo-importar-mi-clave-pgp-existente-en-delta-chat">
|
||||
|
||||
|
||||
No puedo importar mi clave PGP existente en Delta Chat. <a href="#no-puedo-importar-mi-clave-pgp-existente-en-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
<p>Delta Chat generates secure OpenPGP keys according to the Autocrypt specification 1.1.
|
||||
You can export your private key but you can not import additional private keys.</p>
|
||||
|
||||
<p>La causa más probable es que su clave esté cifrada y/o utilice una contraseña.
|
||||
Delta Chat no admite dichas claves.
|
||||
Puede eliminar el cifrado de la frase de contraseña y la contraseña e intentar importar nuevamente.</p>
|
||||
|
||||
<p>Otro error común es tener una extensión de archivo incorrecto.
|
||||
Utilice el formato blindado ASCII y una extensión de archivo <code class="language-plaintext highlighter-rouge">.asc</code>.</p>
|
||||
|
||||
<p>Delta Chat supports common OpenPGP private key formats, however, it
|
||||
is unlikely that private keys from all sources will be fully supported. This
|
||||
is not the main goal of Delta Chat. In fact, the majority of new users
|
||||
will not have any key prior to using Delta Chat.
|
||||
We do, however, try to support private keys from as many sources as possible.</p>
|
||||
|
||||
<p>Removing the password from the private key will depend on the
|
||||
software you use to manage your PGP keys. With Enigmail, you can set your
|
||||
password to an empty value in the Key Management window. With GnuPG you can set
|
||||
it <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">via the command
|
||||
line</a>.
|
||||
For other programs, you should be able to find a solution online.</p>
|
||||
<p>In general, we do not recommend or offer users to perform manual key management.
|
||||
We want to ensure that security audits can focus on a few proven cryptographic algorithms
|
||||
instead of the full breadth of possible algorithms allowed with OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1166,10 +1210,25 @@ For other programs, you should be able to find a solution online.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The Delta Chat project underwent four independent security audits and one
|
||||
independent security analysis, from most recent to older:</p>
|
||||
<p>Yes, multiple times.
|
||||
The Delta Chat project continuously undergoes independent security audits and analysis,
|
||||
from most recent to older:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
|
||||
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
|
||||
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
|
||||
Two advisories were released related to the findings of this audit:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panics on Malformed Untrusted Input”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potential Resource Exhaustion when handling Untrusted Messages”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>The issues outlined in these advisories have been fixed and are part of Delta Chat
|
||||
releases on all appstores since December 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2024 March, we received a deep security analysis from the Applied Cryptography
|
||||
research group at ETH Zuerich and addressed all raised issues.
|
||||
@@ -1235,7 +1294,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Si. Delta Chat 1.36 viene con una nueva funcionalidad experimental que permite usar la misma cuenta en diferentes dispositivos:</p>
|
||||
<p>Yes. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1292,6 +1351,10 @@ which is known to cause problems (especially on Windows).
|
||||
<li>
|
||||
<p><strong>Guest Networks</strong> may not allow devices to communicate with each other.
|
||||
If possible, use a non-guest network.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you still have troubles using the same network,
|
||||
try to open <strong>Mobile Hotspot</strong> on one device and join that Wi-Fi from the other one</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Asegurate que haya <strong>suficiente espacio</strong> en el dispositivo destino</p>
|
||||
@@ -1339,6 +1402,23 @@ help you.</li>
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">
|
||||
|
||||
|
||||
Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices? <a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.</p>
|
||||
|
||||
<p>If you e.g. delete a chat or a message from your phone,
|
||||
it will be deleted on your desktop as soon as it comes online again.</p>
|
||||
|
||||
<p>Notable exceptions are <a href="#delold">Delete old messages from Device</a>,
|
||||
as different devices may have different storage capacities,
|
||||
and system specific settings as notification sounds.</p>
|
||||
|
||||
<h3 id="tienen-planeado-crear-un-cliente-web-de-delta-chat">
|
||||
|
||||
|
||||
@@ -1460,7 +1540,7 @@ will not get interrupted by a video chat invite.</li>
|
||||
link in the settings.</li>
|
||||
<li>For example, to use the flagship Jitsi Meet instance, you could enter
|
||||
<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$ROOM</code>. The <code class="language-plaintext highlighter-rouge">$ROOM</code> variable will be a random value;
|
||||
this way, you will have a new random jitsi room every time you call someone.</li>
|
||||
this way, you will have a new random Jitsi room every time you call someone.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="qué-son-las-listas-de-difusión-y-cómo-puedo-usarlas">
|
||||
@@ -1472,7 +1552,7 @@ this way, you will have a new random jitsi room every time you call someone.</li
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>With a Broadcast List you can send a message to many recipents at once; when
|
||||
<li>With a Broadcast List you can send a message to many recipients at once; when
|
||||
they reply to you, you get the reply in your direct 1:1 chat with them. The
|
||||
recipients can’t see each other.</li>
|
||||
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
|
||||
@@ -1769,25 +1849,19 @@ cliente Delta Chat Desktop disponible en todas las plataformas.</p>
|
||||
<p>Algunas personas usan Delta Chat como un cliente de correo electrónico normal y desean mantener los correos en la bandeja de entrada, en lugar de la carpeta DeltaChat. Si deshabilita “Monitorear carpeta DeltaChat”, también debe deshabilitar “mover automáticamente a la carpeta DeltaChat”.
|
||||
De lo contrario, eliminar mensajes o configuraciones de dispositivos múltiples podría no funcionar correctamente.</p>
|
||||
|
||||
<h3 id="delta-chat-es-compatible-con-protonmail--tutanota--criptext">
|
||||
<h3 id="delta-chat-es-compatible-con-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
¿Delta Chat es compatible con Protonmail / Tutanota / Criptext? <a href="#delta-chat-es-compatible-con-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
¿Delta Chat es compatible con Proton Mail / Tutanota / Criptext? <a href="#delta-chat-es-compatible-con-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Yes and No.</li>
|
||||
<li>No, you can not use your Protonmail, Tutanota, or Criptext account with Delta
|
||||
Chat; they do not offer receiving mails via IMAP.</li>
|
||||
<li>In any case you can use Delta Chat to send Messages to people who use
|
||||
Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end
|
||||
encrypted, though. The end-to-end encryption those providers offer is not
|
||||
compatible with <a href="https://autocrypt.org/">Autocrypt</a>, the standard Delta Chat
|
||||
uses.</li>
|
||||
<li>Delta Chat can end-to-end-encrypt through any e-mail provider with any
|
||||
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
|
||||
<li>Si y no.</li>
|
||||
<li>No, no puede usar su cuenta de Proton Mail, Tutanota o Criptext con Delta Chat; esos servicios no permiten recibir correos a través de IMAP.</li>
|
||||
<li>En cualquier caso, puede usar Delta Chat para enviar mensajes a personas que usan Protonmail, Tutanota o Criptext. Sin embargo, esos mensajes no se cifrarán de extremo a extremo. El cifrado de extremo a extremo que ofrecen esos proveedores solo funciona dentro de sus plataformas y no es compatible con nadie externo.</li>
|
||||
<li>Delta Chat puede encriptar e2e a través de cualquier proveedor de correo electrónico con cualquier <a href="https://autocrypt.org/dev-status.html">aplicación de correo electrónico compatible con Autocrypt</a>.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
+190
-117
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="fr"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#quest-ce-que-delta-chat-">Qu’est-ce que Delta Chat ?</a>
|
||||
<ul>
|
||||
<li><a href="#comment-puis-je-trouver-des-gens-avec-qui-discuter-">Comment puis-je trouver des gens avec qui discuter ?</a></li>
|
||||
@@ -8,9 +8,11 @@
|
||||
<li><a href="#delta-chat-prend-il-en-charge-les-images-vidéos-et-autres-pièces-jointes-">Delta Chat prend-il en charge les images, vidéos et autres pièces jointes ?</a></li>
|
||||
<li><a href="#multiple-accounts">What are profiles? How can I switch between them?</a></li>
|
||||
<li><a href="#qui-peut-voir-ma-photo-de-profil-">Qui peut voir ma photo de profil ?</a></li>
|
||||
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li>
|
||||
<li><a href="#signature">Puis-je afficher une Bio/Signature ou un Status/Motto avec Delta Chat?</a></li>
|
||||
<li><a href="#que-signifient-épingler-sourdine-et-archiver-">Que signifient “épingler”, “sourdine” et “archiver” ?</a></li>
|
||||
<li><a href="#save">How do “Saved Messages” work?</a></li>
|
||||
<li><a href="#que-signifie-le-point-vert-">Que signifie le point vert ?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li>
|
||||
<li><a href="#importkey">Puis-je ré-utiliser ma clé privée existante ?</a></li>
|
||||
<li><a href="#je-narrive-pas-à-importer-ma-clé-pgp-existante-dans-delta-chat">Je n’arrive pas à importer ma clé PGP existante dans Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">Est-ce qu’un audit indépendant des failles de sécurité a été réalisé sur Delta Chat ?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#puis-je-utiliser-delta-chat-sur-plusieurs-appareils-en-même-temps">Puis-je utiliser Delta Chat sur plusieurs appareils en même temps?</a></li>
|
||||
<li><a href="#dépannage">Dépannage</a></li>
|
||||
<li><a href="#backup">Manual Transfer</a></li>
|
||||
<li><a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices?</a></li>
|
||||
<li><a href="#le-lancement-dun-client-web-delta-chat-est-il-prévu-">Le lancement d’un client Web Delta Chat est-il prévu ?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#quel-est-lintérêt-du-paramètre-menvoyer-une-copie">Quel est l’intérêt du paramètre “M’envoyer une copie”?</a></li>
|
||||
<li><a href="#pourquoi-puis-je-choisir-de-regarder-le-dossier-envoyés">Pourquoi puis-je choisir de regarder le dossier “Envoyés”?</a></li>
|
||||
<li><a href="#pourquoi-puis-je-choisir-de-ne-pas-regarder-le-dossier-delta-chat">Pourquoi puis-je choisir de ne pas regarder le dossier Delta Chat?</a></li>
|
||||
<li><a href="#delta-chat-est-il-compatible-avec-protonmail--tutanota--criptext-">Delta Chat est-il compatible avec Protonmail / Tutanota / Criptext ?</a></li>
|
||||
<li><a href="#delta-chat-est-il-compatible-avec-proton-mail--tutanota--criptext-">Delta Chat est-il compatible avec Proton Mail / Tutanota / Criptext ?</a></li>
|
||||
<li><a href="#remove-account">Comment supprimer mon compte ?</a></li>
|
||||
<li><a href="#les-détails-techniques-mintéressent-pouvez-vous-men-dire-plus-">Les détails techniques m’intéressent. Pouvez-vous m’en dire plus ?</a></li>
|
||||
<li><a href="#where-can-my-friends-find-delta-chat">Where can my friends find Delta Chat?</a></li>
|
||||
@@ -115,14 +117,14 @@
|
||||
|
||||
</h2>
|
||||
|
||||
<p>Delta Chat is a reliable, decentralized and secure messaging app,
|
||||
available for mobile and desktop platforms.</p>
|
||||
<p>Delta Chat est une application de messagerie fiable, décentralisée et sécurisée,
|
||||
Disponible pour les plateformes smartphone et ordinateurs de bureau.</p>
|
||||
|
||||
<p>Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app.
|
||||
You can signup anonymously to a variety of <a href="https://delta.chat/chatmail">interoperable chatmail servers</a>
|
||||
which are minimal e-mail servers optimized for fast and secure operations.
|
||||
Or you may use classic e-mail servers and an existing e-mail account
|
||||
in which case Delta Chat acts as an e-mail app.</p>
|
||||
<p>Delta Chat ressemble à Whatsapp ou Telegram mais vous pouvez aussi l’utiliser et la considérer comme une application e-mail.
|
||||
Vous pouvez vous inscrire anonymement à une variété <a href="https://delta.chat/chatmail">de serveurs chatmail interéopérables</a>
|
||||
Qui sont des serveurs e-mails minimalistes optimisés pour des opérations rapides et sécurisées.
|
||||
Ou vous pouvez utiliser des serveurs e-mail classiques et utiliser votre compte e-mail
|
||||
dans ce cas Delta Chat agit comme une application de courriel.</p>
|
||||
|
||||
<p><img style="float:right; width:50%; max-width:360%; margin:1em;" src="../delta-what-optim.png" /></p>
|
||||
|
||||
@@ -134,15 +136,15 @@ in which case Delta Chat acts as an e-mail app.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>To securely setup contact with others <a href="#howtoe2ee">scan an invite QR code
|
||||
or share an invite link</a>.
|
||||
This is required when using a (default) chatmail-based chat profile
|
||||
because chatmail servers reject un-encrypted outgoing messages.</p>
|
||||
<p>Pour établir un contact en toute sécurité avec d’autres personnes <a href="#howtoe2ee">scanner un code QR d’invitation
|
||||
ou partager un lien d’invitation</a>.
|
||||
Cette opération est nécessaire lors de l’utilisation d’un profil de discussion basé sur le chatmail (par défaut).
|
||||
car les serveurs de chatmail rejettent les messages sortants non chiffrés.</p>
|
||||
|
||||
<p>If you create a chat profile with a classic e-mail address
|
||||
you may manually create a contact if you know their e-mail address
|
||||
and then write a message to them
|
||||
even if the recipient is not using Delta Chat.</p>
|
||||
<p>Si vous créez un profil discussion avec une adresse courriel classique
|
||||
vous pouvez créer manuellement un contact si vous connaissez son adresse courriel
|
||||
et lui écrire un message
|
||||
même si le destinataire n’utilise pas Delta Chat.</p>
|
||||
|
||||
<h3 id="quels-sont-les-avantages-de-delta-chat-par-rapport-aux-autres-messageries-">
|
||||
|
||||
@@ -154,23 +156,23 @@ even if the recipient is not using Delta Chat.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Anonymous chat profiles with fast, secure and interoperable <a href="https://delta.chat/chatmail">chatmail servers</a>
|
||||
which offer instant Push Notifications for iOS and Android devices.</p>
|
||||
<p>Profils anonymes de discussion avec des <a href="https://delta.chat/chatmail">serveurs de chatmail</a> rapides, sécurisés et interopérables
|
||||
qui offrent des notifications push instantanées pour les appareils iOS et Android.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Pervasive <a href="#multiple-accounts">multi-profile</a> and multi-device support on all platforms.</p>
|
||||
<p>Fonctionnalités de <a href="#multiple-accounts">multi-profil</a> et de multi-appareil supportées sur toutes les plateformes.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Interactive <a href="https://webxdc.org/apps">web apps in chats</a> for gaming and collaboration</p>
|
||||
<p><a href="https://webxdc.org/apps">web apps dans les chats</a> interactifs pour le gaming et la collaboration</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="#security-audits">Audited end-to-end encryption</a>
|
||||
safe against network and server attacks.</p>
|
||||
<p><a href="#security-audits">Chiffrement de bout en bout audité</a>
|
||||
contre les attaques ciblées sur le réseau et les serveurs.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Free and Open Source software, both app and server side.
|
||||
Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/standards.md">E-mail and Web Internet Standards</a>,
|
||||
<a href="https://xkcd.com/927/">to avoid “yet another standard syndrome (xkcd 927)”</a></p>
|
||||
<p>Logiciel libre et open source, à la fois appli et côté serveur.
|
||||
Construit sur des <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/standards.md">Standards d’Internet et d’e-mail</a>,
|
||||
<a href="https://xkcd.com/927/">pour éviter le syndrome du “standard de plus” (xkcd 927)</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -182,15 +184,20 @@ Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Si vous recevez un message de la part d’un contact inconnu, vous recevez une <strong>invitation</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>Si vous recevez un message de la part d’un contact inconnu, vous recevez une <strong>invitation</strong> que vous
|
||||
devez d’abord accepter pour pouvoir répondre au message.</li>
|
||||
<li>Vous pouvez également choisir de “supprimer” l’invitation si vous ne souhaitez pas discuter avec cet inconnu maintenant. Cela
|
||||
ne supprime <em>pas</em> le message sur le serveur, seulement sur votre appareil. Vous pouvez donc
|
||||
toujours traiter le message depuis une application de courriel différente.</li>
|
||||
<li>Si vous supprimez une invitation, les futurs messages de ce contact apparaîtront
|
||||
<li>
|
||||
<p>Vous devez d’abord <strong>accepter</strong> pour pouvoir répondre au message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Vous pouvez également choisir de <strong>supprimer</strong> l’invitation si vous ne souhaitez pas discuter avec cet inconnu maintenant.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Si vous supprimez une invitation, les futurs messages de ce contact apparaîtront
|
||||
de nouveau comme des invitations, de sorte que vous pouvez changer d’avis par la suite. Si vous ne voulez vraiment pas
|
||||
recevoir de messages de cette personne, nous vous conseillons de la <em>bloquer</em>.</li>
|
||||
recevoir de messages de cette personne, nous vous conseillons de la <strong>bloquer</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="delta-chat-prend-il-en-charge-les-images-vidéos-et-autres-pièces-jointes-">
|
||||
@@ -256,16 +263,16 @@ that tend to cause unsolicited messages (“spam”) sooner or later.</p>
|
||||
<h3 id="signature">
|
||||
|
||||
|
||||
Can I set a Bio/Signature/Status/Motto with Delta Chat? <a href="#signature" class="anchor"></a>
|
||||
Puis-je afficher une Bio/Signature ou un Status/Motto avec Delta Chat? <a href="#signature" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes,
|
||||
you can do so under <strong>Settings → Profile → Bio</strong>.
|
||||
Your contacts who use Delta Chat will see it
|
||||
when they view your contact details.
|
||||
Moreover, it will appear as a classic e-mail signature.</p>
|
||||
<p>Oui,
|
||||
vous pouvez le faire sous <strong>Paramètres → Profil → Bio</strong>.
|
||||
Vos contacts qui utilisent Delta Chat le verront
|
||||
lorsqu’ils consulteront vos coordonnées.
|
||||
De plus, elle apparaîtra sous la forme d’une signature classique sur vos courriels.</p>
|
||||
|
||||
<h3 id="que-signifient-épingler-sourdine-et-archiver-">
|
||||
|
||||
@@ -297,6 +304,41 @@ Les discussions archivées restent accessibles au-dessus de la liste de discussi
|
||||
<p>Pour archiver ou épingler une discussion, faites un appui long sur la discussion concernée (Android), ouvrez le menu de la conversation (Android/application de bureau), ou balayez vers la gauche (iOS) ;
|
||||
pour mettre une discussion en sourdine, ouvrez le menu de la conversation (Android/application de bureau) ou le profil de la discussion (iOS).</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
How do “Saved Messages” work? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Saved Messages</strong> is a chat that you can use to easily remember and find messages.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In any chat, long tap or right click a message and select <strong>Save</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Saved messages are marked by the symbol
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
next to the timestamp</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Later, open the “Saved Messages” chat - and you will see the saved messages there.
|
||||
By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Messages stay saved even if they are edited or deleted -
|
||||
may it be by <a href="#edit">sender</a>, by <a href="#delold">device cleanup</a> or by <a href="#ephemeralmsgs">disappearing messages of other chats</a>.</p>
|
||||
|
||||
<h3 id="que-signifie-le-point-vert-">
|
||||
|
||||
|
||||
@@ -305,19 +347,46 @@ pour mettre une discussion en sourdine, ouvrez le menu de la conversation (Andro
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Vous voyez parfois un <strong>point vert</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" /> à côté de la photo de profil d’un contact. Cela signifie qu’il a été “vu récemment”.
|
||||
Plus précisément, cela signifie que Delta Chat a détecté l’activité de ce contact au cours des 10 dernières minutes :</p>
|
||||
|
||||
<ul>
|
||||
<li>Depuis la version 1.34 de Delta Chat, vous voyez parfois un “point vert” à côté de la photo de profil d’un contact. Cela signifie qu’il a été “vu récemment”.</li>
|
||||
<li>Plus précisément, cela signifie que Delta Chat a détecté l’activité de ce contact au cours des 10 dernières minutes :
|
||||
<ul>
|
||||
<li>soit parce qu’il vous a écrit personnellement ;</li>
|
||||
<li>soit parce qu’il a écrit dans un groupe dont vous êtres tous les deux membres ;</li>
|
||||
<li>soit parce qu’il a renvoyé l’accusé de lecture d’un message que vous lui avez écrit ;</li>
|
||||
<li>ou bien parce qu’il a envoyé des données à votre appli Delta Chat via une <a href="#webxdc">appli Webxdc</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Le “point vert” n’est donc pas un statut en temps réel. Aussi, si quelqu’un ne vous répond pas immédiatement alors qu’il semble être en ligne, ne vous inquiétez pas et donnez-lui du temps ;-)</li>
|
||||
<li>D’un autre côté, vos contacts ne vous voient pas forcément “en ligne”. Si vous avez désactivé les accusés de lecture, ils ne verront pas de point vert tant que vous ne leur écrivez pas directement ou n’écrivez pas dans un groupe dont ils font aussi partie.</li>
|
||||
<li>soit parce qu’il vous a écrit personnellement ;</li>
|
||||
<li>soit parce qu’il a écrit dans un groupe dont vous êtres tous les deux membres ;</li>
|
||||
<li>soit parce qu’il a renvoyé l’accusé de lecture d’un message que vous lui avez écrit ;</li>
|
||||
<li>ou bien parce qu’il a envoyé des données à votre appli Delta Chat via une <a href="#webxdc">appli</a>.</li>
|
||||
</ul>
|
||||
|
||||
<p>Le “point vert” n’est donc pas un statut en temps réel. Aussi, si quelqu’un ne vous répond pas immédiatement alors qu’il semble être en ligne, ne vous inquiétez pas et donnez-lui du temps :)</p>
|
||||
|
||||
<p>D’un autre côté, vos contacts ne vous voient pas forcément “en ligne”. Si vous avez désactivé les accusés de lecture, ils ne verront pas de point vert tant que vous ne leur écrivez pas directement ou n’écrivez pas dans un groupe dont ils font aussi partie.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Correct typos and delete messages after sending <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can edit the text of your messages after sending.
|
||||
For that, long tap or right click the message and select <strong>Edit</strong>
|
||||
or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have sent a message accidentally,
|
||||
from the same menu, select <strong>Delete</strong> and then <strong>Delete for Everyone</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>While edited messages will have the word “Edited” next to the timestamp,
|
||||
deleted messages will be removed without a marker in the chat.
|
||||
Notifications are not sent and there is no time limit.</p>
|
||||
|
||||
<p>Note, that the original message may still be received by chat members
|
||||
who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -578,16 +647,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -600,14 +669,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
@@ -622,7 +692,7 @@ would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
<p>Delta Chat is a free and open source decentralized messenger with free server choice,
|
||||
but we want users to reliably experience “instant delivery” of messages,
|
||||
like they experience from Whatsapp, Signal or Telegram apps,
|
||||
like they experience from WhatsApp, Signal or Telegram apps,
|
||||
without asking questions up-front that are more suited to expert users or developers.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
@@ -861,14 +931,14 @@ if the whole message is properly encrypted and signed.
|
||||
For example, “Detached signatures” are not treated as secure.</p>
|
||||
|
||||
<p>OpenPGP is not insecure by itself.
|
||||
Most publically discussed OpenPGP security problems
|
||||
Most publicly discussed OpenPGP security problems
|
||||
actually stem from bad usability or bad implementations of tools or apps (or both).
|
||||
It is particularly important to distinguish between OpenPGP, the IETF encryption standard,
|
||||
and GnuPG (GPG), a command line tool implementing OpenPGP.
|
||||
Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used.
|
||||
Delta Chat rather uses the OpenPGP Rust implementation <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
available as <a href="https://crates.io/crates/pgp">an independent “pgp” package</a>,
|
||||
and <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">security-audited in 2019</a>.</p>
|
||||
and <a href="#security-audits">security-audited in 2019 and 2024</a>.</p>
|
||||
|
||||
<p>We aim, along with other OpenPGP implementors,
|
||||
to further improve security characteristics by implementing the
|
||||
@@ -1117,7 +1187,7 @@ but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</
|
||||
that are safe against compromised servers or corrupted networks.
|
||||
Signal and most other PFS-supporting messengers do not provide
|
||||
a practical scheme for protecting chat groups from network attacks
|
||||
which are arguably more worrysome
|
||||
which are arguably more worrisome
|
||||
than a potential attacker who seizes your phone and private encryption setup
|
||||
but somehow not your messages, yet has a full record of all
|
||||
past encrypted messages.</p>
|
||||
@@ -1133,34 +1203,14 @@ which has been <a href="https://delta.chat/assets/blog/2019-first-security-revie
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Oui.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>No.</p>
|
||||
|
||||
<p>Alternatively, you can import the key manually in “Settings -> Advanced settings -> Import secret keys”.
|
||||
Caution: Make sure the key is not protected by a password, or remove the password beforehand.</p>
|
||||
<p>Delta Chat generates secure OpenPGP keys according to the Autocrypt specification 1.1.
|
||||
You can export your private key but you can not import additional private keys.</p>
|
||||
|
||||
<p>If you don’t have a key or don’t even know you would need one - don’t worry: Delta Chat generates keys as needed, you don’t have to hit a button for it.</p>
|
||||
|
||||
<h3 id="je-narrive-pas-à-importer-ma-clé-pgp-existante-dans-delta-chat">
|
||||
|
||||
|
||||
Je n’arrive pas à importer ma clé PGP existante dans Delta Chat. <a href="#je-narrive-pas-à-importer-ma-clé-pgp-existante-dans-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>L’origine la plus probable de ce problème est que votre clé est chiffrée ou requiert un mot de passe, ou les deux. Ce type de clés n’est pas géré par Delta Chat. Vous pouvez tenter de retirer le chiffrement et le mot de passe puis réessayer l’importation.</p>
|
||||
|
||||
<p>Another common error is having the wrong file ending.
|
||||
Use the ASCII armored format and an <code class="language-plaintext highlighter-rouge">.asc</code> file ending.</p>
|
||||
|
||||
<p>Delta Chat gère les formats de clé privée OpenPGP les plus communs, néanmoins il
|
||||
est peu probable que les clés privées générées par toutes les sources soient prises en charge. Mais l’objectif principal de Delta Chat n’est pas là. En pratique, la majorité des nouveaux utilisateurs ne possèdent pas de clés de chiffrement avant d’utiliser Delta Chat.
|
||||
Néanmoins, nous essayons de gérer les clés privées d’autant de sources que possible.</p>
|
||||
|
||||
<p>La méthode pour retirer le mot de passe de la clé privée dépend du logiciel que vous utilisez pour gérer vos clés GPG. Avec Enigmail, vous pouvez définir votre mot de passe en laissant le champ vide dans la fenêtre de Gestion des Clés. Avec GnuPG, vous pouvez le définir <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">avec la ligne de commande</a>.
|
||||
Pour les autres programmes, vous devriez pouvoir trouver la solution en ligne.</p>
|
||||
<p>In general, we do not recommend or offer users to perform manual key management.
|
||||
We want to ensure that security audits can focus on a few proven cryptographic algorithms
|
||||
instead of the full breadth of possible algorithms allowed with OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1170,10 +1220,25 @@ Pour les autres programmes, vous devriez pouvoir trouver la solution en ligne.</
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The Delta Chat project underwent four independent security audits and one
|
||||
independent security analysis, from most recent to older:</p>
|
||||
<p>Yes, multiple times.
|
||||
The Delta Chat project continuously undergoes independent security audits and analysis,
|
||||
from most recent to older:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
|
||||
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
|
||||
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
|
||||
Two advisories were released related to the findings of this audit:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panics on Malformed Untrusted Input”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potential Resource Exhaustion when handling Untrusted Messages”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>The issues outlined in these advisories have been fixed and are part of Delta Chat
|
||||
releases on all appstores since December 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2024 March, we received a deep security analysis from the Applied Cryptography
|
||||
research group at ETH Zuerich and addressed all raised issues.
|
||||
@@ -1222,7 +1287,7 @@ Le rapport complet <a href="https://delta.chat/assets/blog/2019-first-security-r
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Oui. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Oui. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1277,6 +1342,10 @@ source bien connue de dysfonctionnements (en particulier sur Windows).
|
||||
<li>
|
||||
<p><strong>Guest Networks</strong> may not allow devices to communicate with each other.
|
||||
If possible, use a non-guest network.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you still have troubles using the same network,
|
||||
try to open <strong>Mobile Hotspot</strong> on one device and join that Wi-Fi from the other one</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Assurez-vous de disposer d’un <strong>espace de stockage suffisant</strong> sur l’appareil de destination.</p>
|
||||
@@ -1323,6 +1392,23 @@ help you.</li>
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">
|
||||
|
||||
|
||||
Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices? <a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Oui.</p>
|
||||
|
||||
<p>If you e.g. delete a chat or a message from your phone,
|
||||
it will be deleted on your desktop as soon as it comes online again.</p>
|
||||
|
||||
<p>Notable exceptions are <a href="#delold">Delete old messages from Device</a>,
|
||||
as different devices may have different storage capacities,
|
||||
and system specific settings as notification sounds.</p>
|
||||
|
||||
<h3 id="le-lancement-dun-client-web-delta-chat-est-il-prévu-">
|
||||
|
||||
|
||||
@@ -1430,18 +1516,11 @@ another rather stable experiment we run on the side (sic!).</p>
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>To turn on audio/video calls, go to the “experimental features” section in
|
||||
the advanced settings and choose a “Video Chat Instance”.</li>
|
||||
<li>When you invite others to a video chat, it is opened in your browser/app at
|
||||
once. The others receive an e-mail with a link to the video chat.
|
||||
This way, it is also compatible if your chat partners don’t use Delta Chat.</li>
|
||||
<li>Note that there is no ring tone on the other side, and your chat partners
|
||||
will not get interrupted by a video chat invite.</li>
|
||||
<li>You can use any video chat service which allows joining by link. Just add the
|
||||
link in the settings.</li>
|
||||
<li>For example, to use the flagship Jitsi Meet instance, you could enter
|
||||
<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$ROOM</code>. The <code class="language-plaintext highlighter-rouge">$ROOM</code> variable will be a random value;
|
||||
this way, you will have a new random jitsi room every time you call someone.</li>
|
||||
<li>Pour activer les appels audio/vidéo, accédez à la section “Fonctionnalités expérimentales” des paramètres avancés et choisissez une “instance de discussion vidéo”.</li>
|
||||
<li>Quand vous invitez d’autres personnes dans une discussion vidéo, elle s’ouvre automatiquement dans votre application/navigateur et les destinataires reçoivent un courriel contenant un lien vers votre salon Jitsi/BBB. De cette manière, même les personnes n’utilisant pas Delta Chat peuvent participer.</li>
|
||||
<li>Veuillez noter qu’il n’y a pas de sonnerie pour les destinataires, qui ne sont donc pas dérangé⋅e⋅s par votre invitation à une discussion vidéo.</li>
|
||||
<li>Vous pouvez utiliser n’importe quel service de discussion vidéo permettant de rejoindre un salon par un lien. Il vous suffit de renseigner le lien dans vos paramètres.</li>
|
||||
<li>Par exemple, pour utiliser l’instance Jitsi Meet principale, vous pouvez insérer :<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$ROOM</code>. La variable<code class="language-plaintext highlighter-rouge">$ROOM</code>est une valeur aléatoire qui vous permet de rejoindre un nouveau salon Jitsi choisi au hasard à chaque nouvel appel.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="que-sont-les-listes-de-diffusion-et-comment-les-utiliser-">
|
||||
@@ -1731,25 +1810,19 @@ if you set a <a href="#signature">signature text</a>.</p>
|
||||
<p>Certaines personnes utilisent Delta Chat comme un client de messagerie normal, et veulent utiliser la Boîte de réception pour leurs mails au lieu d’utiliser le dossier DeltaChat. Si vous désactivez “Surveiller le dossier DeltaChat”, vous devriez aussi désactiver “déplacer les messages de discussions dans DeltaChat”.
|
||||
Sinon, la suppression de messages dans une configuration multi-appareils pourrait ne pas marcher correctement.</p>
|
||||
|
||||
<h3 id="delta-chat-est-il-compatible-avec-protonmail--tutanota--criptext-">
|
||||
<h3 id="delta-chat-est-il-compatible-avec-proton-mail--tutanota--criptext-">
|
||||
|
||||
|
||||
Delta Chat est-il compatible avec Protonmail / Tutanota / Criptext ? <a href="#delta-chat-est-il-compatible-avec-protonmail--tutanota--criptext-" class="anchor"></a>
|
||||
Delta Chat est-il compatible avec Proton Mail / Tutanota / Criptext ? <a href="#delta-chat-est-il-compatible-avec-proton-mail--tutanota--criptext-" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Yes and No.</li>
|
||||
<li>No, you can not use your Protonmail, Tutanota, or Criptext account with Delta
|
||||
Chat; they do not offer receiving mails via IMAP.</li>
|
||||
<li>In any case you can use Delta Chat to send Messages to people who use
|
||||
Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end
|
||||
encrypted, though. The end-to-end encryption those providers offer is not
|
||||
compatible with <a href="https://autocrypt.org/">Autocrypt</a>, the standard Delta Chat
|
||||
uses.</li>
|
||||
<li>Delta Chat can end-to-end-encrypt through any e-mail provider with any
|
||||
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
|
||||
<li>Oui et non.</li>
|
||||
<li>Non, vous ne pouvez pas utiliser votre compte Proton Mail, Tutanota ou Cryptext avec Delta Chat, car ils ne permettent pas de recevoir les courriels en IMAP.</li>
|
||||
<li>Vous pouvez toujours utiliser Delta Chat pour envoyer des messages à des personnes utilisant Protonmail, Tutanota, or Criptext. Toutefois, ces messages ne seront pas chiffrés de bout en bout, car le chiffrement offert par ces fournisseurs n’est pas compatible avec <a href="https://autocrypt.org/">Autocrypt</a>, le protocole utilisé par Delta Chat.</li>
|
||||
<li>Delta Chat peut chiffrer des courriels de bout en bout avec un fournisseur de courriel utilisant <a href="https://autocrypt.org/dev-status.html">toute application de courriel compatible avec Autocrypt</a>.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 300 B |
Binary file not shown.
|
After Width: | Height: | Size: 324 B |
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="id"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#apa-itu-delta-chat">Apa itu Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#bagaimana-saya-bisa-menemukan-orang-untuk-diajak-ngobrol">Bagaimana Saya bisa menemukan orang untuk diajak ngobrol?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#siapa-yang-dapat-melihat-foto-profil-saya">Siapa yang dapat melihat Foto Profil saya?</a></li>
|
||||
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li>
|
||||
<li><a href="#what-do-pinning-muting-and-archiving-mean">What do Pinning, Muting and Archiving mean?</a></li>
|
||||
<li><a href="#save">How do “Saved Messages” work?</a></li>
|
||||
<li><a href="#what-does-the-green-dot-mean">What does the green dot mean?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li>
|
||||
<li><a href="#importkey">Can I reuse my existing private key?</a></li>
|
||||
<li><a href="#i-cant-import-my-existing-pgp-key-into-delta-chat">I can’t import my existing PGP key into Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#can-i-use-delta-chat-on-multiple-devices-at-the-same-time">Can I use Delta Chat on multiple devices at the same time?</a></li>
|
||||
<li><a href="#troubleshooting">Troubleshooting</a></li>
|
||||
<li><a href="#backup">Manual Transfer</a></li>
|
||||
<li><a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices?</a></li>
|
||||
<li><a href="#are-there-any-plans-for-introducing-a-delta-chat-web-client">Are there any plans for introducing a Delta Chat Web Client?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#what-is-the-send-copy-to-self-setting-good-for">What is the “Send Copy to Self” setting good for?</a></li>
|
||||
<li><a href="#why-can-i-choose-to-watch-the-sent-folder">Why can I choose to watch the “Sent” folder?</a></li>
|
||||
<li><a href="#why-can-i-choose-not-to-watch-the-deltachat-folder">Why can I choose not to watch the DeltaChat folder?</a></li>
|
||||
<li><a href="#is-delta-chat-compatible-with-protonmail--tutanota--criptext">Is Delta Chat compatible with Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#is-delta-chat-compatible-with-proton-mail--tutanota--criptext">Is Delta Chat compatible with Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">How can I delete my account?</a></li>
|
||||
<li><a href="#im-interested-in-the-technical-details-can-you-tell-me-more">I’m interested in the technical details. Can you tell me more?</a></li>
|
||||
<li><a href="#where-can-my-friends-find-delta-chat">Where can my friends find Delta Chat?</a></li>
|
||||
@@ -182,15 +184,20 @@ Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If a message comes from an unknown contact, it appears as a <strong>request</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>If a message comes from an unknown contact, it appears as a <strong>request</strong>. You
|
||||
need to accept the request before you can reply.</li>
|
||||
<li>You can also “delete” it if you don’t want to chat with them for now. This
|
||||
does <em>not</em> delete the message on the server, only on your device. So you can
|
||||
still deal with the message in a different mail app.</li>
|
||||
<li>If you delete a request, future messages from that contact will still appear
|
||||
<li>
|
||||
<p>You need to <strong>accept</strong> the request before you can reply.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>You can also <strong>delete</strong> it if you don’t want to chat with them for now.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you delete a request, future messages from that contact will still appear
|
||||
as message request, so you can change your mind. If you really don’t want to
|
||||
receive messages from this person, consider <em>blocking</em> them.</li>
|
||||
receive messages from this person, consider <strong>blocking</strong> them.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="apakah-delta-chat-mendukung-gambar-vidio-dan-lampiran-lainnya">
|
||||
@@ -304,6 +311,41 @@ Archived chats remain accessible above the chat list or via search.</p>
|
||||
|
||||
<p>To use the functions, long tap or right click a chat in the chat list.</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
How do “Saved Messages” work? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Saved Messages</strong> is a chat that you can use to easily remember and find messages.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In any chat, long tap or right click a message and select <strong>Save</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Saved messages are marked by the symbol
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
next to the timestamp</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Later, open the “Saved Messages” chat - and you will see the saved messages there.
|
||||
By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Messages stay saved even if they are edited or deleted -
|
||||
may it be by <a href="#edit">sender</a>, by <a href="#delold">device cleanup</a> or by <a href="#ephemeralmsgs">disappearing messages of other chats</a>.</p>
|
||||
|
||||
<h3 id="what-does-the-green-dot-mean">
|
||||
|
||||
|
||||
@@ -312,25 +354,53 @@ Archived chats remain accessible above the chat list or via search.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>You can sometimes see a <strong>green dot</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" />
|
||||
next to the avatar of a contact.
|
||||
It means they were <strong>recently seen</strong> in the last 10 minutes:</p>
|
||||
|
||||
<ul>
|
||||
<li>Since Delta Chat 1.34 you can sometimes see a “green dot” next to the avatar
|
||||
of a contact. It means they were “recently seen”.</li>
|
||||
<li>In detail: it means, that in the last 10 minutes, Delta Chat has seen them:
|
||||
<ul>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>or because they sent data to your Delta Chat app by using a
|
||||
<a href="#webxdc">webxdc app</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>So this is not a real time online status - and if someone doesn’t answer
|
||||
right away even though they seem to be online, don’t worry and give them some
|
||||
space ;-)</li>
|
||||
<li>On the other hand, others will not always “see that you are online”. If you
|
||||
have turned off read receipts, they will not see the green dot until you
|
||||
message them or write to a group they’re in as well.</li>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>because they edit or delete a message in a chat shared with you,</li>
|
||||
<li>or because they use an <a href="#webxdc">app</a> in a chat shared with you.</li>
|
||||
</ul>
|
||||
|
||||
<p>So this is not a real time online status -
|
||||
and if someone doesn’t answer right away even though they seem to be online,
|
||||
don’t worry and give them some space :)</p>
|
||||
|
||||
<p>On the other hand, others will not always “see that you are online”.
|
||||
If you have turned off read receipts,
|
||||
they will not see the green dot
|
||||
until one of the above conditions are met.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Correct typos and delete messages after sending <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can edit the text of your messages after sending.
|
||||
For that, long tap or right click the message and select <strong>Edit</strong>
|
||||
or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have sent a message accidentally,
|
||||
from the same menu, select <strong>Delete</strong> and then <strong>Delete for Everyone</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>While edited messages will have the word “Edited” next to the timestamp,
|
||||
deleted messages will be removed without a marker in the chat.
|
||||
Notifications are not sent and there is no time limit.</p>
|
||||
|
||||
<p>Note, that the original message may still be received by chat members
|
||||
who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -603,16 +673,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -625,14 +695,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
@@ -647,7 +718,7 @@ would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
<p>Delta Chat is a free and open source decentralized messenger with free server choice,
|
||||
but we want users to reliably experience “instant delivery” of messages,
|
||||
like they experience from Whatsapp, Signal or Telegram apps,
|
||||
like they experience from WhatsApp, Signal or Telegram apps,
|
||||
without asking questions up-front that are more suited to expert users or developers.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
@@ -886,14 +957,14 @@ if the whole message is properly encrypted and signed.
|
||||
For example, “Detached signatures” are not treated as secure.</p>
|
||||
|
||||
<p>OpenPGP is not insecure by itself.
|
||||
Most publically discussed OpenPGP security problems
|
||||
Most publicly discussed OpenPGP security problems
|
||||
actually stem from bad usability or bad implementations of tools or apps (or both).
|
||||
It is particularly important to distinguish between OpenPGP, the IETF encryption standard,
|
||||
and GnuPG (GPG), a command line tool implementing OpenPGP.
|
||||
Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used.
|
||||
Delta Chat rather uses the OpenPGP Rust implementation <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
available as <a href="https://crates.io/crates/pgp">an independent “pgp” package</a>,
|
||||
and <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">security-audited in 2019</a>.</p>
|
||||
and <a href="#security-audits">security-audited in 2019 and 2024</a>.</p>
|
||||
|
||||
<p>We aim, along with other OpenPGP implementors,
|
||||
to further improve security characteristics by implementing the
|
||||
@@ -1142,7 +1213,7 @@ but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</
|
||||
that are safe against compromised servers or corrupted networks.
|
||||
Signal and most other PFS-supporting messengers do not provide
|
||||
a practical scheme for protecting chat groups from network attacks
|
||||
which are arguably more worrysome
|
||||
which are arguably more worrisome
|
||||
than a potential attacker who seizes your phone and private encryption setup
|
||||
but somehow not your messages, yet has a full record of all
|
||||
past encrypted messages.</p>
|
||||
@@ -1158,42 +1229,14 @@ which has been <a href="https://delta.chat/assets/blog/2019-first-security-revie
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>No.</p>
|
||||
|
||||
<p>Alternatively, you can import the key manually in “Settings -> Advanced settings -> Import secret keys”.
|
||||
Caution: Make sure the key is not protected by a password, or remove the password beforehand.</p>
|
||||
<p>Delta Chat generates secure OpenPGP keys according to the Autocrypt specification 1.1.
|
||||
You can export your private key but you can not import additional private keys.</p>
|
||||
|
||||
<p>If you don’t have a key or don’t even know you would need one - don’t worry: Delta Chat generates keys as needed, you don’t have to hit a button for it.</p>
|
||||
|
||||
<h3 id="i-cant-import-my-existing-pgp-key-into-delta-chat">
|
||||
|
||||
|
||||
I can’t import my existing PGP key into Delta Chat. <a href="#i-cant-import-my-existing-pgp-key-into-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The most likely cause is that your key is encrypted and/or uses a password.
|
||||
Such keys are not supported by Delta Chat.
|
||||
You could remove the passphrase encryption and the password and try the import again.</p>
|
||||
|
||||
<p>Another common error is having the wrong file ending.
|
||||
Use the ASCII armored format and an <code class="language-plaintext highlighter-rouge">.asc</code> file ending.</p>
|
||||
|
||||
<p>Delta Chat supports common OpenPGP private key formats, however, it
|
||||
is unlikely that private keys from all sources will be fully supported. This
|
||||
is not the main goal of Delta Chat. In fact, the majority of new users
|
||||
will not have any key prior to using Delta Chat.
|
||||
We do, however, try to support private keys from as many sources as possible.</p>
|
||||
|
||||
<p>Removing the password from the private key will depend on the
|
||||
software you use to manage your PGP keys. With Enigmail, you can set your
|
||||
password to an empty value in the Key Management window. With GnuPG you can set
|
||||
it <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">via the command
|
||||
line</a>.
|
||||
For other programs, you should be able to find a solution online.</p>
|
||||
<p>In general, we do not recommend or offer users to perform manual key management.
|
||||
We want to ensure that security audits can focus on a few proven cryptographic algorithms
|
||||
instead of the full breadth of possible algorithms allowed with OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1203,10 +1246,25 @@ For other programs, you should be able to find a solution online.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The Delta Chat project underwent four independent security audits and one
|
||||
independent security analysis, from most recent to older:</p>
|
||||
<p>Yes, multiple times.
|
||||
The Delta Chat project continuously undergoes independent security audits and analysis,
|
||||
from most recent to older:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
|
||||
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
|
||||
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
|
||||
Two advisories were released related to the findings of this audit:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panics on Malformed Untrusted Input”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potential Resource Exhaustion when handling Untrusted Messages”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>The issues outlined in these advisories have been fixed and are part of Delta Chat
|
||||
releases on all appstores since December 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2024 March, we received a deep security analysis from the Applied Cryptography
|
||||
research group at ETH Zuerich and addressed all raised issues.
|
||||
@@ -1272,7 +1330,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Yes. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1329,6 +1387,10 @@ which is known to cause problems (especially on Windows).
|
||||
<li>
|
||||
<p><strong>Guest Networks</strong> may not allow devices to communicate with each other.
|
||||
If possible, use a non-guest network.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you still have troubles using the same network,
|
||||
try to open <strong>Mobile Hotspot</strong> on one device and join that Wi-Fi from the other one</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ensure there is <strong>enough storage</strong> on the destination device</p>
|
||||
@@ -1376,6 +1438,23 @@ help you.</li>
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">
|
||||
|
||||
|
||||
Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices? <a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.</p>
|
||||
|
||||
<p>If you e.g. delete a chat or a message from your phone,
|
||||
it will be deleted on your desktop as soon as it comes online again.</p>
|
||||
|
||||
<p>Notable exceptions are <a href="#delold">Delete old messages from Device</a>,
|
||||
as different devices may have different storage capacities,
|
||||
and system specific settings as notification sounds.</p>
|
||||
|
||||
<h3 id="are-there-any-plans-for-introducing-a-delta-chat-web-client">
|
||||
|
||||
|
||||
@@ -1497,7 +1576,7 @@ will not get interrupted by a video chat invite.</li>
|
||||
link in the settings.</li>
|
||||
<li>For example, to use the flagship Jitsi Meet instance, you could enter
|
||||
<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$ROOM</code>. The <code class="language-plaintext highlighter-rouge">$ROOM</code> variable will be a random value;
|
||||
this way, you will have a new random jitsi room every time you call someone.</li>
|
||||
this way, you will have a new random Jitsi room every time you call someone.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="what-are-broadcast-lists-and-how-can-i-use-them">
|
||||
@@ -1509,7 +1588,7 @@ this way, you will have a new random jitsi room every time you call someone.</li
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>With a Broadcast List you can send a message to many recipents at once; when
|
||||
<li>With a Broadcast List you can send a message to many recipients at once; when
|
||||
they reply to you, you get the reply in your direct 1:1 chat with them. The
|
||||
recipients can’t see each other.</li>
|
||||
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
|
||||
@@ -1824,17 +1903,17 @@ folder for their mail, instead of the DeltaChat folder. If you disable “Watch
|
||||
DeltaChat folder”, you should also disable “move chat messages to DeltaChat”.
|
||||
Otherwise, deleting messages or multi-device setups might not work properly.</p>
|
||||
|
||||
<h3 id="is-delta-chat-compatible-with-protonmail--tutanota--criptext">
|
||||
<h3 id="is-delta-chat-compatible-with-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
Is Delta Chat compatible with Protonmail / Tutanota / Criptext? <a href="#is-delta-chat-compatible-with-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
Is Delta Chat compatible with Proton Mail / Tutanota / Criptext? <a href="#is-delta-chat-compatible-with-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Yes and No.</li>
|
||||
<li>No, you can not use your Protonmail, Tutanota, or Criptext account with Delta
|
||||
<li>No, you can not use your Proton Mail, Tutanota, or Criptext account with Delta
|
||||
Chat; they do not offer receiving mails via IMAP.</li>
|
||||
<li>In any case you can use Delta Chat to send Messages to people who use
|
||||
Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="it"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#cosè-delta-chat">Cos’è Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#come-posso-trovare-persone-con-cui-messaggiare">Come posso trovare persone con cui messaggiare?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#chi-vede-la-mia-immagine-del-profilo">Chi vede la mia immagine del profilo?</a></li>
|
||||
<li><a href="#signature">Posso impostare una Bio/Firma/Stato/Motto con Delta Chat?</a></li>
|
||||
<li><a href="#cosa-significa-fissare-silenziare-archiviare">Cosa significa Fissare, Silenziare, Archiviare?</a></li>
|
||||
<li><a href="#save">Come funziona “Messaggi Salvati”?</a></li>
|
||||
<li><a href="#cosa-significa-il-punto-verde">Cosa significa il punto verde?</a></li>
|
||||
<li><a href="#edit">Correggi gli errori e cancella i messaggi dopo averli inviati</a></li>
|
||||
<li><a href="#ephemeralmsgs">Come funzionano i messaggi a scomparsa?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Delta Chat supporta Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#la-crittografia-end-to-end-di-delta-chat-è-sicura-quanto-quella-di-signal">La crittografia end-to-end di Delta Chat è sicura quanto quella di Signal?</a></li>
|
||||
<li><a href="#importkey">Posso riutilizzare la mia chiave privata esistente?</a></li>
|
||||
<li><a href="#non-riesco-a-importare-la-mia-chiave-pgp-esistente-in-delta-chat">Non riesco a importare la mia chiave PGP esistente in Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">Delta Chat è stata verificata in modo indipendente per le vulnerabilità di sicurezza?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#posso-utilizzare-delta-chat-su-più-dispositivi-contemporaneamente">Posso utilizzare Delta Chat su più dispositivi contemporaneamente?</a></li>
|
||||
<li><a href="#risoluzione-dei-problemi">Risoluzione dei problemi</a></li>
|
||||
<li><a href="#backup">Trasferimento manuale</a></li>
|
||||
<li><a href="#cancella-fissa-archivia-salva-silenzia-ecc-sono-sincronizzate-su-tutti-i-dispositivi">Cancella, Fissa, Archivia, Salva, Silenzia ecc. sono sincronizzate su tutti i dispositivi?</a></li>
|
||||
<li><a href="#sono-previsti-piani-per-lintroduzione-di-un-client-web-delta-chat">Sono previsti piani per l’introduzione di un client Web Delta Chat?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#a-cosa-serve-limpostazione-invia-copia-a-se-stessi">A cosa serve l’impostazione “Invia copia a se stessi”?</a></li>
|
||||
<li><a href="#perché-posso-scegliere-di-guardare-la-cartella-inviata">Perché posso scegliere di guardare la cartella “Inviata”?</a></li>
|
||||
<li><a href="#perché-posso-scegliere-di-non-guardare-la-cartella-deltachat">Perché posso scegliere di non guardare la cartella DeltaChat?</a></li>
|
||||
<li><a href="#delta-chat-è-compatibile-con-protonmail--tutanota--criptext">Delta Chat è compatibile con Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#delta-chat-è-compatibile-con-proton-mail--tutanota--criptext">Delta Chat è compatibile con Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">Come posso eliminare il mio profilo?</a></li>
|
||||
<li><a href="#sono-interessato-ai-dettagli-tecnici-mi-puoi-dire-di-più">Sono interessato ai dettagli tecnici. Mi puoi dire di più?</a></li>
|
||||
<li><a href="#dove-possono-trovare-delta-chat-i-miei-amici">Dove possono trovare Delta Chat i miei amici?</a></li>
|
||||
@@ -182,15 +184,20 @@ Basato su <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Se un messaggio proviene da un contatto sconosciuto, appare come una <strong>richiesta</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>Se un messaggio proviene da un contatto sconosciuto, appare come una <strong>richiesta</strong>. È necessario
|
||||
accettare la richiesta prima di poter rispondere.</li>
|
||||
<li>Si può anche “cancellare” il messaggio se non si vuole più chattare con esso. Questo
|
||||
non cancella il messaggio sul server, ma solo sul dispositivo. Quindi è possibile
|
||||
continuare a gestire il messaggio in un’altra applicazione di posta.</li>
|
||||
<li>Se si elimina una richiesta, i futuri messaggi di quel contatto continueranno a essere visualizzati come richieste di contatto
|
||||
<li>
|
||||
<p>È necessario <strong>accettare</strong> la richiesta prima di poter rispondere.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Si può anche <strong>cancellare</strong> il messaggio se non si vuole più chattare con esso.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Se si elimina una richiesta, i futuri messaggi di quel contatto continueranno a essere visualizzati come richieste di contatto
|
||||
in modo da poter cambiare idea. Se non si vuole davvero ricevere
|
||||
messaggi da questa persona, prendete in considerazione la possibilità di <em>bloccarla</em>.</li>
|
||||
messaggi da questa persona, prendete in considerazione la possibilità di <strong>bloccarla</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="delta-chat-supporta-immagini-video-e-altri-allegati">
|
||||
@@ -304,6 +311,41 @@ Le chat archiviate rimangono accessibili sopra l’elenco delle chat o tramite l
|
||||
<p>Per archiviare o fissare una chat, premi a lungo (Android), usa il menu della chat (Android/Desktop) o striscia verso sinistra (iOS);
|
||||
per silenziare una chat, usa il menu della chat (Android/Desktop) o il profilo della chat (iOS).</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
Come funziona “Messaggi Salvati”? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Messaggi Salvati</strong> è una chat che puoi usare per ricordare e trovare facilmente i messaggi.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>in qualunque chat, premi a lungo o click destro sul messaggio e seleziona <strong>Salva</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>I messaggi salvati sono marcati col simbolo
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
accanto all’ora d’invio</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Successivamente, apri la chat “Messaggi Salvati” - e vedrai là i messaggi che hai salvato.
|
||||
Toccando<img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
puoi tornare al messaggio originale nella chat di provenienza.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Infine, puoi anche usare “Messaggi Salvati” per prendere <strong>appunti</strong> - apri la chat, digita qualcosa, aggiungi una foto o un messaggio vocale, ecc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Dato che i “Messaggi Salvati” sono sincronizzati, possono essere molto comodi per trasferire dati tra i dispositivi</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>I messaggi restano salvati anche se vengono modificati o eliminati -
|
||||
che sia dal <a href="#edit">mittente</a>, <a href="#delold">ripulendo il dispositivo</a> o per i <a href="#ephemeralmsgs">messaggi a scomparsa di altre chat</a>.</p>
|
||||
|
||||
<h3 id="cosa-significa-il-punto-verde">
|
||||
|
||||
|
||||
@@ -312,23 +354,52 @@ per silenziare una chat, usa il menu della chat (Android/Desktop) o il profilo d
|
||||
|
||||
</h3>
|
||||
|
||||
<p>A volte puoi vedere un <strong>punto verde</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" /> accanto all’avatar</p>
|
||||
<ul>
|
||||
<li>A partire da Delta Chat 1.34 a volte puoi vedere un “punto verde” accanto all’avatar
|
||||
di un contatto. Significa che è stato “visto di recente”.</li>
|
||||
<li>Nel dettaglio: significa che negli ultimi 10 minuti Delta Chat lo ha visto:</li>
|
||||
<li>
|
||||
<p>di un contatto. Significa che è stato “visto di recente”. Nel dettaglio: significa che negli ultimi 10 minuti Delta Chat lo ha visto:</p>
|
||||
</li>
|
||||
<li>o perché ti ha inviato un messaggio direttamente,</li>
|
||||
<li>perché ha scritto qualcosa a un gruppo di cui siete entrambi membri,</li>
|
||||
<li>perché ti ha inviato una conferma di lettura per un messaggio che hai scritto,</li>
|
||||
<li>o perché ha inviato dati alla tua app Delta Chat utilizzando l’
|
||||
<a href="#webxdc">applicazione webxdc</a>.</li>
|
||||
<li>Quindi questo non è uno stato online in tempo reale - e se qualcuno non risponde
|
||||
subito anche se sembra online, non preoccuparti e dagli un po’
|
||||
di spazio ;-)</li>
|
||||
<li>
|
||||
<p>o perché ha inviato dati alla tua app Delta Chat utilizzando l’<a href="#webxdc">applicazione webxdc</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Quindi questo non è uno stato online in tempo reale - e se qualcuno non risponde subito anche se sembra online, non preoccuparti e dagli un po’ di spazio :)</p>
|
||||
</li>
|
||||
<li>D’altra parte, non sempre gli altri “vedranno che sei online”. Se tu
|
||||
hai disattivato le conferme di lettura, non vedranno il punto verde finché non lo farai tu
|
||||
invia loro un messaggio o scrivi anche a un gruppo a cui appartengono.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Correggi gli errori e cancella i messaggi dopo averli inviati <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Puoi modificare il testo dei tuoi messaggi già inviati.
|
||||
Per farlo, premi a lungo o click destro sul messaggio e seleziona <strong>Edit</strong>
|
||||
o <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Se hai inviato un messaggio accidentalmente,
|
||||
dallo stesso menu, seleziona <strong>Elimina</strong> e quindi <strong>Cancella per Tutti</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Una volta modificati i messaggi avranno scritto “Modificato” accanto all’orario d’invio,
|
||||
i messaggi eliminati saranno rimossi senza alcun avviso in chat.
|
||||
Non vengono inviate notifiche e non c’è limite di tempo.</p>
|
||||
|
||||
<p>Nota che il messaggio originale potrebbe essere ancora sui dispositivi dei membri della chat
|
||||
che avrebbero già potuto rispondere, inoltrare, salvare, scattare una schermata o copiare il messaggio in altri modi.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
|
||||
@@ -597,17 +668,15 @@ a qualsiasi sistema coinvolto nella consegna di Notifiche Push.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Un’app Delta Chat ottiene un “gettone del dispositivo” localmente e lo memorizza
|
||||
sul server <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
<p>Un’app Delta Chat ottiene un “token del dispositivo” localmente, lo crittografa e lo memorizza sul server <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Quando un server <a href="https://delta.chat/chatmail">chatmail</a> riceve un’e-mail per un utente Delta Chat
|
||||
inoltra il “gettone del dispositivo” al proxy di notifica centrale di Delta Chat.</p>
|
||||
<p>Quando un server <a href="https://delta.chat/chatmail">chatmail</a> riceve un’e-mail per un utente Delta Chat, inoltra il token del dispositivo crittografato al proxy di notifica centrale Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Il proxy di notifica centrale di Delta Chat inoltra
|
||||
il “gettone del dispositivo” al rispettivo servizio Push (Apple, Google, ecc.),
|
||||
senza mai conoscere l’IP o l’indirizzo e-mail degli utenti Delta Chat.</p>
|
||||
<p>Il proxy di notifica centrale di Delta Chat decifra il token del dispositivo
|
||||
e lo inoltra al rispettivo servizio Push (Apple, Google, ecc.),
|
||||
senza mai conoscere l’IP o l’indirizzo e-mail degli utenti di Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Il Servizio Push centrale (Apple, Google, ecc.)
|
||||
@@ -619,14 +688,15 @@ e inoltre non vedono mai il contenuto del messaggio (anche non in forma crittogr
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>A partire da Maggio 2024, i server chatmail conoscono i “gettoni del dispositivo”
|
||||
ma prevediamo di crittografare queste informazioni nel proxy di notifica
|
||||
in modo tale che il server chatmail non apprenda mai il gettone del dispositivo.</p>
|
||||
|
||||
<p>Il proxy di notifica centrale di Delta Chat <a href="https://github.com/deltachat/notifiers">è piccolo e completamente implementato in Rust</a>
|
||||
e si dimentica dei gettoni del dispositivo non appena Apple/Google/ecc li elabora,
|
||||
di solito nel giro di pochi millisecondi.</p>
|
||||
|
||||
<p>Si noti che il token del dispositivo è crittografato tra le app e il proxy di notifica
|
||||
ma non è firmato.
|
||||
Il proxy di notifica quindi non vede mai indirizzi e-mail, indirizzi IP o
|
||||
alcune informazioni di identità crittografica associate al dispositivo di un utente (token).</p>
|
||||
|
||||
<p>Come risultato di questo disegno complessivo sulla riservatezza, anche il sequestro di un server chatmail,
|
||||
o il sequestro totale del proxy di notifica centrale di Delta Chat
|
||||
non rivelerebbe informazioni private che i servizi Push non abbiano già.</p>
|
||||
@@ -875,14 +945,13 @@ se l’intero messaggio è crittografato e firmato correttamente.
|
||||
Ad esempio, le “Firme distaccate” non sono considerate sicure.</p>
|
||||
|
||||
<p>OpenPGP non è insicuro di per sé.
|
||||
I problemi di sicurezza di OpenPGP più discussi pubblicamente
|
||||
in realtà derivano da una cattiva usabilità o da cattive implementazioni di strumenti o app (o entrambi).
|
||||
La maggior parte dei problemi di sicurezza di OpenPGP discussi pubblicamentederivano in realtà da una cattiva usabilità o da cattive implementazioni di strumenti o app (o entrambi).
|
||||
È particolarmente importante distinguere tra OpenPGP, lo standard di crittografia IETF,
|
||||
e GnuPG (GPG), uno strumento da riga di comando che implementa OpenPGP.
|
||||
Molte critiche pubbliche di OpenPGP in realtà discutono di GnuPG che Delta Chat non ha mai utilizzato.
|
||||
Delta Chat utilizza piuttosto l’implementazione OpenPGP Rust <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
Delta Chat utilizza piuttosto l’implementazione Rust di OpenPGP <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
disponibile come <a href="https://crates.io/crates/pgp">un pacchetto “pgp” indipendente</a>,
|
||||
e <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">controllato sulla sicurezza nel 2019</a>.</p>
|
||||
e <a href="#security-audits">verificato per la sicurezza nel 2019 e nel 2024</a>.</p>
|
||||
|
||||
<p>Puntiamo, insieme ad altri implementatori di OpenPGP,
|
||||
per migliorare ulteriormente le caratteristiche di sicurezza implementando il
|
||||
@@ -947,7 +1016,7 @@ compresi eventuali allegati,
|
||||
se non sono crittografati end-to-end.</p>
|
||||
|
||||
<p>Delta Chat per impostazione predefinita utilizza
|
||||
[Crittografia TLS] rigorosa (https://en.wikipedia.org/wiki/Transport_Layer_Security)
|
||||
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">Crittografia TLS</a> rigorosa
|
||||
che protegge le connessioni tra il tuo dispositivo e il tuo provider e-mail.
|
||||
Tutta la gestione TLS di Delta Chat è stata sottoposta a <a href="#security-audits">controlli di sicurezza</a> in modo indipendente.
|
||||
Inoltre, la connessione tra il tuo provider e-mail e quello del destinatario
|
||||
@@ -1099,9 +1168,9 @@ puoi anche attivare <a href="#delold">“elimina messaggi dal server”</a>.</p>
|
||||
</h3>
|
||||
|
||||
<p>No, Delta Chat non supporta Perfect Forward Secrecy (PFS).
|
||||
Ciò significa che se la tua chiave di decrittazione privata Delta Chat viene divulgata,
|
||||
Ciò significa che se la tua chiave di cifratura privata Delta Chat viene divulgata,
|
||||
e qualcuno ha raccolto i tuoi precedenti messaggi in transito,
|
||||
sarà in grado di decrittografarli e leggerli utilizzando la chiave di decrittazione trapelata.</p>
|
||||
sarà in grado di decifrarli e leggerli utilizzando la chiave di cifratura trapelata.</p>
|
||||
|
||||
<p>Tieni presente, tuttavia, che se qualcuno ottiene le tue chiavi di decrittazione,
|
||||
in genere saranno anche in grado di ricevere i tuoi messaggi,
|
||||
@@ -1146,42 +1215,14 @@ che è stato <a href="https://delta.chat/assets/blog/2019-first-security-review.
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Sì.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>No.</p>
|
||||
|
||||
<p>In alternativa è possibile importare manualmente la chiave in “Impostazioni -> Avanzate -> Gestisci Chiavi -> Importa Chiavi Segrete”.
|
||||
Attenzione: assicurarsi che la chiave non sia protetta da password oppure rimuovere prima la password.</p>
|
||||
<p>Delta Chat genera chiavi OpenPGP sicure in conformità alle specifiche di Autocrypt 1.1.
|
||||
Puoi esportare le tue chiavi private ma non puoi importare chiavi private aggiuntive.</p>
|
||||
|
||||
<p>Se non hai una chiave o non sai nemmeno che ne avrai bisogno - non preoccuparti: Delta Chat genera le chiavi secondo necessità, non devi premere un pulsante per ottenerle.</p>
|
||||
|
||||
<h3 id="non-riesco-a-importare-la-mia-chiave-pgp-esistente-in-delta-chat">
|
||||
|
||||
|
||||
Non riesco a importare la mia chiave PGP esistente in Delta Chat. <a href="#non-riesco-a-importare-la-mia-chiave-pgp-esistente-in-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Con molta probabilità, il problema sta nel fatto che la tua chiave è cifata e/o usa
|
||||
una password. Queste chiavi non sono supportate da Delta Chat. Rimuovi la
|
||||
cifratura e la password e prova ad importarla nuovamente.</p>
|
||||
|
||||
<p>Un altro errore comune è avere la fine del file sbagliata.
|
||||
Utilizza il formato corazzato ASCII e l’estensione del file “.asc”.</p>
|
||||
|
||||
<p>Delta Chat supporta i formati di chiave privata OpenPGP comuni, tuttavia,
|
||||
è improbabile che le chiavi private di tutte le fonti siano completamente supportate. Questo
|
||||
non è l’obiettivo principale di Delta Chat. In effetti, la maggior parte dei nuovi utenti
|
||||
non avrà alcuna chiave prima di utilizzare Delta Chat.
|
||||
Tuttavia, cerchiamo di supportare le chiavi private dal maggior numero possibile di fonti.</p>
|
||||
|
||||
<p>La rimozione della password dalla chiave privata dipenderà dal
|
||||
software che usi per gestire le tue chiavi PGP. Con Enigmail puoi impostare la tua
|
||||
password su un valore vuoto nella finestra Gestione chiavi. Con GnuPG puoi impostarla
|
||||
<a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">tramite la linea
|
||||
di comando</a>.
|
||||
Per altri programmi, dovresti essere in grado di trovare una soluzione online.</p>
|
||||
<p>In generale, non raccomandiamo on proponiamo agli utenti di gestire manualmente le chiavi.
|
||||
Noi vogliamo assicurare che gli audit di sicurezza si possano focalizzare su pochi algoritmi crittografici comprovati
|
||||
invece che sull’intera estensione dei possibili algoritmi consentiti con OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1191,10 +1232,26 @@ Per altri programmi, dovresti essere in grado di trovare una soluzione online.</
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Il progetto Delta Chat è stato sottoposto a quattro controlli di sicurezza indipendenti e
|
||||
un’analisi di sicurezza indipendente, dal più recente al più vecchio:</p>
|
||||
<p>Sì, più volte.
|
||||
Il progetto Delta Chat è sottoposto costantemente a verifiche e analisi di sicurezza indipendenti,
|
||||
dal più recente al più vecchio:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Dicembre 2024, un <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">Valutazione commissionata da NLNET di
|
||||
rPGP</a> di <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> ha preso parte.
|
||||
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
|
||||
Sono stati rilasciati due avvisi relativi ai risultati di questa verifica:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panico per Input non Attendibili e Malformati”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potenziale Esaurimento delle Risorse durante la gestione di Messaggi non Attendibili”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>I problemi descritti in questi avvisi sono stati risolti e fanno
|
||||
parte delle versioni di Delta Chat
|
||||
su tutti gli appstore da Dicembre 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Marzo 2024, abbiamo ricevuto un’analisi approfondita della sicurezza dalla Crittografia Applicata
|
||||
gruppo di ricerca dell’ETH di Zurigo e ha affrontato tutte le questioni sollevate.
|
||||
@@ -1260,7 +1317,7 @@ Puoi leggere il <a href="https://delta.chat/assets/blog/2019-first-security-revi
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Sì. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Sì. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1317,6 +1374,10 @@ che è noto per causare problemi (soprattutto su Windows).
|
||||
<li>
|
||||
<p><strong>Reti Ospite</strong> potrebbero non consentire ai dispositivi di comunicare tra loro.
|
||||
Se possibile, utilizza una rete non ospite.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Se continui ad aver problemi usando la stessa rete,
|
||||
prova ad aprire l’ <strong>Hotspot</strong> su uno dei dispositivi e collegati al quel Wi-Fi con l’altro</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Assicurarsi che sul dispositivo di destinazione ci sia <strong>disponibilità di memoria sufficiente</strong>.</p>
|
||||
@@ -1361,6 +1422,23 @@ Aiutarti.</li>
|
||||
messaggi crittografati end-to-end con i tuoi partner di comunicazione.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="cancella-fissa-archivia-salva-silenzia-ecc-sono-sincronizzate-su-tutti-i-dispositivi">
|
||||
|
||||
|
||||
Cancella, Fissa, Archivia, Salva, Silenzia ecc. sono sincronizzate su tutti i dispositivi? <a href="#cancella-fissa-archivia-salva-silenzia-ecc-sono-sincronizzate-su-tutti-i-dispositivi" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Sì.</p>
|
||||
|
||||
<p>Se per esempio cancelli una chat o un messaggio dal tuo telefono,
|
||||
sarà cancellato sul tuo desktop non appena tornerà in linea di nuovo.</p>
|
||||
|
||||
<p>Eccezioni rilevanti sono <a href="#delold">Elimina vecchi messaggi dal Dispositivo</a>,
|
||||
poiché diversi dispositivi possono avere differenti capacità di memoria,
|
||||
e impostazioni di sistema specifiche come i suoni di notifica.</p>
|
||||
|
||||
<h3 id="sono-previsti-piani-per-lintroduzione-di-un-client-web-delta-chat">
|
||||
|
||||
|
||||
@@ -1786,17 +1864,17 @@ per la loro posta, invece della cartella DeltaChat. Se disabiliti “Controlla
|
||||
cartella DeltaChat”, dovresti anche disabilitare “sposta messaggi chat in DeltaChat”.
|
||||
In caso contrario, l’eliminazione dei messaggi o configurazioni multi-dispositivo potrebbero non funzionare correttamente.</p>
|
||||
|
||||
<h3 id="delta-chat-è-compatibile-con-protonmail--tutanota--criptext">
|
||||
<h3 id="delta-chat-è-compatibile-con-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
Delta Chat è compatibile con Protonmail / Tutanota / Criptext? <a href="#delta-chat-è-compatibile-con-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
Delta Chat è compatibile con Proton Mail / Tutanota / Criptext? <a href="#delta-chat-è-compatibile-con-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Sì e no.</li>
|
||||
<li>No, non puoi utilizzare il tuo profilo Protonmail, Tutanota o Criptext con Delta
|
||||
<li>No, non puoi utilizzare il tuo profilo Proton Mail, Tutanota o Criptext con Delta
|
||||
Chat; non offrono la ricezione di posta tramite IMAP.</li>
|
||||
<li>In ogni caso puoi utilizzare Delta Chat per inviare messaggi alle persone che lo utilizzano
|
||||
Protonmail, Tutanota o Criptext. Tali messaggi non saranno end-to-end
|
||||
@@ -1911,7 +1989,7 @@ tramite <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
prima sovvenzione 2018/2019 (~$200K) durante la quale abbiamo notevolmente migliorato l’app Android
|
||||
e ha rilasciato una prima versione beta dell’app desktop, e che inoltre
|
||||
ancorato i nostri sviluppi delle funzionalità nella ricerca sulla UX nei contesti dei diritti umani,
|
||||
vedete il nostro [Rapporto Needfinding e UX] conclusivo (https://delta.chat/en/2019-07-19-uxreport).
|
||||
vedete il nostro <a href="https://delta.chat/en/2019-07-19-uxreport">Rapporto Needfinding e UX</a> conclusivo.
|
||||
La seconda sovvenzione 2019/2020 (~$300K) ci ha aiutato a farlo
|
||||
rilasciare nelle versioni Delta/iOS, per convertire la nostra libreria principale in Rust, e
|
||||
per fornire nuove funzionalità per tutte le piattaforme.</p>
|
||||
@@ -1935,7 +2013,7 @@ e fornendo “inserimento immediato” in tutte le app rilasciate da aprile 2024
|
||||
</li>
|
||||
<li>
|
||||
<p>Nel 2023 e nel 2024 siamo stati accettati nel programma Next Generation Internet (NGI)
|
||||
per il nostro lavoro in [webxdc PUSH].(https://nlnet.nl/project/WebXDC-Push/),
|
||||
per il nostro lavoro in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
insieme ai partner di collaborazione che lavorano su
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="nl"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#wat-is-delta-chat">Wat is Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#hoe-kan-ik-gesprekspartners-vinden">Hoe kan ik gesprekspartners vinden?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#wie-kan-mijn-profielfoto-zien">Wie kan mijn profielfoto zien?</a></li>
|
||||
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li>
|
||||
<li><a href="#wat-is-vastmaken-negeren-en-archiveren">Wat is vastmaken, negeren en archiveren?</a></li>
|
||||
<li><a href="#save">How do “Saved Messages” work?</a></li>
|
||||
<li><a href="#wat-betekent-die-groene-stip">Wat betekent die groene stip?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li>
|
||||
<li><a href="#importkey">Kan ik mijn bestaande privésleutel hergebruiken?</a></li>
|
||||
<li><a href="#ik-kan-mijn-bestaande-pgp-sleutel-niet-importeren">Ik kan mijn bestaande PGP-sleutel niet importeren</a></li>
|
||||
<li><a href="#security-audits">Heeft Delta Chat ooit onafhankelijke beveiligingscontroles ondergaan?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#kan-ik-delta-chat-op-meerdere-apparaten-tegelijk-gebruiken">Kan ik Delta Chat op meerdere apparaten tegelijk gebruiken?</a></li>
|
||||
<li><a href="#probleemoplossing">Probleemoplossing</a></li>
|
||||
<li><a href="#backup">Manual Transfer</a></li>
|
||||
<li><a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices?</a></li>
|
||||
<li><a href="#bestaan-er-plannen-om-een-delta-chat-webclient-te-maken">Bestaan er plannen om een Delta Chat-webclient te maken?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#waarvoor-dient-de-optie-kopie-versturen-aan-mijzelf">Waarvoor dient de optie ‘Kopie versturen aan mijzelf’?</a></li>
|
||||
<li><a href="#waarom-kan-ik-kiezen-om-de-map-verzonden-te-controleren">Waarom kan ik kiezen om de map ‘Verzonden’ te controleren?</a></li>
|
||||
<li><a href="#waarom-kan-ik-kiezen-om-de-deltachat-map-te-negeren">Waarom kan ik kiezen om de DeltaChat-map te negeren?</a></li>
|
||||
<li><a href="#is-delta-chat-compatibel-met-protonmailtutanotacriptext">Is Delta Chat compatibel met Protonmail/Tutanota/Criptext?</a></li>
|
||||
<li><a href="#is-delta-chat-compatible-with-proton-mail--tutanota--criptext">Is Delta Chat compatible with Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">Hoe kan ik mijn account verwijderen?</a></li>
|
||||
<li><a href="#ik-wil-graag-meer-weten-over-de-gebruikte-technieken-waar-kan-ik-meer-informatie-vinden">Ik wil graag meer weten over de gebruikte technieken. Waar kan ik meer informatie vinden?</a></li>
|
||||
<li><a href="#where-can-my-friends-find-delta-chat">Where can my friends find Delta Chat?</a></li>
|
||||
@@ -182,14 +184,20 @@ Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Als een bericht afkomstig is van een onbekende contactpersoon, dan wordt er een <strong>verzoek</strong> getoond.</p>
|
||||
|
||||
<ul>
|
||||
<li>Als een bericht afkomstig is van een onbekende contactpersoon, dan wordt er een <strong>verzoek</strong> getoond.
|
||||
Accepteer het verzoek om te kunnen antwoorden.</li>
|
||||
<li>Ook kun je het verzoek verwijderen als je op dat moment geen gesprek met ze wilt voeren.
|
||||
Hierdoor wordt het bericht in kwestie niet op de server verwijderd, maar alleen op je apparaat, zodat je in een andere app kunt antwoorden.</li>
|
||||
<li>Als je een verzoek verwijderd, dan worden toekomstige berichten nog steeds als verzoek getoond,
|
||||
zodat je te allen tijde kunt bepalen of je het alsnog wilt accepteren. Als je écht geen contact wilt leggen, overweeg dan
|
||||
om de persoon in kwestie te <strong>blokkeren</strong>.</li>
|
||||
<li>
|
||||
<p><strong>Accepteer</strong> het verzoek om te kunnen antwoorden.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ook kun je het verzoek <strong>verwijderen</strong> als je op dat moment geen gesprek met ze wilt voeren.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Als je een verzoek verwijderd, dan worden toekomstige berichten nog steeds als verzoek getoond,
|
||||
zodat je te allen tijde kunt bepalen of je het alsnog wilt accepteren. Als je écht geen contact wilt leggen, overweeg dan
|
||||
om de persoon in kwestie te <strong>blokkeren</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="ondersteunt-delta-chat-afbeeldingen-videos-en-ander-soort-bijlagen">
|
||||
@@ -303,6 +311,41 @@ Gearchiveerde gesprekken zijn te allen tijde te bekijken boven de lijst of via e
|
||||
<p>Archiveer of maak een gesprek vast door het gesprek in kwestie lang ingedrukt te houden (Android), via het gespreksmenu (Android/computer) of door het naar links te vegen (iOS).
|
||||
Negeer een gesprek via het gespreksmenu (Android/computer) of het gespreksprofiel (iOS).</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
How do “Saved Messages” work? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Saved Messages</strong> is a chat that you can use to easily remember and find messages.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In any chat, long tap or right click a message and select <strong>Save</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Saved messages are marked by the symbol
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
next to the timestamp</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Later, open the “Saved Messages” chat - and you will see the saved messages there.
|
||||
By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Messages stay saved even if they are edited or deleted -
|
||||
may it be by <a href="#edit">sender</a>, by <a href="#delold">device cleanup</a> or by <a href="#ephemeralmsgs">disappearing messages of other chats</a>.</p>
|
||||
|
||||
<h3 id="wat-betekent-die-groene-stip">
|
||||
|
||||
|
||||
@@ -311,23 +354,49 @@ Negeer een gesprek via het gespreksmenu (Android/computer) of het gespreksprofie
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Sinds Delta Chat 1.34 wordt er soms een groen stipje naast een profielfoto van een
|
||||
<p>Wordt er soms een <strong>groen stipje</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" /> naast een profielfoto van een
|
||||
contactpersoon getoond. Dit betekent dat ze onlangs actief waren,
|
||||
dat wil zeggen: in de afgelopen 10 minuten. Dit komt omdat ze
|
||||
<ul>
|
||||
<li>je een bericht hebben gestuurd;</li>
|
||||
<li>iets in een van je groepen hebben geplaatst;</li>
|
||||
<li>een leesbevestiging hebben verstuurd;</li>
|
||||
<li>gegevens naar je Delta Chat-app middels een zogeheten
|
||||
<a href="#webxdc">privé-app</a> hebben verstuurd.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>De online-status is dus <strong>niet</strong> realtime. Geef ze dus even de tijd om te antwoorden. ;-)</li>
|
||||
<li>Anderen kunnen ook niet altijd zien dat je actief was. Als je
|
||||
leesbevestigingen hebt uitgeschakeld, dan wordt er geen groen stipje getoond totdat je
|
||||
iemand benaderd of iets in een groep plaatst..</li>
|
||||
dat wil zeggen: in de afgelopen 10 minuten. Dit komt omdat ze</p>
|
||||
|
||||
<ul>
|
||||
<li>je een bericht hebben gestuurd;</li>
|
||||
<li>iets in een van je groepen hebben geplaatst;</li>
|
||||
<li>een leesbevestiging hebben verstuurd;</li>
|
||||
<li>gegevens naar je Delta Chat-app middels een zogeheten <a href="#webxdc">privé-app</a> hebben verstuurd.</li>
|
||||
</ul>
|
||||
|
||||
<p>De online-status is dus <strong>niet</strong> realtime. Geef ze dus even de tijd om te antwoorden :)</p>
|
||||
|
||||
<p>Anderen kunnen ook niet altijd zien dat je actief was. Als je
|
||||
leesbevestigingen hebt uitgeschakeld, dan wordt er geen groen stipje getoond totdat je
|
||||
iemand benaderd of iets in een groep plaatst..</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Correct typos and delete messages after sending <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can edit the text of your messages after sending.
|
||||
For that, long tap or right click the message and select <strong>Edit</strong>
|
||||
or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have sent a message accidentally,
|
||||
from the same menu, select <strong>Delete</strong> and then <strong>Delete for Everyone</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>While edited messages will have the word “Edited” next to the timestamp,
|
||||
deleted messages will be removed without a marker in the chat.
|
||||
Notifications are not sent and there is no time limit.</p>
|
||||
|
||||
<p>Note, that the original message may still be received by chat members
|
||||
who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -597,16 +666,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -619,14 +688,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
@@ -641,7 +711,7 @@ would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
<p>Delta Chat is a free and open source decentralized messenger with free server choice,
|
||||
but we want users to reliably experience “instant delivery” of messages,
|
||||
like they experience from Whatsapp, Signal or Telegram apps,
|
||||
like they experience from WhatsApp, Signal or Telegram apps,
|
||||
without asking questions up-front that are more suited to expert users or developers.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
@@ -880,14 +950,14 @@ if the whole message is properly encrypted and signed.
|
||||
For example, “Detached signatures” are not treated as secure.</p>
|
||||
|
||||
<p>OpenPGP is not insecure by itself.
|
||||
Most publically discussed OpenPGP security problems
|
||||
Most publicly discussed OpenPGP security problems
|
||||
actually stem from bad usability or bad implementations of tools or apps (or both).
|
||||
It is particularly important to distinguish between OpenPGP, the IETF encryption standard,
|
||||
and GnuPG (GPG), a command line tool implementing OpenPGP.
|
||||
Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used.
|
||||
Delta Chat rather uses the OpenPGP Rust implementation <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
available as <a href="https://crates.io/crates/pgp">an independent “pgp” package</a>,
|
||||
and <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">security-audited in 2019</a>.</p>
|
||||
and <a href="#security-audits">security-audited in 2019 and 2024</a>.</p>
|
||||
|
||||
<p>We aim, along with other OpenPGP implementors,
|
||||
to further improve security characteristics by implementing the
|
||||
@@ -1136,7 +1206,7 @@ but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</
|
||||
that are safe against compromised servers or corrupted networks.
|
||||
Signal and most other PFS-supporting messengers do not provide
|
||||
a practical scheme for protecting chat groups from network attacks
|
||||
which are arguably more worrysome
|
||||
which are arguably more worrisome
|
||||
than a potential attacker who seizes your phone and private encryption setup
|
||||
but somehow not your messages, yet has a full record of all
|
||||
past encrypted messages.</p>
|
||||
@@ -1152,41 +1222,14 @@ which has been <a href="https://delta.chat/assets/blog/2019-first-security-revie
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>No.</p>
|
||||
|
||||
<p>Alternatively, you can import the key manually in “Settings -> Advanced settings -> Import secret keys”.
|
||||
Caution: Make sure the key is not protected by a password, or remove the password beforehand.</p>
|
||||
<p>Delta Chat generates secure OpenPGP keys according to the Autocrypt specification 1.1.
|
||||
You can export your private key but you can not import additional private keys.</p>
|
||||
|
||||
<p>If you don’t have a key or don’t even know you would need one - don’t worry: Delta Chat generates keys as needed, you don’t have to hit a button for it.</p>
|
||||
|
||||
<h3 id="ik-kan-mijn-bestaande-pgp-sleutel-niet-importeren">
|
||||
|
||||
|
||||
Ik kan mijn bestaande PGP-sleutel niet importeren <a href="#ik-kan-mijn-bestaande-pgp-sleutel-niet-importeren" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Het is goed mogelijk dat je sleutel versleuteld is en/of een wachtwoord
|
||||
vereist. Zulke sleutels worden niet ondersteund. Verwijder de versleuteling
|
||||
en het wachtwoord en probeer het opnieuw.</p>
|
||||
|
||||
<p>Another common error is having the wrong file ending.
|
||||
Use the ASCII armored format and an <code class="language-plaintext highlighter-rouge">.asc</code> file ending.</p>
|
||||
|
||||
<p>Delta Chat heeft ondersteuning voor alle veelvoorkomende OpenPGP-privésleutelformaten. Echter,
|
||||
het in onmogelijk om álle soorten sleutels te ondersteunen. Onze
|
||||
aandacht gaat hier dan ook niet naar uit. Sterker nog: de meeste gebruikers hebben
|
||||
(nog) geen sleutel. We doen ons best om zo veel mogelijk sleutels te ondersteunen.</p>
|
||||
|
||||
<p>Door het verwijderen van het wachtwoord kan de sleutels afhankelijk
|
||||
van de gebruikte software, veranderd zijn. In Enigmail kun je je wachtwoord
|
||||
leeglaten in het sleutelbeheervenster. Met GnuPG kun je het
|
||||
instellen <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">middels de opdracht-
|
||||
regel</a>.
|
||||
Voor andere programma’s kun je zélf een oplossing zoeken op internet.</p>
|
||||
<p>In general, we do not recommend or offer users to perform manual key management.
|
||||
We want to ensure that security audits can focus on a few proven cryptographic algorithms
|
||||
instead of the full breadth of possible algorithms allowed with OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1196,10 +1239,25 @@ Voor andere programma’s kun je zélf een oplossing zoeken op internet.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The Delta Chat project underwent four independent security audits and one
|
||||
independent security analysis, from most recent to older:</p>
|
||||
<p>Yes, multiple times.
|
||||
The Delta Chat project continuously undergoes independent security audits and analysis,
|
||||
from most recent to older:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
|
||||
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
|
||||
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
|
||||
Two advisories were released related to the findings of this audit:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panics on Malformed Untrusted Input”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potential Resource Exhaustion when handling Untrusted Messages”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>The issues outlined in these advisories have been fixed and are part of Delta Chat
|
||||
releases on all appstores since December 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2024 March, we received a deep security analysis from the Applied Cryptography
|
||||
research group at ETH Zuerich and addressed all raised issues.
|
||||
@@ -1265,7 +1323,7 @@ Het <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">voll
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Ja, Delta Chat 1.36 bevat een nieuwe, experimentele functie om hetzelfde account op meerdere apparaten te gebruiken:</p>
|
||||
<p>Yes. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1321,6 +1379,10 @@ welke problemen kan veroorzaken (met name op Windows).
|
||||
<li>
|
||||
<p><strong>Guest Networks</strong> may not allow devices to communicate with each other.
|
||||
If possible, use a non-guest network.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you still have troubles using the same network,
|
||||
try to open <strong>Mobile Hotspot</strong> on one device and join that Wi-Fi from the other one</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Zorg voor <strong>voldoende ruimte</strong> op het bestemmingsapparaat</p>
|
||||
@@ -1368,6 +1430,23 @@ help you.</li>
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">
|
||||
|
||||
|
||||
Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices? <a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.</p>
|
||||
|
||||
<p>If you e.g. delete a chat or a message from your phone,
|
||||
it will be deleted on your desktop as soon as it comes online again.</p>
|
||||
|
||||
<p>Notable exceptions are <a href="#delold">Delete old messages from Device</a>,
|
||||
as different devices may have different storage capacities,
|
||||
and system specific settings as notification sounds.</p>
|
||||
|
||||
<h3 id="bestaan-er-plannen-om-een-delta-chat-webclient-te-maken">
|
||||
|
||||
|
||||
@@ -1478,18 +1557,18 @@ another rather stable experiment we run on the side (sic!).</p>
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>To turn on audio/video calls, go to the “experimental features” section in
|
||||
the advanced settings and choose a “Video Chat Instance”.</li>
|
||||
<li>When you invite others to a video chat, it is opened in your browser/app at
|
||||
once. The others receive an e-mail with a link to the video chat.
|
||||
This way, it is also compatible if your chat partners don’t use Delta Chat.</li>
|
||||
<li>Note that there is no ring tone on the other side, and your chat partners
|
||||
will not get interrupted by a video chat invite.</li>
|
||||
<li>You can use any video chat service which allows joining by link. Just add the
|
||||
link in the settings.</li>
|
||||
<li>For example, to use the flagship Jitsi Meet instance, you could enter
|
||||
<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$ROOM</code>. The <code class="language-plaintext highlighter-rouge">$ROOM</code> variable will be a random value;
|
||||
this way, you will have a new random jitsi room every time you call someone.</li>
|
||||
<li>Audio-/Videogesprekken kunnen worden ingeschakeld in de sectie ‘experimentele functies’ in de
|
||||
geavanceerde instellingen. Kies daar een ‘instantie’.</li>
|
||||
<li>Als je anderen uitnodigt, dan wordt het gesprek meteen in je webbrowser of een app
|
||||
geopend. Anderen ontvangen een e-mail met een link naar de jitsi-/BBB-kamer. Op deze
|
||||
manier is het gesprek compatibel met gesprekspartners die geen gebruikmaken van Delta Chat.</li>
|
||||
<li>Let op: de ander hoort geen beltoon en je gesprekspartners
|
||||
worden niet gestoord door de uitnodiging.</li>
|
||||
<li>Je kunt kiezen uit verschillende videogespreksdiensten die op basis van links werken. Voeg hiervoor de
|
||||
link toe in de instellingen.</li>
|
||||
<li>Voorbeeld: als je gebruik wilt maken van Jitsi Meet, dan kun je
|
||||
<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$KAMER</code> invoeren. <code class="language-plaintext highlighter-rouge">$KAMER</code> is hierbij een willekeurige waarde,
|
||||
zodat er telkens een nieuwe jitsi-kamer als je iemand belt.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="wat-zijn-verzendlijsten-en-hoe-gebruik-ik-deze">
|
||||
@@ -1810,17 +1889,17 @@ gebruiken voor hun e-mail in plaats van de DeltaChat-map. Als je deze optie uits
|
||||
schakel dan ook de optie ‘Berichten verplaatsen naar de DeltaChat-map’ uit.
|
||||
Anders kun je mogelijk geen berichten verwijderen of problemen ervaren op andere apparaten.</p>
|
||||
|
||||
<h3 id="is-delta-chat-compatibel-met-protonmailtutanotacriptext">
|
||||
<h3 id="is-delta-chat-compatible-with-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
Is Delta Chat compatibel met Protonmail/Tutanota/Criptext? <a href="#is-delta-chat-compatibel-met-protonmailtutanotacriptext" class="anchor"></a>
|
||||
Is Delta Chat compatible with Proton Mail / Tutanota / Criptext? <a href="#is-delta-chat-compatible-with-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Yes and No.</li>
|
||||
<li>No, you can not use your Protonmail, Tutanota, or Criptext account with Delta
|
||||
<li>No, you can not use your Proton Mail, Tutanota, or Criptext account with Delta
|
||||
Chat; they do not offer receiving mails via IMAP.</li>
|
||||
<li>In any case you can use Delta Chat to send Messages to people who use
|
||||
Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="pl"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#czym-jest-delta-chat">Czym jest Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#jak-mogę-znaleźć-ludzi-z-którymi-mogę-czatować">Jak mogę znaleźć ludzi, z którymi mogę czatować?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#kto-widzi-moje-zdjęcie-profilowe">Kto widzi moje zdjęcie profilowe?</a></li>
|
||||
<li><a href="#signature">Czy w Delta Chat mogę ustawić Biografię/Podpis/Status/Motto?</a></li>
|
||||
<li><a href="#co-oznacza-przypinanie-wyciszanie-i-archiwizowanie">Co oznacza przypinanie, wyciszanie i archiwizowanie?</a></li>
|
||||
<li><a href="#save">Jak działają „Zapisane wiadomości”?</a></li>
|
||||
<li><a href="#co-oznacza-zielona-kropka">Co oznacza zielona kropka?</a></li>
|
||||
<li><a href="#edit">Poprawianie literówek i usuwanie wiadomości po wysłaniu</a></li>
|
||||
<li><a href="#ephemeralmsgs">Jak działają znikające wiadomości?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Czy Delta Chat obsługuje funkcję Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#czy-szyfrowanie-end-to-end-delta-chat-jest-tak-samo-bezpieczne-jak-signal">Czy szyfrowanie end-to-end Delta Chat jest tak samo bezpieczne jak Signal?</a></li>
|
||||
<li><a href="#importkey">Czy mogę ponownie wykorzystać mój istniejący klucz prywatny?</a></li>
|
||||
<li><a href="#nie-mogę-zaimportować-istniejącego-klucza-pgp-do-delta-chat">Nie mogę zaimportować istniejącego klucza PGP do Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">Czy Delta Chat był niezależnie kontrolowany pod kątem luk w zabezpieczeniach?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#czy-mogę-korzystać-z-delta-chat-na-wielu-urządzeniach-w-tym-samym-czasie">Czy mogę korzystać z Delta Chat na wielu urządzeniach w tym samym czasie?</a></li>
|
||||
<li><a href="#rozwiązywanie-problemów">Rozwiązywanie problemów</a></li>
|
||||
<li><a href="#backup">Ręczny transfer</a></li>
|
||||
<li><a href="#czy-usuwanie-przypinanie-archiwizowanie-zapisywanie-wyciszanie-itp-jest-synchronizowane-ze-wszystkimi-urządzeniami">Czy usuwanie, przypinanie, archiwizowanie, zapisywanie, wyciszanie itp. jest synchronizowane ze wszystkimi urządzeniami?</a></li>
|
||||
<li><a href="#czy-są-jakieś-plany-wprowadzenia-klienta-web-delta-chat">Czy są jakieś plany wprowadzenia klienta Web Delta Chat?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#do-czego-służy-ustawienie-wyślij-kopię-do-siebie">Do czego służy ustawienie „Wyślij kopię do siebie”?</a></li>
|
||||
<li><a href="#po-co-mam-wybrać-opcję-oglądania-folderu-wysłane">Po co mam wybrać opcję oglądania folderu „Wysłane”?</a></li>
|
||||
<li><a href="#dlaczego-mogę-nie-widzieć-folderu-deltachat">Dlaczego mogę nie widzieć folderu DeltaChat?</a></li>
|
||||
<li><a href="#czy-delta-chat-jest-kompatybilny-z-protonmail--tutanota--criptext">Czy Delta Chat jest kompatybilny z Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#czy-delta-chat-jest-kompatybilny-z-proton-mail--tutanota--criptext">Czy Delta Chat jest kompatybilny z Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">Jak mogę usunąć swoje konto?</a></li>
|
||||
<li><a href="#interesują-mnie-szczegóły-techniczne-możesz-powiedzieć-mi-coś-więcej">Interesują mnie szczegóły techniczne. Możesz powiedzieć mi coś więcej?</a></li>
|
||||
<li><a href="#gdzie-moi-znajomi-mogą-znaleźć-delta-chat">Gdzie moi znajomi mogą znaleźć Delta Chat?</a></li>
|
||||
@@ -166,10 +168,18 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Jeśli wiadomość pochodzi od nieznanego kontaktu, wyświetla się jako <strong>prośba</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>Jeśli wiadomość przychodzi od nieznanego kontaktu, pojawia się jako <strong>prośba</strong>. Musisz zaakceptować prośbę, zanim będziesz mógł odpowiedzieć.</li>
|
||||
<li>Możesz również „usunąć” ją, jeśli nie chcesz na razie z nią rozmawiać. To <em>nie</em> usuwa wiadomości na serwerze, tylko na Twoim urządzeniu. Możesz więc nadal zajmować się tą wiadomością w innej aplikacji pocztowej.</li>
|
||||
<li>Jeśli usuniesz prośbę, przyszłe wiadomości od tego kontaktu będą nadal wyświetlane jako prośba o wiadomość, więc możesz zmienić zdanie. Jeśli naprawdę nie chcesz otrzymywać wiadomości od tej osoby, rozważ <em>zablokowanie</em> jej.</li>
|
||||
<li>
|
||||
<p>Musisz <strong>zaakceptować</strong> prośbę, zanim będziesz mógł odpowiedzieć.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Możesz także <strong>usunąć</strong> wiadomość, jeśli nie chcesz w tej chwili z nią rozmawiać.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Jeśli usuniesz prośbę, przyszłe wiadomości od tego kontaktu nadal będą wyświetlane jako prośba o wiadomość, więc możesz zmienić zdanie. Jeśli naprawdę nie chcesz otrzymywać wiadomości od tej osoby, rozważ <strong>zablokowanie</strong> jej.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="czy-delta-chat-obsługuje-obrazy-filmy-i-inne-załączniki">
|
||||
@@ -182,7 +192,7 @@
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Tak. Oprócz zwykłego tekstu wszystkie załączniki wiadomości e-mail są wyświetlane jako oddzielne wiadomości. Wiadomości wychodzące automatycznie otrzymują załączniki w razie potrzeby.</p>
|
||||
<p>Tak. Obrazy, filmy, pliki, wiadomości głosowe itp. są obsługiwane jak zwykle.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ze względu na wydajność obrazy są domyślnie optymalizowane i wysyłane w mniejszym rozmiarze, ale można je wysłać jako „plik”, aby zachować oryginał.</p>
|
||||
@@ -268,6 +278,36 @@
|
||||
|
||||
<p>Aby skorzystać z tych funkcji, przytrzymaj dłużej lub kliknij prawym przyciskiem myszy czat na liście czatów.</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
Jak działają „Zapisane wiadomości”? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Zapisane wiadomości</strong> to czat, którego możesz użyć, aby łatwo zapisać i znaleźć wiadomości.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>W dowolnym czacie naciśnij i przytrzymaj lub kliknij prawym przyciskiem myszy wiadomość i wybierz <strong>Zapisz</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Zapisane wiadomości są oznaczone symbolem <img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="ikona Zapisz" /> obok znacznika czasu</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Później otwórz czat „Zapisane wiadomości” — zobaczysz tam zapisane wiadomości. Naciskając <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="ikona strzałki w prawo" />, możesz wrócić do oryginalnej wiadomości w oryginalnym czacie</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Na koniec możesz również użyć „Zapisz wiadomości”, aby robić <strong>osobiste notatki</strong> — otwórz czat, wpisz coś, dodaj zdjęcie lub wiadomość głosową itp.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ponieważ „Zapisane wiadomości” są zsynchronizowane, mogą być bardzo przydatne do przesyłania danych między urządzeniami</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Wiadomości pozostają zapisane, nawet jeśli zostaną edytowane lub usunięte — może to być przez <a href="#edit">nadawcę</a>, <a href="#delold">czyszczenie urządzenia</a> lub <a href="#ephemeralmsgs">znikające wiadomości z innych czatów</a>.</p>
|
||||
|
||||
<h3 id="co-oznacza-zielona-kropka">
|
||||
|
||||
|
||||
@@ -276,16 +316,40 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Czasami można zobaczyć <strong>zieloną kropkę</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" /> obok awatara kontaktu. Oznacza to, że był on „niedawno widziany” w ciągu ostatnich 10 minut:</p>
|
||||
|
||||
<ul>
|
||||
<li>Od wersji Delta Chat 1.34 czasami można zobaczyć „zieloną kropkę” obok awatara kontaktu. Oznacza to, że był on „niedawno widziany”.</li>
|
||||
<li>Dokładnie oznacza to, że w ciągu ostatnich 10 minut Delta Chat widział go:</li>
|
||||
<li>dlatego, że wysłał Ci bezpośrednio wiadomość,</li>
|
||||
<li>ponieważ napisał coś do grupy, której oboje jesteście członkami,</li>
|
||||
<li>ponieważ wysłał Ci potwierdzenie przeczytania napisanej przez Ciebie wiadomości,</li>
|
||||
<li>lub dlatego, że wysłał dane do Twojej aplikacji Delta Chat za pomocą <a href="#webxdc">Webxdc aplikacji</a>.</li>
|
||||
<li>Nie jest to więc status online w czasie rzeczywistym – a jeśli ktoś nie odpowie od razu, mimo że wydaje się, że jest online, nie martw się i daj mu trochę miejsca ;-)</li>
|
||||
<li>Z drugiej strony inni nie zawsze „zobaczą, że jesteś online”. Jeśli wyłączyłeś potwierdzenia odczytu, nie zobaczą oni zielonej kropki, dopóki nie wyślesz do nich wiadomości lub nie napiszesz do grupy, w której również się znajdują.</li>
|
||||
<li>ponieważ edytował lub usunął wiadomość w udostępnionym Tobie czacie,</li>
|
||||
<li>lub dlatego, że używał <a href="#webxdc">aplikacji</a> w udostępnionym Tobie czacie.</li>
|
||||
</ul>
|
||||
|
||||
<p>Nie jest to więc status online w czasie rzeczywistym – a jeśli ktoś nie odpowie od razu, mimo że wydaje się, że jest online, nie martw się i daj mu trochę czasu :)</p>
|
||||
|
||||
<p>Z drugiej strony, inni nie zawsze „zauważą, że jesteś online”. Jeśli wyłączyłeś potwierdzenia odczytu, nie zobaczą zielonej kropki, dopóki nie zostanie spełniony jeden z powyższych warunków.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Poprawianie literówek i usuwanie wiadomości po wysłaniu <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Możesz edytować tekst wiadomości po wysłaniu. W tym celu naciśnij i przytrzymaj lub kliknij prawym przyciskiem myszy wiadomość i wybierz Edytuj, lub<img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="ikona Edytuj" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Jeśli wysłałeś wiadomość przypadkowo, z tego samego menu wybierz <strong>Usuń</strong>, a następnie <strong>Usuń u wszystkich</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Podczas gdy edytowane wiadomości będą miały słowo „Edytowana” obok znacznika czasu, usunięte wiadomości zostaną usunięte bez znacznika na czacie. Powiadomienia nie są wysyłane i nie ma limitu czasowego.</p>
|
||||
|
||||
<p>Pamiętaj, że oryginalną wiadomość nadal mogą otrzymać członkowie czatu, którzy mogli już odpowiedzieć, przesłać dalej, zapisać, wykonać zrzut ekranu lub w inny sposób skopiować wiadomość.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -494,23 +558,23 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Aplikacja Delta Chat uzyskuje lokalnie „token urządzenia” i przechowuje go na serwerze <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
<p>Aplikacja Delta Chat uzyskuje lokalnie „token urządzenia”, szyfruje i przechowuje go na serwerze <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Kiedy serwer <a href="https://delta.chat/chatmail">chatmail</a> odbierze wiadomość e-mail od użytkownika Delta Chat, przekazuje „token urządzenia” do centralnego serwera proxy powiadomień Delta Chat.</p>
|
||||
<p>Kiedy serwer <a href="https://delta.chat/chatmail">chatmail</a> odbierze wiadomość e-mail od użytkownika Delta Chat, przekazuje zaszyfrowany token urządzenia do centralnego serwera proxy powiadomień Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Centralny serwer proxy powiadomień Delta Chat przekazuje „token urządzenia” do odpowiedniej usługi Push (Apple, Google itp.), nie znając nawet adresu IP ani adresu e-mail użytkowników Delta Chat.</p>
|
||||
<p>Centralny serwer proxy powiadomień Delta Chat deszyfruje token urządzenia i przekazuje go do odpowiedniej usługi Push (Apple, Google itp.), nie znając nawet adresu IP ani adresu e-mail użytkowników Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Centralna usługa Push (Apple, Google itp.) budzi aplikację Delta Chat na twoim urządzeniu, aby sprawdzić w tle nowe wiadomości. Nie zna chatmaila ani adresu e-mail urządzenia, na którym się budzi. Centralne usługi push Apple/Google nigdy nie widzą adresu e-mail (nadawcy ani odbiorcy), a także nigdy nie widzą treści wiadomości (również w formie zaszyfrowanej).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Od maja 2024 r. serwery chatmail znają „tokeny urządzenia”, ale planujemy szyfrować te informacje na serwerze proxy powiadomień, tak aby serwer chatmail nigdy nie poznał tokena urządzenia.</p>
|
||||
|
||||
<p>Centralny serwer proxy powiadomień Delta Chat <a href="https://github.com/deltachat/notifiers">jest mały i w pełni zaimplementowany w Rust</a> i zapomina o tokenach urządzeń zaraz po ich przetworzeniu przez Apple/Google/itp, zwykle w ciągu kilku milisekund.</p>
|
||||
|
||||
<p>Pamiętaj, że token urządzenia jest szyfrowany między aplikacjami a serwerem proxy powiadomień, ale nie jest podpisany. Serwer proxy powiadomień nigdy nie widzi adresów e-mail, adresów IP ani żadnych kryptograficznych informacji identyfikujących powiązanych z urządzeniem użytkownika (tokenem).</p>
|
||||
|
||||
<p>W wyniku tego ogólnego projektu ochrony prywatności nawet przejęcie serwera chatmail lub pełne przejęcie centralnego serwera proxy powiadomień Delta Chat nie spowodowałoby ujawnienia prywatnych informacji, których usługi Push jeszcze nie posiadają.</p>
|
||||
|
||||
<h3 id="dlaczego-delta-chat-integruje-się-ze-scentralizowanymi-zastrzeżonymi-usługami-push-applegoogle">
|
||||
@@ -669,7 +733,7 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
|
||||
|
||||
<p>Tak, Delta Chat korzysta z bezpiecznego podzbioru OpenPGP i wyświetla wskaźnik bezpieczeństwa kłódki na wiadomości tylko wtedy, gdy cała wiadomość jest prawidłowo zaszyfrowana i podpisana. Na przykład „Odłączone podpisy” nie są traktowane jako bezpieczne.</p>
|
||||
|
||||
<p>OpenPGP samo w sobie nie jest niebezpieczne. Większość publicznie omawianych problemów związanych z bezpieczeństwem OpenPGP tak naprawdę wynika ze złej użyteczności lub złej implementacji narzędzi, lub aplikacji (lub obu). Szczególnie ważne jest rozróżnienie pomiędzy OpenPGP, standardem szyfrowania IETF, a GnuPG (GPG), narzędziem wiersza poleceń implementującym OpenPGP. Wiele publicznych komentarzy krytycznych na temat OpenPGP tak naprawdę omawia GnuPG, którego Delta Chat nigdy nie używał. Delta Chat korzysta raczej z implementacji OpenPGP Rust <a href="https://github.com/rpgp/rpgp">rPGP</a>, dostępnej jako <a href="https://crates.io/crates/pgp">niezależny pakiet „pgp”</a> i poddanej <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">audytowi bezpieczeństwa w 2019 roku</a>.</p>
|
||||
<p>OpenPGP samo w sobie nie jest niebezpieczne. Większość publicznie omawianych problemów związanych z bezpieczeństwem OpenPGP tak naprawdę wynika ze złej użyteczności lub złej implementacji narzędzi, lub aplikacji (lub obu). Szczególnie ważne jest rozróżnienie pomiędzy OpenPGP, standardem szyfrowania IETF, a GnuPG (GPG), narzędziem wiersza poleceń implementującym OpenPGP. Wiele publicznych komentarzy krytycznych na temat OpenPGP tak naprawdę omawia GnuPG, którego Delta Chat nigdy nie używał. Delta Chat korzysta raczej z implementacji OpenPGP Rust <a href="https://github.com/rpgp/rpgp">rPGP</a>, dostępnej jako <a href="https://crates.io/crates/pgp">niezależny pakiet „pgp”</a> i poddanej <a href="#security-audits">audytowi bezpieczeństwa w 2019 i 2024 roku</a>.</p>
|
||||
|
||||
<p>Naszym celem, wraz z innymi wdrażającymi OpenPGP, jest dalsza poprawa parametrów bezpieczeństwa poprzez wdrożenie <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-crypto-refresh/">nowego IETF OpenPGP Crypto-Refresh</a>, który na szczęście został przyjęty latem 2023 roku.</p>
|
||||
|
||||
@@ -832,33 +896,11 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Tak.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>Nie.</p>
|
||||
|
||||
<p>Alternatywnie możesz zaimportować klucz ręcznie w „Ustawienia » Zaawansowane » Importuj tajne klucze”. Uwaga: Upewnij się, że klucz nie jest chroniony hasłem lub wcześniej usuń hasło.</p>
|
||||
<p>Delta Chat generuje bezpieczne klucze OpenPGP zgodnie ze specyfikacją Autocrypt 1.1. Możesz wyeksportować swój prywatny klucz, ale nie możesz zaimportować dodatkowych kluczy prywatnych.</p>
|
||||
|
||||
<p>Jeśli nie masz klucza lub nawet nie wiesz, że go potrzebujesz nie przejmuj się: Delta Chat generuje go w razie potrzeby, nie trzeba naciskać przycisku, aby to zrobić.</p>
|
||||
|
||||
<h3 id="nie-mogę-zaimportować-istniejącego-klucza-pgp-do-delta-chat">
|
||||
|
||||
|
||||
Nie mogę zaimportować istniejącego klucza PGP do Delta Chat. <a href="#nie-mogę-zaimportować-istniejącego-klucza-pgp-do-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Jest wielce prawdopodobne, że problemem jest klucz, który jest zaszyfrowany i/lub używa hasła. Takie klucze nie są obsługiwane przez Delta Chat. Usuń szyfrowanie i hasło i spróbować ponownie zaimportować klucz.</p>
|
||||
|
||||
<p>Innym częstym błędem jest nieprawidłowe zakończenie pliku.
|
||||
Użyj opancerzonego formatu ASCII i końcówki pliku <code class="language-plaintext highlighter-rouge">.asc</code>.</p>
|
||||
|
||||
<p>Rozsądny format, Delta Chat obsługuje popularne formaty kluczy prywatnych OpenPGP, jednak jest mało prawdopodobne, że będziemy obsługiwać 100% wszystkich kluczy prywatnych z dowolnych źródeł. To również nie jest głównym celem Delta Chat (w rzeczywistości, znaczna większość użytkowników Delta Chat nie będzie miała żadnego klucza przed rozpoczęciem korzystania z Delta). Jednak staramy się wspierać klucze prywatne z innych źródeł tak dobrze jak to tylko możliwe.</p>
|
||||
|
||||
<p>Usunięcie hasła z klucza prywatnego będzie się różnić w zależności od
|
||||
oprogramowania używanego do zarządzania kluczami PGP. Za pomocą programu Enigmail można ustawić
|
||||
hasło na pustą wartość w oknie zarządzania kluczami. Z GnuPG możesz ustawić je <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">z linii poleceń</a>.
|
||||
W przypadku innych programów można znaleźć rozwiązanie online.</p>
|
||||
<p>Generalnie nie zalecamy ani nie oferujemy użytkownikom wykonywania ręcznego zarządzania kluczami. Chcemy się upewnić, że audyty bezpieczeństwa mogą skupić się na kilku sprawdzonych algorytmach kryptograficznych, a nie na pełnym zakresie możliwych algorytmów dozwolonych w OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -868,7 +910,18 @@ W przypadku innych programów można znaleźć rozwiązanie online.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Projekt Delta Chat przeszedł cztery niezależne audyty bezpieczeństwa i jedną niezależną analizę bezpieczeństwa, od najnowszego do najstarszego:</p>
|
||||
<p>Tak, wielokrotnie.
|
||||
Projekt Delta Chat stale przechodzi niezależne audyty bezpieczeństwa i analizy,
|
||||
od najnowszych do najstarszych:</p>
|
||||
|
||||
<p>W grudniu 2024 r. <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET</a> wykonała ocenę rPGP zleconą przez <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a>. rPGP służy jako kompleksowy silnik szyfrowania <a href="https://openpgp.org">OpenPGP</a> w Delta Chat. Wydano dwa ostrzeżenia związane z wynikami tego audytu:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">„Paniki przy nieprawidłowym wprowadzaniu niezaufanych danych wejściowych”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">„Potencjalne wyczerpanie zasobów podczas obsługi niezaufanych wiadomości”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>Problemy opisane w tych ostrzeżeniach zostały naprawione i są częścią wydań Delta Chat we wszystkich sklepach z aplikacjami od grudnia 2024 r.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -904,7 +957,7 @@ W przypadku innych programów można znaleźć rozwiązanie online.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Tak. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Tak. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -945,7 +998,7 @@ W przypadku innych programów można znaleźć rozwiązanie online.</p>
|
||||
<p>W systemie <strong>iOS</strong> upewnij się, że jest przydzielony dostęp do opcji „Ustawienia » Aplikacje » Delta Chat » <strong>Sieć lokalna</strong>”</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>W systemie <strong>macOS</strong> włącz „Ustawienia systemowe » Prywatność i bezpieczeństwo » <strong>Sieć lokalna</strong> » Delta Chat”</p>
|
||||
<p>W systemie <strong>macOS</strong> włącz „Preferencje systemowe » Ochrona i prywatność » <strong>Sieć lokalna</strong> » Delta Chat”</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Twój system może mieć „zaporę ogniową”, o której wiadomo, że powoduje problemy (szczególnie w systemie Windows).
|
||||
@@ -954,6 +1007,9 @@ W przypadku innych programów można znaleźć rozwiązanie online.</p>
|
||||
<li>
|
||||
<p><strong>Sieci dla gości</strong> mogą nie pozwalać urządzeniom na komunikację między sobą. Jeśli to możliwe, korzystaj z sieci innej niż gość.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Jeśli nadal masz problemy z korzystaniem z tej samej sieci, spróbuj otworzyć <strong>Hotspot</strong> na jednym urządzeniu i połączyć się z tą siecią Wi-Fi z drugiego urządzenia</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Upewnij się, że na urządzeniu docelowym jest <strong>wystarczająca ilość miejsca</strong></p>
|
||||
</li>
|
||||
@@ -988,6 +1044,20 @@ W przypadku innych programów można znaleźć rozwiązanie online.</p>
|
||||
<li>Jesteś teraz zsynchronizowany i możesz używać obu urządzeń do wysyłania i odbierania wiadomości zaszyfrowanych end-to-end w komunikacji ze swoimi partnerami.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="czy-usuwanie-przypinanie-archiwizowanie-zapisywanie-wyciszanie-itp-jest-synchronizowane-ze-wszystkimi-urządzeniami">
|
||||
|
||||
|
||||
Czy usuwanie, przypinanie, archiwizowanie, zapisywanie, wyciszanie itp. jest synchronizowane ze wszystkimi urządzeniami? <a href="#czy-usuwanie-przypinanie-archiwizowanie-zapisywanie-wyciszanie-itp-jest-synchronizowane-ze-wszystkimi-urządzeniami" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Tak.</p>
|
||||
|
||||
<p>Jeśli np. usuniesz czat lub wiadomość z telefonu, zostaną one usunięte z aplikacji na komputer, gdy tylko ponownie będą online.</p>
|
||||
|
||||
<p>Wyjątkiem jest <a href="#delold">usuwanie starych wiadomości z urządzenia</a>, ponieważ różne urządzenia mogą mieć różne pojemności pamięci i ustawienia specyficzne dla systemu, takie jak dźwięki powiadomień.</p>
|
||||
|
||||
<h3 id="czy-są-jakieś-plany-wprowadzenia-klienta-web-delta-chat">
|
||||
|
||||
|
||||
@@ -1318,17 +1388,17 @@ jeśli chcesz sprawdzić, czy Twoje poświadczenia są przetwarzane w bezpieczny
|
||||
|
||||
<p>Niektórzy używają Delta Chat jako zwykłego klienta poczty e-mail i chcą używać folderu Skrzynka odbiorcza dla swojej poczty zamiast folderu DeltaChat. Jeśli wyłączysz opcję „Oglądaj folder DeltaChat”, powinieneś również wyłączyć opcję „Automatyczne przenoszenie do folderu DeltaChat”. W przeciwnym razie usuwanie wiadomości lub konfiguracja wielu urządzeń może nie działać poprawnie.</p>
|
||||
|
||||
<h3 id="czy-delta-chat-jest-kompatybilny-z-protonmail--tutanota--criptext">
|
||||
<h3 id="czy-delta-chat-jest-kompatybilny-z-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
Czy Delta Chat jest kompatybilny z Protonmail / Tutanota / Criptext? <a href="#czy-delta-chat-jest-kompatybilny-z-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
Czy Delta Chat jest kompatybilny z Proton Mail / Tutanota / Criptext? <a href="#czy-delta-chat-jest-kompatybilny-z-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>I tak i nie.</li>
|
||||
<li>Nie, nie możesz używać swojego konta Protonmail, Tutanota lub Criptext z Delta Chat; nie oferują one odbierania poczty przez IMAP.</li>
|
||||
<li>Nie, nie możesz używać swojego konta Proton Mail, Tutanota lub Criptext z Delta Chat; nie oferują one odbierania poczty przez IMAP.</li>
|
||||
<li>W każdym przypadku możesz użyć Delta Chat do wysyłania wiadomości do osób, które używają Protonmail, Tutanota lub Criptext. Te wiadomości nie będą jednak szyfrowane metodą end-to-end. Szyfrowanie typu end-to-end, które oferują ci dostawcy, nie jest kompatybilne z <a href="https://autocrypt.org/">Autocrypt</a> stosowanym standardowo w Delta Chat.</li>
|
||||
<li>Delta Chat może zaszyfrować metodą end-to-end za pośrednictwem dowolnego dostawcy poczty e-mail z dowolną <a href="https://autocrypt.org/dev-status.html">aplikacją e-mail z włączoną funkcją Autocrypt</a>.</li>
|
||||
</ul>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="pt"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#o-que-é-o-delta-chat">O que é o Delta Chat</a>
|
||||
<ul>
|
||||
<li><a href="#como-encontro-as-pessoas-para-conversar">Como encontro as pessoas para conversar?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#quem-consegue-ver-a-imagem-do-meu-perfil">Quem consegue ver a imagem do meu perfil?</a></li>
|
||||
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li>
|
||||
<li><a href="#what-do-pinning-muting-and-archiving-mean">What do Pinning, Muting and Archiving mean?</a></li>
|
||||
<li><a href="#save">How do “Saved Messages” work?</a></li>
|
||||
<li><a href="#what-does-the-green-dot-mean">What does the green dot mean?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li>
|
||||
<li><a href="#importkey">Posso reutilizar minha chave privada existente?</a></li>
|
||||
<li><a href="#eu-não-posso-importar-minha-chave-pgp-existente-para-o-delta-chat">Eu não posso importar minha chave PGP existente para o Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#posso-usar-o-delta-chat-em-vários-dispositivos-ao-mesmo-tempo">Posso usar o Delta Chat em vários dispositivos ao mesmo tempo?</a></li>
|
||||
<li><a href="#troubleshooting">Troubleshooting</a></li>
|
||||
<li><a href="#backup">Manual Transfer</a></li>
|
||||
<li><a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices?</a></li>
|
||||
<li><a href="#existe-algum-plano-para-a-introdução-de-um-cliente-web-para-delta-chat">Existe algum plano para a introdução de um cliente Web para Delta Chat?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#para-que-serve-o-ajuste-enviar-cópia-para-si-mesmo">Para que serve o ajuste “Enviar cópia para si mesmo”?</a></li>
|
||||
<li><a href="#por-que-eu-posso-escolher-assistir-à-pasta-enviado">Por que eu posso escolher assistir à pasta “Enviado”?</a></li>
|
||||
<li><a href="#por-que-eu-posso-escolher-não-observar-a-pasta-deltachat">Por que eu posso escolher não observar a pasta DeltaChat?</a></li>
|
||||
<li><a href="#o-delta-chat-é-compatível-com-protonmail--tutanota--criptext">O Delta Chat é compatível com Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#o-delta-chat-é-compatível-com-proton-mail--tutanota--criptext">O Delta Chat é compatível com Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">How can I delete my account?</a></li>
|
||||
<li><a href="#estou-interessado-nos-detalhes-técnicos-pode-me-dizer-mais">Estou interessado nos detalhes técnicos. Pode me dizer mais?</a></li>
|
||||
<li><a href="#where-can-my-friends-find-delta-chat">Where can my friends find Delta Chat?</a></li>
|
||||
@@ -182,15 +184,20 @@ Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If a message comes from an unknown contact, it appears as a <strong>request</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>If a message comes from an unknown contact, it appears as a <strong>request</strong>. You
|
||||
need to accept the request before you can reply.</li>
|
||||
<li>You can also “delete” it if you don’t want to chat with them for now. This
|
||||
does <em>not</em> delete the message on the server, only on your device. So you can
|
||||
still deal with the message in a different mail app.</li>
|
||||
<li>If you delete a request, future messages from that contact will still appear
|
||||
<li>
|
||||
<p>You need to <strong>accept</strong> the request before you can reply.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>You can also <strong>delete</strong> it if you don’t want to chat with them for now.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you delete a request, future messages from that contact will still appear
|
||||
as message request, so you can change your mind. If you really don’t want to
|
||||
receive messages from this person, consider <em>blocking</em> them.</li>
|
||||
receive messages from this person, consider <strong>blocking</strong> them.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="dá-para-mandar-imagens-vídeos-e-outros-anexos-pelo-delta-chat">
|
||||
@@ -300,6 +307,41 @@ Archived chats remain accessible above the chat list or via search.</p>
|
||||
|
||||
<p>To use the functions, long tap or right click a chat in the chat list.</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
How do “Saved Messages” work? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Saved Messages</strong> is a chat that you can use to easily remember and find messages.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In any chat, long tap or right click a message and select <strong>Save</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Saved messages are marked by the symbol
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
next to the timestamp</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Later, open the “Saved Messages” chat - and you will see the saved messages there.
|
||||
By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Messages stay saved even if they are edited or deleted -
|
||||
may it be by <a href="#edit">sender</a>, by <a href="#delold">device cleanup</a> or by <a href="#ephemeralmsgs">disappearing messages of other chats</a>.</p>
|
||||
|
||||
<h3 id="what-does-the-green-dot-mean">
|
||||
|
||||
|
||||
@@ -308,25 +350,53 @@ Archived chats remain accessible above the chat list or via search.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>You can sometimes see a <strong>green dot</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" />
|
||||
next to the avatar of a contact.
|
||||
It means they were <strong>recently seen</strong> in the last 10 minutes:</p>
|
||||
|
||||
<ul>
|
||||
<li>Since Delta Chat 1.34 you can sometimes see a “green dot” next to the avatar
|
||||
of a contact. It means they were “recently seen”.</li>
|
||||
<li>In detail: it means, that in the last 10 minutes, Delta Chat has seen them:
|
||||
<ul>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>or because they sent data to your Delta Chat app by using a
|
||||
<a href="#webxdc">webxdc app</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>So this is not a real time online status - and if someone doesn’t answer
|
||||
right away even though they seem to be online, don’t worry and give them some
|
||||
space ;-)</li>
|
||||
<li>On the other hand, others will not always “see that you are online”. If you
|
||||
have turned off read receipts, they will not see the green dot until you
|
||||
message them or write to a group they’re in as well.</li>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>because they edit or delete a message in a chat shared with you,</li>
|
||||
<li>or because they use an <a href="#webxdc">app</a> in a chat shared with you.</li>
|
||||
</ul>
|
||||
|
||||
<p>So this is not a real time online status -
|
||||
and if someone doesn’t answer right away even though they seem to be online,
|
||||
don’t worry and give them some space :)</p>
|
||||
|
||||
<p>On the other hand, others will not always “see that you are online”.
|
||||
If you have turned off read receipts,
|
||||
they will not see the green dot
|
||||
until one of the above conditions are met.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Correct typos and delete messages after sending <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can edit the text of your messages after sending.
|
||||
For that, long tap or right click the message and select <strong>Edit</strong>
|
||||
or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have sent a message accidentally,
|
||||
from the same menu, select <strong>Delete</strong> and then <strong>Delete for Everyone</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>While edited messages will have the word “Edited” next to the timestamp,
|
||||
deleted messages will be removed without a marker in the chat.
|
||||
Notifications are not sent and there is no time limit.</p>
|
||||
|
||||
<p>Note, that the original message may still be received by chat members
|
||||
who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -597,16 +667,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -619,14 +689,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
@@ -641,7 +712,7 @@ would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
<p>Delta Chat is a free and open source decentralized messenger with free server choice,
|
||||
but we want users to reliably experience “instant delivery” of messages,
|
||||
like they experience from Whatsapp, Signal or Telegram apps,
|
||||
like they experience from WhatsApp, Signal or Telegram apps,
|
||||
without asking questions up-front that are more suited to expert users or developers.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
@@ -880,14 +951,14 @@ if the whole message is properly encrypted and signed.
|
||||
For example, “Detached signatures” are not treated as secure.</p>
|
||||
|
||||
<p>OpenPGP is not insecure by itself.
|
||||
Most publically discussed OpenPGP security problems
|
||||
Most publicly discussed OpenPGP security problems
|
||||
actually stem from bad usability or bad implementations of tools or apps (or both).
|
||||
It is particularly important to distinguish between OpenPGP, the IETF encryption standard,
|
||||
and GnuPG (GPG), a command line tool implementing OpenPGP.
|
||||
Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used.
|
||||
Delta Chat rather uses the OpenPGP Rust implementation <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
available as <a href="https://crates.io/crates/pgp">an independent “pgp” package</a>,
|
||||
and <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">security-audited in 2019</a>.</p>
|
||||
and <a href="#security-audits">security-audited in 2019 and 2024</a>.</p>
|
||||
|
||||
<p>We aim, along with other OpenPGP implementors,
|
||||
to further improve security characteristics by implementing the
|
||||
@@ -1136,7 +1207,7 @@ but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</
|
||||
that are safe against compromised servers or corrupted networks.
|
||||
Signal and most other PFS-supporting messengers do not provide
|
||||
a practical scheme for protecting chat groups from network attacks
|
||||
which are arguably more worrysome
|
||||
which are arguably more worrisome
|
||||
than a potential attacker who seizes your phone and private encryption setup
|
||||
but somehow not your messages, yet has a full record of all
|
||||
past encrypted messages.</p>
|
||||
@@ -1152,42 +1223,14 @@ which has been <a href="https://delta.chat/assets/blog/2019-first-security-revie
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Sim.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>No.</p>
|
||||
|
||||
<p>Alternatively, you can import the key manually in “Settings -> Advanced settings -> Import secret keys”.
|
||||
Caution: Make sure the key is not protected by a password, or remove the password beforehand.</p>
|
||||
<p>Delta Chat generates secure OpenPGP keys according to the Autocrypt specification 1.1.
|
||||
You can export your private key but you can not import additional private keys.</p>
|
||||
|
||||
<p>If you don’t have a key or don’t even know you would need one - don’t worry: Delta Chat generates keys as needed, you don’t have to hit a button for it.</p>
|
||||
|
||||
<h3 id="eu-não-posso-importar-minha-chave-pgp-existente-para-o-delta-chat">
|
||||
|
||||
|
||||
Eu não posso importar minha chave PGP existente para o Delta Chat. <a href="#eu-não-posso-importar-minha-chave-pgp-existente-para-o-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>A causa mais provável é que sua chave está criptografada e/ou usa
|
||||
uma senha. Tais chaves não são suportadas pelo Delta Chat. Você poderia remover a
|
||||
criptografia por senha e a senha e tentar a importação novamente.</p>
|
||||
|
||||
<p>Another common error is having the wrong file ending.
|
||||
Use the ASCII armored format and an <code class="language-plaintext highlighter-rouge">.asc</code> file ending.</p>
|
||||
|
||||
<p>O Delta Chat apoia formatos comuns de chave privada OpenPGP, porém,
|
||||
é improvável que chaves privadas de todas as fontes sejam totalmente suportadas. Isso
|
||||
não é o objetivo principal do Delta Chat. Na verdade, a maioria dos novos usuários
|
||||
não terá nenhuma chave antes de usar o Delta Chat.
|
||||
Tentamos, entretanto, apoiar chaves privadas do maior número possível de fontes.</p>
|
||||
|
||||
<p>Eliminar a senha da chave privada dependerá do
|
||||
software usado para gerenciar suas chaves PGP. Com o Enigmail, você pode configurar seu
|
||||
senha para um valor vazio na janela Gerenciamento de chaves. Com GnuPG você pode definir
|
||||
ele <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">através do comando
|
||||
linha</a>.
|
||||
Para outros programas, você deveria achar uma solução online.</p>
|
||||
<p>In general, we do not recommend or offer users to perform manual key management.
|
||||
We want to ensure that security audits can focus on a few proven cryptographic algorithms
|
||||
instead of the full breadth of possible algorithms allowed with OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1197,10 +1240,25 @@ Para outros programas, você deveria achar uma solução online.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The Delta Chat project underwent four independent security audits and one
|
||||
independent security analysis, from most recent to older:</p>
|
||||
<p>Yes, multiple times.
|
||||
The Delta Chat project continuously undergoes independent security audits and analysis,
|
||||
from most recent to older:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
|
||||
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
|
||||
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
|
||||
Two advisories were released related to the findings of this audit:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panics on Malformed Untrusted Input”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potential Resource Exhaustion when handling Untrusted Messages”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>The issues outlined in these advisories have been fixed and are part of Delta Chat
|
||||
releases on all appstores since December 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2024 March, we received a deep security analysis from the Applied Cryptography
|
||||
research group at ETH Zuerich and addressed all raised issues.
|
||||
@@ -1266,7 +1324,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Sim. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Sim. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1323,6 +1381,10 @@ which is known to cause problems (especially on Windows).
|
||||
<li>
|
||||
<p><strong>Guest Networks</strong> may not allow devices to communicate with each other.
|
||||
If possible, use a non-guest network.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you still have troubles using the same network,
|
||||
try to open <strong>Mobile Hotspot</strong> on one device and join that Wi-Fi from the other one</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ensure there is <strong>enough storage</strong> on the destination device</p>
|
||||
@@ -1370,6 +1432,23 @@ help you.</li>
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">
|
||||
|
||||
|
||||
Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices? <a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Sim.</p>
|
||||
|
||||
<p>If you e.g. delete a chat or a message from your phone,
|
||||
it will be deleted on your desktop as soon as it comes online again.</p>
|
||||
|
||||
<p>Notable exceptions are <a href="#delold">Delete old messages from Device</a>,
|
||||
as different devices may have different storage capacities,
|
||||
and system specific settings as notification sounds.</p>
|
||||
|
||||
<h3 id="existe-algum-plano-para-a-introdução-de-um-cliente-web-para-delta-chat">
|
||||
|
||||
|
||||
@@ -1491,7 +1570,7 @@ will not get interrupted by a video chat invite.</li>
|
||||
link in the settings.</li>
|
||||
<li>For example, to use the flagship Jitsi Meet instance, you could enter
|
||||
<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$ROOM</code>. The <code class="language-plaintext highlighter-rouge">$ROOM</code> variable will be a random value;
|
||||
this way, you will have a new random jitsi room every time you call someone.</li>
|
||||
this way, you will have a new random Jitsi room every time you call someone.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="what-are-broadcast-lists-and-how-can-i-use-them">
|
||||
@@ -1503,7 +1582,7 @@ this way, you will have a new random jitsi room every time you call someone.</li
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>With a Broadcast List you can send a message to many recipents at once; when
|
||||
<li>With a Broadcast List you can send a message to many recipients at once; when
|
||||
they reply to you, you get the reply in your direct 1:1 chat with them. The
|
||||
recipients can’t see each other.</li>
|
||||
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
|
||||
@@ -1810,17 +1889,17 @@ pasta para seus correios, em vez da pasta DeltaChat. Se você desativar o “Obs
|
||||
pasta DeltaChat”, você também deve desativar “mover mensagens de conversa para DeltaChat”.
|
||||
Caso contrário, apagar mensagens ou configurações de vários dispositivos pode não funcionar corretamente.</p>
|
||||
|
||||
<h3 id="o-delta-chat-é-compatível-com-protonmail--tutanota--criptext">
|
||||
<h3 id="o-delta-chat-é-compatível-com-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
O Delta Chat é compatível com Protonmail / Tutanota / Criptext? <a href="#o-delta-chat-é-compatível-com-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
O Delta Chat é compatível com Proton Mail / Tutanota / Criptext? <a href="#o-delta-chat-é-compatível-com-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Yes and No.</li>
|
||||
<li>No, you can not use your Protonmail, Tutanota, or Criptext account with Delta
|
||||
<li>No, you can not use your Proton Mail, Tutanota, or Criptext account with Delta
|
||||
Chat; they do not offer receiving mails via IMAP.</li>
|
||||
<li>In any case you can use Delta Chat to send Messages to people who use
|
||||
Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end
|
||||
@@ -1995,7 +2074,7 @@ mesmo perto.</p>
|
||||
Freiburg (Germany), and is distributed to more than a dozen contributors world-wide.</p>
|
||||
|
||||
<p>Please see <a href="https://delta.chat/pt/contribute">Delta Chat Contribution channels</a>
|
||||
for both monetary and and other contribution possibilities.</p>
|
||||
for both monetary and other contribution possibilities.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="ru"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#что-такое-delta-chat">Что такое Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#как-мне-найти-людей-для-общения">Как мне найти людей для общения?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#кто-видит-изображение-моего-профиля">Кто видит изображение моего профиля?</a></li>
|
||||
<li><a href="#signature">Можно ли добавить информацию о себе/подпись/статус/девиз в Delta Chat?</a></li>
|
||||
<li><a href="#что-означают-закрепить-отключить-уведомления-и-отправить-в-архив">Что означают: Закрепить, Отключить уведомления и Отправить в архив?</a></li>
|
||||
<li><a href="#save">Как работают “Сохраненные сообщения”?</a></li>
|
||||
<li><a href="#что-означает-зеленая-точка">Что означает зеленая точка?</a></li>
|
||||
<li><a href="#edit">Исправление опечаток и удаление сообщений после отправки</a></li>
|
||||
<li><a href="#ephemeralmsgs">Как работают исчезающие сообщения?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Поддерживает ли Delta Chat совершенную прямую секретность (Perfect forward secrecy, PFS)?</a></li>
|
||||
<li><a href="#является-ли-сквозное-шифрование-delta-chat-таким-же-безопасным-как-signal">Является ли сквозное шифрование Delta Chat таким же безопасным как Signal?</a></li>
|
||||
<li><a href="#importkey">Можно ли повторно использовать существующий секретный ключ?</a></li>
|
||||
<li><a href="#я-не-могу-импортировать-мой-существующий-ключ-pgp-в-delta-chat">Я не могу импортировать мой существующий ключ PGP в Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">Проходил ли Delta Chat независимую проверку на наличие уязвимостей безопасности?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#можно-ли-использовать-delta-chat-на-нескольких-устройствах-одновременно">Можно ли использовать Delta Chat на нескольких устройствах одновременно?</a></li>
|
||||
<li><a href="#устранение-неполадок">Устранение неполадок</a></li>
|
||||
<li><a href="#backup">Ручная передача</a></li>
|
||||
<li><a href="#синхронизируются-ли-функции-удаления-закрепления-архивирования-сохранения-отключения-звука-и-тд-на-всех-устройствах">Синхронизируются ли функции удаления, закрепления, архивирования, сохранения, отключения звука и т.д. на всех устройствах?</a></li>
|
||||
<li><a href="#есть-ли-какие-либо-планы-по-внедрению-веб-клиента-delta-chat">Есть ли какие-либо планы по внедрению веб-клиента Delta Chat?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#для-чего-предназначена-настройка-отправлять-копию-себе">Для чего предназначена настройка “Отправлять копию себе”?</a></li>
|
||||
<li><a href="#для-чего-предназначена-настройка-следить-за-папкой-исходящие">Для чего предназначена настройка “Следить за папкой Исходящие”?</a></li>
|
||||
<li><a href="#почему-я-могу-отключить-следить-за-папкой-delta-chat">Почему я могу отключить “Следить за папкой Delta Chat”?</a></li>
|
||||
<li><a href="#совместим-ли-delta-chat-с-protonmail--tutanota--criptext">Совместим ли Delta Chat с Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#совместим-ли-delta-chat-с-proton-mail--tutanota--criptext">Совместим ли Delta Chat с Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">Как я могу удалить свой аккаунт?</a></li>
|
||||
<li><a href="#меня-интересуют-технические-детали-можете-рассказать-больше">Меня интересуют технические детали. Можете рассказать больше?</a></li>
|
||||
<li><a href="#где-мои-друзья-могут-найти-delta-chat">Где мои друзья могут найти Delta Chat?</a></li>
|
||||
@@ -118,7 +120,7 @@
|
||||
<p>Delta Chat — надежное, децентрализованное и безопасное приложение для обмена сообщениями,
|
||||
доступное для мобильных и настольных платформ.</p>
|
||||
|
||||
<p>Delta Chat напоминает Whatsapp или Telegram, но его можно использовать и приложение электронной почты.
|
||||
<p>Delta Chat напоминает Whatsapp или Telegram, но его можно использовать и как приложение электронной почты.
|
||||
Вы можете анонимно зарегистрироваться на различных <a href="https://delta.chat/chatmail">совместимых с chatmail серверах</a>,
|
||||
которые представляют собой минимальные почтовые серверы, оптимизированные для быстрой и безопасной работы.
|
||||
Или вы можете использовать обычные почтовые серверы и существующий почтовый аккаунт,
|
||||
@@ -134,7 +136,7 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Чтобы безопасно настроить связь с другими <a href="#howtoe2ee">отсканируйте QR-код приглашения
|
||||
<p>Чтобы безопасно настроить связь с другими, <a href="#howtoe2ee">отсканируйте QR-код приглашения
|
||||
или поделитесь ссылкой-приглашением</a>.
|
||||
Это необходимо при использовании профиля чата на основе почты chatmail (по умолчанию),
|
||||
потому что серверы chatmail отклоняют незашифрованные исходящие сообщения.</p>
|
||||
@@ -182,15 +184,16 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Если сообщение поступает от неизвестного контакта, оно отображается как <strong>запрос</strong>.</p>
|
||||
|
||||
<p>— Нужно <strong>принять</strong> запрос, прежде чем ответить.</p>
|
||||
|
||||
<p>— Вы также можете <strong>удалить</strong> его, если не хотите общаться с этим человеком.</p>
|
||||
|
||||
<ul>
|
||||
<li>Если сообщение приходит от неизвестного контакта, оно отображается как <strong>запрос</strong>. Чтобы
|
||||
ответить, вам необходимо сначала принять запрос.</li>
|
||||
<li>Вы также можете “удалить” его, если не хотите общаться с ним в данный момент. Это
|
||||
<em>не</em> удаляет сообщение с сервера, а только с вашего устройства. Таким образом,
|
||||
вы все еще можете обработать сообщение в другом почтовом клиенте.</li>
|
||||
<li>Если вы удалите запрос, будущие сообщения от этого контакта по-прежнему будут отображаться
|
||||
как запрос, поэтому вы можете изменить свое решение. Если вы действительно не хотите
|
||||
получать сообщения от этого человека, подумайте о его блокировке.</li>
|
||||
<li>Если вы удалите запрос, будущие сообщения от этого контакта все равно будут появляться
|
||||
как запрос сообщения, так что вы можете передумать. Если вы действительно не хотите
|
||||
получать сообщения от этого человека, подумайте о его <strong>блокировке</strong>.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="поддерживает-ли-delta-chat-изображения-видео-и-другие-вложения">
|
||||
@@ -203,7 +206,7 @@
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Да. Помимо простого текста, все вложения электронной почты отображаются как отдельные сообщения. Исходящие сообщения автоматически получают необходимые вложения.</p>
|
||||
<p>Да. Изображения, видео, файлы, голосовые сообщения и т.д. обрабатываются как обычно.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Для лучшей производительности изображения по умолчанию оптимизируются и отправляются в меньшем размере, но вы можете отправить их как “файл”, чтобы сохранить оригинал.</p>
|
||||
@@ -304,6 +307,41 @@
|
||||
|
||||
<p>Чтобы использовать функции, нажмите долгим нажатием или щелкните правой кнопкой мыши по чату в списке чатов.</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
Как работают “Сохраненные сообщения”? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Сохраненные сообщения</strong> - это чат, который можно использовать, чтобы легко запоминать и находить сообщения.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>В любом чате нажмите и удерживайте или щелкните правой кнопкой мыши на сообщении и выберите <strong>Сохранить</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Сохраненные сообщения отмечаются символом
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Иконка сохранения" />
|
||||
рядом с меткой времени</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Затем, зайдите в чат “Сохраненные сообщения” - и вы увидите там все сохраненные сообщения.
|
||||
Нажав <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Значок со стрелкой вправо" />,
|
||||
вы можете вернуться к этому сообщению в исходном чате</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Наконец, вы также можете использовать “Сохраненные сообщения” для создания <strong>личных заметок</strong> - откройте чат, введите что-то, добавьте фото или голосовое сообщение и т.д.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Поскольку “Сохраненные сообщения” синхронизируются, они могут стать удобным способом передачи данных между устройствами</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Сообщения остаются сохраненными, даже если они были отредактированы или удалены -
|
||||
будь то <a href="#edit">отправителем</a>, <a href="#delold">очисткой устройства</a> или <a href="#ephemeralmsgs">исчезающими сообщениями из других чатов</a>.</p>
|
||||
|
||||
<h3 id="что-означает-зеленая-точка">
|
||||
|
||||
|
||||
@@ -312,25 +350,53 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Иногда вы можете видеть <strong>зеленую точку</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" />
|
||||
рядом с аватаром контакта.
|
||||
Это означает, что их <strong>недавно видели</strong> за последние 10 минут:</p>
|
||||
|
||||
<ul>
|
||||
<li>Начиная с Delta Chat 1.34, вы можете иногда видеть “зеленую точку” рядом с аватаром
|
||||
контакта. Это означает, что они были “недавно активны”.</li>
|
||||
<li>Подробнее: это означает, что в течение последних 10 минут Delta Chat обнаружил их:
|
||||
<ul>
|
||||
<li>либо потому, что они отправили вам личное сообщение,</li>
|
||||
<li>либо потому, что они написали что-то в группу, участником которой вы оба являетесь,</li>
|
||||
<li>либо потому, что они отправили вам подтверждение о прочтении сообщения, которое вы написали,</li>
|
||||
<li>либо потому, что они отправили данные в ваше приложение Delta Chat, используя
|
||||
<a href="#webxdc">webxdc app</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Таким образом, это не реальный онлайн-статус в режиме реального времени - и если кто-то не отвечает
|
||||
сразу же, даже если кажется, что они онлайн, не волнуйтесь и дайте им немного
|
||||
свободы ;-)</li>
|
||||
<li>С другой стороны, другие не всегда будут “видеть, что вы онлайн”. Если вы
|
||||
отключили подтверждения о прочтении, они не увидят зеленую точку, пока вы
|
||||
не отправите им сообщение или не напишете в группу, в которой они также являются участником.</li>
|
||||
<li>либо потому, что они отправили вам сообщение напрямую,</li>
|
||||
<li>либо потому, что они написали что-то в группе, где вы оба являетесь участниками,</li>
|
||||
<li>либо потому, что они подтвердили прочтение вашего сообщения,</li>
|
||||
<li>либо потому, что они изменили или удалили сообщение в общем чате,</li>
|
||||
<li>либо потому, что они используют <a href="#webxdc">приложение</a> в чате, который вы оба используете.</li>
|
||||
</ul>
|
||||
|
||||
<p>Так что это не статус в режиме реального времени -
|
||||
и если кто-то не отвечает сразу, даже если кажется, что он в сети,
|
||||
не волнуйтесь и дайте ему немного времени :)</p>
|
||||
|
||||
<p>С другой стороны, другие не всегда “увидят, что вы в сети”.
|
||||
Если вы отключили уведомления о прочтении,
|
||||
они не увидят зеленую точку
|
||||
пока не будет выполнено одно из вышеуказанных условий.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Исправление опечаток и удаление сообщений после отправки <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Вы можете редактировать текст сообщений после отправки.
|
||||
Для этого нажмите и удерживайте или щелкните правой кнопкой мыши сообщение и выберите <strong>Редактировать</strong>
|
||||
или <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Редактировать" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Если вы отправили сообщение случайно,
|
||||
в том же меню выберите <strong>Удалить</strong> и затем <strong>Удалить для всех</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>При этом отредактированные сообщения будут иметь слово “Отредактировано” рядом с временной меткой,
|
||||
удаленные сообщения будут удалены без каких-либо маркеров в чате.
|
||||
Уведомления не отправляются, и нет ограничений по времени.</p>
|
||||
|
||||
<p>Обратите внимание, что исходное сообщение все еще может быть получено участниками чата
|
||||
которые могли уже ответить, переслать, сохранить, сделать скриншот или иным образом скопировать сообщение.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -600,16 +666,16 @@ Push-уведомления недоступны.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Приложение Delta Chat локально получает “токен устройства” и сохраняет его
|
||||
<p>Приложение Delta Chat локально получает “токен устройства” шифрует его и сохраняет
|
||||
на сервере <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Когда сервер <a href="https://delta.chat/chatmail">chatmail</a> получает электронную почту для пользователя Delta Chat
|
||||
он пересылает “токен устройства” центральному прокси-серверу уведомлений Delta Chat.</p>
|
||||
он пересылает “зашифрованный токен устройства” центральному прокси-серверу уведомлений Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Центральный прокси-сервер уведомлений Delta Chat пересылает
|
||||
“токен устройства” в соответствующую службу Push (Apple, Google и т. д.),
|
||||
<p>Центральный прокси-сервер уведомлений Delta Chat расшифровывает “токен устройства” и
|
||||
пересылает его в соответствующую службу Push (Apple, Google и т. д.),
|
||||
даже не зная IP-адрес или адрес электронной почты пользователей Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -622,14 +688,15 @@ Push-уведомления недоступны.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>По состоянию на май 2024 года серверы chatmail знают о “токенах устройства”,
|
||||
но мы планируем зашифровать эту информацию для прокси-сервера уведомлений
|
||||
так, чтобы сервер chatmail не смог получить доступ к токену устройства.</p>
|
||||
|
||||
<p>Центральный прокси-сервер уведомлений Delta Chat <a href="https://github.com/deltachat/notifiers">небольшой и полностью реализован на Rust</a>
|
||||
забывает о токенах устройств, как только Apple/Google/и т. д. обработали их,
|
||||
обычно за несколько миллисекунд.</p>
|
||||
|
||||
<p>Обратите внимание, что токен устройства шифруется между приложениями и прокси-сервером уведомлений,
|
||||
но не подписывается.
|
||||
Прокси-сервер уведомлений не получает доступ к адресам электронной почты, IP-адресам
|
||||
или криптографическим идентификационным данным устройства пользователя (токену).</p>
|
||||
|
||||
<p>В результате такого общего подхода к обеспечению конфиденциальности, даже захват почтового сервера chatmail,
|
||||
или полный захват центрального прокси-сервера уведомлений Delta Chat
|
||||
не раскроет конфиденциальную информацию, которой сервисы Push уже не обладают.</p>
|
||||
@@ -890,7 +957,7 @@ Autocrypt использует ограниченное и <a href="#openpgp-sec
|
||||
Многие публичные критические замечания по OpenPGP фактически касаются GnuPG, который Delta Chat никогда не использовал.
|
||||
Delta Chat вместо этого использует реализацию OpenPGP на Rust <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
доступную как <a href="https://crates.io/crates/pgp">независимый пакет “pgp”</a>,
|
||||
и <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">проверенную на безопасность в 2019 году</a>.</p>
|
||||
и <a href="#security-audits">проверенную на безопасность в 2019 и 2024 годах</a>.</p>
|
||||
|
||||
<p>Вместе с другими разработчиками OpenPGP мы стремимся,
|
||||
повысить характеристики безопасности путём реализации
|
||||
@@ -1155,42 +1222,14 @@ Signal и большинство других мессенджеров, подд
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Да.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>Нет.</p>
|
||||
|
||||
<p>Вместо этого, вы можете импортировать ключ вручную в разделе “Настройки -> Дополнительные параметры -> Импорт секретных ключей”.
|
||||
Предупреждение: Убедитесь, что ключ не защищён паролем, или удалите пароль заранее.</p>
|
||||
<p>Delta Chat генерирует безопасные ключи OpenPGP в соответствии со спецификацией Autocrypt 1.1.
|
||||
Вы можете экспортировать свой закрытый ключ, но не можете импортировать дополнительные закрытые ключи.</p>
|
||||
|
||||
<p>Если у вас нет ключа или вы даже не знали, что он вам нужен - не волнуйтесь: Delta Chat генерирует ключи по мере необходимости, вам не нужно для этого нажимать кнопку.</p>
|
||||
|
||||
<h3 id="я-не-могу-импортировать-мой-существующий-ключ-pgp-в-delta-chat">
|
||||
|
||||
|
||||
Я не могу импортировать мой существующий ключ PGP в Delta Chat. <a href="#я-не-могу-импортировать-мой-существующий-ключ-pgp-в-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Наиболее вероятная причина — это то, что ваш ключ зашифрован и/или имеет пароль.
|
||||
Delta Chat не поддерживает такие ключи.
|
||||
Вы можете снять шифрование пароля и пароль, а затем повторить попытку импорта.</p>
|
||||
|
||||
<p>Другая распространенная ошибка - неправильное расширение файла.
|
||||
Используйте формат ASCII armored и расширение файла <code class="language-plaintext highlighter-rouge">.asc</code>.</p>
|
||||
|
||||
<p>Delta Chat поддерживает распространённые форматы закрытых ключей OpenPGP, однако
|
||||
маловероятно, что мы будем поддерживать все закрытые ключи из любых источников. Это
|
||||
не является основной целью Delta Chat. На самом деле, подавляющее большинство пользователей
|
||||
Delta Chat не будут иметь никакого ключа, прежде чем они начнут использовать его.
|
||||
Однако мы стремимся поддерживать закрытые ключи из как можно большего числа источников.</p>
|
||||
|
||||
<p>Удаление пароля закрытого ключа будет отличаться в зависимости от
|
||||
программного обеспечения, используемого для управления ключами PGP. В Enigmail вы можете установить пустой
|
||||
пароль в окне управления ключами. В GnuPG вы можете установить его
|
||||
<a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">через командную
|
||||
строку</a>.
|
||||
Для других программ, вы можете найти решение в интернете.</p>
|
||||
<p>В целом, мы не рекомендуем и не предлагаем пользователям выполнять ручное управление ключами.
|
||||
Мы стремимся к тому, чтобы аудиты безопасности могли сосредоточиться на нескольких проверенных криптографических алгоритмах,
|
||||
а не на всем разнообразии возможных алгоритмов, доступных с OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1200,10 +1239,25 @@ Delta Chat не будут иметь никакого ключа, прежде
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Проект Delta Chat прошёл четыре независимых аудита безопасности и один
|
||||
независимый анализ безопасности, от самого последнего к более старому:</p>
|
||||
<p>Да, множество раз.
|
||||
Проект Delta Chat находится в постоянном режиме аудита безопасности и анализа,
|
||||
от последних до более ранних:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Декабрь 2024 года, <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">экспертиза rPGP, организованная
|
||||
NLNET</a> выполненная <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a>.
|
||||
rPGP является движком сквозного шифрования OpenPGP <a href="https://openpgp.org">OpenPGP</a> в Delta Chat.
|
||||
В результате этого аудита были подготовлены два отчета по безопасности:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Паника при обработке некорректных, недоверенных входных данных”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Возможная нехватка ресурсов при обработке непроверенных сообщений”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>Проблемы, описанные в этих рекомендациях, были исправлены и включены в релизы Delta Chat,
|
||||
во всех магазинах приложений с декабря 2024 года.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>В марте 2024 года мы получили подробный анализ безопасности от исследовательской группы
|
||||
Applied Cryptography в ETH Цюрихе и устранили все выявленные проблемы.
|
||||
@@ -1269,7 +1323,7 @@ Chat <a href="https://github.com/rpgp/rpgp">PGP</a> и
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Да. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Да. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1326,6 +1380,10 @@ Chat <a href="https://github.com/rpgp/rpgp">PGP</a> и
|
||||
<li>
|
||||
<p><strong>Гостевые сети</strong> могут блокировать взаимодействие между устройствами.
|
||||
Если возможно, используйте не гостевую сеть.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Если у вас всё ещё возникают проблемы с использованием одной и той же сети,
|
||||
попробуйте создать <strong>Мобильную точку доступа</strong> на одном устройстве и подключиться к этой сети Wi-Fi с другого устройства</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Убедитесь, что на устройстве-приемнике имеется <strong>достаточно места</strong></p>
|
||||
@@ -1373,6 +1431,23 @@ PIN-код разблокировки экрана, графический кл
|
||||
зашифрованных сквозным шифрованием сообщений с вашими собеседниками.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="синхронизируются-ли-функции-удаления-закрепления-архивирования-сохранения-отключения-звука-и-тд-на-всех-устройствах">
|
||||
|
||||
|
||||
Синхронизируются ли функции удаления, закрепления, архивирования, сохранения, отключения звука и т.д. на всех устройствах? <a href="#синхронизируются-ли-функции-удаления-закрепления-архивирования-сохранения-отключения-звука-и-тд-на-всех-устройствах" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Да.</p>
|
||||
|
||||
<p>Например, если вы удалите чат или сообщение со своего телефона,
|
||||
оно также будет удалено на вашем настольном компьютере, когда он подключится к интернету.</p>
|
||||
|
||||
<p>Исключениями из этого правила являются <a href="#delold">Удаление старых сообщений с устройства</a>,
|
||||
поскольку устройства могут иметь разные объёмы памяти,
|
||||
и системные настройки, характерные для каждого устройства, например, звуки оповещений.</p>
|
||||
|
||||
<h3 id="есть-ли-какие-либо-планы-по-внедрению-веб-клиента-delta-chat">
|
||||
|
||||
|
||||
@@ -1819,17 +1894,17 @@ Delta Chat необходим пароль, чтобы использовать
|
||||
папкой DeltaChat”, вы также должны отключить “Переместить сообщения чата в DeltaChat”.
|
||||
В противном случае удаление сообщений или настройки нескольких устройств могут не работать правильно.</p>
|
||||
|
||||
<h3 id="совместим-ли-delta-chat-с-protonmail--tutanota--criptext">
|
||||
<h3 id="совместим-ли-delta-chat-с-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
Совместим ли Delta Chat с Protonmail / Tutanota / Criptext? <a href="#совместим-ли-delta-chat-с-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
Совместим ли Delta Chat с Proton Mail / Tutanota / Criptext? <a href="#совместим-ли-delta-chat-с-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Да и нет.</li>
|
||||
<li>Нет, вы не можете использовать свой аккаунт Protonmail, Tutanota или Criptext с Delta
|
||||
<li>Нет, вы не можете использовать свой аккаунт Proton Mail, Tutanota или Criptext с Delta
|
||||
Chat; они не поддерживают получение писем через IMAP.</li>
|
||||
<li>В любом случае вы можете использовать Delta Chat для отправки сообщений людям, которые используют
|
||||
Protonmail, Tutanota, или Criptext. Однако, эти сообщения не будут зашифрованы
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 145 B |
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="sk"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#čo-je-to-delta-chat">Čo je to Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#ako-nájdem-ľudí-s-ktorými-môžem-chatovať">Ako nájdem ľudí s ktorými môžem chatovať?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#kto-vidí-moju-profilovú-fotku">Kto vidí moju profilovú fotku?</a></li>
|
||||
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li>
|
||||
<li><a href="#what-do-pinning-muting-and-archiving-mean">What do Pinning, Muting and Archiving mean?</a></li>
|
||||
<li><a href="#save">How do “Saved Messages” work?</a></li>
|
||||
<li><a href="#what-does-the-green-dot-mean">What does the green dot mean?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li>
|
||||
<li><a href="#importkey">Môžem znova použiť svoj existujúci súkromný kľúč?</a></li>
|
||||
<li><a href="#nemôžem-importovať-môj-existujúci-pgp-kľúč-do-delta-chat">Nemôžem importovať môj existujúci PGP kľúč do Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#môžem-používať-delta-chat-na-viacerých-zariadeniach-súčasne">Môžem používať Delta Chat na viacerých zariadeniach súčasne?</a></li>
|
||||
<li><a href="#troubleshooting">Troubleshooting</a></li>
|
||||
<li><a href="#backup">Manual Transfer</a></li>
|
||||
<li><a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices?</a></li>
|
||||
<li><a href="#máte-nejaké-plány-na-zavedenie-webového-klienta-delta-chat">Máte nejaké plány na zavedenie webového klienta Delta Chat?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#na-čo-je-dobré-nastavenie-odoslať-kópiu-sebe">Na čo je dobré nastavenie „Odoslať kópiu sebe“?</a></li>
|
||||
<li><a href="#prečo-si-môžem-vybrať-sledovanie-priečinka-odoslané">Prečo si môžem vybrať sledovanie priečinka „Odoslané“?</a></li>
|
||||
<li><a href="#prečo-sa-môžem-rozhodnúť-nesledovať-priečinok-deltachat">Prečo sa môžem rozhodnúť nesledovať priečinok DeltaChat?</a></li>
|
||||
<li><a href="#je-delta-chat-kompatibilný-s-protonmail--tutanota--criptext">Je Delta Chat kompatibilný s Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#je-delta-chat-kompatibilný-s-proton-mail--tutanota--criptext">Je Delta Chat kompatibilný s Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">How can I delete my account?</a></li>
|
||||
<li><a href="#zaujímajú-ma-technické-detaily-môžete-mi-povedať-viac">Zaujímajú ma technické detaily. Môžete mi povedať viac?</a></li>
|
||||
<li><a href="#where-can-my-friends-find-delta-chat">Where can my friends find Delta Chat?</a></li>
|
||||
@@ -182,15 +184,20 @@ Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If a message comes from an unknown contact, it appears as a <strong>request</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>If a message comes from an unknown contact, it appears as a <strong>request</strong>. You
|
||||
need to accept the request before you can reply.</li>
|
||||
<li>You can also “delete” it if you don’t want to chat with them for now. This
|
||||
does <em>not</em> delete the message on the server, only on your device. So you can
|
||||
still deal with the message in a different mail app.</li>
|
||||
<li>If you delete a request, future messages from that contact will still appear
|
||||
<li>
|
||||
<p>You need to <strong>accept</strong> the request before you can reply.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>You can also <strong>delete</strong> it if you don’t want to chat with them for now.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you delete a request, future messages from that contact will still appear
|
||||
as message request, so you can change your mind. If you really don’t want to
|
||||
receive messages from this person, consider <em>blocking</em> them.</li>
|
||||
receive messages from this person, consider <strong>blocking</strong> them.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="podporuje-delta-chat-obrázky-videá-a-iné-prílohy">
|
||||
@@ -201,13 +208,10 @@ receive messages from this person, consider <em>blocking</em> them.</li>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Áno. Okrem čistého textu sa všetky prílohy e-mailov zobrazujú ako samostatné správy. Odchádzajúce správy dostávajú prílohy podľa potreby automaticky.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Áno. Okrem čistého textu sa všetky prílohy e-mailov zobrazujú ako samostatné správy. Odchádzajúce správy dostávajú prílohy podľa potreby automaticky.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</p>
|
||||
</li>
|
||||
<li>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
@@ -304,6 +308,41 @@ Archived chats remain accessible above the chat list or via search.</p>
|
||||
|
||||
<p>To use the functions, long tap or right click a chat in the chat list.</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
How do “Saved Messages” work? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Saved Messages</strong> is a chat that you can use to easily remember and find messages.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In any chat, long tap or right click a message and select <strong>Save</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Saved messages are marked by the symbol
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
next to the timestamp</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Later, open the “Saved Messages” chat - and you will see the saved messages there.
|
||||
By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Messages stay saved even if they are edited or deleted -
|
||||
may it be by <a href="#edit">sender</a>, by <a href="#delold">device cleanup</a> or by <a href="#ephemeralmsgs">disappearing messages of other chats</a>.</p>
|
||||
|
||||
<h3 id="what-does-the-green-dot-mean">
|
||||
|
||||
|
||||
@@ -312,25 +351,53 @@ Archived chats remain accessible above the chat list or via search.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>You can sometimes see a <strong>green dot</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" />
|
||||
next to the avatar of a contact.
|
||||
It means they were <strong>recently seen</strong> in the last 10 minutes:</p>
|
||||
|
||||
<ul>
|
||||
<li>Since Delta Chat 1.34 you can sometimes see a “green dot” next to the avatar
|
||||
of a contact. It means they were “recently seen”.</li>
|
||||
<li>In detail: it means, that in the last 10 minutes, Delta Chat has seen them:
|
||||
<ul>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>or because they sent data to your Delta Chat app by using a
|
||||
<a href="#webxdc">webxdc app</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>So this is not a real time online status - and if someone doesn’t answer
|
||||
right away even though they seem to be online, don’t worry and give them some
|
||||
space ;-)</li>
|
||||
<li>On the other hand, others will not always “see that you are online”. If you
|
||||
have turned off read receipts, they will not see the green dot until you
|
||||
message them or write to a group they’re in as well.</li>
|
||||
<li>either because they messaged you directly,</li>
|
||||
<li>because they wrote something to a group you are both a member of,</li>
|
||||
<li>because they sent you a read receipt for a message you wrote,</li>
|
||||
<li>because they edit or delete a message in a chat shared with you,</li>
|
||||
<li>or because they use an <a href="#webxdc">app</a> in a chat shared with you.</li>
|
||||
</ul>
|
||||
|
||||
<p>So this is not a real time online status -
|
||||
and if someone doesn’t answer right away even though they seem to be online,
|
||||
don’t worry and give them some space :)</p>
|
||||
|
||||
<p>On the other hand, others will not always “see that you are online”.
|
||||
If you have turned off read receipts,
|
||||
they will not see the green dot
|
||||
until one of the above conditions are met.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Correct typos and delete messages after sending <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can edit the text of your messages after sending.
|
||||
For that, long tap or right click the message and select <strong>Edit</strong>
|
||||
or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have sent a message accidentally,
|
||||
from the same menu, select <strong>Delete</strong> and then <strong>Delete for Everyone</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>While edited messages will have the word “Edited” next to the timestamp,
|
||||
deleted messages will be removed without a marker in the chat.
|
||||
Notifications are not sent and there is no time limit.</p>
|
||||
|
||||
<p>Note, that the original message may still be received by chat members
|
||||
who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -603,16 +670,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -625,14 +692,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
@@ -647,7 +715,7 @@ would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
<p>Delta Chat is a free and open source decentralized messenger with free server choice,
|
||||
but we want users to reliably experience “instant delivery” of messages,
|
||||
like they experience from Whatsapp, Signal or Telegram apps,
|
||||
like they experience from WhatsApp, Signal or Telegram apps,
|
||||
without asking questions up-front that are more suited to expert users or developers.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
@@ -886,14 +954,14 @@ if the whole message is properly encrypted and signed.
|
||||
For example, “Detached signatures” are not treated as secure.</p>
|
||||
|
||||
<p>OpenPGP is not insecure by itself.
|
||||
Most publically discussed OpenPGP security problems
|
||||
Most publicly discussed OpenPGP security problems
|
||||
actually stem from bad usability or bad implementations of tools or apps (or both).
|
||||
It is particularly important to distinguish between OpenPGP, the IETF encryption standard,
|
||||
and GnuPG (GPG), a command line tool implementing OpenPGP.
|
||||
Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used.
|
||||
Delta Chat rather uses the OpenPGP Rust implementation <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
available as <a href="https://crates.io/crates/pgp">an independent “pgp” package</a>,
|
||||
and <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">security-audited in 2019</a>.</p>
|
||||
and <a href="#security-audits">security-audited in 2019 and 2024</a>.</p>
|
||||
|
||||
<p>We aim, along with other OpenPGP implementors,
|
||||
to further improve security characteristics by implementing the
|
||||
@@ -1142,7 +1210,7 @@ but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</
|
||||
that are safe against compromised servers or corrupted networks.
|
||||
Signal and most other PFS-supporting messengers do not provide
|
||||
a practical scheme for protecting chat groups from network attacks
|
||||
which are arguably more worrysome
|
||||
which are arguably more worrisome
|
||||
than a potential attacker who seizes your phone and private encryption setup
|
||||
but somehow not your messages, yet has a full record of all
|
||||
past encrypted messages.</p>
|
||||
@@ -1158,42 +1226,14 @@ which has been <a href="https://delta.chat/assets/blog/2019-first-security-revie
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>No.</p>
|
||||
|
||||
<p>Alternatively, you can import the key manually in “Settings -> Advanced settings -> Import secret keys”.
|
||||
Caution: Make sure the key is not protected by a password, or remove the password beforehand.</p>
|
||||
<p>Delta Chat generates secure OpenPGP keys according to the Autocrypt specification 1.1.
|
||||
You can export your private key but you can not import additional private keys.</p>
|
||||
|
||||
<p>If you don’t have a key or don’t even know you would need one - don’t worry: Delta Chat generates keys as needed, you don’t have to hit a button for it.</p>
|
||||
|
||||
<h3 id="nemôžem-importovať-môj-existujúci-pgp-kľúč-do-delta-chat">
|
||||
|
||||
|
||||
Nemôžem importovať môj existujúci PGP kľúč do Delta Chat. <a href="#nemôžem-importovať-môj-existujúci-pgp-kľúč-do-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Najpravdepodobnejšou príčinou je, že váš kľúč je zašifrovaný a/alebo používa
|
||||
heslo. Delta Chat takéto kľúče nepodporuje. Mohli by ste odstrániť
|
||||
zašifrovanie prístupovej frázy a heslo a skúsiť import znova.</p>
|
||||
|
||||
<p>Another common error is having the wrong file ending.
|
||||
Use the ASCII armored format and an <code class="language-plaintext highlighter-rouge">.asc</code> file ending.</p>
|
||||
|
||||
<p>Delta Chat podporuje bežné formáty súkromných kľúčov OpenPGP
|
||||
avšak je nepravdepodobné, že budú plne podporované súkromné kľúče zo všetkých zdrojov. Toto
|
||||
nie je hlavným cieľom Delta Chat. V skutočnosti väčšina nových používateľov
|
||||
nebude mať pred použitím Delta Chat žiadny kľúč.
|
||||
Snažíme sa však podporovať súkromné kľúče z čo najväčšieho počtu zdrojov.</p>
|
||||
|
||||
<p>Odstránenie hesla zo súkromného kľúča bude závisieť od
|
||||
softvéru, ktorý používate na správu kľúčov PGP. S Enigmailom si môžete nastaviť svoje
|
||||
heslo na prázdnu hodnotu v okne Key Management. Pomocou GnuPG to môžete nastaviť
|
||||
<a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">prostredníctvom príkazu
|
||||
riadok</a>.
|
||||
Pre iné programy by ste mali vedieť nájsť riešenie online.</p>
|
||||
<p>In general, we do not recommend or offer users to perform manual key management.
|
||||
We want to ensure that security audits can focus on a few proven cryptographic algorithms
|
||||
instead of the full breadth of possible algorithms allowed with OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1203,10 +1243,25 @@ Pre iné programy by ste mali vedieť nájsť riešenie online.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The Delta Chat project underwent four independent security audits and one
|
||||
independent security analysis, from most recent to older:</p>
|
||||
<p>Yes, multiple times.
|
||||
The Delta Chat project continuously undergoes independent security audits and analysis,
|
||||
from most recent to older:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
|
||||
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
|
||||
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
|
||||
Two advisories were released related to the findings of this audit:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panics on Malformed Untrusted Input”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potential Resource Exhaustion when handling Untrusted Messages”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>The issues outlined in these advisories have been fixed and are part of Delta Chat
|
||||
releases on all appstores since December 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2024 March, we received a deep security analysis from the Applied Cryptography
|
||||
research group at ETH Zuerich and addressed all raised issues.
|
||||
@@ -1272,7 +1327,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Yes. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1329,6 +1384,10 @@ which is known to cause problems (especially on Windows).
|
||||
<li>
|
||||
<p><strong>Guest Networks</strong> may not allow devices to communicate with each other.
|
||||
If possible, use a non-guest network.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you still have troubles using the same network,
|
||||
try to open <strong>Mobile Hotspot</strong> on one device and join that Wi-Fi from the other one</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ensure there is <strong>enough storage</strong> on the destination device</p>
|
||||
@@ -1376,6 +1435,23 @@ help you.</li>
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">
|
||||
|
||||
|
||||
Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices? <a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes.</p>
|
||||
|
||||
<p>If you e.g. delete a chat or a message from your phone,
|
||||
it will be deleted on your desktop as soon as it comes online again.</p>
|
||||
|
||||
<p>Notable exceptions are <a href="#delold">Delete old messages from Device</a>,
|
||||
as different devices may have different storage capacities,
|
||||
and system specific settings as notification sounds.</p>
|
||||
|
||||
<h3 id="máte-nejaké-plány-na-zavedenie-webového-klienta-delta-chat">
|
||||
|
||||
|
||||
@@ -1497,7 +1573,7 @@ will not get interrupted by a video chat invite.</li>
|
||||
link in the settings.</li>
|
||||
<li>For example, to use the flagship Jitsi Meet instance, you could enter
|
||||
<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$ROOM</code>. The <code class="language-plaintext highlighter-rouge">$ROOM</code> variable will be a random value;
|
||||
this way, you will have a new random jitsi room every time you call someone.</li>
|
||||
this way, you will have a new random Jitsi room every time you call someone.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="what-are-broadcast-lists-and-how-can-i-use-them">
|
||||
@@ -1509,7 +1585,7 @@ this way, you will have a new random jitsi room every time you call someone.</li
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>With a Broadcast List you can send a message to many recipents at once; when
|
||||
<li>With a Broadcast List you can send a message to many recipients at once; when
|
||||
they reply to you, you get the reply in your direct 1:1 chat with them. The
|
||||
recipients can’t see each other.</li>
|
||||
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
|
||||
@@ -1820,25 +1896,24 @@ pre ich mail, namiesto priečinku DeltaChat. Ak zakážete „Sledovať
|
||||
priečinok DeltaChat“, mali by ste tiež zakázať „presunúť chatové správy do DeltaChat“.
|
||||
V opačnom prípade nemusí odstraňovanie správ alebo nastavenia viacerých zariadení fungovať správne.</p>
|
||||
|
||||
<h3 id="je-delta-chat-kompatibilný-s-protonmail--tutanota--criptext">
|
||||
<h3 id="je-delta-chat-kompatibilný-s-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
Je Delta Chat kompatibilný s Protonmail / Tutanota / Criptext? <a href="#je-delta-chat-kompatibilný-s-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
Je Delta Chat kompatibilný s Proton Mail / Tutanota / Criptext? <a href="#je-delta-chat-kompatibilný-s-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Yes and No.</li>
|
||||
<li>No, you can not use your Protonmail, Tutanota, or Criptext account with Delta
|
||||
Chat; they do not offer receiving mails via IMAP.</li>
|
||||
<li>In any case you can use Delta Chat to send Messages to people who use
|
||||
Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end
|
||||
encrypted, though. The end-to-end encryption those providers offer is not
|
||||
compatible with <a href="https://autocrypt.org/">Autocrypt</a>, the standard Delta Chat
|
||||
uses.</li>
|
||||
<li>Delta Chat can end-to-end-encrypt through any e-mail provider with any
|
||||
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
|
||||
<li>Áno a nie.</li>
|
||||
<li>Nie, nemôžete používať svoj účet Proton Mail, Tutanota alebo Criptext s Delta
|
||||
Chat; neponúkajú prijímanie pošty cez IMAP.</li>
|
||||
<li>V každom prípade môžete použiť Delta Chat na odosielanie správ ľuďom, ktorí to používajú
|
||||
Protonmail, Tutanota alebo Criptext. Avšak tieto správy nebudú End-to-End
|
||||
zašifrované. Šifrovanie typu End-to-End, ktoré títo poskytovatelia ponúkajú, funguje iba <br />
|
||||
na ich platformách a nie sú kompatibilné s nikým mimo.</li>
|
||||
<li>Delta Chat môže e2e šifrovať prostredníctvom akéhokoľvek poskytovateľa e-mailu s ktoroukoľvek
|
||||
<a href="https://autocrypt.org/dev-status.html">E-mailovou aplikáciou s povoleným automatickým šifrovaním</a>.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="remove-account">
|
||||
@@ -2005,7 +2080,7 @@ as a contributor community.</p>
|
||||
Freiburg (Germany), and is distributed to more than a dozen contributors world-wide.</p>
|
||||
|
||||
<p>Please see <a href="https://delta.chat/sk/contribute">Delta Chat Contribution channels</a>
|
||||
for both monetary and and other contribution possibilities.</p>
|
||||
for both monetary and other contribution possibilities.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="sq"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#çështë-delta-chat-i">Ç’është Delta Chat-i?</a>
|
||||
<ul>
|
||||
<li><a href="#si-mund-të-gjej-persona-për-të-biseduar-me-ta">Si mund të gjej persona për të biseduar me ta?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#kush-e-sheh-profilin-tim">Kush e sheh profilin tim?</a></li>
|
||||
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li>
|
||||
<li><a href="#çdo-të-thotë-fiksim-heshtim-arkivim">Ç’do të thotë Fiksim, Heshtim, Arkivim?</a></li>
|
||||
<li><a href="#save">How do “Saved Messages” work?</a></li>
|
||||
<li><a href="#çdo-të-thotë-pika-e-gjelbër">Ç’do të thotë pika e gjelbër?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li>
|
||||
<li><a href="#importkey">A mund të ripërdor kyçin tim ekzistues privat?</a></li>
|
||||
<li><a href="#seksportoj-dot-kyçet-e-mi-ekzistues-pgp-në-delta-chat">S’eksportoj dot kyçet e mi ekzistues PGP në Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">A është bërë auditim i pavarur i Delta Chat-it për cenueshmëri sigurie?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#a-mund-ta-përdor-delta-chat-in-në-shumë-pajisje-njëherësh-në-të-njëjtën-kohë">A mund ta përdor Delta Chat-in në shumë pajisje njëherësh në të njëjtën kohë?</a></li>
|
||||
<li><a href="#diagnostikim">Diagnostikim</a></li>
|
||||
<li><a href="#backup">Manual Transfer</a></li>
|
||||
<li><a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices?</a></li>
|
||||
<li><a href="#a-ka-ndonjë-plan-për-të-sjellë-një-klient-web-delta-chat">A ka ndonjë plan për të sjellë një Klient Web Delta Chat?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -182,15 +184,20 @@ Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Nëse një mesazh vjen prej një kontakti të panjohur, shfaqet si <strong>kërkesë</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>Nëse një mesazh vjen prej një kontakti të panjohur, shfaqet si <strong>kërkesë</strong>.
|
||||
Duhet të pranoni kërkesën, para se të mund të përgjigjeni.</li>
|
||||
<li>Mundeni edhe ta “fshini”, nëse s’doni të bisedoni me të tani. Kjo <strong>nuk</strong>
|
||||
fshin mesazhin te shërbyesi, vetëm te pajisja juaj. Kështu, mundeni
|
||||
të merreni me mesazhin që nga një tjetër aplikacion email-esh.</li>
|
||||
<li>Nëse fshini një kërkesë, mesazhet e ardhshëm prej atij kontakti do të shfaqen
|
||||
<li>
|
||||
<p>Duhet të <strong>pranoni</strong> kërkesën, para se të mund të përgjigjeni.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Mundeni edhe ta <strong>fshini</strong>, nëse s’doni të bisedoni me të tani.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Nëse fshini një kërkesë, mesazhet e ardhshëm prej atij kontakti do të shfaqen
|
||||
ende si kërkesë për mesazh, që të mund të ndërroni mendje. Nëse vërtet
|
||||
s’doni të merrni mesazhe prej këtij personi, shihni mundësinë e <em>bllokimit</em> të tij.</li>
|
||||
s’doni të merrni mesazhe prej këtij personi, shihni mundësinë e <strong>bllokimit</strong> të tij.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="a-mbulon-delta-chat-i-figura-video-dhe-bashkëngjitje-të-tjera">
|
||||
@@ -305,6 +312,41 @@ Fjalosjet e arkivuara mbesin të përdorshme mbi listën e fjalosjeve, ose përm
|
||||
<p>Që të arkivoni ose fiksoni një fjalosje, prekeni gjatë (në Android), përdorni menunë e fjalosjes (në Android/Desktop), ose fërkojeni për majtas (në iOS);
|
||||
që të heshtoni një fjalosje, përdorni menunë e fjalosjes (në Android/Desktop), ose profilin e fjalosjes (në iOS).</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
How do “Saved Messages” work? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Saved Messages</strong> is a chat that you can use to easily remember and find messages.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In any chat, long tap or right click a message and select <strong>Save</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Saved messages are marked by the symbol
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
|
||||
next to the timestamp</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Later, open the “Saved Messages” chat - and you will see the saved messages there.
|
||||
By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Messages stay saved even if they are edited or deleted -
|
||||
may it be by <a href="#edit">sender</a>, by <a href="#delold">device cleanup</a> or by <a href="#ephemeralmsgs">disappearing messages of other chats</a>.</p>
|
||||
|
||||
<h3 id="çdo-të-thotë-pika-e-gjelbër">
|
||||
|
||||
|
||||
@@ -313,25 +355,49 @@ që të heshtoni një fjalosje, përdorni menunë e fjalosjes (në Android/Deskt
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Këtej mundeni të shihni ndonjëherë një <strong>pikë të gjelbër</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" /> në krah të avatarit të një kontakti. Hollësisht: do të thotë se, në 10 minutat e fundit, Delta Chat-i i ka parë:</p>
|
||||
|
||||
<ul>
|
||||
<li>Nga Delta Chat 1.34 e këtej mundeni të shihni ndonjëherë një “pikë të gjelbër”
|
||||
në krah të avatarit të një kontakti. Ajo do të thotë se është “parë së fundi”.</li>
|
||||
<li>Hollësisht: do të thotë se, në 10 minutat e fundit, Delta Chat-i i ka parë:
|
||||
<ul>
|
||||
<li>ose pse ju dërguan mesazh drejtpërsëdrejti,</li>
|
||||
<li>ngaqë shkruan diçka te një grup ku jeni pjesë të dy palët,</li>
|
||||
<li>ngaqë ju dërguan një dëftesë leximi për një mesazh që shkruat,</li>
|
||||
<li>ose ngaqë dërguan të dhëna te aplikacioni juaj Delta Chat përmes një
|
||||
<a href="#webxdc">aplikacioni webxdc</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Pra, kjo s’është gjendje e njëmendtë aty për aty për qenie në linjë - dhe
|
||||
nëse dikush nuk përgjigjet menjëherë, edhe pse duket të jetë në linjë, mos
|
||||
u merakosni dhe lëruni ca kohë ;-)</li>
|
||||
<li>Më anë tjetër, të tjerët jo përherë “do të shohin se jeni në linjë”. Nëse keni
|
||||
çaktivizuar dëftesa leximesh, s’do të shohin pikën e gjelbër para se ju
|
||||
t’u dërgoni një mesazh, ose të shkruani te një grup ku bëjnë pjesë edhe ata.</li>
|
||||
<li>ose pse ju dërguan mesazh drejtpërsëdrejti,</li>
|
||||
<li>ngaqë shkruan diçka te një grup ku jeni pjesë të dy palët,</li>
|
||||
<li>ngaqë ju dërguan një dëftesë leximi për një mesazh që shkruat,</li>
|
||||
<li>ose ngaqë dërguan të dhëna te aplikacioni juaj Delta Chat përmes një <a href="#webxdc">aplikacioni webxdc</a>.</li>
|
||||
</ul>
|
||||
|
||||
<p>Pra, kjo s’është gjendje e njëmendtë aty për aty për qenie në linjë - dhe
|
||||
nëse dikush nuk përgjigjet menjëherë, edhe pse duket të jetë në linjë, mos
|
||||
u merakosni dhe lëruni ca kohë :)</p>
|
||||
|
||||
<p>Më anë tjetër, të tjerët jo përherë “do të shohin se jeni në linjë”. Nëse keni
|
||||
çaktivizuar dëftesa leximesh, s’do të shohin pikën e gjelbër para se ju
|
||||
t’u dërgoni një mesazh, ose të shkruani te një grup ku bëjnë pjesë edhe ata.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Correct typos and delete messages after sending <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can edit the text of your messages after sending.
|
||||
For that, long tap or right click the message and select <strong>Edit</strong>
|
||||
or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have sent a message accidentally,
|
||||
from the same menu, select <strong>Delete</strong> and then <strong>Delete for Everyone</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>While edited messages will have the word “Edited” next to the timestamp,
|
||||
deleted messages will be removed without a marker in the chat.
|
||||
Notifications are not sent and there is no time limit.</p>
|
||||
|
||||
<p>Note, that the original message may still be received by chat members
|
||||
who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -605,16 +671,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -627,14 +693,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
@@ -649,7 +716,7 @@ would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
<p>Delta Chat is a free and open source decentralized messenger with free server choice,
|
||||
but we want users to reliably experience “instant delivery” of messages,
|
||||
like they experience from Whatsapp, Signal or Telegram apps,
|
||||
like they experience from WhatsApp, Signal or Telegram apps,
|
||||
without asking questions up-front that are more suited to expert users or developers.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
@@ -888,14 +955,14 @@ if the whole message is properly encrypted and signed.
|
||||
For example, “Detached signatures” are not treated as secure.</p>
|
||||
|
||||
<p>OpenPGP is not insecure by itself.
|
||||
Most publically discussed OpenPGP security problems
|
||||
Most publicly discussed OpenPGP security problems
|
||||
actually stem from bad usability or bad implementations of tools or apps (or both).
|
||||
It is particularly important to distinguish between OpenPGP, the IETF encryption standard,
|
||||
and GnuPG (GPG), a command line tool implementing OpenPGP.
|
||||
Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used.
|
||||
Delta Chat rather uses the OpenPGP Rust implementation <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
available as <a href="https://crates.io/crates/pgp">an independent “pgp” package</a>,
|
||||
and <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">security-audited in 2019</a>.</p>
|
||||
and <a href="#security-audits">security-audited in 2019 and 2024</a>.</p>
|
||||
|
||||
<p>We aim, along with other OpenPGP implementors,
|
||||
to further improve security characteristics by implementing the
|
||||
@@ -1144,7 +1211,7 @@ but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</
|
||||
that are safe against compromised servers or corrupted networks.
|
||||
Signal and most other PFS-supporting messengers do not provide
|
||||
a practical scheme for protecting chat groups from network attacks
|
||||
which are arguably more worrysome
|
||||
which are arguably more worrisome
|
||||
than a potential attacker who seizes your phone and private encryption setup
|
||||
but somehow not your messages, yet has a full record of all
|
||||
past encrypted messages.</p>
|
||||
@@ -1160,42 +1227,14 @@ which has been <a href="https://delta.chat/assets/blog/2019-first-security-revie
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Po
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>No.</p>
|
||||
|
||||
<p>Ndryshe, mund ta importoni kyçin dorazi te “Rregullime -> Rregullime të mëtejshme -> Importoni kyçe të fshehtë”.
|
||||
Kujdes: Sigurohuni se kyçi s’është i mbrojtur me fjalëkalim, ose hiqeni fjalëkalimin që më parë.</p>
|
||||
<p>Delta Chat generates secure OpenPGP keys according to the Autocrypt specification 1.1.
|
||||
You can export your private key but you can not import additional private keys.</p>
|
||||
|
||||
<p>Nëse s’keni kyç, ose as që e dinit se mund t’ju duhej një i tillë… mos u bëni merak: Delta Chat-i prodhon një të tillë, kur duhet dhe s’ju duhet të shtypni një buton për këtë.</p>
|
||||
|
||||
<h3 id="seksportoj-dot-kyçet-e-mi-ekzistues-pgp-në-delta-chat">
|
||||
|
||||
|
||||
S’eksportoj dot kyçet e mi ekzistues PGP në Delta Chat. <a href="#seksportoj-dot-kyçet-e-mi-ekzistues-pgp-në-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Ka shumë mundësi që problemi të jetë se kyçi juaj është i fshehtëzuar dhe/ose
|
||||
përdor një fjalëkalim. Kyçe të tillë nuk mbulohen nga Delta Chat. Ju lutemi,
|
||||
hiqeni fshehtëzimin dhe fjalëkalimin dhe riprovoni importimin.</p>
|
||||
|
||||
<p>Another common error is having the wrong file ending.
|
||||
Use the ASCII armored format and an <code class="language-plaintext highlighter-rouge">.asc</code> file ending.</p>
|
||||
|
||||
<p>Për sa u takon formateve, Delta Chat-i mbulon formate të rëndomtë OpenPGP
|
||||
kyçesh private, megjithatë, ka pak gjasa që të mbulojmë 100% të krejt kyçeve
|
||||
private të çfarëdo burimi. Kjo gjithashtu s’është fokusi kryesor i Delta Chat-it
|
||||
(në fakt, shumica dërrmuese e përdoruesve të Delta Chat-it s’do të kenë ndonjë
|
||||
kyç përpara se të zënë të përdorin Delta-n). Sidofoqtë, përpiqemi të mbulojmë
|
||||
kyçe private prej burimesh të tjera sa më mirë që të mundet.</p>
|
||||
|
||||
<p>Heqja e fjalëkalimi nga kyçi privat do të jetë e ndryshme, varet nga software-i
|
||||
që ju përdorni për administrim kyçesh PGP. Me Enigmail-in, mund t’i jepni
|
||||
fjalëkalimit tuaj një vlerë të zbrazët, që nga dritarja Administrim Kyçesh. Me
|
||||
GnuPG-në mund ta bëni <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">përmes rreshti urdhrash</a>.
|
||||
Për programe të tjera, mund të gjeni një zgjidhje në internet.</p>
|
||||
<p>In general, we do not recommend or offer users to perform manual key management.
|
||||
We want to ensure that security audits can focus on a few proven cryptographic algorithms
|
||||
instead of the full breadth of possible algorithms allowed with OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1205,10 +1244,25 @@ Për programe të tjera, mund të gjeni një zgjidhje në internet.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The Delta Chat project underwent four independent security audits and one
|
||||
independent security analysis, from most recent to older:</p>
|
||||
<p>Yes, multiple times.
|
||||
The Delta Chat project continuously undergoes independent security audits and analysis,
|
||||
from most recent to older:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
|
||||
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
|
||||
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
|
||||
Two advisories were released related to the findings of this audit:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Panics on Malformed Untrusted Input”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Potential Resource Exhaustion when handling Untrusted Messages”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>The issues outlined in these advisories have been fixed and are part of Delta Chat
|
||||
releases on all appstores since December 2024.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2024 March, we received a deep security analysis from the Applied Cryptography
|
||||
research group at ETH Zuerich and addressed all raised issues.
|
||||
@@ -1273,7 +1327,7 @@ Mund të lexoni <a href="https://delta.chat/assets/blog/2019-first-security-revi
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Po Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Po You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -1330,6 +1384,10 @@ që dihet se shkakton probleme (veçanërisht në Windows).
|
||||
<li>
|
||||
<p><strong>Guest Networks</strong> may not allow devices to communicate with each other.
|
||||
If possible, use a non-guest network.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you still have troubles using the same network,
|
||||
try to open <strong>Mobile Hotspot</strong> on one device and join that Wi-Fi from the other one</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Garantoni se ka <strong>depozitë të mjaftueshme</strong> te pajisja vendmbërritje</p>
|
||||
@@ -1377,6 +1435,23 @@ help you.</li>
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices">
|
||||
|
||||
|
||||
Is Deletion, Pinning, Archiving, Saving, Muting etc. synced to all devices? <a href="#is-deletion-pinning-archiving-saving-muting-etc-synced-to-all-devices" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Po</p>
|
||||
|
||||
<p>If you e.g. delete a chat or a message from your phone,
|
||||
it will be deleted on your desktop as soon as it comes online again.</p>
|
||||
|
||||
<p>Notable exceptions are <a href="#delold">Delete old messages from Device</a>,
|
||||
as different devices may have different storage capacities,
|
||||
and system specific settings as notification sounds.</p>
|
||||
|
||||
<h3 id="a-ka-ndonjë-plan-për-të-sjellë-një-klient-web-delta-chat">
|
||||
|
||||
|
||||
@@ -1498,7 +1573,7 @@ will not get interrupted by a video chat invite.</li>
|
||||
link in the settings.</li>
|
||||
<li>For example, to use the flagship Jitsi Meet instance, you could enter
|
||||
<code class="language-plaintext highlighter-rouge">https://meet.jit.si/$ROOM</code>. The <code class="language-plaintext highlighter-rouge">$ROOM</code> variable will be a random value;
|
||||
this way, you will have a new random jitsi room every time you call someone.</li>
|
||||
this way, you will have a new random Jitsi room every time you call someone.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="çjanë-listat-e-transmetimeve-dhe-si-mund-ti-përdor">
|
||||
@@ -1840,16 +1915,16 @@ shumë pajisje mund të mos punojë si duhet.</p>
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Yes and No.</li>
|
||||
<li>No, you can not use your Protonmail, Tutanota, or Criptext account with Delta
|
||||
Chat; they do not offer receiving mails via IMAP.</li>
|
||||
<li>In any case you can use Delta Chat to send Messages to people who use
|
||||
Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end
|
||||
encrypted, though. The end-to-end encryption those providers offer is not
|
||||
compatible with <a href="https://autocrypt.org/">Autocrypt</a>, the standard Delta Chat
|
||||
uses.</li>
|
||||
<li>Delta Chat can end-to-end-encrypt through any e-mail provider with any
|
||||
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
|
||||
<li>Po dhe Jo.</li>
|
||||
<li>Jo, me Delta Chat-in s’mund të përdorni llogarinë tuaj Protonmail, Tutanota,
|
||||
ose Criptext; ato nuk ofrojnë marrje email-esh përmes IMAP-it.</li>
|
||||
<li>Sidoqoftë, mund të përdorni Delta Chat-in të dërgoni Mesazhe për persona që
|
||||
përdorin Protonmail, Tutanota, ose Criptext. Këto mesazhe ama s’do të jenë
|
||||
të fshehtëzuara Skaj-më-Skaj. Fshehtëzimi Skaj-më-Skaj që japin këto shërbime
|
||||
s’është i përputhshëm me <a href="https://autocrypt.org/">Autocrypt-in</a>, standardin që
|
||||
përdor Delta Chat-i.</li>
|
||||
<li>Delta Chat-i mund të kryejë fshehtëzim skaj-më-skaj përmes cilitdo shërbim
|
||||
email-i me çfarëdo <a href="https://autocrypt.org/dev-status.html">aplikacioni email që punon me Autocrypt</a>.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<html lang="uk"><head><meta charset="UTF-8" /><meta name="viewport" content="initial-scale=1.0" /><link rel="stylesheet" href="../help.css" /></head><body><ul id="top">
|
||||
<li><a href="#що-таке-delta-chat">Що таке Delta Chat?</a>
|
||||
<ul>
|
||||
<li><a href="#як-мені-знайти-людей-для-спілкування">Як мені знайти людей для спілкування?</a></li>
|
||||
@@ -10,7 +10,9 @@
|
||||
<li><a href="#хто-бачить-моє-зображення-профілю">Хто бачить моє зображення профілю?</a></li>
|
||||
<li><a href="#signature">Чи можу я встановити текст підпису/статусу/девізу у Delta Chat?</a></li>
|
||||
<li><a href="#що-значить-закріплення-приглушення-архівування">Що значить Закріплення, Приглушення, Архівування?</a></li>
|
||||
<li><a href="#save">Як працюють “Збережені повідомлення”?</a></li>
|
||||
<li><a href="#що-означає-зелена-точка">Що означає зелена точка?</a></li>
|
||||
<li><a href="#edit">Виправлення помилок та видалення повідомлень після надсилання</a></li>
|
||||
<li><a href="#ephemeralmsgs">Як працюють повідомлення, що зникають?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -56,7 +58,6 @@
|
||||
<li><a href="#pfs">Чи підтримує Delta Chat цілковиту пряму секретність (Perfect Forward Secrecy)?</a></li>
|
||||
<li><a href="#чи-є-наскрізне-шифрування-delta-chat-таким-же-безпечним-як-signal">Чи є наскрізне шифрування Delta Chat таким же безпечним, як Signal?</a></li>
|
||||
<li><a href="#importkey">Чи можна повторно використовувати існуючий закритий ключ?</a></li>
|
||||
<li><a href="#я-не-можу-імпортувати-свій-існуючий-pgp-ключ-у-delta-chat">Я не можу імпортувати свій існуючий PGP ключ у Delta Chat.</a></li>
|
||||
<li><a href="#security-audits">Чи проходив Delta Chat незалежний аудит на наявність вразливостей у безпеці?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -65,6 +66,7 @@
|
||||
<li><a href="#чи-можна-використовувати-delta-chat-на-декількох-пристроях-одночасно">Чи можна використовувати Delta Chat на декількох пристроях одночасно?</a></li>
|
||||
<li><a href="#вирішення-проблем">Вирішення проблем</a></li>
|
||||
<li><a href="#backup">Ручне перенесення</a></li>
|
||||
<li><a href="#чи-синхронізовані-видалення-закріплення-архівування-збереження-вимкнення-сповіщень-тощо-з-усіма-пристроями">Чи синхронізовані видалення, закріплення, архівування, збереження, вимкнення сповіщень тощо з усіма пристроями?</a></li>
|
||||
<li><a href="#чи-планується-впровадження-веб-клієнта-delta-chat">Чи планується впровадження веб-клієнта Delta Chat?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -81,7 +83,7 @@
|
||||
<li><a href="#що-таке-списки-широкомовлення-та-як-ними-користуватися">Що таке списки широкомовлення та як ними користуватися?</a></li>
|
||||
<li><a href="#як-я-можу-поділитися-своїм-місцезнаходженням-зі-своїми-співрозмовниками-в-чаті">Як я можу поділитися своїм місцезнаходженням зі своїми співрозмовниками в чаті?</a></li>
|
||||
<li><a href="#чому-я-можу-вибрати-лише-стеження-за-папкою-deltachat">Чому я можу вибрати лише стеження за папкою DeltaChat?</a></li>
|
||||
<li><a href="#як-я-можу-змінити-мій-обліковий-запис-на-іншу-адресу-електронної-пошти">Як я можу змінити мій обліковий запис на іншу адресу електронної пошти?</a></li>
|
||||
<li><a href="#як-я-можу-використовувати-іншу-адресу-електронної-пошти-у-своєму-профілі">Як я можу використовувати іншу адресу електронної пошти у своєму профілі?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#інше">Інше</a>
|
||||
@@ -96,7 +98,7 @@
|
||||
<li><a href="#для-чого-потрібне-налаштування-відправити-копію-собі">Для чого потрібне налаштування “Відправити копію собі”?</a></li>
|
||||
<li><a href="#чому-я-можу-обрати-стеження-за--папкою-надіслані">Чому я можу обрати стеження за папкою “Надіслані”?</a></li>
|
||||
<li><a href="#чому-я-можу-відмовитись-від-стеження-за--папкою-deltachat">Чому я можу відмовитись від стеження за папкою DeltaChat?</a></li>
|
||||
<li><a href="#чи-сумісний-delta-chat-із-protonmail--tutanota--criptext">Чи сумісний Delta Chat із Protonmail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#чи-сумісний-delta-chat-із-proton-mail--tutanota--criptext">Чи сумісний Delta Chat із Proton Mail / Tutanota / Criptext?</a></li>
|
||||
<li><a href="#remove-account">Як мені видалити свій обліковий запис?</a></li>
|
||||
<li><a href="#мене-цікавлять-технічні-деталі-можете-розповісти-більше">Мене цікавлять технічні деталі. Можете розповісти більше?</a></li>
|
||||
<li><a href="#де-мої-друзі-можуть-знайти-delta-chat">Де мої друзі можуть знайти Delta Chat?</a></li>
|
||||
@@ -117,7 +119,7 @@
|
||||
|
||||
<p>Delta Chat - це надійний, децентралізований та безпечний додаток для обміну повідомленнями, доступний для мобільних і десктопних платформ.</p>
|
||||
|
||||
<p>Delta Chat схожий на Whatsapp або Telegram, але ви також можете використовувати його як додаток електронної пошти. Ви можете анонімно зареєструватися на різних <a href="https://delta.chat/chatmail">сумісних chatmail-серверах</a> які є мінімальними поштовими серверами, оптимізованими для швидкої та безпечної роботи. Або ви можете використовувати класичні поштові сервери та існуючий обліковий запис електронної пошти в цьому випадку Delta Chat буде працювати як поштовий додаток.</p>
|
||||
<p>Delta Chat схожий на Whatsapp або Telegram, але ви також можете використовувати його як додаток електронної пошти. Ви можете анонімно зареєструватися на різних <a href="https://delta.chat/chatmail">сумісних chatmail-серверах</a> які є мінімальними поштовими серверами, оптимізованими для швидкої та безпечної роботи. Або ви можете використовувати класичні поштові сервери та існуючий профіль електронної пошти в цьому випадку Delta Chat буде працювати як поштовий додаток.</p>
|
||||
|
||||
<p><img style="float:right; width:50%; max-width:360%; margin:1em;" src="../delta-what-optim.png" /></p>
|
||||
|
||||
@@ -167,10 +169,18 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Якщо повідомлення приходить від невідомого контакту, воно відображається як <strong>запит</strong>.</p>
|
||||
|
||||
<ul>
|
||||
<li>Якщо повідомлення приходить від невідомого контакту, воно відображається як <strong>запит</strong>. ви потрібно прийняти запит, перш ніж ви зможете відповісти.</li>
|
||||
<li>Ви також можете “видалити” його, якщо ви не хочете зараз спілкуватися з ними. Це <em>не</em> видаляє повідомлення на сервері, лише на вашому пристрої. Отже, ви можете як і раніше обробляти повідомлення в іншій поштовій програмі.</li>
|
||||
<li>Якщо ви видалите запит, майбутні повідомлення від цього контакту все одно відображатимуться як запит на повідомлення, щоб ви могли змінити свою думку. Якщо дуже не хочеться отримувати повідомлення від цієї особи, подумайте про її <em>блокування</em>.</li>
|
||||
<li>
|
||||
<p>ви потрібно прийняти запит, перш ніж ви зможете відповісти.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ви також можете “видалити” його, якщо ви не хочете зараз спілкуватися з ними.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Якщо ви видалите запит, майбутні повідомлення від цього контакту все одно відображатимуться як запит на повідомлення, щоб ви могли змінити свою думку. Якщо дуже не хочеться отримувати повідомлення від цієї особи, подумайте про її <em>блокування</em>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="чи-підтримує-delta-chat-вкладення-у-вигляді-фото-відео-тощо">
|
||||
@@ -270,6 +280,36 @@
|
||||
|
||||
<p>Щоб скористатися функціями, утримуйте натиснутою клавішу або клацніть правою кнопкою миші на чаті у списку чатів.</p>
|
||||
|
||||
<h3 id="save">
|
||||
|
||||
|
||||
Як працюють “Збережені повідомлення”? <a href="#save" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p><strong>Збережені повідомлення</strong> - це чат, за допомогою якого ви можете легко запам’ятовувати та знаходити повідомлення.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>У будь-якому чаті натисніть і утримуйте повідомлення або клацніть правою кнопкою миші та виберіть <strong>Зберегти</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Збережені повідомлення позначені символом <img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" /> поруч з міткою часу</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Пізніше відкрийте чат “Збережені повідомлення” - і ви побачите там збережені повідомлення. Натиснувши <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />, ви можете повернутися до початкового повідомлення в оригінальному чаті</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Нарешті, ви також можете використовувати “Зберегти повідомлення”, щоб робити <strong>особисті нотатки</strong> - відкрити чат, набрати щось, додати фотографію або голосове повідомлення тощо.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Оскільки “Збережені повідомлення” синхронізуються, вони можуть стати дуже зручними для передачі даних між пристроями</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Повідомлення залишаються збереженими, навіть якщо вони були відредаговані або видалені - чи то через <a href="#edit">відправника</a>, чи то через <a href="#delold">очищення пристрою</a>, чи то через <a href="#ephemeralmsgs">зникнення повідомлень інших чатів</a>.</p>
|
||||
|
||||
<h3 id="що-означає-зелена-точка">
|
||||
|
||||
|
||||
@@ -278,16 +318,40 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Іноді ви можете бачити <strong>зелену крапку</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" /> поруч з аватаркою контакту. Це означає, що його <strong>недавно бачили</strong> протягом останніх 10 хвилин:</p>
|
||||
|
||||
<ul>
|
||||
<li>Починаючи з Delta Chat 1.34, ви іноді можете бачити “зелену крапку” поруч із аватаром контакту. Це означає, що контакт «нещодавно бачили».</li>
|
||||
<li>Детально: це означає, що за останні 10 хвилин Delta Chat бачив їх:</li>
|
||||
<li>або тому, що вони надіслали вам повідомлення безпосередньо,</li>
|
||||
<li>тому що вони написали щось групі, учасником якої є ви обоє,</li>
|
||||
<li>тому що вони надіслали вам сповіщення про прочитання повідомлення, яке ви написали,</li>
|
||||
<li>або тому, що вони надіслали дані до вашої програми Delta Chat за допомогою a <a href="#webxdc">приватна програма</a>.
|
||||
– Отже, це не онлайн-статус у реальному часі – і якщо хтось не відповідає відразу, навіть якщо вони, здаються, онлайн, не хвилюйтесь і дайте їм трохи простору ;-)
|
||||
– З іншого боку, інші не завжди «побачать, що ви онлайн». Якщо ви вимкнули сповіщення про прочитання, вони не побачать зелену крапку, доки ви не надішлете їм повідомлення або напишете у групу, до якої вони входять.</li>
|
||||
<li>або тому, що вони написали вам безпосередньо,</li>
|
||||
<li>тому що вони написали щось у групі, в якій ви обидва є учасниками,</li>
|
||||
<li>тому що вони надіслали вам квитанцію про прочитання повідомлення, яке ви написали,</li>
|
||||
<li>тому що вони відредагували або видалили повідомлення у спільному з вами чаті,</li>
|
||||
<li>або тому, що вони використовують <a href="#webxdc">app</a> у спільному з вами чаті.</li>
|
||||
</ul>
|
||||
|
||||
<p>Отже, це не онлайн статус в реальному часі - і якщо хтось не відповідає одразу, хоча здається, що вони онлайн, не хвилюйтеся і дайте їм трохи часу :)</p>
|
||||
|
||||
<p>З іншого боку, інші не завжди “бачать, що ви онлайн”. Якщо ви вимкнули звіти про прочитання, вони не побачать зелену крапку доки не буде виконано одну з вищезазначених умов.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
|
||||
Виправлення помилок та видалення повідомлень після надсилання <a href="#edit" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Ви можете редагувати текст ваших повідомлень після відправлення. Для цього натисніть на повідомлення довгим натисканням або правою кнопкою миші і виберіть <strong>Редагувати</strong> або <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Якщо ви випадково надіслали повідомлення, в тому ж меню виберіть <strong>Видалити</strong>, а потім <strong>Видалити для всіх</strong>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Відредаговані повідомлення матимуть позначку “Відредаговано” поруч з міткою часу, видалені повідомлення будуть видалені без позначки в чаті. Сповіщення не надсилаються і відсутнє часове обмеження.</p>
|
||||
|
||||
<p>Зауважте, що початкове повідомлення все ще може бути отримане учасниками чату які могли вже відповісти, переслати, зберегти, зробити знімок екрану або іншим чином скопіювати повідомлення.</p>
|
||||
|
||||
<h3 id="ephemeralmsgs">
|
||||
|
||||
@@ -400,7 +464,7 @@
|
||||
<p>Щоб увімкнути його, перейдіть до <strong>Видалити старі повідомлення → Видалити повідомлення з сервера</strong> в налаштуваннях «Чати та медіа». Ви можете встановити часові рамки між «Одразу» та «Через 1 рік». Усі електронні листи, отримані Delta Chat, будуть видалені з сервера після закінчення цього терміну.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Зауважте, що якщо ви використовуєте Delta Chat на кількох пристроях, вам слід залишити повідомлення на сервері, доки інший пристрій не зможе завантажити їх. У цьому випадку вам слід встановити для автоматичного видалення значення «через день» або щось подібне, залежно від того, як часто ви вмикаєте інший пристрій.</p>
|
||||
<p>Зверніть увагу, що якщо ви використовуєте Delta Chat на декількох пристроях, вам потрібно залишити повідомлення на сервері з достатнім проміжком часу щоб інші пристрої також могли їх завантажити.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -498,23 +562,23 @@ Push-сповіщення автоматично активуються для
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Додаток Delta Chat отримує “токен пристрою” локально і зберігає його на сервері <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
<p>Додаток Delta Chat отримує “токен пристрою” локально, шифрує його і зберігає на сервері <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Коли <a href="https://delta.chat/chatmail">chatmail</a>-сервер отримує електронний лист від користувача Delta Chat він пересилає “токен пристрою” до центрального проксі-сповіщення Delta Chat.</p>
|
||||
<p>Коли сервер <a href="https://delta.chat/chatmail">chatmail</a> отримує електронний лист від користувача Delta Chat він пересилає зашифрований токен пристрою до центрального проксі-сервера сповіщень Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Центральний проксі-сервер сповіщень Delta Chat пересилає “токен пристрою” до відповідного Push-сервісу (Apple, Google тощо), навіть не знаючи IP-адреси чи електронної пошти користувачів Delta Chat.</p>
|
||||
<p>Центральний проксі-сервер сповіщень Delta Chat розшифровує токен пристрою і пересилає його до відповідного Push-сервісу (Apple, Google тощо), навіть не знаючи IP-адреси або електронної пошти користувачів Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Центральний Push-сервіс (Apple, Google тощо) запускає додаток Delta Chat на вашому пристрої щоб перевірити наявність нових повідомлень у фоновому режимі. Він не знає про пошту чату або адресу електронної пошти пристрою, який він пробуджує. Центральні служби Apple/Google Push ніколи не бачать адресу електронної пошти (відправника або одержувача) а також ніколи не бачать жодного вмісту повідомлення (навіть в зашифрованому вигляді).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Станом на травень 2024 року chatmail-сервери знають про “токени пристроїв” але ми плануємо зашифрувати цю інформацію для проксі-сповіщень таким чином, щоб сервер чату ніколи не дізнався токен пристрою.</p>
|
||||
|
||||
<p>Центральний проксі для сповіщень Delta Chat <a href="https://github.com/deltachat/notifiers">невеликий і повністю реалізований на Rust</a> забуває про токени пристроїв, як тільки Apple/Google/etc обробили їх, зазвичай за лічені мілісекунди.</p>
|
||||
|
||||
<p>Зверніть увагу, що токен пристрою шифрується між програмами та проксі-сповіщеннями але не підписується. Таким чином, проксі-служба сповіщень ніколи не бачить адреси електронної пошти, IP-адреси або будь-яку криптографічну ідентифікаційну інформацію, пов’язану з пристроєм користувача (токеном).</p>
|
||||
|
||||
<p>В результаті цього загального дизайну конфіденційності, навіть захоплення chatmail-сервера, або повне вилучення центрального проксі-сервера повідомлень Delta Chat не призведе до розкриття приватної інформації, якої ще не мають Push-сервіси.</p>
|
||||
|
||||
<h3 id="чому-delta-chat-інтегрується-з-централізованими-пропрієтарними-push-сервісами-applegoogle">
|
||||
@@ -525,7 +589,7 @@ Push-сповіщення автоматично активуються для
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Delta Chat - це безкоштовний децентралізований месенджер з відкритим вихідним кодом і вільним вибором сервера, але ми хочемо, щоб користувачі отримували надійну “миттєву доставку” повідомлень, як у додатках Whatsapp, Signal або Telegram, без попередніх запитань, які більше підходять для досвідчених користувачів або розробників.</p>
|
||||
<p>Delta Chat - це безкоштовний децентралізований месенджер з відкритим вихідним кодом і вільним вибором сервера, але ми хочемо, щоб користувачі отримували надійну “миттєву доставку” повідомлень, як у додатках WhatsApp, Signal або Telegram, без попередніх запитань, які більше підходять для досвідчених користувачів або розробників.</p>
|
||||
|
||||
<p>Зверніть увагу, що Delta Chat має <a href="#privacy-notifications">невелику систему push-повідомлень, що зберігає конфіденційність</a> яка забезпечує “миттєву доставку” повідомлень на всі chatmail-сервери включаючи потенційний <a href="https://delta.chat/chatmail#selfhosted">який ви можете налаштувати самостійно без нашого дозволу</a>. Ласкаво просимо до потужності сумісної та масової системи чат-пошти та електронної пошти :)</p>
|
||||
|
||||
@@ -634,11 +698,11 @@ Autocrypt використовує обмежену і <a href="#openpgp-secure"
|
||||
|
||||
<p><strong>Ваш контакт використовує Delta Chat на другому пристрої (телефоні або ноутбуці)</strong>.</p>
|
||||
|
||||
<p>Якщо у них є інший пристрій із запущеним додатком Delta Chat, вони повинні видалити обліковий запис з нового пристрою і додати його <a href="#multiclient">як другий пристрій, як описано тут</a>. Як тільки вони напишуть вам повідомлення, попередження зникне і гарантоване шифрування буде встановлено на обох пристроях вашого контакту.</p>
|
||||
<p>Якщо у них є інший пристрій із запущеним додатком Delta Chat, вони повинні видалити профіль з нового пристрою і додати його <a href="#multiclient">як другий пристрій, як описано тут</a>. Як тільки вони напишуть вам повідомлення, попередження зникне і гарантоване шифрування буде встановлено на обох пристроях вашого контакту.</p>
|
||||
|
||||
<p><strong>Ваш контакт перевстановив Delta Chat, використовуючи свій старий логін</strong></p>
|
||||
|
||||
<p>Якщо у них є <a href="#backup">файл резервної копії</a>, вони повинні видалити обліковий запис з нового пристрою і, замість цього, імпортувати файл резервної копії для відновлення свого облікового запису. Як тільки вони напишуть вам повідомлення, попередження зникне і гарантоване шифрування буде відновлено для цього контакту.</p>
|
||||
<p>Якщо у них є <a href="#backup">файл резервної копії</a>, вони повинні видалити профіль з нового пристрою і, замість цього, імпортувати файл резервної копії для відновлення свого профілю. Як тільки вони напишуть вам повідомлення, попередження зникне і гарантоване шифрування буде відновлено для цього контакту.</p>
|
||||
|
||||
<p>Якщо у них немає резервної копії файлу, найкраще виконати <a href="#howtoe2ee">QR-сканування</a> з вашим співрозмовником, щоб відновити гарантоване кінцеве шифрування.</p>
|
||||
|
||||
@@ -676,7 +740,10 @@ Autocrypt використовує обмежену і <a href="#openpgp-secure"
|
||||
|
||||
<p>Так, Delta Chat використовує безпечну підмножину OpenPGP і відображає індикатор безпеки у вигляді замка в повідомленні лише тоді, коли все повідомлення належним чином зашифровано і підписано. Наприклад, “Відокремлені підписи” не вважаються безпечними.</p>
|
||||
|
||||
<p>OpenPGP не є небезпечним сам по собі. Більшість публічно обговорюваних проблем безпеки OpenPGP насправді виникають через погане використання або погану реалізацію інструментів або програм (або і те, і інше). Особливо важливо розрізняти OpenPGP, стандарт шифрування IETF, і GnuPG (GPG), інструментом командного рядка, що реалізує OpenPGP. Багато публічних критиків OpenPGP насправді обговорюють GnuPG, який Delta Chat ніколи не використовував. Натомість Delta Chat використовує реалізацію OpenPGP на Rust <a href="https://github.com/rpgp/rpgp">rPGP</a>, доступну як <a href="https://crates.io/crates/pgp">незалежний пакет “pgp”</a>, і <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">пройшов аудит безпеки у 2019 році</a>.</p>
|
||||
<p>OpenPGP сам по собі не є небезпечним. Більшість публічно обговорюваних проблем безпеки OpenPGP насправді виникають через недостатню зручність використання або погану реалізацію інструментів чи програм (або обох).
|
||||
Особливо важливо розрізняти OpenPGP, стандарт шифрування IETF, і GnuPG (GPG), інструмент командного рядка, що реалізує OpenPGP.
|
||||
Багато публічних критиків OpenPGP насправді обговорюють GnuPG, який Delta Chat ніколи не використовував.
|
||||
Delta Chat скоріше використовує реалізацію OpenPGP Rust <a href="https://github.com/rpgp/rpgp">rPGP</a>, доступну як <a href="https://crates.io/crates/pgp">незалежний пакет «pgp»</a> і <a href="#security-audits">перевірку безпеки в 2019 і 2024 роках</a>.</p>
|
||||
|
||||
<p>Ми прагнемо, разом з іншими розробниками OpenPGP, подальше покращення характеристик безпеки шляхом впровадження <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-crypto-refresh/">нового IETF OpenPGP Crypto-Refresh</a> який, на щастя, був прийнятий влітку 2023 року.</p>
|
||||
|
||||
@@ -749,7 +816,7 @@ Autocrypt використовує обмежену і <a href="#openpgp-secure"
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Як для захисту від поштових серверів, що збирають метадані, так і для захисту від загрози вилучення пристрою ми рекомендуємо використовувати оптимізований для Delta Chat <a href="https://delta.chat/serverguide">екземпляр поштового сервера</a> для створення псевдонімних тимчасових акаунтів за допомогою сканування QR-коду. Зверніть увагу, що додатки Delta Chat на всіх платформах підтримують кілька облікових записів тому ви можете легко використовувати “1-тижневі” або “1-місячні” акаунти поруч з вашим “основним” акаунтом знаючи, що всі дані тимчасових акаунтів разом з усіма метаданими будуть видалені. Більше того, якщо пристрій вилучається, то контакти, які використовують тимчасові електронні скриньки, не можуть бути легко ідентифіковані, на відміну від месенджерів, які розкривають телефонні номери в групах чату, які, в свою чергу, часто пов’язані з юридичними особами.</p>
|
||||
<p>Як для захисту від поштових серверів, що збирають метадані а також для захисту від загрози вилучення пристрою ми рекомендуємо використовувати <a href="https://delta.chat/chatmail">chatmail-сервер</a> для створення псевдонімних тимчасових профілів за допомогою сканування QR-коду. Зверніть увагу, що додатки Delta Chat на всіх платформах підтримують кілька профілів тому ви можете легко використовувати ситуативні профілі поруч з вашим “основним” профілем знаючи, що всі їхні дані, разом з усіма метаданими, будуть видалені. Більше того, якщо пристрій вилучено, то контакти, які використовують тимчасові профілі не можна буде легко ідентифікувати, на відміну від месенджерів, які розкривають номери телефонів у групах чату, які, в свою чергу, часто пов’язані з юридичними особами.</p>
|
||||
|
||||
<h3 id="як-перевірити-інформацію-про-шифрування">
|
||||
|
||||
@@ -840,29 +907,11 @@ Autocrypt використовує обмежену і <a href="#openpgp-secure"
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Так.
|
||||
The best way is to send an Autocrypt Setup Message from the other e-mail client.
|
||||
Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the settings of the other client and follow the instructions shown there.</p>
|
||||
<p>Ні.</p>
|
||||
|
||||
<p>Крім того, ви можете імпортувати ключ вручну в “Налаштування -> Додаткові налаштування -> Імпорт секретних ключів”. Застереження: Переконайтеся, що ключ не захищено паролем, або видаліть його заздалегідь.</p>
|
||||
<p>Delta Chat генерує безпечні ключі OpenPGP відповідно до специфікації Autocrypt 1.1. Ви можете експортувати свій приватний ключ, але не можете імпортувати додаткові приватні ключі.</p>
|
||||
|
||||
<p>Якщо у вас немає ключа або ви навіть не знаєте, що він вам знадобиться – не хвилюйтеся: Delta Chat генерує ключі в міру необхідності, вам не потрібно натискати кнопку для цього.</p>
|
||||
|
||||
<h3 id="я-не-можу-імпортувати-свій-існуючий-pgp-ключ-у-delta-chat">
|
||||
|
||||
|
||||
Я не можу імпортувати свій існуючий PGP ключ у Delta Chat. <a href="#я-не-можу-імпортувати-свій-існуючий-pgp-ключ-у-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Найімовірнішою причиною є те, що ваш ключ зашифрований та/або використовується пароль. Такі ключі не підтримуються Delta Chat. Ви можете видалити шифрування парольної фрази та пароль і спробувати імпорт знову.</p>
|
||||
|
||||
<p>Ще одна поширена помилка – неправильне закінчення файлу. Використовуйте захищений формат ASCII і закінчення файлу <code class="language-plaintext highlighter-rouge">.asc</code>.</p>
|
||||
|
||||
<p>Delta Chat підтримує поширені формати приватних ключів OpenPGP, однак навряд чи приватні ключі з усіх джерел будуть повністю підтримуватися. Це не головна мета Delta Chat. Фактично, більшість нових користувачів не матимуть жодного ключа до використання Delta Chat. Однак ми намагаємось підтримувати приватні ключі з якомога більшої кількості джерел.</p>
|
||||
|
||||
<p>Видалення пароля з приватного ключа буде залежати від програмного забезпечення, яке використовується для управління ключами PGP. За допомогою Enigmail ви можете встановити для порожній пароль у вікні Керування ключами. За допомогою GnuPG ви можете встановити його <a href="https://github.com/deltachat/deltachat-android/issues/98#issuecomment-378383429">через командний рядок</a>. Для інших програм ви зможете знайти рішення в інтернеті.</p>
|
||||
<p>Загалом, ми не рекомендуємо і не пропонуємо користувачам керувати ключами вручну. Ми хочемо гарантувати, що аудит безпеки може зосередитися на декількох перевірених криптографічних алгоритмах а не на всій широті можливих алгоритмів, дозволених у OpenPGP.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -872,7 +921,17 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Проект Delta Chat пройшов чотири незалежні аудити безпеки та один незалежний аналіз безпеки, від найновіших до найстаріших:</p>
|
||||
<p>Так, багаторазово. Проект Delta Chat постійно проходить незалежні перевірки та аналіз безпеки, а саме, від останніх і закінчуючи старішими:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>2024 грудня відбулася <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">оцінка rPGP на замовлення NLNET</a> від <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a>. rPGP слугує рушієм наскрізного шифрування <a href="https://openpgp.org">OpenPGP</a> для Delta Chat. За результатами цього аудиту було випущено дві рекомендації:</p>
|
||||
</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-9rmp-2568-59rv">“Паніка через неправильне ненадійне введення”</a> CVE-2024-53856</li>
|
||||
<li><a href="https://github.com/rpgp/rpgp/security/advisories/GHSA-4grw-m28r-q285">“Потенційне виснаження ресурсів під час обробки ненадійних повідомлень”</a> CVE-2024-53857</li>
|
||||
</ul>
|
||||
|
||||
<p>Проблеми, описані в цих рекомендаціях, виправлено, і вони є частиною випусків Delta Chat у всіх магазинах додатків з грудня 2024 року.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -908,7 +967,7 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Так. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:</p>
|
||||
<p>Так. You can use the same profile on different devices:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -957,6 +1016,9 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
|
||||
<li>
|
||||
<p><strong>Гостьові мережі</strong> можуть не дозволяти пристроям зв’язуватися один з одним. Якщо можливо, використовуйте негостьову мережу.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Якщо у вас все ще виникають проблеми з використанням однієї мережі, спробуйте відкрити <strong>Мобільну точку доступу</strong> на одному пристрої та приєднатися до цього Wi-Fi з іншого</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Переконайтеся, що на цільовому пристрої <strong>достатньо пам’яті</strong></p>
|
||||
</li>
|
||||
@@ -964,7 +1026,7 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
|
||||
<p>Якщо передача почалася, переконайтеся, що пристрої <strong>залишаються активними</strong> і не засинають. Не виходьте з Delta Chat. (ми докладаємо всіх зусиль, щоб програма працювала у фоновому режимі, але <a href="https://dontkillmyapp.com">системи, як правило, вбивають програми</a>, на жаль)</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Delta Chat <strong>уже ввійшов</strong> на цільовому пристрої? Ви можете використовувати кілька облікових записів на одному пристрої, просто <a href="#multiple-accounts">додайте інший обліковий запис</a></p>
|
||||
<p>Delta Chat <strong>вже зареєстрований</strong> на цільовому пристрої? Ви можете використовувати кілька профілів на одному пристрої, просто <a href="#multiple-accounts">додайте ще один профіль</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Якщо у вас усе ще виникають проблеми або якщо ви <strong>не можете відсканувати QR-код</strong> спробуйте <strong>перенесення вручну</strong>, описане нижче</p>
|
||||
@@ -982,15 +1044,26 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
|
||||
<p>Цей спосіб рекомендований, лише якщо «Додати другий пристрій», як описано вище, не працює.</p>
|
||||
|
||||
<ul>
|
||||
<li>На старому пристрої перейдіть до “Налаштування -> Чати та медіа -> Експортувати резервну копію”. Введіть свій PIN-код, графічний ключ або пароль розблокування екрана. Потім ви можете натиснути на “Почати Резервне копіювання”. Це збереже файл резервної копії на вашому пристрої. Тепер вам потрібно якось перенести його на інший пристрій.</li>
|
||||
<li>На новому пристрої на екрані входу замість того, щоб увійти до свого облікового запису електронної пошти, виберіть “Імпортувати резервну копію” виберіть “Імпортувати резервну копію”. Після імпорту ваші листування, ключі шифрування ключі шифрування та медіа повинні бути скопійовані на новий пристрій.
|
||||
<ul>
|
||||
<li>Якщо ви користуєтеся iOS:** і у вас виникли труднощі, можливо <a href="https://support.delta.chat/t/import-backup-to-ios/1628">цей посібник</a> допоможе вам.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Тепер ви синхронізовані і можете використовувати обидва пристрої для надсилання та отримання наскрізно зашифрованих повідомлень зі своїми партнерами по спілкуванню.</li>
|
||||
<li>На старому пристрої перейдіть до “Налаштування -> Чати та медіа -> Експортувати резервну копію”. Введіть свій PIN-код, графічний ключ або пароль розблокування екрана. Потім ви можете натиснути на “Почати резервне копіювання”. Це збереже файл резервної копії на вашому пристрої. Тепер вам потрібно якось перенести його на інший пристрій.</li>
|
||||
<li>На новому пристрої в меню “У мене вже є профіль” виберіть “Відновити з резервної копії”. Після імпорту ваші розмови, ключі шифрування ключі шифрування та медіа повинні бути скопійовані на новий пристрій.</li>
|
||||
<li>Якщо ви користуєтеся iOS:** і у вас виникли труднощі, можливо <a href="https://support.delta.chat/t/import-backup-to-ios/1628">цей посібник</a> допоможе вам.</li>
|
||||
<li>Тепер ви синхронізовані і можете використовувати обидва пристрої для надсилання та отримання наскрізних зашифрованих повідомлень зі своїми партнерами по спілкуванню.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="чи-синхронізовані-видалення-закріплення-архівування-збереження-вимкнення-сповіщень-тощо-з-усіма-пристроями">
|
||||
|
||||
|
||||
Чи синхронізовані видалення, закріплення, архівування, збереження, вимкнення сповіщень тощо з усіма пристроями? <a href="#чи-синхронізовані-видалення-закріплення-архівування-збереження-вимкнення-сповіщень-тощо-з-усіма-пристроями" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Так.</p>
|
||||
|
||||
<p>Якщо ви, наприклад, видалите чат або повідомлення з телефону, воно буде видалено на вашому робочому столі, щойно ви знову з’явитесь в мережі.</p>
|
||||
|
||||
<p>Винятком є <a href="#delold">Видалення старих повідомлень з пристрою</a>, оскільки різні пристрої можуть мати різний обсяг пам’яті, а також системні налаштування звуків сповіщень.</p>
|
||||
|
||||
<h3 id="чи-планується-впровадження-веб-клієнта-delta-chat">
|
||||
|
||||
|
||||
@@ -1139,17 +1212,17 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
|
||||
|
||||
<p>У цьому випадку Delta Chat не потрібно стежити за папкою «Вхідні», а достатньо лише стежити за папкою DeltaChat.</p>
|
||||
|
||||
<h3 id="як-я-можу-змінити-мій-обліковий-запис-на-іншу-адресу-електронної-пошти">
|
||||
<h3 id="як-я-можу-використовувати-іншу-адресу-електронної-пошти-у-своєму-профілі">
|
||||
|
||||
|
||||
Як я можу змінити мій обліковий запис на іншу адресу електронної пошти? <a href="#як-я-можу-змінити-мій-обліковий-запис-на-іншу-адресу-електронної-пошти" class="anchor"></a>
|
||||
Як я можу використовувати іншу адресу електронної пошти у своєму профілі? <a href="#як-я-можу-використовувати-іншу-адресу-електронної-пошти-у-своєму-профілі" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
<p>Змініть свою адресу в розділі “Налаштування → Додатково → Пароль та обліковий запис” та введіть пароль вашого нового облікового запису (і, за необхідності, налаштування сервера). Ви отримаєте інформаційне повідомлення про те, що ви переїжджаєте на нову адресу. Додаткове повідомлення також з’явиться у вашому чаті “Повідомлення пристрою”.</p>
|
||||
<p>Змініть свою адресу в розділі “Налаштування → Додатково → Пароль та обліковий запис” та введіть пароль вашого нового поштового акаунта (і, за необхідності, налаштування сервера). Ви отримаєте інформаційне повідомлення про те, що ви переїжджаєте на нову адресу. Додаткове повідомлення також з’явиться у вашому чаті “Повідомлення пристрою”.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Якщо можливо, нехай ваш старий провайдер електронної пошти пересилає всі повідомлення на вашу нову адресу.</p>
|
||||
@@ -1338,17 +1411,17 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
|
||||
<p>Деякі люди використовують Delta Chat як звичайний поштовий клієнт і хочуть використовувати папку Вхідні для своєї пошти замість папки DeltaChat. Якщо ви вимкнете “Перегляд папки DeltaChat”, вам слід також вимкнути “переміщення повідомлень чату до DeltaChat”.
|
||||
В іншому випадку видалення повідомлень або налаштування декількох пристроїв може не працювати належним чином.</p>
|
||||
|
||||
<h3 id="чи-сумісний-delta-chat-із-protonmail--tutanota--criptext">
|
||||
<h3 id="чи-сумісний-delta-chat-із-proton-mail--tutanota--criptext">
|
||||
|
||||
|
||||
Чи сумісний Delta Chat із Protonmail / Tutanota / Criptext? <a href="#чи-сумісний-delta-chat-із-protonmail--tutanota--criptext" class="anchor"></a>
|
||||
Чи сумісний Delta Chat із Proton Mail / Tutanota / Criptext? <a href="#чи-сумісний-delta-chat-із-proton-mail--tutanota--criptext" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Так і ні.</li>
|
||||
<li>Ні, ви не можете використовувати свій обліковий запис Protonmail, Tutanota або Criptext у Delta Chat; вони не пропонують отримання листів через IMAP.</li>
|
||||
<li>Ні, ви не можете використовувати свій обліковий запис Proton Mail, Tutanota або Criptext у Delta Chat; вони не пропонують отримання листів через IMAP.</li>
|
||||
<li>У будь-якому випадку, ви можете використовувати Delta Chat для надсилання повідомлень людям, які користуються Protonmail, Tutanota або Criptext. Ці повідомлення не будуть наскрізно зашифрованими. Наскрізне шифрування, яке пропонують ці провайдери, не є сумісним з <a href="https://autocrypt.org/">Autocrypt</a>, стандартним шифруванням, яке використовує Delta Chat.</li>
|
||||
<li>Delta Chat може наскрізно шифрувати через будь-якого провайдера електронної пошти з будь-якою <a href="https://autocrypt.org/dev-status.html">поштовою програмою з підтримкою автошифрування</a>.</li>
|
||||
</ul>
|
||||
@@ -1442,7 +1515,7 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
|
||||
завершення прив’язок Rust/Python та запуск екосистеми чат-ботів.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>У 2021 році ми отримали подальше фінансування ЄС для двох Інтернет-технологій наступного покоління пропозиції, а саме для <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - каталог перенесення електронної пошти</a> (~97 тис. євро) та <a href="https://nlnet.nl/project/EmailPorting/">AEAP - перенесення електронної адреси</a> (~90 тис. євро), що призвело до кращої підтримки кількох облікових записів, покращеного QR-коду контактів і налаштувань груп, а також багатьох покращень роботи мережі на всіх платформах.</p>
|
||||
<p>У 2021 році ми отримали подальше фінансування від ЄС на дві пропозиції щодо Інтернету наступного покоління а саме на <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - каталог перенесення провайдерів електронної пошти</a> (~97 тис. євро) та <a href="https://nlnet.nl/project/EmailPorting/">AEAP - перенесення адрес електронної пошти</a> (~90 тис. євро), що дозволило нам покращити багатопрофільну підтримку, вдосконалити налаштування контактів та груп за допомогою QR-коду та багато інших мережевих покращень на всіх платформах.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>З кінця 2021 до березня 2023 року ми отримували фінансування <em>Internet Freedom</em> (500 тис. дол. США) від Бюро США з питань демократії, прав людини та праці (DRL). Це фінансування підтримало наші довгострокові цілі зробити Delta Chat більш зручним для використання і сумісним з широким спектром серверів електронної пошти по всьому світу, більш стійким і безпечним в місцях, які постраждали від інтернет-цензури та відключення інтернету.</p>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -35,7 +35,6 @@ public class DcAccounts {
|
||||
public native void setPushDeviceToken (String token);
|
||||
public native boolean backgroundFetch (int timeoutSeconds);
|
||||
|
||||
public native int addAccount ();
|
||||
public native int migrateAccount (String dbfile);
|
||||
public native boolean removeAccount (int accountId);
|
||||
public native int[] getAll ();
|
||||
|
||||
@@ -50,7 +50,6 @@ public class DcContact {
|
||||
public native String getAuthName ();
|
||||
public native String getDisplayName ();
|
||||
public native String getAddr ();
|
||||
public native String getNameNAddr ();
|
||||
public native String getProfileImage();
|
||||
public native int getColor ();
|
||||
public native String getStatus ();
|
||||
|
||||
@@ -17,6 +17,7 @@ public class DcContext {
|
||||
public final static int DC_EVENT_MSG_READ = 2015;
|
||||
public final static int DC_EVENT_CHAT_MODIFIED = 2020;
|
||||
public final static int DC_EVENT_CHAT_EPHEMERAL_TIMER_MODIFIED = 2021;
|
||||
public final static int DC_EVENT_CHAT_DELETED = 2023;
|
||||
public final static int DC_EVENT_CONTACTS_CHANGED = 2030;
|
||||
public final static int DC_EVENT_LOCATION_CHANGED = 2035;
|
||||
public final static int DC_EVENT_CONFIGURE_PROGRESS = 2041;
|
||||
@@ -51,8 +52,8 @@ public class DcContext {
|
||||
public final static int DC_QR_FPR_MISMATCH = 220;
|
||||
public final static int DC_QR_FPR_WITHOUT_ADDR = 230;
|
||||
public final static int DC_QR_ACCOUNT = 250;
|
||||
public final static int DC_QR_BACKUP = 251;
|
||||
public final static int DC_QR_BACKUP2 = 252;
|
||||
public final static int DC_QR_BACKUP_TOO_NEW = 255;
|
||||
public final static int DC_QR_WEBRTC = 260;
|
||||
public final static int DC_QR_PROXY = 271;
|
||||
public final static int DC_QR_ADDR = 320;
|
||||
@@ -88,7 +89,7 @@ public class DcContext {
|
||||
private static final String CONFIG_ACCOUNT_ENABLED = "ui.enabled";
|
||||
private static final String CONFIG_MUTE_MENTIONS_IF_MUTED = "ui.mute_mentions_if_muted";
|
||||
|
||||
// when using DcAccounts, use DcAccounts.addAccount() instead
|
||||
// when using DcAccounts, use Rpc.addAccount() instead
|
||||
public DcContext(String osName, String dbfile) {
|
||||
contextCPtr = createContextCPtr(osName, dbfile);
|
||||
}
|
||||
@@ -118,7 +119,6 @@ public class DcContext {
|
||||
public native void setStockTranslation (int stockId, String translation);
|
||||
public native String getBlobdir ();
|
||||
public native String getLastError ();
|
||||
public native void configure ();
|
||||
public native void stopOngoingProcess ();
|
||||
public native int isConfigured ();
|
||||
public native boolean open (String passphrase);
|
||||
@@ -137,13 +137,13 @@ public class DcContext {
|
||||
public void setConfigInt (String key, int value) { setConfig(key, Integer.toString(value)); }
|
||||
public native boolean setConfigFromQr (String qr);
|
||||
public native String getConfig (String key);
|
||||
public int getConfigInt (String key) { try{return Integer.parseInt(getConfig(key));} catch(Exception e) {} return 0; }
|
||||
public int getConfigInt (String key) { return getConfigInt(key, 0); }
|
||||
public int getConfigInt (String key, int defValue) { try{return Integer.parseInt(getConfig(key));} catch(Exception e) {} return defValue; }
|
||||
public native String getInfo ();
|
||||
public native int getConnectivity ();
|
||||
public native String getConnectivityHtml ();
|
||||
public native String getOauth2Url (String addr, String redirectUrl);
|
||||
public native String initiateKeyTransfer ();
|
||||
public native boolean continueKeyTransfer (int msg_id, String setup_code);
|
||||
public native void imex (int what, String dir);
|
||||
public native String imexHasBackup (String dir);
|
||||
public DcBackupProvider newBackupProvider () { return new DcBackupProvider(newBackupProviderCPtr()); }
|
||||
@@ -187,13 +187,16 @@ public class DcContext {
|
||||
public native void blockChat (int chat_id);
|
||||
public native void acceptChat (int chat_id);
|
||||
public DcMsg getMsg (int msg_id) { return new DcMsg(getMsgCPtr(msg_id)); }
|
||||
public native void sendEditRequest (int msg_id, String text);
|
||||
public native String getMsgInfo (int id);
|
||||
public native String getMsgHtml (int msg_id);
|
||||
public native void downloadFullMsg (int msg_id);
|
||||
public native int getFreshMsgCount (int chat_id);
|
||||
public native int estimateDeletionCount(boolean from_server, long seconds);
|
||||
public native void deleteMsgs (int msg_ids[]);
|
||||
public native void sendDeleteRequest (int msg_ids[]);
|
||||
public native void forwardMsgs (int msg_ids[], int chat_id);
|
||||
public native void saveMsgs (int msg_ids[]);
|
||||
public native boolean resendMsgs (int msg_ids[]);
|
||||
public native int sendMsg (int chat_id, DcMsg msg);
|
||||
public native int sendTextMsg (int chat_id, String text);
|
||||
@@ -242,23 +245,6 @@ public class DcContext {
|
||||
return displayname;
|
||||
}
|
||||
|
||||
public boolean isCommunity() {
|
||||
return getConfigInt("is_community") == 1;
|
||||
}
|
||||
|
||||
public void setCommunityMode(boolean enable) {
|
||||
setConfig("is_community", enable? "1" : null);
|
||||
}
|
||||
|
||||
public String getCommunityUser() {
|
||||
String name = getConfig("ui.community.selfname");
|
||||
return name == null? "" : name;
|
||||
}
|
||||
|
||||
public void setCommunityUser(String name) {
|
||||
setConfig("ui.community.selfname", name);
|
||||
}
|
||||
|
||||
public boolean isChatmail() {
|
||||
return getConfigInt("is_chatmail") == 1;
|
||||
}
|
||||
|
||||
@@ -123,6 +123,7 @@ public class DcMsg {
|
||||
private native int getViewType ();
|
||||
public int getType () { return getDownloadState()==DC_DOWNLOAD_DONE? getViewType() : DC_MSG_TEXT; }
|
||||
public native int getInfoType ();
|
||||
public native int getInfoContactId ();
|
||||
public native int getState ();
|
||||
public native int getDownloadState ();
|
||||
public native int getChatId ();
|
||||
@@ -151,7 +152,6 @@ public class DcMsg {
|
||||
public native String getWebxdcHref ();
|
||||
public native boolean isForwarded ();
|
||||
public native boolean isInfo ();
|
||||
public native boolean isSetupMessage ();
|
||||
public native boolean hasHtml ();
|
||||
public native String getSetupCodeBegin ();
|
||||
public native String getVideochatUrl ();
|
||||
@@ -159,8 +159,8 @@ public class DcMsg {
|
||||
public native void setText (String text);
|
||||
public native void setSubject (String text);
|
||||
public native void setHtml (String text);
|
||||
public native void setFile (String file, String filemime);
|
||||
public native void forceSticker ();
|
||||
public native void setFileAndDeduplicate(String file, String name, String filemime);
|
||||
public native void setDimension (int width, int height);
|
||||
public native void setDuration (int duration);
|
||||
public native void setLocation (float latitude, float longitude);
|
||||
@@ -169,7 +169,7 @@ public class DcMsg {
|
||||
public native String getQuotedText ();
|
||||
public native String getError ();
|
||||
public native String getOverrideSenderName();
|
||||
public native int getSenderColor();
|
||||
public native boolean isEdited ();
|
||||
|
||||
public String getSenderName(DcContact dcContact) {
|
||||
String overrideName = getOverrideSenderName();
|
||||
@@ -190,6 +190,14 @@ public class DcMsg {
|
||||
return cPtr != 0 ? new DcMsg(cPtr) : null;
|
||||
}
|
||||
|
||||
public native int getOriginalMsgId ();
|
||||
public native int getSavedMsgId ();
|
||||
|
||||
public boolean canSave() {
|
||||
// saving info-messages out of context results in confusion, see https://github.com/deltachat/deltachat-ios/issues/2567
|
||||
return !isInfo() && getType() != DC_MSG_VIDEOCHAT_INVITATION;
|
||||
}
|
||||
|
||||
public File getFileAsFile() {
|
||||
if(getFile()==null)
|
||||
throw new AssertionError("expected a file to be present.");
|
||||
|
||||
@@ -0,0 +1,171 @@
|
||||
package com.b44t.messenger.rpc;
|
||||
|
||||
public class EnteredLoginParam {
|
||||
// Email address.
|
||||
private final String addr;
|
||||
|
||||
// Password.
|
||||
private final String password;
|
||||
|
||||
// ============ IMAP settings ============
|
||||
|
||||
// Server hostname or IP address.
|
||||
private final String imapServer;
|
||||
|
||||
// Server port.
|
||||
private final int imapPort;
|
||||
|
||||
// Socket security.
|
||||
private final SocketSecurity imapSecurity;
|
||||
|
||||
// Username.
|
||||
private final String imapUser;
|
||||
|
||||
// ============ SMTP settings ============
|
||||
|
||||
// Server hostname or IP address.
|
||||
private final String smtpServer;
|
||||
|
||||
// Server port.
|
||||
private final int smtpPort;
|
||||
|
||||
// Socket security.
|
||||
private final SocketSecurity smtpSecurity;
|
||||
|
||||
// Username.
|
||||
private final String smtpUser;
|
||||
|
||||
// SMTP Password. Only needs to be specified if different than IMAP password.
|
||||
private final String smtpPassword;
|
||||
|
||||
// TLS options: whether to allow invalid certificates and/or
|
||||
// invalid hostnames
|
||||
private final EnteredCertificateChecks certificateChecks;
|
||||
|
||||
// If true, login via OAUTH2 (not recommended anymore)
|
||||
private final boolean oauth2;
|
||||
|
||||
public EnteredLoginParam(String addr,
|
||||
String password,
|
||||
String imapServer,
|
||||
int imapPort,
|
||||
SocketSecurity imapSecurity,
|
||||
String imapUser,
|
||||
String smtpServer,
|
||||
int smtpPort,
|
||||
SocketSecurity smtpSecurity,
|
||||
String smtpUser,
|
||||
String smtpPassword,
|
||||
EnteredCertificateChecks certificateChecks,
|
||||
boolean oauth2) {
|
||||
this.addr = addr;
|
||||
this.password = password;
|
||||
this.imapServer = imapServer;
|
||||
this.imapPort = imapPort;
|
||||
this.imapSecurity = imapSecurity;
|
||||
this.imapUser = imapUser;
|
||||
this.smtpServer = smtpServer;
|
||||
this.smtpPort = smtpPort;
|
||||
this.smtpSecurity = smtpSecurity;
|
||||
this.smtpUser = smtpUser;
|
||||
this.smtpPassword = smtpPassword;
|
||||
this.certificateChecks = certificateChecks;
|
||||
this.oauth2 = oauth2;
|
||||
}
|
||||
|
||||
public String getAddr() {
|
||||
return addr;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public String getImapServer() {
|
||||
return imapServer;
|
||||
}
|
||||
|
||||
public int getImapPort() {
|
||||
return imapPort;
|
||||
}
|
||||
|
||||
public SocketSecurity getImapSecurity() {
|
||||
return imapSecurity;
|
||||
}
|
||||
|
||||
public String getImapUser() {
|
||||
return imapUser;
|
||||
}
|
||||
|
||||
public String getSmtpServer() {
|
||||
return smtpServer;
|
||||
}
|
||||
|
||||
public int getSmtpPort() {
|
||||
return smtpPort;
|
||||
}
|
||||
|
||||
public SocketSecurity getSmtpSecurity() {
|
||||
return smtpSecurity;
|
||||
}
|
||||
|
||||
public String getSmtpUser() {
|
||||
return smtpUser;
|
||||
}
|
||||
|
||||
public String getSmtpPassword() {
|
||||
return smtpPassword;
|
||||
}
|
||||
|
||||
public EnteredCertificateChecks getCertificateChecks() {
|
||||
return certificateChecks;
|
||||
}
|
||||
|
||||
public boolean isOauth2() {
|
||||
return oauth2;
|
||||
}
|
||||
|
||||
public enum EnteredCertificateChecks {
|
||||
automatic, strict, acceptInvalidCertificates,
|
||||
}
|
||||
|
||||
public static EnteredCertificateChecks certificateChecksFromInt(int position) {
|
||||
switch (position) {
|
||||
case 0:
|
||||
return EnteredCertificateChecks.automatic;
|
||||
case 1:
|
||||
return EnteredCertificateChecks.strict;
|
||||
case 2:
|
||||
return EnteredCertificateChecks.acceptInvalidCertificates;
|
||||
}
|
||||
throw new IllegalArgumentException("Invalid certificate position: " + position);
|
||||
}
|
||||
|
||||
public enum SocketSecurity {
|
||||
// Unspecified socket security, select automatically.
|
||||
automatic,
|
||||
|
||||
// TLS connection.
|
||||
ssl,
|
||||
|
||||
// STARTTLS connection.
|
||||
starttls,
|
||||
|
||||
// No TLS, plaintext connection.
|
||||
plain,
|
||||
}
|
||||
|
||||
public static SocketSecurity socketSecurityFromInt(int position) {
|
||||
switch (position) {
|
||||
case 0:
|
||||
return SocketSecurity.automatic;
|
||||
case 1:
|
||||
return SocketSecurity.ssl;
|
||||
case 2:
|
||||
return SocketSecurity.starttls;
|
||||
case 3:
|
||||
return SocketSecurity.plain;
|
||||
}
|
||||
throw new IllegalArgumentException("Invalid socketSecurity position: " + position);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.b44t.messenger.rpc;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.b44t.messenger.DcJsonrpcInstance;
|
||||
import com.b44t.messenger.util.concurrent.SettableFuture;
|
||||
import com.google.gson.Gson;
|
||||
@@ -8,15 +10,20 @@ import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import org.thoughtcrime.securesms.qr.QrShowFragment;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class Rpc {
|
||||
private final static String TAG = Rpc.class.getSimpleName();
|
||||
|
||||
private final Map<Integer, SettableFuture<JsonElement>> requestFutures = new ConcurrentHashMap<>();
|
||||
private final DcJsonrpcInstance dcJsonrpcInstance;
|
||||
private int requestId = 0;
|
||||
private boolean started = false;
|
||||
private final Gson gson = new GsonBuilder().serializeNulls().create();
|
||||
|
||||
public Rpc(DcJsonrpcInstance dcJsonrpcInstance) {
|
||||
@@ -37,7 +44,14 @@ public class Rpc {
|
||||
}
|
||||
|
||||
if (response.error != null) {
|
||||
future.setException(new RpcException(response.error.toString()));
|
||||
String message;
|
||||
try {
|
||||
message = response.error.getAsJsonObject().get("message").getAsString();
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Can't get response error message: " + e);
|
||||
message = response.error.toString();
|
||||
}
|
||||
future.setException(new RpcException(message));
|
||||
} else if (response.result != null) {
|
||||
future.set(response.result);
|
||||
} else {
|
||||
@@ -46,6 +60,7 @@ public class Rpc {
|
||||
}
|
||||
|
||||
public void start() {
|
||||
started = true;
|
||||
new Thread(() -> {
|
||||
while (true) {
|
||||
try {
|
||||
@@ -57,7 +72,9 @@ public class Rpc {
|
||||
}, "jsonrpcThread").start();
|
||||
}
|
||||
|
||||
public SettableFuture<JsonElement> call(String method, Object... params) {
|
||||
public SettableFuture<JsonElement> call(String method, Object... params) throws RpcException {
|
||||
if (!started) throw new RpcException("RPC not started yet.");
|
||||
|
||||
int id;
|
||||
synchronized (this) {
|
||||
id = ++requestId;
|
||||
@@ -125,6 +142,22 @@ public class Rpc {
|
||||
return getResult("get_account_file_size", accountId).getAsInt();
|
||||
}
|
||||
|
||||
public void changeContactName(int accountId, int contactId, String name) throws RpcException {
|
||||
getResult("change_contact_name", accountId, contactId, name);
|
||||
}
|
||||
|
||||
public int addAccount() throws RpcException {
|
||||
return getResult("add_account").getAsInt();
|
||||
}
|
||||
|
||||
public void addTransportFromQr(int accountId, String qrCode) throws RpcException {
|
||||
getResult("add_transport_from_qr", accountId, qrCode);
|
||||
}
|
||||
|
||||
public void addTransport(int accountId, EnteredLoginParam param) throws RpcException {
|
||||
getResult("add_transport", accountId, param);
|
||||
}
|
||||
|
||||
private static class Request {
|
||||
private final String jsonrpc = "2.0";
|
||||
public final String method;
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcEvent;
|
||||
import com.b44t.messenger.DcEventEmitter;
|
||||
import com.b44t.messenger.rpc.Rpc;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
|
||||
import org.thoughtcrime.securesms.connect.AccountManager;
|
||||
import org.thoughtcrime.securesms.connect.DcEventCenter;
|
||||
@@ -109,6 +110,7 @@ public class ApplicationContext extends MultiDexApplication {
|
||||
|
||||
dcAccounts = new DcAccounts(new File(getFilesDir(), "accounts").getAbsolutePath());
|
||||
rpc = new Rpc(dcAccounts.getJsonrpcInstance());
|
||||
rpc.start();
|
||||
AccountManager.getInstance().migrateToDcAccounts(this);
|
||||
int[] allAccounts = dcAccounts.getAll();
|
||||
for (int accountId : allAccounts) {
|
||||
@@ -126,7 +128,11 @@ public class ApplicationContext extends MultiDexApplication {
|
||||
}
|
||||
}
|
||||
if (allAccounts.length == 0) {
|
||||
dcAccounts.addAccount();
|
||||
try {
|
||||
rpc.addAccount();
|
||||
} catch (RpcException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
dcContext = dcAccounts.getSelectedAccount();
|
||||
notificationCenter = new NotificationCenter(this);
|
||||
@@ -143,8 +149,6 @@ public class ApplicationContext extends MultiDexApplication {
|
||||
Log.i("DeltaChat", "shutting down event handler");
|
||||
}, "eventThread").start();
|
||||
|
||||
rpc.start();
|
||||
|
||||
// migrating global notifications pref. to per-account config, added 10/July/24
|
||||
final String NOTIFICATION_PREF = "pref_key_enable_notifications";
|
||||
boolean isMuted = !Prefs.getBooleanPreference(this, NOTIFICATION_PREF, true);
|
||||
|
||||
@@ -17,22 +17,15 @@
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Build.VERSION;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.app.NotificationManagerCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.graphics.drawable.DrawableCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
@@ -51,9 +44,10 @@ import org.thoughtcrime.securesms.preferences.PrivacyPreferenceFragment;
|
||||
import org.thoughtcrime.securesms.preferences.CorrectedPreferenceFragment;
|
||||
import org.thoughtcrime.securesms.preferences.NotificationsPreferenceFragment;
|
||||
import org.thoughtcrime.securesms.preferences.widgets.ProfilePreference;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.qr.BackupTransferActivity;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.ScreenLockUtil;
|
||||
|
||||
/**
|
||||
@@ -74,6 +68,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
|
||||
private static final String PREFERENCE_CATEGORY_MULTIDEVICE = "preference_category_multidevice";
|
||||
private static final String PREFERENCE_CATEGORY_ADVANCED = "preference_category_advanced";
|
||||
private static final String PREFERENCE_CATEGORY_CONNECTIVITY = "preference_category_connectivity";
|
||||
private static final String PREFERENCE_CATEGORY_DONATE = "preference_category_donate";
|
||||
private static final String PREFERENCE_CATEGORY_HELP = "preference_category_help";
|
||||
|
||||
public static final int REQUEST_CODE_SET_BACKGROUND = 11;
|
||||
@@ -153,6 +148,9 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
|
||||
this.findPreference(PREFERENCE_CATEGORY_ADVANCED)
|
||||
.setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_ADVANCED));
|
||||
|
||||
this.findPreference(PREFERENCE_CATEGORY_DONATE)
|
||||
.setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_DONATE));
|
||||
|
||||
this.findPreference(PREFERENCE_CATEGORY_HELP)
|
||||
.setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_HELP));
|
||||
|
||||
@@ -203,38 +201,6 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
|
||||
.setSummary(AdvancedPreferenceFragment.getVersion(getActivity()));
|
||||
}
|
||||
|
||||
@TargetApi(11)
|
||||
private void tintIcons(Context context) {
|
||||
Drawable notifications = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_notifications_white_24dp));
|
||||
Drawable swap = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_swap_vert_white_24dp));
|
||||
Drawable appearance = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_brightness_6_white_24dp));
|
||||
Drawable chats = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_forum_white_24dp));
|
||||
Drawable privacy = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_lock_white_24dp));
|
||||
Drawable advanced = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_advanced_white_24dp));
|
||||
Drawable help = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_help_white_24dp));
|
||||
|
||||
int[] tintAttr = new int[]{R.attr.pref_icon_tint};
|
||||
TypedArray typedArray = context.obtainStyledAttributes(tintAttr);
|
||||
int color = typedArray.getColor(0, 0x0);
|
||||
typedArray.recycle();
|
||||
|
||||
DrawableCompat.setTint(notifications, color);
|
||||
DrawableCompat.setTint(swap, color);
|
||||
DrawableCompat.setTint(appearance, color);
|
||||
DrawableCompat.setTint(chats, color);
|
||||
DrawableCompat.setTint(privacy, color);
|
||||
DrawableCompat.setTint(advanced, color);
|
||||
DrawableCompat.setTint(help, color);
|
||||
|
||||
this.findPreference(PREFERENCE_CATEGORY_NOTIFICATIONS).setIcon(notifications);
|
||||
this.findPreference(PREFERENCE_CATEGORY_CONNECTIVITY).setIcon(swap);
|
||||
this.findPreference(PREFERENCE_CATEGORY_APPEARANCE).setIcon(appearance);
|
||||
this.findPreference(PREFERENCE_CATEGORY_CHATS).setIcon(chats);
|
||||
this.findPreference(PREFERENCE_CATEGORY_PRIVACY).setIcon(privacy);
|
||||
this.findPreference(PREFERENCE_CATEGORY_ADVANCED).setIcon(advanced);
|
||||
this.findPreference(PREFERENCE_CATEGORY_HELP).setIcon(help);
|
||||
}
|
||||
|
||||
private class CategoryClickListener implements Preference.OnPreferenceClickListener {
|
||||
private final String category;
|
||||
|
||||
@@ -289,6 +255,9 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
|
||||
case PREFERENCE_CATEGORY_ADVANCED:
|
||||
fragment = new AdvancedPreferenceFragment();
|
||||
break;
|
||||
case PREFERENCE_CATEGORY_DONATE:
|
||||
IntentUtils.showInBrowser(requireActivity(), "https://arcanechat.me/#contribute");
|
||||
break;
|
||||
case PREFERENCE_CATEGORY_HELP:
|
||||
startActivity(new Intent(getActivity(), LocalHelpActivity.class));
|
||||
break;
|
||||
|
||||
@@ -9,9 +9,8 @@ public class AttachContactActivity extends ContactSelectionActivity {
|
||||
public static final String CONTACT_ID_EXTRA = "contact_id_extra";
|
||||
|
||||
@Override
|
||||
public void onContactSelected(int specialId, String addr) {
|
||||
public void onContactSelected(int contactId) {
|
||||
Intent intent = new Intent();
|
||||
int contactId = DcHelper.getContext(this).lookupContactIdByAddr(addr);
|
||||
intent.putExtra(CONTACT_ID_EXTRA, contactId);
|
||||
setResult(RESULT_OK, intent);
|
||||
finish();
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.ViewConfiguration;
|
||||
|
||||
@@ -18,9 +18,8 @@ import com.b44t.messenger.rpc.Rpc;
|
||||
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -11,19 +11,23 @@ import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.view.ActionMode;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.pm.ShortcutInfoCompat;
|
||||
import androidx.core.content.pm.ShortcutManagerCompat;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.b44t.messenger.DcChat;
|
||||
@@ -33,6 +37,7 @@ import com.google.android.material.snackbar.Snackbar;
|
||||
import org.thoughtcrime.securesms.components.registration.PulsingFloatingActionButton;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.connect.DirectShareUtil;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.RelayUtil;
|
||||
import org.thoughtcrime.securesms.util.SendRelayedMessageUtil;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
@@ -316,9 +321,41 @@ public abstract class BaseConversationListFragment extends Fragment implements A
|
||||
updateActionModeItems(actionMode.getMenu());
|
||||
}
|
||||
|
||||
private void handleAddToHomeScreen() {
|
||||
final Activity activity = requireActivity();
|
||||
final DcContext dcContext = DcHelper.getContext(activity);
|
||||
final Set<Long> selectedChats = getListAdapter().getBatchSelections();
|
||||
final DcChat chat = dcContext.getChat(selectedChats.iterator().next().intValue());
|
||||
|
||||
Intent intent = new Intent(activity, ShareActivity.class);
|
||||
intent.setAction(Intent.ACTION_SEND);
|
||||
intent.putExtra(ShareActivity.EXTRA_ACC_ID, dcContext.getAccountId());
|
||||
intent.putExtra(ShareActivity.EXTRA_CHAT_ID, chat.getId());
|
||||
|
||||
Recipient recipient = new Recipient(activity, chat);
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
Bitmap avatar = DirectShareUtil.getIconForShortcut(activity, recipient);
|
||||
ShortcutInfoCompat shortcutInfoCompat = new ShortcutInfoCompat.Builder(activity, "chat-" + dcContext.getAccountId() + "-" + chat.getId())
|
||||
.setShortLabel(chat.getName())
|
||||
.setIcon(IconCompat.createWithAdaptiveBitmap(avatar))
|
||||
.setIntent(intent)
|
||||
.build();
|
||||
Util.runOnMain(() -> {
|
||||
if (!ShortcutManagerCompat.requestPinShortcut(activity, shortcutInfoCompat, null)) {
|
||||
Toast.makeText(activity, "ErrAddToHomescreen: requestPinShortcut() failed", Toast.LENGTH_LONG).show();
|
||||
} else if (actionMode != null) {
|
||||
actionMode.finish();
|
||||
actionMode = null;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private void updateActionModeItems(Menu menu) {
|
||||
// We do not show action mode icons when relaying (= sharing or forwarding).
|
||||
if (!isRelayingMessageContent(requireActivity())) {
|
||||
final int selectedCount = getListAdapter().getBatchSelections().size();
|
||||
menu.findItem(R.id.menu_add_to_home_screen).setVisible(selectedCount == 1);
|
||||
MenuItem archiveItem = menu.findItem(R.id.menu_archive_selected);
|
||||
if (offerToArchive()) {
|
||||
archiveItem.setIcon(R.drawable.ic_archive_white_24dp);
|
||||
@@ -376,13 +413,28 @@ public abstract class BaseConversationListFragment extends Fragment implements A
|
||||
|
||||
@Override
|
||||
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_select_all: handleSelectAllThreads(); return true;
|
||||
case R.id.menu_delete_selected: handleDeleteAllSelected(); return true;
|
||||
case R.id.menu_pin_selected: handlePinAllSelected(); return true;
|
||||
case R.id.menu_archive_selected: handleArchiveAllSelected(); return true;
|
||||
case R.id.menu_mute_selected: handleMuteAllSelected(); return true;
|
||||
case R.id.menu_marknoticed_selected: handleMarknoticedSelected(); return true;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.menu_select_all) {
|
||||
handleSelectAllThreads();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_delete_selected) {
|
||||
handleDeleteAllSelected();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_pin_selected) {
|
||||
handlePinAllSelected();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_archive_selected) {
|
||||
handleArchiveAllSelected();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_mute_selected) {
|
||||
handleMuteAllSelected();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_marknoticed_selected) {
|
||||
handleMarknoticedSelected();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_add_to_home_screen) {
|
||||
handleAddToHomeScreen();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -25,6 +25,7 @@ public interface BindableConversationItem extends Unbindable {
|
||||
|
||||
interface EventListener {
|
||||
void onQuoteClicked(DcMsg messageRecord);
|
||||
void onJumpToOriginalClicked(DcMsg messageRecord);
|
||||
void onShowFullClicked(DcMsg messageRecord);
|
||||
void onDownloadClicked(DcMsg messageRecord);
|
||||
void onReactionClicked(DcMsg messageRecord);
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.Loader;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.Loader;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcEvent;
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@ import java.util.List;
|
||||
*/
|
||||
public class ContactMultiSelectionActivity extends ContactSelectionActivity {
|
||||
|
||||
public static final String CONTACTS_EXTRA = "contacts_extra";
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle icicle, boolean ready) {
|
||||
getIntent().putExtra(ContactSelectionListFragment.MULTI_SELECT, true);
|
||||
@@ -57,11 +59,10 @@ public class ContactMultiSelectionActivity extends ContactSelectionActivity {
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_add_members:
|
||||
saveSelection();
|
||||
finish();
|
||||
return true;
|
||||
if (item.getItemId() == R.id.menu_add_members) {
|
||||
saveSelection();
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -69,12 +70,8 @@ public class ContactMultiSelectionActivity extends ContactSelectionActivity {
|
||||
|
||||
private void saveSelection() {
|
||||
Intent resultIntent = getIntent();
|
||||
List<String> selectedContacts = contactsFragment.getSelectedContacts();
|
||||
|
||||
if (selectedContacts != null) {
|
||||
resultIntent.putStringArrayListExtra("contacts", new ArrayList<>(selectedContacts));
|
||||
}
|
||||
|
||||
List<Integer> selectedContacts = contactsFragment.getSelectedContacts();
|
||||
resultIntent.putIntegerArrayListExtra(CONTACTS_EXTRA, new ArrayList<>(selectedContacts));
|
||||
setResult(RESULT_OK, resultIntent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,8 +89,8 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContactSelected(int specialId, String number) {}
|
||||
public void onContactSelected(int contactId) {}
|
||||
|
||||
@Override
|
||||
public void onContactDeselected(int specialId, String number) {}
|
||||
public void onContactDeselected(int contactId) {}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.util.SparseIntArray;
|
||||
@@ -90,7 +89,7 @@ public class ContactSelectionListFragment extends Fragment
|
||||
|
||||
private DcContext dcContext;
|
||||
|
||||
private Set<String> selectedContacts;
|
||||
private Set<Integer> selectedContacts;
|
||||
private OnContactSelectedListener onContactSelectedListener;
|
||||
private String cursorFilter;
|
||||
private RecyclerView recyclerView;
|
||||
@@ -149,16 +148,16 @@ public class ContactSelectionListFragment extends Fragment
|
||||
|
||||
@Override
|
||||
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
|
||||
switch (menuItem.getItemId()) {
|
||||
case R.id.menu_select_all:
|
||||
handleSelectAll();
|
||||
return true;
|
||||
case R.id.menu_view_profile:
|
||||
handleViewProfile();
|
||||
return true;
|
||||
case R.id.menu_delete_selected:
|
||||
handleDeleteSelected();
|
||||
return true;
|
||||
int itemId = menuItem.getItemId();
|
||||
if (itemId == R.id.menu_select_all) {
|
||||
handleSelectAll();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_view_profile) {
|
||||
handleViewProfile();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_delete_selected) {
|
||||
handleDeleteSelected();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -213,16 +212,9 @@ public class ContactSelectionListFragment extends Fragment
|
||||
ContactSelectionListAdapter adapter = getContactSelectionListAdapter();
|
||||
final SparseIntArray actionModeSelection = adapter.getActionModeSelection().clone();
|
||||
new Thread(() -> {
|
||||
boolean failed = false;
|
||||
for (int index = 0; index < actionModeSelection.size(); index++) {
|
||||
int contactId = actionModeSelection.valueAt(index);
|
||||
boolean currentFailed = !dcContext.deleteContact(contactId);
|
||||
failed = currentFailed || failed;
|
||||
}
|
||||
if (failed) {
|
||||
Util.runOnMain(()-> {
|
||||
Toast.makeText(getActivity(), R.string.cannot_delete_contacts_in_use, Toast.LENGTH_LONG).show();
|
||||
});
|
||||
dcContext.deleteContact(contactId);
|
||||
}
|
||||
}).start();
|
||||
adapter.resetActionModeSelection();
|
||||
@@ -242,8 +234,8 @@ public class ContactSelectionListFragment extends Fragment
|
||||
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
|
||||
}
|
||||
|
||||
public @NonNull List<String> getSelectedContacts() {
|
||||
List<String> selected = new LinkedList<>();
|
||||
public @NonNull List<Integer> getSelectedContacts() {
|
||||
List<Integer> selected = new LinkedList<>();
|
||||
if (selectedContacts != null) {
|
||||
selected.addAll(selectedContacts);
|
||||
}
|
||||
@@ -266,7 +258,7 @@ public class ContactSelectionListFragment extends Fragment
|
||||
isMulti(),
|
||||
true);
|
||||
selectedContacts = adapter.getSelectedContacts();
|
||||
ArrayList<String> preselectedContacts = getActivity().getIntent().getStringArrayListExtra(PRESELECTED_CONTACTS);
|
||||
ArrayList<Integer> preselectedContacts = getActivity().getIntent().getIntegerArrayListExtra(PRESELECTED_CONTACTS);
|
||||
if(preselectedContacts!=null) {
|
||||
selectedContacts.addAll(preselectedContacts);
|
||||
}
|
||||
@@ -344,10 +336,9 @@ public class ContactSelectionListFragment extends Fragment
|
||||
}
|
||||
return;
|
||||
}
|
||||
int specialId = contact.getSpecialId();
|
||||
String addr = contact.getNumber();
|
||||
if (!isMulti() || !selectedContacts.contains(addr)) {
|
||||
if (specialId == DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT) {
|
||||
int contactId = contact.getSpecialId();
|
||||
if (!isMulti() || !selectedContacts.contains(contactId)) {
|
||||
if (contactId == DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT) {
|
||||
Intent intent = new Intent(getContext(), NewContactActivity.class);
|
||||
if (dcContext.mayBeValidAddr(cursorFilter)) {
|
||||
intent.putExtra(NewContactActivity.ADDR_EXTRA, cursorFilter);
|
||||
@@ -371,16 +362,16 @@ public class ContactSelectionListFragment extends Fragment
|
||||
return;
|
||||
}
|
||||
|
||||
selectedContacts.add(addr);
|
||||
selectedContacts.add(contactId);
|
||||
contact.setChecked(true);
|
||||
if (onContactSelectedListener != null) {
|
||||
onContactSelectedListener.onContactSelected(specialId, addr);
|
||||
onContactSelectedListener.onContactSelected(contactId);
|
||||
}
|
||||
} else {
|
||||
selectedContacts.remove(addr);
|
||||
selectedContacts.remove(contactId);
|
||||
contact.setChecked(false);
|
||||
if (onContactSelectedListener != null) {
|
||||
onContactSelectedListener.onContactDeselected(specialId, addr);
|
||||
onContactSelectedListener.onContactDeselected(contactId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -406,8 +397,8 @@ public class ContactSelectionListFragment extends Fragment
|
||||
}
|
||||
|
||||
public interface OnContactSelectedListener {
|
||||
void onContactSelected(int specialId, String number);
|
||||
void onContactDeselected(int specialId, String number);
|
||||
void onContactSelected(int contactId);
|
||||
void onContactDeselected(int contactId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -421,7 +412,10 @@ public class ContactSelectionListFragment extends Fragment
|
||||
public void onActivityResult(int reqCode, int resultCode, final Intent data) {
|
||||
super.onActivityResult(reqCode, resultCode, data);
|
||||
if (resultCode == Activity.RESULT_OK && reqCode == CONTACT_ADDR_RESULT_CODE) {
|
||||
selectedContacts.add(data.getStringExtra(NewContactActivity.ADDR_EXTRA));
|
||||
int contactId = data.getIntExtra(NewContactActivity.CONTACT_ID_EXTRA, 0);
|
||||
if (contactId != 0) {
|
||||
selectedContacts.add(contactId);
|
||||
}
|
||||
getLoaderManager().restartLoader(0, null, ContactSelectionListFragment.this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,7 +120,6 @@ import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener;
|
||||
import org.thoughtcrime.securesms.util.guava.Optional;
|
||||
import org.thoughtcrime.securesms.util.views.ProgressDialog;
|
||||
import org.thoughtcrime.securesms.util.views.Stub;
|
||||
import org.thoughtcrime.securesms.video.recode.VideoRecoder;
|
||||
import org.thoughtcrime.securesms.videochat.VideochatUtil;
|
||||
|
||||
@@ -196,6 +195,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
private boolean isDefaultSms = true;
|
||||
private boolean isSecurityInitialized = false;
|
||||
private boolean successfulForwardingAttempt = false;
|
||||
private boolean isEditing = false;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle state, boolean ready) {
|
||||
@@ -496,6 +496,13 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
Log.e(TAG, "cannot set up in-chat-search: ", e);
|
||||
}
|
||||
|
||||
if (!dcChat.canSend() || isEditing) {
|
||||
MenuItem attachItem = menu.findItem(R.id.menu_add_attachment);
|
||||
if (attachItem!=null) {
|
||||
attachItem.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
return true;
|
||||
}
|
||||
@@ -503,17 +510,40 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_leave: handleLeaveGroup(); return true;
|
||||
case R.id.menu_archive_chat: handleArchiveChat(); return true;
|
||||
case R.id.menu_clear_chat: fragment.handleClearChat(); return true;
|
||||
case R.id.menu_delete_chat: handleDeleteChat(); return true;
|
||||
case R.id.menu_mute_notifications: handleMuteNotifications(); return true;
|
||||
case R.id.menu_show_map: WebxdcActivity.openMaps(this, chatId); return true;
|
||||
case R.id.menu_search_up: handleMenuSearchNext(false); return true;
|
||||
case R.id.menu_search_down: handleMenuSearchNext(true); return true;
|
||||
case android.R.id.home: handleReturnToConversationList(); return true;
|
||||
case R.id.menu_ephemeral_messages: handleEphemeralMessages(); return true;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.menu_add_attachment) {
|
||||
handleAddAttachment();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_leave) {
|
||||
handleLeaveGroup();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_archive_chat) {
|
||||
handleArchiveChat();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_clear_chat) {
|
||||
fragment.handleClearChat();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_delete_chat) {
|
||||
handleDeleteChat();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_mute_notifications) {
|
||||
handleMuteNotifications();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_show_map) {
|
||||
WebxdcActivity.openMaps(this, chatId);
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_search_up) {
|
||||
handleMenuSearchNext(false);
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_search_down) {
|
||||
handleMenuSearchNext(true);
|
||||
return true;
|
||||
} else if (itemId == android.R.id.home) {
|
||||
handleReturnToConversationList();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_ephemeral_messages) {
|
||||
handleEphemeralMessages();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -656,7 +686,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
if (!dcChat.isMultiUser()) {
|
||||
int[] contactIds = dcContext.getChatContacts(chatId);
|
||||
if (contactIds.length == 1 || contactIds.length == 2) {
|
||||
name = dcContext.getContact(contactIds[0]).getNameNAddr();
|
||||
name = dcContext.getContact(contactIds[0]).getDisplayName();
|
||||
}
|
||||
}
|
||||
new AlertDialog.Builder(this)
|
||||
@@ -709,6 +739,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
* @return
|
||||
*/
|
||||
private ListenableFuture<Boolean> initializeDraft() {
|
||||
isEditing = false;
|
||||
final SettableFuture<Boolean> future = new SettableFuture<>();
|
||||
DcMsg draft = dcContext.getDraft(chatId);
|
||||
final String sharedText = RelayUtil.getSharedText(this);
|
||||
@@ -740,8 +771,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
handleReplyMessage(quote);
|
||||
}
|
||||
|
||||
String filename = draft.getFile();
|
||||
if (filename.isEmpty() || !new File(filename).exists()) {
|
||||
String file = draft.getFile();
|
||||
if (file.isEmpty() || !new File(file).exists()) {
|
||||
future.set(!text.isEmpty());
|
||||
updateToggleButtonState();
|
||||
return future;
|
||||
@@ -761,26 +792,21 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
};
|
||||
|
||||
File file = new File(filename);
|
||||
Uri uri = Uri.fromFile(file);
|
||||
switch (draft.getType()) {
|
||||
case DcMsg.DC_MSG_IMAGE:
|
||||
setMedia(uri, MediaType.IMAGE).addListener(listener);
|
||||
setMedia(draft, MediaType.IMAGE).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_GIF:
|
||||
setMedia(uri, MediaType.GIF).addListener(listener);
|
||||
setMedia(draft, MediaType.GIF).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_AUDIO:
|
||||
setMedia(uri, MediaType.AUDIO).addListener(listener);
|
||||
setMedia(draft, MediaType.AUDIO).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_VIDEO:
|
||||
setMedia(uri, MediaType.VIDEO).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_WEBXDC:
|
||||
setMedia(draft, MediaType.DOCUMENT).addListener(listener);
|
||||
setMedia(draft, MediaType.VIDEO).addListener(listener);
|
||||
break;
|
||||
default:
|
||||
setMedia(uri, MediaType.DOCUMENT).addListener(listener);
|
||||
setMedia(draft, MediaType.DOCUMENT).addListener(listener);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -996,9 +1022,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
final SettableFuture<Integer> future = new SettableFuture<>();
|
||||
|
||||
DcMsg msg = null;
|
||||
Optional<QuoteModel> quote = inputPanel.getQuote();
|
||||
Integer recompress = 0;
|
||||
boolean editing = isEditing;
|
||||
|
||||
// for a quick ui feedback, we clear the related controls immediately on sending messages.
|
||||
// for drafts, however, we do not change the controls, the activity may be resumed.
|
||||
@@ -1007,110 +1032,114 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
inputPanel.clearQuote();
|
||||
}
|
||||
|
||||
if(slideDeck!=null) {
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
DcMsg msg = null;
|
||||
int recompress = 0;
|
||||
|
||||
if (action==ACTION_SEND_OUT) {
|
||||
attachmentManager.clear(glideRequests, false);
|
||||
if (editing) {
|
||||
int msgId = quote.get().getQuotedMsg().getId();
|
||||
if (action == ACTION_SEND_OUT) {
|
||||
dcContext.sendEditRequest(msgId, body);
|
||||
} else {
|
||||
dcContext.setDraft(chatId, null);
|
||||
}
|
||||
future.set(chatId);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
if (slideDeck.getWebxdctDraftId() != 0) {
|
||||
msg = dcContext.getDraft(chatId);
|
||||
} else {
|
||||
List<Attachment> attachments = slideDeck.asAttachments();
|
||||
for (Attachment attachment : attachments) {
|
||||
String contentType = attachment.getContentType();
|
||||
if (MediaUtil.isImageType(contentType) && slideDeck.getDocumentSlide() == null) {
|
||||
msg = new DcMsg(dcContext,
|
||||
MediaUtil.isGif(contentType) ? DcMsg.DC_MSG_GIF : DcMsg.DC_MSG_IMAGE);
|
||||
msg.setDimension(attachment.getWidth(), attachment.getHeight());
|
||||
} else if (MediaUtil.isAudioType(contentType)) {
|
||||
msg = new DcMsg(dcContext,
|
||||
attachment.isVoiceNote() ? DcMsg.DC_MSG_VOICE : DcMsg.DC_MSG_AUDIO);
|
||||
} else if (MediaUtil.isVideoType(contentType) && slideDeck.getDocumentSlide() == null) {
|
||||
msg = new DcMsg(dcContext, DcMsg.DC_MSG_VIDEO);
|
||||
recompress = DcMsg.DC_MSG_VIDEO;
|
||||
} else {
|
||||
msg = new DcMsg(dcContext, DcMsg.DC_MSG_FILE);
|
||||
if(slideDeck!=null) {
|
||||
if (action==ACTION_SEND_OUT) {
|
||||
Util.runOnMain(() -> attachmentManager.clear(glideRequests, false));
|
||||
}
|
||||
|
||||
try {
|
||||
if (slideDeck.getWebxdctDraftId() != 0) {
|
||||
msg = dcContext.getDraft(chatId);
|
||||
} else {
|
||||
List<Attachment> attachments = slideDeck.asAttachments();
|
||||
for (Attachment attachment : attachments) {
|
||||
String contentType = attachment.getContentType();
|
||||
if (MediaUtil.isImageType(contentType) && slideDeck.getDocumentSlide() == null) {
|
||||
msg = new DcMsg(dcContext,
|
||||
MediaUtil.isGif(contentType) ? DcMsg.DC_MSG_GIF : DcMsg.DC_MSG_IMAGE);
|
||||
msg.setDimension(attachment.getWidth(), attachment.getHeight());
|
||||
} else if (MediaUtil.isAudioType(contentType)) {
|
||||
msg = new DcMsg(dcContext,
|
||||
attachment.isVoiceNote() ? DcMsg.DC_MSG_VOICE : DcMsg.DC_MSG_AUDIO);
|
||||
} else if (MediaUtil.isVideoType(contentType) && slideDeck.getDocumentSlide() == null) {
|
||||
msg = new DcMsg(dcContext, DcMsg.DC_MSG_VIDEO);
|
||||
recompress = DcMsg.DC_MSG_VIDEO;
|
||||
} else {
|
||||
msg = new DcMsg(dcContext, DcMsg.DC_MSG_FILE);
|
||||
}
|
||||
String path = attachment.getRealPath(this);
|
||||
msg.setFileAndDeduplicate(path, attachment.getFileName(), null);
|
||||
}
|
||||
String path = attachment.getRealPath(this);
|
||||
msg.setFile(path, null);
|
||||
}
|
||||
if (msg != null) {
|
||||
msg.setText(body);
|
||||
}
|
||||
}
|
||||
catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
else if (!body.isEmpty()){
|
||||
msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
|
||||
msg.setText(body);
|
||||
}
|
||||
catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
if (quote.isPresent()) {
|
||||
if (msg == null) msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
|
||||
msg.setQuote(quote.get().getQuotedMsg());
|
||||
}
|
||||
}
|
||||
else if (!body.isEmpty()){
|
||||
msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
|
||||
msg.setText(body);
|
||||
}
|
||||
|
||||
if (quote.isPresent()) {
|
||||
if (msg == null) msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
|
||||
msg.setQuote(quote.get().getQuotedMsg());
|
||||
}
|
||||
if (action==ACTION_SEND_OUT) {
|
||||
|
||||
// msg may still be null to clear drafts
|
||||
new AsyncTask<Object, Void, Void>() {
|
||||
@Override
|
||||
protected Void doInBackground(Object... param) {
|
||||
DcMsg msg = (DcMsg)param[0];
|
||||
Integer recompress = (Integer)param[1];
|
||||
if (action==ACTION_SEND_OUT) {
|
||||
// for WEBXDC, drafts are just sent out as is.
|
||||
// for preparations and other cases, cleanup draft soon.
|
||||
if (msg == null || msg.getType() != DcMsg.DC_MSG_WEBXDC) {
|
||||
dcContext.setDraft(dcChat.getId(), null);
|
||||
}
|
||||
|
||||
// for WEBXDC, drafts are just sent out as is.
|
||||
// for preparations and other cases, cleanup draft soon.
|
||||
if (msg == null || msg.getType() != DcMsg.DC_MSG_WEBXDC) {
|
||||
dcContext.setDraft(dcChat.getId(), null);
|
||||
}
|
||||
|
||||
if(msg!=null)
|
||||
{
|
||||
boolean doSend = true;
|
||||
if (recompress==DcMsg.DC_MSG_VIDEO) {
|
||||
Util.runOnMain(() -> {
|
||||
progressDialog = ProgressDialog.show(
|
||||
ConversationActivity.this,
|
||||
"",
|
||||
getString(R.string.one_moment),
|
||||
true,
|
||||
false
|
||||
);
|
||||
});
|
||||
doSend = VideoRecoder.prepareVideo(ConversationActivity.this, dcChat.getId(), msg);
|
||||
Util.runOnMain(() -> {
|
||||
try {
|
||||
progressDialog.dismiss();
|
||||
} catch (final IllegalArgumentException e) {
|
||||
// The activity is finishing/destroyed, do nothing.
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (doSend) {
|
||||
if (dcContext.sendMsg(dcChat.getId(), msg) == 0) {
|
||||
Util.runOnMain(()-> Toast.makeText(ConversationActivity.this, dcContext.getLastError(), Toast.LENGTH_LONG).show());
|
||||
return null;
|
||||
if(msg!=null) {
|
||||
boolean doSend = true;
|
||||
if (recompress==DcMsg.DC_MSG_VIDEO) {
|
||||
Util.runOnMain(() -> {
|
||||
if (isFinishing()) return;
|
||||
progressDialog = ProgressDialog.show(
|
||||
ConversationActivity.this,
|
||||
"",
|
||||
getString(R.string.one_moment),
|
||||
true,
|
||||
false
|
||||
);
|
||||
});
|
||||
doSend = VideoRecoder.prepareVideo(ConversationActivity.this, dcChat.getId(), msg);
|
||||
Util.runOnMain(() -> {
|
||||
try {
|
||||
if (progressDialog != null) progressDialog.dismiss();
|
||||
} catch (final IllegalArgumentException e) {
|
||||
// The activity is finishing/destroyed, do nothing.
|
||||
}
|
||||
}
|
||||
|
||||
Util.runOnMain(()-> sendComplete(dcChat.getId()));
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
dcContext.setDraft(dcChat.getId(), msg);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
future.set(chatId);
|
||||
if (doSend) {
|
||||
if (dcContext.sendMsg(dcChat.getId(), msg) == 0) {
|
||||
Util.runOnMain(()-> Toast.makeText(ConversationActivity.this, dcContext.getLastError(), Toast.LENGTH_LONG).show());
|
||||
future.set(chatId);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Util.runOnMain(() -> sendComplete(dcChat.getId()));
|
||||
}
|
||||
} else {
|
||||
dcContext.setDraft(dcChat.getId(), msg);
|
||||
}
|
||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, msg, recompress);
|
||||
future.set(chatId);
|
||||
});
|
||||
|
||||
return future;
|
||||
}
|
||||
@@ -1145,7 +1174,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
return;
|
||||
}
|
||||
|
||||
if (composeText.getText().length() == 0 && !attachmentManager.isAttachmentPresent()) {
|
||||
if (!isEditing && composeText.getText().length() == 0 && !attachmentManager.isAttachmentPresent()) {
|
||||
buttonToggle.display(attachButton);
|
||||
quickAttachmentToggle.show();
|
||||
} else {
|
||||
@@ -1263,9 +1292,16 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQuoteDismissed() {
|
||||
if (isEditing) composeText.setText("");
|
||||
isEditing = false;
|
||||
}
|
||||
|
||||
// media selected by the system keyboard
|
||||
@Override
|
||||
public void onMediaSelected(@NonNull Uri uri, String contentType) {
|
||||
if (isEditing) return;
|
||||
if (MediaUtil.isImageType(contentType)) {
|
||||
sendSticker(uri, contentType);
|
||||
} else if (MediaUtil.isVideoType(contentType)) {
|
||||
@@ -1287,7 +1323,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
if (quote.isPresent()) {
|
||||
msg.setQuote(quote.get().getQuotedMsg());
|
||||
}
|
||||
msg.setFile(path, null);
|
||||
msg.setFileAndDeduplicate(path, null, null);
|
||||
msg.forceSticker();
|
||||
dcContext.sendMsg(chatId, msg);
|
||||
}
|
||||
@@ -1323,8 +1359,12 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
else {
|
||||
processComposeControls(ACTION_SEND_OUT);
|
||||
DcHelper.getNotificationCenter(ConversationActivity.this).maybePlaySendSound(dcChat);
|
||||
processComposeControls(ACTION_SEND_OUT).addListener(new AssertedSuccessListener<Integer>() {
|
||||
@Override
|
||||
public void onSuccess(Integer chatId) {
|
||||
DcHelper.getNotificationCenter(ConversationActivity.this).maybePlaySendSound(dcChat);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1397,6 +1437,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
@Override
|
||||
public void handleReplyMessage(DcMsg msg) {
|
||||
if (isEditing) composeText.setText("");
|
||||
isEditing = false;
|
||||
// If you modify these lines you may also want to modify ConversationItem.setQuote():
|
||||
Recipient author = new Recipient(this, dcContext.getContact(msg.getFromId()));
|
||||
|
||||
@@ -1412,11 +1454,32 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
msg.getTimestamp(),
|
||||
author,
|
||||
text,
|
||||
slideDeck);
|
||||
slideDeck,
|
||||
false);
|
||||
|
||||
inputPanel.clickOnComposeInput();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleEditMessage(DcMsg msg) {
|
||||
isEditing = true;
|
||||
Recipient author = new Recipient(this, dcContext.getContact(msg.getFromId()));
|
||||
|
||||
SlideDeck slideDeck = new SlideDeck();
|
||||
String text = msg.getSummarytext(500);
|
||||
|
||||
inputPanel.setQuote(GlideApp.with(this),
|
||||
msg,
|
||||
msg.getTimestamp(),
|
||||
author,
|
||||
text,
|
||||
slideDeck,
|
||||
true);
|
||||
|
||||
setDraftText(msg.getText());
|
||||
inputPanel.clickOnComposeInput();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttachmentChanged() {
|
||||
handleSecurityChange(isSecureText, isDefaultSms);
|
||||
|
||||
@@ -16,17 +16,19 @@
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.LayoutRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import static org.thoughtcrime.securesms.ConversationItem.PULSE_HIGHLIGHT_MILLIS;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.LayoutRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.b44t.messenger.DcChat;
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcMsg;
|
||||
@@ -49,8 +51,6 @@ import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.thoughtcrime.securesms.ConversationItem.PULSE_HIGHLIGHT_MILLIS;
|
||||
|
||||
/**
|
||||
* A DC adapter for a conversation thread. Ultimately
|
||||
* used by ConversationActivity to display a conversation
|
||||
@@ -294,7 +294,7 @@ public class ConversationAdapter <V extends View & BindableConversationItem>
|
||||
else if (type==DcMsg.DC_MSG_AUDIO || type==DcMsg.DC_MSG_VOICE) {
|
||||
return dcMsg.isOutgoing()? MESSAGE_TYPE_AUDIO_OUTGOING : MESSAGE_TYPE_AUDIO_INCOMING;
|
||||
}
|
||||
else if (type==DcMsg.DC_MSG_FILE && !dcMsg.isSetupMessage()) {
|
||||
else if (type==DcMsg.DC_MSG_FILE) {
|
||||
return dcMsg.isOutgoing()? MESSAGE_TYPE_DOCUMENT_OUTGOING : MESSAGE_TYPE_DOCUMENT_INCOMING;
|
||||
}
|
||||
else if (type==DcMsg.DC_MSG_IMAGE || type==DcMsg.DC_MSG_GIF || type==DcMsg.DC_MSG_VIDEO) {
|
||||
|
||||
@@ -25,9 +25,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
@@ -38,12 +36,10 @@ import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.view.ActionMode;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
@@ -63,8 +59,8 @@ import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.database.Address;
|
||||
import org.thoughtcrime.securesms.mms.GlideApp;
|
||||
import org.thoughtcrime.securesms.reactions.AddReactionView;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.reactions.ReactionsDetailsFragment;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.AccessibilityUtil;
|
||||
import org.thoughtcrime.securesms.util.Debouncer;
|
||||
import org.thoughtcrime.securesms.util.StickyHeaderDecoration;
|
||||
@@ -321,12 +317,16 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
return;
|
||||
}
|
||||
|
||||
menu.findItem(R.id.menu_toggle_save).setVisible(false);
|
||||
|
||||
if (messageRecords.size() > 1) {
|
||||
menu.findItem(R.id.menu_context_details).setVisible(false);
|
||||
menu.findItem(R.id.menu_context_share).setVisible(false);
|
||||
menu.findItem(R.id.menu_context_reply).setVisible(false);
|
||||
menu.findItem(R.id.menu_context_edit).setVisible(false);
|
||||
menu.findItem(R.id.menu_context_reply_privately).setVisible(false);
|
||||
menu.findItem(R.id.menu_add_to_home_screen).setVisible(false);
|
||||
//menu.findItem(R.id.menu_toggle_save).setVisible(false);
|
||||
} else {
|
||||
DcMsg messageRecord = messageRecords.iterator().next();
|
||||
DcChat chat = getListAdapter().getChat();
|
||||
@@ -334,9 +334,19 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
menu.findItem(R.id.menu_context_share).setVisible(messageRecord.hasFile());
|
||||
boolean canReply = canReplyToMsg(messageRecord);
|
||||
menu.findItem(R.id.menu_context_reply).setVisible(chat.canSend() && canReply);
|
||||
boolean showReplyPrivately = !dcContext.isCommunity() && chat.isMultiUser() && !messageRecord.isOutgoing() && canReply;
|
||||
boolean canEdit = canEditMsg(messageRecord);
|
||||
menu.findItem(R.id.menu_context_edit).setVisible(chat.canSend() && canEdit);
|
||||
boolean showReplyPrivately = chat.isMultiUser() && !messageRecord.isOutgoing() && canReply;
|
||||
menu.findItem(R.id.menu_context_reply_privately).setVisible(showReplyPrivately);
|
||||
menu.findItem(R.id.menu_add_to_home_screen).setVisible(messageRecord.getType() == DcMsg.DC_MSG_WEBXDC);
|
||||
|
||||
/*
|
||||
boolean saved = messageRecord.getSavedMsgId() != 0;
|
||||
MenuItem toggleSave = menu.findItem(R.id.menu_toggle_save);
|
||||
toggleSave.setVisible(messageRecord.canSave() && !chat.isSelfTalk());
|
||||
toggleSave.setIcon(saved? R.drawable.baseline_bookmark_remove_24 : R.drawable.baseline_bookmark_border_24);
|
||||
toggleSave.setTitle(saved? R.string.unsave : R.string.save);
|
||||
*/
|
||||
}
|
||||
|
||||
// if one of the selected items cannot be saved, disable saving.
|
||||
@@ -377,6 +387,10 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
return canReply;
|
||||
}
|
||||
|
||||
static boolean canEditMsg(DcMsg dcMsg) {
|
||||
return dcMsg.isOutgoing() && !dcMsg.isInfo() && dcMsg.getType() != DcMsg.DC_MSG_VIDEOCHAT_INVITATION && !dcMsg.hasHtml() && !dcMsg.getText().isEmpty();
|
||||
}
|
||||
|
||||
public void handleClearChat() {
|
||||
handleDeleteMessages((int) chatId, getListAdapter().getMessageIds());
|
||||
}
|
||||
@@ -477,6 +491,16 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
listener.handleReplyMessage(message);
|
||||
}
|
||||
|
||||
@SuppressLint("RestrictedApi")
|
||||
private void handleEditMessage(final DcMsg message) {
|
||||
if (getActivity() != null) {
|
||||
//noinspection ConstantConditions
|
||||
((AppCompatActivity) getActivity()).getSupportActionBar().collapseActionView();
|
||||
}
|
||||
|
||||
listener.handleEditMessage(message);
|
||||
}
|
||||
|
||||
private void handleReplyMessagePrivately(final DcMsg msg) {
|
||||
|
||||
if (getActivity() != null) {
|
||||
@@ -494,6 +518,15 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
}
|
||||
}
|
||||
|
||||
private void handleToggleSave(final Set<DcMsg> messageRecords) {
|
||||
DcMsg msg = getSelectedMessageRecord(messageRecords);
|
||||
if (msg.getSavedMsgId() != 0) {
|
||||
dcContext.deleteMsgs(new int[]{msg.getSavedMsgId()});
|
||||
} else {
|
||||
dcContext.saveMsgs(new int[]{msg.getId()});
|
||||
}
|
||||
}
|
||||
|
||||
private void reloadList() {
|
||||
reloadList(false);
|
||||
}
|
||||
@@ -607,6 +640,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
|
||||
public interface ConversationFragmentListener {
|
||||
void handleReplyMessage(DcMsg messageRecord);
|
||||
void handleEditMessage(DcMsg messageRecord);
|
||||
}
|
||||
|
||||
private class ConversationScrollListener extends OnScrollListener {
|
||||
@@ -704,81 +738,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
index++;
|
||||
}
|
||||
}
|
||||
dcContext.markseenMsgs(ids);
|
||||
}
|
||||
|
||||
|
||||
void querySetupCode(final DcMsg dcMsg, String[] preload)
|
||||
{
|
||||
if( !dcMsg.isSetupMessage()) {
|
||||
return;
|
||||
}
|
||||
|
||||
View gl = View.inflate(getActivity(), R.layout.setup_code_grid, null);
|
||||
final EditText[] editTexts = {
|
||||
gl.findViewById(R.id.setupCode0), gl.findViewById(R.id.setupCode1), gl.findViewById(R.id.setupCode2),
|
||||
gl.findViewById(R.id.setupCode3), gl.findViewById(R.id.setupCode4), gl.findViewById(R.id.setupCode5),
|
||||
gl.findViewById(R.id.setupCode6), gl.findViewById(R.id.setupCode7), gl.findViewById(R.id.setupCode8)
|
||||
};
|
||||
AlertDialog.Builder builder1 = new AlertDialog.Builder(getActivity());
|
||||
builder1.setView(gl);
|
||||
editTexts[0].setText(dcMsg.getSetupCodeBegin());
|
||||
editTexts[0].setSelection(editTexts[0].getText().length());
|
||||
|
||||
for( int i = 0; i < 9; i++ ) {
|
||||
if( preload != null && i < preload.length ) {
|
||||
editTexts[i].setText(preload[i]);
|
||||
editTexts[i].setSelection(editTexts[i].getText().length());
|
||||
}
|
||||
editTexts[i].addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
if( s.length()==4 ) {
|
||||
for ( int i = 0; i < 8; i++ ) {
|
||||
if( editTexts[i].hasFocus() && editTexts[i+1].getText().length()<4 ) {
|
||||
editTexts[i+1].requestFocus();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
builder1.setTitle(getActivity().getString(R.string.autocrypt_continue_transfer_title));
|
||||
builder1.setMessage(getActivity().getString(R.string.autocrypt_continue_transfer_please_enter_code));
|
||||
builder1.setNegativeButton(android.R.string.cancel, null);
|
||||
builder1.setCancelable(false); // prevent the dialog from being dismissed accidentally (when the dialog is closed, the setup code is gone forever and the user has to create a new setup message)
|
||||
builder1.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
||||
String setup_code = "";
|
||||
final String[] preload1 = new String[9];
|
||||
for ( int i = 0; i < 9; i++ ) {
|
||||
preload1[i] = editTexts[i].getText().toString();
|
||||
setup_code += preload1[i];
|
||||
}
|
||||
boolean success = dcContext.continueKeyTransfer(dcMsg.getId(), setup_code);
|
||||
|
||||
AlertDialog.Builder builder2 = new AlertDialog.Builder(getActivity());
|
||||
builder2.setTitle(getActivity().getString(R.string.autocrypt_continue_transfer_title));
|
||||
builder2.setMessage(getActivity().getString(success? R.string.autocrypt_continue_transfer_succeeded : R.string.autocrypt_bad_setup_code));
|
||||
if( success ) {
|
||||
builder2.setPositiveButton(android.R.string.ok, null);
|
||||
}
|
||||
else {
|
||||
builder2.setNegativeButton(android.R.string.cancel, null);
|
||||
builder2.setPositiveButton(R.string.autocrypt_continue_transfer_retry, (dialog1, which1) -> querySetupCode(dcMsg, preload1));
|
||||
}
|
||||
builder2.show();
|
||||
});
|
||||
builder1.show();
|
||||
Util.runOnAnyBackgroundThread(() -> dcContext.markseenMsgs(ids));
|
||||
}
|
||||
|
||||
private class ConversationFragmentItemClickListener implements ItemClickListener {
|
||||
@@ -800,9 +760,6 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
actionMode.setTitleOptionalHint(false); // the title represents important information, also indicating implicitly, more items can be selected
|
||||
}
|
||||
}
|
||||
else if(messageRecord.isSetupMessage()) {
|
||||
querySetupCode(messageRecord,null);
|
||||
}
|
||||
else if (messageRecord.getType()==DcMsg.DC_MSG_VIDEOCHAT_INVITATION) {
|
||||
new VideochatUtil().join(getActivity(), messageRecord.getId());
|
||||
}
|
||||
@@ -810,18 +767,29 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
DozeReminder.dozeReminderTapped(getContext());
|
||||
}
|
||||
else if(messageRecord.getInfoType() == DcMsg.DC_INFO_WEBXDC_INFO_MESSAGE) {
|
||||
WebxdcActivity.openWebxdcActivity(getContext(), messageRecord.getParent(), messageRecord.getWebxdcHref());
|
||||
if (messageRecord.getParent() != null) {
|
||||
// if the parent webxdc message still exists
|
||||
WebxdcActivity.openWebxdcActivity(getContext(), messageRecord.getParent(), messageRecord.getWebxdcHref());
|
||||
}
|
||||
}
|
||||
else if (!TextUtils.isEmpty(messageRecord.getPOILocation()) && messageRecord.getType() == DcMsg.DC_MSG_TEXT && !messageRecord.hasHtml()) {
|
||||
WebxdcActivity.openMaps(getContext(), getListAdapter().getChat().getId(), "index.html#"+messageRecord.getPOILocation());
|
||||
}
|
||||
else {
|
||||
String self_mail = dcContext.getConfig("configured_mail_user");
|
||||
if (self_mail != null && !self_mail.isEmpty()
|
||||
&& messageRecord.getText().contains(self_mail)
|
||||
&& getListAdapter().getChat().isDeviceTalk()) {
|
||||
// This is a device message informing the user that the password is wrong
|
||||
startActivity(new Intent(getActivity(), RegistrationActivity.class));
|
||||
int infoContactId = messageRecord.getInfoContactId();
|
||||
if (infoContactId != 0 && infoContactId != DC_CONTACT_ID_SELF) {
|
||||
Intent intent = new Intent(getContext(), ProfileActivity.class);
|
||||
intent.putExtra(ProfileActivity.CONTACT_ID_EXTRA, infoContactId);
|
||||
startActivity(intent);
|
||||
}
|
||||
else {
|
||||
String self_mail = dcContext.getConfig("configured_mail_user");
|
||||
if (self_mail != null && !self_mail.isEmpty()
|
||||
&& messageRecord.getText().contains(self_mail)
|
||||
&& getListAdapter().getChat().isDeviceTalk()) {
|
||||
// This is a device message informing the user that the password is wrong
|
||||
startActivity(new Intent(getActivity(), RegistrationActivity.class));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -833,9 +801,6 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
list.getAdapter().notifyDataSetChanged();
|
||||
|
||||
actionMode = ((AppCompatActivity)getActivity()).startSupportActionMode(actionModeCallback);
|
||||
|
||||
if (dcContext.isCommunity()) return;
|
||||
|
||||
addReactionView.show(messageRecord, view, () -> {
|
||||
if (actionMode != null) {
|
||||
actionMode.finish();
|
||||
@@ -844,20 +809,18 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQuoteClicked(DcMsg messageRecord) {
|
||||
DcMsg quoted = messageRecord.getQuotedMsg();
|
||||
if (quoted == null) {
|
||||
Log.i(TAG, "Clicked on a quote whose original message we never had.");
|
||||
private void jumpToOriginal(DcMsg original) {
|
||||
if (original == null) {
|
||||
Log.i(TAG, "Clicked on a quote or jump-to-original whose original message was deleted/non-existing.");
|
||||
Toast.makeText(getContext(), R.string.ConversationFragment_quoted_message_not_found, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
int foreignChatId = quoted.getChatId();
|
||||
int foreignChatId = original.getChatId();
|
||||
if (foreignChatId != 0 && foreignChatId != chatId) {
|
||||
Intent intent = new Intent(getActivity(), ConversationActivity.class);
|
||||
intent.putExtra(ConversationActivity.CHAT_ID_EXTRA, foreignChatId);
|
||||
int start = DcMsg.getMessagePosition(quoted, dcContext);
|
||||
int start = DcMsg.getMessagePosition(original, dcContext);
|
||||
intent.putExtra(ConversationActivity.STARTING_POSITION_EXTRA, start);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
((ConversationActivity) getActivity()).hideSoftKeyboard();
|
||||
@@ -867,10 +830,20 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
Log.e(TAG, "Activity was null");
|
||||
}
|
||||
} else {
|
||||
scrollMaybeSmoothToMsgId(quoted.getId());
|
||||
scrollMaybeSmoothToMsgId(original.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onJumpToOriginalClicked(DcMsg messageRecord) {
|
||||
jumpToOriginal(dcContext.getMsg(messageRecord.getOriginalMsgId()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQuoteClicked(DcMsg messageRecord) {
|
||||
jumpToOriginal(messageRecord.getQuotedMsg());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShowFullClicked(DcMsg messageRecord) {
|
||||
Intent intent = new Intent(getActivity(), FullMsgActivity.class);
|
||||
@@ -918,6 +891,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
statusBarColor = window.getStatusBarColor();
|
||||
window.setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar));
|
||||
|
||||
Util.redMenuItem(menu, R.id.menu_context_delete_message);
|
||||
setCorrectMenuVisibility(menu);
|
||||
ConversationAdaptiveActionsToolbar.adjustMenuActions(menu, 10, requireActivity().getWindow().getDecorView().getMeasuredWidth());
|
||||
return true;
|
||||
@@ -942,45 +916,52 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
@Override
|
||||
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
|
||||
hideAddReactionView();
|
||||
switch(item.getItemId()) {
|
||||
case R.id.menu_context_copy:
|
||||
handleCopyMessage(getListAdapter().getSelectedItems());
|
||||
actionMode.finish();
|
||||
return true;
|
||||
case R.id.menu_context_delete_message:
|
||||
handleDeleteMessages((int) chatId, getListAdapter().getSelectedItems());
|
||||
return true;
|
||||
case R.id.menu_context_share:
|
||||
DcHelper.openForViewOrShare(getContext(), getSelectedMessageRecord(getListAdapter().getSelectedItems()).getId(), Intent.ACTION_SEND);
|
||||
return true;
|
||||
case R.id.menu_context_details:
|
||||
handleDisplayDetails(getSelectedMessageRecord(getListAdapter().getSelectedItems()));
|
||||
actionMode.finish();
|
||||
return true;
|
||||
case R.id.menu_context_forward:
|
||||
handleForwardMessage(getListAdapter().getSelectedItems());
|
||||
actionMode.finish();
|
||||
return true;
|
||||
case R.id.menu_add_to_home_screen:
|
||||
WebxdcActivity.addToHomeScreen(getActivity(), getSelectedMessageRecord(getListAdapter().getSelectedItems()).getId());
|
||||
actionMode.finish();
|
||||
return true;
|
||||
case R.id.menu_context_save_attachment:
|
||||
handleSaveAttachment(getListAdapter().getSelectedItems());
|
||||
return true;
|
||||
case R.id.menu_context_reply:
|
||||
handleReplyMessage(getSelectedMessageRecord(getListAdapter().getSelectedItems()));
|
||||
actionMode.finish();
|
||||
return true;
|
||||
case R.id.menu_context_reply_privately:
|
||||
handleReplyMessagePrivately(getSelectedMessageRecord(getListAdapter().getSelectedItems()));
|
||||
return true;
|
||||
case R.id.menu_resend:
|
||||
handleResendMessage(getListAdapter().getSelectedItems());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.menu_context_copy) {
|
||||
handleCopyMessage(getListAdapter().getSelectedItems());
|
||||
actionMode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_context_delete_message) {
|
||||
handleDeleteMessages((int) chatId, getListAdapter().getSelectedItems());
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_context_share) {
|
||||
DcHelper.openForViewOrShare(getContext(), getSelectedMessageRecord(getListAdapter().getSelectedItems()).getId(), Intent.ACTION_SEND);
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_context_details) {
|
||||
handleDisplayDetails(getSelectedMessageRecord(getListAdapter().getSelectedItems()));
|
||||
actionMode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_context_forward) {
|
||||
handleForwardMessage(getListAdapter().getSelectedItems());
|
||||
actionMode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_add_to_home_screen) {
|
||||
WebxdcActivity.addToHomeScreen(getActivity(), getSelectedMessageRecord(getListAdapter().getSelectedItems()).getId());
|
||||
actionMode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_context_save_attachment) {
|
||||
handleSaveAttachment(getListAdapter().getSelectedItems());
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_context_reply) {
|
||||
handleReplyMessage(getSelectedMessageRecord(getListAdapter().getSelectedItems()));
|
||||
actionMode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_context_edit) {
|
||||
handleEditMessage(getSelectedMessageRecord(getListAdapter().getSelectedItems()));
|
||||
actionMode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_context_reply_privately) {
|
||||
handleReplyMessagePrivately(getSelectedMessageRecord(getListAdapter().getSelectedItems()));
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_resend) {
|
||||
handleResendMessage(getListAdapter().getSelectedItems());
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_toggle_save) {
|
||||
handleToggleSave(getListAdapter().getSelectedItems());
|
||||
actionMode.finish();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -101,6 +101,7 @@ public class ConversationItem extends BaseConversationItem
|
||||
protected ViewGroup bodyBubble;
|
||||
protected ReactionsConversationView reactionsView;
|
||||
protected View replyView;
|
||||
protected View jumptoView;
|
||||
@Nullable private QuoteView quoteView;
|
||||
private ConversationItemFooter footer;
|
||||
private TextView groupSender;
|
||||
@@ -155,6 +156,7 @@ public class ConversationItem extends BaseConversationItem
|
||||
this.quoteView = findViewById(R.id.quote_view);
|
||||
this.container = findViewById(R.id.container);
|
||||
this.replyView = findViewById(R.id.reply_icon);
|
||||
this.jumptoView = findViewById(R.id.jumpto_icon);
|
||||
this.msgActionButton = findViewById(R.id.msg_action_button);
|
||||
this.showFullButton = findViewById(R.id.show_full_button);
|
||||
|
||||
@@ -176,12 +178,23 @@ public class ConversationItem extends BaseConversationItem
|
||||
{
|
||||
bind(messageRecord, dcChat, batchSelected, pulseHighlight, recipients);
|
||||
this.glideRequests = glideRequests;
|
||||
this.showSender = dcContext.isCommunity() || (dcChat.isMultiUser() && !messageRecord.isOutgoing()) || messageRecord.getOverrideSenderName() != null;
|
||||
this.showSender = ((dcChat.isMultiUser() || dcChat.isSelfTalk()) && !messageRecord.isOutgoing()) || messageRecord.getOverrideSenderName() != null;
|
||||
|
||||
if (showSender) {
|
||||
this.dcContact = dcContext.getContact(messageRecord.getFromId());
|
||||
}
|
||||
|
||||
if (dcChat.isSelfTalk() && messageRecord.getOriginalMsgId() != 0) {
|
||||
jumptoView.setVisibility(View.VISIBLE);
|
||||
jumptoView.setOnClickListener(view -> {
|
||||
if (eventListener != null) {
|
||||
eventListener.onJumpToOriginalClicked(messageRecord);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
jumptoView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
setGutterSizes(messageRecord, showSender);
|
||||
setMessageShape(messageRecord);
|
||||
setMediaAttributes(messageRecord, showSender);
|
||||
@@ -257,11 +270,10 @@ public class ConversationItem extends BaseConversationItem
|
||||
R.attr.conversation_item_incoming_bubble_color,
|
||||
R.attr.conversation_item_outgoing_bubble_color,
|
||||
};
|
||||
final TypedArray attrs = context.obtainStyledAttributes(attributes);
|
||||
|
||||
incomingBubbleColor = attrs.getColor(0, Color.WHITE);
|
||||
outgoingBubbleColor = attrs.getColor(1, Color.WHITE);
|
||||
attrs.recycle();
|
||||
try (TypedArray attrs = context.obtainStyledAttributes(attributes)) {
|
||||
incomingBubbleColor = attrs.getColor(0, Color.WHITE);
|
||||
outgoingBubbleColor = attrs.getColor(1, Color.WHITE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -378,7 +390,7 @@ public class ConversationItem extends BaseConversationItem
|
||||
}
|
||||
|
||||
private boolean hasDocument(DcMsg dcMsg) {
|
||||
return dcMsg.getType()==DcMsg.DC_MSG_FILE && !dcMsg.isSetupMessage();
|
||||
return dcMsg.getType()==DcMsg.DC_MSG_FILE;
|
||||
}
|
||||
|
||||
private void setBodyText(DcMsg messageRecord) {
|
||||
@@ -387,11 +399,7 @@ public class ConversationItem extends BaseConversationItem
|
||||
|
||||
String text = messageRecord.getText();
|
||||
|
||||
if (messageRecord.isSetupMessage()) {
|
||||
bodyText.setText(context.getString(R.string.autocrypt_asm_click_body));
|
||||
bodyText.setVisibility(View.VISIBLE);
|
||||
}
|
||||
else if (text.isEmpty()) {
|
||||
if (text.isEmpty()) {
|
||||
bodyText.setVisibility(View.GONE);
|
||||
}
|
||||
else {
|
||||
@@ -429,10 +437,10 @@ public class ConversationItem extends BaseConversationItem
|
||||
showFullButton.setVisibility(View.GONE);
|
||||
msgActionButton.setVisibility(View.VISIBLE);
|
||||
msgActionButton.setEnabled(true);
|
||||
msgActionButton.setText(webxdcViewStub.get().isCommunity()? R.string.join: R.string.start_app);
|
||||
msgActionButton.setText(R.string.start_app);
|
||||
msgActionButton.setOnClickListener(view -> {
|
||||
if (batchSelected.isEmpty()) {
|
||||
DcHelper.openWebxdc(getContext(), messageRecord);
|
||||
WebxdcActivity.openWebxdcActivity(getContext(), messageRecord);
|
||||
} else {
|
||||
passthroughClickListener.onClick(view);
|
||||
}
|
||||
@@ -666,9 +674,7 @@ public class ConversationItem extends BaseConversationItem
|
||||
if (!showSender || dcContact ==null) {
|
||||
contactPhoto.setVisibility(View.GONE);
|
||||
} else {
|
||||
int color = messageRecord.getSenderColor();
|
||||
Recipient recipient = new Recipient(context, dcContact, messageRecord.getSenderName(dcContact), color);
|
||||
contactPhoto.setAvatar(glideRequests, recipient, true);
|
||||
contactPhoto.setAvatar(glideRequests, new Recipient(context, dcContact), true);
|
||||
contactPhoto.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
@@ -693,7 +699,7 @@ public class ConversationItem extends BaseConversationItem
|
||||
Recipient author = null;
|
||||
SlideDeck slideDeck = new SlideDeck();
|
||||
if (msg != null) {
|
||||
author = new Recipient(context, dcContext.getContact(msg.getFromId()), msg.getSenderColor());
|
||||
author = new Recipient(context, dcContext.getContact(msg.getFromId()));
|
||||
if (msg.getType() != DcMsg.DC_MSG_TEXT) {
|
||||
Slide slide = MediaUtil.getSlideForMsg(context, msg);
|
||||
if (slide != null) {
|
||||
@@ -707,7 +713,8 @@ public class ConversationItem extends BaseConversationItem
|
||||
author,
|
||||
quoteTxt,
|
||||
slideDeck,
|
||||
current.getType() == DcMsg.DC_MSG_STICKER);
|
||||
current.getType() == DcMsg.DC_MSG_STICKER,
|
||||
false);
|
||||
|
||||
quoteView.setVisibility(View.VISIBLE);
|
||||
quoteView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
@@ -800,8 +807,7 @@ public class ConversationItem extends BaseConversationItem
|
||||
}
|
||||
else if (showSender && dcContact !=null) {
|
||||
this.groupSender.setText(messageRecord.getSenderName(dcContact));
|
||||
int color = messageRecord.getSenderColor();
|
||||
this.groupSender.setTextColor(Util.rgbToArgbColor(color!=0? color : dcContact.getColor()));
|
||||
this.groupSender.setTextColor(Util.rgbToArgbColor(dcContact.getColor()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -884,7 +890,7 @@ public class ConversationItem extends BaseConversationItem
|
||||
if (shouldInterceptClicks(messageRecord) || !batchSelected.isEmpty()) {
|
||||
performClick();
|
||||
} else if (slide.isWebxdcDocument()) {
|
||||
msgActionButton.performClick();
|
||||
WebxdcActivity.openWebxdcActivity(context, messageRecord);
|
||||
} else if (slide.isVcard()) {
|
||||
try {
|
||||
String path = slide.asAttachment().getRealPath(context);
|
||||
@@ -894,7 +900,7 @@ public class ConversationItem extends BaseConversationItem
|
||||
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
||||
try {
|
||||
List<Integer> contactIds = rpc.importVcard(dcContext.getAccountId(), path);
|
||||
if (contactIds.size() > 0) {
|
||||
if (!contactIds.isEmpty()) {
|
||||
int chatId = dcContext.createChatByContactId(contactIds.get(0));
|
||||
if (chatId != 0) {
|
||||
Intent intent = new Intent(context, ConversationActivity.class);
|
||||
|
||||
@@ -3,7 +3,6 @@ package org.thoughtcrime.securesms;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.os.Build;
|
||||
import android.os.Vibrator;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
@@ -20,8 +20,8 @@ import static org.thoughtcrime.securesms.ConversationActivity.CHAT_ID_EXTRA;
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.STARTING_POSITION_EXTRA;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_ADDRESS;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SERVER_FLAGS;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_URL;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SERVER_FLAGS;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.acquireRelayMessageContent;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.getDirectSharingChatId;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.getSharedTitle;
|
||||
@@ -89,7 +89,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
public static final String CLEAR_NOTIFICATIONS = "clear_notifications";
|
||||
public static final String ACCOUNT_ID_EXTRA = "account_id";
|
||||
public static final String FROM_WELCOME = "from_welcome";
|
||||
public static final String WARN_CANNOT_ENCRYPT = "warn_cannot_encrypt";
|
||||
|
||||
private ConversationListFragment conversationListFragment;
|
||||
public TextView title;
|
||||
@@ -113,7 +112,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
// it is not needed to keep all past update messages, however, when deleted, also the strings should be deleted.
|
||||
try {
|
||||
DcContext dcContext = DcHelper.getContext(this);
|
||||
final String deviceMsgLabel = "update_1_50_0_android";
|
||||
final String deviceMsgLabel = "update_1_58_0_android";
|
||||
if (!dcContext.wasDeviceMsgEverAdded(deviceMsgLabel)) {
|
||||
DcMsg msg = null;
|
||||
if (!getIntent().getBooleanExtra(FROM_WELCOME, false)) {
|
||||
@@ -124,7 +123,8 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
// Util.copy(inputStream, new FileOutputStream(outputFile));
|
||||
// msg.setFile(outputFile, "image/jpeg");
|
||||
|
||||
msg.setText(getString(R.string.update_1_50_android, "https://raw.githubusercontent.com/ArcaneChat/android/refs/heads/main/CHANGELOG.md"));
|
||||
// full changelog link: "https://lemmy.ml/c/ArcaneChat"
|
||||
msg.setText(getString(R.string.update_1_58_android, "https://arcanechat.me/#contribute"));
|
||||
}
|
||||
dcContext.addDeviceMsg(deviceMsgLabel, msg);
|
||||
|
||||
@@ -278,11 +278,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
AccountManager.getInstance().switchAccountAndStartActivity(this, accountId);
|
||||
}
|
||||
|
||||
String warnAddr = getIntent().getStringExtra(WARN_CANNOT_ENCRYPT);
|
||||
if (!TextUtils.isEmpty(warnAddr)) {
|
||||
DcHelper.showEncryptionRequiredDialog(this, warnAddr);
|
||||
}
|
||||
|
||||
refreshAvatar();
|
||||
refreshUnreadIndicator();
|
||||
refreshTitle();
|
||||
@@ -307,6 +302,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
} else {
|
||||
title.setText(DcHelper.getContext(this).getName());
|
||||
// refreshTitle is called by ConversationListFragment when connectivity changes so update connectivity dot here
|
||||
selfAvatar.setConnectivity(DcHelper.getContext(this).getConnectivity());
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
|
||||
}
|
||||
@@ -440,31 +436,31 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_invite_friends:
|
||||
shareInvite();
|
||||
return true;
|
||||
case R.id.menu_settings:
|
||||
startActivity(new Intent(this, ApplicationPreferencesActivity.class));
|
||||
return true;
|
||||
case R.id.menu_qr:
|
||||
new IntentIntegrator(this).setCaptureActivity(QrActivity.class).initiateScan();
|
||||
return true;
|
||||
case R.id.menu_global_map:
|
||||
WebxdcActivity.openMaps(this, 0);
|
||||
return true;
|
||||
case R.id.menu_proxy_settings:
|
||||
startActivity(new Intent(this, ProxySettingsActivity.class));
|
||||
return true;
|
||||
case android.R.id.home:
|
||||
onBackPressed();
|
||||
return true;
|
||||
case R.id.menu_all_media:
|
||||
startActivity(new Intent(this, ProfileActivity.class));
|
||||
return true;
|
||||
case R.id.menu_public_bots:
|
||||
handleShowBot("puente@buzon.uy", "OPENPGP4FPR:4B41E5AFAF78A0C71DB56138D5BEFED00A45F97A#a=puente%40buzon.uy&n=Public%20Bots&i=ZC_oaJtuvJP&s=5SE96rRovsK");
|
||||
return true;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.menu_invite_friends) {
|
||||
shareInvite();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_settings) {
|
||||
startActivity(new Intent(this, ApplicationPreferencesActivity.class));
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_qr) {
|
||||
new IntentIntegrator(this).setCaptureActivity(QrActivity.class).initiateScan();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_global_map) {
|
||||
WebxdcActivity.openMaps(this, 0);
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_proxy_settings) {
|
||||
startActivity(new Intent(this, ProxySettingsActivity.class));
|
||||
return true;
|
||||
} else if (itemId == android.R.id.home) {
|
||||
onBackPressed();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_all_media) {
|
||||
startActivity(new Intent(this, ProfileActivity.class));
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_public_bots) {
|
||||
handleShowBot("botsindex@arcanechat.me", "https://i.delta.chat/#67889B0362BEDBFEE05ACD92C1D737FA632A9582&a=botsindex%40arcanechat.me&n=Public%20Bots&i=336MTEz38EH-RJxM9OKWygYK&s=TpVVGK6C4KrJmRG0bwHLalXt");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.CHAT_ID_EXTRA;
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.FROM_ARCHIVED_CHATS_EXTRA;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.acquireRelayMessageContent;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.isRelayingMessageContent;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.isSharing;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
@@ -10,12 +16,6 @@ import com.b44t.messenger.DcChat;
|
||||
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.CHAT_ID_EXTRA;
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.FROM_ARCHIVED_CHATS_EXTRA;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.acquireRelayMessageContent;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.isRelayingMessageContent;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.isSharing;
|
||||
|
||||
public class ConversationListArchiveActivity extends PassphraseRequiredActionBarActivity
|
||||
implements ConversationListFragment.ConversationSelectedListener
|
||||
{
|
||||
@@ -60,14 +60,13 @@ public class ConversationListArchiveActivity extends PassphraseRequiredActionBar
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
onBackPressed();
|
||||
return true;
|
||||
|
||||
case R.id.mark_as_read:
|
||||
DcHelper.getContext(this).marknoticedChat(DcChat.DC_CHAT_ID_ARCHIVED_LINK);
|
||||
return true;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == android.R.id.home) {
|
||||
onBackPressed();
|
||||
return true;
|
||||
} else if (itemId == R.id.mark_as_read) {
|
||||
DcHelper.getContext(this).marknoticedChat(DcChat.DC_CHAT_ID_ARCHIVED_LINK);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -42,7 +42,6 @@ import com.b44t.messenger.DcMsg;
|
||||
import org.thoughtcrime.securesms.ConversationListAdapter.ItemClickListener;
|
||||
import org.thoughtcrime.securesms.components.recyclerview.DeleteItemAnimator;
|
||||
import org.thoughtcrime.securesms.components.reminder.DozeReminder;
|
||||
import org.thoughtcrime.securesms.connect.AccountManager;
|
||||
import org.thoughtcrime.securesms.connect.DcEventCenter;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.mms.GlideApp;
|
||||
@@ -81,6 +80,7 @@ public class ConversationListFragment extends BaseConversationListFragment
|
||||
DcEventCenter eventCenter = DcHelper.getEventCenter(requireActivity());
|
||||
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_INCOMING_MSG, this);
|
||||
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_MSGS_NOTICED, this);
|
||||
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_CHAT_DELETED, this);
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_CHAT_MODIFIED, this);
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_CONTACTS_CHANGED, this);
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_MSGS_CHANGED, this);
|
||||
@@ -322,7 +322,10 @@ public class ConversationListFragment extends BaseConversationListFragment
|
||||
|
||||
@Override
|
||||
public void handleEvent(@NonNull DcEvent event) {
|
||||
if (event.getAccountId() != DcHelper.getContext(requireActivity()).getAccountId()) {
|
||||
final int accId = event.getAccountId();
|
||||
if (event.getId() == DcContext.DC_EVENT_CHAT_DELETED) {
|
||||
DcHelper.getNotificationCenter(requireActivity()).removeNotifications(accId, event.getData1Int());
|
||||
} else if (accId != DcHelper.getContext(requireActivity()).getAccountId()) {
|
||||
Activity activity = getActivity();
|
||||
if (activity instanceof ConversationListActivity) {
|
||||
((ConversationListActivity) activity).refreshUnreadIndicator();
|
||||
|
||||
@@ -64,11 +64,9 @@ public class ConversationListItem extends RelativeLayout
|
||||
private final static Typeface BOLD_TYPEFACE = Typeface.create("sans-serif-medium", Typeface.NORMAL);
|
||||
private final static Typeface LIGHT_TYPEFACE = Typeface.create("sans-serif", Typeface.NORMAL);
|
||||
|
||||
private DcLot dcSummary;
|
||||
private Set<Long> selectedThreads;
|
||||
private long chatId;
|
||||
private int msgId;
|
||||
private GlideRequests glideRequests;
|
||||
private TextView subjectView;
|
||||
private FromTextView fromView;
|
||||
private TextView dateView;
|
||||
@@ -122,12 +120,10 @@ public class ConversationListItem extends RelativeLayout
|
||||
boolean batchMode,
|
||||
@Nullable String highlightSubstring)
|
||||
{
|
||||
this.dcSummary = dcSummary;
|
||||
this.selectedThreads = selectedThreads;
|
||||
Recipient recipient = thread.getRecipient();
|
||||
this.chatId = thread.getThreadId();
|
||||
this.msgId = msgId;
|
||||
this.glideRequests = glideRequests;
|
||||
|
||||
int state = dcSummary.getState();
|
||||
int unreadCount = thread.getUnreadCount();
|
||||
@@ -163,7 +159,7 @@ public class ConversationListItem extends RelativeLayout
|
||||
this.avatar.setAvatar(glideRequests, recipient, false);
|
||||
|
||||
DcContact contact = recipient.getDcContact();
|
||||
avatar.setSeenRecently(contact!=null? contact.wasSeenRecently() : false);
|
||||
avatar.setSeenRecently(contact != null && contact.wasSeenRecently());
|
||||
|
||||
boolean isProtected = thread.isProtected() || DcHelper.getContext(getContext()).getChat((int)chatId).isDeviceTalk();
|
||||
|
||||
@@ -180,7 +176,6 @@ public class ConversationListItem extends RelativeLayout
|
||||
{
|
||||
this.selectedThreads = Collections.emptySet();
|
||||
Recipient recipient = new Recipient(getContext(), contact);
|
||||
this.glideRequests = glideRequests;
|
||||
|
||||
fromView.setText(getHighlightedSpan(contact.getDisplayName(), highlightSubstring));
|
||||
fromView.setCompoundDrawablesWithIntrinsicBounds(0, 0, contact.isVerified()? R.drawable.ic_verified : 0, 0);
|
||||
@@ -205,7 +200,6 @@ public class ConversationListItem extends RelativeLayout
|
||||
DcContact sender = dcContext.getContact(messageResult.getFromId());
|
||||
this.selectedThreads = Collections.emptySet();
|
||||
Recipient recipient = new Recipient(getContext(), sender);
|
||||
this.glideRequests = glideRequests;
|
||||
|
||||
fromView.setText(recipient, true);
|
||||
fromView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
|
||||
@@ -312,9 +306,9 @@ public class ConversationListItem extends RelativeLayout
|
||||
if (thread!=null && thread.getVisibility()==DcChat.DC_CHAT_VISIBILITY_PINNED) {
|
||||
bg = R.attr.pinned_list_item_background;
|
||||
}
|
||||
TypedArray ta = getContext().obtainStyledAttributes(new int[] { bg });
|
||||
ViewUtil.setBackground(this, ta.getDrawable(0));
|
||||
ta.recycle();
|
||||
try (TypedArray ta = getContext().obtainStyledAttributes(new int[]{bg})) {
|
||||
ViewUtil.setBackground(this, ta.getDrawable(0));
|
||||
}
|
||||
}
|
||||
|
||||
private Spanned getHighlightedSpan(@Nullable String value,
|
||||
@@ -332,7 +326,10 @@ public class ConversationListItem extends RelativeLayout
|
||||
|
||||
String normalizedValue = value.toLowerCase(Util.getLocale());
|
||||
String normalizedTest = highlight.toLowerCase(Util.getLocale());
|
||||
List<String> testTokens = Stream.of(normalizedTest.split(" ")).filter(s -> s.trim().length() > 0).toList();
|
||||
List<String> testTokens;
|
||||
try (Stream<String> stream = Stream.of(normalizedTest.split(" "))) {
|
||||
testTokens = stream.filter(s -> !s.trim().isEmpty()).toList();
|
||||
}
|
||||
|
||||
Spannable spanned = new SpannableString(value);
|
||||
int searchStartIndex = 0;
|
||||
|
||||
@@ -2,13 +2,12 @@ package org.thoughtcrime.securesms;
|
||||
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.b44t.messenger.DcLot;
|
||||
|
||||
import org.thoughtcrime.securesms.database.model.ThreadRecord;
|
||||
|
||||
@@ -99,10 +99,7 @@ public class ConversationTitleView extends RelativeLayout {
|
||||
}
|
||||
} else if( dcChat.isMultiUser() ) {
|
||||
if (!profileView) {
|
||||
if (dcContext.isCommunity() && chatContacts.length == 1)
|
||||
subtitleStr = context.getString(R.string.super_group);
|
||||
else
|
||||
subtitleStr = context.getResources().getQuantityString(R.plurals.n_members, chatContacts.length, chatContacts.length);
|
||||
subtitleStr = context.getResources().getQuantityString(R.plurals.n_members, chatContacts.length, chatContacts.length);
|
||||
}
|
||||
} else if( chatContacts.length>=1 ) {
|
||||
if( dcChat.isSelfTalk() ) {
|
||||
|
||||
@@ -4,11 +4,11 @@ import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.AppCompatImageView;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import com.b44t.messenger.DcChat;
|
||||
import com.b44t.messenger.DcMsg;
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.b44t.messenger.DcChat;
|
||||
import com.b44t.messenger.DcContact;
|
||||
import com.b44t.messenger.DcContext;
|
||||
|
||||
@@ -11,7 +11,6 @@ import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
@@ -30,7 +29,6 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.request.target.SimpleTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
import com.soundcloud.android.crop.Crop;
|
||||
|
||||
import org.thoughtcrime.securesms.components.AvatarSelector;
|
||||
import org.thoughtcrime.securesms.components.InputAwareLayout;
|
||||
@@ -62,7 +60,6 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
private InputAwareLayout container;
|
||||
private ImageView avatar;
|
||||
private EditText name;
|
||||
private EditText overridenName;
|
||||
private EditText statusView;
|
||||
|
||||
private boolean fromWelcome;
|
||||
@@ -102,13 +99,12 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
onBackPressed();
|
||||
return true;
|
||||
case R.id.menu_create_profile:
|
||||
updateProfile();
|
||||
break;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == android.R.id.home) {
|
||||
onBackPressed();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_create_profile) {
|
||||
updateProfile();
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -147,10 +143,6 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
case ScribbleActivity.SCRIBBLE_REQUEST_CODE:
|
||||
setAvatarView(data.getData());
|
||||
break;
|
||||
|
||||
case Crop.REQUEST_CROP:
|
||||
setAvatarView(Crop.getOutput(data));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,27 +183,14 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
TextView loginSuccessText = ViewUtil.findById(this, R.id.login_success_text);
|
||||
this.avatar = ViewUtil.findById(this, R.id.avatar);
|
||||
this.name = ViewUtil.findById(this, R.id.name_text);
|
||||
this.overridenName = ViewUtil.findById(this, R.id.overriden_name);
|
||||
this.container = ViewUtil.findById(this, R.id.container);
|
||||
this.statusView = ViewUtil.findById(this, R.id.status_text);
|
||||
|
||||
if (fromWelcome) {
|
||||
if (DcHelper.getContext(this).isCommunity()) {
|
||||
ViewUtil.findById(this, R.id.community_user_container).setVisibility(View.VISIBLE);
|
||||
loginSuccessText.setText(R.string.community_set_name_explain);
|
||||
ViewUtil.findById(this, R.id.avatar_and_name).setVisibility(View.GONE);
|
||||
} else {
|
||||
loginSuccessText.setText(R.string.set_name_and_avatar_explain);
|
||||
}
|
||||
loginSuccessText.setText(R.string.set_name_and_avatar_explain);
|
||||
ViewUtil.findById(this, R.id.status_text_layout).setVisibility(View.GONE);
|
||||
ViewUtil.findById(this, R.id.information_label).setVisibility(View.GONE);
|
||||
} else {
|
||||
if (DcHelper.getContext(this).isCommunity()) {
|
||||
ViewUtil.findById(this, R.id.community_user_container).setVisibility(View.VISIBLE);
|
||||
ViewUtil.findById(this, R.id.information_label).setVisibility(View.GONE);
|
||||
((TextInputLayout)ViewUtil.findById(this, R.id.name)).setHint(R.string.community);
|
||||
((TextInputLayout)ViewUtil.findById(this, R.id.status_text_layout)).setHint(R.string.description);
|
||||
}
|
||||
loginSuccessText.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
@@ -222,10 +201,6 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
name.setText(profileName);
|
||||
name.setSelection(profileName.length(), profileName.length());
|
||||
}
|
||||
DcContext dcContext = DcHelper.getContext(this);
|
||||
if (dcContext.isCommunity()) {
|
||||
overridenName.setText(dcContext.getCommunityUser());
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeProfileAvatar() {
|
||||
@@ -252,22 +227,16 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
}
|
||||
|
||||
private void updateProfile() {
|
||||
boolean isCommunity = DcHelper.getContext(this).isCommunity();
|
||||
if (TextUtils.isEmpty(this.name.getText()) && !(isCommunity && fromWelcome)) {
|
||||
if (TextUtils.isEmpty(this.name.getText())) {
|
||||
Toast.makeText(this, R.string.please_enter_name, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
|
||||
final String name = this.name.getText().toString();
|
||||
final String ovName = this.overridenName.getText().toString().trim();
|
||||
|
||||
new AsyncTask<Void, Void, Boolean>() {
|
||||
@Override
|
||||
protected Boolean doInBackground(Void... params) {
|
||||
Context context = CreateProfileActivity.this;
|
||||
if (isCommunity) {
|
||||
DcHelper.getContext(context).setCommunityUser(ovName);
|
||||
}
|
||||
DcHelper.set(context, DcHelper.CONFIG_DISPLAY_NAME, name);
|
||||
setStatusText();
|
||||
|
||||
|
||||
@@ -105,17 +105,16 @@ public class FullMsgActivity extends WebViewActivity
|
||||
|
||||
@Override
|
||||
public boolean onContextItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_export_image:
|
||||
// TODO: extract image from "data:" link or download URL
|
||||
return true;
|
||||
case R.id.action_copy_link:
|
||||
Util.writeTextToClipboard(this, imageUrl);
|
||||
Toast.makeText(this, getString(R.string.copied_to_clipboard), Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
default:
|
||||
return super.onContextItemSelected(item);
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.action_export_image) {
|
||||
// TODO: extract image from "data:" link or download URL
|
||||
return true;
|
||||
} else if (itemId == R.id.action_copy_link) {
|
||||
Util.writeTextToClipboard(this, imageUrl);
|
||||
Toast.makeText(this, getString(R.string.copied_to_clipboard), Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
}
|
||||
return super.onContextItemSelected(item);
|
||||
}
|
||||
|
||||
private static void loadHtmlAsync(final WeakReference<FullMsgActivity> activityReference) {
|
||||
@@ -157,40 +156,39 @@ public class FullMsgActivity extends WebViewActivity
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
switch (item.getItemId()) {
|
||||
case R.id.load_remote_content:
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.load_remote_content)
|
||||
.setMessage(R.string.load_remote_content_ask);
|
||||
if (item.getItemId() == R.id.load_remote_content) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.load_remote_content)
|
||||
.setMessage(R.string.load_remote_content_ask);
|
||||
|
||||
// we are using the buttons "[Always] [Never][Once]" in that order.
|
||||
// 1. Checkmarks before [Always] and [Never] show the current state.
|
||||
// 2. [Once] is also shown in always-mode and disables always-mode if selected
|
||||
// (there was the idea to hide [Once] in always mode, but that looks more like a bug in the end)
|
||||
// (maybe a usual Always-Checkbox and "[Cancel][OK]" buttons are an alternative, however, a [Once]
|
||||
// would be required as well - probably as the leftmost button which is not that usable in
|
||||
// not-always-mode where the dialog is used more often. Or [Ok] would mean "Once" as well as "Change checkbox setting",
|
||||
// which is also a bit weird. Anyway, let's give the three buttons a try :)
|
||||
final String checkmark = DynamicTheme.getCheckmarkEmoji(this) + " ";
|
||||
String alwaysCheckmark = "";
|
||||
String onceCheckmark = "";
|
||||
String neverCheckmark = "";
|
||||
if (!blockLoadingRemote && Prefs.getAlwaysLoadRemoteContent(this)) {
|
||||
alwaysCheckmark = checkmark;
|
||||
} else if (loadRemoteContent) {
|
||||
onceCheckmark = checkmark;
|
||||
} else {
|
||||
neverCheckmark = checkmark;
|
||||
}
|
||||
// we are using the buttons "[Always] [Never][Once]" in that order.
|
||||
// 1. Checkmarks before [Always] and [Never] show the current state.
|
||||
// 2. [Once] is also shown in always-mode and disables always-mode if selected
|
||||
// (there was the idea to hide [Once] in always mode, but that looks more like a bug in the end)
|
||||
// (maybe a usual Always-Checkbox and "[Cancel][OK]" buttons are an alternative, however, a [Once]
|
||||
// would be required as well - probably as the leftmost button which is not that usable in
|
||||
// not-always-mode where the dialog is used more often. Or [Ok] would mean "Once" as well as "Change checkbox setting",
|
||||
// which is also a bit weird. Anyway, let's give the three buttons a try :)
|
||||
final String checkmark = DynamicTheme.getCheckmarkEmoji(this) + " ";
|
||||
String alwaysCheckmark = "";
|
||||
String onceCheckmark = "";
|
||||
String neverCheckmark = "";
|
||||
if (!blockLoadingRemote && Prefs.getAlwaysLoadRemoteContent(this)) {
|
||||
alwaysCheckmark = checkmark;
|
||||
} else if (loadRemoteContent) {
|
||||
onceCheckmark = checkmark;
|
||||
} else {
|
||||
neverCheckmark = checkmark;
|
||||
}
|
||||
|
||||
if (!blockLoadingRemote) {
|
||||
builder.setNeutralButton(alwaysCheckmark + getString(R.string.always), (dialog, which) -> onChangeLoadRemoteContent(LoadRemoteContent.ALWAYS));
|
||||
}
|
||||
builder.setNegativeButton(neverCheckmark + getString(blockLoadingRemote ? R.string.no : R.string.never), (dialog, which) -> onChangeLoadRemoteContent(LoadRemoteContent.NEVER));
|
||||
builder.setPositiveButton(onceCheckmark + getString(R.string.once), (dialog, which) -> onChangeLoadRemoteContent(LoadRemoteContent.ONCE));
|
||||
if (!blockLoadingRemote) {
|
||||
builder.setNeutralButton(alwaysCheckmark + getString(R.string.always), (dialog, which) -> onChangeLoadRemoteContent(LoadRemoteContent.ALWAYS));
|
||||
}
|
||||
builder.setNegativeButton(neverCheckmark + getString(blockLoadingRemote ? R.string.no : R.string.never), (dialog, which) -> onChangeLoadRemoteContent(LoadRemoteContent.NEVER));
|
||||
builder.setPositiveButton(onceCheckmark + getString(R.string.once), (dialog, which) -> onChangeLoadRemoteContent(LoadRemoteContent.ONCE));
|
||||
|
||||
builder.show();
|
||||
return true;
|
||||
builder.show();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
@@ -17,16 +18,14 @@ import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
|
||||
import com.b44t.messenger.DcChat;
|
||||
import com.b44t.messenger.DcContact;
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.request.target.SimpleTarget;
|
||||
import com.bumptech.glide.request.target.CustomTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.soundcloud.android.crop.Crop;
|
||||
|
||||
import org.thoughtcrime.securesms.components.AvatarSelector;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
@@ -76,7 +75,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||
setContentView(R.layout.group_create_activity);
|
||||
verified = false;
|
||||
broadcast = getIntent().getBooleanExtra(CREATE_BROADCAST, false);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
|
||||
|
||||
groupChatId = getIntent().getIntExtra(EDIT_GROUP_CHAT_ID, 0);
|
||||
@@ -209,37 +208,22 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
finish();
|
||||
return true;
|
||||
case R.id.menu_create_group:
|
||||
String groupName = getGroupName();
|
||||
if (showGroupNameEmptyToast(groupName)) return true;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == android.R.id.home) {
|
||||
finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_create_group) {
|
||||
String groupName = getGroupName();
|
||||
if (showGroupNameEmptyToast(groupName)) return true;
|
||||
|
||||
if (groupChatId!=0) {
|
||||
updateGroup(groupName);
|
||||
} else {
|
||||
verified = !broadcast && allMembersVerified();
|
||||
if (verified && getAdapter().getContacts().size() == 1) {
|
||||
new AlertDialog.Builder(this)
|
||||
.setMessage(R.string.create_verified_group_ask)
|
||||
.setNeutralButton(R.string.learn_more, (d, w) -> DcHelper.openHelp(this, "#e2eeguarantee"))
|
||||
.setPositiveButton(R.string.yes, (d, w) -> {
|
||||
createGroup(groupName);
|
||||
})
|
||||
.setNegativeButton(R.string.no, (d, w) -> {
|
||||
verified = false;
|
||||
createGroup(groupName);
|
||||
})
|
||||
.setCancelable(true)
|
||||
.show();
|
||||
} else {
|
||||
createGroup(groupName);
|
||||
}
|
||||
}
|
||||
if (groupChatId != 0) {
|
||||
updateGroup(groupName);
|
||||
} else {
|
||||
verified = !broadcast && allMembersVerified();
|
||||
createGroup(groupName);
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -260,10 +244,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||
if (contactId == DcContact.DC_CONTACT_ID_ADD_MEMBER) {
|
||||
Intent intent = new Intent(this, ContactMultiSelectionActivity.class);
|
||||
intent.putExtra(ContactSelectionListFragment.SELECT_VERIFIED_EXTRA, verified);
|
||||
ArrayList<String> preselectedContacts = new ArrayList<>();
|
||||
for (int id : getAdapter().getContacts()) {
|
||||
preselectedContacts.add(dcContext.getContact(id).getAddr());
|
||||
}
|
||||
ArrayList<Integer> preselectedContacts = new ArrayList<>(getAdapter().getContacts());
|
||||
intent.putExtra(ContactSelectionListFragment.PRESELECTED_CONTACTS, preselectedContacts);
|
||||
startActivityForResult(intent, PICK_CONTACT);
|
||||
}
|
||||
@@ -349,9 +330,9 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
case PICK_CONTACT:
|
||||
ArrayList<Integer> contactIds = new ArrayList<>();
|
||||
for (String addr : Objects.requireNonNull(data.getStringArrayListExtra("contacts"))) {
|
||||
if(addr != null) {
|
||||
contactIds.add(dcContext.createContact(null, addr));
|
||||
for (Integer contactId : Objects.requireNonNull(data.getIntegerArrayListExtra(ContactMultiSelectionActivity.CONTACTS_EXTRA))) {
|
||||
if(contactId != null) {
|
||||
contactIds.add(contactId);
|
||||
}
|
||||
}
|
||||
getAdapter().changeData(contactIds);
|
||||
@@ -360,10 +341,6 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||
case ScribbleActivity.SCRIBBLE_REQUEST_CODE:
|
||||
setAvatarView(data.getData());
|
||||
break;
|
||||
|
||||
case Crop.REQUEST_CROP:
|
||||
setAvatarView(Crop.getOutput(data));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -375,11 +352,14 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.centerCrop()
|
||||
.override(AVATAR_SIZE, AVATAR_SIZE)
|
||||
.into(new SimpleTarget<Bitmap>() {
|
||||
.into(new CustomTarget<Bitmap>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
|
||||
setAvatar(output, resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_URL;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
@@ -16,7 +15,6 @@ import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.text.util.Linkify;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
@@ -36,12 +34,13 @@ import androidx.loader.app.LoaderManager;
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcEvent;
|
||||
import com.b44t.messenger.DcLot;
|
||||
import com.b44t.messenger.rpc.Rpc;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.request.target.CustomTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.google.zxing.integration.android.IntentIntegrator;
|
||||
import com.google.zxing.integration.android.IntentResult;
|
||||
import com.soundcloud.android.crop.Crop;
|
||||
|
||||
import org.thoughtcrime.securesms.components.AvatarSelector;
|
||||
import org.thoughtcrime.securesms.connect.AccountManager;
|
||||
@@ -56,6 +55,7 @@ import org.thoughtcrime.securesms.profiles.ProfileMediaConstraints;
|
||||
import org.thoughtcrime.securesms.proxy.ProxySettingsActivity;
|
||||
import org.thoughtcrime.securesms.qr.RegistrationQrActivity;
|
||||
import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.util.views.ProgressDialog;
|
||||
@@ -71,7 +71,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
private static final String DCACCOUNT = "dcaccount";
|
||||
private static final String DCLOGIN = "dclogin";
|
||||
private static final String INSTANCES_URL = "https://delta.chat/chatmail";
|
||||
private static final String DEFAULT_CHATMAIL_HOST = "nine.testrun.org";
|
||||
private static final String DEFAULT_CHATMAIL_HOST = "arcanechat.me";
|
||||
|
||||
public static final String QR_ACCOUNT_EXTRA = "qr_account_extra";
|
||||
public static final String FROM_WELCOME = "from_welcome";
|
||||
@@ -90,7 +90,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
|
||||
private AttachmentManager attachmentManager;
|
||||
private Bitmap avatarBmp;
|
||||
private ProgressDialog progressDialog;
|
||||
private @Nullable ProgressDialog progressDialog;
|
||||
private DcContext dcContext;
|
||||
|
||||
@Override
|
||||
@@ -158,14 +158,14 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == android.R.id.home) {
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
return true;
|
||||
case R.id.menu_proxy_settings:
|
||||
} else if (itemId == R.id.menu_proxy_settings) {
|
||||
startActivity(new Intent(this, ProxySettingsActivity.class));
|
||||
return true;
|
||||
case R.id.menu_view_log:
|
||||
} else if (itemId == R.id.menu_view_log) {
|
||||
startActivity(new Intent(this, LogViewActivity.class));
|
||||
return true;
|
||||
}
|
||||
@@ -191,10 +191,6 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
setAvatarView(data.getData());
|
||||
break;
|
||||
|
||||
case Crop.REQUEST_CROP:
|
||||
setAvatarView(Crop.getOutput(data));
|
||||
break;
|
||||
|
||||
case IntentIntegrator.REQUEST_CODE:
|
||||
String qrRaw = data.getStringExtra(RegistrationQrActivity.QRDATA_EXTRA);
|
||||
if (qrRaw == null) {
|
||||
@@ -333,14 +329,14 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
|
||||
privacyPolicyBtn.setOnClickListener(view -> {
|
||||
if (!isDcLogin) {
|
||||
WebViewActivity.openUrlInBrowser(this, "https://" + providerHost + "/privacy.html");
|
||||
IntentUtils.showInBrowser(this, "https://" + providerHost + "/privacy.html");
|
||||
}
|
||||
});
|
||||
|
||||
signUpBtn.setOnClickListener(view -> createProfile());
|
||||
|
||||
findViewById(R.id.use_other_server).setOnClickListener((v) -> {
|
||||
WebViewActivity.openUrlInBrowser(this, INSTANCES_URL);
|
||||
IntentUtils.showInBrowser(this, INSTANCES_URL);
|
||||
});
|
||||
findViewById(R.id.login_button).setOnClickListener((v) -> {
|
||||
startRegistrationActivity();
|
||||
@@ -403,30 +399,34 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
|
||||
if (eventId == DcContext.DC_EVENT_CONFIGURE_PROGRESS) {
|
||||
long progress = event.getData1Int();
|
||||
if (progress==0/*error/aborted*/) {
|
||||
progressError(event.getData2Str());
|
||||
} else if (progress<1000/*progress in permille*/) {
|
||||
progressUpdate((int)progress);
|
||||
} else if (progress==1000/*done*/) {
|
||||
DcHelper.getAccounts(this).startIo();
|
||||
progressSuccess();
|
||||
}
|
||||
progressUpdate((int)progress);
|
||||
}
|
||||
}
|
||||
|
||||
private void progressUpdate(int progress) {
|
||||
int percent = progress / 10;
|
||||
progressDialog.setMessage(getResources().getString(R.string.one_moment)+String.format(" %d%%", percent));
|
||||
if (progressDialog != null) {
|
||||
progressDialog.setMessage(getResources().getString(R.string.one_moment)+String.format(" %d%%", percent));
|
||||
}
|
||||
}
|
||||
|
||||
private void progressError(String data2) {
|
||||
progressDialog.dismiss();
|
||||
if (progressDialog != null) {
|
||||
try {
|
||||
progressDialog.dismiss();
|
||||
} catch (IllegalArgumentException e) {
|
||||
// see https://stackoverflow.com/a/5102572/4557005
|
||||
Log.w(TAG, e);
|
||||
}
|
||||
}
|
||||
WelcomeActivity.maybeShowConfigurationError(this, data2);
|
||||
}
|
||||
|
||||
private void progressSuccess() {
|
||||
DcHelper.getEventCenter(this).endCaptureNextError();
|
||||
progressDialog.dismiss();
|
||||
if (progressDialog != null) {
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
|
||||
Intent intent = new Intent(getApplicationContext(), ConversationListActivity.class);
|
||||
intent.putExtra(ConversationListActivity.FROM_WELCOME, true);
|
||||
@@ -494,14 +494,13 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
DcHelper.getEventCenter(this).captureNextError();
|
||||
|
||||
new Thread(() -> {
|
||||
if (!dcContext.setConfigFromQr(qrCode)) {
|
||||
Util.runOnMain(() -> {
|
||||
progressError(dcContext.getLastError());
|
||||
});
|
||||
return;
|
||||
}
|
||||
DcHelper.getAccounts(this).stopIo();
|
||||
dcContext.configure();
|
||||
Rpc rpc = DcHelper.getRpc(this);
|
||||
try {
|
||||
rpc.addTransportFromQr(dcContext.getAccountId(), qrCode);
|
||||
progressSuccess();
|
||||
} catch (RpcException e) {
|
||||
Util.runOnMain(() -> progressError(e.getMessage()));
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
|
||||
@@ -57,22 +57,22 @@ public class LocalHelpActivity extends WebViewActivity
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
switch (item.getItemId()) {
|
||||
case R.id.log_scroll_up:
|
||||
webView.scrollTo(0, 0);
|
||||
return true;
|
||||
case R.id.learn_more:
|
||||
openOnlineUrl("https://delta.chat");
|
||||
return true;
|
||||
case R.id.privacy_policy:
|
||||
openOnlineUrl("https://delta.chat/gdpr");
|
||||
return true;
|
||||
case R.id.contribute:
|
||||
openOnlineUrl("https://github.com/deltachat/deltachat-android");
|
||||
return true;
|
||||
case R.id.report_issue:
|
||||
openOnlineUrl("https://github.com/deltachat/deltachat-android/issues");
|
||||
return true;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.log_scroll_up) {
|
||||
webView.scrollTo(0, 0);
|
||||
return true;
|
||||
} else if (itemId == R.id.learn_more) {
|
||||
openOnlineUrl("https://arcanechat.me");
|
||||
return true;
|
||||
} else if (itemId == R.id.privacy_policy) {
|
||||
openOnlineUrl("https://arcanechat.me/privacy.html");
|
||||
return true;
|
||||
} else if (itemId == R.id.contribute) {
|
||||
openOnlineUrl("https://arcanechat.me/#contribute");
|
||||
return true;
|
||||
} else if (itemId == R.id.report_issue) {
|
||||
openOnlineUrl("https://github.com/ArcaneChat/android/issues");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -54,42 +54,42 @@ public class LogViewActivity extends BaseActionBarActivity {
|
||||
super.onOptionsItemSelected(item);
|
||||
Float newSize;
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
finish();
|
||||
return true;
|
||||
case R.id.save_log:
|
||||
Permissions.with(this)
|
||||
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
.alwaysGrantOnSdk30()
|
||||
.ifNecessary()
|
||||
.onAllGranted(() -> {
|
||||
File outputDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
|
||||
boolean success = logViewFragment.saveLogFile(outputDir) != null;
|
||||
new AlertDialog.Builder(this)
|
||||
.setMessage(success? R.string.pref_saved_log : R.string.pref_save_log_failed)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
})
|
||||
.execute();
|
||||
return true;
|
||||
case R.id.share_log:
|
||||
shareLog();
|
||||
return true;
|
||||
case R.id.log_zoom_in:
|
||||
newSize = logViewFragment.getLogTextSize() + 2.0f;
|
||||
logViewFragment.setLogTextSize(newSize);
|
||||
return false;
|
||||
case R.id.log_zoom_out:
|
||||
newSize = logViewFragment.getLogTextSize() - 2.0f;
|
||||
logViewFragment.setLogTextSize(newSize);
|
||||
return false;
|
||||
case R.id.log_scroll_down:
|
||||
logViewFragment.scrollDownLog();
|
||||
return false;
|
||||
case R.id.log_scroll_up:
|
||||
logViewFragment.scrollUpLog();
|
||||
return false;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == android.R.id.home) {
|
||||
finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.save_log) {
|
||||
Permissions.with(this)
|
||||
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
.alwaysGrantOnSdk30()
|
||||
.ifNecessary()
|
||||
.onAllGranted(() -> {
|
||||
File outputDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
|
||||
boolean success = logViewFragment.saveLogFile(outputDir) != null;
|
||||
new AlertDialog.Builder(this)
|
||||
.setMessage(success ? R.string.pref_saved_log : R.string.pref_save_log_failed)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
})
|
||||
.execute();
|
||||
return true;
|
||||
} else if (itemId == R.id.share_log) {
|
||||
shareLog();
|
||||
return true;
|
||||
} else if (itemId == R.id.log_zoom_in) {
|
||||
newSize = logViewFragment.getLogTextSize() + 2.0f;
|
||||
logViewFragment.setLogTextSize(newSize);
|
||||
return false;
|
||||
} else if (itemId == R.id.log_zoom_out) {
|
||||
newSize = logViewFragment.getLogTextSize() - 2.0f;
|
||||
logViewFragment.setLogTextSize(newSize);
|
||||
return false;
|
||||
} else if (itemId == R.id.log_scroll_down) {
|
||||
logViewFragment.scrollDownLog();
|
||||
return false;
|
||||
} else if (itemId == R.id.log_scroll_up) {
|
||||
logViewFragment.scrollUpLog();
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -18,14 +18,12 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.ActivityManager;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Build.VERSION;
|
||||
import android.os.Build.VERSION_CODES;
|
||||
import android.os.Bundle;
|
||||
import android.os.PowerManager;
|
||||
import android.text.TextUtils;
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
@@ -207,7 +207,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
messageRecord = null;
|
||||
long date = getIntent().getLongExtra(DATE_EXTRA, 0);
|
||||
long size = getIntent().getLongExtra(SIZE_EXTRA, 0);
|
||||
initialMedia = new MediaItem(null, getIntent().getData(), getIntent().getType(),
|
||||
initialMedia = new MediaItem(null, getIntent().getData(), null, getIntent().getType(),
|
||||
DcMsg.DC_MSG_NO_ID, date, size, false);
|
||||
|
||||
if (address != null) {
|
||||
@@ -218,7 +218,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
} else {
|
||||
messageRecord = dcContext.getMsg(msgId);
|
||||
initialMedia = new MediaItem(Recipient.fromChat(context, msgId), Uri.fromFile(messageRecord.getFileAsFile()),
|
||||
messageRecord.getFilemime(), messageRecord.getId(), messageRecord.getDateReceived(),
|
||||
messageRecord.getFilename(), messageRecord.getFilemime(), messageRecord.getId(), messageRecord.getDateReceived(),
|
||||
messageRecord.getFilebytes(), messageRecord.isOutgoing());
|
||||
conversationRecipient = Recipient.fromChat(context, msgId);
|
||||
}
|
||||
@@ -232,12 +232,11 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
// if you search for the place where the media are loaded, go to 'onCreateLoader'.
|
||||
|
||||
Log.w(TAG, "Loading Part URI: " + initialMedia);
|
||||
|
||||
if (messageRecord != null) {
|
||||
getSupportLoaderManager().restartLoader(0, null, this);
|
||||
} else {
|
||||
mediaPager.setAdapter(new SingleItemPagerAdapter(this, GlideApp.with(this),
|
||||
getWindow(), initialMedia.uri, initialMedia.type, initialMedia.size));
|
||||
getWindow(), initialMedia.uri, initialMedia.name, initialMedia.type, initialMedia.size));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +312,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
private void performSavetoDisk(@NonNull MediaItem mediaItem) {
|
||||
SaveAttachmentTask saveTask = new SaveAttachmentTask(MediaPreviewActivity.this);
|
||||
long saveDate = (mediaItem.date > 0) ? mediaItem.date : System.currentTimeMillis();
|
||||
saveTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Attachment(mediaItem.uri, mediaItem.type, saveDate, null));
|
||||
saveTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Attachment(mediaItem.uri, mediaItem.type, saveDate, mediaItem.name));
|
||||
}
|
||||
|
||||
private void showInChat() {
|
||||
@@ -346,27 +345,32 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
DcChat dcChat = dcContext.getChat(dcMsg.getChatId());
|
||||
|
||||
String text = getResources().getQuantityString(
|
||||
dcChat.isDeviceTalk()? R.plurals.ask_delete_messages_simple : R.plurals.ask_delete_messages,
|
||||
dcChat.isDeviceTalk() ? R.plurals.ask_delete_messages_simple : R.plurals.ask_delete_messages,
|
||||
1, 1);
|
||||
int positiveBtnLabel = dcChat.isSelfTalk() ? R.string.delete : R.string.delete_for_me;
|
||||
final int[] messageIds = new int[]{mediaItem.msgId};
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setMessage(text);
|
||||
builder.setCancelable(true);
|
||||
|
||||
builder.setPositiveButton(R.string.delete, (dialogInterface, which) -> {
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
dcContext.deleteMsgs(new int[]{mediaItem.msgId});
|
||||
return null;
|
||||
}
|
||||
}.execute();
|
||||
|
||||
builder.setNeutralButton(android.R.string.cancel, null);
|
||||
builder.setPositiveButton(positiveBtnLabel, (dialogInterface, which) -> {
|
||||
Util.runOnAnyBackgroundThread(() -> dcContext.deleteMsgs(messageIds));
|
||||
finish();
|
||||
});
|
||||
builder.setNegativeButton(android.R.string.cancel, null);
|
||||
AlertDialog dialog = builder.show();
|
||||
Util.redPositiveButton(dialog);
|
||||
|
||||
if(dcChat.canSend() && !dcChat.isSelfTalk() && dcMsg.isOutgoing()) {
|
||||
builder.setNegativeButton(R.string.delete_for_everyone, (d, which) -> {
|
||||
Util.runOnAnyBackgroundThread(() -> dcContext.sendDeleteRequest(messageIds));
|
||||
finish();
|
||||
});
|
||||
AlertDialog dialog = builder.show();
|
||||
Util.redButton(dialog, AlertDialog.BUTTON_NEGATIVE);
|
||||
Util.redPositiveButton(dialog);
|
||||
} else {
|
||||
AlertDialog dialog = builder.show();
|
||||
Util.redPositiveButton(dialog);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -396,14 +400,28 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case R.id.media_preview__edit: editAvatar(); return true;
|
||||
case R.id.media_preview__overview: showOverview(); return true;
|
||||
case R.id.media_preview__share: share(); return true;
|
||||
case R.id.save: saveToDisk(); return true;
|
||||
case R.id.delete: deleteMedia(); return true;
|
||||
case R.id.show_in_chat: showInChat(); return true;
|
||||
case android.R.id.home: finish(); return true;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.media_preview__edit) {
|
||||
editAvatar();
|
||||
return true;
|
||||
} else if (itemId == R.id.media_preview__overview) {
|
||||
showOverview();
|
||||
return true;
|
||||
} else if (itemId == R.id.media_preview__share) {
|
||||
share();
|
||||
return true;
|
||||
} else if (itemId == R.id.save) {
|
||||
saveToDisk();
|
||||
return true;
|
||||
} else if (itemId == R.id.delete) {
|
||||
deleteMedia();
|
||||
return true;
|
||||
} else if (itemId == R.id.show_in_chat) {
|
||||
showInChat();
|
||||
return true;
|
||||
} else if (itemId == android.R.id.home) {
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -473,9 +491,12 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
MediaItemAdapter adapter = (MediaItemAdapter)mediaPager.getAdapter();
|
||||
|
||||
if (adapter != null) {
|
||||
MediaItem item = adapter.getMediaItemFor(position);
|
||||
if (item.recipient != null) item.recipient.removeListener(MediaPreviewActivity.this);
|
||||
|
||||
try {
|
||||
MediaItem item = adapter.getMediaItemFor(position);
|
||||
if (item.recipient != null) item.recipient.removeListener(MediaPreviewActivity.this);
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.w(TAG, "Ignoring invalid position index");
|
||||
}
|
||||
adapter.pause(position);
|
||||
}
|
||||
}
|
||||
@@ -486,18 +507,20 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
private final GlideRequests glideRequests;
|
||||
private final Window window;
|
||||
private final Uri uri;
|
||||
private final String name;
|
||||
private final String mediaType;
|
||||
private final long size;
|
||||
|
||||
private final LayoutInflater inflater;
|
||||
|
||||
SingleItemPagerAdapter(@NonNull Context context, @NonNull GlideRequests glideRequests,
|
||||
@NonNull Window window, @NonNull Uri uri, @NonNull String mediaType,
|
||||
@NonNull Window window, @NonNull Uri uri, @Nullable String name, @NonNull String mediaType,
|
||||
long size)
|
||||
{
|
||||
this.glideRequests = glideRequests;
|
||||
this.window = window;
|
||||
this.uri = uri;
|
||||
this.name = name;
|
||||
this.mediaType = mediaType;
|
||||
this.size = size;
|
||||
this.inflater = LayoutInflater.from(context);
|
||||
@@ -519,7 +542,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
MediaView mediaView = itemView.findViewById(R.id.media_view);
|
||||
|
||||
try {
|
||||
mediaView.set(glideRequests, window, uri, mediaType, size, true);
|
||||
mediaView.set(glideRequests, window, uri, name, mediaType, size, true);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, e);
|
||||
}
|
||||
@@ -539,7 +562,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
@Override
|
||||
public MediaItem getMediaItemFor(int position) {
|
||||
return new MediaItem(null, uri, mediaType, DcMsg.DC_MSG_NO_ID, -1, -1, true);
|
||||
return new MediaItem(null, uri, name, mediaType, DcMsg.DC_MSG_NO_ID, -1, -1, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -604,7 +627,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
try {
|
||||
//noinspection ConstantConditions
|
||||
mediaView.set(glideRequests, window, Uri.fromFile(msg.getFileAsFile()),
|
||||
mediaView.set(glideRequests, window, Uri.fromFile(msg.getFileAsFile()), msg.getFilename(),
|
||||
msg.getFilemime(), msg.getFilebytes(), autoplay);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, e);
|
||||
@@ -633,6 +656,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
return new MediaItem(Recipient.fromChat(context, msg.getId()),
|
||||
Uri.fromFile(msg.getFileAsFile()),
|
||||
msg.getFilename(),
|
||||
msg.getFilemime(),
|
||||
msg.getId(),
|
||||
msg.getDateReceived(),
|
||||
@@ -655,6 +679,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
private static class MediaItem {
|
||||
private final @Nullable Recipient recipient;
|
||||
private final @NonNull Uri uri;
|
||||
private final @Nullable String name;
|
||||
private final @NonNull String type;
|
||||
private final int msgId;
|
||||
private final long date;
|
||||
@@ -663,6 +688,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
private MediaItem(@Nullable Recipient recipient,
|
||||
@NonNull Uri uri,
|
||||
@Nullable String name,
|
||||
@NonNull String type,
|
||||
int msgId,
|
||||
long date,
|
||||
@@ -671,6 +697,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
{
|
||||
this.recipient = recipient;
|
||||
this.uri = uri;
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
this.msgId = msgId;
|
||||
this.date = date;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
@@ -61,22 +62,46 @@ public abstract class MessageSelectorFragment
|
||||
}
|
||||
|
||||
protected void handleDeleteMessages(int chatId, final int[] messageIds) {
|
||||
DcChat dcChat = DcHelper.getContext(getActivity()).getChat(chatId);
|
||||
DcChat dcChat = dcContext.getChat(chatId);
|
||||
boolean canDeleteForAll = true;
|
||||
if (dcChat.canSend() && !dcChat.isSelfTalk()) {
|
||||
for(int msgId : messageIds) {
|
||||
DcMsg msg = dcContext.getMsg(msgId);
|
||||
if (!msg.isOutgoing() || msg.isInfo()) {
|
||||
canDeleteForAll = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
canDeleteForAll = false;
|
||||
}
|
||||
|
||||
String text = getActivity().getResources().getQuantityString(
|
||||
dcChat.isDeviceTalk()? R.plurals.ask_delete_messages_simple : R.plurals.ask_delete_messages,
|
||||
dcChat.isDeviceTalk() ? R.plurals.ask_delete_messages_simple : R.plurals.ask_delete_messages,
|
||||
messageIds.length, messageIds.length);
|
||||
int positiveBtnLabel = dcChat.isSelfTalk() ? R.string.delete : R.string.delete_for_me;
|
||||
|
||||
AlertDialog dialog = new AlertDialog.Builder(getActivity())
|
||||
.setMessage(text)
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(R.string.delete, (d, which) -> {
|
||||
dcContext.deleteMsgs(messageIds);
|
||||
if (actionMode != null) actionMode.finish();
|
||||
})
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show();
|
||||
Util.redPositiveButton(dialog);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity())
|
||||
.setMessage(text)
|
||||
.setCancelable(true)
|
||||
.setNeutralButton(android.R.string.cancel, null)
|
||||
.setPositiveButton(positiveBtnLabel, (d, which) -> {
|
||||
dcContext.deleteMsgs(messageIds);
|
||||
if (actionMode != null) actionMode.finish();
|
||||
});
|
||||
|
||||
if(canDeleteForAll) {
|
||||
builder.setNegativeButton(R.string.delete_for_everyone, (d, which) -> {
|
||||
Util.runOnAnyBackgroundThread(() -> dcContext.sendDeleteRequest(messageIds));
|
||||
if (actionMode != null) actionMode.finish();
|
||||
});
|
||||
AlertDialog dialog = builder.show();
|
||||
Util.redButton(dialog, AlertDialog.BUTTON_NEGATIVE);
|
||||
Util.redPositiveButton(dialog);
|
||||
} else {
|
||||
AlertDialog dialog = builder.show();
|
||||
Util.redPositiveButton(dialog);
|
||||
}
|
||||
}
|
||||
|
||||
protected void handleSaveAttachment(final Set<DcMsg> messageRecords) {
|
||||
@@ -121,15 +146,22 @@ public abstract class MessageSelectorFragment
|
||||
|
||||
protected void handleResendMessage(final Set<DcMsg> dcMsgsSet) {
|
||||
int[] ids = DcMsg.msgSetToIds(dcMsgsSet);
|
||||
if (dcContext.resendMsgs(ids)) {
|
||||
actionMode.finish();
|
||||
Toast.makeText(getContext(), R.string.sending, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
new AlertDialog.Builder(getContext())
|
||||
.setMessage(dcContext.getLastError())
|
||||
.setCancelable(false)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
}
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
boolean success = dcContext.resendMsgs(ids);
|
||||
Util.runOnMain(() -> {
|
||||
Activity activity = getActivity();
|
||||
if (activity == null || activity.isFinishing()) return;
|
||||
if (success) {
|
||||
actionMode.finish();
|
||||
Toast.makeText(getContext(), R.string.sending, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
new AlertDialog.Builder(activity)
|
||||
.setMessage(dcContext.getLastError())
|
||||
.setCancelable(false)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
@@ -18,7 +19,7 @@ public class MuteDialog {
|
||||
// See https://c.delta.chat/classdc__context__t.html#a6460395925d49d2053bc95224bf5ce37.
|
||||
switch (which) {
|
||||
case 0: muteUntil = TimeUnit.HOURS.toSeconds(1); break;
|
||||
case 1: muteUntil = TimeUnit.HOURS.toSeconds(2); break;
|
||||
case 1: muteUntil = TimeUnit.HOURS.toSeconds(8); break;
|
||||
case 2: muteUntil = TimeUnit.DAYS.toSeconds(1); break;
|
||||
case 3: muteUntil = TimeUnit.DAYS.toSeconds(7); break;
|
||||
case 4: muteUntil = -1; break; // mute forever
|
||||
|
||||
@@ -16,12 +16,15 @@
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.CHAT_ID_EXTRA;
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.TEXT_EXTRA;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.acquireRelayMessageContent;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.isRelayingMessageContent;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.View;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
@@ -36,11 +39,6 @@ import org.thoughtcrime.securesms.qr.QrActivity;
|
||||
import org.thoughtcrime.securesms.qr.QrCodeHandler;
|
||||
import org.thoughtcrime.securesms.util.MailtoUtil;
|
||||
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.CHAT_ID_EXTRA;
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.TEXT_EXTRA;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.acquireRelayMessageContent;
|
||||
import static org.thoughtcrime.securesms.util.RelayUtil.isRelayingMessageContent;
|
||||
|
||||
/**
|
||||
* Activity container for starting a new conversation.
|
||||
*
|
||||
@@ -74,7 +72,17 @@ public class NewConversationActivity extends ContactSelectionActivity {
|
||||
if (!textToShare.isEmpty()) {
|
||||
getIntent().putExtra(TEXT_EXTRA, textToShare);
|
||||
}
|
||||
onContactSelected(DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT, recipientsArray[0]);
|
||||
final String addr = recipientsArray[0];
|
||||
final DcContext dcContext = DcHelper.getContext(this);
|
||||
int contactId = dcContext.lookupContactIdByAddr(addr);
|
||||
if (contactId == 0 && dcContext.mayBeValidAddr(addr)) {
|
||||
contactId = dcContext.createContact(null, recipientsArray[0]);
|
||||
}
|
||||
if (contactId == 0) {
|
||||
Toast.makeText(this, R.string.bad_email_address, Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
onContactSelected(contactId);
|
||||
}
|
||||
} else {
|
||||
Intent shareIntent = new Intent(this, ShareActivity.class);
|
||||
shareIntent.putExtra(Intent.EXTRA_TEXT, textToShare);
|
||||
@@ -96,39 +104,28 @@ public class NewConversationActivity extends ContactSelectionActivity {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContactSelected(int specialId, String addr) {
|
||||
final DcContext dcContext = DcHelper.getContext(this);
|
||||
if(specialId == DcContact.DC_CONTACT_ID_NEW_GROUP) {
|
||||
public void onContactSelected(int contactId) {
|
||||
if(contactId == DcContact.DC_CONTACT_ID_NEW_GROUP) {
|
||||
startActivity(new Intent(this, GroupCreateActivity.class));
|
||||
} else if(specialId == DcContact.DC_CONTACT_ID_NEW_BROADCAST_LIST) {
|
||||
} else if(contactId == DcContact.DC_CONTACT_ID_NEW_BROADCAST_LIST) {
|
||||
Intent intent = new Intent(this, GroupCreateActivity.class);
|
||||
intent.putExtra(GroupCreateActivity.CREATE_BROADCAST, true);
|
||||
startActivity(intent);
|
||||
} else if (specialId == DcContact.DC_CONTACT_ID_QR_INVITE) {
|
||||
} else if (contactId == DcContact.DC_CONTACT_ID_QR_INVITE) {
|
||||
new IntentIntegrator(this).setCaptureActivity(QrActivity.class).initiateScan();
|
||||
}
|
||||
else {
|
||||
int contactId = dcContext.lookupContactIdByAddr(addr);
|
||||
if (contactId!=0 && dcContext.getChatIdByContactId(contactId)!=0) {
|
||||
final DcContext dcContext = DcHelper.getContext(this);
|
||||
if (dcContext.getChatIdByContactId(contactId)!=0) {
|
||||
openConversation(dcContext.getChatIdByContactId(contactId));
|
||||
} else if (contactId == 0 && dcContext.isChatmail()) {
|
||||
DcHelper.showEncryptionRequiredDialog(this, addr);
|
||||
} else {
|
||||
String nameNAddr = contactId == 0 ? addr : dcContext.getContact(contactId).getNameNAddr();
|
||||
String name = dcContext.getContact(contactId).getDisplayName();
|
||||
new AlertDialog.Builder(this)
|
||||
.setMessage(getString(R.string.ask_start_chat_with, nameNAddr))
|
||||
.setMessage(getString(R.string.ask_start_chat_with, name))
|
||||
.setCancelable(true)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
||||
int contactId1 = dcContext.lookupContactIdByAddr(addr);
|
||||
if (contactId1 == 0) {
|
||||
contactId1 = dcContext.createContact(null, addr);
|
||||
if (contactId1 == 0) {
|
||||
Toast.makeText(NewConversationActivity.this, R.string.bad_email_address, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
}
|
||||
openConversation(dcContext.createChatByContactId(contactId1));
|
||||
openConversation(dcContext.createChatByContactId(contactId));
|
||||
}).show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ import com.b44t.messenger.DcChat;
|
||||
import com.b44t.messenger.DcContact;
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcEvent;
|
||||
import com.b44t.messenger.rpc.Rpc;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
|
||||
import org.thoughtcrime.securesms.connect.DcEventCenter;
|
||||
@@ -63,6 +65,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
|
||||
private static final int REQUEST_CODE_PICK_RINGTONE = 1;
|
||||
|
||||
private DcContext dcContext;
|
||||
private Rpc rpc;
|
||||
private int chatId;
|
||||
private boolean chatIsMultiUser;
|
||||
private boolean chatIsDeviceTalk;
|
||||
@@ -82,6 +85,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
|
||||
dynamicTheme = new DynamicNoActionBarTheme();
|
||||
super.onPreCreate();
|
||||
dcContext = DcHelper.getContext(this);
|
||||
rpc = DcHelper.getRpc(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -92,23 +96,25 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
setSupportActionBar(this.toolbar);
|
||||
ActionBar supportActionBar = getSupportActionBar();
|
||||
if (isGlobalProfile()) {
|
||||
supportActionBar.setDisplayHomeAsUpEnabled(true);
|
||||
supportActionBar.setHomeActionContentDescription(getString(R.string.back));
|
||||
} else {
|
||||
supportActionBar.setDisplayHomeAsUpEnabled(false);
|
||||
supportActionBar.setCustomView(R.layout.conversation_title_view);
|
||||
supportActionBar.setDisplayShowCustomEnabled(true);
|
||||
supportActionBar.setDisplayShowTitleEnabled(false);
|
||||
Toolbar parent = (Toolbar) supportActionBar.getCustomView().getParent();
|
||||
parent.setPadding(0,0,0,0);
|
||||
parent.setContentInsetsAbsolute(0,0);
|
||||
if (supportActionBar != null) {
|
||||
if (isGlobalProfile()) {
|
||||
supportActionBar.setDisplayHomeAsUpEnabled(true);
|
||||
supportActionBar.setHomeActionContentDescription(getString(R.string.back));
|
||||
} else {
|
||||
supportActionBar.setDisplayHomeAsUpEnabled(false);
|
||||
supportActionBar.setCustomView(R.layout.conversation_title_view);
|
||||
supportActionBar.setDisplayShowCustomEnabled(true);
|
||||
supportActionBar.setDisplayShowTitleEnabled(false);
|
||||
Toolbar parent = (Toolbar) supportActionBar.getCustomView().getParent();
|
||||
parent.setPadding(0,0,0,0);
|
||||
parent.setContentInsetsAbsolute(0,0);
|
||||
|
||||
titleView = (ConversationTitleView) supportActionBar.getCustomView();
|
||||
titleView.setOnBackClickedListener(view -> onBackPressed());
|
||||
titleView.setOnClickListener(view -> onEnlargeAvatar());
|
||||
if (isContactProfile() && !isSelfProfile() && !chatIsDeviceTalk) {
|
||||
titleView.registerForContextMenu(this);
|
||||
titleView = (ConversationTitleView) supportActionBar.getCustomView();
|
||||
titleView.setOnBackClickedListener(view -> onBackPressed());
|
||||
titleView.setOnClickListener(view -> onEnlargeAvatar());
|
||||
if (isContactProfile() && !isSelfProfile() && !chatIsDeviceTalk) {
|
||||
titleView.registerForContextMenu(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,6 +159,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
|
||||
menu.findItem(R.id.share).setVisible(false);
|
||||
}
|
||||
} else {
|
||||
menu.findItem(R.id.menu_clone).setVisible(false);
|
||||
canReceive = false;
|
||||
}
|
||||
|
||||
@@ -299,7 +306,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPrimaryItem(ViewGroup container, int position, Object object) {
|
||||
public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
|
||||
super.setPrimaryItem(container, position, object);
|
||||
if (currentFragment != null && currentFragment != object) {
|
||||
ActionMode action = null;
|
||||
@@ -315,6 +322,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
|
||||
currentFragment = object;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Fragment getItem(int position) {
|
||||
int tabId = tabs.get(position);
|
||||
@@ -412,50 +420,40 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
|
||||
// =========================================================================
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
backPressed = true;
|
||||
finish();
|
||||
return true;
|
||||
case R.id.menu_mute_notifications:
|
||||
onNotifyOnOff();
|
||||
break;
|
||||
case R.id.menu_sound:
|
||||
onSoundSettings();
|
||||
break;
|
||||
case R.id.menu_vibrate:
|
||||
onVibrateSettings();
|
||||
break;
|
||||
case R.id.edit_name:
|
||||
onEditName();
|
||||
break;
|
||||
case R.id.share:
|
||||
onShare();
|
||||
break;
|
||||
case R.id.show_encr_info:
|
||||
onEncrInfo();
|
||||
break;
|
||||
case R.id.block_contact:
|
||||
onBlockContact();
|
||||
break;
|
||||
case R.id.menu_clone:
|
||||
onClone();
|
||||
break;
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == android.R.id.home) {
|
||||
backPressed = true;
|
||||
finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_mute_notifications) {
|
||||
onNotifyOnOff();
|
||||
} else if (itemId == R.id.menu_sound) {
|
||||
onSoundSettings();
|
||||
} else if (itemId == R.id.menu_vibrate) {
|
||||
onVibrateSettings();
|
||||
} else if (itemId == R.id.edit_name) {
|
||||
onEditName();
|
||||
} else if (itemId == R.id.share) {
|
||||
onShare();
|
||||
} else if (itemId == R.id.show_encr_info) {
|
||||
onEncrInfo();
|
||||
} else if (itemId == R.id.block_contact) {
|
||||
onBlockContact();
|
||||
} else if (itemId == R.id.menu_clone) {
|
||||
onClone();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onContextItemSelected(MenuItem item) {
|
||||
public boolean onContextItemSelected(@NonNull MenuItem item) {
|
||||
super.onContextItemSelected(item);
|
||||
switch (item.getItemId()) {
|
||||
case R.id.copy_addr_to_clipboard:
|
||||
onCopyAddrToClipboard();
|
||||
break;
|
||||
if (item.getItemId() == R.id.copy_addr_to_clipboard) {
|
||||
onCopyAddrToClipboard();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -465,7 +463,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
|
||||
setMuted(0);
|
||||
}
|
||||
else {
|
||||
MuteDialog.show(this, duration -> setMuted(duration));
|
||||
MuteDialog.show(this, this::setMuted);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -545,6 +543,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
}
|
||||
else {
|
||||
int accountId = dcContext.getAccountId();
|
||||
DcContact dcContact = dcContext.getContact(contactId);
|
||||
|
||||
String authName = dcContact.getAuthName();
|
||||
@@ -564,7 +563,11 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
|
||||
.setView(gl)
|
||||
.setPositiveButton(android.R.string.ok, (dialog, whichButton) -> {
|
||||
String newName = inputField.getText().toString();
|
||||
dcContext.createContact(newName, dcContact.getAddr());
|
||||
try {
|
||||
rpc.changeContactName(accountId, contactId, newName);
|
||||
} catch (RpcException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
})
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setCancelable(false)
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.NonNull;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.b44t.messenger.DcMsg;
|
||||
import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter;
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import static com.b44t.messenger.DcChat.DC_CHAT_NO_CHAT;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
@@ -122,7 +121,13 @@ public class ProfileDocumentsFragment
|
||||
|
||||
noMedia.setVisibility(recyclerView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE);
|
||||
if (chatId == DC_CHAT_NO_CHAT) {
|
||||
noMedia.setText(R.string.tab_all_media_empty_hint);
|
||||
if (showWebxdc) {
|
||||
noMedia.setText(R.string.all_apps_empty_hint);
|
||||
} else if (!showAudio){
|
||||
noMedia.setText(R.string.all_files_empty_hint);
|
||||
} else {
|
||||
noMedia.setText(R.string.tab_all_media_empty_hint);
|
||||
}
|
||||
} else if (showAudio) {
|
||||
noMedia.setText(R.string.tab_audio_empty_hint);
|
||||
} else if (showWebxdc) {
|
||||
@@ -174,7 +179,7 @@ public class ProfileDocumentsFragment
|
||||
}
|
||||
|
||||
if (dcMsg.getType() == DcMsg.DC_MSG_WEBXDC) {
|
||||
DcHelper.openWebxdc(context, dcMsg);
|
||||
WebxdcActivity.openWebxdcActivity(context, dcMsg);
|
||||
} else {
|
||||
DcHelper.openForViewOrShare(getActivity(), dcMsg.getId(), Intent.ACTION_VIEW);
|
||||
}
|
||||
@@ -243,35 +248,35 @@ public class ProfileDocumentsFragment
|
||||
|
||||
@Override
|
||||
public boolean onActionItemClicked(ActionMode mode, MenuItem menuItem) {
|
||||
switch (menuItem.getItemId()) {
|
||||
case R.id.details:
|
||||
handleDisplayDetails(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
mode.finish();
|
||||
return true;
|
||||
case R.id.delete:
|
||||
handleDeleteMessages(chatId, getListAdapter().getSelectedMedia());
|
||||
mode.finish();
|
||||
return true;
|
||||
case R.id.share:
|
||||
handleShare(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
return true;
|
||||
case R.id.menu_add_to_home_screen:
|
||||
WebxdcActivity.addToHomeScreen(getActivity(), getSelectedMessageRecord(getListAdapter().getSelectedMedia()).getId());
|
||||
mode.finish();
|
||||
return true;
|
||||
case R.id.show_in_chat:
|
||||
handleShowInChat(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
return true;
|
||||
case R.id.save:
|
||||
handleSaveAttachment(getListAdapter().getSelectedMedia());
|
||||
return true;
|
||||
case R.id.menu_resend:
|
||||
handleResendMessage(getListAdapter().getSelectedMedia());
|
||||
return true;
|
||||
case R.id.menu_select_all:
|
||||
getListAdapter().selectAll();
|
||||
updateActionModeBar();
|
||||
return true;
|
||||
int itemId = menuItem.getItemId();
|
||||
if (itemId == R.id.details) {
|
||||
handleDisplayDetails(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
mode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.delete) {
|
||||
handleDeleteMessages(chatId, getListAdapter().getSelectedMedia());
|
||||
mode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.share) {
|
||||
handleShare(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_add_to_home_screen) {
|
||||
WebxdcActivity.addToHomeScreen(getActivity(), getSelectedMessageRecord(getListAdapter().getSelectedMedia()).getId());
|
||||
mode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.show_in_chat) {
|
||||
handleShowInChat(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
return true;
|
||||
} else if (itemId == R.id.save) {
|
||||
handleSaveAttachment(getListAdapter().getSelectedMedia());
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_resend) {
|
||||
handleResendMessage(getListAdapter().getSelectedMedia());
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_select_all) {
|
||||
getListAdapter().selectAll();
|
||||
updateActionModeBar();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.NonNull;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.b44t.messenger.DcMsg;
|
||||
import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter;
|
||||
|
||||
|
||||
@@ -5,14 +5,7 @@ import static com.b44t.messenger.DcChat.DC_CHAT_NO_CHAT;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.Loader;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.view.ActionMode;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
@@ -21,6 +14,13 @@ import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.view.ActionMode;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.Loader;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcEvent;
|
||||
import com.b44t.messenger.DcMsg;
|
||||
@@ -233,31 +233,31 @@ public class ProfileGalleryFragment
|
||||
|
||||
@Override
|
||||
public boolean onActionItemClicked(ActionMode mode, MenuItem menuItem) {
|
||||
switch (menuItem.getItemId()) {
|
||||
case R.id.details:
|
||||
handleDisplayDetails(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
mode.finish();
|
||||
return true;
|
||||
case R.id.delete:
|
||||
handleDeleteMessages(chatId, getListAdapter().getSelectedMedia());
|
||||
mode.finish();
|
||||
return true;
|
||||
case R.id.share:
|
||||
handleShare(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
return true;
|
||||
case R.id.show_in_chat:
|
||||
handleShowInChat(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
return true;
|
||||
case R.id.save:
|
||||
handleSaveAttachment(getListAdapter().getSelectedMedia());
|
||||
return true;
|
||||
case R.id.menu_resend:
|
||||
handleResendMessage(getListAdapter().getSelectedMedia());
|
||||
return true;
|
||||
case R.id.menu_select_all:
|
||||
getListAdapter().selectAll();
|
||||
updateActionModeBar();
|
||||
return true;
|
||||
int itemId = menuItem.getItemId();
|
||||
if (itemId == R.id.details) {
|
||||
handleDisplayDetails(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
mode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.delete) {
|
||||
handleDeleteMessages(chatId, getListAdapter().getSelectedMedia());
|
||||
mode.finish();
|
||||
return true;
|
||||
} else if (itemId == R.id.share) {
|
||||
handleShare(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
return true;
|
||||
} else if (itemId == R.id.show_in_chat) {
|
||||
handleShowInChat(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
|
||||
return true;
|
||||
} else if (itemId == R.id.save) {
|
||||
handleSaveAttachment(getListAdapter().getSelectedMedia());
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_resend) {
|
||||
handleResendMessage(getListAdapter().getSelectedMedia());
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_select_all) {
|
||||
getListAdapter().selectAll();
|
||||
updateActionModeBar();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.contacts.ContactSelectionListItem;
|
||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
||||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
import org.thoughtcrime.securesms.util.ResUtil;
|
||||
import org.thoughtcrime.securesms.util.StickyHeaderDecoration.StickyHeaderAdapter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -41,7 +42,6 @@ public class ProfileSettingsAdapter extends RecyclerView.Adapter
|
||||
private final @NonNull ArrayList<ItemData> itemData = new ArrayList<>();
|
||||
private int itemDataMemberCount;
|
||||
private DcChatlist itemDataSharedChats;
|
||||
private DcContact itemDataContact;
|
||||
private String itemDataStatusText;
|
||||
private boolean isMailingList;
|
||||
private boolean isBroadcast;
|
||||
@@ -115,8 +115,9 @@ public class ProfileSettingsAdapter extends RecyclerView.Adapter
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ProfileSettingsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
public ProfileSettingsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
if (viewType == ItemData.CATEGORY_MEMBERS) {
|
||||
final ContactSelectionListItem item = (ContactSelectionListItem)layoutInflater.inflate(R.layout.contact_selection_list_item, parent, false);
|
||||
item.setNoHeaderPadding();
|
||||
@@ -138,7 +139,7 @@ public class ProfileSettingsAdapter extends RecyclerView.Adapter
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
|
||||
ViewHolder holder = (ViewHolder) viewHolder;
|
||||
if (holder.itemView instanceof ContactSelectionListItem) {
|
||||
ContactSelectionListItem contactItem = (ContactSelectionListItem) holder.itemView;
|
||||
@@ -279,23 +280,24 @@ public class ProfileSettingsAdapter extends RecyclerView.Adapter
|
||||
itemData.clear();
|
||||
itemDataMemberCount = 0;
|
||||
itemDataSharedChats = null;
|
||||
itemDataContact = null;
|
||||
itemDataStatusText = "";
|
||||
isMailingList = false;
|
||||
isBroadcast = false;
|
||||
|
||||
if (memberList!=null) {
|
||||
itemDataMemberCount = memberList.length;
|
||||
if (dcChat.isBroadcast()) {
|
||||
isBroadcast = true;
|
||||
}
|
||||
if (dcChat != null) {
|
||||
if (dcChat.isBroadcast()) {
|
||||
isBroadcast = true;
|
||||
}
|
||||
|
||||
if (dcChat.isMailingList()) {
|
||||
isMailingList = true;
|
||||
} else if (dcChat.canSend()) {
|
||||
itemData.add(new ItemData(ItemData.CATEGORY_MEMBERS, DcContact.DC_CONTACT_ID_ADD_MEMBER, 0));
|
||||
if (!isBroadcast) {
|
||||
itemData.add(new ItemData(ItemData.CATEGORY_MEMBERS, DcContact.DC_CONTACT_ID_QR_INVITE, 0));
|
||||
if (dcChat.isMailingList()) {
|
||||
isMailingList = true;
|
||||
} else if (dcChat.canSend()) {
|
||||
itemData.add(new ItemData(ItemData.CATEGORY_MEMBERS, DcContact.DC_CONTACT_ID_ADD_MEMBER, 0));
|
||||
if (!isBroadcast) {
|
||||
itemData.add(new ItemData(ItemData.CATEGORY_MEMBERS, DcContact.DC_CONTACT_ID_QR_INVITE, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,7 +308,6 @@ public class ProfileSettingsAdapter extends RecyclerView.Adapter
|
||||
else if (sharedChats!=null && dcContact!=null) {
|
||||
boolean chatIsDeviceTalk = dcChat != null && dcChat.isDeviceTalk();
|
||||
|
||||
itemDataContact = dcContact;
|
||||
if (!chatIsDeviceTalk) {
|
||||
int verifierId = dcContact.getVerifierId();
|
||||
if (verifierId != 0) {
|
||||
@@ -319,7 +320,7 @@ public class ProfileSettingsAdapter extends RecyclerView.Adapter
|
||||
itemData.add(new ItemData(ItemData.CATEGORY_INFO, INFO_VERIFIED, verifiedInfo, 0, R.drawable.ic_verified));
|
||||
}
|
||||
|
||||
long lastSeenTimestamp = (itemDataContact!=null? itemDataContact.getLastSeen() : 0);
|
||||
long lastSeenTimestamp = dcContact.getLastSeen();
|
||||
String lastSeenTxt;
|
||||
if (lastSeenTimestamp == 0) {
|
||||
lastSeenTxt = context.getString(R.string.last_seen_unknown);
|
||||
@@ -330,7 +331,8 @@ public class ProfileSettingsAdapter extends RecyclerView.Adapter
|
||||
itemData.add(new ItemData(ItemData.CATEGORY_INFO, INFO_LAST_SEEN, lastSeenTxt, 0, 0));
|
||||
|
||||
|
||||
itemData.add(new ItemData(ItemData.CATEGORY_INFO, INFO_SEND_MESSAGE_BUTTON, context.getString(R.string.send_message), R.color.def_accent, 0));
|
||||
int color = ResUtil.getColor(context, R.attr.colorAccent);
|
||||
itemData.add(new ItemData(ItemData.CATEGORY_INFO, INFO_SEND_MESSAGE_BUTTON, context.getString(R.string.send_message), color, 0));
|
||||
}
|
||||
|
||||
itemDataStatusText = dcContact.getStatus();
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
@@ -48,7 +47,6 @@ public class ProfileSettingsFragment extends Fragment
|
||||
|
||||
private static final int REQUEST_CODE_PICK_CONTACT = 2;
|
||||
|
||||
private RecyclerView list;
|
||||
private StickyHeaderDecoration listDecoration;
|
||||
private ProfileSettingsAdapter adapter;
|
||||
private ActionMode actionMode;
|
||||
@@ -67,17 +65,17 @@ public class ProfileSettingsFragment extends Fragment
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
|
||||
chatId = getArguments().getInt(CHAT_ID_EXTRA, -1);
|
||||
chatId = getArguments() != null ? getArguments().getInt(CHAT_ID_EXTRA, -1) : -1;
|
||||
contactId = getArguments().getInt(CONTACT_ID_EXTRA, -1);
|
||||
dcContext = DcHelper.getContext(getContext());
|
||||
dcContext = DcHelper.getContext(requireContext());
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.profile_settings_fragment, container, false);
|
||||
adapter = new ProfileSettingsAdapter(getContext(), GlideApp.with(this), this);
|
||||
adapter = new ProfileSettingsAdapter(requireContext(), GlideApp.with(this), this);
|
||||
|
||||
list = ViewUtil.findById(view, R.id.recycler_view);
|
||||
RecyclerView list = ViewUtil.findById(view, R.id.recycler_view);
|
||||
list.setAdapter(adapter);
|
||||
list.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
|
||||
listDecoration = new StickyHeaderDecoration(adapter, false, true);
|
||||
@@ -85,7 +83,7 @@ public class ProfileSettingsFragment extends Fragment
|
||||
|
||||
update();
|
||||
|
||||
DcEventCenter eventCenter = DcHelper.getEventCenter(getContext());
|
||||
DcEventCenter eventCenter = DcHelper.getEventCenter(requireContext());
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_CHAT_MODIFIED, this);
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_CONTACTS_CHANGED, this);
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_MSGS_CHANGED, this);
|
||||
@@ -95,12 +93,12 @@ public class ProfileSettingsFragment extends Fragment
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
DcHelper.getEventCenter(getContext()).removeObservers(this);
|
||||
DcHelper.getEventCenter(requireContext()).removeObservers(this);
|
||||
super.onDestroyView();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
public void onConfigurationChanged(@NonNull Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
listDecoration.onConfigurationChanged(newConfig);
|
||||
}
|
||||
@@ -149,7 +147,7 @@ public class ProfileSettingsFragment extends Fragment
|
||||
|
||||
@Override
|
||||
public void onStatusLongClicked() {
|
||||
Context context = getContext();
|
||||
Context context = requireContext();
|
||||
new AlertDialog.Builder(context)
|
||||
.setTitle(R.string.pref_default_status_label)
|
||||
.setItems(new CharSequence[]{
|
||||
@@ -170,7 +168,7 @@ public class ProfileSettingsFragment extends Fragment
|
||||
DcChat dcChat = dcContext.getChat(chatId);
|
||||
if (dcChat.canSend()) {
|
||||
adapter.toggleMemberSelection(contactId);
|
||||
actionMode = ((AppCompatActivity) getActivity()).startSupportActionMode(actionModeCallback);
|
||||
actionMode = ((AppCompatActivity) requireActivity()).startSupportActionMode(actionModeCallback);
|
||||
}
|
||||
} else {
|
||||
onMemberClicked(contactId);
|
||||
@@ -208,10 +206,9 @@ public class ProfileSettingsFragment extends Fragment
|
||||
DcChat dcChat = dcContext.getChat(chatId);
|
||||
Intent intent = new Intent(getContext(), ContactMultiSelectionActivity.class);
|
||||
intent.putExtra(ContactSelectionListFragment.SELECT_VERIFIED_EXTRA, dcChat.isProtected());
|
||||
ArrayList<String> preselectedContacts = new ArrayList<>();
|
||||
int[] memberIds = dcContext.getChatContacts(chatId);
|
||||
for (int memberId : memberIds) {
|
||||
preselectedContacts.add(dcContext.getContact(memberId).getAddr());
|
||||
ArrayList<Integer> preselectedContacts = new ArrayList<>();
|
||||
for (int memberId : dcContext.getChatContacts(chatId)) {
|
||||
preselectedContacts.add(memberId);
|
||||
}
|
||||
intent.putExtra(ContactSelectionListFragment.PRESELECTED_CONTACTS, preselectedContacts);
|
||||
startActivityForResult(intent, REQUEST_CODE_PICK_CONTACT);
|
||||
@@ -227,8 +224,8 @@ public class ProfileSettingsFragment extends Fragment
|
||||
public void onSharedChatClicked(int chatId) {
|
||||
Intent intent = new Intent(getContext(), ConversationActivity.class);
|
||||
intent.putExtra(ConversationActivity.CHAT_ID_EXTRA, chatId);
|
||||
getContext().startActivity(intent);
|
||||
getActivity().finish();
|
||||
requireContext().startActivity(intent);
|
||||
requireActivity().finish();
|
||||
}
|
||||
|
||||
private void onVerifiedByClicked() {
|
||||
@@ -247,8 +244,8 @@ public class ProfileSettingsFragment extends Fragment
|
||||
if (chatId != 0) {
|
||||
Intent intent = new Intent(getActivity(), ConversationActivity.class);
|
||||
intent.putExtra(ConversationActivity.CHAT_ID_EXTRA, chatId);
|
||||
getActivity().startActivity(intent);
|
||||
getActivity().finish();
|
||||
requireActivity().startActivity(intent);
|
||||
requireActivity().finish();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,7 +265,7 @@ public class ProfileSettingsFragment extends Fragment
|
||||
menu.findItem(R.id.menu_select_all).setVisible(false);
|
||||
mode.setTitle("1");
|
||||
|
||||
Window window = getActivity().getWindow();
|
||||
Window window = requireActivity().getWindow();
|
||||
originalStatusBarColor = window.getStatusBarColor();
|
||||
window.setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar));
|
||||
return true;
|
||||
@@ -281,29 +278,28 @@ public class ProfileSettingsFragment extends Fragment
|
||||
|
||||
@Override
|
||||
public boolean onActionItemClicked(ActionMode mode, MenuItem menuItem) {
|
||||
switch (menuItem.getItemId()) {
|
||||
case R.id.delete:
|
||||
final Collection<Integer> toDelIds = adapter.getSelectedMembers();
|
||||
StringBuilder readableToDelList = new StringBuilder();
|
||||
for (Integer toDelId : toDelIds) {
|
||||
if(readableToDelList.length()>0) {
|
||||
readableToDelList.append(", ");
|
||||
}
|
||||
readableToDelList.append(dcContext.getContact(toDelId).getDisplayName());
|
||||
if (menuItem.getItemId() == R.id.delete) {
|
||||
final Collection<Integer> toDelIds = adapter.getSelectedMembers();
|
||||
StringBuilder readableToDelList = new StringBuilder();
|
||||
for (Integer toDelId : toDelIds) {
|
||||
if (readableToDelList.length() > 0) {
|
||||
readableToDelList.append(", ");
|
||||
}
|
||||
DcChat dcChat = dcContext.getChat(chatId);
|
||||
AlertDialog dialog = new AlertDialog.Builder(getContext())
|
||||
.setPositiveButton(R.string.remove_desktop, (d, which) -> {
|
||||
for (Integer toDelId : toDelIds) {
|
||||
dcContext.removeContactFromChat(chatId, toDelId);
|
||||
}
|
||||
mode.finish();
|
||||
})
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setMessage(getString(dcChat.isBroadcast()? R.string.ask_remove_from_broadcast : R.string.ask_remove_members, readableToDelList))
|
||||
.show();
|
||||
Util.redPositiveButton(dialog);
|
||||
return true;
|
||||
readableToDelList.append(dcContext.getContact(toDelId).getDisplayName());
|
||||
}
|
||||
DcChat dcChat = dcContext.getChat(chatId);
|
||||
AlertDialog dialog = new AlertDialog.Builder(requireContext())
|
||||
.setPositiveButton(R.string.remove_desktop, (d, which) -> {
|
||||
for (Integer toDelId : toDelIds) {
|
||||
dcContext.removeContactFromChat(chatId, toDelId);
|
||||
}
|
||||
mode.finish();
|
||||
})
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setMessage(getString(dcChat.isBroadcast() ? R.string.ask_remove_from_broadcast : R.string.ask_remove_members, readableToDelList))
|
||||
.show();
|
||||
Util.redPositiveButton(dialog);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -312,7 +308,7 @@ public class ProfileSettingsFragment extends Fragment
|
||||
public void onDestroyActionMode(ActionMode mode) {
|
||||
actionMode = null;
|
||||
adapter.clearSelection();
|
||||
getActivity().getWindow().setStatusBarColor(originalStatusBarColor);
|
||||
requireActivity().getWindow().setStatusBarColor(originalStatusBarColor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -320,13 +316,15 @@ public class ProfileSettingsFragment extends Fragment
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode==REQUEST_CODE_PICK_CONTACT && resultCode==Activity.RESULT_OK && data!=null) {
|
||||
List<String> selected = data.getStringArrayListExtra("contacts");
|
||||
for (String addr : selected) {
|
||||
if (addr!=null) {
|
||||
int toAddId = dcContext.createContact(null, addr);
|
||||
dcContext.addContactToChat(chatId, toAddId);
|
||||
List<Integer> selected = data.getIntegerArrayListExtra(ContactMultiSelectionActivity.CONTACTS_EXTRA);
|
||||
if(selected == null) return;
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
for (Integer contactId : selected) {
|
||||
if (contactId!=null) {
|
||||
dcContext.addContactToChat(chatId, contactId);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,9 +31,8 @@ public class ProfileSettingsItem extends LinearLayout {
|
||||
labelView.setText(label==null? "" : label);
|
||||
labelView.setCompoundDrawablesWithIntrinsicBounds(iconLeft, 0,0,0);
|
||||
|
||||
// we need different color getters as `labelColor` is `R.color.name` while default is `R.attr.name`
|
||||
if (labelColor != 0) {
|
||||
labelView.setTextColor(ContextCompat.getColor(getContext(), labelColor));
|
||||
labelView.setTextColor(labelColor);
|
||||
} else {
|
||||
labelView.setTextColor(ResUtil.getColor(getContext(), R.attr.emoji_text_color));
|
||||
}
|
||||
|
||||
@@ -6,17 +6,16 @@ import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_MAIL_PORT;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_MAIL_SECURITY;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_MAIL_SERVER;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_MAIL_USER;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_PASSWORD;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_PORT;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_SECURITY;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_SERVER;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_USER;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SERVER_FLAGS;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.getContext;
|
||||
import static org.thoughtcrime.securesms.service.IPCAddAccountsService.ACCOUNT_DATA;
|
||||
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
@@ -47,6 +46,9 @@ import androidx.constraintlayout.widget.Group;
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcEvent;
|
||||
import com.b44t.messenger.DcProvider;
|
||||
import com.b44t.messenger.rpc.EnteredLoginParam;
|
||||
import com.b44t.messenger.rpc.Rpc;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
import com.b44t.messenger.util.concurrent.ListenableFuture;
|
||||
import com.b44t.messenger.util.concurrent.SettableFuture;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
@@ -62,7 +64,6 @@ import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.views.ProgressDialog;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class RegistrationActivity extends BaseActionBarActivity implements DcEventCenter.DcEventDelegate {
|
||||
@@ -281,19 +282,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
|
||||
int id = item.getItemId();
|
||||
|
||||
if (id == R.id.do_register) {
|
||||
String oldAddr = DcHelper.getSelfAddr(this);
|
||||
String newAddr = emailInput.getText().toString();
|
||||
if (!TextUtils.isEmpty(oldAddr)
|
||||
&& !TextUtils.equals(oldAddr.toLowerCase(Locale.ROOT), newAddr.toLowerCase(Locale.ROOT))) {
|
||||
// Tell the user about AEAP if they are about to change their address
|
||||
new AlertDialog.Builder(this)
|
||||
.setMessage(getString(R.string.aeap_explanation, oldAddr, newAddr))
|
||||
.setNegativeButton(R.string.cancel, (d, w) -> {})
|
||||
.setPositiveButton(R.string.perm_continue, (d, w) -> do_register())
|
||||
.show();
|
||||
} else {
|
||||
do_register();
|
||||
}
|
||||
do_register();
|
||||
return true;
|
||||
} else if (id == android.R.id.home) {
|
||||
// handle close button click here
|
||||
@@ -438,7 +427,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
|
||||
.setPositiveButton(R.string.perm_continue, (dialog, which)-> {
|
||||
// pass control to browser, we'll be back in business at (**)
|
||||
activity.oauth2Requested = System.currentTimeMillis();
|
||||
IntentUtils.showBrowserIntent(activity, oauth2url);
|
||||
IntentUtils.showInBrowser(activity, oauth2url);
|
||||
oauth2started.set(true);
|
||||
})
|
||||
.setCancelable(false)
|
||||
@@ -493,11 +482,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
|
||||
if (provider!=null) {
|
||||
String url = provider.getOverviewPage();
|
||||
if(!url.isEmpty()) {
|
||||
try {
|
||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(this, R.string.no_browser_installed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
IntentUtils.showInBrowser(this, url);
|
||||
} else {
|
||||
// this should normally not happen
|
||||
Toast.makeText(this, "ErrProviderWithoutUrl", Toast.LENGTH_LONG).show();
|
||||
@@ -599,40 +584,50 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
|
||||
}
|
||||
|
||||
private void setupConfig() {
|
||||
setConfig(R.id.email_text, CONFIG_ADDRESS, true);
|
||||
setConfig(R.id.password_text, CONFIG_MAIL_PASSWORD, false);
|
||||
setConfig(R.id.imap_server_text, CONFIG_MAIL_SERVER, true);
|
||||
setConfig(R.id.imap_port_text, CONFIG_MAIL_PORT, true);
|
||||
setConfig(R.id.imap_login_text, CONFIG_MAIL_USER, false);
|
||||
setConfig(R.id.smtp_server_text, CONFIG_SEND_SERVER, true);
|
||||
setConfig(R.id.smtp_port_text, CONFIG_SEND_PORT, true);
|
||||
setConfig(R.id.smtp_login_text, CONFIG_SEND_USER, false);
|
||||
setConfig(R.id.smtp_password_text, CONFIG_SEND_PASSWORD, false);
|
||||
|
||||
DcHelper.getContext(this).setConfigInt(CONFIG_MAIL_SECURITY, imapSecurity.getSelectedItemPosition());
|
||||
DcHelper.getContext(this).setConfigInt(CONFIG_SEND_SECURITY, smtpSecurity.getSelectedItemPosition());
|
||||
|
||||
int server_flags = 0;
|
||||
if(authMethod.getSelectedItemPosition()==1) server_flags |= DcContext.DC_LP_AUTH_OAUTH2;
|
||||
DcHelper.getContext(this).setConfigInt(CONFIG_SERVER_FLAGS, server_flags);
|
||||
|
||||
DcHelper.getContext(this).setConfigInt("smtp_certificate_checks", certCheck.getSelectedItemPosition());
|
||||
DcHelper.getContext(this).setConfigInt("imap_certificate_checks", certCheck.getSelectedItemPosition());
|
||||
|
||||
// calling configure() results in
|
||||
// receiving multiple DC_EVENT_CONFIGURE_PROGRESS events
|
||||
DcHelper.getAccounts(this).stopIo();
|
||||
DcHelper.getEventCenter(this).captureNextError();
|
||||
DcHelper.getContext(this).configure();
|
||||
|
||||
EnteredLoginParam param = new EnteredLoginParam(
|
||||
getParam(R.id.email_text, true),
|
||||
getParam(R.id.password_text, false),
|
||||
getParam(R.id.imap_server_text, true),
|
||||
Util.objectToInt(getParam(R.id.imap_port_text, true)),
|
||||
EnteredLoginParam.socketSecurityFromInt(imapSecurity.getSelectedItemPosition()),
|
||||
getParam(R.id.imap_login_text, false),
|
||||
getParam(R.id.smtp_server_text, true),
|
||||
Util.objectToInt(getParam(R.id.smtp_port_text, true)),
|
||||
EnteredLoginParam.socketSecurityFromInt(smtpSecurity.getSelectedItemPosition()),
|
||||
getParam(R.id.smtp_login_text, false),
|
||||
getParam(R.id.smtp_password_text, false),
|
||||
EnteredLoginParam.certificateChecksFromInt(certCheck.getSelectedItemPosition()),
|
||||
authMethod.getSelectedItemPosition() == 1
|
||||
);
|
||||
|
||||
new Thread(() -> {
|
||||
Rpc rpc = DcHelper.getRpc(this);
|
||||
try {
|
||||
rpc.addTransport(DcHelper.getContext(this).getAccountId(), param);
|
||||
DcHelper.getEventCenter(this).endCaptureNextError();
|
||||
progressDialog.dismiss();
|
||||
Intent conversationList = new Intent(getApplicationContext(), ConversationListActivity.class);
|
||||
startActivity(conversationList);
|
||||
finish();
|
||||
} catch (RpcException e) {
|
||||
Util.runOnMain(() -> {
|
||||
DcHelper.getEventCenter(this).endCaptureNextError();
|
||||
progressDialog.dismiss();
|
||||
WelcomeActivity.maybeShowConfigurationError(this, e.getMessage());
|
||||
});
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void setConfig(@IdRes int viewId, String configTarget, boolean doTrim) {
|
||||
private String getParam(@IdRes int viewId, boolean doTrim) {
|
||||
TextInputEditText view = findViewById(viewId);
|
||||
String value = view.getText().toString();
|
||||
if(doTrim) {
|
||||
value = value.trim();
|
||||
}
|
||||
DcHelper.getContext(this).setConfig(configTarget, value.isEmpty()? null : value);
|
||||
return value.isEmpty()? null : value;
|
||||
}
|
||||
|
||||
private void stopLoginProcess() {
|
||||
@@ -642,25 +637,9 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
|
||||
@Override
|
||||
public void handleEvent(@NonNull DcEvent event) {
|
||||
if (event.getId()==DcContext.DC_EVENT_CONFIGURE_PROGRESS) {
|
||||
long progress = event.getData1Int();
|
||||
if (progress==0/*error/aborted*/) {
|
||||
DcHelper.getAccounts(this).startIo(); // start-io is also needed on errors to make previous config work in case of changes
|
||||
DcHelper.getEventCenter(this).endCaptureNextError();
|
||||
progressDialog.dismiss();
|
||||
WelcomeActivity.maybeShowConfigurationError(this, event.getData2Str());
|
||||
}
|
||||
else if (progress<1000/*progress in permille*/) {
|
||||
int percent = (int)progress / 10;
|
||||
progressDialog.setMessage(getResources().getString(R.string.one_moment)+String.format(" %d%%", percent));
|
||||
}
|
||||
else if (progress==1000/*done*/) {
|
||||
DcHelper.getAccounts(this).startIo();
|
||||
DcHelper.getEventCenter(this).endCaptureNextError();
|
||||
progressDialog.dismiss();
|
||||
Intent conversationList = new Intent(getApplicationContext(), ConversationListActivity.class);
|
||||
startActivity(conversationList);
|
||||
finish();
|
||||
}
|
||||
long progress = event.getData1Int(); // progress in permille
|
||||
int percent = (int)progress / 10;
|
||||
progressDialog.setMessage(getResources().getString(R.string.one_moment)+String.format(" %d%%", percent));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import static org.thoughtcrime.securesms.util.MediaUtil.getMimeType;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
@@ -14,8 +16,6 @@ import java.io.InputStream;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.HashSet;
|
||||
|
||||
import static org.thoughtcrime.securesms.util.MediaUtil.getMimeType;
|
||||
|
||||
import de.cketti.safecontentresolver.SafeContentResolver;
|
||||
|
||||
public class ResolveMediaTask extends AsyncTask<Uri, Void, Uri> {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user