Compare commits

...

755 Commits

Author SHA1 Message Date
B. Petersen 33bf4bcdef typo 2018-06-21 12:47:52 +02:00
B. Petersen 0f235a24a0 update translations 2018-06-21 12:41:33 +02:00
B. Petersen fc76e0ff59 Update messenger-backend submodule. 2018-06-21 12:38:07 +02:00
B. Petersen debe6d2378 bump version 2018-06-21 12:03:08 +02:00
B. Petersen c5701745eb bump version 2018-06-20 23:43:09 +02:00
B. Petersen d57afb5401 Update messenger-backend submodule. 2018-06-20 22:46:30 +02:00
B. Petersen 90f06f0820 after the app goes to background, we hold a one minute wakelock to guarantee responsiveness 2018-06-20 21:27:20 +02:00
B. Petersen fba2f1d334 remove dead code 2018-06-20 21:10:57 +02:00
B. Petersen d169a67879 adapt to new api 2018-06-20 11:07:45 +02:00
B. Petersen a116462064 show permanent notification conditionally 2018-06-20 10:26:03 +02:00
B. Petersen 9a9543265b comment 2018-06-19 21:08:40 +02:00
B. Petersen 8f673d1950 Update messenger-backend submodule. 2018-06-19 20:39:18 +02:00
B. Petersen 1d66dd937b always start threads on app start (Timer.onReceive() may try it again, however) 2018-06-19 17:38:27 +02:00
B. Petersen 1f63c2a5da also interrupt on disconnect, clean log 2018-06-19 16:11:51 +02:00
B. Petersen 194d5b2fcc send media-count-notification from ui thread 2018-06-19 12:27:11 +02:00
B. Petersen 1f33c80e85 bump version 2018-06-19 12:26:04 +02:00
B. Petersen fdb0b081e1 changelog 2018-06-18 18:53:03 +02:00
B. Petersen fe8ad2b6cf bump version 2018-06-15 00:00:51 +02:00
B. Petersen 73ab1567f7 start or interrupt the job-threads on network-connected and file-created 2018-06-14 15:53:08 +02:00
B. Petersen 431411cded Update messenger-backend submodule. 2018-06-14 13:23:06 +02:00
Björn Petersen 2672cfb638 Merge pull request #333 from flub/master
Fix URL
2018-06-14 09:23:23 +02:00
Floris Bruynooghe abc836eae5 Fix URL 2018-06-13 20:53:02 +02:00
B. Petersen 6c9f06e07f changelog 2018-06-13 19:29:43 +02:00
Björn Petersen 4d1534f998 Merge pull request #332 from angelo-fuchs/master
displaying a list of pictures instead of just one when opening a pic in chat
2018-06-13 17:26:24 +02:00
B. Petersen e72041d3fb update translations 2018-06-13 16:57:36 +02:00
B. Petersen 1d9284980c Update messenger-backend submodule. 2018-06-13 16:31:55 +02:00
Björn Petersen a8c665a89e Merge pull request #331 from deltachat/separate-smtp-thread
adapt to new smtp-thread-API
2018-06-13 16:18:16 +02:00
Angelo Fuchs - Der Mor db036e0e2a showing a list of pictures from the current chat instead of just one picture when tapping a picture in chat #10
- in ChatActivitiy gather all the images from the chat and determinate the current one within
 - in PhotoViewer start the display of images with a function that displays a list of images.
 - did some commenting in PhotoViewer to ease future reading of the code.
