Compare commits
895 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 10ffdc2f2b | |||
| fb4744bb88 | |||
| 49c1392641 | |||
| dd7a67a909 | |||
| 561e6ca1be | |||
| 3b6422d50a | |||
| 8b40477a0d | |||
| 6cc93027a8 | |||
| 7eaeb9f603 | |||
| 68ba826def | |||
| d5d6eef0a7 | |||
| afd8431220 | |||
| e87fff7c0c | |||
| bf040dfe62 | |||
| c4a9d8f6e2 | |||
| 6a1181de5e | |||
| ee9c92f555 | |||
| c4e3f98266 | |||
| 5a644af56f | |||
| 2ef1ad1eb2 | |||
| 86d5226bf9 | |||
| 54fb81dc7f | |||
| 431b72cae6 | |||
| 929784978c | |||
| dcfe4c3e5b | |||
| 7326677be0 | |||
| 85eb7eb896 | |||
| 2cf2505524 | |||
| 4b2ef6b407 | |||
| 310f76a7a4 | |||
| c558853bad | |||
| f5cc75723a | |||
| e62d5d9537 | |||
| 5d6b26e2a2 | |||
| 3ad1d920ff | |||
| 620e1e3757 | |||
| a949e24d5e | |||
| e7405b59f7 | |||
| a8d5f17058 | |||
| a164c8f44c | |||
| f11d96a50d | |||
| a75e7506aa | |||
| ea93f1b1c2 | |||
| 792a2a4997 | |||
| ba7f7b42ff | |||
| 4904757868 | |||
| 6da6028409 | |||
| 0370dbe2d7 | |||
| 2942ff1aad | |||
| 58e0a6a9fc | |||
| 87c53bae1b | |||
| 2b44505485 | |||
| aee7befa85 | |||
| 9c43f8ef5d | |||
| 085959a6c4 | |||
| 5e2e6c644e | |||
| b20878d2bc | |||
| 1de13e0834 | |||
| c153f97b17 | |||
| 11bfd53cf8 | |||
| 42cf825e98 | |||
| 2781636d3d | |||
| 7c9d2df76a | |||
| 2feecdeb7f | |||
| 1142117bef | |||
| 17845bce7f | |||
| 0961cffaac | |||
| 6742895fec | |||
| 2aea46660c | |||
| 8192e35c41 | |||
| 232868636f | |||
| c934b2c177 | |||
| 8f23935f77 | |||
| ecc9522b92 | |||
| e2a2786e3e | |||
| 8cd2f8f1b4 | |||
| d96e87c1ef | |||
| c5a9984ccd | |||
| 868994ba10 | |||
| 6b327e690b | |||
| f78293a3ae | |||
| 22c4d063c4 | |||
| af4aee1d54 | |||
| 4a184de91e | |||
| 31e3a9c1d0 | |||
| 3ef7c73511 | |||
| f950a8e3b6 | |||
| 46fc0226c4 | |||
| 4efde95974 | |||
| 3ce7872e02 | |||
| 96a5971f3d | |||
| ee6b90c990 | |||
| 11cff9be6e | |||
| 92dbd3e2e5 | |||
| 20c0d34d25 | |||
| 39ab44fb55 | |||
| fe7e5b1bd3 | |||
| 631fa8a1d8 | |||
| ea0e45cead | |||
| 8abc5bd50e | |||
| a228b7c128 | |||
| 9911e9c0fc | |||
| cbf5405ee0 | |||
| 0343b9a732 | |||
| 28b2541c92 | |||
| 500ef4e6d2 | |||
| 691c8756fc | |||
| f238344d0b | |||
| cb6ef5193f | |||
| afaffa8880 | |||
| edecccd163 | |||
| 915ac6b8af | |||
| 1826f23264 | |||
| 24fcd640b7 | |||
| 0e38fbe021 | |||
| 4707efb26a | |||
| 85cba6cb49 | |||
| efed65c8f4 | |||
| 163cd51aec | |||
| 41031f428c | |||
| c3cd6337af | |||
| b5b9073d2c | |||
| c39140442b | |||
| d81cd18d57 | |||
| 880f0c20e4 | |||
| 2d37c82cbe | |||
| c1ff85cc10 | |||
| 0604f797d0 | |||
| 3eb5ddf961 | |||
| c7ed32852d | |||
| e48d0f4029 | |||
| 979d2c663d | |||
| 16a57df9d6 | |||
| 6f0a7d0254 | |||
| 819895e2f1 | |||
| 470448dd2d | |||
| f22247dc70 | |||
| f141dba12d | |||
| b5f94deb81 | |||
| 39c7103cf6 | |||
| 97c47153ec | |||
| 1b43a3fe3f | |||
| 37974f2ce8 | |||
| f57b72d072 | |||
| dfd8d67480 | |||
| 06525bcaf6 | |||
| f68853e7ec | |||
| d41323e69e | |||
| 869fb5c16b | |||
| 58c59146bd | |||
| b0aff19ae0 | |||
| 089554e098 | |||
| a41116472f | |||
| 75eaa54481 | |||
| b4630845c5 | |||
| 3c3a67ea0a | |||
| 4a9cfcd5b0 | |||
| 5f08c555c4 | |||
| a39d0c3250 | |||
| 6b7283bcba | |||
| 7f702825f6 | |||
| 1ea0ba0097 | |||
| d88cae015d | |||
| 3fe0adfb8d | |||
| b679766581 | |||
| 4d2211e0d4 | |||
| 0b28d24e0a | |||
| fc9971fa15 | |||
| f596b3beb4 | |||
| 7897b39206 | |||
| 2ee94c9ba4 | |||
| cb5b12d5a8 | |||
| 2c46d6e052 | |||
| c34d28d230 | |||
| 60c8313816 | |||
| 915076a277 | |||
| 3356b98059 | |||
| 12dca831a2 | |||
| c279ecefd1 | |||
| 43f82c28fd | |||
| b811b5d313 | |||
| 00c02f49b2 | |||
| c90d1ccec2 | |||
| 535b47b98c | |||
| acff990289 | |||
| 17b7b7da9a | |||
| 5d47838aff | |||
| 924ad365a0 | |||
| 0a71e21a55 | |||
| 325d8acbf6 | |||
| e0202ebfd7 | |||
| f29cb1d27b | |||
| 7d80926069 | |||
| 77431b6dd2 | |||
| 3f73551f54 | |||
| 959e007e39 | |||
| 5370d35f44 | |||
| d50718f95b | |||
| 39a651278e | |||
| 77358c5636 | |||
| ea3da82e2c | |||
| 7edba7afe6 | |||
| 7c378bcb66 | |||
| 462390636f | |||
| 03cde21eb9 | |||
| a553b33783 | |||
| 8f7d44ccd5 | |||
| 91620a6f0d | |||
| 55973ef857 | |||
| 48b3f26ec8 | |||
| 276ed3de7c | |||
| 63366eecf3 | |||
| ec2adce39e | |||
| 65655a6138 | |||
| 3eb6a56e5b | |||
| fb2ce839a9 | |||
| 2ace2a5bdf | |||
| 5e73a679b6 | |||
| b5a9e910b0 | |||
| d6a94fd544 | |||
| 0c5e1b95f5 | |||
| 2b67413b62 | |||
| 60aab2998a | |||
| 47b87ac203 | |||
| 37bbc41639 | |||
| e39c569aa1 | |||
| 0913fc2f1b | |||
| 6fa0598169 | |||
| fdcf2786a8 | |||
| 450966cce6 | |||
| f2f04e214b | |||
| 44219ca6f2 | |||
| 81732320cc | |||
| 1f332f2b8c | |||
| 6bab6db32c | |||
| 6d76fabe91 | |||
| 9843debd21 | |||
| 9268b38d47 | |||
| 0cb23b3dc5 | |||
| 998e903e0d | |||
| 70613cc8e1 | |||
| 8fede3312a | |||
| 5f9646a028 | |||
| be8a718b3f | |||
| 3e28cbed05 | |||
| 964ab18730 | |||
| 71d6972d0f | |||
| b0534c44f6 | |||
| ea6144d963 | |||
| de4fa329e6 | |||
| c52a5c87bf | |||
| 1e4c2996b2 | |||
| c08bc7ccfe | |||
| ee8480787c | |||
| 59716c2909 | |||
| 88f267f748 | |||
| 98f4600df3 | |||
| 0794bc1ac9 | |||
| 8b8e383db8 | |||
| 0106c4ebcc | |||
| 8b35cf1023 | |||
| a8e5e51ab9 | |||
| 726d59c162 | |||
| ecae4a14bb | |||
| 1b6b2ec955 | |||
| ab5363bab6 | |||
| 829eca72ec | |||
| 867e2aa5d2 | |||
| c920ef5329 | |||
| 6be0c34ec4 | |||
| c6d76cdf46 | |||
| 0758977961 | |||
| 867362ac4f | |||
| 6a3887cbda | |||
| 770cebb255 | |||
| 9d0493a1ff | |||
| ebc1b0a8e6 | |||
| 24773f7613 | |||
| 92ff795aba | |||
| 72a2418903 | |||
| 4e461e1169 | |||
| 30c1e88a64 | |||
| d5fa605796 | |||
| a4d9cb8d88 | |||
| 76daa92441 | |||
| f3fa39016d | |||
| 14addb3984 | |||
| 00d4749826 | |||
| 682b1101a5 | |||
| 9622270923 | |||
| 5a94ee4e22 | |||
| 6080563916 | |||
| 458cc8825b | |||
| a91eea93ab | |||
| 103e6efdbd | |||
| 446b1b6c64 | |||
| 8df079eaf8 | |||
| d649f74a6e | |||
| 60fde960ce | |||
| 64a4d03a6c | |||
| 33cef9d9b9 | |||
| 5f9c626b14 | |||
| b6fd0b86bf | |||
| 63c9b00f51 | |||
| eddee76ee2 | |||
| f51bb4dde5 | |||
| e8e54853f3 | |||
| 57837f736b | |||
| 83f86b8edf | |||
| b8a1646823 | |||
| be6a556b87 | |||
| daa5fde02a | |||
| a7978430d1 | |||
| 5b8c2ffb95 | |||
| 9bc231a1db | |||
| ad696464c1 | |||
| bb4b72eab1 | |||
| 1fa18be37d | |||
| caf9090594 | |||
| db85e9479c | |||
| 8731346326 | |||
| 40bab74eb5 | |||
| f1c9e49f1f | |||
| c08116e133 | |||
| 1d1e57d9ca | |||
| 36b501e01a | |||
| 8f07d86087 | |||
| 40bfa15dea | |||
| a5ccd9da79 | |||
| f146c1c966 | |||
| e522ae74ab | |||
| b8c547f2f1 | |||
| 862a03b3a0 | |||
| 728f909db9 | |||
| 0d6a225991 | |||
| 1110b80184 | |||
| 624f98b817 | |||
| 9ed573f5f8 | |||
| 2104cae3a1 | |||
| 5ea8216e78 | |||
| e742db722c | |||
| 3456cafb38 | |||
| fc29c2902f | |||
| f7cd7860a0 | |||
| f564c9f2fc | |||
| 77c98a18cd | |||
| 503952a915 | |||
| 8456051d2f | |||
| 3324acd590 | |||
| e501b86472 | |||
| 21be2fd69c | |||
| 613afa2597 | |||
| 5e738ef248 | |||
| 478330d7e9 | |||
| 742a1203df | |||
| 19da5cde8a | |||
| 52c9f8dd33 | |||
| 7797f9b8a6 | |||
| 195437d8d2 | |||
| 19e1b4bba9 | |||
| 805a66ea2e | |||
| ecb4c0ca33 | |||
| fa5a714a1a | |||
| e0e907e537 | |||
| 72fc8b7b63 | |||
| 1afbc3ecf1 | |||
| 30d5cd3c81 | |||
| 56468347a7 | |||
| 08d00ccf62 | |||
| 40e5efddbc | |||
| 0b970709f4 | |||
| 7c5f90d572 | |||
| cd5aa0b9c1 | |||
| 376208f9a6 | |||
| 9a78bfe878 | |||
| 16a8b21eec | |||
| 544f19315b | |||
| 97e83ff7af | |||
| c8e19d44f2 | |||
| 15a2951b20 | |||
| c9fc1c506f | |||
| 46ac343181 | |||
| 4866b5ea40 | |||
| 4d6892b991 | |||
| d501f17525 | |||
| 122693d14c | |||
| 45db3b84fb | |||
| c207e161b5 | |||
| 21b875df96 | |||
| 35c7fc44b1 | |||
| 7a9d2b8e53 | |||
| ba5c190072 | |||
| de28157ebb | |||
| ee5858506b | |||
| 9b6d79ec07 | |||
| 3fc848e5d4 | |||
| 39b144b40c | |||
| 08659f0450 | |||
| 58d599d236 | |||
| ca50dda682 | |||
| 5e85045d49 | |||
| d5ecebf304 | |||
| 5711b52de6 | |||
| 83f2513a39 | |||
| decdba5e67 | |||
| 1d0ce7ddec | |||
| b9bcf28955 | |||
| ae97adc582 | |||
| 8d0772362f | |||
| ea20bf20c6 | |||
| 2be7b9bb15 | |||
| 8456f807d5 | |||
| 6c24f9fc97 | |||
| 44075917b7 | |||
| 9c4f670fa9 | |||
| b33b7c0c8a | |||
| 8aeeb5b3fd | |||
| 15f37c8531 | |||
| a421d148f3 | |||
| 3dd9a247dd | |||
| 135bc1c96c | |||
| d53ec6add8 | |||
| 2941d6926b | |||
| f0d27b0a9f | |||
| 4e031e260c | |||
| a6b35b2a87 | |||
| 37cf7e5a91 | |||
| 5f3fadf606 | |||
| 822bc6d6ae | |||
| 4be731ac7b | |||
| 79952e4ffa | |||
| 04be5a4812 | |||
| b40b6a751a | |||
| 137e19639a | |||
| a33e1d6372 | |||
| b2b4a618f9 | |||
| a8b400f6a2 | |||
| 1e5869bc35 | |||
| c10a26dca0 | |||
| b47934d874 | |||
| e1afe1bbbe | |||
| 2d961112b1 | |||
| 5afb3ecb5f | |||
| d14bd45e36 | |||
| b2a70dbbda | |||
| c5bf2cd00d | |||
| a5ee105c00 | |||
| 59744875ad | |||
| e98b4236f0 | |||
| 36492f70a0 | |||
| 8a2822c7ab | |||
| 7e4c38a057 | |||
| 04fd5cbf4d | |||
| 94c1148ada | |||
| 2958cecd18 | |||
| 3b1f389797 | |||
| 1d483f78bf | |||
| 6afcf1b4bb | |||
| 35ea8933d6 | |||
| 2c46940d12 | |||
| 446055bfe9 | |||
| 9e49d1ddf5 | |||
| efd92dde8a | |||
| d156c7652a | |||
| 636d69f07f | |||
| 8706879bc8 | |||
| af080a6328 | |||
| fe573f51d6 | |||
| 6f6efc7a5a | |||
| 0954705964 | |||
| 0b9cfac05e | |||
| d2351e8675 | |||
| 590d7852b0 | |||
| 9dfd2c05a7 | |||
| c907bc008f | |||
| 7e7a5560ef | |||
| 170b0d86c3 | |||
| 85253fd051 | |||
| 0529c85033 | |||
| c067c2b700 | |||
| b0d7421458 | |||
| 8211d494da | |||
| 1e1ad2a20a | |||
| 600828e1f6 | |||
| 91be337fb6 | |||
| 729a05ba51 | |||
| bae2ffc3e1 | |||
| 70ec08c5fb | |||
| 896a511473 | |||
| f795ea28e2 | |||
| 10a8cadb0f | |||
| edee850d8d | |||
| 3db7466bd8 | |||
| d979c02e45 | |||
| 47d88e6372 | |||
| 00791843a9 | |||
| 1707a1d61b | |||
| c534cc35e2 | |||
| 258e885186 | |||
| 1dfc392a2c | |||
| 87241bf620 | |||
| e3b15d9dbf | |||
| 0244d9c57f | |||
| b304e9b1bd | |||
| fa35dfca66 | |||
| 63aff154fc | |||
| a8ee346d33 | |||
| 850b535ff3 | |||
| aac62627f4 | |||
| 4b0816a083 | |||
| bb83c038a5 | |||
| c785da3484 | |||
| d7322f99d4 | |||
| e593890317 | |||
| fb5e1b633a | |||
| 1031826382 | |||
| 13760a0ade | |||
| 25c50c13b7 | |||
| d53099eaa7 | |||
| ec6fb9ac16 | |||
| abad685f22 | |||
| ef02f5a667 | |||
| 77889ac2d6 | |||
| 2edbc38190 | |||
| ceec16c9d5 | |||
| b4a365b880 | |||
| 9e1b731dc9 | |||
| b6fa7d0c6b | |||
| 779457aa65 | |||
| 9bb8009e14 | |||
| 49f3c0de99 | |||
| f105ec4861 | |||
| 17900f1bf4 | |||
| 1c5e8445c9 | |||
| 05a497e558 | |||
| 0ac0d399a0 | |||
| 153214cfe9 | |||
| 5c8db78657 | |||
| d30f9d1540 | |||
| 127a1c0023 | |||
| 684028d126 | |||
| 1dabac1b21 | |||
| df19ecb029 | |||
| 136b6ac483 | |||
| 31c9f720b1 | |||
| 049918f491 | |||
| 54268ef699 | |||
| 84689b6740 | |||
| 5c4329b104 | |||
| ed3e804016 | |||
| 940720ef6b | |||
| d631bab275 | |||
| ddfd1eb006 | |||
| 6e7cd9f317 | |||
| abc8ca41a2 | |||
| 348f87b6a8 | |||
| b31a623822 | |||
| 426de7f0cd | |||
| 43e2d1015e | |||
| dde56cb4d2 | |||
| 7aad188885 | |||
| 89c0d3cd06 | |||
| 06d61b44b2 | |||
| 7dd0d0a75a | |||
| d39dfd01e0 | |||
| 9537389e4e | |||
| 4e5e81d0e7 | |||
| 719f8d8047 | |||
| 4906d62e7e | |||
| 644fc96198 | |||
| f3af49ce24 | |||
| dcc6467291 | |||
| da1844fb6f | |||
| 197bdefa63 | |||
| e250bb1460 | |||
| 143963c2a9 | |||
| 3e79719ac4 | |||
| 9ff2e8839d | |||
| c1850588ef | |||
| f61f1f153b | |||
| a63cd2746b | |||
| 096d9ca801 | |||
| 77d7c8e3b7 | |||
| 34597a086e | |||
| d2e6d843ab | |||
| 8ddf6cba65 | |||
| a672aa02dd | |||
| fc736cf612 | |||
| 58dc5b3881 | |||
| 510c320f79 | |||
| dabc0760ee | |||
| 5d01ac1c63 | |||
| 27c6c3ab69 | |||
| e8e100a72e | |||
| 746ec37d97 | |||
| 750f5ea03f | |||
| ef88256411 | |||
| 2c825d4659 | |||
| 1dce4fed21 | |||
| ea7e89a290 | |||
| 555ff6469d | |||
| 4339d80750 | |||
| ea64b69437 | |||
| b11b631426 | |||
| 6df76f54e2 | |||
| 04e9dc0aec | |||
| b2b9042fe0 | |||
| 90527b2373 | |||
| 7ac37246bf | |||
| 4e7e377704 | |||
| d14e59afae | |||
| 5dfc44b1dc | |||
| dfaed72262 | |||
| ee8ba0a5a5 | |||
| 828dfd24a1 | |||
| 502bed2f72 | |||
| 0d2a895057 | |||
| 9635135e90 | |||
| 2184d898f6 | |||
| b780a9e783 | |||
| 9fd74e71f0 | |||
| 8236fdbce5 | |||
| 25b6f2d477 | |||
| fd9911c441 | |||
| 1d861274e2 | |||
| 89824df0b9 | |||
| 7b09020afd | |||
| 855e3c5c3e | |||
| bd7cbf89f0 | |||
| 26976aa541 | |||
| 9dad64ae57 | |||
| bd2f763f22 | |||
| 181bb77c67 | |||
| 535d61e64c | |||
| 694ddebf57 | |||
| efdf608484 | |||
| ed9ca3cbb4 | |||
| 42556e5e32 | |||
| 63217c943f | |||
| 28ace84c32 | |||
| 8fa32cc4f7 | |||
| 4582b76e92 | |||
| 66ea30f75e | |||
| 87192dca99 | |||
| 35e449b048 | |||
| 90775da352 | |||
| 3a7686471a | |||
| 13765df3ee | |||
| f01b67c07b | |||
| 756f36101f | |||
| b46bc99aad | |||
| d593096d92 | |||
| 354fea7da2 | |||
| 9f6a26713c | |||
| fe89841407 | |||
| 698763c544 | |||
| 8f540d01fa | |||
| 4d12385cb7 | |||
| 7962e880ef | |||
| d752a111fc | |||
| 5e8c20e30f | |||
| a70b1be603 | |||
| 3bde0cbe78 | |||
| 6544b221fd | |||
| 40675fa774 | |||
| 60d79021bf | |||
| 7cda8c0101 | |||
| 7bafff0ba7 | |||
| 5529acf36b | |||
| 0f6d5e3dcd | |||
| 71f4a55a0d | |||
| 75dc1e1527 | |||
| e663df903e | |||
| f1513f7e47 | |||
| fd36ceb847 | |||
| 6fde63f0b2 | |||
| ed6fabe99f | |||
| 1876e56e23 | |||
| 3122759c91 | |||
| 19f5a54ad2 | |||
| 1c6b7fe58f | |||
| 880421fd6f | |||
| a73a7b28de | |||
| bd8217196f | |||
| 54140476bf | |||
| 78fa449e99 | |||
| a7f26560fe | |||
| fb14484944 | |||
| ed30a16cc3 | |||
| 3136245693 | |||
| 98e42e6208 | |||
| d7e29abce6 | |||
| fbefdcf127 | |||
| a26f48f4f3 | |||
| 96d2a69fdb | |||
| 10ec1cad26 | |||
| ad0da65727 | |||
| a4c0f62005 | |||
| 8c1fbc0ae9 | |||
| 3b193c35d9 | |||
| aab44755aa | |||
| 582b5d035b | |||
| 4458577927 | |||
| cdf2aad98e | |||
| 6bc11ed1c0 | |||
| c09333d5d6 | |||
| b9c43c7b6a | |||
| 0401b2a0d9 | |||
| 2ceb5e11bf | |||
| 3d9345ed87 | |||
| 5af3284e06 | |||
| bc987a4591 | |||
| f3366681d0 | |||
| 0ad2916bcf | |||
| e4c564ace4 | |||
| e90ab537d3 | |||
| defac037de | |||
| 33f07b584b | |||
| 6efbd89674 | |||
| c7e37d153d | |||
| 2021979d8e | |||
| 5b8383dac3 | |||
| 0b05b954f7 | |||
| 0376acb5ae | |||
| 17dc8cebca | |||
| 33747e7a41 | |||
| 99b1703097 | |||
| a14547ce42 | |||
| d682084542 | |||
| 9813f01da8 | |||
| 27cfc39786 | |||
| 86914bf4fc | |||
| 1f9bd90eae | |||
| 9edbc23207 | |||
| e425533d68 | |||
| 451f03a6a8 | |||
| 1c76562fc6 | |||
| 94592d46ae | |||
| a02dde5d51 | |||
| 73359fba7d | |||
| f65ac4d604 | |||
| a469713fbc | |||
| c781f3b9a4 | |||
| 87e1937381 | |||
| cf45c566ba | |||
| 612dab112c | |||
| 1d7bf82b18 | |||
| 55ca2d0ef6 | |||
| 3542455e2a | |||
| 2217ce6788 | |||
| 6e48c126fa | |||
| 177288a8d4 | |||
| 229ede09f1 | |||
| e9de6f7e40 | |||
| ce0c181489 | |||
| 4e73f4cd0a | |||
| 890052d018 | |||
| 46a7159c5a | |||
| cc94b66799 | |||
| 3e4bf6a4a7 | |||
| 5dfc54bd43 | |||
| db99a1da6c | |||
| c3c110b55a | |||
| 31d4e5260f | |||
| 109d49668f | |||
| 5f13330a8e | |||
| 6503469686 | |||
| 9acef33db9 | |||
| 70c44c3efc | |||
| bb8d4b2ef9 | |||
| efb0f31387 | |||
| 7fd90ca5d6 | |||
| 9f01b780c7 | |||
| 2738251be9 | |||
| 2ecd6bed8d | |||
| 858747149a | |||
| b166f1e4fd | |||
| b34cbc2b88 | |||
| efb640fb91 | |||
| db7fcf81d8 | |||
| 87f887fe3f | |||
| 5da75c7dd0 | |||
| a945e659f5 | |||
| bcf460eefd | |||
| 496d7ea8a0 | |||
| 68a5d887c5 | |||
| dc22c9ef22 | |||
| 8588765dc7 | |||
| f49226d335 | |||
| 575c815c97 | |||
| 392d6df2c8 | |||
| 911ed8919a | |||
| 9dd344e6b7 | |||
| f31817c0a1 | |||
| 823217c593 | |||
| 8517570014 | |||
| 155bcd42ea | |||
| 245982d111 | |||
| 323ed1b79f | |||
| 18b4363e83 | |||
| f30a18422f | |||
| d4f5732496 | |||
| ada9377a37 | |||
| ef0eb15034 | |||
| 71ac87c50e | |||
| 84957ace38 | |||
| 77f436c871 | |||
| b8b94265a1 | |||
| c80cca5cb9 | |||
| 4a258ee155 | |||
| e03a78d6a9 | |||
| 58a4bef619 | |||
| 48b3982a9e | |||
| 83d42f689f | |||
| ec094dbd3d | |||
| d89540d798 | |||
| 89355667c3 | |||
| fb6b30185d | |||
| c2bc362cb3 | |||
| e7b2a63e39 | |||
| 9835021582 | |||
| a190897dfe | |||
| a37dc03324 | |||
| be30da8821 | |||
| 91a9363d20 | |||
| 5d235341f8 | |||
| eb1773799c | |||
| caef11536b | |||
| b641a72de4 | |||
| 5a530ca258 | |||
| f0a7f54025 | |||
| 5f159e1d4d | |||
| 5aa526d979 | |||
| 7879f9c22d | |||
| 17399f08e5 | |||
| 868678b91d | |||
| ef11e1beb2 | |||
| d608f72599 | |||
| 3417cf428b | |||
| 2a6609e76e | |||
| 6f19f922c6 | |||
| ba7bedb789 | |||
| df55c901f0 | |||
| f90d1d6306 | |||
| e7ba46273e | |||
| f2cecff741 | |||
| e840e3bcbd | |||
| bf4053d093 | |||
| 1750c07f4d | |||
| 983ee6bb80 | |||
| 7a33f75ba5 | |||
| df5f3ded29 | |||
| 96e1a19b4c | |||
| fce4a4267a | |||
| dd8c869eb6 | |||
| 126b730f7e | |||
| c0e365d2c7 | |||
| 1f29102176 | |||
| 676308a6fb | |||
| ba635754ed | |||
| 01de3d1599 | |||
| ebcfd61e9a | |||
| 38218d1846 | |||
| 01b078cd38 | |||
| 7f3f8451c3 | |||
| ffe0f2b22d | |||
| 44269cc6bb | |||
| eb4be81dce | |||
| a69d99dc7a | |||
| d028ce34b0 | |||
| f8affc698e | |||
| f84e468402 | |||
| 2632117a34 | |||
| 80dc9f2bd4 | |||
| bf122cdb6b | |||
| 4f5b43579b | |||
| b379dafbb5 | |||
| 8fffcf9c80 | |||
| ef7fdee701 | |||
| 48b98150dc | |||
| af97da38da | |||
| 39ad881eb2 | |||
| 0bcec8ba44 | |||
| 8eb5b33aec | |||
| 612d7aa2b2 | |||
| 1927961002 | |||
| 2417ac06c4 | |||
| 3340df3cc7 | |||
| e3becf575a | |||
| 1363e56014 | |||
| df37936ca9 | |||
| 7b6af2557d | |||
| f2b1967831 | |||
| d305c61645 | |||
| ded1ad56a7 |
@@ -1,31 +1,31 @@
|
||||
# Thank you for contributing to Delta Chat.
|
||||
|
||||
If you like to discuss a **new feature** or submit suggestions,
|
||||
please use the community forum:
|
||||
|
||||
* <https://support.delta.chat>
|
||||
|
||||
If you intend to send a **bug report** for Delta Chat,
|
||||
search for existing bugs first:
|
||||
|
||||
* [Core](https://github.com/deltachat/deltachat-core/issues?&q=is%3Aissue)
|
||||
* [Android](https://github.com/deltachat/deltachat-android-ii/issues?&q=is%3Aissue)
|
||||
* [iOS](https://github.com/deltachat/deltachat-ios/issues?&q=is%3Aissue)
|
||||
* [Desktop](https://github.com/deltachat/deltachat-ios/issues?&q=is%3Aissue)
|
||||
* [Node](https://github.com/deltachat/deltachat-node/issues?&q=is%3Aissue)
|
||||
|
||||
In short, the Android/iOS/Desktop parts are about the User Interface.
|
||||
The Core part is about handling the connection to the mail server and the chat
|
||||
or e-mail messages as well as providing secure communication by using
|
||||
[Autocrypt](https://autocrypt.org/en/latest/).
|
||||
|
||||
A _bug_ is a reproducable misbehaviour,
|
||||
when something happens but something else should happen instead.
|
||||
|
||||
Please try to create your issue in the respective issue tracker.
|
||||
|
||||
Did you know there is a [Help](https://delta.chat/en/help) page for Delta Chat?
|
||||
|
||||
To ask questions, you are also invited to join our IRC channel #deltachat
|
||||
on [Freenode](https://kiwiirc.com/nextclient/#irc://irc.freenode.net/deltachat).
|
||||
|
||||
# Thank you for contributing to Delta Chat.
|
||||
|
||||
If you like to discuss a **new feature** or submit suggestions,
|
||||
please use the community forum:
|
||||
|
||||
* <https://support.delta.chat>
|
||||
|
||||
If you intend to send a **bug report** for Delta Chat,
|
||||
search for existing bugs first:
|
||||
|
||||
* [Core](https://github.com/deltachat/deltachat-core/issues?&q=is%3Aissue)
|
||||
* [Android](https://github.com/deltachat/deltachat-android/issues?&q=is%3Aissue)
|
||||
* [iOS](https://github.com/deltachat/deltachat-ios/issues?&q=is%3Aissue)
|
||||
* [Desktop](https://github.com/deltachat/deltachat-ios/issues?&q=is%3Aissue)
|
||||
* [Node](https://github.com/deltachat/deltachat-node/issues?&q=is%3Aissue)
|
||||
|
||||
In short, the Android/iOS/Desktop parts are about the User Interface.
|
||||
The Core part is about handling the connection to the mail server and the chat
|
||||
or e-mail messages as well as providing secure communication by using
|
||||
[Autocrypt](https://autocrypt.org/en/latest/).
|
||||
|
||||
A _bug_ is a reproducable misbehaviour,
|
||||
when something happens but something else should happen instead.
|
||||
|
||||
Please try to create your issue in the respective issue tracker.
|
||||
|
||||
Did you know there is a [Help](https://delta.chat/en/help) page for Delta Chat?
|
||||
|
||||
To ask questions, you are also invited to join our IRC channel #deltachat
|
||||
on [Freenode](https://kiwiirc.com/nextclient/#irc://irc.freenode.net/deltachat).
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<!--
|
||||
Please fill in as much as you can below (leaving out if not applicable is ok). This is a bug report and feature-tracking forum, if you like to discuss a new feature, please use the community forum at https://support.delta.chat.
|
||||
This is a bug report tracker. New features are discussed in the forum: https://support.delta.chat
|
||||
|
||||
Please fill out as much of this form as you can (leaving out stuff that is not applicable is ok).
|
||||
-->
|
||||
|
||||
- Platform (android/blackberry/anbox):
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
*.keystore
|
||||
.classpath
|
||||
project.properties
|
||||
.project
|
||||
.settings
|
||||
bin/
|
||||
gen/
|
||||
gplay/
|
||||
.idea/
|
||||
*.iml
|
||||
*.so
|
||||
@@ -30,3 +32,6 @@ jni/libspeex/.deps/
|
||||
|
||||
# contains files for ndk-build when done from gradle.
|
||||
.externalNativeBuild
|
||||
|
||||
# no vi tmp files
|
||||
*.swp
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
lang_map = fr_CA:fr-rCA,pt_BR:pt-rBR,pt_PT:pt,zh_CN:zh-rCN,zh_HK:zh-rHK,zh_TW:zh-rTW,da_DK:da-rDK,de_DE:de,tr_TR:tr,fr_FR:fr,es_ES:es,hu_HU:hu,sv_SE:sv-rSE,bg_BG:bg,el_GR:el,kn_IN:kn-rIN,cs_CZ:cs,he:iw,id:in,lt_LT:lt,km_KH:km-rKH,th_TH:th
|
||||
lang_map = nl_NL:nl, ja_JP:ja, pt_BR:pt-rBR
|
||||
|
||||
[signal-android.master]
|
||||
[delta-chat-app.stringsxml]
|
||||
file_filter = res/values-<lang>/strings.xml
|
||||
source_file = res/values/strings.xml
|
||||
source_lang = en
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.thoughtcrime.securesms">
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.thoughtcrime.securesms">
|
||||
|
||||
<uses-sdk tools:overrideLibrary="com.amulyakhare.textdrawable,com.astuetz.pagerslidingtabstrip,pl.tajchert.waitingdots,com.h6ah4i.android.multiselectlistpreferencecompat,android.support.v13,com.davemorrissey.labs.subscaleview,com.tomergoldst.tooltips,com.klinker.android.send_message,com.takisoft.colorpicker,android.support.v14.preference"/>
|
||||
|
||||
@@ -15,26 +15,27 @@
|
||||
<uses-feature android:name="android.hardware.portrait" android:required="false"/>
|
||||
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_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" />
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.INSTALL_SHORTCUT"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
|
||||
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
|
||||
<uses-permission android:name="android.permission.INSTALL_SHORTCUT" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.SET_WALLPAPER" />
|
||||
<uses-permission android:name="android.permission.RAISED_THREAD_PRIORITY" />
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
|
||||
<application android:name=".ApplicationContext"
|
||||
android:icon="@mipmap/ic_launcher_dev"
|
||||
android:label="@string/app_name"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="Delta Chat"
|
||||
android:supportsRtl="true"
|
||||
tools:replace="android:allowBackup"
|
||||
android:allowBackup="false"
|
||||
@@ -42,15 +43,13 @@
|
||||
android:largeHeap="true"
|
||||
tools:ignore="GoogleAppIndexingWarning">
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.android.geo.API_KEY"
|
||||
android:value="AIzaSyCSx9xea86GwDKGznCAULE9Y5a8b-TfN9U"/>
|
||||
|
||||
<meta-data android:name="com.google.android.gms.version"
|
||||
android:value="@integer/google_play_services_version" />
|
||||
|
||||
<!-- android car support, see https://developer.android.com/training/auto/start/,
|
||||
as this potentially blocks releases on gplay due to extra-checks,
|
||||
we disable this during the first gplay releases -->
|
||||
<!--
|
||||
<meta-data android:name="com.google.android.gms.car.application"
|
||||
android:resource="@xml/automotive_app_desc" />
|
||||
-->
|
||||
|
||||
<activity android:name=".InviteActivity"
|
||||
android:theme="@style/TextSecure.HighlightTheme"
|
||||
@@ -67,7 +66,6 @@
|
||||
android:excludeFromRecents="true"
|
||||
android:launchMode="singleTask"
|
||||
android:taskAffinity=""
|
||||
android:noHistory="true"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
|
||||
|
||||
@@ -83,6 +81,18 @@
|
||||
<data android:mimeType="*/*"/>
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND_MULTIPLE" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="audio/*" />
|
||||
<data android:mimeType="image/*" />
|
||||
<data android:mimeType="text/plain" />
|
||||
<data android:mimeType="video/*" />
|
||||
<data android:mimeType="application/*"/>
|
||||
<data android:mimeType="text/*"/>
|
||||
<data android:mimeType="*/*"/>
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.service.chooser.chooser_target_service"
|
||||
android:value=".service.DirectShareService" />
|
||||
@@ -90,7 +100,7 @@
|
||||
</activity>
|
||||
|
||||
<activity android:name=".ConversationListActivity"
|
||||
android:label="@string/app_name"
|
||||
android:label="Delta Chat"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||
@@ -114,7 +124,7 @@
|
||||
</activity-alias>
|
||||
|
||||
<activity android:name=".ConversationListArchiveActivity"
|
||||
android:label="@string/AndroidManifest_archived_conversations"
|
||||
android:label="@string/chat_archived_chats_title"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||
android:parentActivityName=".ConversationListActivity">
|
||||
@@ -144,42 +154,26 @@
|
||||
<activity android:name=".GroupCreateActivity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".DatabaseUpgradeActivity"
|
||||
android:theme="@style/NoAnimation.Theme.AppCompat.Light.DarkActionBar"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".PassphraseCreateActivity"
|
||||
android:label="@string/AndroidManifest__create_passphrase"
|
||||
android:windowSoftInputMode="stateUnchanged"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".PassphrasePromptActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/TextSecure.LightIntroTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".NewConversationActivity"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:windowSoftInputMode="stateAlwaysVisible"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
|
||||
|
||||
<intent-filter>
|
||||
<data android:scheme="mailto"/>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<action android:name="android.intent.action.SENDTO"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.BROWSABLE"/>
|
||||
</intent-filter>
|
||||
|
||||
</activity>
|
||||
|
||||
<activity android:name=".ContactMultiSelectionActivity"
|
||||
android:label="@string/AndroidManifest__select_contacts"
|
||||
android:label="@string/contacts_title"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".giph.ui.GiphyActivity"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".PassphraseChangeActivity"
|
||||
android:label="@string/AndroidManifest__change_passphrase"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".ApplicationPreferencesActivity"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
@@ -190,17 +184,27 @@
|
||||
|
||||
<activity android:name=".RegistrationActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:windowSoftInputMode="stateUnchanged"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<activity android:name=".LogSubmitActivity"
|
||||
android:label="@string/AndroidManifest__log_submit"
|
||||
<!-- this scheme is used as the redirect_url for getOauth2Url()
|
||||
and should be whitelisted by the supported oauth2 services -->
|
||||
<data android:scheme="chat.delta" android:path="/${applicationId}/auth" tools:ignore="AppLinkUrlError"/>
|
||||
<data android:scheme="chat.delta" android:path="/auth" tools:ignore="AppLinkUrlError"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name=".LogViewActivity"
|
||||
android:label="@string/pref_view_log"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".MediaPreviewActivity"
|
||||
android:label="@string/AndroidManifest__media_preview"
|
||||
android:label="@string/media_preview"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
@@ -226,7 +230,7 @@
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".BlockedContactsActivity"
|
||||
<activity android:name=".BlockedAndShareContactsActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
@@ -243,7 +247,7 @@
|
||||
|
||||
<activity android:name=".CreateProfileActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:windowSoftInputMode="stateVisible"
|
||||
android:windowSoftInputMode="stateHidden|adjustResize"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".QrScanActivity"
|
||||
@@ -258,7 +262,7 @@
|
||||
android:theme="@style/Theme.AppCompat.Dialog.Alert"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||
android:icon="@drawable/clear_profile_avatar"
|
||||
android:label="@string/AndroidManifest_remove_photo">
|
||||
android:label="@string/menu_delete_image">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="org.thoughtcrime.securesms.action.CLEAR_PROFILE_PHOTO"/>
|
||||
@@ -266,25 +270,15 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name=".contactshare.ContactShareEditActivity"
|
||||
<activity android:name=".preferences.ChatBackgroundActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".contactshare.ContactNameEditActivity"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
<activity android:name=".map.MapActivity" />
|
||||
|
||||
<activity android:name=".contactshare.SharedContactDetailsActivity"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
<service android:name=".connect.KeepAliveService" android:enabled="true" />
|
||||
|
||||
<activity android:name=".preferences.ChatBackgroundActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<service android:enabled="true" android:exported="false" android:name=".service.KeyCachingService"/>
|
||||
|
||||
<service android:name=".connect.KeepAliveService" android:enabled="true"/>
|
||||
<service android:name=".geolocation.LocationBackgroundService" />
|
||||
|
||||
<service android:name=".service.DirectShareService"
|
||||
android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
|
||||
@@ -293,8 +287,6 @@
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<service android:name=".service.GenericForegroundService"/>
|
||||
|
||||
<receiver android:name=".connect.TimerReceiver" android:enabled="true"/>
|
||||
|
||||
<receiver android:name=".notifications.MarkReadReceiver"
|
||||
@@ -327,13 +319,6 @@
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".service.ExpirationListener" />
|
||||
|
||||
<provider android:name=".providers.PartProvider"
|
||||
android:grantUriPermissions="true"
|
||||
android:exported="false"
|
||||
android:authorities="${applicationId}.provider.securesms" />
|
||||
|
||||
<provider android:name="android.support.v4.content.FileProvider"
|
||||
android:authorities="${applicationId}.fileprovider"
|
||||
android:exported="false"
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
Building Signal
|
||||
===============
|
||||
|
||||
Basics
|
||||
------
|
||||
|
||||
Signal uses [Gradle](http://gradle.org) to build the project and to maintain
|
||||
dependencies. However, you needn't install it yourself; the
|
||||
"gradle wrapper" `gradlew`, mentioned below, will do that for you.
|
||||
|
||||
Building Signal
|
||||
---------------
|
||||
|
||||
The following steps should help you (re)build Signal from the command line.
|
||||
|
||||
1. Checkout the Signal-Android project source with the command:
|
||||
|
||||
git clone https://github.com/signalapp/Signal-Android.git
|
||||
|
||||
2. Make sure you have the [Android SDK](https://developer.android.com/sdk/index.html) installed.
|
||||
3. Ensure that the following packages are installed from the Android SDK manager:
|
||||
* Android SDK Build Tools (see buildToolsVersion in build.gradle)
|
||||
* SDK Platform (All API levels)
|
||||
* Android Support Repository
|
||||
* Google Repository
|
||||
4. Create a local.properties file at the root of your source checkout and add an sdk.dir entry to it. For example:
|
||||
|
||||
sdk.dir=/Application/android-sdk-macosx
|
||||
|
||||
5. Using Java 8
|
||||
|
||||
6. Execute Gradle:
|
||||
|
||||
./gradlew build
|
||||
|
||||
Visual assets
|
||||
----------------------
|
||||
|
||||
Source assets tend to be large binary blobs, which are best stored outside of git repositories. Some source files are SVGs that can be auto-colored and sized using a tool like [android-res-utils](https://github.com/sebkur/android-res-utils).
|
||||
|
||||
Sample command for generating our audio placeholder image:
|
||||
|
||||
```bash
|
||||
pngs_from_svg.py ic_audio.svg /path/to/Signal/res/ 150 --color #000 --opacity 0.54 --suffix _light
|
||||
pngs_from_svg.py ic_audio.svg /path/to/Signal/res/ 150 --color #fff --opacity 1.00 --suffix _light
|
||||
```
|
||||
|
||||
Setting up a development environment
|
||||
------------------------------------
|
||||
|
||||
[Android Studio](https://developer.android.com/sdk/installing/studio.html) is the recommended development environment.
|
||||
|
||||
1. Install Android Studio.
|
||||
2. Open Android Studio. On a new installation, the Quickstart panel will appear. If you have open projects, close them using "File > Close Project" to see the Quickstart panel.
|
||||
3. From the Quickstart panel, choose "Configure" then "SDK Manager".
|
||||
4. In the SDK Tools tab of the SDK Manager, make sure that the "Android Support Repository" is installed, and that the latest "Android SDK build-tools" are installed. Click "OK" to return to the Quickstart panel.
|
||||
5. From the Quickstart panel, choose "Checkout from Version Control" then "git".
|
||||
6. Paste the URL for the Signal-Android project when prompted (https://github.com/signalapp/Signal-Android.git).
|
||||
7. Android studio should detect the presence of a project file and ask you whether to open it. Click "yes".
|
||||
9. Default config options should be good enough.
|
||||
9. Project initialisation and build should proceed.
|
||||
|
||||
Contributing code
|
||||
-----------------
|
||||
|
||||
Code contributions should be sent via github as pull requests, from feature branches [as explained here](https://help.github.com/articles/using-pull-requests).
|
||||
|
||||
Mailing list
|
||||
------------
|
||||
|
||||
Development discussion happens on the whispersystems mailing list.
|
||||
[To join](https://lists.riseup.net/www/info/whispersystems)
|
||||
Send emails to whispersystems@lists.riseup.net
|
||||
|
||||
@@ -0,0 +1,598 @@
|
||||
# Delta Chat Android Changelog
|
||||
|
||||
## v0.301.0
|
||||
2019-04-20
|
||||
|
||||
* Experimental location-streaming can be enabled in the advanced settings;
|
||||
when enabled, you can optionally stream your location to a group
|
||||
and view a map with the members that are also streaming their location
|
||||
* Tweaked dark-mode
|
||||
* Improved account setup and profile dialogs
|
||||
* Show and hide the virtual keyboard more gracefully
|
||||
* Speed up program start
|
||||
* Speed up message sending
|
||||
* Handle Webp-Images and Vcard-files
|
||||
* Add Japanese and Brazilian Portuguese translations
|
||||
* Update several other translations
|
||||
* Bug fixes
|
||||
|
||||
The changes have been done by Alexander, Ampli-fier, Angelo Fuchs,
|
||||
Asiel Díaz Benítez, Besnik, Björn Petersen, cyBerta, Daniel Böhrs, Enrico B.,
|
||||
ferhad.necef, Floris Bruynooghe, Friedel Ziegelmayer, Heimen Stoffels,
|
||||
Holger Krekel, Janka, Jikstra, Luis, Moo, Nico de Haen, Ole Carlsen, Osoitz,
|
||||
Ozancan Karataş, Racer1, sebek, Viktor Pracht, Webratte and others
|
||||
|
||||
## v0.200.0
|
||||
2019-03-14
|
||||
|
||||
* Simplified setup (OAuth2) for google.com and yandex.com
|
||||
* Improved setup for many other providers
|
||||
* Decide, which e-mails should appear - "Chats only", "Accepted contacts" or "All"
|
||||
* Improve moving chat messages to the DeltaChat folder
|
||||
* Optional a stronger image compression
|
||||
* Smaller message sizes in groups
|
||||
* Share files from other apps to Delta Chat
|
||||
* Share texts from mailto:-links
|
||||
* Log can be opened from setup screen
|
||||
* Add Lithuanian translation
|
||||
* Update several other translations
|
||||
* Bug fixes
|
||||
|
||||
The changes have been done by Alexandex, Angelo Fuchs, Asiel Díaz Benítez,
|
||||
Björn Petersen, Besnik, Christian Klump, cyBerta, Daniel Böhrs, Enrico B.,
|
||||
ferhad.necef, Florian Haar, Floris Bruynooghe, Friedel Ziegelmayer,
|
||||
Heimen Stoffels, Holger Krekel, Iskatel Istiny, Lech Rowerski, Moo,
|
||||
Ole Carlsen, violoncelloCH and others
|
||||
|
||||
|
||||
## v0.101.0
|
||||
2019-02-12
|
||||
|
||||
* First Play Store release, optimisations for Android O
|
||||
* Ask to disable battery optimisations
|
||||
* Start Azerbaijani and Swedish translations
|
||||
* Update several other translations
|
||||
* Many bug fixes
|
||||
|
||||
The changes have been done by Ampli-fier, Angelo Fuchs, Asiel Díaz Benítez,
|
||||
Besnik, Björn Petersen, Christian Klump, Daniel Böhrs, Enrico B., ferhad.necef,
|
||||
Florian Haar, Floris Bruynooghe, Heimen Stoffels, Holger Krekel,
|
||||
Iskatel Istiny, Lech Rowerski, violoncelloCH and others.
|
||||
|
||||
|
||||
## v0.100.0
|
||||
2019-01-23
|
||||
|
||||
* Complete rework of the ui using pure material design
|
||||
* Images and other files can be sent together with a description
|
||||
* Images can be modified before sending, eg. text can be added or
|
||||
hand-drawn signs
|
||||
* Image and media gallery for each chat
|
||||
* Embedded camera, new camera icon directly in input field
|
||||
* Embedded video player
|
||||
* New emoticons
|
||||
* Contacts and groups can be joined with a QR-code-scan
|
||||
* Options for watching several IMAP-folders
|
||||
* Option to move messages to the DeltaChat-folder
|
||||
* Improved multi-device behavior
|
||||
* Improved Accessiblity eg. for screen readers
|
||||
* Dark theme
|
||||
* Support right-to-left languages
|
||||
* Relative time display
|
||||
* Chatlist and contat list support a long click for several operations
|
||||
* Archive chats by swiping a chat right out of the chatlist
|
||||
* Show date always atop of the chat
|
||||
* Fix redraw problems with hidden system status or navigation bar
|
||||
* Reply directly from within notification
|
||||
* The system credentials has be be entered before exports
|
||||
* The app can be protected by the system credentials
|
||||
* Hide the permanent notification more reliable
|
||||
* Improved resending of messages
|
||||
* Allow password starting/ending with whitespaces
|
||||
* Bug fixes
|
||||
* Probably more i forgot
|
||||
|
||||
The changes have been done by Ampli-fier, Angelo Fuchs, Asiel Díaz Benítez,
|
||||
Björn Petersen, chklump, Daniel Böhrs, Florian Haar, Hocceruser, Holger Krekel,
|
||||
Lars-Magnus Skog
|
||||
|
||||
Translations are still in progress and video-recording is not yet re-implemented.
|
||||
Help is very welcome -:)
|
||||
|
||||
|
||||
## v0.20.0
|
||||
2018-08-14
|
||||
|
||||
* Check size before sending videos, files and other attachments
|
||||
* On sending problems, try over an appropriate number of times; then give up
|
||||
* Detect sending problems related to the message size,
|
||||
show an error and do not try over
|
||||
* Show message errors in the message info
|
||||
* Add user forum to website
|
||||
* Update python bindings
|
||||
* Seed node.js bindings and a CLI version based on this
|
||||
* Prepare Android bindings update
|
||||
* Update Danish, Italian and Russian translations
|
||||
|
||||
The changes have been done by Andrei Guliaikin, Angelo Fuchs, Björn Petersen,
|
||||
compl4xx, Boehrsi, Enrico B., Floris Bruynooghe, Holger Krekel, Janka, Jikstra,
|
||||
Karissa McKelvey, Lars-Magnus Skog, Ole Carlsen
|
||||
|
||||
|
||||
## v0.19.0
|
||||
2018-07-10
|
||||
|
||||
* Give advices for Google users
|
||||
* Speed up by making database-locks unneccessary
|
||||
* Fix drafts appearing twice
|
||||
* Update Albanian, Basque, Catalan, Danish, Dutch, English,
|
||||
Italian, Polish, Russian, and Turkish translations
|
||||
* Update website
|
||||
|
||||
The changes have been done by Allan Nordhøy, Angelo Fuchs, Besnik,
|
||||
Björn Petersen, Calbasi, Claudio Arseni, guland2000, Heimen Stoffels,
|
||||
Holger Krekel, Luis Fernando Stürmer da Rosa, Mahmut Özcan, Ole Carlsen,
|
||||
Osoitz, sebek, Thomas Oster
|
||||
|
||||
|
||||
## v0.18.2
|
||||
2018-06-23
|
||||
|
||||
* Fix initial configure process to hang at 95% under some circumstances
|
||||
|
||||
|
||||
## v0.18.0
|
||||
2018-06-21
|
||||
|
||||
* Speed up message sending/receiving
|
||||
* Retry failed sending/receiving jobs just in the moment
|
||||
the networks becomes available again
|
||||
* Make message sending/receiving more reliable
|
||||
* Handle attachment file names with non-ASCII characters correctly
|
||||
* Paging through images made available by Angelo Fuchs
|
||||
* Several connection issues with different configurations
|
||||
were fixed by Thomas Oster
|
||||
* Improve chat-folder creation by Thomas Oster
|
||||
* Request permissions before using the camera; added by Thomas Oster
|
||||
* Key import improved by Thomas Oster
|
||||
* Improve background and foreground message fetching reliability
|
||||
* Try to use the permanent notification only when really needed
|
||||
* Update internal sqlite library from 3.22.0 to 3.23.1
|
||||
* Update internal libEtPan library from 1.7 to 1.8
|
||||
* Add Danish translation from Ole Carlsen
|
||||
* Update Albanian, Basque, Danish, Italian, Norwegian, Dutch, Polish,
|
||||
Portuguese, Russian and Telugu translations
|
||||
|
||||
|
||||
## v0.17.3
|
||||
2018-05-17
|
||||
|
||||
* Fix system messages appearing twice
|
||||
* Fix: Use all gossipped verifications in verified groups
|
||||
* Update Basque, Polish, Russian and Ukrainian translations
|
||||
|
||||
|
||||
## v0.17.2
|
||||
2018-05-15
|
||||
|
||||
* Fix problem with adding formerly uncontacted members to groups
|
||||
* Unblock manually blocked members when they are added manually as contact again
|
||||
|
||||
|
||||
## v0.17.1
|
||||
2018-05-11
|
||||
|
||||
* Improve QR code scanning screens
|
||||
* Add a labs-option to disabled the new QR logo overlay
|
||||
* Update Russian translations
|
||||
|
||||
|
||||
## v0.17.0
|
||||
2018-05-07
|
||||
|
||||
* Show shared chats in user profiles
|
||||
* If a contact has changed his encryption setups,
|
||||
this is shown as a system messages in the middle of the chat view
|
||||
* Show added group members, changed group titles etc. as system messages
|
||||
* Show direct buttons to create a new group or contact in the "New Chat" dialog
|
||||
* Improve "Add contact" dialog
|
||||
* Move subject and most chat metadata to the encrypted part
|
||||
following the "Memoryhole" proposal
|
||||
* Show read-timestamps in message info
|
||||
* Do not add contacts from Bcc to group-memberlist
|
||||
to avoid privacy leaks and to get a unique memberlist for all group-members
|
||||
* In a mail contains plaintext and encrypted parts,
|
||||
the whole mail is treated as not being encrypted correctly
|
||||
* Restructure settings and advanced settings
|
||||
* Fix problems with Office 365 and similar services
|
||||
* Fix a problem where incoming messages are shown as being sent by oneself
|
||||
* Experimental QR code scanning options can be enabled in the advanced settings
|
||||
* Update Albanian, Catalan, Dutch, French, German, Italian, Norwegian, Polish,
|
||||
Russian, Spanish, Turkish and Ukrainian translations
|
||||
* Add Basque translation
|
||||
* Add Chinese translation
|
||||
* Add Japanese translation
|
||||
|
||||
|
||||
## v0.16.0
|
||||
2018-03-19
|
||||
|
||||
* Messages from normal clients to more than one recipient
|
||||
create an implicit "ad-hoc group"
|
||||
* Allow group creation though contact requests
|
||||
* Always display the _sending_ time in the chat list;
|
||||
the list itself is sorted by _receiving_ time
|
||||
and "Message info" shows both times now
|
||||
* If parts but the footnote are cut from mails,
|
||||
this is indicated "..."; use "Message info" to get the full text
|
||||
* Highlight the subject in the "Message info"
|
||||
* Autoconfigure prefers 'https' over 'http'
|
||||
* Bug fixes, eg. avoid freezes if the connection is lost
|
||||
* Update Russian, Tamil and Turkish translations
|
||||
|
||||
|
||||
## v0.15.0
|
||||
2018-02-27
|
||||
|
||||
* Render the waveform for voice messages
|
||||
* Fix problems with voice messages on various devices
|
||||
* Improve deletion of message that were moved around by another e-mail client
|
||||
* Really delete messages on the server, do not only mark them for deletion
|
||||
* Ignore subsequent keys or blocks in OpenPGP files
|
||||
* Leave incoming Autocrypt Setup Messages in the inbox
|
||||
so that any number of other e-mail-clients can process them
|
||||
* Avoid messages sent to the "Me" chat appearing twice in other e-mail clients
|
||||
* Update Albanian translation
|
||||
|
||||
|
||||
## v0.14.0
|
||||
2018-02-20
|
||||
|
||||
* Evaluate gossiped keys
|
||||
* Option to transfer the Autocrypt Setup to another device or e-mail client
|
||||
* Accept Autocrypt Setup transferred from other devices or e-mail client
|
||||
* Send any data from device to device
|
||||
using the chat "Me - Messages I sent to myself"
|
||||
* Do not send messages when there is an access error
|
||||
* Request for contact permissions only once
|
||||
* Bug fixes
|
||||
* Update French and Turkish translations
|
||||
|
||||
|
||||
## v0.13.0
|
||||
2018-01-18
|
||||
|
||||
* Reply encrypted if the sender has enabled encryption manually
|
||||
(esp. useful when chatting with clients as K-9 or Enigmail)
|
||||
* Update welcome screen graphics
|
||||
* Update Norwegian, Russian and Turkish translations
|
||||
|
||||
|
||||
## v0.12.0
|
||||
2018-01-07
|
||||
|
||||
* Gossip keys of other group members in the encrypted payload
|
||||
(will also be evaluated in one of the next versions)
|
||||
* Use SHA-256 instead of SHA-1 in signatures
|
||||
* Make the permanent notification clickable
|
||||
* Update permanent notification after import
|
||||
* Fix rendering of system messages
|
||||
* Various bug fixes
|
||||
* Update Albanian, French, Italian, Norwegian, Polish, Russian
|
||||
and Turkish translations
|
||||
|
||||
|
||||
## v0.11.4
|
||||
2017-12-17
|
||||
|
||||
* Add option to initiate Autocrypt Key Transfer
|
||||
* Connect after importing a backup
|
||||
* Reading memory hole headers
|
||||
* Add Albanian translation
|
||||
* Update German, Italian, Polish, Portuguese, Russian, Turkish
|
||||
and Ukrainian translations
|
||||
|
||||
|
||||
## v0.10.0
|
||||
2017-11-29
|
||||
|
||||
* Fix usage of multiple private keys
|
||||
* Fix various memory leaks
|
||||
* Update English, Portuguese and Turkish translations
|
||||
|
||||
|
||||
## v0.9.9
|
||||
2017-11-18
|
||||
|
||||
* Alternate include order for F-Droid
|
||||
* Add Serbian translation
|
||||
* Update Catalan, Dutch, English, French, German, Hungarian, Italian, Polish,
|
||||
Portuguese, Russian, Spanish, Tamil, Telugu and Ukrainian translations
|
||||
|
||||
|
||||
## v0.9.8
|
||||
2017-11-15
|
||||
|
||||
* Fix a bug that avoids chat creation under some circumstances
|
||||
(bug introduced in 0.9.7)
|
||||
|
||||
|
||||
## v0.9.7
|
||||
2017-11-14
|
||||
|
||||
* Archive chats or delete chats by a long press
|
||||
* Notify the user in the chatlist about contact requests
|
||||
of known users or of other Delta Chat clients
|
||||
* Show messages only for explicitly wanted chats
|
||||
* Show more detailed reasons about failed end-to-end-encryptions
|
||||
* Explicit option to leave a group
|
||||
* Do not show the padlock if end-to-end-encryption is disabled by the user
|
||||
* Import images from a backup when using a different device with different paths
|
||||
* Add copy-to-clipboard function for "About / Info"
|
||||
* Rework Emoji-code
|
||||
* Add Norwegian Bokmål translation
|
||||
* Add Tamil translation
|
||||
* Add Turkish translation
|
||||
* Update Catalan, German, French, Italian, Korean, Dutch, Polish, Portuguese,
|
||||
Russian, Telugu and Ukrainian translations
|
||||
|
||||
|
||||
## v0.9.6
|
||||
2017-10-18
|
||||
|
||||
* Support keys generated with multiple subkeys eg. from K-9
|
||||
* Show PDFs and other attachments with bad names
|
||||
* Bug fixes
|
||||
|
||||
|
||||
## v0.9.5
|
||||
2017-10-08
|
||||
|
||||
* Backup export and import function
|
||||
* Query password before export
|
||||
* Move replies from normal E-Mail-Clients to the "Chats" folder
|
||||
* Improve helping MUAs on showing chat threads
|
||||
* Improve onboarding
|
||||
* Add URL to default footer
|
||||
* Test a different approach for battery saving in this release
|
||||
* Update French, Italian, German, Polish, Portuguese, Russian
|
||||
and Ukrainian translations
|
||||
|
||||
|
||||
## v0.9.4
|
||||
2017-08-23
|
||||
|
||||
* Introduce an editable "Status" field that is shown eg. in email footers
|
||||
* Editable and synchronized group images
|
||||
* Show the subject of messages that cannot be decrypted
|
||||
* Do not send "Read receipts" when decryption fails
|
||||
* Do not request "Read receipts" from normal MUAs
|
||||
as there are too many MUAs responding with weird, non-standard formats
|
||||
* Deleting a chat always deletes all messages from the device permanently
|
||||
* Ignore messages from mailing lists
|
||||
* Do not spread the original authors name nor address on forwarding
|
||||
* Encrypt mails send to SMTP and to IMAP the same way
|
||||
* Improve showing HTML-mails
|
||||
* Cleanup Android code
|
||||
* Remove badge counter on app restart
|
||||
* Add Ukrainian translation
|
||||
* Add Telugu translation
|
||||
* Add Catalan translation
|
||||
* Update German, Spanish, French, Hungarian, Italian, Polish, Portuguese
|
||||
and Russian translations
|
||||
|
||||
|
||||
## v0.9.3
|
||||
2017-07-13
|
||||
|
||||
* Introduce "Read receipts" and avoid social pressure to leave it activated
|
||||
* Improve encryption dialog in profile
|
||||
* Fix marking messages as "seen" when opening the contact requests
|
||||
* Ignore signature.asc files of signed-only messages
|
||||
* Update Polish, Portuguese and Russian translations
|
||||
|
||||
|
||||
## v0.9.2
|
||||
2017-06-28
|
||||
|
||||
* Encrypt group chats
|
||||
* Cryptographically sign messages
|
||||
* Validate signatures of incoming messages ("Info" shows the state)
|
||||
* Show lock beside end-to-end-encrypted messages with a validated signature
|
||||
* If end-to-end-encryption is available on sending time,
|
||||
guarantee the message not to be sent without end-to-end-encryption later
|
||||
* Show special characters in HTML-mails
|
||||
* Help MUAs on showing chat threads
|
||||
* Show attachments from multipart/alternative structures
|
||||
* Upgrade from Autocrypt Level 0 to Level 1;
|
||||
as the levels are not compatible, encryption on mixed setups does not happen
|
||||
* Update Polish, Portuguese, Spanish and French translations
|
||||
|
||||
|
||||
## v0.9.1
|
||||
2017-06-04
|
||||
|
||||
* Profile: Improve encryption state dialog
|
||||
* Improved video quality of short clips
|
||||
* Make encryption-dialog localizable
|
||||
* Update Russian translation
|
||||
|
||||
|
||||
## v0.9.0
|
||||
2017-06-01
|
||||
|
||||
* Add end-to-end-encrypting following the OpenPGP and Autocrypt standards
|
||||
* Add a function to compare keys
|
||||
* Profile: Add option to copy the email address to the clipboard
|
||||
* Pimp GUI
|
||||
|
||||
|
||||
## v0.1.36
|
||||
2017-05-04
|
||||
|
||||
* Support camera on Android Nougat
|
||||
|
||||
|
||||
## v0.1.34
|
||||
2017-05-03
|
||||
|
||||
* Link to new homepage https://delta.chat
|
||||
* Localizable Help-URLs
|
||||
|
||||
|
||||
## v0.1.33
|
||||
2017-04-29
|
||||
|
||||
* Better support for right-to-left (RTL) languages, taking advantage of
|
||||
Android 4.2 (Jelly Bean MR1, API level 17).
|
||||
* Send PNG files without resizing and converting to JPEG
|
||||
* If JPEG files are send without compression,
|
||||
they still appear as image, not as attached files
|
||||
* Raise-to-speak defaults to false
|
||||
* Unify long click behaviour
|
||||
* Support Android's system function "Delete data"
|
||||
* Replies to messages pop up automatically
|
||||
even if send from other email addresses (typical scenario for alias addresses)
|
||||
* Fix group-replies from normal email-clients.
|
||||
|
||||
|
||||
## v0.1.32
|
||||
2017-04-22
|
||||
|
||||
* Update Spanish and Portuguese translations
|
||||
* Update internal sqlite library to version 3.18.0, released on 2017-03-28
|
||||
* Remove more of the custom language handling, use Android's routines instead
|
||||
* General code cleanup
|
||||
* Play GIF files
|
||||
* Option to disable autoplaying GIF files
|
||||
* When sending contacts, only use the names the receivers have set themselves
|
||||
* Show some hints when long-pressing icons in the action bar
|
||||
|
||||
|
||||
## v0.1.29
|
||||
2017-04-19
|
||||
|
||||
* Add Russian translation
|
||||
* For outgoing (group-)messages,
|
||||
only use the names the receivers have set themselves
|
||||
|
||||
|
||||
## v0.1.28
|
||||
2017-04-14
|
||||
|
||||
* Pimp notifications
|
||||
* Bug fixes
|
||||
|
||||
|
||||
## v0.1.27
|
||||
2017-04-12
|
||||
|
||||
* Use a permanent foreground service for reliable notifications
|
||||
* Monitor the IMAP-IDLE thread and reconnect if IMAP-IDLE seems to hang
|
||||
* Various battery and background optimizations
|
||||
|
||||
|
||||
## v0.1.25
|
||||
2017-04-04
|
||||
|
||||
* Use system or user selected video player.
|
||||
* Do not connect if not configured (avoids a warning on the first time startup)
|
||||
* Add vertical scrollbar, eg. to settings activities.
|
||||
* Pimp GUI and logo.
|
||||
* Update Korean.
|
||||
|
||||
|
||||
## v0.1.24
|
||||
2017-03-31
|
||||
|
||||
* Share images and documents from other apps to Delta Chat
|
||||
* Offer to mailto:-link-support to other apps
|
||||
* Ignore implausible sending time of incoming messages;
|
||||
use the receive time in these rare cases
|
||||
* Show errors only when Delta Chat is in foreground
|
||||
* Dynamically adapt video bitrate for longer videos
|
||||
to an attachment-size of max. 25 MB
|
||||
|
||||
|
||||
## v0.1.23
|
||||
2017-03-28
|
||||
|
||||
* Retry connecting to IMAP if there is not network available on the first try
|
||||
* Notify about new messages if the app is not active for hours,
|
||||
optimize battery consumption
|
||||
|
||||
|
||||
## v0.1.22
|
||||
2017-03-22
|
||||
|
||||
* Show HTML-only messages
|
||||
* Show connection errors
|
||||
* Add options for SSL/TLS and STARTTLS
|
||||
* Automatic account configuration, if possible
|
||||
* Recode large videos
|
||||
* Add Hungarian translation
|
||||
* Add Korean translation
|
||||
|
||||
|
||||
## v0.1.21
|
||||
2017-03-10
|
||||
|
||||
* Record and send voice messages
|
||||
* Record and send videos
|
||||
* Send and play music
|
||||
* Send contacts and email addresses
|
||||
* Sending and opening attachments of any type
|
||||
* Share and open commands for all attachments
|
||||
* Accept VCards send to us by other apps
|
||||
* Clickable email addresses
|
||||
* Update Polish translation
|
||||
* Fix tablet startup bug
|
||||
* Close the app when using the lock-app-via-pincode function
|
||||
* Protect data by using a content provider for sharing
|
||||
* Try to clear the task switcher's screenshots when locking the app via pincode
|
||||
* Pimp GUI
|
||||
|
||||
|
||||
## v0.1.20
|
||||
2017-02-16
|
||||
|
||||
* Avoid unwanted downloads of lots of old messages
|
||||
* Make the "Chats" folder visible if the server hides new folders by default
|
||||
* Fix a crash when the server returns empty folders
|
||||
* Update Polish and Portuguese translations
|
||||
* Use API level 25 (Nougat 7.1) as target
|
||||
|
||||
|
||||
## v0.1.18
|
||||
2017-02-11
|
||||
|
||||
* Add Polish translation
|
||||
* Use a new default background for chats
|
||||
* Improve typography by using the system font instead of a custom resource font
|
||||
* Remove custom plural handling, use Android's routines instead
|
||||
* Remove unused source code and strings
|
||||
* More fixes of lint errors and warnings
|
||||
|
||||
|
||||
## v0.1.17
|
||||
2017-02-07
|
||||
|
||||
* Drop two unnecessary permissions
|
||||
ACCESS_COARSE_LOCATION and ACCESS_FINE_LOCATION
|
||||
* Really add French translation
|
||||
* Update Portuguese translation
|
||||
* Start fixing translation handling of the program
|
||||
* Remove special "foss" build, because the whole program is free now.
|
||||
|
||||
|
||||
## v0.1.16
|
||||
2017-02-06
|
||||
|
||||
* Add French translation
|
||||
* Fix some lint errors and warnings
|
||||
|
||||
|
||||
## v0.1.15
|
||||
2017-01-31
|
||||
|
||||
* Prepare for first release on F-Droid
|
||||
@@ -1,25 +1,28 @@
|
||||
## Delta Chat Android Client
|
||||
|
||||
This is the android client for Delta Chat. For the core library and other common
|
||||
information, please refer to [Delta Chat Core Library](https://github.com/deltachat/deltachat-core).
|
||||
For ready-to-use binaries, please go to https://delta.chat .
|
||||
This is the android client for [Delta Chat](https://delta.chat/).
|
||||
It is available on [F-Droid](https://f-droid.org/app/com.b44t.messenger) and
|
||||
the [Google Play Store](https://play.google.com/store/apps/details?id=chat.delta).
|
||||
The APK can also be downloaded from [github](https://github.com/deltachat/deltachat-android/releases)
|
||||
(for experienced users only).
|
||||
|
||||

|
||||
For the core library and other common information, please refer to the
|
||||
[Delta Chat Core Library](https://github.com/deltachat/deltachat-core).
|
||||
|
||||
[<img src="https://f-droid.org/badge/get-it-on.png" alt="Get it on F-Droid" height="75"/>](https://f-droid.org/packages/com.b44t.messenger)
|
||||
<img alt="Screenshot Chat List" src="docs/images/2019-01-chatlist.png" width="298" /> <img alt="Screenshot Chat View" src="docs/images/2019-01-chat.png" width="298" />
|
||||
|
||||
|
||||
# Build
|
||||
|
||||
When checking out _deltachat-android-ii_, make sure also to check out the
|
||||
When checking out _deltachat-android_, make sure also to check out the
|
||||
subproject _deltachat-core_:
|
||||
|
||||
- When using Git, you can do this initially by
|
||||
`$ git clone --recursive https://github.com/deltachat/deltachat-android-ii`
|
||||
`$ git clone --recursive https://github.com/deltachat/deltachat-android`
|
||||
or later by `git submodule update --init --recursive`. If you do this in your
|
||||
home directory, this results in the folder `~/deltachat-android-ii` which is just fine.
|
||||
home directory, this results in the folder `~/deltachat-android` which is just fine.
|
||||
|
||||
- Alternatively, you can download the [deltachat-android zip-file](https://github.com/deltachat/deltachat-android-ii/archive/master.zip); in this case, also download the [deltachat-core zip-file](https://github.com/deltachat/deltachat-core/archive/master.zip) and place its contents to `jni/messenger-backend`
|
||||
- Alternatively, you can download the [deltachat-android zip-file](https://github.com/deltachat/deltachat-android/archive/master.zip); in this case, also download the [deltachat-core zip-file](https://github.com/deltachat/deltachat-core/archive/master.zip) and place its contents to `jni/messenger-backend`
|
||||
|
||||
Then, call `ndk-build` in the root directory to build the C-part;
|
||||
this also builds deltachat-core. Afterwards run the project in Android Studio.
|
||||
@@ -79,4 +82,4 @@ The user interface classes are based on the Signal messenger.
|
||||
|
||||
Licensed under the GPLv3, see LICENSE file for details.
|
||||
|
||||
Copyright © 2017, 2018 Delta Chat contributors
|
||||
Copyright © 2017-2019 Delta Chat contributors
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
#! /usr/bin/env python
|
||||
|
||||
import sys
|
||||
from zipfile import ZipFile
|
||||
|
||||
class ApkDiff:
|
||||
|
||||
IGNORE_FILES = ["META-INF/CERT.RSA", "META-INF/CERT.SF", "META-INF/MANIFEST.MF"]
|
||||
|
||||
def compare(self, sourceApk, destinationApk):
|
||||
sourceZip = ZipFile(sourceApk, 'r')
|
||||
destinationZip = ZipFile(destinationApk, 'r')
|
||||
|
||||
if self.compareManifests(sourceZip, destinationZip) and self.compareEntries(sourceZip, destinationZip) == True:
|
||||
print "APKs match!"
|
||||
else:
|
||||
print "APKs don't match!"
|
||||
|
||||
def compareManifests(self, sourceZip, destinationZip):
|
||||
sourceEntrySortedList = sorted(sourceZip.namelist())
|
||||
destinationEntrySortedList = sorted(destinationZip.namelist())
|
||||
|
||||
for ignoreFile in self.IGNORE_FILES:
|
||||
while ignoreFile in sourceEntrySortedList: sourceEntrySortedList.remove(ignoreFile)
|
||||
while ignoreFile in destinationEntrySortedList: destinationEntrySortedList.remove(ignoreFile)
|
||||
|
||||
if len(sourceEntrySortedList) != len(destinationEntrySortedList):
|
||||
print "Manifest lengths differ!"
|
||||
|
||||
for (sourceEntryName, destinationEntryName) in zip(sourceEntrySortedList, destinationEntrySortedList):
|
||||
if sourceEntryName != destinationEntryName:
|
||||
print "Sorted manifests don't match, %s vs %s" % (sourceEntryName, destinationEntryName)
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def compareEntries(self, sourceZip, destinationZip):
|
||||
sourceInfoList = filter(lambda sourceInfo: sourceInfo.filename not in self.IGNORE_FILES, sourceZip.infolist())
|
||||
destinationInfoList = filter(lambda destinationInfo: destinationInfo.filename not in self.IGNORE_FILES, destinationZip.infolist())
|
||||
|
||||
if len(sourceInfoList) != len(destinationInfoList):
|
||||
print "APK info lists of different length!"
|
||||
return False
|
||||
|
||||
for sourceEntryInfo in sourceInfoList:
|
||||
for destinationEntryInfo in list(destinationInfoList):
|
||||
if sourceEntryInfo.filename == destinationEntryInfo.filename:
|
||||
sourceEntry = sourceZip.open(sourceEntryInfo, 'r')
|
||||
destinationEntry = destinationZip.open(destinationEntryInfo, 'r')
|
||||
|
||||
if self.compareFiles(sourceEntry, destinationEntry) != True:
|
||||
print "APK entry %s does not match %s!" % (sourceEntryInfo.filename, destinationEntryInfo.filename)
|
||||
return False
|
||||
|
||||
destinationInfoList.remove(destinationEntryInfo)
|
||||
break
|
||||
|
||||
return True
|
||||
|
||||
def compareFiles(self, sourceFile, destinationFile):
|
||||
sourceChunk = sourceFile.read(1024)
|
||||
destinationChunk = destinationFile.read(1024)
|
||||
|
||||
while sourceChunk != "" or destinationChunk != "":
|
||||
if sourceChunk != destinationChunk:
|
||||
return False
|
||||
|
||||
sourceChunk = sourceFile.read(1024)
|
||||
destinationChunk = destinationFile.read(1024)
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 3:
|
||||
print "Usage: apkdiff <pathToFirstApk> <pathToSecondApk>"
|
||||
sys.exit(1)
|
||||
|
||||
ApkDiff().compare(sys.argv[1], sys.argv[2])
|
||||
@@ -1,2 +0,0 @@
|
||||
*.db
|
||||
*.db.gz
|
||||
@@ -1,106 +0,0 @@
|
||||
import sys
|
||||
import re
|
||||
import argparse
|
||||
import sqlite3
|
||||
import gzip
|
||||
from progressbar import ProgressBar, Counter, Timer
|
||||
from lxml import etree
|
||||
|
||||
parser = argparse.ArgumentParser(prog='apntool', description="""Process Android's apn xml files and drop them into an
|
||||
easily queryable SQLite db. Tested up to version 9 of
|
||||
their APN file.""")
|
||||
parser.add_argument('-v', '--version', action='version', version='%(prog)s v1.1')
|
||||
parser.add_argument('-i', '--input', help='the xml file to parse', default='apns.xml', required=False)
|
||||
parser.add_argument('-o', '--output', help='the sqlite db output file', default='apns.db', required=False)
|
||||
parser.add_argument('--quiet', help='do not show progress or verbose instructions', action='store_true', required=False)
|
||||
parser.add_argument('--no-gzip', help="do not gzip after creation", action='store_true', required=False)
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
def normalized(target):
|
||||
o2_typo = re.compile(r"02\.co\.uk")
|
||||
port_typo = re.compile(r"(\d+\.\d+\.\d+\.\d+)\.(\d+)")
|
||||
leading_zeros = re.compile(r"(/|\.|^)0+(\d+)")
|
||||
subbed = o2_typo.sub(r'o2.co.uk', target)
|
||||
subbed = port_typo.sub(r'\1:\2', subbed)
|
||||
subbed = leading_zeros.sub(r'\1\2', subbed)
|
||||
return subbed
|
||||
|
||||
try:
|
||||
connection = sqlite3.connect(args.output)
|
||||
cursor = connection.cursor()
|
||||
cursor.execute('SELECT SQLITE_VERSION()')
|
||||
version = cursor.fetchone()
|
||||
if not args.quiet:
|
||||
print("SQLite version: %s" % version)
|
||||
print("Opening %s" % args.input)
|
||||
|
||||
cursor.execute("PRAGMA legacy_file_format=ON")
|
||||
cursor.execute("PRAGMA journal_mode=DELETE")
|
||||
cursor.execute("PRAGMA page_size=32768")
|
||||
cursor.execute("VACUUM")
|
||||
cursor.execute("DROP TABLE IF EXISTS apns")
|
||||
cursor.execute("""CREATE TABLE apns(_id INTEGER PRIMARY KEY, mccmnc TEXT, mcc TEXT, mnc TEXT, carrier TEXT,
|
||||
apn TEXT, mmsc TEXT, port INTEGER, type TEXT, protocol TEXT, bearer TEXT, roaming_protocol TEXT,
|
||||
carrier_enabled INTEGER, mmsproxy TEXT, mmsport INTEGER, proxy TEXT, mvno_match_data TEXT,
|
||||
mvno_type TEXT, authtype INTEGER, user TEXT, password TEXT, server TEXT)""")
|
||||
|
||||
apns = etree.parse(args.input)
|
||||
root = apns.getroot()
|
||||
pbar = None
|
||||
if not args.quiet:
|
||||
pbar = ProgressBar(widgets=['Processed: ', Counter(), ' apns (', Timer(), ')'], maxval=len(list(root))).start()
|
||||
|
||||
count = 0
|
||||
for apn in root.iter("apn"):
|
||||
if apn.get("mmsc") is None:
|
||||
continue
|
||||
sqlvars = ["?" for x in apn.attrib.keys()] + ["?"]
|
||||
mccmnc = "%s%s" % (apn.get("mcc"), apn.get("mnc"))
|
||||
normalized_mmsc = normalized(apn.get("mmsc"))
|
||||
if normalized_mmsc != apn.get("mmsc"):
|
||||
print("normalize MMSC: %s => %s" % (apn.get("mmsc"), normalized_mmsc))
|
||||
apn.set("mmsc", normalized_mmsc)
|
||||
|
||||
if not apn.get("mmsproxy") is None:
|
||||
normalized_mmsproxy = normalized(apn.get("mmsproxy"))
|
||||
if normalized_mmsproxy != apn.get("mmsproxy"):
|
||||
print("normalize proxy: %s => %s" % (apn.get("mmsproxy"), normalized_mmsproxy))
|
||||
apn.set("mmsproxy", normalized_mmsproxy)
|
||||
|
||||
values = [apn.get(attrib) for attrib in apn.attrib.keys()] + [mccmnc]
|
||||
keys = apn.attrib.keys() + ["mccmnc"]
|
||||
|
||||
cursor.execute("SELECT 1 FROM apns WHERE mccmnc = ? AND apn = ?", [mccmnc, apn.get("apn")])
|
||||
if cursor.fetchone() is None:
|
||||
statement = "INSERT INTO apns (%s) VALUES (%s)" % (", ".join(keys), ", ".join(sqlvars))
|
||||
cursor.execute(statement, values)
|
||||
|
||||
count += 1
|
||||
if not args.quiet:
|
||||
pbar.update(count)
|
||||
|
||||
if not args.quiet:
|
||||
pbar.finish()
|
||||
connection.commit()
|
||||
print("Successfully written to %s" % args.output)
|
||||
|
||||
if not args.no_gzip:
|
||||
gzipped_file = "%s.gz" % (args.output,)
|
||||
with open(args.output, 'rb') as orig:
|
||||
with gzip.open(gzipped_file, 'wb') as gzipped:
|
||||
gzipped.writelines(orig)
|
||||
print("Successfully gzipped to %s" % gzipped_file)
|
||||
|
||||
if not args.quiet:
|
||||
print("\nTo include this in the distribution, copy it to the project's assets/databases/ directory.")
|
||||
print("If you support API 10 or lower, you must use the gzipped version to avoid corruption.")
|
||||
|
||||
except sqlite3.Error, e:
|
||||
if connection:
|
||||
connection.rollback()
|
||||
print("Error: %s" % e.args[0])
|
||||
sys.exit(1)
|
||||
finally:
|
||||
if connection:
|
||||
connection.close()
|
||||
@@ -1,3 +0,0 @@
|
||||
argparse>=1.2.1
|
||||
lxml>=3.3.3
|
||||
progressbar-latest>=2.4
|
||||
|
Before Width: | Height: | Size: 33 KiB |
@@ -1,277 +1,110 @@
|
||||
import java.security.MessageDigest
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
maven {
|
||||
url "https://repo1.maven.org/maven2"
|
||||
jcenter()
|
||||
}
|
||||
maven {
|
||||
url 'https://maven.google.com/'
|
||||
name 'Google'
|
||||
}
|
||||
maven {
|
||||
url "https://repo1.maven.org/maven2"
|
||||
jcenter()
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.0.1'
|
||||
classpath files('libs/gradle-witness.jar')
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'witness'
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven {
|
||||
url "https://repo1.maven.org/maven2/"
|
||||
}
|
||||
maven {
|
||||
url "https://raw.github.com/signalapp/maven/master/preferencefragment/releases/"
|
||||
}
|
||||
maven {
|
||||
url "https://raw.github.com/signalapp/maven/master/smil/releases/"
|
||||
}
|
||||
maven {
|
||||
url "https://raw.github.com/signalapp/maven/master/photoview/releases/"
|
||||
}
|
||||
maven {
|
||||
url "https://raw.github.com/signalapp/maven/master/shortcutbadger/releases/"
|
||||
}
|
||||
maven {
|
||||
url "https://raw.github.com/signalapp/maven/master/circular-progress-button/releases/"
|
||||
}
|
||||
maven {
|
||||
url "https://raw.github.com/signalapp/maven/master/sqlcipher/release/"
|
||||
}
|
||||
maven {
|
||||
url "https://maven.google.com"
|
||||
}
|
||||
maven { // textdrawable
|
||||
url 'https://dl.bintray.com/amulyakhare/maven'
|
||||
// Used only for PhotoView
|
||||
url "https://jitpack.io"
|
||||
name 'JitPack Github wrapper'
|
||||
}
|
||||
jcenter()
|
||||
mavenLocal()
|
||||
maven {
|
||||
url 'https://maven.google.com/'
|
||||
name 'Google'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile 'com.android.support:appcompat-v7:27.0.2'
|
||||
compile 'com.android.support:recyclerview-v7:27.0.2'
|
||||
compile 'com.android.support:design:27.0.2'
|
||||
compile 'com.android.support:support-v13:27.0.2'
|
||||
compile 'com.android.support:cardview-v7:27.0.2'
|
||||
compile 'com.android.support:preference-v7:27.0.2'
|
||||
compile 'com.android.support:preference-v14:27.0.2'
|
||||
compile 'com.android.support:gridlayout-v7:27.0.2'
|
||||
compile 'com.android.support:multidex:1.0.2'
|
||||
compile 'com.android.support:exifinterface:27.0.2'
|
||||
compile 'com.android.support.constraint:constraint-layout:1.1.2'
|
||||
compile 'android.arch.lifecycle:extensions:1.1.1'
|
||||
compile 'android.arch.lifecycle:common-java8:1.1.1'
|
||||
implementation 'com.android.support:appcompat-v7:27.1.1' // one use in SearchToolbar.
|
||||
implementation 'com.android.support:design:27.1.1' // used in various locations for a lot of components
|
||||
implementation 'com.android.support:support-v13:27.1.1' // used to prevent a 25... version to be loaded (from where ever)
|
||||
implementation 'com.android.support:preference-v7:27.1.1' // actually a dependency of -v14
|
||||
implementation 'com.android.support:preference-v14:27.1.1' // used to manage the users preferences
|
||||
implementation 'com.android.support:exifinterface:27.1.1' // Used to edit the Exif in BitmapUtil
|
||||
implementation 'com.android.support.constraint:constraint-layout:1.1.2' // Used in several places
|
||||
implementation 'android.arch.lifecycle:extensions:1.1.1' // Used in situations where data changes should be displayed directly (e.G. Search)
|
||||
implementation 'android.arch.lifecycle:common-java8:1.1.1' // Used in situations where data changes should be displayed directly (e.G. Search)
|
||||
|
||||
compile 'com.google.android.gms:play-services-gcm:9.6.1'
|
||||
compile 'com.google.android.gms:play-services-maps:9.6.1'
|
||||
compile 'com.google.android.gms:play-services-places:9.6.1'
|
||||
implementation 'com.google.android.exoplayer:exoplayer:r2.3.1' // plays video.
|
||||
|
||||
compile 'com.google.android.exoplayer:exoplayer:r2.3.1'
|
||||
implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.5' // used as JSON library TODO: check if java builtin would work as well
|
||||
|
||||
compile('org.whispersystems:libpastelog:1.1.2') {
|
||||
exclude group: 'com.squareup.okhttp3', module: 'okhttp'
|
||||
}
|
||||
compile 'org.whispersystems:signal-service-android:2.7.6'
|
||||
compile 'org.whispersystems:webrtc-android:M68'
|
||||
implementation 'com.journeyapps:zxing-android-embedded:3.4.0' // QR Code scanner
|
||||
|
||||
compile 'com.journeyapps:zxing-android-embedded:3.4.0'
|
||||
|
||||
compile "me.leolin:ShortcutBadger:1.1.16"
|
||||
compile 'se.emilsjolander:stickylistheaders:2.7.0'
|
||||
compile 'com.jpardogo.materialtabstrip:library:1.0.9'
|
||||
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'
|
||||
compile 'com.github.chrisbanes:PhotoView:2.1.3'
|
||||
compile 'com.github.bumptech.glide:glide:4.5.0'
|
||||
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.bumptech.glide:glide:4.5.0'
|
||||
annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'
|
||||
compile 'com.makeramen:roundedimageview:2.1.0'
|
||||
compile 'com.pnikosis:materialish-progress:1.5'
|
||||
compile 'pl.tajchert:waitingdots:0.1.0'
|
||||
compile 'com.soundcloud.android:android-crop:0.9.10@aar'
|
||||
compile 'com.melnykov:floatingactionbutton:1.3.0'
|
||||
compile 'com.squareup.dagger:dagger:1.2.2'
|
||||
annotationProcessor 'com.squareup.dagger:dagger-compiler:1.2.2'
|
||||
compile 'mobi.upod:time-duration-picker:1.1.3'
|
||||
provided 'com.squareup.dagger:dagger-compiler:1.2.2'
|
||||
compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
|
||||
compile 'com.google.zxing:core:3.2.1'
|
||||
compile ('com.davemorrissey.labs:subsampling-scale-image-view:3.6.0') {
|
||||
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:0.9.10@aar' // used in Group Select Avatar, should be unified with profie
|
||||
implementation 'com.nineoldandroids:library:2.4.0' // DEPRECATED! Used to slide in the half-camera.
|
||||
implementation 'mobi.upod:time-duration-picker:1.1.3' // Used to pick the time for inactivity.
|
||||
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' // number of unread messages,
|
||||
// the one-letter circle for the contacts (when there is not avatar) and a white background.
|
||||
implementation 'com.google.zxing:core:3.2.1' // QR Code scanner
|
||||
implementation ('com.davemorrissey.labs:subsampling-scale-image-view:3.6.0') { // for the zooming on photos / media
|
||||
exclude group: 'com.android.support', module: 'support-annotations'
|
||||
}
|
||||
compile ('cn.carbswang.android:NumberPickerView:1.0.9') {
|
||||
exclude group: 'com.android.support', module: 'appcompat-v7'
|
||||
}
|
||||
compile ('com.tomergoldst.android:tooltips:1.0.6') {
|
||||
exclude group: 'com.android.support', module: 'appcompat-v7'
|
||||
}
|
||||
compile ('com.klinkerapps:android-smsmms:4.0.1') {
|
||||
exclude group: 'com.squareup.okhttp', module: 'okhttp'
|
||||
exclude group: 'com.squareup.okhttp', module: 'okhttp-urlconnection'
|
||||
}
|
||||
compile 'com.annimon:stream:1.1.8'
|
||||
compile ('com.takisoft.fix:colorpicker:0.9.1') {
|
||||
exclude group: 'com.android.support', module: 'appcompat-v7'
|
||||
exclude group: 'com.android.support', module: 'recyclerview-v7'
|
||||
}
|
||||
compile 'com.codewaves.stickyheadergrid:stickyheadergrid:0.9.4'
|
||||
compile 'com.github.dmytrodanylyk.circular-progress-button:library:1.1.3-S2'
|
||||
compile 'org.signal:android-database-sqlcipher:3.5.9-S3'
|
||||
compile ('com.googlecode.ez-vcard:ez-vcard:0.9.11') {
|
||||
exclude group: 'com.fasterxml.jackson.core'
|
||||
exclude group: 'org.freemarker'
|
||||
}
|
||||
implementation 'com.annimon:stream:1.1.8' // brings future java streams api to SDK Version < 24
|
||||
implementation 'com.codewaves.stickyheadergrid:stickyheadergrid:0.9.4' // glues the current time segment text in the gallery to the top.
|
||||
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:7.2.0'
|
||||
|
||||
testCompile 'junit:junit:4.12'
|
||||
testCompile 'org.assertj:assertj-core:1.7.1'
|
||||
testCompile 'org.mockito:mockito-core:1.9.5'
|
||||
testCompile 'org.powermock:powermock-api-mockito:1.6.1'
|
||||
testCompile 'org.powermock:powermock-module-junit4:1.6.1'
|
||||
testCompile 'org.powermock:powermock-module-junit4-rule:1.6.1'
|
||||
testCompile 'org.powermock:powermock-classloading-xstream:1.6.1'
|
||||
//debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
|
||||
//releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'
|
||||
//debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.3'
|
||||
|
||||
androidTestCompile 'com.android.support:multidex:1.0.2'
|
||||
androidTestCompile 'com.android.support:multidex-instrumentation:1.0.2'
|
||||
androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
|
||||
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
|
||||
androidTestCompile ('org.assertj:assertj-core:1.7.1') {
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'org.assertj:assertj-core:1.7.1'
|
||||
testImplementation 'org.mockito:mockito-core:1.9.5'
|
||||
testImplementation 'org.powermock:powermock-api-mockito:1.6.1'
|
||||
testImplementation 'org.powermock:powermock-module-junit4:1.6.1'
|
||||
testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.1'
|
||||
testImplementation 'org.powermock:powermock-classloading-xstream:1.6.1'
|
||||
|
||||
androidTestImplementation ('org.assertj:assertj-core:1.7.1') {
|
||||
exclude group: 'org.hamcrest', module: 'hamcrest-core'
|
||||
}
|
||||
androidTestCompile ('com.squareup.assertj:assertj-android:1.1.1') {
|
||||
exclude group: 'org.hamcrest', module: 'hamcrest-core'
|
||||
exclude group: 'com.android.support', module: 'support-annotations'
|
||||
}
|
||||
}
|
||||
|
||||
dependencyVerification {
|
||||
verify = [
|
||||
'com.android.support:design:fa5c27a705310e95a8f4099c98777132ed901a0d69178942306bb34cd76f0d57',
|
||||
'com.android.support:preference-v14:1fcf40bd560dc21ce55b6a292d1326d28f52dc5e4f2a64eef2f38dd95777b645',
|
||||
'com.android.support:preference-v7:d9f32ddc92f8d6a0bd86a18f4fcaff805fa021245e395b6e7dd382907443ee53',
|
||||
'com.pnikosis:materialish-progress:d71d80e00717a096784482aee21001a9d299fec3833e4ebd87739ed36cf77c54',
|
||||
'pl.tajchert:waitingdots:2835d49e0787dbcb606c5a60021ced66578503b1e9fddcd7a5ef0cd5f095ba2c',
|
||||
'mobi.upod:time-duration-picker:db469ce0f48dd96b892eac424ed76870e54bf00fe0a28cdcddfbe5f2a226a0e1',
|
||||
'com.codewaves.stickyheadergrid:stickyheadergrid:5b4aa6a52a957cfd55f60f4220c11c0c371385a3cb9786cae03c260dcdef5794',
|
||||
'com.android.support:appcompat-v7:b2825e8b47f665d3362d8481c8d147d1af9230d16f23a2b94f6ccbc53c68cec1',
|
||||
'com.melnykov:floatingactionbutton:15d58d4fac0f7a288d0e5301bbaf501a146f5b3f5921277811bf99bd3b397263',
|
||||
'com.android.support:recyclerview-v7:3eb953930f10941f2b0447ec123a9b03d2746a42a99c523e82c3ece3308ca70b',
|
||||
'com.android.support:support-v13:6f2848811ceef2e32cc98da02a045d65f7e7447a6bd7198b9ec10aa14d7ad55c',
|
||||
'com.android.support:cardview-v7:57f867a3c8f33e2d4dc0a03e2dfa03cad6267a908179f04a725a68ea9f0b8ccf',
|
||||
'com.android.support:gridlayout-v7:227b5fdffa20f53bd562503aab6d2293d52cf64b5a6ab1116d2150f87bff9e88',
|
||||
'com.android.support:multidex:7cd48755c7cfdb6dd2d21cbb02236ec390f6ac91cde87eb62f475b259ab5301d',
|
||||
'com.android.support:exifinterface:0e7cd526c4468895cd8549def46b3d33c8bcfb1ae4830569898d8c7326b15bb2',
|
||||
'android.arch.lifecycle:extensions:429426b2feec2245ffc5e75b3b5309bedb36159cf06dc71843ae43526ac289b6',
|
||||
'android.arch.lifecycle:common-java8:7078b5c8ccb94203df9cc2a463c69cf0021596e6cf966d78fbfd697aaafe0630',
|
||||
'com.google.android.gms:play-services-gcm:312e61253a236f2d9b750b9c04fc92fd190d23b0b2755c99de6ce4a28b259dae',
|
||||
'com.google.android.gms:play-services-places:abf3a4a3b146ec7e6e753be62775e512868cf37d6f88ffe2d81167b33b57132b',
|
||||
'com.google.android.gms:play-services-maps:45e8021e7ddac4a44a82a0e9698991389ded3023d35c58f38dbd86d54211ec0e',
|
||||
'com.google.android.exoplayer:exoplayer:955085aa611a8f7cf6c61b88ae03d1a392f4ad94c9bfbc153f3dedb9ffb14718',
|
||||
'org.whispersystems:libpastelog:fe56b4db9ec743c8b565e3e4caa9228fafe132dc0bf82000d6e359b97a81177c',
|
||||
'org.whispersystems:signal-service-android:823eed29e64fb0aa30d2078cb5ec0245e2a0713a4028121329c5c28788ef27f8',
|
||||
'org.whispersystems:webrtc-android:66cb312eb024eaf6aa93e662d37d0c46632e049d47a2dcc9c291207589ee7a43',
|
||||
'me.leolin:ShortcutBadger:e3cb3e7625892129b0c92dd5e4bc649faffdd526d5af26d9c45ee31ff8851774',
|
||||
'se.emilsjolander:stickylistheaders:a08ca948aa6b220f09d82f16bbbac395f6b78897e9eeac6a9f0b0ba755928eeb',
|
||||
'com.jpardogo.materialtabstrip:library:c6ef812fba4f74be7dc4a905faa4c2908cba261a94c13d4f96d5e67e4aad4aaa',
|
||||
'org.apache.httpcomponents:httpclient-android:6f56466a9bd0d42934b90bfbfe9977a8b654c058bf44a12bdc2877c4e1f033f1',
|
||||
'com.github.chrisbanes:PhotoView:ed06775308da260e1fd86d1d3288988fcd3d80db24ce0d7c9fcfedc39e622292',
|
||||
'com.github.bumptech.glide:glide:997de7ac95be6c944d3b8cbe13de11307736ea45451c1b09a6cec7c328ead59f',
|
||||
'com.makeramen:roundedimageview:1f5a1865796b308c6cdd114acc6e78408b110f0a62fc63553278fbeacd489cd1',
|
||||
'com.soundcloud.android:android-crop:ffd4b973cf6e97f7d64118a0dc088df50e9066fd5634fe6911dd0c0c5d346177',
|
||||
'com.squareup.dagger:dagger:789aca24537022e49f91fc6444078d9de8f1dd99e1bfb090f18491b186967883',
|
||||
'com.amulyakhare:com.amulyakhare.textdrawable:54c92b5fba38cfd316a07e5a30528068f45ce8515a6890f1297df4c401af5dcb',
|
||||
'com.google.zxing:core:b4d82452e7a6bf6ec2698904b332431717ed8f9a850224f295aec89de80f2259',
|
||||
'com.davemorrissey.labs:subsampling-scale-image-view:550c5baa07e0bb4ff0a18b705e96d34436d22619248bd8c08c08c730b1f55cfe',
|
||||
'cn.carbswang.android:NumberPickerView:18b3c316d62c7c277978a8d4ed57a5b8f4e943762264960f579a8a549c756729',
|
||||
'com.tomergoldst.android:tooltips:4c56697dd1ad64b8066535c61f961a6d901e7ae5d97ae27084ba40ad620349b6',
|
||||
'com.klinkerapps:android-smsmms:e7c3328a0f3a8dd44daa8129de4e99996f3057a4546e47891b036b81e0ebf1d1',
|
||||
'com.annimon:stream:5da6e2e3e0551d61a3ea7014f04312276549e3dd739cf637996e4cf43c5535b9',
|
||||
'com.takisoft.fix:colorpicker:f5d0dbabe406a1800498ca9c1faf34db36e021d8488bf10360f29961fe3ab0d1',
|
||||
'com.github.dmytrodanylyk.circular-progress-button:library:8dc6a29a5a8db7b2ad5a9a7fda1dc9ae0893f4c8f0545732b2c63854ea693e8e',
|
||||
'org.signal:android-database-sqlcipher:33d4063336893af00b9d68b418e7b290cace74c20ce8aacffddc0911010d3d73',
|
||||
'com.googlecode.ez-vcard:ez-vcard:7e24ad50b222d2f70ac91bdccfa3c0f6200b078d797cb784837f75e77bb4210f',
|
||||
'com.google.android.gms:play-services-iid:54e919f9957b8b7820da7ee9b83471d00d0cac1cf08ddea8b5b41aea80bb1a70',
|
||||
'com.google.android.gms:play-services-base:0ca636a8fc9a5af45e607cdcd61783bf5d561cbbb0f862021ce69606eee5ad49',
|
||||
'com.google.android.gms:play-services-tasks:69ec265168e601d0203d04cd42e34bb019b2f029aa1e16fabd38a5153eea2086',
|
||||
'com.google.android.gms:play-services-basement:95dd882c5ffba15b9a99de3fefb05d3a01946623af67454ca00055d222f85a8d',
|
||||
'com.android.support:support-v4:1b2b37169fcccfef5e563d273749e3792decdce9818bc17932403a2363f537b4',
|
||||
'com.android.support:support-fragment:e4358388022a2205777575a7251fe357334658e4123d5d6e3b082f5899d9b011',
|
||||
'com.android.support:animated-vector-drawable:5b117a2c13a898c2a3c84c480d64edcfac2ef720aa9b742c29249fac774ffc48',
|
||||
'com.android.support:support-core-ui:2284072511a95d504c074de80c82cd33724c6d2754117833b98ba3a09994163e',
|
||||
'com.android.support:transition:1a7db0453c1467fc8fd815e6d50ca6bb475a7a9ba6b5f3b307329688a7c62a68',
|
||||
'com.android.support:support-core-utils:b69c6e1e7731b876b910fc7100bcadf40a57f27b32ca26b91400995542112c96',
|
||||
'com.android.support:support-media-compat:6dd9327ee9aa467cab479aad97df375072b2b6ba61eadffdaa5a88de3843c457',
|
||||
'com.android.support:support-vector-drawable:bf4f4fcbf58b1380616581224e6487c230bfdb3434ec353d4adaa4b1f4865cfa',
|
||||
'com.android.support:support-compat:ed4d25d91a0b13d8b9def1c0de69ed03d7fb89d50fb37eb0e9b63b0cf7a42357',
|
||||
'android.arch.lifecycle:livedata:50ab0490c1ff1a7cfb4e554032998b080888946d0dd424f39900efc4a1bcd750',
|
||||
'android.arch.lifecycle:livedata-core:d6fdd8b985d6178d7ea2f16986a24e83f1bee936b74d43167c69e08d3cc12c50',
|
||||
'android.arch.core:runtime:c3215aa5873311b3f88a6f4e4a3c25ad89971bc127de8c3e1291c57f93a05c39',
|
||||
'android.arch.lifecycle:runtime:c4e4be66c1b2f0abec593571454e1de14013f7e0f96bf2a9f212931a48cae550',
|
||||
'android.arch.core:common:3a616a32f433e9e23f556b38575c31b013613d3ae85206263b7625fe1f4c151a',
|
||||
'android.arch.lifecycle:common:8d378e88ebd5189e09eef623414812c868fd90aa519d6160e2311fb8b81cff56',
|
||||
'android.arch.lifecycle:viewmodel:7de29cfaba77d6b5d5be234c57f6812d0150d087e63941af22ba1d1f8e2bc96a',
|
||||
'com.github.bumptech.glide:gifdecoder:59ccf3bb0cec11dab4b857382cbe0b171111b6fc62bf141adce4e1180889af15',
|
||||
'com.android.support:support-annotations:af05330d997eb92a066534dbe0a3ea24347d26d7001221092113ae02a8f233da',
|
||||
'org.whispersystems:signal-protocol-android:5b8acded7f2a40178eb90ab8e8cbfec89d170d91b3ff5e78487d1098df6185a1',
|
||||
'org.whispersystems:signal-service-java:6169643c65dcba8c784744006fc3afd9b6f309041b310a33a624121e3577433a',
|
||||
'com.github.bumptech.glide:disklrucache:c1b1b6f5bbd01e2fcdc9d7f60913c8d338bdb65ed4a93bfa02b56f19daaade4b',
|
||||
'com.github.bumptech.glide:annotations:bede99ef9f71517a4274bac18fd3e483e9f2b6108d7d6fe8f4949be4aa4d9512',
|
||||
'com.nineoldandroids:library:68025a14e3e7673d6ad2f95e4b46d78d7d068343aa99256b686fe59de1b3163a',
|
||||
'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
|
||||
'com.klinkerapps:logger:177e325259a8b111ad6745ec10db5861723c99f402222b80629f576f49408541',
|
||||
'com.google.android:flexbox:a9989fd13ae2ee42765dfc515fe362edf4f326e74925d02a10369df8092a4935',
|
||||
'org.jsoup:jsoup:abeaf34795a4de70f72aed6de5966d2955ec7eb348eeb813324f23c999575473',
|
||||
'org.whispersystems:curve25519-android:82595394422b957d4a5b5f1b27b75ba25cf6dc4db4d312418ca38cd6fff279ca',
|
||||
'org.whispersystems:signal-protocol-java:5152c2b01a25147967d6bf82e540f947901bdfa79260be3eb3e96b03f787d6b5',
|
||||
'com.google.protobuf:protobuf-java:e0c1c64575c005601725e7c6a02cebf9e1285e888f756b2a1d73ffa8d725cc74',
|
||||
'com.googlecode.libphonenumber:libphonenumber:183392c0565be16d3f6f86680b4106bbde6fe31a402ad21bf9823d938c0c8706',
|
||||
'com.fasterxml.jackson.core:jackson-databind:835097bcdd11f5bc8a08378c70d4c8054dfa4b911691cc2752063c75534d198d',
|
||||
'com.squareup.okhttp3:okhttp:7265adbd6f028aade307f58569d814835cd02bc9beffb70c25f72c9de50d61c4',
|
||||
'com.madgag.spongycastle:prov:b8c3fec3a59aac1aa04ccf4dad7179351e54ef7672f53f508151b614c131398a',
|
||||
'org.whispersystems:curve25519-java:7dd659d8822c06c3aea1a47f18fac9e5761e29cab8100030b877db445005f03e',
|
||||
'com.fasterxml.jackson.core:jackson-annotations:0ca408c24202a7626ec8b861e99d85eca5e38b73311dd6dd12e3e9deecc3fe94',
|
||||
'com.fasterxml.jackson.core:jackson-core:cbf4604784b4de226262845447a1ad3bb38a6728cebe86562e2c5afada8be2c0',
|
||||
'com.squareup.okio:okio:734269c3ebc5090e3b23566db558f421f0b4027277c79ad5d176b8ec168bb850',
|
||||
'com.madgag.spongycastle:core:8d6240b974b0aca4d3da9c7dd44d42339d8a374358aca5fc98e50a995764511f',
|
||||
]
|
||||
}
|
||||
|
||||
android {
|
||||
flavorDimensions "none"
|
||||
compileSdkVersion 27
|
||||
buildToolsVersion '27.0.1'
|
||||
buildToolsVersion '27.0.3'
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
|
||||
dexOptions {
|
||||
javaMaxHeapSize "4g"
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
versionCode 399
|
||||
versionName "0.0.9"
|
||||
applicationId "chat.delta.androidii"
|
||||
versionCode 542
|
||||
versionName "0.301.0"
|
||||
|
||||
applicationId "com.b44t.messenger"
|
||||
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 25
|
||||
multiDexEnabled true
|
||||
targetSdkVersion 26
|
||||
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
project.ext.set("archivesBaseName", "Signal");
|
||||
|
||||
buildConfigField "long", "BUILD_TIMESTAMP", getLastCommitTimestamp() + "L"
|
||||
buildConfigField "String", "SIGNAL_URL", "\"https://textsecure-service.whispersystems.org\""
|
||||
buildConfigField "String", "SIGNAL_CDN_URL", "\"https://cdn.signal.org\""
|
||||
buildConfigField "String", "SIGNAL_SERVICE_STATUS_URL", "\"uptime.signal.org\""
|
||||
buildConfigField "String", "GIPHY_PROXY_HOST", "\"giphy-proxy-production.whispersystems.org\""
|
||||
buildConfigField "int", "GIPHY_PROXY_PORT", "80"
|
||||
buildConfigField "String", "USER_AGENT", "\"OWA\""
|
||||
// base name of the generated apk
|
||||
project.ext.set("archivesBaseName", "deltachat");
|
||||
|
||||
buildConfigField "boolean", "DEV_BUILD", "false"
|
||||
buildConfigField "String", "MAP_ACCESS_TOKEN", '"pk.eyJ1IjoiZGVsdGFjaGF0IiwiYSI6ImNqc3c1aWczMzBjejY0M28wZmU0a3cwMzMifQ.ZPTH9dFJaav06RAu4rTYHw"'
|
||||
|
||||
ndk {
|
||||
abiFilters "armeabi", "armeabi-v7a", "x86"
|
||||
@@ -295,6 +128,23 @@ android {
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
signingConfigs {
|
||||
debug {
|
||||
// add `DC_DEBUG_STORE_FILE=/path/to/debug.keystore` to `~/.gradle/gradle.properties`
|
||||
if(project.hasProperty("DC_DEBUG_STORE_FILE" )) {
|
||||
storeFile file(DC_DEBUG_STORE_FILE )
|
||||
}
|
||||
}
|
||||
release {
|
||||
// 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
|
||||
keyPassword DC_RELEASE_KEY_PASSWORD
|
||||
}
|
||||
}
|
||||
}
|
||||
release
|
||||
}
|
||||
|
||||
@@ -302,26 +152,17 @@ android {
|
||||
debug {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'),
|
||||
'proguard-google-play-services.pro',
|
||||
'proguard-dagger.pro',
|
||||
'proguard-jackson.pro',
|
||||
'proguard-sqlite.pro',
|
||||
'proguard-appcompat-v7.pro',
|
||||
'proguard-square-okhttp.pro',
|
||||
'proguard-square-okio.pro',
|
||||
'proguard-spongycastle.pro',
|
||||
'proguard-rounded-image-view.pro',
|
||||
'proguard-glide.pro',
|
||||
'proguard-shortcutbadger.pro',
|
||||
'proguard-retrofit.pro',
|
||||
'proguard-webrtc.pro',
|
||||
'proguard-klinker.pro',
|
||||
'proguard-retrolambda.pro',
|
||||
'proguard-okhttp.pro',
|
||||
'proguard-ez-vcard.pro',
|
||||
'proguard.cfg'
|
||||
testProguardFiles 'proguard-automation.pro',
|
||||
'proguard.cfg'
|
||||
applicationIdSuffix ".beta"
|
||||
}
|
||||
release {
|
||||
minifyEnabled true
|
||||
@@ -331,18 +172,12 @@ android {
|
||||
}
|
||||
|
||||
productFlavors {
|
||||
play {
|
||||
fat {
|
||||
dimension "none"
|
||||
ext.websiteUpdateUrl = "null"
|
||||
buildConfigField "boolean", "PLAY_STORE_DISABLED", "false"
|
||||
buildConfigField "String", "NOPLAY_UPDATE_URL", "$ext.websiteUpdateUrl"
|
||||
}
|
||||
|
||||
website {
|
||||
gplay {
|
||||
dimension "none"
|
||||
ext.websiteUpdateUrl = "https://updates.signal.org/android"
|
||||
buildConfigField "boolean", "PLAY_STORE_DISABLED", "true"
|
||||
buildConfigField "String", "NOPLAY_UPDATE_URL", "\"$ext.websiteUpdateUrl\""
|
||||
applicationId "chat.delta"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,99 +198,12 @@ android {
|
||||
assets.srcDirs = ['assets']
|
||||
jniLibs.srcDirs = ['libs']
|
||||
}
|
||||
androidTest {
|
||||
java.srcDirs = ['test/androidTest/java']
|
||||
}
|
||||
test {
|
||||
java.srcDirs = ['test/unitTest/java']
|
||||
java.srcDirs = ['test']
|
||||
}
|
||||
|
||||
website.manifest.srcFile 'website/AndroidManifest.xml'
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
}
|
||||
|
||||
task assembleWebsiteDescriptor << {
|
||||
android.applicationVariants.all { variant ->
|
||||
if (variant.name.equals("websiteDebug") ||
|
||||
variant.name.equals("websiteRelease"))
|
||||
{
|
||||
File file = new File(variant.outputs[0].outputFile.path)
|
||||
|
||||
if (file.exists()) {
|
||||
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
||||
file.eachByte 4096, {bytes, size ->
|
||||
md.update(bytes, 0, size);
|
||||
}
|
||||
|
||||
String digest = md.digest().collect {String.format "%02x", it}.join();
|
||||
String url = variant.productFlavors.get(0).ext.websiteUpdateUrl
|
||||
String apkName = variant.outputs[0].outputFile.name
|
||||
|
||||
String descriptor = "{" +
|
||||
"\"versionCode\" : $project.android.defaultConfig.versionCode," +
|
||||
"\"versionName\" : \"$project.android.defaultConfig.versionName\"," +
|
||||
"\"sha256sum\" : \"$digest\"," +
|
||||
"\"url\" : \"$url/$apkName\"" +
|
||||
"}"
|
||||
|
||||
File descriptorFile = new File(variant.outputs[0].outputFile.parent, apkName.replace(".apk", ".json"))
|
||||
|
||||
descriptorFile.write(descriptor)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.whenTaskAdded { task ->
|
||||
if (task.name.equals("lint")) {
|
||||
task.enabled = false
|
||||
}
|
||||
|
||||
if (task.name.equals("assembleWebsiteDebug") ||
|
||||
task.name.equals("assembleWebsiteRelease"))
|
||||
{
|
||||
task.finalizedBy assembleWebsiteDescriptor
|
||||
}
|
||||
}
|
||||
|
||||
def getLastCommitTimestamp() {
|
||||
new ByteArrayOutputStream().withStream { os ->
|
||||
def result = exec {
|
||||
executable = 'git'
|
||||
args = ['log', '-1', '--pretty=format:%ct']
|
||||
standardOutput = os
|
||||
}
|
||||
|
||||
return os.toString() + "000"
|
||||
}
|
||||
}
|
||||
|
||||
def Properties props = new Properties()
|
||||
def propFile = new File('signing.properties')
|
||||
|
||||
if (propFile.canRead()){
|
||||
props.load(new FileInputStream(propFile))
|
||||
|
||||
if (props !=null &&
|
||||
props.containsKey('STORE_FILE') &&
|
||||
props.containsKey('STORE_PASSWORD') &&
|
||||
props.containsKey('KEY_ALIAS') &&
|
||||
props.containsKey('KEY_PASSWORD'))
|
||||
{
|
||||
android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
|
||||
android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
|
||||
android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
|
||||
android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
|
||||
} else {
|
||||
println 'signing.properties found but some entries are missing'
|
||||
android.buildTypes.release.signingConfig = null
|
||||
}
|
||||
}else {
|
||||
println 'signing.properties not found'
|
||||
android.buildTypes.release.signingConfig = null
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
# F-Droid - Overview
|
||||
|
||||
- https://gitlab.com/fdroid/fdroiddata/blob/master/metadata/com.b44t.messenger.yml
|
||||
contains the descripion and all meta data shown for Delta Chat on F-Droid
|
||||
|
||||
- when a new tag in the form `v1.2.3` is added to the deltachat-android repo,
|
||||
F-Droid will pick up this version and distribute it -
|
||||
this may take some days or even weeks.
|
||||
before creating a new version, please have a look at docs/release-checklist.md
|
||||
|
||||
|
||||
# F-Droid Build status
|
||||
|
||||
- <https://f-droid.org/wiki/page/com.b44t.messenger/lastbuild>
|
||||
shows the last build attempt
|
||||
|
||||
- <https://f-droid.org/repo/com.b44t.messenger_VERSIONCODE.apk>
|
||||
(with VERSIONCODE = 537 or so) links to successfully built apk
|
||||
even if it is not yet in the index (which may take some more time).
|
||||
|
||||
|
||||
# Use F-Droid-tools locally
|
||||
|
||||
$ git clone https://gitlab.com/fdroid/fdroiddata
|
||||
$ git clone https://gitlab.com/fdroid/fdroidserver
|
||||
$ cd fdroiddata
|
||||
|
||||
now, metadata/com.b44t.messenger.txt can be modified.
|
||||
for testing, one can change the repo to a branch
|
||||
by adding the line `Update Check Mode:RepoManifest/BRANCH` to the file.
|
||||
|
||||
set some path to ndk etc:
|
||||
$ cp ../fdroidserver/examples/config.py . # adapt file as needed
|
||||
|
||||
checkout repo as f-droid would do:
|
||||
$ ../fdroidserver/fdroid checkupdates -v com.b44t.messenger
|
||||
(for testing with uncommited changes, add --allow-dirty)
|
||||
|
||||
build repo as f-droid would do:
|
||||
$ ../froidserver/fdroid build -v com.b44t.messenger:<versionCode>
|
||||
|
||||
(via https://f-droid.org/docs/Installing_the_Server_and_Repo_Tools/
|
||||
and https://f-droid.org/docs/Building_Applications/ -
|
||||
might require `pip install pyasn1 pyasn1_modules pyaml requests`)
|
||||
|
||||
|
||||
# Changing the Description on F-Droid
|
||||
|
||||
- the description can be changed via a PR to the file above
|
||||
|
||||
- make sure there is a "newline" at the end of the description
|
||||
(see https://gitlab.com/fdroid/fdroiddata/merge_requests/3580)
|
||||
|
||||
- reformat the metadata using
|
||||
$ ../fdroidserver/fdroid rewritemeta com.b44t.messenger # called from fdroiddata dir
|
||||
|
||||
|
After Width: | Height: | Size: 443 KiB |
|
After Width: | Height: | Size: 99 KiB |
@@ -0,0 +1,14 @@
|
||||
# Google Play Store
|
||||
|
||||
If you have access to uploading and signing apks,
|
||||
this can be done at
|
||||
https://play.google.com/apps/publish/
|
||||
|
||||
The description can be discussed and changed at
|
||||
https://github.com/deltachat/deltachat-android/blob/master/store/text.md
|
||||
In future, we can also add the screenshots or other assets there.
|
||||
|
||||
|
||||
# Google Play Releases
|
||||
|
||||
see `release-checklist.md`
|
||||
@@ -0,0 +1,45 @@
|
||||
# Release new F-Droid version
|
||||
|
||||
Release core, if needed, then:
|
||||
|
||||
1. $ ./tools/update-core.sh
|
||||
2. $ tx pull # test and commit changes
|
||||
3. bump version, adapt changelog, commit
|
||||
4. deltachat-android on Github: "Draft a new release" with the version form `v1.2.3`
|
||||
|
||||
... some days later, F-Droid should be updated.
|
||||
|
||||
|
||||
# Release new Play Store version
|
||||
|
||||
Release core, f-droid, then:
|
||||
|
||||
5. In Android Studio, select "Build / Generate signed APK"
|
||||
(not: App Bundle as this would require uploading the signing key to Google)
|
||||
6. Select flavor `gplayRelease` with V1 signature enabled
|
||||
(needed for easy APK verificarion), V2 is optional
|
||||
7. Test the generated APK from `gplay/release`
|
||||
8. Upload the APK to https://play.google.com/apps/publish/
|
||||
|
||||
|
||||
# For an additional APK
|
||||
|
||||
9. In Android Studio make sure, the target is fatDebug
|
||||
and select "Build / Build APK"
|
||||
(TODO: or also use the release signing key)
|
||||
10. Upload the generated APK to the created Github release
|
||||
|
||||
|
||||
# Testing checklist
|
||||
|
||||
Only some rough ideas, ideally, this should result into a simple checklist
|
||||
that can be checked before releasing.
|
||||
However, although it would be nice to test "everything", we should keep in mind
|
||||
that the test should be doable in, say, 10~15 minutes.
|
||||
- create new account with (one of?): gmail, yandex, other
|
||||
or (?) test an existing account
|
||||
- send and receive a message
|
||||
- create a group
|
||||
- do a contact verification
|
||||
- join a group via a qr scan
|
||||
|
||||
@@ -898,11 +898,15 @@ messenger-backend/src/dc_contact.c \
|
||||
messenger-backend/src/dc_dehtml.c \
|
||||
messenger-backend/src/dc_hash.c \
|
||||
messenger-backend/src/dc_imap.c \
|
||||
messenger-backend/src/dc_oauth2.c \
|
||||
messenger-backend/src/dc_job.c \
|
||||
messenger-backend/src/dc_jobthread.c \
|
||||
messenger-backend/src/dc_key.c \
|
||||
messenger-backend/src/dc_keyring.c \
|
||||
messenger-backend/src/dc_loginparam.c \
|
||||
messenger-backend/src/dc_lot.c \
|
||||
messenger-backend/src/dc_move.c \
|
||||
messenger-backend/src/dc_location.c \
|
||||
messenger-backend/src/dc_context.c \
|
||||
messenger-backend/src/dc_configure.c \
|
||||
messenger-backend/src/dc_e2ee.c \
|
||||
@@ -919,6 +923,7 @@ messenger-backend/src/dc_msg.c \
|
||||
messenger-backend/src/dc_param.c \
|
||||
messenger-backend/src/dc_pgp.c \
|
||||
messenger-backend/src/dc_saxparser.c \
|
||||
messenger-backend/src/dc_jsmn.c \
|
||||
messenger-backend/src/dc_simplify.c \
|
||||
messenger-backend/src/dc_smtp.c \
|
||||
messenger-backend/src/dc_sqlite3.c \
|
||||
|
||||
@@ -64,8 +64,15 @@ static jstring jstring_new__(JNIEnv* env, const char* a)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// convert c-timestamp to java-timestamp
|
||||
#define JTIMESTAMP(a) (((jlong)a)*((jlong)1000))
|
||||
|
||||
|
||||
// convert java-timestamp to c-timestamp
|
||||
#define CTIMESTAMP(a) (((jlong)a)/((jlong)1000))
|
||||
|
||||
|
||||
static jintArray dc_array2jintArray_n_unref(JNIEnv *env, dc_array_t* ca)
|
||||
{
|
||||
/* takes a C-array of type dc_array_t and converts it it a Java-Array.
|
||||
@@ -262,6 +269,42 @@ JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptImapIdle(JNIEnv *env,
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_performSentboxFetch(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_perform_sentbox_fetch(get_dc_context(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_performSentboxIdle(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_perform_sentbox_idle(get_dc_context(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptSentboxIdle(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_interrupt_sentbox_idle(get_dc_context(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_performMvboxFetch(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_perform_mvbox_fetch(get_dc_context(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_performMvboxIdle(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_perform_mvbox_idle(get_dc_context(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptMvboxIdle(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_interrupt_mvbox_idle(get_dc_context(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpJobs(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_perform_smtp_jobs(get_dc_context(env, obj));
|
||||
@@ -452,11 +495,15 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_removeContactFromChat(JNIEnv *e
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_setDraft(JNIEnv *env, jobject obj, jint chat_id, jstring draft /* NULL=delete */)
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_setDraft(JNIEnv *env, jobject obj, jint chat_id, jobject msg /* NULL=delete */)
|
||||
{
|
||||
CHAR_REF(draft);
|
||||
dc_set_text_draft(get_dc_context(env, obj), chat_id, draftPtr /* NULL=delete */);
|
||||
CHAR_UNREF(draft);
|
||||
dc_set_draft(get_dc_context(env, obj), chat_id, get_dc_msg(env, msg));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jlong Java_com_b44t_messenger_DcContext_getDraftCPtr(JNIEnv *env, jobject obj, jint chat_id)
|
||||
{
|
||||
return (jlong)dc_get_draft(get_dc_context(env, obj), chat_id);
|
||||
}
|
||||
|
||||
|
||||
@@ -559,7 +606,7 @@ JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfig(JNIEnv *env, jobject
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getConfig(JNIEnv *env, jobject obj, jstring key, jstring def/*may be NULL*/)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getConfig(JNIEnv *env, jobject obj, jstring key)
|
||||
{
|
||||
CHAR_REF(key);
|
||||
char* temp = dc_get_config(get_dc_context(env, obj), keyPtr);
|
||||
@@ -611,6 +658,19 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getInfo(JNIEnv *env, jobject
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getOauth2Url(JNIEnv *env, jobject obj, jstring addr, jstring redirectUrl)
|
||||
{
|
||||
CHAR_REF(addr);
|
||||
CHAR_REF(redirectUrl);
|
||||
char* temp = dc_get_oauth2_url(get_dc_context(env, obj), addrPtr, redirectUrlPtr);
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
CHAR_UNREF(redirectUrl);
|
||||
CHAR_UNREF(addr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getContactEncrInfo(JNIEnv *env, jobject obj, jint contact_id)
|
||||
{
|
||||
char* temp = dc_get_contact_encrinfo(get_dc_context(env, obj), contact_id);
|
||||
@@ -681,6 +741,114 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_addAddressBook(JNIEnv *env, job
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_sendLocationsToChat(JNIEnv *env, jobject obj, jint chat_id, jint seconds)
|
||||
{
|
||||
dc_send_locations_to_chat(get_dc_context(env, obj), chat_id, seconds);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_isSendingLocationsToChat(JNIEnv *env, jobject obj, jint chat_id)
|
||||
{
|
||||
return (dc_is_sending_locations_to_chat(get_dc_context(env, obj), chat_id)!=0);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_setLocation(JNIEnv *env, jobject obj, jfloat latitude, jfloat longitude, jfloat accuracy)
|
||||
{
|
||||
return (dc_set_location(get_dc_context(env, obj), latitude, longitude, accuracy)!=0);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jlong Java_com_b44t_messenger_DcContext_getLocationsCPtr(JNIEnv *env, jobject obj, jint chat_id, jint contact_id, jlong timestamp_start, jlong timestamp_end)
|
||||
{
|
||||
return (jlong)dc_get_locations(get_dc_context(env, obj), chat_id, contact_id, CTIMESTAMP(timestamp_start), CTIMESTAMP(timestamp_end));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteAllLocations(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_delete_all_locations(get_dc_context(env, obj));
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* DcArray
|
||||
******************************************************************************/
|
||||
|
||||
|
||||
static dc_array_t* get_dc_array(JNIEnv *env, jobject obj)
|
||||
{
|
||||
static jfieldID fid = 0;
|
||||
if (fid==0) {
|
||||
jclass cls = (*env)->GetObjectClass(env, obj);
|
||||
fid = (*env)->GetFieldID(env, cls, "arrayCPtr", "J" /*Signature, J=long*/);
|
||||
}
|
||||
if (fid) {
|
||||
return (dc_array_t*)(*env)->GetLongField(env, obj, fid);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcArray_unrefArrayCPtr(JNIEnv *env, jobject obj)
|
||||
{
|
||||
dc_array_unref(get_dc_array(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcArray_getCnt(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_array_get_cnt(get_dc_array(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jfloat Java_com_b44t_messenger_DcArray_getLatitude(JNIEnv *env, jobject obj, jint index)
|
||||
{
|
||||
return (jfloat)dc_array_get_latitude(get_dc_array(env, obj), index);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jfloat Java_com_b44t_messenger_DcArray_getLongitude(JNIEnv *env, jobject obj, jint index)
|
||||
{
|
||||
return (jfloat)dc_array_get_longitude(get_dc_array(env, obj), index);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jfloat Java_com_b44t_messenger_DcArray_getAccuracy(JNIEnv *env, jobject obj, jint index)
|
||||
{
|
||||
return (jfloat)dc_array_get_accuracy(get_dc_array(env, obj), index);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jlong Java_com_b44t_messenger_DcArray_getTimestamp(JNIEnv *env, jobject obj, jint index)
|
||||
{
|
||||
return JTIMESTAMP(dc_array_get_timestamp(get_dc_array(env, obj), index));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcArray_getMsgId(JNIEnv *env, jobject obj, jint index)
|
||||
{
|
||||
return dc_array_get_msg_id(get_dc_array(env, obj), index);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcArray_getLocationId(JNIEnv *env, jobject obj, jint index)
|
||||
{
|
||||
return dc_array_get_id(get_dc_array(env, obj), index);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcArray_getMarker(JNIEnv *env, jobject obj, jint index)
|
||||
{
|
||||
char* temp = dc_array_get_marker(get_dc_array(env, obj), index);
|
||||
jstring ret = NULL;
|
||||
if (temp) {
|
||||
ret = JSTRING_NEW(temp);
|
||||
}
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* DcChatlist
|
||||
@@ -816,6 +984,12 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcChat_getProfileImage(JNIEnv *env, jo
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcChat_getColor(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_chat_get_color(get_dc_chat(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isUnpromoted(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_chat_is_unpromoted(get_dc_chat(env, obj))!=0;
|
||||
@@ -834,31 +1008,22 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isVerified(JNIEnv *env, jobjec
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcChat_getDraft(JNIEnv *env, jobject obj) /* returns NULL for "no draft" */
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isSendingLocations(JNIEnv *env, jobject obj)
|
||||
{
|
||||
const char* temp = dc_chat_get_text_draft(get_dc_chat(env, obj));
|
||||
jstring ret = temp? JSTRING_NEW(temp) : NULL;
|
||||
free(temp);
|
||||
return ret;
|
||||
return dc_chat_is_sending_locations(get_dc_chat(env, obj))!=0;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jlong Java_com_b44t_messenger_DcChat_getDraftTimestamp(JNIEnv *env, jobject obj)
|
||||
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMedia(JNIEnv *env, jobject obj, jint chat_id, jint type1, jint type2, jint type3)
|
||||
{
|
||||
return JTIMESTAMP(dc_chat_get_draft_timestamp(get_dc_chat(env, obj)));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMedia(JNIEnv *env, jobject obj, jint chat_id, jint msg_type, jint or_msg_type)
|
||||
{
|
||||
dc_array_t* ca = dc_get_chat_media(get_dc_context(env, obj), chat_id, msg_type, or_msg_type);
|
||||
dc_array_t* ca = dc_get_chat_media(get_dc_context(env, obj), chat_id, type1, type2, type3);
|
||||
return dc_array2jintArray_n_unref(env, ca);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcContext_getNextMedia(JNIEnv *env, jobject obj, jint msg_id, jint dir)
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcContext_getNextMedia(JNIEnv *env, jobject obj, jint msg_id, jint dir, jint type1, jint type2, jint type3)
|
||||
{
|
||||
return dc_get_next_media(get_dc_context(env, obj), msg_id, dir);
|
||||
return dc_get_next_media(get_dc_context(env, obj), msg_id, dir, type1, type2, type3);
|
||||
}
|
||||
|
||||
|
||||
@@ -900,12 +1065,14 @@ JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatContacts(JNIEnv *en
|
||||
static dc_msg_t* get_dc_msg(JNIEnv *env, jobject obj)
|
||||
{
|
||||
static jfieldID fid = 0;
|
||||
if (fid==0) {
|
||||
jclass cls = (*env)->GetObjectClass(env, obj);
|
||||
fid = (*env)->GetFieldID(env, cls, "msgCPtr", "J" /*Signature, J=long*/);
|
||||
}
|
||||
if (fid) {
|
||||
return (dc_msg_t*)(*env)->GetLongField(env, obj, fid);
|
||||
if (env && obj) {
|
||||
if (fid==0) {
|
||||
jclass cls = (*env)->GetObjectClass(env, obj);
|
||||
fid = (*env)->GetFieldID(env, cls, "msgCPtr", "J" /*Signature, J=long*/);
|
||||
}
|
||||
if (fid) {
|
||||
return (dc_msg_t*)(*env)->GetLongField(env, obj, fid);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -938,6 +1105,18 @@ JNIEXPORT jlong Java_com_b44t_messenger_DcMsg_getTimestamp(JNIEnv *env, jobject
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jlong Java_com_b44t_messenger_DcMsg_getSortTimestamp(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return JTIMESTAMP(dc_msg_get_sort_timestamp(get_dc_msg(env, obj)));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_hasDeviatingTimestamp(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_has_deviating_timestamp(get_dc_msg(env, obj))!=0;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getType(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_msg_get_viewtype(get_dc_msg(env, obj));
|
||||
@@ -1183,7 +1362,16 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getNameNAddr(JNIEnv *env, jo
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getProfileImage(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return JSTRING_NEW("");
|
||||
const char* temp = dc_contact_get_profile_image(get_dc_contact(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_DcContact_getColor(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return dc_contact_get_color(get_dc_contact(env, obj));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,907 +0,0 @@
|
||||
From e6d913938a67f8ef3174722a7ce38be8be92305f Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <e6d913938a67f8ef3174722a7ce38be8be92305f.1534410135.git.daniel.boehrs@open-xchange.com>
|
||||
In-Reply-To: <371694c11a8b1192ef5230b98af3a5719add98ef.1534410134.git.daniel.boehrs@open-xchange.com>
|
||||
References: <371694c11a8b1192ef5230b98af3a5719add98ef.1534410134.git.daniel.boehrs@open-xchange.com>
|
||||
From: "B. Petersen" <r10s@b44t.com>
|
||||
Date: Fri, 27 Jul 2018 17:12:43 +0200
|
||||
Subject: [PATCH 5/6] add java-binding-classes
|
||||
|
||||
---
|
||||
src/com/b44t/messenger/MrChat.java | 87 ++++++
|
||||
src/com/b44t/messenger/MrChatlist.java | 64 +++++
|
||||
src/com/b44t/messenger/MrContact.java | 57 ++++
|
||||
src/com/b44t/messenger/MrLot.java | 56 ++++
|
||||
src/com/b44t/messenger/MrMailbox.java | 485 +++++++++++++++++++++++++++++++++
|
||||
src/com/b44t/messenger/MrMsg.java | 102 +++++++
|
||||
6 files changed, 851 insertions(+)
|
||||
|
||||
diff --git a/src/com/b44t/messenger/MrChat.java b/src/com/b44t/messenger/MrChat.java
|
||||
new file mode 100644
|
||||
index 0000000..2165182
|
||||
--- /dev/null
|
||||
+++ b/src/com/b44t/messenger/MrChat.java
|
||||
@@ -0,0 +1,87 @@
|
||||
+/*******************************************************************************
|
||||
+ *
|
||||
+ * Delta Chat Android
|
||||
+ * (C) 2017 Björn Petersen
|
||||
+ * Contact: r10s@b44t.com, http://b44t.com
|
||||
+ *
|
||||
+ * This program is free software: you can redistribute it and/or modify it under
|
||||
+ * the terms of the GNU General Public License as published by the Free Software
|
||||
+ * Foundation, either version 3 of the License, or (at your option) any later
|
||||
+ * version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
+ * details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along with
|
||||
+ * this program. If not, see http://www.gnu.org/licenses/ .
|
||||
+ *
|
||||
+ *******************************************************************************
|
||||
+ *
|
||||
+ * File: MrChat.java
|
||||
+ * Purpose: Wrap around mrchat_t
|
||||
+ *
|
||||
+ ******************************************************************************/
|
||||
+
|
||||
+package com.b44t.messenger;
|
||||
+
|
||||
+import android.text.TextUtils;
|
||||
+
|
||||
+public class MrChat {
|
||||
+
|
||||
+ public final static int MR_CHAT_ID_DEADDROP = 1;
|
||||
+ public final static int MR_CHAT_ID_STARRED = 5;
|
||||
+ public final static int MR_CHAT_ID_ARCHIVED_LINK = 6;
|
||||
+ public final static int MR_CHAT_ID_LAST_SPECIAL = 9;
|
||||
+
|
||||
+ public MrChat(long hChat) {
|
||||
+ m_hChat = hChat;
|
||||
+ }
|
||||
+
|
||||
+ @Override protected void finalize() throws Throwable {
|
||||
+ super.finalize();
|
||||
+ MrChatUnref(m_hChat);
|
||||
+ m_hChat = 0;
|
||||
+ }
|
||||
+
|
||||
+ public native int getId();
|
||||
+ public native boolean isGroup();
|
||||
+ public native int getArchived();
|
||||
+ public native String getName();
|
||||
+ public native String getSubtitle();
|
||||
+
|
||||
+ public native String getProfileImage();
|
||||
+ public native boolean isUnpromoted();
|
||||
+ public native boolean isSelfTalk();
|
||||
+ public native boolean isVerified();
|
||||
+ public native String getDraft();
|
||||
+ public native long getDraftTimestamp();
|
||||
+
|
||||
+ private long m_hChat; // must not be renamed as referenced by JNI under the name "m_hChat"
|
||||
+ private native static void MrChatUnref (long hChat);
|
||||
+
|
||||
+
|
||||
+ /* additional functions that are not 1:1 available in the backend
|
||||
+ **********************************************************************************************/
|
||||
+
|
||||
+ public long getCPtr() {
|
||||
+ return m_hChat;
|
||||
+ }
|
||||
+
|
||||
+ public String getNameNAddr()
|
||||
+ {
|
||||
+ // returns name of group chats or name+email-address for normal chats
|
||||
+ String name = "ErrGrpNameNAddr";
|
||||
+ if( isGroup() ) {
|
||||
+ name = getName();
|
||||
+ }
|
||||
+ else {
|
||||
+ int contacts[] = MrMailbox.getChatContacts(getId());
|
||||
+ if( contacts.length==1 ) {
|
||||
+ name = MrMailbox.getContact(contacts[0]).getNameNAddr();
|
||||
+ }
|
||||
+ }
|
||||
+ return name;
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/com/b44t/messenger/MrChatlist.java b/src/com/b44t/messenger/MrChatlist.java
|
||||
new file mode 100644
|
||||
index 0000000..c9194e7
|
||||
--- /dev/null
|
||||
+++ b/src/com/b44t/messenger/MrChatlist.java
|
||||
@@ -0,0 +1,64 @@
|
||||
+/*******************************************************************************
|
||||
+ *
|
||||
+ * Delta Chat Android
|
||||
+ * (C) 2017 Björn Petersen
|
||||
+ * Contact: r10s@b44t.com, http://b44t.com
|
||||
+ *
|
||||
+ * This program is free software: you can redistribute it and/or modify it under
|
||||
+ * the terms of the GNU General Public License as published by the Free Software
|
||||
+ * Foundation, either version 3 of the License, or (at your option) any later
|
||||
+ * version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
+ * details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along with
|
||||
+ * this program. If not, see http://www.gnu.org/licenses/ .
|
||||
+ *
|
||||
+ *******************************************************************************
|
||||
+ *
|
||||
+ * File: MrChatlist.java
|
||||
+ * Purpose: Wrap around mrchatlist_t
|
||||
+ *
|
||||
+ ******************************************************************************/
|
||||
+
|
||||
+
|
||||
+package com.b44t.messenger;
|
||||
+
|
||||
+
|
||||
+public class MrChatlist {
|
||||
+ public MrChatlist(long hChatlist) {
|
||||
+ m_hChatlist = hChatlist;
|
||||
+ }
|
||||
+
|
||||
+ @Override protected void finalize() throws Throwable {
|
||||
+ super.finalize();
|
||||
+ MrChatlistUnref(m_hChatlist);
|
||||
+ m_hChatlist = 0;
|
||||
+ }
|
||||
+
|
||||
+ public int getCnt() {
|
||||
+ return MrChatlistGetCnt(m_hChatlist);
|
||||
+ }
|
||||
+
|
||||
+ public MrChat getChatByIndex(int index) {
|
||||
+ return new MrChat(MrChatlistGetChatByIndex(m_hChatlist, index));
|
||||
+ }
|
||||
+
|
||||
+ public MrMsg getMsgByIndex(int index) {
|
||||
+ return new MrMsg(MrChatlistGetMsgByIndex(m_hChatlist, index));
|
||||
+ }
|
||||
+
|
||||
+ public MrLot getSummaryByIndex(int index, MrChat chat) {
|
||||
+ return new MrLot(MrChatlistGetSummaryByIndex(m_hChatlist, index, chat.getCPtr()));
|
||||
+ }
|
||||
+
|
||||
+ private long m_hChatlist;
|
||||
+ private native static void MrChatlistUnref (long hChatlist);
|
||||
+ private native static int MrChatlistGetCnt (long hChatlist);
|
||||
+ private native static long MrChatlistGetChatByIndex (long hChatlist, int index); // returns hChat which must be unref'd after usage
|
||||
+ private native static long MrChatlistGetMsgByIndex (long hChatlist, int index); // returns hMsg which must be unref'd after usage
|
||||
+ private native static long MrChatlistGetSummaryByIndex(long hChatlist, int index, long hChat);
|
||||
+}
|
||||
diff --git a/src/com/b44t/messenger/MrContact.java b/src/com/b44t/messenger/MrContact.java
|
||||
new file mode 100644
|
||||
index 0000000..9ad568b
|
||||
--- /dev/null
|
||||
+++ b/src/com/b44t/messenger/MrContact.java
|
||||
@@ -0,0 +1,57 @@
|
||||
+/*******************************************************************************
|
||||
+ *
|
||||
+ * Delta Chat Android
|
||||
+ * (C) 2017 Björn Petersen
|
||||
+ * Contact: r10s@b44t.com, http://b44t.com
|
||||
+ *
|
||||
+ * This program is free software: you can redistribute it and/or modify it under
|
||||
+ * the terms of the GNU General Public License as published by the Free Software
|
||||
+ * Foundation, either version 3 of the License, or (at your option) any later
|
||||
+ * version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
+ * details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along with
|
||||
+ * this program. If not, see http://www.gnu.org/licenses/ .
|
||||
+ *
|
||||
+ *******************************************************************************
|
||||
+ *
|
||||
+ * File: MrContact.java
|
||||
+ * Purpose: Wrap around mrcontact_t
|
||||
+ *
|
||||
+ ******************************************************************************/
|
||||
+
|
||||
+
|
||||
+package com.b44t.messenger;
|
||||
+
|
||||
+
|
||||
+public class MrContact {
|
||||
+
|
||||
+ public final static int MR_CONTACT_ID_SELF = 1;
|
||||
+ public final static int MR_CONTACT_ID_DEVICE = 2;
|
||||
+ public final static int MR_CONTACT_ID_LAST_SPECIAL = 9;
|
||||
+
|
||||
+ public MrContact(long hContact) {
|
||||
+ m_hContact = hContact;
|
||||
+ }
|
||||
+
|
||||
+ @Override protected void finalize() throws Throwable {
|
||||
+ super.finalize();
|
||||
+ MrContactUnref(m_hContact);
|
||||
+ m_hContact = 0;
|
||||
+ }
|
||||
+
|
||||
+ public native String getName();
|
||||
+ public native String getDisplayName();
|
||||
+ public native String getFirstName();
|
||||
+ public native String getAddr();
|
||||
+ public native String getNameNAddr();
|
||||
+ public native boolean isBlocked();
|
||||
+ public native boolean isVerified();
|
||||
+
|
||||
+ private long m_hContact;
|
||||
+ private native static void MrContactUnref (long hContact);
|
||||
+}
|
||||
diff --git a/src/com/b44t/messenger/MrLot.java b/src/com/b44t/messenger/MrLot.java
|
||||
new file mode 100644
|
||||
index 0000000..1e61f75
|
||||
--- /dev/null
|
||||
+++ b/src/com/b44t/messenger/MrLot.java
|
||||
@@ -0,0 +1,56 @@
|
||||
+/*******************************************************************************
|
||||
+ *
|
||||
+ * Delta Chat Android
|
||||
+ * (C) 2017 Björn Petersen
|
||||
+ * Contact: r10s@b44t.com, http://b44t.com
|
||||
+ *
|
||||
+ * This program is free software: you can redistribute it and/or modify it under
|
||||
+ * the terms of the GNU General Public License as published by the Free Software
|
||||
+ * Foundation, either version 3 of the License, or (at your option) any later
|
||||
+ * version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
+ * details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along with
|
||||
+ * this program. If not, see http://www.gnu.org/licenses/ .
|
||||
+ *
|
||||
+ *******************************************************************************
|
||||
+ *
|
||||
+ * File: MrLot.java
|
||||
+ * Purpose: Wrap around mrpoortext_t
|
||||
+ *
|
||||
+ ******************************************************************************/
|
||||
+
|
||||
+
|
||||
+package com.b44t.messenger;
|
||||
+
|
||||
+
|
||||
+public class MrLot {
|
||||
+
|
||||
+ public final static int MR_TEXT1_DRAFT = 1;
|
||||
+ public final static int MR_TEXT1_USERNAME = 2;
|
||||
+ public final static int MR_TEXT1_SELF = 3;
|
||||
+
|
||||
+ public MrLot(long hLot) {
|
||||
+ m_hLot = hLot;
|
||||
+ }
|
||||
+
|
||||
+ @Override protected void finalize() throws Throwable {
|
||||
+ super.finalize();
|
||||
+ MrLotUnref(m_hLot);
|
||||
+ m_hLot = 0;
|
||||
+ }
|
||||
+
|
||||
+ public native String getText1();
|
||||
+ public native int getText1Meaning();
|
||||
+ public native String getText2();
|
||||
+ public native long getTimestamp();
|
||||
+ public native int getState();
|
||||
+ public native int getId();
|
||||
+
|
||||
+ private long m_hLot;
|
||||
+ private native static void MrLotUnref(long hLot);
|
||||
+}
|
||||
diff --git a/src/com/b44t/messenger/MrMailbox.java b/src/com/b44t/messenger/MrMailbox.java
|
||||
new file mode 100644
|
||||
index 0000000..be11d67
|
||||
--- /dev/null
|
||||
+++ b/src/com/b44t/messenger/MrMailbox.java
|
||||
@@ -0,0 +1,485 @@
|
||||
+/*******************************************************************************
|
||||
+ *
|
||||
+ * Delta Chat Android
|
||||
+ * (C) 2017 Björn Petersen
|
||||
+ * Contact: r10s@b44t.com, http://b44t.com
|
||||
+ *
|
||||
+ * This program is free software: you can redistribute it and/or modify it under
|
||||
+ * the terms of the GNU General Public License as published by the Free Software
|
||||
+ * Foundation, either version 3 of the License, or (at your option) any later
|
||||
+ * version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
+ * details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along with
|
||||
+ * this program. If not, see http://www.gnu.org/licenses/ .
|
||||
+ *
|
||||
+ *******************************************************************************
|
||||
+ *
|
||||
+ * File: MrMailbox.java
|
||||
+ * Purpose: Wrap around mrmailbox_t
|
||||
+ *
|
||||
+ ******************************************************************************/
|
||||
+
|
||||
+
|
||||
+package com.b44t.messenger;
|
||||
+
|
||||
+
|
||||
+import android.app.Activity;
|
||||
+import android.content.SharedPreferences;
|
||||
+import android.util.Log;
|
||||
+
|
||||
+import java.io.BufferedInputStream;
|
||||
+import java.io.BufferedReader;
|
||||
+import java.io.InputStream;
|
||||
+import java.io.InputStreamReader;
|
||||
+import java.net.HttpURLConnection;
|
||||
+import java.net.URL;
|
||||
+
|
||||
+public class MrMailbox {
|
||||
+
|
||||
+ public static void init () {
|
||||
+ m_hMailbox = MrMailboxNew();
|
||||
+ }
|
||||
+
|
||||
+ public native static int open(String dbfile);
|
||||
+ public native static void close();
|
||||
+ public native static String getBlobdir();
|
||||
+
|
||||
+ public native static void configure();
|
||||
+ public native static void stopOngoingProcess();
|
||||
+
|
||||
+ public native static int isConfigured();
|
||||
+
|
||||
+ public native static void performJobs();
|
||||
+ public native static void fetch();
|
||||
+ public native static void idle();
|
||||
+ public native static void interruptIdle();
|
||||
+
|
||||
+ public native static void performSmtpJobs();
|
||||
+ public native static void performSmtpIdle();
|
||||
+ public native static void interruptSmtpIdle();
|
||||
+
|
||||
+ public native static void setConfig(String key, String value);
|
||||
+ public native static void setConfigInt(String key, int value);
|
||||
+ public native static String getConfig(String key, String def);
|
||||
+ public native static int getConfigInt(String key, int def);
|
||||
+
|
||||
+ public native static String getInfo();
|
||||
+ public native static String cmdline(String cmd);
|
||||
+
|
||||
+ public native static String initiateKeyTransfer();
|
||||
+ public native static boolean continueKeyTransfer(int msg_id, String setup_code);
|
||||
+ public final static int MR_IMEX_EXPORT_SELF_KEYS = 1;
|
||||
+ public final static int MR_IMEX_IMPORT_SELF_KEYS = 2;
|
||||
+ public final static int MR_IMEX_EXPORT_BACKUP = 11;
|
||||
+ public final static int MR_IMEX_IMPORT_BACKUP = 12;
|
||||
+ public native static void imex(int what, String dir);
|
||||
+ public native static String imexHasBackup(String dir);
|
||||
+ public native static int checkPassword(String pw);
|
||||
+
|
||||
+ private static long m_hMailbox = 0; // do not rename this, is used in C-part
|
||||
+ private native static long MrMailboxNew(); // returns hMailbox which must be unref'd after usage (Names as mrmailbox_new don't work due to the additional underscore)
|
||||
+
|
||||
+ // contacts
|
||||
+ public final static int MR_GCL_VERIFIED_ONLY = 1;
|
||||
+ public final static int MR_GCL_ADD_SELF = 2;
|
||||
+ public native static int[] getContacts(int flags, String query);
|
||||
+ public native static int getBlockedCount();
|
||||
+ public native static int[] getBlockedContacts();
|
||||
+
|
||||
+ public static MrContact getContact(int contact_id) {
|
||||
+ return new MrContact(MrMailboxGetContact(m_hMailbox, contact_id));
|
||||
+ }
|
||||
+
|
||||
+ public static int createContact(String name, String addr) {
|
||||
+ return MrMailboxCreateContact(m_hMailbox, name, addr);
|
||||
+ }
|
||||
+
|
||||
+ public static void blockContact(int id, int block) {
|
||||
+ MrMailboxBlockContact(m_hMailbox, id, block);
|
||||
+ }
|
||||
+
|
||||
+ public native static String getContactEncrInfo(int contact_id);
|
||||
+
|
||||
+ public static int deleteContact(int id) {
|
||||
+ return MrMailboxDeleteContact(m_hMailbox, id);
|
||||
+ }
|
||||
+
|
||||
+ public static int addAddressBook(String adrbook) {
|
||||
+ return MrMailboxAddAddressBook(m_hMailbox, adrbook);
|
||||
+ }
|
||||
+
|
||||
+ private native static long MrMailboxGetContact (long hMailbox, int id);// returns hContact which must be unref'd after usage
|
||||
+ private native static int MrMailboxCreateContact (long hMailbox, String name, String addr);
|
||||
+ private native static void MrMailboxBlockContact (long hMailbox, int id, int block);
|
||||
+ private native static int MrMailboxDeleteContact (long hMailbox, int id); // returns 0 if the contact could not be deleted (eg. it is in use, maybe by deaddrop)
|
||||
+ private native static int MrMailboxAddAddressBook (long hMailbox, String adrbook);
|
||||
+
|
||||
+
|
||||
+ // chats
|
||||
+ public final static int MR_GCL_ARCHIVED_ONLY = 0x01;
|
||||
+ public final static int MR_GCL_NO_SPECIALS = 0x02;
|
||||
+ public static MrChatlist getChatlist(int listflags, String query, int queryId) {
|
||||
+ return new MrChatlist(MrMailboxGetChatlist(m_hMailbox, listflags, query, queryId));
|
||||
+ }
|
||||
+
|
||||
+ public static MrChat getChat(int chat_id) {
|
||||
+ return new MrChat(MrMailboxGetChat(m_hMailbox, chat_id));
|
||||
+ }
|
||||
+
|
||||
+ public native static void markseenMsgs (int msg_ids[]);
|
||||
+ public native static void marknoticedChat (int chat_id);
|
||||
+ public native static void marknoticedContact (int contact_id);
|
||||
+ public native static void archiveChat (int chat_id, int archive);
|
||||
+
|
||||
+ public native static int getChatIdByContactId (int contact_id);
|
||||
+ public native static int createChatByContactId(int contact_id);
|
||||
+ public native static int createChatByMsgId (int msg_id);
|
||||
+
|
||||
+ public native static int createGroupChat (boolean verified, String name);
|
||||
+ public native static int isContactInChat (int chat_id, int contact_id);
|
||||
+ public native static int addContactToChat (int chat_id, int contact_id);
|
||||
+ public native static int removeContactFromChat (int chat_id, int contact_id);
|
||||
+ public native static void setDraft (int chat_id, String draft/*NULL=delete*/);
|
||||
+ public native static int setChatName (int chat_id, String name);
|
||||
+ public native static int setChatProfileImage (int chat_id, String name);
|
||||
+
|
||||
+ public final static int MR_GCM_ADDDAYMARKER = 0x01;
|
||||
+ public native static int[] getChatMsgs(int chat_id, int flags, int marker1before);
|
||||
+
|
||||
+ public native static int[] searchMsgs(int chat_id, String query);
|
||||
+
|
||||
+ public native static int[] getFreshMsgs();
|
||||
+
|
||||
+ public native static int[] getChatMedia(int chat_id, int msg_type, int or_msg_type);
|
||||
+ public native static int getNextMedia(int msg_id, int dir);
|
||||
+ public native static int[] getChatContacts(int chat_id);
|
||||
+ public native static void deleteChat(int chat_id);
|
||||
+
|
||||
+ private native static long MrMailboxGetChatlist (long hMailbox, int listflags, String query, int queryId); // returns hChatlist which must be unref'd after usage
|
||||
+ private native static long MrMailboxGetChat (long hMailbox, int chat_id); // return hChat which must be unref'd after usage
|
||||
+
|
||||
+
|
||||
+ // msgs
|
||||
+ public static MrMsg getMsg(int msg_id) {
|
||||
+ return new MrMsg(MrMailboxGetMsg(m_hMailbox, msg_id));
|
||||
+ }
|
||||
+
|
||||
+ public static String getMsgInfo(int id) {
|
||||
+ return MrMailboxGetMsgInfo(m_hMailbox, id);
|
||||
+ }
|
||||
+
|
||||
+ public static native int getFreshMsgCount(int chat_id);
|
||||
+
|
||||
+ public native static void deleteMsgs(int msg_ids[]);
|
||||
+ public native static void forwardMsgs(int msg_ids[], int chat_ids);
|
||||
+
|
||||
+ public native static int sendTextMsg(int chat_id, String text);
|
||||
+ public native static int sendVcardMsg(int chat_id, int contact_id);
|
||||
+ public native static int sendMediaMsg(int chat_id, int type, String file, String mime, int w, int h, int time_ms, String author, String trackname);
|
||||
+
|
||||
+ private native static long MrMailboxGetMsg (long hMailbox, int id); // return hMsg which must be unref'd after usage
|
||||
+ private native static String MrMailboxGetMsgInfo (long hMailbox, int id);
|
||||
+
|
||||
+ // out-of-band verification
|
||||
+ public final static int MR_QR_ASK_VERIFYCONTACT = 200;
|
||||
+ public final static int MR_QR_ASK_VERIFYGROUP = 202;
|
||||
+ public final static int MR_QR_FPR_OK = 210;
|
||||
+ public final static int MR_QR_FPR_MISMATCH = 220;
|
||||
+ public final static int MR_QR_FPR_WITHOUT_ADDR = 230;
|
||||
+ public final static int MR_QR_ADDR = 320;
|
||||
+ public final static int MR_QR_TEXT = 330;
|
||||
+ public final static int MR_QR_URL = 332;
|
||||
+ public final static int MR_QR_ERROR = 400;
|
||||
+ public native static int checkQrCPtr(String qr);
|
||||
+ public static MrLot checkQr(String qr) { return new MrLot(checkQrCPtr(qr)); }
|
||||
+
|
||||
+ public native static String getSecurejoinQr(int chat_id);
|
||||
+ public native static int joinSecurejoin(String qr);
|
||||
+
|
||||
+ // static
|
||||
+ public native static String MrGetVersionStr ();
|
||||
+ public native static String CPtr2String (long hString); // get strings eg. from data1 from the callback
|
||||
+ public native static long String2CPtr (String str);
|
||||
+
|
||||
+ /* receive events
|
||||
+ **********************************************************************************************/
|
||||
+
|
||||
+ public final static int MR_EVENT_INFO = 100;
|
||||
+ public final static int MR_EVENT_WARNING = 300;
|
||||
+ public final static int MR_EVENT_ERROR = 400; // INFO and WARNING are blocked in the mrwrapper.c
|
||||
+
|
||||
+ public final static int MR_EVENT_MSGS_CHANGED = 2000;
|
||||
+ public final static int MR_EVENT_INCOMING_MSG = 2005;
|
||||
+ public final static int MR_EVENT_MSG_DELIVERED = 2010;
|
||||
+ public final static int DC_EVENT_MSG_FAILED = 2012;
|
||||
+ public final static int MR_EVENT_MSG_READ = 2015;
|
||||
+
|
||||
+ public final static int MR_EVENT_CHAT_MODIFIED = 2020;
|
||||
+
|
||||
+ public final static int MR_EVENT_CONTACTS_CHANGED = 2030;
|
||||
+
|
||||
+ public final static int MR_EVENT_CONFIGURE_PROGRESS = 2041;
|
||||
+
|
||||
+ public final static int MR_EVENT_IMEX_PROGRESS = 2051;
|
||||
+ public final static int MR_EVENT_IMEX_FILE_WRITTEN = 2052;
|
||||
+
|
||||
+ public final static int MR_EVENT_SECUREJOIN_INVITER_PROGRESS = 2060;
|
||||
+ public final static int MR_EVENT_SECUREJOIN_JOINER_PROGRESS = 2061;
|
||||
+
|
||||
+ public final static int MR_EVENT_IS_OFFLINE = 2081;
|
||||
+ public final static int MR_EVENT_GET_STRING = 2091;
|
||||
+ public final static int MR_EVENT_GET_QUANTITIY_STRING = 2092;
|
||||
+ public final static int MR_EVENT_HTTP_GET = 2100;
|
||||
+
|
||||
+ public static final Object m_lastErrorLock = new Object();
|
||||
+ public static int m_lastErrorCode = 0;
|
||||
+ public static String m_lastErrorString = "";
|
||||
+ public static boolean m_showNextErrorAsToast = true;
|
||||
+
|
||||
+ public static long MrCallback(final int event, final long data1, final long data2) // this function is called from within the C-wrapper
|
||||
+ {
|
||||
+ switch(event) {
|
||||
+ case MR_EVENT_CONFIGURE_PROGRESS:
|
||||
+ /*AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ if( data1 == 0 || data1 == 1000 ) {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.configureEnded, (int)data1);
|
||||
+ }
|
||||
+ else {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.configureProgress, (int)data1);
|
||||
+ }
|
||||
+ }
|
||||
+ });*/
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_IMEX_PROGRESS:
|
||||
+ /*AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ if (data1==0 || data1==1000) {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexEnded, (int) data1);
|
||||
+ }
|
||||
+ else {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexProgress, (int) data1);
|
||||
+ }
|
||||
+ }
|
||||
+ });*/
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_IMEX_FILE_WRITTEN: {
|
||||
+ /*final String fileName = CPtr2String(data1);
|
||||
+ AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexFileWritten, fileName);
|
||||
+ }
|
||||
+ });*/
|
||||
+ }
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_SECUREJOIN_INVITER_PROGRESS:
|
||||
+ /*AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.secureJoinInviterProgress, (int)data1, (int)data2);
|
||||
+ }
|
||||
+ });*/
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_SECUREJOIN_JOINER_PROGRESS:
|
||||
+ /*AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.secureJoinJoinerProgress, (int)data1, (int)data2);
|
||||
+ }
|
||||
+ });*/
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_MSGS_CHANGED:
|
||||
+ case MR_EVENT_INCOMING_MSG:
|
||||
+ /*AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload, event, (int)data1, (int)data2);
|
||||
+ if( event == MR_EVENT_INCOMING_MSG ) {
|
||||
+ NotificationsController.getInstance().processNewMessages((int)data1, (int)data2);
|
||||
+ }
|
||||
+ }
|
||||
+ });*/
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_MSG_DELIVERED:
|
||||
+ case MR_EVENT_MSG_READ:
|
||||
+ case DC_EVENT_MSG_FAILED:
|
||||
+ /*AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.messagesSentOrRead, event, (int)data1, (int)data2);
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
|
||||
+ }
|
||||
+ });*/
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_CONTACTS_CHANGED:
|
||||
+ /*AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.contactsDidLoaded, (int)data1);
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.blockedUsersDidLoaded);
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
|
||||
+ }
|
||||
+ });*/
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_CHAT_MODIFIED:
|
||||
+ /*AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
|
||||
+ NotificationCenter.getInstance().postNotificationName(NotificationCenter.updateInterfaces,
|
||||
+ UPDATE_MASK_NAME|UPDATE_MASK_CHAT_NAME|
|
||||
+ UPDATE_MASK_CHAT_MEMBERS|UPDATE_MASK_AVATAR);
|
||||
+ }
|
||||
+ });*/
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_INFO:
|
||||
+ Log.i("DeltaChat", CPtr2String(data2));
|
||||
+ break;
|
||||
+
|
||||
+ case MR_EVENT_WARNING:
|
||||
+ Log.w("DeltaChat", CPtr2String(data2));
|
||||
+ break;
|
||||
+
|
||||
+ case MR_EVENT_ERROR:
|
||||
+ Log.e("DeltaChat", CPtr2String(data2));
|
||||
+ synchronized (m_lastErrorLock) {
|
||||
+ m_lastErrorCode = (int)data1;
|
||||
+ m_lastErrorString = CPtr2String(data2);
|
||||
+ }
|
||||
+ /*AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
+ synchronized (m_lastErrorLock) {
|
||||
+ if( m_showNextErrorAsToast ) {
|
||||
+ if(ForegroundDetector.getInstance().isForeground()) {
|
||||
+ AndroidUtilities.showHint(ApplicationLoader.applicationContext, m_lastErrorString);
|
||||
+ }
|
||||
+ }
|
||||
+ m_showNextErrorAsToast = true;
|
||||
+ }
|
||||
+ }
|
||||
+ });*/
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_GET_STRING:
|
||||
+ /*String s;
|
||||
+ switch( (int)data1 ) {
|
||||
+ // the string-IDs are defined in the backend; as this is the only place where they're used, there is no benefit in creating an enum or sth. like that.
|
||||
+ case 1: s = ApplicationLoader.applicationContext.getString(R.string.NoMessages); break;
|
||||
+ case 2: s = ApplicationLoader.applicationContext.getString(R.string.FromSelf); break;
|
||||
+ case 3: s = ApplicationLoader.applicationContext.getString(R.string.Draft); break;
|
||||
+ case 7: s = ApplicationLoader.applicationContext.getString(R.string.AttachVoiceMessage); break;
|
||||
+ case 8: s = ApplicationLoader.applicationContext.getString(R.string.Deaddrop); break;
|
||||
+ case 9: s = ApplicationLoader.applicationContext.getString(R.string.AttachPhoto); break;
|
||||
+ case 10: s = ApplicationLoader.applicationContext.getString(R.string.AttachVideo); break;
|
||||
+ case 11: s = ApplicationLoader.applicationContext.getString(R.string.Audio); break;
|
||||
+ case 12: s = ApplicationLoader.applicationContext.getString(R.string.AttachDocument); break;
|
||||
+ case 13: s = ApplicationLoader.applicationContext.getString(R.string.DefaultStatusText); break;
|
||||
+ case 14: s = ApplicationLoader.applicationContext.getString(R.string.MsgNewGroupDraft); break;
|
||||
+ case 15: s = ApplicationLoader.applicationContext.getString(R.string.MsgGroupNameChanged); break;
|
||||
+ case 16: s = ApplicationLoader.applicationContext.getString(R.string.MsgGroupImageChanged); break;
|
||||
+ case 17: s = ApplicationLoader.applicationContext.getString(R.string.MsgMemberAddedToGroup); break;
|
||||
+ case 18: s = ApplicationLoader.applicationContext.getString(R.string.MsgMemberRemovedFromToGroup); break;
|
||||
+ case 19: s = ApplicationLoader.applicationContext.getString(R.string.MsgGroupLeft); break;
|
||||
+ case 20: s = ApplicationLoader.applicationContext.getString(R.string.Error); break;
|
||||
+ case 21: s = ApplicationLoader.applicationContext.getString(R.string.ErrSelfNotInGroup); break;
|
||||
+ case 22: s = ApplicationLoader.applicationContext.getString(R.string.NoNetwork); break;
|
||||
+ case 23: s = ApplicationLoader.applicationContext.getString(R.string.AttachGif); break;
|
||||
+ case 24: s = ApplicationLoader.applicationContext.getString(R.string.EncryptedMessage); break;
|
||||
+ case 25: s = ApplicationLoader.applicationContext.getString(R.string.EncrinfoE2EAvailable); break;
|
||||
+ case 27: s = ApplicationLoader.applicationContext.getString(R.string.EncrinfoTransport); break;
|
||||
+ case 28: s = ApplicationLoader.applicationContext.getString(R.string.EncrinfoNone); break;
|
||||
+ case 29: s = ApplicationLoader.applicationContext.getString(R.string.CannotDecryptBody); break;
|
||||
+ case 30: s = ApplicationLoader.applicationContext.getString(R.string.EncrinfoFingerprints); break;
|
||||
+ case 31: s = ApplicationLoader.applicationContext.getString(R.string.ReadReceipt); break;
|
||||
+ case 32: s = ApplicationLoader.applicationContext.getString(R.string.ReadReceiptMailBody); break;
|
||||
+ case 33: s = ApplicationLoader.applicationContext.getString(R.string.MsgGroupImageDeleted); break;
|
||||
+ case 34: s = ApplicationLoader.applicationContext.getString(R.string.E2EEncryptionPreferred); break;
|
||||
+ case 40: s = ApplicationLoader.applicationContext.getString(R.string.ArchivedChats); break;
|
||||
+ case 42: s = ApplicationLoader.applicationContext.getString(R.string.AutocryptSetupMessageSubject); break;
|
||||
+ case 43: s = ApplicationLoader.applicationContext.getString(R.string.AutocryptSetupMessageGeneralBody); break;
|
||||
+ case 50: s = ApplicationLoader.applicationContext.getString(R.string.SelfTalkSubtitle); break;
|
||||
+ case 60: s = ApplicationLoader.applicationContext.getString(R.string.ErrCannotLogin); break;
|
||||
+ case 61: s = "<c#808080>" + ApplicationLoader.applicationContext.getString(R.string.ErrSeverResponse) + "</c>"; break;
|
||||
+ default: s = null; break;
|
||||
+ }
|
||||
+ return String2CPtr(s);
|
||||
+ */
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_GET_QUANTITIY_STRING:
|
||||
+ /*String sp = "ErrQtyStrBadId";
|
||||
+ switch( (int)data1 ) {
|
||||
+ // the string-IDs are defined in the backend; as this is the only place where they're used, there is no benefit in creating an enum or sth. like that.
|
||||
+ case 4: sp = ApplicationLoader.applicationContext.getResources().getQuantityString(R.plurals.Members, (int)data2, (int)data2); break;
|
||||
+ case 6: sp = ApplicationLoader.applicationContext.getResources().getQuantityString(R.plurals.Contacts, (int)data2, (int)data2); break;
|
||||
+ }
|
||||
+ return String2CPtr(sp);
|
||||
+ */
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_IS_OFFLINE:
|
||||
+ //return ApplicationLoader.isNetworkOnline()? 0 : 1;
|
||||
+ return 0;
|
||||
+
|
||||
+ case MR_EVENT_HTTP_GET:
|
||||
+ String httpContent = null;
|
||||
+ try {
|
||||
+ URL url = new URL(CPtr2String(data1));
|
||||
+ HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
|
||||
+ try {
|
||||
+ urlConnection.setConnectTimeout(10*1000);
|
||||
+ InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());
|
||||
+
|
||||
+ BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
|
||||
+
|
||||
+ StringBuilder total = new StringBuilder();
|
||||
+ String line;
|
||||
+ while ((line = r.readLine()) != null) {
|
||||
+ total.append(line).append('\n');
|
||||
+ }
|
||||
+ httpContent = total.toString();
|
||||
+ } finally {
|
||||
+ urlConnection.disconnect();
|
||||
+ }
|
||||
+ }
|
||||
+ catch(Exception e) {
|
||||
+ e.printStackTrace();
|
||||
+ }
|
||||
+ return String2CPtr(httpContent);
|
||||
+ }
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ /* additional functions that are not 1:1 available in the backend
|
||||
+ **********************************************************************************************/
|
||||
+
|
||||
+ public static void log_i(String tag, String msg)
|
||||
+ {
|
||||
+ Log.i(tag, msg);
|
||||
+ }
|
||||
+
|
||||
+ public native static int getCurrentTime ();
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+}
|
||||
diff --git a/src/com/b44t/messenger/MrMsg.java b/src/com/b44t/messenger/MrMsg.java
|
||||
new file mode 100644
|
||||
index 0000000..52a8ed2
|
||||
--- /dev/null
|
||||
+++ b/src/com/b44t/messenger/MrMsg.java
|
||||
@@ -0,0 +1,102 @@
|
||||
+/*******************************************************************************
|
||||
+ *
|
||||
+ * Delta Chat Android
|
||||
+ * (C) 2017 Björn Petersen
|
||||
+ * Contact: r10s@b44t.com, http://b44t.com
|
||||
+ *
|
||||
+ * This program is free software: you can redistribute it and/or modify it under
|
||||
+ * the terms of the GNU General Public License as published by the Free Software
|
||||
+ * Foundation, either version 3 of the License, or (at your option) any later
|
||||
+ * version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
+ * details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License along with
|
||||
+ * this program. If not, see http://www.gnu.org/licenses/ .
|
||||
+ *
|
||||
+ *******************************************************************************
|
||||
+ *
|
||||
+ * File: MrMsg.java
|
||||
+ * Purpose: Wrap around mrmsg_t
|
||||
+ *
|
||||
+ ******************************************************************************/
|
||||
+
|
||||
+
|
||||
+package com.b44t.messenger;
|
||||
+
|
||||
+import android.graphics.Bitmap;
|
||||
+import android.media.ThumbnailUtils;
|
||||
+import android.provider.MediaStore;
|
||||
+
|
||||
+import java.io.File;
|
||||
+
|
||||
+public class MrMsg {
|
||||
+
|
||||
+ private static final String TAG = "MrMsg";
|
||||
+
|
||||
+ public final static int MR_MSG_UNDEFINED = 0;
|
||||
+ public final static int MR_MSG_TEXT = 10;
|
||||
+ public final static int MR_MSG_IMAGE = 20;
|
||||
+ public final static int MR_MSG_GIF = 21;
|
||||
+ public final static int MR_MSG_AUDIO = 40;
|
||||
+ public final static int MR_MSG_VOICE = 41;
|
||||
+ public final static int MR_MSG_VIDEO = 50;
|
||||
+ public final static int MR_MSG_FILE = 60;
|
||||
+
|
||||
+ public final static int MR_STATE_UNDEFINED = 0;
|
||||
+ public final static int MR_IN_FRESH = 10;
|
||||
+ public final static int MR_IN_NOTICED = 13;
|
||||
+ public final static int MR_OUT_PENDING = 20;
|
||||
+ public final static int MR_OUT_ERROR = 24;
|
||||
+ public final static int MR_OUT_DELIVERED = 26;
|
||||
+ public final static int MR_OUT_MDN_RCVD = 28;
|
||||
+
|
||||
+ public final static int MR_MSG_ID_MARKER1 = 1;
|
||||
+ public final static int MR_MSG_ID_DAYMARKER = 9;
|
||||
+
|
||||
+ public MrMsg(long hMsg) {
|
||||
+ m_hMsg = hMsg;
|
||||
+ }
|
||||
+
|
||||
+ @Override protected void finalize() throws Throwable {
|
||||
+ super.finalize();
|
||||
+ MrMsgUnref(m_hMsg);
|
||||
+ m_hMsg = 0;
|
||||
+ }
|
||||
+
|
||||
+ public native int getId();
|
||||
+ public native String getText();
|
||||
+ public native long getTimestamp();
|
||||
+ public native int getType();
|
||||
+ public native int getState();
|
||||
+ public native int getChatId();
|
||||
+ public native int getFromId();
|
||||
+
|
||||
+ public native int getWidth(int def);
|
||||
+ public native int getHeight(int def);
|
||||
+ public native int getDuration();
|
||||
+ public native void lateFilingMediaSize(int width, int height, int duration);
|
||||
+
|
||||
+ public native int getBytes();
|
||||
+ public MrLot getSummary(MrChat chat) { return new MrLot(getSummaryCPtr(chat.getCPtr())); }
|
||||
+ private native long getSummaryCPtr(long hChat);
|
||||
+ public native String getSummarytext(int approx_characters);
|
||||
+ public native int showPadlock();
|
||||
+ public MrLot getMediainfo() { return new MrLot(getMediainfoCPtr()); }
|
||||
+ private native long getMediainfoCPtr();
|
||||
+ public native String getFile();
|
||||
+ public native String getFilemime();
|
||||
+ public native String getFilename();
|
||||
+ public native boolean isForwarded();
|
||||
+ public native boolean isInfo();
|
||||
+ public native boolean isSetupMessage();
|
||||
+ public native String getSetupCodeBegin();
|
||||
+ public native boolean isIncreation();
|
||||
+
|
||||
+ private long m_hMsg; // must not be renamed as referenced by JNI under the name "m_hMsg"
|
||||
+ private native static void MrMsgUnref (long hMsg);
|
||||
+
|
||||
+};
|
||||
--
|
||||
2.8.2
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
From 60d175313bdadedeb331923dde3b5c10bbf582ae Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <60d175313bdadedeb331923dde3b5c10bbf582ae.1534410135.git.daniel.boehrs@open-xchange.com>
|
||||
In-Reply-To: <371694c11a8b1192ef5230b98af3a5719add98ef.1534410134.git.daniel.boehrs@open-xchange.com>
|
||||
References: <371694c11a8b1192ef5230b98af3a5719add98ef.1534410134.git.daniel.boehrs@open-xchange.com>
|
||||
From: "B. Petersen" <r10s@b44t.com>
|
||||
Date: Fri, 27 Jul 2018 17:13:16 +0200
|
||||
Subject: [PATCH 6/6] initialize the java-bindings, all functions should be
|
||||
callable now :)
|
||||
|
||||
---
|
||||
src/org/thoughtcrime/securesms/ApplicationContext.java | 6 ++++++
|
||||
src/org/thoughtcrime/securesms/util/FileUtils.java | 4 ----
|
||||
2 files changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/org/thoughtcrime/securesms/ApplicationContext.java
|
||||
index f49cba5..fa22338 100644
|
||||
--- a/src/org/thoughtcrime/securesms/ApplicationContext.java
|
||||
+++ b/src/org/thoughtcrime/securesms/ApplicationContext.java
|
||||
@@ -27,6 +27,7 @@ import android.support.annotation.NonNull;
|
||||
import android.support.multidex.MultiDexApplication;
|
||||
import android.util.Log;
|
||||
|
||||
+import com.b44t.messenger.MrMailbox;
|
||||
import com.google.android.gms.security.ProviderInstaller;
|
||||
|
||||
import org.thoughtcrime.securesms.crypto.PRNGFixes;
|
||||
@@ -88,6 +89,11 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
+
|
||||
+ System.loadLibrary("native-utils");
|
||||
+ MrMailbox.MrCallback(0, 0, 0); // do not remove this call; this makes sure, the function is not removed from build or warnings are printed!
|
||||
+ MrMailbox.init();
|
||||
+
|
||||
initializeRandomNumberFix();
|
||||
initializeLogging();
|
||||
initializeDependencyInjection();
|
||||
diff --git a/src/org/thoughtcrime/securesms/util/FileUtils.java b/src/org/thoughtcrime/securesms/util/FileUtils.java
|
||||
index e437edd..8927af6 100644
|
||||
--- a/src/org/thoughtcrime/securesms/util/FileUtils.java
|
||||
+++ b/src/org/thoughtcrime/securesms/util/FileUtils.java
|
||||
@@ -9,10 +9,6 @@ import java.security.NoSuchAlgorithmException;
|
||||
|
||||
public class FileUtils {
|
||||
|
||||
- static {
|
||||
- System.loadLibrary("native-utils");
|
||||
- }
|
||||
-
|
||||
public static native int getFileDescriptorOwner(FileDescriptor fileDescriptor);
|
||||
|
||||
public static byte[] getFileDigest(FileInputStream fin) throws IOException {
|
||||
--
|
||||
2.8.2
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
-keepattributes *Annotation*,EnclosingMethod
|
||||
-keep @interface dagger.*,javax.inject.*
|
||||
-keep @dagger.Module class *
|
||||
-keepclassmembers class * {
|
||||
@javax.inject.* *;
|
||||
@dagger.* *;
|
||||
<init>();
|
||||
}
|
||||
-keepclasseswithmembernames class * {
|
||||
@javax.inject.* <fields>;
|
||||
}
|
||||
-keep class javax.inject.** { *; }
|
||||
-keep class **$$ModuleAdapter
|
||||
-keep class **$$InjectAdapter
|
||||
-keep class **$$StaticInjection
|
||||
|
||||
-keep class dagger.** { *; }
|
||||
-keep class * extends dagger.** { *; }
|
||||
-keep interface dagger.** {*;}
|
||||
-dontwarn dagger.internal.codegen.**
|
||||
@@ -1 +0,0 @@
|
||||
-dontwarn ezvcard.io.html.HCardPage
|
||||
@@ -1,19 +0,0 @@
|
||||
## Google Play Services 4.3.23 specific rules ##
|
||||
## https://developer.android.com/google/play-services/setup.html#Proguard ##
|
||||
|
||||
-keep class * extends java.util.ListResourceBundle {
|
||||
protected Object[][] getContents();
|
||||
}
|
||||
|
||||
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
|
||||
public static final *** NULL;
|
||||
}
|
||||
|
||||
-keepnames @com.google.android.gms.common.annotation.KeepName class *
|
||||
-keepclassmembernames class * {
|
||||
@com.google.android.gms.common.annotation.KeepName *;
|
||||
}
|
||||
|
||||
-keepnames class * implements android.os.Parcelable {
|
||||
public static final ** CREATOR;
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
-dontwarn android.net.ConnectivityManager
|
||||
-dontwarn android.net.ConnectivityManager$NetworkCallback
|
||||
-dontwarn org.webrtc.NetworkMonitorAutoDetect$ConnectivityManagerDelegate
|
||||
@@ -1,3 +0,0 @@
|
||||
-dontwarn okio.**
|
||||
-dontwarn javax.annotation.Nullable
|
||||
-dontwarn javax.annotation.ParametersAreNonnullByDefault
|
||||
@@ -1,26 +0,0 @@
|
||||
-keep class org.spongycastle.crypto.* {*;}
|
||||
-keep class org.spongycastle.crypto.agreement.** {*;}
|
||||
-keep class org.spongycastle.crypto.digests.* {*;}
|
||||
-keep class org.spongycastle.crypto.ec.* {*;}
|
||||
-keep class org.spongycastle.crypto.encodings.* {*;}
|
||||
-keep class org.spongycastle.crypto.engines.* {*;}
|
||||
-keep class org.spongycastle.crypto.macs.* {*;}
|
||||
-keep class org.spongycastle.crypto.modes.* {*;}
|
||||
-keep class org.spongycastle.crypto.paddings.* {*;}
|
||||
-keep class org.spongycastle.crypto.params.* {*;}
|
||||
-keep class org.spongycastle.crypto.prng.* {*;}
|
||||
-keep class org.spongycastle.crypto.signers.* {*;}
|
||||
|
||||
-keep class org.spongycastle.jcajce.provider.asymmetric.* {*;}
|
||||
-keep class org.spongycastle.jcajce.provider.asymmetric.util.* {*;}
|
||||
-keep class org.spongycastle.jcajce.provider.asymmetric.dh.* {*;}
|
||||
-keep class org.spongycastle.jcajce.provider.asymmetric.ec.* {*;}
|
||||
|
||||
-keep class org.spongycastle.jcajce.provider.digest.** {*;}
|
||||
-keep class org.spongycastle.jcajce.provider.keystore.** {*;}
|
||||
-keep class org.spongycastle.jcajce.provider.symmetric.** {*;}
|
||||
-keep class org.spongycastle.jcajce.spec.* {*;}
|
||||
-keep class org.spongycastle.jce.** {*;}
|
||||
|
||||
|
||||
-dontwarn javax.naming.**
|
||||
@@ -1,5 +0,0 @@
|
||||
-keep class org.sqlite.** { *; }
|
||||
-keep class org.sqlite.database.** { *; }
|
||||
|
||||
-keep class net.sqlcipher.** { *; }
|
||||
-dontwarn net.sqlcipher.**
|
||||
@@ -1,6 +0,0 @@
|
||||
# OkHttp
|
||||
-keepattributes Signature
|
||||
-keepattributes *Annotation*
|
||||
-keep class com.squareup.okhttp.** { *; }
|
||||
-keep interface com.squareup.okhttp.** { *; }
|
||||
-dontwarn com.squareup.okhttp.**
|
||||
@@ -1,5 +0,0 @@
|
||||
# Okio
|
||||
-keep class sun.misc.Unsafe { *; }
|
||||
-dontwarn java.nio.file.*
|
||||
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
|
||||
-dontwarn okio.**
|
||||
@@ -1,3 +0,0 @@
|
||||
-dontwarn org.webrtc.NetworkMonitorAutoDetect
|
||||
-dontwarn android.net.Network
|
||||
-keep class org.webrtc.** { *; }
|
||||
@@ -1,59 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2018 Open Whisper Systems
|
||||
*
|
||||
* Licensed according to the LICENSE file in this repository.
|
||||
*/
|
||||
|
||||
package signal;
|
||||
|
||||
option java_package = "org.thoughtcrime.securesms.backup";
|
||||
option java_outer_classname = "BackupProtos";
|
||||
|
||||
message SqlStatement {
|
||||
message SqlParameter {
|
||||
optional string stringParamter = 1;
|
||||
optional uint64 integerParameter = 2;
|
||||
optional double doubleParameter = 3;
|
||||
optional bytes blobParameter = 4;
|
||||
optional bool nullparameter = 5;
|
||||
}
|
||||
|
||||
optional string statement = 1;
|
||||
repeated SqlParameter parameters = 2;
|
||||
}
|
||||
|
||||
message SharedPreference {
|
||||
optional string file = 1;
|
||||
optional string key = 2;
|
||||
optional string value = 3;
|
||||
}
|
||||
|
||||
message Attachment {
|
||||
optional uint64 rowId = 1;
|
||||
optional uint64 attachmentId = 2;
|
||||
optional uint32 length = 3;
|
||||
}
|
||||
|
||||
message Avatar {
|
||||
optional string name = 1;
|
||||
optional uint32 length = 2;
|
||||
}
|
||||
|
||||
message DatabaseVersion {
|
||||
optional uint32 version = 1;
|
||||
}
|
||||
|
||||
message Header {
|
||||
optional bytes iv = 1;
|
||||
optional bytes salt = 2;
|
||||
}
|
||||
|
||||
message BackupFrame {
|
||||
optional Header header = 1;
|
||||
optional SqlStatement statement = 2;
|
||||
optional SharedPreference preference = 3;
|
||||
optional Attachment attachment = 4;
|
||||
optional DatabaseVersion version = 5;
|
||||
optional bool end = 6;
|
||||
optional Avatar avatar = 7;
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
|
||||
all:
|
||||
protoc --java_out=../src/ WebRtcData.proto Backups.proto
|
||||
@@ -1,31 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2014-2016 Open Whisper Systems
|
||||
*
|
||||
* Licensed according to the LICENSE file in this repository.
|
||||
*/
|
||||
|
||||
package signal;
|
||||
|
||||
option java_package = "org.thoughtcrime.securesms.webrtc";
|
||||
option java_outer_classname = "WebRtcDataProtos";
|
||||
|
||||
message Connected {
|
||||
optional uint64 id = 1;
|
||||
}
|
||||
|
||||
message Hangup {
|
||||
optional uint64 id = 1;
|
||||
}
|
||||
|
||||
message VideoStreamingStatus {
|
||||
optional uint64 id = 1;
|
||||
optional bool enabled = 2;
|
||||
}
|
||||
|
||||
message Data {
|
||||
|
||||
optional Connected connected = 1;
|
||||
optional Hangup hangup = 2;
|
||||
optional VideoStreamingStatus videoStreamingStatus = 3;
|
||||
|
||||
}
|
||||
|
Before Width: | Height: | Size: 656 B |
|
Before Width: | Height: | Size: 477 B |
|
Before Width: | Height: | Size: 268 B |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 297 B |
|
Before Width: | Height: | Size: 223 B |
|
Before Width: | Height: | Size: 186 B |
|
Before Width: | Height: | Size: 178 B |
|
Before Width: | Height: | Size: 502 B |
|
Before Width: | Height: | Size: 484 B |
|
Before Width: | Height: | Size: 478 B |
|
Before Width: | Height: | Size: 307 B |
|
Before Width: | Height: | Size: 425 B |
|
Before Width: | Height: | Size: 553 B |
|
Before Width: | Height: | Size: 284 B |
|
Before Width: | Height: | Size: 311 B |
|
Before Width: | Height: | Size: 309 B |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 381 B |
|
Before Width: | Height: | Size: 585 B |
|
Before Width: | Height: | Size: 294 B |
|
Before Width: | Height: | Size: 276 B |
|
Before Width: | Height: | Size: 256 B |
|
Before Width: | Height: | Size: 347 B |
|
Before Width: | Height: | Size: 448 B |
|
Before Width: | Height: | Size: 130 B |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 359 B |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 568 B |
|
Before Width: | Height: | Size: 513 B |
|
Before Width: | Height: | Size: 483 B |
|
Before Width: | Height: | Size: 656 B |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 196 B |
|
Before Width: | Height: | Size: 307 B |
|
Before Width: | Height: | Size: 190 B |
|
Before Width: | Height: | Size: 168 B |
|
After Width: | Height: | Size: 427 B |
|
After Width: | Height: | Size: 423 B |
|
Before Width: | Height: | Size: 540 B |
|
Before Width: | Height: | Size: 876 B |
|
Before Width: | Height: | Size: 664 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 220 B |
|
Before Width: | Height: | Size: 373 B |
|
Before Width: | Height: | Size: 354 B |
|
Before Width: | Height: | Size: 188 B |
|
Before Width: | Height: | Size: 428 B |
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 289 B |
|
Before Width: | Height: | Size: 457 B |
|
Before Width: | Height: | Size: 571 B |
|
Before Width: | Height: | Size: 509 B |
|
Before Width: | Height: | Size: 449 B |