mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-11-01 09:28:12 +01:00
Compare commits
376 Commits
alpha_vers
...
v0.1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ff46f928a | ||
|
|
81e1c73c65 | ||
|
|
554dfff4ad | ||
|
|
741ec08386 | ||
|
|
f8a21fa3ba | ||
|
|
fd6bc82214 | ||
|
|
0ae8826732 | ||
|
|
5311edc404 | ||
|
|
d8dc8c39b2 | ||
|
|
c43ced8b00 | ||
|
|
908f294130 | ||
|
|
95408f8125 | ||
|
|
6d5ba059f8 | ||
|
|
ecdd9da9c8 | ||
|
|
1c17e6b7d2 | ||
|
|
9f60eca225 | ||
|
|
9deba8b10e | ||
|
|
05948d74f4 | ||
|
|
1007be50f8 | ||
|
|
28617cf9a8 | ||
|
|
5d2d43eebc | ||
|
|
f2b2525823 | ||
|
|
29547f4750 | ||
|
|
af63bba54a | ||
|
|
caf4f177d2 | ||
|
|
1e67b34440 | ||
|
|
67afcd7e88 | ||
|
|
9406f29562 | ||
|
|
b626c5fb73 | ||
|
|
0393ff6e77 | ||
|
|
30ecc17d55 | ||
|
|
7c5f184cc8 | ||
|
|
d5fff14cb0 | ||
|
|
5cdda037b2 | ||
|
|
0942f7c5ec | ||
|
|
efe90d0030 | ||
|
|
2d45f337d7 | ||
|
|
70cf6f3340 | ||
|
|
6542859892 | ||
|
|
143bc5e1b6 | ||
|
|
6e51ea6ee7 | ||
|
|
d7c4e3d5bc | ||
|
|
1ed86c138e | ||
|
|
2d83545865 | ||
|
|
3594f10fdd | ||
|
|
a903ac9dbd | ||
|
|
ed90a278a6 | ||
|
|
6221b33a3d | ||
|
|
2561ba8bd0 | ||
|
|
9859608764 | ||
|
|
b40077f83f | ||
|
|
76dc0ff083 | ||
|
|
6a2d59ed48 | ||
|
|
a09d6f85f8 | ||
|
|
2f3d39ed31 | ||
|
|
83e0fc039f | ||
|
|
d4ca682882 | ||
|
|
e2b75a3928 | ||
|
|
d9f9fb51db | ||
|
|
a8b2091e69 | ||
|
|
f14ebe9a0d | ||
|
|
4010e02438 | ||
|
|
5cbe6152c9 | ||
|
|
c7233e05c4 | ||
|
|
9d4657dea8 | ||
|
|
7c3ddfda5c | ||
|
|
77f37a5698 | ||
|
|
c45528a7f3 | ||
|
|
0dcc441bae | ||
|
|
8c05b6e1ea | ||
|
|
351033600f | ||
|
|
fb4289a812 | ||
|
|
37eb16f6c4 | ||
|
|
77c5bcb038 | ||
|
|
3c65bfcf1b | ||
|
|
ce7c284c6b | ||
|
|
267570d7b4 | ||
|
|
c9e6a0bc2e | ||
|
|
1f8348bbfa | ||
|
|
d4fe5235e2 | ||
|
|
76fee50cd5 | ||
|
|
e2956e3f1c | ||
|
|
21b0b36359 | ||
|
|
a55820a11d | ||
|
|
3322b5b4e8 | ||
|
|
0384914c16 | ||
|
|
0550219d58 | ||
|
|
deaa4e596d | ||
|
|
bf1036c919 | ||
|
|
116deebf87 | ||
|
|
0f3197d7e4 | ||
|
|
db9edc47c0 | ||
|
|
2392d9fa29 | ||
|
|
3272f609a8 | ||
|
|
d5092f50f6 | ||
|
|
d216fc4640 | ||
|
|
f61c12a30b | ||
|
|
bbbd4ddcb0 | ||
|
|
495a1d025f | ||
|
|
a245ebad09 | ||
|
|
0e31e40ef1 | ||
|
|
bae68d4a99 | ||
|
|
3e17e3364d | ||
|
|
9626500586 | ||
|
|
92fcb811c3 | ||
|
|
81e2fdcf91 | ||
|
|
171338f492 | ||
|
|
cc21588a66 | ||
|
|
b5356ee5eb | ||
|
|
ec9be3f6af | ||
|
|
ac5e67c032 | ||
|
|
fd24f04254 | ||
|
|
0b74574fa6 | ||
|
|
2704ff0ecf | ||
|
|
f4c33e08e2 | ||
|
|
5dddf2e39d | ||
|
|
487afce565 | ||
|
|
f31a13568c | ||
|
|
04341991bf | ||
|
|
a7c2a67d0c | ||
|
|
4ec6666f93 | ||
|
|
fcc0181075 | ||
|
|
1c4e5f3659 | ||
|
|
a120fcf068 | ||
|
|
0328f34df2 | ||
|
|
7849115000 | ||
|
|
41e14aab9d | ||
|
|
074b5d012c | ||
|
|
8a3ee7931d | ||
|
|
dce5a8d89c | ||
|
|
a82f2b68e3 | ||
|
|
a36ddccefd | ||
|
|
bbe696a37b | ||
|
|
13ec5f84c4 | ||
|
|
587ebbb309 | ||
|
|
485611970f | ||
|
|
c0738947b7 | ||
|
|
f1145d826e | ||
|
|
aa4f587443 | ||
|
|
e559e4acd2 | ||
|
|
db1e000325 | ||
|
|
4f57c17f73 | ||
|
|
21af736fa4 | ||
|
|
72ba80ff87 | ||
|
|
450e96fdbe | ||
|
|
fcc60e1b16 | ||
|
|
e888282d24 | ||
|
|
237d33f2e4 | ||
|
|
babb0d28bb | ||
|
|
53eb7cbe91 | ||
|
|
fed84f9942 | ||
|
|
d4896a1f87 | ||
|
|
21879bec7d | ||
|
|
bb143cfecb | ||
|
|
6475b4808a | ||
|
|
57a58cc518 | ||
|
|
8a5b6aa972 | ||
|
|
6813770d57 | ||
|
|
118b6cd430 | ||
|
|
b984e35284 | ||
|
|
f2a2a3029d | ||
|
|
b4ab1ba414 | ||
|
|
d244e0ed42 | ||
|
|
81c190a9c0 | ||
|
|
e2f36c334b | ||
|
|
891215fcb3 | ||
|
|
04e022cbbc | ||
|
|
1f4f3a475d | ||
|
|
3e6d435116 | ||
|
|
9c6f946602 | ||
|
|
053c9e73b0 | ||
|
|
acd1aef851 | ||
|
|
a3a753a9dd | ||
|
|
0ea491bcfc | ||
|
|
946d35b5d9 | ||
|
|
5098cb698d | ||
|
|
47a06c372e | ||
|
|
7877001533 | ||
|
|
23d41846d0 | ||
|
|
dc4dc17b6c | ||
|
|
6c8892938a | ||
|
|
2f2d86bc3f | ||
|
|
ecd3d008de | ||
|
|
f5172a17db | ||
|
|
662a5bd597 | ||
|
|
6621748de5 | ||
|
|
37fa76b79a | ||
|
|
c7acb50522 | ||
|
|
64304ad637 | ||
|
|
635ca332da | ||
|
|
e2a15ab925 | ||
|
|
016801419f | ||
|
|
48d79bc353 | ||
|
|
b8094fded8 | ||
|
|
8c82ba0e91 | ||
|
|
3ff9c06843 | ||
|
|
45ae8342ee | ||
|
|
b8c3dae807 | ||
|
|
3afd2601f0 | ||
|
|
82414bba55 | ||
|
|
7a39b2341b | ||
|
|
37ab47bc34 | ||
|
|
21b111cc2d | ||
|
|
b3c2f6213d | ||
|
|
c3de94012a | ||
|
|
804eb64b5b | ||
|
|
6a4aa8075d | ||
|
|
692aca4eca | ||
|
|
dd00802561 | ||
|
|
a3e0fea200 | ||
|
|
304125ea0d | ||
|
|
a465ebb5b4 | ||
|
|
b39d00eba6 | ||
|
|
1ebdce309d | ||
|
|
d29b7585f7 | ||
|
|
276560678c | ||
|
|
10c23a65c5 | ||
|
|
4e4f4377e7 | ||
|
|
2e6c9db614 | ||
|
|
2375ba9d35 | ||
|
|
a11ccb7cf6 | ||
|
|
a54241294d | ||
|
|
46b509c1fb | ||
|
|
b13dd58c70 | ||
|
|
4312b250ce | ||
|
|
ff4c9180a0 | ||
|
|
be0bd40995 | ||
|
|
726d6d0faf | ||
|
|
14ce356c4d | ||
|
|
930a425af5 | ||
|
|
7168cecbcb | ||
|
|
7f067023e7 | ||
|
|
167aecb696 | ||
|
|
9872e6e806 | ||
|
|
05adc343a2 | ||
|
|
58e3dfa084 | ||
|
|
3068423c01 | ||
|
|
3c960f60d1 | ||
|
|
a153fc4afb | ||
|
|
4a19fbb745 | ||
|
|
bb8c10fc98 | ||
|
|
97af73f055 | ||
|
|
73d18082c4 | ||
|
|
4b78e80edd | ||
|
|
78ba4b0fda | ||
|
|
a1c5baac6b | ||
|
|
c4b811090d | ||
|
|
fbdccfb639 | ||
|
|
c1162fd618 | ||
|
|
4d7a148cfe | ||
|
|
c7b1602648 | ||
|
|
a82a454ad2 | ||
|
|
9533378003 | ||
|
|
dc1edcc78c | ||
|
|
6d8b040f6d | ||
|
|
60f07f7707 | ||
|
|
f6b7130d0c | ||
|
|
9fea056063 | ||
|
|
859e9ab5d6 | ||
|
|
4821718407 | ||
|
|
67a13f8ecb | ||
|
|
40e4782b32 | ||
|
|
2ab5ab3ce5 | ||
|
|
88fb054640 | ||
|
|
4ce8fd6a63 | ||
|
|
ffc2d669e5 | ||
|
|
926e1162f0 | ||
|
|
6cf69ee26d | ||
|
|
279820c1be | ||
|
|
1d7031f3d4 | ||
|
|
252e00b67a | ||
|
|
a8d63c7480 | ||
|
|
2020172b56 | ||
|
|
2d55a4c8ec | ||
|
|
20a3e0220b | ||
|
|
feeeefa2d2 | ||
|
|
d25137020f | ||
|
|
3c4fb4162e | ||
|
|
28e9ae950e | ||
|
|
888e741aa9 | ||
|
|
9f7a6e1738 | ||
|
|
76f4a0738f | ||
|
|
63327946be | ||
|
|
84d90adc54 | ||
|
|
cf15732a39 | ||
|
|
2eee73753f | ||
|
|
62d097357a | ||
|
|
c35a690335 | ||
|
|
18af76ce92 | ||
|
|
6e7256d9a5 | ||
|
|
2af6c5a742 | ||
|
|
5c39fddbc6 | ||
|
|
a708853199 | ||
|
|
acb651cf92 | ||
|
|
562c91acb2 | ||
|
|
484f9607b1 | ||
|
|
9149ee224c | ||
|
|
1bb1d3b9af | ||
|
|
0b76390069 | ||
|
|
5de8751079 | ||
|
|
4bfe1b0c02 | ||
|
|
15c1676d0b | ||
|
|
49ff90aad1 | ||
|
|
6adaaf1965 | ||
|
|
6d114f84fa | ||
|
|
394cff9ebe | ||
|
|
465abd4498 | ||
|
|
0178569f14 | ||
|
|
f7185445e1 | ||
|
|
d4b107bc79 | ||
|
|
fd14753a1d | ||
|
|
7cc4e93ad4 | ||
|
|
4c95404fe1 | ||
|
|
1c2212f0fe | ||
|
|
065fcedd34 | ||
|
|
3a66a79f49 | ||
|
|
907f6e92c3 | ||
|
|
426c3e6979 | ||
|
|
92292be472 | ||
|
|
3e10186c7c | ||
|
|
1974322013 | ||
|
|
a2e22bc525 | ||
|
|
7e433954c5 | ||
|
|
d47e2dac92 | ||
|
|
de3bea0729 | ||
|
|
3c91007d93 | ||
|
|
debb3e04df | ||
|
|
8c758460bc | ||
|
|
2bb1189e15 | ||
|
|
233fc38c23 | ||
|
|
215d31f8ea | ||
|
|
8ae681c753 | ||
|
|
554eb3c2fe | ||
|
|
c1f8f5a681 | ||
|
|
bb5c82aa60 | ||
|
|
72ba41c940 | ||
|
|
40b6722e66 | ||
|
|
dd3b72bc1f | ||
|
|
e9ecae117d | ||
|
|
5e4793bdaf | ||
|
|
fe351a8466 | ||
|
|
b1b12aba31 | ||
|
|
d2b95e1db6 | ||
|
|
20c317b63f | ||
|
|
f2d14a975d | ||
|
|
442310cad3 | ||
|
|
b8da5c6acb | ||
|
|
2ed15f3d5c | ||
|
|
d926fabe09 | ||
|
|
e815a1444d | ||
|
|
df81866821 | ||
|
|
497f6c79d2 | ||
|
|
6eb585800f | ||
|
|
df842d33e1 | ||
|
|
919d259f61 | ||
|
|
2fc4020b72 | ||
|
|
9d6e15edb7 | ||
|
|
44956bd951 | ||
|
|
388b895499 | ||
|
|
5b26d57fdb | ||
|
|
e2de8b8160 | ||
|
|
f3bff30ef0 | ||
|
|
6704772fb2 | ||
|
|
efc74a074c | ||
|
|
3b5852d1e4 | ||
|
|
0fa2da6ffa | ||
|
|
e3a4db17d2 | ||
|
|
2828429120 | ||
|
|
f2f057827a | ||
|
|
b82e4d9d37 | ||
|
|
1f3d9e58d8 | ||
|
|
31e28fb146 | ||
|
|
2fbcb95db8 | ||
|
|
7f74877fd8 | ||
|
|
2c6cc3e3d5 | ||
|
|
d4d533c4f0 |
BIN
.assets/IzzyOnDroid.png
Normal file
BIN
.assets/IzzyOnDroid.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
BIN
.assets/codeberg.png
Normal file
BIN
.assets/codeberg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
.assets/google-play-badge.png
Normal file
BIN
.assets/google-play-badge.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
49
.gitea/issue_template/bug_report.md
Normal file
49
.gitea/issue_template/bug_report.md
Normal file
@@ -0,0 +1,49 @@
|
||||
---
|
||||
|
||||
name: "Bug Report"
|
||||
about: "Report a Bug!"
|
||||
title: " [Bug] "
|
||||
ref: "master"
|
||||
labels:
|
||||
|
||||
- Kind/Bug
|
||||
|
||||
---
|
||||
### Description of the Issue:
|
||||
|
||||
<!-- Provide a clear and concise description of what the issue is about. -->
|
||||
|
||||
### Steps to Reproduce:
|
||||
|
||||
<!-- Explain the steps to reproduce the issue, if applicable. -->
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
### Expected Behavior:
|
||||
|
||||
<!-- Describe what you expected to happen. -->
|
||||
|
||||
### Actual Behavior:
|
||||
|
||||
<!-- Describe what actually happened. Include screenshots if applicable. -->
|
||||
|
||||
### App Information:
|
||||
|
||||
- **Version:** <!-- e.g. 1.0.0 -->
|
||||
- **Device:** <!-- e.g. Samsung Galaxy S10 -->
|
||||
- **Android Version:** <!-- e.g. Android 11 -->
|
||||
- **Installation Source:** <!-- e.g. Google Play Store, APK -->
|
||||
|
||||
### Log Files:
|
||||
|
||||
<!-- If applicable, include log files or error messages related to this issue. -->
|
||||
|
||||
### Additional Context:
|
||||
|
||||
<!-- Add any other context about the problem here, such as relevant system configuration or screenshots. -->
|
||||
|
||||
### Potential Solutions or Workarounds:
|
||||
|
||||
<!-- If you know of any potential solutions or workarounds for this issue, please describe them here. -->
|
||||
1
.github/CODE_OF_CONDUCT.md
vendored
1
.github/CODE_OF_CONDUCT.md
vendored
@@ -1 +0,0 @@
|
||||
|
||||
1
.github/CONTRIBUTING.md
vendored
1
.github/CONTRIBUTING.md
vendored
@@ -1 +0,0 @@
|
||||
|
||||
14
.github/DISCUSSION_TEMPLATE/announcements.yml
vendored
14
.github/DISCUSSION_TEMPLATE/announcements.yml
vendored
@@ -1,14 +0,0 @@
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to read this announcement!
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: description
|
||||
description: Please describe the announcement in as much detail as possible.
|
||||
placeholder: Make an announcement here...
|
||||
validations:
|
||||
required: true
|
||||
74
.github/DISCUSSION_TEMPLATE/ideas.yml
vendored
74
.github/DISCUSSION_TEMPLATE/ideas.yml
vendored
@@ -1,74 +0,0 @@
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Have an idea for a new feature or an improvement? Let us know here!
|
||||
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: Checklist
|
||||
options:
|
||||
- label: I have used the search function for [open](https://github.com/Docile-Alligator/Infinity-For-Reddit/discussions/categories/ideas) **and** [closed](https://github.com/Docile-Alligator/Infinity-For-Reddit/discussions/categories/completed-ideas) ideas to see if someone else has already submitted the same request.
|
||||
required: true
|
||||
- label: I will describe the feature with as much detail as possible.
|
||||
required: true
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to share your idea!
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Description
|
||||
description: Please describe your idea in as much detail as possible.
|
||||
placeholder: I think it would be great if...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: alternatives
|
||||
attributes:
|
||||
label: Alternatives
|
||||
description: Please describe any alternative solutions or features you've considered.
|
||||
placeholder: I've considered...
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
id: additional
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: Add your use-case, screenshots, mock-up, or anything else you think might be helpful.
|
||||
placeholder: I think this would be a great addition because...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: importance
|
||||
attributes:
|
||||
label: How important is this feature?
|
||||
multiple: false
|
||||
options:
|
||||
- Critical
|
||||
- Important
|
||||
- Nice to have
|
||||
|
||||
- type: textarea
|
||||
id: other
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: Is there anything else you'd like to add?
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
id: solution
|
||||
attributes:
|
||||
label: Solution
|
||||
description: If you have an idea of how this can be implemented, please share it here.
|
||||
placeholder: I think this could be done by...
|
||||
validations:
|
||||
required: false
|
||||
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@@ -1,2 +0,0 @@
|
||||
github: Docile-Alligator
|
||||
patreon: docile_alligator
|
||||
94
.github/ISSUE_TEMPLATE/BUG_REPORT.yml
vendored
94
.github/ISSUE_TEMPLATE/BUG_REPORT.yml
vendored
@@ -1,94 +0,0 @@
|
||||
name: Bug Report
|
||||
description: Create a report to help us improve existing features
|
||||
labels: ['type: possible bug']
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: Checklist
|
||||
options:
|
||||
- label: I have used the search function for [open](https://github.com/Docile-Alligator/Infinity-For-Reddit/issues) **and** [closed](https://github.com/Docile-Alligator/Infinity-For-Reddit/issues?q=is%3Aissue+is%3Aclosed) issues to see if someone else has already submitted the same bug report.
|
||||
required: true
|
||||
- label: I will describe the problem with as much detail as possible.
|
||||
required: true
|
||||
- label: If the bug only occurs with a certain link, post, image..., I will include the URL.
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: App version
|
||||
description: We need the actual version number found on the settings screen.
|
||||
placeholder: x.y.z
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: source
|
||||
attributes:
|
||||
label: Where did you get the app from
|
||||
multiple: false
|
||||
options:
|
||||
- Google Play
|
||||
- F-Droid
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: android_version
|
||||
attributes:
|
||||
label: Android version
|
||||
description: Please mention if you are using a custom rom!
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: device
|
||||
attributes:
|
||||
label: Device model
|
||||
|
||||
- type: input
|
||||
id: first
|
||||
attributes:
|
||||
label: First occurred
|
||||
placeholder: about x days/weeks ago
|
||||
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
placeholder: |
|
||||
1. This
|
||||
2. Then that
|
||||
3. Then this
|
||||
4. Etc.
|
||||
|
||||
- type: textarea
|
||||
id: links
|
||||
attributes:
|
||||
label: Example post, link, markdown...
|
||||
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: Expected behaviour
|
||||
description: After following the steps, what did you think Infinity would do?
|
||||
|
||||
- type: textarea
|
||||
id: current
|
||||
attributes:
|
||||
label: Current behaviour
|
||||
description: What did Infinity do instead? Screenshots might help. Usually, you can take a screenshot of your smartphone by pressing *Power* + *Volume down* for a few seconds.
|
||||
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Logs
|
||||
description: If you are experiencing a crash, including the stacktrace will likely get it fixed sooner.
|
||||
11
.github/ISSUE_TEMPLATE/config.yml
vendored
11
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,11 +0,0 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Feature Request
|
||||
url: https://github.com/Docile-Alligator/Infinity-For-Reddit/discussions/categories/ideas
|
||||
about: Discuss ideas for new features of changes
|
||||
- name: Questions
|
||||
url: https://github.com/Docile-Alligator/Infinity-For-Reddit/discussions/categories/q-a
|
||||
about: Please ask and answer questions here.
|
||||
- name: Help needed
|
||||
url: https://github.com/Docile-Alligator/Infinity-For-Reddit/discussions/categories/help-needed
|
||||
about: Please ask for help here
|
||||
23
.github/dependabot.yml
vendored
23
.github/dependabot.yml
vendored
@@ -1,23 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
# Updates for Gradle dependencies used in the app
|
||||
- package-ecosystem: gradle
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
commit-message:
|
||||
prefix: "⬆[Gradle]"
|
||||
reviewers:
|
||||
- "Wladefant"
|
||||
- "Docile-Alligator"
|
||||
|
||||
# Updates for GitHub Actions used in the repository
|
||||
- package-ecosystem: github-actions
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
commit-message:
|
||||
prefix: "⬆[GitHub Actions]"
|
||||
reviewers:
|
||||
- "Wladefant"
|
||||
- "Docile-Alligator"
|
||||
32
.github/workflows/build.yml
vendored
32
.github/workflows/build.yml
vendored
@@ -1,32 +0,0 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
Build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set-up JDK 11
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'temurin'
|
||||
|
||||
- name: Setup and build with Gradle
|
||||
uses: gradle/gradle-build-action@v2
|
||||
with:
|
||||
arguments: build -x lint
|
||||
|
||||
- name: Upload apk
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Infinity-${{github.sha}}
|
||||
path: app/build/outputs/apk/
|
||||
if-no-files-found: error
|
||||
34
.github/workflows/codeql-analysis.yml
vendored
34
.github/workflows/codeql-analysis.yml
vendored
@@ -1,34 +0,0 @@
|
||||
name: CodeQL
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 12 * * *'
|
||||
|
||||
jobs:
|
||||
Analyze:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: java
|
||||
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
@@ -1,14 +1,15 @@
|
||||
pipeline:
|
||||
steps:
|
||||
build:
|
||||
image: alvrme/alpine-android:android-33-jdk11
|
||||
commands:
|
||||
- apk add --no-cache python3
|
||||
- ./gradlew :app:assembleRelease
|
||||
when:
|
||||
path: [ app/**, build.gradle ]
|
||||
sign:
|
||||
image: alvrme/alpine-android:android-33-jdk11
|
||||
commands:
|
||||
- ./scripts/apk-sign.sh LemmInfinity-signed.apk app/build/outputs/apk/release/app-release-unsigned.apk
|
||||
- ./scripts/apk-sign.sh Eternity-signed.apk app/build/outputs/apk/release/app-release-unsigned.apk
|
||||
secrets: [ APK_KS_PASS, APK_KS, APK_KS_ALIAS ]
|
||||
when:
|
||||
event: [ tag ]
|
||||
@@ -17,11 +18,13 @@ pipeline:
|
||||
settings:
|
||||
base_url: https://codeberg.org
|
||||
files:
|
||||
- LemmInfinity-signed.apk
|
||||
- Eternity-signed.apk
|
||||
api_key:
|
||||
from_secret: GITEA_ACCESS_TOKEN
|
||||
target: main
|
||||
prerelease: true
|
||||
note: "This is an alpha release. Expect many bugs and unfinished features!"
|
||||
when:
|
||||
event: [ tag ]
|
||||
event: [ tag ]
|
||||
when:
|
||||
event: [ push, tag, pull_request ]
|
||||
|
||||
77
.woodpecker/nightly.yaml
Normal file
77
.woodpecker/nightly.yaml
Normal file
@@ -0,0 +1,77 @@
|
||||
clone:
|
||||
git:
|
||||
image: woodpeckerci/plugin-git
|
||||
settings:
|
||||
partial: false
|
||||
|
||||
steps:
|
||||
build:
|
||||
image: alvrme/alpine-android:android-33-jdk11
|
||||
commands:
|
||||
- apk add --no-cache python3
|
||||
- ./gradlew :app:assembleNightly
|
||||
sign:
|
||||
image: alvrme/alpine-android:android-33-jdk11
|
||||
commands:
|
||||
- ./scripts/apk-sign.sh eu.toldi.infinityforlemmy.nightly.apk app/build/outputs/apk/nightly/eu.toldi.infinityforlemmy.nightly.apk
|
||||
secrets: [ APK_KS_PASS, APK_KS, APK_KS_ALIAS ]
|
||||
pull-repo-config:
|
||||
image: codeberg.org/freeyourgadget/android-fdroid-tools:latest
|
||||
commands:
|
||||
- cd ..
|
||||
- pwd
|
||||
- mkdir repoconfig
|
||||
- cd repoconfig
|
||||
- pwd
|
||||
- git clone --depth 1 https://codeberg.org/Bazsalanszky/fdroid-repo-config
|
||||
- cp /woodpecker/src/codeberg.org/Bazsalanszky/Eternity/eu.toldi.infinityforlemmy.nightly.apk fdroid-repo-config/repo/
|
||||
|
||||
pull-pages:
|
||||
image: codeberg.org/freeyourgadget/android-fdroid-tools:latest
|
||||
commands:
|
||||
- cd ..
|
||||
- pwd
|
||||
- mkdir pages
|
||||
- cd pages
|
||||
- pwd
|
||||
- git clone --depth 2 https://codeberg.org/Bazsalanszky/pages
|
||||
- cd pages
|
||||
- git config user.name "CODEBERG CI"
|
||||
- git config user.email "noreply@nodomain.nodomain"
|
||||
# reset and remove, later force push, to keep repo size small
|
||||
- git reset --soft HEAD~1
|
||||
- git status
|
||||
|
||||
update-fdroid-data:
|
||||
image: cs8898/android-fdroid-sdk:33.0.0
|
||||
commands:
|
||||
- pwd
|
||||
- cd ../repoconfig/fdroid-repo-config/
|
||||
- echo -n "$${FDROID_KS}" | base64 -d > keystore.p12
|
||||
- cat keystore.p12 | sha256sum
|
||||
- sed -i "s|KS_PASS|$${FDROID_KS_PASS}|g" config.yml
|
||||
- sed -i "s|KEY_PASS|$${FDROID_KEY_PASS}|g" config.yml
|
||||
- fdroid update
|
||||
- fdroid deploy
|
||||
- ls -laR repo
|
||||
secrets: [ FDROID_KS_PASS, FDROID_KEY_PASS, FDROID_KS ]
|
||||
push-pages-update-repo:
|
||||
image: codeberg.org/freeyourgadget/android-fdroid-tools:latest
|
||||
commands:
|
||||
- if [ -f .do_not_build ]; then return 0; fi
|
||||
- cd ../pages/pages/
|
||||
- git add -A
|
||||
- git status
|
||||
- git diff
|
||||
- ls -lsR fdroid/repo
|
||||
- git commit -m "autodeploy"
|
||||
- git remote remove origin
|
||||
- git remote add origin https://Bazsalanszky:"$${GITEA_ACCESS_TOKEN}"@codeberg.org/Bazsalanszky/pages.git
|
||||
# force push as we removed all data
|
||||
- git push -f origin main
|
||||
- cd ../../
|
||||
- pwd
|
||||
- ls -la
|
||||
secrets: [ GITEA_ACCESS_TOKEN ]
|
||||
when:
|
||||
event: cron
|
||||
111
README.md
111
README.md
@@ -1,53 +1,96 @@
|
||||
<h1 align="center">
|
||||
|
||||
Eternity for Lemmy
|
||||
</h1>
|
||||
|
||||
<div align="center">
|
||||
|
||||
A Lemmy client on Android written in Java. It's a fork of the [Infinity for Reddit](https://github.com/Docile-Alligator/Infinity-For-Reddit) project, currenty in early development.
|
||||
|
||||
<img align="right" src="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/raw/branch/master/fastlane/metadata/android/en-US/images/LemmInfinity.png" width=200>
|
||||
A Lemmy client for Android written in Java. It's a fork of the [Infinity for Reddit](https://github.com/Docile-Alligator/Infinity-For-Reddit) project, currenty in early development.
|
||||
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
|
||||
<div align="center">
|
||||
<img src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/icon.png" width=256>
|
||||
|
||||
[](https://ci.codeberg.org/12474)
|
||||
[](https://ci.codeberg.org/repos/12474)
|
||||
[](https://liberapay.com/Bazsalanszky)
|
||||
|
||||
<a href="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/issues">Report a Bug</a>
|
||||
<a href="https://codeberg.org/Bazsalanszky/Eternity/issues">Report a Bug</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
<div align="center">
|
||||
<a href="https://play.google.com/store/apps/details?id=eu.toldi.infinityforlemmy">
|
||||
<img src="./.assets/google-play-badge.png" height="80">
|
||||
</a>
|
||||
<a href="https://apt.izzysoft.de/fdroid/index/apk/eu.toldi.infinityforlemmy">
|
||||
<img src="./.assets/IzzyOnDroid.png" height="80">
|
||||
</a>
|
||||
<a href="https://codeberg.org/Bazsalanszky/Eternity/releases/">
|
||||
<img src="./.assets/codeberg.png" height="80">
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Action Items for LemmInfinity
|
||||
## Features
|
||||
|
||||
LemmInfinity is currently in the early stages of development. Expect many unfinished features and bugs!
|
||||
Eternity is currently in the early stages of development. Expect many unfinished features and bugs!
|
||||
|
||||
- [x] Implementation of basic post browsing feature
|
||||
- [x] Support for multiple account handling
|
||||
- [x] Functionality for post upvotes/downvotes
|
||||
- [x] Functionality to browse comments
|
||||
- [ ] Capability for creating a new post
|
||||
- [ ] Ability to create comments
|
||||
- [ ] Elimination of code/string references specific to Reddit
|
||||
- [ ] Incorporation of private messaging feature
|
||||
- [ ] Feature for saving posts
|
||||
- [ ] Account editing function
|
||||
- [ ] Multi community view?
|
||||
### Browsing Lemmy
|
||||
|
||||
- Explore various feeds (Subscribed/Local/All) and communities
|
||||
- Subscribe or unsubscribe from specific communities, with the option to block
|
||||
- Discover communities federated with the current instance
|
||||
- Favorite a community for quick access
|
||||
- Manage your subscriptions and blocked communities
|
||||
|
||||
### Content Engagement
|
||||
|
||||
- Engage with content by voting, saving, sharing, and creating posts or comments
|
||||
- Enjoy endless scrolling through feeds and posts
|
||||
- Tailor the view settings for posts (card,compact, gallery)
|
||||
- Set default preferences for post and comment sorting
|
||||
- Stay updated with notifications for replies
|
||||
|
||||
### Account Management
|
||||
|
||||
- Sign in to multiple accounts or instances, and effortlessly switch between them
|
||||
- Use the inbox features to view replies, mentions, and private messages
|
||||
- Access your profile to view your posts, comments, and saved content
|
||||
|
||||
### Customization
|
||||
|
||||
- Choose between various theme options including Light, Dark, OLED
|
||||
- Support Material You theming
|
||||
- Explore user-created themes
|
||||
- Customize font settings
|
||||
- Optional bottom navigation bar
|
||||
- Discover a plethora of other customization features
|
||||
|
||||
<img
|
||||
src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png"
|
||||
alt="Screenshot 1"
|
||||
height="200" >
|
||||
<img
|
||||
src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png"
|
||||
alt="Screenshot 2"
|
||||
height="200" >
|
||||
<img
|
||||
src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png"
|
||||
alt="Screenshot 3"
|
||||
height="200" >
|
||||
<img
|
||||
src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png"
|
||||
alt="Screenshot 4"
|
||||
height="200" >
|
||||
<img
|
||||
src="https://codeberg.org/Bazsalanszky/Eternity/raw/branch/master/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png"
|
||||
alt="Screenshot 5"
|
||||
height="200" >
|
||||
|
||||
|
||||
## Contributing
|
||||
@@ -65,16 +108,21 @@ Don't forget to give the project a star! Thanks again!
|
||||
4. Push to the Branch (`git push origin feature/AmazingFeature`)
|
||||
5. Open a Pull Request
|
||||
|
||||
Here are other ways you can help:
|
||||
### Translation
|
||||
|
||||
- [Report Bugs](https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/issues)
|
||||
You can alos help Eternity by translating it to your native langugage! Translations are done via [Weblate](https://translate.codeberg.org/projects/infinity-for-lemmy/app/)!
|
||||
|
||||
[](https://translate.codeberg.org/engage/Eternity/)
|
||||
|
||||
### Reporting bugs
|
||||
|
||||
You can also contribute by [reporting bugs](https://codeberg.org/Bazsalanszky/Eternity/issues)
|
||||
|
||||
<p align="right">(<a href="#top">back to top</a>)</p>
|
||||
|
||||
## License
|
||||
|
||||
Distributed under the AGPL-3.0 License. See <a href="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/src/branch/master/LICENSE">LICENSE</a> for more information.
|
||||
Distributed under the AGPL-3.0 License. See <a href="https://codeberg.org/Bazsalanszky/Eternity/src/branch/master/LICENSE">LICENSE</a> for more information.
|
||||
|
||||
<p align="right">(<a href="#top">back to top</a>)</p>
|
||||
|
||||
@@ -82,7 +130,6 @@ Distributed under the AGPL-3.0 License. See <a href="https://codeberg.org/Bazsal
|
||||
|
||||
[@bazsalanszky@lemmy.toldi.eu](https://lemmy.toldi.eu/u/bazsalanszky) - (Owner)
|
||||
|
||||
|
||||
Project Link: [https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy](https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy)
|
||||
Project Link: [https://codeberg.org/Bazsalanszky/Eternity](https://codeberg.org/Bazsalanszky/Eternity)
|
||||
|
||||
<p align="right">(<a href="#top">back to top</a>)</p>
|
||||
|
||||
Binary file not shown.
111
app/build.gradle
111
app/build.gradle
@@ -1,5 +1,18 @@
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
id 'org.jetbrains.kotlin.android'
|
||||
}
|
||||
def getCommitVersionCode = { ->
|
||||
try {
|
||||
def stdout = new ByteArrayOutputStream()
|
||||
exec {
|
||||
commandLine 'git', 'rev-list', 'HEAD', '--count'
|
||||
standardOutput = stdout
|
||||
}
|
||||
return Integer.valueOf(stdout.toString().trim())
|
||||
} catch (ignored) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
@@ -8,8 +21,8 @@ android {
|
||||
applicationId "eu.toldi.infinityforlemmy"
|
||||
minSdk 21
|
||||
targetSdk 33
|
||||
versionCode 121
|
||||
versionName "0.0.1"
|
||||
versionCode 131
|
||||
versionName "0.1.2"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
javaCompileOptions {
|
||||
annotationProcessorOptions {
|
||||
@@ -18,10 +31,12 @@ android {
|
||||
}
|
||||
}
|
||||
buildTypes {
|
||||
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
|
||||
minifiedRelease {
|
||||
initWith buildTypes.release
|
||||
zipAlignEnabled true
|
||||
@@ -33,7 +48,33 @@ android {
|
||||
applicationIdSuffix '.debug'
|
||||
versionNameSuffix ' (DEBUG)'
|
||||
}
|
||||
|
||||
nightly {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
applicationIdSuffix '.nightly'
|
||||
versionNameSuffix ' (NIGHTLY)'
|
||||
}
|
||||
applicationVariants.all { variant ->
|
||||
variant.resValue "string", "applicationId", variant.applicationId
|
||||
|
||||
|
||||
if (variant.buildType.name == 'nightly') {
|
||||
variant.outputs.all {
|
||||
setVersionCodeOverride(getCommitVersionCode())
|
||||
|
||||
setVersionNameOverride(variant.versionName)
|
||||
outputFileName = "${applicationId}.apk"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_11
|
||||
targetCompatibility JavaVersion.VERSION_11
|
||||
@@ -52,7 +93,35 @@ android {
|
||||
buildFeatures {
|
||||
viewBinding true
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
doNotStrip '**/*.so'
|
||||
}
|
||||
namespace 'eu.toldi.infinityforlemmy'
|
||||
|
||||
|
||||
task rearrangeClass(type: Exec) {
|
||||
commandLine 'python', '../scripts/fixEventBus.py'
|
||||
}
|
||||
|
||||
applicationVariants.all { variant ->
|
||||
if (variant.name == 'release') {
|
||||
task("compileSingleFile${variant.name.capitalize()}", type: JavaCompile, dependsOn: rearrangeClass) {
|
||||
def filePath = project.rootDir.absolutePath + '/app/build/generated/ap_generated_sources/release/out/eu/toldi/infinityforlemmy/'
|
||||
source = files(filePath)
|
||||
includes = ["**/EventBusIndex.java"]
|
||||
classpath = variant.getCompileClasspath() + files(project.rootDir.absolutePath + '/app/build/intermediates/javac/release/classes')
|
||||
destinationDir = file("$buildDir/intermediates/javac/release/classes")
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).all { task ->
|
||||
if (task.name == 'compileReleaseJavaWithJavac') {
|
||||
task.finalizedBy "compileSingleFile${variant.name.capitalize()}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -63,6 +132,7 @@ dependencies {
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
|
||||
def lifecycleVersion = "2.5.1"
|
||||
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycleVersion"
|
||||
@@ -108,6 +178,7 @@ dependencies {
|
||||
implementation "com.google.dagger:dagger:$daggerVersion"
|
||||
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
|
||||
|
||||
|
||||
// Binding
|
||||
// NOTE: Deprecated in favor of viewbinding
|
||||
def butterknifeVersion = "10.2.3"
|
||||
@@ -149,6 +220,7 @@ dependencies {
|
||||
def glideVersion = "4.12.0"
|
||||
implementation "com.github.bumptech.glide:glide:$glideVersion"
|
||||
annotationProcessor "com.github.bumptech.glide:compiler:$glideVersion"
|
||||
implementation "com.github.bumptech.glide:okhttp-integration:$glideVersion"
|
||||
implementation 'jp.wasabeef:glide-transformations:4.3.0'
|
||||
implementation 'com.github.santalu:aspect-ratio-imageview:1.0.9'
|
||||
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.23'
|
||||
@@ -165,6 +237,7 @@ dependencies {
|
||||
implementation "io.noties.markwon:recycler-table:$markwonVersion"
|
||||
implementation "io.noties.markwon:simple-ext:$markwonVersion"
|
||||
implementation "io.noties.markwon:inline-parser:$markwonVersion"
|
||||
implementation "io.noties.markwon:image-glide:$markwonVersion"
|
||||
implementation 'com.atlassian.commonmark:commonmark-ext-gfm-tables:0.14.0'
|
||||
implementation 'me.saket:better-link-movement-method:2.2.0'
|
||||
|
||||
@@ -175,7 +248,7 @@ dependencies {
|
||||
implementation 'com.lsjwzh:materialloadingprogressbar:0.5.8-RELEASE'
|
||||
|
||||
// Customizable TextView
|
||||
implementation files("Modules/customtextview-2.1.aar")
|
||||
implementation 'com.libRG:customtextview:2.4'
|
||||
|
||||
// Dismiss gesturing
|
||||
implementation 'app.futured.hauler:hauler:5.0.0'
|
||||
@@ -196,3 +269,35 @@ dependencies {
|
||||
// debugImplementation because LeakCanary should only run in debug builds.
|
||||
//debugImplementation 'com.squareup.leakcanary:leakcanary-android:x.y'
|
||||
}
|
||||
|
||||
// NB: Android Studio can't find the imports; this does not affect the
|
||||
// actual build since Gradle can find them just fine.
|
||||
|
||||
import com.android.tools.profgen.ArtProfileKt
|
||||
import com.android.tools.profgen.ArtProfileSerializer
|
||||
import com.android.tools.profgen.DexFile
|
||||
|
||||
project.afterEvaluate {
|
||||
tasks.each { task ->
|
||||
if (task.name.startsWith("compile") && task.name.endsWith("ReleaseArtProfile")) {
|
||||
task.doLast {
|
||||
outputs.files.each { file ->
|
||||
if (file.name.endsWith(".profm")) {
|
||||
println("Sorting ${file} ...")
|
||||
def version = ArtProfileSerializer.valueOf("METADATA_0_0_2")
|
||||
def profile = ArtProfileKt.ArtProfile(file)
|
||||
def keys = new ArrayList(profile.profileData.keySet())
|
||||
def sortedData = new LinkedHashMap()
|
||||
Collections.sort keys, new DexFile.Companion()
|
||||
keys.each { key -> sortedData[key] = profile.profileData[key] }
|
||||
new FileOutputStream(file).with {
|
||||
write(version.magicBytes$profgen)
|
||||
write(version.versionBytes$profgen)
|
||||
version.write$profgen(it, sortedData, "")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
<resources>
|
||||
<string name="application_name" translatable="false">Infinity for Lemmy (Debug)</string>
|
||||
<string name="application_name" translatable="false">Eternity (Debug)</string>
|
||||
</resources>
|
||||
@@ -22,8 +22,7 @@
|
||||
android:maxSdkVersion="28" />
|
||||
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
<application
|
||||
android:name=".Infinity"
|
||||
@@ -35,6 +34,12 @@
|
||||
android:theme="@style/AppTheme"
|
||||
android:usesCleartextTraffic="true"
|
||||
tools:replace="android:label">
|
||||
<activity
|
||||
android:name=".activities.InstanceInfoActivity"
|
||||
android:label="@string/instance_info"
|
||||
android:configChanges="orientation|screenLayout|screenSize|layoutDirection"
|
||||
android:parentActivityName=".activities.MainActivity"
|
||||
android:theme="@style/AppTheme.Slidable" />
|
||||
<activity
|
||||
android:name=".activities.HistoryActivity"
|
||||
android:exported="false"
|
||||
@@ -291,18 +296,70 @@
|
||||
|
||||
<data android:scheme="https" />
|
||||
<data android:scheme="http" />
|
||||
<data android:host="www.reddit.com" />
|
||||
<data android:host="reddit.com" />
|
||||
<data android:host="v.redd.it" />
|
||||
<data android:host="amp.reddit.com" />
|
||||
<data android:host="m.reddit.com" />
|
||||
<data android:host="old.reddit.com" />
|
||||
<data android:host="new.reddit.com" />
|
||||
<data android:host="np.reddit.com" />
|
||||
<data android:host="reddit.app.link" />
|
||||
<data android:host="redd.it" />
|
||||
<data android:host="s.reddit.com" />
|
||||
<data android:host="click.redditmail.com" />
|
||||
<data android:host="lemmy.world" />
|
||||
<data android:host="lemmy.ml" />
|
||||
<data android:host="beehaw.org" />
|
||||
<data android:host="lemm.ee" />
|
||||
<data android:host="sh.itjust.works" />
|
||||
<data android:host="feddit.de" />
|
||||
<data android:host="lemmy.fmhy.ml" />
|
||||
<data android:host="lemmy.ca" />
|
||||
<data android:host="www.hexbear.net" />
|
||||
<data android:host="programming.dev" />
|
||||
<data android:host="lemmy.dbzer0.com" />
|
||||
<data android:host="lemmy.blahaj.zone" />
|
||||
<data android:host="lemmy.one" />
|
||||
<data android:host="vlemmy.net" />
|
||||
<data android:host="lemmy.sdf.org" />
|
||||
<data android:host="discuss.tchncs.de" />
|
||||
<data android:host="lemmygrad.ml" />
|
||||
<data android:host="sopuli.xyz" />
|
||||
<data android:host="reddthat.com" />
|
||||
<data android:host="aussie.zone" />
|
||||
<data android:host="feddit.uk" />
|
||||
<data android:host="feddit.nl" />
|
||||
<data android:host="midwest.social" />
|
||||
<data android:host="infosec.pub" />
|
||||
<data android:host="feddit.it" />
|
||||
<data android:host="ttrpg.network" />
|
||||
<data android:host="pawb.social" />
|
||||
<data android:host="lemmy.zip" />
|
||||
<data android:host="startrek.website" />
|
||||
<data android:host="burggit.moe" />
|
||||
<data android:host="slrpnk.net" />
|
||||
<data android:host="mander.xyz" />
|
||||
<data android:host="lemmy.eco.br" />
|
||||
<data android:host="lemmy.nz" />
|
||||
<data android:host="dormi.zone" />
|
||||
<data android:host="exploding-heads.com" />
|
||||
<data android:host="delraymisfitsboard.com" />
|
||||
<data android:host="monyet.cc" />
|
||||
<data android:host="feddit.dk" />
|
||||
<data android:host="lemmy.pt" />
|
||||
<data android:host="szmer.info" />
|
||||
<data android:host="yiffit.net" />
|
||||
<data android:host="geddit.social" />
|
||||
<data android:host="waveform.social" />
|
||||
<data android:host="discuss.online" />
|
||||
<data android:host="monero.town" />
|
||||
<data android:host="feddit.cl" />
|
||||
<data android:host="iusearchlinux.fyi" />
|
||||
<data android:host="dataterm.digital" />
|
||||
<data android:host="lemmy.whynotdrs.org" />
|
||||
<data android:host="feddit.ch" />
|
||||
<data android:host="enterprise.lemmy.ml" />
|
||||
<data android:host="lemmy.run" />
|
||||
<data android:host="jlai.lu" />
|
||||
<data android:host="pornlemmy.com" />
|
||||
<data android:host="lemdro.id" />
|
||||
<data android:host="lemmyrs.org" />
|
||||
<data android:host="latte.isnot.coffee" />
|
||||
<data android:host="feddit.nu" />
|
||||
<data android:host="lemmy.film" />
|
||||
<data android:host="bakchodi.org" />
|
||||
<data android:host="mujico.org" />
|
||||
<data android:host="lemmy.studio" />
|
||||
<data android:host="lemmy.toldi.eu" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
@@ -350,6 +407,11 @@
|
||||
android:label="@string/subscriptions"
|
||||
android:parentActivityName=".activities.MainActivity"
|
||||
android:theme="@style/AppTheme.Slidable" />
|
||||
<activity
|
||||
android:name=".activities.BlockedThingListingActivity"
|
||||
android:label="@string/blocks"
|
||||
android:parentActivityName=".activities.MainActivity"
|
||||
android:theme="@style/AppTheme.Slidable" />
|
||||
<activity
|
||||
android:name=".activities.SubredditSelectionActivity"
|
||||
android:label="@string/community_selection_activity_label"
|
||||
@@ -379,11 +441,36 @@
|
||||
android:theme="@style/AppTheme.Launcher"
|
||||
android:windowSoftInputMode="adjustPan">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity-alias
|
||||
android:name=".DefaultIcon"
|
||||
android:targetActivity=".activities.MainActivity"
|
||||
android:label="@string/application_name"
|
||||
android:enabled="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
<activity-alias
|
||||
android:name=".OriginalIcon"
|
||||
android:targetActivity=".activities.MainActivity"
|
||||
android:label="@string/application_name"
|
||||
android:enabled="false"
|
||||
android:icon="@mipmap/original_ic_launcher"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity-alias>
|
||||
|
||||
<activity
|
||||
android:name=".activities.LoginActivity"
|
||||
android:configChanges="orientation|screenLayout|screenSize|layoutDirection"
|
||||
@@ -412,7 +499,6 @@
|
||||
android:name=".activities.ViewUserDetailActivity"
|
||||
android:parentActivityName=".activities.MainActivity"
|
||||
android:theme="@style/AppTheme.Slidable" />
|
||||
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="${applicationId}.provider"
|
||||
|
||||
@@ -2,12 +2,15 @@ package eu.toldi.infinityforlemmy;
|
||||
|
||||
import android.app.Application;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.BindsInstance;
|
||||
import dagger.Component;
|
||||
import eu.toldi.infinityforlemmy.activities.AccountPostsActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.AccountSavedThingActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.BlockedThingListingActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.CommentActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.CreateMultiRedditActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.CustomThemeListingActivity;
|
||||
@@ -24,6 +27,7 @@ import eu.toldi.infinityforlemmy.activities.FullMarkdownActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.GiveAwardActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.HistoryActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.InboxActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.InstanceInfoActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.LockScreenActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.LoginActivity;
|
||||
@@ -65,7 +69,10 @@ import eu.toldi.infinityforlemmy.activities.ViewVideoActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.WebViewActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.WikiActivity;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.AccountChooserBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.CommentMoreBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.BlockedCommunitiesListingFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.BlockedUsersListingFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.CommentsListingFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.FollowedUsersListingFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.HistoryPostFragment;
|
||||
@@ -73,6 +80,7 @@ import eu.toldi.infinityforlemmy.fragments.InboxFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.MorePostsInfoFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.MultiRedditListingFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.PrivateMessageFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.SidebarFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.SubredditListingFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.SubscribedSubredditsListingFragment;
|
||||
@@ -105,7 +113,7 @@ import eu.toldi.infinityforlemmy.settings.TranslationFragment;
|
||||
import eu.toldi.infinityforlemmy.settings.VideoPreferenceFragment;
|
||||
|
||||
@Singleton
|
||||
@Component(modules = {AppModule.class, NetworkModule.class})
|
||||
@Component(modules = {AppModule.class, NetworkModule.class, PostEnricherModule.class})
|
||||
public interface AppComponent {
|
||||
void inject(MainActivity mainActivity);
|
||||
|
||||
@@ -307,6 +315,18 @@ public interface AppComponent {
|
||||
|
||||
void inject(MorePostsInfoFragment morePostsInfoFragment);
|
||||
|
||||
void inject(BlockedThingListingActivity blockedThingListingActivity);
|
||||
|
||||
void inject(BlockedCommunitiesListingFragment blockedCommunitiesListingFragment);
|
||||
|
||||
void inject(BlockedUsersListingFragment blockedUsersListingFragment);
|
||||
|
||||
void inject(CommentMoreBottomSheetFragment commentMoreBottomSheetFragment);
|
||||
|
||||
void inject(PrivateMessageFragment privateMessageFragment);
|
||||
|
||||
void inject(@NotNull InstanceInfoActivity instanceInfoActivity);
|
||||
|
||||
@Component.Factory
|
||||
interface Factory {
|
||||
AppComponent create(@BindsInstance Application application);
|
||||
|
||||
@@ -22,6 +22,8 @@ import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.LoopAvailableExoCreator;
|
||||
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||
import eu.toldi.infinityforlemmy.post.ObjectResolver;
|
||||
import eu.toldi.infinityforlemmy.utils.CustomThemeSharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.videoautoplay.Config;
|
||||
@@ -192,8 +194,8 @@ abstract class AppModule {
|
||||
@Provides
|
||||
@Singleton
|
||||
static ExoCreator provideExoCreator(Config config,
|
||||
ToroExo toroExo,
|
||||
@Named("default") SharedPreferences sharedPreferences) {
|
||||
ToroExo toroExo,
|
||||
@Named("default") SharedPreferences sharedPreferences) {
|
||||
return new LoopAvailableExoCreator(toroExo, config, sharedPreferences);
|
||||
}
|
||||
|
||||
@@ -202,4 +204,16 @@ abstract class AppModule {
|
||||
static Executor provideExecutor() {
|
||||
return Executors.newFixedThreadPool(4);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static ObjectResolver provideObjectResolver(@Named("no_oauth") RetrofitHolder retrofitHolder) {
|
||||
return new ObjectResolver(retrofitHolder);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static MarkPostAsRead provideMarkPostAsRead(@Named("no_oauth") RetrofitHolder retrofitHolder) {
|
||||
return new MarkPostAsRead(retrofitHolder);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,9 @@ import androidx.annotation.NonNull;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.dto.DeleteCommentDTO;
|
||||
import eu.toldi.infinityforlemmy.dto.DeletePostDTO;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
@@ -13,10 +15,11 @@ import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class DeleteThing {
|
||||
public static void delete(Retrofit oauthRetrofit, String fullname, String accessToken, DeleteThingListener deleteThingListener) {
|
||||
|
||||
public static void deletePost(Retrofit retrofit, int post_id, String accessToken, DeleteThingListener deleteThingListener) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(APIUtils.ID_KEY, fullname);
|
||||
oauthRetrofit.create(RedditAPI.class).delete(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback<String>() {
|
||||
params.put(APIUtils.ID_KEY, String.valueOf(post_id));
|
||||
retrofit.create(LemmyAPI.class).postDelete(new DeletePostDTO(post_id, true, accessToken)).enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
@@ -33,6 +36,27 @@ public class DeleteThing {
|
||||
});
|
||||
}
|
||||
|
||||
public static void deleteComment(Retrofit retrofit, int comment_id, String accessToken, DeleteThingListener deleteThingListener) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(APIUtils.ID_KEY, String.valueOf(comment_id));
|
||||
retrofit.create(LemmyAPI.class).commentDelete(new DeleteCommentDTO(comment_id, true, accessToken)).enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
deleteThingListener.deleteSuccess();
|
||||
} else {
|
||||
deleteThingListener.deleteFailed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
deleteThingListener.deleteFailed();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public interface DeleteThingListener {
|
||||
void deleteSuccess();
|
||||
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package eu.toldi.infinityforlemmy;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Handler;
|
||||
|
||||
import org.json.JSONException;
|
||||
@@ -12,9 +10,7 @@ import java.util.concurrent.Executor;
|
||||
|
||||
import eu.toldi.infinityforlemmy.apis.GfycatAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
@@ -44,14 +40,12 @@ public class FetchGfycatOrRedgifsVideoLinks {
|
||||
});
|
||||
}
|
||||
|
||||
public static void fetchRedgifsVideoLinks(Context context, Executor executor, Handler handler, Retrofit redgifsRetrofit,
|
||||
SharedPreferences currentAccountSharedPreferences,
|
||||
public static void fetchRedgifsVideoLinks(Executor executor, Handler handler, Retrofit redgifsRetrofit,
|
||||
String gfycatId,
|
||||
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
|
||||
executor.execute(() -> {
|
||||
try {
|
||||
Response<String> response = redgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(currentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")),
|
||||
gfycatId, APIUtils.USER_AGENT).execute();
|
||||
Response<String> response = redgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(gfycatId).execute();
|
||||
if (response.isSuccessful()) {
|
||||
parseRedgifsVideoLinks(handler, response.body(), fetchGfycatOrRedgifsVideoLinksListener);
|
||||
} else {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package eu.toldi.infinityforlemmy;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
import android.text.Html;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
@@ -9,9 +8,6 @@ import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
@@ -83,7 +79,7 @@ public class FetchMyInfo {
|
||||
if (!person.isNull("banner")) {
|
||||
bannerImageUrl = person.getString("banner");
|
||||
}
|
||||
display_name = person.getString("name");
|
||||
display_name = (person.has("display_name")) ? person.getString("display_name") : person.getString("name");
|
||||
redditDataRoomDatabase.accountDao().updateAccountInfo(name, profileImageUrl, bannerImageUrl);
|
||||
} catch (JSONException e) {
|
||||
parseFailed = true;
|
||||
|
||||
@@ -20,6 +20,7 @@ import retrofit2.Response;
|
||||
public class FetchStreamableVideo {
|
||||
public interface FetchStreamableVideoListener {
|
||||
void success(StreamableVideo streamableVideo);
|
||||
|
||||
void failed();
|
||||
}
|
||||
|
||||
@@ -33,7 +34,12 @@ public class FetchStreamableVideo {
|
||||
String title = jsonObject.getString(JSONUtils.TITLE_KEY);
|
||||
JSONObject filesObject = jsonObject.getJSONObject(JSONUtils.FILES_KEY);
|
||||
StreamableVideo.Media mp4 = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_KEY));
|
||||
StreamableVideo.Media mp4Mobile = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_MOBILE_KEY));
|
||||
StreamableVideo.Media mp4MobileTemp = null;
|
||||
try {
|
||||
mp4MobileTemp = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_MOBILE_KEY));
|
||||
} catch (JSONException e) {
|
||||
}
|
||||
StreamableVideo.Media mp4Mobile = mp4MobileTemp;
|
||||
handler.post(() -> fetchStreamableVideoListener.success(new StreamableVideo(title, mp4, mp4Mobile)));
|
||||
} else {
|
||||
handler.post(fetchStreamableVideoListener::failed);
|
||||
@@ -55,7 +61,12 @@ public class FetchStreamableVideo {
|
||||
String title = jsonObject.getString(JSONUtils.TITLE_KEY);
|
||||
JSONObject filesObject = jsonObject.getJSONObject(JSONUtils.FILES_KEY);
|
||||
StreamableVideo.Media mp4 = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_KEY));
|
||||
StreamableVideo.Media mp4Mobile = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_MOBILE_KEY));
|
||||
StreamableVideo.Media mp4MobileTemp = null;
|
||||
try {
|
||||
mp4MobileTemp = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_MOBILE_KEY));
|
||||
} catch (JSONException e) {
|
||||
}
|
||||
StreamableVideo.Media mp4Mobile = mp4MobileTemp;
|
||||
if (mp4 == null && mp4Mobile == null) {
|
||||
handler.post(fetchStreamableVideoListener::failed);
|
||||
return;
|
||||
|
||||
@@ -11,6 +11,16 @@ import android.os.Bundle;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.Lifecycle;
|
||||
import androidx.lifecycle.LifecycleObserver;
|
||||
import androidx.lifecycle.OnLifecycleEvent;
|
||||
import androidx.lifecycle.ProcessLifecycleOwner;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader;
|
||||
import com.bumptech.glide.load.model.GlideUrl;
|
||||
import com.evernote.android.state.StateSaver;
|
||||
import com.livefront.bridge.Bridge;
|
||||
import com.livefront.bridge.SavedStateHandler;
|
||||
@@ -18,15 +28,11 @@ import com.livefront.bridge.SavedStateHandler;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.Lifecycle;
|
||||
import androidx.lifecycle.LifecycleObserver;
|
||||
import androidx.lifecycle.OnLifecycleEvent;
|
||||
import androidx.lifecycle.ProcessLifecycleOwner;
|
||||
import eu.toldi.infinityforlemmy.activities.LockScreenActivity;
|
||||
import eu.toldi.infinityforlemmy.broadcastreceivers.NetworkWifiStatusReceiver;
|
||||
import eu.toldi.infinityforlemmy.broadcastreceivers.WallpaperChangeReceiver;
|
||||
@@ -38,6 +44,8 @@ import eu.toldi.infinityforlemmy.font.FontFamily;
|
||||
import eu.toldi.infinityforlemmy.font.TitleFontFamily;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import okhttp3.Call;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
public class Infinity extends Application implements LifecycleObserver {
|
||||
public Typeface typeface;
|
||||
@@ -55,6 +63,9 @@ public class Infinity extends Application implements LifecycleObserver {
|
||||
@Inject
|
||||
@Named("security")
|
||||
SharedPreferences mSecuritySharedPreferences;
|
||||
@Inject
|
||||
@Named("glide")
|
||||
OkHttpClient glideOkHttpClient;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
@@ -159,6 +170,9 @@ public class Infinity extends Application implements LifecycleObserver {
|
||||
registerReceiver(mNetworkWifiStatusReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
|
||||
|
||||
registerReceiver(new WallpaperChangeReceiver(mSharedPreferences), new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED));
|
||||
|
||||
OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory((Call.Factory) glideOkHttpClient);
|
||||
Glide.get(this).getRegistry().replace(GlideUrl.class, InputStream.class, factory);
|
||||
}
|
||||
|
||||
@OnLifecycleEvent(Lifecycle.Event.ON_START)
|
||||
|
||||
@@ -9,16 +9,16 @@ import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
|
||||
import eu.toldi.infinityforlemmy.network.SortTypeConverterFactory;
|
||||
import eu.toldi.infinityforlemmy.comment.LemmyCommentAPI;
|
||||
import eu.toldi.infinityforlemmy.post.LemmyPostAPI;
|
||||
import eu.toldi.infinityforlemmy.privatemessage.LemmyPrivateMessageAPI;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import okhttp3.ConnectionPool;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.OkHttpClient;
|
||||
import retrofit2.Retrofit;
|
||||
import retrofit2.adapter.guava.GuavaCallAdapterFactory;
|
||||
import retrofit2.converter.gson.GsonConverterFactory;
|
||||
import retrofit2.converter.scalars.ScalarsConverterFactory;
|
||||
|
||||
@Module(includes = AppModule.class)
|
||||
abstract class NetworkModule {
|
||||
@@ -35,6 +35,21 @@ abstract class NetworkModule {
|
||||
.build();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Named("glide")
|
||||
@Singleton
|
||||
static OkHttpClient provideGlideOkHttp(@Named("base") OkHttpClient baseOkHttp,
|
||||
@Named("RedgifsAccessTokenAuthenticator") Interceptor redGifsAuthenticator) {
|
||||
return baseOkHttp.newBuilder()
|
||||
.addInterceptor(chain -> chain.proceed(
|
||||
chain.request()
|
||||
.newBuilder()
|
||||
.header("User-Agent", APIUtils.USER_AGENT)
|
||||
.build()
|
||||
))
|
||||
.addInterceptor(redGifsAuthenticator)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Named("base")
|
||||
@@ -166,6 +181,12 @@ abstract class NetworkModule {
|
||||
.build();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static RedgifsAPI provideRedgifsAPI(@Named("redgifs") Retrofit redgifsRetrofit) {
|
||||
return redgifsRetrofit.create(RedgifsAPI.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Named("imgur")
|
||||
@Singleton
|
||||
@@ -216,4 +237,22 @@ abstract class NetworkModule {
|
||||
static StreamableAPI provideStreamableApi(@Named("streamable") Retrofit streamableRetrofit) {
|
||||
return streamableRetrofit.create(StreamableAPI.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static LemmyPostAPI providePostAPI(@Named("no_oauth") RetrofitHolder retrofitHolder) {
|
||||
return new LemmyPostAPI(retrofitHolder);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static LemmyCommentAPI provideCommentAPI(@Named("no_oauth") RetrofitHolder retrofitHolder) {
|
||||
return new LemmyCommentAPI(retrofitHolder);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static LemmyPrivateMessageAPI provideLemmyPrivateMessageAPI(@Named("base") RetrofitHolder retrofit) {
|
||||
return new LemmyPrivateMessageAPI(retrofit);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,9 +110,9 @@ class ParseSubscribedThing {
|
||||
boolean postingRestrictedToMods = community.getBoolean("posting_restricted_to_mods");
|
||||
int instanceId = community.getInt("instance_id");
|
||||
int subscribers = data.getJSONObject("counts").getInt("subscribers");
|
||||
|
||||
newSubscribedSubredditData.add(new SubscribedSubredditData(id, title, LemmyUtils.actorID2FullName(actorId), iconUrl, accountName));
|
||||
newSubredditData.add(new SubredditData(id,name,title,description,removed,published,updated,deleted,nsfw,actorId,local,iconUrl,bannerImageUrl,hidden,postingRestrictedToMods,instanceId,subscribers));
|
||||
boolean isBlocked = data.getBoolean("blocked");
|
||||
newSubscribedSubredditData.add(new SubscribedSubredditData(id, title, LemmyUtils.actorID2FullName(actorId), iconUrl, accountName, false));
|
||||
newSubredditData.add(new SubredditData(id, name, title, description, removed, published, updated, deleted, nsfw, actorId, local, iconUrl, bannerImageUrl, hidden, postingRestrictedToMods, instanceId, subscribers, isBlocked));
|
||||
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package eu.toldi.infinityforlemmy;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import dagger.multibindings.IntoSet;
|
||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.CompositePostEnricher;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.RedGifsPostEnricher;
|
||||
|
||||
@Module
|
||||
abstract class PostEnricherModule {
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
static PostEnricher provideRedGifsPostEnricher(RedgifsAPI redgifsAPI) {
|
||||
return new RedGifsPostEnricher(redgifsAPI);
|
||||
}
|
||||
|
||||
@Provides
|
||||
static PostEnricher providePostEnricher(Set<PostEnricher> postEnrichers) {
|
||||
return new CompositePostEnricher(postEnrichers);
|
||||
}
|
||||
}
|
||||
@@ -4,10 +4,12 @@ import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.core.app.NotificationManagerCompat;
|
||||
import androidx.work.Worker;
|
||||
@@ -28,13 +30,11 @@ import javax.inject.Named;
|
||||
import eu.toldi.infinityforlemmy.account.Account;
|
||||
import eu.toldi.infinityforlemmy.activities.InboxActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||
import eu.toldi.infinityforlemmy.comment.ParseComment;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
||||
import eu.toldi.infinityforlemmy.message.Message;
|
||||
import eu.toldi.infinityforlemmy.message.ParseMessage;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||
import eu.toldi.infinityforlemmy.message.CommentInteraction;
|
||||
import eu.toldi.infinityforlemmy.utils.NotificationUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import retrofit2.Call;
|
||||
@@ -88,9 +88,16 @@ public class PullNotificationWorker extends Worker {
|
||||
|
||||
if (response != null && response.isSuccessful() && response.body() != null) {
|
||||
String responseBody = response.body();
|
||||
JSONArray messageArray = new JSONObject(responseBody).getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
|
||||
ArrayList<Message> messages = ParseMessage.parseMessages(messageArray,
|
||||
context.getResources().getConfiguration().locale, FetchMessage.MESSAGE_TYPE_NOTIFICATION);
|
||||
JSONArray messageArray = new JSONObject(responseBody).getJSONArray("replies");
|
||||
List<CommentInteraction> messages = new ArrayList<>();
|
||||
for (int i = 0; i < messageArray.length(); i++) {
|
||||
JSONObject commentInteractionObject = messageArray.getJSONObject(i);
|
||||
Comment comment = ParseComment.parseSingleComment(commentInteractionObject);
|
||||
boolean isRead = !commentInteractionObject.getJSONObject("comment_reply").getBoolean("read");
|
||||
int id = commentInteractionObject.getJSONObject("comment_reply").getInt("id");
|
||||
messages.add(new CommentInteraction(id, comment, isRead));
|
||||
}
|
||||
|
||||
|
||||
if (!messages.isEmpty()) {
|
||||
NotificationCompat.Builder summaryBuilder = NotificationUtils.buildSummaryNotification(context,
|
||||
@@ -110,77 +117,36 @@ public class PullNotificationWorker extends Worker {
|
||||
|
||||
int pendingIntentFlags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE : PendingIntent.FLAG_UPDATE_CURRENT;
|
||||
for (int messageIndex = messageSize - 1; messageIndex >= 0; messageIndex--) {
|
||||
Message message = messages.get(messageIndex);
|
||||
if (message.getTimeUTC() <= lastNotificationTime) {
|
||||
CommentInteraction message = messages.get(messageIndex);
|
||||
if (message.getComment().getCommentTimeMillis() <= lastNotificationTime) {
|
||||
continue;
|
||||
}
|
||||
|
||||
hasValidMessage = true;
|
||||
|
||||
inboxStyle.addLine(message.getAuthor() + " " + message.getBody());
|
||||
inboxStyle.addLine(message.getComment().getAuthorQualifiedName() + " " + message.getComment().getCommentMarkdown());
|
||||
|
||||
|
||||
String title = message.getComment().getAuthorQualifiedName();
|
||||
String summary = message.getComment().getCommunityQualifiedName();
|
||||
|
||||
String kind = message.getKind();
|
||||
String title;
|
||||
String summary;
|
||||
if (kind.equals(Message.TYPE_COMMENT) || kind.equals(Message.TYPE_LINK)) {
|
||||
title = message.getAuthor();
|
||||
summary = message.getSubject().substring(0, 1).toUpperCase() + message.getSubject().substring(1);
|
||||
} else {
|
||||
title = message.getTitle() == null || message.getTitle().equals("") ? message.getSubject() : message.getTitle();
|
||||
if (kind.equals(Message.TYPE_ACCOUNT)) {
|
||||
summary = context.getString(R.string.notification_summary_account);
|
||||
} else if (kind.equals(Message.TYPE_MESSAGE)) {
|
||||
summary = context.getString(R.string.notification_summary_message);
|
||||
} else if (kind.equals(Message.TYPE_SUBREDDIT)) {
|
||||
summary = context.getString(R.string.notification_summary_community);
|
||||
} else {
|
||||
summary = context.getString(R.string.notification_summary_award);
|
||||
}
|
||||
}
|
||||
|
||||
NotificationCompat.Builder builder = NotificationUtils.buildNotification(notificationManager,
|
||||
context, title, message.getBody(), summary,
|
||||
context, title, message.getComment().getCommentMarkdown(), summary,
|
||||
NotificationUtils.CHANNEL_ID_NEW_MESSAGES,
|
||||
NotificationUtils.CHANNEL_NEW_MESSAGES,
|
||||
NotificationUtils.getAccountGroupName(accountName), color);
|
||||
|
||||
if (kind.equals(Message.TYPE_COMMENT)) {
|
||||
Intent intent = new Intent(context, LinkResolverActivity.class);
|
||||
Uri uri = Uri.parse(message.getContext());
|
||||
intent.setData(uri);
|
||||
intent.putExtra(LinkResolverActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
||||
intent.putExtra(LinkResolverActivity.EXTRA_MESSAGE_FULLNAME, message.getFullname());
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, accountIndex * 6, intent, pendingIntentFlags);
|
||||
builder.setContentIntent(pendingIntent);
|
||||
} else if (kind.equals(Message.TYPE_ACCOUNT)) {
|
||||
Intent intent = new Intent(context, InboxActivity.class);
|
||||
intent.putExtra(InboxActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
||||
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 1, intent, pendingIntentFlags);
|
||||
builder.setContentIntent(summaryPendingIntent);
|
||||
} else if (kind.equals(Message.TYPE_LINK)) {
|
||||
Intent intent = new Intent(context, LinkResolverActivity.class);
|
||||
Uri uri = Uri.parse(message.getContext());
|
||||
intent.setData(uri);
|
||||
intent.putExtra(LinkResolverActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
||||
intent.putExtra(LinkResolverActivity.EXTRA_MESSAGE_FULLNAME, message.getFullname());
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 2, intent, pendingIntentFlags);
|
||||
builder.setContentIntent(pendingIntent);
|
||||
} else if (kind.equals(Message.TYPE_MESSAGE)) {
|
||||
Intent intent = new Intent(context, InboxActivity.class);
|
||||
intent.putExtra(InboxActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
||||
intent.putExtra(InboxActivity.EXTRA_VIEW_MESSAGE, true);
|
||||
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 3, intent, pendingIntentFlags);
|
||||
builder.setContentIntent(summaryPendingIntent);
|
||||
} else if (kind.equals(Message.TYPE_SUBREDDIT)) {
|
||||
Intent intent = new Intent(context, InboxActivity.class);
|
||||
intent.putExtra(InboxActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
||||
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 4, intent, pendingIntentFlags);
|
||||
builder.setContentIntent(summaryPendingIntent);
|
||||
} else {
|
||||
Intent intent = new Intent(context, InboxActivity.class);
|
||||
intent.putExtra(InboxActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
||||
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 5, intent, pendingIntentFlags);
|
||||
builder.setContentIntent(summaryPendingIntent);
|
||||
Intent intent = new Intent(context, LinkResolverActivity.class);
|
||||
Uri uri = Uri.parse(message.getComment().getPermalink());
|
||||
intent.setData(uri);
|
||||
intent.putExtra(LinkResolverActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
|
||||
intent.putExtra(LinkResolverActivity.EXTRA_MESSAGE_FULLNAME, message.getId());
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, accountIndex * 6, intent, pendingIntentFlags);
|
||||
builder.setContentIntent(pendingIntent);
|
||||
|
||||
if (ActivityCompat.checkSelfPermission(this.getApplicationContext(), android.Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
|
||||
return Result.failure();
|
||||
}
|
||||
notificationManager.notify(NotificationUtils.getNotificationIdUnreadMessage(accountIndex, messageIndex), builder.build());
|
||||
}
|
||||
@@ -216,10 +182,7 @@ public class PullNotificationWorker extends Worker {
|
||||
if (retryCount < 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Call<String> call = mOauthWithoutAuthenticatorRetrofit.create(RedditAPI.class)
|
||||
.getMessages(APIUtils.getOAuthHeader(account.getAccessToken()),
|
||||
FetchMessage.WHERE_UNREAD, null);
|
||||
Call<String> call = mRetrofit.getRetrofit().create(LemmyAPI.class).userReplies("New", 1, 25, true, account.getAccessToken());
|
||||
Response<String> response = call.execute();
|
||||
|
||||
if (response.isSuccessful()) {
|
||||
|
||||
@@ -13,6 +13,10 @@ import androidx.sqlite.db.SupportSQLiteDatabase;
|
||||
|
||||
import eu.toldi.infinityforlemmy.account.Account;
|
||||
import eu.toldi.infinityforlemmy.account.AccountDao;
|
||||
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityDao;
|
||||
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData;
|
||||
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserDao;
|
||||
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomTheme;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeDao;
|
||||
import eu.toldi.infinityforlemmy.multireddit.AnonymousMultiredditSubreddit;
|
||||
@@ -38,7 +42,7 @@ import eu.toldi.infinityforlemmy.user.UserData;
|
||||
|
||||
@Database(entities = {Account.class, SubredditData.class, SubscribedSubredditData.class, UserData.class,
|
||||
SubscribedUserData.class, MultiReddit.class, CustomTheme.class, RecentSearchQuery.class,
|
||||
ReadPost.class, PostFilter.class, PostFilterUsage.class, AnonymousMultiredditSubreddit.class}, version = 23)
|
||||
ReadPost.class, PostFilter.class, PostFilterUsage.class, AnonymousMultiredditSubreddit.class, BlockedUserData.class, BlockedCommunityData.class}, version = 27)
|
||||
public abstract class RedditDataRoomDatabase extends RoomDatabase {
|
||||
|
||||
public static RedditDataRoomDatabase create(final Context context) {
|
||||
@@ -49,7 +53,7 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
|
||||
MIGRATION_9_10, MIGRATION_10_11, MIGRATION_11_12, MIGRATION_12_13,
|
||||
MIGRATION_13_14, MIGRATION_14_15, MIGRATION_15_16, MIGRATION_16_17,
|
||||
MIGRATION_17_18, MIGRATION_18_19, MIGRATION_19_20, MIGRATION_20_21,
|
||||
MIGRATION_21_22, MIGRATION_22_23)
|
||||
MIGRATION_21_22, MIGRATION_22_23, MIGRATION_23_24, MIGRATION_24_25, MIGRATION_25_26, MIGRATION_26_27)
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -59,6 +63,10 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
|
||||
|
||||
public abstract SubscribedSubredditDao subscribedSubredditDao();
|
||||
|
||||
public abstract BlockedUserDao blockedUserDao();
|
||||
|
||||
public abstract BlockedCommunityDao blockedCommunityDao();
|
||||
|
||||
public abstract UserDao userDao();
|
||||
|
||||
public abstract SubscribedUserDao subscribedUserDao();
|
||||
@@ -383,4 +391,37 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private static final Migration MIGRATION_23_24 = new Migration(23, 24) {
|
||||
@Override
|
||||
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||
database.execSQL("ALTER TABLE accounts ADD COLUMN can_downvote INTEGER DEFAULT 1 NOT NULL");
|
||||
}
|
||||
};
|
||||
|
||||
private static final Migration MIGRATION_24_25 = new Migration(24, 25) {
|
||||
@Override
|
||||
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||
database.execSQL("ALTER TABLE subreddits ADD COLUMN blocked INTEGER DEFAULT 1 NOT NULL");
|
||||
}
|
||||
};
|
||||
|
||||
private static final Migration MIGRATION_25_26 = new Migration(25, 26) {
|
||||
@Override
|
||||
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||
database.execSQL("CREATE TABLE blocked_users" +
|
||||
"(name TEXT, id INTEGER NOT NULL, avatar TEXT, qualified_name TEXT, account_name TEXT NOT NULL, PRIMARY KEY( id, account_name))");
|
||||
database.execSQL("CREATE TABLE blocked_communities" +
|
||||
"(name TEXT, icon TEXT, id INTEGER NOT NULL, qualified_name TEXT, account_name TEXT NOT NULL, PRIMARY KEY( id, account_name))");
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
private static final Migration MIGRATION_26_27 = new Migration(26, 27) {
|
||||
@Override
|
||||
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||
database.execSQL("ALTER TABLE subscribed_subreddits"
|
||||
+ " ADD COLUMN is_favorite INTEGER DEFAULT 0 NOT NULL");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ import java.util.Map;
|
||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import okhttp3.Headers;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.Response;
|
||||
import retrofit2.Call;
|
||||
@@ -22,6 +21,8 @@ import retrofit2.Retrofit;
|
||||
import retrofit2.converter.scalars.ScalarsConverterFactory;
|
||||
|
||||
public class RedgifsAccessTokenAuthenticator implements Interceptor {
|
||||
private static final String REDGIFS_HOST = "redgifs.com";
|
||||
|
||||
private SharedPreferences mCurrentAccountSharedPreferences;
|
||||
|
||||
public RedgifsAccessTokenAuthenticator(SharedPreferences currentAccountSharedPreferences) {
|
||||
@@ -60,7 +61,17 @@ public class RedgifsAccessTokenAuthenticator implements Interceptor {
|
||||
@NonNull
|
||||
@Override
|
||||
public Response intercept(@NonNull Chain chain) throws IOException {
|
||||
Response response = chain.proceed(chain.request());
|
||||
if (!chain.request().url().host().endsWith(REDGIFS_HOST)) {
|
||||
return chain.proceed(chain.request());
|
||||
}
|
||||
|
||||
String currentAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "");
|
||||
Response response = chain.proceed(
|
||||
chain.request().newBuilder()
|
||||
.addHeader(APIUtils.AUTHORIZATION_KEY, APIUtils.AUTHORIZATION_BASE + currentAccessToken)
|
||||
.build()
|
||||
);
|
||||
|
||||
if (response.code() == 401 || response.code() == 400) {
|
||||
String accessTokenHeader = response.request().header(APIUtils.AUTHORIZATION_KEY);
|
||||
if (accessTokenHeader == null) {
|
||||
@@ -74,13 +85,21 @@ public class RedgifsAccessTokenAuthenticator implements Interceptor {
|
||||
String newAccessToken = refreshAccessToken();
|
||||
if (!newAccessToken.equals("")) {
|
||||
response.close();
|
||||
return chain.proceed(response.request().newBuilder().headers(Headers.of(APIUtils.getRedgifsOAuthHeader(newAccessToken))).build());
|
||||
return chain.proceed(
|
||||
chain.request().newBuilder()
|
||||
.addHeader(APIUtils.AUTHORIZATION_KEY, APIUtils.AUTHORIZATION_BASE + newAccessToken)
|
||||
.build()
|
||||
);
|
||||
} else {
|
||||
return response;
|
||||
}
|
||||
} else {
|
||||
response.close();
|
||||
return chain.proceed(response.request().newBuilder().headers(Headers.of(APIUtils.getRedgifsOAuthHeader(accessTokenFromSharedPreferences))).build());
|
||||
return chain.proceed(
|
||||
chain.request().newBuilder()
|
||||
.addHeader(APIUtils.AUTHORIZATION_KEY, APIUtils.AUTHORIZATION_BASE + accessTokenFromSharedPreferences)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package eu.toldi.infinityforlemmy;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import eu.toldi.infinityforlemmy.network.SortTypeConverterFactory;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.OkHttpClient;
|
||||
import retrofit2.Retrofit;
|
||||
import retrofit2.adapter.guava.GuavaCallAdapterFactory;
|
||||
@@ -13,16 +16,33 @@ public class RetrofitHolder {
|
||||
private Retrofit retrofit;
|
||||
private OkHttpClient okHttpClient;
|
||||
|
||||
private OkHttpClient okHttpClientBase;
|
||||
private String baseURL = APIUtils.API_BASE_URI;
|
||||
|
||||
private String accessToken = null;
|
||||
|
||||
private Interceptor oAuthInterceptor;
|
||||
|
||||
public Retrofit getRetrofit() {
|
||||
return retrofit;
|
||||
}
|
||||
|
||||
public void setBaseURL(String baseURL){
|
||||
retrofit = createRetrofit(okHttpClient,baseURL);
|
||||
public void setBaseURL(String baseURL) {
|
||||
retrofit = createRetrofit(okHttpClient, baseURL);
|
||||
this.baseURL = baseURL;
|
||||
}
|
||||
|
||||
public String getBaseURL() {
|
||||
String result = baseURL;
|
||||
if (baseURL.endsWith("/")) {
|
||||
result = baseURL.substring(0, baseURL.length() - 1);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public RetrofitHolder(OkHttpClient okHttpClient) {
|
||||
this.okHttpClient = okHttpClient;
|
||||
this.okHttpClientBase = okHttpClient;
|
||||
this.retrofit = createRetrofit(okHttpClient, APIUtils.API_BASE_URI);
|
||||
}
|
||||
|
||||
@@ -36,4 +56,18 @@ public class RetrofitHolder {
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.build();
|
||||
}
|
||||
|
||||
public void setAccessToken(String accessToken) {
|
||||
this.accessToken = accessToken;
|
||||
OkHttpClient.Builder builder = okHttpClientBase.newBuilder();
|
||||
Log.d("RetrofitHolder", "Access token changed");
|
||||
if (accessToken != null && !accessToken.equals("")) {
|
||||
Log.i("RetrofitHolder", "Setting access token interceptor");
|
||||
oAuthInterceptor = APIUtils.getOAuthInterceptor(accessToken);
|
||||
builder.addInterceptor(oAuthInterceptor);
|
||||
}
|
||||
okHttpClient = builder.build();
|
||||
retrofit = createRetrofit(okHttpClient, baseURL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
53
app/src/main/java/eu/toldi/infinityforlemmy/SaveComment.java
Normal file
53
app/src/main/java/eu/toldi/infinityforlemmy/SaveComment.java
Normal file
@@ -0,0 +1,53 @@
|
||||
package eu.toldi.infinityforlemmy;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.dto.SaveCommentDTO;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class SaveComment implements SaveThing {
|
||||
@Override
|
||||
public void saveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
|
||||
|
||||
retrofit.create(LemmyAPI.class).commentSave(new SaveCommentDTO(id, true, accessToken)).enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
saveThingListener.success();
|
||||
} else {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unsaveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
|
||||
|
||||
retrofit.create(LemmyAPI.class).commentSave(new SaveCommentDTO(id, false, accessToken)).enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
saveThingListener.success();
|
||||
} else {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
55
app/src/main/java/eu/toldi/infinityforlemmy/SavePost.java
Normal file
55
app/src/main/java/eu/toldi/infinityforlemmy/SavePost.java
Normal file
@@ -0,0 +1,55 @@
|
||||
package eu.toldi.infinityforlemmy;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.dto.SavePostDTO;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class SavePost implements SaveThing {
|
||||
|
||||
@Override
|
||||
public void saveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
|
||||
|
||||
|
||||
retrofit.create(LemmyAPI.class).postSave(new SavePostDTO(id, true, accessToken)).enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
saveThingListener.success();
|
||||
} else {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unsaveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
|
||||
|
||||
retrofit.create(LemmyAPI.class).postSave(new SavePostDTO(id, false, accessToken)).enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
saveThingListener.success();
|
||||
} else {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,59 +1,13 @@
|
||||
package eu.toldi.infinityforlemmy;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class SaveThing {
|
||||
public static void saveThing(Retrofit oauthRetrofit, String accessToken, String fullname,
|
||||
SaveThingListener saveThingListener) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(APIUtils.ID_KEY, fullname);
|
||||
oauthRetrofit.create(RedditAPI.class).save(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
saveThingListener.success();
|
||||
} else {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
}
|
||||
public interface SaveThing {
|
||||
void saveThing(Retrofit oauthRetrofit, String accessToken, int id,
|
||||
SaveThingListener saveThingListener);
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void unsaveThing(Retrofit oauthRetrofit, String accessToken, String fullname,
|
||||
SaveThingListener saveThingListener) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(APIUtils.ID_KEY, fullname);
|
||||
oauthRetrofit.create(RedditAPI.class).unsave(APIUtils.getOAuthHeader(accessToken), params).enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
saveThingListener.success();
|
||||
} else {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
saveThingListener.failed();
|
||||
}
|
||||
});
|
||||
}
|
||||
void unsaveThing(Retrofit oauthRetrofit, String accessToken, int id,
|
||||
SaveThingListener saveThingListener);
|
||||
|
||||
public interface SaveThingListener {
|
||||
void success();
|
||||
|
||||
@@ -43,7 +43,7 @@ public class SortType {
|
||||
TOP_TWELVE_HOURS("TopTwelveHour", "Top"),
|
||||
TOP_DAY("TopDay", "Top"),
|
||||
TOP_WEEK("TopWeek", "Top"),
|
||||
TOP_MONTH("month", "Top"),
|
||||
TOP_MONTH("TopMonth", "Top"),
|
||||
TOP_THREE_MONTHS("TopThreeMonths", "Top"),
|
||||
TOP_SIX_MONTHS("TopSixMonths", "Top"),
|
||||
TOP_NINE_MONTHS("TopNineMonths", "Top"),
|
||||
@@ -69,15 +69,15 @@ public class SortType {
|
||||
}
|
||||
|
||||
public enum Time {
|
||||
HOUR("TopHour", "Top Hour"),
|
||||
SIX_HOURS("TopSixHour", "Top Six Hours"),
|
||||
TWELVE_HOURS("TopTwelveHour", "Top Twelve Hours"),
|
||||
HOUR("hour", "Hour"),
|
||||
SIX_HOURS("SixHour", "Six Hours"),
|
||||
TWELVE_HOURS("TwelveHour", "Twelve Hours"),
|
||||
DAY("day", "Day"),
|
||||
WEEK("week", "Week"),
|
||||
MONTH("month", "Month"),
|
||||
THREE_MONTHS("TopThreeMonth", "Top Three Months"),
|
||||
SIX_MONTHS("TopSixMonth", "Top Six Months"),
|
||||
NINE_MONTHS("TopNineMonth", "Top Nine Months"),
|
||||
THREE_MONTHS("ThreeMonths", "Three Months"),
|
||||
SIX_MONTHS("SixMonths", "Six Months"),
|
||||
NINE_MONTHS("NineMonths", "Nine Months"),
|
||||
YEAR("year", "Year"),
|
||||
ALL("all", "All Time");
|
||||
|
||||
@@ -88,5 +88,14 @@ public class SortType {
|
||||
this.value = value;
|
||||
this.fullName = fullName;
|
||||
}
|
||||
|
||||
public static Time fromValue(String value) {
|
||||
for (Time time : values()) {
|
||||
if (time.value.equalsIgnoreCase(value)) {
|
||||
return time;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,9 @@ public class Account implements Parcelable {
|
||||
@ColumnInfo(name = "instance_url")
|
||||
private String instance_url;
|
||||
|
||||
@ColumnInfo(name = "can_downvote")
|
||||
private boolean canDownvote = true;
|
||||
|
||||
@Ignore
|
||||
protected Account(Parcel in) {
|
||||
accountName = in.readString();
|
||||
@@ -42,6 +45,7 @@ public class Account implements Parcelable {
|
||||
code = in.readString();
|
||||
isCurrentUser = in.readByte() != 0;
|
||||
instance_url = in.readString();
|
||||
canDownvote = in.readByte() != 0;
|
||||
}
|
||||
|
||||
public static final Creator<Account> CREATOR = new Creator<Account>() {
|
||||
@@ -58,11 +62,11 @@ public class Account implements Parcelable {
|
||||
|
||||
@Ignore
|
||||
public static Account getAnonymousAccount() {
|
||||
return new Account("-",null, null, null, null, null, false,null);
|
||||
return new Account("-",null, null, null, null, null, false,null,true);
|
||||
}
|
||||
|
||||
public Account(@NonNull String accountName, String display_name, String accessToken, String code,
|
||||
String profileImageUrl, String bannerImageUrl, boolean isCurrentUser,String instance_url) {
|
||||
String profileImageUrl, String bannerImageUrl, boolean isCurrentUser,String instance_url, boolean canDownvote) {
|
||||
this.accountName = accountName;
|
||||
this.display_name = display_name;
|
||||
this.accessToken = accessToken;
|
||||
@@ -71,6 +75,7 @@ public class Account implements Parcelable {
|
||||
this.bannerImageUrl = bannerImageUrl;
|
||||
this.isCurrentUser = isCurrentUser;
|
||||
this.instance_url = instance_url;
|
||||
this.canDownvote = canDownvote;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@@ -116,6 +121,10 @@ public class Account implements Parcelable {
|
||||
return instance_url;
|
||||
}
|
||||
|
||||
public boolean canDownvote() {
|
||||
return canDownvote;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeString(accountName);
|
||||
@@ -126,5 +135,6 @@ public class Account implements Parcelable {
|
||||
dest.writeString(code);
|
||||
dest.writeByte((byte) (isCurrentUser ? 1 : 0));
|
||||
dest.writeString(instance_url);
|
||||
dest.writeByte((byte) (canDownvote ? 1 : 0));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
package eu.toldi.infinityforlemmy.account;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData;
|
||||
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class FetchBlockedThings {
|
||||
|
||||
public static void fetchBlockedThings(Retrofit mRetrofit, String accessToken, String accountName, FetchBlockedThingsListener fetchBlockedThingsListener) {
|
||||
LemmyAPI lemmyAPI = mRetrofit.create(LemmyAPI.class);
|
||||
|
||||
Call<String> call = lemmyAPI.getSiteInfo(accessToken);
|
||||
call.enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(Call<String> call, retrofit2.Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
String siteInfo = response.body();
|
||||
if (siteInfo != null) {
|
||||
List<BlockedUserData> blockedUsers = new ArrayList<>();
|
||||
List<BlockedCommunityData> blockedCommunities = new ArrayList<>();
|
||||
try {
|
||||
JSONObject siteInfoJson = new JSONObject(siteInfo).getJSONObject("my_user");
|
||||
JSONArray blockedUsersJson = (siteInfoJson.has("person_blocks")) ? siteInfoJson.getJSONArray("person_blocks") : null;
|
||||
JSONArray blockedCommunitiesJson = (siteInfoJson.has("community_blocks")) ? siteInfoJson.getJSONArray("community_blocks") : null;
|
||||
if (blockedUsersJson != null) {
|
||||
for (int i = 0; i < blockedUsersJson.length(); i++) {
|
||||
JSONObject blockedUserJson = blockedUsersJson.getJSONObject(i).getJSONObject("target");
|
||||
int id = blockedUserJson.getInt("id");
|
||||
String name = blockedUserJson.getString("name");
|
||||
String avatar = "";
|
||||
if (blockedUserJson.has("avatar"))
|
||||
avatar = blockedUserJson.getString("avatar");
|
||||
|
||||
String qualifiedName = LemmyUtils.actorID2FullName(blockedUserJson.getString("actor_id"));
|
||||
BlockedUserData blockedUserData = new BlockedUserData(id, name, avatar, qualifiedName, accountName);
|
||||
|
||||
blockedUsers.add(blockedUserData);
|
||||
}
|
||||
}
|
||||
if (blockedCommunitiesJson != null) {
|
||||
for (int i = 0; i < blockedCommunitiesJson.length(); i++) {
|
||||
JSONObject blockedCommunityJson = blockedCommunitiesJson.getJSONObject(i);
|
||||
SubredditData blockedCommunityData = ParseSubredditData.parseSubredditData(blockedCommunityJson, true);
|
||||
blockedCommunities.add(new BlockedCommunityData(blockedCommunityData, accountName));
|
||||
}
|
||||
}
|
||||
fetchBlockedThingsListener.onFetchBlockedThingsSuccess(blockedUsers, blockedCommunities);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
fetchBlockedThingsListener.onFetchBlockedThingsFailure();
|
||||
}
|
||||
} else {
|
||||
fetchBlockedThingsListener.onFetchBlockedThingsFailure();
|
||||
}
|
||||
} else {
|
||||
fetchBlockedThingsListener.onFetchBlockedThingsFailure();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Call<String> call, Throwable t) {
|
||||
fetchBlockedThingsListener.onFetchBlockedThingsFailure();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public interface FetchBlockedThingsListener {
|
||||
void onFetchBlockedThingsSuccess(List<BlockedUserData> blockedUsers, List<BlockedCommunityData> blockedCommunities);
|
||||
|
||||
void onFetchBlockedThingsFailure();
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -40,19 +41,16 @@ import eu.toldi.infinityforlemmy.events.ChangeNSFWEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.fragments.CommentsListingFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class AccountSavedThingActivity extends BaseActivity implements ActivityToolbarInterface,
|
||||
PostLayoutBottomSheetFragment.PostLayoutSelectionCallback, MarkPostAsReadInterface {
|
||||
|
||||
@Inject
|
||||
@Named("oauth")
|
||||
Retrofit mOauthRetrofit;
|
||||
@Inject
|
||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||
@Inject
|
||||
@@ -68,10 +66,15 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
|
||||
@Inject
|
||||
MarkPostAsRead markPostAsRead;
|
||||
private FragmentManager fragmentManager;
|
||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
|
||||
private String mAccountQualifiedName;
|
||||
private PostLayoutBottomSheetFragment postLayoutBottomSheetFragment;
|
||||
private ActivityAccountSavedThingBinding binding;
|
||||
|
||||
@@ -120,6 +123,7 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
|
||||
initializeViewPager();
|
||||
}
|
||||
@@ -253,7 +257,17 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
||||
|
||||
@Override
|
||||
public void markPostAsRead(Post post) {
|
||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
||||
markPostAsRead.markPostAsRead(post.getId(), mAccessToken, new MarkPostAsRead.MarkPostAsReadListener() {
|
||||
@Override
|
||||
public void onMarkPostAsReadSuccess() {
|
||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMarkPostAsReadFailed() {
|
||||
Toast.makeText(AccountSavedThingActivity.this, R.string.mark_post_as_read_failed, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private class SectionsPagerAdapter extends FragmentStateAdapter {
|
||||
@@ -269,7 +283,7 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
||||
PostFragment fragment = new PostFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_USER);
|
||||
bundle.putString(PostFragment.EXTRA_USER_NAME, mAccountName);
|
||||
bundle.putString(PostFragment.EXTRA_USER_NAME, mAccountQualifiedName);
|
||||
bundle.putString(PostFragment.EXTRA_USER_WHERE, PostPagingSource.USER_WHERE_SAVED);
|
||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||
@@ -279,7 +293,7 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
||||
}
|
||||
CommentsListingFragment fragment = new CommentsListingFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(CommentsListingFragment.EXTRA_USERNAME, mAccountName);
|
||||
bundle.putString(CommentsListingFragment.EXTRA_USERNAME, mAccountQualifiedName);
|
||||
bundle.putString(CommentsListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(CommentsListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||
bundle.putBoolean(CommentsListingFragment.EXTRA_ARE_SAVED_COMMENTS, true);
|
||||
|
||||
@@ -39,6 +39,9 @@ import androidx.viewpager2.widget.ViewPager2;
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import com.google.android.material.shape.CornerFamily;
|
||||
import com.google.android.material.shape.MaterialShapeDrawable;
|
||||
import com.google.android.material.shape.ShapeAppearanceModel;
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
@@ -377,9 +380,18 @@ public abstract class BaseActivity extends AppCompatActivity implements CustomFo
|
||||
button.setTextColor(customThemeWrapper.getFABIconColor());
|
||||
}
|
||||
|
||||
protected void applyFABTheme(FloatingActionButton fab) {
|
||||
protected void applyFABTheme(FloatingActionButton fab, boolean isCircular) {
|
||||
fab.setBackgroundTintList(ColorStateList.valueOf(customThemeWrapper.getColorAccent()));
|
||||
fab.setImageTintList(ColorStateList.valueOf(customThemeWrapper.getFABIconColor()));
|
||||
if (isCircular) {
|
||||
ShapeAppearanceModel shapeAppearanceModel = ShapeAppearanceModel.builder()
|
||||
.setAllCorners(CornerFamily.ROUNDED, 100) // Adjust the radius value to control the roundness
|
||||
.build();
|
||||
|
||||
// Apply the circular shape to the FAB
|
||||
MaterialShapeDrawable shapeDrawable = new MaterialShapeDrawable(shapeAppearanceModel);
|
||||
fab.setShapeAppearanceModel(shapeAppearanceModel);
|
||||
}
|
||||
}
|
||||
|
||||
protected void fixViewPager2Sensitivity(ViewPager2 viewPager2) {
|
||||
|
||||
@@ -0,0 +1,462 @@
|
||||
package eu.toldi.infinityforlemmy.activities;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.core.view.inputmethod.EditorInfoCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentPagerAdapter;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.ActivityToolbarInterface;
|
||||
import eu.toldi.infinityforlemmy.FragmentCommunicator;
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.account.FetchBlockedThings;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.InsertBlockedThings;
|
||||
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData;
|
||||
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.ViewPagerBugFixed;
|
||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||
import eu.toldi.infinityforlemmy.events.GoBackToMainPageEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.fragments.BlockedCommunitiesListingFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.BlockedUsersListingFragment;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
|
||||
public class BlockedThingListingActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||
|
||||
public static final String EXTRA_SHOW_MULTIREDDITS = "ESM";
|
||||
private static final String INSERT_SUBSCRIBED_SUBREDDIT_STATE = "ISSS";
|
||||
private static final String INSERT_MULTIREDDIT_STATE = "IMS";
|
||||
|
||||
@BindView(R.id.coordinator_layout_subscribed_thing_listing_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@BindView(R.id.appbar_layout_subscribed_thing_listing_activity)
|
||||
AppBarLayout appBarLayout;
|
||||
@BindView(R.id.collapsing_toolbar_layout_subscribed_thing_listing_activity)
|
||||
CollapsingToolbarLayout collapsingToolbarLayout;
|
||||
@BindView(R.id.toolbar_subscribed_thing_listing_activity)
|
||||
Toolbar toolbar;
|
||||
@BindView(R.id.search_edit_text_subscribed_thing_listing_activity)
|
||||
EditText searchEditText;
|
||||
@BindView(R.id.tab_layout_subscribed_thing_listing_activity)
|
||||
TabLayout tabLayout;
|
||||
@BindView(R.id.view_pager_subscribed_thing_listing_activity)
|
||||
ViewPagerBugFixed viewPager;
|
||||
@BindView(R.id.fab_subscribed_thing_listing_activity)
|
||||
FloatingActionButton fab;
|
||||
@Inject
|
||||
@Named("oauth")
|
||||
Retrofit mOauthRetrofit;
|
||||
|
||||
@Inject
|
||||
@Named("no_oauth")
|
||||
RetrofitHolder mRetrofit;
|
||||
@Inject
|
||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||
@Inject
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
@Inject
|
||||
@Named("current_account")
|
||||
SharedPreferences mCurrentAccountSharedPreferences;
|
||||
@Inject
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
|
||||
private String mAccountQualifiedName;
|
||||
private boolean mInsertSuccess = false;
|
||||
private boolean mInsertMultiredditSuccess = false;
|
||||
private boolean showMultiReddits = false;
|
||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||
private Menu mMenu;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.activity_subscribed_thing_listing);
|
||||
|
||||
ButterKnife.bind(this);
|
||||
|
||||
EventBus.getDefault().register(this);
|
||||
|
||||
applyCustomTheme();
|
||||
|
||||
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.SWIPE_RIGHT_TO_GO_BACK, true)) {
|
||||
mSliderPanel = Slidr.attach(this);
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
Window window = getWindow();
|
||||
|
||||
if (isChangeStatusBarIconColor()) {
|
||||
addOnOffsetChangedListener(appBarLayout);
|
||||
}
|
||||
|
||||
if (isImmersiveInterface()) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
window.setDecorFitsSystemWindows(false);
|
||||
} else {
|
||||
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
|
||||
}
|
||||
adjustToolbar(toolbar);
|
||||
|
||||
int navBarHeight = getNavBarHeight();
|
||||
if (navBarHeight > 0) {
|
||||
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
|
||||
params.bottomMargin += navBarHeight;
|
||||
fab.setLayoutParams(params);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
setToolbarGoToTop(toolbar);
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, "-");
|
||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, "-");
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
mInsertSuccess = savedInstanceState.getBoolean(INSERT_SUBSCRIBED_SUBREDDIT_STATE);
|
||||
mInsertMultiredditSuccess = savedInstanceState.getBoolean(INSERT_MULTIREDDIT_STATE);
|
||||
} else {
|
||||
showMultiReddits = getIntent().getBooleanExtra(EXTRA_SHOW_MULTIREDDITS, false);
|
||||
}
|
||||
|
||||
if (mAccessToken == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
searchEditText.setImeOptions(searchEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
||||
}
|
||||
|
||||
searchEditText.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable editable) {
|
||||
sectionsPagerAdapter.changeSearchQuery(editable.toString());
|
||||
}
|
||||
});
|
||||
initializeViewPagerAndLoadSubscriptions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SharedPreferences getDefaultSharedPreferences() {
|
||||
return mSharedPreferences;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CustomThemeWrapper getCustomThemeWrapper() {
|
||||
return mCustomThemeWrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyCustomTheme() {
|
||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||
applyTabLayoutTheme(tabLayout);
|
||||
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
searchEditText.setTextColor(mCustomThemeWrapper.getToolbarPrimaryTextAndIconColor());
|
||||
searchEditText.setHintTextColor(mCustomThemeWrapper.getToolbarSecondaryTextColor());
|
||||
}
|
||||
|
||||
private void initializeViewPagerAndLoadSubscriptions() {
|
||||
fab.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(this, CreateMultiRedditActivity.class);
|
||||
startActivity(intent);
|
||||
});
|
||||
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
||||
viewPager.setAdapter(sectionsPagerAdapter);
|
||||
viewPager.setOffscreenPageLimit(2);
|
||||
if (viewPager.getCurrentItem() != 2) {
|
||||
fab.hide();
|
||||
}
|
||||
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
if (position == 0) {
|
||||
unlockSwipeRightToGoBack();
|
||||
fab.hide();
|
||||
} else {
|
||||
lockSwipeRightToGoBack();
|
||||
if (position != 2) {
|
||||
fab.hide();
|
||||
} else {
|
||||
fab.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
tabLayout.setupWithViewPager(viewPager);
|
||||
|
||||
if (showMultiReddits) {
|
||||
viewPager.setCurrentItem(2, false);
|
||||
}
|
||||
|
||||
loadBlocks(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.subscribed_thing_listing_activity, menu);
|
||||
mMenu = menu;
|
||||
applyMenuItemTheme(menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||
if (item.getItemId() == R.id.action_search_subscribed_thing_listing_activity) {
|
||||
item.setVisible(false);
|
||||
searchEditText.setVisibility(View.VISIBLE);
|
||||
searchEditText.requestFocus();
|
||||
if (searchEditText.requestFocus()) {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.showSoftInput(searchEditText, InputMethodManager.SHOW_IMPLICIT);
|
||||
}
|
||||
return true;
|
||||
} else if (item.getItemId() == android.R.id.home) {
|
||||
if (searchEditText.getVisibility() == View.VISIBLE) {
|
||||
Utils.hideKeyboard(this);
|
||||
searchEditText.setVisibility(View.GONE);
|
||||
searchEditText.setText("");
|
||||
mMenu.findItem(R.id.action_search_subscribed_thing_listing_activity).setVisible(true);
|
||||
sectionsPagerAdapter.changeSearchQuery("");
|
||||
return true;
|
||||
}
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (searchEditText.getVisibility() == View.VISIBLE) {
|
||||
Utils.hideKeyboard(this);
|
||||
searchEditText.setVisibility(View.GONE);
|
||||
searchEditText.setText("");
|
||||
mMenu.findItem(R.id.action_search_subscribed_thing_listing_activity).setVisible(true);
|
||||
sectionsPagerAdapter.changeSearchQuery("");
|
||||
} else {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putBoolean(INSERT_SUBSCRIBED_SUBREDDIT_STATE, mInsertSuccess);
|
||||
outState.putBoolean(INSERT_MULTIREDDIT_STATE, mInsertMultiredditSuccess);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
EventBus.getDefault().unregister(this);
|
||||
}
|
||||
|
||||
public void loadBlocks(boolean forceLoad) {
|
||||
if (mAccessToken != null && !(!forceLoad && mInsertSuccess)) {
|
||||
FetchBlockedThings.fetchBlockedThings(mRetrofit.getRetrofit(), mAccessToken, mAccountQualifiedName, new FetchBlockedThings.FetchBlockedThingsListener() {
|
||||
@Override
|
||||
public void onFetchBlockedThingsSuccess(List<BlockedUserData> blockedUsers, List<BlockedCommunityData> blockedCommunities) {
|
||||
InsertBlockedThings.insertBlockedThings(mExecutor, new Handler(), mRedditDataRoomDatabase, mAccountQualifiedName,
|
||||
blockedCommunities, blockedUsers, () -> {
|
||||
mInsertSuccess = true;
|
||||
sectionsPagerAdapter.stopRefreshProgressbar();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchBlockedThingsFailure() {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Subscribe
|
||||
public void onAccountSwitchEvent(SwitchAccountEvent event) {
|
||||
finish();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void goBackToMainPageEvent(GoBackToMainPageEvent event) {
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLongPress() {
|
||||
if (sectionsPagerAdapter != null) {
|
||||
sectionsPagerAdapter.goBackToTop();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void lockSwipeRightToGoBack() {
|
||||
if (mSliderPanel != null) {
|
||||
mSliderPanel.lock();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unlockSwipeRightToGoBack() {
|
||||
if (mSliderPanel != null) {
|
||||
mSliderPanel.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
private class SectionsPagerAdapter extends FragmentPagerAdapter {
|
||||
|
||||
private BlockedCommunitiesListingFragment blockedCommunitiesListingFragment;
|
||||
private BlockedUsersListingFragment followedUsersListingFragment;
|
||||
|
||||
public SectionsPagerAdapter(FragmentManager fm) {
|
||||
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Fragment getItem(int position) {
|
||||
switch (position) {
|
||||
default:
|
||||
case 0: {
|
||||
BlockedCommunitiesListingFragment fragment = new BlockedCommunitiesListingFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putBoolean(BlockedCommunitiesListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, false);
|
||||
bundle.putString(BlockedCommunitiesListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||
bundle.putString(BlockedCommunitiesListingFragment.EXTRA_ACCOUNT_QUALIFIED_NAME, mAccountQualifiedName);
|
||||
bundle.putString(BlockedCommunitiesListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
fragment.setArguments(bundle);
|
||||
return fragment;
|
||||
}
|
||||
case 1: {
|
||||
BlockedUsersListingFragment fragment = new BlockedUsersListingFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(BlockedUsersListingFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||
bundle.putString(BlockedUsersListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
fragment.setArguments(bundle);
|
||||
return fragment;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getPageTitle(int position) {
|
||||
switch (position) {
|
||||
case 0:
|
||||
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.communities));
|
||||
case 1:
|
||||
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.users));
|
||||
case 2:
|
||||
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.multi_reddits));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Object instantiateItem(@NonNull ViewGroup container, int position) {
|
||||
Fragment fragment = (Fragment) super.instantiateItem(container, position);
|
||||
if (position == 0) {
|
||||
blockedCommunitiesListingFragment = (BlockedCommunitiesListingFragment) fragment;
|
||||
} else if (position == 1) {
|
||||
followedUsersListingFragment = (BlockedUsersListingFragment) fragment;
|
||||
}
|
||||
|
||||
return fragment;
|
||||
}
|
||||
|
||||
void stopRefreshProgressbar() {
|
||||
if (blockedCommunitiesListingFragment != null) {
|
||||
((FragmentCommunicator) blockedCommunitiesListingFragment).stopRefreshProgressbar();
|
||||
}
|
||||
if (followedUsersListingFragment != null) {
|
||||
((FragmentCommunicator) followedUsersListingFragment).stopRefreshProgressbar();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void goBackToTop() {
|
||||
if (viewPager.getCurrentItem() == 0) {
|
||||
blockedCommunitiesListingFragment.goBackToTop();
|
||||
} else if (viewPager.getCurrentItem() == 1) {
|
||||
followedUsersListingFragment.goBackToTop();
|
||||
}
|
||||
}
|
||||
|
||||
void changeSearchQuery(String searchQuery) {
|
||||
if (blockedCommunitiesListingFragment != null) {
|
||||
blockedCommunitiesListingFragment.changeSearchQuery(searchQuery);
|
||||
}
|
||||
if (followedUsersListingFragment != null) {
|
||||
followedUsersListingFragment.changeSearchQuery(searchQuery);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,17 +39,10 @@ import java.util.concurrent.Executor;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.MarkwonPlugin;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
|
||||
import eu.toldi.infinityforlemmy.UploadedImage;
|
||||
import eu.toldi.infinityforlemmy.account.Account;
|
||||
@@ -66,6 +59,13 @@ import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.MarkwonPlugin;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class CommentActivity extends BaseActivity implements UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener {
|
||||
@@ -226,7 +226,7 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
|
||||
|
||||
setSupportActionBar(binding.commentToolbar);
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||
@@ -449,10 +449,10 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
|
||||
Toast.makeText(CommentActivity.this, R.string.error_getting_image, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit.getRetrofit(), mUploadMediaRetrofit,
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, binding.commentCommentEditText, binding.commentCoordinatorLayout, data.getData(), uploadedImages);
|
||||
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit.getRetrofit(), mUploadMediaRetrofit,
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, binding.commentCommentEditText, binding.commentCoordinatorLayout, capturedImageUri, uploadedImages);
|
||||
} else if (requestCode == MARKDOWN_PREVIEW_REQUEST_CODE) {
|
||||
sendComment(mMenu == null ? null : mMenu.findItem(R.id.action_send_comment_activity));
|
||||
@@ -513,8 +513,8 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
|
||||
int start = Math.max(binding.commentCommentEditText.getSelectionStart(), 0);
|
||||
int end = Math.max(binding.commentCommentEditText.getSelectionEnd(), 0);
|
||||
binding.commentCommentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
||||
"[" + uploadedImage.imageName + "](" + uploadedImage.imageUrl + ")",
|
||||
0, "[]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
"",
|
||||
0, "![]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -51,6 +51,7 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeViewModel;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.events.RecreateActivityEvent;
|
||||
import eu.toldi.infinityforlemmy.utils.CustomThemeSharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
|
||||
public class CustomThemeListingActivity extends BaseActivity implements
|
||||
@@ -154,7 +155,7 @@ public class CustomThemeListingActivity extends BaseActivity implements
|
||||
@Override
|
||||
protected void applyCustomTheme() {
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||
applyFABTheme(fab);
|
||||
applyFABTheme(fab, sharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -32,8 +32,6 @@ import org.greenrobot.eventbus.Subscribe;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -43,15 +41,16 @@ import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
|
||||
import eu.toldi.infinityforlemmy.UploadedImage;
|
||||
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||
import eu.toldi.infinityforlemmy.dto.EditCommentDTO;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import retrofit2.Call;
|
||||
@@ -84,8 +83,8 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
|
||||
@BindView(R.id.markdown_bottom_bar_recycler_view_edit_comment_activity)
|
||||
RecyclerView markdownBottomBarRecyclerView;
|
||||
@Inject
|
||||
@Named("oauth")
|
||||
Retrofit mOauthRetrofit;
|
||||
@Named("no_oauth")
|
||||
RetrofitHolder retrofit;
|
||||
@Inject
|
||||
@Named("upload_media")
|
||||
Retrofit mUploadMediaRetrofit;
|
||||
@@ -99,7 +98,7 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
private String mFullName;
|
||||
private int mCommentId;
|
||||
private String mAccessToken;
|
||||
private String mCommentContent;
|
||||
private boolean isSubmitting = false;
|
||||
@@ -129,7 +128,10 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
mFullName = getIntent().getStringExtra(EXTRA_FULLNAME);
|
||||
mCommentId = getIntent().getIntExtra(EXTRA_FULLNAME, 0);
|
||||
if (mCommentId == 0) {
|
||||
finish();
|
||||
}
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mCommentContent = getIntent().getStringExtra(EXTRA_CONTENT);
|
||||
contentEditText.setText(mCommentContent);
|
||||
@@ -225,12 +227,7 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
|
||||
|
||||
String content = contentEditText.getText().toString();
|
||||
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(APIUtils.THING_ID_KEY, mFullName);
|
||||
params.put(APIUtils.TEXT_KEY, content);
|
||||
|
||||
mOauthRetrofit.create(RedditAPI.class)
|
||||
.editPostOrComment(APIUtils.getOAuthHeader(mAccessToken), params)
|
||||
retrofit.getRetrofit().create(LemmyAPI.class).commentEdit(new EditCommentDTO(mCommentId, content, null, null, mAccessToken))
|
||||
.enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
@@ -278,10 +275,10 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
|
||||
Toast.makeText(EditCommentActivity.this, R.string.error_getting_image, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
Utils.uploadImageToReddit(this, mExecutor, mOauthRetrofit, mUploadMediaRetrofit,
|
||||
Utils.uploadImageToReddit(this, mExecutor, retrofit,
|
||||
mAccessToken, contentEditText, coordinatorLayout, data.getData(), uploadedImages);
|
||||
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
|
||||
Utils.uploadImageToReddit(this, mExecutor, mOauthRetrofit, mUploadMediaRetrofit,
|
||||
Utils.uploadImageToReddit(this, mExecutor, retrofit,
|
||||
mAccessToken, contentEditText, coordinatorLayout, capturedImageUri, uploadedImages);
|
||||
} else if (requestCode == MARKDOWN_PREVIEW_REQUEST_CODE) {
|
||||
editComment();
|
||||
@@ -348,7 +345,7 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
|
||||
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
||||
"[" + uploadedImage.imageName + "](" + uploadedImage.imageUrl + ")",
|
||||
0, "[]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
"",
|
||||
0, "![]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,17 +3,20 @@ package eu.toldi.infinityforlemmy.activities;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Bitmap;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.provider.MediaStore;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -23,18 +26,22 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.json.JSONException;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -44,17 +51,20 @@ import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
|
||||
import eu.toldi.infinityforlemmy.UploadedImage;
|
||||
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||
import eu.toldi.infinityforlemmy.dto.EditPostDTO;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.UploadImageUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
@@ -63,16 +73,19 @@ import retrofit2.Retrofit;
|
||||
|
||||
public class EditPostActivity extends BaseActivity implements UploadImageEnabledActivity {
|
||||
|
||||
public static final String EXTRA_TITLE = "ET";
|
||||
public static final String EXTRA_CONTENT = "EC";
|
||||
public static final String EXTRA_FULLNAME = "EF";
|
||||
public static final String EXTRA_DATA = "ED";
|
||||
|
||||
|
||||
private static final int UPLOAD_IMAGE_REQUEST_CODE = 1;
|
||||
private static final int PICK_IMAGE_REQUEST_CODE = 100;
|
||||
private static final int CAPTURE_IMAGE_REQUEST_CODE = 200;
|
||||
private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300;
|
||||
|
||||
private static final String UPLOADED_IMAGES_STATE = "UIS";
|
||||
|
||||
private static final String picturePattern = "https:\\/\\/[^\\/]+\\/pictrs\\/image\\/([a-f\\d-]+\\.jpeg)";
|
||||
|
||||
|
||||
@BindView(R.id.coordinator_layout_edit_post_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@BindView(R.id.appbar_layout_edit_post_activity)
|
||||
@@ -80,16 +93,25 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
||||
@BindView(R.id.toolbar_edit_post_activity)
|
||||
Toolbar toolbar;
|
||||
@BindView(R.id.post_title_text_view_edit_post_activity)
|
||||
TextView titleTextView;
|
||||
EditText titleEditText;
|
||||
@BindView(R.id.divider_edit_post_activity)
|
||||
View divider;
|
||||
@BindView(R.id.post_text_content_edit_text_edit_post_activity)
|
||||
EditText contentEditText;
|
||||
@BindView(R.id.markdown_bottom_bar_recycler_view_edit_post_activity)
|
||||
RecyclerView markdownBottomBarRecyclerView;
|
||||
@BindView(R.id.post_link_edit_text_post_edit_activity)
|
||||
EditText linkEditText;
|
||||
|
||||
@BindView(R.id.upload_image_button_post_edit_activity)
|
||||
MaterialButton uploadImageButton;
|
||||
|
||||
@BindView(R.id.image_view_post_edit_activity)
|
||||
ImageView imageView;
|
||||
|
||||
@Inject
|
||||
@Named("oauth")
|
||||
Retrofit mOauthRetrofit;
|
||||
@Named("no_oauth")
|
||||
RetrofitHolder mRetrofit;
|
||||
@Inject
|
||||
@Named("upload_media")
|
||||
Retrofit mUploadMediaRetrofit;
|
||||
@@ -103,13 +125,16 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
private String mFullName;
|
||||
private Post mPost;
|
||||
|
||||
private String mAccessToken;
|
||||
private String mPostContent;
|
||||
private boolean isSubmitting = false;
|
||||
private Uri capturedImageUri;
|
||||
private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
|
||||
|
||||
|
||||
private RequestManager mGlide;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
@@ -137,11 +162,49 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
mFullName = getIntent().getStringExtra(EXTRA_FULLNAME);
|
||||
mPost = getIntent().getParcelableExtra(EXTRA_DATA);
|
||||
if (mPost == null) {
|
||||
finish();
|
||||
}
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
titleTextView.setText(getIntent().getStringExtra(EXTRA_TITLE));
|
||||
mPostContent = getIntent().getStringExtra(EXTRA_CONTENT);
|
||||
contentEditText.setText(mPostContent);
|
||||
titleEditText.setText(mPost.getTitle());
|
||||
contentEditText.setText(mPost.getSelfText());
|
||||
linkEditText.setText(mPost.getUrl());
|
||||
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
if (mPost.getUrl() != null && mPost.getUrl().matches(picturePattern)) {
|
||||
loadImage();
|
||||
}
|
||||
|
||||
linkEditText.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||
if (charSequence.toString().matches(picturePattern)) {
|
||||
loadImage();
|
||||
} else {
|
||||
uploadImageButton.setVisibility(View.VISIBLE);
|
||||
imageView.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable editable) {
|
||||
}
|
||||
});
|
||||
|
||||
uploadImageButton.setOnClickListener(view -> {
|
||||
Intent intent = new Intent();
|
||||
intent.setType("image/*");
|
||||
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_from_gallery)), UPLOAD_IMAGE_REQUEST_CODE);
|
||||
});
|
||||
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
uploadedImages = savedInstanceState.getParcelableArrayList(UPLOADED_IMAGES_STATE);
|
||||
@@ -189,18 +252,27 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
||||
protected void applyCustomTheme() {
|
||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
|
||||
titleTextView.setTextColor(mCustomThemeWrapper.getPostTitleColor());
|
||||
titleEditText.setTextColor(mCustomThemeWrapper.getPostTitleColor());
|
||||
divider.setBackgroundColor(mCustomThemeWrapper.getPostTitleColor());
|
||||
contentEditText.setTextColor(mCustomThemeWrapper.getPostContentColor());
|
||||
linkEditText.setTextColor(mCustomThemeWrapper.getPostContentColor());
|
||||
|
||||
uploadImageButton.setTextColor(mCustomThemeWrapper.getButtonTextColor());
|
||||
uploadImageButton.setBackgroundColor(mCustomThemeWrapper.getColorPrimaryLightTheme());
|
||||
if (titleTypeface != null) {
|
||||
titleTextView.setTypeface(titleTypeface);
|
||||
titleEditText.setTypeface(titleTypeface);
|
||||
}
|
||||
if (contentTypeface != null) {
|
||||
contentEditText.setTypeface(contentTypeface);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadImage() {
|
||||
uploadImageButton.setVisibility(View.GONE);
|
||||
imageView.setVisibility(View.VISIBLE);
|
||||
mGlide.load(mPost.getUrl()).into(imageView);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
@@ -236,21 +308,19 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
||||
isSubmitting = true;
|
||||
|
||||
Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show();
|
||||
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(APIUtils.THING_ID_KEY, mFullName);
|
||||
params.put(APIUtils.TEXT_KEY, contentEditText.getText().toString());
|
||||
|
||||
mOauthRetrofit.create(RedditAPI.class)
|
||||
.editPostOrComment(APIUtils.getOAuthHeader(mAccessToken), params)
|
||||
mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), titleEditText.getText().toString(), (linkEditText.getText().toString().isEmpty()) ? null : linkEditText.getText().toString(), contentEditText.getText().toString(), mPost.isNSFW(), null, mAccessToken))
|
||||
.enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
isSubmitting = false;
|
||||
Toast.makeText(EditPostActivity.this, R.string.edit_success, Toast.LENGTH_SHORT).show();
|
||||
Intent returnIntent = new Intent();
|
||||
setResult(RESULT_OK, returnIntent);
|
||||
finish();
|
||||
if (response.isSuccessful()) {
|
||||
Toast.makeText(EditPostActivity.this, R.string.edit_success, Toast.LENGTH_SHORT).show();
|
||||
Intent returnIntent = new Intent();
|
||||
setResult(RESULT_OK, returnIntent);
|
||||
finish();
|
||||
} else {
|
||||
Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -272,15 +342,49 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
||||
Toast.makeText(EditPostActivity.this, R.string.error_getting_image, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
Utils.uploadImageToReddit(this, mExecutor, mOauthRetrofit, mUploadMediaRetrofit,
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, contentEditText, coordinatorLayout, data.getData(), uploadedImages);
|
||||
} else if (requestCode == UPLOAD_IMAGE_REQUEST_CODE) {
|
||||
if (data == null) {
|
||||
Snackbar.make(coordinatorLayout, R.string.error_getting_image, Snackbar.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
Toast.makeText(this, R.string.uploading_image, Toast.LENGTH_SHORT).show();
|
||||
Handler handler = new Handler();
|
||||
Uri imageUri = data.getData();
|
||||
mExecutor.execute(() -> {
|
||||
try {
|
||||
Bitmap bitmap = Glide.with(getApplication()).asBitmap().load(imageUri).submit().get();
|
||||
String imageUrlOrError = UploadImageUtils.uploadImage(mRetrofit, mAccessToken, bitmap);
|
||||
handler.post(() -> {
|
||||
if (imageUrlOrError != null && !imageUrlOrError.startsWith("Error: ")) {
|
||||
String fileName = Utils.getFileName(this, imageUri);
|
||||
if (fileName == null) {
|
||||
fileName = imageUrlOrError;
|
||||
}
|
||||
mPost.setUrl(imageUrlOrError);
|
||||
linkEditText.setText(imageUrlOrError);
|
||||
Snackbar.make(coordinatorLayout, R.string.upload_image_success, Snackbar.LENGTH_LONG).show();
|
||||
} else {
|
||||
Toast.makeText(this, R.string.upload_image_failed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
} catch (ExecutionException | InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
handler.post(() -> Toast.makeText(this, R.string.get_image_bitmap_failed, Toast.LENGTH_LONG).show());
|
||||
} catch (XmlPullParserException | JSONException | IOException e) {
|
||||
e.printStackTrace();
|
||||
handler.post(() -> Toast.makeText(this, R.string.error_processing_image, Toast.LENGTH_LONG).show());
|
||||
}
|
||||
});
|
||||
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
|
||||
Utils.uploadImageToReddit(this, mExecutor, mOauthRetrofit, mUploadMediaRetrofit,
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, contentEditText, coordinatorLayout, capturedImageUri, uploadedImages);
|
||||
} else if (requestCode == MARKDOWN_PREVIEW_REQUEST_CODE) {
|
||||
editPost();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -304,7 +408,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
||||
if (isSubmitting) {
|
||||
promptAlertDialog(R.string.exit_when_submit, R.string.exit_when_edit_post_detail);
|
||||
} else {
|
||||
if (contentEditText.getText().toString().equals(mPostContent)) {
|
||||
if (contentEditText.getText().toString().equals(mPost.getSelfText())) {
|
||||
finish();
|
||||
} else {
|
||||
promptAlertDialog(R.string.discard, R.string.discard_detail);
|
||||
@@ -352,7 +456,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
||||
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
||||
"[" + uploadedImage.imageName + "](" + uploadedImage.imageUrl + ")",
|
||||
0, "[]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
"",
|
||||
0, "![]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@ import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
@@ -52,6 +51,7 @@ import eu.toldi.infinityforlemmy.user.UserViewModel;
|
||||
import eu.toldi.infinityforlemmy.utils.EditProfileUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import pl.droidsonroids.gif.GifImageView;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
@@ -135,7 +135,7 @@ public class EditProfileActivity extends BaseActivity {
|
||||
startPickImage(PICK_IMAGE_AVATAR_REQUEST_CODE);
|
||||
});
|
||||
|
||||
final RequestManager glide = Glide.with(this);
|
||||
final RequestManager glide = Glide.with(getApplication());
|
||||
final UserViewModel.Factory userViewModelFactory =
|
||||
new UserViewModel.Factory(getApplication(), mRedditDataRoomDatabase, mAccountName);
|
||||
final UserViewModel userViewModel =
|
||||
|
||||
@@ -103,6 +103,8 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
||||
public SubredditViewModel mSubredditViewModel;
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
|
||||
private String mAccountQualifiedName;
|
||||
private String name;
|
||||
private String userWhere;
|
||||
private int postType;
|
||||
@@ -158,6 +160,7 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
name = getIntent().getStringExtra(EXTRA_NAME);
|
||||
postType = getIntent().getIntExtra(EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
||||
|
||||
@@ -262,14 +265,14 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
||||
protected void applyCustomTheme() {
|
||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||
applyFABTheme(fab);
|
||||
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
}
|
||||
|
||||
private void bindView(PostFilter postFilter, boolean initializeFragment) {
|
||||
switch (postType) {
|
||||
case PostPagingSource.TYPE_FRONT_PAGE:
|
||||
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
||||
getSupportActionBar().setTitle(R.string.home);
|
||||
getSupportActionBar().setTitle(R.string.subscribed_feed);
|
||||
break;
|
||||
case PostPagingSource.TYPE_SEARCH:
|
||||
getSupportActionBar().setTitle(R.string.search);
|
||||
@@ -470,7 +473,7 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
||||
|
||||
@Override
|
||||
public void markPostAsRead(Post post) {
|
||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -29,12 +29,6 @@ import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.MarkwonPlugin;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
@@ -45,6 +39,12 @@ import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.MarkwonPlugin;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
|
||||
public class FullMarkdownActivity extends BaseActivity {
|
||||
|
||||
|
||||
@@ -47,7 +47,6 @@ import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RecyclerViewContentScrollingInterface;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||
@@ -56,15 +55,12 @@ import eu.toldi.infinityforlemmy.events.PassPrivateMessageEvent;
|
||||
import eu.toldi.infinityforlemmy.events.PassPrivateMessageIndexEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.fragments.InboxFragment;
|
||||
import eu.toldi.infinityforlemmy.fragments.PrivateMessageFragment;
|
||||
import eu.toldi.infinityforlemmy.message.CommentInteraction;
|
||||
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
||||
import eu.toldi.infinityforlemmy.message.Message;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class InboxActivity extends BaseActivity implements ActivityToolbarInterface, RecyclerViewContentScrollingInterface {
|
||||
|
||||
@@ -93,9 +89,6 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
||||
@Named("base")
|
||||
RetrofitHolder mRetrofit;
|
||||
|
||||
@Inject
|
||||
@Named("oauth")
|
||||
Retrofit mOauthRetrofit;
|
||||
@Inject
|
||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||
@Inject
|
||||
@@ -188,7 +181,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent pmIntent = new Intent(this, SendPrivateMessageActivity.class);
|
||||
pmIntent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, thingEditText.getText().toString());
|
||||
//pmIntent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, thingEditText.getText().toString());
|
||||
startActivity(pmIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -201,7 +194,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent pmIntent = new Intent(this, SendPrivateMessageActivity.class);
|
||||
pmIntent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, thingEditText.getText().toString());
|
||||
//pmIntent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, thingEditText.getText().toString());
|
||||
startActivity(pmIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
@@ -233,7 +226,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
||||
mCoordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(mAppBarLayout, mCollapsingToolbarLayout, mToolbar);
|
||||
applyTabLayoutTheme(tabLayout);
|
||||
applyFABTheme(fab);
|
||||
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
}
|
||||
|
||||
private void getCurrentAccountAndFetchMessage(Bundle savedInstanceState) {
|
||||
@@ -272,13 +265,16 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
||||
}
|
||||
});
|
||||
viewPager2.setAdapter(sectionsPagerAdapter);
|
||||
viewPager2.setOffscreenPageLimit(2);
|
||||
viewPager2.setOffscreenPageLimit(3);
|
||||
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
||||
switch (position) {
|
||||
case 0:
|
||||
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.notifications));
|
||||
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.replies));
|
||||
break;
|
||||
case 1:
|
||||
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.mentions));
|
||||
break;
|
||||
case 2:
|
||||
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.messages));
|
||||
break;
|
||||
}
|
||||
@@ -306,31 +302,21 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
||||
return true;
|
||||
} else if (item.getItemId() == R.id.action_read_all_messages_inbox_activity) {
|
||||
if (mAccessToken != null) {
|
||||
Toast.makeText(this, R.string.please_wait, Toast.LENGTH_SHORT).show();
|
||||
mOauthRetrofit.create(RedditAPI.class).readAllMessages(APIUtils.getOAuthHeader(mAccessToken))
|
||||
.enqueue(new Callback<>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
Toast.makeText(InboxActivity.this, R.string.read_all_messages_success, Toast.LENGTH_SHORT).show();
|
||||
if (sectionsPagerAdapter != null) {
|
||||
sectionsPagerAdapter.readAllMessages();
|
||||
}
|
||||
EventBus.getDefault().post(new ChangeInboxCountEvent(0));
|
||||
} else {
|
||||
if (response.code() == 429) {
|
||||
Toast.makeText(InboxActivity.this, R.string.read_all_messages_time_limit, Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
Toast.makeText(InboxActivity.this, R.string.read_all_messages_failed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
ReadMessage.readAllMessages(mRetrofit.getRetrofit(), mAccessToken, new ReadMessage.ReadMessageListener() {
|
||||
@Override
|
||||
public void readSuccess() {
|
||||
Toast.makeText(InboxActivity.this, R.string.read_all_messages_success, Toast.LENGTH_SHORT).show();
|
||||
if (sectionsPagerAdapter != null) {
|
||||
sectionsPagerAdapter.readAllMessages();
|
||||
}
|
||||
EventBus.getDefault().post(new ChangeInboxCountEvent(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
Toast.makeText(InboxActivity.this, R.string.read_all_messages_failed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void readFailed() {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
} else if (item.getItemId() == android.R.id.home) {
|
||||
finish();
|
||||
@@ -345,7 +331,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
||||
if (resultCode == RESULT_OK && requestCode == SEARCH_USER_REQUEST_CODE && data != null) {
|
||||
String username = data.getStringExtra(SearchActivity.EXTRA_RETURN_USER_NAME);
|
||||
Intent intent = new Intent(this, SendPrivateMessageActivity.class);
|
||||
intent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, username);
|
||||
//intent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, username);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
@@ -442,7 +428,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
||||
}
|
||||
}
|
||||
|
||||
Message getPrivateMessage(int index) {
|
||||
CommentInteraction getPrivateMessage(int index) {
|
||||
if (viewPager2 == null || fragmentManager == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -456,26 +442,27 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
||||
@NonNull
|
||||
@Override
|
||||
public Fragment createFragment(int position) {
|
||||
if (position == 0) {
|
||||
InboxFragment fragment = new InboxFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(InboxFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_INBOX);
|
||||
fragment.setArguments(bundle);
|
||||
return fragment;
|
||||
} else {
|
||||
InboxFragment fragment = new InboxFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(InboxFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_MESSAGES);
|
||||
fragment.setArguments(bundle);
|
||||
return fragment;
|
||||
Fragment fragment = new InboxFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(InboxFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
switch (position) {
|
||||
case 0:
|
||||
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_REPLIES);
|
||||
break;
|
||||
case 1:
|
||||
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_MENTIONS);
|
||||
break;
|
||||
case 2:
|
||||
fragment = new PrivateMessageFragment();
|
||||
break;
|
||||
}
|
||||
fragment.setArguments(bundle);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return 2;
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,266 @@
|
||||
package eu.toldi.infinityforlemmy.activities;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.text.Spanned;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.google.android.material.card.MaterialCardView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.adapters.AdminRecyclerViewAdapter;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||
import eu.toldi.infinityforlemmy.databinding.ActivityInstanceInfoBinding;
|
||||
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||
import eu.toldi.infinityforlemmy.site.FetchSiteInfo;
|
||||
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
||||
import eu.toldi.infinityforlemmy.site.SiteStatistics;
|
||||
import eu.toldi.infinityforlemmy.user.BasicUserInfo;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.MarkwonPlugin;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
|
||||
public class InstanceInfoActivity extends BaseActivity {
|
||||
|
||||
@Inject
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
|
||||
@Inject
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
|
||||
@Inject
|
||||
@Named("no_oauth")
|
||||
RetrofitHolder mRetorifitHolder;
|
||||
|
||||
ActivityInstanceInfoBinding mInstanceInfoActivityViewBinding;
|
||||
private CoordinatorLayout coordinatorLayout;
|
||||
private Toolbar toolbar;
|
||||
private AppBarLayout appBarLayout;
|
||||
|
||||
private ConstraintLayout mLoadingConstraintLayout;
|
||||
|
||||
private MaterialCardView mStatisticsCardView;
|
||||
|
||||
private TextView mUsersTextView;
|
||||
private TextView mCommunitiesTextView;
|
||||
private TextView mPostsTextView;
|
||||
private TextView mCommentsTextView;
|
||||
private TextView mActiveUsersTextView;
|
||||
private ImageView mUsersImageView;
|
||||
private ImageView mCommunitiesImageView;
|
||||
private ImageView mPostsImageView;
|
||||
private ImageView mCommentsImageView;
|
||||
private ImageView mActiveUsersImageView;
|
||||
|
||||
private MaterialCardView mDescriptionCardView;
|
||||
|
||||
private RecyclerView mContentMarkdownView;
|
||||
private RecyclerView mAdminsRecyclerView;
|
||||
|
||||
private MaterialCardView mAdminsCardView;
|
||||
private MarkwonAdapter mMarkwonAdapter;
|
||||
private Markwon mPostDetailMarkwon;
|
||||
private AdminRecyclerViewAdapter mAdminAdapter;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
mInstanceInfoActivityViewBinding = ActivityInstanceInfoBinding.inflate(getLayoutInflater());
|
||||
View view = mInstanceInfoActivityViewBinding.getRoot();
|
||||
setImmersiveModeNotApplicable();
|
||||
|
||||
setContentView(view);
|
||||
setSupportActionBar(mInstanceInfoActivityViewBinding.toolbarInstanceInfoActivity);
|
||||
|
||||
setUpBindings();
|
||||
applyCustomTheme();
|
||||
|
||||
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.SWIPE_RIGHT_TO_GO_BACK, true)) {
|
||||
Slidr.attach(this);
|
||||
}
|
||||
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
// Remove transparency from navigation bar
|
||||
getWindow().setNavigationBarColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
|
||||
int markdownColor = customThemeWrapper.getPostContentColor();
|
||||
int postSpoilerBackgroundColor = markdownColor | 0xFF000000;
|
||||
int linkColor = customThemeWrapper.getLinkColor();
|
||||
|
||||
|
||||
MarkwonPlugin miscPlugin = new AbstractMarkwonPlugin() {
|
||||
@Override
|
||||
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
|
||||
if (InstanceInfoActivity.this.contentTypeface != null) {
|
||||
textView.setTypeface(InstanceInfoActivity.this.contentTypeface);
|
||||
}
|
||||
textView.setTextColor(markdownColor);
|
||||
textView.setHighlightColor(Color.TRANSPARENT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) {
|
||||
builder.linkResolver((view, link) -> {
|
||||
Intent intent = new Intent(InstanceInfoActivity.this, LinkResolverActivity.class);
|
||||
Uri uri = Uri.parse(link);
|
||||
intent.setData(uri);
|
||||
InstanceInfoActivity.this.startActivity(intent);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
|
||||
builder.linkColor(linkColor);
|
||||
}
|
||||
};
|
||||
|
||||
mPostDetailMarkwon = MarkdownUtils.createFullRedditMarkwon(this,
|
||||
miscPlugin, markdownColor, postSpoilerBackgroundColor, null);
|
||||
mMarkwonAdapter = MarkdownUtils.createTablesAdapter();
|
||||
mContentMarkdownView.setAdapter(mMarkwonAdapter);
|
||||
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
|
||||
mContentMarkdownView.setLayoutManager(linearLayoutManager);
|
||||
mAdminAdapter = new AdminRecyclerViewAdapter(InstanceInfoActivity.this, customThemeWrapper);
|
||||
mAdminsRecyclerView.setLayoutManager(new LinearLayoutManagerBugFixed(InstanceInfoActivity.this));
|
||||
mAdminsRecyclerView.setAdapter(mAdminAdapter);
|
||||
|
||||
fetchInstanceInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
fetchInstanceInfo();
|
||||
}
|
||||
|
||||
private void fetchInstanceInfo() {
|
||||
FetchSiteInfo.fetchSiteInfo(mRetorifitHolder.getRetrofit(), null, new FetchSiteInfo.FetchSiteInfoListener() {
|
||||
@Override
|
||||
public void onFetchSiteInfoSuccess(SiteInfo siteInfo) {
|
||||
mLoadingConstraintLayout.setVisibility(View.GONE);
|
||||
toolbar.setTitle(siteInfo.getName());
|
||||
if (siteInfo.getSidebar() != null) {
|
||||
mMarkwonAdapter.setMarkdown(mPostDetailMarkwon, siteInfo.getSidebar());
|
||||
Log.i("SiteInfo", "onFetchSiteInfoSuccess: " + siteInfo.getSidebar());
|
||||
// noinspection NotifyDataSetChanged
|
||||
mMarkwonAdapter.notifyDataSetChanged();
|
||||
mDescriptionCardView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
List<BasicUserInfo> admins = siteInfo.getAdmins();
|
||||
if (admins != null && !admins.isEmpty()) {
|
||||
mAdminsCardView.setVisibility(View.VISIBLE);
|
||||
mAdminAdapter.setUsers(admins);
|
||||
}
|
||||
SiteStatistics siteStatistics = siteInfo.getSiteStatistics();
|
||||
if (siteStatistics != null) {
|
||||
mStatisticsCardView.setVisibility(View.VISIBLE);
|
||||
mUsersTextView.setText(getString(R.string.user_number_detail, siteStatistics.getUsers()));
|
||||
mCommunitiesTextView.setText(getString(R.string.community_number_detail, siteStatistics.getCommunities()));
|
||||
mPostsTextView.setText(getString(R.string.post_count_detail, siteStatistics.getPosts()));
|
||||
mCommentsTextView.setText(getString(R.string.comment_count_detail, siteStatistics.getComments()));
|
||||
mActiveUsersTextView.setText(getString(R.string.active_users_number_detail, siteStatistics.getUsers_active()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSiteInfoFailed() {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected void setUpBindings() {
|
||||
coordinatorLayout = mInstanceInfoActivityViewBinding.coordinatorLayoutInstanceInfoActivity;
|
||||
toolbar = mInstanceInfoActivityViewBinding.toolbarInstanceInfoActivity;
|
||||
appBarLayout = mInstanceInfoActivityViewBinding.appbarLayoutInstanceInfoActivity;
|
||||
mStatisticsCardView = mInstanceInfoActivityViewBinding.statisticsCardInstanceInfoActivity;
|
||||
mDescriptionCardView = mInstanceInfoActivityViewBinding.descriptionCardInstanceInfoActivity;
|
||||
mContentMarkdownView = mInstanceInfoActivityViewBinding.markdownRecyclerViewInstanceInfoActivity;
|
||||
mAdminsCardView = mInstanceInfoActivityViewBinding.moderatorsCardInstanceInfoActivity;
|
||||
mLoadingConstraintLayout = mInstanceInfoActivityViewBinding.loadingLayoutInstanceInfoActivity;
|
||||
mAdminsRecyclerView = mInstanceInfoActivityViewBinding.recyclerViewAdminsInstanceInfoActivity;
|
||||
mUsersTextView = mInstanceInfoActivityViewBinding.registeredUserCountTextViewInstanceInfoActivity;
|
||||
mCommunitiesTextView = mInstanceInfoActivityViewBinding.communityCountInstanceInfoActivity;
|
||||
mPostsTextView = mInstanceInfoActivityViewBinding.postCountTextViewInstanceInfoActivity;
|
||||
mCommentsTextView = mInstanceInfoActivityViewBinding.commentCountTextViewInstanceInfoActivity;
|
||||
mActiveUsersTextView = mInstanceInfoActivityViewBinding.activeUserCountTextViewInstanceInfoActivity;
|
||||
mUsersImageView = mInstanceInfoActivityViewBinding.registeredUserCountImageViewInstanceInfoActivity;
|
||||
mCommunitiesImageView = mInstanceInfoActivityViewBinding.communitiesIconImageViewInstanceInfoActivity;
|
||||
mPostsImageView = mInstanceInfoActivityViewBinding.postCountImageViewInstanceInfoActivity;
|
||||
mCommentsImageView = mInstanceInfoActivityViewBinding.commentCountImageViewInstanceInfoActivity;
|
||||
mActiveUsersImageView = mInstanceInfoActivityViewBinding.activeUserCountImageViewInstanceInfoActivity;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SharedPreferences getDefaultSharedPreferences() {
|
||||
return mSharedPreferences;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CustomThemeWrapper getCustomThemeWrapper() {
|
||||
return mCustomThemeWrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyCustomTheme() {
|
||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
|
||||
mStatisticsCardView.setCardBackgroundColor(mCustomThemeWrapper.getCardViewBackgroundColor());
|
||||
mDescriptionCardView.setCardBackgroundColor(mCustomThemeWrapper.getCardViewBackgroundColor());
|
||||
mAdminsCardView.setCardBackgroundColor(mCustomThemeWrapper.getCardViewBackgroundColor());
|
||||
mUsersImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||
mCommunitiesImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||
mPostsImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||
mCommentsImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||
mActiveUsersImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||
mUsersTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
mCommunitiesTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
mPostsTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
mCommentsTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
mActiveUsersTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == android.R.id.home) {
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.webkit.URLUtil;
|
||||
import android.widget.Toast;
|
||||
|
||||
@@ -17,15 +18,26 @@ import androidx.browser.customtabs.CustomTabsService;
|
||||
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||
import eu.toldi.infinityforlemmy.comment.FetchComment;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.post.FetchPost;
|
||||
import eu.toldi.infinityforlemmy.post.ObjectResolver;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
|
||||
public class LinkResolverActivity extends AppCompatActivity {
|
||||
@@ -34,12 +46,11 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
public static final String EXTRA_NEW_ACCOUNT_NAME = "ENAN";
|
||||
public static final String EXTRA_IS_NSFW = "EIN";
|
||||
|
||||
private static final String POST_PATTERN = "/r/[\\w-]+/comments/\\w+/?\\w+/?";
|
||||
private static final String POST_PATTERN_2 = "/(u|U|user)/[\\w-]+/comments/\\w+/?\\w+/?";
|
||||
private static final String POST_PATTERN = "https?:\\/\\/\\S+\\/post\\/\\d+";
|
||||
private static final String POST_PATTERN_3 = "/[\\w-]+$";
|
||||
private static final String COMMENT_PATTERN = "/(r|u|U|user)/[\\w-]+/comments/\\w+/?[\\w-]+/\\w+/?";
|
||||
private static final String SUBREDDIT_PATTERN = "/[rR]/[\\w-]+/?";
|
||||
private static final String USER_PATTERN = "/(u|U|user)/[\\w-]+/?";
|
||||
private static final String COMMENT_PATTERN = "https?:\\/\\/\\S+\\/comment\\/\\d+";
|
||||
private static final String SUBREDDIT_PATTERN = "(?:https?://[\\w.-]+)?/c/[\\w-]+(@[\\w.-]+)?";
|
||||
private static final String USER_PATTERN = "(?:https?://[\\w.-]+)?/u(sers)?/[\\w-]+(@[\\w.-]+)?";
|
||||
private static final String SIDEBAR_PATTERN = "/[rR]/[\\w-]+/about/sidebar";
|
||||
private static final String MULTIREDDIT_PATTERN = "/user/[\\w-]+/m/\\w+/?";
|
||||
private static final String MULTIREDDIT_PATTERN_2 = "/[rR]/(\\w+\\+?)+/?";
|
||||
@@ -59,11 +70,30 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
@Inject
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
|
||||
@Inject
|
||||
ObjectResolver mObjectResolver;
|
||||
|
||||
@Inject
|
||||
@Named("current_account")
|
||||
SharedPreferences mCurrentAccountSharedPreferences;
|
||||
|
||||
@Inject
|
||||
@Named("no_oauth")
|
||||
RetrofitHolder mRetrofit;
|
||||
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
|
||||
@Inject
|
||||
PostEnricher postEnricher;
|
||||
|
||||
private String mAccessToken;
|
||||
|
||||
private Uri getRedditUriByPath(String path) {
|
||||
if (path.charAt(0) != '/') {
|
||||
return Uri.parse("https://www.reddit.com/" + path);
|
||||
return Uri.parse(mRetrofit.getBaseURL() + path);
|
||||
} else {
|
||||
return Uri.parse("https://www.reddit.com" + path);
|
||||
return Uri.parse(mRetrofit.getBaseURL() + path);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,19 +102,27 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
if (mAccessToken != null) {
|
||||
String instance = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_INSTANCE, null);
|
||||
mRetrofit.setBaseURL(instance);
|
||||
if (mCurrentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true)) {
|
||||
mRetrofit.setAccessToken(mAccessToken);
|
||||
}
|
||||
}
|
||||
|
||||
Uri uri = getIntent().getData();
|
||||
if (uri == null) {
|
||||
String url = getIntent().getStringExtra(Intent.EXTRA_TEXT);
|
||||
if (!URLUtil.isValidUrl(url)) {
|
||||
Toast.makeText(this, R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
try {
|
||||
uri = Uri.parse(url);
|
||||
} catch (NullPointerException e) {
|
||||
Toast.makeText(this, R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
@@ -92,7 +130,7 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
|
||||
if (uri.getScheme() == null && uri.getHost() == null) {
|
||||
if (uri.toString().isEmpty()) {
|
||||
Toast.makeText(this, R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.invalid_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
@@ -104,7 +142,7 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
|
||||
private void handleUri(Uri uri) {
|
||||
if (uri == null) {
|
||||
Toast.makeText(this, R.string.no_link_available, Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(getApplicationContext(), R.string.no_link_available, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
String path = uri.getPath();
|
||||
if (path == null) {
|
||||
@@ -156,6 +194,149 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, uri.toString());
|
||||
intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, id + ".jpg");
|
||||
startActivity(intent);
|
||||
} else if (uri.toString().matches(SUBREDDIT_PATTERN)) {
|
||||
Intent intent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, uri.getScheme() != null ? LemmyUtils.actorID2FullName(uri.toString()) : path.substring(3));
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
} else if (uri.toString().matches(USER_PATTERN)) {
|
||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, uri.getScheme() != null ? LemmyUtils.actorID2FullName(uri.toString()) : path.substring(3));
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
} else if (uri.toString().matches(POST_PATTERN)) {
|
||||
if (mAccessToken == null) {
|
||||
// switch retrofit to use the current instance for anonymous requests
|
||||
mRetrofit.setBaseURL(uri.getScheme() + "://" + uri.getHost() + "/");
|
||||
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, Integer.parseInt(segments.get(segments.size() - 1)));
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
} else {
|
||||
boolean local = false;
|
||||
try {
|
||||
URL baseURL = new URL(mRetrofit.getBaseURL());
|
||||
if (baseURL.getHost().equalsIgnoreCase(uri.getHost())) {
|
||||
local = true;
|
||||
FetchPost.fetchPost(mExecutor, new Handler(), mRetrofit.getRetrofit(), segments.get(segments.size() - 1), mAccessToken, postEnricher, new FetchPost.FetchPostListener() {
|
||||
@Override
|
||||
public void fetchPostSuccess(Post post) {
|
||||
|
||||
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, post.getId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fetchPostFailed() {
|
||||
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (MalformedURLException e) {
|
||||
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
if (!local) {
|
||||
mObjectResolver.resolvePost(uri.toString(), mAccessToken, new ObjectResolver.ObjectResolverListener() {
|
||||
@Override
|
||||
public void onResolveObjectSuccess(Object p) {
|
||||
Post post = (Post) p;
|
||||
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, post.getId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResolveObjectFailed() {
|
||||
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} else if (uri.toString().matches(COMMENT_PATTERN)) {
|
||||
if (mAccessToken == null) {
|
||||
mRetrofit.setBaseURL(uri.getScheme() + "://" + uri.getHost() + "/");
|
||||
FetchComment.fetchSingleComment(mRetrofit.getRetrofit(), null, Integer.parseInt(segments.get(segments.size() - 1)), new FetchComment.FetchCommentListener() {
|
||||
@Override
|
||||
public void onFetchCommentSuccess(ArrayList<Comment> comments, Integer parentId, ArrayList<Integer> moreChildrenIds) {
|
||||
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
||||
Comment comment = comments.get(0);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getPostId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_PARENT_ID, comment.getParentId());
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchCommentFailed() {
|
||||
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
boolean local = false;
|
||||
try {
|
||||
URL baseURL = new URL(mRetrofit.getBaseURL());
|
||||
if (baseURL.getHost().equalsIgnoreCase(uri.getHost())) {
|
||||
local = true;
|
||||
FetchComment.fetchSingleComment(mRetrofit.getRetrofit(), mAccessToken, Integer.parseInt(segments.get(segments.size() - 1)), new FetchComment.FetchCommentListener() {
|
||||
@Override
|
||||
public void onFetchCommentSuccess(ArrayList<Comment> comments, Integer parentId, ArrayList<Integer> moreChildrenIds) {
|
||||
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
||||
Comment comment = comments.get(0);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getPostId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_PARENT_ID, comment.getParentId());
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchCommentFailed() {
|
||||
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (MalformedURLException e) {
|
||||
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
if (!local) {
|
||||
mObjectResolver.resolveComment(uri.toString(), mAccessToken, new ObjectResolver.ObjectResolverListener() {
|
||||
@Override
|
||||
public void onResolveObjectSuccess(Object c) {
|
||||
Comment comment = (Comment) c;
|
||||
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getPostId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_PARENT_ID, comment.getParentId());
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResolveObjectFailed() {
|
||||
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} else if (authority.equals("v.redd.it")) {
|
||||
Intent intent = new Intent(this, ViewVideoActivity.class);
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_V_REDD_IT);
|
||||
@@ -174,35 +355,12 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
startActivity(intent);
|
||||
} else if (path.equals("/report")) {
|
||||
openInWebView(uri);
|
||||
} else if (path.matches(POST_PATTERN) || path.matches(POST_PATTERN_2)) {
|
||||
int commentsIndex = segments.lastIndexOf("comments");
|
||||
if (commentsIndex >= 0 && commentsIndex < segments.size() - 1) {
|
||||
Intent intent = new Intent(this, ViewPostDetailActivity.class);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, segments.get(commentsIndex + 1));
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
} else {
|
||||
deepLinkError(uri);
|
||||
}
|
||||
} else if (path.matches(POST_PATTERN_3)) {
|
||||
Intent intent = new Intent(this, ViewPostDetailActivity.class);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, path.substring(1));
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
} else if (path.matches(COMMENT_PATTERN)) {
|
||||
int commentsIndex = segments.lastIndexOf("comments");
|
||||
if (commentsIndex >= 0 && commentsIndex < segments.size() - 1) {
|
||||
Intent intent = new Intent(this, ViewPostDetailActivity.class);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, segments.get(commentsIndex + 1));
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, segments.get(segments.size() - 1));
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
} else {
|
||||
deepLinkError(uri);
|
||||
}
|
||||
} else if (path.matches(WIKI_PATTERN)) {
|
||||
String[] pathSegments = path.split("/");
|
||||
String wikiPage;
|
||||
@@ -219,18 +377,6 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
intent.putExtra(WikiActivity.EXTRA_SUBREDDIT_NAME, segments.get(1));
|
||||
intent.putExtra(WikiActivity.EXTRA_WIKI_PATH, wikiPage);
|
||||
startActivity(intent);
|
||||
} else if (path.matches(SUBREDDIT_PATTERN)) {
|
||||
Intent intent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, path.substring(3));
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
} else if (path.matches(USER_PATTERN)) {
|
||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, segments.get(1));
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||
startActivity(intent);
|
||||
} else if (path.matches(SIDEBAR_PATTERN)) {
|
||||
Intent intent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, path.substring(3, path.length() - 14));
|
||||
|
||||
@@ -6,8 +6,8 @@ import android.content.SharedPreferences;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.text.Editable;
|
||||
import android.util.Log;
|
||||
import android.util.Patterns;
|
||||
import android.view.InflateException;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.Button;
|
||||
@@ -21,11 +21,13 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -43,6 +45,8 @@ import eu.toldi.infinityforlemmy.asynctasks.ParseAndInsertNewAccount;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||
import eu.toldi.infinityforlemmy.dto.AccountLoginDTO;
|
||||
import eu.toldi.infinityforlemmy.site.FetchSiteInfo;
|
||||
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import retrofit2.Call;
|
||||
@@ -137,54 +141,89 @@ public class LoginActivity extends BaseActivity {
|
||||
|
||||
loginButton.setOnClickListener(view -> {
|
||||
Log.i("LoginActivity", "Login button clicked");
|
||||
if(!checkFields())
|
||||
return;
|
||||
loginButton.setEnabled(false);
|
||||
progressBar.setVisibility(ProgressBar.VISIBLE);
|
||||
String username = username_input.getText().toString();
|
||||
String instance = correctURL(instance_input.getText().toString());
|
||||
if(!Patterns.WEB_URL.matcher(instance).matches()){
|
||||
instance_input.setError("Invalid instance URL");
|
||||
String username = username_input.getText().toString().trim();
|
||||
String instance = correctURL(instance_input.getText().toString().trim());
|
||||
try {
|
||||
URL urlObj = new URL(instance);
|
||||
instance = urlObj.getProtocol() + "://" + urlObj.getHost() + "/";
|
||||
} catch (MalformedURLException e) {
|
||||
instance_input.setError("Invalid URL");
|
||||
Toast.makeText(LoginActivity.this, "Invalid instance URL", Toast.LENGTH_SHORT).show();
|
||||
loginButton.setEnabled(true);
|
||||
progressBar.setVisibility(ProgressBar.GONE);
|
||||
return;
|
||||
}
|
||||
Log.i("LoginActivity", "Instance: " + instance);
|
||||
AccountLoginDTO accountLoginDTO = new AccountLoginDTO(username,password_input.getText().toString(),token_2fa_input.getText().toString());
|
||||
AccountLoginDTO accountLoginDTO = new AccountLoginDTO(username, password_input.getText().toString(), token_2fa_input.getText().toString());
|
||||
mRetrofit.setBaseURL(instance);
|
||||
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
|
||||
Call<String> accessTokenCall = api.userLogin(accountLoginDTO);
|
||||
String finalInstance = instance;
|
||||
accessTokenCall.enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
progressBar.setVisibility(ProgressBar.GONE);
|
||||
loginButton.setEnabled(true);
|
||||
String accountResponse = response.body();
|
||||
if (accountResponse == null) {
|
||||
Log.e("LoginActivity", "Account response is null");
|
||||
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
||||
//Handle error
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (response.isSuccessful()) {
|
||||
String accountResponse = response.body();
|
||||
if (accountResponse == null) {
|
||||
Log.e("LoginActivity", "Account response is null");
|
||||
Toast.makeText(LoginActivity.this, R.string.invalid_response, Toast.LENGTH_SHORT).show();
|
||||
//Handle error
|
||||
return;
|
||||
}
|
||||
try {
|
||||
JSONObject responseJSON = new JSONObject(accountResponse);
|
||||
String accessToken = responseJSON.getString("jwt");
|
||||
mRetrofit.setAccessToken(null);
|
||||
|
||||
FetchMyInfo.fetchAccountInfo(mRetrofit.getRetrofit(), mRedditDataRoomDatabase, username,
|
||||
accessToken, new FetchMyInfo.FetchMyInfoListener() {
|
||||
@Override
|
||||
public void onFetchMyInfoSuccess(String name,String display_name, String profileImageUrl, String bannerImageUrl) {
|
||||
public void onFetchMyInfoSuccess(String name, String display_name, String profileImageUrl, String bannerImageUrl) {
|
||||
FetchSiteInfo.fetchSiteInfo(mRetrofit.getRetrofit(), accessToken, new FetchSiteInfo.FetchSiteInfoListener() {
|
||||
@Override
|
||||
public void onFetchSiteInfoSuccess(SiteInfo siteInfo) {
|
||||
boolean canDownvote = siteInfo.isEnable_downvotes();
|
||||
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), name, display_name, accessToken, profileImageUrl, bannerImageUrl, authCode, finalInstance, canDownvote, mRedditDataRoomDatabase.accountDao(),
|
||||
() -> {
|
||||
Intent resultIntent = new Intent();
|
||||
setResult(Activity.RESULT_OK, resultIntent);
|
||||
finish();
|
||||
});
|
||||
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, canDownvote).apply();
|
||||
String[] version = siteInfo.getVersion().split("\\.");
|
||||
if (version.length > 0) {
|
||||
Log.d("SwitchAccount", "Lemmy Version: " + version[0] + "." + version[1]);
|
||||
int majorVersion = Integer.parseInt(version[0]);
|
||||
int minorVersion = Integer.parseInt(version[1]);
|
||||
if (majorVersion > 0 || (majorVersion == 0 && minorVersion >= 19)) {
|
||||
mRetrofit.setAccessToken(accessToken);
|
||||
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true).apply();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSiteInfoFailed() {
|
||||
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), name,display_name, accessToken, profileImageUrl, bannerImageUrl, authCode, finalInstance,true, mRedditDataRoomDatabase.accountDao(),
|
||||
() -> {
|
||||
Intent resultIntent = new Intent();
|
||||
setResult(Activity.RESULT_OK, resultIntent);
|
||||
finish();
|
||||
});
|
||||
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true).apply();
|
||||
}
|
||||
});
|
||||
mCurrentAccountSharedPreferences.edit().putString(SharedPreferencesUtils.ACCESS_TOKEN, accessToken)
|
||||
.putString(SharedPreferencesUtils.ACCOUNT_NAME, display_name)
|
||||
.putString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, name)
|
||||
.putString(SharedPreferencesUtils.ACCOUNT_INSTANCE,instance)
|
||||
.putString(SharedPreferencesUtils.ACCOUNT_INSTANCE,finalInstance)
|
||||
.putString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, profileImageUrl).apply();
|
||||
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), name,display_name, accessToken, profileImageUrl, bannerImageUrl, authCode,instance, mRedditDataRoomDatabase.accountDao(),
|
||||
() -> {
|
||||
Intent resultIntent = new Intent();
|
||||
setResult(Activity.RESULT_OK, resultIntent);
|
||||
finish();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -206,18 +245,25 @@ public class LoginActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
try {
|
||||
JSONObject responseObject = new JSONObject(accountResponse);
|
||||
if(responseObject.has("error")) {
|
||||
Toast.makeText(LoginActivity.this, "Error:"+responseObject.getString("error"), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
else {
|
||||
String errorBody = response.errorBody().string();
|
||||
Log.e("LoginActivity", "Error body: " + errorBody.trim());
|
||||
JSONObject responseObject = new JSONObject(errorBody.trim());
|
||||
if (responseObject.has("error")) {
|
||||
if (responseObject.getString("error").equals("incorrect_login")) {
|
||||
Toast.makeText(LoginActivity.this, R.string.invalid_username_or_password, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
Toast.makeText(LoginActivity.this, "Error:" + responseObject.getString("error"), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
||||
} catch (IOException e) {
|
||||
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
Log.e("LoginActivity", "Failed to get access token: " + response.code() + " " + response.message() + " " + response.errorBody());
|
||||
Log.e("LoginActivity", "Failed to get access token: " + response.code() + " " + response.message());
|
||||
|
||||
}
|
||||
|
||||
@@ -231,6 +277,26 @@ public class LoginActivity extends BaseActivity {
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private boolean checkFields() {
|
||||
boolean result = true;
|
||||
Editable username = username_input.getText();
|
||||
Editable password = password_input.getText();
|
||||
Editable instance = instance_input.getText();
|
||||
if(instance == null || instance.toString().isEmpty()) {
|
||||
instance_input.setError(getString(R.string.instance_cannot_be_empty));
|
||||
result = false;
|
||||
}
|
||||
if(username == null || username.toString().isEmpty()) {
|
||||
username_input.setError(getString(R.string.username_cannot_be_empty));
|
||||
result = false;
|
||||
}
|
||||
if(password == null || password.toString().isEmpty()) {
|
||||
password_input.setError(getString(R.string.password_cannot_be_empty));
|
||||
result = false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
private static String correctURL(String url) {
|
||||
if (url == null || url.isEmpty()) {
|
||||
throw new IllegalArgumentException("URL cannot be null or empty");
|
||||
|
||||
@@ -60,6 +60,8 @@ import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
@@ -105,12 +107,14 @@ import eu.toldi.infinityforlemmy.events.ChangeLockBottomAppBarEvent;
|
||||
import eu.toldi.infinityforlemmy.events.ChangeNSFWEvent;
|
||||
import eu.toldi.infinityforlemmy.events.ChangeRequireAuthToAccountSectionEvent;
|
||||
import eu.toldi.infinityforlemmy.events.ChangeShowAvatarOnTheRightInTheNavigationDrawerEvent;
|
||||
import eu.toldi.infinityforlemmy.events.ChangeUseCircularFabEvent;
|
||||
import eu.toldi.infinityforlemmy.events.RecreateActivityEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||
import eu.toldi.infinityforlemmy.multireddit.MultiRedditViewModel;
|
||||
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||
@@ -211,6 +215,10 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
|
||||
@Inject
|
||||
MarkPostAsRead markPostAsRead;
|
||||
|
||||
private FragmentManager fragmentManager;
|
||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||
private NavigationDrawerRecyclerViewMergedAdapter adapter;
|
||||
@@ -223,9 +231,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
private boolean mFetchUserInfoSuccess = false;
|
||||
private boolean mFetchSubscriptionsSuccess = false;
|
||||
private boolean mDrawerOnAccountSwitch = false;
|
||||
private String mMessageFullname;
|
||||
private int mMessageFullname;
|
||||
private String mNewAccountName;
|
||||
private boolean hideFab;
|
||||
|
||||
private boolean useCircularFab;
|
||||
private boolean showBottomAppBar;
|
||||
private int mBackButtonAction;
|
||||
private boolean mLockBottomAppBar;
|
||||
@@ -252,6 +262,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
ButterKnife.bind(this);
|
||||
|
||||
hideFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_FAB_IN_POST_FEED, false);
|
||||
useCircularFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false);
|
||||
showBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.BOTTOM_APP_BAR_KEY, false);
|
||||
|
||||
navigationWrapper = new NavigationWrapper(findViewById(R.id.bottom_app_bar_bottom_app_bar), findViewById(R.id.linear_layout_bottom_app_bar),
|
||||
@@ -325,10 +336,13 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
fragmentManager = getSupportFragmentManager();
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mRetrofit.setAccessToken(mAccessToken);
|
||||
|
||||
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
String instance = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_INSTANCE, null);
|
||||
if(instance != null) {
|
||||
String instance = (mAccessToken == null) ? mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI) : mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_INSTANCE, null);
|
||||
if (instance != null) {
|
||||
mRetrofit.setBaseURL(instance);
|
||||
}
|
||||
|
||||
@@ -336,11 +350,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE);
|
||||
mFetchSubscriptionsSuccess = savedInstanceState.getBoolean(FETCH_SUBSCRIPTIONS_STATE);
|
||||
mDrawerOnAccountSwitch = savedInstanceState.getBoolean(DRAWER_ON_ACCOUNT_SWITCH_STATE);
|
||||
mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE);
|
||||
mMessageFullname = savedInstanceState.getInt(MESSAGE_FULLNAME_STATE);
|
||||
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
||||
inboxCount = savedInstanceState.getInt(INBOX_COUNT_STATE);
|
||||
} else {
|
||||
mMessageFullname = getIntent().getStringExtra(EXTRA_MESSSAGE_FULLNAME);
|
||||
mMessageFullname = getIntent().getIntExtra(EXTRA_MESSSAGE_FULLNAME, 0);
|
||||
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
||||
}
|
||||
|
||||
@@ -348,6 +362,18 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
initializeNotificationAndBindView();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (mAccessToken == null) {
|
||||
String instancePreference = mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI);
|
||||
if (!instancePreference.startsWith(mRetrofit.getBaseURL())) {
|
||||
mRetrofit.setBaseURL(instancePreference);
|
||||
this.recreate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SharedPreferences getDefaultSharedPreferences() {
|
||||
return mSharedPreferences;
|
||||
@@ -366,7 +392,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
navigationView.setBackgroundColor(backgroundColor);
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||
applyTabLayoutTheme(tabLayout);
|
||||
applyFABTheme(navigationWrapper.floatingActionButton);
|
||||
applyFABTheme(navigationWrapper.floatingActionButton, useCircularFab);
|
||||
}
|
||||
|
||||
private void initializeNotificationAndBindView() {
|
||||
@@ -458,7 +484,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, mAccountQualifiedName);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, mAccountName);
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
@@ -785,17 +810,17 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
|
||||
adapter = new NavigationDrawerRecyclerViewMergedAdapter(this, mSharedPreferences,
|
||||
mNsfwAndSpoilerSharedPreferences, mNavigationDrawerSharedPreferences, mSecuritySharedPreferences,
|
||||
mCustomThemeWrapper, mAccountName, new NavigationDrawerRecyclerViewMergedAdapter.ItemClickListener() {
|
||||
@Override
|
||||
public void onMenuClick(int stringId) {
|
||||
Intent intent = null;
|
||||
if (stringId == R.string.profile) {
|
||||
intent = new Intent(MainActivity.this, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, mAccountQualifiedName);
|
||||
} else if (stringId == R.string.subscriptions) {
|
||||
intent = new Intent(MainActivity.this, SubscribedThingListingActivity.class);
|
||||
} else if (stringId == R.string.multi_reddit) {
|
||||
mCustomThemeWrapper, mAccountName, mAccountQualifiedName, new NavigationDrawerRecyclerViewMergedAdapter.ItemClickListener() {
|
||||
@Override
|
||||
public void onMenuClick(int stringId) {
|
||||
Intent intent = null;
|
||||
if (stringId == R.string.profile) {
|
||||
intent = new Intent(MainActivity.this, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, mAccountQualifiedName);
|
||||
} else if (stringId == R.string.subscriptions) {
|
||||
intent = new Intent(MainActivity.this, SubscribedThingListingActivity.class);
|
||||
} else if (stringId == R.string.multi_reddit) {
|
||||
intent = new Intent(MainActivity.this, SubscribedThingListingActivity.class);
|
||||
intent.putExtra(SubscribedThingListingActivity.EXTRA_SHOW_MULTIREDDITS, true);
|
||||
} else if (stringId == R.string.history) {
|
||||
@@ -858,7 +883,13 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
startActivity(logOutIntent);
|
||||
finish();
|
||||
});
|
||||
}
|
||||
} else if (stringId == R.string.anonymous_account_instance) {
|
||||
changeAnonymousAccountInstance();
|
||||
} else if (stringId == R.string.blocks) {
|
||||
intent = new Intent(MainActivity.this, BlockedThingListingActivity.class);
|
||||
} else if (stringId == R.string.instance_info) {
|
||||
intent = new Intent(MainActivity.this, InstanceInfoActivity.class);
|
||||
}
|
||||
if (intent != null) {
|
||||
startActivity(intent);
|
||||
}
|
||||
@@ -906,7 +937,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
||||
switch (position) {
|
||||
case 0:
|
||||
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_TITLE, getString(R.string.home)));
|
||||
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_TITLE, getString(R.string.subscribed_feed)));
|
||||
break;
|
||||
case 1:
|
||||
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_TITLE, getString(R.string.local)));
|
||||
@@ -985,12 +1016,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
sectionsPagerAdapter.setSubscribedSubreddits(subscribedSubredditData);
|
||||
}
|
||||
});
|
||||
/*subscribedSubredditViewModel.getAllFavoriteSubscribedSubreddits().observe(this, subscribedSubredditData -> {
|
||||
subscribedSubredditViewModel.getAllFavoriteSubscribedSubreddits().observe(this, subscribedSubredditData -> {
|
||||
adapter.setFavoriteSubscribedSubreddits(subscribedSubredditData);
|
||||
if (mShowFavoriteSubscribedSubreddits && sectionsPagerAdapter != null) {
|
||||
sectionsPagerAdapter.setFavoriteSubscribedSubreddits(subscribedSubredditData);
|
||||
}
|
||||
});*/
|
||||
});
|
||||
|
||||
accountViewModel = new ViewModelProvider(this,
|
||||
new AccountViewModel.Factory(mRedditDataRoomDatabase)).get(AccountViewModel.class);
|
||||
@@ -1004,11 +1035,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
loadUserData();
|
||||
|
||||
if (mAccessToken != null) {
|
||||
if (mMessageFullname != null) {
|
||||
if (mMessageFullname != 0) {
|
||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
|
||||
@Override
|
||||
public void readSuccess() {
|
||||
mMessageFullname = null;
|
||||
mMessageFullname = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1022,7 +1053,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
|
||||
private void loadSubscriptions() {
|
||||
if (mAccessToken != null && !mFetchSubscriptionsSuccess) {
|
||||
FetchSubscribedThing.fetchSubscribedThing(mRetrofit.getRetrofit(), mAccessToken, mAccountName, null,
|
||||
FetchSubscribedThing.fetchSubscribedThing(mRetrofit.getRetrofit(), mAccessToken, mAccountQualifiedName, null,
|
||||
new ArrayList<>(), new ArrayList<>(),
|
||||
new ArrayList<>(),
|
||||
new FetchSubscribedThing.FetchSubscribedThingListener() {
|
||||
@@ -1034,7 +1065,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
mExecutor,
|
||||
new Handler(),
|
||||
mRedditDataRoomDatabase,
|
||||
mAccountName,
|
||||
mAccountQualifiedName,
|
||||
subscribedSubredditData,
|
||||
subscribedUserData,
|
||||
subredditData,
|
||||
@@ -1051,36 +1082,32 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
|
||||
private void loadUserData() {
|
||||
if (!mFetchUserInfoSuccess) {
|
||||
FetchUserData.fetchUserData(mRedditDataRoomDatabase, mOauthRetrofit, mAccessToken,
|
||||
mAccountName, new FetchUserData.FetchUserDataListener() {
|
||||
FetchUserData.fetchUnreadCount(mRetrofit.getRetrofit(), mAccessToken, new FetchUserData.FetchUserUnreadCountListener() {
|
||||
@Override
|
||||
public void onFetchUserDataSuccess(UserData userData, int inboxCount) {
|
||||
public void onFetchUserUnreadCountSuccess(int inboxCount) {
|
||||
MainActivity.this.inboxCount = inboxCount;
|
||||
mAccountName = userData.getName();
|
||||
mFetchUserInfoSuccess = true;
|
||||
if (adapter != null) {
|
||||
adapter.setInboxCount(inboxCount);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchUserDataFailed() {
|
||||
mFetchUserInfoSuccess = false;
|
||||
public void onFetchUserUnreadCountFailed() {
|
||||
}
|
||||
});
|
||||
/*FetchMyInfo.fetchAccountInfo(mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken,
|
||||
new FetchMyInfo.FetchMyInfoListener() {
|
||||
FetchUserData.fetchUserData(mRedditDataRoomDatabase, mRetrofit.getRetrofit(), mAccessToken,
|
||||
mAccountName, new FetchUserData.FetchUserDataListener() {
|
||||
@Override
|
||||
public void onFetchMyInfoSuccess(String name, String profileImageUrl, String bannerImageUrl, int karma) {
|
||||
mAccountName = name;
|
||||
public void onFetchUserDataSuccess(UserData userData, int inboxCount) {
|
||||
mAccountName = userData.getName();
|
||||
mFetchUserInfoSuccess = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchMyInfoFailed(boolean parseFailed) {
|
||||
mFetchUserInfoSuccess = false;
|
||||
}
|
||||
});*/
|
||||
public void onFetchUserDataFailed() {
|
||||
mFetchUserInfoSuccess = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1169,7 +1196,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
outState.putBoolean(FETCH_USER_INFO_STATE, mFetchUserInfoSuccess);
|
||||
outState.putBoolean(FETCH_SUBSCRIPTIONS_STATE, mFetchSubscriptionsSuccess);
|
||||
outState.putBoolean(DRAWER_ON_ACCOUNT_SWITCH_STATE, mDrawerOnAccountSwitch);
|
||||
outState.putString(MESSAGE_FULLNAME_STATE, mMessageFullname);
|
||||
outState.putInt(MESSAGE_FULLNAME_STATE, mMessageFullname);
|
||||
outState.putString(NEW_ACCOUNT_NAME_STATE, mNewAccountName);
|
||||
outState.putInt(INBOX_COUNT_STATE, inboxCount);
|
||||
}
|
||||
@@ -1328,6 +1355,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
navigationWrapper.floatingActionButton.setVisibility(hideFab ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onChangeUseCircularFab(ChangeUseCircularFabEvent event) {
|
||||
useCircularFab = event.isUseCircularFab();
|
||||
applyFABTheme(navigationWrapper.floatingActionButton, useCircularFab);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLongPress() {
|
||||
if (sectionsPagerAdapter != null) {
|
||||
@@ -1373,10 +1406,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
goToUser();
|
||||
break;
|
||||
}
|
||||
case FABMoreOptionsBottomSheetFragment.FAB_RANDOM: {
|
||||
randomThing();
|
||||
break;
|
||||
}
|
||||
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
||||
if (sectionsPagerAdapter != null) {
|
||||
sectionsPagerAdapter.hideReadPosts();
|
||||
@@ -1398,6 +1427,72 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
}
|
||||
}
|
||||
|
||||
private void changeAnonymousAccountInstance() {
|
||||
View rootView = getLayoutInflater().inflate(R.layout.dialog_go_to_thing_edit_text, coordinatorLayout, false);
|
||||
TextInputEditText thingEditText = rootView.findViewById(R.id.text_input_edit_text_go_to_thing_edit_text);
|
||||
|
||||
thingEditText.requestFocus();
|
||||
thingEditText.setText(mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI));
|
||||
Utils.showKeyboard(this, new Handler(), thingEditText);
|
||||
thingEditText.setOnEditorActionListener((textView, i, keyEvent) -> {
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
String url = thingEditText.getText().toString();
|
||||
if (url.isEmpty()) {
|
||||
thingEditText.setError("Instance URL cannot be empty");
|
||||
return false;
|
||||
}
|
||||
if (!url.startsWith("http://") || !url.startsWith("https://")) {
|
||||
url = "https://" + url;
|
||||
}
|
||||
try {
|
||||
URL urlObj = new URL(url);
|
||||
url = urlObj.getProtocol() + "://" + urlObj.getHost() + "/";
|
||||
mSharedPreferences.edit().putString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, url).apply();
|
||||
mRetrofit.setBaseURL(url);
|
||||
sectionsPagerAdapter.getCurrentFragment().refresh();
|
||||
} catch (MalformedURLException e) {
|
||||
thingEditText.setError("Invalid URL");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||
.setTitle(R.string.anonymous_account_instance)
|
||||
.setView(rootView)
|
||||
.setPositiveButton(R.string.ok, (dialogInterface, i)
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
String url = thingEditText.getText().toString();
|
||||
if (url.isEmpty()) {
|
||||
thingEditText.setError("Instance URL cannot be empty");
|
||||
return;
|
||||
}
|
||||
if (!url.startsWith("http://") && !url.startsWith("https://")) {
|
||||
url = "https://" + url;
|
||||
}
|
||||
try {
|
||||
URL urlObj = new URL(url);
|
||||
url = urlObj.getProtocol() + "://" + urlObj.getHost() + "/";
|
||||
mSharedPreferences.edit().putString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, url).apply();
|
||||
mRetrofit.setBaseURL(url);
|
||||
sectionsPagerAdapter.getCurrentFragment().refresh();
|
||||
} catch (MalformedURLException e) {
|
||||
thingEditText.setError("Invalid URL");
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
Utils.hideKeyboard(this);
|
||||
})
|
||||
.setOnDismissListener(dialogInterface -> {
|
||||
Utils.hideKeyboard(this);
|
||||
})
|
||||
.show();
|
||||
}
|
||||
|
||||
private void goToSubreddit() {
|
||||
View rootView = getLayoutInflater().inflate(R.layout.dialog_go_to_thing_edit_text, coordinatorLayout, false);
|
||||
TextInputEditText thingEditText = rootView.findViewById(R.id.text_input_edit_text_go_to_thing_edit_text);
|
||||
@@ -1418,7 +1513,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, thingEditText.getText().toString());
|
||||
String communityName = thingEditText.getText().toString();
|
||||
if (communityName.startsWith("!")) {
|
||||
communityName = communityName.substring(1);
|
||||
}
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityName);
|
||||
|
||||
startActivity(subredditIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -1476,7 +1576,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, thingEditText.getText().toString());
|
||||
String communityName = thingEditText.getText().toString();
|
||||
if (communityName.startsWith("!")) {
|
||||
communityName = communityName.substring(1);
|
||||
}
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityName);
|
||||
startActivity(subredditIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
@@ -1497,7 +1601,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, thingEditText.getText().toString());
|
||||
String qualifiedName = thingEditText.getText().toString();
|
||||
if (qualifiedName.startsWith("@")) {
|
||||
qualifiedName = qualifiedName.substring(1);
|
||||
}
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, qualifiedName);
|
||||
startActivity(userIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -1510,7 +1618,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, thingEditText.getText().toString());
|
||||
String qualifiedName = thingEditText.getText().toString();
|
||||
if (qualifiedName.startsWith("@")) {
|
||||
qualifiedName = qualifiedName.substring(1);
|
||||
}
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, qualifiedName);
|
||||
startActivity(userIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
@@ -1539,7 +1651,17 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
|
||||
@Override
|
||||
public void markPostAsRead(Post post) {
|
||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
||||
markPostAsRead.markPostAsRead(post.getId(), mAccessToken, new MarkPostAsRead.MarkPostAsReadListener() {
|
||||
@Override
|
||||
public void onMarkPostAsReadSuccess() {
|
||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMarkPostAsReadFailed() {
|
||||
Toast.makeText(MainActivity.this, R.string.mark_post_as_read_failed, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void doNotShowRedditAPIInfoAgain() {
|
||||
@@ -1661,7 +1783,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_ALL) {
|
||||
PostFragment fragment = new PostFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, mAccessToken == null ? PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE : PostPagingSource.TYPE_FRONT_PAGE);
|
||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
||||
bundle.putString(PostFragment.EXTRA_NAME, "all");
|
||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||
@@ -1725,7 +1847,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
||||
} else {
|
||||
PostFragment fragment = new PostFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, mAccessToken == null ? PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE : PostPagingSource.TYPE_FRONT_PAGE);
|
||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
||||
bundle.putString(PostFragment.EXTRA_NAME, "local");
|
||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||
|
||||
@@ -33,6 +33,7 @@ import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.postfilter.DeletePostFilter;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilterViewModel;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
|
||||
public class PostFilterPreferenceActivity extends BaseActivity {
|
||||
|
||||
@@ -205,7 +206,7 @@ public class PostFilterPreferenceActivity extends BaseActivity {
|
||||
@Override
|
||||
protected void applyCustomTheme() {
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||
applyFABTheme(fab);
|
||||
applyFABTheme(fab, sharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
coordinatorLayout.setBackgroundColor(customThemeWrapper.getBackgroundColor());
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilterUsage;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilterUsageViewModel;
|
||||
import eu.toldi.infinityforlemmy.postfilter.SavePostFilterUsage;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
|
||||
public class PostFilterUsageListingActivity extends BaseActivity {
|
||||
@@ -206,7 +207,7 @@ public class PostFilterUsageListingActivity extends BaseActivity {
|
||||
@Override
|
||||
protected void applyCustomTheme() {
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||
applyFABTheme(fab);
|
||||
applyFABTheme(fab, sharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
coordinatorLayout.setBackgroundColor(customThemeWrapper.getBackgroundColor());
|
||||
}
|
||||
}
|
||||
@@ -74,6 +74,9 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.events.SubmitGalleryPostEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.UploadImageUtils;
|
||||
@@ -102,6 +105,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||
private static final int PICK_IMAGE_REQUEST_CODE = 1;
|
||||
private static final int CAPTURE_IMAGE_REQUEST_CODE = 2;
|
||||
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||
|
||||
@BindView(R.id.coordinator_layout_post_gallery_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@@ -123,10 +127,6 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
MaterialButton rulesButton;
|
||||
@BindView(R.id.divider_1_post_gallery_activity)
|
||||
MaterialDivider divider1;
|
||||
@BindView(R.id.flair_custom_text_view_post_gallery_activity)
|
||||
CustomTextView flairTextView;
|
||||
@BindView(R.id.spoiler_custom_text_view_post_gallery_activity)
|
||||
CustomTextView spoilerTextView;
|
||||
@BindView(R.id.nsfw_custom_text_view_post_gallery_activity)
|
||||
CustomTextView nsfwTextView;
|
||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_gallery_activity)
|
||||
@@ -168,6 +168,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
private String mAccountName;
|
||||
private String iconUrl;
|
||||
private String subredditName;
|
||||
private SubscribedSubredditData communityData;
|
||||
private boolean subredditSelected = false;
|
||||
private boolean subredditIsUser;
|
||||
private boolean loadSubredditIconSuccessful = true;
|
||||
@@ -213,7 +214,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||
|
||||
@@ -245,6 +246,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
||||
@@ -279,7 +281,6 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
if (subredditName != null) {
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
if (!loadSubredditIconSuccessful) {
|
||||
loadSubredditIcon();
|
||||
}
|
||||
@@ -290,17 +291,6 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
mPostingSnackbar.show();
|
||||
}
|
||||
|
||||
if (flair != null) {
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
if (isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
}
|
||||
if (isNSFW) {
|
||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||
@@ -314,11 +304,25 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||
loadSubredditIconSuccessful = false;
|
||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
loadSubredditIcon();
|
||||
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
{
|
||||
communityData = new SubscribedSubredditData(subredditData);
|
||||
subredditName = communityData.getName();
|
||||
subredditIsUser = false;
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
loadSubredditIcon();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
@@ -347,40 +351,12 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
if (subredditIsUser) {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||
} else {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||
}
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
flairTextView.setOnClickListener(view -> {
|
||||
if (flair == null) {
|
||||
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
flairSelectionBottomSheetFragment.setArguments(bundle);
|
||||
flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
|
||||
} else {
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
}
|
||||
});
|
||||
|
||||
spoilerTextView.setOnClickListener(view -> {
|
||||
if (!isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
isSpoiler = true;
|
||||
} else {
|
||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
isSpoiler = false;
|
||||
}
|
||||
});
|
||||
|
||||
nsfwTextView.setOnClickListener(view -> {
|
||||
if (!isNSFW) {
|
||||
@@ -449,8 +425,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
|
||||
nsfwTextView.setTextColor(primaryTextColor);
|
||||
titleEditText.setTextColor(primaryTextColor);
|
||||
titleEditText.setHintTextColor(secondaryTextColor);
|
||||
@@ -458,8 +433,6 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
subredditNameTextView.setTypeface(typeface);
|
||||
rulesButton.setTypeface(typeface);
|
||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||
flairTextView.setTypeface(typeface);
|
||||
spoilerTextView.setTypeface(typeface);
|
||||
nsfwTextView.setTypeface(typeface);
|
||||
titleEditText.setTypeface(typeface);
|
||||
}
|
||||
@@ -492,7 +465,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
mExecutor.execute(() -> {
|
||||
try {
|
||||
Bitmap resource = Glide.with(PostGalleryActivity.this).asBitmap().load(imageUri).submit().get();
|
||||
String response = UploadImageUtils.uploadImage(mOauthRetrofit, mUploadMediaRetrofit, mAccessToken, resource, true);
|
||||
String response = UploadImageUtils.uploadImage(mRetrofit, mAccessToken, resource, true);
|
||||
String mediaId = new JSONObject(response).getJSONObject(JSONUtils.ASSET_KEY).getString(JSONUtils.ASSET_ID_KEY);
|
||||
handler.post(() -> {
|
||||
adapter.setImageAsUploaded(mediaId);
|
||||
@@ -531,7 +504,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
}
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName, mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName, mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
@@ -612,7 +585,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
|
||||
Intent intent = new Intent(this, SubmitPostService.class);
|
||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||
intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_GALLERY);
|
||||
ArrayList<RedditGalleryPayload.Item> items = new ArrayList<>();
|
||||
for (RedditGallerySubmissionRecyclerViewAdapter.RedditGalleryImageInfo i : redditGalleryImageInfoList) {
|
||||
@@ -648,6 +621,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
||||
@@ -666,19 +640,16 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||
subredditName = communityData.getName();
|
||||
iconUrl = communityData.getIconUrl();
|
||||
subredditSelected = true;
|
||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
||||
subredditIsUser = false;
|
||||
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
displaySubredditIcon();
|
||||
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
}
|
||||
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
||||
@@ -709,10 +680,6 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
||||
@Override
|
||||
public void flairSelected(Flair flair) {
|
||||
this.flair = flair;
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,6 +17,7 @@ import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -25,6 +26,8 @@ import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
@@ -43,6 +46,7 @@ import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -55,22 +59,31 @@ import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
|
||||
import eu.toldi.infinityforlemmy.UploadedImage;
|
||||
import eu.toldi.infinityforlemmy.account.Account;
|
||||
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.AccountChooserBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||
import eu.toldi.infinityforlemmy.events.SubmitImagePostEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SubmitVideoOrGifPostEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import pl.droidsonroids.gif.GifImageView;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class PostImageActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
|
||||
AccountChooserBottomSheetFragment.AccountChooserListener {
|
||||
UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener {
|
||||
|
||||
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
||||
|
||||
@@ -90,6 +103,10 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
private static final int PICK_IMAGE_REQUEST_CODE = 1;
|
||||
private static final int CAPTURE_IMAGE_REQUEST_CODE = 2;
|
||||
|
||||
private static final int PICK_IMAGE_REQUEST_CODE_2 = 100;
|
||||
private static final int CAPTURE_IMAGE_REQUEST_CODE_2 = 200;
|
||||
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||
|
||||
@BindView(R.id.coordinator_layout_post_image_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@BindView(R.id.appbar_layout_post_image_activity)
|
||||
@@ -110,10 +127,6 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
MaterialButton rulesButton;
|
||||
@BindView(R.id.divider_1_post_image_activity)
|
||||
MaterialDivider divider1;
|
||||
@BindView(R.id.flair_custom_text_view_post_image_activity)
|
||||
CustomTextView flairTextView;
|
||||
@BindView(R.id.spoiler_custom_text_view_post_image_activity)
|
||||
CustomTextView spoilerTextView;
|
||||
@BindView(R.id.nsfw_custom_text_view_post_image_activity)
|
||||
CustomTextView nsfwTextView;
|
||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_image_activity)
|
||||
@@ -153,6 +166,11 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
@Inject
|
||||
@Named("current_account")
|
||||
SharedPreferences mCurrentAccountSharedPreferences;
|
||||
|
||||
@BindView(R.id.post_text_content_edit_text_post_text_activity)
|
||||
EditText contentEditText;
|
||||
@BindView(R.id.markdown_bottom_bar_recycler_view_post_text_activity)
|
||||
RecyclerView markdownBottomBarRecyclerView;
|
||||
@Inject
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
@@ -162,6 +180,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
private String mAccountName;
|
||||
private String iconUrl;
|
||||
private String subredditName;
|
||||
private SubscribedSubredditData communityData;
|
||||
private boolean subredditSelected = false;
|
||||
private boolean subredditIsUser;
|
||||
private boolean loadSubredditIconSuccessful = true;
|
||||
@@ -183,6 +202,9 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
private FlairBottomSheetFragment flairSelectionBottomSheetFragment;
|
||||
private Snackbar mPostingSnackbar;
|
||||
|
||||
private Uri capturedImageUri;
|
||||
private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
@@ -206,7 +228,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||
|
||||
@@ -217,6 +239,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
||||
@@ -247,7 +270,6 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
if (subredditName != null) {
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
if (!loadSubredditIconSuccessful) {
|
||||
loadSubredditIcon();
|
||||
}
|
||||
@@ -258,17 +280,6 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
mPostingSnackbar.show();
|
||||
}
|
||||
|
||||
if (flair != null) {
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
if (isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
}
|
||||
if (isNSFW) {
|
||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||
@@ -282,11 +293,25 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||
loadSubredditIconSuccessful = false;
|
||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
loadSubredditIcon();
|
||||
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
{
|
||||
communityData = new SubscribedSubredditData(subredditData);
|
||||
subredditName = communityData.getName();
|
||||
subredditIsUser = false;
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
loadSubredditIcon();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
@@ -320,40 +345,12 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
if (subredditIsUser) {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||
} else {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||
}
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
flairTextView.setOnClickListener(view -> {
|
||||
if (flair == null) {
|
||||
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
flairSelectionBottomSheetFragment.setArguments(bundle);
|
||||
flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
|
||||
} else {
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
}
|
||||
});
|
||||
|
||||
spoilerTextView.setOnClickListener(view -> {
|
||||
if (!isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
isSpoiler = true;
|
||||
} else {
|
||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
isSpoiler = false;
|
||||
}
|
||||
});
|
||||
|
||||
nsfwTextView.setOnClickListener(view -> {
|
||||
if (!isNSFW) {
|
||||
@@ -400,6 +397,30 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
imageView.setVisibility(View.GONE);
|
||||
constraintLayout.setVisibility(View.VISIBLE);
|
||||
});
|
||||
|
||||
MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(
|
||||
mCustomThemeWrapper, new MarkdownBottomBarRecyclerViewAdapter.ItemClickListener() {
|
||||
@Override
|
||||
public void onClick(int item) {
|
||||
MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(
|
||||
PostImageActivity.this, contentEditText, item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUploadImage() {
|
||||
Utils.hideKeyboard(PostImageActivity.this);
|
||||
UploadedImagesBottomSheetFragment fragment = new UploadedImagesBottomSheetFragment();
|
||||
Bundle arguments = new Bundle();
|
||||
arguments.putParcelableArrayList(UploadedImagesBottomSheetFragment.EXTRA_UPLOADED_IMAGES,
|
||||
uploadedImages);
|
||||
fragment.setArguments(arguments);
|
||||
fragment.show(getSupportFragmentManager(), fragment.getTag());
|
||||
}
|
||||
});
|
||||
|
||||
markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManagerBugFixed(this,
|
||||
LinearLayoutManager.HORIZONTAL, false));
|
||||
markdownBottomBarRecyclerView.setAdapter(adapter);
|
||||
}
|
||||
|
||||
private void loadCurrentAccount() {
|
||||
@@ -451,24 +472,27 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
nsfwTextView.setTextColor(primaryTextColor);
|
||||
titleEditText.setTextColor(primaryTextColor);
|
||||
titleEditText.setHintTextColor(secondaryTextColor);
|
||||
applyFABTheme(captureFab);
|
||||
applyFABTheme(selectFromLibraryFab);
|
||||
contentEditText.setTextColor(primaryTextColor);
|
||||
contentEditText.setHintTextColor(secondaryTextColor);
|
||||
boolean circleFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false);
|
||||
applyFABTheme(captureFab, circleFab);
|
||||
applyFABTheme(selectFromLibraryFab, circleFab);
|
||||
selectAgainTextView.setTextColor(mCustomThemeWrapper.getColorAccent());
|
||||
if (typeface != null) {
|
||||
subredditNameTextView.setTypeface(typeface);
|
||||
rulesButton.setTypeface(typeface);
|
||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||
flairTextView.setTypeface(typeface);
|
||||
spoilerTextView.setTypeface(typeface);
|
||||
nsfwTextView.setTypeface(typeface);
|
||||
titleEditText.setTypeface(typeface);
|
||||
selectAgainTextView.setTypeface(typeface);
|
||||
}
|
||||
|
||||
if (contentTypeface != null) {
|
||||
contentEditText.setTypeface(contentTypeface);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadImage() {
|
||||
@@ -493,7 +517,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
}
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName, mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, communityData.getQualified_name(), mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
@@ -570,8 +594,9 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
Intent intent = new Intent(this, SubmitPostService.class);
|
||||
intent.setData(imageUri);
|
||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||
intent.putExtra(SubmitPostService.EXTRA_BODY, contentEditText.getText().toString());
|
||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
||||
intent.putExtra(SubmitPostService.EXTRA_IS_NSFW, isNSFW);
|
||||
@@ -608,6 +633,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||
@@ -628,19 +654,15 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||
communityData = data.getExtras().getParcelable(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||
subredditName = communityData.getName();
|
||||
iconUrl = communityData.getIconUrl();
|
||||
subredditSelected = true;
|
||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
||||
|
||||
subredditIsUser = false;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
displaySubredditIcon();
|
||||
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
}
|
||||
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
||||
@@ -657,6 +679,16 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
if (resultCode == RESULT_OK) {
|
||||
loadImage();
|
||||
}
|
||||
} else if (requestCode == PICK_IMAGE_REQUEST_CODE_2) {
|
||||
if (data == null) {
|
||||
Toast.makeText(PostImageActivity.this, R.string.error_getting_image, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, contentEditText, coordinatorLayout, data.getData(), uploadedImages);
|
||||
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE_2) {
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, contentEditText, coordinatorLayout, capturedImageUri, uploadedImages);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -669,10 +701,6 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
@Override
|
||||
public void flairSelected(Flair flair) {
|
||||
this.flair = flair;
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -700,8 +728,8 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
isPosting = false;
|
||||
mPostingSnackbar.dismiss();
|
||||
if (submitImagePostEvent.postSuccess) {
|
||||
Intent intent = new Intent(PostImageActivity.this, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
||||
Intent intent = new Intent(PostImageActivity.this, ViewPostDetailActivity.class);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, submitImagePostEvent.post);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
} else {
|
||||
@@ -740,4 +768,37 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uploadImage() {
|
||||
Intent intent = new Intent();
|
||||
intent.setType("image/*");
|
||||
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||
startActivityForResult(Intent.createChooser(intent,
|
||||
getResources().getString(R.string.select_from_gallery)), PICK_IMAGE_REQUEST_CODE_2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void captureImage() {
|
||||
Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||
try {
|
||||
capturedImageUri = FileProvider.getUriForFile(this, "eu.toldi.infinityforlemmy.provider",
|
||||
File.createTempFile("captured_image", ".jpg", getExternalFilesDir(Environment.DIRECTORY_PICTURES)));
|
||||
pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);
|
||||
startActivityForResult(pictureIntent, CAPTURE_IMAGE_REQUEST_CODE_2);
|
||||
} catch (IOException ex) {
|
||||
Toast.makeText(this, R.string.error_creating_temp_file, Toast.LENGTH_SHORT).show();
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(this, R.string.no_camera_available, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertImageUrl(UploadedImage uploadedImage) {
|
||||
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
||||
"",
|
||||
0, "![]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
package eu.toldi.infinityforlemmy.activities;
|
||||
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.provider.MediaStore;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.webkit.URLUtil;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
@@ -20,6 +23,9 @@ import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
@@ -35,6 +41,9 @@ import com.libRG.CustomTextView;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -47,17 +56,26 @@ import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
|
||||
import eu.toldi.infinityforlemmy.UploadedImage;
|
||||
import eu.toldi.infinityforlemmy.account.Account;
|
||||
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
|
||||
import eu.toldi.infinityforlemmy.apis.TitleSuggestion;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.AccountChooserBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||
import eu.toldi.infinityforlemmy.events.SubmitTextOrLinkPostEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import pl.droidsonroids.gif.GifImageView;
|
||||
import retrofit2.Call;
|
||||
@@ -67,12 +85,13 @@ import retrofit2.Retrofit;
|
||||
import retrofit2.converter.scalars.ScalarsConverterFactory;
|
||||
|
||||
public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
|
||||
AccountChooserBottomSheetFragment.AccountChooserListener {
|
||||
UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener {
|
||||
|
||||
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
||||
static final String EXTRA_LINK = "EL";
|
||||
|
||||
private static final String SELECTED_ACCOUNT_STATE = "SAS";
|
||||
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||
private static final String SUBREDDIT_NAME_STATE = "SNS";
|
||||
private static final String SUBREDDIT_ICON_STATE = "SIS";
|
||||
private static final String SUBREDDIT_SELECTED_STATE = "SSS";
|
||||
@@ -84,6 +103,9 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
private static final String IS_NSFW_STATE = "INS";
|
||||
|
||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||
private static final int PICK_IMAGE_REQUEST_CODE = 100;
|
||||
private static final int CAPTURE_IMAGE_REQUEST_CODE = 200;
|
||||
private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300;
|
||||
|
||||
@BindView(R.id.coordinator_layout_post_link_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@@ -107,10 +129,6 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
MaterialDivider divider1;
|
||||
@BindView(R.id.divider_2_post_link_activity)
|
||||
MaterialDivider divider2;
|
||||
@BindView(R.id.flair_custom_text_view_post_link_activity)
|
||||
CustomTextView flairTextView;
|
||||
@BindView(R.id.spoiler_custom_text_view_post_link_activity)
|
||||
CustomTextView spoilerTextView;
|
||||
@BindView(R.id.nsfw_custom_text_view_post_link_activity)
|
||||
CustomTextView nsfwTextView;
|
||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_link_activity)
|
||||
@@ -125,6 +143,11 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
MaterialButton suggestTitleButton;
|
||||
@BindView(R.id.post_link_edit_text_post_link_activity)
|
||||
EditText linkEditText;
|
||||
|
||||
@BindView(R.id.post_text_content_edit_text_post_text_activity)
|
||||
EditText contentEditText;
|
||||
@BindView(R.id.markdown_bottom_bar_recycler_view_post_text_activity)
|
||||
RecyclerView markdownBottomBarRecyclerView;
|
||||
@Inject
|
||||
@Named("no_oauth")
|
||||
RetrofitHolder mRetrofit;
|
||||
@@ -147,6 +170,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
private String mAccessToken;
|
||||
private String iconUrl;
|
||||
private String subredditName;
|
||||
private SubscribedSubredditData communityData;
|
||||
private boolean subredditSelected = false;
|
||||
private boolean subredditIsUser;
|
||||
private boolean loadSubredditIconSuccessful = true;
|
||||
@@ -167,6 +191,9 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
private FlairBottomSheetFragment flairSelectionBottomSheetFragment;
|
||||
private Snackbar mPostingSnackbar;
|
||||
|
||||
private Uri capturedImageUri;
|
||||
private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
@@ -190,7 +217,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||
|
||||
@@ -200,6 +227,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
||||
@@ -225,7 +253,6 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
if (subredditName != null) {
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
if (!loadSubredditIconSuccessful) {
|
||||
loadSubredditIcon();
|
||||
}
|
||||
@@ -236,17 +263,6 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
mPostingSnackbar.show();
|
||||
}
|
||||
|
||||
if (flair != null) {
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
if (isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
}
|
||||
if (isNSFW) {
|
||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||
@@ -260,11 +276,25 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||
loadSubredditIconSuccessful = false;
|
||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
loadSubredditIcon();
|
||||
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
{
|
||||
communityData = new SubscribedSubredditData(subredditData);
|
||||
subredditName = communityData.getName();
|
||||
subredditIsUser = false;
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
loadSubredditIcon();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
@@ -298,40 +328,12 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
if (subredditIsUser) {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||
} else {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||
}
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
flairTextView.setOnClickListener(view -> {
|
||||
if (flair == null) {
|
||||
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
flairSelectionBottomSheetFragment.setArguments(bundle);
|
||||
flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
|
||||
} else {
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
}
|
||||
});
|
||||
|
||||
spoilerTextView.setOnClickListener(view -> {
|
||||
if (!isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
isSpoiler = true;
|
||||
} else {
|
||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
isSpoiler = false;
|
||||
}
|
||||
});
|
||||
|
||||
nsfwTextView.setOnClickListener(view -> {
|
||||
if (!isNSFW) {
|
||||
@@ -360,21 +362,46 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
.baseUrl("http://localhost/")
|
||||
.addConverterFactory(ScalarsConverterFactory.create())
|
||||
.build().create(TitleSuggestion.class).getHtml(url).enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
titleEditText.setText(response.body().substring(response.body().indexOf("<title>") + 7, response.body().indexOf("</title>")));
|
||||
} else {
|
||||
Toast.makeText(PostLinkActivity.this, R.string.suggest_title_failed, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
titleEditText.setText(response.body().substring(response.body().indexOf("<title>") + 7, response.body().indexOf("</title>")));
|
||||
} else {
|
||||
Toast.makeText(PostLinkActivity.this, R.string.suggest_title_failed, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
Toast.makeText(PostLinkActivity.this, R.string.suggest_title_failed, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
Toast.makeText(PostLinkActivity.this, R.string.suggest_title_failed, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(
|
||||
mCustomThemeWrapper, new MarkdownBottomBarRecyclerViewAdapter.ItemClickListener() {
|
||||
@Override
|
||||
public void onClick(int item) {
|
||||
MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(
|
||||
PostLinkActivity.this, contentEditText, item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUploadImage() {
|
||||
Utils.hideKeyboard(PostLinkActivity.this);
|
||||
UploadedImagesBottomSheetFragment fragment = new UploadedImagesBottomSheetFragment();
|
||||
Bundle arguments = new Bundle();
|
||||
arguments.putParcelableArrayList(UploadedImagesBottomSheetFragment.EXTRA_UPLOADED_IMAGES,
|
||||
uploadedImages);
|
||||
fragment.setArguments(arguments);
|
||||
fragment.show(getSupportFragmentManager(), fragment.getTag());
|
||||
}
|
||||
});
|
||||
|
||||
markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManagerBugFixed(this,
|
||||
LinearLayoutManager.HORIZONTAL, false));
|
||||
markdownBottomBarRecyclerView.setAdapter(adapter);
|
||||
}
|
||||
|
||||
private void loadCurrentAccount() {
|
||||
@@ -426,27 +453,26 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
nsfwTextView.setTextColor(primaryTextColor);
|
||||
titleEditText.setTextColor(primaryTextColor);
|
||||
titleEditText.setHintTextColor(secondaryTextColor);
|
||||
suggestTitleButton.setBackgroundColor(mCustomThemeWrapper.getColorPrimaryLightTheme());
|
||||
suggestTitleButton.setTextColor(mCustomThemeWrapper.getButtonTextColor());
|
||||
contentEditText.setTextColor(primaryTextColor);
|
||||
contentEditText.setHintTextColor(secondaryTextColor);
|
||||
linkEditText.setTextColor(primaryTextColor);
|
||||
linkEditText.setHintTextColor(secondaryTextColor);
|
||||
if (typeface != null) {
|
||||
subredditNameTextView.setTypeface(typeface);
|
||||
rulesButton.setTypeface(typeface);
|
||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||
flairTextView.setTypeface(typeface);
|
||||
spoilerTextView.setTypeface(typeface);
|
||||
nsfwTextView.setTypeface(typeface);
|
||||
titleEditText.setTypeface(typeface);
|
||||
suggestTitleButton.setTypeface(typeface);
|
||||
}
|
||||
if (contentTypeface != null) {
|
||||
linkEditText.setTypeface(contentTypeface);
|
||||
contentEditText.setTypeface(contentTypeface);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -465,12 +491,12 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
}
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, communityData.getQualified_name(),
|
||||
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
}
|
||||
|
||||
private void promptAlertDialog(int titleResId, int messageResId) {
|
||||
@@ -541,9 +567,10 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
|
||||
Intent intent = new Intent(this, SubmitPostService.class);
|
||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||
intent.putExtra(SubmitPostService.EXTRA_CONTENT, linkEditText.getText().toString());
|
||||
intent.putExtra(SubmitPostService.EXTRA_BODY, contentEditText.getText().toString());
|
||||
intent.putExtra(SubmitPostService.EXTRA_URL, linkEditText.getText().toString());
|
||||
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_LINK);
|
||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
||||
@@ -575,6 +602,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
||||
@@ -589,22 +617,29 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||
if (resultCode == RESULT_OK) {
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||
communityData = data.getExtras().getParcelable(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||
subredditName = communityData.getName();
|
||||
iconUrl = communityData.getIconUrl();
|
||||
subredditSelected = true;
|
||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
||||
subredditIsUser = false;
|
||||
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
displaySubredditIcon();
|
||||
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
||||
if (data == null) {
|
||||
Toast.makeText(PostLinkActivity.this, R.string.error_getting_image, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, contentEditText, coordinatorLayout, data.getData(), uploadedImages);
|
||||
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, contentEditText, coordinatorLayout, capturedImageUri, uploadedImages);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -618,10 +653,6 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
@Override
|
||||
public void flairSelected(Flair flair) {
|
||||
this.flair = flair;
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -664,4 +695,37 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uploadImage() {
|
||||
Intent intent = new Intent();
|
||||
intent.setType("image/*");
|
||||
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||
startActivityForResult(Intent.createChooser(intent,
|
||||
getResources().getString(R.string.select_from_gallery)), PICK_IMAGE_REQUEST_CODE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void captureImage() {
|
||||
Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||
try {
|
||||
capturedImageUri = FileProvider.getUriForFile(this, "eu.toldi.infinityforlemmy.provider",
|
||||
File.createTempFile("captured_image", ".jpg", getExternalFilesDir(Environment.DIRECTORY_PICTURES)));
|
||||
pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);
|
||||
startActivityForResult(pictureIntent, CAPTURE_IMAGE_REQUEST_CODE);
|
||||
} catch (IOException ex) {
|
||||
Toast.makeText(this, R.string.error_creating_temp_file, Toast.LENGTH_SHORT).show();
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(this, R.string.no_camera_available, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertImageUrl(UploadedImage uploadedImage) {
|
||||
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
||||
"",
|
||||
0, "![]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
@@ -64,6 +63,9 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.events.SubmitPollPostEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
@@ -87,6 +89,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
private static final String IS_NSFW_STATE = "INS";
|
||||
|
||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||
|
||||
@BindView(R.id.coordinator_layout_post_poll_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@@ -108,10 +111,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
MaterialButton rulesButton;
|
||||
@BindView(R.id.divider_1_post_poll_activity)
|
||||
MaterialDivider divider1;
|
||||
@BindView(R.id.flair_custom_text_view_post_poll_activity)
|
||||
CustomTextView flairTextView;
|
||||
@BindView(R.id.spoiler_custom_text_view_post_poll_activity)
|
||||
CustomTextView spoilerTextView;
|
||||
@BindView(R.id.nsfw_custom_text_view_post_poll_activity)
|
||||
CustomTextView nsfwTextView;
|
||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_poll_activity)
|
||||
@@ -173,6 +172,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
private Account selectedAccount;
|
||||
private SubscribedSubredditData communityData;
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
private String iconUrl;
|
||||
@@ -219,7 +219,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||
|
||||
@@ -232,6 +232,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
||||
@@ -257,7 +258,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
if (subredditName != null) {
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
if (!loadSubredditIconSuccessful) {
|
||||
loadSubredditIcon();
|
||||
}
|
||||
@@ -268,17 +268,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
mPostingSnackbar.show();
|
||||
}
|
||||
|
||||
if (flair != null) {
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
if (isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
}
|
||||
if (isNSFW) {
|
||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||
@@ -292,11 +281,25 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||
loadSubredditIconSuccessful = false;
|
||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
loadSubredditIcon();
|
||||
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
{
|
||||
communityData = new SubscribedSubredditData(subredditData);
|
||||
subredditName = communityData.getName();
|
||||
subredditIsUser = false;
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
loadSubredditIcon();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
@@ -325,40 +328,12 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
if (subredditIsUser) {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||
} else {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||
}
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
flairTextView.setOnClickListener(view -> {
|
||||
if (flair == null) {
|
||||
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
flairSelectionBottomSheetFragment.setArguments(bundle);
|
||||
flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
|
||||
} else {
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
}
|
||||
});
|
||||
|
||||
spoilerTextView.setOnClickListener(view -> {
|
||||
if (!isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
isSpoiler = true;
|
||||
} else {
|
||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
isSpoiler = false;
|
||||
}
|
||||
});
|
||||
|
||||
nsfwTextView.setOnClickListener(view -> {
|
||||
if (!isNSFW) {
|
||||
@@ -431,8 +406,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
nsfwTextView.setTextColor(primaryTextColor);
|
||||
titleEditText.setTextColor(primaryTextColor);
|
||||
titleEditText.setHintTextColor(secondaryTextColor);
|
||||
@@ -481,8 +454,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
subredditNameTextView.setTypeface(typeface);
|
||||
rulesButton.setTypeface(typeface);
|
||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||
flairTextView.setTypeface(typeface);
|
||||
spoilerTextView.setTypeface(typeface);
|
||||
nsfwTextView.setTypeface(typeface);
|
||||
titleEditText.setTypeface(typeface);
|
||||
option1TextInputEditText.setTypeface(typeface);
|
||||
@@ -529,7 +500,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
}
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName, mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName, mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
@@ -631,7 +602,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
|
||||
Intent intent = new Intent(this, SubmitPostService.class);
|
||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||
intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_POLL);
|
||||
PollPayload payload = new PollPayload(subredditName, titleEditText.getText().toString(),
|
||||
optionList.toArray(new String[0]), (int) votingLengthSlider.getValue(), isNSFW, isSpoiler, flair, receivePostReplyNotificationsSwitchMaterial.isChecked(),
|
||||
@@ -669,6 +640,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
||||
@@ -685,19 +657,16 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||
subredditName = communityData.getName();
|
||||
iconUrl = communityData.getIconUrl();
|
||||
subredditSelected = true;
|
||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
||||
subredditIsUser = false;
|
||||
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
displaySubredditIcon();
|
||||
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
}
|
||||
}
|
||||
@@ -706,10 +675,6 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
@Override
|
||||
public void flairSelected(Flair flair) {
|
||||
this.flair = flair;
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,7 +12,6 @@ import android.os.Handler;
|
||||
import android.provider.MediaStore;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
@@ -69,6 +68,9 @@ import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||
import eu.toldi.infinityforlemmy.events.SubmitTextOrLinkPostEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
@@ -78,7 +80,6 @@ import retrofit2.Retrofit;
|
||||
|
||||
public class PostTextActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
|
||||
UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener {
|
||||
|
||||
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
||||
static final String EXTRA_CONTENT = "EC";
|
||||
|
||||
@@ -98,6 +99,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
private static final int PICK_IMAGE_REQUEST_CODE = 100;
|
||||
private static final int CAPTURE_IMAGE_REQUEST_CODE = 200;
|
||||
private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300;
|
||||
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||
|
||||
@BindView(R.id.coordinator_layout_post_text_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@@ -119,10 +121,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
MaterialButton rulesButton;
|
||||
@BindView(R.id.divider_1_post_text_activity)
|
||||
MaterialDivider divider1;
|
||||
@BindView(R.id.flair_custom_text_view_post_text_activity)
|
||||
CustomTextView flairTextView;
|
||||
@BindView(R.id.spoiler_custom_text_view_post_text_activity)
|
||||
CustomTextView spoilerTextView;
|
||||
@BindView(R.id.nsfw_custom_text_view_post_text_activity)
|
||||
CustomTextView nsfwTextView;
|
||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_text_activity)
|
||||
@@ -164,6 +162,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
private String mAccessToken;
|
||||
private String iconUrl;
|
||||
private String subredditName;
|
||||
private SubscribedSubredditData communityData;
|
||||
private boolean subredditSelected = false;
|
||||
private boolean subredditIsUser;
|
||||
private boolean loadSubredditIconSuccessful = true;
|
||||
@@ -209,7 +208,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||
|
||||
@@ -219,6 +218,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
|
||||
@@ -245,7 +245,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
if (subredditName != null) {
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
if (!loadSubredditIconSuccessful) {
|
||||
loadSubredditIcon();
|
||||
}
|
||||
@@ -256,17 +255,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
mPostingSnackbar.show();
|
||||
}
|
||||
|
||||
if (flair != null) {
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
if (isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
}
|
||||
if (isNSFW) {
|
||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||
@@ -280,11 +268,25 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||
loadSubredditIconSuccessful = false;
|
||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
loadSubredditIcon();
|
||||
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
{
|
||||
communityData = new SubscribedSubredditData(subredditData);
|
||||
subredditName = communityData.getName();
|
||||
subredditIsUser = false;
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
loadSubredditIcon();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
@@ -318,44 +320,12 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
if (subredditIsUser) {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||
} else {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||
}
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
flairTextView.setOnClickListener(view -> {
|
||||
if (flair == null) {
|
||||
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
if (subredditIsUser) {
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||
} else {
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
}
|
||||
flairSelectionBottomSheetFragment.setArguments(bundle);
|
||||
flairSelectionBottomSheetFragment.show(getSupportFragmentManager(), flairSelectionBottomSheetFragment.getTag());
|
||||
} else {
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
}
|
||||
});
|
||||
|
||||
spoilerTextView.setOnClickListener(view -> {
|
||||
if (!isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
isSpoiler = true;
|
||||
} else {
|
||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
isSpoiler = false;
|
||||
}
|
||||
});
|
||||
|
||||
nsfwTextView.setOnClickListener(view -> {
|
||||
if (!isNSFW) {
|
||||
@@ -448,8 +418,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
nsfwTextView.setTextColor(primaryTextColor);
|
||||
titleEditText.setTextColor(primaryTextColor);
|
||||
titleEditText.setHintTextColor(secondaryTextColor);
|
||||
@@ -459,8 +427,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
subredditNameTextView.setTypeface(typeface);
|
||||
rulesButton.setTypeface(typeface);
|
||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||
flairTextView.setTypeface(typeface);
|
||||
spoilerTextView.setTypeface(typeface);
|
||||
nsfwTextView.setTypeface(typeface);
|
||||
titleEditText.setTypeface(typeface);
|
||||
}
|
||||
@@ -484,12 +450,12 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
}
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, communityData.getQualified_name(),
|
||||
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
}
|
||||
|
||||
private void promptAlertDialog(int titleResId, int messageResId) {
|
||||
@@ -562,18 +528,12 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
|
||||
mPostingSnackbar.show();
|
||||
|
||||
String subredditName;
|
||||
if (subredditIsUser) {
|
||||
subredditName = "u_" + subredditNameTextView.getText().toString();
|
||||
} else {
|
||||
subredditName = subredditNameTextView.getText().toString();
|
||||
}
|
||||
|
||||
Intent intent = new Intent(this, SubmitPostService.class);
|
||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||
intent.putExtra(SubmitPostService.EXTRA_CONTENT, contentEditText.getText().toString());
|
||||
intent.putExtra(SubmitPostService.EXTRA_BODY, contentEditText.getText().toString());
|
||||
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_SELF);
|
||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
||||
@@ -599,6 +559,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||
@@ -617,19 +578,16 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == RESULT_OK) {
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||
subredditName = communityData.getName();
|
||||
iconUrl = communityData.getIconUrl();
|
||||
subredditSelected = true;
|
||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
||||
subredditIsUser = false;
|
||||
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
displaySubredditIcon();
|
||||
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
|
||||
} else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
||||
@@ -637,10 +595,10 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
Toast.makeText(PostTextActivity.this, R.string.error_getting_image, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
Utils.uploadImageToReddit(this, mExecutor, mOauthRetrofit, mUploadMediaRetrofit,
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, contentEditText, coordinatorLayout, data.getData(), uploadedImages);
|
||||
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
|
||||
Utils.uploadImageToReddit(this, mExecutor, mOauthRetrofit, mUploadMediaRetrofit,
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, contentEditText, coordinatorLayout, capturedImageUri, uploadedImages);
|
||||
} else if (requestCode == MARKDOWN_PREVIEW_REQUEST_CODE) {
|
||||
submitPost(mMenu.findItem(R.id.action_send_post_text_activity));
|
||||
@@ -658,10 +616,6 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
@Override
|
||||
public void flairSelected(Flair flair) {
|
||||
this.flair = flair;
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@@ -719,8 +673,8 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
||||
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
||||
"[" + uploadedImage.imageName + "](" + uploadedImage.imageUrl + ")",
|
||||
0, "[]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
"",
|
||||
0, "![]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -67,6 +67,9 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.events.SubmitVideoOrGifPostEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import pl.droidsonroids.gif.GifImageView;
|
||||
@@ -92,6 +95,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||
private static final int PICK_VIDEO_REQUEST_CODE = 1;
|
||||
private static final int CAPTURE_VIDEO_REQUEST_CODE = 2;
|
||||
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||
|
||||
@BindView(R.id.coordinator_layout_post_video_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@@ -113,10 +117,6 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
MaterialButton rulesButton;
|
||||
@BindView(R.id.divider_1_post_video_activity)
|
||||
MaterialDivider divider1;
|
||||
@BindView(R.id.flair_custom_text_view_post_video_activity)
|
||||
CustomTextView flairTextView;
|
||||
@BindView(R.id.spoiler_custom_text_view_post_video_activity)
|
||||
CustomTextView spoilerTextView;
|
||||
@BindView(R.id.nsfw_custom_text_view_post_video_activity)
|
||||
CustomTextView nsfwTextView;
|
||||
@BindView(R.id.receive_post_reply_notifications_linear_layout_post_video_activity)
|
||||
@@ -168,6 +168,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
private String mAccountName;
|
||||
private String iconUrl;
|
||||
private String subredditName;
|
||||
private SubscribedSubredditData communityData;
|
||||
private boolean subredditSelected = false;
|
||||
private boolean subredditIsUser;
|
||||
private Uri videoUri;
|
||||
@@ -215,7 +216,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
player = new ExoPlayer.Builder(this).build();
|
||||
videoPlayerView.setPlayer(player);
|
||||
@@ -235,6 +236,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||
@@ -266,7 +268,6 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
if (subredditName != null) {
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
if (!loadSubredditIconSuccessful) {
|
||||
loadSubredditIcon();
|
||||
}
|
||||
@@ -277,17 +278,6 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
mPostingSnackbar.show();
|
||||
}
|
||||
|
||||
if (flair != null) {
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
if (isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
}
|
||||
if (isNSFW) {
|
||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||
@@ -301,11 +291,25 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
|
||||
loadSubredditIconSuccessful = false;
|
||||
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
loadSubredditIcon();
|
||||
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
{
|
||||
communityData = new SubscribedSubredditData(subredditData);
|
||||
subredditName = communityData.getName();
|
||||
subredditIsUser = false;
|
||||
subredditSelected = true;
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
loadSubredditIcon();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
@@ -341,40 +345,12 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
if (subredditIsUser) {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
|
||||
} else {
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, communityData.getQualified_name());
|
||||
}
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
flairTextView.setOnClickListener(view -> {
|
||||
if (flair == null) {
|
||||
mFlairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
mFlairSelectionBottomSheetFragment.setArguments(bundle);
|
||||
mFlairSelectionBottomSheetFragment.show(getSupportFragmentManager(), mFlairSelectionBottomSheetFragment.getTag());
|
||||
} else {
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
}
|
||||
});
|
||||
|
||||
spoilerTextView.setOnClickListener(view -> {
|
||||
if (!isSpoiler) {
|
||||
spoilerTextView.setBackgroundColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setBorderColor(spoilerBackgroundColor);
|
||||
spoilerTextView.setTextColor(spoilerTextColor);
|
||||
isSpoiler = true;
|
||||
} else {
|
||||
spoilerTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
isSpoiler = false;
|
||||
}
|
||||
});
|
||||
|
||||
nsfwTextView.setOnClickListener(view -> {
|
||||
if (!isNSFW) {
|
||||
@@ -468,20 +444,17 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
spoilerTextView.setTextColor(primaryTextColor);
|
||||
nsfwTextView.setTextColor(primaryTextColor);
|
||||
titleEditText.setTextColor(primaryTextColor);
|
||||
titleEditText.setHintTextColor(secondaryTextColor);
|
||||
applyFABTheme(captureFab);
|
||||
applyFABTheme(selectFromLibraryFab);
|
||||
boolean circularFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false);
|
||||
applyFABTheme(captureFab, circularFab);
|
||||
applyFABTheme(selectFromLibraryFab, circularFab);
|
||||
selectAgainTextView.setTextColor(mCustomThemeWrapper.getColorAccent());
|
||||
if (typeface != null) {
|
||||
subredditNameTextView.setTypeface(typeface);
|
||||
rulesButton.setTypeface(typeface);
|
||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||
flairTextView.setTypeface(typeface);
|
||||
spoilerTextView.setTypeface(typeface);
|
||||
nsfwTextView.setTypeface(typeface);
|
||||
titleEditText.setTypeface(typeface);
|
||||
selectAgainTextView.setTypeface(typeface);
|
||||
@@ -513,11 +486,11 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
}
|
||||
|
||||
private void promptAlertDialog(int titleResId, int messageResId) {
|
||||
@@ -589,7 +562,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
Intent intent = new Intent(this, SubmitPostService.class);
|
||||
intent.setData(videoUri);
|
||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
||||
@@ -637,6 +610,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
||||
@@ -657,19 +631,16 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
if (data != null) {
|
||||
subredditName = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
iconUrl = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||
subredditName = communityData.getName();
|
||||
iconUrl = communityData.getIconUrl();
|
||||
subredditSelected = true;
|
||||
subredditIsUser = data.getBooleanExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER, false);
|
||||
subredditIsUser = false;
|
||||
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
displaySubredditIcon();
|
||||
|
||||
flairTextView.setVisibility(View.VISIBLE);
|
||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
||||
flairTextView.setTextColor(primaryTextColor);
|
||||
flairTextView.setText(getString(R.string.flair));
|
||||
flair = null;
|
||||
}
|
||||
}
|
||||
@@ -707,10 +678,6 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
||||
@Override
|
||||
public void flairSelected(Flair flair) {
|
||||
this.flair = flair;
|
||||
flairTextView.setText(flair.getText());
|
||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
||||
flairTextView.setBorderColor(flairBackgroundColor);
|
||||
flairTextView.setTextColor(flairTextColor);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.content.SharedPreferences;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
@@ -31,7 +30,6 @@ import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.FetchRules;
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
@@ -41,6 +39,8 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||
import eu.toldi.infinityforlemmy.customviews.slidr.widget.SliderPanel;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
@@ -134,26 +134,27 @@ public class RulesActivity extends BaseActivity {
|
||||
|
||||
mAdapter = new RulesRecyclerViewAdapter(this, mCustomThemeWrapper, sliderPanel);
|
||||
recyclerView.setAdapter(mAdapter);
|
||||
|
||||
FetchRules.fetchRules(mExecutor, new Handler(), mAccessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit, mAccessToken, mSubredditName, new FetchRules.FetchRulesListener() {
|
||||
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), mSubredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void success(ArrayList<Rule> rules) {
|
||||
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
progressBar.setVisibility(View.GONE);
|
||||
if (rules == null || rules.size() == 0) {
|
||||
String description = subredditData.getDescription();
|
||||
if (description == null || description.isEmpty()) {
|
||||
errorTextView.setVisibility(View.VISIBLE);
|
||||
errorTextView.setText(R.string.no_rule);
|
||||
errorTextView.setOnClickListener(view -> {
|
||||
});
|
||||
}
|
||||
ArrayList<Rule> rules = new ArrayList<>();
|
||||
rules.add(new Rule("Rules", description));
|
||||
mAdapter.changeDataset(rules);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed() {
|
||||
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||
displayError();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -184,21 +185,24 @@ public class RulesActivity extends BaseActivity {
|
||||
errorTextView.setOnClickListener(view -> {
|
||||
progressBar.setVisibility(View.VISIBLE);
|
||||
errorTextView.setVisibility(View.GONE);
|
||||
FetchRules.fetchRules(mExecutor, new Handler(), mAccessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit, mAccessToken, mSubredditName, new FetchRules.FetchRulesListener() {
|
||||
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), mSubredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void success(ArrayList<Rule> rules) {
|
||||
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
progressBar.setVisibility(View.GONE);
|
||||
if (rules == null || rules.size() == 0) {
|
||||
String description = subredditData.getDescription();
|
||||
if (description == null || description.isEmpty()) {
|
||||
errorTextView.setVisibility(View.VISIBLE);
|
||||
errorTextView.setText(R.string.no_rule);
|
||||
errorTextView.setOnClickListener(view -> {
|
||||
});
|
||||
}
|
||||
ArrayList<Rule> rules = new ArrayList<>();
|
||||
rules.add(new Rule("Rules", description));
|
||||
mAdapter.changeDataset(rules);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed() {
|
||||
public void onFetchSubredditDataFail(boolean isQuarantined) {
|
||||
displayError();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -52,6 +52,7 @@ import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQuery;
|
||||
import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQueryViewModel;
|
||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
@@ -128,6 +129,8 @@ public class SearchActivity extends BaseActivity {
|
||||
private String query;
|
||||
private String subredditName;
|
||||
|
||||
private SubscribedSubredditData communityData;
|
||||
|
||||
private String communityQualifiedName;
|
||||
private boolean subredditIsUser;
|
||||
private boolean searchOnlySubreddits;
|
||||
@@ -183,7 +186,7 @@ public class SearchActivity extends BaseActivity {
|
||||
subredditNameList.add(subredditData.getName());
|
||||
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, subredditNameList);
|
||||
} else {
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, subredditData.getName());
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, new SubscribedSubredditData(subredditData));
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, subredditData.getIconUrl());
|
||||
}
|
||||
setResult(Activity.RESULT_OK, returnIntent);
|
||||
@@ -429,12 +432,15 @@ public class SearchActivity extends BaseActivity {
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
if (resultCode == RESULT_OK && data != null) {
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||
subredditName = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
subredditIsUser = data.getBooleanExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER, false);
|
||||
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||
|
||||
if (subredditName == null) {
|
||||
subredditIsUser = false;
|
||||
|
||||
if (communityData == null) {
|
||||
subredditNameTextView.setText(R.string.all_communities);
|
||||
} else {
|
||||
subredditName = communityData.getName();
|
||||
communityQualifiedName = communityData.getQualified_name();
|
||||
subredditNameTextView.setText(subredditName);
|
||||
}
|
||||
} else if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {
|
||||
@@ -442,9 +448,9 @@ public class SearchActivity extends BaseActivity {
|
||||
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
||||
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, data.getStringArrayListExtra(SearchSubredditsResultActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES));
|
||||
} else {
|
||||
String name = data.getStringExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
SubscribedSubredditData communityData = data.getParcelableExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
String iconUrl = data.getStringExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name);
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, communityData);
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl);
|
||||
}
|
||||
setResult(Activity.RESULT_OK, returnIntent);
|
||||
|
||||
@@ -238,7 +238,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||
applyTabLayoutTheme(tabLayout);
|
||||
applyFABTheme(fab);
|
||||
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
}
|
||||
|
||||
private void bindView(Bundle savedInstanceState) {
|
||||
@@ -558,10 +558,6 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
||||
goToUser();
|
||||
break;
|
||||
}
|
||||
case FABMoreOptionsBottomSheetFragment.FAB_RANDOM: {
|
||||
random();
|
||||
break;
|
||||
}
|
||||
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
||||
if (sectionsPagerAdapter != null) {
|
||||
sectionsPagerAdapter.hideReadPosts();
|
||||
@@ -789,6 +785,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
||||
bundle.putBoolean(SubredditListingFragment.EXTRA_IS_GETTING_SUBREDDIT_INFO, false);
|
||||
bundle.putString(SubredditListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(SubredditListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||
bundle.putString(SubredditListingFragment.EXTRA_ACCOUNT_QUALIFIED_NAME, mAccountQualifiedName);
|
||||
mFragment.setArguments(bundle);
|
||||
return mFragment;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,8 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.fragments.SubredditListingFragment;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
|
||||
public class SearchSubredditsResultActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||
@@ -64,6 +66,8 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
|
||||
private String mAccountQualifiedName;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
@@ -107,6 +111,7 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
mFragment = new SubredditListingFragment();
|
||||
@@ -115,6 +120,7 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti
|
||||
bundle.putBoolean(SubredditListingFragment.EXTRA_IS_GETTING_SUBREDDIT_INFO, true);
|
||||
bundle.putString(SubredditListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(SubredditListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||
bundle.putString(SubredditListingFragment.EXTRA_ACCOUNT_QUALIFIED_NAME, mAccountQualifiedName);
|
||||
bundle.putBoolean(SubredditListingFragment.EXTRA_IS_MULTI_SELECTION, getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false));
|
||||
mFragment.setArguments(bundle);
|
||||
} else {
|
||||
@@ -141,10 +147,10 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
|
||||
}
|
||||
|
||||
public void getSelectedSubreddit(String name, String iconUrl) {
|
||||
public void getSelectedSubreddit(SubredditData subredditData) {
|
||||
Intent returnIntent = new Intent();
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name);
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl);
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, new SubscribedSubredditData(subredditData));
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, subredditData.getIconUrl());
|
||||
setResult(Activity.RESULT_OK, returnIntent);
|
||||
finish();
|
||||
}
|
||||
|
||||
@@ -194,7 +194,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
||||
protected void applyCustomTheme() {
|
||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||
applyFABTheme(fab);
|
||||
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package eu.toldi.infinityforlemmy.activities;
|
||||
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.provider.MediaStore;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
@@ -10,12 +15,20 @@ import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
@@ -23,13 +36,24 @@ import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
|
||||
import eu.toldi.infinityforlemmy.UploadedImage;
|
||||
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.message.ComposeMessage;
|
||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||
import eu.toldi.infinityforlemmy.privatemessage.LemmyPrivateMessageAPI;
|
||||
import eu.toldi.infinityforlemmy.privatemessage.PrivateMessage;
|
||||
import eu.toldi.infinityforlemmy.user.BasicUserInfo;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import retrofit2.Retrofit;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
|
||||
public class SendPrivateMessageActivity extends BaseActivity {
|
||||
public static final String EXTRA_RECIPIENT_USERNAME = "ERU";
|
||||
public class SendPrivateMessageActivity extends BaseActivity implements UploadImageEnabledActivity {
|
||||
public static final String EXTRA_RECIPIENT_USER_INFO = "ERUI";
|
||||
|
||||
private static final int PICK_IMAGE_REQUEST_CODE = 100;
|
||||
private static final int CAPTURE_IMAGE_REQUEST_CODE = 200;
|
||||
@BindView(R.id.coordinator_layout_send_private_message_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@BindView(R.id.appbar_layout_send_private_message_activity)
|
||||
@@ -40,15 +64,20 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
||||
EditText usernameEditText;
|
||||
@BindView(R.id.divider_1_send_private_message_activity)
|
||||
View divider1;
|
||||
@BindView(R.id.subjet_edit_text_send_private_message_activity)
|
||||
EditText subjectEditText;
|
||||
@BindView(R.id.divider_2_send_private_message_activity)
|
||||
View divider2;
|
||||
@BindView(R.id.content_edit_text_send_private_message_activity)
|
||||
EditText messageEditText;
|
||||
|
||||
@BindView(R.id.markdown_bottom_bar_recycler_view_send_private_message_activity)
|
||||
RecyclerView markdownBottomBarRecyclerView;
|
||||
@Inject
|
||||
@Named("oauth")
|
||||
Retrofit mOauthRetrofit;
|
||||
@Named("no_oauth")
|
||||
RetrofitHolder mRetrofit;
|
||||
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
|
||||
@Inject
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
@@ -57,15 +86,24 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
||||
SharedPreferences mCurrentAccountSharedPreferences;
|
||||
@Inject
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
|
||||
@Inject
|
||||
LemmyPrivateMessageAPI mLemmyPrivateMessageAPI;
|
||||
private String mAccessToken;
|
||||
|
||||
private BasicUserInfo mRecipientBasicUserInfo;
|
||||
private boolean isSubmitting = false;
|
||||
|
||||
private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
|
||||
|
||||
private Uri capturedImageUri;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
|
||||
setImmersiveModeNotApplicable();
|
||||
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_send_private_message);
|
||||
|
||||
@@ -77,14 +115,66 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
||||
addOnOffsetChangedListener(appBarLayout);
|
||||
}
|
||||
|
||||
MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(
|
||||
mCustomThemeWrapper, new MarkdownBottomBarRecyclerViewAdapter.ItemClickListener() {
|
||||
@Override
|
||||
public void onClick(int item) {
|
||||
MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(
|
||||
SendPrivateMessageActivity.this, messageEditText, item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUploadImage() {
|
||||
Utils.hideKeyboard(SendPrivateMessageActivity.this);
|
||||
UploadedImagesBottomSheetFragment fragment = new UploadedImagesBottomSheetFragment();
|
||||
Bundle arguments = new Bundle();
|
||||
arguments.putParcelableArrayList(UploadedImagesBottomSheetFragment.EXTRA_UPLOADED_IMAGES,
|
||||
uploadedImages);
|
||||
fragment.setArguments(arguments);
|
||||
fragment.show(getSupportFragmentManager(), fragment.getTag());
|
||||
}
|
||||
});
|
||||
|
||||
markdownBottomBarRecyclerView.setLayoutManager(new LinearLayoutManagerBugFixed(this,
|
||||
LinearLayoutManagerBugFixed.HORIZONTAL, false));
|
||||
markdownBottomBarRecyclerView.setAdapter(adapter);
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
String username = getIntent().getStringExtra(EXTRA_RECIPIENT_USERNAME);
|
||||
if (username != null) {
|
||||
usernameEditText.setText(username);
|
||||
if (savedInstanceState != null) {
|
||||
mRecipientBasicUserInfo = savedInstanceState.getParcelable(EXTRA_RECIPIENT_USER_INFO);
|
||||
} else {
|
||||
mRecipientBasicUserInfo = getIntent().getParcelableExtra(EXTRA_RECIPIENT_USER_INFO);
|
||||
}
|
||||
|
||||
if (mRecipientBasicUserInfo != null) {
|
||||
usernameEditText.setText(mRecipientBasicUserInfo.getQualifiedName());
|
||||
usernameEditText.setEnabled(false);
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == RESULT_OK) {
|
||||
if (requestCode == PICK_IMAGE_REQUEST_CODE) {
|
||||
if (data == null) {
|
||||
Toast.makeText(SendPrivateMessageActivity.this, R.string.error_getting_image, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, messageEditText, coordinatorLayout, data.getData(), uploadedImages);
|
||||
} else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
|
||||
Utils.uploadImageToReddit(this, mExecutor, mRetrofit,
|
||||
mAccessToken, messageEditText, coordinatorLayout, capturedImageUri, uploadedImages);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -108,12 +198,6 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (subjectEditText.getText() == null || subjectEditText.getText().toString().equals("")) {
|
||||
isSubmitting = false;
|
||||
Snackbar.make(coordinatorLayout, R.string.message_subject_required, Snackbar.LENGTH_LONG).show();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (messageEditText.getText() == null || messageEditText.getText().toString().equals("")) {
|
||||
isSubmitting = false;
|
||||
Snackbar.make(coordinatorLayout, R.string.message_content_required, Snackbar.LENGTH_LONG).show();
|
||||
@@ -125,32 +209,26 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
||||
Snackbar sendingSnackbar = Snackbar.make(coordinatorLayout, R.string.sending_message, Snackbar.LENGTH_INDEFINITE);
|
||||
sendingSnackbar.show();
|
||||
|
||||
ComposeMessage.composeMessage(mOauthRetrofit, mAccessToken, getResources().getConfiguration().locale,
|
||||
usernameEditText.getText().toString(), subjectEditText.getText().toString(),
|
||||
messageEditText.getText().toString(), new ComposeMessage.ComposeMessageListener() {
|
||||
@Override
|
||||
public void composeMessageSuccess() {
|
||||
isSubmitting = false;
|
||||
item.setEnabled(true);
|
||||
item.getIcon().setAlpha(255);
|
||||
Toast.makeText(SendPrivateMessageActivity.this, R.string.send_message_success, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
mLemmyPrivateMessageAPI.sendPrivateMessage(mAccessToken, mRecipientBasicUserInfo.getId(), messageEditText.getText().toString(), new LemmyPrivateMessageAPI.PrivateMessageSentListener() {
|
||||
@Override
|
||||
public void onPrivateMessageSentSuccess(@NonNull PrivateMessage privateMessage) {
|
||||
isSubmitting = false;
|
||||
item.setEnabled(true);
|
||||
item.getIcon().setAlpha(255);
|
||||
Toast.makeText(SendPrivateMessageActivity.this, R.string.send_message_success, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void composeMessageFailed(String errorMessage) {
|
||||
isSubmitting = false;
|
||||
sendingSnackbar.dismiss();
|
||||
item.setEnabled(true);
|
||||
item.getIcon().setAlpha(255);
|
||||
@Override
|
||||
public void onPrivateMessageSentError() {
|
||||
isSubmitting = false;
|
||||
sendingSnackbar.dismiss();
|
||||
item.setEnabled(true);
|
||||
item.getIcon().setAlpha(255);
|
||||
|
||||
if (errorMessage == null || errorMessage.equals("")) {
|
||||
Snackbar.make(coordinatorLayout, R.string.send_message_failed, Snackbar.LENGTH_LONG).show();
|
||||
} else {
|
||||
Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
Snackbar.make(coordinatorLayout, R.string.send_message_failed, Snackbar.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@@ -159,6 +237,7 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable(EXTRA_RECIPIENT_USER_INFO, mRecipientBasicUserInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -177,19 +256,49 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
|
||||
int primaryTextColor = mCustomThemeWrapper.getPrimaryTextColor();
|
||||
usernameEditText.setTextColor(primaryTextColor);
|
||||
subjectEditText.setTextColor(primaryTextColor);
|
||||
messageEditText.setTextColor(primaryTextColor);
|
||||
int secondaryTextColor = mCustomThemeWrapper.getSecondaryTextColor();
|
||||
usernameEditText.setHintTextColor(secondaryTextColor);
|
||||
subjectEditText.setHintTextColor(secondaryTextColor);
|
||||
messageEditText.setHintTextColor(secondaryTextColor);
|
||||
int dividerColor = mCustomThemeWrapper.getDividerColor();
|
||||
divider1.setBackgroundColor(dividerColor);
|
||||
divider2.setBackgroundColor(dividerColor);
|
||||
if (typeface != null) {
|
||||
usernameEditText.setTypeface(typeface);
|
||||
subjectEditText.setTypeface(typeface);
|
||||
messageEditText.setTypeface(typeface);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uploadImage() {
|
||||
Intent intent = new Intent();
|
||||
intent.setType("image/*");
|
||||
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||
startActivityForResult(Intent.createChooser(intent,
|
||||
getResources().getString(R.string.select_from_gallery)), PICK_IMAGE_REQUEST_CODE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void captureImage() {
|
||||
Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||
try {
|
||||
capturedImageUri = FileProvider.getUriForFile(this, "eu.toldi.infinityforlemmy.provider",
|
||||
File.createTempFile("captured_image", ".jpg", getExternalFilesDir(Environment.DIRECTORY_PICTURES)));
|
||||
pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);
|
||||
startActivityForResult(pictureIntent, CAPTURE_IMAGE_REQUEST_CODE);
|
||||
} catch (IOException ex) {
|
||||
Toast.makeText(this, R.string.error_creating_temp_file, Toast.LENGTH_SHORT).show();
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(this, R.string.no_camera_available, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertImageUrl(UploadedImage uploadedImage) {
|
||||
int start = Math.max(messageEditText.getSelectionStart(), 0);
|
||||
int end = Math.max(messageEditText.getSelectionEnd(), 0);
|
||||
messageEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
||||
"",
|
||||
0, "![]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length());
|
||||
}
|
||||
}
|
||||
@@ -64,6 +64,7 @@ import eu.toldi.infinityforlemmy.events.SubmitCrosspostEvent;
|
||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.services.SubmitPostService;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
@@ -87,6 +88,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
||||
private static final String IS_NSFW_STATE = "INS";
|
||||
|
||||
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
|
||||
private static final String COMMUNITY_DATA_STATE = "CDS";
|
||||
|
||||
@BindView(R.id.coordinator_layout_submit_crosspost_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@@ -159,6 +161,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
||||
private Post post;
|
||||
private String iconUrl;
|
||||
private String subredditName;
|
||||
private SubscribedSubredditData communityData;
|
||||
private boolean subredditSelected = false;
|
||||
private boolean subredditIsUser;
|
||||
private boolean loadSubredditIconSuccessful = true;
|
||||
@@ -201,7 +204,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||
|
||||
@@ -212,6 +215,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
communityData = savedInstanceState.getParcelable(COMMUNITY_DATA_STATE);
|
||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
|
||||
@@ -495,11 +499,11 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
||||
|
||||
private void loadSubredditIcon() {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
iconUrl = iconImageUrl;
|
||||
displaySubredditIcon();
|
||||
loadSubredditIconSuccessful = true;
|
||||
});
|
||||
}
|
||||
|
||||
private void promptAlertDialog(int titleResId, int messageResId) {
|
||||
@@ -566,12 +570,12 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
||||
|
||||
Intent intent = new Intent(this, SubmitPostService.class);
|
||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, subredditName);
|
||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||
if (post.isCrosspost()) {
|
||||
intent.putExtra(SubmitPostService.EXTRA_CONTENT, "t3_" + post.getCrosspostParentId());
|
||||
intent.putExtra(SubmitPostService.EXTRA_BODY, "t3_" + post.getCrosspostParentId());
|
||||
} else {
|
||||
intent.putExtra(SubmitPostService.EXTRA_CONTENT, post.getFullName());
|
||||
intent.putExtra(SubmitPostService.EXTRA_BODY, post.getFullName());
|
||||
}
|
||||
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_CROSSPOST);
|
||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||
@@ -604,6 +608,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
|
||||
outState.putParcelable(COMMUNITY_DATA_STATE, communityData);
|
||||
outState.putString(SUBREDDIT_NAME_STATE, subredditName);
|
||||
outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
|
||||
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
|
||||
@@ -620,10 +625,11 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||
subredditName = communityData.getName();
|
||||
iconUrl = communityData.getIconUrl();
|
||||
subredditSelected = true;
|
||||
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
|
||||
subredditIsUser = false;
|
||||
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
subredditNameTextView.setText(subredditName);
|
||||
|
||||
@@ -127,7 +127,7 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act
|
||||
setSupportActionBar(mToolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
mSwipeRefreshLayout.setEnabled(false);
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
@@ -33,7 +32,6 @@ import javax.inject.Named;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.ActivityToolbarInterface;
|
||||
import eu.toldi.infinityforlemmy.AnyAccountAccessTokenAuthenticator;
|
||||
import eu.toldi.infinityforlemmy.FetchSubscribedThing;
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
@@ -49,17 +47,12 @@ import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subscribeduser.SubscribedUserData;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import okhttp3.ConnectionPool;
|
||||
import okhttp3.OkHttpClient;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class SubredditSelectionActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||
|
||||
public static final String EXTRA_SPECIFIED_ACCOUNT = "ESA";
|
||||
public static final String EXTRA_EXTRA_CLEAR_SELECTION = "EECS";
|
||||
public static final String EXTRA_RETURN_SUBREDDIT_NAME = "ERSN";
|
||||
public static final String EXTRA_RETURN_SUBREDDIT_ICON_URL = "ERSIURL";
|
||||
public static final String EXTRA_RETURN_SUBREDDIT_IS_USER = "ERSIU";
|
||||
public static final String EXTRA_RETURN_COMMUNITY_DATA = "ERCD";
|
||||
|
||||
private static final int SUBREDDIT_SEARCH_REQUEST_CODE = 0;
|
||||
private static final String INSERT_SUBSCRIBED_SUBREDDIT_STATE = "ISSS";
|
||||
@@ -77,9 +70,6 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
|
||||
@Named("no_oauth")
|
||||
RetrofitHolder mRetrofit;
|
||||
@Inject
|
||||
@Named("oauth")
|
||||
Retrofit mOauthRetrofit;
|
||||
@Inject
|
||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||
@Inject
|
||||
@Named("default")
|
||||
@@ -142,21 +132,14 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
|
||||
mAccountName = specifiedAccount.getAccountName();
|
||||
mAccountProfileImageUrl = specifiedAccount.getProfileImageUrl();
|
||||
|
||||
mOauthRetrofit = mOauthRetrofit.newBuilder().client(new OkHttpClient.Builder().authenticator(new AnyAccountAccessTokenAuthenticator(mRetrofit.getRetrofit(), mRedditDataRoomDatabase, specifiedAccount, mCurrentAccountSharedPreferences))
|
||||
.connectTimeout(30, TimeUnit.SECONDS)
|
||||
.readTimeout(30, TimeUnit.SECONDS)
|
||||
.writeTimeout(30, TimeUnit.SECONDS)
|
||||
.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
|
||||
.build())
|
||||
.build();
|
||||
} else {
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
mAccountProfileImageUrl = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null);
|
||||
}
|
||||
} else {
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
mAccountProfileImageUrl = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, null);
|
||||
}
|
||||
|
||||
@@ -198,6 +181,7 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
|
||||
mFragment = new SubscribedSubredditsListingFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_QUALIFIED_NAME, mAccountName);
|
||||
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_PROFILE_IMAGE_URL, mAccountProfileImageUrl);
|
||||
bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, true);
|
||||
@@ -262,11 +246,9 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
|
||||
return false;
|
||||
}
|
||||
|
||||
public void getSelectedSubreddit(String name, String iconUrl, boolean subredditIsUser) {
|
||||
public void getSelectedSubreddit(SubscribedSubredditData communityData) {
|
||||
Intent returnIntent = new Intent();
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name);
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl);
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_IS_USER, subredditIsUser);
|
||||
returnIntent.putExtra(EXTRA_RETURN_COMMUNITY_DATA, communityData);
|
||||
setResult(Activity.RESULT_OK, returnIntent);
|
||||
finish();
|
||||
}
|
||||
@@ -275,13 +257,13 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
String name = data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
String iconUrl = data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||
|
||||
SubscribedSubredditData communityData = data.getParcelableExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||
String iconUrl = communityData.getIconUrl();
|
||||
Intent returnIntent = new Intent();
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, name);
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, iconUrl);
|
||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_IS_USER, false);
|
||||
returnIntent.putExtra(EXTRA_RETURN_COMMUNITY_DATA, communityData);
|
||||
setResult(Activity.RESULT_OK, returnIntent);
|
||||
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,6 @@ import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
;
|
||||
|
||||
public class SubscribedThingListingActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||
|
||||
@@ -221,7 +220,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||
applyTabLayoutTheme(tabLayout);
|
||||
applyFABTheme(fab);
|
||||
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
searchEditText.setTextColor(mCustomThemeWrapper.getToolbarPrimaryTextAndIconColor());
|
||||
searchEditText.setHintTextColor(mCustomThemeWrapper.getToolbarSecondaryTextColor());
|
||||
}
|
||||
@@ -233,7 +232,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
||||
});
|
||||
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
||||
viewPager.setAdapter(sectionsPagerAdapter);
|
||||
viewPager.setOffscreenPageLimit(3);
|
||||
viewPager.setOffscreenPageLimit(1);
|
||||
if (viewPager.getCurrentItem() != 2) {
|
||||
fab.hide();
|
||||
}
|
||||
@@ -358,7 +357,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
||||
}
|
||||
|
||||
if (!(!forceLoad && mInsertMultiredditSuccess)) {
|
||||
loadMultiReddits();
|
||||
//loadMultiReddits();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -412,7 +411,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
||||
public void success() {
|
||||
Toast.makeText(SubscribedThingListingActivity.this,
|
||||
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
||||
loadMultiReddits();
|
||||
//loadMultiReddits();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -439,7 +438,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
||||
|
||||
@Subscribe
|
||||
public void onRefreshMultiRedditsEvent(RefreshMultiRedditsEvent event) {
|
||||
loadMultiReddits();
|
||||
//loadMultiReddits();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -477,6 +476,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
||||
@Override
|
||||
public Fragment getItem(int position) {
|
||||
switch (position) {
|
||||
default:
|
||||
case 0: {
|
||||
SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
@@ -487,28 +487,12 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
||||
fragment.setArguments(bundle);
|
||||
return fragment;
|
||||
}
|
||||
case 1: {
|
||||
FollowedUsersListingFragment fragment = new FollowedUsersListingFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(FollowedUsersListingFragment.EXTRA_ACCOUNT_NAME, mAccountName == null ? "-" : mAccountName);
|
||||
bundle.putString(FollowedUsersListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
fragment.setArguments(bundle);
|
||||
return fragment;
|
||||
}
|
||||
default: {
|
||||
MultiRedditListingFragment fragment = new MultiRedditListingFragment();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(MultiRedditListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
bundle.putString(MultiRedditListingFragment.EXTRA_ACCOUNT_NAME, mAccountName == null ? "-" : mAccountName);
|
||||
fragment.setArguments(bundle);
|
||||
return fragment;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return 3;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -152,7 +152,7 @@ public class TrendingActivity extends BaseActivity {
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
DisplayMetrics displayMetrics = new DisplayMetrics();
|
||||
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
|
||||
@@ -201,7 +201,7 @@ public class TrendingActivity extends BaseActivity {
|
||||
isRefreshing = true;
|
||||
|
||||
errorLinearLayout.setVisibility(View.GONE);
|
||||
Glide.with(this).clear(errorImageView);
|
||||
Glide.with(getApplication()).clear(errorImageView);
|
||||
swipeRefreshLayout.setRefreshing(true);
|
||||
trendingSearches = null;
|
||||
adapter.setTrendingSearches(null);
|
||||
|
||||
@@ -78,6 +78,7 @@ import eu.toldi.infinityforlemmy.font.TitleFontStyle;
|
||||
import eu.toldi.infinityforlemmy.services.DownloadMediaService;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWallpaperCallback, CustomFontReceiver {
|
||||
|
||||
@@ -108,6 +109,9 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
@Inject
|
||||
@Named("glide")
|
||||
OkHttpClient okHttpClient;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
private boolean isActionBarHidden = false;
|
||||
private boolean isDownloading = false;
|
||||
@@ -146,7 +150,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
getTheme().applyStyle(ContentFontFamily.valueOf(mSharedPreferences
|
||||
.getString(SharedPreferencesUtils.CONTENT_FONT_FAMILY_KEY, ContentFontFamily.Default.name())).getResId(), true);
|
||||
|
||||
BigImageViewer.initialize(GlideImageLoader.with(this.getApplicationContext()));
|
||||
BigImageViewer.initialize(GlideImageLoader.with(this.getApplicationContext(), okHttpClient));
|
||||
|
||||
setContentView(R.layout.activity_view_image_or_gif);
|
||||
|
||||
@@ -161,7 +165,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
Slidr.attach(this, new SlidrConfig.Builder().position(SlidrPosition.VERTICAL).distanceThreshold(0.125f).build());
|
||||
}
|
||||
|
||||
glide = Glide.with(this);
|
||||
glide = Glide.with(getApplication());
|
||||
|
||||
handler = new Handler();
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@ import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||
import eu.toldi.infinityforlemmy.multireddit.DeleteMultiReddit;
|
||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||
@@ -131,8 +132,11 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
@Inject
|
||||
MarkPostAsRead markPostAsRead;
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
private String mAccountQualifiedName;
|
||||
private String multiPath;
|
||||
private Fragment mFragment;
|
||||
private int fabOption;
|
||||
@@ -221,6 +225,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
lockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false);
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
@@ -848,7 +853,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
||||
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar);
|
||||
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
||||
applyFABTheme(navigationWrapper.floatingActionButton);
|
||||
applyFABTheme(navigationWrapper.floatingActionButton, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -868,7 +873,17 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
||||
|
||||
@Override
|
||||
public void markPostAsRead(Post post) {
|
||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
||||
markPostAsRead.markPostAsRead(post.getId(), mAccessToken, new MarkPostAsRead.MarkPostAsReadListener() {
|
||||
@Override
|
||||
public void onMarkPostAsReadSuccess() {
|
||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMarkPostAsReadFailed() {
|
||||
Toast.makeText(ViewMultiRedditDetailActivity.this, R.string.mark_post_as_read_failed, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -931,10 +946,6 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
||||
goToUser();
|
||||
break;
|
||||
}
|
||||
case FABMoreOptionsBottomSheetFragment.FAB_RANDOM: {
|
||||
random();
|
||||
break;
|
||||
}
|
||||
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
||||
if (mFragment instanceof PostFragment) {
|
||||
((PostFragment) mFragment).hideReadPosts();
|
||||
|
||||
@@ -63,9 +63,11 @@ import eu.toldi.infinityforlemmy.LoadingMorePostsStatus;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.SaveComment;
|
||||
import eu.toldi.infinityforlemmy.SaveThing;
|
||||
import eu.toldi.infinityforlemmy.SortType;
|
||||
import eu.toldi.infinityforlemmy.SortTypeSelectionCallback;
|
||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
||||
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||
@@ -80,10 +82,12 @@ import eu.toldi.infinityforlemmy.post.HistoryPostPagingSource;
|
||||
import eu.toldi.infinityforlemmy.post.ParsePost;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||
import eu.toldi.infinityforlemmy.readpost.ReadPost;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import okhttp3.OkHttpClient;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
@@ -94,6 +98,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
public static final String EXTRA_POST_ID = "EPI";
|
||||
public static final String EXTRA_POST_LIST_POSITION = "EPLP";
|
||||
public static final String EXTRA_SINGLE_COMMENT_ID = "ESCI";
|
||||
public static final String EXTRA_SINGLE_COMMENT_PARENT_ID = "ESCPI";
|
||||
public static final String EXTRA_CONTEXT_NUMBER = "ECN";
|
||||
public static final String EXTRA_MESSAGE_FULLNAME = "ENI";
|
||||
public static final String EXTRA_NEW_ACCOUNT_NAME = "ENAN";
|
||||
@@ -145,6 +150,11 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
@Inject
|
||||
@Named("glide")
|
||||
OkHttpClient okHttpClient;
|
||||
@Inject
|
||||
PostEnricher postEnricher;
|
||||
@State
|
||||
ArrayList<Post> posts;
|
||||
@State
|
||||
@@ -179,6 +189,8 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
|
||||
private String mAccountQalifiedName;
|
||||
private long postFragmentId;
|
||||
private int postListPosition;
|
||||
private int orientation;
|
||||
@@ -191,7 +203,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
BigImageViewer.initialize(GlideImageLoader.with(this.getApplicationContext()));
|
||||
BigImageViewer.initialize(GlideImageLoader.with(this.getApplicationContext(), okHttpClient));
|
||||
|
||||
setContentView(R.layout.activity_view_post_detail);
|
||||
|
||||
@@ -267,6 +279,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountQalifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
|
||||
mVolumeKeysNavigateComments = mSharedPreferences.getBoolean(SharedPreferencesUtils.VOLUME_KEYS_NAVIGATE_COMMENTS, false);
|
||||
|
||||
@@ -334,7 +347,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
protected void applyCustomTheme() {
|
||||
mCoordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(mAppBarLayout, mCollapsingToolbarLayout, mToolbar);
|
||||
applyFABTheme(fab);
|
||||
applyFABTheme(fab, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
searchPanelMaterialCardView.setBackgroundTintList(ColorStateList.valueOf(mCustomThemeWrapper.getColorPrimary()));
|
||||
int searchPanelTextAndIconColor = mCustomThemeWrapper.getToolbarPrimaryTextAndIconColor();
|
||||
searchTextInputLayout.setBoxStrokeColor(searchPanelTextAndIconColor);
|
||||
@@ -351,8 +364,8 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
|
||||
private void checkNewAccountAndBindView(Bundle savedInstanceState) {
|
||||
if (mNewAccountName != null) {
|
||||
if (mAccountName == null || !mAccountName.equals(mNewAccountName)) {
|
||||
SwitchAccount.switchAccount(mRedditDataRoomDatabase,mRetrofit, mCurrentAccountSharedPreferences,
|
||||
if (mAccountName == null || !mAccountQalifiedName.equals(mNewAccountName)) {
|
||||
SwitchAccount.switchAccount(mRedditDataRoomDatabase, mRetrofit, mCurrentAccountSharedPreferences,
|
||||
mExecutor, new Handler(), mNewAccountName, newAccount -> {
|
||||
EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName()));
|
||||
Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show();
|
||||
@@ -424,11 +437,11 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
}
|
||||
|
||||
|
||||
public void deleteComment(String fullName, int position) {
|
||||
public void deleteComment(int comment_id, int position) {
|
||||
if (sectionsPagerAdapter != null) {
|
||||
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
||||
if (fragment != null) {
|
||||
fragment.deleteComment(fullName, position);
|
||||
fragment.deleteComment(comment_id, position);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -443,9 +456,10 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
}
|
||||
|
||||
public void saveComment(@NonNull Comment comment, int position) {
|
||||
SaveComment saveComment = new SaveComment();
|
||||
if (comment.isSaved()) {
|
||||
comment.setSaved(false);
|
||||
SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, comment.getFullName(), new SaveThing.SaveThingListener() {
|
||||
saveComment.unsaveThing(mOauthRetrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
||||
@@ -466,7 +480,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
});
|
||||
} else {
|
||||
comment.setSaved(true);
|
||||
SaveThing.saveThing(mOauthRetrofit, mAccessToken, comment.getFullName(), new SaveThing.SaveThingListener() {
|
||||
saveComment.saveThing(mRetrofit.getRetrofit(), mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
||||
@@ -520,69 +534,38 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
Handler handler = new Handler(Looper.getMainLooper());
|
||||
|
||||
if (postType != HistoryPostPagingSource.TYPE_READ_POSTS) {
|
||||
int nextPage = posts.size() / 25 + 1;
|
||||
|
||||
mExecutor.execute(() -> {
|
||||
RedditAPI api = (mAccessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit).create(RedditAPI.class);
|
||||
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
|
||||
Call<String> call;
|
||||
String afterKey = posts.isEmpty() ? null : posts.get(posts.size() - 1).getFullName();
|
||||
|
||||
switch (postType) {
|
||||
case PostPagingSource.TYPE_SUBREDDIT:
|
||||
if (mAccessToken == null) {
|
||||
call = api.getSubredditBestPosts(subredditName, sortType, sortTime, afterKey);
|
||||
} else {
|
||||
call = api.getSubredditBestPostsOauth(subredditName, sortType,
|
||||
sortTime, afterKey, APIUtils.getOAuthHeader(mAccessToken));
|
||||
}
|
||||
call = api.getPosts(null, sortType.value, nextPage, 25, null, post.getSubredditNamePrefixed(), false, mAccessToken);
|
||||
break;
|
||||
case PostPagingSource.TYPE_USER:
|
||||
if (mAccessToken == null) {
|
||||
call = api.getUserPosts(username, afterKey, sortType, sortTime);
|
||||
} else {
|
||||
call = api.getUserPostsOauth(username, userWhere, afterKey, sortType,
|
||||
sortTime, APIUtils.getOAuthHeader(mAccessToken));
|
||||
}
|
||||
call = api.getUserPosts(username, sortType.value, nextPage, 25, false, mAccessToken);
|
||||
break;
|
||||
case PostPagingSource.TYPE_SEARCH:
|
||||
if (subredditName == null) {
|
||||
if (mAccessToken == null) {
|
||||
call = api.searchPosts(query, afterKey, sortType, sortTime,
|
||||
trendingSource);
|
||||
} else {
|
||||
call = api.searchPostsOauth(query, afterKey, sortType,
|
||||
sortTime, trendingSource, APIUtils.getOAuthHeader(mAccessToken));
|
||||
}
|
||||
} else {
|
||||
if (mAccessToken == null) {
|
||||
call = api.searchPostsInSpecificSubreddit(subredditName, query,
|
||||
sortType, sortTime, afterKey);
|
||||
} else {
|
||||
call = api.searchPostsInSpecificSubredditOauth(subredditName, query,
|
||||
sortType, sortTime, afterKey,
|
||||
APIUtils.getOAuthHeader(mAccessToken));
|
||||
}
|
||||
}
|
||||
call = api.search(query, null, subredditName, null, "Post", sortType.value, "All", nextPage, 25, mAccessToken);
|
||||
break;
|
||||
case PostPagingSource.TYPE_MULTI_REDDIT:
|
||||
if (mAccessToken == null) {
|
||||
call = api.getMultiRedditPosts(multiPath, afterKey, sortTime);
|
||||
} else {
|
||||
call = api.getMultiRedditPostsOauth(multiPath, afterKey,
|
||||
sortTime, APIUtils.getOAuthHeader(mAccessToken));
|
||||
}
|
||||
break;
|
||||
// TODO: Implement multi community
|
||||
|
||||
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
||||
//case PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT
|
||||
call = api.getSubredditBestPosts(subredditName, sortType, sortTime, afterKey);
|
||||
break;
|
||||
// TODO: Implement anonymous front page
|
||||
|
||||
default:
|
||||
call = api.getBestPosts(sortType, sortTime, afterKey,
|
||||
APIUtils.getOAuthHeader(mAccessToken));
|
||||
String type = (subredditName.equals("all")) ? "All" : (subredditName.equals("local")) ? "Local" : "Subscribed";
|
||||
call = api.getPosts(type, sortType.value, nextPage, 25, null, null, false, mAccessToken);
|
||||
}
|
||||
|
||||
try {
|
||||
Response<String> response = call.execute();
|
||||
if (response.isSuccessful()) {
|
||||
String responseString = response.body();
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, readPostList);
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, readPostList, postEnricher);
|
||||
if (newPosts == null) {
|
||||
handler.post(() -> {
|
||||
loadingMorePostsStatus = LoadingMorePostsStatus.NO_MORE_POSTS;
|
||||
@@ -664,7 +647,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
Response<String> response = historyPosts.execute();
|
||||
if (response.isSuccessful()) {
|
||||
String responseString = response.body();
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, null);
|
||||
LinkedHashSet<Post> newPosts = ParsePost.parsePostsSync(responseString, -1, postFilter, null, postEnricher);
|
||||
if (newPosts == null || newPosts.isEmpty()) {
|
||||
handler.post(() -> {
|
||||
loadingMorePostsStatus = LoadingMorePostsStatus.NO_MORE_POSTS;
|
||||
@@ -867,7 +850,8 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
if (postListPosition == position && post != null) {
|
||||
bundle.putParcelable(ViewPostDetailFragment.EXTRA_POST_DATA, post);
|
||||
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_LIST_POSITION, position);
|
||||
bundle.putString(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_ID, getIntent().getStringExtra(EXTRA_SINGLE_COMMENT_ID));
|
||||
bundle.putInt(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_ID, getIntent().getIntExtra(EXTRA_SINGLE_COMMENT_ID, 0));
|
||||
bundle.putInt(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_PARENT_ID, getIntent().getIntExtra(EXTRA_SINGLE_COMMENT_PARENT_ID, 0));
|
||||
bundle.putString(ViewPostDetailFragment.EXTRA_CONTEXT_NUMBER, getIntent().getStringExtra(EXTRA_CONTEXT_NUMBER));
|
||||
bundle.putString(ViewPostDetailFragment.EXTRA_MESSAGE_FULLNAME, getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME));
|
||||
} else {
|
||||
@@ -883,12 +867,13 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
||||
}
|
||||
} else {
|
||||
if (post == null) {
|
||||
bundle.putString(ViewPostDetailFragment.EXTRA_POST_ID, getIntent().getStringExtra(EXTRA_POST_ID));
|
||||
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_ID, getIntent().getIntExtra(EXTRA_POST_ID, 0));
|
||||
} else {
|
||||
bundle.putParcelable(ViewPostDetailFragment.EXTRA_POST_DATA, post);
|
||||
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_LIST_POSITION, postListPosition);
|
||||
}
|
||||
bundle.putString(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_ID, getIntent().getStringExtra(EXTRA_SINGLE_COMMENT_ID));
|
||||
bundle.putInt(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_ID, getIntent().getIntExtra(EXTRA_SINGLE_COMMENT_ID, 0));
|
||||
bundle.putInt(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_PARENT_ID, getIntent().getIntExtra(EXTRA_SINGLE_COMMENT_PARENT_ID, 0));
|
||||
bundle.putString(ViewPostDetailFragment.EXTRA_CONTEXT_NUMBER, getIntent().getStringExtra(EXTRA_CONTEXT_NUMBER));
|
||||
bundle.putString(ViewPostDetailFragment.EXTRA_MESSAGE_FULLNAME, getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME));
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
@@ -27,6 +28,7 @@ import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -46,14 +48,15 @@ import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||
import eu.toldi.infinityforlemmy.events.PassPrivateMessageEvent;
|
||||
import eu.toldi.infinityforlemmy.events.PassPrivateMessageIndexEvent;
|
||||
import eu.toldi.infinityforlemmy.events.RepliedToPrivateMessageEvent;
|
||||
import eu.toldi.infinityforlemmy.message.Message;
|
||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||
import eu.toldi.infinityforlemmy.message.ReplyMessage;
|
||||
import eu.toldi.infinityforlemmy.privatemessage.LemmyPrivateMessageAPI;
|
||||
import eu.toldi.infinityforlemmy.privatemessage.PrivateMessage;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class ViewPrivateMessagesActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||
|
||||
public static final String EXTRA_PRIVATE_MESSAGE = "EPM";
|
||||
public static final String EXTRA_PRIVATE_MESSAGE_INDEX = "EPM";
|
||||
public static final String EXTRA_MESSAGE_POSITION = "EMP";
|
||||
private static final String USER_AVATAR_STATE = "UAS";
|
||||
@@ -91,14 +94,19 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
|
||||
@Inject
|
||||
LemmyPrivateMessageAPI mLemmyPrivateMessageAPI;
|
||||
private LinearLayoutManagerBugFixed mLinearLayoutManager;
|
||||
private PrivateMessagesDetailRecyclerViewAdapter mAdapter;
|
||||
@State
|
||||
Message privateMessage;
|
||||
PrivateMessage privateMessage;
|
||||
@State
|
||||
Message replyTo;
|
||||
PrivateMessage replyTo;
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
|
||||
private String mAccountQualifiedName;
|
||||
private String mUserAvatar;
|
||||
private ArrayList<ProvideUserAvatarCallback> mProvideUserAvatarCallbacks;
|
||||
private boolean isLoadingUserAvatar = false;
|
||||
@@ -128,6 +136,11 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
||||
addOnOffsetChangedListener(mAppBarLayout);
|
||||
}
|
||||
|
||||
Intent intent = getIntent();
|
||||
privateMessage = intent.getParcelableExtra(EXTRA_PRIVATE_MESSAGE);
|
||||
|
||||
Log.i("ViewPrivate", "privateMessage: " + privateMessage);
|
||||
|
||||
setSupportActionBar(mToolbar);
|
||||
setToolbarGoToTop(mToolbar);
|
||||
|
||||
@@ -135,6 +148,7 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
mUserAvatar = savedInstanceState.getString(USER_AVATAR_STATE);
|
||||
@@ -144,36 +158,37 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
||||
bindView();
|
||||
}
|
||||
} else {
|
||||
if (privateMessage != null) {
|
||||
bindView();
|
||||
}
|
||||
EventBus.getDefault().post(new PassPrivateMessageIndexEvent(getIntent().getIntExtra(EXTRA_PRIVATE_MESSAGE_INDEX, -1)));
|
||||
}
|
||||
}
|
||||
|
||||
private void bindView() {
|
||||
if (privateMessage != null) {
|
||||
if (privateMessage.getAuthor().equals(mAccountName)) {
|
||||
setTitle(privateMessage.getDestination());
|
||||
if (privateMessage.getCreatorQualifiedName().equals(mAccountQualifiedName)) {
|
||||
setTitle(privateMessage.getRecipientName());
|
||||
mToolbar.setOnClickListener(view -> {
|
||||
if (privateMessage.isDestinationDeleted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, privateMessage.getDestination());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, privateMessage.getRecipientName());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, privateMessage.getRecipientQualifiedName());
|
||||
startActivity(intent);
|
||||
});
|
||||
} else {
|
||||
setTitle(privateMessage.getAuthor());
|
||||
setTitle(privateMessage.getCreatorName());
|
||||
mToolbar.setOnClickListener(view -> {
|
||||
if (privateMessage.isAuthorDeleted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, privateMessage.getAuthor());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, privateMessage.getCreatorName());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, privateMessage.getCreatorQualifiedName());
|
||||
startActivity(intent);
|
||||
});
|
||||
}
|
||||
}
|
||||
mAdapter = new PrivateMessagesDetailRecyclerViewAdapter(this, mSharedPreferences,
|
||||
getResources().getConfiguration().locale, privateMessage, mAccountName, mCustomThemeWrapper);
|
||||
getResources().getConfiguration().locale, privateMessage, mAccountQualifiedName, mCustomThemeWrapper);
|
||||
mLinearLayoutManager = new LinearLayoutManagerBugFixed(this);
|
||||
mLinearLayoutManager.setStackFromEnd(true);
|
||||
mRecyclerView.setLayoutManager(mLinearLayoutManager);
|
||||
@@ -184,58 +199,55 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
||||
if (!mEditText.getText().toString().equals("")) {
|
||||
//Send Message
|
||||
if (privateMessage != null) {
|
||||
ArrayList<Message> replies = privateMessage.getReplies();
|
||||
List<PrivateMessage> replies = privateMessage.getReplies();
|
||||
if (replyTo == null) {
|
||||
replyTo = privateMessage;
|
||||
}
|
||||
isSendingMessage = true;
|
||||
mSendImageView.setColorFilter(mSecondaryTextColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
ReplyMessage.replyMessage(mEditText.getText().toString(), replyTo.getFullname(),
|
||||
getResources().getConfiguration().locale, mOauthRetrofit, mAccessToken,
|
||||
new ReplyMessage.ReplyMessageListener() {
|
||||
@Override
|
||||
public void replyMessageSuccess(Message message) {
|
||||
if (mAdapter != null) {
|
||||
mAdapter.addReply(message);
|
||||
}
|
||||
goToBottom();
|
||||
mEditText.setText("");
|
||||
mSendImageView.setColorFilter(mSendMessageIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
isSendingMessage = false;
|
||||
EventBus.getDefault().post(new RepliedToPrivateMessageEvent(message, getIntent().getIntExtra(EXTRA_MESSAGE_POSITION, -1)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void replyMessageFailed(String errorMessage) {
|
||||
if (errorMessage != null && !errorMessage.equals("")) {
|
||||
Snackbar.make(mCoordinatorLayout, errorMessage, Snackbar.LENGTH_LONG).show();
|
||||
} else {
|
||||
Snackbar.make(mCoordinatorLayout, R.string.reply_message_failed, Snackbar.LENGTH_LONG).show();
|
||||
}
|
||||
mSendImageView.setColorFilter(mSendMessageIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
isSendingMessage = false;
|
||||
}
|
||||
});
|
||||
mLemmyPrivateMessageAPI.sendPrivateMessage(mAccessToken, replyTo.getCreatorId(), mEditText.getText().toString(), new LemmyPrivateMessageAPI.PrivateMessageSentListener() {
|
||||
|
||||
@Override
|
||||
public void onPrivateMessageSentSuccess(@NonNull PrivateMessage privateMessage) {
|
||||
if (mAdapter != null) {
|
||||
mAdapter.addReply(privateMessage);
|
||||
}
|
||||
goToBottom();
|
||||
mEditText.setText("");
|
||||
isSendingMessage = false;
|
||||
EventBus.getDefault().post(new RepliedToPrivateMessageEvent(privateMessage, getIntent().getIntExtra(EXTRA_MESSAGE_POSITION, -1)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrivateMessageSentError() {
|
||||
Snackbar.make(mCoordinatorLayout, R.string.reply_message_failed, Snackbar.LENGTH_LONG).show();
|
||||
mSendImageView.setColorFilter(mSendMessageIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
isSendingMessage = false;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
StringBuilder fullnames = new StringBuilder();
|
||||
if (privateMessage.isNew()) {
|
||||
fullnames.append(privateMessage.getFullname()).append(",");
|
||||
}
|
||||
|
||||
if (replies != null && !replies.isEmpty()) {
|
||||
for (Message m : replies) {
|
||||
if (m.isNew()) {
|
||||
for (PrivateMessage m : replies) {
|
||||
if (!m.getRead()) {
|
||||
fullnames.append(m).append(",");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fullnames.length() > 0) {
|
||||
fullnames.deleteCharAt(fullnames.length() - 1);
|
||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, fullnames.toString(),
|
||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, 0,
|
||||
new ReadMessage.ReadMessageListener() {
|
||||
@Override
|
||||
public void readSuccess() {}
|
||||
public void readSuccess() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFailed() {}
|
||||
public void readFailed() {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -332,7 +344,7 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
||||
|
||||
@Subscribe
|
||||
public void onPassPrivateMessageEvent(PassPrivateMessageEvent passPrivateMessageEvent) {
|
||||
privateMessage = passPrivateMessageEvent.message;
|
||||
/* privateMessage = passPrivateMessageEvent.message;
|
||||
if (privateMessage != null) {
|
||||
if (privateMessage.getAuthor().equals(mAccountName)) {
|
||||
if (privateMessage.getReplies() != null) {
|
||||
@@ -351,7 +363,7 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
||||
}
|
||||
|
||||
bindView();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
public interface ProvideUserAvatarCallback {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,6 +4,7 @@ import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
@@ -20,12 +21,15 @@ import android.view.ViewTreeObserver;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
@@ -52,6 +56,7 @@ import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
@@ -71,11 +76,14 @@ import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.SortType;
|
||||
import eu.toldi.infinityforlemmy.SortTypeSelectionCallback;
|
||||
import eu.toldi.infinityforlemmy.account.FetchBlockedThings;
|
||||
import eu.toldi.infinityforlemmy.adapters.SubredditAutocompleteRecyclerViewAdapter;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.AddSubredditOrUserToMultiReddit;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.CheckIsFollowingUser;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
||||
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData;
|
||||
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.CopyTextBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.FABMoreOptionsBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostLayoutBottomSheetFragment;
|
||||
@@ -95,18 +103,22 @@ import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.user.BasicUserInfo;
|
||||
import eu.toldi.infinityforlemmy.user.BlockUser;
|
||||
import eu.toldi.infinityforlemmy.user.FetchUserData;
|
||||
import eu.toldi.infinityforlemmy.user.UserDao;
|
||||
import eu.toldi.infinityforlemmy.user.UserData;
|
||||
import eu.toldi.infinityforlemmy.user.UserFollowing;
|
||||
import eu.toldi.infinityforlemmy.user.UserStats;
|
||||
import eu.toldi.infinityforlemmy.user.UserViewModel;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
@@ -139,6 +151,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
private static final String FETCH_USER_INFO_STATE = "FSIS";
|
||||
private static final String MESSAGE_FULLNAME_STATE = "MFS";
|
||||
private static final String NEW_ACCOUNT_NAME_STATE = "NANS";
|
||||
private static final String NEW_ACCOUNT_QUALIFIED_NAME_STATE = "NAQNS";
|
||||
|
||||
@BindView(R.id.coordinator_layout_view_user_detail_activity)
|
||||
CoordinatorLayout coordinatorLayout;
|
||||
@@ -163,11 +176,40 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
|
||||
@BindView(R.id.user_qualified_name_text_view_view_user_detail_activity)
|
||||
TextView qualifiedNameTextView;
|
||||
|
||||
@BindView(R.id.loading_user_progress_indicator_view_user_detail_activity)
|
||||
ProgressBar progressBar;
|
||||
@BindView(R.id.subscribe_user_chip_view_user_detail_activity)
|
||||
Chip subscribeUserChip;
|
||||
@BindView(R.id.karma_text_view_view_user_detail_activity)
|
||||
TextView karmaTextView;
|
||||
@BindView(R.id.cakeday_text_view_view_user_detail_activity)
|
||||
|
||||
@BindView(R.id.post_count_text_view_view_user_detail_activity)
|
||||
TextView postCountTextView;
|
||||
|
||||
@BindView(R.id.comment_count_text_view_view_user_detail_activity)
|
||||
TextView commentCountTextView;
|
||||
|
||||
@BindView(R.id.upvote_count_post_text_view_view_user_detail_activity)
|
||||
TextView upvoteCountPostTextView;
|
||||
|
||||
@BindView(R.id.upvote_count_comment_text_view_view_user_detail_activity)
|
||||
TextView upvoteCountCommentTextView;
|
||||
|
||||
@BindView(R.id.posts_count_icon_image_view_view_user_detail_activity)
|
||||
ImageView postsCountIconImageView;
|
||||
@BindView(R.id.comments_count_icon_image_view_view_user_detail_activity)
|
||||
ImageView commentsCountIconImageView;
|
||||
|
||||
@BindView(R.id.upvote_count_posts_icon_image_view_view_user_detail_activity)
|
||||
ImageView postUpvoteCountIconImageView;
|
||||
@BindView(R.id.upvote_count_comments_icon_image_view_view_user_detail_activity)
|
||||
ImageView commentUpvoteCountIconImageView;
|
||||
@BindView(R.id.account_created_cake_icon_image_view_view_user_detail_activity)
|
||||
ImageView accountCreatedCakeIconImageView;
|
||||
|
||||
@BindView(R.id.user_statistics_block_view_user_detail_activity)
|
||||
ConstraintLayout userStatisticsBlock;
|
||||
|
||||
@BindView(R.id.cake_day_text_view_view_user_detail_activity)
|
||||
TextView cakedayTextView;
|
||||
@BindView(R.id.description_text_view_view_user_detail_activity)
|
||||
TextView descriptionTextView;
|
||||
@@ -201,6 +243,9 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
@Inject
|
||||
Executor mExecutor;
|
||||
|
||||
@Inject
|
||||
MarkPostAsRead markPostAsRead;
|
||||
public UserViewModel userViewModel;
|
||||
private FragmentManager fragmentManager;
|
||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||
@@ -209,9 +254,14 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
private Call<String> subredditAutocompleteCall;
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
private String mAccountQualifiedName;
|
||||
private String username;
|
||||
|
||||
private String qualifiedName;
|
||||
private String description;
|
||||
|
||||
private boolean showStatistics;
|
||||
private boolean showScore;
|
||||
private boolean subscriptionReady = false;
|
||||
private boolean mFetchUserInfoSuccess = false;
|
||||
private int expandedTabTextColor;
|
||||
@@ -227,9 +277,13 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
private boolean hideFab;
|
||||
private boolean showBottomAppBar;
|
||||
private boolean lockBottomAppBar;
|
||||
private String mMessageFullname;
|
||||
private int mMessageId;
|
||||
private String mNewAccountName;
|
||||
|
||||
private UserData mUserData;
|
||||
|
||||
private boolean isBlocked;
|
||||
|
||||
//private MaterialAlertDialogBuilder nsfwWarningBuilder;
|
||||
|
||||
@Override
|
||||
@@ -269,28 +323,51 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
|
||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||
lockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false);
|
||||
|
||||
if (username.equalsIgnoreCase("me")) {
|
||||
username = mAccountName;
|
||||
}
|
||||
showStatistics = mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_STATISTICS, true);
|
||||
showScore = mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_POST_AND_COMMENT_SCORE, true);
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
mMessageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME);
|
||||
mMessageId = getIntent().getIntExtra(EXTRA_MESSAGE_FULLNAME, 0);
|
||||
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
||||
} else {
|
||||
mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE);
|
||||
mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE);
|
||||
mMessageId = savedInstanceState.getInt(MESSAGE_FULLNAME_STATE);
|
||||
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
||||
qualifiedName = savedInstanceState.getString("qualified_name");
|
||||
}
|
||||
|
||||
checkNewAccountAndInitializeViewPager();
|
||||
|
||||
fetchUserInfo();
|
||||
|
||||
Resources resources = getResources();
|
||||
if (mUserData != null) {
|
||||
setupVisibleElements();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
if (mUserData != null) {
|
||||
setupVisibleElements();
|
||||
} else {
|
||||
fetchUserInfo();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
mFetchUserInfoSuccess = false;
|
||||
}
|
||||
|
||||
private void setupVisibleElements() {
|
||||
Resources resources = getResources();
|
||||
String title = username;
|
||||
progressBar.setVisibility(View.GONE);
|
||||
userNameTextView.setText(title);
|
||||
qualifiedNameTextView.setText(qualifiedName);
|
||||
toolbar.setTitle(title);
|
||||
@@ -371,7 +448,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
});
|
||||
}
|
||||
|
||||
glide = Glide.with(this);
|
||||
glide = Glide.with(getApplication());
|
||||
Locale locale = getResources().getConfiguration().locale;
|
||||
|
||||
MarkwonPlugin miscPlugin = new AbstractMarkwonPlugin() {
|
||||
@@ -404,7 +481,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
return true;
|
||||
});
|
||||
|
||||
userViewModel = new ViewModelProvider(this, new UserViewModel.Factory(getApplication(), mRedditDataRoomDatabase, username))
|
||||
userViewModel = new ViewModelProvider(this, new UserViewModel.Factory(getApplication(), mRedditDataRoomDatabase, LemmyUtils.qualifiedUserName2ActorId(qualifiedName)))
|
||||
.get(UserViewModel.class);
|
||||
userViewModel.getUserLiveData().observe(this, userData -> {
|
||||
if (userData != null) {
|
||||
@@ -524,20 +601,20 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
|
||||
CheckIsFollowingUser.checkIsFollowingUser(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
||||
username, mAccountName, new CheckIsFollowingUser.CheckIsFollowingUserListener() {
|
||||
@Override
|
||||
public void isSubscribed() {
|
||||
subscribeUserChip.setText(R.string.unfollow);
|
||||
subscribeUserChip.setChipBackgroundColor(ColorStateList.valueOf(subscribedColor));
|
||||
subscriptionReady = true;
|
||||
}
|
||||
@Override
|
||||
public void isSubscribed() {
|
||||
subscribeUserChip.setText(R.string.unfollow);
|
||||
subscribeUserChip.setChipBackgroundColor(ColorStateList.valueOf(subscribedColor));
|
||||
subscriptionReady = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void isNotSubscribed() {
|
||||
subscribeUserChip.setText(R.string.follow);
|
||||
subscribeUserChip.setChipBackgroundColor(ColorStateList.valueOf(unsubscribedColor));
|
||||
subscriptionReady = true;
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void isNotSubscribed() {
|
||||
subscribeUserChip.setText(R.string.follow);
|
||||
subscribeUserChip.setChipBackgroundColor(ColorStateList.valueOf(unsubscribedColor));
|
||||
subscriptionReady = true;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
subscribeUserChip.setVisibility(View.GONE);
|
||||
}
|
||||
@@ -548,8 +625,23 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
getSupportActionBar().setTitle(userFullName);
|
||||
}
|
||||
String karma = "";//getString(R.string.karma_info_user_detail, userData.getTotalKarma(), userData.getLinkKarma(), userData.getCommentKarma());
|
||||
karmaTextView.setText(karma);
|
||||
cakedayTextView.setText(getString(R.string.cakeday_info, userData.getCakeday()));
|
||||
|
||||
cakedayTextView.setText((String) userData.getCakeday());
|
||||
UserStats userStats = mUserData.getStats();
|
||||
if (userStats != null && showStatistics) {
|
||||
userStatisticsBlock.setVisibility(View.VISIBLE);
|
||||
postCountTextView.setText(String.valueOf(userStats.getPostCount()));
|
||||
commentCountTextView.setText(String.valueOf(userStats.getCommentCount()));
|
||||
if (showScore) {
|
||||
upvoteCountPostTextView.setText(String.valueOf(userStats.getPostScore()));
|
||||
upvoteCountCommentTextView.setText(String.valueOf(userStats.getCommentScore()));
|
||||
} else {
|
||||
upvoteCountPostTextView.setVisibility(View.GONE);
|
||||
upvoteCountCommentTextView.setVisibility(View.GONE);
|
||||
postUpvoteCountIconImageView.setVisibility(View.GONE);
|
||||
commentUpvoteCountIconImageView.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
if (userData.getDescription() == null || userData.getDescription().equals("")) {
|
||||
descriptionTextView.setVisibility(View.GONE);
|
||||
@@ -617,16 +709,25 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
unsubscribedColor = mCustomThemeWrapper.getUnsubscribed();
|
||||
subscribedColor = mCustomThemeWrapper.getSubscribed();
|
||||
userNameTextView.setTextColor(mCustomThemeWrapper.getUsername());
|
||||
karmaTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
postCountTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
upvoteCountPostTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
commentCountTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
upvoteCountCommentTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
postsCountIconImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||
commentsCountIconImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||
accountCreatedCakeIconImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||
cakedayTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
||||
applyFABTheme(navigationWrapper.floatingActionButton);
|
||||
applyFABTheme(navigationWrapper.floatingActionButton, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||
descriptionTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||
subscribeUserChip.setTextColor(mCustomThemeWrapper.getChipTextColor());
|
||||
applyTabLayoutTheme(tabLayout);
|
||||
if (typeface != null) {
|
||||
userNameTextView.setTypeface(typeface);
|
||||
karmaTextView.setTypeface(typeface);
|
||||
postCountTextView.setTypeface(typeface);
|
||||
upvoteCountPostTextView.setTypeface(typeface);
|
||||
commentCountTextView.setTypeface(typeface);
|
||||
upvoteCountCommentTextView.setTypeface(typeface);
|
||||
cakedayTextView.setTypeface(typeface);
|
||||
subscribeUserChip.setTypeface(typeface);
|
||||
descriptionTextView.setTypeface(typeface);
|
||||
@@ -695,11 +796,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
|
||||
fixViewPager2Sensitivity(viewPager2);
|
||||
|
||||
if (mMessageFullname != null) {
|
||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
|
||||
if (mMessageId != 0) {
|
||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageId, new ReadMessage.ReadMessageListener() {
|
||||
@Override
|
||||
public void readSuccess() {
|
||||
mMessageFullname = null;
|
||||
mMessageId = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -918,6 +1019,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_OPTION_PROFILE: {
|
||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY,mAccountQualifiedName);
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
@@ -1071,6 +1173,28 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
FetchUserData.fetchUserData(mRetrofit.getRetrofit(), qualifiedName, new FetchUserData.FetchUserDataListener() {
|
||||
@Override
|
||||
public void onFetchUserDataSuccess(UserData userData, int inboxCount) {
|
||||
mUserData = userData;
|
||||
username = userData.getDisplayName();
|
||||
setupVisibleElements();
|
||||
FetchBlockedThings.fetchBlockedThings(mRetrofit.getRetrofit(), mAccessToken, mAccountQualifiedName, new FetchBlockedThings.FetchBlockedThingsListener() {
|
||||
|
||||
@Override
|
||||
public void onFetchBlockedThingsSuccess(List<BlockedUserData> blockedUsers, List<BlockedCommunityData> blockedCommunities) {
|
||||
for (BlockedUserData blockedUserData : blockedUsers) {
|
||||
if (blockedUserData.getQualifiedName().equals(qualifiedName)) {
|
||||
isBlocked = true;
|
||||
invalidateOptionsMenu();
|
||||
return;
|
||||
}
|
||||
}
|
||||
isBlocked = false;
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchBlockedThingsFailure() {
|
||||
}
|
||||
});
|
||||
new ViewUserDetailActivity.InsertUserDataAsyncTask(mRedditDataRoomDatabase.userDao(), userData,
|
||||
() -> mFetchUserInfoSuccess = true).execute();
|
||||
}
|
||||
@@ -1084,12 +1208,12 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteComment(String fullName) {
|
||||
public void deleteComment(int commentId) {
|
||||
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||
.setTitle(R.string.delete_this_comment)
|
||||
.setMessage(R.string.are_you_sure)
|
||||
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
||||
-> DeleteThing.delete(mOauthRetrofit, fullName, mAccessToken, new DeleteThing.DeleteThingListener() {
|
||||
-> DeleteThing.deleteComment(mRetrofit.getRetrofit(), commentId, mAccessToken, new DeleteThing.DeleteThingListener() {
|
||||
@Override
|
||||
public void deleteSuccess() {
|
||||
Toast.makeText(ViewUserDetailActivity.this, R.string.delete_post_success, Toast.LENGTH_SHORT).show();
|
||||
@@ -1113,6 +1237,12 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
menu.findItem(R.id.action_block_user_view_user_detail_activity).setVisible(false);
|
||||
} else {
|
||||
menu.findItem(R.id.action_edit_profile_view_user_detail_activity).setVisible(false);
|
||||
if (isBlocked) {
|
||||
menu.findItem(R.id.action_block_user_view_user_detail_activity).setVisible(false);
|
||||
menu.findItem(R.id.action_unblock_user_view_user_detail_activity).setVisible(true);
|
||||
} else {
|
||||
menu.findItem(R.id.action_unblock_user_view_user_detail_activity).setVisible(false);
|
||||
}
|
||||
}
|
||||
applyMenuItemTheme(menu);
|
||||
return true;
|
||||
@@ -1146,7 +1276,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
} else if (itemId == R.id.action_share_view_user_detail_activity) {
|
||||
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
||||
shareIntent.setType("text/plain");
|
||||
shareIntent.putExtra(Intent.EXTRA_TEXT, "https://www.reddit.com/user/" + username);
|
||||
String baseURL = mRetrofit.getBaseURL().endsWith("/") ? mRetrofit.getBaseURL() : mRetrofit.getBaseURL() + "/";
|
||||
shareIntent.putExtra(Intent.EXTRA_TEXT, baseURL + "u/" + qualifiedName);
|
||||
if (shareIntent.resolveActivity(getPackageManager()) != null) {
|
||||
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
||||
} else {
|
||||
@@ -1160,16 +1291,9 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
}
|
||||
|
||||
Intent pmIntent = new Intent(this, SendPrivateMessageActivity.class);
|
||||
pmIntent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, username);
|
||||
pmIntent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USER_INFO, new BasicUserInfo(mUserData.getId(), username, qualifiedName, mUserData.getAvatar(), mUserData.getDisplayName()));
|
||||
startActivity(pmIntent);
|
||||
return true;
|
||||
} else if (itemId == R.id.action_add_to_multireddit_view_user_detail_activity) {
|
||||
if (mAccessToken == null) {
|
||||
Toast.makeText(this, R.string.login_first, Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
}
|
||||
Intent intent = new Intent(this, MultiredditSelectionActivity.class);
|
||||
startActivityForResult(intent, ADD_TO_MULTIREDDIT_REQUEST_CODE);
|
||||
} else if (itemId == R.id.action_add_to_post_filter_view_user_detail_activity) {
|
||||
Intent intent = new Intent(this, PostFilterPreferenceActivity.class);
|
||||
intent.putExtra(PostFilterPreferenceActivity.EXTRA_USER_NAME, username);
|
||||
@@ -1190,10 +1314,13 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
.setTitle(R.string.block_user)
|
||||
.setMessage(R.string.are_you_sure)
|
||||
.setPositiveButton(R.string.yes, (dialogInterface, i)
|
||||
-> BlockUser.blockUser(mOauthRetrofit, mAccessToken, username, new BlockUser.BlockUserListener() {
|
||||
-> BlockUser.blockUser(mRetrofit.getRetrofit(), mAccessToken, mUserData.getId(), true, new BlockUser.BlockUserListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
Toast.makeText(ViewUserDetailActivity.this, R.string.block_user_success, Toast.LENGTH_SHORT).show();
|
||||
isBlocked = true;
|
||||
sectionsPagerAdapter.refresh();
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1207,6 +1334,25 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
} else if (itemId == R.id.action_edit_profile_view_user_detail_activity) {
|
||||
startActivity(new Intent(this, EditProfileActivity.class));
|
||||
return true;
|
||||
} else if (itemId == R.id.action_unblock_user_view_user_detail_activity) {
|
||||
if (mAccessToken == null) {
|
||||
Toast.makeText(this, R.string.login_first, Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
}
|
||||
BlockUser.blockUser(mRetrofit.getRetrofit(), mAccessToken, mUserData.getId(), false, new BlockUser.BlockUserListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
isBlocked = false;
|
||||
Toast.makeText(ViewUserDetailActivity.this, R.string.unblock_user_success, Toast.LENGTH_SHORT).show();
|
||||
sectionsPagerAdapter.refresh();
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed() {
|
||||
Toast.makeText(ViewUserDetailActivity.this, R.string.unblock_user_failed, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -1253,8 +1399,10 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putBoolean(FETCH_USER_INFO_STATE, mFetchUserInfoSuccess);
|
||||
outState.putString(MESSAGE_FULLNAME_STATE, mMessageFullname);
|
||||
outState.putInt(MESSAGE_FULLNAME_STATE, mMessageId);
|
||||
outState.putString(NEW_ACCOUNT_NAME_STATE, mNewAccountName);
|
||||
outState.putString(NEW_ACCOUNT_QUALIFIED_NAME_STATE, mAccountQualifiedName);
|
||||
outState.putString("qualified_name", qualifiedName);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1326,10 +1474,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
goToUser();
|
||||
break;
|
||||
}
|
||||
case FABMoreOptionsBottomSheetFragment.FAB_RANDOM: {
|
||||
random();
|
||||
break;
|
||||
}
|
||||
|
||||
case FABMoreOptionsBottomSheetFragment.FAB_HIDE_READ_POSTS: {
|
||||
if (sectionsPagerAdapter != null) {
|
||||
sectionsPagerAdapter.hideReadPosts();
|
||||
@@ -1369,7 +1514,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, thingEditText.getText().toString());
|
||||
String communityName = thingEditText.getText().toString();
|
||||
if (communityName.startsWith("!")) {
|
||||
communityName = communityName.substring(1);
|
||||
}
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityName);
|
||||
startActivity(subredditIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -1427,7 +1576,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, thingEditText.getText().toString());
|
||||
String communityName = thingEditText.getText().toString();
|
||||
if (communityName.startsWith("!")) {
|
||||
communityName = communityName.substring(1);
|
||||
}
|
||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, communityName);
|
||||
startActivity(subredditIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
@@ -1448,7 +1601,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, thingEditText.getText().toString());
|
||||
String userName = thingEditText.getText().toString();
|
||||
if (userName.startsWith("@")) {
|
||||
userName = userName.substring(1);
|
||||
}
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, userName);
|
||||
startActivity(userIntent);
|
||||
return true;
|
||||
}
|
||||
@@ -1461,7 +1618,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
-> {
|
||||
Utils.hideKeyboard(this);
|
||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, thingEditText.getText().toString());
|
||||
String userName = thingEditText.getText().toString();
|
||||
if (userName.startsWith("@")) {
|
||||
userName = userName.substring(1);
|
||||
}
|
||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, userName);
|
||||
startActivity(userIntent);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||
@@ -1541,7 +1702,17 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
|
||||
@Override
|
||||
public void markPostAsRead(Post post) {
|
||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountName, post.getId());
|
||||
markPostAsRead.markPostAsRead(post.getId(), mAccessToken, new MarkPostAsRead.MarkPostAsReadListener() {
|
||||
@Override
|
||||
public void onMarkPostAsReadSuccess() {
|
||||
InsertReadPost.insertReadPost(mRedditDataRoomDatabase, mExecutor, mAccountQualifiedName, post.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMarkPostAsReadFailed() {
|
||||
Toast.makeText(ViewUserDetailActivity.this, R.string.mark_post_as_read_failed, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -108,6 +108,7 @@ import eu.toldi.infinityforlemmy.font.TitleFontFamily;
|
||||
import eu.toldi.infinityforlemmy.font.TitleFontStyle;
|
||||
import eu.toldi.infinityforlemmy.post.FetchPost;
|
||||
import eu.toldi.infinityforlemmy.post.Post;
|
||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||
import eu.toldi.infinityforlemmy.services.DownloadMediaService;
|
||||
import eu.toldi.infinityforlemmy.services.DownloadRedditVideoService;
|
||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||
@@ -222,10 +223,6 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
|
||||
@Inject
|
||||
@Named("current_account")
|
||||
SharedPreferences mCurrentAccountSharedPreferences;
|
||||
|
||||
@Inject
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
|
||||
@@ -235,6 +232,9 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
||||
@Inject
|
||||
SimpleCache mSimpleCache;
|
||||
|
||||
@Inject
|
||||
PostEnricher postEnricher;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -756,8 +756,8 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
||||
}
|
||||
});
|
||||
} else {
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchRedgifsVideoLinks(this, mExecutor, new Handler(), redgifsRetrofit,
|
||||
mCurrentAccountSharedPreferences, gfycatId, new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchRedgifsVideoLinks(mExecutor, new Handler(), redgifsRetrofit,
|
||||
gfycatId, new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
|
||||
@Override
|
||||
public void success(String webm, String mp4) {
|
||||
progressBar.setVisibility(View.GONE);
|
||||
@@ -791,7 +791,7 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
||||
int commentsIndex = segments.lastIndexOf("comments");
|
||||
String postId = segments.get(commentsIndex + 1);
|
||||
FetchPost.fetchPost(mExecutor, new Handler(), retrofit.getRetrofit(), postId, null,
|
||||
new FetchPost.FetchPostListener() {
|
||||
postEnricher, new FetchPost.FetchPostListener() {
|
||||
@Override
|
||||
public void fetchPostSuccess(Post post) {
|
||||
if (post.isGfycat()) {
|
||||
|
||||
@@ -35,16 +35,9 @@ import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.MarkwonPlugin;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
import me.saket.bettermovementmethod.BetterLinkMovementMethod;
|
||||
import eu.toldi.infinityforlemmy.Infinity;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
@@ -57,10 +50,16 @@ import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.MarkwonPlugin;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
import me.saket.bettermovementmethod.BetterLinkMovementMethod;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class WikiActivity extends BaseActivity {
|
||||
|
||||
@@ -139,7 +138,7 @@ public class WikiActivity extends BaseActivity {
|
||||
}
|
||||
}
|
||||
|
||||
mGlide = Glide.with(this);
|
||||
mGlide = Glide.with(getApplication());
|
||||
|
||||
swipeRefreshLayout.setEnabled(mSharedPreferences.getBoolean(SharedPreferencesUtils.PULL_TO_REFRESH, true));
|
||||
swipeRefreshLayout.setOnRefreshListener(this::loadWiki);
|
||||
@@ -219,7 +218,7 @@ public class WikiActivity extends BaseActivity {
|
||||
|
||||
swipeRefreshLayout.setRefreshing(true);
|
||||
|
||||
Glide.with(this).clear(mFetchWikiInfoImageView);
|
||||
Glide.with(getApplication()).clear(mFetchWikiInfoImageView);
|
||||
mFetchWikiInfoLinearLayout.setVisibility(View.GONE);
|
||||
|
||||
retrofit.getRetrofit().create(RedditAPI.class).getWikiPage(getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME), getIntent().getStringExtra(EXTRA_WIKI_PATH)).enqueue(new Callback<String>() {
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package eu.toldi.infinityforlemmy.adapters;
|
||||
|
||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.user.BasicUserRecyclerViewAdapter;
|
||||
|
||||
public class AdminRecyclerViewAdapter extends BasicUserRecyclerViewAdapter {
|
||||
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
|
||||
public AdminRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper) {
|
||||
super(activity, customThemeWrapper);
|
||||
mCustomThemeWrapper = customThemeWrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getUserNameTextColor() {
|
||||
return mCustomThemeWrapper.getAdmin();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,385 @@
|
||||
package eu.toldi.infinityforlemmy.adapters;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.ViewSubredditDetailActivity;
|
||||
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import me.zhanghai.android.fastscroll.PopupTextProvider;
|
||||
import pl.droidsonroids.gif.GifImageView;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class BlockedCommunitiesRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements PopupTextProvider {
|
||||
private static final int VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER = 0;
|
||||
private static final int VIEW_TYPE_FAVORITE_SUBREDDIT = 1;
|
||||
private static final int VIEW_TYPE_SUBREDDIT_DIVIDER = 2;
|
||||
private static final int VIEW_TYPE_SUBREDDIT = 3;
|
||||
|
||||
private BaseActivity mActivity;
|
||||
private Executor mExecutor;
|
||||
private Retrofit mOauthRetrofit;
|
||||
private RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||
private List<BlockedCommunityData> mBlockedCommunityData;
|
||||
private List<BlockedCommunityData> mFavoriteBlockedCommunityData;
|
||||
private RequestManager glide;
|
||||
private ItemClickListener itemClickListener;
|
||||
|
||||
private String accessToken;
|
||||
private String username;
|
||||
private String userIconUrl;
|
||||
private boolean hasClearSelectionRow;
|
||||
|
||||
private int primaryTextColor;
|
||||
private int secondaryTextColor;
|
||||
|
||||
public BlockedCommunitiesRecyclerViewAdapter(BaseActivity activity, Executor executor, Retrofit oauthRetrofit,
|
||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
CustomThemeWrapper customThemeWrapper,
|
||||
String accessToken) {
|
||||
mActivity = activity;
|
||||
mExecutor = executor;
|
||||
glide = Glide.with(activity);
|
||||
mOauthRetrofit = oauthRetrofit;
|
||||
mRedditDataRoomDatabase = redditDataRoomDatabase;
|
||||
this.accessToken = accessToken;
|
||||
primaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
||||
secondaryTextColor = customThemeWrapper.getSecondaryTextColor();
|
||||
}
|
||||
|
||||
public BlockedCommunitiesRecyclerViewAdapter(BaseActivity activity, Executor executor, Retrofit oauthRetrofit,
|
||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
CustomThemeWrapper customThemeWrapper,
|
||||
String accessToken, boolean hasClearSelectionRow,
|
||||
ItemClickListener itemClickListener) {
|
||||
this(activity, executor, oauthRetrofit, redditDataRoomDatabase, customThemeWrapper, accessToken);
|
||||
this.hasClearSelectionRow = hasClearSelectionRow;
|
||||
this.itemClickListener = itemClickListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
if (mFavoriteBlockedCommunityData != null && mFavoriteBlockedCommunityData.size() > 0) {
|
||||
if (itemClickListener != null && !hasClearSelectionRow) {
|
||||
if (position == 0) {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
} else if (position == 1) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER;
|
||||
} else if (position == mFavoriteBlockedCommunityData.size() + 2) {
|
||||
return VIEW_TYPE_SUBREDDIT_DIVIDER;
|
||||
} else if (position <= mFavoriteBlockedCommunityData.size() + 1) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT;
|
||||
} else {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
}
|
||||
} else if (hasClearSelectionRow) {
|
||||
if (position == 0) {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
} else if (position == 1) {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
} else if (position == 2) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER;
|
||||
} else if (position == mFavoriteBlockedCommunityData.size() + 3) {
|
||||
return VIEW_TYPE_SUBREDDIT_DIVIDER;
|
||||
} else if (position <= mFavoriteBlockedCommunityData.size() + 2) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT;
|
||||
} else {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
}
|
||||
} else {
|
||||
if (position == 0) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER;
|
||||
} else if (position == mFavoriteBlockedCommunityData.size() + 1) {
|
||||
return VIEW_TYPE_SUBREDDIT_DIVIDER;
|
||||
} else if (position <= mFavoriteBlockedCommunityData.size()) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT;
|
||||
} else {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
|
||||
switch (i) {
|
||||
case VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER:
|
||||
return new FavoriteSubredditsDividerViewHolder(LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.item_favorite_thing_divider, viewGroup, false));
|
||||
case VIEW_TYPE_FAVORITE_SUBREDDIT:
|
||||
return new FavoriteSubredditViewHolder(LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.item_subscribed_thing, viewGroup, false));
|
||||
case VIEW_TYPE_SUBREDDIT_DIVIDER:
|
||||
return new AllSubredditsDividerViewHolder(LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.item_favorite_thing_divider, viewGroup, false));
|
||||
default:
|
||||
return new SubredditViewHolder(LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.item_subscribed_thing, viewGroup, false));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int i) {
|
||||
if (viewHolder instanceof SubredditViewHolder) {
|
||||
String name;
|
||||
String fullname = "";
|
||||
String iconUrl;
|
||||
|
||||
if (hasClearSelectionRow && viewHolder.getBindingAdapterPosition() == 0) {
|
||||
((SubredditViewHolder) viewHolder).subredditNameTextView.setText(R.string.all_communities);
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(null));
|
||||
return;
|
||||
} else {
|
||||
int offset = hasClearSelectionRow ? 1 : 0;
|
||||
BlockedCommunityData communityData = mBlockedCommunityData.get(viewHolder.getBindingAdapterPosition() - offset);
|
||||
name = mBlockedCommunityData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
||||
fullname = mBlockedCommunityData.get(viewHolder.getBindingAdapterPosition() - offset).getQualified_name();
|
||||
iconUrl = mBlockedCommunityData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
|
||||
|
||||
if (itemClickListener != null) {
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(communityData));
|
||||
}
|
||||
}
|
||||
|
||||
if (itemClickListener == null) {
|
||||
String finalFullname = fullname;
|
||||
viewHolder.itemView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, name);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY,
|
||||
finalFullname);
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
}
|
||||
|
||||
if (iconUrl != null && !iconUrl.equals("")) {
|
||||
glide.load(iconUrl)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.error(glide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
|
||||
.into(((SubredditViewHolder) viewHolder).iconGifImageView);
|
||||
} else {
|
||||
glide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.into(((SubredditViewHolder) viewHolder).iconGifImageView);
|
||||
}
|
||||
((SubredditViewHolder) viewHolder).subredditNameTextView.setText(name);
|
||||
if (fullname.contains("@")) {
|
||||
((SubredditViewHolder) viewHolder).communityInstanceTextView.setText("@" + fullname.split(Pattern.quote("@"), 2)[1]);
|
||||
((SubredditViewHolder) viewHolder).communityInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(primaryTextColor, 0.7f));
|
||||
}
|
||||
} else if (viewHolder instanceof FavoriteSubredditViewHolder) {
|
||||
int offset;
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = 3;
|
||||
} else {
|
||||
offset = 2;
|
||||
}
|
||||
} else {
|
||||
offset = 1;
|
||||
}
|
||||
BlockedCommunityData communityData = mFavoriteBlockedCommunityData.get(viewHolder.getBindingAdapterPosition() - offset);
|
||||
String name = mFavoriteBlockedCommunityData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
||||
String iconUrl = mFavoriteBlockedCommunityData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
|
||||
|
||||
if (itemClickListener != null) {
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(communityData));
|
||||
} else {
|
||||
viewHolder.itemView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, name);
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
}
|
||||
|
||||
if (iconUrl != null && !iconUrl.equals("")) {
|
||||
glide.load(iconUrl)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.error(glide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
|
||||
.into(((FavoriteSubredditViewHolder) viewHolder).iconGifImageView);
|
||||
} else {
|
||||
glide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.into(((FavoriteSubredditViewHolder) viewHolder).iconGifImageView);
|
||||
}
|
||||
((FavoriteSubredditViewHolder) viewHolder).subredditNameTextView.setText(name);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mBlockedCommunityData != null) {
|
||||
|
||||
if (itemClickListener != null) {
|
||||
return mBlockedCommunityData.size() > 0 ? mBlockedCommunityData.size() + ((hasClearSelectionRow) ? 1 : 0) : 0;
|
||||
}
|
||||
|
||||
return mBlockedCommunityData.size();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
||||
if (holder instanceof SubredditViewHolder) {
|
||||
glide.clear(((SubredditViewHolder) holder).iconGifImageView);
|
||||
} else if (holder instanceof FavoriteSubredditViewHolder) {
|
||||
glide.clear(((FavoriteSubredditViewHolder) holder).iconGifImageView);
|
||||
}
|
||||
}
|
||||
|
||||
public void setSubscribedSubreddits(List<BlockedCommunityData> subscribedSubreddits) {
|
||||
mBlockedCommunityData = subscribedSubreddits;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void setFavoriteSubscribedSubreddits(List<BlockedCommunityData> favoriteBlockedCommunityData) {
|
||||
mFavoriteBlockedCommunityData = favoriteBlockedCommunityData;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void addUser(String username, String userIconUrl) {
|
||||
this.username = username;
|
||||
this.userIconUrl = userIconUrl;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getPopupText(int position) {
|
||||
switch (getItemViewType(position)) {
|
||||
case VIEW_TYPE_SUBREDDIT:
|
||||
if (hasClearSelectionRow && position == 0) {
|
||||
return "";
|
||||
} else if (itemClickListener != null && !hasClearSelectionRow && position == 0) {
|
||||
return "";
|
||||
} else if (hasClearSelectionRow && position == 1) {
|
||||
return "";
|
||||
} else {
|
||||
int offset;
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = (mFavoriteBlockedCommunityData != null && mFavoriteBlockedCommunityData.size() > 0) ?
|
||||
mFavoriteBlockedCommunityData.size() + 4 : 0;
|
||||
} else {
|
||||
offset = (mFavoriteBlockedCommunityData != null && mFavoriteBlockedCommunityData.size() > 0) ?
|
||||
mFavoriteBlockedCommunityData.size() + 3 : 0;
|
||||
}
|
||||
} else {
|
||||
offset = (mFavoriteBlockedCommunityData != null && mFavoriteBlockedCommunityData.size() > 0) ?
|
||||
mFavoriteBlockedCommunityData.size() + 2 : 0;
|
||||
}
|
||||
|
||||
return mBlockedCommunityData.get(position - offset).getName().substring(0, 1).toUpperCase();
|
||||
}
|
||||
case VIEW_TYPE_FAVORITE_SUBREDDIT:
|
||||
int offset;
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = 3;
|
||||
} else {
|
||||
offset = 2;
|
||||
}
|
||||
} else {
|
||||
offset = 1;
|
||||
}
|
||||
return mFavoriteBlockedCommunityData.get(position - offset).getName().substring(0, 1).toUpperCase();
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public interface ItemClickListener {
|
||||
void onClick(BlockedCommunityData subredditData);
|
||||
}
|
||||
|
||||
class SubredditViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.thing_icon_gif_image_view_item_subscribed_thing)
|
||||
GifImageView iconGifImageView;
|
||||
@BindView(R.id.thing_name_text_view_item_subscribed_thing)
|
||||
TextView subredditNameTextView;
|
||||
|
||||
@BindView(R.id.thing_instance_text_view_item_subscribed_thing)
|
||||
TextView communityInstanceTextView;
|
||||
|
||||
SubredditViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
subredditNameTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
}
|
||||
}
|
||||
|
||||
class FavoriteSubredditViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.thing_icon_gif_image_view_item_subscribed_thing)
|
||||
GifImageView iconGifImageView;
|
||||
@BindView(R.id.thing_name_text_view_item_subscribed_thing)
|
||||
TextView subredditNameTextView;
|
||||
|
||||
FavoriteSubredditViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
subredditNameTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
}
|
||||
}
|
||||
|
||||
class FavoriteSubredditsDividerViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.divider_text_view_item_favorite_thing_divider)
|
||||
TextView dividerTextView;
|
||||
|
||||
FavoriteSubredditsDividerViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
dividerTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
dividerTextView.setText(R.string.favorites);
|
||||
dividerTextView.setTextColor(secondaryTextColor);
|
||||
}
|
||||
}
|
||||
|
||||
class AllSubredditsDividerViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.divider_text_view_item_favorite_thing_divider)
|
||||
TextView dividerTextView;
|
||||
|
||||
AllSubredditsDividerViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
dividerTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
dividerTextView.setText(R.string.all);
|
||||
dividerTextView.setTextColor(secondaryTextColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
package eu.toldi.infinityforlemmy.adapters;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
|
||||
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import me.zhanghai.android.fastscroll.PopupTextProvider;
|
||||
import pl.droidsonroids.gif.GifImageView;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class BlockedUsersRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements PopupTextProvider {
|
||||
private static final int VIEW_TYPE_FAVORITE_USER_DIVIDER = 0;
|
||||
private static final int VIEW_TYPE_FAVORITE_USER = 1;
|
||||
private static final int VIEW_TYPE_USER_DIVIDER = 2;
|
||||
private static final int VIEW_TYPE_USER = 3;
|
||||
|
||||
private List<BlockedUserData> mBlockedUserData;
|
||||
private List<BlockedUserData> mFavoriteBlockedUserData;
|
||||
private BaseActivity mActivity;
|
||||
private Executor mExecutor;
|
||||
private Retrofit mOauthRetrofit;
|
||||
private RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||
private String mAccessToken;
|
||||
private RequestManager glide;
|
||||
private int mPrimaryTextColor;
|
||||
private int mSecondaryTextColor;
|
||||
|
||||
public BlockedUsersRecyclerViewAdapter(BaseActivity activity, Executor executor, Retrofit oauthRetrofit,
|
||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
CustomThemeWrapper customThemeWrapper,
|
||||
String accessToken) {
|
||||
mActivity = activity;
|
||||
mExecutor = executor;
|
||||
mOauthRetrofit = oauthRetrofit;
|
||||
mRedditDataRoomDatabase = redditDataRoomDatabase;
|
||||
mAccessToken = accessToken;
|
||||
glide = Glide.with(activity);
|
||||
mPrimaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
||||
mSecondaryTextColor = customThemeWrapper.getSecondaryTextColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
if (mFavoriteBlockedUserData != null && mFavoriteBlockedUserData.size() > 0) {
|
||||
if (position == 0) {
|
||||
return VIEW_TYPE_FAVORITE_USER_DIVIDER;
|
||||
} else if (position == mFavoriteBlockedUserData.size() + 1) {
|
||||
return VIEW_TYPE_USER_DIVIDER;
|
||||
} else if (position <= mFavoriteBlockedUserData.size()) {
|
||||
return VIEW_TYPE_FAVORITE_USER;
|
||||
} else {
|
||||
return VIEW_TYPE_USER;
|
||||
}
|
||||
} else {
|
||||
return VIEW_TYPE_USER;
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
|
||||
switch (i) {
|
||||
case VIEW_TYPE_FAVORITE_USER_DIVIDER:
|
||||
return new FavoriteUsersDividerViewHolder(LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.item_favorite_thing_divider, viewGroup, false));
|
||||
case VIEW_TYPE_USER_DIVIDER:
|
||||
return new AllUsersDividerViewHolder(LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.item_favorite_thing_divider, viewGroup, false));
|
||||
default:
|
||||
return new UserViewHolder(LayoutInflater.from(viewGroup.getContext())
|
||||
.inflate(R.layout.item_subscribed_thing, viewGroup, false));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int i) {
|
||||
if (viewHolder instanceof UserViewHolder) {
|
||||
int offset = 0;
|
||||
|
||||
if (!mBlockedUserData.get(viewHolder.getBindingAdapterPosition() - offset).getAvatar().equals("")) {
|
||||
glide.load(mBlockedUserData.get(viewHolder.getBindingAdapterPosition() - offset).getAvatar())
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.error(glide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
|
||||
.into(((UserViewHolder) viewHolder).iconGifImageView);
|
||||
} else {
|
||||
glide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.into(((UserViewHolder) viewHolder).iconGifImageView);
|
||||
}
|
||||
((UserViewHolder) viewHolder).userNameTextView.setText(mBlockedUserData.get(viewHolder.getBindingAdapterPosition() - offset).getName());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mBlockedUserData != null && mBlockedUserData.size() > 0) {
|
||||
return mBlockedUserData.size();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
||||
if (holder instanceof UserViewHolder) {
|
||||
glide.clear(((UserViewHolder) holder).iconGifImageView);
|
||||
}
|
||||
}
|
||||
|
||||
public void setSubscribedUsers(List<BlockedUserData> subscribedUsers) {
|
||||
mBlockedUserData = subscribedUsers;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void setFavoriteSubscribedUsers(List<BlockedUserData> favoriteSubscribedUsers) {
|
||||
mFavoriteBlockedUserData = favoriteSubscribedUsers;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getPopupText(int position) {
|
||||
switch (getItemViewType(position)) {
|
||||
case VIEW_TYPE_USER:
|
||||
int offset = (mFavoriteBlockedUserData != null && mFavoriteBlockedUserData.size() > 0) ?
|
||||
mFavoriteBlockedUserData.size() + 2 : 0;
|
||||
return mBlockedUserData.get(position - offset).getName().substring(0, 1).toUpperCase();
|
||||
case VIEW_TYPE_FAVORITE_USER:
|
||||
return mFavoriteBlockedUserData.get(position - 1).getName().substring(0, 1).toUpperCase();
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class UserViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.thing_icon_gif_image_view_item_subscribed_thing)
|
||||
GifImageView iconGifImageView;
|
||||
@BindView(R.id.thing_name_text_view_item_subscribed_thing)
|
||||
TextView userNameTextView;
|
||||
|
||||
UserViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
userNameTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
userNameTextView.setTextColor(mPrimaryTextColor);
|
||||
|
||||
itemView.setOnClickListener(view -> {
|
||||
int offset = (mFavoriteBlockedUserData != null && mFavoriteBlockedUserData.size() > 0) ?
|
||||
mFavoriteBlockedUserData.size() + 2 : 0;
|
||||
int position = getBindingAdapterPosition() - offset;
|
||||
if (position >= 0 && mBlockedUserData.size() > position) {
|
||||
Intent intent = new Intent(mActivity, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mBlockedUserData.get(position).getName());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, mBlockedUserData.get(position).getQualifiedName());
|
||||
mActivity.startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class FavoriteUsersDividerViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.divider_text_view_item_favorite_thing_divider)
|
||||
TextView dividerTextView;
|
||||
|
||||
FavoriteUsersDividerViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
dividerTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
dividerTextView.setText(R.string.favorites);
|
||||
dividerTextView.setTextColor(mSecondaryTextColor);
|
||||
}
|
||||
}
|
||||
|
||||
class AllUsersDividerViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.divider_text_view_item_favorite_thing_divider)
|
||||
TextView dividerTextView;
|
||||
|
||||
AllUsersDividerViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
dividerTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
dividerTextView.setText(R.string.all);
|
||||
dividerTextView.setTextColor(mSecondaryTextColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,6 +32,7 @@ import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.NetworkState;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.SaveComment;
|
||||
import eu.toldi.infinityforlemmy.SaveThing;
|
||||
import eu.toldi.infinityforlemmy.VoteThing;
|
||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||
@@ -76,7 +77,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
||||
}
|
||||
};
|
||||
private BaseActivity mActivity;
|
||||
private Retrofit mOauthRetrofit;
|
||||
private Retrofit retrofit;
|
||||
private Locale mLocale;
|
||||
private Markwon mMarkwon;
|
||||
private RecyclerView.RecycledViewPool recycledViewPool;
|
||||
@@ -109,7 +110,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
||||
String accountName, RetryLoadingMoreCallback retryLoadingMoreCallback) {
|
||||
super(DIFF_CALLBACK);
|
||||
mActivity = activity;
|
||||
mOauthRetrofit = oauthRetrofit;
|
||||
retrofit = oauthRetrofit;
|
||||
mCommentColor = customThemeWrapper.getCommentColor();
|
||||
int commentSpoilerBackgroundColor = mCommentColor | 0xFF000000;
|
||||
mLocale = locale;
|
||||
@@ -189,7 +190,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
||||
if (holder instanceof CommentViewHolder) {
|
||||
Comment comment = getItem(holder.getBindingAdapterPosition());
|
||||
if (comment != null) {
|
||||
String name = "r/" + comment.getCommunityName();
|
||||
String name = comment.getCommunityQualifiedName();
|
||||
((CommentViewHolder) holder).authorTextView.setText(name);
|
||||
((CommentViewHolder) holder).authorTextView.setTextColor(mSubredditColor);
|
||||
|
||||
@@ -436,6 +437,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
||||
if (comment != null) {
|
||||
Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, comment.getCommunityName());
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, comment.getCommunityQualifiedName());
|
||||
mActivity.startActivity(intent);
|
||||
}
|
||||
});
|
||||
@@ -448,7 +450,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
||||
Comment comment = getItem(getBindingAdapterPosition());
|
||||
if (comment != null) {
|
||||
Bundle bundle = new Bundle();
|
||||
if (comment.getAuthor().equals(mAccountName)) {
|
||||
if (comment.getAuthorName().equals(mAccountName)) {
|
||||
bundle.putBoolean(CommentMoreBottomSheetFragment.EXTRA_EDIT_AND_DELETE_AVAILABLE, true);
|
||||
}
|
||||
bundle.putString(CommentMoreBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
@@ -468,8 +470,9 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
||||
Comment comment = getItem(getBindingAdapterPosition());
|
||||
if (comment != null) {
|
||||
Intent intent = new Intent(mActivity, ViewPostDetailActivity.class);
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getLinkId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getPostId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_PARENT_ID, comment.getParentId());
|
||||
mActivity.startActivity(intent);
|
||||
}
|
||||
});
|
||||
@@ -536,7 +539,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
|
||||
|
||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -606,7 +609,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
|
||||
|
||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -646,9 +649,10 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
||||
}
|
||||
Comment comment = getItem(position);
|
||||
if (comment != null) {
|
||||
SaveComment saveComment = new SaveComment();
|
||||
if (comment.isSaved()) {
|
||||
comment.setSaved(false);
|
||||
SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, comment.getFullName(), new SaveThing.SaveThingListener() {
|
||||
saveComment.unsaveThing(retrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
comment.setSaved(false);
|
||||
@@ -669,7 +673,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
||||
});
|
||||
} else {
|
||||
comment.setSaved(true);
|
||||
SaveThing.saveThing(mOauthRetrofit, mAccessToken, comment.getFullName(), new SaveThing.SaveThingListener() {
|
||||
saveComment.saveThing(retrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
comment.setSaved(true);
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.text.Spanned;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -38,10 +39,13 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.SaveComment;
|
||||
import eu.toldi.infinityforlemmy.SaveThing;
|
||||
import eu.toldi.infinityforlemmy.SortType;
|
||||
import eu.toldi.infinityforlemmy.VoteThing;
|
||||
@@ -93,11 +97,12 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
private BaseActivity mActivity;
|
||||
private ViewPostDetailFragment mFragment;
|
||||
private Executor mExecutor;
|
||||
private Retrofit mRetrofit;
|
||||
private RetrofitHolder mRetrofit;
|
||||
private Retrofit mOauthRetrofit;
|
||||
private Markwon mCommentMarkwon;
|
||||
private String mAccessToken;
|
||||
private String mAccountName;
|
||||
private String mAccountQualifiedName;
|
||||
|
||||
private Post mPost;
|
||||
private ArrayList<Comment> mVisibleComments;
|
||||
|
||||
@@ -123,12 +128,17 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
private boolean mShowAuthorAvatar;
|
||||
private boolean mAlwaysShowChildCommentCount;
|
||||
private boolean mHideTheNumberOfVotes;
|
||||
private boolean mSeperateUpandDownvote;
|
||||
private boolean mHideDownvotes;
|
||||
private int mDepthThreshold;
|
||||
private CommentRecyclerViewAdapterCallback mCommentRecyclerViewAdapterCallback;
|
||||
private boolean isInitiallyLoading;
|
||||
private boolean isInitiallyLoadingFailed;
|
||||
private boolean mHasMoreComments;
|
||||
private boolean loadMoreCommentsFailed;
|
||||
|
||||
private boolean mHideUserInstance;
|
||||
private boolean mShowUserDisplayName;
|
||||
private Drawable expandDrawable;
|
||||
private Drawable collapseDrawable;
|
||||
|
||||
@@ -160,18 +170,18 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
|
||||
public CommentsRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
|
||||
CustomThemeWrapper customThemeWrapper,
|
||||
Executor executor, Retrofit retrofit, Retrofit oauthRetrofit,
|
||||
Executor executor, RetrofitHolder retrofit,
|
||||
String accessToken, String accountName,
|
||||
Post post, Locale locale, Integer singleCommentId,
|
||||
boolean isSingleCommentThreadMode,
|
||||
SharedPreferences sharedPreferences,
|
||||
SharedPreferences currentAccountSharedPreferences,
|
||||
CommentRecyclerViewAdapterCallback commentRecyclerViewAdapterCallback) {
|
||||
mActivity = activity;
|
||||
mFragment = fragment;
|
||||
mExecutor = executor;
|
||||
mRetrofit = retrofit;
|
||||
mOauthRetrofit = oauthRetrofit;
|
||||
mGlide = Glide.with(activity);
|
||||
mGlide = Glide.with(activity.getApplicationContext());
|
||||
mSecondaryTextColor = customThemeWrapper.getSecondaryTextColor();
|
||||
mCommentTextColor = customThemeWrapper.getCommentColor();
|
||||
int commentSpoilerBackgroundColor = mCommentTextColor | 0xFF000000;
|
||||
@@ -213,7 +223,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
miscPlugin, mCommentTextColor, commentSpoilerBackgroundColor, onLinkLongClickListener);
|
||||
recycledViewPool = new RecyclerView.RecycledViewPool();
|
||||
mAccessToken = accessToken;
|
||||
mAccountName = accountName;
|
||||
mAccountQualifiedName = accountName;
|
||||
mPost = post;
|
||||
mVisibleComments = new ArrayList<>();
|
||||
loadedComments = new HashSet<>();
|
||||
@@ -237,6 +247,10 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
mShowAuthorAvatar = sharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_AUTHOR_AVATAR, false);
|
||||
mAlwaysShowChildCommentCount = sharedPreferences.getBoolean(SharedPreferencesUtils.ALWAYS_SHOW_CHILD_COMMENT_COUNT, false);
|
||||
mHideTheNumberOfVotes = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_VOTES_IN_COMMENTS, false);
|
||||
mHideUserInstance = sharedPreferences.getBoolean(SharedPreferencesUtils.COMMENT_HIDE_USER_INSTANCE, false);
|
||||
mShowUserDisplayName = sharedPreferences.getBoolean(SharedPreferencesUtils.COMMENT_DISPLAY_NAME_INSTEAD_OF_USERNAME, true);
|
||||
mHideDownvotes = !currentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true);
|
||||
mSeperateUpandDownvote = sharedPreferences.getBoolean(SharedPreferencesUtils.COMMENT_SEPARATE_UP_AND_DOWN_VOTES, true) && !mHideDownvotes;
|
||||
mDepthThreshold = sharedPreferences.getInt(SharedPreferencesUtils.SHOW_FEWER_TOOLBAR_OPTIONS_THRESHOLD, 5);
|
||||
|
||||
mCommentRecyclerViewAdapterCallback = commentRecyclerViewAdapterCallback;
|
||||
@@ -368,9 +382,9 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
if (mIsSingleCommentThreadMode && comment.getId() == mSingleCommentId) {
|
||||
holder.itemView.setBackgroundColor(mSingleCommentThreadBackgroundColor);
|
||||
}
|
||||
|
||||
String authorPrefixed = comment.getAuthorQualifiedName();
|
||||
((CommentViewHolder) holder).authorTextView.setText(authorPrefixed);
|
||||
String authorDisplayName = (mShowUserDisplayName) ? comment.getAuthorName() : comment.getAuthor().getUsername();
|
||||
String authorInstance = (mHideUserInstance) ? "" : "@" + comment.getAuthor().getQualifiedName().split(Pattern.quote("@"))[1];
|
||||
((CommentViewHolder) holder).authorTextView.setText(authorDisplayName + authorInstance);
|
||||
|
||||
|
||||
if (comment.isSubmitter()) {
|
||||
@@ -383,7 +397,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
Drawable moderatorDrawable = Utils.getTintedDrawable(mActivity, R.drawable.ic_verified_user_14dp, mModeratorColor);
|
||||
((CommentViewHolder) holder).authorTextView.setCompoundDrawablesWithIntrinsicBounds(
|
||||
moderatorDrawable, null, null, null);
|
||||
} else if (comment.getAuthor().equals(mAccountName)) {
|
||||
} else if (comment.getAuthorQualifiedName().equals(mAccountQualifiedName)) {
|
||||
((CommentViewHolder) holder).authorTextView.setTextColor(mCurrentUserColor);
|
||||
Drawable currentUserDrawable = Utils.getTintedDrawable(mActivity, R.drawable.ic_current_user_14dp, mCurrentUserColor);
|
||||
((CommentViewHolder) holder).authorTextView.setCompoundDrawablesWithIntrinsicBounds(
|
||||
@@ -391,13 +405,13 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
}
|
||||
|
||||
if (comment.getAuthorIconUrl() == null) {
|
||||
mFragment.loadIcon(comment.getAuthor(), (authorName, iconUrl) -> {
|
||||
if (authorName.equals(comment.getAuthor())) {
|
||||
mFragment.loadIcon(comment.getAuthorQualifiedName(), (authorName, iconUrl) -> {
|
||||
if (authorName.equals(comment.getAuthorQualifiedName())) {
|
||||
comment.setAuthorIconUrl(iconUrl);
|
||||
}
|
||||
|
||||
Comment currentComment = getCurrentComment(holder);
|
||||
if (currentComment != null && authorName.equals(currentComment.getAuthor())) {
|
||||
if (currentComment != null && authorName.equals(currentComment.getAuthorQualifiedName())) {
|
||||
mGlide.load(iconUrl)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.error(mGlide.load(R.drawable.subreddit_default_icon)
|
||||
@@ -434,6 +448,10 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
((CommentViewHolder) holder).mMarkwonAdapter.setMarkdown(mCommentMarkwon, comment.getCommentMarkdown());
|
||||
// noinspection NotifyDataSetChanged
|
||||
((CommentViewHolder) holder).mMarkwonAdapter.notifyDataSetChanged();
|
||||
if (mHideDownvotes) {
|
||||
((CommentViewHolder) holder).downvoteButton.setVisibility(View.GONE);
|
||||
((CommentViewHolder) holder).downvoteTextView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
String commentText = "";
|
||||
@@ -445,7 +463,21 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
|
||||
((CommentViewHolder) holder).scoreTextView.setText(commentText);
|
||||
if (mSeperateUpandDownvote) {
|
||||
int upvotes = (comment.getVoteType() == 1) ? comment.getUpvotes() + 1 : comment.getUpvotes();
|
||||
int downvotes = (comment.getVoteType() == -1) ? comment.getDownvotes() + 1 : comment.getDownvotes();
|
||||
((CommentViewHolder) holder).downvoteTextView.setVisibility(View.VISIBLE);
|
||||
((CommentViewHolder) holder).scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
|
||||
((CommentViewHolder) holder).downvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
|
||||
((CommentViewHolder) holder).scoreTextView.setGravity(Gravity.START);
|
||||
((CommentViewHolder) holder).scoreTextView.getLayoutParams().width = (int) (32 * mActivity.getResources().getDisplayMetrics().density);
|
||||
|
||||
((CommentViewHolder) holder).scoreTextView.setPadding(0, 0, 6, 0);
|
||||
((CommentViewHolder) holder).downvoteButton.setPadding(24, 0, 12, 0);
|
||||
((CommentViewHolder) holder).upvoteButton.setPadding(24, 0, 12, 0);
|
||||
} else {
|
||||
((CommentViewHolder) holder).scoreTextView.setText(commentText);
|
||||
}
|
||||
((CommentViewHolder) holder).topScoreTextView.setText(topScoreText);
|
||||
} else {
|
||||
((CommentViewHolder) holder).scoreTextView.setText(mActivity.getString(R.string.vote));
|
||||
@@ -485,13 +517,21 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
.setColorFilter(mUpvotedColor, PorterDuff.Mode.SRC_IN);
|
||||
((CommentViewHolder) holder).scoreTextView.setTextColor(mUpvotedColor);
|
||||
((CommentViewHolder) holder).topScoreTextView.setTextColor(mUpvotedColor);
|
||||
((CommentViewHolder) holder).downvoteTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
break;
|
||||
case Comment.VOTE_TYPE_DOWNVOTE:
|
||||
((CommentViewHolder) holder).downvoteButton
|
||||
.setColorFilter(mDownvotedColor, PorterDuff.Mode.SRC_IN);
|
||||
((CommentViewHolder) holder).scoreTextView.setTextColor(mDownvotedColor);
|
||||
if(mSeperateUpandDownvote) {
|
||||
((CommentViewHolder) holder).downvoteTextView.setTextColor(mDownvotedColor);
|
||||
((CommentViewHolder) holder).scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
} else {
|
||||
((CommentViewHolder) holder).scoreTextView.setTextColor(mDownvotedColor);
|
||||
}
|
||||
((CommentViewHolder) holder).topScoreTextView.setTextColor(mDownvotedColor);
|
||||
break;
|
||||
default:
|
||||
((CommentViewHolder) holder).downvoteTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
}
|
||||
|
||||
if (mPost.isArchived()) {
|
||||
@@ -532,17 +572,19 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
} else if (holder instanceof CommentFullyCollapsedViewHolder) {
|
||||
Comment comment = getCurrentComment(position);
|
||||
if (comment != null) {
|
||||
String authorWithPrefix = "u/" + comment.getAuthor();
|
||||
String author_name = (mShowUserDisplayName) ? comment.getAuthorName() : comment.getAuthor().getUsername();
|
||||
String authorInstance = (mHideUserInstance) ? "" : "@" + comment.getAuthor().getQualifiedName().split(Pattern.quote("@"))[1];
|
||||
String authorWithPrefix = author_name + authorInstance;
|
||||
((CommentFullyCollapsedViewHolder) holder).usernameTextView.setText(authorWithPrefix);
|
||||
|
||||
if (comment.getAuthorIconUrl() == null) {
|
||||
mFragment.loadIcon(comment.getAuthor(), (authorName, iconUrl) -> {
|
||||
if (authorName.equals(comment.getAuthor())) {
|
||||
mFragment.loadIcon(comment.getAuthorQualifiedName(), (authorName, iconUrl) -> {
|
||||
if (authorName.equals(comment.getAuthorQualifiedName())) {
|
||||
comment.setAuthorIconUrl(iconUrl);
|
||||
}
|
||||
|
||||
Comment currentComment = getCurrentComment(holder);
|
||||
if (currentComment != null && authorName.equals(currentComment.getAuthor())) {
|
||||
if (currentComment != null && authorName.equals(currentComment.getAuthorQualifiedName())) {
|
||||
mGlide.load(iconUrl)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.error(mGlide.load(R.drawable.subreddit_default_icon)
|
||||
@@ -615,28 +657,28 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
mVisibleComments.get(commentPosition).setLoadMoreChildrenFailed(false);
|
||||
((LoadMoreChildCommentsViewHolder) holder).placeholderTextView.setText(R.string.loading);
|
||||
|
||||
Retrofit retrofit = mRetrofit;
|
||||
Retrofit retrofit = mRetrofit.getRetrofit();
|
||||
SortType.Type sortType = mCommentRecyclerViewAdapterCallback.getSortType();
|
||||
FetchComment.fetchComments(mExecutor, new Handler(), retrofit, mAccessToken,
|
||||
mPost.getId(), parentComment.getId(), sortType,
|
||||
mExpandChildren, 1, new FetchComment.FetchCommentListener() {
|
||||
@Override
|
||||
public void onFetchCommentSuccess(ArrayList<Comment> expandedComments, Integer parentId, ArrayList<Integer> children) {
|
||||
if (mVisibleComments.size() > parentPosition
|
||||
&& parentComment.getId() == mVisibleComments.get(parentPosition).getId()) {
|
||||
if (parentComment.getId() == mVisibleComments.get(parentPosition).getId()) {
|
||||
if (mVisibleComments.get(parentPosition).isExpanded()) {
|
||||
|
||||
mVisibleComments.get(parentPosition).getChildren()
|
||||
.remove(mVisibleComments.get(parentPosition).getChildren().size() - 1);
|
||||
// mVisibleComments.get(parentPosition).removeMoreChildrenIds();
|
||||
|
||||
int placeholderPosition = findLoadMoreCommentsPlaceholderPosition(parentComment.getFullName(), commentPosition);
|
||||
if (placeholderPosition != -1) {
|
||||
mVisibleComments.remove(placeholderPosition);
|
||||
if (position != -1) {
|
||||
|
||||
if (mIsSingleCommentThreadMode) {
|
||||
notifyItemRemoved(placeholderPosition + 1);
|
||||
mVisibleComments.remove(position - 1);
|
||||
notifyItemRemoved(position + 1);
|
||||
} else {
|
||||
notifyItemRemoved(placeholderPosition);
|
||||
mVisibleComments.remove(position);
|
||||
notifyItemRemoved(position);
|
||||
}
|
||||
List<Comment> trulyNewComments = new ArrayList<>();
|
||||
for (int i = 0; i < expandedComments.size(); i++) {
|
||||
@@ -646,11 +688,13 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
trulyNewComments.add(expandedComments.get(i));
|
||||
loadedComments.add(expandedComments.get(i).getId());
|
||||
}
|
||||
mVisibleComments.addAll(placeholderPosition, trulyNewComments);
|
||||
if (mIsSingleCommentThreadMode) {
|
||||
notifyItemRangeInserted(placeholderPosition + 1, trulyNewComments.size());
|
||||
} else {
|
||||
notifyItemRangeInserted(placeholderPosition, trulyNewComments.size());
|
||||
if (!trulyNewComments.isEmpty()) {
|
||||
mVisibleComments.addAll(position, trulyNewComments);
|
||||
if (mIsSingleCommentThreadMode) {
|
||||
notifyItemRangeInserted(position + 1, trulyNewComments.size());
|
||||
} else {
|
||||
notifyItemRangeInserted(position, trulyNewComments.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -680,7 +724,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
if (mVisibleComments.get(i).getFullName().equals(parentComment.getFullName())) {
|
||||
if (mVisibleComments.get(i).isExpanded()) {
|
||||
int placeholderPositionHint = i + mVisibleComments.get(i).getChildren().size();
|
||||
int placeholderPosition = findLoadMoreCommentsPlaceholderPosition(parentComment.getFullName(), placeholderPositionHint);
|
||||
int placeholderPosition = findLoadMoreCommentsPlaceholderPosition(parentComment.getId(), placeholderPositionHint);
|
||||
|
||||
if (placeholderPosition != -1) {
|
||||
mVisibleComments.get(placeholderPosition).setLoadingMoreChildren(false);
|
||||
@@ -718,7 +762,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
|
||||
@Override
|
||||
public void onFetchCommentFailed() {
|
||||
int currentParentPosition = findCommentPosition(parentComment.getFullName(), parentPosition);
|
||||
int currentParentPosition = findCommentPosition(parentComment.getId(), parentPosition);
|
||||
if (currentParentPosition == -1) {
|
||||
// note: returning here is probably a mistake, because
|
||||
// parent is just not visible, but it can still exist in the comments tree.
|
||||
@@ -728,7 +772,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
|
||||
if (currentParentComment.isExpanded()) {
|
||||
int placeholderPositionHint = currentParentPosition + currentParentComment.getChildren().size();
|
||||
int placeholderPosition = findLoadMoreCommentsPlaceholderPosition(parentComment.getFullName(), placeholderPositionHint);
|
||||
int placeholderPosition = findLoadMoreCommentsPlaceholderPosition(parentComment.getId(), placeholderPositionHint);
|
||||
|
||||
if (placeholderPosition != -1) {
|
||||
mVisibleComments.get(placeholderPosition).setLoadingMoreChildren(false);
|
||||
@@ -777,7 +821,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
*
|
||||
* @return position of the placeholder or -1 if not found
|
||||
*/
|
||||
private int findCommentPosition(String fullName, int positionHint) {
|
||||
private int findCommentPosition(int fullName, int positionHint) {
|
||||
return findCommentPosition(fullName, positionHint, Comment.NOT_PLACEHOLDER);
|
||||
}
|
||||
|
||||
@@ -787,20 +831,20 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
*
|
||||
* @return position of the placeholder or -1 if not found
|
||||
*/
|
||||
private int findLoadMoreCommentsPlaceholderPosition(String fullName, int positionHint) {
|
||||
return findCommentPosition(fullName, positionHint, Comment.PLACEHOLDER_LOAD_MORE_COMMENTS);
|
||||
private int findLoadMoreCommentsPlaceholderPosition(int id, int positionHint) {
|
||||
return findCommentPosition(id, positionHint, Comment.PLACEHOLDER_LOAD_MORE_COMMENTS);
|
||||
}
|
||||
|
||||
private int findCommentPosition(String fullName, int positionHint, int placeholderType) {
|
||||
private int findCommentPosition(int id, int positionHint, int placeholderType) {
|
||||
if (0 <= positionHint && positionHint < mVisibleComments.size()
|
||||
&& mVisibleComments.get(positionHint).getFullName().equals(fullName)
|
||||
&& mVisibleComments.get(positionHint).getId() == id
|
||||
&& mVisibleComments.get(positionHint).getPlaceholderType() == placeholderType) {
|
||||
return positionHint;
|
||||
}
|
||||
|
||||
for (int i = 0; i < mVisibleComments.size(); i++) {
|
||||
Comment comment = mVisibleComments.get(i);
|
||||
if (comment.getFullName().equals(fullName) && comment.getPlaceholderType() == placeholderType) {
|
||||
if (comment.getId() == id && comment.getPlaceholderType() == placeholderType) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
@@ -856,13 +900,24 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
}
|
||||
}
|
||||
|
||||
List<Comment> newComments = new ArrayList<>();
|
||||
for (int i = 0; i < comments.size(); i++) {
|
||||
if (loadedComments.contains(comments.get(i).getId())) {
|
||||
continue;
|
||||
}
|
||||
newComments.add(comments.get(i));
|
||||
loadedComments.add(comments.get(i).getId());
|
||||
}
|
||||
comments = (ArrayList<Comment>) newComments;
|
||||
|
||||
int sizeBefore = mVisibleComments.size();
|
||||
mVisibleComments.addAll(comments);
|
||||
for (int i = 0; i < comments.size(); i++) {
|
||||
loadedComments.add(comments.get(i).getId());
|
||||
}
|
||||
if (mIsSingleCommentThreadMode) {
|
||||
notifyItemRangeInserted(sizeBefore, comments.size() + 1);
|
||||
int offset = (comments.size() > 0) ? 1 : 0;
|
||||
notifyItemRangeInserted(sizeBefore, comments.size() + offset);
|
||||
} else {
|
||||
notifyItemRangeInserted(sizeBefore, comments.size());
|
||||
}
|
||||
@@ -1180,6 +1235,9 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
ImageView upvoteButton;
|
||||
@BindView(R.id.score_text_view_item_post_comment)
|
||||
TextView scoreTextView;
|
||||
|
||||
@BindView(R.id.downvote_text_view_item_post_comment)
|
||||
TextView downvoteTextView;
|
||||
@BindView(R.id.down_vote_button_item_post_comment)
|
||||
ImageView downvoteButton;
|
||||
@BindView(R.id.placeholder_item_post_comment)
|
||||
@@ -1211,6 +1269,8 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
constraintSet.clear(scoreTextView.getId(), ConstraintSet.END);
|
||||
constraintSet.clear(downvoteButton.getId(), ConstraintSet.START);
|
||||
constraintSet.clear(downvoteButton.getId(), ConstraintSet.END);
|
||||
constraintSet.clear(downvoteTextView.getId(), ConstraintSet.START);
|
||||
constraintSet.clear(downvoteTextView.getId(), ConstraintSet.END);
|
||||
constraintSet.clear(expandButton.getId(), ConstraintSet.START);
|
||||
constraintSet.clear(expandButton.getId(), ConstraintSet.END);
|
||||
constraintSet.clear(saveButton.getId(), ConstraintSet.START);
|
||||
@@ -1223,8 +1283,15 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
constraintSet.connect(upvoteButton.getId(), ConstraintSet.START, placeholder.getId(), ConstraintSet.END);
|
||||
constraintSet.connect(scoreTextView.getId(), ConstraintSet.END, downvoteButton.getId(), ConstraintSet.START);
|
||||
constraintSet.connect(scoreTextView.getId(), ConstraintSet.START, upvoteButton.getId(), ConstraintSet.END);
|
||||
constraintSet.connect(downvoteButton.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
|
||||
constraintSet.connect(downvoteButton.getId(), ConstraintSet.START, scoreTextView.getId(), ConstraintSet.END);
|
||||
if (!mSeperateUpandDownvote) {
|
||||
constraintSet.connect(downvoteButton.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
|
||||
constraintSet.connect(downvoteButton.getId(), ConstraintSet.START, scoreTextView.getId(), ConstraintSet.END);
|
||||
} else {
|
||||
constraintSet.connect(downvoteButton.getId(), ConstraintSet.END, downvoteTextView.getId(), ConstraintSet.START);
|
||||
constraintSet.connect(downvoteButton.getId(), ConstraintSet.START, scoreTextView.getId(), ConstraintSet.END);
|
||||
constraintSet.connect(downvoteTextView.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
|
||||
constraintSet.connect(downvoteTextView.getId(), ConstraintSet.START, downvoteButton.getId(), ConstraintSet.END);
|
||||
}
|
||||
constraintSet.connect(placeholder.getId(), ConstraintSet.END, upvoteButton.getId(), ConstraintSet.START);
|
||||
constraintSet.connect(placeholder.getId(), ConstraintSet.START, moreButton.getId(), ConstraintSet.END);
|
||||
constraintSet.connect(moreButton.getId(), ConstraintSet.START, expandButton.getId(), ConstraintSet.END);
|
||||
@@ -1257,6 +1324,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
editedTextView.setTypeface(mActivity.typeface);
|
||||
awardsTextView.setTypeface(mActivity.typeface);
|
||||
scoreTextView.setTypeface(mActivity.typeface);
|
||||
downvoteTextView.setTypeface(mActivity.typeface);
|
||||
expandButton.setTypeface(mActivity.typeface);
|
||||
}
|
||||
|
||||
@@ -1288,11 +1356,13 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
commentTimeTextView.setTextColor(mSecondaryTextColor);
|
||||
authorFlairTextView.setTextColor(mAuthorFlairTextColor);
|
||||
topScoreTextView.setTextColor(mSecondaryTextColor);
|
||||
downvoteTextView.setTextColor(mSecondaryTextColor);
|
||||
editedTextView.setTextColor(mSecondaryTextColor);
|
||||
awardsTextView.setTextColor(mSecondaryTextColor);
|
||||
commentDivider.setBackgroundColor(mDividerColor);
|
||||
upvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
downvoteTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
downvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
moreButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
expandButton.setTextColor(mCommentIconAndInfoColor);
|
||||
@@ -1316,7 +1386,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
Comment comment = getCurrentComment(this);
|
||||
if (comment != null) {
|
||||
Bundle bundle = new Bundle();
|
||||
if (!mPost.isArchived() && !mPost.isLocked() && comment.getAuthor().equals(mAccountName)) {
|
||||
if (!mPost.isArchived() && !mPost.isLocked() && comment.getAuthorQualifiedName().equals(mAccountQualifiedName)) {
|
||||
bundle.putBoolean(CommentMoreBottomSheetFragment.EXTRA_EDIT_AND_DELETE_AVAILABLE, true);
|
||||
}
|
||||
bundle.putString(CommentMoreBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||
@@ -1399,18 +1469,28 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
newVoteType = Integer.parseInt(APIUtils.DIR_UNVOTE);
|
||||
upvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
downvoteTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
topScoreTextView.setTextColor(mSecondaryTextColor);
|
||||
}
|
||||
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
if(mSeperateUpandDownvote){
|
||||
int upvoteCount = (comment.getVoteType() == 1) ? comment.getUpvotes() + 1 : comment.getUpvotes();
|
||||
int downvoteCount = (comment.getVoteType() == -1) ? comment.getDownvotes() + 1 : comment.getDownvotes();
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
upvoteCount));
|
||||
downvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
downvoteCount));
|
||||
}else {
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
}
|
||||
topScoreTextView.setText(mActivity.getString(R.string.top_score,
|
||||
Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType())));
|
||||
}
|
||||
|
||||
VoteThing.voteComment(mActivity, mRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.voteComment(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -1420,6 +1500,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
upvoteButton.setColorFilter(mUpvotedColor, PorterDuff.Mode.SRC_IN);
|
||||
scoreTextView.setTextColor(mUpvotedColor);
|
||||
topScoreTextView.setTextColor(mUpvotedColor);
|
||||
downvoteTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
}
|
||||
} else {
|
||||
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
|
||||
@@ -1427,14 +1508,24 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
upvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
topScoreTextView.setTextColor(mSecondaryTextColor);
|
||||
downvoteTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
}
|
||||
}
|
||||
|
||||
if (currentPosition == position) {
|
||||
downvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
if(mSeperateUpandDownvote){
|
||||
int upvoteCount = (comment.getVoteType() == 1) ? comment.getUpvotes() + 1 : comment.getUpvotes();
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
upvoteCount));
|
||||
int downvoteCount = (comment.getVoteType() == -1) ? comment.getDownvotes() + 1 : comment.getDownvotes();
|
||||
downvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
downvoteCount));
|
||||
} else {
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
}
|
||||
topScoreTextView.setText(mActivity.getString(R.string.top_score,
|
||||
Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType())));
|
||||
@@ -1472,27 +1563,41 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
comment.setVoteType(Comment.VOTE_TYPE_DOWNVOTE);
|
||||
newVoteType = Integer.parseInt(APIUtils.DIR_DOWNVOTE);
|
||||
downvoteButton.setColorFilter(mDownvotedColor, PorterDuff.Mode.SRC_IN);
|
||||
scoreTextView.setTextColor(mDownvotedColor);
|
||||
if(mSeperateUpandDownvote){
|
||||
downvoteTextView.setTextColor(mDownvotedColor);
|
||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
}else {
|
||||
scoreTextView.setTextColor(mDownvotedColor);
|
||||
}
|
||||
topScoreTextView.setTextColor(mDownvotedColor);
|
||||
} else {
|
||||
//Downvoted before
|
||||
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
|
||||
newVoteType = Integer.parseInt(APIUtils.DIR_UNVOTE);
|
||||
downvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
downvoteTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
topScoreTextView.setTextColor(mSecondaryTextColor);
|
||||
}
|
||||
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
if(mSeperateUpandDownvote){
|
||||
int downvotes = (comment.getVoteType() == -1) ? comment.getDownvotes() +1 : comment.getDownvotes();
|
||||
int upvotes = (comment.getVoteType() == 1) ? comment.getUpvotes() +1 : comment.getUpvotes();
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
upvotes));
|
||||
downvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
|
||||
} else {
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
}
|
||||
topScoreTextView.setText(mActivity.getString(R.string.top_score,
|
||||
Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType())));
|
||||
}
|
||||
|
||||
int position = getBindingAdapterPosition();
|
||||
VoteThing.voteComment(mActivity, mRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.voteComment(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -1500,7 +1605,11 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
comment.setVoteType(Comment.VOTE_TYPE_DOWNVOTE);
|
||||
if (currentPosition == position) {
|
||||
downvoteButton.setColorFilter(mDownvotedColor, PorterDuff.Mode.SRC_IN);
|
||||
scoreTextView.setTextColor(mDownvotedColor);
|
||||
if (mSeperateUpandDownvote) {
|
||||
downvoteTextView.setTextColor(mDownvotedColor);
|
||||
} else {
|
||||
scoreTextView.setTextColor(mDownvotedColor);
|
||||
}
|
||||
topScoreTextView.setTextColor(mDownvotedColor);
|
||||
}
|
||||
} else {
|
||||
@@ -1508,6 +1617,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
if (currentPosition == position) {
|
||||
downvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
downvoteTextView.setTextColor(mCommentIconAndInfoColor);
|
||||
topScoreTextView.setTextColor(mSecondaryTextColor);
|
||||
}
|
||||
}
|
||||
@@ -1515,8 +1625,17 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
if (currentPosition == position) {
|
||||
upvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
if(mSeperateUpandDownvote){
|
||||
int downvotes = (comment.getVoteType() == -1) ? comment.getDownvotes() +1 : comment.getDownvotes();
|
||||
int upvotes = (comment.getVoteType() == 1) ? comment.getUpvotes() +1 : comment.getUpvotes();
|
||||
downvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
upvotes));
|
||||
} else {
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType()));
|
||||
}
|
||||
|
||||
topScoreTextView.setText(mActivity.getString(R.string.top_score,
|
||||
Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
comment.getScore() + comment.getVoteType())));
|
||||
@@ -1535,9 +1654,10 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
Comment comment = getCurrentComment(this);
|
||||
if (comment != null) {
|
||||
int position = getBindingAdapterPosition();
|
||||
SaveComment saveComment = new SaveComment();
|
||||
if (comment.isSaved()) {
|
||||
comment.setSaved(false);
|
||||
SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, comment.getFullName(), new SaveThing.SaveThingListener() {
|
||||
saveComment.unsaveThing(mRetrofit.getRetrofit(), mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
comment.setSaved(false);
|
||||
@@ -1558,7 +1678,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
});
|
||||
} else {
|
||||
comment.setSaved(true);
|
||||
SaveThing.saveThing(mOauthRetrofit, mAccessToken, comment.getFullName(), new SaveThing.SaveThingListener() {
|
||||
saveComment.saveThing(mRetrofit.getRetrofit(), mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
comment.setSaved(true);
|
||||
@@ -1587,7 +1707,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
return;
|
||||
}
|
||||
Intent intent = new Intent(mActivity, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, comment.getAuthor());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, comment.getAuthorName());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, comment.getAuthorQualifiedName());
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
@@ -1913,6 +2033,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
if (mActivity != null && mActivity instanceof ViewPostDetailActivity) {
|
||||
mIsSingleCommentThreadMode = false;
|
||||
mSingleCommentId = null;
|
||||
loadedComments.clear();
|
||||
notifyItemRemoved(0);
|
||||
mFragment.changeToNormalThreadMode();
|
||||
}
|
||||
@@ -1925,4 +2046,8 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
|
||||
((TextView) itemView).setTextColor(mColorAccent);
|
||||
}
|
||||
}
|
||||
|
||||
public void clearLoadedComments() {
|
||||
loadedComments.clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,6 +67,7 @@ import eu.toldi.infinityforlemmy.FetchGfycatOrRedgifsVideoLinks;
|
||||
import eu.toldi.infinityforlemmy.FetchStreamableVideo;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.SaveMemoryCenterInisdeDownsampleStrategy;
|
||||
import eu.toldi.infinityforlemmy.SavePost;
|
||||
import eu.toldi.infinityforlemmy.SaveThing;
|
||||
import eu.toldi.infinityforlemmy.StreamableVideo;
|
||||
import eu.toldi.infinityforlemmy.VoteThing;
|
||||
@@ -138,9 +139,8 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
private BaseActivity mActivity;
|
||||
private HistoryPostFragment mFragment;
|
||||
private SharedPreferences mSharedPreferences;
|
||||
private SharedPreferences mCurrentAccountSharedPreferences;
|
||||
private Executor mExecutor;
|
||||
private Retrofit mOauthRetrofit;
|
||||
private Retrofit retrofit;
|
||||
private Retrofit mGfycatRetrofit;
|
||||
private Retrofit mRedgifsRetrofit;
|
||||
private Provider<StreamableAPI> mStreamableApiProvider;
|
||||
@@ -226,7 +226,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
Retrofit gfycatRetrofit, Retrofit redgifsRetrofit, Provider<StreamableAPI> streambleApiProvider,
|
||||
CustomThemeWrapper customThemeWrapper, Locale locale,
|
||||
String accessToken, String accountName, int postType, int postLayout, boolean displaySubredditName,
|
||||
SharedPreferences sharedPreferences, SharedPreferences currentAccountSharedPreferences,
|
||||
SharedPreferences sharedPreferences,
|
||||
SharedPreferences nsfwAndSpoilerSharedPreferences,
|
||||
ExoCreator exoCreator, Callback callback) {
|
||||
super(DIFF_CALLBACK);
|
||||
@@ -234,9 +234,8 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
mActivity = activity;
|
||||
mFragment = fragment;
|
||||
mSharedPreferences = sharedPreferences;
|
||||
mCurrentAccountSharedPreferences = currentAccountSharedPreferences;
|
||||
mExecutor = executor;
|
||||
mOauthRetrofit = oauthRetrofit;
|
||||
retrofit = oauthRetrofit;
|
||||
mGfycatRetrofit = gfycatRetrofit;
|
||||
mRedgifsRetrofit = redgifsRetrofit;
|
||||
mStreamableApiProvider = streambleApiProvider;
|
||||
@@ -553,9 +552,6 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
.into(((PostBaseViewHolder) holder).iconGifImageView);
|
||||
}
|
||||
|
||||
if (holder.getBindingAdapterPosition() >= 0) {
|
||||
post.setSubredditIconUrl(iconUrl);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if (!post.getSubredditIconUrl().equals("")) {
|
||||
@@ -640,9 +636,12 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
break;
|
||||
}
|
||||
|
||||
if (mPostType == PostPagingSource.TYPE_SUBREDDIT && !mDisplaySubredditName && post.isStickied()) {
|
||||
if (mPostType == PostPagingSource.TYPE_SUBREDDIT && !mDisplaySubredditName && post.isFeaturedInCommunity() || post.isFeaturedOnInstance()) {
|
||||
((PostBaseViewHolder) holder).stickiedPostImageView.setVisibility(View.VISIBLE);
|
||||
mGlide.load(R.drawable.ic_thumbtack_24dp).into(((PostBaseViewHolder) holder).stickiedPostImageView);
|
||||
if (post.isFeaturedOnInstance()) {
|
||||
((PostBaseViewHolder) holder).stickiedPostImageView.setColorFilter(mModeratorColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
}
|
||||
|
||||
if (post.isArchived()) {
|
||||
@@ -697,7 +696,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
if ((post.isGfycat() || post.isRedgifs()) && !post.isLoadGfycatOrStreamableVideoSuccess()) {
|
||||
((PostVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
||||
post.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(post.getGfycatId()) :
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), post.getGfycatId(), APIUtils.USER_AGENT);
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getGfycatId());
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
|
||||
((PostVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall,
|
||||
post.isGfycat(), mAutomaticallyTryRedgifs,
|
||||
@@ -874,7 +873,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
if ((post.isGfycat() || post.isRedgifs()) && !post.isLoadGfycatOrStreamableVideoSuccess()) {
|
||||
((PostCard2VideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
||||
post.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(post.getGfycatId()) :
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), post.getGfycatId(), APIUtils.USER_AGENT);
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(post.getGfycatId());
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
|
||||
((PostCard2VideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall,
|
||||
post.isGfycat(), mAutomaticallyTryRedgifs,
|
||||
@@ -1078,9 +1077,6 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
.into(((PostCompactBaseViewHolder) holder).iconGifImageView);
|
||||
}
|
||||
|
||||
if (holder.getBindingAdapterPosition() >= 0) {
|
||||
post.setSubredditIconUrl(iconUrl);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if (!post.getSubredditIconUrl().equals("")) {
|
||||
@@ -1209,7 +1205,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
}
|
||||
}
|
||||
|
||||
if (mPostType == PostPagingSource.TYPE_SUBREDDIT && !mDisplaySubredditName && post.isStickied()) {
|
||||
if (mPostType == PostPagingSource.TYPE_SUBREDDIT && !mDisplaySubredditName && post.isFeaturedInCommunity()) {
|
||||
((PostCompactBaseViewHolder) holder).stickiedPostImageView.setVisibility(View.VISIBLE);
|
||||
mGlide.load(R.drawable.ic_thumbtack_24dp).into(((PostCompactBaseViewHolder) holder).stickiedPostImageView);
|
||||
}
|
||||
@@ -2326,7 +2322,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||
}
|
||||
|
||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -2418,7 +2414,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||
}
|
||||
|
||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -2476,10 +2472,10 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
SavePost savePost = new SavePost();
|
||||
if (post.isSaved()) {
|
||||
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||
SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, post.getFullName(),
|
||||
savePost.unsaveThing(retrofit, mAccessToken, post.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -2503,7 +2499,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
});
|
||||
} else {
|
||||
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||
SaveThing.saveThing(mOauthRetrofit, mAccessToken, post.getFullName(),
|
||||
savePost.saveThing(retrofit, mAccessToken, post.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -3652,7 +3648,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||
}
|
||||
|
||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -3744,7 +3740,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
|
||||
}
|
||||
|
||||
VoteThing.votePost(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess(int position1) {
|
||||
int currentPosition = getBindingAdapterPosition();
|
||||
@@ -3804,9 +3800,10 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
}
|
||||
Post post = getItem(position);
|
||||
if (post != null) {
|
||||
SavePost savePost = new SavePost();
|
||||
if (post.isSaved()) {
|
||||
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||
SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, post.getFullName(),
|
||||
savePost.unsaveThing(retrofit, mAccessToken, post.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -3830,7 +3827,7 @@ public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, Recy
|
||||
});
|
||||
} else {
|
||||
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||
SaveThing.saveThing(mOauthRetrofit, mAccessToken, post.getFullName(),
|
||||
savePost.saveThing(retrofit, mAccessToken, post.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
|
||||
@@ -31,7 +31,7 @@ public class MarkdownBottomBarRecyclerViewAdapter extends RecyclerView.Adapter<R
|
||||
public static final int CODE_BLOCK = 9;
|
||||
public static final int UPLOAD_IMAGE = 10;
|
||||
|
||||
private static final int ITEM_COUNT = 10;
|
||||
private static final int ITEM_COUNT = 11;
|
||||
|
||||
private CustomThemeWrapper customThemeWrapper;
|
||||
private ItemClickListener itemClickListener;
|
||||
|
||||
@@ -19,24 +19,13 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
|
||||
import io.noties.markwon.inlineparser.BangInlineProcessor;
|
||||
import io.noties.markwon.inlineparser.HtmlInlineProcessor;
|
||||
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin;
|
||||
import io.noties.markwon.linkify.LinkifyPlugin;
|
||||
import io.noties.markwon.movement.MovementMethodPlugin;
|
||||
import eu.toldi.infinityforlemmy.NetworkState;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.ViewPostDetailActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.ViewPrivateMessagesActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
@@ -45,28 +34,38 @@ import eu.toldi.infinityforlemmy.markdown.RedditHeadingPlugin;
|
||||
import eu.toldi.infinityforlemmy.markdown.SpoilerAwareMovementMethod;
|
||||
import eu.toldi.infinityforlemmy.markdown.SpoilerParserPlugin;
|
||||
import eu.toldi.infinityforlemmy.markdown.SuperscriptPlugin;
|
||||
import eu.toldi.infinityforlemmy.message.CommentInteraction;
|
||||
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
||||
import eu.toldi.infinityforlemmy.message.Message;
|
||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
|
||||
import io.noties.markwon.image.glide.GlideImagesPlugin;
|
||||
import io.noties.markwon.inlineparser.HtmlInlineProcessor;
|
||||
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin;
|
||||
import io.noties.markwon.linkify.LinkifyPlugin;
|
||||
import io.noties.markwon.movement.MovementMethodPlugin;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, RecyclerView.ViewHolder> {
|
||||
public class MessageRecyclerViewAdapter extends PagedListAdapter<CommentInteraction, RecyclerView.ViewHolder> {
|
||||
private static final int VIEW_TYPE_DATA = 0;
|
||||
private static final int VIEW_TYPE_ERROR = 1;
|
||||
private static final int VIEW_TYPE_LOADING = 2;
|
||||
private static final DiffUtil.ItemCallback<Message> DIFF_CALLBACK = new DiffUtil.ItemCallback<>() {
|
||||
private static final DiffUtil.ItemCallback<CommentInteraction> DIFF_CALLBACK = new DiffUtil.ItemCallback<>() {
|
||||
@Override
|
||||
public boolean areItemsTheSame(@NonNull Message message, @NonNull Message t1) {
|
||||
return message.getId().equals(t1.getId());
|
||||
public boolean areItemsTheSame(@NonNull CommentInteraction message, @NonNull CommentInteraction t1) {
|
||||
return message.getComment().getId() == t1.getComment().getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areContentsTheSame(@NonNull Message message, @NonNull Message t1) {
|
||||
return message.getBody().equals(t1.getBody());
|
||||
public boolean areContentsTheSame(@NonNull CommentInteraction message, @NonNull CommentInteraction t1) {
|
||||
return message.getComment().getCommentMarkdown().equals(t1.getComment().getCommentMarkdown());
|
||||
}
|
||||
};
|
||||
private BaseActivity mActivity;
|
||||
private Retrofit mOauthRetrofit;
|
||||
private Retrofit retrofit;
|
||||
private Markwon mMarkwon;
|
||||
private String mAccessToken;
|
||||
private int mMessageType;
|
||||
@@ -88,7 +87,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
||||
RetryLoadingMoreCallback retryLoadingMoreCallback) {
|
||||
super(DIFF_CALLBACK);
|
||||
mActivity = activity;
|
||||
mOauthRetrofit = oauthRetrofit;
|
||||
retrofit = oauthRetrofit;
|
||||
mRetryLoadingMoreCallback = retryLoadingMoreCallback;
|
||||
|
||||
mColorAccent = customThemeWrapper.getColorAccent();
|
||||
@@ -106,7 +105,6 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
||||
mMarkwon = Markwon.builder(mActivity)
|
||||
.usePlugin(MarkwonInlineParserPlugin.create(plugin -> {
|
||||
plugin.excludeInlineProcessor(HtmlInlineProcessor.class);
|
||||
plugin.excludeInlineProcessor(BangInlineProcessor.class);
|
||||
}))
|
||||
.usePlugin(new AbstractMarkwonPlugin() {
|
||||
@Override
|
||||
@@ -130,6 +128,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
||||
.usePlugin(StrikethroughPlugin.create())
|
||||
.usePlugin(MovementMethodPlugin.create(new SpoilerAwareMovementMethod()))
|
||||
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
||||
.usePlugin(GlideImagesPlugin.create(mActivity))
|
||||
.build();
|
||||
mAccessToken = accessToken;
|
||||
if (where.equals(FetchMessage.WHERE_MESSAGES)) {
|
||||
@@ -154,41 +153,38 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
if (holder instanceof DataViewHolder) {
|
||||
Message message = getItem(holder.getBindingAdapterPosition());
|
||||
CommentInteraction message = getItem(holder.getBindingAdapterPosition());
|
||||
if (message != null) {
|
||||
ArrayList<Message> replies = message.getReplies();
|
||||
Message displayedMessage;
|
||||
if (replies != null && !replies.isEmpty() && replies.get(replies.size() - 1) != null) {
|
||||
displayedMessage = replies.get(replies.size() - 1);
|
||||
} else {
|
||||
displayedMessage = message;
|
||||
}
|
||||
if (message.isNew()) {
|
||||
|
||||
if (message.isRead()) {
|
||||
if (markAllMessagesAsRead) {
|
||||
message.setNew(false);
|
||||
message.markAsRead();
|
||||
} else {
|
||||
holder.itemView.setBackgroundColor(
|
||||
mUnreadMessageBackgroundColor);
|
||||
}
|
||||
}
|
||||
|
||||
if (message.wasComment()) {
|
||||
((DataViewHolder) holder).titleTextView.setText(message.getTitle());
|
||||
} else {
|
||||
((DataViewHolder) holder).titleTextView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
((DataViewHolder) holder).authorTextView.setText(displayedMessage.getAuthor());
|
||||
String subject = displayedMessage.getSubject().substring(0, 1).toUpperCase() + displayedMessage.getSubject().substring(1);
|
||||
((DataViewHolder) holder).titleTextView.setVisibility(View.GONE);
|
||||
|
||||
|
||||
((DataViewHolder) holder).authorTextView.setText(message.getComment().getAuthorQualifiedName());
|
||||
String subject = message.getComment().getCommunityQualifiedName();
|
||||
((DataViewHolder) holder).subjectTextView.setText(subject);
|
||||
mMarkwon.setMarkdown(((DataViewHolder) holder).contentCustomMarkwonView, displayedMessage.getBody());
|
||||
mMarkwon.setMarkdown(((DataViewHolder) holder).contentCustomMarkwonView, message.getComment().getCommentMarkdown());
|
||||
|
||||
holder.itemView.setOnClickListener(view -> {
|
||||
if (mMessageType == FetchMessage.MESSAGE_TYPE_INBOX
|
||||
&& message.getContext() != null && !message.getContext().equals("")) {
|
||||
Uri uri = Uri.parse(message.getContext());
|
||||
Intent intent = new Intent(mActivity, LinkResolverActivity.class);
|
||||
intent.setData(uri);
|
||||
&& message.getComment() != null) {
|
||||
|
||||
Intent intent = new Intent(mActivity, ViewPostDetailActivity.class);
|
||||
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, message.getComment().getPostId());
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, message.getComment().getId());
|
||||
if(message.getComment().getDepth() > 0) {
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_PARENT_ID, message.getComment().getParentId());
|
||||
}
|
||||
mActivity.startActivity(intent);
|
||||
} else if (mMessageType == FetchMessage.MESSAGE_TYPE_PRIVATE_MESSAGE) {
|
||||
Intent intent = new Intent(mActivity, ViewPrivateMessagesActivity.class);
|
||||
@@ -197,20 +193,21 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
||||
mActivity.startActivity(intent);
|
||||
}
|
||||
|
||||
if (displayedMessage.isNew()) {
|
||||
if (message.isRead()) {
|
||||
holder.itemView.setBackgroundColor(mMessageBackgroundColor);
|
||||
message.setNew(false);
|
||||
|
||||
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, message.getFullname(),
|
||||
|
||||
ReadMessage.readMessage(retrofit, mAccessToken, message.getId(),
|
||||
new ReadMessage.ReadMessageListener() {
|
||||
@Override
|
||||
public void readSuccess() {
|
||||
message.markAsRead();
|
||||
EventBus.getDefault().post(new ChangeInboxCountEvent(-1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFailed() {
|
||||
message.setNew(true);
|
||||
message.markAsUnRead();
|
||||
holder.itemView.setBackgroundColor(mUnreadMessageBackgroundColor);
|
||||
}
|
||||
});
|
||||
@@ -218,11 +215,10 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
||||
});
|
||||
|
||||
((DataViewHolder) holder).authorTextView.setOnClickListener(view -> {
|
||||
if (message.isAuthorDeleted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Intent intent = new Intent(mActivity, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getAuthor());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getComment().getAuthorName());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, message.getComment().getAuthorQualifiedName());
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
}
|
||||
@@ -280,9 +276,9 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
|
||||
}
|
||||
}
|
||||
|
||||
public void updateMessageReply(Message newReply, int position) {
|
||||
public void updateMessageReply(CommentInteraction newReply, int position) {
|
||||
if (position >= 0 && position < super.getItemCount()) {
|
||||
Message message = getItem(position);
|
||||
CommentInteraction message = getItem(position);
|
||||
if (message != null) {
|
||||
notifyItemChanged(position);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package eu.toldi.infinityforlemmy.adapters;
|
||||
|
||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.user.BasicUserRecyclerViewAdapter;
|
||||
|
||||
public class ModeratorRecyclerViewAdapter extends BasicUserRecyclerViewAdapter {
|
||||
|
||||
private final int mModeratorColor;
|
||||
|
||||
public ModeratorRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper) {
|
||||
super(activity, customThemeWrapper);
|
||||
mModeratorColor = customThemeWrapper.getModerator();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getUserNameTextColor() {
|
||||
return mModeratorColor;
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.text.Spanned;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
@@ -42,7 +43,9 @@ import com.bumptech.glide.load.DataSource;
|
||||
import com.bumptech.glide.load.engine.GlideException;
|
||||
import com.bumptech.glide.request.RequestListener;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.bumptech.glide.request.target.CustomTarget;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.google.android.exoplayer2.Tracks;
|
||||
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
|
||||
import com.google.android.exoplayer2.ui.DefaultTimeBar;
|
||||
@@ -54,6 +57,7 @@ import com.libRG.CustomTextView;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.inject.Provider;
|
||||
|
||||
@@ -63,7 +67,9 @@ import eu.toldi.infinityforlemmy.FetchGfycatOrRedgifsVideoLinks;
|
||||
import eu.toldi.infinityforlemmy.FetchStreamableVideo;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||
import eu.toldi.infinityforlemmy.SaveMemoryCenterInisdeDownsampleStrategy;
|
||||
import eu.toldi.infinityforlemmy.SavePost;
|
||||
import eu.toldi.infinityforlemmy.SaveThing;
|
||||
import eu.toldi.infinityforlemmy.StreamableVideo;
|
||||
import eu.toldi.infinityforlemmy.VoteThing;
|
||||
@@ -130,8 +136,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
private BaseActivity mActivity;
|
||||
private ViewPostDetailFragment mFragment;
|
||||
private Executor mExecutor;
|
||||
private Retrofit mRetrofit;
|
||||
private Retrofit mOauthRetrofit;
|
||||
private RetrofitHolder mRetrofit;
|
||||
private Retrofit mGfycatRetrofit;
|
||||
private Retrofit mRedgifsRetrofit;
|
||||
private final Provider<StreamableAPI> mStreamableApiProvider;
|
||||
@@ -167,9 +172,15 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
private boolean mHideUpvoteRatio;
|
||||
private boolean mHideTheNumberOfAwards;
|
||||
private boolean mHideSubredditAndUserPrefix;
|
||||
private boolean mShareOnLocalInstance;
|
||||
|
||||
private boolean mShowDisplayNames;
|
||||
private boolean mHideTheNumberOfVotes;
|
||||
|
||||
private boolean mSeperateUpvoteAndDownvote;
|
||||
private boolean mHideTheNumberOfComments;
|
||||
private boolean mSeparatePostAndComments;
|
||||
private boolean mHideDownvotes;
|
||||
private boolean mLegacyAutoplayVideoControllerUI;
|
||||
private boolean mEasierToWatchInFullScreen;
|
||||
private PostDetailRecyclerViewAdapterCallback mPostDetailRecyclerViewAdapterCallback;
|
||||
@@ -213,7 +224,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
|
||||
public PostDetailRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
|
||||
Executor executor, CustomThemeWrapper customThemeWrapper,
|
||||
Retrofit retrofit, Retrofit oauthRetrofit, Retrofit gfycatRetrofit,
|
||||
RetrofitHolder retrofit, Retrofit gfycatRetrofit,
|
||||
Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
|
||||
RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide,
|
||||
boolean separatePostAndComments, String accessToken,
|
||||
@@ -228,7 +239,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
mFragment = fragment;
|
||||
mExecutor = executor;
|
||||
mRetrofit = retrofit;
|
||||
mOauthRetrofit = oauthRetrofit;
|
||||
mGfycatRetrofit = gfycatRetrofit;
|
||||
mRedgifsRetrofit = redgifsRetrofit;
|
||||
mStreamableApiProvider = streamableApiProvider;
|
||||
@@ -338,7 +348,11 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
mHideUpvoteRatio = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_UPVOTE_RATIO, false);
|
||||
mHideTheNumberOfAwards = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_AWARDS, false);
|
||||
mHideSubredditAndUserPrefix = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_SUBREDDIT_AND_USER_PREFIX, false);
|
||||
mShareOnLocalInstance = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.SHARE_LINK_ON_LOCAL_INSTANCE, false);
|
||||
mShowDisplayNames = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.POST_DETAIL_DISPLAY_NAME_INSTEAD_OF_USERNAME, true);
|
||||
mHideTheNumberOfVotes = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_VOTES, false);
|
||||
mHideDownvotes = !currentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true);
|
||||
mSeperateUpvoteAndDownvote = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.POST_DETAIL_SEPARATE_UP_AND_DOWN_VOTES, true) && !mHideDownvotes;
|
||||
mHideTheNumberOfComments = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_COMMENTS, false);
|
||||
|
||||
mPostDetailRecyclerViewAdapterCallback = postDetailRecyclerViewAdapterCallback;
|
||||
@@ -436,7 +450,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
}
|
||||
return new PostDetailVideoAutoplayViewHolder(LayoutInflater.from(parent.getContext()).inflate(mLegacyAutoplayVideoControllerUI ? R.layout.item_post_detail_video_autoplay_legacy_controller : R.layout.item_post_detail_video_autoplay, parent, false));
|
||||
case VIEW_TYPE_POST_DETAIL_VIDEO_AND_GIF_PREVIEW:
|
||||
if (mDataSavingMode && (mDisableImagePreview || mOnlyDisablePreviewInVideoAndGifPosts)) {
|
||||
if (mDataSavingMode && (mDisableImagePreview || mOnlyDisablePreviewInVideoAndGifPosts) || mPost.getPreviews().isEmpty()) {
|
||||
return new PostDetailNoPreviewViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_no_preview, parent, false));
|
||||
}
|
||||
return new PostDetailVideoAndGifPreviewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_detail_video_and_gif_preview, parent, false));
|
||||
@@ -473,8 +487,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
((PostDetailBaseViewHolder) holder).mTitleTextView.setText(mPost.getTitle());
|
||||
if (mPost.getSubredditNamePrefixed().startsWith("u/")) {
|
||||
if (mPost.getAuthorIconUrl() == null) {
|
||||
String authorName = mPost.isAuthorDeleted() ? mPost.getSubredditNamePrefixed().substring(2) : mPost.getAuthor();
|
||||
LoadUserData.loadUserData(mExecutor, new Handler(), mRedditDataRoomDatabase, authorName, mOauthRetrofit, iconImageUrl -> {
|
||||
LoadUserData.loadUserData(mExecutor, new Handler(), mRedditDataRoomDatabase, mPost.getAuthorNamePrefixed(), mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
if (mActivity != null && getItemCount() > 0) {
|
||||
if (iconImageUrl == null || iconImageUrl.equals("")) {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
@@ -507,8 +520,8 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
} else {
|
||||
if (mPost.getSubredditIconUrl() == null) {
|
||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(),
|
||||
mRedditDataRoomDatabase, mPost.getSubredditNamePrefixed().substring(2),
|
||||
mAccessToken, mOauthRetrofit, mRetrofit, iconImageUrl -> {
|
||||
mRedditDataRoomDatabase, mPost.getSubredditNamePrefixed(),
|
||||
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||
if (iconImageUrl == null || iconImageUrl.equals("")) {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
@@ -520,8 +533,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
|
||||
.into(((PostDetailBaseViewHolder) holder).mIconGifImageView);
|
||||
}
|
||||
|
||||
mPost.setSubredditIconUrl(iconImageUrl);
|
||||
});
|
||||
} else if (!mPost.getSubredditIconUrl().equals("")) {
|
||||
mGlide.load(mPost.getSubredditIconUrl())
|
||||
@@ -542,16 +553,23 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
//Upvote
|
||||
((PostDetailBaseViewHolder) holder).mUpvoteButton.setColorFilter(mUpvotedColor, PorterDuff.Mode.SRC_IN);
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.setTextColor(mUpvotedColor);
|
||||
((PostDetailBaseViewHolder) holder).mDownvoteTextView.setTextColor(mPostIconAndInfoColor);
|
||||
break;
|
||||
case -1:
|
||||
//Downvote
|
||||
((PostDetailBaseViewHolder) holder).mDownvoteButton.setColorFilter(mDownvotedColor, PorterDuff.Mode.SRC_IN);
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.setTextColor(mDownvotedColor);
|
||||
if(mSeperateUpvoteAndDownvote){
|
||||
((PostDetailBaseViewHolder) holder).mDownvoteTextView.setTextColor(mDownvotedColor);
|
||||
} else {
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.setTextColor(mDownvotedColor);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
case 0:
|
||||
((PostDetailBaseViewHolder) holder).mUpvoteButton.setColorFilter(mPostIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
((PostDetailBaseViewHolder) holder).mDownvoteButton.setColorFilter(mPostIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.setTextColor(mPostIconAndInfoColor);
|
||||
((PostDetailBaseViewHolder) holder).mDownvoteTextView.setTextColor(mPostIconAndInfoColor);
|
||||
}
|
||||
|
||||
if (mPost.isArchived()) {
|
||||
@@ -565,15 +583,20 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
((PostDetailBaseViewHolder) holder).mCrosspostImageView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
if (!mHideSubredditAndUserPrefix) {
|
||||
((PostDetailBaseViewHolder) holder).mSubredditTextView.setText(mPost.getSubredditNamePrefixed());
|
||||
((PostDetailBaseViewHolder) holder).mUserTextView.setText(mPost.getAuthorNamePrefixed());
|
||||
((PostDetailBaseViewHolder) holder).mUserTextView.setText((mShowDisplayNames) ? mPost.getAuthor() : mPost.getAuthorInfo().getUsername());
|
||||
((PostDetailBaseViewHolder) holder).mSubredditTextView.setText((mShowDisplayNames) ? mPost.getSubredditName() : mPost.getCommunityInfo().getName());
|
||||
if (mHideSubredditAndUserPrefix) {
|
||||
((PostDetailBaseViewHolder) holder).mUserTextView.setText((mShowDisplayNames) ? mPost.getAuthor() : mPost.getAuthorInfo().getUsername());
|
||||
} else {
|
||||
((PostDetailBaseViewHolder) holder).mSubredditTextView.setText(mPost.getSubredditName());
|
||||
((PostDetailBaseViewHolder) holder).mUserTextView.setText(mPost.getAuthor());
|
||||
((PostDetailBaseViewHolder) holder).mSubredditTextView.setText((mShowDisplayNames) ? mPost.getSubredditName() : mPost.getCommunityInfo().getName());
|
||||
((PostDetailBaseViewHolder) holder).mCommunityInstanceTextView.setText('@' + mPost.getSubredditNamePrefixed().split(Pattern.quote("@"))[1]);
|
||||
|
||||
((PostDetailBaseViewHolder) holder).mUserInstanceTextView.setText('@' + mPost.getAuthorNamePrefixed().split(Pattern.quote("@"))[1]);
|
||||
((PostDetailBaseViewHolder) holder).mCommunityInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(mSubredditColor, 0.7f));
|
||||
((PostDetailBaseViewHolder) holder).mUserInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(mPost.isModerator() || mPost.isAdmin() ? mModeratorColor : mUsernameColor, 0.7f));
|
||||
}
|
||||
|
||||
if (mPost.isModerator()) {
|
||||
if (mPost.isModerator() || mPost.isAdmin()) {
|
||||
((PostDetailBaseViewHolder) holder).mUserTextView.setTextColor(mModeratorColor);
|
||||
Drawable moderatorDrawable = Utils.getTintedDrawable(mActivity, R.drawable.ic_verified_user_14dp, mModeratorColor);
|
||||
((PostDetailBaseViewHolder) holder).mUserTextView.setCompoundDrawablesWithIntrinsicBounds(
|
||||
@@ -609,7 +632,24 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
}
|
||||
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, mPost.getScore() + mPost.getVoteType()));
|
||||
if(mSeperateUpvoteAndDownvote){
|
||||
int upvotes = (mPost.getVoteType() == 1) ? mPost.getUpvotes()+1 : mPost.getUpvotes();
|
||||
int downvotes = (mPost.getVoteType() == -1) ? mPost.getDownvotes() +1 : Math.max(mPost.getDownvotes(),0);
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
|
||||
((PostDetailBaseViewHolder) holder).mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
|
||||
|
||||
((PostDetailBaseViewHolder) holder).mDownvoteTextView.setVisibility(View.VISIBLE);
|
||||
|
||||
((PostDetailBaseViewHolder) holder).mDownvoteTextView.setGravity(Gravity.START);
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.setGravity(Gravity.START);
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.getLayoutParams().width = (int) (32 * mActivity.getResources().getDisplayMetrics().density);
|
||||
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.setPadding(0, 0, 6, 0);
|
||||
((PostDetailBaseViewHolder) holder).mDownvoteTextView.setPadding(0, 0, 12, 0);
|
||||
((PostDetailBaseViewHolder) holder).mUpvoteButton.setPadding(24, 0, 12, 0);
|
||||
} else {
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, mPost.getScore() + mPost.getVoteType()));
|
||||
}
|
||||
} else {
|
||||
((PostDetailBaseViewHolder) holder).mScoreTextView.setText(mActivity.getString(R.string.vote));
|
||||
}
|
||||
@@ -634,8 +674,20 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
((PostDetailVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE);
|
||||
Post.Preview preview = getSuitablePreview(mPost.getPreviews());
|
||||
if (preview != null) {
|
||||
((PostDetailVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) preview.getPreviewWidth() / preview.getPreviewHeight());
|
||||
mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostDetailVideoAutoplayViewHolder) holder).previewImageView);
|
||||
mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||
int width = resource.getIntrinsicWidth();
|
||||
int height = resource.getIntrinsicHeight();
|
||||
((PostDetailVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) width / height);
|
||||
((PostDetailVideoAutoplayViewHolder) holder).previewImageView.setImageDrawable(resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
|
||||
}
|
||||
});
|
||||
} else {
|
||||
((PostDetailVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1);
|
||||
}
|
||||
@@ -646,7 +698,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
if (mPost.isGfycat() || mPost.isRedgifs() && !mPost.isLoadGfycatOrStreamableVideoSuccess()) {
|
||||
((PostDetailVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall =
|
||||
mPost.isGfycat() ? mGfycatRetrofit.create(GfycatAPI.class).getGfycatData(mPost.getGfycatId()) :
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), mPost.getGfycatId(), APIUtils.USER_AGENT);
|
||||
mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(mPost.getGfycatId());
|
||||
FetchGfycatOrRedgifsVideoLinks.fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(),
|
||||
((PostDetailVideoAutoplayViewHolder) holder).fetchGfycatOrStreamableVideoCall,
|
||||
mPost.isGfycat(), mAutomaticallyTryRedgifs,
|
||||
@@ -843,9 +895,45 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
});
|
||||
|
||||
if (blurImage) {
|
||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))).into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
|
||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))).into(new CustomTarget<Drawable>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||
int width = resource.getIntrinsicWidth();
|
||||
int height = resource.getIntrinsicHeight();
|
||||
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setRatio((float) height / width);
|
||||
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||
preview.setPreviewHeight(height);
|
||||
preview.setPreviewWidth(width);
|
||||
}
|
||||
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setImageDrawable(resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setImageDrawable(null);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView);
|
||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||
int width = resource.getIntrinsicWidth();
|
||||
int height = resource.getIntrinsicHeight();
|
||||
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setRatio((float) height / width);
|
||||
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||
preview.setPreviewHeight(height);
|
||||
preview.setPreviewWidth(width);
|
||||
}
|
||||
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setImageDrawable(resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView.setImageDrawable(null);
|
||||
}
|
||||
});
|
||||
}
|
||||
} else if (holder instanceof PostDetailVideoAndGifPreviewHolder) {
|
||||
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(preview.getPreviewUrl())
|
||||
@@ -871,9 +959,45 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
|
||||
if ((mPost.isNSFW() && mNeedBlurNsfw && !(mDoNotBlurNsfwInNsfwSubreddits && mFragment != null && mFragment.getIsNsfwSubreddit()))) {
|
||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
||||
.into(((PostDetailVideoAndGifPreviewHolder) holder).mImageView);
|
||||
.into(new CustomTarget<Drawable>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||
int width = resource.getIntrinsicWidth();
|
||||
int height = resource.getIntrinsicHeight();
|
||||
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setRatio((float) height / width);
|
||||
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||
preview.setPreviewHeight(height);
|
||||
preview.setPreviewWidth(width);
|
||||
}
|
||||
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setImageDrawable(resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setImageDrawable(null);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostDetailVideoAndGifPreviewHolder) holder).mImageView);
|
||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||
int width = resource.getIntrinsicWidth();
|
||||
int height = resource.getIntrinsicHeight();
|
||||
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setRatio((float) height / width);
|
||||
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||
preview.setPreviewHeight(height);
|
||||
preview.setPreviewWidth(width);
|
||||
}
|
||||
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setImageDrawable(resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
((PostDetailVideoAndGifPreviewHolder) holder).mImageView.setImageDrawable(null);
|
||||
}
|
||||
});
|
||||
}
|
||||
} else if (holder instanceof PostDetailLinkViewHolder) {
|
||||
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(preview.getPreviewUrl())
|
||||
@@ -899,9 +1023,51 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
|
||||
if ((mPost.isNSFW() && mNeedBlurNsfw && !(mDoNotBlurNsfwInNsfwSubreddits && mFragment != null && mFragment.getIsNsfwSubreddit()))) {
|
||||
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10)))
|
||||
.into(((PostDetailLinkViewHolder) holder).mImageView);
|
||||
.into(new CustomTarget<Drawable>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||
int width = resource.getIntrinsicWidth();
|
||||
int height = resource.getIntrinsicHeight();
|
||||
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||
((PostDetailLinkViewHolder) holder).mImageView.setRatio((float) height / width);
|
||||
((PostDetailLinkViewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||
preview.setPreviewHeight(height);
|
||||
preview.setPreviewWidth(width);
|
||||
} else {
|
||||
((PostDetailLinkViewHolder) holder).mImageView.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
||||
((PostDetailLinkViewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||
}
|
||||
((PostDetailLinkViewHolder) holder).mImageView.setImageDrawable(resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
((PostDetailLinkViewHolder) holder).mImageView.setImageDrawable(null);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostDetailLinkViewHolder) holder).mImageView);
|
||||
imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(new CustomTarget<Drawable>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||
int width = resource.getIntrinsicWidth();
|
||||
int height = resource.getIntrinsicHeight();
|
||||
((PostDetailLinkViewHolder) holder).mImageView.setImageDrawable(resource);
|
||||
if (preview.getPreviewHeight() == 0 || preview.getPreviewWidth() == 0) {
|
||||
((PostDetailLinkViewHolder) holder).mImageView.setRatio((float) height / width);
|
||||
((PostDetailLinkViewHolder) holder).mImageView.getLayoutParams().height = height;
|
||||
preview.setPreviewHeight(height);
|
||||
preview.setPreviewWidth(width);
|
||||
} else {
|
||||
((PostDetailLinkViewHolder) holder).mImageView.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
((PostDetailLinkViewHolder) holder).mImageView.setImageDrawable(null);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1018,7 +1184,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
public class PostDetailBaseViewHolder extends RecyclerView.ViewHolder {
|
||||
AspectRatioGifImageView mIconGifImageView;
|
||||
TextView mSubredditTextView;
|
||||
TextView mCommunityInstanceTextView;
|
||||
TextView mUserTextView;
|
||||
TextView mUserInstanceTextView;
|
||||
TextView mAuthorFlairTextView;
|
||||
TextView mPostTimeTextView;
|
||||
TextView mTitleTextView;
|
||||
@@ -1035,6 +1203,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ConstraintLayout mBottomConstraintLayout;
|
||||
ImageView mUpvoteButton;
|
||||
TextView mScoreTextView;
|
||||
TextView mDownvoteTextView;
|
||||
ImageView mDownvoteButton;
|
||||
TextView commentsCountTextView;
|
||||
ImageView mSaveButton;
|
||||
@@ -1046,7 +1215,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
|
||||
void setBaseView(AspectRatioGifImageView mIconGifImageView,
|
||||
TextView mSubredditTextView,
|
||||
TextView mCommunityInstanceTextView,
|
||||
TextView mUserTextView,
|
||||
TextView mUserInstanceTextView,
|
||||
TextView mAuthorFlairTextView,
|
||||
TextView mPostTimeTextView,
|
||||
TextView mTitleTextView,
|
||||
@@ -1063,13 +1234,16 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ConstraintLayout mBottomConstraintLayout,
|
||||
ImageView mUpvoteButton,
|
||||
TextView mScoreTextView,
|
||||
TextView mDownvoteTextView,
|
||||
ImageView mDownvoteButton,
|
||||
TextView commentsCountTextView,
|
||||
ImageView mSaveButton,
|
||||
ImageView mShareButton) {
|
||||
this.mIconGifImageView = mIconGifImageView;
|
||||
this.mSubredditTextView = mSubredditTextView;
|
||||
this.mCommunityInstanceTextView = mCommunityInstanceTextView;
|
||||
this.mUserTextView = mUserTextView;
|
||||
this.mUserInstanceTextView = mUserInstanceTextView;
|
||||
this.mAuthorFlairTextView = mAuthorFlairTextView;
|
||||
this.mPostTimeTextView = mPostTimeTextView;
|
||||
this.mTitleTextView = mTitleTextView;
|
||||
@@ -1086,23 +1260,30 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
this.mBottomConstraintLayout = mBottomConstraintLayout;
|
||||
this.mUpvoteButton = mUpvoteButton;
|
||||
this.mScoreTextView = mScoreTextView;
|
||||
this.mDownvoteTextView = mDownvoteTextView;
|
||||
this.mDownvoteButton = mDownvoteButton;
|
||||
this.commentsCountTextView = commentsCountTextView;
|
||||
this.mSaveButton = mSaveButton;
|
||||
this.mShareButton = mShareButton;
|
||||
|
||||
if(!mCurrentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.CAN_DOWNVOTE,true)){
|
||||
mDownvoteButton.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
mIconGifImageView.setOnClickListener(view -> mSubredditTextView.performClick());
|
||||
|
||||
mSubredditTextView.setOnClickListener(view -> {
|
||||
View.OnClickListener communityClickListener = view -> {
|
||||
Intent intent;
|
||||
intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY,
|
||||
mPost.getSubredditName());
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, mPost.getSubredditNamePrefixed());
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
};
|
||||
mSubredditTextView.setOnClickListener(communityClickListener);
|
||||
mCommunityInstanceTextView.setOnClickListener(communityClickListener);
|
||||
|
||||
mUserTextView.setOnClickListener(view -> {
|
||||
View.OnClickListener onUserClick = view -> {
|
||||
if (mPost.isAuthorDeleted()) {
|
||||
return;
|
||||
}
|
||||
@@ -1110,7 +1291,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mPost.getAuthor());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, mPost.getAuthorNamePrefixed());
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
};
|
||||
mUserTextView.setOnClickListener(onUserClick);
|
||||
mUserInstanceTextView.setOnClickListener(onUserClick);
|
||||
|
||||
mAuthorFlairTextView.setOnClickListener(view -> mUserTextView.performClick());
|
||||
|
||||
@@ -1174,6 +1357,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
int newVoteType;
|
||||
|
||||
mDownvoteButton.setColorFilter(mPostIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
mDownvoteTextView.setTextColor(mPostIconAndInfoColor);
|
||||
|
||||
if (previousVoteType != 1) {
|
||||
//Not upvoted before
|
||||
@@ -1190,13 +1374,20 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
}
|
||||
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + mPost.getVoteType()));
|
||||
if(mSeperateUpvoteAndDownvote){
|
||||
int upvotes = (mPost.getVoteType() == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
|
||||
int downvotes = (mPost.getVoteType() == -1) ? mPost.getDownvotes() + 1 : Math.max(mPost.getDownvotes(),0);;
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
|
||||
mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
|
||||
} else {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + mPost.getVoteType()));
|
||||
}
|
||||
}
|
||||
|
||||
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
|
||||
|
||||
VoteThing.votePost(mActivity, mRetrofit, mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
|
||||
VoteThing.votePost(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess() {
|
||||
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
|
||||
@@ -1211,8 +1402,15 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
|
||||
mDownvoteButton.setColorFilter(mPostIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + mPost.getVoteType()));
|
||||
if(mSeperateUpvoteAndDownvote){
|
||||
int upvotes = (mPost.getVoteType() == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
|
||||
int downvotes = (mPost.getVoteType() == -1) ? mPost.getDownvotes() + 1 : Math.max(mPost.getDownvotes(),0);;
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
|
||||
mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
|
||||
} else {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + mPost.getVoteType()));
|
||||
}
|
||||
}
|
||||
|
||||
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
|
||||
@@ -1223,8 +1421,15 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
|
||||
mPost.setVoteType(previousVoteType);
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + previousVoteType));
|
||||
if(mSeperateUpvoteAndDownvote){
|
||||
int upvotes = (previousVoteType == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
|
||||
int downvotes = (previousVoteType == -1) ? mPost.getDownvotes() - 1 : Math.max(mPost.getDownvotes(),0);;
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
|
||||
mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
|
||||
} else {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + previousVoteType));
|
||||
}
|
||||
}
|
||||
mUpvoteButton.setColorFilter(previousUpvoteButtonColorFilter);
|
||||
mDownvoteButton.setColorFilter(previousDownvoteButtonColorFilter);
|
||||
@@ -1254,45 +1459,69 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
int newVoteType;
|
||||
|
||||
mUpvoteButton.setColorFilter(mPostIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
|
||||
mScoreTextView.setTextColor(mPostIconAndInfoColor);
|
||||
if (previousVoteType != -1) {
|
||||
//Not upvoted before
|
||||
mPost.setVoteType(-1);
|
||||
newVoteType = Integer.parseInt(APIUtils.DIR_DOWNVOTE);
|
||||
mDownvoteButton.setColorFilter(mDownvotedColor, PorterDuff.Mode.SRC_IN);
|
||||
mScoreTextView.setTextColor(mDownvotedColor);
|
||||
if(mSeperateUpvoteAndDownvote){
|
||||
mDownvoteTextView.setTextColor(mDownvotedColor);
|
||||
} else {
|
||||
mScoreTextView.setTextColor(mDownvotedColor);
|
||||
}
|
||||
} else {
|
||||
//Upvoted before
|
||||
mPost.setVoteType(0);
|
||||
newVoteType = Integer.parseInt(APIUtils.DIR_UNVOTE);
|
||||
mDownvoteButton.setColorFilter(mPostIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
mScoreTextView.setTextColor(mPostIconAndInfoColor);
|
||||
mDownvoteTextView.setTextColor(mPostIconAndInfoColor);
|
||||
}
|
||||
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + mPost.getVoteType()));
|
||||
if(mSeperateUpvoteAndDownvote){
|
||||
int upvotes = (mPost.getVoteType() == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
|
||||
int downvotes = (mPost.getVoteType() == -1) ? mPost.getDownvotes() + 1 : Math.max(mPost.getDownvotes(),0);;
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
|
||||
mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
|
||||
} else {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + mPost.getVoteType()));
|
||||
}
|
||||
}
|
||||
|
||||
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
|
||||
|
||||
VoteThing.votePost(mActivity, mRetrofit, mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
|
||||
VoteThing.votePost(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
|
||||
@Override
|
||||
public void onVoteThingSuccess() {
|
||||
if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
|
||||
mPost.setVoteType(-1);
|
||||
mDownvoteButton.setColorFilter(mDownvotedColor, PorterDuff.Mode.SRC_IN);
|
||||
mScoreTextView.setTextColor(mDownvotedColor);
|
||||
if (mSeperateUpvoteAndDownvote) {
|
||||
mDownvoteTextView.setTextColor(mDownvotedColor);
|
||||
} else {
|
||||
mScoreTextView.setTextColor(mDownvotedColor);
|
||||
}
|
||||
} else {
|
||||
mPost.setVoteType(0);
|
||||
mDownvoteButton.setColorFilter(mPostIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
mScoreTextView.setTextColor(mPostIconAndInfoColor);
|
||||
mDownvoteTextView.setTextColor(mPostIconAndInfoColor);
|
||||
}
|
||||
|
||||
mUpvoteButton.setColorFilter(mPostIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + mPost.getVoteType()));
|
||||
if(mSeperateUpvoteAndDownvote){
|
||||
int upvotes = (mPost.getVoteType() == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
|
||||
int downvotes = (mPost.getVoteType() == -1) ? mPost.getDownvotes() + 1 : Math.max(mPost.getDownvotes(),0);;
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
|
||||
mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
|
||||
} else {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + mPost.getVoteType()));
|
||||
}
|
||||
}
|
||||
|
||||
mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
|
||||
@@ -1303,8 +1532,15 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
|
||||
mPost.setVoteType(previousVoteType);
|
||||
if (!mHideTheNumberOfVotes) {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + previousVoteType));
|
||||
if(mSeperateUpvoteAndDownvote) {
|
||||
int upvotes = (previousVoteType == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
|
||||
int downvotes = (previousVoteType == -1) ? mPost.getDownvotes() + 1 : Math.max(mPost.getDownvotes(),0);
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
|
||||
mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
|
||||
} else {
|
||||
mScoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||
mPost.getScore() + previousVoteType));
|
||||
}
|
||||
}
|
||||
mUpvoteButton.setColorFilter(previousUpvoteButtonColorFilter);
|
||||
mDownvoteButton.setColorFilter(previousDownvoteButtonColorFilter);
|
||||
@@ -1350,10 +1586,10 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
SavePost savePost = new SavePost();
|
||||
if (mPost.isSaved()) {
|
||||
mSaveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||
SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, mPost.getFullName(),
|
||||
savePost.unsaveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -1373,7 +1609,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
});
|
||||
} else {
|
||||
mSaveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
||||
SaveThing.saveThing(mOauthRetrofit, mAccessToken, mPost.getFullName(),
|
||||
savePost.saveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
|
||||
new SaveThing.SaveThingListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
@@ -1395,8 +1631,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
});
|
||||
|
||||
mShareButton.setOnClickListener(view -> {
|
||||
String link = (mShareOnLocalInstance) ? mRetrofit.getBaseURL() + "/post/" + mPost.getId() : mPost.getPermalink();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(ShareLinkBottomSheetFragment.EXTRA_POST_LINK, mPost.getPermalink());
|
||||
bundle.putString(ShareLinkBottomSheetFragment.EXTRA_POST_LINK, link);
|
||||
if (mPost.getPostType() != Post.TEXT_TYPE) {
|
||||
bundle.putInt(ShareLinkBottomSheetFragment.EXTRA_MEDIA_TYPE, mPost.getPostType());
|
||||
switch (mPost.getPostType()) {
|
||||
@@ -1417,7 +1654,8 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
});
|
||||
|
||||
mShareButton.setOnLongClickListener(view -> {
|
||||
mActivity.copyLink(mPost.getPermalink());
|
||||
String link = (mShareOnLocalInstance) ? mRetrofit.getBaseURL() + "/post/" + mPost.getId() : mPost.getPermalink();
|
||||
mActivity.copyLink(link);
|
||||
return true;
|
||||
});
|
||||
|
||||
@@ -1427,11 +1665,18 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
constraintSet.clear(mUpvoteButton.getId(), ConstraintSet.START);
|
||||
constraintSet.clear(mScoreTextView.getId(), ConstraintSet.START);
|
||||
constraintSet.clear(mDownvoteButton.getId(), ConstraintSet.START);
|
||||
constraintSet.clear(mDownvoteTextView.getId(), ConstraintSet.START);
|
||||
constraintSet.clear(mSaveButton.getId(), ConstraintSet.END);
|
||||
constraintSet.clear(mShareButton.getId(), ConstraintSet.END);
|
||||
constraintSet.connect(mUpvoteButton.getId(), ConstraintSet.END, mScoreTextView.getId(), ConstraintSet.START);
|
||||
constraintSet.connect(mScoreTextView.getId(), ConstraintSet.END, mDownvoteButton.getId(), ConstraintSet.START);
|
||||
constraintSet.connect(mDownvoteButton.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
|
||||
if (!mSeperateUpvoteAndDownvote) {
|
||||
constraintSet.connect(mDownvoteButton.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
|
||||
} else {
|
||||
constraintSet.connect(mDownvoteButton.getId(), ConstraintSet.END, mDownvoteTextView.getId(), ConstraintSet.START);
|
||||
constraintSet.connect(mDownvoteTextView.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
|
||||
}
|
||||
|
||||
constraintSet.connect(commentsCountTextView.getId(), ConstraintSet.START, mSaveButton.getId(), ConstraintSet.END);
|
||||
constraintSet.connect(commentsCountTextView.getId(), ConstraintSet.END, mUpvoteButton.getId(), ConstraintSet.START);
|
||||
constraintSet.connect(mSaveButton.getId(), ConstraintSet.START, mShareButton.getId(), ConstraintSet.END);
|
||||
@@ -1499,8 +1744,14 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
AspectRatioGifImageView mIconGifImageView;
|
||||
@BindView(R.id.subreddit_text_view_item_post_detail_video_autoplay)
|
||||
TextView mSubredditTextView;
|
||||
|
||||
@BindView(R.id.community_instance_text_view_item_post_detail_video_autoplay)
|
||||
TextView mCommunityInstanceTextView;
|
||||
@BindView(R.id.user_text_view_item_post_detail_video_autoplay)
|
||||
TextView mUserTextView;
|
||||
@BindView(R.id.user_instance_text_view_item_post_detail_video_autoplay)
|
||||
TextView mUserInstanceTextView;
|
||||
|
||||
@BindView(R.id.author_flair_text_view_item_post_detail_video_autoplay)
|
||||
TextView mAuthorFlairTextView;
|
||||
@BindView(R.id.post_time_text_view_item_post_detail_video_autoplay)
|
||||
@@ -1551,6 +1802,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ImageView mUpvoteButton;
|
||||
@BindView(R.id.score_text_view_item_post_detail_video_autoplay)
|
||||
TextView mScoreTextView;
|
||||
|
||||
@BindView(R.id.downvote_text_view_item_post_detail_video_autoplay)
|
||||
TextView mDownvoteTextView;
|
||||
@BindView(R.id.minus_button_item_post_detail_video_autoplay)
|
||||
ImageView mDownvoteButton;
|
||||
@BindView(R.id.comments_count_item_post_detail_video_autoplay)
|
||||
@@ -1572,7 +1826,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ButterKnife.bind(this, itemView);
|
||||
setBaseView(mIconGifImageView,
|
||||
mSubredditTextView,
|
||||
mCommunityInstanceTextView,
|
||||
mUserTextView,
|
||||
mUserInstanceTextView,
|
||||
mAuthorFlairTextView,
|
||||
mPostTimeTextView,
|
||||
mTitleTextView,
|
||||
@@ -1589,6 +1845,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
mBottomConstraintLayout,
|
||||
mUpvoteButton,
|
||||
mScoreTextView,
|
||||
mDownvoteTextView,
|
||||
mDownvoteButton,
|
||||
commentsCountTextView,
|
||||
mSaveButton,
|
||||
@@ -1637,8 +1894,8 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
} else {
|
||||
intent.setData(Uri.parse(mPost.getVideoUrl()));
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, mPost.getVideoDownloadUrl());
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_SUBREDDIT, mPost.getSubredditName());
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_ID, mPost.getId());
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_DIRECT);
|
||||
|
||||
}
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_POST_TITLE, mPost.getTitle());
|
||||
if (helper != null) {
|
||||
@@ -1806,8 +2063,12 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
AspectRatioGifImageView mIconGifImageView;
|
||||
@BindView(R.id.subreddit_text_view_item_post_detail_video_and_gif_preview)
|
||||
TextView mSubredditTextView;
|
||||
@BindView(R.id.community_instance_text_view_item_post_detail_video_and_gif_preview)
|
||||
TextView mCommunityInstanceTextView;
|
||||
@BindView(R.id.user_text_view_item_post_detail_video_and_gif_preview)
|
||||
TextView mUserTextView;
|
||||
@BindView(R.id.user_instance_text_view_item_post_detail_video_and_gif_preview)
|
||||
TextView mUserInstanceTextView;
|
||||
@BindView(R.id.author_flair_text_view_item_post_detail_video_and_gif_preview)
|
||||
TextView mAuthorFlairTextView;
|
||||
@BindView(R.id.post_time_text_view_item_post_detail_video_and_gif_preview)
|
||||
@@ -1850,6 +2111,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ImageView mUpvoteButton;
|
||||
@BindView(R.id.score_text_view_item_post_detail_video_and_gif_preview)
|
||||
TextView mScoreTextView;
|
||||
|
||||
@BindView(R.id.downvote_text_view_item_post_detail_video_and_gif_preview)
|
||||
TextView mDownvoteTextView;
|
||||
@BindView(R.id.minus_button_item_post_detail_video_and_gif_preview)
|
||||
ImageView mDownvoteButton;
|
||||
@BindView(R.id.comments_count_item_post_detail_video_and_gif_preview)
|
||||
@@ -1864,7 +2128,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ButterKnife.bind(this, itemView);
|
||||
setBaseView(mIconGifImageView,
|
||||
mSubredditTextView,
|
||||
mCommunityInstanceTextView,
|
||||
mUserTextView,
|
||||
mUserInstanceTextView,
|
||||
mAuthorFlairTextView,
|
||||
mPostTimeTextView,
|
||||
mTitleTextView,
|
||||
@@ -1881,6 +2147,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
mBottomConstraintLayout,
|
||||
mUpvoteButton,
|
||||
mScoreTextView,
|
||||
mDownvoteTextView,
|
||||
mDownvoteButton,
|
||||
commentsCountTextView,
|
||||
mSaveButton,
|
||||
@@ -1910,8 +2177,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_STREAMABLE_SHORT_CODE, mPost.getStreamableShortCode());
|
||||
} else {
|
||||
intent.setData(Uri.parse(mPost.getVideoUrl()));
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_SUBREDDIT, mPost.getSubredditName());
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_ID, mPost.getId());
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_DIRECT);
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, mPost.getVideoDownloadUrl());
|
||||
}
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_POST_TITLE, mPost.getTitle());
|
||||
@@ -1936,8 +2202,12 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
AspectRatioGifImageView mIconGifImageView;
|
||||
@BindView(R.id.subreddit_text_view_item_post_detail_image_and_gif_autoplay)
|
||||
TextView mSubredditTextView;
|
||||
@BindView(R.id.community_instance_text_view_item_post_detail_image_and_gif_autoplay)
|
||||
TextView mCommunityInstanceTextView;
|
||||
@BindView(R.id.user_text_view_item_post_detail_image_and_gif_autoplay)
|
||||
TextView mUserTextView;
|
||||
@BindView(R.id.user_instance_text_view_item_post_detail_image_and_gif_autoplay)
|
||||
TextView mUserInstanceTextView;
|
||||
@BindView(R.id.author_flair_text_view_item_post_detail_image_and_gif_autoplay)
|
||||
TextView mAuthorFlairTextView;
|
||||
@BindView(R.id.post_time_text_view_item_post_detail_image_and_gif_autoplay)
|
||||
@@ -1980,6 +2250,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ImageView mUpvoteButton;
|
||||
@BindView(R.id.score_text_view_item_post_detail_image_and_gif_autoplay)
|
||||
TextView mScoreTextView;
|
||||
|
||||
@BindView(R.id.downvote_text_view_item_post_detail_image_and_gif_autoplay)
|
||||
TextView mDownvoteTextView;
|
||||
@BindView(R.id.minus_button_item_post_detail_image_and_gif_autoplay)
|
||||
ImageView mDownvoteButton;
|
||||
@BindView(R.id.comments_count_item_post_detail_image_and_gif_autoplay)
|
||||
@@ -1994,7 +2267,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ButterKnife.bind(this, itemView);
|
||||
setBaseView(mIconGifImageView,
|
||||
mSubredditTextView,
|
||||
mCommunityInstanceTextView,
|
||||
mUserTextView,
|
||||
mUserInstanceTextView,
|
||||
mAuthorFlairTextView,
|
||||
mPostTimeTextView,
|
||||
mTitleTextView,
|
||||
@@ -2011,6 +2286,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
mBottomConstraintLayout,
|
||||
mUpvoteButton,
|
||||
mScoreTextView,
|
||||
mDownvoteTextView,
|
||||
mDownvoteButton,
|
||||
commentsCountTextView,
|
||||
mSaveButton,
|
||||
@@ -2049,8 +2325,12 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
AspectRatioGifImageView mIconGifImageView;
|
||||
@BindView(R.id.subreddit_text_view_item_post_detail_link)
|
||||
TextView mSubredditTextView;
|
||||
@BindView(R.id.community_instance_text_view_item_post_detail_link)
|
||||
TextView mCommunityInstanceTextView;
|
||||
@BindView(R.id.user_text_view_item_post_detail_link)
|
||||
TextView mUserTextView;
|
||||
@BindView(R.id.user_instance_text_view_item_post_detail_link)
|
||||
TextView mUserInstanceTextView;
|
||||
@BindView(R.id.author_flair_text_view_item_post_detail_link)
|
||||
TextView mAuthorFlairTextView;
|
||||
@BindView(R.id.post_time_text_view_item_post_detail_link)
|
||||
@@ -2095,6 +2375,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ImageView mUpvoteButton;
|
||||
@BindView(R.id.score_text_view_item_post_detail_link)
|
||||
TextView mScoreTextView;
|
||||
|
||||
@BindView(R.id.downvote_text_view_item_post_detail_link)
|
||||
TextView mDownvoteTextView;
|
||||
@BindView(R.id.minus_button_item_post_detail_link)
|
||||
ImageView mDownvoteButton;
|
||||
@BindView(R.id.comments_count_item_post_detail_link)
|
||||
@@ -2109,7 +2392,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ButterKnife.bind(this, itemView);
|
||||
setBaseView(mIconGifImageView,
|
||||
mSubredditTextView,
|
||||
mCommunityInstanceTextView,
|
||||
mUserTextView,
|
||||
mUserInstanceTextView,
|
||||
mAuthorFlairTextView,
|
||||
mPostTimeTextView,
|
||||
mTitleTextView,
|
||||
@@ -2126,6 +2411,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
mBottomConstraintLayout,
|
||||
mUpvoteButton,
|
||||
mScoreTextView,
|
||||
mDownvoteTextView,
|
||||
mDownvoteButton,
|
||||
commentsCountTextView,
|
||||
mSaveButton,
|
||||
@@ -2153,8 +2439,12 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
AspectRatioGifImageView mIconGifImageView;
|
||||
@BindView(R.id.subreddit_text_view_item_post_detail_no_preview_link)
|
||||
TextView mSubredditTextView;
|
||||
@BindView(R.id.community_instance_text_view_item_post_detail_no_preview_link)
|
||||
TextView mCommunityInstanceTextView;
|
||||
@BindView(R.id.user_text_view_item_post_detail_no_preview_link)
|
||||
TextView mUserTextView;
|
||||
@BindView(R.id.user_instance_text_view_item_post_detail_no_preview_link)
|
||||
TextView mUserInstanceTextView;
|
||||
@BindView(R.id.author_flair_text_view_item_post_detail_no_preview_link)
|
||||
TextView mAuthorFlairTextView;
|
||||
@BindView(R.id.post_time_text_view_item_post_detail_no_preview_link)
|
||||
@@ -2191,6 +2481,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ImageView mUpvoteButton;
|
||||
@BindView(R.id.score_text_view_item_post_detail_no_preview_link)
|
||||
TextView mScoreTextView;
|
||||
@BindView(R.id.downvote_text_view_item_post_detail_no_preview_link)
|
||||
TextView mDownvoteTextView;
|
||||
|
||||
@BindView(R.id.minus_button_item_post_detail_no_preview_link)
|
||||
ImageView mDownvoteButton;
|
||||
@BindView(R.id.comments_count_item_post_detail_no_preview_link)
|
||||
@@ -2205,7 +2498,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ButterKnife.bind(this, itemView);
|
||||
setBaseView(mIconGifImageView,
|
||||
mSubredditTextView,
|
||||
mCommunityInstanceTextView,
|
||||
mUserTextView,
|
||||
mUserInstanceTextView,
|
||||
mAuthorFlairTextView,
|
||||
mPostTimeTextView,
|
||||
mTitleTextView,
|
||||
@@ -2222,6 +2517,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
mBottomConstraintLayout,
|
||||
mUpvoteButton,
|
||||
mScoreTextView,
|
||||
mDownvoteTextView,
|
||||
mDownvoteButton,
|
||||
commentsCountTextView,
|
||||
mSaveButton,
|
||||
@@ -2249,7 +2545,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_STREAMABLE_SHORT_CODE, mPost.getStreamableShortCode());
|
||||
} else {
|
||||
intent.setData(Uri.parse(mPost.getVideoUrl()));
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_SUBREDDIT, mPost.getSubredditName());
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_DIRECT);
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_ID, mPost.getId());
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, mPost.getVideoDownloadUrl());
|
||||
}
|
||||
@@ -2294,8 +2590,12 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
AspectRatioGifImageView mIconGifImageView;
|
||||
@BindView(R.id.subreddit_text_view_item_post_detail_gallery)
|
||||
TextView mSubredditTextView;
|
||||
@BindView(R.id.community_instance_text_view_item_post_detail_gallery)
|
||||
TextView mCommunityInstanceTextView;
|
||||
@BindView(R.id.user_text_view_item_post_detail_gallery)
|
||||
TextView mUserTextView;
|
||||
@BindView(R.id.user_instance_text_view_item_post_detail_gallery)
|
||||
TextView mUserInstanceTextView;
|
||||
@BindView(R.id.author_flair_text_view_item_post_detail_gallery)
|
||||
TextView mAuthorFlairTextView;
|
||||
@BindView(R.id.post_time_text_view_item_post_detail_gallery)
|
||||
@@ -2336,6 +2636,8 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ImageView mUpvoteButton;
|
||||
@BindView(R.id.score_text_view_item_post_detail_gallery)
|
||||
TextView mScoreTextView;
|
||||
@BindView(R.id.downvote_text_view_item_post_detail_gallery)
|
||||
TextView mDownvoteTextView;
|
||||
@BindView(R.id.minus_button_item_post_detail_gallery)
|
||||
ImageView mDownvoteButton;
|
||||
@BindView(R.id.comments_count_item_post_detail_gallery)
|
||||
@@ -2351,7 +2653,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ButterKnife.bind(this, itemView);
|
||||
setBaseView(mIconGifImageView,
|
||||
mSubredditTextView,
|
||||
mCommunityInstanceTextView,
|
||||
mUserTextView,
|
||||
mUserInstanceTextView,
|
||||
mAuthorFlairTextView,
|
||||
mPostTimeTextView,
|
||||
mTitleTextView,
|
||||
@@ -2368,6 +2672,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
mBottomConstraintLayout,
|
||||
mUpvoteButton,
|
||||
mScoreTextView,
|
||||
mDownvoteTextView,
|
||||
mDownvoteButton,
|
||||
commentsCountTextView,
|
||||
mSaveButton,
|
||||
@@ -2489,8 +2794,12 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
AspectRatioGifImageView mIconGifImageView;
|
||||
@BindView(R.id.subreddit_text_view_item_post_detail_text)
|
||||
TextView mSubredditTextView;
|
||||
@BindView(R.id.community_instance_text_view_item_post_detail_text)
|
||||
TextView mCommunityInstanceTextView;
|
||||
@BindView(R.id.user_text_view_item_post_detail_text)
|
||||
TextView mUserTextView;
|
||||
@BindView(R.id.user_instance_text_view_item_post_detail_text)
|
||||
TextView mUserInstanceTextView;
|
||||
@BindView(R.id.author_flair_text_view_item_post_detail_text)
|
||||
TextView mAuthorFlairTextView;
|
||||
@BindView(R.id.post_time_text_view_item_post_detail_text)
|
||||
@@ -2523,6 +2832,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ImageView mUpvoteButton;
|
||||
@BindView(R.id.score_text_view_item_post_detail_text)
|
||||
TextView mScoreTextView;
|
||||
|
||||
@BindView(R.id.downvote_text_view_item_post_detail_text)
|
||||
TextView mDownvoteTextView;
|
||||
@BindView(R.id.minus_button_item_post_detail_text)
|
||||
ImageView mDownvoteButton;
|
||||
@BindView(R.id.comments_count_item_post_detail_text)
|
||||
@@ -2537,7 +2849,9 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
ButterKnife.bind(this, itemView);
|
||||
setBaseView(mIconGifImageView,
|
||||
mSubredditTextView,
|
||||
mCommunityInstanceTextView,
|
||||
mUserTextView,
|
||||
mUserInstanceTextView,
|
||||
mAuthorFlairTextView,
|
||||
mPostTimeTextView,
|
||||
mTitleTextView,
|
||||
@@ -2554,6 +2868,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
||||
mBottomConstraintLayout,
|
||||
mUpvoteButton,
|
||||
mScoreTextView,
|
||||
mDownvoteTextView,
|
||||
mDownvoteButton,
|
||||
commentsCountTextView,
|
||||
mSaveButton,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,343 @@
|
||||
package eu.toldi.infinityforlemmy.adapters;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.net.Uri;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.text.util.Linkify;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.paging.PagedListAdapter;
|
||||
import androidx.recyclerview.widget.DiffUtil;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import eu.toldi.infinityforlemmy.NetworkState;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.ViewPrivateMessagesActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.markdown.RedditHeadingPlugin;
|
||||
import eu.toldi.infinityforlemmy.markdown.SpoilerAwareMovementMethod;
|
||||
import eu.toldi.infinityforlemmy.markdown.SpoilerParserPlugin;
|
||||
import eu.toldi.infinityforlemmy.markdown.SuperscriptPlugin;
|
||||
import eu.toldi.infinityforlemmy.privatemessage.LemmyPrivateMessageAPI;
|
||||
import eu.toldi.infinityforlemmy.privatemessage.PrivateMessage;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
|
||||
import io.noties.markwon.image.glide.GlideImagesPlugin;
|
||||
import io.noties.markwon.inlineparser.HtmlInlineProcessor;
|
||||
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin;
|
||||
import io.noties.markwon.linkify.LinkifyPlugin;
|
||||
import io.noties.markwon.movement.MovementMethodPlugin;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class PrivateMessageRecycleViewAdapter extends PagedListAdapter<PrivateMessage, RecyclerView.ViewHolder> {
|
||||
private static final int VIEW_TYPE_DATA = 0;
|
||||
private static final int VIEW_TYPE_ERROR = 1;
|
||||
private static final int VIEW_TYPE_LOADING = 2;
|
||||
private static final DiffUtil.ItemCallback<PrivateMessage> DIFF_CALLBACK = new DiffUtil.ItemCallback<>() {
|
||||
@Override
|
||||
public boolean areItemsTheSame(@NonNull PrivateMessage message, @NonNull PrivateMessage t1) {
|
||||
return message.getId() == t1.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areContentsTheSame(@NonNull PrivateMessage message, @NonNull PrivateMessage t1) {
|
||||
return message.getContent().equals(t1.getContent());
|
||||
}
|
||||
};
|
||||
private BaseActivity mActivity;
|
||||
private Retrofit retrofit;
|
||||
private Markwon mMarkwon;
|
||||
private String mAccessToken;
|
||||
|
||||
private final LemmyPrivateMessageAPI lemmyPrivateMessageAPI;
|
||||
private int mMessageType;
|
||||
private NetworkState networkState;
|
||||
private RetryLoadingMoreCallback mRetryLoadingMoreCallback;
|
||||
private int mColorAccent;
|
||||
private int mMessageBackgroundColor;
|
||||
private int mUsernameColor;
|
||||
private int mPrimaryTextColor;
|
||||
private int mSecondaryTextColor;
|
||||
private int mUnreadMessageBackgroundColor;
|
||||
private int mColorPrimaryLightTheme;
|
||||
private int mButtonTextColor;
|
||||
private boolean markAllMessagesAsRead = false;
|
||||
|
||||
public PrivateMessageRecycleViewAdapter(BaseActivity activity, Retrofit oauthRetrofit,
|
||||
CustomThemeWrapper customThemeWrapper,
|
||||
String accessToken,
|
||||
LemmyPrivateMessageAPI lemmyPrivateMessageAPI, RetryLoadingMoreCallback retryLoadingMoreCallback) {
|
||||
super(DIFF_CALLBACK);
|
||||
mActivity = activity;
|
||||
retrofit = oauthRetrofit;
|
||||
this.lemmyPrivateMessageAPI = lemmyPrivateMessageAPI;
|
||||
mRetryLoadingMoreCallback = retryLoadingMoreCallback;
|
||||
|
||||
mColorAccent = customThemeWrapper.getColorAccent();
|
||||
mMessageBackgroundColor = customThemeWrapper.getCardViewBackgroundColor();
|
||||
mUsernameColor = customThemeWrapper.getUsername();
|
||||
mPrimaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
||||
mSecondaryTextColor = customThemeWrapper.getSecondaryTextColor();
|
||||
int spoilerBackgroundColor = mSecondaryTextColor | 0xFF000000;
|
||||
mUnreadMessageBackgroundColor = customThemeWrapper.getUnreadMessageBackgroundColor();
|
||||
mColorPrimaryLightTheme = customThemeWrapper.getColorPrimaryLightTheme();
|
||||
mButtonTextColor = customThemeWrapper.getButtonTextColor();
|
||||
|
||||
// todo:https://github.com/Docile-Alligator/Infinity-For-Reddit/issues/1027
|
||||
// add tables support and replace with MarkdownUtils#commonPostMarkwonBuilder
|
||||
mMarkwon = Markwon.builder(mActivity)
|
||||
.usePlugin(MarkwonInlineParserPlugin.create(plugin -> {
|
||||
plugin.excludeInlineProcessor(HtmlInlineProcessor.class);
|
||||
}))
|
||||
.usePlugin(new AbstractMarkwonPlugin() {
|
||||
@Override
|
||||
public void configureConfiguration(@NonNull MarkwonConfiguration.Builder builder) {
|
||||
builder.linkResolver((view, link) -> {
|
||||
Intent intent = new Intent(mActivity, LinkResolverActivity.class);
|
||||
Uri uri = Uri.parse(link);
|
||||
intent.setData(uri);
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
|
||||
builder.linkColor(customThemeWrapper.getLinkColor());
|
||||
}
|
||||
})
|
||||
.usePlugin(SuperscriptPlugin.create())
|
||||
.usePlugin(SpoilerParserPlugin.create(mSecondaryTextColor, spoilerBackgroundColor))
|
||||
.usePlugin(RedditHeadingPlugin.create())
|
||||
.usePlugin(StrikethroughPlugin.create())
|
||||
.usePlugin(MovementMethodPlugin.create(new SpoilerAwareMovementMethod()))
|
||||
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
||||
.usePlugin(GlideImagesPlugin.create(mActivity))
|
||||
.build();
|
||||
mAccessToken = accessToken;
|
||||
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
if (viewType == VIEW_TYPE_DATA) {
|
||||
return new DataViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, parent, false));
|
||||
} else if (viewType == VIEW_TYPE_ERROR) {
|
||||
return new ErrorViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false));
|
||||
} else {
|
||||
return new LoadingViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_loading, parent, false));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
if (holder instanceof DataViewHolder) {
|
||||
PrivateMessage message = getItem(holder.getBindingAdapterPosition());
|
||||
if (message != null) {
|
||||
|
||||
if (!message.getRead()) {
|
||||
if (markAllMessagesAsRead) {
|
||||
message.setRead(true);
|
||||
} else {
|
||||
holder.itemView.setBackgroundColor(
|
||||
mUnreadMessageBackgroundColor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
((DataViewHolder) holder).titleTextView.setVisibility(View.GONE);
|
||||
|
||||
|
||||
((DataViewHolder) holder).authorTextView.setText(message.getCreatorQualifiedName());
|
||||
String subject = message.getRecipientQualifiedName();
|
||||
((DataViewHolder) holder).subjectTextView.setText(subject);
|
||||
mMarkwon.setMarkdown(((DataViewHolder) holder).contentCustomMarkwonView, message.getContent());
|
||||
|
||||
holder.itemView.setOnClickListener(view -> {
|
||||
|
||||
Intent intent = new Intent(mActivity, ViewPrivateMessagesActivity.class);
|
||||
intent.putExtra(ViewPrivateMessagesActivity.EXTRA_PRIVATE_MESSAGE, message);
|
||||
mActivity.startActivity(intent);
|
||||
|
||||
|
||||
if (message.getRead()) {
|
||||
holder.itemView.setBackgroundColor(mMessageBackgroundColor);
|
||||
|
||||
|
||||
lemmyPrivateMessageAPI.markPrivateMessageAsRead(mAccessToken, message.getId(), new LemmyPrivateMessageAPI.PrivateMessageMarkedAsReadListener() {
|
||||
|
||||
@Override
|
||||
public void onPrivateMessageMarkedAsReadError() {
|
||||
message.setRead(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrivateMessageMarkedAsReadSuccess() {
|
||||
message.setRead(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
((DataViewHolder) holder).authorTextView.setOnClickListener(view -> {
|
||||
|
||||
Intent intent = new Intent(mActivity, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getCreatorName());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, message.getCreatorQualifiedName());
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
// Reached at the end
|
||||
if (hasExtraRow() && position == getItemCount() - 1) {
|
||||
if (networkState.getStatus() == NetworkState.Status.LOADING) {
|
||||
return VIEW_TYPE_LOADING;
|
||||
} else {
|
||||
return VIEW_TYPE_ERROR;
|
||||
}
|
||||
} else {
|
||||
return VIEW_TYPE_DATA;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (hasExtraRow()) {
|
||||
return super.getItemCount() + 1;
|
||||
}
|
||||
return super.getItemCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
||||
super.onViewRecycled(holder);
|
||||
if (holder instanceof DataViewHolder) {
|
||||
((DataViewHolder) holder).itemView.setBackgroundColor(mMessageBackgroundColor);
|
||||
((DataViewHolder) holder).titleTextView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasExtraRow() {
|
||||
return networkState != null && networkState.getStatus() != NetworkState.Status.SUCCESS;
|
||||
}
|
||||
|
||||
public void setNetworkState(NetworkState newNetworkState) {
|
||||
NetworkState previousState = this.networkState;
|
||||
boolean previousExtraRow = hasExtraRow();
|
||||
this.networkState = newNetworkState;
|
||||
boolean newExtraRow = hasExtraRow();
|
||||
if (previousExtraRow != newExtraRow) {
|
||||
if (previousExtraRow) {
|
||||
notifyItemRemoved(super.getItemCount());
|
||||
} else {
|
||||
notifyItemInserted(super.getItemCount());
|
||||
}
|
||||
} else if (newExtraRow && !previousState.equals(newNetworkState)) {
|
||||
notifyItemChanged(getItemCount() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateMessageReply(PrivateMessage newReply, int position) {
|
||||
if (position >= 0 && position < super.getItemCount()) {
|
||||
PrivateMessage message = getItem(position);
|
||||
if (message != null) {
|
||||
notifyItemChanged(position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setMarkAllMessagesAsRead(boolean markAllMessagesAsRead) {
|
||||
this.markAllMessagesAsRead = markAllMessagesAsRead;
|
||||
}
|
||||
|
||||
public interface RetryLoadingMoreCallback {
|
||||
void retryLoadingMore();
|
||||
}
|
||||
|
||||
class DataViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.author_text_view_item_message)
|
||||
TextView authorTextView;
|
||||
@BindView(R.id.subject_text_view_item_message)
|
||||
TextView subjectTextView;
|
||||
@BindView(R.id.title_text_view_item_message)
|
||||
TextView titleTextView;
|
||||
@BindView(R.id.content_custom_markwon_view_item_message)
|
||||
TextView contentCustomMarkwonView;
|
||||
|
||||
DataViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
authorTextView.setTypeface(mActivity.typeface);
|
||||
subjectTextView.setTypeface(mActivity.typeface);
|
||||
titleTextView.setTypeface(mActivity.titleTypeface);
|
||||
contentCustomMarkwonView.setTypeface(mActivity.contentTypeface);
|
||||
}
|
||||
itemView.setBackgroundColor(mMessageBackgroundColor);
|
||||
authorTextView.setTextColor(mUsernameColor);
|
||||
subjectTextView.setTextColor(mPrimaryTextColor);
|
||||
titleTextView.setTextColor(mPrimaryTextColor);
|
||||
contentCustomMarkwonView.setTextColor(mSecondaryTextColor);
|
||||
|
||||
contentCustomMarkwonView.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
|
||||
contentCustomMarkwonView.setOnClickListener(view -> {
|
||||
if (contentCustomMarkwonView.getSelectionStart() == -1 && contentCustomMarkwonView.getSelectionEnd() == -1) {
|
||||
itemView.performClick();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class ErrorViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.error_text_view_item_footer_error)
|
||||
TextView errorTextView;
|
||||
@BindView(R.id.retry_button_item_footer_error)
|
||||
Button retryButton;
|
||||
|
||||
ErrorViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
errorTextView.setTypeface(mActivity.typeface);
|
||||
retryButton.setTypeface(mActivity.typeface);
|
||||
}
|
||||
errorTextView.setText(R.string.load_comments_failed);
|
||||
errorTextView.setTextColor(mSecondaryTextColor);
|
||||
retryButton.setOnClickListener(view -> mRetryLoadingMoreCallback.retryLoadingMore());
|
||||
retryButton.setBackgroundTintList(ColorStateList.valueOf(mColorPrimaryLightTheme));
|
||||
retryButton.setTextColor(mButtonTextColor);
|
||||
}
|
||||
}
|
||||
|
||||
class LoadingViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.progress_bar_item_footer_loading)
|
||||
ProgressBar progressBar;
|
||||
|
||||
LoadingViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
progressBar.setIndeterminateTintList(ColorStateList.valueOf(mColorAccent));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,34 +27,35 @@ import java.util.Locale;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
|
||||
import io.noties.markwon.inlineparser.BangInlineProcessor;
|
||||
import io.noties.markwon.inlineparser.HtmlInlineProcessor;
|
||||
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin;
|
||||
import io.noties.markwon.linkify.LinkifyPlugin;
|
||||
import io.noties.markwon.movement.MovementMethodPlugin;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.ViewPrivateMessagesActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.markdown.ClickableGlideImagesPlugin;
|
||||
import eu.toldi.infinityforlemmy.markdown.RedditHeadingPlugin;
|
||||
import eu.toldi.infinityforlemmy.markdown.SpoilerAwareMovementMethod;
|
||||
import eu.toldi.infinityforlemmy.markdown.SpoilerParserPlugin;
|
||||
import eu.toldi.infinityforlemmy.markdown.SuperscriptPlugin;
|
||||
import eu.toldi.infinityforlemmy.message.Message;
|
||||
import eu.toldi.infinityforlemmy.privatemessage.PrivateMessage;
|
||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
|
||||
import io.noties.markwon.image.glide.GlideImagesPlugin;
|
||||
import io.noties.markwon.inlineparser.HtmlInlineProcessor;
|
||||
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin;
|
||||
import io.noties.markwon.linkify.LinkifyPlugin;
|
||||
import io.noties.markwon.movement.MovementMethodPlugin;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
|
||||
public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
private static final int VIEW_TYPE_MESSAGE_SENT = 0;
|
||||
private static final int VIEW_TYPE_MESSAGE_RECEIVED = 1;
|
||||
private Message mMessage;
|
||||
private PrivateMessage mMessage;
|
||||
private ViewPrivateMessagesActivity mViewPrivateMessagesActivity;
|
||||
private RequestManager mGlide;
|
||||
private Locale mLocale;
|
||||
@@ -70,7 +71,7 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
|
||||
|
||||
public PrivateMessagesDetailRecyclerViewAdapter(ViewPrivateMessagesActivity viewPrivateMessagesActivity,
|
||||
SharedPreferences sharedPreferences, Locale locale,
|
||||
Message message, String accountName,
|
||||
PrivateMessage message, String accountName,
|
||||
CustomThemeWrapper customThemeWrapper) {
|
||||
mMessage = message;
|
||||
mViewPrivateMessagesActivity = viewPrivateMessagesActivity;
|
||||
@@ -83,7 +84,6 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
|
||||
mMarkwon = Markwon.builder(viewPrivateMessagesActivity)
|
||||
.usePlugin(MarkwonInlineParserPlugin.create(plugin -> {
|
||||
plugin.excludeInlineProcessor(HtmlInlineProcessor.class);
|
||||
plugin.excludeInlineProcessor(BangInlineProcessor.class);
|
||||
}))
|
||||
.usePlugin(new AbstractMarkwonPlugin() {
|
||||
@Override
|
||||
@@ -108,6 +108,8 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
|
||||
builder.linkColor(customThemeWrapper.getLinkColor());
|
||||
}
|
||||
})
|
||||
.usePlugin(GlideImagesPlugin.create(viewPrivateMessagesActivity))
|
||||
.usePlugin(ClickableGlideImagesPlugin.create(viewPrivateMessagesActivity))
|
||||
.usePlugin(SuperscriptPlugin.create())
|
||||
.usePlugin(StrikethroughPlugin.create())
|
||||
.usePlugin(SpoilerParserPlugin.create(commentColor, commentColor | 0xFF000000))
|
||||
@@ -127,9 +129,9 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
if (position == 0) {
|
||||
return mMessage.getAuthor().equals(mAccountName) ? VIEW_TYPE_MESSAGE_SENT : VIEW_TYPE_MESSAGE_RECEIVED;
|
||||
return mMessage.getCreatorQualifiedName().equals(mAccountName) ? VIEW_TYPE_MESSAGE_SENT : VIEW_TYPE_MESSAGE_RECEIVED;
|
||||
} else {
|
||||
return mMessage.getReplies().get(position - 1).getAuthor().equals(mAccountName) ? VIEW_TYPE_MESSAGE_SENT : VIEW_TYPE_MESSAGE_RECEIVED;
|
||||
return mMessage.getReplies().get(position - 1).getCreatorQualifiedName().equals(mAccountName) ? VIEW_TYPE_MESSAGE_SENT : VIEW_TYPE_MESSAGE_RECEIVED;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,7 +147,7 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
Message message;
|
||||
PrivateMessage message;
|
||||
if (holder.getBindingAdapterPosition() == 0) {
|
||||
message = mMessage;
|
||||
} else {
|
||||
@@ -153,12 +155,12 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
|
||||
}
|
||||
if (message != null) {
|
||||
if (holder instanceof MessageViewHolder) {
|
||||
mMarkwon.setMarkdown(((MessageViewHolder) holder).messageTextView, message.getBody());
|
||||
mMarkwon.setMarkdown(((MessageViewHolder) holder).messageTextView, message.getContent());
|
||||
|
||||
if (mShowElapsedTime) {
|
||||
((MessageViewHolder) holder).timeTextView.setText(Utils.getElapsedTime(mViewPrivateMessagesActivity, message.getTimeUTC()));
|
||||
((MessageViewHolder) holder).timeTextView.setText(Utils.getElapsedTime(mViewPrivateMessagesActivity, message.getPublished()));
|
||||
} else {
|
||||
((MessageViewHolder) holder).timeTextView.setText(Utils.getFormattedTime(mLocale, message.getTimeUTC(), mTimeFormatPattern));
|
||||
((MessageViewHolder) holder).timeTextView.setText(Utils.getFormattedTime(mLocale, message.getPublished(), mTimeFormatPattern));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,26 +168,33 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
|
||||
((SentMessageViewHolder) holder).messageTextView.setBackground(Utils.getTintedDrawable(mViewPrivateMessagesActivity,
|
||||
R.drawable.private_message_ballon, mSentMessageBackgroundColor));
|
||||
} else if (holder instanceof ReceivedMessageViewHolder) {
|
||||
mViewPrivateMessagesActivity.fetchUserAvatar(message.getAuthor(), userAvatarUrl -> {
|
||||
if (userAvatarUrl == null || userAvatarUrl.equals("")) {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.into(((ReceivedMessageViewHolder) holder).userAvatarImageView);
|
||||
} else {
|
||||
mGlide.load(userAvatarUrl)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.error(mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
|
||||
.into(((ReceivedMessageViewHolder) holder).userAvatarImageView);
|
||||
}
|
||||
});
|
||||
if (!message.getCreatorAvatar().equals("")) {
|
||||
mGlide.load(message.getCreatorAvatar())
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.error(mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
|
||||
.into(((ReceivedMessageViewHolder) holder).userAvatarImageView);
|
||||
} else {
|
||||
mViewPrivateMessagesActivity.fetchUserAvatar(message.getCreatorQualifiedName(), userAvatarUrl -> {
|
||||
if (userAvatarUrl == null || userAvatarUrl.equals("")) {
|
||||
mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.into(((ReceivedMessageViewHolder) holder).userAvatarImageView);
|
||||
} else {
|
||||
mGlide.load(userAvatarUrl)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||
.error(mGlide.load(R.drawable.subreddit_default_icon)
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
|
||||
.into(((ReceivedMessageViewHolder) holder).userAvatarImageView);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
((ReceivedMessageViewHolder) holder).userAvatarImageView.setOnClickListener(view -> {
|
||||
if (message.isAuthorDeleted()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Intent intent = new Intent(mViewPrivateMessagesActivity, ViewUserDetailActivity.class);
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getAuthor());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getCreatorName());
|
||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, message.getCreatorQualifiedName());
|
||||
mViewPrivateMessagesActivity.startActivity(intent);
|
||||
});
|
||||
|
||||
@@ -207,12 +216,12 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
|
||||
}
|
||||
}
|
||||
|
||||
public void setMessage(Message message) {
|
||||
public void setMessage(PrivateMessage message) {
|
||||
mMessage = message;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void addReply(Message reply) {
|
||||
public void addReply(PrivateMessage reply) {
|
||||
int currentSize = getItemCount();
|
||||
|
||||
if (mMessage != null) {
|
||||
@@ -273,7 +282,7 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
|
||||
copyImageView.setColorFilter(mSecondaryTextColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
|
||||
copyImageView.setOnClickListener(view -> {
|
||||
Message message;
|
||||
PrivateMessage message;
|
||||
if (getBindingAdapterPosition() == 0) {
|
||||
message = mMessage;
|
||||
} else {
|
||||
@@ -282,7 +291,7 @@ public class PrivateMessagesDetailRecyclerViewAdapter extends RecyclerView.Adapt
|
||||
if (message != null) {
|
||||
ClipboardManager clipboard = (ClipboardManager) mViewPrivateMessagesActivity.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
if (clipboard != null) {
|
||||
ClipData clip = ClipData.newPlainText("simple text", message.getBody());
|
||||
ClipData clip = ClipData.newPlainText("simple text", message.getContent());
|
||||
clipboard.setPrimaryClip(clip);
|
||||
if (android.os.Build.VERSION.SDK_INT < 33) {
|
||||
Toast.makeText(mViewPrivateMessagesActivity, R.string.copy_success, Toast.LENGTH_SHORT).show();
|
||||
|
||||
@@ -16,13 +16,6 @@ import java.util.ArrayList;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.MarkwonPlugin;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
import me.saket.bettermovementmethod.BetterLinkMovementMethod;
|
||||
import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.Rule;
|
||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||
@@ -33,6 +26,13 @@ import eu.toldi.infinityforlemmy.customviews.SwipeLockInterface;
|
||||
import eu.toldi.infinityforlemmy.customviews.SwipeLockLinearLayoutManager;
|
||||
import eu.toldi.infinityforlemmy.customviews.slidr.widget.SliderPanel;
|
||||
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||
import io.noties.markwon.Markwon;
|
||||
import io.noties.markwon.MarkwonConfiguration;
|
||||
import io.noties.markwon.MarkwonPlugin;
|
||||
import io.noties.markwon.core.MarkwonTheme;
|
||||
import io.noties.markwon.recycler.MarkwonAdapter;
|
||||
import me.saket.bettermovementmethod.BetterLinkMovementMethod;
|
||||
|
||||
public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecyclerViewAdapter.RuleViewHolder> {
|
||||
private BaseActivity activity;
|
||||
|
||||
@@ -33,8 +33,8 @@ import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.CheckIsSubscribedToSubreddit;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.subreddit.CommunitySubscription;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||
import eu.toldi.infinityforlemmy.subreddit.SubredditSubscription;
|
||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
import pl.droidsonroids.gif.GifImageView;
|
||||
@@ -125,7 +125,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
||||
if (isMultiSelection) {
|
||||
((DataViewHolder) holder).checkBox.performClick();
|
||||
} else {
|
||||
callback.subredditSelected(subredditData.getName(), LemmyUtils.actorID2FullName(subredditData.getActorId()), subredditData.getIconUrl());
|
||||
callback.subredditSelected(subredditData);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -141,7 +141,8 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
||||
.into(((DataViewHolder) holder).iconGifImageView);
|
||||
}
|
||||
|
||||
((DataViewHolder) holder).subredditNameTextView.setText(subredditData.getName());
|
||||
((DataViewHolder) holder).subredditNameTextView.setText(subredditData.getTitle());
|
||||
((DataViewHolder) holder).communityInstanceTextView.setText('@' + LemmyUtils.actorID2FullName(subredditData.getActorId()).split("@")[1]);
|
||||
((DataViewHolder) holder).subscriberCountTextView.setText(activity.getString(R.string.subscribers_number_detail, subredditData.getNSubscribers()));
|
||||
|
||||
if (!isMultiSelection) {
|
||||
@@ -158,10 +159,10 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
||||
((DataViewHolder) holder).subscribeButton.setVisibility(View.VISIBLE);
|
||||
((DataViewHolder) holder).subscribeButton.setOnClickListener(view -> {
|
||||
if (accessToken != null) {
|
||||
SubredditSubscription.subscribeToSubreddit(executor, new Handler(),
|
||||
oauthRetrofit, retrofit, accessToken, subredditData.getName(),
|
||||
CommunitySubscription.subscribeToCommunity(executor, new Handler(),
|
||||
retrofit, accessToken, subredditData.getId(), LemmyUtils.actorID2FullName(subredditData.getActorId()),
|
||||
accountName, redditDataRoomDatabase,
|
||||
new SubredditSubscription.SubredditSubscriptionListener() {
|
||||
new CommunitySubscription.SubredditSubscriptionListener() {
|
||||
@Override
|
||||
public void onSubredditSubscriptionSuccess() {
|
||||
((DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
|
||||
@@ -174,9 +175,9 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
||||
}
|
||||
});
|
||||
} else {
|
||||
SubredditSubscription.anonymousSubscribeToSubreddit(executor, new Handler(),
|
||||
CommunitySubscription.anonymousSubscribeToSubreddit(executor, new Handler(),
|
||||
retrofit, redditDataRoomDatabase, subredditData.getName(),
|
||||
new SubredditSubscription.SubredditSubscriptionListener() {
|
||||
new CommunitySubscription.SubredditSubscriptionListener() {
|
||||
@Override
|
||||
public void onSubredditSubscriptionSuccess() {
|
||||
((DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
|
||||
@@ -252,7 +253,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
||||
public interface Callback {
|
||||
void retryLoadingMore();
|
||||
|
||||
void subredditSelected(String subredditName, String communityFullName,String iconUrl);
|
||||
void subredditSelected(SubredditData communityData);
|
||||
}
|
||||
|
||||
class DataViewHolder extends RecyclerView.ViewHolder {
|
||||
@@ -262,6 +263,9 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
||||
GifImageView iconGifImageView;
|
||||
@BindView(R.id.subreddit_name_text_view_item_subreddit_listing)
|
||||
TextView subredditNameTextView;
|
||||
|
||||
@BindView(R.id.community_instance_text_view_item_subreddit_listing)
|
||||
TextView communityInstanceTextView;
|
||||
@BindView(R.id.subscriber_count_text_view_item_subreddit_listing)
|
||||
TextView subscriberCountTextView;
|
||||
@BindView(R.id.subscribe_image_view_item_subreddit_listing)
|
||||
@@ -273,6 +277,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
communityInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(primaryTextColor, 0.7f));
|
||||
subscriberCountTextView.setTextColor(secondaryTextColor);
|
||||
subscribeButton.setColorFilter(unsubscribed, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
if (isMultiSelection) {
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package eu.toldi.infinityforlemmy.adapters;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Handler;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -22,6 +24,7 @@ import eu.toldi.infinityforlemmy.R;
|
||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||
import eu.toldi.infinityforlemmy.activities.ViewSubredditDetailActivity;
|
||||
import eu.toldi.infinityforlemmy.asynctasks.InsertSubscribedThings;
|
||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
@@ -81,12 +84,10 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
if (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) {
|
||||
if (itemClickListener != null && !hasClearSelectionRow) {
|
||||
if (position == 0) {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
} else if (position == 1) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER;
|
||||
} else if (position == mFavoriteSubscribedSubredditData.size() + 2) {
|
||||
} else if (position == mFavoriteSubscribedSubredditData.size() + 1) {
|
||||
return VIEW_TYPE_SUBREDDIT_DIVIDER;
|
||||
} else if (position <= mFavoriteSubscribedSubredditData.size() + 1) {
|
||||
} else if (position <= mFavoriteSubscribedSubredditData.size()) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT;
|
||||
} else {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
@@ -95,12 +96,10 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
if (position == 0) {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
} else if (position == 1) {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
} else if (position == 2) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT_DIVIDER;
|
||||
} else if (position == mFavoriteSubscribedSubredditData.size() + 3) {
|
||||
} else if (position == mFavoriteSubscribedSubredditData.size() + 2) {
|
||||
return VIEW_TYPE_SUBREDDIT_DIVIDER;
|
||||
} else if (position <= mFavoriteSubscribedSubredditData.size() + 2) {
|
||||
} else if (position < mFavoriteSubscribedSubredditData.size() + 2) {
|
||||
return VIEW_TYPE_FAVORITE_SUBREDDIT;
|
||||
} else {
|
||||
return VIEW_TYPE_SUBREDDIT;
|
||||
@@ -149,42 +148,55 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
|
||||
if (hasClearSelectionRow && viewHolder.getBindingAdapterPosition() == 0) {
|
||||
((SubredditViewHolder) viewHolder).subredditNameTextView.setText(R.string.all_communities);
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(null, null, false));
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(null));
|
||||
return;
|
||||
} else if (itemClickListener != null && !hasClearSelectionRow && viewHolder.getBindingAdapterPosition() == 0) {
|
||||
name = username;
|
||||
iconUrl = userIconUrl;
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, true));
|
||||
} else if (hasClearSelectionRow && viewHolder.getBindingAdapterPosition() == 1) {
|
||||
name = username;
|
||||
iconUrl = userIconUrl;
|
||||
if (itemClickListener != null) {
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, true));
|
||||
}
|
||||
} else {
|
||||
int offset;
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
mFavoriteSubscribedSubredditData.size() + 4 : 2;
|
||||
mFavoriteSubscribedSubredditData.size() + 3 : 1;
|
||||
} else {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
mFavoriteSubscribedSubredditData.size() + 3 : 1;
|
||||
mFavoriteSubscribedSubredditData.size() + 2 : 0;
|
||||
}
|
||||
} else {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
mFavoriteSubscribedSubredditData.size() + 2 : 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
name = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
||||
fullname = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getQualified_name();
|
||||
iconUrl = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
|
||||
|
||||
if (mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).isFavorite()) {
|
||||
((SubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
||||
} else {
|
||||
((SubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
||||
}
|
||||
|
||||
((SubredditViewHolder) viewHolder).favoriteImageView.setOnClickListener(view -> {
|
||||
if (mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).isFavorite()) {
|
||||
((SubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
||||
mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).setFavorite(false);
|
||||
} else {
|
||||
((SubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
||||
mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).setFavorite(true);
|
||||
}
|
||||
InsertSubscribedThings.insertSubscribedThings(mExecutor, new Handler(), mRedditDataRoomDatabase, mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset),
|
||||
() -> {
|
||||
});
|
||||
});
|
||||
|
||||
if (itemClickListener != null) {
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, false));
|
||||
SubscribedSubredditData communityData = mSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset);
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(communityData));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (itemClickListener == null) {
|
||||
String finalFullname = fullname;
|
||||
viewHolder.itemView.setOnClickListener(view -> {
|
||||
@@ -208,26 +220,52 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
.into(((SubredditViewHolder) viewHolder).iconGifImageView);
|
||||
}
|
||||
((SubredditViewHolder) viewHolder).subredditNameTextView.setText(name);
|
||||
if (fullname.contains("@")) {
|
||||
((SubredditViewHolder) viewHolder).communityInstanceTextView.setText(fullname.substring(fullname.indexOf("@")));
|
||||
}
|
||||
} else if (viewHolder instanceof FavoriteSubredditViewHolder) {
|
||||
int offset;
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = 3;
|
||||
} else {
|
||||
offset = 2;
|
||||
} else {
|
||||
offset = 1;
|
||||
}
|
||||
} else {
|
||||
offset = 1;
|
||||
}
|
||||
SubscribedSubredditData communityData = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset);
|
||||
String name = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
||||
String fullname = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getQualified_name();
|
||||
String iconUrl = mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getIconUrl();
|
||||
|
||||
if (mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).isFavorite()) {
|
||||
((FavoriteSubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
||||
} else {
|
||||
((FavoriteSubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
||||
}
|
||||
|
||||
((FavoriteSubredditViewHolder) viewHolder).favoriteImageView.setOnClickListener(view -> {
|
||||
if (mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).isFavorite()) {
|
||||
((FavoriteSubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
||||
mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).setFavorite(false);
|
||||
} else {
|
||||
((FavoriteSubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
||||
mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).setFavorite(true);
|
||||
}
|
||||
InsertSubscribedThings.insertSubscribedThings(mExecutor, new Handler(), mRedditDataRoomDatabase, mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset),
|
||||
() -> {
|
||||
});
|
||||
});
|
||||
|
||||
if (itemClickListener != null) {
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, false));
|
||||
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(communityData));
|
||||
} else {
|
||||
viewHolder.itemView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, name);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY,
|
||||
mFavoriteSubscribedSubredditData.get(viewHolder.getBindingAdapterPosition() - offset).getQualified_name());
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
}
|
||||
@@ -244,32 +282,26 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
.into(((FavoriteSubredditViewHolder) viewHolder).iconGifImageView);
|
||||
}
|
||||
((FavoriteSubredditViewHolder) viewHolder).subredditNameTextView.setText(name);
|
||||
if (fullname.contains("@")) {
|
||||
((FavoriteSubredditViewHolder) viewHolder).communityInstanceTextView.setText(fullname.substring(fullname.indexOf("@")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mSubscribedSubredditData != null) {
|
||||
if(mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) {
|
||||
if (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) {
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
return mSubscribedSubredditData.size() > 0 ?
|
||||
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 4 : 0;
|
||||
} else {
|
||||
return mSubscribedSubredditData.size() > 0 ?
|
||||
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 3 : 0;
|
||||
}
|
||||
return mSubscribedSubredditData.size() > 0 ?
|
||||
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + ((hasClearSelectionRow) ? 3 : 2) : 0;
|
||||
}
|
||||
return mSubscribedSubredditData.size() > 0 ?
|
||||
mFavoriteSubscribedSubredditData.size() + mSubscribedSubredditData.size() + 2 : 0;
|
||||
}
|
||||
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
return mSubscribedSubredditData.size() > 0 ? mSubscribedSubredditData.size() + 2 : 0;
|
||||
} else {
|
||||
return mSubscribedSubredditData.size() > 0 ? mSubscribedSubredditData.size() + 1 : 0;
|
||||
}
|
||||
return (hasClearSelectionRow) ? mSubscribedSubredditData.size() + 1 : mSubscribedSubredditData.size();
|
||||
}
|
||||
|
||||
return mSubscribedSubredditData.size();
|
||||
@@ -277,10 +309,12 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
||||
if(holder instanceof SubredditViewHolder) {
|
||||
glide.clear(((SubredditViewHolder) holder).iconGifImageView);
|
||||
((SubredditViewHolder) holder).favoriteImageView.setVisibility(View.VISIBLE);
|
||||
} else if (holder instanceof FavoriteSubredditViewHolder) {
|
||||
glide.clear(((FavoriteSubredditViewHolder) holder).iconGifImageView);
|
||||
}
|
||||
@@ -317,10 +351,10 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
mFavoriteSubscribedSubredditData.size() + 4 : 0;
|
||||
mFavoriteSubscribedSubredditData.size() + 3 : 0;
|
||||
} else {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
mFavoriteSubscribedSubredditData.size() + 3 : 0;
|
||||
mFavoriteSubscribedSubredditData.size() + 2 : 0;
|
||||
}
|
||||
} else {
|
||||
offset = (mFavoriteSubscribedSubredditData != null && mFavoriteSubscribedSubredditData.size() > 0) ?
|
||||
@@ -333,9 +367,9 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
int offset;
|
||||
if (itemClickListener != null) {
|
||||
if (hasClearSelectionRow) {
|
||||
offset = 3;
|
||||
} else {
|
||||
offset = 2;
|
||||
} else {
|
||||
offset = 1;
|
||||
}
|
||||
} else {
|
||||
offset = 1;
|
||||
@@ -347,7 +381,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
}
|
||||
|
||||
public interface ItemClickListener {
|
||||
void onClick(String name, String iconUrl, boolean subredditIsUser);
|
||||
void onClick(SubscribedSubredditData subredditData);
|
||||
}
|
||||
|
||||
class SubredditViewHolder extends RecyclerView.ViewHolder {
|
||||
@@ -356,13 +390,20 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
@BindView(R.id.thing_name_text_view_item_subscribed_thing)
|
||||
TextView subredditNameTextView;
|
||||
|
||||
@BindView(R.id.thing_instance_text_view_item_subscribed_thing)
|
||||
TextView communityInstanceTextView;
|
||||
@BindView(R.id.favorite_image_view_item_subscribed_thing)
|
||||
ImageView favoriteImageView;
|
||||
|
||||
SubredditViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
subredditNameTextView.setTypeface(mActivity.typeface);
|
||||
communityInstanceTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
communityInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(primaryTextColor, 0.7f));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -372,13 +413,21 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
|
||||
@BindView(R.id.thing_name_text_view_item_subscribed_thing)
|
||||
TextView subredditNameTextView;
|
||||
|
||||
@BindView(R.id.thing_instance_text_view_item_subscribed_thing)
|
||||
TextView communityInstanceTextView;
|
||||
@BindView(R.id.favorite_image_view_item_subscribed_thing)
|
||||
ImageView favoriteImageView;
|
||||
|
||||
|
||||
FavoriteSubredditViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
if (mActivity.typeface != null) {
|
||||
subredditNameTextView.setTypeface(mActivity.typeface);
|
||||
communityInstanceTextView.setTypeface(mActivity.typeface);
|
||||
}
|
||||
subredditNameTextView.setTextColor(primaryTextColor);
|
||||
communityInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(primaryTextColor, 0.7f));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -136,7 +136,9 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
||||
.into(((DataViewHolder) holder).iconGifImageView);
|
||||
}
|
||||
|
||||
((DataViewHolder) holder).userNameTextView.setText(userData.getName());
|
||||
((DataViewHolder) holder).userNameTextView.setText(userData.getTitle().equals("") ? userData.getName() : userData.getTitle());
|
||||
String qualifiedName = LemmyUtils.actorID2FullName(userData.getActorId());
|
||||
((DataViewHolder) holder).userInstanceTextView.setText(qualifiedName.substring(qualifiedName.indexOf('@')));
|
||||
|
||||
if (!isMultiSelection) {
|
||||
CheckIsFollowingUser.checkIsFollowingUser(executor, new Handler(), redditDataRoomDatabase,
|
||||
@@ -148,7 +150,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
||||
|
||||
@Override
|
||||
public void isNotSubscribed() {
|
||||
((DataViewHolder) holder).subscribeButton.setVisibility(View.VISIBLE);
|
||||
|
||||
((DataViewHolder) holder).subscribeButton.setOnClickListener(view -> {
|
||||
UserFollowing.followUser(oauthRetrofit, retrofit,
|
||||
accessToken, userData.getName(), accountName, redditDataRoomDatabase,
|
||||
@@ -237,6 +239,9 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
||||
GifImageView iconGifImageView;
|
||||
@BindView(R.id.user_name_text_view_item_user_listing)
|
||||
TextView userNameTextView;
|
||||
|
||||
@BindView(R.id.user_instance_text_view_item_user_listing)
|
||||
TextView userInstanceTextView;
|
||||
@BindView(R.id.subscribe_image_view_item_user_listing)
|
||||
ImageView subscribeButton;
|
||||
@BindView(R.id.checkbox__item_user_listing)
|
||||
@@ -246,6 +251,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
userNameTextView.setTextColor(primaryTextColor);
|
||||
userInstanceTextView.setTextColor(CustomThemeWrapper.darkenColor(primaryTextColor, 0.7f));
|
||||
subscribeButton.setColorFilter(unsubscribedColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||
|
||||
if (activity.typeface != null) {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user