2018-06-13 12:43:32 +02:00
Angelo Fuchs - Der Mor 7c94c481c7 comments 2018-06-13 12:43:32 +02:00
Angelo Fuchs - Der Mor e1ac76bbfd #10 Scrolling through images in chat, works mostly, displays wrong buttons, though. 2018-06-13 12:43:32 +02:00
B. Petersen 59f78161ae bump version 2018-06-13 11:40:27 +02:00
B. Petersen e7de3e059d adapt to new smtp-thread-API 2018-06-13 00:40:10 +02:00
B. Petersen 631959ba63 adapt to new configure-api 2018-06-11 14:32:36 +02:00
Björn Petersen ce6cf689c8 Merge pull request #330 from deltachat/new-idle
bump version
2018-06-11 13:07:24 +02:00
Björn Petersen 982b7d2470 Merge pull request #329 from deltachat/new-idle
New idle
2018-06-11 13:05:57 +02:00
B. Petersen e6c2060114 bump version 2018-06-11 11:30:29 +02:00
B. Petersen fea3c4a19d waiting for IMAP-thread running before returning from the on_receive call 2018-06-11 11:13:40 +02:00
B. Petersen d51278bf65 use an exact timer for calling on_receive 2018-06-11 11:06:33 +02:00
B. Petersen 09b9355cf0 call FETCH and IDLE separately 2018-06-11 09:45:40 +02:00
B. Petersen eb16a0bf74 log 2018-06-10 19:42:40 +02:00
B. Petersen ee9ade04cc increase version, remove switch-to-background 2018-06-10 19:40:50 +02:00
B. Petersen 5e6b52038c refine wakelocks 2018-06-10 19:05:41 +02:00
B. Petersen 60a42c275d remove lock around poll 2018-06-10 15:32:09 +02:00
B. Petersen 8a7849bb1b switch immediately to background, for now 2018-06-10 10:01:52 +02:00
B. Petersen d709ace71c prepare new-idle 2018-06-09 00:53:19 +02:00
B. Petersen f0d6aa6a87 add a http-timeout 2018-06-08 13:56:06 +02:00
B. Petersen 497d921ef9 use direct threads instead of a thread-queue for import/export/poll/configure 2018-06-08 13:06:19 +02:00
B. Petersen 8eab9107b7 update translations 2018-06-08 12:29:45 +02:00
B. Petersen 6f9349e9c2 Update messenger-backend submodule. 2018-06-06 00:16:14 +02:00
B. Petersen 6261e0eaed update translations 2018-06-05 21:31:57 +02:00
B. Petersen 6fb810bbb9 refactor 2018-06-05 20:52:10 +02:00
B. Petersen b573f24b0f delay switching from idle to poll for one minute after the app goes to background 2018-06-05 15:38:08 +02:00
B. Petersen 867b47d33c Update messenger-backend submodule. 2018-06-05 13:47:24 +02:00
B. Petersen e88b74164c make wakelock reference counting more reliable, adapt to new idle-api 2018-06-05 13:47:06 +02:00
B. Petersen bbcf8fb1dd keeping show-qr-screen on to avoid falling back to POLL and to allow scanning on short timeouts 2018-06-05 02:15:01 +02:00
B. Petersen 7a88e28710 Update messenger-backend submodule. 2018-06-05 01:47:19 +02:00
B. Petersen f42342dea0 Update messenger-backend submodule. 2018-06-05 01:09:06 +02:00
Björn Petersen 633037133d Merge pull request #323 from deltachat/caller-idle
Caller idle
2018-06-05 01:04:58 +02:00
B. Petersen 9a48e7fc22 also stop the idle-thread when the screen goes off, this is not always in sync with the ForegroundDetector 2018-06-05 01:02:26 +02:00
B. Petersen 9e7abb5843 Update messenger-backend submodule. 2018-06-04 22:11:56 +02:00
B. Petersen f7f443b389 make sure, the idle-wakelock is also released on errors 2018-06-04 18:23:21 +02:00
B. Petersen 80723477ca check if the idle-thread is alive before giving up to start one 2018-06-04 15:25:12 +02:00
Björn Petersen 725be98844 Merge pull request #320 from t-oster/fix-request-camera-permissions
Request permissions to use the Camera before starting Capture
2018-06-04 13:08:38 +02:00
B. Petersen 5b506b0f94 if camera permissions are not granted by the user, show a dialog with some explanations 2018-06-04 00:24:33 +02:00
B. Petersen 20d6c20577 use a unique request-code-id for requesting camera-permissions 2018-06-04 00:22:48 +02:00
B. Petersen 9ad5e88f21 verbose logging on idle/interrupIdle and belonging places 2018-06-02 23:32:03 +02:00
Thomas Oster 38499761ad Request permissions to use the Camera before starting Capture 2018-06-02 22:21:17 +02:00
B. Petersen add621416f remove superfluous 'synchronized' 2018-06-01 21:30:16 +02:00
B. Petersen f872917fd4 make sure subsequent idle-stops are executed only once 2018-06-01 12:01:02 +02:00
B. Petersen e502b02cb6 start thread using start() instead of synchronous run() 2018-05-31 22:41:48 +02:00
B. Petersen be03bc1b5f handle the idleThread in the android part 2018-05-30 15:04:20 +02:00
B. Petersen 677a59a8cb wake locks should be handled by the caller 2018-05-30 13:18:59 +02:00
B. Petersen 6822e0e504 update translations 2018-05-29 22:03:36 +02:00
B. Petersen 0614e7d426 Update messenger-backend submodule. 2018-05-29 22:02:01 +02:00
B. Petersen f4fc4e6d86 update makefile 2018-05-29 22:01:43 +02:00
B. Petersen 866396a93b Update messenger-backend submodule. 2018-05-28 17:32:16 +02:00
B. Petersen 2517cbfb99 update makefile 2018-05-28 17:31:58 +02:00
Björn Petersen aab59911fb Merge pull request #316 from flortsch/patch-1
Fix typo and spacing in strings.xml
2018-05-27 23:15:08 +02:00
Florian Latifi b54a8431b1 Fix typo and spacing in strings.xml 2018-05-27 21:56:43 +02:00
B. Petersen cb69af5f6d update translations 2018-05-25 14:33:09 +02:00
B. Petersen 304497a91a add Danish translation 2018-05-23 11:36:27 +02:00
B. Petersen 18cce1e6f7 update translations 2018-05-23 11:28:33 +02:00
B. Petersen a86f7efd9e typo 2018-05-23 11:23:21 +02:00
Björn Petersen 53aba77523 Merge pull request #301 from testbird/patch-4
ImportExportExplain: use "autocrypt setup" as elsewhere
2018-05-23 11:21:41 +02:00
B. Petersen af365933a3 rework push/poll settings 2018-05-22 12:30:17 +02:00
B. Petersen 51d80e4b25 simplify background-mode options 2018-05-20 23:59:01 +02:00
Björn Petersen fbbf1a5f3e Merge pull request #314 from deltachat/play-around-with-poll
Add background-moe options
2018-05-20 18:27:43 +02:00
B. Petersen 1006fbb599 do not connect/disconnect when permanent push is enabled 2018-05-20 18:23:53 +02:00
B. Petersen 1713aa6474 improve background fetch settings dialog 2018-05-20 18:19:47 +02:00
B. Petersen ff5acaa7f5 reflect changes on background mode selection 2018-05-20 17:37:01 +02:00
B. Petersen 9cb0d119a7 add an option for background mode 2018-05-20 13:26:36 +02:00
B. Petersen 6d75112dfd update Italian translation 2018-05-19 15:05:19 +02:00
B. Petersen 496c9b082f as high-level-disconnect adds a job, a separate thread is no longer needed 2018-05-19 15:02:15 +02:00
Björn Petersen 349fb12a05 Merge pull request #310 from comradekingu/patch-5
Small language rework
2018-05-19 15:00:38 +02:00
Allan Nordhøy a7054fc2e6 needed → grant, and license descriptive strings reverted 2018-05-19 01:17:20 +02:00
B. Petersen faacf510b2 implement basic poll 2018-05-18 18:54:01 +02:00
B. Petersen 6ce08ef461 adapt to new configure-connect api 2018-05-18 18:17:41 +02:00
Allan Nordhøy f2fb935d3b Small language rework 2018-05-18 12:29:40 +02:00
B. Petersen 80ab5305ca typo 2018-05-18 00:15:54 +02:00
B. Petersen 3441162de4 Update messenger-backend submodule. 2018-05-17 22:26:38 +02:00
B. Petersen b695015e8f update translations 2018-05-17 22:26:29 +02:00
B. Petersen e50bf6ef95 bump version 2018-05-17 22:26:13 +02:00
B. Petersen 3ca55ad986 Update messenger-backend submodule. 2018-05-17 18:02:16 +02:00
Björn Petersen 40ff8268a8 Merge pull request #308 from testbird/patch-5
doubled & typo
2018-05-16 15:23:47 +02:00
testbird 2e7fac05ba Update SettingsAdvFragment.java 2018-05-16 15:04:26 +02:00
B. Petersen a42996892d bump version 2018-05-15 23:24:44 +02:00
B. Petersen 3e926becba Update messenger-backend submodule. 2018-05-15 23:23:47 +02:00
B. Petersen a1eeb25dff changelog 2018-05-15 23:23:33 +02:00
B. Petersen a1f4b64c4a Update messenger-backend submodule. 2018-05-12 00:37:40 +02:00
B. Petersen 5673b25e52 refactor connect-functions 2018-05-12 00:36:40 +02:00
B. Petersen f755add1d2 bump version 2018-05-11 15:21:58 +02:00
B. Petersen 60dd8098c4 Update messenger-backend submodule. 2018-05-11 15:20:49 +02:00
B. Petersen 5823d04a20 update changelog and translations 2018-05-11 15:20:30 +02:00
B. Petersen 3cdfa949e9 Update messenger-backend submodule. 2018-05-11 15:13:39 +02:00
B. Petersen b69eaddddf add a labs-option to disable the logo overlay 2018-05-11 15:13:15 +02:00
B. Petersen 137b32303f refine qr-show layout 2018-05-09 12:51:16 +02:00
B. Petersen da87705fb8 layout show-qr activity 2018-05-09 01:21:55 +02:00
B. Petersen d808adeb39 derive qr-scan and qr-show activities from AppCompat, add back button and title 2018-05-08 17:28:07 +02:00
B. Petersen 2ca07c6ee9 typo 2018-05-08 00:31:53 +02:00
B. Petersen 9a05cd4646 show a little info before enable qr code options 2018-05-08 00:29:40 +02:00
B. Petersen 85e16df79a update translations 2018-05-08 00:01:36 +02:00
B. Petersen 2fd0bdf68b changelog 2018-05-07 23:59:39 +02:00
B. Petersen 23a2d11944 bump version 2018-05-07 14:46:44 +02:00
B. Petersen 02e515e531 Update messenger-backend submodule. 2018-05-07 14:34:58 +02:00
B. Petersen 6651d26a47 unify add-contacts search-field 2018-05-05 01:54:54 +02:00
B. Petersen 84df07dcd1 unify group-final layout 2018-05-05 01:47:03 +02:00
B. Petersen d865b08aa1 add hints to add-contact dialog; unify colors 2018-05-05 01:31:13 +02:00
B. Petersen 220c855222 directly select added contact on group creation 2018-05-05 00:53:20 +02:00
B. Petersen de2fa484ef close qr-show activity after all pending joins are done successfully 2018-05-05 00:19:30 +02:00
B. Petersen f5c3b79a1d for verified-groups, show join-via-qr instead of add-member (the latter won't work as only unverified contacts are created this way) 2018-05-04 23:51:47 +02:00
B. Petersen 254f489d27 update translations 2018-05-04 20:54:33 +02:00
B. Petersen 716d42c21a allow going one step back from group createion 2018-05-04 20:53:39 +02:00
B. Petersen 3f3bfa562f prefill the add-contact dialog by the entered (and probably unsuccessfull) contact-search 2018-05-04 20:30:46 +02:00
B. Petersen a11ca07f4e move 'new group' from the menu to a more visible button above the contact-list 2018-05-04 20:15:03 +02:00
B. Petersen 575c275d39 comment 2018-05-03 22:57:51 +02:00
B. Petersen acf0d801ce update translations 2018-05-03 22:54:51 +02:00
B. Petersen 14d810c319 refine 'action by me' wording, add translators hint 2018-05-03 22:54:33 +02:00
B. Petersen 5d7bca4538 update translations 2018-05-03 21:28:48 +02:00
B. Petersen db48d7be5e Update messenger-backend submodule. 2018-05-03 00:46:15 +02:00
B. Petersen 234dd6d13e add the sender to system-messages 2018-05-03 00:46:02 +02:00
B. Petersen 948f89f957 Update messenger-backend submodule. 2018-05-02 00:38:46 +02:00
B. Petersen b9c64626d1 Update messenger-backend submodule. 2018-05-01 01:08:24 +02:00
B. Petersen 469169b2f1 secure-join returns new chat-id on success 2018-05-01 01:07:50 +02:00
B. Petersen 113a270407 ask whether to join verified groups 2018-04-30 11:57:18 +02:00
B. Petersen 2469324f65 add a button to open the url from a qr-code 2018-04-30 11:29:56 +02:00
B. Petersen f1b5facc6a refactor 2018-04-30 10:58:58 +02:00
B. Petersen b0260c352d update translations 2018-04-30 01:18:14 +02:00
B. Petersen a5168ed1a5 Update messenger-backend submodule. 2018-04-30 01:17:03 +02:00
B. Petersen 4c9e7cc516 more precise secure-join progress information on joiner side 2018-04-30 01:16:46 +02:00
B. Petersen 733b123c09 wording 2018-04-30 00:47:51 +02:00
B. Petersen dd2b484cdb Update messenger-backend submodule. 2018-04-30 00:29:57 +02:00
B. Petersen 1b4811e334 refactor 2018-04-30 00:21:48 +02:00
B. Petersen d23ce67862 more precise secure-join progress information on inviter side 2018-04-30 00:06:55 +02:00
B. Petersen b26f127fb0 avoid null-pointer exception 2018-04-30 00:00:56 +02:00
B. Petersen 359cebec8e Update messenger-backend submodule. 2018-04-29 18:11:20 +02:00
B. Petersen ce3bb860b8 update translations 2018-04-28 11:48:20 +02:00
B. Petersen a1d8cffc85 Update messenger-backend submodule. 2018-04-28 11:45:59 +02:00
B. Petersen 0b4b11e7f3 simplify encryption info; we cannot say 'encryption enabled' any longer as this depends eg. onverified groups. we just show the fingerprints and other states of the peer. 2018-04-28 11:45:38 +02:00
B. Petersen 50f3ab528d add qr-invite-option to chat-menu 2018-04-28 00:28:53 +02:00
B. Petersen a85dcead6b add chat_id to qr-code 2018-04-28 00:22:03 +02:00
B. Petersen 5b1b2a916c Update messenger-backend submodule. 2018-04-28 00:15:43 +02:00
B. Petersen 53b6adb0a5 wording 2018-04-28 00:15:34 +02:00
B. Petersen 0cd5a372d5 separate encryption-info button in contact-profile 2018-04-28 00:09:42 +02:00
B. Petersen 69fa2cb4ee add invite-qr-code to group-profile 2018-04-27 23:56:54 +02:00
B. Petersen 52208d8653 Update messenger-backend submodule. 2018-04-27 12:00:19 +02:00
B. Petersen 3630606f52 wording 2018-04-26 18:04:18 +02:00
B. Petersen ac9aa2e6dd wording 2018-04-26 16:04:57 +02:00
B. Petersen f72ec65b79 update translations 2018-04-26 15:58:20 +02:00
B. Petersen b3920d9bf3 Update messenger-backend submodule. 2018-04-26 15:57:27 +02:00
B. Petersen a828650a44 move contact-deletion to the contact-list, tackles 2018-04-25 22:34:20 +02:00
B. Petersen a2c3163df8 move encryption-info to profile-email-longclick 2018-04-25 22:19:57 +02:00
B. Petersen 15245fa85c move profile-menu options to profile-settings, delete profile-menu 2018-04-25 22:14:35 +02:00
B. Petersen 28f3288d2a layout 2018-04-25 19:52:59 +02:00
B. Petersen 7b69a50623 move supported options from advanced-menu to avanced-other, removed advanced-menu 2018-04-25 17:48:51 +02:00
B. Petersen 790e45795c move passcode-options to advances-settings 2018-04-25 17:19:34 +02:00
B. Petersen 185d7ca4d3 cleanup adv-settings 2018-04-25 17:10:30 +02:00
B. Petersen 383042d778 show qr-scan-icon only if the qr-labs-options are endabled 2018-04-25 16:57:01 +02:00
B. Petersen d39a6f16aa add separate qrscan-button 2018-04-25 16:49:09 +02:00
B. Petersen 7c9e879454 update translations 2018-04-24 22:26:37 +02:00
B. Petersen bb283230f4 Update messenger-backend submodule. 2018-04-24 22:23:30 +02:00
B. Petersen 363d816a17 update makefile 2018-04-24 22:23:15 +02:00
testbird 86eea66267 ImportExportExplain: use "autocrypt setup" as elsewhere 2018-04-22 15:41:08 +02:00
B. Petersen 38e70d8640 Update messenger-backend submodule. 2018-04-22 10:14:15 +02:00
B. Petersen 652f2d0665 show SELF in contact list only when creating a new single chat or when selecing a contact to attach to a message 2018-04-22 10:14:06 +02:00
B. Petersen 75b430b323 filter contact list when adding contacts to a verified group 2018-04-21 16:19:45 +02:00
B. Petersen 0491f93192 Update messenger-backend submodule. 2018-04-21 15:47:58 +02:00
B. Petersen 9a33ddbbc4 simplify checking for groups 2018-04-21 15:19:36 +02:00
B. Petersen e3e4b509e8 update translations 2018-04-21 13:10:53 +02:00
B. Petersen 0e6bac1b2f tell what happens if the user changes the name of a group, fixed #264 2018-04-21 13:09:04 +02:00
B. Petersen ebeb2c9443 correct profile layout 2018-04-21 12:27:23 +02:00
B. Petersen f00c0a16f1 pass 'verified' paramter to group creation 2018-04-20 23:40:46 +02:00
B. Petersen 1733529486 remove dead code 2018-04-20 23:19:52 +02:00
B. Petersen a0cd2d0a7c avoid adding SELF twice 2018-04-20 23:17:14 +02:00
B. Petersen 8decc0176f Update messenger-backend submodule. 2018-04-20 21:11:46 +02:00
B. Petersen 2015a620d6 changelog 2018-04-20 21:10:39 +02:00
B. Petersen 3e042ff2a2 update tranlsations, changelog 2018-04-20 15:36:00 +02:00
B. Petersen 0768ccb2fd show type of contact/group in profile 2018-04-20 15:33:48 +02:00
B. Petersen ff19d4dae3 automatically update chatlist in profile 2018-04-20 14:49:06 +02:00
B. Petersen adc8652cad handle clicks on chat in profile 2018-04-20 11:22:27 +02:00
B. Petersen 903e2e9084 profile move add member/chat to list 2018-04-20 11:14:10 +02:00
B. Petersen 2fcc37dddb simplify profile enabled cells 2018-04-20 10:45:01 +02:00
B. Petersen 42c588b51d show shared chats in profile 2018-04-20 01:02:10 +02:00
B. Petersen 0d4afae561 refactor 2018-04-19 22:45:08 +02:00
B. Petersen 76e3422acd hack mute icon into the message preview 2018-04-19 22:40:24 +02:00
B. Petersen 4ac2c61556 move mute icon to subtitle-left 2018-04-19 22:18:44 +02:00
B. Petersen ec0a7dc65c show verified icon in chat view right of name 2018-04-19 21:44:42 +02:00
B. Petersen fb5543f31c profile: show verified-check beside name 2018-04-19 18:43:27 +02:00
B. Petersen a7d8c6af0b slightly larger 'verified' icon 2018-04-19 16:37:12 +02:00
B. Petersen 0a65209406 draw verified icon beside name (clashes with the selection checkmark otherwise and looks more familiar) 2018-04-19 15:46:22 +02:00
B. Petersen a5d6150119 use the same buttons in the profile as in the other settings screens 2018-04-19 14:30:23 +02:00
B. Petersen d49e7ad60e simplify UserCell 2018-04-19 14:14:39 +02:00
B. Petersen 989c3985ca let the system decide where to use 'fastScroll' 2018-04-18 21:51:07 +02:00
B. Petersen fb0f4bfc2b Update messenger-backend submodule. 2018-04-18 20:08:42 +02:00
B. Petersen e43e30b61a Update messenger-backend submodule. 2018-04-18 17:49:46 +02:00
B. Petersen 270a695da1 add options to create a verfied group 2018-04-18 17:49:32 +02:00
B. Petersen d80fba84cf wording 2018-04-18 14:09:37 +02:00
B. Petersen e34cd917ea reorder advaced settings 2018-04-18 10:53:58 +02:00
B. Petersen 942770372c wording 2018-04-18 10:48:53 +02:00
B. Petersen b36477c160 explain autocrypt in a few words 2018-04-17 23:11:24 +02:00
B. Petersen c39b16a8d9 update translations 2018-04-17 22:14:03 +02:00
B. Petersen 0583a0582e remove 'key' language from most strings, targets #223 2018-04-17 18:43:38 +02:00
B. Petersen 4a5e563bda update Albanian translation 2018-04-17 18:10:59 +02:00
B. Petersen f314809a06 wording 2018-04-17 18:01:52 +02:00
B. Petersen d561dcb6e6 make 'cannot encrypt' message localizable 2018-04-16 20:14:59 +02:00
B. Petersen 6f88e49cac changelog 2018-04-16 20:14:39 +02:00
Björn Petersen 751fd56b4e Merge pull request #295 from Ampli-fier/master
enable STATIC_LOGIN mech
2018-04-15 21:54:57 +02:00
Ampli-fier b37e7fc9bb enable STATIC_LOGIN mech
enable STATIC_LOGIN mech to make it possible to use the authentication-type PLAIN
2018-04-14 17:07:10 +02:00
B. Petersen 5e61857384 update Dutch translation 2018-04-12 23:13:15 +02:00
B. Petersen aee29ad821 Update messenger-backend submodule. 2018-04-09 18:59:00 +02:00
B. Petersen aad3db6f6a add menu entry to enable/disable the QR code options in the advanced options 2018-04-09 14:12:34 +02:00
B. Petersen 236d54557d Update messenger-backend submodule. 2018-04-07 00:01:17 +02:00
B. Petersen 27cb4328b2 show a checkmark in the avatar of verified contacts 2018-04-07 00:00:52 +02:00
B. Petersen d91c81e0d4 Update messenger-backend submodule. 2018-04-05 22:06:26 +02:00
B. Petersen 6100589818 refactor 2018-04-05 22:06:13 +02:00
B. Petersen 09b848f832 Update messenger-backend submodule. 2018-04-01 23:08:49 +02:00
B. Petersen 14825e97cc make info cells selectable and allow the typical actions 2018-04-01 22:31:24 +02:00
B. Petersen 669d573345 update to new api 2018-04-01 22:00:50 +02:00
B. Petersen 4231b0282f Update messenger-backend submodule. 2018-04-01 21:52:09 +02:00
B. Petersen 43448e286b update to new api 2018-04-01 21:51:51 +02:00
B. Petersen ba6d2a3099 do not show setup message as 'centered status text' 2018-04-01 17:38:58 +02:00
B. Petersen 8f91e14049 update Dutch, Geman, Hungarian, Norwegian, Russian translations 2018-03-31 22:41:52 +02:00
B. Petersen 0bf0d0c316 show system messages centered in the chatlist 2018-03-31 11:14:24 +02:00
B. Petersen b60fd2405a Update messenger-backend submodule. 2018-03-31 00:25:04 +02:00
Björn Petersen a0d4bcc2ac Update CHANGELOG.md 2018-03-30 15:27:09 +02:00
B. Petersen aaec546629 show a toast in the qr activity if someone is joining 2018-03-29 15:02:20 +02:00
B. Petersen 88d45ca86c Update messenger-backend submodule. 2018-03-29 00:48:39 +02:00
B. Petersen 8796e77cc0 Update messenger-backend submodule. 2018-03-29 00:44:19 +02:00
B. Petersen 07f05000b9 Update messenger-backend submodule. 2018-03-28 00:47:41 +02:00
B. Petersen 6beb57a2e7 show oobv errors in a dialog 2018-03-28 00:47:24 +02:00
B. Petersen 75dc23c907 Add Basque translation 2018-03-27 23:11:18 +02:00
B. Petersen a0d0f23548 update translations 2018-03-27 23:10:16 +02:00
Björn Petersen 136ab5ec01 Merge pull request #280 from comradekingu/patch-4
Spelling: ⏎, IF, record, mail server, necessarily
2018-03-27 22:30:47 +02:00
Allan Nordhøy 8578ac67c6 ⏎, IF, record, mail server, necessarily 2018-03-27 21:45:10 +02:00
B. Petersen 53907bb44e add link to LICENSE to readme 2018-03-27 11:33:43 +02:00
B. Petersen e71e67ec6a update Spanish and Polish translations 2018-03-23 21:47:31 +01:00
B. Petersen a91e2dd591 typo 2018-03-23 17:11:51 +01:00
B. Petersen 1980c70bad add transifex configuration file 2018-03-23 00:28:49 +01:00
B. Petersen 97380cd16a fix transifex weired end-of-line 2018-03-22 19:52:44 +01:00
B. Petersen 01844469a0 move standards.md here (from deltachat-pages/en/standards) 2018-03-22 14:57:39 +01:00
B. Petersen aace88ebfa simplify interface 2018-03-21 22:15:19 +01:00
B. Petersen cb323ee444 send the 1st oobv message 2018-03-21 17:56:54 +01:00
B. Petersen 4c35109b9b wait for oobv to finish 2018-03-21 14:25:45 +01:00
B. Petersen efec8c45d9 prepare functionality to join oob-verification 2018-03-21 01:17:33 +01:00
B. Petersen f450b14fa9 add initial Chinese and Japanese translations 2018-03-20 22:00:20 +01:00
B. Petersen 91b1155bd4 show mismatching fingerprints 2018-03-20 21:47:56 +01:00
Björn Petersen 0917c9cd1d Update CHANGELOG.md 2018-03-19 21:49:57 +01:00
B. Petersen 64510a419c typo 2018-03-19 16:24:33 +01:00
B. Petersen c01eab9b00 changelog 2018-03-19 15:36:13 +01:00
B. Petersen 76a1fc4803 changelog 2018-03-19 15:33:51 +01:00
B. Petersen 01e46c72cd typo 2018-03-19 15:32:13 +01:00
B. Petersen 957153e79e bump version 2018-03-19 15:27:32 +01:00
B. Petersen c3d1b6814c Update messenger-backend submodule. 2018-03-19 15:26:07 +01:00
B. Petersen d0672865ce changelog 2018-03-19 15:25:42 +01:00
B. Petersen 74ffbf48be hide qr-code options, you can enabled them by entering '.set qr_enabled 1' into the 'my name' field (a little weired, see #215) 2018-03-19 14:06:19 +01:00
B. Petersen 06cb0ff325 Update messenger-backend submodule. 2018-03-18 22:04:23 +01:00
B. Petersen 5af70bc27c allow formatting the message info dialog 2018-03-18 22:04:06 +01:00
B. Petersen 3240a25aef Update messenger-backend submodule. 2018-03-18 00:44:31 +01:00
B. Petersen 88688e6a81 improve qr code error handling 2018-03-17 22:59:18 +01:00
B. Petersen 081e2b23b1 recognize basic qr codes 2018-03-17 19:29:58 +01:00
B. Petersen cc8e178e85 update Tamil translation 2018-03-15 15:44:31 +01:00
B. Petersen 1411e7be15 Update messenger-backend submodule. 2018-03-15 15:41:51 +01:00
B. Petersen d5c2a8b9fa do not call heartbeat() from the main thread - this retults in massive hangs in the past if the network was down when trying to connect to IMAP 2018-03-15 14:23:17 +01:00
B. Petersen 60b9085237 add option to scan qr code 2018-03-14 20:58:43 +01:00
B. Petersen 828f96a73d add an option to show the fingerprint as an OPENPGP4FPR qr-code 2018-03-14 01:19:18 +01:00
B. Petersen 2b8cb0c495 remove unsed parameter 2018-03-13 19:25:23 +01:00
B. Petersen c0457803c7 update Turkish translation 2018-03-11 22:36:41 +01:00
B. Petersen 3a8b40bfa0 Update messenger-backend submodule. 2018-03-11 22:35:31 +01:00
B. Petersen 8e8ade004c update Russian, Tamil, Turkish translations 2018-03-05 16:31:22 +01:00
B. Petersen bb7452918d Update messenger-backend submodule. 2018-03-02 16:23:12 +01:00
B. Petersen 3731884843 add file 2018-03-02 16:22:48 +01:00
B. Petersen 28f9eca5e4 Update messenger-backend submodule. 2018-03-02 13:40:21 +01:00
Björn Petersen deda874741 Merge pull request #257 from deltachat/fix53
Use new function to create groups directly from the Contact requests
2018-03-02 13:32:02 +01:00
B. Petersen ed4ba18767 adapt chat creation to the new deaddrop behavior 2018-03-01 23:03:55 +01:00
B. Petersen edfbab06db simplify drawing deaddrop-reply button condition 2018-03-01 21:36:33 +01:00
B. Petersen bdee370b7e hide 'please start chatting' hint if the overview shows and empty archived-chats list (may happen when chats are unarchived in subsequent screens) 2018-03-01 00:53:17 +01:00
B. Petersen 27a4b7637d Update messenger-backend submodule. 2018-02-27 12:07:30 +01:00
B. Petersen de524cc9f5 changelog 2018-02-27 11:56:24 +01:00
B. Petersen 274d9b0b8f update Albanian translation 2018-02-27 11:43:13 +01:00
B. Petersen 7af947189b wording 2018-02-27 11:01:54 +01:00
B. Petersen ffce932eb9 add links to the issues that are the reason why we stuck on ndk r14b currently 2018-02-25 17:40:13 +01:00
Ampli-fier 3ecb5a4330 mentioned dependency on NDK Revision 14b 2018-02-25 07:50:55 +01:00
B. Petersen 90cd8838f3 remove dead code 2018-02-23 17:29:56 +01:00
B. Petersen ed5c7e549e Update messenger-backend submodule. 2018-02-23 11:55:28 +01:00
B. Petersen a036d892c5 changelog 2018-02-23 11:54:56 +01:00
B. Petersen de1d3ef2bf bump version 2018-02-23 11:52:03 +01:00
B. Petersen 57f58c5619 typo 2018-02-20 16:09:34 +01:00
B. Petersen fcf2b8c20a changelog 2018-02-20 16:01:48 +01:00
B. Petersen ca1a16671a Update messenger-backend submodule. 2018-02-20 15:57:25 +01:00
B. Petersen 1c52ead6bc Update messenger-backend submodule. 2018-02-20 14:39:51 +01:00
B. Petersen a9e0f6c8c4 bump version 2018-02-20 14:39:34 +01:00
B. Petersen 7d7d2acf76 hide retry button on successful setup code entry 2018-02-20 01:13:52 +01:00
B. Petersen ed6e16581d Update messenger-backend submodule. 2018-02-20 00:54:47 +01:00
B. Petersen 083ecdde1a enable setup message parsing (continue key transfer) 2018-02-20 00:54:11 +01:00
B. Petersen 4e862134ee update Turkish translation 2018-02-15 00:34:20 +01:00
B. Petersen 806574ff8d Update messenger-backend submodule. 2018-02-15 00:33:30 +01:00
B. Petersen d0571160c4 Update messenger-backend submodule. 2018-02-14 15:03:01 +01:00
B. Petersen 5a54cd4b8a Update messenger-backend submodule. 2018-02-12 22:48:51 +01:00
Björn Petersen d1f163050c Merge pull request #251 from Hocceruser/contacts-dialog
Show the PermissionContact dialog only once
2018-02-12 22:33:22 +01:00
Hocceruser 81041c8e89 Revert "Do not show the StoragePermission dialog on startup as this permission is not needed yet (only for chats)"
This reverts commit f3508787b8.
2018-02-12 20:51:35 +01:00
Hocceruser f3508787b8 Do not show the StoragePermission dialog on startup as this permission is not needed yet (only for chats) 2018-02-12 20:49:27 +01:00
Hocceruser 6fec2424db Renamed shared preference "general" to "mainconfig". 2018-02-12 20:29:10 +01:00
Björn Petersen e991a209ea Merge pull request #250 from Hocceruser/patch-1
Do not send messages when there is an access error
2018-02-12 18:53:38 +01:00
Hocceruser 8a85c02aba Show the PermissionContact dialog only once 2018-02-11 19:35:04 +01:00
Hocceruser b9edf88093 Do not send messages when there is an access error 2018-02-11 12:39:05 +01:00
B. Petersen f01fa02082 mention the problems with NDK r16b 2018-02-10 19:40:29 +01:00
B. Petersen 5e495c4757 Update french and Turkish translations 2018-02-08 18:21:08 +01:00
B. Petersen dd21632e35 do not flood the log with errors about missing teslacoilsw-URIs 2018-02-08 18:19:22 +01:00
Ampli-fier 5c4898fff7 minor change 2018-01-23 09:08:41 +01:00
B. Petersen c13a5e9b68 changelog 2018-01-18 17:45:55 +01:00
B. Petersen 3a21f4a6c4 Update messenger-backend submodule. 2018-01-18 17:37:05 +01:00
B. Petersen c02aa85cab bump copyright year 2018-01-18 17:36:42 +01:00
B. Petersen 0e731a954c Update messenger-backend submodule. 2018-01-18 17:27:06 +01:00
B. Petersen 271ff3cbb8 bump version 2018-01-18 17:12:58 +01:00
B. Petersen 5ebebc9c43 update Russian and Turkish translations 2018-01-18 16:21:35 +01:00
B. Petersen 091a31d975 Merge branch 'master' of https://github.com/deltachat/deltachat-android 2018-01-18 16:16:38 +01:00
B. Petersen a505f24aa0 Update messenger-backend submodule. 2018-01-18 16:16:23 +01:00
Ampli-fier c58f2017f6 Add IRC channel info 2018-01-14 22:58:54 +01:00
B. Petersen dc6b32d389 update ilya's intro2 2018-01-11 23:46:38 +01:00
B. Petersen ca23b6e2c5 update ilya's intro icons 2018-01-10 23:16:47 +01:00
B. Petersen c8a0d268f9 add new graphics from ilya 2018-01-10 16:35:33 +01:00
B. Petersen 9110ed7c6c update Norwegian and Russian translations 2018-01-09 22:31:49 +01:00
B. Petersen ecf3330e4c Update messenger-backend submodule. 2018-01-07 22:02:45 +01:00
B. Petersen 6b3ce880c0 changelog 2018-01-07 22:01:14 +01:00
B. Petersen 0bbc7677f6 adapt to new api 2018-01-07 21:30:37 +01:00
Björn Petersen ee185d0f87 Merge pull request #241 from Ampli-fier/master
Notification clickable
2018-01-06 23:29:22 +01:00
Ampli-fier 877ca293a0 Notification clickable
Click on Notification opens Delta Chat
2018-01-06 22:36:21 +01:00
B. Petersen 809185769a Wording 2018-01-06 19:39:14 +01:00
Björn Petersen fac34140e9 Merge pull request #238 from Ampli-fier/master
Update the Notification after import
2018-01-05 15:24:49 +01:00
Ampli-fier ec0fd48a1e Update the Notification after import
"Account not configured" was shown instead of the configured mail address.
2018-01-05 14:50:18 +01:00
B. Petersen 0d6d08b911 show links in system command messages, fixes #237 2018-01-04 18:12:39 +01:00
B. Petersen fd8fb3bd55 Update Italian and Polish translations 2018-01-04 14:12:18 +01:00
B. Petersen 1faaab1f9c changelog 2018-01-03 21:38:46 +01:00
B. Petersen 52b6346f08 Update messenger-backend submodule. 2018-01-03 21:34:51 +01:00
B. Petersen 036cc8a9fa adapt to new c-api 2018-01-03 21:32:46 +01:00
B. Petersen 5db22aa4ad remove superfluous to_id 2018-01-03 14:18:42 +01:00
Björn Petersen 2e1e804e8c Merge pull request #232 from staviss/master
Russian translation correction
2017-12-31 15:00:37 +01:00
B. Petersen 78a865166c Update French, Norwegian, Russian, Albanian, Turkish 2017-12-31 14:58:32 +01:00
staviss 35c9a96c18 Update strings.xml 2017-12-31 15:45:56 +03:00
staviss 3b39ff6649 Update strings.xml 2017-12-30 14:31:38 +03:00
B. Petersen 90722b5ac4 changelog 2017-12-25 23:58:27 +01:00
B. Petersen 12e0ecf347 Bump version 2017-12-19 18:38:14 +01:00
B. Petersen da664bc881 update gradle to avoid error about missing forTask() function, do _not_ update version in build.gradle 2017-12-19 18:37:46 +01:00
B. Petersen ce37da0084 Changelog 2017-12-19 18:17:39 +01:00
B. Petersen fb874d5359 Update messenger-backend submodule. 2017-12-19 18:16:16 +01:00
B. Petersen bdc86b0285 revert gradle changes, this should fix #219 2017-12-19 18:15:59 +01:00
B. Petersen a6d8386b08 take more care on JavaArray<->CArray conversions 2017-12-19 13:11:23 +01:00
B. Petersen b69ca46485 protecting c-pointer-handles from being freed twice. 2017-12-18 17:49:49 +01:00
B. Petersen cb30257b83 Update Albanian, Portuguese, Russian, Turkish and Ukrainian translations 2017-12-18 08:31:06 +01:00
B. Petersen 9123210f69 bump version 2017-12-15 17:27:07 +01:00
B. Petersen 630a259a5a add missing MrLotUnref() function, fixes #218 2017-12-15 17:26:54 +01:00
B. Petersen f0183064ed show a 'not yet implemented' message when trying to enter the setup code 2017-12-15 17:08:28 +01:00
B. Petersen 11bca87a47 update gradle 2017-12-15 08:22:56 +01:00
B. Petersen 3863b74fbd Update messenger-backend submodule. 2017-12-15 01:04:56 +01:00
B. Petersen 8216ce7d20 bump version 2017-12-15 01:02:46 +01:00
B. Petersen a7a06ce26b wording 2017-12-15 00:05:37 +01:00
B. Petersen e9e4c01e54 Update messenger-backend submodule. 2017-12-14 23:59:26 +01:00
B. Petersen 47e2fa4a22 disable entering the setup code, for now 2017-12-14 23:59:07 +01:00
B. Petersen 90fad460a6 changelog 2017-12-14 23:54:41 +01:00
B. Petersen 929962c228 bump version 2017-12-14 23:47:52 +01:00
B. Petersen a55edf0ba0 update gradle, simplify versionCode, add flavorDimensions, fixed #217 2017-12-14 23:40:54 +01:00
B. Petersen e255926e10 allow self talk chats 2017-12-14 23:39:06 +01:00
B. Petersen 21ed3e06e6 update german and polish translations 2017-12-11 22:21:53 +01:00
B. Petersen 2ceffb283f update translations 2017-12-09 16:29:50 +01:00
B. Petersen 2e52bacfba wording 2017-12-09 16:28:13 +01:00
B. Petersen 6c624e93b3 Update messenger-backend submodule. 2017-12-07 16:13:49 +01:00
B. Petersen ee5b2371e0 update jni makefile 2017-12-07 16:13:34 +01:00
B. Petersen 18297213f2 update translations 2017-12-06 16:39:31 +01:00
B. Petersen 1373e46d04 regarding cancel/move events on setup message clicks 2017-12-06 12:58:11 +01:00
B. Petersen d7c6bac301 add a little margin below the last setup code row (for kitkat) 2017-12-06 12:48:27 +01:00
B. Petersen b9e3a5454e update Russian translation 2017-12-06 12:26:21 +01:00
B. Petersen 3decd485ea add an option to retry entering the setup code 2017-12-06 12:24:21 +01:00
B. Petersen 285fcf3df3 Update messenger-backend submodule. 2017-12-06 11:27:10 +01:00
B. Petersen 0312960e93 show a message after entering the setup code 2017-12-06 00:39:07 +01:00
B. Petersen cfee7400c9 update Italian 2017-12-06 00:20:03 +01:00
B. Petersen e113fb0902 add layout file for displaying the setup code entry fields 2017-12-06 00:19:18 +01:00
B. Petersen deedd1acac add ui for entering the setup code 2017-12-06 00:17:40 +01:00
B. Petersen e1d912158d detect clicks on setup messages 2017-12-05 17:30:44 +01:00
B. Petersen 373e15b08a changelog 2017-12-05 16:10:57 +01:00
B. Petersen e2bdb0bf13 do not use a symbol for the enter key; while a good idea, in practise, this creates too much confusion and problems with translations. 2017-12-05 16:03:01 +01:00
B. Petersen 19de16887c fix some string escapes 2017-12-05 15:50:07 +01:00
B. Petersen 8609892116 update Albanian 2017-12-05 15:45:08 +01:00
B. Petersen 76717b908d connect after importing a backup, fixes #213 2017-12-05 15:33:52 +01:00
B. Petersen c57ae9861f do the key transfer in a separate thread 2017-12-05 14:01:48 +01:00
B. Petersen 63a2899fdc hilite setup message 2017-12-04 17:44:05 +01:00
B. Petersen 2d86c5b10b update Albanian translation 2017-12-04 16:31:33 +01:00
B. Petersen bd5ba8ebaf Add Setup Message text 2017-12-03 23:52:51 +01:00
B. Petersen 0e90ea1308 add albanian translation 2017-12-03 16:49:25 +01:00
B. Petersen ec05602bb1 update german translation 2017-12-03 16:47:36 +01:00
B. Petersen 2c55c93367 add ui for initiating autocrypt key transfer 2017-12-03 15:53:59 +01:00
B. Petersen b37a91cdd9 adapt to new imex api 2017-11-30 23:44:46 +01:00
B. Petersen 223c39d26a comment 2017-11-30 14:16:56 +01:00
B. Petersen 0a46073552 comment 2017-11-29 17:55:40 +01:00
B. Petersen 0325c9531f Update messenger-backend submodule. 2017-11-29 17:30:21 +01:00
B. Petersen c4ec5c6e1a comment 2017-11-29 17:21:03 +01:00
B. Petersen b00e35f341 Update Portuguese and Turkish translations 2017-11-29 12:05:27 +01:00
B. Petersen a935425e5d typo 2017-11-29 12:03:29 +01:00
B. Petersen 46fc46ee4f switch to Semantic Versioning, https://semver.org/ 2017-11-26 18:00:38 +01:00
B. Petersen d7fcf9433d Update messenger-backend submodule. 2017-11-26 17:59:10 +01:00
B. Petersen ec921e22e8 adapt to new mrlot_t api 2017-11-24 14:42:56 +01:00
B. Petersen 55bc139c72 adapt to new send api 2017-11-23 17:32:58 +01:00
B. Petersen a5187ed1a2 adapt to new late filing api 2017-11-23 13:31:48 +01:00
B. Petersen a79cbe9804 adapt to new api 2017-11-23 11:44:02 +01:00
B. Petersen dd9d10a991 adapt duration/width to new api 2017-11-22 21:59:04 +01:00
Björn Petersen 3c78f6a82f Update ISSUE_TEMPLATE.md 2017-11-22 20:03:03 +01:00
Björn Petersen 4a30940d54 Merge pull request #206 from Ampli-fier/master
Contributing guidelines and Issue template
2017-11-22 19:54:45 +01:00
B. Petersen 0c0e1a35e2 fix memory leak 2017-11-22 16:52:02 +01:00
B. Petersen 0fe4827214 use core function to get the mime type 2017-11-22 16:45:02 +01:00
B. Petersen 80c8b7ef20 use mrmsg_get_file() function 2017-11-22 15:38:43 +01:00
B. Petersen 93a99cdd2c fix weird return values 2017-11-22 15:29:05 +01:00
B. Petersen 76dfa1fca5 adapt to new forward-check-c-api 2017-11-22 15:18:20 +01:00
B. Petersen ba1c32fe05 adapt to new c-api 2017-11-22 14:34:41 +01:00
B. Petersen 1c77b0bf4e Update messenger-backend submodule. 2017-11-21 23:47:14 +01:00
B. Petersen 31331b958f fix usage of jobject and jclass 2017-11-21 23:46:46 +01:00
B. Petersen 80fc718ec8 adapt to new c-api 2017-11-21 23:42:56 +01:00
B. Petersen 823a1e2197 adapt to new C-API 2017-11-21 23:06:11 +01:00
Ampli-fier 8fad2d0226 Update ISSUE_TEMPLATE.md 2017-11-21 22:29:24 +01:00
Ampli-fier ad69dc4ad4 Update CONTRIBUTING.md 2017-11-21 22:19:38 +01:00
B. Petersen f8f89497a9 Adapt to new C-API 2017-11-21 17:01:34 +01:00
B. Petersen 4272ac7619 Adapt to new C-API. 2017-11-21 16:32:40 +01:00
B. Petersen 3e5da102a5 Update checklist 2017-11-20 23:57:35 +01:00
B. Petersen 51742716ec Changelog 2017-11-20 23:43:59 +01:00
B. Petersen fb7a106617 Update messenger-backend submodule. 2017-11-20 18:19:17 +01:00
B. Petersen c016c728d3 Adapt to new C-API. 2017-11-20 16:24:23 +01:00
Ampli-fier b6c1d4b768 Created CONTRIBUTING.md 2017-11-19 19:48:59 +01:00
Ampli-fier 21cb85ce39 Create ISSUE_TEMPLATE.md 2017-11-19 19:48:09 +01:00
B. Petersen fa9f13bba8 Adapt to new API, use mrarray_t instead of carray 2017-11-19 11:41:20 +01:00
B. Petersen 7feda6323a Bump version 2017-11-18 17:15:16 +01:00
B. Petersen 4cd02a673f Changelog 2017-11-18 17:09:11 +01:00
B. Petersen 22659c35fb Update messenger-backend submodule. 2017-11-18 16:58:47 +01:00
B. Petersen a6f89674b8 Add Serbian translation. 2017-11-18 16:31:33 +01:00
B. Petersen 1bfdbfc00d Show correct hint after chat deletion. 2017-11-17 17:45:20 +01:00
B. Petersen 73686ba57f Comment 2017-11-17 16:22:17 +01:00
B. Petersen c44c78c87d Update strings. 2017-11-17 14:59:17 +01:00
Björn Petersen 371042029f Merge pull request #203 from Ampli-fier/master
Minor corrections to strings.xml
2017-11-17 14:58:04 +01:00
Ampli-fier fa0f66bde2 Minor corrections to strings.xml 2017-11-17 14:40:34 +01:00
B. Petersen 843c5b548e Update checklist. 2017-11-17 13:47:14 +01:00
B. Petersen 06a3a6b285 Add changes from modified PR 191, https://github.com/deltachat/deltachat-android/pull/191/ 2017-11-17 13:32:56 +01:00
B. Petersen d2ac75d526 Comment 2017-11-17 11:47:48 +01:00
B. Petersen 723b56b2d9 Simplify txpull/txpush scripts. 2017-11-17 11:42:41 +01:00
B. Petersen 1910ccff83 Wording 2017-11-17 11:42:09 +01:00
B. Petersen 11e676de2c Move update-core script to tools. 2017-11-17 01:25:51 +01:00
B. Petersen eb2c357868 Update messenger-backend submodule. 2017-11-17 01:25:06 +01:00
B. Petersen 4020b9c086 Fix translation issues. 2017-11-17 01:20:31 +01:00
B. Petersen be0670c592 Add a script to push back to Transifex. 2017-11-17 01:19:44 +01:00
B. Petersen d1786bc9dc Update translations. 2017-11-17 01:05:56 +01:00
B. Petersen 215b834da9 Add a script to pull all translation files from Transifex. 2017-11-17 01:03:27 +01:00
B. Petersen 5e77be8dd0 Update messenger-backend submodule. 2017-11-16 22:32:27 +01:00
B. Petersen 913663743c Bump version 2017-11-16 21:41:33 +01:00
B. Petersen 95786d1268 Update messenger-backend submodule. 2017-11-15 22:41:49 +01:00
B. Petersen cfc69e483e Changelog 2017-11-15 22:33:50 +01:00
B. Petersen 73b59ed4bf Adapt to new synchronous configure function. 2017-11-15 22:28:55 +01:00
B. Petersen e8a996d1f3 Update messenger-backend submodule. 2017-11-15 14:03:54 +01:00
B. Petersen c04ba91b50 Adapt to new blobdir API. 2017-11-15 13:43:07 +01:00
B. Petersen d763be42a1 Adapt to new MR_EVENT_IS_OFFLINE 2017-11-15 13:08:08 +01:00
B. Petersen 10d01b0d68 Adapt configure progress indicator. 2017-11-15 09:45:19 +01:00
B. Petersen 7699c5e63f Bump version 2017-11-14 22:21:34 +01:00
B. Petersen 78a033a221 Changelog 2017-11-14 22:15:08 +01:00
B. Petersen 7f23570160 Update messenger-backend submodule. 2017-11-14 22:10:01 +01:00
B. Petersen a9e1dd7e38 Update messenger-backend submodule. 2017-11-14 20:39:04 +01:00
B. Petersen 058f13f9d8 Show 'Leave groups' menu entry only in groups. 2017-11-14 16:53:25 +01:00
B. Petersen 515fb92873 Update messenger-backend submodule. 2017-11-13 19:25:30 +01:00
B. Petersen abac76125c Adapt to new API. 2017-11-13 19:25:15 +01:00
B. Petersen 149df4e3d7 Adapt to new API. 2017-11-12 23:19:47 +01:00
B. Petersen 0a4796e959 Update messenger-backend submodule. 2017-11-11 12:46:33 +01:00
B. Petersen e79b6d9b1d Adapt to core changes. 2017-11-10 17:18:27 +01:00
B. Petersen af471f4cf8 Adapt getFreshMsgCount() to new core. 2017-11-10 12:25:33 +01:00
B. Petersen 1c97c2e408 Sending messages via MrMailbox instead of MrChat. 2017-11-10 10:54:47 +01:00
B. Petersen 2c34aa83c3 Set os name. 2017-11-07 15:55:06 +01:00
B. Petersen bf93a9e54b Remove mrosnative.c from JNI-wrapper. 2017-11-06 11:30:16 +01:00
B. Petersen c7c3990283 Update messenger-backend submodule. 2017-11-02 23:04:01 +01:00
B. Petersen e4454044f6 Dismissing the contact request popup only marks the messages from the contact in scope as being noticed. 2017-11-02 23:03:15 +01:00
B. Petersen f6ad0f2ee5 Print system messages different from normal messages. 2017-11-02 22:46:31 +01:00
B. Petersen 9abf23073d Add option to block a contact message box that opens when the contact request popup is clicked. 2017-11-02 22:34:04 +01:00
B. Petersen 66253123ad Delete chats directly from the chatlist. Update global search if messages or chats are deleted. 2017-11-02 19:16:19 +01:00
B. Petersen 920a683e9b Do not implicitly leave groups, do not send leave-messages unexpectedly. 2017-11-02 18:20:35 +01:00
B. Petersen a0ce2b5dea Archive chats from chats menu. 2017-11-01 18:27:48 +01:00
B. Petersen be1e1fa3c1 Show 'archived chats' title. 2017-11-01 15:38:29 +01:00
B. Petersen 0a925f8f51 Draw 'Archived' flag. 2017-11-01 14:21:35 +01:00
B. Petersen 2db619e263 Remove dead code. 2017-11-01 13:46:24 +01:00
B. Petersen e75e9410d6 Remove dead code. 2017-11-01 13:37:52 +01:00
B. Petersen bbc09af77b No floating button in archive list. 2017-11-01 13:33:44 +01:00
B. Petersen e3d3f13bef Show archived chats. 2017-11-01 13:13:56 +01:00
B. Petersen affe4ca82e Get rid of global chatlist. 2017-11-01 13:07:17 +01:00
B. Petersen 3b9a2e2d6d Haptical feedback on chatlist longpress. 2017-11-01 07:54:34 +01:00
B. Petersen dff6fedb67 Add option to (un-)archive threads. 2017-10-31 22:05:25 +01:00
B. Petersen 9615a47f03 Possibility to start a chat directly from the deaddrop popup. 2017-10-31 02:54:02 +01:00
B. Petersen 87ae709add Remove dead code. 2017-10-30 09:56:25 +01:00
B. Petersen 80ecd1f697 Update German and Italian translations. 2017-10-29 22:26:08 +01:00
B. Petersen 481b5816b1 Add the deaddrop temporary to the chatlist on new messages from unknown contacts. 2017-10-28 19:33:14 +02:00
B. Petersen 97da31ae2d Init notifications for deaddrop. 2017-10-28 18:37:32 +02:00
B. Petersen 48684bded4 Check vector drawable support on KitKat, see https://stackoverflow.com/questions/37892573/android-vector-drawables-in-support-library-v24-0-0 - seems to work :) 2017-10-28 17:06:54 +02:00
B. Petersen b191ad8b84 Simplify chatlist cell. 2017-10-28 16:52:31 +02:00
B. Petersen 363fa04dca Typo 2017-10-28 16:24:36 +02:00
B. Petersen e8c11aef6e Add Turkish translation. 2017-10-28 16:08:15 +02:00
B. Petersen d0df88b113 Use standard SimpleDateFormat class. 2017-10-28 15:51:11 +02:00
B. Petersen 477f3e638c Use native NumberPicker. 2017-10-28 12:39:47 +02:00
B. Petersen 478e093783 Rework deaddrop line in chatlist. 2017-10-26 22:11:26 +02:00
B. Petersen a7c13e83c9 Refactor Dialogs->Chatlist, prepare showing deaddrop temporary in chatlist. 2017-10-26 18:49:07 +02:00
B. Petersen e9e1db7773 Add Norwegian Bokmål translation and Tamil translations, update Catalan, German, French, Italian, Korean, Dutch, Polish, Portuguese, Russian, Telugu and Ukrainian translations. 2017-10-26 17:02:22 +02:00
B. Petersen f1a2268712 Update messenger-backend submodule. 2017-10-25 21:05:39 +02:00
Björn Petersen d28394d59e Merge pull request #192 from comradekingu/patch-2
linux → Linux, etc
2017-10-25 20:55:11 +02:00
B. Petersen aa5d6d289a Typo 2017-10-25 20:34:26 +02:00
Allan Nordhøy 36f56d557d linux → Linux, etc 2017-10-25 19:22:27 +02:00
B. Petersen e8dcd05f79 Do not show the padlock if end-to-end-encryption is disabled by the user, fixes #190. 2017-10-25 01:49:34 +02:00
B. Petersen b29a50304c Show more detailed reasons about failed end-to-end-encryptions. 2017-10-25 00:23:24 +02:00
B. Petersen 61355499f4 Wording. 2017-10-24 16:23:13 +02:00
B. Petersen 05fd267cb8 Cleanup 2017-10-23 20:26:52 +02:00
B. Petersen 440e3d8a61 Cleanup 2017-10-23 20:24:43 +02:00
B. Petersen ab82ed53e5 Cleanup. 2017-10-23 19:34:03 +02:00
B. Petersen 151c4426ec Update recent emoji view directly; if the recent emoji list is empty, show the first smilies page. 2017-10-23 01:11:01 +02:00
B. Petersen 3c87751491 Rework Emoji code. 2017-10-22 18:03:38 +02:00
B. Petersen 9f93cb8bd8 Rework Emoji code. 2017-10-22 17:53:15 +02:00
B. Petersen 5bf9311371 Cleanup emoji code. 2017-10-22 16:39:56 +02:00
B. Petersen 45fede3a02 Merge com.b44t.messenger and com.b44t.ui. 2017-10-22 13:31:11 +02:00
B. Petersen addadf9634 Cleanup AOSP. 2017-10-22 02:57:52 +02:00
B. Petersen 520a7a6e9e Cleanup 2017-10-22 01:08:17 +02:00
B. Petersen 65eb204ddc Refactor Emoji views. 2017-10-21 19:59:11 +02:00
B. Petersen 6eee460532 Rename Settings*Activity to what they are, a Settings*Fragment. 2017-10-21 17:57:00 +02:00
B. Petersen c85fa85290 Show messages only for explicitly wanted chats. 2017-10-21 02:42:28 +02:00
B. Petersen 39324c6f73 Add copy-to-clipboard function for 'About / Info'. 2017-10-21 01:29:58 +02:00
B. Petersen 9702286e59 Wording (not sure when we parse the status and really show it in the profiles; so we just lower the expectations). 2017-10-18 17:15:19 +02:00
B. Petersen 512acd9fc3 Bump version 2017-10-18 13:44:20 +02:00
B. Petersen 930facc457 Changelog. 2017-10-18 13:27:08 +02:00
B. Petersen 5a428458b5 Show correct export/import done hints. 2017-10-14 16:25:49 +02:00
B. Petersen fa12c90f23 Re-create symbolic links when updating deltachat-core. 2017-10-14 16:00:40 +02:00
B. Petersen 2e16ccb041 Changelog 2017-10-14 02:38:17 +02:00
B. Petersen df7dda0e96 Update messenger-backend submodule. 2017-10-14 02:37:04 +02:00
B. Petersen 28c86b4784 Simplify some AlertDialog.Builder calls. 2017-10-09 17:40:19 +02:00
B. Petersen 175a4ddf95 Bump version. 2017-10-09 16:17:10 +02:00
B. Petersen e4b24b0d99 Typo 2017-10-08 23:26:15 +02:00
B. Petersen 989fcd9564 Update messenger-backend submodule. 2017-10-08 23:22:46 +02:00
B. Petersen 4877ef1407 Changelog. 2017-10-08 23:21:26 +02:00
B. Petersen c1487e3f74 Language fixes. 2017-10-08 23:08:40 +02:00
B. Petersen 6d4650bba9 Update Portuguese. 2017-10-08 23:02:56 +02:00
B. Petersen fb6f02696d Update Italian. 2017-10-08 22:59:56 +02:00
B. Petersen 8ed4abebb7 Update French. 2017-10-08 22:58:45 +02:00
B. Petersen f90de9c0de Update Ukrainian. 2017-10-08 22:57:22 +02:00
B. Petersen 206d2a58d2 Update polish. 2017-10-08 22:55:02 +02:00
B. Petersen 6001d2fb3a Update russian. 2017-10-08 22:53:29 +02:00
B. Petersen 1ceab73dfe Update German. 2017-10-08 22:52:29 +02:00
B. Petersen dc38b949a8 Changelog 2017-10-08 22:52:19 +02:00
B. Petersen 96b740d4da Make exported files visible to USB/MTP. 2017-10-08 21:58:41 +02:00
B. Petersen 1455f7849b The 'Back' button works in the welcome-screen as expected. 2017-10-08 14:01:37 +02:00
B. Petersen 7f14a4da90 Code cleanup. 2017-10-08 12:09:51 +02:00
B. Petersen 0d04064969 Code cleanup. 2017-10-08 12:06:12 +02:00
B. Petersen 37fbda3126 Changelog 2017-10-08 00:23:26 +02:00
B. Petersen 023e62fbd4 Import backups. 2017-10-08 00:22:40 +02:00
B. Petersen b818007398 Update messenger-backend submodule. 2017-10-06 00:58:57 +02:00
B. Petersen 7c1bb82dd4 Prepare import functionality. 2017-10-06 00:58:43 +02:00
B. Petersen e3a6fa4cac Code cleanup. 2017-10-03 22:35:23 +02:00
B. Petersen 6e6aa88b3a Do not query password before import. 2017-10-03 18:12:12 +02:00
B. Petersen c266bd6eba Query password before import. 2017-10-03 14:46:37 +02:00
B. Petersen e383c2b79a Clearify string meaning. 2017-10-03 13:12:34 +02:00
B. Petersen 56a5b23d98 Cleanup 2017-10-03 00:14:41 +02:00
B. Petersen 10eb41aca7 Merge branch 'master' of https://github.com/deltachat/deltachat-android 2017-10-02 21:11:57 +02:00
B. Petersen a0a50e3433 Query password before exporting anything. 2017-10-02 21:11:43 +02:00
Björn Petersen 07449e9018 Merge pull request #171 from Ampli-fier/master
Intro5 Message updates in strings.xml (de)
2017-10-02 16:35:50 +02:00
Ampli-fier 5027373b54 Intro5 Message updates in strings.xml (de)
To align with (coming) web updates
2017-09-30 19:51:24 +02:00
B. Petersen 1d1e08fc15 Add backup function. 2017-09-29 18:30:15 +02:00
Björn Petersen 6eabf32464 Update README.md 2017-09-28 22:04:28 +02:00
B. Petersen acb4a2e5a0 Update messenger-backend submodule. 2017-09-24 21:42:39 +02:00
B. Petersen ba1b5211a2 Try to improve battery usage. 2017-09-24 14:02:29 +02:00
B. Petersen eb8d248fd9 Update messenger-backend submodule. 2017-09-19 11:37:16 +02:00
B. Petersen f248a86ce2 Add C file. 2017-09-19 11:36:26 +02:00
B. Petersen 8e9b55958d Changelog 2017-09-18 00:16:21 +02:00
B. Petersen 6decd0ee76 Changelog 2017-09-12 19:52:52 +02:00
B. Petersen 16384c12c2 Update grade. 2017-09-04 13:18:33 +02:00
B. Petersen 9be5c50e31 Add a section about how to setup a development environment. 2017-09-03 01:50:19 +02:00
B. Petersen 46421d8821 A little hack: Disable sqlite's WAL (Write-ahead-log) as it uses a possibly weired pointer reference to mmap in aSyscall[] - mmap seems to be a #define that cannot be used this way on Android - otherwise we get the error: 'mmap' undeclared here (not in a function) 2017-09-03 01:47:13 +02:00
B. Petersen 13cb356aef Bump version. 2017-09-03 01:44:56 +02:00
B. Petersen b210b72460 APP_PLATFORM android-9 is unsupported. Using minimum supported version android-14 (same as used for the Java part). 2017-09-03 00:30:22 +02:00
B. Petersen 6aa63f48e1 Add URL to default footer. 2017-08-27 14:13:14 +02:00
B. Petersen eaba4a4ab7 Changelog 2017-08-26 13:23:07 +02:00
B. Petersen fbc61bce2a Update messenger-backend submodule. 2017-08-23 21:58:26 +02:00
B. Petersen 5c98e34966 Changelog. 2017-08-23 21:58:00 +02:00
B. Petersen 9b461d372d Update German, Spanish, French, Hungarian, Italian, Polish, Portuguese and Russian translations from Transifex. 2017-08-23 21:48:41 +02:00
B. Petersen b57a81c7c2 Add Catalan translation. 2017-08-23 21:46:46 +02:00
B. Petersen 7cf41805ec Add Telugu translation. 2017-08-23 21:42:29 +02:00
B. Petersen 59efa059fd Add Ukrainian translation. 2017-08-23 21:35:46 +02:00
Björn Petersen e462d66746 Update README.md 2017-08-23 18:50:42 +02:00
Björn Petersen cd0c3f533a Merge pull request #147 from Poussinou/master
Update README.md
2017-08-23 18:49:18 +02:00
B. Petersen 0027b17ef9 Remove badge counter on app restart. 2017-08-23 18:42:06 +02:00
Poussinou 9ee5325f29 Update README.md 2017-07-31 16:34:46 +02:00
B. Petersen ac433edcf8 Do no spread the original authors name nor address when forwarding messages. 2017-07-28 17:56:13 +02:00
B. Petersen f71e7e58e1 Clearify submodule usage. 2017-07-28 14:47:52 +02:00
B. Petersen 4af1e9263a Add submodule hint to readme. 2017-07-28 11:53:36 +02:00
B. Petersen 01d3a75faa Changelog 2017-07-27 10:56:23 +02:00
B. Petersen d015ab4e93 Typo 2017-07-26 22:12:38 +02:00
B. Petersen abcf3600a6 Add 'Blocked users' to advanced settings as it is no preferred way to block users from here or to unblock some. The preferred way is to use the 'Block user' option in the profile of the user to block. 2017-07-26 20:19:19 +02:00
Björn Petersen ac6c497721 Merge pull request #131 from vitalyster/debugkeystore
gradle: use default debug keystore if there is no configured one
2017-07-26 17:38:06 +02:00
Vitaly Takmazov 2dafecc665 gradle: use default debug keystore if there is no configured one 2017-07-26 11:53:57 +03:00
B. Petersen 3a48f0a04a Allow emoticons in avatars. 2017-07-26 01:27:01 +02:00
B. Petersen 1caf3a8956 Explain why debug.keyfile is in separate directory. 2017-07-26 01:00:45 +02:00
B. Petersen ba1dd07b01 Revert "gradle: use default debug keystore path" because it allows using the same debug.keystore file on different machines which is needed to use testing devices with chats wich will be lost when using different debug.keystore files on different developer machines.
This reverts commit e357786980.
2017-07-26 00:48:12 +02:00
Björn Petersen 695a97276f Merge pull request #128 from vitalyster/debugkeystore
gradle: use default debug keystore path
2017-07-26 00:15:04 +02:00
B. Petersen 0d50753754 Cleanup AvatarDrawable code. 2017-07-26 00:06:10 +02:00
Vitaly Takmazov e357786980 gradle: use default debug keystore path 2017-07-25 22:36:32 +03:00
B. Petersen 54ab0ba860 Update messenger-backend submodule. 2017-07-25 21:28:39 +02:00
B. Petersen 44675fffe5 Cleanup code. 2017-07-25 20:04:35 +02:00
B. Petersen e5c6fb0e50 Wording 2017-07-25 15:39:40 +02:00
B. Petersen 82666fb5f0 Ask before deleting the group image. 2017-07-25 15:28:26 +02:00
B. Petersen 9ab86ca310 Use group profile image. 2017-07-22 19:37:35 +02:00
B. Petersen 7153b4c7be Let the user select group images and send message. 2017-07-22 14:47:18 +02:00
B. Petersen e73f4f30cb Add an extra text for 'Group image deleted'. 2017-07-22 14:09:54 +02:00
B. Petersen e365a20d6e Show text 'Group image changed.' beside such action images. 2017-07-22 13:32:58 +02:00
B. Petersen 4a9f9eefd2 Remove dead code. 2017-07-22 12:55:29 +02:00
B. Petersen 2ff632bb87 Do not edit avatar of contact requests & Co. 2017-07-21 17:43:59 +02:00
B. Petersen f5be0708be Add 'Edit image' menu to profile. 2017-07-21 17:32:54 +02:00
B. Petersen 92908ab673 Remove unused resources. 2017-07-21 16:53:33 +02:00
B. Petersen c20f8699f3 Comment 2017-07-21 16:47:30 +02:00
B. Petersen 81e60a3916 Simplify profile animation. 2017-07-21 16:23:19 +02:00
B. Petersen 4f8e25a6c0 Simplify profile animation. 2017-07-21 16:12:26 +02:00
B. Petersen 4038088c5f Remove dead code. 2017-07-21 15:39:47 +02:00
B. Petersen bc972faf2a Allow status text being in the state 'default status'. 2017-07-21 12:29:31 +02:00
B. Petersen 0720fec295 Do not change cursors etc., just use the system defaults. 2017-07-21 02:11:47 +02:00
B. Petersen fba37c7c12 Check for null-pointers. 2017-07-21 01:58:04 +02:00
B. Petersen debaa48e58 Simplify create/rename contact/groups dialogs. 2017-07-21 01:34:22 +02:00
Björn Petersen c4a63657cd Merge pull request #122 from deltachat/newstatus
Newstatus
2017-07-20 21:55:38 +02:00
Björn Petersen a723783c01 Update README.md 2017-07-20 21:00:38 +02:00
B. Petersen 26a922e16a Remove avatar from group creation (This and other secondary settings can be done in the group profile later). 2017-07-17 14:31:28 +02:00
B. Petersen 9a20d33d55 Remove unused resources. 2017-07-17 13:32:14 +02:00
B. Petersen 3abe9946d4 Make status text editable. 2017-07-17 00:40:35 +02:00
B. Petersen dcf4857b6e Remove tablet conditions from launcher.
Remove some isTablet()-calls.

Remove rest isTablet() code.
2017-07-16 22:01:06 +02:00
B. Petersen 701ae43bd6 Remove drawer functionality.
Remove open/close drawer functions.

Remove MenuDrawable.

Remove DrawerLayoutContainer.drawChild(), not sure, if this is needed.

Remove DrawerLayoutAdapter.

Remove menu_shadow drawable.

Cleanup drawer drawing.

Remove ManageSpaceActivity.

Rename DrawerProfileCell to SettingsProfileCell.

Remove title overlay.

Remove drawer from action bar.

Rename DrawerLayoutContainer to LaunchLayoutContainer.

Add LaunchLayoutContainer file.
2017-07-15 19:48:28 +02:00
B. Petersen cb67d0a45b Changelog. 2017-07-15 13:10:41 +02:00
B. Petersen 1684bc3acc Bump version. 2017-07-14 13:52:55 +02:00
B. Petersen ee32ef2f09 Update messenger-backend submodule. 2017-07-13 23:32:56 +02:00
B. Petersen c9ed86a81a Update Polish. 2017-07-13 23:30:50 +02:00
B. Petersen 8421e85229 Wording. 2017-07-13 23:12:15 +02:00
B. Petersen 0b2eead1be Changelog 2017-07-13 18:16:36 +02:00
B. Petersen 0d30d4a4f3 Changelog 2017-07-12 18:16:43 +02:00
B. Petersen ac55638e46 Update Portuguese. 2017-07-07 13:48:13 +02:00
B. Petersen e57c45da71 Rename 'Read receipt' to 'MDN'. 2017-07-05 17:00:27 +02:00
B. Petersen 4b93e2e57c Wording 2017-07-05 14:08:55 +02:00
B. Petersen 2bab5a65f4 Localize. 2017-07-04 23:07:41 +02:00
B. Petersen 66f379f80b Move MIME creation to new mrmimefactory class. 2017-07-04 01:40:32 +02:00
B. Petersen 4a8749349f Changing incoming message states from unseen/seen to fresh/noticed/seen. 2017-07-03 23:35:16 +02:00
B. Petersen 54fe2accb6 Wording 2017-06-29 22:27:40 +02:00
B. Petersen ec21b57106 Request read receipts. 2017-06-29 16:39:29 +02:00
B. Petersen 9e62523b6d Bump version. 2017-06-29 14:24:00 +02:00
B. Petersen 2b69ba5716 Correct russian plural forms, thanks to @guland2000 2017-06-29 00:51:25 +02:00
B. Petersen dadfecf8f3 Changelog. 2017-06-28 18:48:04 +02:00
B. Petersen e5695194d5 Update messenger-backend submodule. 2017-06-28 18:42:56 +02:00
B. Petersen e1c192ddd3 Changelog. 2017-06-28 18:40:41 +02:00
B. Petersen ee5e6cb125 Add deprecated export routines, for now. 2017-06-28 18:28:01 +02:00
Björn Petersen 5ca9bbff28 Update README.md 2017-06-28 12:49:08 +02:00
B. Petersen 1761335092 Add missing russian plural forms. 2017-06-27 14:03:31 +02:00
Björn Petersen b87e135b3c Update CHANGELOG.md 2017-06-26 01:20:43 +02:00
Björn Petersen c1154a87cc Update CHANGELOG.md 2017-06-23 18:29:01 +02:00
B. Petersen a683880f7e Changelog 2017-06-23 15:16:41 +02:00
B. Petersen 23acff2a87 Encrypt group chats. 2017-06-22 17:35:30 +02:00
B. Petersen 484d723c75 Cleanup chat list: As we encrypt messages, not chats, there is not need for a chat-encrypted state. 2017-06-21 12:22:38 +02:00
B. Petersen ecab439d0a Unify error icon. 2017-06-21 12:08:47 +02:00
B. Petersen d02732c16d Refactor E2EE. 2017-06-21 11:58:12 +02:00
B. Petersen f55106612c Typo 2017-06-19 21:29:01 +02:00
B. Petersen efde505eb5 Pimp lock-screen icon and text. 2017-06-19 12:57:08 +02:00
B. Petersen 7ae296dcac Use lock icon for locking the app. 2017-06-19 01:15:04 +02:00
B. Petersen 8a20f439c0 Fix french apostrophs. 2017-06-19 01:14:36 +02:00
B. Petersen 57a8251313 Merge branch 'master' of https://github.com/deltachat/deltachat-android 2017-06-19 00:51:42 +02:00
B. Petersen 6039a4e6b1 Use a lock-icon for end-to-end-encrypted messages. 2017-06-19 00:51:17 +02:00
Björn Petersen ea59519c09 Merge pull request #106 from Almtesh/patch-1
French translation
2017-06-18 20:08:02 +02:00
Gilles Émilien MOREL 84e7345607 French translation
Added new translations
Corrected my and other's mistaken translations.
2017-06-18 17:13:40 +02:00
B. Petersen 4357817faf Wording 2017-06-18 00:59:56 +02:00
B. Petersen fb4f378b86 Merge branch 'master' of https://github.com/deltachat/deltachat-android 2017-06-17 15:01:15 +02:00
B. Petersen ee081b3037 End-to-end-encrypted messages are marked by a sign beside the timestamp. 2017-06-17 15:01:06 +02:00
Dr. Tobias Quathamer 33d3d92f62 Update URLs, fix typo 2017-06-16 22:48:20 +02:00
B. Petersen 9ba8659536 Update Portuguese translation. 2017-06-15 16:53:38 +02:00
B. Petersen 3c14d32e19 Set help URL for Spanish locale to Spanish homepage. 2017-06-13 13:24:07 +02:00
B. Petersen 6cb866233b Wording 2017-06-12 10:30:08 +02:00
B. Petersen e98bffdacc Cleanup import/export interface. 2017-06-07 08:51:44 +02:00
B. Petersen 96400768b5 Make the backup task cancellable. 2017-06-06 14:10:15 +02:00
B. Petersen dd8474cecf Add backup export function. 2017-06-06 13:42:16 +02:00
B. Petersen 7b98265a2a Update Polish translation. 2017-06-05 00:40:18 +02:00
B. Petersen 03a20c26db Changelog. 2017-06-04 16:26:39 +02:00
B. Petersen fd0731c52a Update messenger-backend submodule. 2017-06-04 16:25:44 +02:00
B. Petersen 7856fb22e4 Improved video quality of short clips. 2017-06-04 16:06:45 +02:00
B. Petersen d38a4535bb Pimp settings. 2017-06-04 14:40:25 +02:00
B. Petersen 757ad7266f Simplify settings structure and avoid an additional action bar menu. 2017-06-04 11:26:00 +02:00
B. Petersen da8274de1b Add backup menu entry. 2017-06-04 02:13:01 +02:00
B. Petersen 22bd12cfd6 Improve encryption state dialog. 2017-06-04 01:44:37 +02:00
B. Petersen 6d868cb541 Changelog. 2017-06-03 00:57:49 +02:00
Björn Petersen ca2ad6fa68 Merge pull request #92 from guland2000/patch-2
Update strings.xml
2017-06-03 00:40:15 +02:00
guland2000 718dd6d1a9 Update strings.xml
374 and 375
2017-06-02 17:12:50 +02:00
guland2000 b4db0d7d70 Update strings.xml
1. Fix some error, linguistic and semantic (contextual) : strings 86,118,129,223,343,345,351 
2. and added New strings 377, 378, 379,380,381,382,383,384,385.
2017-06-02 00:58:09 +02:00
B. Petersen 0de45907ff Update messenger-backend submodule. 2017-06-01 20:00:05 +02:00
B. Petersen 9fbc3773b6 Update changelog. 2017-06-01 19:59:28 +02:00
B. Petersen 4707d43e84 Show the number of imported keys. 2017-06-01 18:39:17 +02:00
B. Petersen dabae2d63a Ask before importing private keys (as this may change the default). 2017-06-01 13:40:12 +02:00
B. Petersen 3c9204da0f Move 'Privacy/Key-settings' to 'Advanced settings' and 'Privacy/PIN+Blocked users' to 'Settings'; we do no longer have a 'Privacy dialog'; Delta Chat regards the user's privacy everywhere with every bit. 2017-06-01 11:53:42 +02:00
B. Petersen 4b11524fcf Add Import and Export key options. 2017-06-01 01:33:11 +02:00
B. Petersen 7a8c279e4f Force added downloads to be scanned; if left out, at least on my Nexus 4/Mashmallow, downloads do not appear via USB. With scan=true it works. 2017-06-01 01:32:50 +02:00
B. Petersen b3708d1bd4 Enable E2EE by default. 2017-05-31 18:03:19 +02:00
B. Petersen 3ffb476aa9 Bump version. 2017-05-31 17:47:26 +02:00
B. Petersen 7641975cc6 Do not print a message summary in the subject of encrypted messages. 2017-05-29 00:48:58 +02:00
B. Petersen dbc23af348 Prepare encrypted MIME-Messages. 2017-05-27 17:57:45 +02:00
B. Petersen dac8dbd330 Correct OpenSSL bindings. 2017-05-26 15:18:45 +02:00
B. Petersen a47dd34500 Enable Camellia cryptographic algorithm. 2017-05-18 14:22:31 +02:00
B. Petersen b160d1b1e9 Add option to enable E2E-Encryption (for now, it is disabled by default). 2017-05-18 02:39:27 +02:00
B. Petersen 90d5c4fd2c Prepare OpenSSL to be used for E2E-Encryption. 2017-05-18 02:38:48 +02:00
B. Petersen 3311bb56e4 Enable CAST5 cryptographic algorithm (default cipher in some versions of GPG and PGP). 2017-05-18 02:37:54 +02:00
B. Petersen d6ff7e4480 Typo 2017-05-15 11:08:49 +02:00
B. Petersen b7ea939ac7 Change header notice to real name. 2017-05-15 11:07:28 +02:00
B. Petersen 46a2930fa0 Debug prints. 2017-05-14 18:20:18 +02:00
B. Petersen e8c6309e93 Add title to 'Compare keys' dialog. 2017-05-12 17:11:55 +02:00
B. Petersen b9a72db110 Call 'Compare keys' core-code. 2017-05-12 15:45:28 +02:00
B. Petersen a6d8d0e3b6 Remove currently unneeded options. 2017-05-10 14:42:36 +02:00
B. Petersen a7a7e66bb8 Wording. 2017-05-10 13:42:38 +02:00
B. Petersen a2ad1d35e7 Wording. 2017-05-10 13:22:44 +02:00
B. Petersen dd16cc7d89 Show 'Notifications and sounds' settings preview. 2017-05-10 13:03:12 +02:00
B. Petersen 9673ec1a96 Show name preview or 'Not set' in settings dialog. 2017-05-10 11:30:17 +02:00
B. Petersen 8d8c9b808b Move text size option from 'Advanced settings' to 'Settings'. 2017-05-10 11:27:43 +02:00
B. Petersen d379d66751 Wording 2017-05-10 11:10:57 +02:00
B. Petersen f44989a18d Move 'Advanced settings' to the action bar menu. 2017-05-10 11:10:44 +02:00
B. Petersen 7a5b880a7a Move option 'Show contact requests in chatlist' from 'Privacy' to 'Advanced options' (we want the 'Advanced options' to hold all options that are not needed by the main audience). 2017-05-10 10:58:06 +02:00
B. Petersen c859e9bf70 Bump version. 2017-05-09 19:31:52 +02:00
Björn Petersen 6e4361d129 Merge pull request #87 from signorsayyed/fix-typos
Fix some typos in english intro
2017-05-09 00:27:29 +02:00
arshad e5cd1be194 Fix some typos in intro
*Fixed some typos and grammatical errors that are displayed during intro.

Signed-off-by: arshad <me@signorsayyed.com>
2017-05-08 22:11:00 +05:30
B. Petersen 5a3faba0a3 Simplify 'Contact requests' activity. 2017-05-08 15:11:36 +02:00
B. Petersen 0b15b5b55f Move 'Account settings' to the action bar menu. 2017-05-08 11:59:59 +02:00
B. Petersen ecd06e4b0f Add user wallpaper and user name above settings dialog. 2017-05-07 01:57:51 +02:00
B. Petersen 8bf5d98d04 Pimp settings dialog. 2017-05-06 15:05:10 +02:00
B. Petersen b73b1e430e Profile: Option to copy the email address to the clipboard. 2017-05-06 12:54:25 +02:00
B. Petersen 563ec61d52 Pimp profile view. 2017-05-06 12:45:05 +02:00
B. Petersen ba02fae57f Comment 2017-05-06 01:17:22 +02:00
B. Petersen 5c61abe256 Show larger profile photo. 2017-05-06 01:15:36 +02:00
B. Petersen 0d93f9a678 Align search fields together with the new back button width. 2017-05-05 23:59:48 +02:00
B. Petersen bff79e1c34 Revert 'Contact requests' subtitle change. 2017-05-05 23:02:56 +02:00
B. Petersen 68db96483c Rename 'Mailbox' to 'Contact requests' which seems to be much clearer in most cases (except if the 'Contact requests' are shown in the chatlist as a separate group, however, even this is okay for me). 2017-05-05 22:59:22 +02:00
B. Petersen 2bdf88373d Narrow the back button slightly. 2017-05-05 16:47:31 +02:00
B. Petersen cdb43876bf Show deaddrop subtitle hint below option to show deaddrop in chat overview. 2017-05-05 16:08:03 +02:00
B. Petersen 6f1cecdaa9 Deaddrop subtitle: Show a hint instead of uninteresting contact count. 2017-05-05 15:57:05 +02:00
B. Petersen 363d78d61c Simplify menu in new non-drawer-mode. 2017-05-05 15:14:26 +02:00
B. Petersen 02d9258c9c Add a separate 'View profile' menu entry to chat view (does the same as the click on the avatar) 2017-05-05 14:43:05 +02:00
B. Petersen 8a567c63b1 Use a menu instead of a drawer; for now, you can get the drawer back by entering '.set drawer 1' into the 'Settings / My Name' field. 2017-05-05 12:46:49 +02:00
B. Petersen 880139b1ff Check back-button against null-pointers. 2017-05-05 11:33:24 +02:00
410 changed files with 15268 additions and 21725 deletions
+25
View File
@@ -0,0 +1,25 @@
# Thank you for contributing to Delta Chat.
Delta Chat is divided in two parts: Android and [Core](https://github.com/deltachat/deltachat-core).
In short, the Android part is about the User Interface. The Interface is translated using [Transifex](https://www.transifex.com/delta-chat/delta-chat-android). 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/).
Delta Chat Core is used in the Android and in the [iOS](https://github.com/deltachat/deltachat-ios) version.
Please try to create your issue to the respective Issue tracker: Here, or in [Core](https://github.com/deltachat/deltachat-core/issues). Don't worry, if you are not sure. The issue will be handled anyway.
If you intend to create a **feature request** for Delta Chat, please check the exiting requests for
* [Android](https://github.com/deltachat/deltachat-android/issues?q=is%3Aissue+label%3A%22feature+request%22+sort%3Aupdated-desc) and
* [Core](https://github.com/deltachat/deltachat-core/issues?q=is%3Aissue+label%3A%22feature+request%22+sort%3Aupdated-desc)
first.
If you intend to send a **bug report** for Delta Chat, search for bugs (including closed) in
* [Android](https://github.com/deltachat/deltachat-android/issues?&q=is%3Aissue) and
* [Core](https://github.com/deltachat/deltachat-core/issues?&q=is%3Aissue)
A **bug** is a reproducable misbehaviour, when something happens but something else should happen instead.
Did you know there is a [Help](https://delta.chat/en/help) page for Delta Chat?
To ask questions, you are invited to join our IRC channel **#deltachat** on [Freenode](https://webchat.freenode.net/?uio=MTE9MjA16a&channels=%23deltachat).
+34
View File
@@ -0,0 +1,34 @@
_Please read the guidelines linked above, especially when you are a first time contributor. Remove this text and provide some basic informations below, if applicable. Remove template content that is not applicable._
**Delta Chat version**
See settings dialog …
**Expected behavior**
What is the expected output?
**Actual behavior**
What do you see instead?
**Steps to reproduce the problem**
1.
2.
**Screen snapshots**
If applicable …
**Debug logs**
If applicable, debug logs can be copied from within the Delta Chat app:
Open the _Settings_ menu -> _About_ -> _version number|Info_.
Alternatively from the Android system log:
` adb logcat -v time -s DeltaChat `
This log contains private data (e.g. mail address, provider information) which shall be removed or anonymised prior to posting.
+3
View File
@@ -9,3 +9,6 @@ libs/
# ignore private scripts and directories, eg. local2github.prv.sh
*.prv*
# transifex temporary files
tools/translations/
+240
View File
@@ -1,5 +1,245 @@
# Delta Chat Changelog
## 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 Albania, 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 created 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
This version requires access to the camera for upcoming QR code scanning options which can be tested already in this version, see commit
[74ffbf4](https://github.com/deltachat/deltachat-android/commit/74ffbf48befbb0416337673d73d9f2482728cac6).
## 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
* Also 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 a little 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
+17 -10
View File
@@ -27,12 +27,14 @@ dependencies {
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.googlecode.mp4parser:isoparser:1.0.6'
compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
compile 'com.google.zxing:core:3.3.0'
compile 'com.journeyapps:zxing-android-embedded:3.4.0'
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
}
android {
compileSdkVersion 25
buildToolsVersion '25.0.2'
compileSdkVersion 25 // should be ...
buildToolsVersion '25.0.2' // ... in sync unless you know exactly what you're doing
useLibrary 'org.apache.http.legacy'
defaultConfig.applicationId = "com.b44t.messenger"
@@ -48,7 +50,10 @@ android {
signingConfigs {
debug {
storeFile file("config/debug.keystore")
def debugKeystore = file("config/debug.keystore")
if (debugKeystore.exists()) {
storeFile debugKeystore
}
}
release {
@@ -76,13 +81,12 @@ android {
}
}
defaultConfig.versionCode = 36
sourceSets.main {
jniLibs.srcDir 'libs'
jni.srcDirs = [] //disable automatic ndk-build call
}
flavorDimensions "none"
productFlavors {
/*
x86 {
@@ -105,19 +109,22 @@ android {
}
*/
fat {
versionCode = 3
dimension "none"
//versionCode = 3
}
}
applicationVariants.all { variant ->
/*applicationVariants.all { variant ->
def abiVersion = variant.productFlavors.get(0).versionCode
variant.mergedFlavor.versionCode = defaultConfig.versionCode * 10 + abiVersion;
}
}*/
defaultConfig {
minSdkVersion 14 // 14: Android 4.0 Ice Cream Sandwich 2011 (Telegram default), 21: Android 5.0 Lollipop 2014 (recommended for InstantRun)
minSdkVersion 14 // 14: Android 4.0 Ice Cream Sandwich 2011 (Telegram default), 21: Android 5.0 Lollipop 2014 (provides JobScheduler, recommended for InstantRun)
targetSdkVersion 25 // 25: Nougat. CAVE: Do NOT target "Andoid O" without checking the background tasks carefully, see https://developer.android.com/preview/behavior-changes.html#back-all . As long as we target "Nougat", everything works as expected even for "Andoid O" or later
// in general, we should not change the target without reason; eg. after the switch to Nougat, the camera stops working (see https://inthecheesefactory.com/blog/how-to-share-access-to-file-with-fileprovider-on-android-nougat/en )
versionName "0.1.36" // do NOT forget to increase defaultConfig.versionCode!
versionName "0.18.0" // do NOT forget to increase defaultConfig.versionCode!
versionCode 530
}
}
+56 -9
View File
@@ -493,6 +493,19 @@ local_src_files := \
./openssl/crypto/buffer/buf_err.c \
./openssl/crypto/buffer/buf_str.c \
./openssl/crypto/buffer/buffer.c \
./openssl/crypto/camellia/camellia.c \
./openssl/crypto/camellia/cmll_cbc.c \
./openssl/crypto/camellia/cmll_cfb.c \
./openssl/crypto/camellia/cmll_ctr.c \
./openssl/crypto/camellia/cmll_ecb.c \
./openssl/crypto/camellia/cmll_misc.c \
./openssl/crypto/camellia/cmll_ofb.c \
./openssl/crypto/camellia/cmll_utl.c \
./openssl/crypto/cast/c_cfb64.c \
./openssl/crypto/cast/c_ecb.c \
./openssl/crypto/cast/c_enc.c \
./openssl/crypto/cast/c_ofb64.c \
./openssl/crypto/cast/c_skey.c \
./openssl/crypto/cmac/cm_ameth.c \
./openssl/crypto/cmac/cm_pmeth.c \
./openssl/crypto/cmac/cmac.c \
@@ -610,6 +623,8 @@ local_src_files := \
./openssl/crypto/evp/e_aes.c \
./openssl/crypto/evp/e_aes_cbc_hmac_sha1.c \
./openssl/crypto/evp/e_bf.c \
./openssl/crypto/evp/e_camellia.c \
./openssl/crypto/evp/e_cast.c \
./openssl/crypto/evp/e_des.c \
./openssl/crypto/evp/e_des3.c \
./openssl/crypto/evp/e_null.c \
@@ -1178,9 +1193,6 @@ LOCAL_SRC_FILES := \
./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_write_file.c \
./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_write_generic.c \
./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_write_mem.c \
./messenger-backend/libs/libetpan/src/low-level/nntp/newsnntp.c \
./messenger-backend/libs/libetpan/src/low-level/nntp/newsnntp_socket.c \
./messenger-backend/libs/libetpan/src/low-level/nntp/newsnntp_ssl.c \
./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp.c \
./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp_helper.c \
./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp_oauth2.c \
@@ -1188,6 +1200,7 @@ LOCAL_SRC_FILES := \
./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp_ssl.c \
./messenger-backend/libs/libetpan/src/main/libetpan_version.c \
./messenger-backend/libs/libetpan/src/driver/implementation/data-message/data_message_driver.c \
./messenger-backend/libs/libetpan/src/driver/implementation/mime-message/mime_message_driver.c \
./messenger-backend/libs/libetpan/src/driver/interface/maildriver.c \
./messenger-backend/libs/libetpan/src/driver/interface/maildriver_tools.c \
./messenger-backend/libs/libetpan/src/driver/interface/maildriver_types.c \
@@ -1197,7 +1210,9 @@ LOCAL_SRC_FILES := \
./messenger-backend/libs/libetpan/src/driver/interface/mailmessage_tools.c \
./messenger-backend/libs/libetpan/src/driver/interface/mailmessage_types.c \
./messenger-backend/libs/libetpan/src/driver/interface/mailstorage.c \
./messenger-backend/libs/libetpan/src/driver/interface/mailstorage_tools.c
./messenger-backend/libs/libetpan/src/driver/interface/mailstorage_tools.c \
./messenger-backend/libs/libetpan/src/engine/mailprivacy.c \
./messenger-backend/libs/libetpan/src/engine/mailprivacy_tools.c
LOCAL_C_INCLUDES = \
$(LOCAL_PATH)/messenger-backend/libs/libetpan/src \
$(LOCAL_PATH)/messenger-backend/libs/libetpan/src/data-types \
@@ -1220,7 +1235,6 @@ LOCAL_C_INCLUDES = \
include $(BUILD_STATIC_LIBRARY)
################################################################################
# cyrus sasl
################################################################################
@@ -1294,6 +1308,7 @@ LOCAL_MODULE := sqlite
LOCAL_CFLAGS := -w -std=c11 -Os -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -DHAVE_STRCHRNUL=0
LOCAL_CFLAGS += -DSQLITE_OMIT_LOAD_EXTENSION
LOCAL_CFLAGS += -DSQLITE_MAX_MMAP_SIZE=0 -DSQLITE_OMIT_WAL # HACK: the defines are used to skip the pointer reference to mmap set in aSyscall[] - mmap seems to be a #define that cannot be used this way on Android - otherwise we get the error: 'mmap' undeclared here (not in a function)
LOCAL_SRC_FILES := \
./messenger-backend/libs/sqlite/sqlite3.c
@@ -1492,6 +1507,7 @@ $(LOCAL_PATH)/breakpad/common/android/include \
$(LOCAL_PATH)/breakpad \
$(LOCAL_PATH)/ffmpeg \
$(LOCAL_PATH)/messenger-backend/libs/libetpan/include \
$(LOCAL_PATH)/messenger-backend/libs/netpgp/include \
$(LOCAL_PATH)/messenger-backend/libs/sqlite
#LOCAL_SRC_FILES += \
@@ -1599,28 +1615,59 @@ LOCAL_SRC_FILES += \
./image.c \
./video.c \
./gifvideo.cpp \
./messenger-backend/libs/netpgp/src/compress.c \
./messenger-backend/libs/netpgp/src/create.c \
./messenger-backend/libs/netpgp/src/crypto.c \
./messenger-backend/libs/netpgp/src/keyring.c \
./messenger-backend/libs/netpgp/src/misc.c \
./messenger-backend/libs/netpgp/src/openssl_crypto.c \
./messenger-backend/libs/netpgp/src/packet-parse.c \
./messenger-backend/libs/netpgp/src/packet-show.c \
./messenger-backend/libs/netpgp/src/reader.c \
./messenger-backend/libs/netpgp/src/signature.c \
./messenger-backend/libs/netpgp/src/symmetric.c \
./messenger-backend/libs/netpgp/src/validate.c \
./messenger-backend/libs/netpgp/src/writer.c \
./messenger-backend/src/mraheader.c \
./messenger-backend/src/mrapeerstate.c \
./messenger-backend/src/mrarray.c \
./messenger-backend/src/mrchat.c \
./messenger-backend/src/mrchatlist.c \
./messenger-backend/src/mrcmdline.c \
./messenger-backend/src/mrcontact.c \
./messenger-backend/src/mre2ee.c \
./messenger-backend/src/mrdehtml.c \
./messenger-backend/src/mrhash.c \
./messenger-backend/src/mrimap.c \
./messenger-backend/src/mrjob.c \
./messenger-backend/src/mrkey.c \
./messenger-backend/src/mrkeyring.c \
./messenger-backend/src/mrloginparam.c \
./messenger-backend/src/mrlot.c \
./messenger-backend/src/mrmailbox.c \
./messenger-backend/src/mrmailbox_configure.c \
./messenger-backend/src/mrmailbox_connect.c \
./messenger-backend/src/mrmailbox_e2ee.c \
./messenger-backend/src/mrmailbox_imex.c \
./messenger-backend/src/mrmailbox_keyhistory.c \
./messenger-backend/src/mrmailbox_log.c \
./messenger-backend/src/mrmailbox_qr.c \
./messenger-backend/src/mrmailbox_receive_imf.c \
./messenger-backend/src/mrmailbox_securejoin.c \
./messenger-backend/src/mrmimefactory.c \
./messenger-backend/src/mrmimeparser.c \
./messenger-backend/src/mrmsg.c \
./messenger-backend/src/mrosnative.c \
./messenger-backend/src/mrparam.c \
./messenger-backend/src/mrpoortext.c \
./messenger-backend/src/mrpgp.c \
./messenger-backend/src/mrsaxparser.c \
./messenger-backend/src/mrsimplify.c \
./messenger-backend/src/mrsmtp.c \
./messenger-backend/src/mrsqlite3.c \
./messenger-backend/src/mrstock.c \
./messenger-backend/src/mrstrbuilder.c \
./messenger-backend/src/mrstrencode.c \
./messenger-backend/src/mrtoken.c \
./messenger-backend/src/mrtools.c \
./messenger-backend/src/mruudecode.c \
./messenger-backend/cmdline/cmdline.c \
./mrwrapper.c
include $(BUILD_SHARED_LIBRARY)
+1 -1
View File
@@ -1,4 +1,4 @@
APP_PLATFORM := android-9
APP_PLATFORM := android-14
APP_ABI := armeabi armeabi-v7a x86
NDK_TOOLCHAIN_VERSION := 4.9
APP_STL := gnustl_static
+1 -1
View File
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -403,7 +403,7 @@
/* #undef STATIC_LDAPDB */
/* Link LOGIN Staticly */
/* #undef STATIC_LOGIN */
#define STATIC_LOGIN
/* Link NTLM Staticly */
/* #undef STATIC_NTLM */
+1 -1
View File
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
+1 -1
View File
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
+1 -1
View File
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
+1 -1
View File
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
+1 -1
View File
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
+1 -1
View File
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -8,7 +8,7 @@
LOCAL_CFLAGS += -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN #-DTERMIO
# From DEPFLAG=
LOCAL_CFLAGS += -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_CAST -DOPENSSL_NO_CMS -DOPENSSL_NO_GMP -DOPENSSL_NO_IDEA -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_SHA0 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SEED -DOPENSSL_NO_STORE -DOPENSSL_NO_WHIRLPOOL
LOCAL_CFLAGS += -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_CMS -DOPENSSL_NO_GMP -DOPENSSL_NO_IDEA -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_SHA0 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SEED -DOPENSSL_NO_STORE -DOPENSSL_NO_WHIRLPOOL
# Extra
LOCAL_CFLAGS += -DOPENSSL_NO_HW -DOPENSSL_NO_ENGINE -DZLIB
+1 -1
View File
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
+17 -10
View File
@@ -41,7 +41,7 @@
<uses-permission android:name="android.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<!-- <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /> - required for AndroidUtilities.uninstallShortcut() -->
<!-- <uses-permission android:name="android.permission.CAMERA" /> - also disabled in T'gram; we're using the camera via an intent only -->
<uses-permission android:name="android.permission.CAMERA" /> <!-- needed for qr code scanning, not needed for taking photos (we're using an intent for this) -->
<application
android:name=".ApplicationLoader"
@@ -53,7 +53,7 @@
android:supportsRtl="true">
<activity
android:name="com.b44t.ui.LaunchActivity"
android:name=".LaunchActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustPan">
@@ -105,17 +105,24 @@
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
<!-- if used, add 'android:manageSpaceActivity="com.b44t.ui.ManageSpaceActivity"' to application-tag
<activity
android:name="com.b44t.ui.ManageSpaceActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustPan">
</activity> -->
<activity
android:name="com.b44t.ui.IntroActivity"
android:name=".WelcomeActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
</activity>
<activity
android:name=".QRshowActivity"
android:theme="@style/Theme.MessengerProj.AppCompat"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
</activity>
<activity
android:name=".QRscanActivity"
android:theme="@style/Theme.MessengerProj.AppCompat"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
</activity>
<activity
android:name="com.b44t.messenger.OpenChatReceiver"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,14 +21,13 @@
******************************************************************************/
package com.b44t.ui.ActionBar;
package com.b44t.messenger.ActionBar;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.view.Gravity;
@@ -40,7 +39,7 @@ import android.widget.ImageView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.AnimatorListenerAdapterProxy;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
import java.util.ArrayList;
@@ -56,6 +55,10 @@ public class ActionBar extends FrameLayout {
}
}
public static final int TITLE_WITHOUT_BACK_X = 16; /*original value: 18*/
public static final int TITLE_AFTER_BACK_X = 58; /*original value: 72*/
public static final int AVATAR_AFTER_BACK_X = 48; /*original value: 56, you have also to adapt the animation, if you change this value (see ProfileActivity.ANIM_OFF) */
private ImageView backButtonImageView;
private SimpleTextView titleTextView;
private SimpleTextView subtitleTextView;
@@ -68,7 +71,6 @@ public class ActionBar extends FrameLayout {
private boolean interceptTouches = true;
private AnimatorSet actionModeAnimation;
private boolean allowOverlayTitle;
private CharSequence lastTitle;
private boolean castShadows = true;
@@ -374,10 +376,6 @@ public class ActionBar extends FrameLayout {
if (subtitleTextView != null) {
subtitleTextView.setVisibility(visible ? INVISIBLE : VISIBLE);
}
Drawable drawable = backButtonImageView.getDrawable();
if (drawable != null && drawable instanceof MenuDrawable) {
((MenuDrawable) drawable).setRotation(visible ? 1 : 0, true);
}
}
public void setInterceptTouches(boolean value) {
@@ -410,15 +408,15 @@ public class ActionBar extends FrameLayout {
int textLeft;
if (backButtonImageView != null && backButtonImageView.getVisibility() != GONE) {
backButtonImageView.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(54), MeasureSpec.EXACTLY), actionBarHeightSpec);
textLeft = AndroidUtilities.dp(AndroidUtilities.isTablet() ? 80 : 72);
textLeft = AndroidUtilities.dp(TITLE_AFTER_BACK_X);
} else {
textLeft = AndroidUtilities.dp(AndroidUtilities.isTablet() ? 26 : 18);
textLeft = AndroidUtilities.dp(TITLE_WITHOUT_BACK_X);
}
if (menu != null && menu.getVisibility() != GONE) {
int menuWidth;
if (isSearchFieldVisible) {
menuWidth = MeasureSpec.makeMeasureSpec(width - AndroidUtilities.dp(AndroidUtilities.isTablet() ? 74 : 66), MeasureSpec.EXACTLY);
menuWidth = MeasureSpec.makeMeasureSpec(width - AndroidUtilities.dp(TITLE_AFTER_BACK_X), MeasureSpec.EXACTLY);
} else {
menuWidth = MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST);
}
@@ -429,12 +427,11 @@ public class ActionBar extends FrameLayout {
int availableWidth = width - (menu != null ? menu.getMeasuredWidth() : 0) - AndroidUtilities.dp(16) - textLeft;
if (titleTextView != null && titleTextView.getVisibility() != GONE) {
titleTextView.setTextSize(!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 18 : 20);
titleTextView.setTextSize(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 18 : 20);
titleTextView.measure(MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(24), MeasureSpec.AT_MOST));
}
if (subtitleTextView != null && subtitleTextView.getVisibility() != GONE) {
//subtitleTextView.setTextSize(!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 14 : 16);
subtitleTextView.measure(MeasureSpec.makeMeasureSpec(availableWidth, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(20), MeasureSpec.AT_MOST));
}
}
@@ -456,27 +453,27 @@ public class ActionBar extends FrameLayout {
int textLeft;
if (backButtonImageView != null && backButtonImageView.getVisibility() != GONE) {
backButtonImageView.layout(0, additionalTop, backButtonImageView.getMeasuredWidth(), additionalTop + backButtonImageView.getMeasuredHeight());
textLeft = AndroidUtilities.dp(AndroidUtilities.isTablet() ? 80 : 72);
textLeft = AndroidUtilities.dp(TITLE_AFTER_BACK_X);
} else {
textLeft = AndroidUtilities.dp(AndroidUtilities.isTablet() ? 26 : 18);
textLeft = AndroidUtilities.dp(TITLE_WITHOUT_BACK_X);
}
if (menu != null && menu.getVisibility() != GONE) {
int menuLeft = isSearchFieldVisible ? AndroidUtilities.dp(AndroidUtilities.isTablet() ? 74 : 66) : (right - left) - menu.getMeasuredWidth();
int menuLeft = isSearchFieldVisible ? AndroidUtilities.dp(TITLE_AFTER_BACK_X) : (right - left) - menu.getMeasuredWidth();
menu.layout(menuLeft, additionalTop, menuLeft + menu.getMeasuredWidth(), additionalTop + menu.getMeasuredHeight());
}
if (titleTextView != null && titleTextView.getVisibility() != GONE) {
int textTop;
if (subtitleTextView != null && subtitleTextView.getVisibility() != GONE) {
textTop = (getCurrentActionBarHeight() / 2 - titleTextView.getTextHeight()) / 2 + AndroidUtilities.dp(!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 2 : 3);
textTop = (getCurrentActionBarHeight() / 2 - titleTextView.getTextHeight()) / 2 + AndroidUtilities.dp(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 2 : 3);
} else {
textTop = (getCurrentActionBarHeight() - titleTextView.getTextHeight()) / 2;
}
titleTextView.layout(textLeft, additionalTop + textTop, textLeft + titleTextView.getMeasuredWidth(), additionalTop + textTop + titleTextView.getTextHeight());
}
if (subtitleTextView != null && subtitleTextView.getVisibility() != GONE) {
int textTop = getCurrentActionBarHeight() / 2 + (getCurrentActionBarHeight() / 2 - subtitleTextView.getTextHeight()) / 2 - AndroidUtilities.dp(!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 1 : 1);
int textTop = getCurrentActionBarHeight() / 2 + (getCurrentActionBarHeight() / 2 - subtitleTextView.getTextHeight()) / 2 - AndroidUtilities.dp(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 1 : 1);
subtitleTextView.layout(textLeft, additionalTop + textTop, textLeft + subtitleTextView.getMeasuredWidth(), additionalTop + textTop + subtitleTextView.getTextHeight());
}
@@ -543,26 +540,6 @@ public class ActionBar extends FrameLayout {
}
}
public void setAllowOverlayTitle(boolean value) {
allowOverlayTitle = value;
}
public void setTitleOverlayText(String text) {
/* EDIT BY MR
if (!allowOverlayTitle || parentFragment.parentLayout == null) {
return;
}
CharSequence textToSet = text != null ? text : lastTitle;
if (textToSet != null && titleTextView == null) {
createTitleTextView();
}
if (titleTextView != null) {
titleTextView.setVisibility(textToSet != null && !isSearchFieldVisible ? VISIBLE : INVISIBLE);
titleTextView.setText(textToSet);
}
*/
}
public boolean isSearchFieldVisible() {
return isSearchFieldVisible;
}
@@ -599,9 +576,7 @@ public class ActionBar extends FrameLayout {
}
public static int getCurrentActionBarHeight() {
if (AndroidUtilities.isTablet()) {
return AndroidUtilities.dp(64);
} else if (ApplicationLoader.applicationContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
if (ApplicationLoader.applicationContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
return AndroidUtilities.dp(48);
} else {
return AndroidUtilities.dp(56);
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.ActionBar;
package com.b44t.messenger.ActionBar;
import android.animation.Animator;
import android.animation.AnimatorSet;
@@ -49,7 +49,7 @@ import android.widget.LinearLayout;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.R;
import com.b44t.messenger.AnimatorListenerAdapterProxy;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
import java.util.ArrayList;
@@ -60,7 +60,6 @@ public class ActionBarLayout extends FrameLayout {
boolean needPresentFragment(BaseFragment fragment, boolean removeLast, boolean forceWithoutAnimation, ActionBarLayout layout);
boolean needAddFragmentToStack(BaseFragment fragment, ActionBarLayout layout);
boolean needCloseLastFragment(ActionBarLayout layout);
void onRebuildAllFragments(ActionBarLayout layout);
}
public class LinearLayoutContainer extends LinearLayout {
@@ -131,7 +130,6 @@ public class ActionBarLayout extends FrameLayout {
private LinearLayoutContainer containerView;
private LinearLayoutContainer containerViewBack;
private DrawerLayoutContainer drawerLayoutContainer;
private ActionBar currentActionBar;
private AnimatorSet currentAnimation;
@@ -153,16 +151,12 @@ public class ActionBarLayout extends FrameLayout {
private int startedTrackingPointerId;
private Runnable onCloseAnimationEndRunnable;
private Runnable onOpenAnimationEndRunnable;
private boolean useAlphaAnimations;
private View backgroundView;
private boolean removeActionBarExtraHeight;
private Runnable animationRunnable;
private float animationProgress = 0.0f;
private long lastFrameTime;
private String titleOverlayText;
private ActionBarLayoutDelegate delegate = null;
protected Activity parentActivity = null;
@@ -385,7 +379,6 @@ public class ActionBarLayout extends FrameLayout {
lastFragment.actionBar.setOccupyStatusBar(false);
}
containerViewBack.addView(lastFragment.actionBar);
lastFragment.actionBar.setTitleOverlayText(titleOverlayText);
}
containerViewBack.addView(fragmentView);
ViewGroup.LayoutParams layoutParams = fragmentView.getLayoutParams();
@@ -678,7 +671,6 @@ public class ActionBarLayout extends FrameLayout {
parent.removeView(fragment.actionBar);
}
containerViewBack.addView(fragment.actionBar);
fragment.actionBar.setTitleOverlayText(titleOverlayText);
}
containerViewBack.addView(fragmentView);
@@ -702,110 +694,56 @@ public class ActionBarLayout extends FrameLayout {
bringChildToFront(containerView);
if (!needAnimation) {
presentFragmentInternalRemoveOld(removeLast, currentFragment);
if (backgroundView != null) {
backgroundView.setVisibility(VISIBLE);
}
}
if (needAnimation) {
if (useAlphaAnimations && fragmentsStack.size() == 1) {
presentFragmentInternalRemoveOld(removeLast, currentFragment);
transitionAnimationStartTime = System.currentTimeMillis();
transitionAnimationInProgress = true;
onOpenAnimationEndRunnable = new Runnable() {
@Override
public void run() {
fragment.onTransitionAnimationEnd(true, false);
fragment.onBecomeFullyVisible();
}
};
ArrayList<Animator> animators = new ArrayList<>();
animators.add(ObjectAnimator.ofFloat(this, "alpha", 0.0f, 1.0f));
if (backgroundView != null) {
backgroundView.setVisibility(VISIBLE);
animators.add(ObjectAnimator.ofFloat(backgroundView, "alpha", 0.0f, 1.0f));
}
fragment.onTransitionAnimationStart(true, false);
currentAnimation = new AnimatorSet();
currentAnimation.playTogether(animators);
currentAnimation.setInterpolator(accelerateDecelerateInterpolator);
currentAnimation.setDuration(200);
currentAnimation.addListener(new AnimatorListenerAdapterProxy() {
@Override
public void onAnimationEnd(Animator animation) {
onAnimationEndCheck(false);
}
});
currentAnimation.start();
} else {
transitionAnimationStartTime = System.currentTimeMillis();
transitionAnimationInProgress = true;
onOpenAnimationEndRunnable = new Runnable() {
@Override
public void run() {
if (Build.VERSION.SDK_INT > 15) {
containerView.setLayerType(LAYER_TYPE_NONE, null);
containerViewBack.setLayerType(LAYER_TYPE_NONE, null);
}
presentFragmentInternalRemoveOld(removeLast, currentFragment);
fragment.onTransitionAnimationEnd(true, false);
fragment.onBecomeFullyVisible();
containerView.setTranslationX(0);
}
};
fragment.onTransitionAnimationStart(true, false);
AnimatorSet animation = fragment.onCustomTransitionAnimation(true, new Runnable() {
@Override
public void run() {
onAnimationEndCheck(false);
}
});
if (animation == null) {
containerView.setAlpha(0.0f);
containerView.setTranslationX(48.0f);
if (containerView.isKeyboardVisible || containerViewBack.isKeyboardVisible) {
waitingForKeyboardCloseRunnable = new Runnable() {
@Override
public void run() {
if (waitingForKeyboardCloseRunnable != this) {
return;
}
startLayoutAnimation(true, true);
}
};
AndroidUtilities.runOnUIThread(waitingForKeyboardCloseRunnable, 200);
} else if (fragment.needDelayOpenAnimation()) {
delayedOpenAnimationRunnable = new Runnable() {
@Override
public void run() {
if (delayedOpenAnimationRunnable != this) {
return;
}
delayedOpenAnimationRunnable = null;
startLayoutAnimation(true, true);
}
};
AndroidUtilities.runOnUIThread(delayedOpenAnimationRunnable, 200);
} else {
startLayoutAnimation(true, true);
}
} else {
transitionAnimationStartTime = System.currentTimeMillis();
transitionAnimationInProgress = true;
onOpenAnimationEndRunnable = new Runnable() {
@Override
public void run() {
if (Build.VERSION.SDK_INT > 15) {
//containerView.setLayerType(LAYER_TYPE_HARDWARE, null);
//containerViewBack.setLayerType(LAYER_TYPE_HARDWARE, null);
containerView.setLayerType(LAYER_TYPE_NONE, null);
containerViewBack.setLayerType(LAYER_TYPE_NONE, null);
}
containerView.setAlpha(1.0f);
containerView.setTranslationX(0.0f);
currentAnimation = animation;
presentFragmentInternalRemoveOld(removeLast, currentFragment);
fragment.onTransitionAnimationEnd(true, false);
fragment.onBecomeFullyVisible();
containerView.setTranslationX(0);
}
};
fragment.onTransitionAnimationStart(true, false);
{
containerView.setAlpha(0.0f);
containerView.setTranslationX(48.0f);
if (containerView.isKeyboardVisible || containerViewBack.isKeyboardVisible) {
waitingForKeyboardCloseRunnable = new Runnable() {
@Override
public void run() {
if (waitingForKeyboardCloseRunnable != this) {
return;
}
startLayoutAnimation(true, true);
}
};
AndroidUtilities.runOnUIThread(waitingForKeyboardCloseRunnable, 200);
} else if (fragment.needDelayOpenAnimation()) {
delayedOpenAnimationRunnable = new Runnable() {
@Override
public void run() {
if (delayedOpenAnimationRunnable != this) {
return;
}
delayedOpenAnimationRunnable = null;
startLayoutAnimation(true, true);
}
};
AndroidUtilities.runOnUIThread(delayedOpenAnimationRunnable, 200);
} else {
startLayoutAnimation(true, true);
}
}
} else {
if (backgroundView != null) {
backgroundView.setAlpha(1.0f);
backgroundView.setVisibility(VISIBLE);
}
fragment.onTransitionAnimationStart(true, false);
fragment.onTransitionAnimationEnd(true, false);
fragment.onBecomeFullyVisible();
@@ -895,7 +833,6 @@ public class ActionBarLayout extends FrameLayout {
parent.removeView(previousFragment.actionBar);
}
containerView.addView(previousFragment.actionBar);
previousFragment.actionBar.setTitleOverlayText(titleOverlayText);
}
containerView.addView(fragmentView);
ViewGroup.LayoutParams layoutParams = fragmentView.getLayoutParams();
@@ -932,13 +869,8 @@ public class ActionBarLayout extends FrameLayout {
previousFragmentFinal.onBecomeFullyVisible();
}
};
AnimatorSet animation = currentFragment.onCustomTransitionAnimation(false, new Runnable() {
@Override
public void run() {
onAnimationEndCheck(false);
}
});
if (animation == null) {
{
if (containerView.isKeyboardVisible || containerViewBack.isKeyboardVisible) {
waitingForKeyboardCloseRunnable = new Runnable() {
@Override
@@ -953,12 +885,6 @@ public class ActionBarLayout extends FrameLayout {
} else {
startLayoutAnimation(false, true);
}
} else {
if (Build.VERSION.SDK_INT > 15) {
//containerView.setLayerType(LAYER_TYPE_HARDWARE, null);
//containerViewBack.setLayerType(LAYER_TYPE_HARDWARE, null);
}
currentAnimation = animation;
}
} else {
currentFragment.onTransitionAnimationEnd(false, false);
@@ -966,53 +892,8 @@ public class ActionBarLayout extends FrameLayout {
previousFragment.onBecomeFullyVisible();
}
} else {
if (useAlphaAnimations) {
transitionAnimationStartTime = System.currentTimeMillis();
transitionAnimationInProgress = true;
onCloseAnimationEndRunnable = new Runnable() {
@Override
public void run() {
removeFragmentFromStackInternal(currentFragment);
setVisibility(GONE);
if (backgroundView != null) {
backgroundView.setVisibility(GONE);
}
if (drawerLayoutContainer != null) {
drawerLayoutContainer.setAllowOpenDrawer(true, false);
}
}
};
ArrayList<Animator> animators = new ArrayList<>();
animators.add(ObjectAnimator.ofFloat(this, "alpha", 1.0f, 0.0f));
if (backgroundView != null) {
animators.add(ObjectAnimator.ofFloat(backgroundView, "alpha", 1.0f, 0.0f));
}
currentAnimation = new AnimatorSet();
currentAnimation.playTogether(animators);
currentAnimation.setInterpolator(accelerateDecelerateInterpolator);
currentAnimation.setDuration(200);
currentAnimation.addListener(new AnimatorListenerAdapterProxy() {
@Override
public void onAnimationStart(Animator animation) {
transitionAnimationStartTime = System.currentTimeMillis();
}
@Override
public void onAnimationEnd(Animator animation) {
onAnimationEndCheck(false);
}
});
currentAnimation.start();
} else {
removeFragmentFromStackInternal(currentFragment);
setVisibility(GONE);
if (backgroundView != null) {
backgroundView.setVisibility(GONE);
}
}
removeFragmentFromStackInternal(currentFragment);
setVisibility(GONE);
}
}
@@ -1056,7 +937,6 @@ public class ActionBarLayout extends FrameLayout {
parent.removeView(previousFragment.actionBar);
}
containerView.addView(previousFragment.actionBar);
previousFragment.actionBar.setTitleOverlayText(titleOverlayText);
}
containerView.addView(fragmentView);
ViewGroup.LayoutParams layoutParams = fragmentView.getLayoutParams();
@@ -1078,11 +958,7 @@ public class ActionBarLayout extends FrameLayout {
}
public void removeFragmentFromStack(BaseFragment fragment) {
if (useAlphaAnimations && fragmentsStack.size() == 1 && AndroidUtilities.isTablet()) {
closeLastFragment(true);
} else {
removeFragmentFromStackInternal(fragment);
}
removeFragmentFromStackInternal(fragment);
}
public void removeAllFragments() {
@@ -1092,16 +968,6 @@ public class ActionBarLayout extends FrameLayout {
}
}
public void rebuildAllFragmentViews(boolean last) {
for (int a = 0; a < fragmentsStack.size() - (last ? 0 : 1); a++) {
fragmentsStack.get(a).clearViews();
fragmentsStack.get(a).setParentLayout(this);
}
if (delegate != null) {
delegate.onRebuildAllFragments(this);
}
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && !checkTransitionAnimation() && !startedTracking && currentActionBar != null) {
currentActionBar.onMenuButtonPressed();
@@ -1184,35 +1050,10 @@ public class ActionBarLayout extends FrameLayout {
}
}
public void setUseAlphaAnimations(boolean value) {
useAlphaAnimations = value;
}
public void setBackgroundView(View view) {
backgroundView = view;
}
public void setDrawerLayoutContainer(DrawerLayoutContainer layout) {
drawerLayoutContainer = layout;
}
public DrawerLayoutContainer getDrawerLayoutContainer() {
return drawerLayoutContainer;
}
public void setRemoveActionBarExtraHeight(boolean value) {
removeActionBarExtraHeight = value;
}
public void setTitleOverlayText(String text) {
titleOverlayText = text;
for (BaseFragment fragment : fragmentsStack) {
if (fragment.actionBar != null) {
fragment.actionBar.setTitleOverlayText(titleOverlayText);
}
}
}
@Override
public boolean hasOverlappingRendering() {
return false;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.ActionBar;
package com.b44t.messenger.ActionBar;
import android.content.Context;
import android.graphics.drawable.Drawable;
@@ -32,7 +32,7 @@ import android.widget.Toast;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.R;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
public class ActionBarMenu extends LinearLayout {
@@ -103,7 +103,8 @@ public class ActionBarMenu extends LinearLayout {
case R.drawable.photo_crop: hint = ApplicationLoader.applicationContext.getString(R.string.CropImage); break;
case R.drawable.photo_tools: hint = ApplicationLoader.applicationContext.getString(R.string.EditImage); break;
case R.drawable.ic_ab_search: hint = ApplicationLoader.applicationContext.getString(R.string.Search); break;
case R.drawable.lock_close: hint = ApplicationLoader.applicationContext.getString(R.string.Passcode); break;
case R.drawable.ic_ab_lock_screen: hint = ApplicationLoader.applicationContext.getString(R.string.Passcode); break;
case R.drawable.ic_ab_qr: hint = ApplicationLoader.applicationContext.getString(R.string.QrScan); break;
}
if( hint != null ) {
if( s_menuItemHint != null ) {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.ActionBar;
package com.b44t.messenger.ActionBar;
import android.content.Context;
import android.graphics.Rect;
@@ -47,9 +47,7 @@ import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.R;
import com.b44t.ui.Components.LayoutHelper;
import java.lang.reflect.Field;
import com.b44t.messenger.Components.LayoutHelper;
public class ActionBarMenuItem extends FrameLayout {
@@ -214,7 +212,7 @@ public class ActionBarMenuItem extends FrameLayout {
subMenuOpenSide = side;
}
public TextView addSubItem(int id, String text, int icon) {
public TextView addSubItem(int id, String text) {
if (popupLayout == null) {
rect = new Rect();
location = new int[2];
@@ -251,15 +249,6 @@ public class ActionBarMenuItem extends FrameLayout {
textView.setMinWidth(AndroidUtilities.dp(196));
textView.setTag(id);
textView.setText(text);
if (icon != 0) {
textView.setCompoundDrawablePadding(AndroidUtilities.dp(12));
if (!LocaleController.isRTL) {
textView.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(icon), null, null, null);
} else {
textView.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(icon), null);
}
}
//popupLayout.setShowedFromBotton(showFromBottom);
popupLayout.addView(textView);
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) textView.getLayoutParams();
layoutParams.gravity = Gravity.START;
@@ -466,13 +455,7 @@ public class ActionBarMenuItem extends FrameLayout {
}
});
try {
Field mCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
mCursorDrawableRes.setAccessible(true);
mCursorDrawableRes.set(searchField, R.drawable.search_carret);
} catch (Exception e) {
//nothing to do
}
searchField.setTextIsSelectable(false);
if( applyHack ) {
searchField.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -23,7 +23,7 @@
//Thanks to https://github.com/JakeWharton/ActionBarSherlock/
package com.b44t.ui.ActionBar;
package com.b44t.messenger.ActionBar;
import android.animation.Animator;
import android.animation.AnimatorSet;
@@ -44,7 +44,7 @@ import android.widget.ScrollView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.R;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
import java.lang.reflect.Field;
import java.util.HashMap;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.ActionBar;
package com.b44t.messenger.ActionBar;
import android.graphics.Canvas;
import android.graphics.Color;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,9 +21,8 @@
******************************************************************************/
package com.b44t.ui.ActionBar;
package com.b44t.messenger.ActionBar;
import android.animation.AnimatorSet;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
@@ -286,10 +285,6 @@ public class BaseFragment {
}
protected AnimatorSet onCustomTransitionAnimation(boolean isOpen, final Runnable callback) {
return null;
}
public void onLowMemory() {
}
@@ -312,7 +307,7 @@ public class BaseFragment {
}
try {
visibleDialog = dialog;
visibleDialog.setCanceledOnTouchOutside(true);
//visibleDialog.setCanceledOnTouchOutside(true); -- we do overwrite this from time to time manually, eg. for showing the setup code. so, not all dialogs should be cancelled when touching outside!
visibleDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.ActionBar;
package com.b44t.messenger.ActionBar;
import android.animation.Animator;
import android.animation.AnimatorSet;
@@ -60,7 +60,7 @@ import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.AnimatorListenerAdapterProxy;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.R;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
import java.util.ArrayList;
@@ -307,11 +307,7 @@ public class BottomSheet extends Dialog {
if (containerView != null) {
if (!fullWidth) {
int widthSpec;
if (AndroidUtilities.isTablet()) {
widthSpec = MeasureSpec.makeMeasureSpec((int) (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) * 0.8f) + backgroundPaddingLeft * 2, MeasureSpec.EXACTLY);
} else {
widthSpec = MeasureSpec.makeMeasureSpec(isPortrait ? width + backgroundPaddingLeft * 2 : (int) Math.max(width * 0.8f, Math.min(AndroidUtilities.dp(480), width)) + backgroundPaddingLeft * 2, MeasureSpec.EXACTLY);
}
widthSpec = MeasureSpec.makeMeasureSpec(isPortrait ? width + backgroundPaddingLeft * 2 : (int) Math.max(width * 0.8f, Math.min(AndroidUtilities.dp(480), width)) + backgroundPaddingLeft * 2, MeasureSpec.EXACTLY);
containerView.measure(widthSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
} else {
containerView.measure(MeasureSpec.makeMeasureSpec(width + backgroundPaddingLeft * 2, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.ActionBar;
package com.b44t.messenger.ActionBar;
import android.content.Context;
import android.graphics.Canvas;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.ActionBar;
package com.b44t.messenger.ActionBar;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -39,7 +39,7 @@ import android.os.Build;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.R;
import com.b44t.ui.Components.ChatAttachAlert;
import com.b44t.messenger.Components.ChatAttachAlert;
public class Theme {
@@ -60,22 +60,17 @@ public class Theme {
public static final int ATTACH_SHEET_TEXT_COLOR = 0xff757575;
public static final int DIALOGS_TITLE_TEXT_COLOR = 0xff000000;
public static final int DIALOGS_MESSAGE_TEXT_COLOR = 0xff8f8f8f;
public static final int DIALOGS_NAME_TEXT_COLOR = 0xff555555;
public static final int DIALOGS_SELF_TEXT_COLOR = 0xff00a60e; // from encrypted chat title: 0xff00a60e, alternative: 0xff3c912e
public static final int DIALOGS_PRINTING_TEXT_COLOR = 0xff4d83b3;
public static final int DIALOGS_DRAFT_TEXT_COLOR = 0xffdd4b39;
public static final int CHATLIST_BACKGROUND_COLOR = 0xffffffff;
public static final int CHATLIST_DEADDROP_BACKGROUND_COLOR = 0xffd3d3d3;
public static final int CHATLIST_TITLE_TEXT_COLOR = 0xff000000;
public static final int CHATLIST_MESSAGE_TEXT_COLOR = 0xff8f8f8f;
public static final int CHATLIST_NAME_TEXT_COLOR = 0xff555555;
public static final int CHATLIST_SELF_TEXT_COLOR = 0xff00a60e; // from encrypted chat title: 0xff00a60e, alternative: 0xff3c912e
public static final int CHATLIST_DRAFT_TEXT_COLOR = 0xffdd4b39;
public static final int CHAT_BOTTOM_OVERLAY_TEXT_COLOR = 0xff7f7f7f;
public static final int CHAT_EMPTY_VIEW_TEXT_COLOR = 0xffffffff;
public static final int STICKERS_SHEET_TITLE_TEXT_COLOR = 0xff212121;
public static final int STICKERS_SHEET_SEND_TEXT_COLOR = 0xff3a8ccf;
public static final int STICKERS_SHEET_ADD_TEXT_COLOR = 0xff3a8ccf;
public static final int STICKERS_SHEET_CLOSE_TEXT_COLOR = 0xff3a8ccf;
public static final int STICKERS_SHEET_REMOVE_TEXT_COLOR = 0xffcd5a5a;
public static final int MSG_SELECTED_BACKGROUND_COLOR = 0x6633b5e5;
public static final int MSG_STICKER_NAME_TEXT_COLOR = 0xffffffff;
public static final int MSG_IN_TIME_N_FWD_TEXT_COLOR = 0xff9ea7b0;
@@ -96,6 +91,8 @@ public class Theme {
public static final int MSG_AUDIO_SEEKBAR_DARK_COLOR = 0xFFf68751; // same color as in audio-icon, also used for the record-button
public static final int MSG_AUDIO_SEEKBAR_LITE_COLOR = 0xFFfbc8af;
public static final int MSG_SYSTEM_CMD_COLOR = MSG_AUDIO_NAME_COLOR; // just the same color, there is no other dependency between system commands and audio messages
public static Drawable backgroundDrawableIn;
public static Drawable backgroundDrawableInSelected;
public static Drawable backgroundDrawableOut;
@@ -110,6 +107,9 @@ public class Theme {
public static Drawable systemDrawable;
public static Drawable timeBackgroundDrawable;
public static Drawable timeStickerBackgroundDrawable;
public static Drawable encrOutDrawable;
public static Drawable encrInDrawable;
public static Drawable encrMediaDrawable;
public static Drawable[] cornerOuter = new Drawable[4];
public static Drawable[] cornerInner = new Drawable[4];
@@ -147,6 +147,10 @@ public class Theme {
timeStickerBackgroundDrawable = context.getResources().getDrawable(R.drawable.phototime2);
systemDrawable = context.getResources().getDrawable(R.drawable.system);
encrInDrawable = context.getResources().getDrawable(R.drawable.msg_encr_in);
encrOutDrawable = context.getResources().getDrawable(R.drawable.msg_encr_out);
encrMediaDrawable = context.getResources().getDrawable(R.drawable.msg_encr_media);
inlistDrawable[INLIST_FILE] = context.getResources().getDrawable(R.drawable.attach_file_inlist);
inlistDrawable[INLIST_PLAY] = context.getResources().getDrawable(R.drawable.attach_audio_inlist_play);
inlistDrawable[INLIST_TRANSP_PLAY] = context.getResources().getDrawable(R.drawable.video_play);
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -51,6 +51,7 @@ import android.support.v4.content.FileProvider;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.StateSet;
@@ -60,15 +61,11 @@ import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.webkit.MimeTypeMap;
import android.widget.AbsListView;
import android.widget.EdgeEffect;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.b44t.ui.Components.ForegroundDetector;
import com.b44t.ui.Components.TypefaceSpan;
import com.b44t.messenger.Components.ForegroundDetector;
import com.b44t.messenger.Components.TypefaceSpan;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -83,9 +80,7 @@ import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable;
import java.util.Locale;
import java.util.regex.Pattern;
public class AndroidUtilities {
@@ -98,35 +93,16 @@ public class AndroidUtilities {
public static DisplayMetrics displayMetrics = new DisplayMetrics();
public static int leftBaseline;
public static boolean usingHardwareInput;
private static Boolean isTablet = null;
private static int adjustOwnerClassGuid = 0;
static {
try {
final String GOOD_IRI_CHAR = "a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF";
final Pattern IP_ADDRESS = Pattern.compile(
"((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]"
+ "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]"
+ "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
+ "|[1-9][0-9]|[0-9]))");
final String IRI = "[" + GOOD_IRI_CHAR + "]([" + GOOD_IRI_CHAR + "\\-]{0,61}[" + GOOD_IRI_CHAR + "]){0,1}";
final String GOOD_GTLD_CHAR = "a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF";
final String GTLD = "[" + GOOD_GTLD_CHAR + "]{2,63}";
final String HOST_NAME = "(" + IRI + "\\.)+" + GTLD;
final Pattern DOMAIN_NAME = Pattern.compile("(" + HOST_NAME + "|" + IP_ADDRESS + ")");
} catch (Exception e) {
}
}
static {
density = ApplicationLoader.applicationContext.getResources().getDisplayMetrics().density;
leftBaseline = isTablet() ? 80 : 72;
leftBaseline = 72;
checkDisplaySize();
}
public static void requestAdjustResize(Activity activity, int classGuid) {
if (activity == null || isTablet()) {
if (activity == null) {
return;
}
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
@@ -134,7 +110,7 @@ public class AndroidUtilities {
}
public static void removeAdjustResize(Activity activity, int classGuid) {
if (activity == null || isTablet()) {
if (activity == null ) {
return;
}
if (adjustOwnerClassGuid == classGuid) {
@@ -330,43 +306,6 @@ public class AndroidUtilities {
ApplicationLoader.applicationHandler.removeCallbacks(runnable);
}
public static boolean isTablet() {
/* -- we do not make any special for tablet or not. _If_ sth. like this is desired, check for an appropriate screen size.
if (isTablet == null) {
isTablet = ApplicationLoader.applicationContext.getResources().getBoolean(R.bool.isTablet);
}
return isTablet;
*/
return false;
}
public static boolean isSmallTablet() {
/*
float minSide = Math.min(displaySize.x, displaySize.y) / density;
return minSide <= 700;
*/
return false;
}
public static int getMinTabletSide() {
if (!isSmallTablet()) {
int smallSide = Math.min(displaySize.x, displaySize.y);
int leftSide = smallSide * 35 / 100;
if (leftSide < dp(320)) {
leftSide = dp(320);
}
return smallSide - leftSide;
} else {
int smallSide = Math.min(displaySize.x, displaySize.y);
int maxSide = Math.max(displaySize.x, displaySize.y);
int leftSide = maxSide * 35 / 100;
if (leftSide < dp(320)) {
leftSide = dp(320);
}
return Math.min(smallSide, maxSide - leftSide);
}
}
public static int getPhotoSize() {
if (photoSize == null) {
if (Build.VERSION.SDK_INT >= 16) {
@@ -378,19 +317,6 @@ public class AndroidUtilities {
return photoSize;
}
public static void clearCursorDrawable(EditText editText) {
if (editText == null) {
return;
}
try {
Field mCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
mCursorDrawableRes.setAccessible(true);
mCursorDrawableRes.setInt(editText, 0);
} catch (Exception e) {
}
}
private static Intent createShortcutIntent(int did, Bitmap bitmap) {
Intent shortcutIntent = new Intent(ApplicationLoader.applicationContext, OpenChatReceiver.class);
@@ -509,59 +435,67 @@ public class AndroidUtilities {
}
}
public static final int FLAG_TAG_BR = 1;
public static final int FLAG_TAG_BOLD = 2;
public static final int FLAG_TAG_COLOR = 4;
public static final int FLAG_TAG_ALL = FLAG_TAG_BR | FLAG_TAG_BOLD | FLAG_TAG_COLOR;
public static SpannableStringBuilder replaceTags(String str) {
return replaceTags(str, FLAG_TAG_ALL);
}
public static SpannableStringBuilder replaceTags(String str, int flag) {
try {
int start;
int end;
StringBuilder stringBuilder = new StringBuilder(str);
if ((flag & FLAG_TAG_BR) != 0) {
while ((start = stringBuilder.indexOf("<br>")) != -1) {
stringBuilder.replace(start, start + 4, "\n");
}
while ((start = stringBuilder.indexOf("<br/>")) != -1) {
stringBuilder.replace(start, start + 5, "\n");
}
// breaks
while ((start = stringBuilder.indexOf("<br>")) != -1) {
stringBuilder.replace(start, start + 4, "\n");
}
while ((start = stringBuilder.indexOf("<br/>")) != -1) {
stringBuilder.replace(start, start + 5, "\n");
}
// bold
ArrayList<Integer> bolds = new ArrayList<>();
if ((flag & FLAG_TAG_BOLD) != 0) {
while ((start = stringBuilder.indexOf("<b>")) != -1) {
stringBuilder.replace(start, start + 3, "");
end = stringBuilder.indexOf("</b>");
if (end == -1) {
end = stringBuilder.indexOf("<b>");
}
stringBuilder.replace(end, end + 4, "");
bolds.add(start);
bolds.add(end);
while ((start = stringBuilder.indexOf("<b>")) != -1) {
stringBuilder.replace(start, start + 3, "");
end = stringBuilder.indexOf("</b>");
if (end == -1) {
end = stringBuilder.indexOf("<b>");
}
stringBuilder.replace(end, end + 4, "");
bolds.add(start);
bolds.add(end);
}
// italics
ArrayList<Integer> italics = new ArrayList<>();
while ((start = stringBuilder.indexOf("<i>")) != -1) {
stringBuilder.replace(start, start + 3, "");
end = stringBuilder.indexOf("</i>");
if (end == -1) {
end = stringBuilder.indexOf("<i>");
}
stringBuilder.replace(end, end + 4, "");
italics.add(start);
italics.add(end);
}
// color - used eg. by the message preview when following a mailto:-link
ArrayList<Integer> colors = new ArrayList<>();
if ((flag & FLAG_TAG_COLOR) != 0) { // used eg. by the message preview when following a mailto:-link
while ((start = stringBuilder.indexOf("<c#")) != -1) {
stringBuilder.replace(start, start + 2, "");
end = stringBuilder.indexOf(">", start);
int color = Color.parseColor(stringBuilder.substring(start, end));
stringBuilder.replace(start, end + 1, "");
end = stringBuilder.indexOf("</c>");
stringBuilder.replace(end, end + 4, "");
colors.add(start);
colors.add(end);
colors.add(color);
}
while ((start = stringBuilder.indexOf("<c#")) != -1) {
stringBuilder.replace(start, start + 2, "");
end = stringBuilder.indexOf(">", start);
int color = Color.parseColor(stringBuilder.substring(start, end));
stringBuilder.replace(start, end + 1, "");
end = stringBuilder.indexOf("</c>");
stringBuilder.replace(end, end + 4, "");
colors.add(start);
colors.add(end);
colors.add(color);
}
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(stringBuilder);
for (int a = 0; a < bolds.size() / 2; a++) {
spannableStringBuilder.setSpan(new TypefaceSpan(Typeface.DEFAULT_BOLD), bolds.get(a * 2), bolds.get(a * 2 + 1), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
for (int a = 0; a < italics.size() / 2; a++) {
spannableStringBuilder.setSpan(new StyleSpan(Typeface.ITALIC), italics.get(a * 2), italics.get(a * 2 + 1), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
for (int a = 0; a < colors.size() / 3; a++) {
spannableStringBuilder.setSpan(new ForegroundColorSpan(colors.get(a * 3 + 2)), colors.get(a * 3), colors.get(a * 3 + 1), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
@@ -886,8 +820,8 @@ public class AndroidUtilities {
public static void openForViewOrShare(Activity activity, int msg_id, String cmd)
{
MrMsg msg = MrMailbox.getMsg(msg_id);
String path = msg.getParam('f', "");
String mimeType = getMimetype(path, msg.getParam('m', "application/octet-stream"));
String path = msg.getFile();
String mimeType = getMimetype(path, msg.getFilemime());
try {
File file = new File(path);
if( !file.exists() ) {
@@ -958,8 +892,8 @@ public class AndroidUtilities {
MrMsg msg = MrMailbox.getMsg(msg_id);
final int msg_type = msg.getType();
String msg_file_path = msg.getParam('f', "");
final String msg_mime = msg.getParam('m', "application/octet-stream");
String msg_file_path = msg.getFile();
final String msg_mime = msg.getFilemime();
final String msg_file_name = msg.getFilename();
final File sourceFile = new File(msg_file_path);
if( !sourceFile.exists() ) {
@@ -1018,7 +952,7 @@ public class AndroidUtilities {
if (copied) {
if ( add_to_download_manager ) {
DownloadManager downloadManager = (DownloadManager) ApplicationLoader.applicationContext.getSystemService(Context.DOWNLOAD_SERVICE);
downloadManager.addCompletedDownload(destPathNFile.getName(), destPathNFile.getName(), false, getMimetype(msg_file_name, msg_mime), destPathNFile.getAbsolutePath(), destPathNFile.length(), true);
downloadManager.addCompletedDownload(destPathNFile.getName(), destPathNFile.getName(), true, getMimetype(msg_file_name, msg_mime), destPathNFile.getAbsolutePath(), destPathNFile.length(), true);
} else {
addMediaToGallery(Uri.fromFile(destPathNFile));
}
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -24,9 +24,7 @@
package com.b44t.messenger;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.Application;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -40,11 +38,9 @@ import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Handler;
import android.os.PowerManager;
import android.os.SystemClock;
import android.util.Log;
import com.b44t.ui.Components.ForegroundDetector;
import com.b44t.ui.SettingsAdvActivity;
import com.b44t.messenger.Components.ForegroundDetector;
import java.io.File;
@@ -59,9 +55,7 @@ public class ApplicationLoader extends Application {
public static volatile boolean isScreenOn = false;
public static volatile boolean mainInterfacePaused = true;
public static PowerManager.WakeLock backendWakeLock = null;
public static PowerManager.WakeLock wakeupWakeLock = null;
private static PowerManager.WakeLock stayAwakeWakeLock = null;
public static PowerManager.WakeLock convertVideoWakeLock = null;
public static int fontSize;
@@ -72,7 +66,7 @@ public class ApplicationLoader extends Application {
}
public static int getServiceMessageColor() {
return 0x44000000; // this color is used as a background for date headlines, empty chat hints and in the drawer
return 0x44000000; // this color is used as a background for date headlines and empty chat hints
}
public static void loadWallpaper() {
@@ -152,17 +146,20 @@ public class ApplicationLoader extends Application {
try {
PowerManager pm = (PowerManager) ApplicationLoader.applicationContext.getSystemService(Context.POWER_SERVICE);
backendWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "backendWakeLock" /*any name*/);
// bakendWakeLock _is_ reference counted by the backend (every acquire() has a release())
imapWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "imapWakeLock");
imapWakeLock.setReferenceCounted(false); // if the idle-thread is killed for any reasons, it is better not to rely on reference counting
wakeupWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "wakeupWakeLock" /*any name*/);
wakeupWakeLock.setReferenceCounted(false);
smtpWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "smtpWakeLock");
smtpWakeLock.setReferenceCounted(false); // if the idle-thread is killed for any reasons, it is better not to rely on reference counting
stayAwakeWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "stayAwakeWakeLock" /*any name*/);
stayAwakeWakeLock.setReferenceCounted(false);
convertVideoWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "convertVideoWakeLock" /*any name*/);
convertVideoWakeLock.setReferenceCounted(false);
afterForgroundWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "afterForegroundWakeLock");
afterForgroundWakeLock.setReferenceCounted(false);
} catch (Exception e) {
Log.e("DeltaChat", "Cannot acquire wakeLock");
Log.e("DeltaChat", "Cannot create wakeLocks");
}
// create a MrMailbox object; as android stops the App by just killing it, we do never call MrMailboxUnref()
@@ -173,7 +170,10 @@ public class ApplicationLoader extends Application {
// start keep-alive service that restarts the app as soon it is terminated
// (this is done by just marking the service as START_STICKY which recreates the service as
// it goes away which also inititialized the app indirectly by calling this function)
applicationContext.startService(new Intent(applicationContext, KeepAliveService.class));
/*if( getPermanentPush() ) {
applicationContext.startService(new Intent(applicationContext, KeepAliveService.class));
}*/
// init locale
try {
@@ -182,12 +182,16 @@ public class ApplicationLoader extends Application {
e.printStackTrace();
}
// track screen on/ff
// track screen and network states
try {
final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
final BroadcastReceiver mReceiver = new ScreenReceiver();
applicationContext.registerReceiver(mReceiver, filter);
final BroadcastReceiver mNetworkStateReceiver = new NetworkStateReceiver();
applicationContext.registerReceiver(mNetworkStateReceiver, new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION));
} catch (Exception e) {
e.printStackTrace();
}
@@ -207,9 +211,10 @@ public class ApplicationLoader extends Application {
// make sure, the notifications for the "deaddrop" dialog are muted by default
SharedPreferences notificationPreferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Activity.MODE_PRIVATE);
if( notificationPreferences.getInt("notify2_"+MrChat.MR_CHAT_ID_DEADDROP, 666)==666 ) {
if( notificationPreferences.getInt("deaddrop_initialized", 0)!=1 ) {
SharedPreferences.Editor editor = notificationPreferences.edit();
editor.putInt("notify2_"+MrChat.MR_CHAT_ID_DEADDROP, 2);
editor.putInt("deaddrop_initialized", 1);
editor.apply();
}
@@ -217,16 +222,22 @@ public class ApplicationLoader extends Application {
// open() should be called before MessagesController.getInstance() as this also initilizes directories based upon getBlobdir().
File dbfile = new File(getFilesDirFixed(), "messenger.db");
MrMailbox.open(dbfile.getAbsolutePath());
if( MrMailbox.isConfigured()!=0 ) {
MrMailbox.connect();
if( MrMailbox.isConfigured()!=0 /*&& ApplicationLoader.getPermanentPush()*/ ) {
//ApplicationLoader.imapForeground = true;
ApplicationLoader.startThreads();
}
// create other default objects
SharedPreferences mainPreferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
fontSize = mainPreferences.getInt("msg_font_size", SettingsAdvActivity.defMsgFontSize());
fontSize = mainPreferences.getInt("msg_font_size", SettingsAdvFragment.defMsgFontSize());
ImageLoader.getInstance();
MediaController.getInstance();
NotificationsController.getInstance(); // force instace creation which also does some init stuff
if( !isScreenOn ) {
applicationContext.startService(new Intent(applicationContext, KeepAliveService.class));
}
}
@Override
@@ -262,8 +273,146 @@ public class ApplicationLoader extends Application {
return false;
}
public static void stayAwakeForAMoment()
static private int fetchMode = -1; // 0: push, 1: poll once per minute
public static boolean getPermanentPush()
{
stayAwakeWakeLock.acquire(1*60*1000); // 1 Minute to wait for "after chat" messages, after that, we sleep most time, see wakeupWakeLock
return true;
/*
if( fetchMode == -1 ) {
SharedPreferences preferences = applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
fetchMode = preferences.getInt("fetch_mode", 1);
}
return fetchMode==0;
*/
}
public static void setPermanentPush(boolean permanentPush)
{
fetchMode = permanentPush? 0 : 1;
SharedPreferences preferences = applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("fetch_mode", fetchMode);
editor.apply();
if( permanentPush ) {
applicationContext.startService(new Intent(applicationContext, KeepAliveService.class));
}
else {
applicationContext.stopService(new Intent(applicationContext, KeepAliveService.class));
}
}
private static final Object threadsCritical = new Object();
private static boolean imapThreadStartedVal;
private static final Object imapThreadStartedCond = new Object();
public static Thread imapThread = null;
private static PowerManager.WakeLock imapWakeLock = null;
private static boolean smtpThreadStartedVal;
private static final Object smtpThreadStartedCond = new Object();
public static Thread smtpThread = null;
private static PowerManager.WakeLock smtpWakeLock = null;
public static PowerManager.WakeLock afterForgroundWakeLock = null;
//public static boolean imapForeground = false;
public static void startThreads()
{
synchronized(threadsCritical) {
if (imapThread == null || !imapThread.isAlive()) {
synchronized (imapThreadStartedCond) {
imapThreadStartedVal = false;
}
imapThread = new Thread(new Runnable() {
@Override
public void run() {
// raise the starting condition
// after acquiring a wakelock so that the process is not terminated.
// as imapWakeLock is not reference counted that would result in a wakelock-gap is not needed here.
imapWakeLock.acquire();
synchronized (imapThreadStartedCond) {
imapThreadStartedVal = true;
imapThreadStartedCond.notifyAll();
}
Log.i("DeltaChat", "###################### IMAP-Thread started. ######################");
while (true) {
imapWakeLock.acquire();
MrMailbox.performJobs();
MrMailbox.fetch();
imapWakeLock.release();
MrMailbox.idle();
}
}
}, "imapThread");
imapThread.start();
}
if (smtpThread == null || !smtpThread.isAlive()) {
synchronized (smtpThreadStartedCond) {
smtpThreadStartedVal = false;
}
smtpThread = new Thread(new Runnable() {
@Override
public void run() {
smtpWakeLock.acquire();
synchronized (smtpThreadStartedCond) {
smtpThreadStartedVal = true;
smtpThreadStartedCond.notifyAll();
}
Log.i("DeltaChat", "###################### SMTP-Thread started. ######################");
while (true) {
smtpWakeLock.acquire();
MrMailbox.performSmtpJobs();
smtpWakeLock.release();
MrMailbox.performSmtpIdle();
}
}
}, "smtpThread");
smtpThread.start();
}
}
}
public static void waitForThreadsRunning()
{
try {
synchronized( imapThreadStartedCond ) {
while( !imapThreadStartedVal ) {
imapThreadStartedCond.wait();
}
}
synchronized( smtpThreadStartedCond ) {
while( !smtpThreadStartedVal ) {
smtpThreadStartedCond.wait();
}
}
}
catch( Exception e ) {
e.printStackTrace();
}
}
/*public static void scheduleStopImapThread()
{
//Log.i("DeltaChat", "IMAP-thread scheduled to stop.");
//imapForeground = false;
//MrMailbox.interruptIdle();
}*/
}
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
*
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -20,7 +20,7 @@
*
******************************************************************************/
package com.b44t.ui;
package com.b44t.messenger;
import android.content.Context;
import android.database.Cursor;
@@ -32,24 +32,13 @@ import android.widget.AdapterView;
import android.widget.FrameLayout;
import android.widget.ListView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.MediaController;
import com.b44t.messenger.MessageObject;
import com.b44t.messenger.MrContact;
import com.b44t.messenger.NotificationCenter;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.FileLoader;
import com.b44t.messenger.R;
import com.b44t.messenger.TLRPC;
import com.b44t.messenger.Utilities;
import com.b44t.ui.ActionBar.ActionBar;
import com.b44t.ui.ActionBar.BaseFragment;
import com.b44t.ui.Adapters.BaseFragmentAdapter;
import com.b44t.ui.Cells.AudioCell;
import com.b44t.ui.Components.EmptyTextProgressView;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.ui.Components.PickerBottomLayout;
import com.b44t.messenger.ActionBar.ActionBar;
import com.b44t.messenger.ActionBar.BaseFragment;
import com.b44t.messenger.Components.BaseFragmentAdapter;
import com.b44t.messenger.Cells.AudioCell;
import com.b44t.messenger.Components.EmptyTextProgressView;
import com.b44t.messenger.Components.LayoutHelper;
import com.b44t.messenger.Components.PickerBottomLayout;
import java.io.File;
import java.util.ArrayList;
@@ -96,7 +85,6 @@ public class AudioSelectActivity extends BaseFragment implements NotificationCen
@Override
public View createView(Context context) {
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
actionBar.setAllowOverlayTitle(true);
actionBar.setTitle(context.getString(R.string.AttachMusic));
actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
@Override
@@ -225,8 +213,7 @@ public class AudioSelectActivity extends BaseFragment implements NotificationCen
TLRPC.TL_message message = new TLRPC.TL_message();
message.out = true;
message.id = id;
message.to_id = new TLRPC.TL_peerUser();
message.to_id.user_id = message.from_id = MrContact.MR_CONTACT_ID_SELF;
message.from_id = MrContact.MR_CONTACT_ID_SELF;
message.date = (int) (System.currentTimeMillis() / 1000);
message.message = "-1";
message.attachPath = audioEntry.path;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -38,7 +38,7 @@ public class AutoMessageHeardReceiver extends BroadcastReceiver {
if (dialog_id == 0 || max_id == 0) {
return;
}
MrMailbox.markseenChat((int)dialog_id);
MrMailbox.marknoticedChat((int)dialog_id);
NotificationsController.getInstance().removeSeenMessages();
}
}
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -49,7 +49,7 @@ public class AutoMessageReplyReceiver extends BroadcastReceiver {
return;
}
SendMessagesHelper.getInstance().sendMessageText(text.toString(), dialog_id, null);
MrMailbox.markseenChat((int)dialog_id);
MrMailbox.marknoticedChat((int)dialog_id);
NotificationsController.getInstance().removeSeenMessages();
}
}
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui;
package com.b44t.messenger;
import android.app.AlertDialog;
import android.content.Context;
@@ -36,18 +36,12 @@ import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.MrContact;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.NotificationCenter;
import com.b44t.messenger.R;
import com.b44t.ui.Adapters.BaseFragmentAdapter;
import com.b44t.ui.Cells.UserCell;
import com.b44t.ui.ActionBar.ActionBar;
import com.b44t.ui.ActionBar.ActionBarMenu;
import com.b44t.ui.ActionBar.BaseFragment;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.BaseFragmentAdapter;
import com.b44t.messenger.Cells.UserCell;
import com.b44t.messenger.ActionBar.ActionBar;
import com.b44t.messenger.ActionBar.ActionBarMenu;
import com.b44t.messenger.ActionBar.BaseFragment;
import com.b44t.messenger.Components.LayoutHelper;
public class BlockedUsersActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, ContactsActivity.ContactsActivityDelegate {
@@ -79,7 +73,6 @@ public class BlockedUsersActivity extends BaseFragment implements NotificationCe
@Override
public View createView(final Context context) {
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
actionBar.setAllowOverlayTitle(true);
actionBar.setTitle(ApplicationLoader.applicationContext.getString(R.string.BlockedContacts));
actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
@Override
@@ -243,11 +236,11 @@ public class BlockedUsersActivity extends BaseFragment implements NotificationCe
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (view == null) {
view = new UserCell(mContext, 1, 0);
view = new UserCell(mContext,0);
}
if (i>=0 && i<blockedUserIds.length) {
MrContact mrContact = MrMailbox.getContact(blockedUserIds[i]);
((UserCell) view).setData(mrContact, 0);
((UserCell) view).setData(mrContact);
}
return view;
}
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
*
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Paint;
@@ -38,8 +38,8 @@ import com.b44t.messenger.LocaleController;
import com.b44t.messenger.MediaController;
import com.b44t.messenger.MessageObject;
import com.b44t.messenger.R;
import com.b44t.ui.Components.CheckBoxView;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.CheckBoxView;
import com.b44t.messenger.Components.LayoutHelper;
public class AudioCell extends FrameLayout {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.drawable.Drawable;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Canvas;
@@ -35,7 +35,7 @@ import android.view.MotionEvent;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.MessageObject;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.messenger.ActionBar.Theme;
public class ChatActionCell extends BaseCell {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.annotation.SuppressLint;
import android.content.Context;
@@ -55,16 +55,16 @@ import com.b44t.messenger.MessageObject;
import com.b44t.messenger.MrChat;
import com.b44t.messenger.MrContact;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.MrPoortext;
import com.b44t.messenger.MrLot;
import com.b44t.messenger.R;
import com.b44t.messenger.TLRPC;
import com.b44t.ui.Components.AvatarDrawable;
import com.b44t.ui.Components.LinkPath;
import com.b44t.ui.Components.SeekBar;
import com.b44t.ui.Components.SeekBarWaveform;
import com.b44t.ui.Components.StaticLayoutEx;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.ui.PhotoViewer;
import com.b44t.messenger.Components.AvatarDrawable;
import com.b44t.messenger.Components.LinkPath;
import com.b44t.messenger.Components.SeekBar;
import com.b44t.messenger.Components.SeekBarWaveform;
import com.b44t.messenger.Components.StaticLayoutEx;
import com.b44t.messenger.ActionBar.Theme;
import com.b44t.messenger.PhotoViewer;
import java.util.ArrayList;
import java.util.Locale;
@@ -75,6 +75,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
public interface ChatMessageCellDelegate {
void didPressedUserAvatar(ChatMessageCell cell, TLRPC.User user);
void didPressedSetupMessage(ChatMessageCell cell);
void didLongPressed(ChatMessageCell cell);
void didPressedUrl(MessageObject messageObject, ClickableSpan url, boolean longPress);
void didPressedImage(ChatMessageCell cell);
@@ -197,8 +198,6 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
private static TextPaint timePaint;
private static TextPaint namePaint;
private static TextPaint forwardNamePaint;
private static TextPaint forward2NamePaint;
private int backgroundWidth = 100;
@@ -208,7 +207,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
private ImageReceiver avatarImage;
private AvatarDrawable avatarDrawable;
private boolean avatarPressed;
private boolean forwardNamePressed;
private boolean setupmessagePressed;
private boolean drawNewchatButton;
private boolean newchatPressed;
@@ -223,26 +223,23 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
private boolean drawName;
private boolean drawNameLayout;
private StaticLayout[] forwardedNameLayout = new StaticLayout[2];
private boolean allowForwardedName;
private static TextPaint forwardedNamePaint;
private StaticLayout forwardedNameLayout;
private int forwardedNameWidth;
private boolean drawForwardedName;
private int forwardNameX;
private int forwardNameY;
private float forwardNameOffsetX[] = new float[2];
private float forwardedNameOffsetX;
private StaticLayout timeLayout;
private int timeWidth;
private int timeTextWidth;
private int timeWidth; // includes timeEncrWidth
private int timeEncrWidth;
private int timeX;
private String currentTimeString;
private boolean drawTime = true;
private TLRPC.User currentUser;
private final Object currentChat = null;
private TLRPC.FileLocation currentPhoto;
private String currentNameString;
private String currentForwardNameString;
private ChatMessageCellDelegate delegate;
@@ -287,12 +284,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
namePaint.setTypeface(Typeface.DEFAULT_BOLD);
namePaint.setTextSize(dp(14));
forwardNamePaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG);
forwardNamePaint.setTextSize(dp(14));
forward2NamePaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG);
forward2NamePaint.setTypeface(Typeface.DEFAULT_BOLD);
forward2NamePaint.setTextSize(dp(14));
forwardedNamePaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG);
forwardedNamePaint.setTextSize(dp(14));
}
avatarImage = new ImageReceiver(this);
avatarImage.setRoundRadius(dp(21));
@@ -524,7 +517,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
imagePressed = true;
result = true;
}
} else if (currentMessageObject.type != MessageObject.MO_TYPE13_STICKER || currentMessageObject.getInputStickerSet() != null) {
} else if (currentMessageObject.type != MessageObject.MO_TYPE13_STICKER ) {
if (x >= photoImage.getImageX() && x <= photoImage.getImageX() + backgroundWidth && y >= photoImage.getImageY() && y <= photoImage.getImageY() + photoImage.getImageHeight()) {
imagePressed = true;
result = true;
@@ -664,14 +657,15 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
if (isAvatarVisible && avatarImage.isInsideImage(x, y)) {
avatarPressed = true;
result = true;
} else if (drawForwardedName && forwardedNameLayout[0] != null && x >= forwardNameX && x <= forwardNameX + forwardedNameWidth && y >= forwardNameY && y <= forwardNameY + dp(32)) {
forwardNamePressed = true;
result = true;
} else if (drawNewchatButton && x >= newchatStartX && x <= newchatStartX + dp(40) && y >= newchatStartY && y <= newchatStartY + dp(32)) {
newchatPressed = true;
result = true;
invalidate();
} else if( currentMessageObject.messageOwner.is_setup_message && currentBackgroundDrawable.getBounds().contains((int)x, (int)y) ) {
setupmessagePressed = true;
result = true;
}
if (result) {
startCheckLongPress();
}
@@ -696,14 +690,16 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
avatarPressed = false;
}
}
} else if (forwardNamePressed) {
} else if(setupmessagePressed) {
if (event.getAction() == MotionEvent.ACTION_UP) {
forwardNamePressed = false;
} else if (event.getAction() == MotionEvent.ACTION_CANCEL) {
forwardNamePressed = false;
setupmessagePressed = false;
delegate.didPressedSetupMessage(this);
}
else if(event.getAction() == MotionEvent.ACTION_CANCEL) {
setupmessagePressed = false;
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
if (!(x >= forwardNameX && x <= forwardNameX + forwardedNameWidth && y >= forwardNameY && y <= forwardNameY + dp(32))) {
forwardNamePressed = false;
if( !currentBackgroundDrawable.getBounds().contains((int)x, (int)y) ) {
setupmessagePressed = false;
}
}
} else if (newchatPressed) {
@@ -867,7 +863,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
private boolean isUserDataChanged() {
if (currentMessageObject == null || currentUser == null && currentChat == null) {
if (currentMessageObject == null || currentUser == null) {
return false;
}
if (lastSendState != currentMessageObject.messageOwner.send_state) {
@@ -878,12 +874,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
TLRPC.User newUser = null;
final TLRPC.Chat newChat = null;
if (currentMessageObject.isFromUser()) {
newUser = MrMailbox.getUser(currentMessageObject.messageOwner.from_id);
} /*else if (currentMessageObject.messageOwner.post) {
newChat = MessagesController.getInstance().getChat(currentMessageObject.messageOwner.to_id.channel_id);
}*/
}
TLRPC.FileLocation newPhoto = null;
if (isAvatarVisible) {
@@ -900,8 +893,6 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
if (drawName && isGroupChat && !currentMessageObject.isOutOwner()) {
if (newUser != null) {
newNameString = "ErrName"; // use MrContact.getName(), if really needed
} else if (newChat != null) {
newNameString = newChat.title;
}
}
@@ -909,10 +900,6 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
return true;
}
if (drawForwardedName) {
newNameString = currentMessageObject.getForwardedName();
return currentForwardNameString == null && newNameString != null || currentForwardNameString != null && newNameString == null || currentForwardNameString != null && newNameString != null && !currentForwardNameString.equals(newNameString);
}
return false;
}
@@ -1046,7 +1033,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
maxWidth = maxWidth - dp(86);
MrPoortext pt = MrMailbox.getMsg(messageObject.getId()).getMediainfo();
MrLot pt = MrMailbox.getMsg(messageObject.getId()).getMediainfo();
CharSequence stringFinal = TextUtils.ellipsize(pt.getText2(), audioTitlePaint, maxWidth, TextUtils.TruncateAt.MIDDLE);
songLayout = new StaticLayout(stringFinal, audioTitlePaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
if (songLayout.getLineCount() > 0) {
@@ -1083,12 +1070,12 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
int minutes = duration / 60;
int seconds = duration - minutes * 60;
String str = String.format("%d:%02d, %s", minutes, seconds, formatFileSize(documentAttach.size));
if( MrMailbox.getMsg(messageObject.getId()).isIncreation()!=0 ) {
str = ApplicationLoader.applicationContext.getString(R.string.OneMoment);
String infoString = String.format("%d:%02d, %s", minutes, seconds, formatFileSize(documentAttach.size));
if( MrMailbox.getMsg(messageObject.getId()).isIncreation() ) {
infoString = ApplicationLoader.applicationContext.getString(R.string.OneMoment);
}
infoWidth = (int) Math.ceil(infoPaint.measureText(str));
infoLayout = new StaticLayout(str, infoPaint, infoWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
infoWidth = (int) Math.ceil(infoPaint.measureText(infoString));
infoLayout = new StaticLayout(infoString, infoPaint, infoWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
}
else
{
@@ -1103,30 +1090,24 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
docTitleLayout = StaticLayoutEx.createStaticLayout(name, docNamePaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false, TextUtils.TruncateAt.MIDDLE, maxWidth, drawPhotoImage ? 2 : 1);
docTitleOffsetX = Integer.MIN_VALUE;
int width;
if (docTitleLayout != null && docTitleLayout.getLineCount() > 0) {
int maxLineWidth = 0;
for (int a = 0; a < docTitleLayout.getLineCount(); a++) {
maxLineWidth = Math.max(maxLineWidth, (int) Math.ceil(docTitleLayout.getLineWidth(a)));
docTitleOffsetX = Math.max(docTitleOffsetX, (int) Math.ceil(-docTitleLayout.getLineLeft(a)));
}
width = Math.min(maxWidth, maxLineWidth);
} else {
width = maxWidth;
docTitleOffsetX = 0;
}
String str = formatFileSize(documentAttach.size) + " " + FileLoader.getDocumentExtension(documentAttach);
infoWidth = Math.min(maxWidth - AndroidUtilities.dp(30), (int) Math.ceil(infoPaint.measureText(str)));
CharSequence str2 = TextUtils.ellipsize(str, infoPaint, infoWidth, TextUtils.TruncateAt.END);
try {
if (infoWidth < 0) {
infoWidth = dp(10);
}
infoLayout = new StaticLayout(str2, infoPaint, infoWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
} catch (Exception e) {
String infoString = formatFileSize(documentAttach.size) + " " + FileLoader.getDocumentExtension(documentAttach);
infoWidth = Math.min(maxWidth - AndroidUtilities.dp(30), (int) Math.ceil(infoPaint.measureText(infoString)));
CharSequence str2 = TextUtils.ellipsize(infoString, infoPaint, infoWidth, TextUtils.TruncateAt.END);
if (infoWidth < 0) {
infoWidth = dp(10);
}
infoLayout = new StaticLayout(str2, infoPaint, infoWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
if (drawPhotoImage) {
currentPhotoObject = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, getPhotoSize());
@@ -1208,7 +1189,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
}
public void setMessageObject(MessageObject messageObject) {
public void setMessageObject(MessageObject messageObject, boolean drawNewchatButton_) {
boolean messageChanged = currentMessageObject != messageObject || messageObject.forceUpdate;
boolean dataChanged = currentMessageObject == messageObject && isUserDataChanged();
if (messageChanged || dataChanged || isPhotoDataChanged(messageObject)) {
@@ -1219,9 +1200,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
isCheckPressed = true;
isAvatarVisible = false;
wasLayout = false;
drawNewchatButton = checkNeedDrawNewchatButton(messageObject);
drawNewchatButton = drawNewchatButton_;
currentUser = null;
//currentChat = null;
drawNameLayout = false;
resetPressedLink(-1);
@@ -1243,7 +1223,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
drawBackground = true;
drawName = false;
useSeekBarWaveform = false;
drawForwardedName = false;
allowForwardedName = false;
mediaBackground = false;
availableTimeWidth = 0;
photoImage.setNeedsQualityThumb(false);
@@ -1258,25 +1238,15 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
if (messageObject.type == MessageObject.MO_TYPE0_TEXT) {
drawForwardedName = true;
allowForwardedName = true;
int maxWidth;
if (isTablet()) {
if (isGroupChat && !messageObject.isOutOwner() && messageObject.isFromUser()) {
maxWidth = getMinTabletSide() - dp(122);
drawName = true;
} else {
drawName = false;
maxWidth = getMinTabletSide() - dp(80);
}
if (isGroupChat && !messageObject.isOutOwner() && messageObject.isFromUser()) {
maxWidth = Math.min(displaySize.x, displaySize.y) - dp(122);
drawName = true;
} else {
if (isGroupChat && !messageObject.isOutOwner() && messageObject.isFromUser()) {
maxWidth = Math.min(displaySize.x, displaySize.y) - dp(122);
drawName = true;
} else {
maxWidth = Math.min(displaySize.x, displaySize.y) - dp(80);
drawName = false;
}
maxWidth = Math.min(displaySize.x, displaySize.y) - dp(80);
drawName = false;
}
measureTime(messageObject);
int timeMore = timeWidth + dp(6);
@@ -1309,12 +1279,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
photoImage.setImageBitmap((Drawable) null);
calcBackgroundWidth(maxWidth, timeMore, maxChildWidth);
} else if (messageObject.type == MessageObject.MO_TYPE2_VOICE) {
drawForwardedName = true;
if (isTablet()) {
backgroundWidth = Math.min(getMinTabletSide() - dp(isGroupChat && messageObject.isFromUser() && !messageObject.isOutOwner() ? 102 : 50), dp(270));
} else {
backgroundWidth = Math.min(displaySize.x - dp(isGroupChat && messageObject.isFromUser() && !messageObject.isOutOwner() ? 102 : 50), dp(270));
}
allowForwardedName = true;
backgroundWidth = Math.min(displaySize.x - dp(isGroupChat && messageObject.isFromUser() && !messageObject.isOutOwner() ? 102 : 50), dp(270));
createDocumentLayout(backgroundWidth, messageObject);
setMessageObjectInternal(messageObject);
@@ -1323,11 +1289,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
updateWaveform(true);
} else if (messageObject.type == MessageObject.MO_TYPE14_MUSIC) {
if (isTablet()) {
backgroundWidth = Math.min(getMinTabletSide() - dp(isGroupChat && messageObject.isFromUser() && !messageObject.isOutOwner() ? 102 : 50), dp(270));
} else {
backgroundWidth = Math.min(displaySize.x - dp(isGroupChat && messageObject.isFromUser() && !messageObject.isOutOwner() ? 102 : 50), dp(270));
}
backgroundWidth = Math.min(displaySize.x - dp(isGroupChat && messageObject.isFromUser() && !messageObject.isOutOwner() ? 102 : 50), dp(270));
createDocumentLayout(backgroundWidth, messageObject);
@@ -1335,7 +1297,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
totalHeight = dp(80) + namesOffset;
} else {
drawForwardedName = messageObject.messageOwner.fwd_from != null && messageObject.type != MessageObject.MO_TYPE13_STICKER;
allowForwardedName = messageObject.isForwarded() && messageObject.type != MessageObject.MO_TYPE13_STICKER;
mediaBackground = messageObject.type != MessageObject.MO_TYPE9_FILE;
drawImageButton = false; // we do not want the image button for images
drawPhotoImage = true;
@@ -1352,12 +1314,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
photoImage.setForcePreview(false);
if (messageObject.type == MessageObject.MO_TYPE9_FILE) {
if (isTablet()) {
backgroundWidth = Math.min(getMinTabletSide() - dp(isGroupChat && messageObject.isFromUser() && !messageObject.isOutOwner() ? 102 : 50), dp(270));
} else {
backgroundWidth = Math.min(displaySize.x - dp(isGroupChat && messageObject.isFromUser() && !messageObject.isOutOwner() ? 102 : 50), dp(270));
}
if (checkNeedDrawNewchatButton(messageObject)) {
backgroundWidth = Math.min(displaySize.x - dp(isGroupChat && messageObject.isFromUser() && !messageObject.isOutOwner() ? 102 : 50), dp(270));
if (drawNewchatButton) {
backgroundWidth -= dp(20);
}
int maxWidth = backgroundWidth - dp(86 + 52);
@@ -1395,11 +1353,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
float maxHeight;
float maxWidth;
if (isTablet()) {
maxHeight = maxWidth = getMinTabletSide() * 0.4f;
} else {
maxHeight = maxWidth = Math.min(displaySize.x, displaySize.y) * 0.5f;
}
maxHeight = maxWidth = Math.min(displaySize.x, displaySize.y) * 0.5f;
if (photoWidth == 0) {
photoHeight = (int) maxHeight;
photoWidth = photoHeight + dp(100);
@@ -1431,13 +1385,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
} else {
int maxPhotoWidth;
if (isTablet()) {
maxPhotoWidth = photoWidth = (int) (getMinTabletSide() * 0.7f);
} else {
maxPhotoWidth = photoWidth = (int) (Math.min(displaySize.x, displaySize.y) * 0.7f);
}
maxPhotoWidth = photoWidth = (int) (Math.min(displaySize.x, displaySize.y) * 0.7f);
photoHeight = photoWidth + dp(100);
if (checkNeedDrawNewchatButton(messageObject)) {
if (drawNewchatButton) {
maxPhotoWidth -= dp(20);
photoWidth -= dp(20);
}
@@ -1604,7 +1554,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
setMessageObjectInternal(messageObject);
if (drawForwardedName) {
if (allowForwardedName) {
namesOffset += dp(5);
} else if (drawNameLayout && messageObject.messageOwner.reply_to_msg_id == 0) {
namesOffset += dp(7);
@@ -1655,10 +1605,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
if (changed || !wasLayout) {
layoutWidth = getMeasuredWidth();
layoutHeight = getMeasuredHeight() - substractBackgroundHeight;
if (timeTextWidth < 0) {
timeTextWidth = dp(10);
}
timeLayout = new StaticLayout(currentTimeString, timePaint, timeTextWidth + dp(6), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
timeLayout = new StaticLayout(currentTimeString, timePaint, timeWidth + dp(6), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
if (!mediaBackground) {
if (!currentMessageObject.isOutOwner()) {
timeX = backgroundWidth - dp(9) - timeWidth + (isGroupChat && currentMessageObject.isFromUser() ? dp(48) : 0);
@@ -1882,7 +1829,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
else if (currentMessageObject.type == MessageObject.MO_TYPE1_PHOTO || documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO) {
if (photoImage.getVisible()) {
if (infoLayout != null && (buttonState == BS1_CLICK_TO_PAUSE || buttonState == BS0_CLICK_TO_PLAY || buttonState == BS3_NORMAL)) {
if (infoLayout != null /*&& (buttonState == BS1_CLICK_TO_PAUSE || buttonState == BS0_CLICK_TO_PLAY || buttonState == BS3_NORMAL)*/) {
infoPaint.setColor(Theme.MSG_MEDIA_INFO_TEXT_COLOR);
setDrawableBounds(Theme.timeBackgroundDrawable, photoImage.getImageX() + dp(4), photoImage.getImageY() + dp(4), infoWidth + dp(8), dp(16.5f));
Theme.timeBackgroundDrawable.draw(canvas);
@@ -1978,18 +1925,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
private int getMaxNameWidth() {
if (documentAttachType == DOCUMENT_ATTACH_TYPE_STICKER) {
int maxWidth;
if (isTablet()) {
if (isGroupChat && !currentMessageObject.isOutOwner() && currentMessageObject.isFromUser()) {
maxWidth = getMinTabletSide() - dp(42);
} else {
maxWidth = getMinTabletSide();
}
if (isGroupChat && !currentMessageObject.isOutOwner() && currentMessageObject.isFromUser()) {
maxWidth = Math.min(displaySize.x, displaySize.y) - dp(42);
} else {
if (isGroupChat && !currentMessageObject.isOutOwner() && currentMessageObject.isFromUser()) {
maxWidth = Math.min(displaySize.x, displaySize.y) - dp(42);
} else {
maxWidth = Math.min(displaySize.x, displaySize.y);
}
maxWidth = Math.min(displaySize.x, displaySize.y);
}
return maxWidth - backgroundWidth - dp(57);
}
@@ -2088,30 +2027,24 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
private void measureTime(MessageObject messageObject) {
currentTimeString = LocaleController.getInstance().formatterDay.format((long) (messageObject.messageOwner.date) * 1000);
timeTextWidth = timeWidth = (int) Math.ceil(timePaint.measureText(currentTimeString));
currentTimeString = LocaleController.getInstance().getFormatterDay().format((long) (messageObject.messageOwner.date) * 1000);
timeWidth = (int) Math.ceil(timePaint.measureText(currentTimeString));
timeEncrWidth = 0;
if( messageObject.messageOwner.show_padlock) {
timeEncrWidth = Theme.encrOutDrawable.getIntrinsicWidth();
timeWidth += timeEncrWidth;
}
}
private boolean isDrawSelectedBackground() {
return isPressed() && isCheckPressed || !isCheckPressed && isPressed || isHighlighted;
}
private boolean checkNeedDrawNewchatButton(MessageObject messageObject) {
if( messageObject.getDialogId()== MrChat.MR_CHAT_ID_DEADDROP) {
return true;
}
return false;
}
private void setMessageObjectInternal(MessageObject messageObject) {
if (currentMessageObject.isFromUser()) {
currentUser = MrMailbox.getUser(currentMessageObject.messageOwner.from_id);
} /*else if (currentMessageObject.messageOwner.from_id < 0) {
currentChat = MessagesController.getInstance().getChat(-currentMessageObject.messageOwner.from_id);
} else if (currentMessageObject.messageOwner.post) {
currentChat = MessagesController.getInstance().getChat(currentMessageObject.messageOwner.to_id.channel_id);
}*/
}
MrContact mrContact = null;
String cname = "";
@@ -2137,21 +2070,15 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
nameWidth = dp(100);
}
if (authorName) {
if (currentUser != null) {
currentNameString = cname;
} /*else if (currentChat != null) {
currentNameString = currentChat.title;
} */ else {
currentNameString = "DELETED";
}
if (currentUser != null) {
currentNameString = cname;
} else {
currentNameString = "";
currentNameString = "DELETED";
}
CharSequence nameStringFinal = TextUtils.ellipsize(currentNameString.replace('\n', ' '), namePaint, nameWidth, TextUtils.TruncateAt.END);
try {
nameLayout = new StaticLayout(nameStringFinal, namePaint, nameWidth + dp(2), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
if (nameLayout != null && nameLayout.getLineCount() > 0) {
if (nameLayout.getLineCount() > 0) {
nameWidth = (int) Math.ceil(nameLayout.getLineWidth(0));
if (messageObject.type != MessageObject.MO_TYPE13_STICKER) {
namesOffset += dp(19);
@@ -2172,28 +2099,18 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
nameWidth = 0;
}
currentForwardNameString = null;
forwardedNameLayout[0] = null;
forwardedNameLayout[1] = null;
forwardedNameLayout = null;
forwardedNameWidth = 0;
if( drawForwardedName && messageObject.isForwarded() && messageObject.messageOwner.fwd_from!=null )
if( allowForwardedName && messageObject.isForwarded() )
{
currentForwardNameString = messageObject.messageOwner.fwd_from.m_name;
forwardedNameWidth = getMaxNameWidth();
int fromWidth = (int) Math.ceil(forwardNamePaint.measureText(ApplicationLoader.applicationContext.getString(R.string.From) + " "));
CharSequence name = TextUtils.ellipsize(currentForwardNameString.replace('\n', ' '), forward2NamePaint, forwardedNameWidth - fromWidth, TextUtils.TruncateAt.END);
CharSequence lastLine;
lastLine = replaceTags(String.format("%s <b>%s</b>", ApplicationLoader.applicationContext.getString(R.string.From), name));
lastLine = TextUtils.ellipsize(lastLine, forwardNamePaint, forwardedNameWidth, TextUtils.TruncateAt.END);
try {
forwardedNameLayout[1] = new StaticLayout(lastLine, forwardNamePaint, forwardedNameWidth + dp(2), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
lastLine = TextUtils.ellipsize(replaceTags(ApplicationLoader.applicationContext.getString(R.string.ForwardedMessage)), forwardNamePaint, forwardedNameWidth, TextUtils.TruncateAt.END);
forwardedNameLayout[0] = new StaticLayout(lastLine, forwardNamePaint, forwardedNameWidth + dp(2), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
forwardedNameWidth = Math.max((int) Math.ceil(forwardedNameLayout[0].getLineWidth(0)), (int) Math.ceil(forwardedNameLayout[1].getLineWidth(0)));
forwardNameOffsetX[0] = forwardedNameLayout[0].getLineLeft(0);
forwardNameOffsetX[1] = forwardedNameLayout[1].getLineLeft(0);
namesOffset += dp(36);
lastLine = TextUtils.ellipsize(replaceTags(ApplicationLoader.applicationContext.getString(R.string.ForwardedMessage)), forwardedNamePaint, forwardedNameWidth, TextUtils.TruncateAt.END);
forwardedNameLayout = new StaticLayout(lastLine, forwardedNamePaint, forwardedNameWidth + dp(2), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
forwardedNameWidth = (int) Math.ceil(forwardedNameLayout.getLineWidth(0));
forwardedNameOffsetX = forwardedNameLayout.getLineLeft(0);
namesOffset += dp(18);
} catch (Exception e) {
}
@@ -2299,24 +2216,23 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
canvas.restore();
}
if (drawForwardedName && forwardedNameLayout[0] != null && forwardedNameLayout[1] != null) {
forwardNameY = dp(10 + (drawNameLayout ? 19 : 0));
forwardNamePaint.setColor(Theme.MSG_IN_TIME_N_FWD_TEXT_COLOR);
if (allowForwardedName && forwardedNameLayout != null ) {
int forwardedNameX = 0;
int forwardedNameY = dp(10 + (drawNameLayout ? 19 : 0));
forwardedNamePaint.setColor(Theme.MSG_IN_TIME_N_FWD_TEXT_COLOR);
if (currentMessageObject.isOutOwner()) {
forwardNameX = currentBackgroundDrawable.getBounds().left + dp(11);
forwardedNameX = currentBackgroundDrawable.getBounds().left + dp(11);
} else {
if (mediaBackground) {
forwardNameX = currentBackgroundDrawable.getBounds().left + dp(11);
forwardedNameX = currentBackgroundDrawable.getBounds().left + dp(11);
} else {
forwardNameX = currentBackgroundDrawable.getBounds().left + dp(17);
forwardedNameX = currentBackgroundDrawable.getBounds().left + dp(17);
}
}
for (int a = 0; a < 2; a++) {
canvas.save();
canvas.translate(forwardNameX - forwardNameOffsetX[a], forwardNameY + dp(16) * a);
forwardedNameLayout[a].draw(canvas);
canvas.restore();
}
canvas.save();
canvas.translate(forwardedNameX - forwardedNameOffsetX, forwardedNameY);
forwardedNameLayout.draw(canvas);
canvas.restore();
}
if (drawTime || !mediaBackground) {
@@ -2333,19 +2249,36 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
int additionalX = 0;
canvas.save();
canvas.translate(timeX + additionalX, layoutHeight - dp(11.3f) - timeLayout.getHeight());
canvas.translate(timeX + additionalX + timeEncrWidth, layoutHeight - dp(11.3f) - timeLayout.getHeight());
timeLayout.draw(canvas);
canvas.restore();
} else {
int additionalX = 0;
canvas.save();
canvas.translate(timeX + additionalX, layoutHeight - dp(6.5f) - timeLayout.getHeight());
canvas.translate(timeX + additionalX + timeEncrWidth, layoutHeight - dp(6.5f) - timeLayout.getHeight());
timeLayout.draw(canvas);
canvas.restore();
//canvas.drawRect(timeX, layoutHeight - AndroidUtilities.dp(6.5f) - timeLayout.getHeight(), timeX + availableTimeWidth, layoutHeight - AndroidUtilities.dp(4.5f) - timeLayout.getHeight(), timePaint);
}
// draw encryption icon left of clock
if( timeEncrWidth>0 ) {
if (!mediaBackground) {
if (currentMessageObject.isOutOwner()) {
setDrawableBounds(Theme.encrOutDrawable, timeX, layoutHeight - dp(8.5f) - Theme.encrOutDrawable.getIntrinsicHeight());
Theme.encrOutDrawable.draw(canvas);
} else {
setDrawableBounds(Theme.encrInDrawable, timeX, layoutHeight - dp(8.5f) - Theme.encrInDrawable.getIntrinsicHeight());
Theme.encrInDrawable.draw(canvas);
}
} else {
setDrawableBounds(Theme.encrMediaDrawable, timeX, layoutHeight - dp(13.2f) - Theme.encrMediaDrawable.getIntrinsicHeight());
Theme.encrMediaDrawable.draw(canvas);
}
}
// draw checkmarks right of clock
if (currentMessageObject.isOutOwner()) {
boolean drawCheck1 = false;
boolean drawCheck2 = false;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,21 +21,20 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Typeface;
import android.util.TypedValue;
import android.view.Gravity;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.R;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.messenger.Components.LayoutHelper;
import com.b44t.messenger.ActionBar.Theme;
public class ChatUnreadCell extends FrameLayout {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Canvas;
@@ -39,26 +39,24 @@ import android.text.style.ForegroundColorSpan;
import android.view.MotionEvent;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.ContactsController;
import com.b44t.messenger.EmojiInputView;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.MessageObject;
import com.b44t.messenger.MrChat;
import com.b44t.messenger.MrLot;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.MrMsg;
import com.b44t.messenger.MrPoortext;
import com.b44t.messenger.TLRPC;
import com.b44t.messenger.Emoji;
import com.b44t.messenger.R;
import com.b44t.messenger.ImageReceiver;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.ui.Components.AvatarDrawable;
import com.b44t.messenger.ActionBar.Theme;
import com.b44t.messenger.Components.AvatarDrawable;
public class DialogCell extends BaseCell {
public class ChatlistCell extends BaseCell {
private static TextPaint namePaint;
private static TextPaint messagePaint;
private static TextPaint messagePrintingPaint;
private static TextPaint timePaint;
private static TextPaint countPaint;
@@ -67,36 +65,29 @@ public class DialogCell extends BaseCell {
private static Drawable clockDrawable;
private static Drawable errorDrawable;
private static Drawable countDrawable;
private static Drawable countDrawableGrey;
private static Drawable groupDrawable;
private static Drawable muteDrawable;
private static Drawable verifiedDrawable;
private static Drawable closeDrawable;
private static Paint linePaint;
private static Paint backPaint;
private long currentDialogId;
private final boolean isDialogCell = true; // if it is no dialog cell, it is a search cell ...
private long currentChatId;
private int unreadCount;
private int lastSendState;
private boolean dialogMuted;
private final MessageObject message = null;
private int index;
private boolean chatMuted;
private boolean chatVerified;
private ImageReceiver avatarImage;
private AvatarDrawable avatarDrawable;
private final Object user = null;
private final Object chat = null;
public boolean useSeparator = false;
private int nameLeft;
private StaticLayout nameLayout;
private boolean drawNameGroup;
private int nameMuteLeft;
private boolean drawGroupIcon;
private int nameVerifiedLeft;
private int nameLockLeft;
private int nameLockTop;
private int muteLeft;
private int timeLeft;
private int timeTop = AndroidUtilities.dp(17);
@@ -114,7 +105,7 @@ public class DialogCell extends BaseCell {
private StaticLayout messageLayout;
private boolean drawError;
private int errorTop = AndroidUtilities.dp(39);
private int errorTop = AndroidUtilities.dp(42);
private int errorLeft;
private boolean drawCount;
@@ -123,39 +114,35 @@ public class DialogCell extends BaseCell {
private int countWidth;
private StaticLayout countLayout;
private boolean drawVerified;
private boolean drawFlag; // draw a flag as eg. "Archived" below the time
private int flagLeft;
private int flagWidth;
private StaticLayout flagLayout;
private int avatarLeft;
private int avatarTop = AndroidUtilities.dp(10);
private boolean isSelected;
private int avatarWH = AndroidUtilities.dp(52);
private MrChat m_mrChat = new MrChat(0);
private MrPoortext m_summary = new MrPoortext(0);
private MrLot m_summary = new MrLot(0);
private boolean m_showUnreadCount;
public DialogCell(Context context) {
public ChatlistCell(Context context) {
super(context);
if (namePaint == null) {
namePaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG);
namePaint.setTextSize(AndroidUtilities.dp(17));
namePaint.setColor(Theme.DIALOGS_TITLE_TEXT_COLOR);
namePaint.setColor(Theme.CHATLIST_TITLE_TEXT_COLOR);
messagePaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG);
messagePaint.setTextSize(AndroidUtilities.dp(16));
messagePaint.setColor(Theme.DIALOGS_MESSAGE_TEXT_COLOR);
messagePaint.linkColor = Theme.DIALOGS_MESSAGE_TEXT_COLOR;
messagePaint.setColor(Theme.CHATLIST_MESSAGE_TEXT_COLOR);
messagePaint.linkColor = Theme.CHATLIST_MESSAGE_TEXT_COLOR;
linePaint = new Paint();
linePaint.setColor(0xffdcdcdc);
backPaint = new Paint();
backPaint.setColor(0x0f000000);
messagePrintingPaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG);
messagePrintingPaint.setTextSize(AndroidUtilities.dp(16));
messagePrintingPaint.setColor(Theme.DIALOGS_PRINTING_TEXT_COLOR);
timePaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG);
timePaint.setTextSize(AndroidUtilities.dp(13));
timePaint.setColor(0xff999999);
@@ -168,37 +155,35 @@ public class DialogCell extends BaseCell {
checkDrawable = getResources().getDrawable(R.drawable.dialogs_check);
halfCheckDrawable = getResources().getDrawable(R.drawable.dialogs_halfcheck);
clockDrawable = getResources().getDrawable(R.drawable.msg_clock);
errorDrawable = getResources().getDrawable(R.drawable.dialogs_warning);
errorDrawable = getResources().getDrawable(R.drawable.msg_warning);
countDrawable = getResources().getDrawable(R.drawable.dialogs_badge);
countDrawableGrey = getResources().getDrawable(R.drawable.dialogs_badge2);
groupDrawable = getResources().getDrawable(R.drawable.list_group);
muteDrawable = getResources().getDrawable(R.drawable.mute_grey);
verifiedDrawable = getResources().getDrawable(R.drawable.check_list);
verifiedDrawable = getResources().getDrawable(R.drawable.verified);
closeDrawable = getResources().getDrawable(R.drawable.ic_dismiss_deaddrop);
}
setBackgroundResource(R.drawable.list_selector);
avatarImage = new ImageReceiver(this);
avatarImage.setRoundRadius(AndroidUtilities.dp(26));
avatarDrawable = new AvatarDrawable();
}
public void setDialog(MrChat mrChat, MrPoortext mrSummary, int i, boolean showUnreadCount) { // called for the chats overview
public void setChat(MrChat mrChat, MrLot mrSummary, int i, boolean showUnreadCount) {
m_mrChat = mrChat;
m_summary = mrSummary;
m_showUnreadCount = showUnreadCount;
currentDialogId = mrChat.getId();
index = i;
currentChatId = mrChat.getId();
if(currentChatId==MrChat.MR_CHAT_ID_DEADDROP) {
setBackgroundColor(Theme.CHATLIST_DEADDROP_BACKGROUND_COLOR);
}
else {
setBackgroundResource(R.drawable.list_selector);
}
update(0);
}
public long getDialogId() {
return currentDialogId;
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
@@ -218,7 +203,7 @@ public class DialogCell extends BaseCell {
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
if (currentDialogId == 0) {
if (currentChatId == 0) {
super.onLayout(changed, left, top, right, bottom);
return;
}
@@ -227,6 +212,7 @@ public class DialogCell extends BaseCell {
}
}
static public boolean deaddropClosePressed;
@Override
public boolean onTouchEvent(MotionEvent event) {
if (Build.VERSION.SDK_INT >= 21 && getBackground() != null) {
@@ -234,108 +220,86 @@ public class DialogCell extends BaseCell {
getBackground().setHotspot(event.getX(), event.getY());
}
}
if( currentChatId==MrChat.MR_CHAT_ID_DEADDROP ) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
float x = event.getX();
deaddropClosePressed = (x < avatarLeft + avatarWH);
}
}
return super.onTouchEvent(event);
}
public void buildLayout() {
String nameString = "";
String timeString = "";
String countString = null;
CharSequence messageString = "";
//CharSequence printingString = null;
/* EDIT BY MR -- we currently do not support stuff as "ist just typing", "uploads an images" etc.
if (isDialogCell) {
printingString = MessagesController.getInstance().printingStrings.get(currentDialogId);
}
*/
TextPaint currentNamePaint = namePaint;
TextPaint currentMessagePaint = messagePaint;
boolean checkMessage = true;
drawNameGroup = false;
//drawNameBroadcast = false;
//drawNameLock = false;
//drawNameBot = false;
drawVerified = false;
drawGroupIcon = false;
{
if (m_mrChat.getType()==MrChat.MR_CHAT_GROUP) { // EDIT BY MR
//if (chat.id < 0 || ChatObject.isChannel(chat) && !chat.megagroup) {
// drawNameBroadcast = true;
// nameLockTop = AndroidUtilities.dp(16.5f);
//} else {
drawNameGroup = true;
nameLockTop = AndroidUtilities.dp(17.5f);
//}
//drawVerified = chat.verified; -- /EDIT BY MR
if (m_mrChat.isGroup() && currentChatId!=MrChat.MR_CHAT_ID_DEADDROP) {
drawGroupIcon = true;
nameLockTop = AndroidUtilities.dp(17.5f);
if (!LocaleController.isRTL) {
nameLockLeft = AndroidUtilities.dp(AndroidUtilities.leftBaseline);
nameLeft = AndroidUtilities.dp(AndroidUtilities.leftBaseline + 4) + (groupDrawable.getIntrinsicWidth());
} else {
nameLockLeft = getMeasuredWidth() - AndroidUtilities.dp(AndroidUtilities.leftBaseline) - (groupDrawable.getIntrinsicWidth());
nameLeft = AndroidUtilities.dp(14);
}
if (!LocaleController.isRTL) {
nameLockLeft = AndroidUtilities.dp(AndroidUtilities.leftBaseline);
nameLeft = AndroidUtilities.dp(AndroidUtilities.leftBaseline + 4) + (groupDrawable.getIntrinsicWidth());
} else {
if (!LocaleController.isRTL) {
nameLeft = AndroidUtilities.dp(AndroidUtilities.leftBaseline);
} else {
nameLeft = AndroidUtilities.dp(14);
}
nameLockLeft = getMeasuredWidth() - AndroidUtilities.dp(AndroidUtilities.leftBaseline) - (groupDrawable.getIntrinsicWidth());
nameLeft = AndroidUtilities.dp(14);
}
} else {
if (!LocaleController.isRTL) {
nameLeft = AndroidUtilities.dp(AndroidUtilities.leftBaseline);
} else {
nameLeft = AndroidUtilities.dp(14);
}
}
String mess = m_summary.getText2();
if (mess.length() > 150) {
mess = mess.substring(0, 150);
}
String title = m_summary.getText1();
if( !title.isEmpty() )
{
checkMessage = false;
String mess = m_summary.getText2();
if (mess.length() > 150) {
mess = mess.substring(0, 150);
}
String title = m_summary.getText1();
if( !title.isEmpty() )
{
int title_meaning = m_summary.getText1Meaning();
int title_color = Theme.DIALOGS_NAME_TEXT_COLOR;
switch( title_meaning ) {
case MrPoortext.MR_TEXT1_SELF: title_color = Theme.DIALOGS_SELF_TEXT_COLOR; break;
case MrPoortext.MR_TEXT1_DRAFT: title_color = Theme.DIALOGS_DRAFT_TEXT_COLOR; break;
}
SpannableStringBuilder stringBuilder = SpannableStringBuilder.valueOf(String.format("%s: %s", title, mess));
stringBuilder.setSpan(new ForegroundColorSpan(title_color), 0, title.length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
messageString = Emoji.replaceEmoji(stringBuilder, messagePaint.getFontMetricsInt(), AndroidUtilities.dp(20), false);
}
else
{
messageString = mess;
}
long timestmp =m_summary.getTimestamp();
if( timestmp!=0 ) {
timeString = LocaleController.stringForMessageListDate(timestmp);
}
else {
timeString = "";
}
drawCheck1 = false;
drawCheck2 = false;
drawClock = false;
drawCount = false;
drawError = false;
switch( m_summary.getState() ) {
case MrMsg.MR_OUT_ERROR: drawError = true; break;
case MrMsg.MR_OUT_PENDING: drawClock = true; break;
case MrMsg.MR_OUT_DELIVERED: drawCheck2 = true; break;
case MrMsg.MR_OUT_READ: drawCheck1 = true; drawCheck2 = true; break;
}
drawVerified = m_mrChat.isEncrypted()!=0; // we use the "verified" check as an icon for "encryted" and "verified"
int title_meaning = m_summary.getText1Meaning();
int title_color = Theme.CHATLIST_NAME_TEXT_COLOR;
switch( title_meaning ) {
case MrLot.MR_TEXT1_SELF: title_color = Theme.CHATLIST_SELF_TEXT_COLOR; break;
case MrLot.MR_TEXT1_DRAFT: title_color = Theme.CHATLIST_DRAFT_TEXT_COLOR; break;
}
SpannableStringBuilder stringBuilder = SpannableStringBuilder.valueOf(String.format("%s: %s", title, mess));
stringBuilder.setSpan(new ForegroundColorSpan(title_color), 0, title.length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
messageString = EmojiInputView.replaceEmoji(stringBuilder, false);
}
else
{
messageString = mess;
}
if (unreadCount != 0) {
drawCount = true;
countString = String.format("%d", unreadCount);
} else {
drawCount = false;
long timestmp =m_summary.getTimestamp();
if( timestmp!=0 ) {
timeString = LocaleController.dateForChatlist(timestmp);
}
else {
timeString = "";
}
drawCheck1 = false;
drawCheck2 = false;
drawClock = false;
drawCount = false;
drawFlag = false;
drawError = false;
switch( m_summary.getState() ) {
case MrMsg.MR_OUT_ERROR: drawError = true; break;
case MrMsg.MR_OUT_PENDING: drawClock = true; break;
case MrMsg.MR_OUT_DELIVERED: drawCheck2 = true; break;
case MrMsg.MR_OUT_MDN_RCVD: drawCheck1 = true; drawCheck2 = true; break;
}
int timeWidth = (int) Math.ceil(timePaint.measureText(timeString));
@@ -357,7 +321,7 @@ public class DialogCell extends BaseCell {
nameLeft += timeWidth;
}
if (drawNameGroup) {
if (drawGroupIcon) {
nameWidth -= AndroidUtilities.dp(4) + groupDrawable.getIntrinsicWidth();
}
@@ -393,13 +357,7 @@ public class DialogCell extends BaseCell {
}
}
if (dialogMuted && !drawVerified) {
int w = AndroidUtilities.dp(6) + muteDrawable.getIntrinsicWidth();
nameWidth -= w;
if (LocaleController.isRTL) {
nameLeft += w;
}
} else if (drawVerified) {
if (chatVerified) {
int w = AndroidUtilities.dp(6) + verifiedDrawable.getIntrinsicWidth();
nameWidth -= w;
if (LocaleController.isRTL) {
@@ -407,6 +365,7 @@ public class DialogCell extends BaseCell {
}
}
// build name
nameWidth = Math.max(AndroidUtilities.dp(12), nameWidth);
CharSequence nameStringFinal = TextUtils.ellipsize(nameString.replace('\n', ' '), currentNamePaint, nameWidth - AndroidUtilities.dp(12), TextUtils.TruncateAt.END);
try {
@@ -415,26 +374,57 @@ public class DialogCell extends BaseCell {
}
// build avatar
int messageWidth = getMeasuredWidth() - AndroidUtilities.dp(AndroidUtilities.leftBaseline + 16);
int avatarLeft;
if (!LocaleController.isRTL) {
messageLeft = AndroidUtilities.dp(AndroidUtilities.leftBaseline);
avatarLeft = AndroidUtilities.dp(AndroidUtilities.isTablet() ? 13 : 9);
avatarLeft = AndroidUtilities.dp(9);
} else {
messageLeft = AndroidUtilities.dp(16);
avatarLeft = getMeasuredWidth() - AndroidUtilities.dp(AndroidUtilities.isTablet() ? 65 : 61);
avatarLeft = getMeasuredWidth() - AndroidUtilities.dp(61);
}
avatarImage.setImageCoords(avatarLeft, avatarTop, AndroidUtilities.dp(52), AndroidUtilities.dp(52));
if( currentChatId==MrChat.MR_CHAT_ID_DEADDROP ) {
}
else {
avatarImage.setImageCoords(avatarLeft, avatarTop, avatarWH, avatarWH);
}
// build counter
if (drawError) {
int w = errorDrawable.getIntrinsicWidth() + AndroidUtilities.dp(8);
messageWidth -= w;
if (!LocaleController.isRTL) {
errorLeft = getMeasuredWidth() - errorDrawable.getIntrinsicWidth() - AndroidUtilities.dp(11);
errorLeft = getMeasuredWidth() - errorDrawable.getIntrinsicWidth() - AndroidUtilities.dp(16);
} else {
errorLeft = AndroidUtilities.dp(11);
errorLeft = AndroidUtilities.dp(16);
messageLeft += w;
}
} else if (countString != null) {
} else if(m_mrChat.getArchived()!=0 || currentChatId==MrChat.MR_CHAT_ID_ARCHIVED_LINK ) {
String str;
TextPaint strPaint;
if( currentChatId==MrChat.MR_CHAT_ID_ARCHIVED_LINK ) {
str = m_mrChat.getName();
strPaint = messagePaint;
}
else {
str = ApplicationLoader.applicationContext.getString(R.string.Archived);
strPaint = timePaint;
}
flagWidth = Math.max(AndroidUtilities.dp(12), (int)Math.ceil(strPaint.measureText(str)));
flagLayout = new StaticLayout(str, strPaint, flagWidth, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);
int w = flagWidth + AndroidUtilities.dp(15);
if (!LocaleController.isRTL) {
messageWidth -= w;
flagLeft = getMeasuredWidth() - flagWidth - AndroidUtilities.dp(15);
} else {
flagLeft = AndroidUtilities.dp(15);
}
drawFlag = true;
} else if (unreadCount != 0 && currentChatId!=MrChat.MR_CHAT_ID_DEADDROP) {
String countString = String.format("%d", unreadCount);
countWidth = Math.max(AndroidUtilities.dp(12), (int)Math.ceil(countPaint.measureText(countString)));
countLayout = new StaticLayout(countString, countPaint, countWidth, Layout.Alignment.ALIGN_CENTER, 1.0f, 0.0f, false);
int w = countWidth + AndroidUtilities.dp(18);
@@ -446,21 +436,17 @@ public class DialogCell extends BaseCell {
messageLeft += w;
}
drawCount = true;
} else {
drawCount = false;
}
if (checkMessage) {
if (messageString == null) {
messageString = "";
if (chatMuted) {
muteLeft = messageLeft;
int w = AndroidUtilities.dp(6) + muteDrawable.getIntrinsicWidth();
messageWidth -= w;
if (!LocaleController.isRTL) {
messageLeft += w;
}
String mess = messageString.toString();
if (mess.length() > 150) {
mess = mess.substring(0, 150);
}
mess = mess.replace('\n', ' ');
messageString = Emoji.replaceEmoji(mess, messagePaint.getFontMetricsInt(), AndroidUtilities.dp(17), false);
}
messageWidth = Math.max(AndroidUtilities.dp(12), messageWidth);
CharSequence messageStringFinal = TextUtils.ellipsize(messageString, currentMessagePaint, messageWidth - AndroidUtilities.dp(12), TextUtils.TruncateAt.END);
try {
@@ -475,10 +461,8 @@ public class DialogCell extends BaseCell {
if (nameLayout != null && nameLayout.getLineCount() > 0) {
left = nameLayout.getLineLeft(0);
widthpx = Math.ceil(nameLayout.getLineWidth(0));
if (dialogMuted && !drawVerified) {
nameMuteLeft = (int) (nameLeft + (nameWidth - widthpx) - AndroidUtilities.dp(6) - muteDrawable.getIntrinsicWidth());
} else if (drawVerified) {
nameMuteLeft = (int) (nameLeft + (nameWidth - widthpx) - AndroidUtilities.dp(6) - verifiedDrawable.getIntrinsicWidth());
if (chatVerified) {
nameVerifiedLeft = (int) (nameLeft + (nameWidth - widthpx) - AndroidUtilities.dp(6) - muteDrawable.getIntrinsicWidth());
}
if (left == 0) {
if (widthpx < nameWidth) {
@@ -504,8 +488,8 @@ public class DialogCell extends BaseCell {
nameLeft -= (nameWidth - widthpx);
}
}
if (dialogMuted || drawVerified) {
nameMuteLeft = (int) (nameLeft + left + AndroidUtilities.dp(6));
if (chatVerified) {
nameVerifiedLeft = (int) (nameLeft + left + AndroidUtilities.dp(6));
}
}
if (messageLayout != null && messageLayout.getLineCount() > 0) {
@@ -520,60 +504,24 @@ public class DialogCell extends BaseCell {
}
}
public void setDialogSelected(boolean value) {
if (isSelected != value) {
invalidate();
}
isSelected = value;
}
public void checkCurrentDialogIndex() {
if (index < MrMailbox.m_currChatlist.getCnt()) { // EDIT BY MR - was: index < getDialogsArray().size()
TLRPC.TL_dialog dialog = MrMailbox.m_currChatlist.get_TLRPC_TL_dialog(index); // EDIT BY MR - was: getDialogsArray().get(index);
final MessageObject newMessageObject = null;
if (currentDialogId != dialog.id ||
message != null && message.getId() != dialog.top_message ||
unreadCount != dialog.unread_count ||
message != newMessageObject ||
message == null && newMessageObject != null ) {
currentDialogId = dialog.id;
update(0);
}
}
}
public void update(int mask) {
if( m_showUnreadCount ) {
unreadCount = m_mrChat.getUnseenCount();
unreadCount = MrMailbox.getFreshMsgCount(m_mrChat.getId());
}
if (mask != 0) {
boolean continueUpdate = false;
if (!continueUpdate && (mask & MrMailbox.UPDATE_MASK_AVATAR) != 0) {
if (chat == null) {
continueUpdate = true;
}
continueUpdate = true;
}
if (!continueUpdate && (mask & MrMailbox.UPDATE_MASK_NAME) != 0) {
if (chat == null) {
continueUpdate = true;
}
continueUpdate = true;
}
if (!continueUpdate && (mask & MrMailbox.UPDATE_MASK_CHAT_AVATAR) != 0) {
if (user == null) {
continueUpdate = true;
}
continueUpdate = true;
}
if (!continueUpdate && (mask & MrMailbox.UPDATE_MASK_CHAT_NAME) != 0) {
if (user == null) {
continueUpdate = true;
}
}
if (!continueUpdate && (mask & MrMailbox.UPDATE_MASK_SEND_STATE) != 0) {
if (message != null && lastSendState != message.messageOwner.send_state) {
lastSendState = message.messageOwner.send_state;
continueUpdate = true;
}
continueUpdate = true;
}
if (!continueUpdate) {
@@ -581,25 +529,23 @@ public class DialogCell extends BaseCell {
}
}
dialogMuted = isDialogCell && MrMailbox.isDialogMuted(currentDialogId);
//user = null;
//chat = null;
/*int lower_id = (int)currentDialogId;
int high_id = (int)(currentDialogId >> 32);
if (lower_id != 0) {
if (high_id == 1) {
chat = MessagesController.getInstance().getChat(lower_id);
} else {
if (lower_id < 0) {
chat = MessagesController.getInstance().getChat(-lower_id);
} else {
user = MessagesController.getInstance().getUser(lower_id);
}
if( currentChatId == MrChat.MR_CHAT_ID_DEADDROP ) {
chatMuted = false; // never draw mute icon, the deaddrop is always muted
chatVerified = false;
}
else {
chatMuted = MrMailbox.isDialogMuted(currentChatId);
ContactsController.setupAvatar(this, avatarImage, new AvatarDrawable(), null, m_mrChat);
chatVerified = m_mrChat.isVerified();
// can be deleted if this gets out-of-labs
if( chatVerified && MrMailbox.getConfigInt("qr_enabled", 0)==0 ) {
chatVerified = false;
}
}*/
ContactsController.setupAvatar(this, avatarImage, avatarDrawable, null, m_mrChat);
// /can be deleted if this gets out-of-labs
}
if (getMeasuredWidth() != 0 || getMeasuredHeight() != 0) {
buildLayout();
@@ -612,21 +558,20 @@ public class DialogCell extends BaseCell {
@Override
protected void onDraw(Canvas canvas) {
if (currentDialogId == 0) {
if( currentChatId == MrChat.MR_CHAT_ID_ARCHIVED_LINK ) {
canvas.save();
canvas.translate(getMeasuredWidth()/2-flagWidth/2, getMeasuredHeight()/2-flagLayout.getHeight()/2);
flagLayout.draw(canvas);
canvas.restore();
return;
}
if (isSelected) {
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), backPaint);
if (currentChatId == 0) {
return;
}
/*
if (drawNameLock) {
setDrawableBounds(lockDrawable, nameLockLeft, nameLockTop);
lockDrawable.draw(canvas);
} else
*/
if (drawNameGroup) {
if (drawGroupIcon) {
setDrawableBounds(groupDrawable, nameLockLeft, nameLockTop);
groupDrawable.draw(canvas);
}
@@ -669,31 +614,43 @@ public class DialogCell extends BaseCell {
}
}
if (dialogMuted && !drawVerified) { // TODO: if we enable encrypted chats and show the verified logo, we may show both, muted and verivied
setDrawableBounds(muteDrawable, nameMuteLeft, AndroidUtilities.dp(16.5f));
muteDrawable.draw(canvas);
} else if (drawVerified) {
setDrawableBounds(verifiedDrawable, nameMuteLeft, AndroidUtilities.dp(16.5f));
if (chatVerified) {
setDrawableBounds(verifiedDrawable, nameVerifiedLeft, AndroidUtilities.dp(16.5f));
verifiedDrawable.draw(canvas);
}
if (chatMuted) {
setDrawableBounds(muteDrawable, muteLeft, AndroidUtilities.dp(44));
muteDrawable.draw(canvas);
}
if (drawError) {
setDrawableBounds(errorDrawable, errorLeft, errorTop);
errorDrawable.draw(canvas);
} else if(drawFlag) {
canvas.save();
canvas.translate(flagLeft, countTop + AndroidUtilities.dp(4));
flagLayout.draw(canvas);
canvas.restore();
} else if (drawCount) {
if (dialogMuted) {
setDrawableBounds(countDrawableGrey, countLeft - AndroidUtilities.dp(5.5f), countTop, countWidth + AndroidUtilities.dp(11), countDrawable.getIntrinsicHeight());
countDrawableGrey.draw(canvas);
} else {
setDrawableBounds(countDrawable, countLeft - AndroidUtilities.dp(5.5f), countTop, countWidth + AndroidUtilities.dp(11), countDrawable.getIntrinsicHeight());
countDrawable.draw(canvas);
}
setDrawableBounds(countDrawable, countLeft - AndroidUtilities.dp(5.5f), countTop, countWidth + AndroidUtilities.dp(11), countDrawable.getIntrinsicHeight());
countDrawable.draw(canvas);
canvas.save();
canvas.translate(countLeft, countTop + AndroidUtilities.dp(4));
countLayout.draw(canvas);
canvas.restore();
}
if( currentChatId==MrChat.MR_CHAT_ID_DEADDROP ) {
int shrink = AndroidUtilities.dp(12);
setDrawableBounds(closeDrawable, avatarLeft+shrink, avatarTop+shrink, avatarWH-shrink*2, avatarWH-shrink*2);
closeDrawable.draw(canvas);
}
else {
avatarImage.draw(canvas);
}
if (useSeparator) {
if (LocaleController.isRTL) {
canvas.drawLine(0, getMeasuredHeight() - 1, getMeasuredWidth() - AndroidUtilities.dp(AndroidUtilities.leftBaseline), getMeasuredHeight() - 1, linePaint);
@@ -701,8 +658,6 @@ public class DialogCell extends BaseCell {
canvas.drawLine(AndroidUtilities.dp(AndroidUtilities.leftBaseline), getMeasuredHeight() - 1, getMeasuredWidth(), getMeasuredHeight() - 1, linePaint);
}
}
avatarImage.draw(canvas);
}
@Override
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
*
@@ -25,7 +25,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Canvas;
@@ -39,8 +39,7 @@ import android.widget.FrameLayout;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
public class EditTextCell extends FrameLayout {
@@ -49,14 +48,20 @@ public class EditTextCell extends FrameLayout {
private static Paint paint;
private boolean needDivider;
private boolean useLabel;
private boolean multiLine;
public EditTextCell(Context context) {
this(context, true);
this(context, true, false);
}
public EditTextCell(Context context, boolean useLabel__) {
public EditTextCell(Context context, boolean useLabel) {
this(context, useLabel, false);
}
public EditTextCell(Context context, boolean useLabel__, boolean multiLine__) {
super(context);
useLabel = useLabel__;
multiLine = multiLine__;
if (paint == null) {
paint = new Paint();
@@ -75,41 +80,44 @@ public class EditTextCell extends FrameLayout {
addView(labelTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.TOP,
17, 8, 17, 0));
editView = new EditText(context);
editView.setTextColor(0xff212121); // ok
editView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); // ok, normal text is 16
editView.setLines(1);
editView.setMaxLines(1);
editView.setSingleLine(true);
editView.setTextColor(0xff212121);
editView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); // normal text is 16
int addImeFlag = 0, addInputType = 0;
if( multiLine__ ) {
editView.setLines(2);
editView.setMaxLines(2);
editView.setSingleLine(false);
editView.setVerticalScrollBarEnabled(true);
editView.setHorizontalScrollBarEnabled(false);
editView.setMinimumHeight(AndroidUtilities.dp(100));
addInputType = EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE|EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES;
}
else {
editView.setLines(1);
editView.setMaxLines(1);
editView.setSingleLine(true);
addInputType = InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
addImeFlag = EditorInfo.IME_ACTION_DONE; // just close the keyboard, NEXT would not work as the other entries nay not yet loaded
}
editView.setHintTextColor(0xffBBBBBB); // was: 0xff979797
editView.setGravity(Gravity.START);
editView.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
editView.setImeOptions(EditorInfo.IME_ACTION_DONE); // just close the keyboard, NEXT would not work as the other entries nay not yet loaded
AndroidUtilities.clearCursorDrawable(editView);
/*
e.setPadding(0, 0, 0, 0);
e.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
if (i == EditorInfo.IME_ACTION_DONE && doneButton != null) {
doneButton.performClick();
return true;
}
return false;
}
});
*/
editView.setInputType(editView.getInputType()|addInputType);
editView.setImeOptions(addImeFlag|EditorInfo.IME_FLAG_NO_EXTRACT_UI);
addView(editView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.TOP,
17, useLabel? 25 : 25-17, 17, 0));
17, useLabel? 25 : 25-17, 17, multiLine?17:0));
setBackgroundColor(0xffffffff);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(useLabel? 64 : 64-15) + (needDivider ? 1 : 0), MeasureSpec.EXACTLY));
int dpheight = multiLine? 49*2 : 49;
if( useLabel ) {
dpheight += 15;
}
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(dpheight)+(needDivider ? 1 : 0), MeasureSpec.EXACTLY));
}
public void setValueHintAndLabel(String value, String hint, String label, boolean divider) {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Typeface;
@@ -31,8 +31,7 @@ import android.widget.FrameLayout;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
public class GreySectionCell extends FrameLayout {
private TextView textView;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Typeface;
@@ -31,21 +31,28 @@ import android.widget.FrameLayout;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
public class HeaderCell extends FrameLayout {
private TextView textView;
static public TextView createTextView(Context context, String text)
{
TextView ret = new TextView(context);
ret.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
ret.setTypeface(Typeface.DEFAULT_BOLD);
ret.setTextColor(0xff5099c9);
ret.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
if( text != null ) {
ret.setText(text);
}
return ret;
}
public HeaderCell(Context context) {
super(context);
textView = new TextView(getContext());
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
textView.setTypeface(Typeface.DEFAULT_BOLD);
textView.setTextColor(0xff5099c9);
textView.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
textView = createTextView(getContext(), null);
addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.START | Gravity.TOP, 17, 15, 17, 0));
}
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Rect;
@@ -34,10 +34,10 @@ import android.widget.FrameLayout;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.MediaController;
import com.b44t.messenger.R;
import com.b44t.ui.Components.BackupImageView;
import com.b44t.ui.Components.CheckBoxView;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.ui.PhotoViewer;
import com.b44t.messenger.Components.BackupImageView;
import com.b44t.messenger.Components.CheckBoxView;
import com.b44t.messenger.Components.LayoutHelper;
import com.b44t.messenger.PhotoViewer;
public class PhotoAttachPhotoCell extends FrameLayout {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.text.TextUtils;
@@ -32,7 +32,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
public class PhotoEditToolCell extends FrameLayout {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.os.Build;
@@ -37,8 +37,8 @@ import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.MediaController;
import com.b44t.messenger.R;
import com.b44t.ui.Components.BackupImageView;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.BackupImageView;
import com.b44t.messenger.Components.LayoutHelper;
public class PhotoPickerAlbumsCell extends FrameLayout {
@@ -158,11 +158,7 @@ public class PhotoPickerAlbumsCell extends FrameLayout {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int itemWidth;
if (AndroidUtilities.isTablet()) {
itemWidth = (AndroidUtilities.dp(490) - ((albumsCount + 1) * AndroidUtilities.dp(4))) / albumsCount;
} else {
itemWidth = (AndroidUtilities.displaySize.x - ((albumsCount + 1) * AndroidUtilities.dp(4))) / albumsCount;
}
itemWidth = (AndroidUtilities.displaySize.x - ((albumsCount + 1) * AndroidUtilities.dp(4))) / albumsCount;
for (int a = 0; a < albumsCount; a++) {
LayoutParams layoutParams = (LayoutParams) albumViews[a].getLayoutParams();
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.animation.Animator;
import android.animation.AnimatorSet;
@@ -33,9 +33,9 @@ import android.widget.FrameLayout;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.AnimatorListenerAdapterProxy;
import com.b44t.messenger.R;
import com.b44t.ui.Components.BackupImageView;
import com.b44t.ui.Components.CheckBoxView;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.BackupImageView;
import com.b44t.messenger.Components.CheckBoxView;
import com.b44t.messenger.Components.LayoutHelper;
public class PhotoPickerPhotoCell extends FrameLayout {
@@ -1,7 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* (C) 2013-2016 Nikolai Kudashov
* Delta Chat Android
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
*
@@ -21,14 +20,12 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
@@ -42,14 +39,13 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.R;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.messenger.Components.LayoutHelper;
import com.b44t.messenger.ActionBar.Theme;
public class DrawerProfileCell extends FrameLayout {
public class SettingsProfileCell extends FrameLayout {
private TextView nameTextView;
private TextView subtitleTextView;
@@ -57,18 +53,18 @@ public class DrawerProfileCell extends FrameLayout {
private Rect destRect = new Rect();
private Paint paint = new Paint();
public DrawerProfileCell(Context context) {
public SettingsProfileCell(Context context) {
super(context);
setBackgroundColor(Theme.ACTION_BAR_COLOR);
ImageView shadowView = new ImageView(context);
shadowView.setScaleType(ImageView.ScaleType.FIT_XY);
shadowView.setImageResource(R.drawable.bottom_shadow);
addView(shadowView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 100/*EDIT BY MR, was 70*/, Gravity.START | Gravity.BOTTOM));
addView(shadowView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 85/*shadow height*/, Gravity.START | Gravity.BOTTOM));
nameTextView = new TextView(context);
nameTextView.setTextColor(0xffffffff);
nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 23);
nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 26);
nameTextView.setLines(1);
nameTextView.setMaxLines(1);
nameTextView.setSingleLine(true);
@@ -78,7 +74,7 @@ public class DrawerProfileCell extends FrameLayout {
subtitleTextView = new TextView(context);
subtitleTextView.setTextColor(0xffc2e5ff);
subtitleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13);
subtitleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, Theme.ACTION_BAR_SUBTITLE_TEXT_SIZE);
subtitleTextView.setLines(1);
subtitleTextView.setMaxLines(1);
subtitleTextView.setSingleLine(true);
@@ -89,7 +85,7 @@ public class DrawerProfileCell extends FrameLayout {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int mrHeight = 180;
int mrHeight = 100/*see also shadow height above*/;
if (Build.VERSION.SDK_INT >= 21) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(mrHeight) + AndroidUtilities.statusBarHeight, MeasureSpec.EXACTLY));
} else {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.view.View;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Paint;
@@ -36,9 +36,9 @@ import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.ImageReceiver;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.R;
import com.b44t.ui.Components.BackupImageView;
import com.b44t.ui.Components.CheckBoxView;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.BackupImageView;
import com.b44t.messenger.Components.CheckBoxView;
import com.b44t.messenger.Components.LayoutHelper;
public class SharedDocumentCell extends FrameLayout {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Canvas;
@@ -35,7 +35,7 @@ import android.widget.CheckBox;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
public class TextCheckCell extends FrameLayout {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Canvas;
@@ -32,8 +32,7 @@ import android.widget.FrameLayout;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
public class TextDetailSettingsCell extends FrameLayout {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
*
@@ -20,7 +20,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.util.TypedValue;
@@ -29,8 +29,7 @@ import android.widget.FrameLayout;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
public class TextInfoCell extends FrameLayout {
@@ -40,13 +39,18 @@ public class TextInfoCell extends FrameLayout {
private final int iconDp = 34;
static public TextView createTextView(Context context) {
TextView ret = new TextView(context);
ret.setTextColor(0xff808080);
ret.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
ret.setGravity(Gravity.START);
return ret;
}
public TextInfoCell(Context context) {
super(context);
textView = new TextView(context);
textView.setTextColor(0xff808080);
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
textView.setGravity(Gravity.START);
textView = createTextView(context);
addView(textView);
iconView = new TextView(context);
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.Canvas;
@@ -30,12 +30,10 @@ import android.text.TextUtils;
import android.util.TypedValue;
import android.view.Gravity;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.LayoutHelper;
import static com.b44t.messenger.AndroidUtilities.dp;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,9 +21,10 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.Gravity;
import android.widget.FrameLayout;
import android.widget.ImageView;
@@ -32,33 +33,29 @@ import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.ContactsController;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.MrContact;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.R;
import com.b44t.ui.Components.AvatarDrawable;
import com.b44t.ui.Components.BackupImageView;
import com.b44t.ui.Components.CheckBoxView;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.ui.ActionBar.SimpleTextView;
import com.b44t.messenger.Components.AvatarDrawable;
import com.b44t.messenger.Components.BackupImageView;
import com.b44t.messenger.Components.CheckBoxView;
import com.b44t.messenger.Components.LayoutHelper;
import com.b44t.messenger.ActionBar.SimpleTextView;
public class UserCell extends FrameLayout {
private BackupImageView avatarImageView;
private SimpleTextView nameTextView;
private SimpleTextView statusTextView;
private ImageView imageView;
private CheckBoxView checkBox;
private AvatarDrawable avatarDrawable;
private MrContact m_mrContact;
private CharSequence currentName;
private CharSequence currentStatus;
private int currentResId;
private int statusColor = 0xffa8a8a8;
public UserCell(Context context, int padding, int useCheckboxes) {
public UserCell(Context context, int useCheckboxes) {
super(context);
int padding = 1;
avatarDrawable = new AvatarDrawable();
avatarImageView = new BackupImageView(context);
@@ -67,20 +64,16 @@ public class UserCell extends FrameLayout {
nameTextView = new SimpleTextView(context);
nameTextView.setTextColor(0xff212121);
nameTextView.setTextSize(16); /*same size as in TextCell */
nameTextView.setTextSize(16);
nameTextView.setGravity(Gravity.START | Gravity.TOP);
addView(nameTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 20, Gravity.START | Gravity.TOP, LocaleController.isRTL ? 28 + (useCheckboxes == 2 ? 18 : 0) : (68 + padding), 11.5f, LocaleController.isRTL ? (68 + padding) : 28 + (useCheckboxes == 2 ? 18 : 0), 0));
statusTextView = new SimpleTextView(context);
statusTextView.setTextSize(14);
statusTextView.setTextColor(0xffa8a8a8);
statusTextView.setGravity(Gravity.START | Gravity.TOP);
addView(statusTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 20, Gravity.START | Gravity.TOP, LocaleController.isRTL ? 28 : (68 + padding), 34.5f, LocaleController.isRTL ? (68 + padding) : 28, 0));
imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.CENTER);
imageView.setVisibility(GONE);
addView(imageView, LayoutHelper.createFrame(LayoutParams.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, LocaleController.isRTL ? 0 : 16, 0, LocaleController.isRTL ? 16 : 0, 0));
if( useCheckboxes == 1 ) {
checkBox = new CheckBoxView(context, R.drawable.round_check2);
checkBox.setVisibility(INVISIBLE);
@@ -88,13 +81,8 @@ public class UserCell extends FrameLayout {
}
}
public void setData(MrContact mrContact, int resId) {
public void setData(MrContact mrContact) {
m_mrContact = mrContact;
if( m_mrContact != null ) {
currentName = m_mrContact.getDisplayName();
currentStatus = m_mrContact.getAddr();
}
currentResId = resId;
update();
}
@@ -112,27 +100,22 @@ public class UserCell extends FrameLayout {
super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(64), MeasureSpec.EXACTLY));
}
public void setStatusColors(int color) {
statusColor = color;
}
public void update() {
if (m_mrContact==null) {
return;
}
if (currentName != null) {
nameTextView.setText(currentName);
}
nameTextView.setText(m_mrContact.getDisplayName());
if (currentStatus != null) {
statusTextView.setTextColor(statusColor);
statusTextView.setText(currentStatus);
}
statusTextView.setText(m_mrContact.getAddr());
if (imageView.getVisibility() == VISIBLE && currentResId == 0 || imageView.getVisibility() == GONE && currentResId != 0) {
imageView.setVisibility(currentResId == 0 ? GONE : VISIBLE);
imageView.setImageResource(currentResId);
if( m_mrContact.isVerified() ) {
if( MrMailbox.getConfigInt("qr_enabled", 0) != 0 ) {
nameTextView.setRightDrawable(R.drawable.verified);
}
}
else {
nameTextView.setRightDrawable(0);
}
ContactsController.setupAvatar(avatarImageView, avatarImageView.imageReceiver, avatarDrawable, m_mrContact, null);
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Cells;
package com.b44t.messenger.Cells;
import android.content.Context;
import android.graphics.drawable.Drawable;
@@ -33,8 +33,8 @@ import android.widget.ImageView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.R;
import com.b44t.messenger.TLRPC;
import com.b44t.ui.Components.BackupImageView;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.messenger.Components.BackupImageView;
import com.b44t.messenger.Components.LayoutHelper;
public class WallpaperCell extends FrameLayout {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui;
package com.b44t.messenger;
import android.Manifest;
import android.animation.Animator;
@@ -43,10 +43,13 @@ import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.content.FileProvider;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.util.Log;
import android.util.SparseIntArray;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.MotionEvent;
@@ -59,46 +62,28 @@ import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.BuildConfig;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.MediaController;
import com.b44t.messenger.MrChat;
import com.b44t.messenger.MrContact;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.MrMsg;
import com.b44t.messenger.NotificationsController;
import com.b44t.messenger.SendMessagesHelper;
import com.b44t.messenger.Utilities;
import com.b44t.messenger.VideoEditedInfo;
import com.b44t.messenger.browser.Browser;
import com.b44t.messenger.support.widget.LinearLayoutManager;
import com.b44t.messenger.support.widget.RecyclerView;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.TLRPC;
import com.b44t.messenger.MessageObject;
import com.b44t.messenger.NotificationCenter;
import com.b44t.messenger.R;
import com.b44t.ui.ActionBar.BackDrawable;
import com.b44t.ui.ActionBar.SimpleTextView;
import com.b44t.messenger.AnimatorListenerAdapterProxy;
import com.b44t.ui.Cells.ChatActionCell;
import com.b44t.ui.ActionBar.ActionBar;
import com.b44t.ui.ActionBar.ActionBarMenu;
import com.b44t.ui.ActionBar.ActionBarMenuItem;
import com.b44t.ui.Cells.ChatMessageCell;
import com.b44t.ui.Cells.ChatUnreadCell;
import com.b44t.ui.ActionBar.BaseFragment;
import com.b44t.ui.Components.ChatActivityEnterView;
import com.b44t.messenger.ImageReceiver;
import com.b44t.ui.Components.ChatAttachAlert;
import com.b44t.ui.Components.ChatAvatarContainer;
import com.b44t.ui.Components.LayoutHelper;
import com.b44t.ui.Components.NumberTextView;
import com.b44t.ui.Components.RecyclerListView;
import com.b44t.ui.Components.SizeNotifierFrameLayout;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.messenger.Components.Browser;
import com.b44t.messenger.aosp.LinearLayoutManager;
import com.b44t.messenger.aosp.RecyclerView;
import com.b44t.messenger.ActionBar.BackDrawable;
import com.b44t.messenger.ActionBar.SimpleTextView;
import com.b44t.messenger.Cells.ChatActionCell;
import com.b44t.messenger.ActionBar.ActionBar;
import com.b44t.messenger.ActionBar.ActionBarMenu;
import com.b44t.messenger.ActionBar.ActionBarMenuItem;
import com.b44t.messenger.Cells.ChatMessageCell;
import com.b44t.messenger.Cells.ChatUnreadCell;
import com.b44t.messenger.ActionBar.BaseFragment;
import com.b44t.messenger.Components.ChatActivityEnterView;
import com.b44t.messenger.Components.ChatAttachAlert;
import com.b44t.messenger.Components.ChatAvatarContainer;
import com.b44t.messenger.Components.LayoutHelper;
import com.b44t.messenger.Components.NumberTextView;
import com.b44t.messenger.Components.RecyclerListView;
import com.b44t.messenger.Components.SizeNotifierFrameLayout;
import com.b44t.messenger.ActionBar.Theme;
import java.io.Console;
import java.io.File;
import java.net.URLDecoder;
import java.util.ArrayList;
@@ -106,12 +91,13 @@ import java.util.Collections;
import java.util.HashMap;
@SuppressWarnings("unchecked")
public class ChatActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, DialogsActivity.DialogsActivityDelegate,
public class ChatActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, ChatlistActivity.ChatlistActivityDelegate,
PhotoViewer.PhotoViewerProvider {
// data
private long dialog_id;
public MrChat m_mrChat = new MrChat(0);
private boolean m_isChatWithDeaddrop /*, m_isDeaddropInChatlist*/;
private int[] m_msglist = {};
// the list view
@@ -151,7 +137,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
private boolean paused = true;
private boolean wasPaused = false;
private boolean readWhenResume = false;
private SparseIntArray markseenWhenResume = new SparseIntArray();
private boolean scrollToTopOnResume;
private boolean forceScrollToTop;
@@ -178,8 +164,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
private final static int ID_COPY = 10;
private final static int ID_FORWARD = 11;
private final static int ID_DELETE_MESSAGES = 12;
private final static int ID_LEAVE_GROUP = 13;
private final static int ID_ATTACH = 14;
private final static int ID_SHOW_PROFILE = 15;
private final static int ID_DELETE_CHAT = 16;
private final static int ID_ARCHIVE_CHAT = 17;
private final static int ID_MUTE = 18;
private final static int ID_REPLY = 19;
private final static int ID_INFO = 20;
@@ -187,6 +176,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
private final static int ID_SHARE = 22;
private final static int ID_OPEN = 23;
private final static int ID_SEARCH = 40;
private final static int ID_SHOW_QR = 50;
private final static int ID_CHAT_COMPOSE_PANEL = 1000;
private TextView m_replyMenuItem, m_infoMenuItem, m_saveToXXMenuItem, m_openMenuItem, m_shareMenuItem;
@@ -202,11 +192,16 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
dialog_id = arguments.getInt("chat_id", 0);
m_mrChat = MrMailbox.getChat((int)dialog_id);
m_isChatWithDeaddrop = m_mrChat.getId()==MrChat.MR_CHAT_ID_DEADDROP;
/*m_isDeaddropInChatlist = false;
if( m_isChatWithDeaddrop && MrMailbox.getConfigInt("show_deaddrop", 0)!=0 ) {
m_isDeaddropInChatlist = true;
}*/
startLoadFromMessageId = arguments.getInt("message_id", 0);
scrollToTopOnResume = arguments.getBoolean("scrollToTopOnResume", false);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.emojiDidLoaded);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.dialogsNeedReload);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateInterfaces);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.didReceivedNewMessages);
@@ -224,10 +219,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
NotificationCenter.getInstance().addObserver(this, NotificationCenter.waveformCalculated);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.notificationsSettingsUpdated);
if (AndroidUtilities.isTablet()) {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.openedChatChanged, dialog_id, false);
}
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
@@ -257,7 +248,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
});
if (m_mrChat.getId() == MrChat.MR_CHAT_ID_DEADDROP) {
if (m_isChatWithDeaddrop) {
updateBottomOverlay();
}
@@ -317,7 +308,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
MrMailbox.markseenChat((int)dialog_id);
MrMailbox.marknoticedChat((int)dialog_id);
NotificationsController.getInstance().removeSeenMessages();
}
}, 700);
@@ -336,7 +327,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
chatActivityEnterView.onDestroy();
}
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.emojiDidLoaded);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.dialogsNeedReload);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.updateInterfaces);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.didReceivedNewMessages);
@@ -354,15 +344,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.notificationsSettingsUpdated);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioPlayStateChanged);
if (AndroidUtilities.isTablet()) {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.openedChatChanged, dialog_id, true);
}
/*
if (currentUser != null) {
MessagesController.getInstance().cancelLoadFullUser(currentUser.id);
}
*/
AndroidUtilities.removeAdjustResize(getParentActivity(), classGuid);
if (chatAttachAlert != null) {
@@ -435,9 +416,49 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
args.putBoolean("onlySelect", true);
args.putString("onlySelectTitle", context.getString(R.string.ForwardToTitle));
args.putString("selectAlertString", context.getString(R.string.ForwardMessagesTo));
DialogsActivity fragment = new DialogsActivity(args);
ChatlistActivity fragment = new ChatlistActivity(args);
fragment.setDelegate(ChatActivity.this);
presentFragment(fragment); // this results in a call to didSelectDialog()
presentFragment(fragment); // this results in a call to didSelectChat()
}
else if( id == ID_SHOW_PROFILE )
{
Bundle args = new Bundle();
if( m_mrChat.isGroup() ) {
args.putInt("chat_id", m_mrChat.getId());
}
else {
int[] contact_ids = MrMailbox.getChatContacts(m_mrChat.getId());
if( contact_ids.length==0) {
return; // should not happen
}
args.putInt("user_id", contact_ids[0]);
}
ProfileActivity fragment = new ProfileActivity(args);
presentFragment(fragment);
}
else if( id == ID_LEAVE_GROUP )
{
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
MrMailbox.removeContactFromChat(m_mrChat.getId(), MrContact.MR_CONTACT_ID_SELF);
NotificationCenter.getInstance().postNotificationName(NotificationCenter.updateInterfaces, MrMailbox.UPDATE_MASK_CHAT_MEMBERS);
AndroidUtilities.showDoneHint(context);
}
});
builder.setNegativeButton(R.string.Cancel, null);
builder.setMessage(AndroidUtilities.replaceTags(context.getString(R.string.AskLeaveGroup)));
showDialog(builder.create());
}
else if ( id == ID_ARCHIVE_CHAT)
{
int do_archive = m_mrChat.getArchived()==0? 1: 0;
MrMailbox.archiveChat((int)dialog_id, do_archive);
AndroidUtilities.showDoneHint(context);
if( do_archive == 1 ) {
finishFragment();
}
}
else if ( id == ID_DELETE_CHAT)
{
@@ -449,24 +470,20 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setMessage(context.getString(R.string.AreYouSureDeleteThisChat));
builder.setPositiveButton(context.getString(R.string.OK), new DialogInterface.OnClickListener() {
builder.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if( MrMailbox.deleteChat((int)dialog_id)!=0 ) {
AndroidUtilities.showDoneHint(getParentActivity());
finishFragment();
}
else {
AndroidUtilities.showErrorHint(getParentActivity()); // normally, there is no reason for deleteChat to fail() as everything is just local
}
MrMailbox.deleteChat((int)dialog_id);
AndroidUtilities.showDoneHint(getParentActivity());
finishFragment();
}
});
builder.setNegativeButton(context.getString(R.string.Cancel), null);
builder.setNegativeButton(R.string.Cancel, null);
showDialog(builder.create());
} else if (id == ID_MUTE) {
toggleMute();
} else if (id == ID_REPLY) {
if( m_mrChat.getId()==MrChat.MR_CHAT_ID_DEADDROP ){
if( m_isChatWithDeaddrop ){
if( selectedMessagesIds!=null && selectedMessagesIds.size()==1) {
ArrayList<Integer> ids = new ArrayList<>(selectedMessagesIds.keySet());
createChatByDeaddropMsgId(ids.get(0));
@@ -479,13 +496,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
} else if (id == ID_INFO) {
String info_str = MrMailbox.getMsgInfo(getFirstSelectedId());
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setMessage(info_str);
builder.setPositiveButton(context.getString(R.string.OK), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
;
}
});
builder.setMessage(AndroidUtilities.replaceTags(info_str));
builder.setPositiveButton(R.string.OK, null);
showDialog(builder.create());
actionBar.hideActionMode();
updateVisibleRowsFast();
@@ -524,18 +536,32 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
} else if (id == ID_SEARCH) {
openSearchWithText("");
}
else if( id == ID_SHOW_QR ) {
Intent intent2 = new Intent(getParentActivity(), QRshowActivity.class);
Bundle b = new Bundle();
b.putInt("chat_id", (int)dialog_id);
intent2.putExtras(b);
getParentActivity().startActivity(intent2);
}
}
});
avatarContainer = new ChatAvatarContainer(context, this);
actionBar.addView(avatarContainer, 0, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.START, 56, 0, 40, 0));
if( m_isChatWithDeaddrop /*&& !m_isDeaddropInChatlist*/ ) {
actionBar.setTitle(context.getString(R.string.Deaddrop));
}
else {
avatarContainer = new ChatAvatarContainer(context, this);
actionBar.addView(avatarContainer, 0, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.START, ActionBar.AVATAR_AFTER_BACK_X, 0, 40, 0));
}
ActionBarMenu menu = actionBar.createMenu();
searchItem = menu.addItem(0, R.drawable.ic_ab_search).setIsSearchField(true, false).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() {
@Override
public void onSearchCollapse() {
avatarContainer.setVisibility(View.VISIBLE);
if( avatarContainer != null ) {
avatarContainer.setVisibility(View.VISIBLE);
}
headerItem.setVisibility(View.VISIBLE);
searchItem.setVisibility(View.GONE);
highlightMessageId = 0;
@@ -579,27 +605,37 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
headerItem = menu.addItem(0, R.drawable.ic_ab_other);
if (searchItem != null) {
headerItem.addSubItem(ID_SEARCH, context.getString(R.string.Search), 0);
}
headerItem.addSubItem(ID_SEARCH, context.getString(R.string.Search));
boolean isChatWithDeaddrop = m_mrChat.getId()==MrChat.MR_CHAT_ID_DEADDROP;
m_canMute = true;
if( isChatWithDeaddrop && MrMailbox.getConfigInt("show_deaddrop", 0)==0 ) {
if( m_isChatWithDeaddrop /*&& !m_isDeaddropInChatlist*/ ) {
m_canMute = false;
}
if( m_canMute ) {
muteMenuEntry = headerItem.addSubItem(ID_MUTE, null, 0);
muteMenuEntry = headerItem.addSubItem(ID_MUTE, null);
}
if( !isChatWithDeaddrop ) {
headerItem.addSubItem(ID_ATTACH, context.getString(R.string.AttachFiles), 0); // "Attach" means "Attach to chat", not "Attach to message" (which is not possible)
headerItem.addSubItem(ID_DELETE_CHAT, context.getString(R.string.DeleteChat), 0);
//if( !m_isChatWithDeaddrop ) {
//headerItem.addSubItem(ID_ATTACH, context.getString(R.string.AttachFiles), 0); // "Attach" means "Attach to chat", not "Attach to message" (which is not possible)
//}
if( !m_isChatWithDeaddrop ) {
headerItem.addSubItem(ID_SHOW_PROFILE, context.getString(R.string.ViewProfile));
if( m_mrChat.isGroup() ) {
if ( m_mrChat.isVerified() ) {
headerItem.addSubItem(ID_SHOW_QR, context.getString(R.string.QrShowInviteCode));
}
headerItem.addSubItem(ID_LEAVE_GROUP, context.getString(R.string.LeaveGroup));
}
headerItem.addSubItem(ID_ARCHIVE_CHAT, context.getString(m_mrChat.getArchived()==0? R.string.ArchiveChat : R.string.UnarchiveChat));
headerItem.addSubItem(ID_DELETE_CHAT, context.getString(R.string.DeleteChat));
}
updateTitle();
avatarContainer.updateSubtitle();
if( avatarContainer!=null ) {
avatarContainer.updateSubtitle();
}
updateTitleIcons();
menuItem = menu.addItem(ID_ATTACH, R.drawable.ic_ab_attach).setAllowCloseAnimation(false); // "menuItem" is added to ChatEnterViewActivity
@@ -629,11 +665,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
setMeasuredDimension(width, height);
actionModeTextView.setTextSize(!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 18 : 20);
actionModeTextView.setTextSize(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 18 : 20);
actionModeTextView.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(24), MeasureSpec.AT_MOST));
if (actionModeSubTextView.getVisibility() != GONE) {
actionModeSubTextView.setTextSize(!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 14 : 16);
actionModeSubTextView.setTextSize(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 14 : 16);
actionModeSubTextView.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(20), MeasureSpec.AT_MOST));
}
}
@@ -644,14 +680,14 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
int textTop;
if (actionModeSubTextView.getVisibility() != GONE) {
textTop = (height / 2 - actionModeTextView.getTextHeight()) / 2 + AndroidUtilities.dp(!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 2 : 3);
textTop = (height / 2 - actionModeTextView.getTextHeight()) / 2 + AndroidUtilities.dp(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 2 : 3);
} else {
textTop = (height - actionModeTextView.getTextHeight()) / 2;
}
actionModeTextView.layout(0, textTop, actionModeTextView.getMeasuredWidth(), textTop + actionModeTextView.getTextHeight());
if (actionModeSubTextView.getVisibility() != GONE) {
textTop = height / 2 + (height / 2 - actionModeSubTextView.getTextHeight()) / 2 - AndroidUtilities.dp(!AndroidUtilities.isTablet() && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 1 : 1);
textTop = height / 2 + (height / 2 - actionModeSubTextView.getTextHeight()) / 2 - AndroidUtilities.dp(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 1 : 1);
actionModeSubTextView.layout(0, textTop, actionModeSubTextView.getMeasuredWidth(), textTop + actionModeSubTextView.getTextHeight());
}
}
@@ -678,14 +714,14 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
actionModeViews.add(actionMode.addItem(ID_DELETE_MESSAGES, R.drawable.ic_ab_fwd_delete, Theme.ACTION_BAR_MODE_SELECTOR_COLOR, null, AndroidUtilities.dp(54)));
actionModeViews.add(actionMode.addItem(ID_FORWARD, R.drawable.ic_ab_fwd_forward, Theme.ACTION_BAR_MODE_SELECTOR_COLOR, null, AndroidUtilities.dp(54)));
ActionBarMenuItem submenu = actionMode.addItem(0, R.drawable.ic_ab_other_grey);
if( isChatWithDeaddrop ) {
m_replyMenuItem = submenu.addSubItem(ID_REPLY, context.getString(R.string.Reply), 0);
if( m_isChatWithDeaddrop ) {
m_replyMenuItem = submenu.addSubItem(ID_REPLY, context.getString(R.string.Reply));
}
submenu.addSubItem(ID_COPY, context.getString(R.string.CopyToClipboard), 0);
m_saveToXXMenuItem = submenu.addSubItem(ID_SAVE_TO_XX, "", 0);
m_openMenuItem = submenu.addSubItem(ID_OPEN, context.getString(R.string.Open), 0);
m_shareMenuItem = submenu.addSubItem(ID_SHARE, context.getString(R.string.Share), 0);
m_infoMenuItem = submenu.addSubItem(ID_INFO, context.getString(R.string.Info), 0);
submenu.addSubItem(ID_COPY, context.getString(R.string.CopyToClipboard));
m_saveToXXMenuItem = submenu.addSubItem(ID_SAVE_TO_XX, "");
m_openMenuItem = submenu.addSubItem(ID_OPEN, context.getString(R.string.Open));
m_shareMenuItem = submenu.addSubItem(ID_SHARE, context.getString(R.string.Share));
m_infoMenuItem = submenu.addSubItem(ID_INFO, context.getString(R.string.Info));
actionModeViews.add(submenu);
checkActionBarMenu();
@@ -822,11 +858,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
TextView emptyView = new TextView(context);
if( m_mrChat.getParamInt(MrChat.MR_CHAT_PARAM_UNPROMOTED, 0)==1 ) {
if( m_mrChat.isUnpromoted() ) {
emptyView.setText(context.getString(R.string.MsgNewGroupDraftHint));
emptyView.setGravity(Gravity.START);
}
else if( m_mrChat.getType()==MrChat.MR_CHAT_NORMAL ){
else if( !m_mrChat.isGroup() && !m_mrChat.isSelfTalk() ){
String name = m_mrChat.getName();
emptyView.setText(AndroidUtilities.replaceTags(String.format(context.getString(R.string.NoMessagesHint), name, name)));
emptyView.setGravity(Gravity.START);
@@ -1039,8 +1075,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
//noinspection ResourceType
chatActivityEnterView.setId(ID_CHAT_COMPOSE_PANEL);
chatActivityEnterView.setAllowStickersAndGifs(false, false); // for the moment, we have no stickers
contentView.addView(chatActivityEnterView, contentView.getChildCount() - 1, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.BOTTOM));
chatActivityEnterView.setDelegate(new ChatActivityEnterView.ChatActivityEnterViewDelegate() {
@Override
@@ -1061,10 +1095,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
@Override
public void onWindowSizeChanged(int size) {
}
@Override
public void onStickersTab(boolean opened) {
}
});
bottomOverlay = new FrameLayout(context);
@@ -1106,8 +1136,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
updateBottomOverlay();
fixLayoutInternal();
return fragmentView;
}
@@ -1184,6 +1212,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
private void processSelectedAttach(int which) {
if (which == ChatAttachAlert.ATTACH_BUTTON_IDX_CAMERA ) {
if (Build.VERSION.SDK_INT >= 23 && getParentActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
getParentActivity().requestPermissions(new String[]{Manifest.permission.CAMERA}, LaunchActivity.REQ_CAMERA_PERMISSION_ID);
return;
}
try {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File image = AndroidUtilities.generatePicturePath();
@@ -1251,6 +1283,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
presentFragment(fragment);
} else if (which == ChatAttachAlert.ATTACH_BUTTON_IDX_VIDEO) {
try {
if (Build.VERSION.SDK_INT >= 23 && getParentActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
getParentActivity().requestPermissions(new String[]{Manifest.permission.CAMERA}, LaunchActivity.REQ_CAMERA_PERMISSION_ID);
return;
}
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
File video = AndroidUtilities.generateVideoPath();
if (video != null) {
@@ -1433,7 +1469,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
private void createChatByDeaddropMsgId(int messageId)
private void createChatByDeaddropMsgId(final int messageId)
{
final Context context = getParentActivity();
if (context == null) {
@@ -1452,10 +1488,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setPositiveButton(context.getString(R.string.OK), new DialogInterface.OnClickListener() {
builder.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
int chatId = MrMailbox.createChatByContactId(fromId);
int chatId = MrMailbox.createChatByMsgId(messageId);
if( chatId != 0 ) {
Bundle args = new Bundle();
args.putInt("chat_id", chatId);
@@ -1466,7 +1502,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
});
builder.setNegativeButton(context.getString(R.string.Cancel), null);
builder.setNegativeButton(R.string.Cancel, null);
builder.setMessage(AndroidUtilities.replaceTags(String.format(context.getString(R.string.AskStartChatWith), name)));
showDialog(builder.create());
}
@@ -1604,6 +1640,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if (view instanceof ChatMessageCell) {
message = ((ChatMessageCell) view).getMessageObject();
}
else if( view instanceof ChatActionCell) {
message = ((ChatActionCell) view).getMessageObject();
}
if (message==null || !message.isSelectable()) {
return;
@@ -1630,18 +1669,21 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
private void updateTitleIcons() {
if (avatarContainer == null) {
return;
}
int rightIcon = 0;
int leftIcon = 0, rightIcon = 0;
if( m_canMute && MrMailbox.isDialogMuted(dialog_id) ) {
rightIcon = R.drawable.mute_fixed;
leftIcon = R.drawable.mute_blue;
}
if( m_mrChat!=null && m_mrChat.isVerified() ) {
rightIcon = R.drawable.verified;
}
if (avatarContainer != null) {
avatarContainer.setTitleIcons(leftIcon, rightIcon);
}
avatarContainer.setTitleIcons(0, rightIcon);
if( muteMenuEntry != null ) {
if (rightIcon != 0) {
if (leftIcon != 0) {
muteMenuEntry.setText(ApplicationLoader.applicationContext.getString(R.string.UnmuteNotifications));
} else {
muteMenuEntry.setText(ApplicationLoader.applicationContext.getString(R.string.MuteNotifications));
@@ -1876,21 +1918,17 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if (markAsRead) {
if (paused) {
readWhenResume = true;
markseenWhenResume.put(evt_msg_id, 1);
} else {
MrMailbox.markseenMsg(evt_msg_id);
int msg_ids[] = new int[1];
msg_ids[0] = evt_msg_id;
MrMailbox.markseenMsgs(msg_ids);
NotificationsController.getInstance().removeSeenMessages();
}
}
}
}
}
else if (id == NotificationCenter.emojiDidLoaded)
{
if (chatListView != null) {
chatListView.invalidateViews();
}
}
else if (id == NotificationCenter.updateInterfaces)
{
int updateMask = (Integer) args[0];
@@ -2154,7 +2192,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
chatActivityEnterView.setFieldFocused(false);
chatActivityEnterView.setVisibility(View.INVISIBLE);
} else {
if (m_mrChat.getId()==MrChat.MR_CHAT_ID_DEADDROP) {
if (m_isChatWithDeaddrop) {
if( m_msglist.length==0 ) {
// showing the DeaddropHint if there are no messages is confusing (there are no "reply arrows" in this case)
bottomOverlayChatText.setText(ApplicationLoader.applicationContext.getString(R.string.NoMessages));
@@ -2214,9 +2252,15 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
scrollToMessage = null;
}
paused = false;
if (readWhenResume ) {
readWhenResume = false;
MrMailbox.markseenChat((int)dialog_id);
int markseenWhenResumeCnt = markseenWhenResume.size();
if (markseenWhenResumeCnt>0 ) {
int msg_ids[] = new int[markseenWhenResumeCnt];
for(int i=0; i<markseenWhenResumeCnt; i++) {
msg_ids[i] = markseenWhenResume.keyAt(i);
}
MrMailbox.markseenMsgs(msg_ids);
markseenWhenResume.clear();
NotificationsController.getInstance().removeSeenMessages();
}
@@ -2298,24 +2342,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
private boolean fixLayoutInternal() {
/*if (!AndroidUtilities.isTablet() && ApplicationLoader.applicationContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
selectedMessagesCountTextView.setTextSize(18);
} else {
selectedMessagesCountTextView.setTextSize(20);
}*/
if (AndroidUtilities.isTablet()) {
if (AndroidUtilities.isSmallTablet() && ApplicationLoader.applicationContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
actionBar.setBackButtonDrawable(new BackDrawable(false));
} else {
actionBar.setBackButtonDrawable(new BackDrawable(parentLayout == null || parentLayout.fragmentsStack.isEmpty() || parentLayout.fragmentsStack.get(0) == ChatActivity.this || parentLayout.fragmentsStack.size() == 1));
}
return false;
}
return true;
}
private void fixLayout() {
if (avatarContainer != null) {
avatarContainer.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@@ -2324,7 +2350,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if (avatarContainer != null) {
avatarContainer.getViewTreeObserver().removeOnPreDrawListener(this);
}
return fixLayoutInternal();
return true;
}
});
}
@@ -2338,7 +2364,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
private void createDeleteMessagesAlert() {
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setMessage(ApplicationLoader.applicationContext.getResources().getQuantityString(R.plurals.AreYouSureDeleteMessages, selectedMessagesIds.size(), selectedMessagesIds.size()));
builder.setPositiveButton(ApplicationLoader.applicationContext.getString(R.string.OK), new DialogInterface.OnClickListener() {
builder.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
@@ -2355,11 +2381,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
actionBar.hideActionMode();
updateVisibleRows();
MrMailbox.reloadMainChatlist();
NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
}
});
builder.setNegativeButton(ApplicationLoader.applicationContext.getString(R.string.Cancel), null);
builder.setNegativeButton(R.string.Cancel, null);
showDialog(builder.create());
}
@@ -2421,7 +2446,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
@Override
public void didSelectDialog(DialogsActivity dialogsFragment, long fwd_chat_id, boolean param)
public void didSelectChat(ChatlistActivity dialogsFragment, long fwd_chat_id, boolean param)
{
if( selectedMessagesIds.size()>0) {
int ids[] = new int[selectedMessagesIds.size()], i = 0;
@@ -2441,9 +2466,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
args.putInt("chat_id", (int)fwd_chat_id);
ChatActivity fragment = new ChatActivity(args);
if( presentFragment(fragment, true /*remove last*/) ) {
if (!AndroidUtilities.isTablet()) {
removeSelfFromStack();
}
removeSelfFromStack();
}
else {
dialogsFragment.finishFragment(false);
@@ -2504,13 +2527,27 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
messageCell.setHighlightedText(null);
}
}
else if( view_ instanceof ChatActionCell ) {
ChatActionCell actionCell = (ChatActionCell)view_;
if (actionBar.isActionModeShowed()) {
if ( selectedMessagesIds.containsKey(actionCell.getMessageObject().getId()) ) {
actionCell.setBackgroundColor(Theme.MSG_SELECTED_BACKGROUND_COLOR);
} else {
actionCell.setBackgroundColor(0);
}
} else {
actionCell.setBackgroundColor(0);
}
}
}
chatListView.invalidate();
}
private void openSearchWithText(String text) {
avatarContainer.setVisibility(View.GONE);
if( avatarContainer!= null ) {
avatarContainer.setVisibility(View.GONE);
}
headerItem.setVisibility(View.GONE);
searchItem.setVisibility(View.VISIBLE);
updateBottomOverlay();
@@ -2663,11 +2700,15 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
Bundle args = new Bundle();
args.putInt("user_id", user.id);
ProfileActivity fragment = new ProfileActivity(args);
fragment.setPlayProfileAnimation(false);
presentFragment(fragment);
}
}
@Override
public void didPressedSetupMessage(ChatMessageCell cell) {
querySetupCode(cell.getMessageObject().getId(), null);
}
@Override
public boolean canPerformActions() {
return actionBar != null && !actionBar.isActionModeShowed();
@@ -2730,13 +2771,13 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if( isMailto )
{
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setPositiveButton(mContext.getString(R.string.OK), new DialogInterface.OnClickListener() {
builder.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
createChat(urlFinal);
createChat(urlFinal);
}
});
builder.setNegativeButton(mContext.getString(R.string.Cancel), null);
builder.setNegativeButton(R.string.Cancel, null);
builder.setMessage(AndroidUtilities.replaceTags(String.format(mContext.getString(R.string.AskStartChatWith), urlTitle)));
showDialog(builder.create());
}
@@ -2761,13 +2802,21 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
public void didPressedImage(ChatMessageCell cell) {
MessageObject message = cell.getMessageObject();
if( message.type == MessageObject.MO_TYPE3_VIDEO && MrMailbox.getMsg(message.getId()).isIncreation()!=0 ) {
if( message.type == MessageObject.MO_TYPE3_VIDEO && MrMailbox.getMsg(message.getId()).isIncreation() ) {
return; // we're not ready (still compressing), a hint is already shown in the message itself
}
if( /*(Build.VERSION.SDK_INT >= 16 && message.isVideo()) ||*/ message.type == MessageObject.MO_TYPE1_PHOTO || message.isGif()) {
PhotoViewer.getInstance().setParentActivity(getParentActivity());
PhotoViewer.getInstance().openPhoto(message, message.type != MessageObject.MO_TYPE0_TEXT ? dialog_id : 0, ChatActivity.this);
//PhotoViewer.getInstance().openPhoto(message, message.type != MessageObject.MO_TYPE0_TEXT ? dialog_id : 0,
// ChatActivity.this, getPhotosInChat());
//ArrayList<Object> photos = getPhotosInChat();
int index = getIndexOfCellPhoto(cell);
//PhotoViewer.getInstance().openPhoto(null, 0, ChatActivity.this, photos, index);
ArrayList<MessageObject> photoMessages = getPhotoMessages();
PhotoViewer.getInstance().openPhotoList(message, message.type != MessageObject.MO_TYPE0_TEXT ? dialog_id : 0,
ChatActivity.this, photoMessages, index);
} else if (message.type == MessageObject.MO_TYPE9_FILE || message.type == MessageObject.MO_TYPE3_VIDEO ) {
AndroidUtilities.openForViewOrShare(getParentActivity(), message.getId(), Intent.ACTION_VIEW);
}
@@ -2787,7 +2836,45 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
return new Holder(view);
}
@Override
private ArrayList<MessageObject> getPhotoMessages() {
ArrayList<MessageObject> photos = new ArrayList<>();
for(int msg_index = 0; msg_index < m_msglist.length; msg_index ++) {
MrMsg mrMsg = MrMailbox.getMsg(m_msglist[msg_index]);
switch (mrMsg.getType()) {
case MrMsg.MR_MSG_IMAGE:
case MrMsg.MR_MSG_GIF:
{
TLRPC.Message msg = mrMsg.get_TLRPC_Message();
// generateLayout replaces emojis in text and other text rendering actions.
MessageObject photoMsg = new MessageObject(msg, false);
photos.add(photoMsg);
}
}
}
return photos;
}
private int getIndexOfCellPhoto(ChatMessageCell callingCell) {
int photoCount = 0;
for(int msg_index = 0; msg_index < m_msglist.length; msg_index ++) {
MrMsg msg = MrMailbox.getMsg(m_msglist[msg_index]);
switch (msg.getType()) {
case MrMsg.MR_MSG_IMAGE:
case MrMsg.MR_MSG_GIF:
{
if(callingCell.getMessageObject().getId() == msg.getId())
return photoCount; // count up until now.
photoCount ++;
}
}
}
return 0; // didn't find the matching photo.
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int i) {
if (i >= 0 && i < m_msglist.length) {
View view = holder.itemView;
@@ -2816,8 +2903,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
MessageObject msgDrawObj = new MessageObject(msg, true);
ChatMessageCell messageCell = (ChatMessageCell) view;
messageCell.isGroupChat = m_mrChat.getType()==MrChat.MR_CHAT_GROUP;
messageCell.setMessageObject(msgDrawObj);
messageCell.isGroupChat = m_mrChat.isGroup();
messageCell.setMessageObject(msgDrawObj, m_isChatWithDeaddrop);
messageCell.setCheckPressed(!disableSelection, disableSelection && selected);
messageCell.setHighlighted(highlightMessageId != 0 && msgDrawObj.getId() == highlightMessageId);
@@ -2826,11 +2913,24 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
} else {
messageCell.setHighlightedText(null);
}
// mark message as being read
int state = mrMsg.getState();
if( state == MrMsg.MR_IN_FRESH || state==MrMsg.MR_IN_NOTICED ) {
if(paused) {
markseenWhenResume.put(msg_id, 1);
}
else {
int msg_ids[] = new int[1];
msg_ids[0] = msg_id;
MrMailbox.markseenMsgs(msg_ids);
}
}
}
else if( view instanceof ChatActionCell )
{
// show a date headline (the date comes from the _next_ message)
if( msg_id == MrMsg.MR_MSG_ID_DAYMARKER && i+1 < m_msglist.length ) {
// show a date headline (the date comes from the _next_ message)
MrMsg mrMsg = MrMailbox.getMsg(m_msglist[i+1]);
TLRPC.Message dateMsg = new TLRPC.Message();
@@ -2841,6 +2941,28 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
msgDrawObj.type = MessageObject.MO_TYPE10_DATE_HEADLINE;
msgDrawObj.contentType = ROWTYPE_DATE_HEADLINE;
ChatActionCell actionCell = (ChatActionCell) view;
actionCell.setMessageObject(msgDrawObj);
}
else {
MrMsg mrMsg = MrMailbox.getMsg(msg_id);
MessageObject msgDrawObj = new MessageObject(mrMsg.get_TLRPC_Message(), false);
// Add the suffix " (by ...)" to the action, see strings.xml for details.
int fromId = mrMsg.getFromId();
if( fromId != MrContact.MR_CONTACT_ID_DEVICE ) {
String actionStr = msgDrawObj.messageText.toString();
if(actionStr.endsWith(".")) { actionStr = actionStr.substring(0, actionStr.length() - 1); }
if( fromId == MrContact.MR_CONTACT_ID_SELF ) {
msgDrawObj.messageText = String.format(ApplicationLoader.applicationContext.getString(R.string.ActionBySelf), actionStr);
}
else {
String fromStr = MrMailbox.getContact(mrMsg.getFromId()).getFirstName();
msgDrawObj.messageText = String.format(ApplicationLoader.applicationContext.getString(R.string.ActionByUser), actionStr, fromStr);
}
}
ChatActionCell actionCell = (ChatActionCell) view;
actionCell.setMessageObject(msgDrawObj);
}
@@ -2862,6 +2984,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
else if( m_msglist[i]==MrMsg.MR_MSG_ID_MARKER1 ) {
return ROWTYPE_UNREAD_HEADLINE;
}
if( MrMailbox.getMsg(m_msglist[i]).isInfo() ) {
return ROWTYPE_DATE_HEADLINE;
}
}
return ROWTYPE_MESSAGE_CELL;
}
@@ -2893,4 +3020,85 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
}
}
}
void querySetupCode(final int msg_id, String[] preload)
{
if( !MrMailbox.getMsg(msg_id).isSetupMessage()) {
return;
}
View gl = View.inflate(getParentActivity(), R.layout.setup_code_grid, null);
final EditText[] editTexts = {
(EditText) gl.findViewById(R.id.setupCode0), (EditText) gl.findViewById(R.id.setupCode1), (EditText) gl.findViewById(R.id.setupCode2),
(EditText) gl.findViewById(R.id.setupCode3), (EditText) gl.findViewById(R.id.setupCode4), (EditText) gl.findViewById(R.id.setupCode5),
(EditText) gl.findViewById(R.id.setupCode6), (EditText) gl.findViewById(R.id.setupCode7), (EditText) gl.findViewById(R.id.setupCode8)
};
AlertDialog.Builder builder1 = new AlertDialog.Builder(getParentActivity());
builder1.setView(gl);
editTexts[0].setText(MrMailbox.getMsg(msg_id).getSetupCodeBegin());
editTexts[0].setSelection(editTexts[0].getText().length());
for( int i = 0; i < 9; i++ ) {
if( preload != null && i < preload.length ) {
editTexts[i].setText(preload[i]);
editTexts[i].setSelection(editTexts[i].getText().length());
}
editTexts[i].addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if( s.length()==4 ) {
for ( int i = 0; i < 8; i++ ) {
if( editTexts[i].hasFocus() && editTexts[i+1].getText().length()<4 ) {
editTexts[i+1].requestFocus();
break;
}
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
builder1.setTitle(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransfer));
builder1.setMessage(AndroidUtilities.replaceTags(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransferPleaseEnterCode)));
builder1.setNegativeButton(R.string.Cancel, null);
builder1.setCancelable(false); // prevent the dialog from being dismissed accidentally (when the dialog is closed, the setup code is gone forever and the user has to create a new setup message)
builder1.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String setup_code = "";
final String[] preload = new String[9];
for ( int i = 0; i < 9; i++ ) {
preload[i] = editTexts[i].getText().toString();
setup_code += preload[i];
}
boolean success = MrMailbox.continueKeyTransfer(msg_id, setup_code);
AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity());
builder2.setTitle(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransfer));
builder2.setMessage(AndroidUtilities.replaceTags(ApplicationLoader.applicationContext.getString(success? R.string.AutocryptKeyTransferSucceeded : R.string.AutocryptKeyTransferBadCode)));
if( success ) {
builder2.setPositiveButton(R.string.OK, null);
}
else {
builder2.setNegativeButton(R.string.Cancel, null);
builder2.setPositiveButton(R.string.Retry, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
querySetupCode(msg_id, preload);
}
});
}
showDialog(builder2.create());
}
});
showDialog(builder1.create());
}
}
File diff suppressed because it is too large Load Diff
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
@@ -29,38 +29,77 @@ import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
import com.b44t.messenger.AndroidUtilities;
public class LetterDrawable extends Drawable {
public class AvatarDrawable extends Drawable {
public static Paint paint = new Paint();
private static Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private static TextPaint namePaint;
private static int[] arrColors = {0xffe56555, 0xfff28c48, 0xff8e85ee, 0xff76c84d, 0xff5bb6cc, 0xff549cdd, 0xffd25c99, 0xffb37800}; /* the colors should contrast to typical action bar colors as well as to white (more important, is used as text color)*/
private int color;
private StaticLayout textLayout;
private float textWidth;
private float textHeight;
private float textLeft;
private StringBuilder stringBuilder = new StringBuilder(5);
public LetterDrawable() {
public AvatarDrawable() {
super();
if (namePaint == null) {
paint.setColor(0xfff0f0f0);
namePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
namePaint.setColor(0xffffffff);
namePaint.setTextSize(AndroidUtilities.dp(28));
namePaint.setTextSize(AndroidUtilities.dp(20));
}
}
public void setTitle(String title) {
private static int getColorIndex(int id) {
return Math.abs(id % arrColors.length);
}
public static int getNameColor(String name) {
int id = strChecksum(name);
return arrColors[getColorIndex(id)];
}
private static int strChecksum(String str) {
int ret = 0;
if( str!=null ) {
int i;
for (i = 0; i < str.length(); i++) {
ret += (i+1)*str.charAt(i);
ret %= 0x00FFFFFF;
}
}
return ret;
}
public void setInfoByName(String name) {
int id = strChecksum(name);
color = arrColors[getColorIndex(id)];
stringBuilder.setLength(0);
if (title != null && title.length() > 0) {
stringBuilder.append(title.substring(0, 1));
if (name != null && name.length() > 0) {
stringBuilder.appendCodePoint(name.codePointAt(0));
for (int a = name.length() - 1; a >= 0; a--) {
if (name.charAt(a) == ' ') {
if (a != name.length() - 1 && name.charAt(a + 1) != ' ') {
if (Build.VERSION.SDK_INT >= 16) {
stringBuilder.append("\u200C"); // ZERO WIDTH NON-JOINER - avoids the two letter to melt into a ligature which would be incorrect on the initials
}
stringBuilder.appendCodePoint(name.codePointAt(a + 1));
break;
}
}
}
}
if (stringBuilder.length() > 0) {
@@ -87,23 +126,25 @@ public class LetterDrawable extends Drawable {
return;
}
int size = bounds.width();
paint.setColor(color);
canvas.save();
canvas.drawRect(bounds.left, bounds.top, bounds.right, bounds.bottom, paint);
canvas.translate(bounds.left, bounds.top);
canvas.drawCircle(size / 2, size / 2, size / 2, paint);
if (textLayout != null) {
canvas.translate(bounds.left + (size - textWidth) / 2 - textLeft, bounds.top + (size - textHeight) / 2);
canvas.translate((size - textWidth) / 2 - textLeft, (size - textHeight) / 2);
textLayout.draw(canvas);
}
canvas.restore();
}
@Override
public void setAlpha(int alpha) {
public void setAlpha(int alpha) { // must be present in non-abstract classes derived from Drawable
}
@Override
public void setColorFilter(ColorFilter cf) {
public void setColorFilter(ColorFilter cf) { // must be present in non-abstract classes derived from Drawable
}
@Override
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.Manifest;
import android.app.Activity;
@@ -40,11 +40,11 @@ import com.b44t.messenger.MediaController;
import com.b44t.messenger.TLRPC;
import com.b44t.messenger.FileLoader;
import com.b44t.messenger.UserConfig;
import com.b44t.ui.LaunchActivity;
import com.b44t.ui.PhotoAlbumPickerActivity;
import com.b44t.ui.PhotoCropActivity;
import com.b44t.ui.ActionBar.BaseFragment;
import com.b44t.ui.PhotoViewer;
import com.b44t.messenger.LaunchActivity;
import com.b44t.messenger.PhotoAlbumPickerActivity;
import com.b44t.messenger.PhotoCropActivity;
import com.b44t.messenger.ActionBar.BaseFragment;
import com.b44t.messenger.PhotoViewer;
import java.io.File;
import java.util.ArrayList;
@@ -75,6 +75,12 @@ public class AvatarUpdater implements PhotoCropActivity.PhotoEditActivityDelegat
}
public void openCamera() {
if (Build.VERSION.SDK_INT >= 23 && parentFragment != null && parentFragment.getParentActivity() != null) {
if (parentFragment.getParentActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
parentFragment.getParentActivity().requestPermissions(new String[]{Manifest.permission.CAMERA}, LaunchActivity.REQ_CAMERA_PERMISSION_ID);
return;
}
}
try {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File image = AndroidUtilities.generatePicturePath();
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Bitmap;
@@ -32,6 +32,8 @@ import android.util.AttributeSet;
import android.view.View;
import com.b44t.messenger.ImageReceiver;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.R;
import com.b44t.messenger.TLObject;
import com.b44t.messenger.TLRPC;
@@ -142,11 +144,19 @@ public class BackupImageView extends View {
@Override
protected void onDraw(Canvas canvas) {
int x, y, w, h;
if (width != -1 && height != -1) {
imageReceiver.setImageCoords((getWidth() - width) / 2, (getHeight() - height) / 2, width, height);
x = (getWidth() - width) / 2;
y = (getHeight() - height) / 2;
w = width;
h = height;
} else {
imageReceiver.setImageCoords(0, 0, getWidth(), getHeight());
x = 0;
y = 0;
w = getWidth();
h = getHeight();
}
imageReceiver.setImageCoords(x, y, w, h);
imageReceiver.draw(canvas);
}
}
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Adapters;
package com.b44t.messenger.Components;
import android.database.DataSetObserver;
import android.view.View;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,14 +21,14 @@
******************************************************************************/
package com.b44t.messenger.browser;
package com.b44t.messenger.Components;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import com.b44t.ui.LaunchActivity;
import com.b44t.messenger.LaunchActivity;
public class Browser {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.Manifest;
import android.animation.Animator;
@@ -40,7 +40,6 @@ import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.os.Build;
import android.os.PowerManager;
import android.os.SystemClock;
import android.text.Editable;
import android.text.SpannableStringBuilder;
import android.text.TextWatcher;
@@ -61,7 +60,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.Emoji;
import com.b44t.messenger.EmojiInputView;
import com.b44t.messenger.MediaController;
import com.b44t.messenger.MessageObject;
import com.b44t.messenger.MrContact;
@@ -72,11 +71,10 @@ import com.b44t.messenger.R;
import com.b44t.messenger.TLRPC;
import com.b44t.messenger.AnimatorListenerAdapterProxy;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.ui.ChatActivity;
import com.b44t.messenger.ActionBar.Theme;
import com.b44t.messenger.ChatActivity;
import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;
public class ChatActivityEnterView extends FrameLayout implements NotificationCenter.NotificationCenterDelegate, SizeNotifierFrameLayout.SizeNotifierFrameLayoutDelegate /*, StickersAlert.StickersAlertDelegate*/ {
@@ -86,7 +84,6 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
void needSendTyping();
void onTextChanged(CharSequence text, boolean bigChange);
void onWindowSizeChanged(int size);
void onStickersTab(boolean opened);
}
private class SeekBarWaveformView extends View {
@@ -149,26 +146,26 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
private class EditTextCaption extends EditText {
private Object editor;
private Field editorField;
private Drawable[] mCursorDrawable;
private Field mCursorDrawableField;
//private Object editor;
//private Field editorField;
//private Drawable[] mCursorDrawable;
//private Field mCursorDrawableField;
public EditTextCaption(Context context) {
super(context);
try {
Field field = TextView.class.getDeclaredField("mEditor");
field.setAccessible(true);
editor = field.get(this);
Class editorClass = Class.forName("android.widget.Editor");
editorField = editorClass.getDeclaredField("mShowCursor");
editorField.setAccessible(true);
mCursorDrawableField = editorClass.getDeclaredField("mCursorDrawable");
mCursorDrawableField.setAccessible(true);
mCursorDrawable = (Drawable[]) mCursorDrawableField.get(editor);
} catch (Throwable e) {
}
//try {
//Field field = TextView.class.getDeclaredField("mEditor");
//field.setAccessible(true);
//editor = field.get(this);
//Class editorClass = Class.forName("android.widget.Editor");
//editorField = editorClass.getDeclaredField("mShowCursor");
//editorField.setAccessible(true);
//mCursorDrawableField = editorClass.getDeclaredField("mCursorDrawable");
//mCursorDrawableField.setAccessible(true);
//mCursorDrawable = (Drawable[]) mCursorDrawableField.get(editor);
//} catch (Throwable e) {
//}
}
@SuppressLint("DrawAllocation")
@@ -189,10 +186,10 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
} catch (Exception e) {
}
try {
//try {
// the following lines are because otherwise the cursor stops blinking if
// the focus was set to another text field in between (eg. search)
if (editorField != null && mCursorDrawable != null && mCursorDrawable[0] != null) {
/*if (editorField != null && mCursorDrawable != null && mCursorDrawable[0] != null) {
long mShowCursor = editorField.getLong(editor);
boolean showCursor = (SystemClock.uptimeMillis() - mShowCursor) % (2 * 500) < 500;
if (showCursor) {
@@ -201,9 +198,9 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
mCursorDrawable[0].draw(canvas);
canvas.restore();
}
}
} catch (Throwable e) {
}
}*/
//} catch (Throwable e) {
//}
}
@Override
@@ -225,7 +222,7 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
private EditTextCaption messageEditText;
private ImageView sendButton;
private ImageView emojiButton;
private EmojiView emojiView;
private EmojiInputView emojiView;
private TextView recordTimeText;
private ImageView audioRecordButton;
private FrameLayout recordPanel;
@@ -424,7 +421,6 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
NotificationCenter.getInstance().addObserver(this, NotificationCenter.recordProgressChanged);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.closeChats);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.audioDidSent);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.emojiDidLoaded);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.audioRouteChanged);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.audioDidReset);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.audioProgressDidChanged);
@@ -570,18 +566,11 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
for (int i = 0; i < spans.length; i++) {
editable.removeSpan(spans[i]);
}
Emoji.replaceEmoji(editable, messageEditText.getPaint().getFontMetricsInt(), AndroidUtilities.dp(20), false);
EmojiInputView.replaceEmoji(editable, false);
processChange = false;
}
}
});
try {
Field mCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
mCursorDrawableRes.setAccessible(true);
mCursorDrawableRes.set(messageEditText, R.drawable.field_carret);
} catch (Exception e) {
//nothing to do
}
if (isChat) {
attachButton = new LinearLayout(context);
@@ -601,7 +590,7 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
ImageView imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.CENTER);
imageView.setImageResource(R.drawable.delete_reply);
imageView.setImageResource(R.drawable.dismiss_recording);
recordedAudioPanel.addView(imageView, LayoutHelper.createFrame(48, 48));
imageView.setOnClickListener(new OnClickListener() {
@Override
@@ -806,24 +795,6 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
return false;
}
public void setAllowStickersAndGifs(boolean value, boolean value2) {
if ((allowStickers != value || allowGifs != value2) && emojiView != null) {
if (emojiView.getVisibility() == VISIBLE) {
hidePopup(false);
}
sizeNotifierLayout.removeView(emojiView);
emojiView = null;
}
allowStickers = value;
allowGifs = value2;
}
public void setOpenGifsTabFirst() {
createEmojiView();
emojiView.loadGifRecent();
emojiView.switchToGifRecent();
}
public boolean isTopViewVisible() {
return false;
}
@@ -845,13 +816,9 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.recordProgressChanged);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioDidSent);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.emojiDidLoaded);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioRouteChanged);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioDidReset);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioProgressDidChanged);
if (emojiView != null) {
emojiView.onDestroy();
}
if (mWakeLock != null) {
try {
mWakeLock.release();
@@ -1338,9 +1305,9 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
if (emojiView != null) {
return;
}
emojiView = new EmojiView(allowStickers, allowGifs, parentActivity);
emojiView = new EmojiInputView(parentActivity);
emojiView.setVisibility(GONE);
emojiView.setListener(new EmojiView.Listener() {
emojiView.setListener(new EmojiInputView.Listener() {
public boolean onBackspace() {
if (messageEditText.length() == 0) {
return false;
@@ -1356,7 +1323,7 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
}
try {
innerTextChange = 2;
CharSequence localCharSequence = Emoji.replaceEmoji(symbol, messageEditText.getPaint().getFontMetricsInt(), AndroidUtilities.dp(20), false);
CharSequence localCharSequence = EmojiInputView.replaceEmoji(symbol, false);
messageEditText.setText(messageEditText.getText().insert(i, localCharSequence));
int j = i + localCharSequence.length();
messageEditText.setSelection(j, j);
@@ -1367,47 +1334,6 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
}
}
/*public void onStickerSelected(TLRPC.Document sticker) {
ChatActivityEnterView.this.onStickerSelected(sticker);
}*/
@Override
public void onStickersSettingsClick() {
if (parentFragment != null) {
//parentFragment.presentFragment(new StickersActivity()); -- EDIT BY MR
}
}
@Override
public void onGifSelected(TLRPC.Document gif) {
SendMessagesHelper.getInstance().sendSticker(gif, dialog_id);
if ((int) dialog_id == 0) {
//MessagesController.getInstance().saveGif(gif);
}
if (delegate != null) {
delegate.onMessageSend(null);
}
}
@Override
public void onGifTab(boolean opened) {
if (!AndroidUtilities.usingHardwareInput) {
if (opened) {
if (messageEditText.length() == 0) {
messageEditText.setText("@gif ");
messageEditText.setSelection(messageEditText.length());
}
} else if (messageEditText.getText().toString().equals("@gif ")) {
messageEditText.setText("");
}
}
}
@Override
public void onStickersTab(boolean opened) {
delegate.onStickersTab(opened);
}
@Override
public void onClearEmojiRecent() {
if (parentFragment == null || parentActivity == null) {
@@ -1415,13 +1341,13 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
}
AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity);
builder.setMessage(ApplicationLoader.applicationContext.getString(R.string.ClearRecentEmoji));
builder.setPositiveButton(ApplicationLoader.applicationContext.getString(R.string.ClearButton).toUpperCase(), new DialogInterface.OnClickListener() {
builder.setPositiveButton(R.string.ClearButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
emojiView.clearRecentEmoji();
emojiView.clearRecent();
}
});
builder.setNegativeButton(ApplicationLoader.applicationContext.getString(R.string.Cancel), null);
builder.setNegativeButton(R.string.Cancel, null);
parentFragment.showDialog(builder.create());
}
});
@@ -1429,14 +1355,6 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
sizeNotifierLayout.addView(emojiView);
}
/*@Override
public void onStickerSelected(TLRPC.Document sticker) {
SendMessagesHelper.getInstance().sendSticker(sticker, dialog_id);
if (delegate != null) {
delegate.onMessageSend(null);
}
}*/
private void showPopup(int show, int contentType /*0=emojiView, 1=botKeyboardView*/ ) {
if (show == 1) {
if (contentType == 0 && emojiView == null) {
@@ -1538,17 +1456,6 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
return emojiView != null && emojiView.getVisibility() == VISIBLE;
}
public boolean isKeyboardVisible() {
return keyboardVisible;
}
public void addRecentGif(MediaController.SearchImage searchImage) {
if (emojiView == null) {
return;
}
emojiView.addRecentGif(searchImage);
}
@Override
public void onSizeChanged(int height, boolean isWidthGreater) {
if (height > AndroidUtilities.dp(50) && keyboardVisible) {
@@ -1619,11 +1526,7 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
@Override
public void didReceivedNotification(int id, Object... args) {
if (id == NotificationCenter.emojiDidLoaded) {
if (emojiView != null) {
emojiView.invalidateViews();
}
} else if (id == NotificationCenter.recordProgressChanged) {
if (id == NotificationCenter.recordProgressChanged) {
long t = (Long) args[0];
Long time = t / 1000;
int ms = (int) (t % 1000L) / 10;
@@ -1665,8 +1568,7 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
TLRPC.TL_message message = new TLRPC.TL_message();
message.out = true;
message.id = 0;
message.to_id = new TLRPC.TL_peerUser();
message.to_id.user_id = message.from_id = MrContact.MR_CONTACT_ID_SELF;
message.from_id = MrContact.MR_CONTACT_ID_SELF;
message.date = (int) (System.currentTimeMillis() / 1000);
message.message = "-1";
message.attachPath = audioToSendPath;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.Manifest;
import android.animation.Animator;
@@ -49,19 +49,18 @@ import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.MediaController;
import com.b44t.messenger.MessageObject;
import com.b44t.messenger.NotificationCenter;
import com.b44t.messenger.support.widget.LinearLayoutManager;
import com.b44t.messenger.aosp.LinearLayoutManager;
import com.b44t.messenger.R;
import com.b44t.messenger.support.widget.RecyclerView;
import com.b44t.messenger.aosp.RecyclerView;
import com.b44t.messenger.TLRPC;
import com.b44t.ui.ActionBar.BottomSheet;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.ui.Cells.PhotoAttachPhotoCell;
import com.b44t.ui.ChatActivity;
import com.b44t.ui.PhotoViewer;
import com.b44t.messenger.ActionBar.BottomSheet;
import com.b44t.messenger.ActionBar.Theme;
import com.b44t.messenger.Cells.PhotoAttachPhotoCell;
import com.b44t.messenger.ChatActivity;
import com.b44t.messenger.PhotoViewer;
import java.util.ArrayList;
import java.util.HashMap;
@@ -757,7 +756,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
}
private void setUseRevealAnimation(boolean value) {
if (!value || value && Build.VERSION.SDK_INT >= 18 && !AndroidUtilities.isTablet()) {
if (!value || value && Build.VERSION.SDK_INT >= 18) {
useRevealAnimation = value;
}
}
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,10 +21,9 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Typeface;
import android.os.Build;
import android.os.Bundle;
import android.view.Gravity;
@@ -35,12 +34,11 @@ import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.ContactsController;
import com.b44t.messenger.MrChat;
import com.b44t.messenger.MrMailbox;
import com.b44t.messenger.TLRPC;
import com.b44t.ui.ActionBar.ActionBar;
import com.b44t.ui.ActionBar.SimpleTextView;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.ui.ChatActivity;
import com.b44t.ui.ProfileActivity;
import com.b44t.messenger.ActionBar.ActionBar;
import com.b44t.messenger.ActionBar.SimpleTextView;
import com.b44t.messenger.ActionBar.Theme;
import com.b44t.messenger.ChatActivity;
import com.b44t.messenger.ProfileActivity;
public class ChatAvatarContainer extends FrameLayout {
@@ -62,7 +60,6 @@ public class ChatAvatarContainer extends FrameLayout {
titleTextView.setTextColor(Theme.ACTION_BAR_TITLE_COLOR);
titleTextView.setTextSize(18);
titleTextView.setGravity(Gravity.START);
titleTextView.setLeftDrawableTopPadding(-AndroidUtilities.dp(1.3f));
titleTextView.setRightDrawableTopPadding(-AndroidUtilities.dp(1.3f));
addView(titleTextView);
@@ -76,7 +73,7 @@ public class ChatAvatarContainer extends FrameLayout {
@Override
public void onClick(View v) {
Bundle args = new Bundle();
if( parentFragment.m_mrChat.getType()== MrChat.MR_CHAT_GROUP ) {
if( parentFragment.m_mrChat.isGroup() ) {
args.putInt("chat_id", parentFragment.m_mrChat.getId());
}
else {
@@ -88,7 +85,6 @@ public class ChatAvatarContainer extends FrameLayout {
}
ProfileActivity fragment = new ProfileActivity(args);
fragment.setPlayProfileAnimation(true);
parentFragment.presentFragment(fragment);
}
});
@@ -114,7 +110,7 @@ public class ChatAvatarContainer extends FrameLayout {
}
public void setTitleIcons(int leftIcon, int rightIcon) {
titleTextView.setLeftDrawable(leftIcon);
subtitleTextView.setLeftDrawable(leftIcon);
titleTextView.setRightDrawable(rightIcon);
}
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.animation.ObjectAnimator;
import android.content.Context;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Bitmap;
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Canvas;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -20,7 +20,7 @@
*
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.util.TypedValue;
@@ -32,7 +32,6 @@ import android.widget.ProgressBar;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.R;
public class EmptyTextProgressView extends FrameLayout {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,28 +21,27 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Application;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import java.util.concurrent.CopyOnWriteArrayList;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.KeepAliveService;
import static com.b44t.messenger.ApplicationLoader.applicationContext;
@SuppressLint("NewApi")
public class ForegroundDetector implements Application.ActivityLifecycleCallbacks {
public interface Listener {
void onBecameForeground();
void onBecameBackground();
}
private int refs;
private int refs = 0;
private boolean wasInBackground = true;
private long enterBackgroundTime = 0;
private CopyOnWriteArrayList<Listener> listeners = new CopyOnWriteArrayList<>();
private static ForegroundDetector Instance = null;
public static ForegroundDetector getInstance() {
@@ -62,29 +61,22 @@ public class ForegroundDetector implements Application.ActivityLifecycleCallback
return refs == 0;
}
public void addListener(Listener listener) {
listeners.add(listener);
}
public void removeListener(Listener listener) {
listeners.remove(listener);
}
@Override
public void onActivityStarted(Activity activity) {
if (++refs == 1) {
Log.i("DeltaChat", "-------------------- Activity started --------------------");
refs++;
if (refs == 1) {
if (System.currentTimeMillis() - enterBackgroundTime < 200) {
wasInBackground = false;
}
//Log.i("DeltaChat", "switch to foreground");
for (Listener listener : listeners) {
try {
listener.onBecameForeground();
} catch (Exception e) {
}
}
}
applicationContext.stopService(new Intent(applicationContext, KeepAliveService.class));
//ApplicationLoader.imapForeground = true;
ApplicationLoader.startThreads(); // we call this without checking getPermanentPush() to have a simple guarantee that push is always active when the app is in foregroud (startIdleThread makes sure the thread is not started twice)
}
public boolean isWasInBackground(boolean reset) {
@@ -100,17 +92,27 @@ public class ForegroundDetector implements Application.ActivityLifecycleCallback
@Override
public void onActivityStopped(Activity activity) {
if (--refs == 0) {
Log.i("DeltaChat", "-------------------- Activity stopped --------------------");
if( refs <= 0 ) {
Log.i("DeltaChat", String.format("Bad activity count: activityCount=%d", refs));
return;
}
refs--;
if (refs == 0) {
enterBackgroundTime = System.currentTimeMillis();
wasInBackground = true;
//Log.i("DeltaChat", "switch to background");
for (Listener listener : listeners) {
try {
listener.onBecameBackground();
} catch (Exception e) {
}
}
ApplicationLoader.afterForgroundWakeLock.acquire(60*1000);
/*if( !ApplicationLoader.getPermanentPush() ) {
ApplicationLoader.scheduleStopImapThread();;
}*/
}
else {
Log.i("DeltaChat", String.format("Not yet switched to background, %d activities left", refs));
}
}
@@ -124,6 +126,7 @@ public class ForegroundDetector implements Application.ActivityLifecycleCallback
@Override
public void onActivityPaused(Activity activity) {
// pause/resume will also be called when the app is partially covered by a dialog
}
@Override
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.graphics.Path;
import android.text.StaticLayout;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.animation.Animator;
import android.animation.ObjectAnimator;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Canvas;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.animation.Animator;
import android.animation.AnimatorSet;
@@ -61,13 +61,12 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.NotificationCenter;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.R;
import com.b44t.messenger.UserConfig;
import com.b44t.messenger.AnimatorListenerAdapterProxy;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.messenger.ActionBar.Theme;
import java.util.ArrayList;
import java.util.Locale;
@@ -159,7 +158,6 @@ public class PasscodeView extends FrameLayout {
passwordEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);
passwordEditText.setTypeface(Typeface.DEFAULT);
passwordEditText.setBackgroundDrawable(null);
AndroidUtilities.clearCursorDrawable(passwordEditText);
passwordFrameLayout.addView(passwordEditText);
layoutParams = (FrameLayout.LayoutParams) passwordEditText.getLayoutParams();
layoutParams.height = LayoutHelper.WRAP_CONTENT;
@@ -531,7 +529,7 @@ public class PasscodeView extends FrameLayout {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setView(relativeLayout);
builder.setNegativeButton(ApplicationLoader.applicationContext.getString(R.string.Cancel), null);
builder.setNegativeButton(R.string.Cancel, null);
builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
@@ -666,7 +664,7 @@ public class PasscodeView extends FrameLayout {
LayoutParams layoutParams;
if (!AndroidUtilities.isTablet() && getContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
if (getContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
layoutParams = (LayoutParams) passwordFrameLayout.getLayoutParams();
layoutParams.width = UserConfig.passcodeType == 0 ? width / 2 : width;
layoutParams.height = AndroidUtilities.dp(140);
@@ -682,16 +680,6 @@ public class PasscodeView extends FrameLayout {
} else {
int top = 0;
int left = 0;
if (AndroidUtilities.isTablet()) {
if (width > AndroidUtilities.dp(498)) {
left = (width - AndroidUtilities.dp(498)) / 2;
width = AndroidUtilities.dp(498);
}
if (height > AndroidUtilities.dp(528)) {
top = (height - AndroidUtilities.dp(528)) / 2;
height = AndroidUtilities.dp(528);
}
}
layoutParams = (LayoutParams) passwordFrameLayout.getLayoutParams();
layoutParams.height = height / 3;
layoutParams.width = width;
@@ -759,7 +747,7 @@ public class PasscodeView extends FrameLayout {
getWindowVisibleDisplayFrame(rect);
keyboardHeight = usableViewHeight - (rect.bottom - rect.top);
if (UserConfig.passcodeType == 1 && (AndroidUtilities.isTablet() || getContext().getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE)) {
if (UserConfig.passcodeType == 1 && getContext().getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
int t = 0;
if (passwordFrameLayout.getTag() != null) {
t = (Integer) passwordFrameLayout.getTag();
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Bitmap;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Canvas;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Canvas;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.annotation.SuppressLint;
import android.content.Context;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.animation.Animator;
import android.animation.AnimatorSet;
@@ -49,15 +49,14 @@ import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.support.widget.LinearLayoutManager;
import com.b44t.messenger.support.widget.RecyclerView;
import com.b44t.messenger.aosp.LinearLayoutManager;
import com.b44t.messenger.aosp.RecyclerView;
import com.b44t.messenger.DispatchQueue;
import com.b44t.messenger.R;
import com.b44t.messenger.Utilities;
import com.b44t.messenger.AnimatorListenerAdapterProxy;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.ui.Cells.PhotoEditToolCell;
import com.b44t.messenger.ActionBar.Theme;
import com.b44t.messenger.Cells.PhotoEditToolCell;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
@@ -2292,7 +2291,7 @@ public class PhotoFilterView extends FrameLayout {
}
}
});
editView.addView(valueSeekBar, LayoutHelper.createFrame(AndroidUtilities.isTablet() ? 498 : LayoutHelper.MATCH_PARENT, 60, AndroidUtilities.isTablet() ? Gravity.CENTER_HORIZONTAL | Gravity.TOP : Gravity.START | Gravity.TOP, 14, 10, 14, 0));
editView.addView(valueSeekBar, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 60, Gravity.START | Gravity.TOP, 14, 10, 14, 0));
curveLayout = new FrameLayout(context);
editView.addView(curveLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 78, Gravity.CENTER_HORIZONTAL));
@@ -2699,19 +2698,6 @@ public class PhotoFilterView extends FrameLayout {
layoutParams = (LayoutParams) curvesControl.getLayoutParams();
layoutParams.height = viewHeight + AndroidUtilities.dp(28);
curvesControl.setLayoutParams(layoutParams);
if (AndroidUtilities.isTablet()) {
int total = AndroidUtilities.dp(86) * 10;
layoutParams = (FrameLayout.LayoutParams) recyclerListView.getLayoutParams();
if (total < viewWidth) {
layoutParams.width = total;
layoutParams.leftMargin = (viewWidth - total) / 2;
} else {
layoutParams.width = LayoutHelper.MATCH_PARENT;
layoutParams.leftMargin = 0;
}
recyclerListView.setLayoutParams(layoutParams);
}
}
@Override
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Typeface;
@@ -33,9 +33,8 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.LocaleController;
import com.b44t.messenger.R;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.messenger.ActionBar.Theme;
public class PickerBottomLayout extends FrameLayout {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
public class Point {
public float x;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.animation.ObjectAnimator;
import android.content.Context;
@@ -34,7 +34,7 @@ import android.graphics.PorterDuffXfermode;
import android.view.View;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.ui.ActionBar.Theme;
import com.b44t.messenger.ActionBar.Theme;
public class RadioButton extends View {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
public class Rect {
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.content.res.TypedArray;
@@ -34,7 +34,7 @@ import android.view.ViewConfiguration;
import android.view.ViewGroup;
import com.b44t.messenger.AndroidUtilities;
import com.b44t.messenger.support.widget.RecyclerView;
import com.b44t.messenger.aosp.RecyclerView;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.hardware.SensorManager;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Canvas;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Canvas;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
public class Size {
public float width;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Canvas;
@@ -1,6 +1,6 @@
/*******************************************************************************
*
* Messenger Android Frontend
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
@@ -21,7 +21,7 @@
******************************************************************************/
package com.b44t.ui.Components;
package com.b44t.messenger.Components;
import android.content.Context;
import android.graphics.Rect;

Some files were not shown because too many files have changed in this diff Show More