mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-11-16 16:47:51 +01:00
Compare commits
545 Commits
reddit_rem
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55bbef25c6 | ||
|
|
32c75ff87c | ||
|
|
468bae4019 | ||
|
|
e8b199a74a | ||
|
|
0c8e3e3ea5 | ||
|
|
767e75b798 | ||
|
|
c1c8d99de2 | ||
|
|
336223cc36 | ||
|
|
7da428e9b2 | ||
|
|
2a08a26a36 | ||
|
|
c60d88b2fe | ||
|
|
b66742dd37 | ||
|
|
b3623e6f7b | ||
|
|
2a2e7c0e87 | ||
|
|
1395eee2df | ||
|
|
a0e2bb06a1 | ||
|
|
ce08191d01 | ||
|
|
75f65691fd | ||
|
|
b70db40a03 | ||
|
|
5f345113f1 | ||
|
|
ba1c320e47 | ||
|
|
be6c137e03 | ||
|
|
07a556b76e | ||
|
|
5aba7cd938 | ||
|
|
40b63522d0 | ||
|
|
934d0e5c81 | ||
|
|
6457a4db2f | ||
|
|
4ccb1a38bf | ||
|
|
de92e0edd3 | ||
|
|
e87426d591 | ||
|
|
3a9638e236 | ||
|
|
f5b8206959 | ||
|
|
ae74eeba0f | ||
|
|
f6e5942e86 | ||
|
|
b67b62f952 | ||
|
|
f01e53953b | ||
|
|
241f082806 | ||
|
|
56e05a2e84 | ||
|
|
2c16a05a95 | ||
|
|
23c5ac9127 | ||
|
|
1303106a7b | ||
|
|
f9a0e0e70d | ||
|
|
3d3285d1ee | ||
|
|
c2017dd17c | ||
|
|
fb6d9ed0bc | ||
|
|
257dc4d0a7 | ||
|
|
5fdf1208a7 | ||
|
|
6708b72fd8 | ||
|
|
327b874fd6 | ||
|
|
cafd3c6025 | ||
|
|
9ecbaba3d4 | ||
|
|
4741198c78 | ||
|
|
577d5b8e6f | ||
|
|
307036bca0 | ||
|
|
ec4c79eb69 | ||
|
|
0affa4a90d | ||
|
|
8ef3867610 | ||
|
|
b9e61518a4 | ||
|
|
706f51c4f5 | ||
|
|
30a2c1a9b9 | ||
|
|
06315c55ad | ||
|
|
42af7ee315 | ||
|
|
f0d6abee5d | ||
|
|
21861a5884 | ||
|
|
0fb834fb38 | ||
|
|
60155c4c6b | ||
|
|
1ab8f31cbd | ||
|
|
ae5b3836e7 | ||
|
|
1cdd490789 | ||
|
|
e96a89d430 | ||
|
|
c606a29e79 | ||
|
|
afd8223eb4 | ||
|
|
a39ee994ff | ||
|
|
e25e258d48 | ||
|
|
1e8a60aeb9 | ||
|
|
27f3807a69 | ||
|
|
49961c215a | ||
|
|
b0cbecbdc5 | ||
|
|
1276435494 | ||
|
|
b68bf50359 | ||
|
|
ae125feae0 | ||
|
|
03c1792262 | ||
|
|
6c3d26fe5a | ||
|
|
1373b4cb40 | ||
|
|
ae389527b6 | ||
|
|
1390460438 | ||
|
|
0674934366 | ||
|
|
dbc0effe61 | ||
|
|
f0cf65a5a4 | ||
|
|
5696c9e7a8 | ||
|
|
3c871e2678 | ||
|
|
f4d61ee8dc | ||
|
|
e7d434458d | ||
|
|
00568cfd37 | ||
|
|
237894892d | ||
|
|
62bf37e9c3 | ||
|
|
4be9a409ec | ||
|
|
85d94d91c0 | ||
|
|
af4b0cc65e | ||
|
|
1f8f44af57 | ||
|
|
f3db563550 | ||
|
|
0aeaa8fb93 | ||
|
|
213856a1eb | ||
|
|
bc1cd27dd4 | ||
|
|
2f9d45bed3 | ||
|
|
bf5937da63 | ||
|
|
d04f0c296c | ||
|
|
ad2a1f5bf5 | ||
|
|
72a8f88738 | ||
|
|
3668466ee6 | ||
|
|
cecb218278 | ||
|
|
8cf911685a | ||
|
|
07fbb103e7 | ||
|
|
3195f05e56 | ||
|
|
67da6b1c53 | ||
|
|
0662173045 | ||
|
|
3d5c936fa3 | ||
|
|
e7f84b8aed | ||
|
|
ba5b533cb9 | ||
|
|
133dc4a69c | ||
|
|
0fd7203fa3 | ||
|
|
1a1b92bb72 | ||
|
|
715f371440 | ||
|
|
b1164921a0 | ||
|
|
b69245aedc | ||
|
|
3dc94a05c7 | ||
|
|
d0849e9f27 | ||
|
|
2ea47cf7fd | ||
|
|
6d23f4e13d | ||
|
|
8a9102bc8a | ||
|
|
02bed2eb3b | ||
|
|
84653d7677 | ||
|
|
40a9091b7d | ||
|
|
103ab039b3 | ||
|
|
af7148ce58 | ||
|
|
ff0bacff1d | ||
|
|
b684542e42 | ||
|
|
a1d78271fa | ||
|
|
1c75710424 | ||
|
|
89583cfe29 | ||
|
|
8e0b599b09 | ||
|
|
b8eda72d7b | ||
|
|
c0f483e570 | ||
|
|
083bde8149 | ||
|
|
ff3ccca3eb | ||
|
|
b4569d56e6 | ||
|
|
0b1171c5b2 | ||
|
|
48776d28bb | ||
|
|
88f932ad5a | ||
|
|
8bb8bf3b31 | ||
|
|
23a40f27c7 | ||
|
|
0a30fdfb27 | ||
|
|
f6c95b27b4 | ||
|
|
384543824d | ||
|
|
de2a6351c7 | ||
|
|
25495b737a | ||
|
|
e5ffaf3d97 | ||
|
|
48d41103b6 | ||
|
|
04a60211c6 | ||
|
|
55f4689984 | ||
|
|
9f02969dd2 | ||
|
|
fd833a65c5 | ||
|
|
16dfc65c64 | ||
|
|
67115e0dd6 | ||
|
|
5f6b966160 | ||
|
|
4a200d7343 | ||
|
|
aa75fb5592 | ||
|
|
5618e2e88b | ||
|
|
03ee3899d7 | ||
|
|
6b09f0379c | ||
|
|
fe565d2ef3 | ||
|
|
14e568e642 | ||
|
|
ec3b89a056 | ||
|
|
343484aff2 | ||
|
|
ec7ef689c9 | ||
|
|
312a768351 | ||
|
|
c4992aac74 | ||
|
|
df37db5fed | ||
|
|
d699e3a434 | ||
|
|
c111ee35b4 | ||
|
|
766c2dc2c5 | ||
|
|
ec484cd51d | ||
|
|
494545500f | ||
|
|
db9c7a77e5 | ||
|
|
5a2954b432 | ||
|
|
751c2bd421 | ||
|
|
3940f9b402 | ||
|
|
dd72afc115 | ||
|
|
7c87bf19d2 | ||
|
|
3d5d26f6ec | ||
|
|
12eec8cc6b | ||
|
|
1d17b4be9e | ||
|
|
4896aad901 | ||
|
|
46b6ab82d5 | ||
|
|
523db3c659 | ||
|
|
4614ee0ae2 | ||
|
|
a874b9b455 | ||
|
|
998e4dd802 | ||
|
|
cca17e0e81 | ||
|
|
f9deaccb5a | ||
|
|
04a9679429 | ||
|
|
caffec6b2a | ||
|
|
17c98e85ac | ||
|
|
2c46ac079c | ||
|
|
95b4325f3e | ||
|
|
673d717ef1 | ||
|
|
8c9460c6c0 | ||
|
|
b1d1f7ec72 | ||
|
|
7d394d5a13 | ||
|
|
e07ffc69ed | ||
|
|
80f7d1e331 | ||
|
|
f06775de4b | ||
|
|
2184d73e3e | ||
|
|
0ff2e70867 | ||
|
|
e7e83946eb | ||
|
|
2de2614d6f | ||
|
|
67349a134d | ||
|
|
25caea0b72 | ||
|
|
5522884bb2 | ||
|
|
9de9ba19e7 | ||
|
|
05f1f929e1 | ||
|
|
ab6573b3cf | ||
|
|
7ba12262ca | ||
|
|
82f5be2568 | ||
|
|
e33b4a3ec6 | ||
|
|
40f28071d6 | ||
|
|
2783bcd1e4 | ||
|
|
3e9db084b0 | ||
|
|
a648993f78 | ||
|
|
75416b8b1b | ||
|
|
6f273d5e58 | ||
|
|
8654512584 | ||
|
|
46b2e0b816 | ||
|
|
d708ef5300 | ||
|
|
9c8c667c41 | ||
|
|
ff270e6895 | ||
|
|
7869bd3b2b | ||
|
|
36d932e9fe | ||
|
|
5b2f3eb9b4 | ||
|
|
ddb1d6746b | ||
|
|
f2440e0e2e | ||
|
|
af6245eed7 | ||
|
|
4397e09016 | ||
|
|
262d9f02ba | ||
|
|
45b0399766 | ||
|
|
3bee0deb11 | ||
|
|
27a7b96ffb | ||
|
|
11a845e21c | ||
|
|
6d6a79bcb6 | ||
|
|
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 | ||
|
|
49ff90aad1 | ||
|
|
6adaaf1965 |
BIN
.assets/codeberg.png
Normal file
BIN
.assets/codeberg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
.assets/fdroid-badge.png
Normal file
BIN
.assets/fdroid-badge.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 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. -->
|
||||||
28
.gitea/issue_template/feature_request.md
Normal file
28
.gitea/issue_template/feature_request.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
name: "Feature request"
|
||||||
|
about: "Request a feature!"
|
||||||
|
title: "[Feature] "
|
||||||
|
ref: "master"
|
||||||
|
labels:
|
||||||
|
|
||||||
|
- Kind/Feature
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Description
|
||||||
|
<!-- A clear and concise description of what the feature is and what problem it solves. -->
|
||||||
|
|
||||||
|
### Background
|
||||||
|
<!-- Any background information or context that would be helpful. -->
|
||||||
|
|
||||||
|
### Proposed Solution
|
||||||
|
<!--
|
||||||
|
- Describe the solution you'd like.
|
||||||
|
- A clear and concise description of what you want to happen.
|
||||||
|
- Include any alternative solutions or features you've considered.
|
||||||
|
- Add any technical details, mockups, or examples if available.
|
||||||
|
-->
|
||||||
|
|
||||||
|
### Additional Context
|
||||||
|
<!-- Add any other context, screenshots, or links to existing issues/discussions about the feature here. -->
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -56,6 +56,8 @@ gen-external-apklibs
|
|||||||
|
|
||||||
# NDK
|
# NDK
|
||||||
obj/
|
obj/
|
||||||
|
**/ndkHelperBin
|
||||||
|
**/.cxx
|
||||||
|
|
||||||
# IntelliJ IDEA
|
# IntelliJ IDEA
|
||||||
*.iml
|
*.iml
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
pipeline:
|
steps:
|
||||||
build:
|
build:
|
||||||
image: alvrme/alpine-android:android-33-jdk11
|
image: alvrme/alpine-android:android-34-jdk17
|
||||||
commands:
|
commands:
|
||||||
|
- apk add --no-cache python3
|
||||||
- ./gradlew :app:assembleRelease
|
- ./gradlew :app:assembleRelease
|
||||||
when:
|
when:
|
||||||
path: [ app/**, build.gradle ]
|
path: [ app/**, build.gradle ]
|
||||||
sign:
|
sign:
|
||||||
image: alvrme/alpine-android:android-33-jdk11
|
image: alvrme/alpine-android:android-34-jdk17
|
||||||
commands:
|
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 ]
|
secrets: [ APK_KS_PASS, APK_KS, APK_KS_ALIAS ]
|
||||||
when:
|
when:
|
||||||
event: [ tag ]
|
event: [ tag ]
|
||||||
@@ -17,11 +18,13 @@ pipeline:
|
|||||||
settings:
|
settings:
|
||||||
base_url: https://codeberg.org
|
base_url: https://codeberg.org
|
||||||
files:
|
files:
|
||||||
- LemmInfinity-signed.apk
|
- Eternity-signed.apk
|
||||||
api_key:
|
api_key:
|
||||||
from_secret: GITEA_ACCESS_TOKEN
|
from_secret: GITEA_ACCESS_TOKEN
|
||||||
target: main
|
target: main
|
||||||
prerelease: true
|
prerelease: true
|
||||||
note: "This is an alpha release. Expect many bugs and unfinished features!"
|
note: "Pending release notes..."
|
||||||
when:
|
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-34-jdk17
|
||||||
|
commands:
|
||||||
|
- apk add --no-cache python3
|
||||||
|
- ./gradlew :app:assembleNightly
|
||||||
|
sign:
|
||||||
|
image: alvrme/alpine-android:android-34-jdk17
|
||||||
|
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,98 @@
|
|||||||
<h1 align="center">
|
<h1 align="center">
|
||||||
Infinity for Lemmy
|
Eternity for Lemmy
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
<img align="right" src="https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy/raw/branch/master/fastlane/metadata/android/en-US/images/icon.png" width=200>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
|
||||||
<div align="center">
|
<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)
|
||||||
|
[](https://lemdro.id/c/eternityapp)
|
||||||
|
|
||||||
<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>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
<a href="https://f-droid.org/packages/eu.toldi.infinityforlemmy/">
|
||||||
|
<img src="./.assets/fdroid-badge.png" height="80">
|
||||||
|
</a>
|
||||||
|
<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://codeberg.org/Bazsalanszky/Eternity/releases/">
|
||||||
|
<img src="./.assets/codeberg.png" height="80">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Action Items for Infinity for Lemmy
|
## Features
|
||||||
|
|
||||||
Infinity for Lemmy 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
|
### Browsing Lemmy
|
||||||
- [x] Support for multiple account handling
|
|
||||||
- [x] Functionality for post upvotes/downvotes
|
- Explore various feeds (Subscribed/Local/All) and communities
|
||||||
- [x] Functionality to browse comments
|
- Subscribe or unsubscribe from specific communities, with the option to block
|
||||||
- [ ] Capability for creating a new post
|
- Discover communities federated with the current instance
|
||||||
- [x] Ability to create comments
|
- Favorite a community for quick access
|
||||||
- [ ] Elimination of code/string references specific to Reddit
|
- Manage your subscriptions and blocked communities
|
||||||
- [ ] Incorporation of private messaging feature
|
|
||||||
- [ ] Feature for saving posts
|
### Content Engagement
|
||||||
- [ ] Account editing function
|
|
||||||
- [ ] Multi community view?
|
- 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
|
## Contributing
|
||||||
@@ -65,16 +110,21 @@ Don't forget to give the project a star! Thanks again!
|
|||||||
4. Push to the Branch (`git push origin feature/AmazingFeature`)
|
4. Push to the Branch (`git push origin feature/AmazingFeature`)
|
||||||
5. Open a Pull Request
|
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 also 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>
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
||||||
|
|
||||||
## License
|
## 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>
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
||||||
|
|
||||||
@@ -82,7 +132,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)
|
[@bazsalanszky@lemmy.toldi.eu](https://lemmy.toldi.eu/u/bazsalanszky) - (Owner)
|
||||||
|
|
||||||
|
Project Link: [https://codeberg.org/Bazsalanszky/Eternity](https://codeberg.org/Bazsalanszky/Eternity)
|
||||||
Project Link: [https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy](https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy)
|
|
||||||
|
|
||||||
<p align="right">(<a href="#top">back to top</a>)</p>
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
||||||
|
|||||||
125
app/build.gradle
125
app/build.gradle
@@ -1,15 +1,28 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application'
|
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 {
|
android {
|
||||||
compileSdk 33
|
compileSdk 34
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "eu.toldi.infinityforlemmy"
|
applicationId "eu.toldi.infinityforlemmy"
|
||||||
minSdk 21
|
minSdk 21
|
||||||
targetSdk 33
|
targetSdk 34
|
||||||
versionCode 126
|
versionCode 136
|
||||||
versionName "0.0.6"
|
versionName "0.2.1"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
javaCompileOptions {
|
javaCompileOptions {
|
||||||
annotationProcessorOptions {
|
annotationProcessorOptions {
|
||||||
@@ -18,10 +31,13 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
|
|
||||||
release {
|
release {
|
||||||
minifyEnabled false
|
minifyEnabled true
|
||||||
|
shrinkResources true
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
}
|
}
|
||||||
|
|
||||||
minifiedRelease {
|
minifiedRelease {
|
||||||
initWith buildTypes.release
|
initWith buildTypes.release
|
||||||
zipAlignEnabled true
|
zipAlignEnabled true
|
||||||
@@ -33,7 +49,33 @@ android {
|
|||||||
applicationIdSuffix '.debug'
|
applicationIdSuffix '.debug'
|
||||||
versionNameSuffix ' (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 {
|
compileOptions {
|
||||||
sourceCompatibility JavaVersion.VERSION_11
|
sourceCompatibility JavaVersion.VERSION_11
|
||||||
targetCompatibility JavaVersion.VERSION_11
|
targetCompatibility JavaVersion.VERSION_11
|
||||||
@@ -56,7 +98,37 @@ android {
|
|||||||
packagingOptions {
|
packagingOptions {
|
||||||
doNotStrip '**/*.so'
|
doNotStrip '**/*.so'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Kotlin jvm target
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = '11'
|
||||||
|
}
|
||||||
|
|
||||||
namespace 'eu.toldi.infinityforlemmy'
|
namespace 'eu.toldi.infinityforlemmy'
|
||||||
|
|
||||||
|
|
||||||
|
task rearrangeClass(type: Exec) {
|
||||||
|
commandLine 'python3', '../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 {
|
dependencies {
|
||||||
@@ -67,6 +139,7 @@ dependencies {
|
|||||||
implementation 'androidx.cardview:cardview:1.0.0'
|
implementation 'androidx.cardview:cardview:1.0.0'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||||
|
|
||||||
def lifecycleVersion = "2.5.1"
|
def lifecycleVersion = "2.5.1"
|
||||||
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
|
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
|
||||||
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycleVersion"
|
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycleVersion"
|
||||||
@@ -112,6 +185,7 @@ dependencies {
|
|||||||
implementation "com.google.dagger:dagger:$daggerVersion"
|
implementation "com.google.dagger:dagger:$daggerVersion"
|
||||||
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
|
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
|
||||||
|
|
||||||
|
|
||||||
// Binding
|
// Binding
|
||||||
// NOTE: Deprecated in favor of viewbinding
|
// NOTE: Deprecated in favor of viewbinding
|
||||||
def butterknifeVersion = "10.2.3"
|
def butterknifeVersion = "10.2.3"
|
||||||
@@ -153,11 +227,12 @@ dependencies {
|
|||||||
def glideVersion = "4.12.0"
|
def glideVersion = "4.12.0"
|
||||||
implementation "com.github.bumptech.glide:glide:$glideVersion"
|
implementation "com.github.bumptech.glide:glide:$glideVersion"
|
||||||
annotationProcessor "com.github.bumptech.glide:compiler:$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 'jp.wasabeef:glide-transformations:4.3.0'
|
||||||
implementation 'com.github.santalu:aspect-ratio-imageview:1.0.9'
|
implementation 'com.github.santalu:aspect-ratio-imageview:1.0.9'
|
||||||
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.23'
|
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.23'
|
||||||
def bivVersion = "1.8.1"
|
def bivVersion = "1.8.1"
|
||||||
implementation "com.github.piasy:BigImageViewer:bivVersion"
|
implementation "com.github.piasy:BigImageViewer:$bivVersion"
|
||||||
implementation "com.github.piasy:GlideImageLoader:$bivVersion"
|
implementation "com.github.piasy:GlideImageLoader:$bivVersion"
|
||||||
implementation "com.github.piasy:GlideImageViewFactory:$bivVersion"
|
implementation "com.github.piasy:GlideImageViewFactory:$bivVersion"
|
||||||
|
|
||||||
@@ -169,6 +244,8 @@ dependencies {
|
|||||||
implementation "io.noties.markwon:recycler-table:$markwonVersion"
|
implementation "io.noties.markwon:recycler-table:$markwonVersion"
|
||||||
implementation "io.noties.markwon:simple-ext:$markwonVersion"
|
implementation "io.noties.markwon:simple-ext:$markwonVersion"
|
||||||
implementation "io.noties.markwon:inline-parser:$markwonVersion"
|
implementation "io.noties.markwon:inline-parser:$markwonVersion"
|
||||||
|
implementation "io.noties.markwon:image-glide:$markwonVersion"
|
||||||
|
implementation "io.noties.markwon:html:$markwonVersion"
|
||||||
implementation 'com.atlassian.commonmark:commonmark-ext-gfm-tables:0.14.0'
|
implementation 'com.atlassian.commonmark:commonmark-ext-gfm-tables:0.14.0'
|
||||||
implementation 'me.saket:better-link-movement-method:2.2.0'
|
implementation 'me.saket:better-link-movement-method:2.2.0'
|
||||||
|
|
||||||
@@ -178,8 +255,6 @@ dependencies {
|
|||||||
// Loading ProgressBar
|
// Loading ProgressBar
|
||||||
implementation 'com.lsjwzh:materialloadingprogressbar:0.5.8-RELEASE'
|
implementation 'com.lsjwzh:materialloadingprogressbar:0.5.8-RELEASE'
|
||||||
|
|
||||||
// Customizable TextView
|
|
||||||
implementation 'com.libRG:customtextview:2.4'
|
|
||||||
|
|
||||||
// Dismiss gesturing
|
// Dismiss gesturing
|
||||||
implementation 'app.futured.hauler:hauler:5.0.0'
|
implementation 'app.futured.hauler:hauler:5.0.0'
|
||||||
@@ -195,8 +270,42 @@ dependencies {
|
|||||||
|
|
||||||
implementation 'com.otaliastudios:zoomlayout:1.9.0'
|
implementation 'com.otaliastudios:zoomlayout:1.9.0'
|
||||||
|
|
||||||
|
implementation 'androidx.core:core-splashscreen:1.0.1'
|
||||||
|
|
||||||
|
|
||||||
/**** Builds and flavors ****/
|
/**** Builds and flavors ****/
|
||||||
// debugImplementation because LeakCanary should only run in debug builds.
|
// debugImplementation because LeakCanary should only run in debug builds.
|
||||||
//debugImplementation 'com.squareup.leakcanary:leakcanary-android:x.y'
|
//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, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
app/proguard-rules.pro
vendored
2
app/proguard-rules.pro
vendored
@@ -5,6 +5,8 @@
|
|||||||
# If you keep the line number information, uncomment this to
|
# If you keep the line number information, uncomment this to
|
||||||
# hide the original source file name.
|
# hide the original source file name.
|
||||||
#-renamesourcefileattribute SourceFile
|
#-renamesourcefileattribute SourceFile
|
||||||
|
-dontobfuscate
|
||||||
|
-keepattributes SourceFile,LineNumberTable
|
||||||
|
|
||||||
## Preferences reflection
|
## Preferences reflection
|
||||||
-keep class * extends androidx.preference.PreferenceFragmentCompat
|
-keep class * extends androidx.preference.PreferenceFragmentCompat
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="application_name" translatable="false">Infinity for Lemmy (Debug)</string>
|
<string name="application_name" translatable="false">Eternity (Debug)</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools">
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
package="eu.toldi.infinityforlemmy">
|
||||||
|
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
@@ -16,6 +17,7 @@
|
|||||||
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||||
android:maxSdkVersion="22" />
|
android:maxSdkVersion="22" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
|
||||||
|
|
||||||
<uses-permission-sdk-23
|
<uses-permission-sdk-23
|
||||||
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||||
@@ -36,9 +38,32 @@
|
|||||||
android:usesCleartextTraffic="true"
|
android:usesCleartextTraffic="true"
|
||||||
tools:replace="android:label">
|
tools:replace="android:label">
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.HistoryActivity"
|
android:name=".activities.InstanceInfoActivity"
|
||||||
android:exported="false"
|
android:label="@string/instance_info"
|
||||||
android:label="@string/history_activity_label"
|
android:configChanges="orientation|screenLayout|screenSize|layoutDirection"
|
||||||
|
android:parentActivityName=".activities.MainActivity"
|
||||||
|
android:theme="@style/AppTheme.Slidable" />
|
||||||
|
<activity
|
||||||
|
android:name=".activities.CommentFilterUsageListingActivity"
|
||||||
|
android:parentActivityName=".activities.SettingsActivity"
|
||||||
|
android:theme="@style/AppTheme.NoActionBar"
|
||||||
|
android:exported="false" />
|
||||||
|
<activity
|
||||||
|
android:name=".activities.CustomizeCommentFilterActivity"
|
||||||
|
android:label="@string/customize_comment_filter_activity_label"
|
||||||
|
android:parentActivityName=".activities.SettingsActivity"
|
||||||
|
android:theme="@style/AppTheme.NoActionBar"
|
||||||
|
android:exported="false" />
|
||||||
|
<activity
|
||||||
|
android:name=".activities.CommentFilterPreferenceActivity"
|
||||||
|
android:label="@string/comment_filter_preference_activity_label"
|
||||||
|
android:parentActivityName=".activities.SettingsActivity"
|
||||||
|
android:theme="@style/AppTheme.NoActionBar"
|
||||||
|
android:exported="false" />
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".activities.BlockedThingListingActivity"
|
||||||
|
android:label="@string/blocks"
|
||||||
android:parentActivityName=".activities.MainActivity"
|
android:parentActivityName=".activities.MainActivity"
|
||||||
android:theme="@style/AppTheme.Slidable" />
|
android:theme="@style/AppTheme.Slidable" />
|
||||||
<activity
|
<activity
|
||||||
@@ -111,11 +136,7 @@
|
|||||||
android:name=".activities.FetchRandomSubredditOrPostActivity"
|
android:name=".activities.FetchRandomSubredditOrPostActivity"
|
||||||
android:parentActivityName=".activities.MainActivity"
|
android:parentActivityName=".activities.MainActivity"
|
||||||
android:theme="@style/AppTheme.NoActionBar" />
|
android:theme="@style/AppTheme.NoActionBar" />
|
||||||
<activity
|
|
||||||
android:name=".activities.GiveAwardActivity"
|
|
||||||
android:label="@string/give_award_activity_label"
|
|
||||||
android:parentActivityName=".activities.MainActivity"
|
|
||||||
android:theme="@style/AppTheme.Slidable" />
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.SelectUserFlairActivity"
|
android:name=".activities.SelectUserFlairActivity"
|
||||||
android:parentActivityName=".activities.MainActivity"
|
android:parentActivityName=".activities.MainActivity"
|
||||||
@@ -134,6 +155,7 @@
|
|||||||
<service
|
<service
|
||||||
android:name=".services.DownloadMediaService"
|
android:name=".services.DownloadMediaService"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
|
android:foregroundServiceType="dataSync"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
@@ -151,6 +173,7 @@
|
|||||||
<service
|
<service
|
||||||
android:name=".services.DownloadRedditVideoService"
|
android:name=".services.DownloadRedditVideoService"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
|
android:foregroundServiceType="dataSync"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
@@ -299,7 +322,7 @@
|
|||||||
<data android:host="feddit.de" />
|
<data android:host="feddit.de" />
|
||||||
<data android:host="lemmy.fmhy.ml" />
|
<data android:host="lemmy.fmhy.ml" />
|
||||||
<data android:host="lemmy.ca" />
|
<data android:host="lemmy.ca" />
|
||||||
<data android:host="www.hexbear.net" />
|
<data android:host="hexbear.net" />
|
||||||
<data android:host="programming.dev" />
|
<data android:host="programming.dev" />
|
||||||
<data android:host="lemmy.dbzer0.com" />
|
<data android:host="lemmy.dbzer0.com" />
|
||||||
<data android:host="lemmy.blahaj.zone" />
|
<data android:host="lemmy.blahaj.zone" />
|
||||||
@@ -430,12 +453,38 @@
|
|||||||
android:label="@string/application_name"
|
android:label="@string/application_name"
|
||||||
android:theme="@style/AppTheme.Launcher"
|
android:theme="@style/AppTheme.Launcher"
|
||||||
android:windowSoftInputMode="adjustPan">
|
android:windowSoftInputMode="adjustPan">
|
||||||
|
<intent-filter>
|
||||||
|
<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>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</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
|
<activity
|
||||||
android:name=".activities.LoginActivity"
|
android:name=".activities.LoginActivity"
|
||||||
android:configChanges="orientation|screenLayout|screenSize|layoutDirection"
|
android:configChanges="orientation|screenLayout|screenSize|layoutDirection"
|
||||||
@@ -487,10 +536,12 @@
|
|||||||
<service
|
<service
|
||||||
android:name=".services.SubmitPostService"
|
android:name=".services.SubmitPostService"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
|
android:foregroundServiceType="dataSync"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
<service
|
<service
|
||||||
android:name=".services.EditProfileService"
|
android:name=".services.EditProfileService"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
|
android:foregroundServiceType="dataSync"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
|
|
||||||
<receiver android:name=".broadcastreceivers.DownloadedMediaDeleteActionBroadcastReceiver" />
|
<receiver android:name=".broadcastreceivers.DownloadedMediaDeleteActionBroadcastReceiver" />
|
||||||
|
|||||||
BIN
app/src/main/ic_launcher-playstore.png
Normal file
BIN
app/src/main/ic_launcher-playstore.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
@@ -2,16 +2,22 @@ package eu.toldi.infinityforlemmy;
|
|||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import dagger.BindsInstance;
|
import dagger.BindsInstance;
|
||||||
import dagger.Component;
|
import dagger.Component;
|
||||||
import eu.toldi.infinityforlemmy.activities.AccountPostsActivity;
|
import eu.toldi.infinityforlemmy.activities.AccountPostsActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.AccountSavedThingActivity;
|
import eu.toldi.infinityforlemmy.activities.AccountSavedThingActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.BlockedThingListingActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.CommentActivity;
|
import eu.toldi.infinityforlemmy.activities.CommentActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.CommentFilterPreferenceActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.CommentFilterUsageListingActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.CreateMultiRedditActivity;
|
import eu.toldi.infinityforlemmy.activities.CreateMultiRedditActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.CustomThemeListingActivity;
|
import eu.toldi.infinityforlemmy.activities.CustomThemeListingActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.CustomThemePreviewActivity;
|
import eu.toldi.infinityforlemmy.activities.CustomThemePreviewActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.CustomizeCommentFilterActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.CustomizePostFilterActivity;
|
import eu.toldi.infinityforlemmy.activities.CustomizePostFilterActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.CustomizeThemeActivity;
|
import eu.toldi.infinityforlemmy.activities.CustomizeThemeActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.EditCommentActivity;
|
import eu.toldi.infinityforlemmy.activities.EditCommentActivity;
|
||||||
@@ -22,8 +28,8 @@ import eu.toldi.infinityforlemmy.activities.FetchRandomSubredditOrPostActivity;
|
|||||||
import eu.toldi.infinityforlemmy.activities.FilteredPostsActivity;
|
import eu.toldi.infinityforlemmy.activities.FilteredPostsActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.FullMarkdownActivity;
|
import eu.toldi.infinityforlemmy.activities.FullMarkdownActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.GiveAwardActivity;
|
import eu.toldi.infinityforlemmy.activities.GiveAwardActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.HistoryActivity;
|
|
||||||
import eu.toldi.infinityforlemmy.activities.InboxActivity;
|
import eu.toldi.infinityforlemmy.activities.InboxActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.InstanceInfoActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.LockScreenActivity;
|
import eu.toldi.infinityforlemmy.activities.LockScreenActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.LoginActivity;
|
import eu.toldi.infinityforlemmy.activities.LoginActivity;
|
||||||
@@ -65,14 +71,18 @@ import eu.toldi.infinityforlemmy.activities.ViewVideoActivity;
|
|||||||
import eu.toldi.infinityforlemmy.activities.WebViewActivity;
|
import eu.toldi.infinityforlemmy.activities.WebViewActivity;
|
||||||
import eu.toldi.infinityforlemmy.activities.WikiActivity;
|
import eu.toldi.infinityforlemmy.activities.WikiActivity;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.AccountChooserBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.AccountChooserBottomSheetFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.CommentMoreBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.FlairBottomSheetFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.fragments.BlockedCommunitiesListingFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.fragments.BlockedInstancesListingFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.fragments.BlockedUsersListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.CommentsListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.CommentsListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.FollowedUsersListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.FollowedUsersListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.HistoryPostFragment;
|
|
||||||
import eu.toldi.infinityforlemmy.fragments.InboxFragment;
|
import eu.toldi.infinityforlemmy.fragments.InboxFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.MorePostsInfoFragment;
|
import eu.toldi.infinityforlemmy.fragments.MorePostsInfoFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.MultiRedditListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.MultiRedditListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.fragments.PrivateMessageFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.SidebarFragment;
|
import eu.toldi.infinityforlemmy.fragments.SidebarFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.SubredditListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.SubredditListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.SubscribedSubredditsListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.SubscribedSubredditsListingFragment;
|
||||||
@@ -105,7 +115,7 @@ import eu.toldi.infinityforlemmy.settings.TranslationFragment;
|
|||||||
import eu.toldi.infinityforlemmy.settings.VideoPreferenceFragment;
|
import eu.toldi.infinityforlemmy.settings.VideoPreferenceFragment;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Component(modules = {AppModule.class, NetworkModule.class})
|
@Component(modules = {AppModule.class, NetworkModule.class, PostEnricherModule.class})
|
||||||
public interface AppComponent {
|
public interface AppComponent {
|
||||||
void inject(MainActivity mainActivity);
|
void inject(MainActivity mainActivity);
|
||||||
|
|
||||||
@@ -301,12 +311,27 @@ public interface AppComponent {
|
|||||||
|
|
||||||
void inject(MaterialYouWorker materialYouWorker);
|
void inject(MaterialYouWorker materialYouWorker);
|
||||||
|
|
||||||
void inject(HistoryPostFragment historyPostFragment);
|
|
||||||
|
|
||||||
void inject(HistoryActivity historyActivity);
|
|
||||||
|
|
||||||
void inject(MorePostsInfoFragment morePostsInfoFragment);
|
void inject(MorePostsInfoFragment morePostsInfoFragment);
|
||||||
|
|
||||||
|
void inject(BlockedThingListingActivity blockedThingListingActivity);
|
||||||
|
|
||||||
|
void inject(BlockedCommunitiesListingFragment blockedCommunitiesListingFragment);
|
||||||
|
|
||||||
|
void inject(BlockedUsersListingFragment blockedUsersListingFragment);
|
||||||
|
|
||||||
|
void inject(BlockedInstancesListingFragment blockedInstancesListingFragment);
|
||||||
|
|
||||||
|
void inject(CommentMoreBottomSheetFragment commentMoreBottomSheetFragment);
|
||||||
|
|
||||||
|
void inject(PrivateMessageFragment privateMessageFragment);
|
||||||
|
|
||||||
|
void inject(@NotNull InstanceInfoActivity instanceInfoActivity);
|
||||||
|
|
||||||
|
void inject(CommentFilterPreferenceActivity commentFilterPreferenceActivity);
|
||||||
|
|
||||||
|
void inject(CustomizeCommentFilterActivity customizeCommentFilterActivity);
|
||||||
|
|
||||||
|
void inject(CommentFilterUsageListingActivity commentFilterUsageListingActivity);
|
||||||
|
|
||||||
@Component.Factory
|
@Component.Factory
|
||||||
interface Factory {
|
interface Factory {
|
||||||
|
|||||||
@@ -0,0 +1,85 @@
|
|||||||
|
package eu.toldi.infinityforlemmy;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.drawable.GradientDrawable;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import androidx.appcompat.widget.AppCompatTextView;
|
||||||
|
import android.content.res.TypedArray;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class CustomTextView extends AppCompatTextView {
|
||||||
|
|
||||||
|
private float radius = 6f;
|
||||||
|
private boolean roundedView = true;
|
||||||
|
private int shape = 0;
|
||||||
|
|
||||||
|
public CustomTextView(Context context) {
|
||||||
|
super(context);
|
||||||
|
init(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomTextView(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
init(attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
init(attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init(AttributeSet attrs) {
|
||||||
|
if (attrs != null) {
|
||||||
|
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CustomTextView);
|
||||||
|
|
||||||
|
radius = a.getDimension(R.styleable.CustomTextView_lib_setRadius, radius);
|
||||||
|
roundedView = a.getBoolean(R.styleable.CustomTextView_lib_setRoundedView, roundedView);
|
||||||
|
shape = a.getInt(R.styleable.CustomTextView_lib_setShape, shape);
|
||||||
|
|
||||||
|
a.recycle();
|
||||||
|
}
|
||||||
|
|
||||||
|
updateBackground();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateBackground() {
|
||||||
|
GradientDrawable drawable = new GradientDrawable();
|
||||||
|
|
||||||
|
if (shape == 0) { // Rectangle
|
||||||
|
drawable.setShape(GradientDrawable.RECTANGLE);
|
||||||
|
} else if (shape == 1) { // Oval
|
||||||
|
drawable.setShape(GradientDrawable.OVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roundedView) {
|
||||||
|
drawable.setCornerRadius(radius);
|
||||||
|
} else {
|
||||||
|
drawable.setCornerRadius(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setBackground(drawable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundColor(int color) {
|
||||||
|
GradientDrawable background = (GradientDrawable) this.getBackground();
|
||||||
|
background.setColor(color);
|
||||||
|
this.setBackground(background);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBorderColor(int borderColor, int borderWidthDp) {
|
||||||
|
GradientDrawable background = (GradientDrawable) this.getBackground();
|
||||||
|
background.setStroke(dpToPx(borderWidthDp), borderColor);
|
||||||
|
this.setBackground(background);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBorderColor(int borderColor) {
|
||||||
|
this.setBorderColor(borderColor, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int dpToPx(int dp) {
|
||||||
|
float density = getContext().getResources().getDisplayMetrics().density;
|
||||||
|
return Math.round(dp * density);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
package eu.toldi.infinityforlemmy;
|
||||||
|
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.ColorFilter;
|
||||||
|
import android.graphics.Rect;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
|
||||||
|
public class DualBadgeDrawable extends Drawable {
|
||||||
|
private Drawable leftBadge;
|
||||||
|
private Drawable rightBadge;
|
||||||
|
|
||||||
|
public DualBadgeDrawable(Drawable leftBadge, Drawable rightBadge) {
|
||||||
|
this.leftBadge = leftBadge;
|
||||||
|
this.rightBadge = rightBadge;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Canvas canvas) {
|
||||||
|
if (leftBadge == null || rightBadge == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int width = getBounds().width();
|
||||||
|
int height = getBounds().height();
|
||||||
|
|
||||||
|
// Draw the left badge on the left half of the canvas
|
||||||
|
Rect leftRect = new Rect(0, 0, width / 2, height);
|
||||||
|
leftBadge.setBounds(leftRect);
|
||||||
|
leftBadge.draw(canvas);
|
||||||
|
|
||||||
|
// Draw the right badge on the right half of the canvas
|
||||||
|
Rect rightRect = new Rect(width / 2, 0, width, height);
|
||||||
|
rightBadge.setBounds(rightRect);
|
||||||
|
rightBadge.draw(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAlpha(int alpha) {
|
||||||
|
if (leftBadge != null) {
|
||||||
|
leftBadge.setAlpha(alpha);
|
||||||
|
}
|
||||||
|
if (rightBadge != null) {
|
||||||
|
rightBadge.setAlpha(alpha);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setColorFilter(@Nullable ColorFilter colorFilter) {
|
||||||
|
if (leftBadge != null) {
|
||||||
|
leftBadge.setColorFilter(colorFilter);
|
||||||
|
}
|
||||||
|
if (rightBadge != null) {
|
||||||
|
rightBadge.setColorFilter(colorFilter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getOpacity() {
|
||||||
|
return leftBadge != null ? leftBadge.getOpacity() : rightBadge.getOpacity();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIntrinsicWidth() {
|
||||||
|
int leftWidth = leftBadge != null ? leftBadge.getIntrinsicWidth() : 0;
|
||||||
|
int rightWidth = rightBadge != null ? rightBadge.getIntrinsicWidth() : 0;
|
||||||
|
return leftWidth + rightWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getIntrinsicHeight() {
|
||||||
|
int leftHeight = leftBadge != null ? leftBadge.getIntrinsicHeight() : 0;
|
||||||
|
int rightHeight = rightBadge != null ? rightBadge.getIntrinsicHeight() : 0;
|
||||||
|
return Math.max(leftHeight, rightHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,135 +0,0 @@
|
|||||||
package eu.toldi.infinityforlemmy;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Handler;
|
|
||||||
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
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;
|
|
||||||
|
|
||||||
public class FetchGfycatOrRedgifsVideoLinks {
|
|
||||||
|
|
||||||
public interface FetchGfycatOrRedgifsVideoLinksListener {
|
|
||||||
void success(String webm, String mp4);
|
|
||||||
void failed(int errorCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void fetchGfycatVideoLinks(Executor executor, Handler handler, Retrofit gfycatRetrofit,
|
|
||||||
String gfycatId,
|
|
||||||
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
|
|
||||||
executor.execute(() -> {
|
|
||||||
try {
|
|
||||||
Response<String> response = gfycatRetrofit.create(GfycatAPI.class).getGfycatData(gfycatId).execute();
|
|
||||||
if (response.isSuccessful()) {
|
|
||||||
parseGfycatVideoLinks(handler, response.body(), fetchGfycatOrRedgifsVideoLinksListener);
|
|
||||||
} else {
|
|
||||||
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(response.code()));
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(-1));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void fetchRedgifsVideoLinks(Context context, Executor executor, Handler handler, Retrofit redgifsRetrofit,
|
|
||||||
SharedPreferences currentAccountSharedPreferences,
|
|
||||||
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();
|
|
||||||
if (response.isSuccessful()) {
|
|
||||||
parseRedgifsVideoLinks(handler, response.body(), fetchGfycatOrRedgifsVideoLinksListener);
|
|
||||||
} else {
|
|
||||||
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(response.code()));
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(-1));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(Executor executor, Handler handler,
|
|
||||||
Call<String> gfycatCall,
|
|
||||||
boolean isGfycatVideo,
|
|
||||||
boolean automaticallyTryRedgifs,
|
|
||||||
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
|
|
||||||
executor.execute(() -> {
|
|
||||||
try {
|
|
||||||
Response<String> response = gfycatCall.execute();
|
|
||||||
if (response.isSuccessful()) {
|
|
||||||
if (isGfycatVideo) {
|
|
||||||
parseGfycatVideoLinks(handler, response.body(), fetchGfycatOrRedgifsVideoLinksListener);
|
|
||||||
} else {
|
|
||||||
parseRedgifsVideoLinks(handler, response.body(), fetchGfycatOrRedgifsVideoLinksListener);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (response.code() == 404 && isGfycatVideo && automaticallyTryRedgifs) {
|
|
||||||
fetchGfycatOrRedgifsVideoLinksInRecyclerViewAdapter(executor, handler, gfycatCall.clone(),
|
|
||||||
false, false, fetchGfycatOrRedgifsVideoLinksListener);
|
|
||||||
} else {
|
|
||||||
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(response.code()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(-1));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void parseGfycatVideoLinks(Handler handler, String response,
|
|
||||||
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
|
|
||||||
try {
|
|
||||||
JSONObject jsonObject = new JSONObject(response);
|
|
||||||
String mp4 = jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY).has(JSONUtils.MP4_URL_KEY) ?
|
|
||||||
jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY).getString(JSONUtils.MP4_URL_KEY)
|
|
||||||
: jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY)
|
|
||||||
.getJSONObject(JSONUtils.CONTENT_URLS_KEY)
|
|
||||||
.getJSONObject(JSONUtils.MP4_KEY)
|
|
||||||
.getString(JSONUtils.URL_KEY);
|
|
||||||
String webm;
|
|
||||||
if (jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY).has(JSONUtils.WEBM_URL_KEY)) {
|
|
||||||
webm = jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY).getString(JSONUtils.WEBM_URL_KEY);
|
|
||||||
} else if (jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY).getJSONObject(JSONUtils.CONTENT_URLS_KEY).has(JSONUtils.WEBM_KEY)) {
|
|
||||||
webm = jsonObject.getJSONObject(JSONUtils.GFY_ITEM_KEY)
|
|
||||||
.getJSONObject(JSONUtils.CONTENT_URLS_KEY)
|
|
||||||
.getJSONObject(JSONUtils.WEBM_KEY)
|
|
||||||
.getString(JSONUtils.URL_KEY);
|
|
||||||
} else {
|
|
||||||
webm = mp4;
|
|
||||||
}
|
|
||||||
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.success(webm, mp4));
|
|
||||||
} catch (JSONException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(-1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void parseRedgifsVideoLinks(Handler handler, String response,
|
|
||||||
FetchGfycatOrRedgifsVideoLinksListener fetchGfycatOrRedgifsVideoLinksListener) {
|
|
||||||
try {
|
|
||||||
String mp4 = new JSONObject(response).getJSONObject(JSONUtils.GIF_KEY).getJSONObject(JSONUtils.URLS_KEY)
|
|
||||||
.getString(JSONUtils.HD_KEY);
|
|
||||||
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.success(mp4, mp4));
|
|
||||||
} catch (JSONException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
handler.post(() -> fetchGfycatOrRedgifsVideoLinksListener.failed(-1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
package eu.toldi.infinityforlemmy;
|
|
||||||
|
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.text.Html;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
|
|
||||||
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;
|
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class FetchMyInfo {
|
|
||||||
|
|
||||||
public static void fetchAccountInfo(final Retrofit retrofit, RedditDataRoomDatabase redditDataRoomDatabase,
|
|
||||||
String username,String accessToken, final FetchMyInfoListener fetchMyInfoListener) {
|
|
||||||
LemmyAPI api = retrofit.create(LemmyAPI.class);
|
|
||||||
|
|
||||||
Call<String> userInfo = api.userInfo(username,accessToken);
|
|
||||||
userInfo.enqueue(new Callback<String>() {
|
|
||||||
@Override
|
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
|
||||||
if (response.isSuccessful()) {
|
|
||||||
new ParseAndSaveAccountInfoAsyncTask(response.body(), redditDataRoomDatabase, fetchMyInfoListener).execute();
|
|
||||||
} else {
|
|
||||||
fetchMyInfoListener.onFetchMyInfoFailed(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
|
||||||
fetchMyInfoListener.onFetchMyInfoFailed(false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface FetchMyInfoListener {
|
|
||||||
void onFetchMyInfoSuccess(String name, String display_name,String profileImageUrl, String bannerImageUrl);
|
|
||||||
|
|
||||||
void onFetchMyInfoFailed(boolean parseFailed);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class ParseAndSaveAccountInfoAsyncTask extends AsyncTask<Void, Void, Void> {
|
|
||||||
private JSONObject jsonResponse;
|
|
||||||
private RedditDataRoomDatabase redditDataRoomDatabase;
|
|
||||||
private FetchMyInfoListener fetchMyInfoListener;
|
|
||||||
private boolean parseFailed;
|
|
||||||
|
|
||||||
private String name;
|
|
||||||
private String profileImageUrl;
|
|
||||||
private String bannerImageUrl;
|
|
||||||
|
|
||||||
private String display_name;
|
|
||||||
|
|
||||||
ParseAndSaveAccountInfoAsyncTask(String response, RedditDataRoomDatabase redditDataRoomDatabase,
|
|
||||||
FetchMyInfoListener fetchMyInfoListener) {
|
|
||||||
try {
|
|
||||||
jsonResponse = new JSONObject(response);
|
|
||||||
this.redditDataRoomDatabase = redditDataRoomDatabase;
|
|
||||||
this.fetchMyInfoListener = fetchMyInfoListener;
|
|
||||||
parseFailed = false;
|
|
||||||
} catch (JSONException e) {
|
|
||||||
fetchMyInfoListener.onFetchMyInfoFailed(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Void doInBackground(Void... voids) {
|
|
||||||
try {
|
|
||||||
JSONObject person = jsonResponse.getJSONObject("person_view").getJSONObject("person");
|
|
||||||
|
|
||||||
name = LemmyUtils.actorID2FullName(person.getString("actor_id"));
|
|
||||||
if (!person.isNull("avatar")) {
|
|
||||||
profileImageUrl = person.getString("avatar");
|
|
||||||
}
|
|
||||||
if (!person.isNull("banner")) {
|
|
||||||
bannerImageUrl = person.getString("banner");
|
|
||||||
}
|
|
||||||
display_name = person.getString("name");
|
|
||||||
redditDataRoomDatabase.accountDao().updateAccountInfo(name, profileImageUrl, bannerImageUrl);
|
|
||||||
} catch (JSONException e) {
|
|
||||||
parseFailed = true;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Void aVoid) {
|
|
||||||
if (!parseFailed) {
|
|
||||||
fetchMyInfoListener.onFetchMyInfoSuccess(name,display_name, profileImageUrl, bannerImageUrl);
|
|
||||||
} else {
|
|
||||||
fetchMyInfoListener.onFetchMyInfoFailed(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -49,7 +49,7 @@ public class FetchPostFilterReadPostsAndConcatenatedSubredditNames {
|
|||||||
if (anonymousSubscribedSubreddits != null && !anonymousSubscribedSubreddits.isEmpty()) {
|
if (anonymousSubscribedSubreddits != null && !anonymousSubscribedSubreddits.isEmpty()) {
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
for (SubscribedSubredditData s : anonymousSubscribedSubreddits) {
|
for (SubscribedSubredditData s : anonymousSubscribedSubreddits) {
|
||||||
stringBuilder.append(s.getName()).append("+");
|
stringBuilder.append(s.getQualified_name()).append(",");
|
||||||
}
|
}
|
||||||
if (stringBuilder.length() > 0) {
|
if (stringBuilder.length() > 0) {
|
||||||
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
|
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
package eu.toldi.infinityforlemmy;
|
||||||
|
|
||||||
|
import android.os.Handler;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Response;
|
||||||
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
|
public class FetchRedgifsVideoLinks {
|
||||||
|
|
||||||
|
public interface FetchRedgifsVideoLinksListener {
|
||||||
|
void success(String webm, String mp4);
|
||||||
|
void failed(int errorCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void fetchRedgifsVideoLinks(Executor executor, Handler handler, Retrofit redgifsRetrofit,
|
||||||
|
String redgifsId,
|
||||||
|
FetchRedgifsVideoLinksListener fetchRedgifsVideoLinksListener) {
|
||||||
|
executor.execute(() -> {
|
||||||
|
try {
|
||||||
|
Response<String> response = redgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(redgifsId).execute();
|
||||||
|
if (response.isSuccessful()) {
|
||||||
|
parseRedgifsVideoLinks(handler, response.body(), fetchRedgifsVideoLinksListener);
|
||||||
|
} else {
|
||||||
|
handler.post(() -> fetchRedgifsVideoLinksListener.failed(response.code()));
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
handler.post(() -> fetchRedgifsVideoLinksListener.failed(-1));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void fetchRedgifsVideoLinksInRecyclerViewAdapter(Executor executor, Handler handler,
|
||||||
|
Call<String> redgifsCall,
|
||||||
|
FetchRedgifsVideoLinksListener fetchRedgifsVideoLinksListener) {
|
||||||
|
executor.execute(() -> {
|
||||||
|
try {
|
||||||
|
Response<String> response = redgifsCall.execute();
|
||||||
|
if (response.isSuccessful()) {
|
||||||
|
parseRedgifsVideoLinks(handler, response.body(), fetchRedgifsVideoLinksListener);
|
||||||
|
} else {
|
||||||
|
handler.post(() -> fetchRedgifsVideoLinksListener.failed(response.code()));
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
handler.post(() -> fetchRedgifsVideoLinksListener.failed(-1));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void parseRedgifsVideoLinks(Handler handler, String response,
|
||||||
|
FetchRedgifsVideoLinksListener fetchRedgifsVideoLinksListener) {
|
||||||
|
try {
|
||||||
|
String mp4 = new JSONObject(response).getJSONObject(JSONUtils.GIF_KEY).getJSONObject(JSONUtils.URLS_KEY)
|
||||||
|
.getString(JSONUtils.HD_KEY);
|
||||||
|
handler.post(() -> fetchRedgifsVideoLinksListener.success(mp4, mp4));
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
handler.post(() -> fetchRedgifsVideoLinksListener.failed(-1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,6 +20,7 @@ import retrofit2.Response;
|
|||||||
public class FetchStreamableVideo {
|
public class FetchStreamableVideo {
|
||||||
public interface FetchStreamableVideoListener {
|
public interface FetchStreamableVideoListener {
|
||||||
void success(StreamableVideo streamableVideo);
|
void success(StreamableVideo streamableVideo);
|
||||||
|
|
||||||
void failed();
|
void failed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,7 +34,12 @@ public class FetchStreamableVideo {
|
|||||||
String title = jsonObject.getString(JSONUtils.TITLE_KEY);
|
String title = jsonObject.getString(JSONUtils.TITLE_KEY);
|
||||||
JSONObject filesObject = jsonObject.getJSONObject(JSONUtils.FILES_KEY);
|
JSONObject filesObject = jsonObject.getJSONObject(JSONUtils.FILES_KEY);
|
||||||
StreamableVideo.Media mp4 = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_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)));
|
handler.post(() -> fetchStreamableVideoListener.success(new StreamableVideo(title, mp4, mp4Mobile)));
|
||||||
} else {
|
} else {
|
||||||
handler.post(fetchStreamableVideoListener::failed);
|
handler.post(fetchStreamableVideoListener::failed);
|
||||||
@@ -55,7 +61,12 @@ public class FetchStreamableVideo {
|
|||||||
String title = jsonObject.getString(JSONUtils.TITLE_KEY);
|
String title = jsonObject.getString(JSONUtils.TITLE_KEY);
|
||||||
JSONObject filesObject = jsonObject.getJSONObject(JSONUtils.FILES_KEY);
|
JSONObject filesObject = jsonObject.getJSONObject(JSONUtils.FILES_KEY);
|
||||||
StreamableVideo.Media mp4 = parseMedia(filesObject.getJSONObject(JSONUtils.MP4_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) {
|
if (mp4 == null && mp4Mobile == null) {
|
||||||
handler.post(fetchStreamableVideoListener::failed);
|
handler.post(fetchStreamableVideoListener::failed);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -11,6 +11,16 @@ import android.os.Bundle;
|
|||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.Toast;
|
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.evernote.android.state.StateSaver;
|
||||||
import com.livefront.bridge.Bridge;
|
import com.livefront.bridge.Bridge;
|
||||||
import com.livefront.bridge.SavedStateHandler;
|
import com.livefront.bridge.SavedStateHandler;
|
||||||
@@ -18,15 +28,11 @@ import com.livefront.bridge.SavedStateHandler;
|
|||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
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.activities.LockScreenActivity;
|
||||||
import eu.toldi.infinityforlemmy.broadcastreceivers.NetworkWifiStatusReceiver;
|
import eu.toldi.infinityforlemmy.broadcastreceivers.NetworkWifiStatusReceiver;
|
||||||
import eu.toldi.infinityforlemmy.broadcastreceivers.WallpaperChangeReceiver;
|
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.font.TitleFontFamily;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
|
import okhttp3.Call;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
|
||||||
public class Infinity extends Application implements LifecycleObserver {
|
public class Infinity extends Application implements LifecycleObserver {
|
||||||
public Typeface typeface;
|
public Typeface typeface;
|
||||||
@@ -55,6 +63,9 @@ public class Infinity extends Application implements LifecycleObserver {
|
|||||||
@Inject
|
@Inject
|
||||||
@Named("security")
|
@Named("security")
|
||||||
SharedPreferences mSecuritySharedPreferences;
|
SharedPreferences mSecuritySharedPreferences;
|
||||||
|
@Inject
|
||||||
|
@Named("glide")
|
||||||
|
OkHttpClient glideOkHttpClient;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
@@ -159,6 +170,9 @@ public class Infinity extends Application implements LifecycleObserver {
|
|||||||
registerReceiver(mNetworkWifiStatusReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
|
registerReceiver(mNetworkWifiStatusReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
|
||||||
|
|
||||||
registerReceiver(new WallpaperChangeReceiver(mSharedPreferences), new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED));
|
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)
|
@OnLifecycleEvent(Lifecycle.Event.ON_START)
|
||||||
|
|||||||
@@ -9,16 +9,16 @@ import javax.inject.Singleton;
|
|||||||
|
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
|
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||||
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
|
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 eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import okhttp3.ConnectionPool;
|
import okhttp3.ConnectionPool;
|
||||||
import okhttp3.Interceptor;
|
import okhttp3.Interceptor;
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
import retrofit2.adapter.guava.GuavaCallAdapterFactory;
|
|
||||||
import retrofit2.converter.gson.GsonConverterFactory;
|
|
||||||
import retrofit2.converter.scalars.ScalarsConverterFactory;
|
|
||||||
|
|
||||||
@Module(includes = AppModule.class)
|
@Module(includes = AppModule.class)
|
||||||
abstract class NetworkModule {
|
abstract class NetworkModule {
|
||||||
@@ -35,6 +35,21 @@ abstract class NetworkModule {
|
|||||||
.build();
|
.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
|
@Provides
|
||||||
@Named("base")
|
@Named("base")
|
||||||
@@ -128,15 +143,6 @@ abstract class NetworkModule {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
|
||||||
@Named("gfycat")
|
|
||||||
@Singleton
|
|
||||||
static Retrofit provideGfycatRetrofit(@Named("base") RetrofitHolder retrofit) {
|
|
||||||
return retrofit.getRetrofit().newBuilder()
|
|
||||||
.baseUrl(APIUtils.GFYCAT_API_BASE_URI)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Named("RedgifsAccessTokenAuthenticator")
|
@Named("RedgifsAccessTokenAuthenticator")
|
||||||
static Interceptor redgifsAccessTokenAuthenticator(@Named("current_account") SharedPreferences currentAccountSharedPreferences) {
|
static Interceptor redgifsAccessTokenAuthenticator(@Named("current_account") SharedPreferences currentAccountSharedPreferences) {
|
||||||
@@ -166,6 +172,12 @@ abstract class NetworkModule {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
static RedgifsAPI provideRedgifsAPI(@Named("redgifs") Retrofit redgifsRetrofit) {
|
||||||
|
return redgifsRetrofit.create(RedgifsAPI.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Named("imgur")
|
@Named("imgur")
|
||||||
@Singleton
|
@Singleton
|
||||||
@@ -216,4 +228,31 @@ abstract class NetworkModule {
|
|||||||
static StreamableAPI provideStreamableApi(@Named("streamable") Retrofit streamableRetrofit) {
|
static StreamableAPI provideStreamableApi(@Named("streamable") Retrofit streamableRetrofit) {
|
||||||
return streamableRetrofit.create(StreamableAPI.class);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Named("lemmyVerse")
|
||||||
|
@Singleton
|
||||||
|
static Retrofit provideLemmyVerseRetrofit(@Named("base") RetrofitHolder retrofit) {
|
||||||
|
return retrofit.getRetrofit().newBuilder()
|
||||||
|
.baseUrl(APIUtils.LEMMYVERSE_API_BASE_URI)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,9 +110,9 @@ class ParseSubscribedThing {
|
|||||||
boolean postingRestrictedToMods = community.getBoolean("posting_restricted_to_mods");
|
boolean postingRestrictedToMods = community.getBoolean("posting_restricted_to_mods");
|
||||||
int instanceId = community.getInt("instance_id");
|
int instanceId = community.getInt("instance_id");
|
||||||
int subscribers = data.getJSONObject("counts").getInt("subscribers");
|
int subscribers = data.getJSONObject("counts").getInt("subscribers");
|
||||||
|
boolean isBlocked = data.getBoolean("blocked");
|
||||||
newSubscribedSubredditData.add(new SubscribedSubredditData(id, title, LemmyUtils.actorID2FullName(actorId), iconUrl, accountName));
|
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));
|
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) {
|
} catch (JSONException e) {
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,16 @@ import androidx.sqlite.db.SupportSQLiteDatabase;
|
|||||||
|
|
||||||
import eu.toldi.infinityforlemmy.account.Account;
|
import eu.toldi.infinityforlemmy.account.Account;
|
||||||
import eu.toldi.infinityforlemmy.account.AccountDao;
|
import eu.toldi.infinityforlemmy.account.AccountDao;
|
||||||
|
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityDao;
|
||||||
|
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData;
|
||||||
|
import eu.toldi.infinityforlemmy.blockedinstances.BlockedInstanceDao;
|
||||||
|
import eu.toldi.infinityforlemmy.blockedinstances.BlockedInstanceData;
|
||||||
|
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserDao;
|
||||||
|
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilterDao;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilterUsage;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilterUsageDao;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomTheme;
|
import eu.toldi.infinityforlemmy.customtheme.CustomTheme;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeDao;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeDao;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.AnonymousMultiredditSubreddit;
|
import eu.toldi.infinityforlemmy.multireddit.AnonymousMultiredditSubreddit;
|
||||||
@@ -38,7 +48,8 @@ import eu.toldi.infinityforlemmy.user.UserData;
|
|||||||
|
|
||||||
@Database(entities = {Account.class, SubredditData.class, SubscribedSubredditData.class, UserData.class,
|
@Database(entities = {Account.class, SubredditData.class, SubscribedSubredditData.class, UserData.class,
|
||||||
SubscribedUserData.class, MultiReddit.class, CustomTheme.class, RecentSearchQuery.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, BlockedInstanceData.class, CommentFilter.class, CommentFilterUsage.class}, version = 30)
|
||||||
public abstract class RedditDataRoomDatabase extends RoomDatabase {
|
public abstract class RedditDataRoomDatabase extends RoomDatabase {
|
||||||
|
|
||||||
public static RedditDataRoomDatabase create(final Context context) {
|
public static RedditDataRoomDatabase create(final Context context) {
|
||||||
@@ -49,7 +60,9 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
|
|||||||
MIGRATION_9_10, MIGRATION_10_11, MIGRATION_11_12, MIGRATION_12_13,
|
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_13_14, MIGRATION_14_15, MIGRATION_15_16, MIGRATION_16_17,
|
||||||
MIGRATION_17_18, MIGRATION_18_19, MIGRATION_19_20, MIGRATION_20_21,
|
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, MIGRATION_27_28, MIGRATION_28_29,
|
||||||
|
MIGRATION_29_30)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,6 +72,12 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
|
|||||||
|
|
||||||
public abstract SubscribedSubredditDao subscribedSubredditDao();
|
public abstract SubscribedSubredditDao subscribedSubredditDao();
|
||||||
|
|
||||||
|
public abstract BlockedUserDao blockedUserDao();
|
||||||
|
|
||||||
|
public abstract BlockedCommunityDao blockedCommunityDao();
|
||||||
|
|
||||||
|
public abstract BlockedInstanceDao blockedInstanceDao();
|
||||||
|
|
||||||
public abstract UserDao userDao();
|
public abstract UserDao userDao();
|
||||||
|
|
||||||
public abstract SubscribedUserDao subscribedUserDao();
|
public abstract SubscribedUserDao subscribedUserDao();
|
||||||
@@ -77,6 +96,10 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
|
|||||||
|
|
||||||
public abstract AnonymousMultiredditSubredditDao anonymousMultiredditSubredditDao();
|
public abstract AnonymousMultiredditSubredditDao anonymousMultiredditSubredditDao();
|
||||||
|
|
||||||
|
public abstract CommentFilterDao commentFilterDao();
|
||||||
|
|
||||||
|
public abstract CommentFilterUsageDao commentFilterUsageDao();
|
||||||
|
|
||||||
private static final Migration MIGRATION_1_2 = new Migration(1, 2) {
|
private static final Migration MIGRATION_1_2 = new Migration(1, 2) {
|
||||||
@Override
|
@Override
|
||||||
public void migrate(SupportSQLiteDatabase database) {
|
public void migrate(SupportSQLiteDatabase database) {
|
||||||
@@ -383,4 +406,68 @@ 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");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Migration MIGRATION_27_28 = new Migration(27, 28) {
|
||||||
|
@Override
|
||||||
|
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||||
|
database.execSQL("ALTER TABLE custom_themes ADD COLUMN filled_card_view_background_color INTEGER DEFAULT " + Color.parseColor("#E6F4FF") + " NOT NULL");
|
||||||
|
database.execSQL("ALTER TABLE custom_themes ADD COLUMN read_post_filled_card_view_background_color INTEGER DEFAULT " + Color.parseColor("#F5F5F5") + " NOT NULL");
|
||||||
|
database.execSQL("CREATE TABLE comment_filter " +
|
||||||
|
"(name TEXT NOT NULL PRIMARY KEY, max_vote INTEGER NOT NULL, min_vote INTEGER NOT NULL, exclude_strings TEXT, exclude_users TEXT)");
|
||||||
|
database.execSQL("CREATE TABLE comment_filter_usage (name TEXT NOT NULL, usage INTEGER NOT NULL, " +
|
||||||
|
"name_of_usage TEXT NOT NULL, PRIMARY KEY(name, usage, name_of_usage), FOREIGN KEY(name) REFERENCES comment_filter(name) ON DELETE CASCADE)");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Migration MIGRATION_28_29 = new Migration(28, 29) {
|
||||||
|
@Override
|
||||||
|
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||||
|
database.execSQL("CREATE TABLE blocked_instances" +
|
||||||
|
"(domain TEXT, id INTEGER NOT NULL, account_name TEXT NOT NULL, PRIMARY KEY( id, account_name))");
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Migration MIGRATION_29_30 = new Migration(29, 30) {
|
||||||
|
@Override
|
||||||
|
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||||
|
// Alter table "blocked_instances" to add new columns "instance_name" and "icon"
|
||||||
|
database.execSQL("ALTER TABLE blocked_instances ADD COLUMN instance_name TEXT");
|
||||||
|
database.execSQL("ALTER TABLE blocked_instances ADD COLUMN icon TEXT");
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import java.util.Map;
|
|||||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import okhttp3.Headers;
|
|
||||||
import okhttp3.Interceptor;
|
import okhttp3.Interceptor;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@@ -22,6 +21,8 @@ import retrofit2.Retrofit;
|
|||||||
import retrofit2.converter.scalars.ScalarsConverterFactory;
|
import retrofit2.converter.scalars.ScalarsConverterFactory;
|
||||||
|
|
||||||
public class RedgifsAccessTokenAuthenticator implements Interceptor {
|
public class RedgifsAccessTokenAuthenticator implements Interceptor {
|
||||||
|
private static final String REDGIFS_HOST = "redgifs.com";
|
||||||
|
|
||||||
private SharedPreferences mCurrentAccountSharedPreferences;
|
private SharedPreferences mCurrentAccountSharedPreferences;
|
||||||
|
|
||||||
public RedgifsAccessTokenAuthenticator(SharedPreferences currentAccountSharedPreferences) {
|
public RedgifsAccessTokenAuthenticator(SharedPreferences currentAccountSharedPreferences) {
|
||||||
@@ -60,7 +61,17 @@ public class RedgifsAccessTokenAuthenticator implements Interceptor {
|
|||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Response intercept(@NonNull Chain chain) throws IOException {
|
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) {
|
if (response.code() == 401 || response.code() == 400) {
|
||||||
String accessTokenHeader = response.request().header(APIUtils.AUTHORIZATION_KEY);
|
String accessTokenHeader = response.request().header(APIUtils.AUTHORIZATION_KEY);
|
||||||
if (accessTokenHeader == null) {
|
if (accessTokenHeader == null) {
|
||||||
@@ -74,13 +85,21 @@ public class RedgifsAccessTokenAuthenticator implements Interceptor {
|
|||||||
String newAccessToken = refreshAccessToken();
|
String newAccessToken = refreshAccessToken();
|
||||||
if (!newAccessToken.equals("")) {
|
if (!newAccessToken.equals("")) {
|
||||||
response.close();
|
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 {
|
} else {
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
response.close();
|
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;
|
package eu.toldi.infinityforlemmy;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.network.SortTypeConverterFactory;
|
import eu.toldi.infinityforlemmy.network.SortTypeConverterFactory;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
|
import okhttp3.Interceptor;
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
import retrofit2.adapter.guava.GuavaCallAdapterFactory;
|
import retrofit2.adapter.guava.GuavaCallAdapterFactory;
|
||||||
@@ -12,8 +15,14 @@ public class RetrofitHolder {
|
|||||||
|
|
||||||
private Retrofit retrofit;
|
private Retrofit retrofit;
|
||||||
private OkHttpClient okHttpClient;
|
private OkHttpClient okHttpClient;
|
||||||
|
|
||||||
|
private OkHttpClient okHttpClientBase;
|
||||||
private String baseURL = APIUtils.API_BASE_URI;
|
private String baseURL = APIUtils.API_BASE_URI;
|
||||||
|
|
||||||
|
private String accessToken = null;
|
||||||
|
|
||||||
|
private Interceptor oAuthInterceptor;
|
||||||
|
|
||||||
public Retrofit getRetrofit() {
|
public Retrofit getRetrofit() {
|
||||||
return retrofit;
|
return retrofit;
|
||||||
}
|
}
|
||||||
@@ -24,11 +33,16 @@ public class RetrofitHolder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getBaseURL() {
|
public String getBaseURL() {
|
||||||
return baseURL;
|
String result = baseURL;
|
||||||
|
if (baseURL.endsWith("/")) {
|
||||||
|
result = baseURL.substring(0, baseURL.length() - 1);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RetrofitHolder(OkHttpClient okHttpClient) {
|
public RetrofitHolder(OkHttpClient okHttpClient) {
|
||||||
this.okHttpClient = okHttpClient;
|
this.okHttpClient = okHttpClient;
|
||||||
|
this.okHttpClientBase = okHttpClient;
|
||||||
this.retrofit = createRetrofit(okHttpClient, APIUtils.API_BASE_URI);
|
this.retrofit = createRetrofit(okHttpClient, APIUtils.API_BASE_URI);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,4 +56,18 @@ public class RetrofitHolder {
|
|||||||
.addConverterFactory(GsonConverterFactory.create())
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
.build();
|
.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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,20 +35,23 @@ public class SortType {
|
|||||||
NEW("New", "New"),
|
NEW("New", "New"),
|
||||||
OLD("Old", "Old"),
|
OLD("Old", "Old"),
|
||||||
TOP("Top", "Top"),
|
TOP("Top", "Top"),
|
||||||
MOST_COMMENTS("MostCommentes", "Most Commentes"),
|
MOST_COMMENTS("MostComments", "Most Comments"),
|
||||||
NEW_COMMENTS("NewCommentes", "New Commentes"),
|
NEW_COMMENTS("NewComments", "New Comments"),
|
||||||
|
|
||||||
TOP_HOUR("TopHour", "Top"),
|
TOP_HOUR("TopHour", "Top"),
|
||||||
TOP_SIX_HOURS("TopSixHour", "Top"),
|
TOP_SIX_HOURS("TopSixHour", "Top"),
|
||||||
TOP_TWELVE_HOURS("TopTwelveHour", "Top"),
|
TOP_TWELVE_HOURS("TopTwelveHour", "Top"),
|
||||||
TOP_DAY("TopDay", "Top"),
|
TOP_DAY("TopDay", "Top"),
|
||||||
TOP_WEEK("TopWeek", "Top"),
|
TOP_WEEK("TopWeek", "Top"),
|
||||||
TOP_MONTH("month", "Top"),
|
TOP_MONTH("TopMonth", "Top"),
|
||||||
TOP_THREE_MONTHS("TopThreeMonths", "Top"),
|
TOP_THREE_MONTHS("TopThreeMonths", "Top"),
|
||||||
TOP_SIX_MONTHS("TopSixMonths", "Top"),
|
TOP_SIX_MONTHS("TopSixMonths", "Top"),
|
||||||
TOP_NINE_MONTHS("TopNineMonths", "Top"),
|
TOP_NINE_MONTHS("TopNineMonths", "Top"),
|
||||||
TOP_YEAR("TopYear", "Top"),
|
TOP_YEAR("TopYear", "Top"),
|
||||||
TOP_ALL("TopAll", "Top");
|
TOP_ALL("TopAll", "Top"),
|
||||||
|
|
||||||
|
SCALED("Scaled", "Scaled"),
|
||||||
|
CONTROVERSIAL("Controversial", "Controversial");
|
||||||
|
|
||||||
public final String value;
|
public final String value;
|
||||||
public final String fullName;
|
public final String fullName;
|
||||||
@@ -69,15 +72,15 @@ public class SortType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public enum Time {
|
public enum Time {
|
||||||
HOUR("TopHour", "Top Hour"),
|
HOUR("hour", "Hour"),
|
||||||
SIX_HOURS("TopSixHour", "Top Six Hours"),
|
SIX_HOURS("SixHour", "Six Hours"),
|
||||||
TWELVE_HOURS("TopTwelveHour", "Top Twelve Hours"),
|
TWELVE_HOURS("TwelveHour", "Twelve Hours"),
|
||||||
DAY("day", "Day"),
|
DAY("day", "Day"),
|
||||||
WEEK("week", "Week"),
|
WEEK("week", "Week"),
|
||||||
MONTH("month", "Month"),
|
MONTH("month", "Month"),
|
||||||
THREE_MONTHS("TopThreeMonth", "Top Three Months"),
|
THREE_MONTHS("ThreeMonths", "Three Months"),
|
||||||
SIX_MONTHS("TopSixMonth", "Top Six Months"),
|
SIX_MONTHS("SixMonths", "Six Months"),
|
||||||
NINE_MONTHS("TopNineMonth", "Top Nine Months"),
|
NINE_MONTHS("NineMonths", "Nine Months"),
|
||||||
YEAR("year", "Year"),
|
YEAR("year", "Year"),
|
||||||
ALL("all", "All Time");
|
ALL("all", "All Time");
|
||||||
|
|
||||||
@@ -88,5 +91,14 @@ public class SortType {
|
|||||||
this.value = value;
|
this.value = value;
|
||||||
this.fullName = fullName;
|
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")
|
@ColumnInfo(name = "instance_url")
|
||||||
private String instance_url;
|
private String instance_url;
|
||||||
|
|
||||||
|
@ColumnInfo(name = "can_downvote")
|
||||||
|
private boolean canDownvote = true;
|
||||||
|
|
||||||
@Ignore
|
@Ignore
|
||||||
protected Account(Parcel in) {
|
protected Account(Parcel in) {
|
||||||
accountName = in.readString();
|
accountName = in.readString();
|
||||||
@@ -42,6 +45,7 @@ public class Account implements Parcelable {
|
|||||||
code = in.readString();
|
code = in.readString();
|
||||||
isCurrentUser = in.readByte() != 0;
|
isCurrentUser = in.readByte() != 0;
|
||||||
instance_url = in.readString();
|
instance_url = in.readString();
|
||||||
|
canDownvote = in.readByte() != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Creator<Account> CREATOR = new Creator<Account>() {
|
public static final Creator<Account> CREATOR = new Creator<Account>() {
|
||||||
@@ -58,11 +62,11 @@ public class Account implements Parcelable {
|
|||||||
|
|
||||||
@Ignore
|
@Ignore
|
||||||
public static Account getAnonymousAccount() {
|
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,
|
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.accountName = accountName;
|
||||||
this.display_name = display_name;
|
this.display_name = display_name;
|
||||||
this.accessToken = accessToken;
|
this.accessToken = accessToken;
|
||||||
@@ -71,6 +75,7 @@ public class Account implements Parcelable {
|
|||||||
this.bannerImageUrl = bannerImageUrl;
|
this.bannerImageUrl = bannerImageUrl;
|
||||||
this.isCurrentUser = isCurrentUser;
|
this.isCurrentUser = isCurrentUser;
|
||||||
this.instance_url = instance_url;
|
this.instance_url = instance_url;
|
||||||
|
this.canDownvote = canDownvote;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@@ -116,6 +121,10 @@ public class Account implements Parcelable {
|
|||||||
return instance_url;
|
return instance_url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canDownvote() {
|
||||||
|
return canDownvote;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToParcel(Parcel dest, int flags) {
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
dest.writeString(accountName);
|
dest.writeString(accountName);
|
||||||
@@ -126,5 +135,6 @@ public class Account implements Parcelable {
|
|||||||
dest.writeString(code);
|
dest.writeString(code);
|
||||||
dest.writeByte((byte) (isCurrentUser ? 1 : 0));
|
dest.writeByte((byte) (isCurrentUser ? 1 : 0));
|
||||||
dest.writeString(instance_url);
|
dest.writeString(instance_url);
|
||||||
|
dest.writeByte((byte) (canDownvote ? 1 : 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,111 @@
|
|||||||
|
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.blockedinstances.BlockedInstanceData;
|
||||||
|
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<>();
|
||||||
|
List<BlockedInstanceData> blockedInstances = 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;
|
||||||
|
JSONArray blockedInstancesJson = (siteInfoJson.has("instance_blocks")) ? siteInfoJson.getJSONArray("instance_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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (blockedInstancesJson != null) {
|
||||||
|
for (int i = 0; i < blockedInstancesJson.length(); i++) {
|
||||||
|
JSONObject blockedInstanceJson = blockedInstancesJson.getJSONObject(i);
|
||||||
|
// Get the "instance" object if it exists
|
||||||
|
JSONObject instanceJson = blockedInstanceJson.has("instance") ? blockedInstanceJson.getJSONObject("instance") : null;
|
||||||
|
if (instanceJson == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int id = instanceJson.getInt("id");
|
||||||
|
String domain = instanceJson.getString("domain");
|
||||||
|
JSONObject siteJson = blockedInstanceJson.has("site") ? blockedInstanceJson.getJSONObject("site") : null;
|
||||||
|
if (siteJson == null) {
|
||||||
|
blockedInstances.add(new BlockedInstanceData(id, domain, null, null, accountName));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
String name = siteJson.getString("name");
|
||||||
|
String icon = siteJson.optString("icon");
|
||||||
|
blockedInstances.add(new BlockedInstanceData(id, domain, name, icon, accountName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchBlockedThingsListener.onFetchBlockedThingsSuccess(blockedUsers, blockedCommunities, blockedInstances);
|
||||||
|
} 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, List<BlockedInstanceData> blockedInstances);
|
||||||
|
|
||||||
|
void onFetchBlockedThingsFailure();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -283,17 +283,17 @@ public class AccountSavedThingActivity extends BaseActivity implements ActivityT
|
|||||||
PostFragment fragment = new PostFragment();
|
PostFragment fragment = new PostFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_USER);
|
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_USER_WHERE, PostPagingSource.USER_WHERE_SAVED);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
bundle.putBoolean(PostFragment.EXTRA_DISABLE_READ_POSTS, true);
|
bundle.putBoolean(PostFragment.EXTRA_DISABLE_READ_POSTS, true);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
CommentsListingFragment fragment = new CommentsListingFragment();
|
CommentsListingFragment fragment = new CommentsListingFragment();
|
||||||
Bundle bundle = new Bundle();
|
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_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(CommentsListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(CommentsListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||||
bundle.putBoolean(CommentsListingFragment.EXTRA_ARE_SAVED_COMMENTS, true);
|
bundle.putBoolean(CommentsListingFragment.EXTRA_ARE_SAVED_COMMENTS, true);
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
|||||||
import com.google.android.material.shape.CornerFamily;
|
import com.google.android.material.shape.CornerFamily;
|
||||||
import com.google.android.material.shape.MaterialShapeDrawable;
|
import com.google.android.material.shape.MaterialShapeDrawable;
|
||||||
import com.google.android.material.shape.ShapeAppearanceModel;
|
import com.google.android.material.shape.ShapeAppearanceModel;
|
||||||
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
@@ -321,6 +322,12 @@ public abstract class BaseActivity extends AppCompatActivity implements CustomFo
|
|||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar, true);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, collapsingToolbarLayout, toolbar, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Snackbar applySnackBarTheme(Snackbar snackbar) {
|
||||||
|
snackbar.setBackgroundTint(customThemeWrapper.getBackgroundColor());
|
||||||
|
snackbar.setTextColor(customThemeWrapper.getSecondaryTextColor());
|
||||||
|
return snackbar;
|
||||||
|
}
|
||||||
|
|
||||||
protected void applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(AppBarLayout appBarLayout, @Nullable CollapsingToolbarLayout collapsingToolbarLayout, Toolbar toolbar, boolean setToolbarBackgroundColor) {
|
protected void applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(AppBarLayout appBarLayout, @Nullable CollapsingToolbarLayout collapsingToolbarLayout, Toolbar toolbar, boolean setToolbarBackgroundColor) {
|
||||||
appBarLayout.setBackgroundColor(customThemeWrapper.getColorPrimary());
|
appBarLayout.setBackgroundColor(customThemeWrapper.getColorPrimary());
|
||||||
if (collapsingToolbarLayout != null) {
|
if (collapsingToolbarLayout != null) {
|
||||||
|
|||||||
@@ -0,0 +1,439 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.activities;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
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 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.blockedinstances.BlockedInstanceData;
|
||||||
|
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.BlockedInstancesListingFragment;
|
||||||
|
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 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
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.hide();
|
||||||
|
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
||||||
|
viewPager.setAdapter(sectionsPagerAdapter);
|
||||||
|
viewPager.setOffscreenPageLimit(2);
|
||||||
|
|
||||||
|
tabLayout.setupWithViewPager(viewPager);
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@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, List<BlockedInstanceData> blockedInstances) {
|
||||||
|
InsertBlockedThings.insertBlockedThings(mExecutor, new Handler(), mRedditDataRoomDatabase, mAccountQualifiedName,
|
||||||
|
blockedCommunities, blockedUsers, blockedInstances, () -> {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
BlockedInstancesListingFragment fragment = new BlockedInstancesListingFragment();
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putString(BlockedInstancesListingFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
|
bundle.putString(BlockedInstancesListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
|
fragment.setArguments(bundle);
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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.instances));
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -170,6 +170,7 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
|
|||||||
|
|
||||||
String parentBodyMarkdown = intent.getStringExtra(EXTRA_COMMENT_PARENT_BODY_MARKDOWN_KEY);
|
String parentBodyMarkdown = intent.getStringExtra(EXTRA_COMMENT_PARENT_BODY_MARKDOWN_KEY);
|
||||||
String parentBody = intent.getStringExtra(EXTRA_COMMENT_PARENT_BODY_KEY);
|
String parentBody = intent.getStringExtra(EXTRA_COMMENT_PARENT_BODY_KEY);
|
||||||
|
mGlide = Glide.with(getApplication());
|
||||||
if (parentBodyMarkdown != null && !parentBodyMarkdown.equals("")) {
|
if (parentBodyMarkdown != null && !parentBodyMarkdown.equals("")) {
|
||||||
binding.commentContentMarkdownView.setVisibility(View.VISIBLE);
|
binding.commentContentMarkdownView.setVisibility(View.VISIBLE);
|
||||||
binding.commentContentMarkdownView.setNestedScrollingEnabled(false);
|
binding.commentContentMarkdownView.setNestedScrollingEnabled(false);
|
||||||
@@ -204,8 +205,9 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
|
|||||||
builder.linkColor(linkColor);
|
builder.linkColor(linkColor);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Markwon postBodyMarkwon = MarkdownUtils.createFullRedditMarkwon(this,
|
Markwon postBodyMarkwon = MarkdownUtils.createFullRedditMarkwon(this,
|
||||||
miscPlugin, parentTextColor, parentSpoilerBackgroundColor, null);
|
miscPlugin, parentTextColor, parentSpoilerBackgroundColor, mGlide, null, mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false));
|
||||||
MarkwonAdapter markwonAdapter = MarkdownUtils.createTablesAdapter();
|
MarkwonAdapter markwonAdapter = MarkdownUtils.createTablesAdapter();
|
||||||
binding.commentContentMarkdownView.setLayoutManager(new LinearLayoutManagerBugFixed(this));
|
binding.commentContentMarkdownView.setLayoutManager(new LinearLayoutManagerBugFixed(this));
|
||||||
binding.commentContentMarkdownView.setAdapter(markwonAdapter);
|
binding.commentContentMarkdownView.setAdapter(markwonAdapter);
|
||||||
@@ -226,8 +228,6 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
|
|||||||
|
|
||||||
setSupportActionBar(binding.commentToolbar);
|
setSupportActionBar(binding.commentToolbar);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
|
||||||
uploadedImages = savedInstanceState.getParcelableArrayList(UPLOADED_IMAGES_STATE);
|
uploadedImages = savedInstanceState.getParcelableArrayList(UPLOADED_IMAGES_STATE);
|
||||||
@@ -513,8 +513,8 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
|
|||||||
int start = Math.max(binding.commentCommentEditText.getSelectionStart(), 0);
|
int start = Math.max(binding.commentCommentEditText.getSelectionStart(), 0);
|
||||||
int end = Math.max(binding.commentCommentEditText.getSelectionEnd(), 0);
|
int end = Math.max(binding.commentCommentEditText.getSelectionEnd(), 0);
|
||||||
binding.commentCommentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
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
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,126 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.activities;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
|
import eu.toldi.infinityforlemmy.adapters.CommentFilterWithUsageRecyclerViewAdapter;
|
||||||
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.CommentFilterOptionsBottomSheetFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.DeleteCommentFilter;
|
||||||
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
import eu.toldi.infinityforlemmy.databinding.ActivityCommentFilterPreferenceBinding;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilterWithUsageViewModel;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
|
public class CommentFilterPreferenceActivity extends BaseActivity {
|
||||||
|
|
||||||
|
private ActivityCommentFilterPreferenceBinding binding;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named("default")
|
||||||
|
SharedPreferences sharedPreferences;
|
||||||
|
@Inject
|
||||||
|
RedditDataRoomDatabase redditDataRoomDatabase;
|
||||||
|
@Inject
|
||||||
|
CustomThemeWrapper customThemeWrapper;
|
||||||
|
@Inject
|
||||||
|
Executor executor;
|
||||||
|
public CommentFilterWithUsageViewModel commentFilterWithUsageViewModel;
|
||||||
|
private CommentFilterWithUsageRecyclerViewAdapter adapter;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
|
|
||||||
|
setImmersiveModeNotApplicable();
|
||||||
|
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
binding = ActivityCommentFilterPreferenceBinding.inflate(getLayoutInflater());
|
||||||
|
|
||||||
|
setContentView(binding.getRoot());
|
||||||
|
|
||||||
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
applyCustomTheme();
|
||||||
|
|
||||||
|
setSupportActionBar(binding.toolbarCommentFilterPreferenceActivity);
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
|
binding.fabCommentFilterPreferenceActivity.setOnClickListener(view -> {
|
||||||
|
Intent intent = new Intent(this, CustomizeCommentFilterActivity.class);
|
||||||
|
intent.putExtra(CustomizeCommentFilterActivity.EXTRA_FROM_SETTINGS, true);
|
||||||
|
startActivity(intent);
|
||||||
|
});
|
||||||
|
|
||||||
|
adapter = new CommentFilterWithUsageRecyclerViewAdapter(this, commentFilter -> {
|
||||||
|
CommentFilterOptionsBottomSheetFragment commentFilterOptionsBottomSheetFragment = new CommentFilterOptionsBottomSheetFragment();
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putParcelable(CommentFilterOptionsBottomSheetFragment.EXTRA_POST_FILTER, commentFilter);
|
||||||
|
commentFilterOptionsBottomSheetFragment.setArguments(bundle);
|
||||||
|
commentFilterOptionsBottomSheetFragment.show(getSupportFragmentManager(), commentFilterOptionsBottomSheetFragment.getTag());
|
||||||
|
});
|
||||||
|
|
||||||
|
binding.recyclerViewCommentFilterPreferenceActivity.setAdapter(adapter);
|
||||||
|
|
||||||
|
commentFilterWithUsageViewModel = new ViewModelProvider(this,
|
||||||
|
new CommentFilterWithUsageViewModel.Factory(redditDataRoomDatabase)).get(CommentFilterWithUsageViewModel.class);
|
||||||
|
|
||||||
|
commentFilterWithUsageViewModel.getCommentFilterWithUsageListLiveData().observe(this, commentFilterWithUsages -> adapter.setCommentFilterWithUsageList(commentFilterWithUsages));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void editCommentFilter(CommentFilter commentFilter) {
|
||||||
|
Intent intent = new Intent(this, CustomizeCommentFilterActivity.class);
|
||||||
|
intent.putExtra(CustomizeCommentFilterActivity.EXTRA_COMMENT_FILTER, commentFilter);
|
||||||
|
intent.putExtra(CustomizeCommentFilterActivity.EXTRA_FROM_SETTINGS, true);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void applyCommentFilterTo(CommentFilter commentFilter) {
|
||||||
|
Intent intent = new Intent(this, CommentFilterUsageListingActivity.class);
|
||||||
|
intent.putExtra(CommentFilterUsageListingActivity.EXTRA_COMMENT_FILTER, commentFilter);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteCommentFilter(CommentFilter commentFilter) {
|
||||||
|
DeleteCommentFilter.deleteCommentFilter(redditDataRoomDatabase, executor, commentFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SharedPreferences getDefaultSharedPreferences() {
|
||||||
|
return sharedPreferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CustomThemeWrapper getCustomThemeWrapper() {
|
||||||
|
return customThemeWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void applyCustomTheme() {
|
||||||
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(binding.appbarLayoutCommentFilterPreferenceActivity, binding.collapsingToolbarLayoutCommentFilterPreferenceActivity, binding.toolbarCommentFilterPreferenceActivity);
|
||||||
|
applyFABTheme(binding.fabCommentFilterPreferenceActivity, sharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
|
binding.getRoot().setBackgroundColor(customThemeWrapper.getBackgroundColor());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
|
if (item.getItemId() == android.R.id.home) {
|
||||||
|
finish();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,181 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.activities;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.ColorStateList;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
|
import com.google.android.material.textfield.TextInputEditText;
|
||||||
|
import com.google.android.material.textfield.TextInputLayout;
|
||||||
|
|
||||||
|
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.RedditDataRoomDatabase;
|
||||||
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.CommentFilterUsageOptionsBottomSheetFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.NewCommentFilterUsageBottomSheetFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilterUsage;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilterUsageViewModel;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.DeleteCommentFilterUsage;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.SaveCommentFilterUsage;
|
||||||
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
import eu.toldi.infinityforlemmy.databinding.ActivityCommentFilterUsageListingBinding;
|
||||||
|
import eu.toldi.infinityforlemmy.adapters.CommentFilterUsageRecyclerViewAdapter;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
|
|
||||||
|
public class CommentFilterUsageListingActivity extends BaseActivity {
|
||||||
|
|
||||||
|
public static final String EXTRA_COMMENT_FILTER = "ECF";
|
||||||
|
@Inject
|
||||||
|
@Named("default")
|
||||||
|
SharedPreferences sharedPreferences;
|
||||||
|
@Inject
|
||||||
|
RedditDataRoomDatabase redditDataRoomDatabase;
|
||||||
|
@Inject
|
||||||
|
CustomThemeWrapper customThemeWrapper;
|
||||||
|
@Inject
|
||||||
|
Executor executor;
|
||||||
|
private ActivityCommentFilterUsageListingBinding binding;
|
||||||
|
public CommentFilterUsageViewModel commentFilterUsageViewModel;
|
||||||
|
private CommentFilterUsageRecyclerViewAdapter adapter;
|
||||||
|
private CommentFilter commentFilter;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
|
|
||||||
|
setImmersiveModeNotApplicable();
|
||||||
|
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
binding = ActivityCommentFilterUsageListingBinding.inflate(getLayoutInflater());
|
||||||
|
setContentView(binding.getRoot());
|
||||||
|
|
||||||
|
applyCustomTheme();
|
||||||
|
|
||||||
|
setSupportActionBar(binding.toolbarCommentFilterUsageListingActivity);
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
|
commentFilter = getIntent().getParcelableExtra(EXTRA_COMMENT_FILTER);
|
||||||
|
|
||||||
|
setTitle(commentFilter.name);
|
||||||
|
|
||||||
|
binding.fabCommentFilterUsageListingActivity.setOnClickListener(view -> {
|
||||||
|
NewCommentFilterUsageBottomSheetFragment newCommentFilterUsageBottomSheetFragment = new NewCommentFilterUsageBottomSheetFragment();
|
||||||
|
newCommentFilterUsageBottomSheetFragment.show(getSupportFragmentManager(), newCommentFilterUsageBottomSheetFragment.getTag());
|
||||||
|
});
|
||||||
|
|
||||||
|
adapter = new CommentFilterUsageRecyclerViewAdapter(this, customThemeWrapper, commentFilterUsage -> {
|
||||||
|
CommentFilterUsageOptionsBottomSheetFragment commentFilterUsageOptionsBottomSheetFragment = new CommentFilterUsageOptionsBottomSheetFragment();
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putParcelable(CommentFilterUsageOptionsBottomSheetFragment.EXTRA_COMMENT_FILTER_USAGE, commentFilterUsage);
|
||||||
|
commentFilterUsageOptionsBottomSheetFragment.setArguments(bundle);
|
||||||
|
commentFilterUsageOptionsBottomSheetFragment.show(getSupportFragmentManager(), commentFilterUsageOptionsBottomSheetFragment.getTag());
|
||||||
|
});
|
||||||
|
binding.recyclerViewCommentFilterUsageListingActivity.setAdapter(adapter);
|
||||||
|
|
||||||
|
commentFilterUsageViewModel = new ViewModelProvider(this,
|
||||||
|
new CommentFilterUsageViewModel.Factory(redditDataRoomDatabase, commentFilter.name)).get(CommentFilterUsageViewModel.class);
|
||||||
|
|
||||||
|
commentFilterUsageViewModel.getCommentFilterUsageListLiveData().observe(this, commentFilterUsages -> adapter.setCommentFilterUsages(commentFilterUsages));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void newCommentFilterUsage(int type) {
|
||||||
|
switch (type) {
|
||||||
|
case CommentFilterUsage.SUBREDDIT_TYPE:
|
||||||
|
editAndCommentFilterUsageNameOfUsage(type, null);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void editAndCommentFilterUsageNameOfUsage(int type, String nameOfUsage) {
|
||||||
|
View dialogView = getLayoutInflater().inflate(R.layout.dialog_edit_post_or_comment_filter_name_of_usage, null);
|
||||||
|
TextView messageTextView = dialogView.findViewById(R.id.message_text_view_edit_post_or_comment_filter_name_of_usage_dialog);
|
||||||
|
messageTextView.setVisibility(View.GONE);
|
||||||
|
TextInputLayout textInputLayout = dialogView.findViewById(R.id.text_input_layout_edit_post_or_comment_filter_name_of_usage_dialog);
|
||||||
|
TextInputEditText textInputEditText = dialogView.findViewById(R.id.text_input_edit_text_edit_post_or_comment_filter_name_of_usage_dialog);
|
||||||
|
int primaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
||||||
|
textInputLayout.setBoxStrokeColor(primaryTextColor);
|
||||||
|
textInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
||||||
|
textInputEditText.setTextColor(primaryTextColor);
|
||||||
|
if (nameOfUsage != null) {
|
||||||
|
textInputEditText.setText(nameOfUsage);
|
||||||
|
}
|
||||||
|
textInputEditText.requestFocus();
|
||||||
|
int titleStringId = R.string.community;
|
||||||
|
switch (type) {
|
||||||
|
case CommentFilterUsage.SUBREDDIT_TYPE:
|
||||||
|
textInputEditText.setHint(R.string.settings_tab_community_name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils.showKeyboard(this, new Handler(), textInputEditText);
|
||||||
|
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||||
|
.setTitle(titleStringId)
|
||||||
|
.setView(dialogView)
|
||||||
|
.setPositiveButton(R.string.ok, (editTextDialogInterface, i1)
|
||||||
|
-> {
|
||||||
|
Utils.hideKeyboard(this);
|
||||||
|
|
||||||
|
CommentFilterUsage commentFilterUsage;
|
||||||
|
if (!textInputEditText.getText().toString().equals("")) {
|
||||||
|
commentFilterUsage = new CommentFilterUsage(commentFilter.name, type, textInputEditText.getText().toString());
|
||||||
|
SaveCommentFilterUsage.saveCommentFilterUsage(redditDataRoomDatabase, executor, commentFilterUsage);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.cancel, null)
|
||||||
|
.setOnDismissListener(editTextDialogInterface -> {
|
||||||
|
Utils.hideKeyboard(this);
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void editCommentFilterUsage(CommentFilterUsage commentFilterUsage) {
|
||||||
|
editAndCommentFilterUsageNameOfUsage(commentFilterUsage.usage, commentFilterUsage.nameOfUsage);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteCommentFilterUsage(CommentFilterUsage commentFilterUsage) {
|
||||||
|
DeleteCommentFilterUsage.deleteCommentFilterUsage(redditDataRoomDatabase, executor, commentFilterUsage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
|
if (item.getItemId() == android.R.id.home) {
|
||||||
|
finish();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SharedPreferences getDefaultSharedPreferences() {
|
||||||
|
return sharedPreferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CustomThemeWrapper getCustomThemeWrapper() {
|
||||||
|
return customThemeWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void applyCustomTheme() {
|
||||||
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(binding.appbarLayoutCommentFilterUsageListingActivity, binding.collapsingToolbarLayoutCommentFilterUsageListingActivity, binding.toolbarCommentFilterUsageListingActivity);
|
||||||
|
applyFABTheme(binding.fabCommentFilterUsageListingActivity, sharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
|
binding.getRoot().setBackgroundColor(customThemeWrapper.getBackgroundColor());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -34,13 +34,13 @@ import butterknife.ButterKnife;
|
|||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.CreateMultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.CreateMultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiRedditJSONModel;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class CreateMultiRedditActivity extends BaseActivity {
|
public class CreateMultiRedditActivity extends BaseActivity {
|
||||||
|
|
||||||
@@ -71,8 +71,8 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
@BindView(R.id.select_subreddit_text_view_create_multi_reddit_activity)
|
@BindView(R.id.select_subreddit_text_view_create_multi_reddit_activity)
|
||||||
TextView selectSubredditTextView;
|
TextView selectSubredditTextView;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("oauth")
|
@Named("no_oauth")
|
||||||
Retrofit mOauthRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
@Inject
|
@Inject
|
||||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -87,7 +87,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
private ArrayList<String> mSubreddits;
|
private ArrayList<SubredditWithSelection> mSubreddits;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -114,10 +114,10 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, "-");
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, "-");
|
||||||
|
|
||||||
if (mAccessToken == null) {
|
|
||||||
visibilityLinearLayout.setVisibility(View.GONE);
|
visibilityLinearLayout.setVisibility(View.GONE);
|
||||||
|
if (mAccessToken == null) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
nameEditText.setImeOptions(nameEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
nameEditText.setImeOptions(nameEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
||||||
descriptionEditText.setImeOptions(descriptionEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
descriptionEditText.setImeOptions(descriptionEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
||||||
@@ -125,7 +125,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
mSubreddits = savedInstanceState.getStringArrayList(SELECTED_SUBREDDITS_STATE);
|
mSubreddits = savedInstanceState.getParcelableArrayList(SELECTED_SUBREDDITS_STATE);
|
||||||
} else {
|
} else {
|
||||||
mSubreddits = new ArrayList<>();
|
mSubreddits = new ArrayList<>();
|
||||||
}
|
}
|
||||||
@@ -135,7 +135,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
private void bindView() {
|
private void bindView() {
|
||||||
selectSubredditTextView.setOnClickListener(view -> {
|
selectSubredditTextView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(CreateMultiRedditActivity.this, SelectedSubredditsAndUsersActivity.class);
|
Intent intent = new Intent(CreateMultiRedditActivity.this, SelectedSubredditsAndUsersActivity.class);
|
||||||
intent.putStringArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, mSubreddits);
|
intent.putParcelableArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, mSubreddits);
|
||||||
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
|
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -159,29 +159,17 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mAccessToken != null) {
|
// Create a list of community qualified names seperated by a comma
|
||||||
String jsonModel = new MultiRedditJSONModel(nameEditText.getText().toString(), descriptionEditText.getText().toString(),
|
StringBuilder subredditList = new StringBuilder();
|
||||||
visibilitySwitch.isChecked(), mSubreddits).createJSONModel();
|
String prefix = "";
|
||||||
CreateMultiReddit.createMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken,
|
for (SubredditWithSelection s : mSubreddits) {
|
||||||
"/user/" + mAccountName + "/m/" + nameEditText.getText().toString(),
|
subredditList.append(prefix);
|
||||||
jsonModel, new CreateMultiReddit.CreateMultiRedditListener() {
|
prefix = ",";
|
||||||
@Override
|
subredditList.append(s.getQualifiedName());
|
||||||
public void success() {
|
|
||||||
finish();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed(int errorCode) {
|
|
||||||
if (errorCode == 409) {
|
|
||||||
Snackbar.make(coordinatorLayout, R.string.duplicate_multi_reddit, Snackbar.LENGTH_SHORT).show();
|
|
||||||
} else {
|
|
||||||
Snackbar.make(coordinatorLayout, R.string.create_multi_reddit_failed, Snackbar.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
CreateMultiReddit.anonymousCreateMultiReddit(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
CreateMultiReddit.anonymousCreateMultiReddit(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
||||||
"/user/-/m/" + nameEditText.getText().toString(),
|
mAccountName, subredditList.toString(),
|
||||||
nameEditText.getText().toString(), descriptionEditText.getText().toString(),
|
nameEditText.getText().toString(), descriptionEditText.getText().toString(),
|
||||||
mSubreddits, new CreateMultiReddit.CreateMultiRedditListener() {
|
mSubreddits, new CreateMultiReddit.CreateMultiRedditListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -195,7 +183,6 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +191,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
mSubreddits = data.getStringArrayListExtra(
|
mSubreddits = data.getParcelableArrayListExtra(
|
||||||
SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
|
SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -213,7 +200,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putStringArrayList(SELECTED_SUBREDDITS_STATE, mSubreddits);
|
outState.putParcelableArrayList(SELECTED_SUBREDDITS_STATE, mSubreddits);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,302 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.activities;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.res.ColorStateList;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
import java.util.regex.PatternSyntaxException;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
|
import eu.toldi.infinityforlemmy.R;
|
||||||
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.SaveCommentFilter;
|
||||||
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
import eu.toldi.infinityforlemmy.databinding.ActivityCustomizeCommentFilterBinding;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
|
|
||||||
|
|
||||||
|
public class CustomizeCommentFilterActivity extends BaseActivity {
|
||||||
|
|
||||||
|
public static final String EXTRA_COMMENT_FILTER = "ECF";
|
||||||
|
public static final String EXTRA_FROM_SETTINGS = "EFS";
|
||||||
|
public static final String RETURN_EXTRA_COMMENT_FILTER = "RECF";
|
||||||
|
private static final String COMMENT_FILTER_STATE = "CFS";
|
||||||
|
private static final String ORIGINAL_NAME_STATE = "ONS";
|
||||||
|
@Inject
|
||||||
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
|
@Inject
|
||||||
|
@Named("default")
|
||||||
|
SharedPreferences mSharedPreferences;
|
||||||
|
@Inject
|
||||||
|
@Named("current_account")
|
||||||
|
SharedPreferences currentAccountSharedPreferences;
|
||||||
|
@Inject
|
||||||
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
|
@Inject
|
||||||
|
Executor mExecutor;
|
||||||
|
private CommentFilter commentFilter;
|
||||||
|
private boolean fromSettings;
|
||||||
|
private String originalName;
|
||||||
|
private ActivityCustomizeCommentFilterBinding binding;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
|
|
||||||
|
setImmersiveModeNotApplicable();
|
||||||
|
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
binding = ActivityCustomizeCommentFilterBinding.inflate(getLayoutInflater());
|
||||||
|
setContentView(binding.getRoot());
|
||||||
|
|
||||||
|
applyCustomTheme();
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isChangeStatusBarIconColor()) {
|
||||||
|
addOnOffsetChangedListener(binding.appbarLayoutCustomizeCommentFilterActivity);
|
||||||
|
}
|
||||||
|
|
||||||
|
setSupportActionBar(binding.toolbarCustomizeCommentFilterActivity);
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
setToolbarGoToTop(binding.toolbarCustomizeCommentFilterActivity);
|
||||||
|
|
||||||
|
ActivityResultLauncher<Intent> requestAddUsersLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
|
||||||
|
Intent data = result.getData();
|
||||||
|
if (data == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<String> usernames = data.getStringArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_USERNAMES);
|
||||||
|
String currentUsers = binding.excludeUsersTextInputEditTextCustomizeCommentFilterActivity.getText().toString().trim();
|
||||||
|
if (usernames != null && !usernames.isEmpty()) {
|
||||||
|
if (!currentUsers.isEmpty() && currentUsers.charAt(currentUsers.length() - 1) != ',') {
|
||||||
|
String newString = currentUsers + ",";
|
||||||
|
binding.excludeUsersTextInputEditTextCustomizeCommentFilterActivity.setText(newString);
|
||||||
|
}
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
for (String s : usernames) {
|
||||||
|
stringBuilder.append(s).append(",");
|
||||||
|
}
|
||||||
|
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
|
||||||
|
binding.excludeUsersTextInputEditTextCustomizeCommentFilterActivity.append(stringBuilder.toString());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
binding.addUsersImageViewCustomizeCommentFilterActivity.setOnClickListener(view -> {
|
||||||
|
Intent intent = new Intent(this, SearchActivity.class);
|
||||||
|
intent.putExtra(SearchActivity.EXTRA_SEARCH_ONLY_USERS, true);
|
||||||
|
intent.putExtra(SearchActivity.EXTRA_IS_MULTI_SELECTION, true);
|
||||||
|
requestAddUsersLauncher.launch(intent);
|
||||||
|
});
|
||||||
|
|
||||||
|
fromSettings = getIntent().getBooleanExtra(EXTRA_FROM_SETTINGS, false);
|
||||||
|
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
commentFilter = savedInstanceState.getParcelable(COMMENT_FILTER_STATE);
|
||||||
|
originalName = savedInstanceState.getString(ORIGINAL_NAME_STATE);
|
||||||
|
} else {
|
||||||
|
commentFilter = getIntent().getParcelableExtra(EXTRA_COMMENT_FILTER);
|
||||||
|
if (commentFilter == null) {
|
||||||
|
commentFilter = new CommentFilter();
|
||||||
|
originalName = "";
|
||||||
|
} else {
|
||||||
|
if (!fromSettings) {
|
||||||
|
originalName = "";
|
||||||
|
} else {
|
||||||
|
originalName = commentFilter.name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bindView();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bindView() {
|
||||||
|
binding.nameTextInputEditTextCustomizeCommentFilterActivity.setText(commentFilter.name);
|
||||||
|
binding.excludeStringsTextInputEditTextCustomizeCommentFilterActivity.setText(commentFilter.excludeStrings);
|
||||||
|
binding.excludeUsersTextInputEditTextCustomizeCommentFilterActivity.setText(commentFilter.excludeUsers);
|
||||||
|
binding.minVoteTextInputEditTextCustomizeCommentFilterActivity.setText(Integer.toString(commentFilter.minVote));
|
||||||
|
binding.maxVoteTextInputEditTextCustomizeCommentFilterActivity.setText(Integer.toString(commentFilter.maxVote));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SharedPreferences getDefaultSharedPreferences() {
|
||||||
|
return mSharedPreferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CustomThemeWrapper getCustomThemeWrapper() {
|
||||||
|
return mCustomThemeWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void applyCustomTheme() {
|
||||||
|
binding.getRoot().setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
|
||||||
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(binding.appbarLayoutCustomizeCommentFilterActivity, binding.collapsingToolbarLayoutCustomizeCommentFilterActivity, binding.toolbarCustomizeCommentFilterActivity);
|
||||||
|
int primaryTextColor = mCustomThemeWrapper.getPrimaryTextColor();
|
||||||
|
int primaryIconColor = mCustomThemeWrapper.getPrimaryIconColor();
|
||||||
|
Drawable cursorDrawable = Utils.getTintedDrawable(this, R.drawable.edit_text_cursor, primaryTextColor);
|
||||||
|
binding.nameTextInputLayoutCustomizeCommentFilterActivity.setBoxStrokeColor(primaryTextColor);
|
||||||
|
binding.nameTextInputLayoutCustomizeCommentFilterActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
||||||
|
binding.nameTextInputEditTextCustomizeCommentFilterActivity.setTextColor(primaryTextColor);
|
||||||
|
binding.excludeStringsTextInputLayoutCustomizeCommentFilterActivity.setBoxStrokeColor(primaryTextColor);
|
||||||
|
binding.excludeStringsTextInputLayoutCustomizeCommentFilterActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
||||||
|
binding.excludeStringsTextInputEditTextCustomizeCommentFilterActivity.setTextColor(primaryTextColor);
|
||||||
|
binding.excludeUsersTextInputLayoutCustomizeCommentFilterActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
||||||
|
binding.excludeUsersTextInputEditTextCustomizeCommentFilterActivity.setTextColor(primaryTextColor);
|
||||||
|
binding.addUsersImageViewCustomizeCommentFilterActivity.setImageDrawable(Utils.getTintedDrawable(this, R.drawable.ic_add_24dp, primaryIconColor));
|
||||||
|
binding.minVoteTextInputLayoutCustomizeCommentFilterActivity.setBoxStrokeColor(primaryTextColor);
|
||||||
|
binding.minVoteTextInputLayoutCustomizeCommentFilterActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
||||||
|
binding.minVoteTextInputEditTextCustomizeCommentFilterActivity.setTextColor(primaryTextColor);
|
||||||
|
binding.maxVoteTextInputLayoutCustomizeCommentFilterActivity.setBoxStrokeColor(primaryTextColor);
|
||||||
|
binding.maxVoteTextInputLayoutCustomizeCommentFilterActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
||||||
|
binding.maxVoteTextInputEditTextCustomizeCommentFilterActivity.setTextColor(primaryTextColor);
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
binding.nameTextInputEditTextCustomizeCommentFilterActivity.setTextCursorDrawable(cursorDrawable);
|
||||||
|
binding.excludeStringsTextInputEditTextCustomizeCommentFilterActivity.setTextCursorDrawable(cursorDrawable);
|
||||||
|
binding.excludeUsersTextInputEditTextCustomizeCommentFilterActivity.setTextCursorDrawable(cursorDrawable);
|
||||||
|
binding.minVoteTextInputEditTextCustomizeCommentFilterActivity.setTextCursorDrawable(cursorDrawable);
|
||||||
|
binding.maxVoteTextInputEditTextCustomizeCommentFilterActivity.setTextCursorDrawable(cursorDrawable);
|
||||||
|
} else {
|
||||||
|
setCursorDrawableColor(binding.nameTextInputEditTextCustomizeCommentFilterActivity, primaryTextColor);
|
||||||
|
setCursorDrawableColor(binding.excludeStringsTextInputEditTextCustomizeCommentFilterActivity, primaryTextColor);
|
||||||
|
setCursorDrawableColor(binding.excludeUsersTextInputEditTextCustomizeCommentFilterActivity, primaryTextColor);
|
||||||
|
setCursorDrawableColor(binding.minVoteTextInputEditTextCustomizeCommentFilterActivity, primaryTextColor);
|
||||||
|
setCursorDrawableColor(binding.maxVoteTextInputEditTextCustomizeCommentFilterActivity, primaryTextColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeface != null) {
|
||||||
|
Utils.setFontToAllTextViews(binding.getRoot(), typeface);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCursorDrawableColor(EditText editText, int color) {
|
||||||
|
try {
|
||||||
|
Field fCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
|
||||||
|
fCursorDrawableRes.setAccessible(true);
|
||||||
|
int mCursorDrawableRes = fCursorDrawableRes.getInt(editText);
|
||||||
|
Field fEditor = TextView.class.getDeclaredField("mEditor");
|
||||||
|
fEditor.setAccessible(true);
|
||||||
|
Object editor = fEditor.get(editText);
|
||||||
|
Class<?> clazz = editor.getClass();
|
||||||
|
Field fCursorDrawable = clazz.getDeclaredField("mCursorDrawable");
|
||||||
|
fCursorDrawable.setAccessible(true);
|
||||||
|
Drawable[] drawables = new Drawable[2];
|
||||||
|
drawables[0] = editText.getContext().getResources().getDrawable(mCursorDrawableRes);
|
||||||
|
drawables[1] = editText.getContext().getResources().getDrawable(mCursorDrawableRes);
|
||||||
|
drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
||||||
|
drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
||||||
|
fCursorDrawable.set(editor, drawables);
|
||||||
|
} catch (Throwable ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.customize_comment_filter_activity, menu);
|
||||||
|
if (fromSettings) {
|
||||||
|
menu.findItem(R.id.action_save_customize_comment_filter_activity).setVisible(false);
|
||||||
|
}
|
||||||
|
applyMenuItemTheme(menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
|
if (item.getItemId() == android.R.id.home) {
|
||||||
|
finish();
|
||||||
|
return true;
|
||||||
|
} else if (item.getItemId() == R.id.action_save_customize_comment_filter_activity) {
|
||||||
|
try {
|
||||||
|
constructCommentFilter();
|
||||||
|
Intent returnIntent = new Intent();
|
||||||
|
returnIntent.putExtra(RETURN_EXTRA_COMMENT_FILTER, commentFilter);
|
||||||
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
|
finish();
|
||||||
|
} catch (PatternSyntaxException e) {
|
||||||
|
Toast.makeText(this, R.string.invalid_regex, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else if (item.getItemId() == R.id.action_save_to_database_customize_comment_filter_activity) {
|
||||||
|
try {
|
||||||
|
constructCommentFilter();
|
||||||
|
|
||||||
|
if (!commentFilter.name.equals("")) {
|
||||||
|
saveCommentFilter(originalName);
|
||||||
|
} else {
|
||||||
|
Toast.makeText(CustomizeCommentFilterActivity.this, R.string.comment_filter_requires_a_name, Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
} catch (PatternSyntaxException e) {
|
||||||
|
Toast.makeText(this, R.string.invalid_regex, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void saveCommentFilter(String originalName) {
|
||||||
|
SaveCommentFilter.saveCommentFilter(mExecutor, new Handler(), mRedditDataRoomDatabase, commentFilter, originalName,
|
||||||
|
new SaveCommentFilter.SaveCommentFilterListener() {
|
||||||
|
@Override
|
||||||
|
public void success() {
|
||||||
|
Intent returnIntent = new Intent();
|
||||||
|
returnIntent.putExtra(RETURN_EXTRA_COMMENT_FILTER, commentFilter);
|
||||||
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void duplicate() {
|
||||||
|
new MaterialAlertDialogBuilder(CustomizeCommentFilterActivity.this, R.style.MaterialAlertDialogTheme)
|
||||||
|
.setTitle(getString(R.string.duplicate_comment_filter_dialog_title, commentFilter.name))
|
||||||
|
.setMessage(R.string.duplicate_comment_filter_dialog_message)
|
||||||
|
.setPositiveButton(R.string.override, (dialogInterface, i) -> saveCommentFilter(commentFilter.name))
|
||||||
|
.setNegativeButton(R.string.cancel, null)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void constructCommentFilter() throws PatternSyntaxException {
|
||||||
|
commentFilter.name = binding.nameTextInputEditTextCustomizeCommentFilterActivity.getText().toString();
|
||||||
|
commentFilter.excludeStrings = binding.excludeStringsTextInputEditTextCustomizeCommentFilterActivity.getText().toString();
|
||||||
|
commentFilter.excludeUsers = binding.excludeUsersTextInputEditTextCustomizeCommentFilterActivity.getText().toString();
|
||||||
|
commentFilter.maxVote = binding.maxVoteTextInputEditTextCustomizeCommentFilterActivity.getText() == null || binding.maxVoteTextInputEditTextCustomizeCommentFilterActivity.getText().toString().equals("") ? -1 : Integer.parseInt(binding.maxVoteTextInputEditTextCustomizeCommentFilterActivity.getText().toString());
|
||||||
|
commentFilter.minVote = binding.minVoteTextInputEditTextCustomizeCommentFilterActivity.getText() == null || binding.minVoteTextInputEditTextCustomizeCommentFilterActivity.getText().toString().equals("") ? -1 : Integer.parseInt(binding.minVoteTextInputEditTextCustomizeCommentFilterActivity.getText().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putParcelable(COMMENT_FILTER_STATE, commentFilter);
|
||||||
|
outState.putString(ORIGINAL_NAME_STATE, originalName);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -157,14 +157,7 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
TextInputEditText excludesUsersTextInputEditText;
|
TextInputEditText excludesUsersTextInputEditText;
|
||||||
@BindView(R.id.add_users_image_view_customize_post_filter_activity)
|
@BindView(R.id.add_users_image_view_customize_post_filter_activity)
|
||||||
ImageView addUsersImageView;
|
ImageView addUsersImageView;
|
||||||
@BindView(R.id.excludes_flairs_text_input_layout_customize_post_filter_activity)
|
|
||||||
TextInputLayout excludesFlairsTextInputLayout;
|
|
||||||
@BindView(R.id.excludes_flairs_text_input_edit_text_customize_post_filter_activity)
|
|
||||||
TextInputEditText excludesFlairsTextInputEditText;
|
|
||||||
@BindView(R.id.contains_flairs_text_input_layout_customize_post_filter_activity)
|
|
||||||
TextInputLayout containsFlairsTextInputLayout;
|
|
||||||
@BindView(R.id.contains_flairs_text_input_edit_text_customize_post_filter_activity)
|
|
||||||
TextInputEditText containsFlairsTextInputEditText;
|
|
||||||
@BindView(R.id.exclude_domains_text_input_layout_customize_post_filter_activity)
|
@BindView(R.id.exclude_domains_text_input_layout_customize_post_filter_activity)
|
||||||
TextInputLayout excludeDomainsTextInputLayout;
|
TextInputLayout excludeDomainsTextInputLayout;
|
||||||
@BindView(R.id.exclude_domains_text_input_edit_text_customize_post_filter_activity)
|
@BindView(R.id.exclude_domains_text_input_edit_text_customize_post_filter_activity)
|
||||||
@@ -189,14 +182,7 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
TextInputLayout maxCommentsTextInputLayout;
|
TextInputLayout maxCommentsTextInputLayout;
|
||||||
@BindView(R.id.max_comments_text_input_edit_text_customize_post_filter_activity)
|
@BindView(R.id.max_comments_text_input_edit_text_customize_post_filter_activity)
|
||||||
TextInputEditText maxCommentsTextInputEditText;
|
TextInputEditText maxCommentsTextInputEditText;
|
||||||
@BindView(R.id.min_awards_text_input_layout_customize_post_filter_activity)
|
|
||||||
TextInputLayout minAwardsTextInputLayout;
|
|
||||||
@BindView(R.id.min_awards_text_input_edit_text_customize_post_filter_activity)
|
|
||||||
TextInputEditText minAwardsTextInputEditText;
|
|
||||||
@BindView(R.id.max_awards_text_input_layout_customize_post_filter_activity)
|
|
||||||
TextInputLayout maxAwardsTextInputLayout;
|
|
||||||
@BindView(R.id.max_awards_text_input_edit_text_customize_post_filter_activity)
|
|
||||||
TextInputEditText maxAwardsTextInputEditText;
|
|
||||||
@Inject
|
@Inject
|
||||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -226,10 +212,6 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
|
|
||||||
applyCustomTheme();
|
applyCustomTheme();
|
||||||
|
|
||||||
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.SWIPE_RIGHT_TO_GO_BACK, true)) {
|
|
||||||
Slidr.attach(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isChangeStatusBarIconColor()) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isChangeStatusBarIconColor()) {
|
||||||
addOnOffsetChangedListener(appBarLayout);
|
addOnOffsetChangedListener(appBarLayout);
|
||||||
}
|
}
|
||||||
@@ -327,16 +309,12 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
titleContainsRegexTextInputEditText.setText(postFilter.postTitleContainsRegex);
|
titleContainsRegexTextInputEditText.setText(postFilter.postTitleContainsRegex);
|
||||||
excludesSubredditsTextInputEditText.setText(postFilter.excludeSubreddits);
|
excludesSubredditsTextInputEditText.setText(postFilter.excludeSubreddits);
|
||||||
excludesUsersTextInputEditText.setText(postFilter.excludeUsers);
|
excludesUsersTextInputEditText.setText(postFilter.excludeUsers);
|
||||||
excludesFlairsTextInputEditText.setText(postFilter.excludeFlairs);
|
|
||||||
containsFlairsTextInputEditText.setText(postFilter.containFlairs);
|
|
||||||
excludeDomainsTextInputEditText.setText(postFilter.excludeDomains);
|
excludeDomainsTextInputEditText.setText(postFilter.excludeDomains);
|
||||||
containDomainsTextInputEditText.setText(postFilter.containDomains);
|
containDomainsTextInputEditText.setText(postFilter.containDomains);
|
||||||
minVoteTextInputEditText.setText(Integer.toString(postFilter.minVote));
|
minVoteTextInputEditText.setText(Integer.toString(postFilter.minVote));
|
||||||
maxVoteTextInputEditText.setText(Integer.toString(postFilter.maxVote));
|
maxVoteTextInputEditText.setText(Integer.toString(postFilter.maxVote));
|
||||||
minCommentsTextInputEditText.setText(Integer.toString(postFilter.minComments));
|
minCommentsTextInputEditText.setText(Integer.toString(postFilter.minComments));
|
||||||
maxCommentsTextInputEditText.setText(Integer.toString(postFilter.maxComments));
|
maxCommentsTextInputEditText.setText(Integer.toString(postFilter.maxComments));
|
||||||
minAwardsTextInputEditText.setText(Integer.toString(postFilter.minAwards));
|
|
||||||
maxAwardsTextInputEditText.setText(Integer.toString(postFilter.maxAwards));
|
|
||||||
|
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
String excludeSubreddit = intent.getStringExtra(EXTRA_EXCLUDE_SUBREDDIT);
|
String excludeSubreddit = intent.getStringExtra(EXTRA_EXCLUDE_SUBREDDIT);
|
||||||
@@ -358,18 +336,6 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
excludesUsersTextInputEditText.append(excludeUser);
|
excludesUsersTextInputEditText.append(excludeUser);
|
||||||
}
|
}
|
||||||
if (excludeFlair != null && !excludeFlair.equals("")) {
|
|
||||||
if (!excludesFlairsTextInputEditText.getText().toString().equals("")) {
|
|
||||||
excludesFlairsTextInputEditText.append(",");
|
|
||||||
}
|
|
||||||
excludesFlairsTextInputEditText.append(excludeFlair);
|
|
||||||
}
|
|
||||||
if (containFlair != null && !containFlair.equals("")) {
|
|
||||||
if (!containsFlairsTextInputEditText.getText().toString().equals("")) {
|
|
||||||
containsFlairsTextInputEditText.append(",");
|
|
||||||
}
|
|
||||||
containsFlairsTextInputEditText.append(containFlair);
|
|
||||||
}
|
|
||||||
if (excludeDomain != null && !excludeDomain.equals("")) {
|
if (excludeDomain != null && !excludeDomain.equals("")) {
|
||||||
if (!excludeDomainsTextInputEditText.getText().toString().equals("")) {
|
if (!excludeDomainsTextInputEditText.getText().toString().equals("")) {
|
||||||
excludeDomainsTextInputEditText.append(",");
|
excludeDomainsTextInputEditText.append(",");
|
||||||
@@ -432,12 +398,6 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
excludesUsersTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
excludesUsersTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
||||||
excludesUsersTextInputEditText.setTextColor(primaryTextColor);
|
excludesUsersTextInputEditText.setTextColor(primaryTextColor);
|
||||||
addUsersImageView.setImageDrawable(Utils.getTintedDrawable(this, R.drawable.ic_add_24dp, primaryIconColor));
|
addUsersImageView.setImageDrawable(Utils.getTintedDrawable(this, R.drawable.ic_add_24dp, primaryIconColor));
|
||||||
excludesFlairsTextInputLayout.setBoxStrokeColor(primaryTextColor);
|
|
||||||
excludesFlairsTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
|
||||||
excludesFlairsTextInputEditText.setTextColor(primaryTextColor);
|
|
||||||
containsFlairsTextInputLayout.setBoxStrokeColor(primaryTextColor);
|
|
||||||
containsFlairsTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
|
||||||
containsFlairsTextInputEditText.setTextColor(primaryTextColor);
|
|
||||||
excludeDomainsTextInputLayout.setBoxStrokeColor(primaryTextColor);
|
excludeDomainsTextInputLayout.setBoxStrokeColor(primaryTextColor);
|
||||||
excludeDomainsTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
excludeDomainsTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
||||||
excludeDomainsTextInputEditText.setTextColor(primaryTextColor);
|
excludeDomainsTextInputEditText.setTextColor(primaryTextColor);
|
||||||
@@ -456,13 +416,6 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
maxCommentsTextInputLayout.setBoxStrokeColor(primaryTextColor);
|
maxCommentsTextInputLayout.setBoxStrokeColor(primaryTextColor);
|
||||||
maxCommentsTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
maxCommentsTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
||||||
maxCommentsTextInputEditText.setTextColor(primaryTextColor);
|
maxCommentsTextInputEditText.setTextColor(primaryTextColor);
|
||||||
minAwardsTextInputLayout.setBoxStrokeColor(primaryTextColor);
|
|
||||||
minAwardsTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
|
||||||
minAwardsTextInputEditText.setTextColor(primaryTextColor);
|
|
||||||
maxAwardsTextInputLayout.setBoxStrokeColor(primaryTextColor);
|
|
||||||
maxAwardsTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
|
||||||
maxAwardsTextInputEditText.setTextColor(primaryTextColor);
|
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
nameTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
nameTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
titleExcludesStringsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
titleExcludesStringsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
@@ -471,16 +424,12 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
titleContainsRegexTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
titleContainsRegexTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
excludesSubredditsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
excludesSubredditsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
excludesUsersTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
excludesUsersTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
excludesFlairsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
|
||||||
containsFlairsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
|
||||||
excludeDomainsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
excludeDomainsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
containDomainsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
containDomainsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
minVoteTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
minVoteTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
maxVoteTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
maxVoteTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
minCommentsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
minCommentsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
maxCommentsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
maxCommentsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
||||||
minAwardsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
|
||||||
maxAwardsTextInputEditText.setTextCursorDrawable(cursorDrawable);
|
|
||||||
} else {
|
} else {
|
||||||
setCursorDrawableColor(nameTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(nameTextInputEditText, primaryTextColor);
|
||||||
setCursorDrawableColor(titleExcludesStringsTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(titleExcludesStringsTextInputEditText, primaryTextColor);
|
||||||
@@ -489,16 +438,12 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
setCursorDrawableColor(titleContainsRegexTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(titleContainsRegexTextInputEditText, primaryTextColor);
|
||||||
setCursorDrawableColor(excludesSubredditsTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(excludesSubredditsTextInputEditText, primaryTextColor);
|
||||||
setCursorDrawableColor(excludesUsersTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(excludesUsersTextInputEditText, primaryTextColor);
|
||||||
setCursorDrawableColor(excludesFlairsTextInputEditText, primaryTextColor);
|
|
||||||
setCursorDrawableColor(containsFlairsTextInputEditText, primaryTextColor);
|
|
||||||
setCursorDrawableColor(excludeDomainsTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(excludeDomainsTextInputEditText, primaryTextColor);
|
||||||
setCursorDrawableColor(containDomainsTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(containDomainsTextInputEditText, primaryTextColor);
|
||||||
setCursorDrawableColor(minVoteTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(minVoteTextInputEditText, primaryTextColor);
|
||||||
setCursorDrawableColor(maxVoteTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(maxVoteTextInputEditText, primaryTextColor);
|
||||||
setCursorDrawableColor(minCommentsTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(minCommentsTextInputEditText, primaryTextColor);
|
||||||
setCursorDrawableColor(maxCommentsTextInputEditText, primaryTextColor);
|
setCursorDrawableColor(maxCommentsTextInputEditText, primaryTextColor);
|
||||||
setCursorDrawableColor(minAwardsTextInputEditText, primaryTextColor);
|
|
||||||
setCursorDrawableColor(maxAwardsTextInputEditText, primaryTextColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
@@ -643,8 +588,6 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
postFilter.minVote = minVoteTextInputEditText.getText() == null || minVoteTextInputEditText.getText().toString().equals("") ? -1 : Integer.parseInt(minVoteTextInputEditText.getText().toString());
|
postFilter.minVote = minVoteTextInputEditText.getText() == null || minVoteTextInputEditText.getText().toString().equals("") ? -1 : Integer.parseInt(minVoteTextInputEditText.getText().toString());
|
||||||
postFilter.maxComments = maxCommentsTextInputEditText.getText() == null || maxCommentsTextInputEditText.getText().toString().equals("") ? -1 : Integer.parseInt(maxCommentsTextInputEditText.getText().toString());
|
postFilter.maxComments = maxCommentsTextInputEditText.getText() == null || maxCommentsTextInputEditText.getText().toString().equals("") ? -1 : Integer.parseInt(maxCommentsTextInputEditText.getText().toString());
|
||||||
postFilter.minComments = minCommentsTextInputEditText.getText() == null || minCommentsTextInputEditText.getText().toString().equals("") ? -1 : Integer.parseInt(minCommentsTextInputEditText.getText().toString());
|
postFilter.minComments = minCommentsTextInputEditText.getText() == null || minCommentsTextInputEditText.getText().toString().equals("") ? -1 : Integer.parseInt(minCommentsTextInputEditText.getText().toString());
|
||||||
postFilter.maxAwards = maxAwardsTextInputEditText.getText() == null || maxAwardsTextInputEditText.getText().toString().equals("") ? -1 : Integer.parseInt(maxAwardsTextInputEditText.getText().toString());
|
|
||||||
postFilter.minAwards = minAwardsTextInputEditText.getText() == null || minAwardsTextInputEditText.getText().toString().equals("") ? -1 : Integer.parseInt(minAwardsTextInputEditText.getText().toString());
|
|
||||||
postFilter.postTitleExcludesRegex = titleExcludesRegexTextInputEditText.getText().toString();
|
postFilter.postTitleExcludesRegex = titleExcludesRegexTextInputEditText.getText().toString();
|
||||||
Pattern.compile(postFilter.postTitleExcludesRegex);
|
Pattern.compile(postFilter.postTitleExcludesRegex);
|
||||||
postFilter.postTitleContainsRegex = titleContainsRegexTextInputEditText.getText().toString();
|
postFilter.postTitleContainsRegex = titleContainsRegexTextInputEditText.getText().toString();
|
||||||
@@ -653,8 +596,6 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
postFilter.postTitleContainsStrings = titleContainsStringsTextInputEditText.getText().toString();
|
postFilter.postTitleContainsStrings = titleContainsStringsTextInputEditText.getText().toString();
|
||||||
postFilter.excludeSubreddits = excludesSubredditsTextInputEditText.getText().toString();
|
postFilter.excludeSubreddits = excludesSubredditsTextInputEditText.getText().toString();
|
||||||
postFilter.excludeUsers = excludesUsersTextInputEditText.getText().toString();
|
postFilter.excludeUsers = excludesUsersTextInputEditText.getText().toString();
|
||||||
postFilter.excludeFlairs = excludesFlairsTextInputEditText.getText().toString();
|
|
||||||
postFilter.containFlairs = containsFlairsTextInputEditText.getText().toString();
|
|
||||||
postFilter.excludeDomains = excludeDomainsTextInputEditText.getText().toString();
|
postFilter.excludeDomains = excludeDomainsTextInputEditText.getText().toString();
|
||||||
postFilter.containDomains = containDomainsTextInputEditText.getText().toString();
|
postFilter.containDomains = containDomainsTextInputEditText.getText().toString();
|
||||||
postFilter.containTextType = postTypeTextCheckBox.isChecked();
|
postFilter.containTextType = postTypeTextCheckBox.isChecked();
|
||||||
|
|||||||
@@ -345,7 +345,7 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
|
|||||||
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||||
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||||
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import android.view.View;
|
|||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.Switch;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@@ -25,6 +24,7 @@ import com.google.android.material.appbar.AppBarLayout;
|
|||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -40,7 +40,7 @@ import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
|||||||
import eu.toldi.infinityforlemmy.multireddit.EditMultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.EditMultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.FetchMultiRedditInfo;
|
import eu.toldi.infinityforlemmy.multireddit.FetchMultiRedditInfo;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiRedditJSONModel;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
@@ -70,12 +70,6 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
EditText descriptionEditText;
|
EditText descriptionEditText;
|
||||||
@BindView(R.id.divider_2_edit_multi_reddit_activity)
|
@BindView(R.id.divider_2_edit_multi_reddit_activity)
|
||||||
View divider2;
|
View divider2;
|
||||||
@BindView(R.id.visibility_wrapper_linear_layout_edit_multi_reddit_activity)
|
|
||||||
LinearLayout visibilityLinearLayout;
|
|
||||||
@BindView(R.id.visibility_text_view_edit_multi_reddit_activity)
|
|
||||||
TextView visibilityTextView;
|
|
||||||
@BindView(R.id.visibility_switch_edit_multi_reddit_activity)
|
|
||||||
Switch visibilitySwitch;
|
|
||||||
@BindView(R.id.select_subreddit_text_view_edit_multi_reddit_activity)
|
@BindView(R.id.select_subreddit_text_view_edit_multi_reddit_activity)
|
||||||
TextView selectSubredditTextView;
|
TextView selectSubredditTextView;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -123,10 +117,9 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, "-");
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, "-");
|
||||||
|
|
||||||
if (mAccessToken == null) {
|
if (mAccessToken == null) {
|
||||||
visibilityLinearLayout.setVisibility(View.GONE);
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
nameEditText.setImeOptions(nameEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
nameEditText.setImeOptions(nameEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
||||||
descriptionEditText.setImeOptions(descriptionEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
descriptionEditText.setImeOptions(descriptionEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
||||||
@@ -145,9 +138,9 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
|
|
||||||
private void bindView() {
|
private void bindView() {
|
||||||
if (multiReddit == null) {
|
if (multiReddit == null) {
|
||||||
if (mAccessToken == null) {
|
|
||||||
FetchMultiRedditInfo.anonymousFetchMultiRedditInfo(mExecutor, new Handler(),
|
FetchMultiRedditInfo.anonymousFetchMultiRedditInfo(mExecutor, new Handler(),
|
||||||
mRedditDataRoomDatabase, multipath, new FetchMultiRedditInfo.FetchMultiRedditInfoListener() {
|
mRedditDataRoomDatabase, multipath, mAccountName, new FetchMultiRedditInfo.FetchMultiRedditInfoListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success(MultiReddit multiReddit) {
|
public void success(MultiReddit multiReddit) {
|
||||||
EditMultiRedditActivity.this.multiReddit = multiReddit;
|
EditMultiRedditActivity.this.multiReddit = multiReddit;
|
||||||
@@ -162,36 +155,27 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
//Will not be called
|
//Will not be called
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
FetchMultiRedditInfo.fetchMultiRedditInfo(mRetrofit, mAccessToken, multipath, new FetchMultiRedditInfo.FetchMultiRedditInfoListener() {
|
|
||||||
@Override
|
|
||||||
public void success(MultiReddit multiReddit) {
|
|
||||||
EditMultiRedditActivity.this.multiReddit = multiReddit;
|
|
||||||
progressBar.setVisibility(View.GONE);
|
|
||||||
linearLayout.setVisibility(View.VISIBLE);
|
|
||||||
nameEditText.setText(multiReddit.getDisplayName());
|
|
||||||
descriptionEditText.setText(multiReddit.getDescription());
|
|
||||||
visibilitySwitch.setChecked(!multiReddit.getVisibility().equals("public"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Snackbar.make(coordinatorLayout, R.string.cannot_fetch_multireddit, Snackbar.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
progressBar.setVisibility(View.GONE);
|
progressBar.setVisibility(View.GONE);
|
||||||
linearLayout.setVisibility(View.VISIBLE);
|
linearLayout.setVisibility(View.VISIBLE);
|
||||||
nameEditText.setText(multiReddit.getDisplayName());
|
nameEditText.setText(multiReddit.getDisplayName());
|
||||||
descriptionEditText.setText(multiReddit.getDescription());
|
descriptionEditText.setText(multiReddit.getDescription());
|
||||||
visibilitySwitch.setChecked(!multiReddit.getVisibility().equals("public"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
selectSubredditTextView.setOnClickListener(view -> {
|
selectSubredditTextView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(EditMultiRedditActivity.this, SelectedSubredditsAndUsersActivity.class);
|
Intent intent = new Intent(EditMultiRedditActivity.this, SelectedSubredditsAndUsersActivity.class);
|
||||||
if (multiReddit.getSubreddits() != null) {
|
if (multiReddit.getSubreddits() != null) {
|
||||||
intent.putStringArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, multiReddit.getSubreddits());
|
if (multiReddit.getSubreddits().isEmpty() && !multiReddit.getPath().equals("")) {
|
||||||
|
String[] communities = multiReddit.getPath().split(",");
|
||||||
|
ArrayList<SubredditWithSelection> communitiesList = new ArrayList<>();
|
||||||
|
for (String community : communities) {
|
||||||
|
communitiesList.add(new SubredditWithSelection(community.substring(0, community.indexOf('@')), null, community));
|
||||||
|
}
|
||||||
|
intent.putParcelableArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, communitiesList);
|
||||||
|
} else {
|
||||||
|
intent.putParcelableArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, multiReddit.getSubreddits());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
|
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
|
||||||
});
|
});
|
||||||
@@ -216,13 +200,23 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mAccessToken == null) {
|
|
||||||
String name = nameEditText.getText().toString();
|
String name = nameEditText.getText().toString();
|
||||||
multiReddit.setDisplayName(name);
|
multiReddit.setDisplayName(name);
|
||||||
multiReddit.setName(name);
|
multiReddit.setName(name);
|
||||||
multiReddit.setDescription(descriptionEditText.getText().toString());
|
multiReddit.setDescription(descriptionEditText.getText().toString());
|
||||||
|
StringBuilder pathStringBuilder = new StringBuilder();
|
||||||
|
String prefix = "";
|
||||||
|
for (SubredditWithSelection s : multiReddit.getSubreddits()) {
|
||||||
|
pathStringBuilder.append(prefix);
|
||||||
|
prefix = ",";
|
||||||
|
pathStringBuilder.append(s.getQualifiedName());
|
||||||
|
}
|
||||||
|
|
||||||
|
multiReddit.setPath(pathStringBuilder.toString());
|
||||||
|
|
||||||
EditMultiReddit.anonymousEditMultiReddit(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
EditMultiReddit.anonymousEditMultiReddit(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
||||||
multiReddit, new EditMultiReddit.EditMultiRedditListener() {
|
multiReddit, multipath, new EditMultiReddit.EditMultiRedditListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
finish();
|
finish();
|
||||||
@@ -233,22 +227,7 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
//Will not be called
|
//Will not be called
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
String jsonModel = new MultiRedditJSONModel(nameEditText.getText().toString(), descriptionEditText.getText().toString(),
|
|
||||||
visibilitySwitch.isChecked(), multiReddit.getSubreddits()).createJSONModel();
|
|
||||||
EditMultiReddit.editMultiReddit(mRetrofit, mAccessToken, multiReddit.getPath(),
|
|
||||||
jsonModel, new EditMultiReddit.EditMultiRedditListener() {
|
|
||||||
@Override
|
|
||||||
public void success() {
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Snackbar.make(coordinatorLayout, R.string.edit_multi_reddit_failed, Snackbar.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -259,7 +238,7 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
multiReddit.setSubreddits(data.getStringArrayListExtra(
|
multiReddit.setSubreddits(data.getParcelableArrayListExtra(
|
||||||
SelectedSubredditsAndUsersActivity.EXTRA_RETURN_SELECTED_SUBREDDITS));
|
SelectedSubredditsAndUsersActivity.EXTRA_RETURN_SELECTED_SUBREDDITS));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -296,7 +275,6 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
divider2.setBackgroundColor(dividerColor);
|
divider2.setBackgroundColor(dividerColor);
|
||||||
descriptionEditText.setTextColor(primaryTextColor);
|
descriptionEditText.setTextColor(primaryTextColor);
|
||||||
descriptionEditText.setHintTextColor(secondaryTextColor);
|
descriptionEditText.setHintTextColor(secondaryTextColor);
|
||||||
visibilityTextView.setTextColor(primaryTextColor);
|
|
||||||
selectSubredditTextView.setTextColor(primaryTextColor);
|
selectSubredditTextView.setTextColor(primaryTextColor);
|
||||||
|
|
||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
contentEditText.setText(mPost.getSelfText());
|
contentEditText.setText(mPost.getSelfText());
|
||||||
linkEditText.setText(mPost.getUrl());
|
linkEditText.setText(mPost.getUrl());
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(getApplication());
|
||||||
|
|
||||||
if (mPost.getUrl() != null && mPost.getUrl().matches(picturePattern)) {
|
if (mPost.getUrl() != null && mPost.getUrl().matches(picturePattern)) {
|
||||||
loadImage();
|
loadImage();
|
||||||
@@ -308,7 +308,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
isSubmitting = true;
|
isSubmitting = true;
|
||||||
|
|
||||||
Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show();
|
Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show();
|
||||||
mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), titleEditText.getText().toString(), linkEditText.getText().toString(), contentEditText.getText().toString(), mPost.isNSFW(), null, mAccessToken))
|
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>() {
|
.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
@@ -354,7 +354,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
Uri imageUri = data.getData();
|
Uri imageUri = data.getData();
|
||||||
mExecutor.execute(() -> {
|
mExecutor.execute(() -> {
|
||||||
try {
|
try {
|
||||||
Bitmap bitmap = Glide.with(this).asBitmap().load(imageUri).submit().get();
|
Bitmap bitmap = Glide.with(getApplication()).asBitmap().load(imageUri).submit().get();
|
||||||
String imageUrlOrError = UploadImageUtils.uploadImage(mRetrofit, mAccessToken, bitmap);
|
String imageUrlOrError = UploadImageUtils.uploadImage(mRetrofit, mAccessToken, bitmap);
|
||||||
handler.post(() -> {
|
handler.post(() -> {
|
||||||
if (imageUrlOrError != null && !imageUrlOrError.startsWith("Error: ")) {
|
if (imageUrlOrError != null && !imageUrlOrError.startsWith("Error: ")) {
|
||||||
@@ -456,7 +456,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
|
|||||||
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||||
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||||
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
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.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
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.EditProfileUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
import pl.droidsonroids.gif.GifImageView;
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ public class EditProfileActivity extends BaseActivity {
|
|||||||
startPickImage(PICK_IMAGE_AVATAR_REQUEST_CODE);
|
startPickImage(PICK_IMAGE_AVATAR_REQUEST_CODE);
|
||||||
});
|
});
|
||||||
|
|
||||||
final RequestManager glide = Glide.with(this);
|
final RequestManager glide = Glide.with(getApplication());
|
||||||
final UserViewModel.Factory userViewModelFactory =
|
final UserViewModel.Factory userViewModelFactory =
|
||||||
new UserViewModel.Factory(getApplication(), mRedditDataRoomDatabase, mAccountName);
|
new UserViewModel.Factory(getApplication(), mRedditDataRoomDatabase, mAccountName);
|
||||||
final UserViewModel userViewModel =
|
final UserViewModel userViewModel =
|
||||||
|
|||||||
@@ -272,7 +272,7 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
|||||||
switch (postType) {
|
switch (postType) {
|
||||||
case PostPagingSource.TYPE_FRONT_PAGE:
|
case PostPagingSource.TYPE_FRONT_PAGE:
|
||||||
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
||||||
getSupportActionBar().setTitle(R.string.home);
|
getSupportActionBar().setTitle(R.string.subscribed_feed);
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_SEARCH:
|
case PostPagingSource.TYPE_SEARCH:
|
||||||
getSupportActionBar().setTitle(R.string.search);
|
getSupportActionBar().setTitle(R.string.search);
|
||||||
@@ -317,7 +317,7 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
|||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, postType);
|
bundle.putInt(PostFragment.EXTRA_POST_TYPE, postType);
|
||||||
bundle.putParcelable(PostFragment.EXTRA_FILTER, postFilter);
|
bundle.putParcelable(PostFragment.EXTRA_FILTER, postFilter);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
if (postType == PostPagingSource.TYPE_USER) {
|
if (postType == PostPagingSource.TYPE_USER) {
|
||||||
bundle.putString(PostFragment.EXTRA_USER_NAME, name);
|
bundle.putString(PostFragment.EXTRA_USER_NAME, name);
|
||||||
bundle.putString(PostFragment.EXTRA_USER_WHERE, userWhere);
|
bundle.putString(PostFragment.EXTRA_USER_WHERE, userWhere);
|
||||||
@@ -371,20 +371,17 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
|||||||
} else if (itemId == R.id.action_sort_filtered_thing_activity) {
|
} else if (itemId == R.id.action_sort_filtered_thing_activity) {
|
||||||
switch (postType) {
|
switch (postType) {
|
||||||
case PostPagingSource.TYPE_FRONT_PAGE:
|
case PostPagingSource.TYPE_FRONT_PAGE:
|
||||||
SortTypeBottomSheetFragment bestSortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(false, mFragment.getSortType());
|
case PostPagingSource.TYPE_SUBREDDIT:
|
||||||
|
case PostPagingSource.TYPE_MULTI_REDDIT:
|
||||||
|
case PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT:
|
||||||
|
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
||||||
|
SortTypeBottomSheetFragment bestSortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(postType, mFragment.getSortType());
|
||||||
bestSortTypeBottomSheetFragment.show(getSupportFragmentManager(), bestSortTypeBottomSheetFragment.getTag());
|
bestSortTypeBottomSheetFragment.show(getSupportFragmentManager(), bestSortTypeBottomSheetFragment.getTag());
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_SEARCH:
|
case PostPagingSource.TYPE_SEARCH:
|
||||||
SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SearchPostSortTypeBottomSheetFragment.getNewInstance(mFragment.getSortType());
|
SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SearchPostSortTypeBottomSheetFragment.getNewInstance(mFragment.getSortType());
|
||||||
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_SUBREDDIT:
|
|
||||||
case PostPagingSource.TYPE_MULTI_REDDIT:
|
|
||||||
case PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT:
|
|
||||||
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
|
||||||
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(true, mFragment.getSortType());
|
|
||||||
sortTypeBottomSheetFragment.show(getSupportFragmentManager(), sortTypeBottomSheetFragment.getTag());
|
|
||||||
break;
|
|
||||||
case PostPagingSource.TYPE_USER:
|
case PostPagingSource.TYPE_USER:
|
||||||
UserThingSortTypeBottomSheetFragment userThingSortTypeBottomSheetFragment = UserThingSortTypeBottomSheetFragment.getNewInstance(mFragment.getSortType());
|
UserThingSortTypeBottomSheetFragment userThingSortTypeBottomSheetFragment = UserThingSortTypeBottomSheetFragment.getNewInstance(mFragment.getSortType());
|
||||||
userThingSortTypeBottomSheetFragment.show(getSupportFragmentManager(), userThingSortTypeBottomSheetFragment.getTag());
|
userThingSortTypeBottomSheetFragment.show(getSupportFragmentManager(), userThingSortTypeBottomSheetFragment.getTag());
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import androidx.appcompat.widget.Toolbar;
|
|||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
import com.google.android.material.appbar.AppBarLayout;
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
|
|
||||||
@@ -29,12 +30,6 @@ import javax.inject.Named;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
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.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
@@ -45,6 +40,12 @@ import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
|||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
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 {
|
public class FullMarkdownActivity extends BaseActivity {
|
||||||
|
|
||||||
@@ -139,7 +140,7 @@ public class FullMarkdownActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
Markwon markwon = MarkdownUtils.createFullRedditMarkwon(this,
|
Markwon markwon = MarkdownUtils.createFullRedditMarkwon(this,
|
||||||
miscPlugin, markdownColor, spoilerBackgroundColor, null);
|
miscPlugin, markdownColor, spoilerBackgroundColor, Glide.with(getApplication()), null, mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false));
|
||||||
|
|
||||||
MarkwonAdapter markwonAdapter = MarkdownUtils.createTablesAdapter();
|
MarkwonAdapter markwonAdapter = MarkdownUtils.createTablesAdapter();
|
||||||
LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(this, new SwipeLockInterface() {
|
LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(this, new SwipeLockInterface() {
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ public class GiveAwardActivity extends BaseActivity {
|
|||||||
View layout = inflater.inflate(R.layout.dialog_give_award, null);
|
View layout = inflater.inflate(R.layout.dialog_give_award, null);
|
||||||
MaterialSwitch materialSwitch = layout.findViewById(R.id.switch_material_give_award_dialog);
|
MaterialSwitch materialSwitch = layout.findViewById(R.id.switch_material_give_award_dialog);
|
||||||
new MaterialAlertDialogBuilder(this)
|
new MaterialAlertDialogBuilder(this)
|
||||||
.setTitle(R.string.give_award_dialog_title)
|
.setTitle("")
|
||||||
.setView(layout)
|
.setView(layout)
|
||||||
.setPositiveButton(R.string.yes, (dialogInterface, i) -> {
|
.setPositiveButton(R.string.yes, (dialogInterface, i) -> {
|
||||||
boolean isAnonymous = materialSwitch.isChecked();
|
boolean isAnonymous = materialSwitch.isChecked();
|
||||||
@@ -138,10 +138,10 @@ public class GiveAwardActivity extends BaseActivity {
|
|||||||
public void failed(int code, String message) {
|
public void failed(int code, String message) {
|
||||||
View layout = inflater.inflate(R.layout.copy_text_material_dialog, null);
|
View layout = inflater.inflate(R.layout.copy_text_material_dialog, null);
|
||||||
TextView textView = layout.findViewById(R.id.text_view_copy_text_material_dialog);
|
TextView textView = layout.findViewById(R.id.text_view_copy_text_material_dialog);
|
||||||
String text = getString(R.string.give_award_error_message, code, message == null ? "" : message);
|
String text = "";
|
||||||
textView.setText(text);
|
textView.setText(text);
|
||||||
new MaterialAlertDialogBuilder(GiveAwardActivity.this, R.style.CopyTextMaterialAlertDialogTheme)
|
new MaterialAlertDialogBuilder(GiveAwardActivity.this, R.style.CopyTextMaterialAlertDialogTheme)
|
||||||
.setTitle(R.string.give_award_failed)
|
.setTitle("")
|
||||||
.setView(layout)
|
.setView(layout)
|
||||||
.setPositiveButton(R.string.copy_all, (dialogInterface, i) -> {
|
.setPositiveButton(R.string.copy_all, (dialogInterface, i) -> {
|
||||||
ClipboardManager clipboard = (ClipboardManager) GiveAwardActivity.this.getSystemService(Context.CLIPBOARD_SERVICE);
|
ClipboardManager clipboard = (ClipboardManager) GiveAwardActivity.this.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
|
|||||||
@@ -1,336 +0,0 @@
|
|||||||
package eu.toldi.infinityforlemmy.activities;
|
|
||||||
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.KeyEvent;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.Window;
|
|
||||||
import android.view.WindowManager;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.fragment.app.FragmentActivity;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
|
||||||
import androidx.viewpager2.widget.ViewPager2;
|
|
||||||
|
|
||||||
import com.google.android.material.appbar.AppBarLayout;
|
|
||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
|
||||||
import com.google.android.material.tabs.TabLayout;
|
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import javax.inject.Named;
|
|
||||||
|
|
||||||
import butterknife.BindView;
|
|
||||||
import butterknife.ButterKnife;
|
|
||||||
import eu.toldi.infinityforlemmy.ActivityToolbarInterface;
|
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
|
||||||
import eu.toldi.infinityforlemmy.R;
|
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostLayoutBottomSheetFragment;
|
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
|
||||||
import eu.toldi.infinityforlemmy.events.ChangeNSFWEvent;
|
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
|
||||||
import eu.toldi.infinityforlemmy.fragments.CommentsListingFragment;
|
|
||||||
import eu.toldi.infinityforlemmy.fragments.HistoryPostFragment;
|
|
||||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
|
||||||
|
|
||||||
public class HistoryActivity extends BaseActivity implements ActivityToolbarInterface,
|
|
||||||
PostLayoutBottomSheetFragment.PostLayoutSelectionCallback {
|
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_history_activity)
|
|
||||||
CoordinatorLayout coordinatorLayout;
|
|
||||||
@BindView(R.id.appbar_layout_history_activity)
|
|
||||||
AppBarLayout appBarLayout;
|
|
||||||
@BindView(R.id.collapsing_toolbar_layout_history_activity)
|
|
||||||
CollapsingToolbarLayout collapsingToolbarLayout;
|
|
||||||
@BindView(R.id.toolbar_history_activity)
|
|
||||||
Toolbar toolbar;
|
|
||||||
@BindView(R.id.tab_layout_tab_layout_history_activity_activity)
|
|
||||||
TabLayout tabLayout;
|
|
||||||
@BindView(R.id.view_pager_history_activity)
|
|
||||||
ViewPager2 viewPager2;
|
|
||||||
@Inject
|
|
||||||
@Named("default")
|
|
||||||
SharedPreferences mSharedPreferences;
|
|
||||||
@Inject
|
|
||||||
@Named("post_layout")
|
|
||||||
SharedPreferences mPostLayoutSharedPreferences;
|
|
||||||
@Inject
|
|
||||||
@Named("current_account")
|
|
||||||
SharedPreferences mCurrentAccountSharedPreferences;
|
|
||||||
@Inject
|
|
||||||
CustomThemeWrapper mCustomThemeWrapper;
|
|
||||||
private FragmentManager fragmentManager;
|
|
||||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
|
||||||
private String mAccessToken;
|
|
||||||
private String mAccountName;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
setContentView(R.layout.activity_history);
|
|
||||||
|
|
||||||
ButterKnife.bind(this);
|
|
||||||
|
|
||||||
EventBus.getDefault().register(this);
|
|
||||||
|
|
||||||
applyCustomTheme();
|
|
||||||
|
|
||||||
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.SWIPE_RIGHT_TO_GO_BACK, true)) {
|
|
||||||
mSliderPanel = Slidr.attach(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//mViewPager2 = viewPager2;
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
||||||
setToolbarGoToTop(toolbar);
|
|
||||||
|
|
||||||
fragmentManager = getSupportFragmentManager();
|
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
|
||||||
|
|
||||||
initializeViewPager();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
|
||||||
if (sectionsPagerAdapter != null) {
|
|
||||||
return sectionsPagerAdapter.handleKeyDown(keyCode) || super.onKeyDown(keyCode, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.onKeyDown(keyCode, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@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);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeViewPager() {
|
|
||||||
sectionsPagerAdapter = new SectionsPagerAdapter(this);
|
|
||||||
tabLayout.setVisibility(View.GONE);
|
|
||||||
viewPager2.setAdapter(sectionsPagerAdapter);
|
|
||||||
viewPager2.setOffscreenPageLimit(2);
|
|
||||||
//viewPager2.setUserInputEnabled(!mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false));
|
|
||||||
viewPager2.setUserInputEnabled(false);
|
|
||||||
/*new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
|
||||||
switch (position) {
|
|
||||||
case 0:
|
|
||||||
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.posts));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}).attach();*/
|
|
||||||
|
|
||||||
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
|
||||||
@Override
|
|
||||||
public void onPageSelected(int position) {
|
|
||||||
if (position == 0) {
|
|
||||||
unlockSwipeRightToGoBack();
|
|
||||||
} else {
|
|
||||||
lockSwipeRightToGoBack();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
fixViewPager2Sensitivity(viewPager2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
|
||||||
getMenuInflater().inflate(R.menu.history_activity, menu);
|
|
||||||
applyMenuItemTheme(menu);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
|
||||||
int itemId = item.getItemId();
|
|
||||||
if (itemId == android.R.id.home) {
|
|
||||||
finish();
|
|
||||||
return true;
|
|
||||||
} else if (itemId == R.id.action_refresh_history_activity) {
|
|
||||||
sectionsPagerAdapter.refresh();
|
|
||||||
return true;
|
|
||||||
} else if (itemId == R.id.action_change_post_layout_history_activity) {
|
|
||||||
PostLayoutBottomSheetFragment postLayoutBottomSheetFragment = new PostLayoutBottomSheetFragment();
|
|
||||||
postLayoutBottomSheetFragment.show(getSupportFragmentManager(), postLayoutBottomSheetFragment.getTag());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
EventBus.getDefault().unregister(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onAccountSwitchEvent(SwitchAccountEvent event) {
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
|
||||||
public void onChangeNSFWEvent(ChangeNSFWEvent changeNSFWEvent) {
|
|
||||||
sectionsPagerAdapter.changeNSFW(changeNSFWEvent.nsfw);
|
|
||||||
}
|
|
||||||
|
|
||||||
@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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postLayoutSelected(int postLayout) {
|
|
||||||
if (sectionsPagerAdapter != null) {
|
|
||||||
mPostLayoutSharedPreferences.edit().putInt(SharedPreferencesUtils.HISTORY_POST_LAYOUT_READ_POST, postLayout).apply();
|
|
||||||
sectionsPagerAdapter.changePostLayout(postLayout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class SectionsPagerAdapter extends FragmentStateAdapter {
|
|
||||||
|
|
||||||
SectionsPagerAdapter(FragmentActivity fa) {
|
|
||||||
super(fa);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public Fragment createFragment(int position) {
|
|
||||||
if (position == 0) {
|
|
||||||
HistoryPostFragment fragment = new HistoryPostFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putInt(HistoryPostFragment.EXTRA_HISTORY_TYPE, HistoryPostFragment.HISTORY_TYPE_READ_POSTS);
|
|
||||||
bundle.putString(HistoryPostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
bundle.putString(HistoryPostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
|
||||||
fragment.setArguments(bundle);
|
|
||||||
return fragment;
|
|
||||||
} else {
|
|
||||||
HistoryPostFragment fragment = new HistoryPostFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putInt(HistoryPostFragment.EXTRA_HISTORY_TYPE, HistoryPostFragment.HISTORY_TYPE_READ_POSTS);
|
|
||||||
bundle.putString(HistoryPostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
|
||||||
bundle.putString(HistoryPostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
|
||||||
fragment.setArguments(bundle);
|
|
||||||
return fragment;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private Fragment getCurrentFragment() {
|
|
||||||
if (viewPager2 == null || fragmentManager == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return fragmentManager.findFragmentByTag("f" + viewPager2.getCurrentItem());
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean handleKeyDown(int keyCode) {
|
|
||||||
if (viewPager2.getCurrentItem() == 0) {
|
|
||||||
Fragment fragment = getCurrentFragment();
|
|
||||||
if (fragment instanceof PostFragment) {
|
|
||||||
return ((PostFragment) fragment).handleKeyDown(keyCode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void refresh() {
|
|
||||||
Fragment fragment = getCurrentFragment();
|
|
||||||
if (fragment instanceof PostFragment) {
|
|
||||||
((PostFragment) fragment).refresh();
|
|
||||||
} else if (fragment instanceof CommentsListingFragment) {
|
|
||||||
((CommentsListingFragment) fragment).refresh();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void changeNSFW(boolean nsfw) {
|
|
||||||
Fragment fragment = getCurrentFragment();
|
|
||||||
if (fragment instanceof PostFragment) {
|
|
||||||
((PostFragment) fragment).changeNSFW(nsfw);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void changePostLayout(int postLayout) {
|
|
||||||
Fragment fragment = getCurrentFragment();
|
|
||||||
if (fragment instanceof HistoryPostFragment) {
|
|
||||||
((HistoryPostFragment) fragment).changePostLayout(postLayout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void goBackToTop() {
|
|
||||||
Fragment fragment = getCurrentFragment();
|
|
||||||
if (fragment instanceof PostFragment) {
|
|
||||||
((PostFragment) fragment).goBackToTop();
|
|
||||||
} else if (fragment instanceof CommentsListingFragment) {
|
|
||||||
((CommentsListingFragment) fragment).goBackToTop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getItemCount() {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -55,6 +55,7 @@ import eu.toldi.infinityforlemmy.events.PassPrivateMessageEvent;
|
|||||||
import eu.toldi.infinityforlemmy.events.PassPrivateMessageIndexEvent;
|
import eu.toldi.infinityforlemmy.events.PassPrivateMessageIndexEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.fragments.InboxFragment;
|
import eu.toldi.infinityforlemmy.fragments.InboxFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.fragments.PrivateMessageFragment;
|
||||||
import eu.toldi.infinityforlemmy.message.CommentInteraction;
|
import eu.toldi.infinityforlemmy.message.CommentInteraction;
|
||||||
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
import eu.toldi.infinityforlemmy.message.FetchMessage;
|
||||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
||||||
@@ -155,7 +156,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
fragmentManager = getSupportFragmentManager();
|
fragmentManager = getSupportFragmentManager();
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
||||||
@@ -180,7 +181,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent pmIntent = new Intent(this, SendPrivateMessageActivity.class);
|
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);
|
startActivity(pmIntent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -193,7 +194,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
-> {
|
-> {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent pmIntent = new Intent(this, SendPrivateMessageActivity.class);
|
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);
|
startActivity(pmIntent);
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
@@ -330,7 +331,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
if (resultCode == RESULT_OK && requestCode == SEARCH_USER_REQUEST_CODE && data != null) {
|
if (resultCode == RESULT_OK && requestCode == SEARCH_USER_REQUEST_CODE && data != null) {
|
||||||
String username = data.getStringExtra(SearchActivity.EXTRA_RETURN_USER_NAME);
|
String username = data.getStringExtra(SearchActivity.EXTRA_RETURN_USER_NAME);
|
||||||
Intent intent = new Intent(this, SendPrivateMessageActivity.class);
|
Intent intent = new Intent(this, SendPrivateMessageActivity.class);
|
||||||
intent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, username);
|
//intent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, username);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -441,7 +442,7 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Fragment createFragment(int position) {
|
public Fragment createFragment(int position) {
|
||||||
InboxFragment fragment = new InboxFragment();
|
Fragment fragment = new InboxFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putString(InboxFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(InboxFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
switch (position) {
|
switch (position) {
|
||||||
@@ -450,11 +451,9 @@ public class InboxActivity extends BaseActivity implements ActivityToolbarInterf
|
|||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_MENTIONS);
|
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_MENTIONS);
|
||||||
fragment.setArguments(bundle);
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
bundle.putString(InboxFragment.EXTRA_MESSAGE_WHERE, FetchMessage.WHERE_MESSAGES);
|
fragment = new PrivateMessageFragment();
|
||||||
fragment.setArguments(bundle);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
|
|||||||
@@ -0,0 +1,385 @@
|
|||||||
|
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.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
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.bumptech.glide.Glide;
|
||||||
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
|
import com.google.android.material.card.MaterialCardView;
|
||||||
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
|
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.account.FetchBlockedThings;
|
||||||
|
import eu.toldi.infinityforlemmy.adapters.AdminRecyclerViewAdapter;
|
||||||
|
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData;
|
||||||
|
import eu.toldi.infinityforlemmy.blockedinstances.BlockedInstanceData;
|
||||||
|
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData;
|
||||||
|
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.BlockInstance;
|
||||||
|
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.user.MyUserInfo;
|
||||||
|
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;
|
||||||
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
|
public class InstanceInfoActivity extends BaseActivity {
|
||||||
|
|
||||||
|
public static final String EXTRA_INSTANCE_DOMAIN = "instance_info_domain";
|
||||||
|
public static final String EXTRA_INSTANCE_ID = "instance_info_id";
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named("default")
|
||||||
|
SharedPreferences mSharedPreferences;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named("no_oauth")
|
||||||
|
RetrofitHolder mRetorifitHolder;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Named("current_account")
|
||||||
|
SharedPreferences mCurrentAccountSharedPreferences;
|
||||||
|
|
||||||
|
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;
|
||||||
|
private Retrofit mRetrofit;
|
||||||
|
private String mInstanceDomain;
|
||||||
|
private int mInstanceId;
|
||||||
|
private String mAccessToken;
|
||||||
|
private String mAccountName;
|
||||||
|
|
||||||
|
@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);
|
||||||
|
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
mInstanceDomain = savedInstanceState.getString(EXTRA_INSTANCE_DOMAIN);
|
||||||
|
mInstanceId = savedInstanceState.getInt(EXTRA_INSTANCE_ID);
|
||||||
|
} else {
|
||||||
|
mInstanceDomain = getIntent().getStringExtra(EXTRA_INSTANCE_DOMAIN);
|
||||||
|
mInstanceId = getIntent().getIntExtra(EXTRA_INSTANCE_ID, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mInstanceDomain == null) {
|
||||||
|
mRetrofit = mRetorifitHolder.getRetrofit();
|
||||||
|
} else {
|
||||||
|
String originalBaseUrl = mRetorifitHolder.getBaseURL();
|
||||||
|
mRetorifitHolder.setBaseURL("https://" + mInstanceDomain);
|
||||||
|
mRetrofit = mRetorifitHolder.getRetrofit();
|
||||||
|
mRetorifitHolder.setBaseURL(originalBaseUrl);
|
||||||
|
}
|
||||||
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
|
|
||||||
|
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, Glide.with(getApplication()), null, mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false));
|
||||||
|
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(mRetrofit, null, new FetchSiteInfo.FetchSiteInfoListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchSiteInfoSuccess(SiteInfo siteInfo, MyUserInfo myUserInfo) {
|
||||||
|
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(boolean parseFailed) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putString(EXTRA_INSTANCE_DOMAIN, mInstanceDomain);
|
||||||
|
outState.putInt(EXTRA_INSTANCE_ID, mInstanceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
|
||||||
|
super.onRestoreInstanceState(savedInstanceState);
|
||||||
|
mInstanceDomain = savedInstanceState.getString(EXTRA_INSTANCE_DOMAIN);
|
||||||
|
mInstanceId = savedInstanceState.getInt(EXTRA_INSTANCE_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.instance_info_activity, menu);
|
||||||
|
if (mInstanceDomain == null || mInstanceDomain.equalsIgnoreCase(mRetorifitHolder.getBaseURL().split("/")[2])) {
|
||||||
|
menu.findItem(R.id.action_block_instance_info).setVisible(false);
|
||||||
|
menu.findItem(R.id.action_unblock_instance_info).setVisible(false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (mAccessToken == null) {
|
||||||
|
menu.findItem(R.id.action_block_instance_info).setVisible(false);
|
||||||
|
menu.findItem(R.id.action_unblock_instance_info).setVisible(false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
FetchBlockedThings.fetchBlockedThings(mRetorifitHolder.getRetrofit(), mAccessToken, mAccountName, new FetchBlockedThings.FetchBlockedThingsListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchBlockedThingsSuccess(List<BlockedUserData> blockedUsers, List<BlockedCommunityData> blockedCommunities, List<BlockedInstanceData> blockedInstances) {
|
||||||
|
for (BlockedInstanceData blockedInstanceData : blockedInstances) {
|
||||||
|
if (blockedInstanceData.getDomain().equals(mInstanceDomain)) {
|
||||||
|
menu.findItem(R.id.action_block_instance_info).setVisible(false);
|
||||||
|
menu.findItem(R.id.action_unblock_instance_info).setVisible(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
menu.findItem(R.id.action_block_instance_info).setVisible(true);
|
||||||
|
menu.findItem(R.id.action_unblock_instance_info).setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchBlockedThingsFailure() {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
|
if (item.getItemId() == android.R.id.home) {
|
||||||
|
finish();
|
||||||
|
return true;
|
||||||
|
} else if (item.getItemId() == R.id.action_block_instance_info) {
|
||||||
|
blockInstance(true);
|
||||||
|
return true;
|
||||||
|
} else if (item.getItemId() == R.id.action_unblock_instance_info) {
|
||||||
|
blockInstance(false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void blockInstance(boolean blocked) {
|
||||||
|
BlockInstance.INSTANCE.blockInstance(mRetorifitHolder.getRetrofit(), mInstanceId, blocked, new BlockInstance.BlockInstanceResponse() {
|
||||||
|
@Override
|
||||||
|
public void onResponse() {
|
||||||
|
if (blocked) {
|
||||||
|
applySnackBarTheme(Snackbar.make(coordinatorLayout, R.string.block_instance_success, Snackbar.LENGTH_SHORT)).show();
|
||||||
|
} else {
|
||||||
|
applySnackBarTheme(Snackbar.make(coordinatorLayout, R.string.unblock_instance_success, Snackbar.LENGTH_SHORT)).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
InstanceInfoActivity.this.invalidateOptionsMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure() {
|
||||||
|
Toast.makeText(InstanceInfoActivity.this, R.string.block_instance_failed, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ import android.content.pm.PackageManager;
|
|||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
import android.webkit.URLUtil;
|
import android.webkit.URLUtil;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@@ -16,21 +17,30 @@ import androidx.browser.customtabs.CustomTabsIntent;
|
|||||||
import androidx.browser.customtabs.CustomTabsService;
|
import androidx.browser.customtabs.CustomTabsService;
|
||||||
|
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
|
import org.greenrobot.eventbus.EventBus;
|
||||||
|
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
|
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
||||||
import eu.toldi.infinityforlemmy.comment.Comment;
|
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||||
import eu.toldi.infinityforlemmy.comment.FetchComment;
|
import eu.toldi.infinityforlemmy.comment.FetchComment;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
|
import eu.toldi.infinityforlemmy.post.FetchPost;
|
||||||
import eu.toldi.infinityforlemmy.post.ObjectResolver;
|
import eu.toldi.infinityforlemmy.post.ObjectResolver;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
|
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
@@ -49,7 +59,6 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
private static final String MULTIREDDIT_PATTERN = "/user/[\\w-]+/m/\\w+/?";
|
private static final String MULTIREDDIT_PATTERN = "/user/[\\w-]+/m/\\w+/?";
|
||||||
private static final String MULTIREDDIT_PATTERN_2 = "/[rR]/(\\w+\\+?)+/?";
|
private static final String MULTIREDDIT_PATTERN_2 = "/[rR]/(\\w+\\+?)+/?";
|
||||||
private static final String REDD_IT_POST_PATTERN = "/\\w+/?";
|
private static final String REDD_IT_POST_PATTERN = "/\\w+/?";
|
||||||
private static final String GFYCAT_PATTERN = "(/i?fr)?/[\\w-]+$";
|
|
||||||
private static final String REDGIFS_PATTERN = "/watch/[\\w-]+$";
|
private static final String REDGIFS_PATTERN = "/watch/[\\w-]+$";
|
||||||
private static final String IMGUR_GALLERY_PATTERN = "/gallery/\\w+/?";
|
private static final String IMGUR_GALLERY_PATTERN = "/gallery/\\w+/?";
|
||||||
private static final String IMGUR_ALBUM_PATTERN = "/(album|a)/\\w+/?";
|
private static final String IMGUR_ALBUM_PATTERN = "/(album|a)/\\w+/?";
|
||||||
@@ -64,6 +73,9 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
@Inject
|
@Inject
|
||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
ObjectResolver mObjectResolver;
|
ObjectResolver mObjectResolver;
|
||||||
|
|
||||||
@@ -75,13 +87,20 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
@Named("no_oauth")
|
@Named("no_oauth")
|
||||||
RetrofitHolder mRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
Executor mExecutor;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
PostEnricher postEnricher;
|
||||||
|
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
|
private String mAccountQualifedName;
|
||||||
|
|
||||||
private Uri getRedditUriByPath(String path) {
|
private Uri getRedditUriByPath(String path) {
|
||||||
if (path.charAt(0) != '/') {
|
if (path.charAt(0) != '/') {
|
||||||
return Uri.parse("https://www.reddit.com/" + path);
|
return Uri.parse(mRetrofit.getBaseURL() + path);
|
||||||
} else {
|
} else {
|
||||||
return Uri.parse("https://www.reddit.com" + path);
|
return Uri.parse(mRetrofit.getBaseURL() + path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,19 +110,27 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
|
mAccountQualifedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME,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();
|
Uri uri = getIntent().getData();
|
||||||
if (uri == null) {
|
if (uri == null) {
|
||||||
String url = getIntent().getStringExtra(Intent.EXTRA_TEXT);
|
String url = getIntent().getStringExtra(Intent.EXTRA_TEXT);
|
||||||
if (!URLUtil.isValidUrl(url)) {
|
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();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
uri = Uri.parse(url);
|
uri = Uri.parse(url);
|
||||||
} catch (NullPointerException e) {
|
} 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();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -111,7 +138,7 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
if (uri.getScheme() == null && uri.getHost() == null) {
|
if (uri.getScheme() == null && uri.getHost() == null) {
|
||||||
if (uri.toString().isEmpty()) {
|
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();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -123,7 +150,7 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private void handleUri(Uri uri) {
|
private void handleUri(Uri uri) {
|
||||||
if (uri == null) {
|
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 {
|
} else {
|
||||||
String path = uri.getPath();
|
String path = uri.getPath();
|
||||||
if (path == null) {
|
if (path == null) {
|
||||||
@@ -197,23 +224,17 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} else {
|
} else {
|
||||||
mObjectResolver.resolvePost(uri.toString(), mAccessToken, new ObjectResolver.ObjectResolverListener() {
|
if (mAccountQualifedName == null || newAccountName != null && !mAccountQualifedName.equals(newAccountName)) {
|
||||||
@Override
|
SwitchAccount.switchAccount(mRedditDataRoomDatabase, mRetrofit, mCurrentAccountSharedPreferences,
|
||||||
public void onResolveObjectSuccess(Object p) {
|
mExecutor, new Handler(), newAccountName, newAccount -> {
|
||||||
Post post = (Post) p;
|
EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName()));
|
||||||
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show();
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, post.getId());
|
openPost(uri, segments, messageFullname);
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
});
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
} else {
|
||||||
startActivity(intent);
|
openPost(uri, segments, messageFullname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResolveObjectFailed() {
|
|
||||||
Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
} else if (uri.toString().matches(COMMENT_PATTERN)) {
|
} else if (uri.toString().matches(COMMENT_PATTERN)) {
|
||||||
if (mAccessToken == null) {
|
if (mAccessToken == null) {
|
||||||
@@ -227,116 +248,42 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
||||||
|
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_PARENT_ID, comment.getParentId());
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFetchCommentFailed() {
|
public void onFetchCommentFailed() {
|
||||||
Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
mObjectResolver.resolveComment(uri.toString(), mAccessToken, new ObjectResolver.ObjectResolverListener() {
|
if (mAccountQualifedName == null || newAccountName != null && !mAccountQualifedName.equals(newAccountName)) {
|
||||||
@Override
|
SwitchAccount.switchAccount(mRedditDataRoomDatabase, mRetrofit, mCurrentAccountSharedPreferences,
|
||||||
public void onResolveObjectSuccess(Object c) {
|
mExecutor, new Handler(), newAccountName, newAccount -> {
|
||||||
Comment comment = (Comment) c;
|
EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName()));
|
||||||
Intent intent = new Intent(LinkResolverActivity.this, ViewPostDetailActivity.class);
|
Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show();
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getPostId());
|
openComment(uri, segments, messageFullname);
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
});
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
} else {
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
openComment(uri, segments, messageFullname);
|
||||||
startActivity(intent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResolveObjectFailed() {
|
|
||||||
Toast.makeText(LinkResolverActivity.this, R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
} else if (authority.equals("v.redd.it")) {
|
} else if (authority.equals("v.redd.it")) {
|
||||||
Intent intent = new Intent(this, ViewVideoActivity.class);
|
Intent intent = new Intent(this, ViewVideoActivity.class);
|
||||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_V_REDD_IT);
|
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_V_REDD_IT);
|
||||||
intent.putExtra(ViewVideoActivity.EXTRA_V_REDD_IT_URL, uri.toString());
|
intent.putExtra(ViewVideoActivity.EXTRA_V_REDD_IT_URL, uri.toString());
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} else if (authority.contains("reddit.com") || authority.contains("redd.it") || authority.contains("reddit.app")) {
|
|
||||||
if (authority.equals("reddit.app.link") && path.isEmpty()) {
|
|
||||||
String redirect = uri.getQueryParameter("$og_redirect");
|
|
||||||
if (redirect != null) {
|
|
||||||
handleUri(Uri.parse(redirect));
|
|
||||||
} else {
|
|
||||||
deepLinkError(uri);
|
|
||||||
}
|
|
||||||
} else if (path.isEmpty()) {
|
|
||||||
Intent intent = new Intent(this, MainActivity.class);
|
|
||||||
startActivity(intent);
|
|
||||||
} else if (path.equals("/report")) {
|
|
||||||
openInWebView(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(WIKI_PATTERN)) {
|
|
||||||
String[] pathSegments = path.split("/");
|
|
||||||
String wikiPage;
|
|
||||||
if (pathSegments.length == 4) {
|
|
||||||
wikiPage = "index";
|
|
||||||
} else {
|
|
||||||
int lengthThroughWiki = 0;
|
|
||||||
for (int i = 1; i <= 3; ++i) {
|
|
||||||
lengthThroughWiki += pathSegments[i].length() + 1;
|
|
||||||
}
|
|
||||||
wikiPage = path.substring(lengthThroughWiki);
|
|
||||||
}
|
|
||||||
Intent intent = new Intent(this, WikiActivity.class);
|
|
||||||
intent.putExtra(WikiActivity.EXTRA_SUBREDDIT_NAME, segments.get(1));
|
|
||||||
intent.putExtra(WikiActivity.EXTRA_WIKI_PATH, wikiPage);
|
|
||||||
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));
|
|
||||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_VIEW_SIDEBAR, true);
|
|
||||||
startActivity(intent);
|
|
||||||
} else if (path.matches(MULTIREDDIT_PATTERN)) {
|
|
||||||
Intent intent = new Intent(this, ViewMultiRedditDetailActivity.class);
|
|
||||||
intent.putExtra(ViewMultiRedditDetailActivity.EXTRA_MULTIREDDIT_PATH, path);
|
|
||||||
startActivity(intent);
|
|
||||||
} else if (path.matches(MULTIREDDIT_PATTERN_2)) {
|
|
||||||
String subredditName = path.substring(3);
|
|
||||||
Intent intent = new Intent(this, ViewSubredditDetailActivity.class);
|
|
||||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, subredditName);
|
|
||||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
|
|
||||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
|
|
||||||
startActivity(intent);
|
|
||||||
} else if (authority.equals("redd.it") && path.matches(REDD_IT_POST_PATTERN)) {
|
|
||||||
Intent intent = new Intent(this, ViewPostDetailActivity.class);
|
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, path.substring(1));
|
|
||||||
startActivity(intent);
|
|
||||||
} else {
|
|
||||||
deepLinkError(uri);
|
|
||||||
}
|
|
||||||
} else if (authority.equals("click.redditmail.com")) {
|
} else if (authority.equals("click.redditmail.com")) {
|
||||||
if (path.startsWith("/CL0/")) {
|
if (path.startsWith("/CL0/")) {
|
||||||
handleUri(Uri.parse(path.substring("/CL0/".length())));
|
handleUri(Uri.parse(path.substring("/CL0/".length())));
|
||||||
}
|
}
|
||||||
} else if (authority.contains("gfycat.com")) {
|
|
||||||
if (path.matches(GFYCAT_PATTERN)) {
|
|
||||||
Intent intent = new Intent(this, ViewVideoActivity.class);
|
|
||||||
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, path.substring(path.lastIndexOf("/") + 1));
|
|
||||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_GFYCAT);
|
|
||||||
intent.putExtra(ViewVideoActivity.EXTRA_IS_NSFW, getIntent().getBooleanExtra(EXTRA_IS_NSFW, false));
|
|
||||||
startActivity(intent);
|
|
||||||
} else {
|
|
||||||
deepLinkError(uri);
|
|
||||||
}
|
|
||||||
} else if (authority.contains("redgifs.com")) {
|
} else if (authority.contains("redgifs.com")) {
|
||||||
if (path.matches(REDGIFS_PATTERN)) {
|
if (path.matches(REDGIFS_PATTERN)) {
|
||||||
Intent intent = new Intent(this, ViewVideoActivity.class);
|
Intent intent = new Intent(this, ViewVideoActivity.class);
|
||||||
intent.putExtra(ViewVideoActivity.EXTRA_GFYCAT_ID, path.substring(path.lastIndexOf("/") + 1));
|
intent.putExtra(ViewVideoActivity.EXTRA_REDGIFS_ID, path.substring(path.lastIndexOf("/") + 1));
|
||||||
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS);
|
intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS);
|
||||||
intent.putExtra(ViewVideoActivity.EXTRA_IS_NSFW, true);
|
intent.putExtra(ViewVideoActivity.EXTRA_IS_NSFW, true);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
@@ -402,12 +349,110 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void openComment(Uri uri, List<String> segments, String messageFullname) {
|
||||||
|
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_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_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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void openPost(Uri uri, List<String> segments, String messageFullname) {
|
||||||
|
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);
|
||||||
|
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);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResolveObjectFailed() {
|
||||||
|
Toast.makeText(getApplicationContext(), R.string.could_not_resolve_link, Toast.LENGTH_SHORT).show();
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void deepLinkError(Uri uri) {
|
private void deepLinkError(Uri uri) {
|
||||||
PackageManager pm = getPackageManager();
|
PackageManager pm = getPackageManager();
|
||||||
|
|
||||||
String authority = uri.getAuthority();
|
String authority = uri.getAuthority();
|
||||||
if(authority != null && (authority.contains("reddit.com") || authority.contains("redd.it") || authority.contains("reddit.app.link"))) {
|
if(authority != null && (authority.contains("reddit.com") || authority.contains("redd.it") || authority.contains("reddit.app.link"))) {
|
||||||
openInCustomTabs(uri, pm, false);
|
openInBrowser(uri, pm, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,16 +6,18 @@ import android.content.SharedPreferences;
|
|||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.text.Editable;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Patterns;
|
|
||||||
import android.view.InflateException;
|
import android.view.InflateException;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.widget.AppCompatAutoCompleteTextView;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
|
|
||||||
@@ -26,6 +28,10 @@ import org.json.JSONException;
|
|||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -33,16 +39,22 @@ import javax.inject.Named;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import eu.toldi.infinityforlemmy.FetchMyInfo;
|
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
|
import eu.toldi.infinityforlemmy.adapters.CustomArrayAdapter;
|
||||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.ParseAndInsertNewAccount;
|
import eu.toldi.infinityforlemmy.asynctasks.ParseAndInsertNewAccount;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
import eu.toldi.infinityforlemmy.dto.AccountLoginDTO;
|
import eu.toldi.infinityforlemmy.dto.AccountLoginDTO;
|
||||||
|
import eu.toldi.infinityforlemmy.lemmyverse.FetchInstancesListener;
|
||||||
|
import eu.toldi.infinityforlemmy.lemmyverse.LemmyInstance;
|
||||||
|
import eu.toldi.infinityforlemmy.lemmyverse.LemmyVerseFetchInstances;
|
||||||
|
import eu.toldi.infinityforlemmy.site.FetchSiteInfo;
|
||||||
|
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
||||||
|
import eu.toldi.infinityforlemmy.user.MyUserInfo;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@@ -55,6 +67,9 @@ public class LoginActivity extends BaseActivity {
|
|||||||
private static final String ENABLE_DOM_STATE = "EDS";
|
private static final String ENABLE_DOM_STATE = "EDS";
|
||||||
private static final String IS_AGREE_TO_USER_AGGREMENT_STATE = "IATUAS";
|
private static final String IS_AGREE_TO_USER_AGGREMENT_STATE = "IATUAS";
|
||||||
|
|
||||||
|
public static final String EXTRA_INPUT_USERNAME = "INPUT_USERNAME";
|
||||||
|
public static final String EXTRA_INPUT_INSTANCE = "INPUT_INSTANCE";
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_login_activity)
|
@BindView(R.id.coordinator_layout_login_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@BindView(R.id.appbar_layout_login_activity)
|
@BindView(R.id.appbar_layout_login_activity)
|
||||||
@@ -65,7 +80,7 @@ public class LoginActivity extends BaseActivity {
|
|||||||
TextView twoFAInfoTextView;
|
TextView twoFAInfoTextView;
|
||||||
|
|
||||||
@BindView(R.id.instance_url_input)
|
@BindView(R.id.instance_url_input)
|
||||||
TextInputEditText instance_input;
|
AppCompatAutoCompleteTextView instance_input;
|
||||||
@BindView(R.id.username_input)
|
@BindView(R.id.username_input)
|
||||||
TextInputEditText username_input;
|
TextInputEditText username_input;
|
||||||
@BindView(R.id.user_password_input)
|
@BindView(R.id.user_password_input)
|
||||||
@@ -82,9 +97,11 @@ public class LoginActivity extends BaseActivity {
|
|||||||
@Inject
|
@Inject
|
||||||
@Named("no_oauth")
|
@Named("no_oauth")
|
||||||
RetrofitHolder mRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@Named("oauth")
|
@Named("lemmyVerse")
|
||||||
Retrofit mOauthRetrofit;
|
Retrofit mLemmyVerseRetrofit;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -135,17 +152,45 @@ public class LoginActivity extends BaseActivity {
|
|||||||
isAgreeToUserAgreement = savedInstanceState.getBoolean(IS_AGREE_TO_USER_AGGREMENT_STATE);
|
isAgreeToUserAgreement = savedInstanceState.getBoolean(IS_AGREE_TO_USER_AGGREMENT_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get username and instance from intent
|
||||||
|
Intent intent = getIntent();
|
||||||
|
String username_intent = intent.getStringExtra(EXTRA_INPUT_USERNAME);
|
||||||
|
String instance_intent = intent.getStringExtra(EXTRA_INPUT_INSTANCE);
|
||||||
|
if (username_intent != null) {
|
||||||
|
username_input.setText(username_intent);
|
||||||
|
}
|
||||||
|
if (instance_intent != null) {
|
||||||
|
instance_input.setText(instance_intent);
|
||||||
|
}
|
||||||
|
|
||||||
|
LemmyVerseFetchInstances.INSTANCE.fetchInstances(mLemmyVerseRetrofit, new FetchInstancesListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchInstancesSuccess(@NonNull List<LemmyInstance> instances) {
|
||||||
|
ArrayList<String> instanceNames = new ArrayList<>();
|
||||||
|
for (LemmyInstance instance : instances) {
|
||||||
|
instanceNames.add(instance.getFqdn());
|
||||||
|
}
|
||||||
|
ArrayAdapter<String> adapter = new CustomArrayAdapter(LoginActivity.this, android.R.layout.simple_dropdown_item_1line, instanceNames, mCustomThemeWrapper);
|
||||||
|
instance_input.setAdapter(adapter);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
loginButton.setOnClickListener(view -> {
|
loginButton.setOnClickListener(view -> {
|
||||||
Log.i("LoginActivity", "Login button clicked");
|
Log.i("LoginActivity", "Login button clicked");
|
||||||
|
if (!checkFields())
|
||||||
|
return;
|
||||||
loginButton.setEnabled(false);
|
loginButton.setEnabled(false);
|
||||||
progressBar.setVisibility(ProgressBar.VISIBLE);
|
progressBar.setVisibility(ProgressBar.VISIBLE);
|
||||||
String username = username_input.getText().toString().trim();
|
String username = username_input.getText().toString().trim();
|
||||||
String instance = correctURL(instance_input.getText().toString().trim());
|
String instance = correctURL(instance_input.getText().toString().trim());
|
||||||
if (!Patterns.WEB_URL.matcher(instance).matches()) {
|
try {
|
||||||
instance_input.setError("Invalid instance URL");
|
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();
|
Toast.makeText(LoginActivity.this, "Invalid instance URL", Toast.LENGTH_SHORT).show();
|
||||||
loginButton.setEnabled(true);
|
|
||||||
progressBar.setVisibility(ProgressBar.GONE);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Log.i("LoginActivity", "Instance: " + instance);
|
Log.i("LoginActivity", "Instance: " + instance);
|
||||||
@@ -153,6 +198,7 @@ public class LoginActivity extends BaseActivity {
|
|||||||
mRetrofit.setBaseURL(instance);
|
mRetrofit.setBaseURL(instance);
|
||||||
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
|
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
|
||||||
Call<String> accessTokenCall = api.userLogin(accountLoginDTO);
|
Call<String> accessTokenCall = api.userLogin(accountLoginDTO);
|
||||||
|
String finalInstance = instance;
|
||||||
accessTokenCall.enqueue(new Callback<String>() {
|
accessTokenCall.enqueue(new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
@@ -171,33 +217,56 @@ public class LoginActivity extends BaseActivity {
|
|||||||
try {
|
try {
|
||||||
JSONObject responseJSON = new JSONObject(accountResponse);
|
JSONObject responseJSON = new JSONObject(accountResponse);
|
||||||
String accessToken = responseJSON.getString("jwt");
|
String accessToken = responseJSON.getString("jwt");
|
||||||
|
mRetrofit.setAccessToken(accessToken);
|
||||||
|
|
||||||
FetchMyInfo.fetchAccountInfo(mRetrofit.getRetrofit(), mRedditDataRoomDatabase, username,
|
FetchSiteInfo.fetchSiteInfo(mRetrofit.getRetrofit(), accessToken, new FetchSiteInfo.FetchSiteInfoListener() {
|
||||||
accessToken, new FetchMyInfo.FetchMyInfoListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void onFetchMyInfoSuccess(String name, String display_name, String profileImageUrl, String bannerImageUrl) {
|
public void onFetchSiteInfoSuccess(SiteInfo siteInfo, MyUserInfo myUserInfo) {
|
||||||
mCurrentAccountSharedPreferences.edit().putString(SharedPreferencesUtils.ACCESS_TOKEN, accessToken)
|
if (myUserInfo == null) {
|
||||||
.putString(SharedPreferencesUtils.ACCOUNT_NAME, display_name)
|
finish();
|
||||||
.putString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, name)
|
Toast.makeText(LoginActivity.this, R.string.parse_user_info_error, Toast.LENGTH_SHORT).show();
|
||||||
.putString(SharedPreferencesUtils.ACCOUNT_INSTANCE,instance)
|
return;
|
||||||
.putString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, profileImageUrl).apply();
|
}
|
||||||
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), name,display_name, accessToken, profileImageUrl, bannerImageUrl, authCode,instance, mRedditDataRoomDatabase.accountDao(),
|
|
||||||
|
boolean canDownvote = siteInfo.isEnable_downvotes();
|
||||||
|
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), myUserInfo.getQualifiedName(), myUserInfo.getDisplayName(), accessToken, myUserInfo.getProfileImageUrl(), myUserInfo.getBannerImageUrl(), authCode, finalInstance, canDownvote, mRedditDataRoomDatabase.accountDao(),
|
||||||
() -> {
|
() -> {
|
||||||
Intent resultIntent = new Intent();
|
Intent resultIntent = new Intent();
|
||||||
setResult(Activity.RESULT_OK, resultIntent);
|
setResult(Activity.RESULT_OK, resultIntent);
|
||||||
finish();
|
finish();
|
||||||
});
|
});
|
||||||
|
mCurrentAccountSharedPreferences.edit()
|
||||||
|
.putString(SharedPreferencesUtils.ACCESS_TOKEN, accessToken)
|
||||||
|
.putString(SharedPreferencesUtils.ACCOUNT_NAME, myUserInfo.getDisplayName())
|
||||||
|
.putString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, myUserInfo.getQualifiedName())
|
||||||
|
.putString(SharedPreferencesUtils.ACCOUNT_INSTANCE,finalInstance)
|
||||||
|
.putString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, myUserInfo.getProfileImageUrl())
|
||||||
|
.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();
|
||||||
|
} else {
|
||||||
|
mRetrofit.setAccessToken(null);
|
||||||
|
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, false).apply();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFetchMyInfoFailed(boolean parseFailed) {
|
public void onFetchSiteInfoFailed(boolean parseFailed) {
|
||||||
if (parseFailed) {
|
if (parseFailed) {
|
||||||
|
finish();
|
||||||
Toast.makeText(LoginActivity.this, R.string.parse_user_info_error, Toast.LENGTH_SHORT).show();
|
Toast.makeText(LoginActivity.this, R.string.parse_user_info_error, Toast.LENGTH_SHORT).show();
|
||||||
} else {
|
} else {
|
||||||
|
progressBar.setVisibility(ProgressBar.GONE);
|
||||||
|
loginButton.setEnabled(true);
|
||||||
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
finish();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
@@ -240,6 +309,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) {
|
private static String correctURL(String url) {
|
||||||
if (url == null || url.isEmpty()) {
|
if (url == null || url.isEmpty()) {
|
||||||
throw new IllegalArgumentException("URL cannot be null or empty");
|
throw new IllegalArgumentException("URL cannot be null or empty");
|
||||||
@@ -281,6 +370,7 @@ public class LoginActivity extends BaseActivity {
|
|||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
twoFAInfoTextView.setTypeface(typeface);
|
twoFAInfoTextView.setTypeface(typeface);
|
||||||
}
|
}
|
||||||
|
instance_input.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import android.os.Bundle;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@@ -33,6 +34,7 @@ import androidx.appcompat.app.AppCompatDelegate;
|
|||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.core.splashscreen.SplashScreen;
|
||||||
import androidx.drawerlayout.widget.DrawerLayout;
|
import androidx.drawerlayout.widget.DrawerLayout;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
@@ -52,6 +54,7 @@ import com.google.android.material.appbar.CollapsingToolbarLayout;
|
|||||||
import com.google.android.material.appbar.MaterialToolbar;
|
import com.google.android.material.appbar.MaterialToolbar;
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
import com.google.android.material.navigation.NavigationView;
|
import com.google.android.material.navigation.NavigationView;
|
||||||
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
import com.google.android.material.tabs.TabLayoutMediator;
|
import com.google.android.material.tabs.TabLayoutMediator;
|
||||||
import com.google.android.material.textfield.TextInputEditText;
|
import com.google.android.material.textfield.TextInputEditText;
|
||||||
@@ -118,12 +121,15 @@ import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
|||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||||
|
import eu.toldi.infinityforlemmy.site.FetchSiteInfo;
|
||||||
|
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditViewModel;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditViewModel;
|
||||||
import eu.toldi.infinityforlemmy.subscribeduser.SubscribedUserData;
|
import eu.toldi.infinityforlemmy.subscribeduser.SubscribedUserData;
|
||||||
import eu.toldi.infinityforlemmy.user.FetchUserData;
|
import eu.toldi.infinityforlemmy.user.FetchUserData;
|
||||||
|
import eu.toldi.infinityforlemmy.user.MyUserInfo;
|
||||||
import eu.toldi.infinityforlemmy.user.UserData;
|
import eu.toldi.infinityforlemmy.user.UserData;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.CustomThemeSharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.CustomThemeSharedPreferencesUtils;
|
||||||
@@ -247,8 +253,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
private int fabOption;
|
private int fabOption;
|
||||||
private int inboxCount;
|
private int inboxCount;
|
||||||
|
|
||||||
|
private boolean mBearerTokenUsed = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
SplashScreen.installSplashScreen(this);
|
||||||
|
|
||||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
|
|
||||||
setTheme(R.style.AppTheme_NoActionBarWithTransparentStatusBar);
|
setTheme(R.style.AppTheme_NoActionBarWithTransparentStatusBar);
|
||||||
@@ -336,6 +346,8 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
fragmentManager = getSupportFragmentManager();
|
fragmentManager = getSupportFragmentManager();
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
|
mRetrofit.setAccessToken(mAccessToken);
|
||||||
|
mBearerTokenUsed = mCurrentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true);
|
||||||
|
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
@@ -365,9 +377,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
super.onResume();
|
super.onResume();
|
||||||
if (mAccessToken == null) {
|
if (mAccessToken == null) {
|
||||||
String instancePreference = mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI);
|
String instancePreference = mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI);
|
||||||
if (!mRetrofit.getBaseURL().equalsIgnoreCase(instancePreference)) {
|
if (!instancePreference.startsWith(mRetrofit.getBaseURL())) {
|
||||||
|
mRetrofit.setBaseURL(instancePreference);
|
||||||
this.recreate();
|
this.recreate();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
checkUserToken();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -481,7 +496,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
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, mAccountQualifiedName);
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, mAccountName);
|
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -808,7 +822,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
|
|
||||||
adapter = new NavigationDrawerRecyclerViewMergedAdapter(this, mSharedPreferences,
|
adapter = new NavigationDrawerRecyclerViewMergedAdapter(this, mSharedPreferences,
|
||||||
mNsfwAndSpoilerSharedPreferences, mNavigationDrawerSharedPreferences, mSecuritySharedPreferences,
|
mNsfwAndSpoilerSharedPreferences, mNavigationDrawerSharedPreferences, mSecuritySharedPreferences,
|
||||||
mCustomThemeWrapper, mAccountName, new NavigationDrawerRecyclerViewMergedAdapter.ItemClickListener() {
|
mCustomThemeWrapper, mAccountName, mAccountQualifiedName, new NavigationDrawerRecyclerViewMergedAdapter.ItemClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onMenuClick(int stringId) {
|
public void onMenuClick(int stringId) {
|
||||||
Intent intent = null;
|
Intent intent = null;
|
||||||
@@ -821,8 +835,6 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
} else if (stringId == R.string.multi_reddit) {
|
} else if (stringId == R.string.multi_reddit) {
|
||||||
intent = new Intent(MainActivity.this, SubscribedThingListingActivity.class);
|
intent = new Intent(MainActivity.this, SubscribedThingListingActivity.class);
|
||||||
intent.putExtra(SubscribedThingListingActivity.EXTRA_SHOW_MULTIREDDITS, true);
|
intent.putExtra(SubscribedThingListingActivity.EXTRA_SHOW_MULTIREDDITS, true);
|
||||||
} else if (stringId == R.string.history) {
|
|
||||||
intent = new Intent(MainActivity.this, HistoryActivity.class);
|
|
||||||
} else if (stringId == R.string.trending) {
|
} else if (stringId == R.string.trending) {
|
||||||
intent = new Intent(MainActivity.this, TrendingActivity.class);
|
intent = new Intent(MainActivity.this, TrendingActivity.class);
|
||||||
} else if (stringId == R.string.upvoted) {
|
} else if (stringId == R.string.upvoted) {
|
||||||
@@ -853,12 +865,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
}
|
}
|
||||||
} else if (stringId == R.string.enable_nsfw) {
|
} else if (stringId == R.string.enable_nsfw) {
|
||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
mNsfwAndSpoilerSharedPreferences.edit().putBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.NSFW_BASE, true).apply();
|
mNsfwAndSpoilerSharedPreferences.edit().putBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.NSFW_BASE, true).apply();
|
||||||
sectionsPagerAdapter.changeNSFW(true);
|
sectionsPagerAdapter.changeNSFW(true);
|
||||||
}
|
}
|
||||||
} else if (stringId == R.string.disable_nsfw) {
|
} else if (stringId == R.string.disable_nsfw) {
|
||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
mNsfwAndSpoilerSharedPreferences.edit().putBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.NSFW_BASE, false).apply();
|
mNsfwAndSpoilerSharedPreferences.edit().putBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.NSFW_BASE, false).apply();
|
||||||
sectionsPagerAdapter.changeNSFW(false);
|
sectionsPagerAdapter.changeNSFW(false);
|
||||||
}
|
}
|
||||||
} else if (stringId == R.string.settings) {
|
} else if (stringId == R.string.settings) {
|
||||||
@@ -883,6 +895,10 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
});
|
});
|
||||||
} else if (stringId == R.string.anonymous_account_instance) {
|
} else if (stringId == R.string.anonymous_account_instance) {
|
||||||
changeAnonymousAccountInstance();
|
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) {
|
if (intent != null) {
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
@@ -912,17 +928,17 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
navDrawerRecyclerView.setLayoutManager(new LinearLayoutManagerBugFixed(this));
|
navDrawerRecyclerView.setLayoutManager(new LinearLayoutManagerBugFixed(this));
|
||||||
navDrawerRecyclerView.setAdapter(adapter.getConcatAdapter());
|
navDrawerRecyclerView.setAdapter(adapter.getConcatAdapter());
|
||||||
|
|
||||||
int tabCount = mMainActivityTabsSharedPreferences.getInt((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_COUNT, 3);
|
int tabCount = mMainActivityTabsSharedPreferences.getInt((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_COUNT, 3);
|
||||||
mShowFavoriteMultiReddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_FAVORITE_MULTIREDDITS, false);
|
mShowFavoriteMultiReddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_FAVORITE_MULTIREDDITS, false);
|
||||||
mShowMultiReddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_MULTIREDDITS, false);
|
mShowMultiReddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_MULTIREDDITS, false);
|
||||||
mShowFavoriteSubscribedSubreddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_FAVORITE_SUBSCRIBED_SUBREDDITS, false);
|
mShowFavoriteSubscribedSubreddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_FAVORITE_SUBSCRIBED_SUBREDDITS, false);
|
||||||
mShowSubscribedSubreddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_SUBSCRIBED_SUBREDDITS, false);
|
mShowSubscribedSubreddits = mMainActivityTabsSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_SUBSCRIBED_SUBREDDITS, false);
|
||||||
sectionsPagerAdapter = new SectionsPagerAdapter(this, tabCount, mShowFavoriteMultiReddits,
|
sectionsPagerAdapter = new SectionsPagerAdapter(this, tabCount, mShowFavoriteMultiReddits,
|
||||||
mShowMultiReddits, mShowFavoriteSubscribedSubreddits, mShowSubscribedSubreddits);
|
mShowMultiReddits, mShowFavoriteSubscribedSubreddits, mShowSubscribedSubreddits);
|
||||||
viewPager2.setAdapter(sectionsPagerAdapter);
|
viewPager2.setAdapter(sectionsPagerAdapter);
|
||||||
viewPager2.setOffscreenPageLimit(1);
|
viewPager2.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT);
|
||||||
viewPager2.setUserInputEnabled(!mDisableSwipingBetweenTabs);
|
viewPager2.setUserInputEnabled(!mDisableSwipingBetweenTabs);
|
||||||
if (mMainActivityTabsSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_TAB_NAMES, true)) {
|
if (mMainActivityTabsSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_SHOW_TAB_NAMES, true)) {
|
||||||
if (mShowFavoriteMultiReddits || mShowMultiReddits || mShowFavoriteSubscribedSubreddits || mShowSubscribedSubreddits) {
|
if (mShowFavoriteMultiReddits || mShowMultiReddits || mShowFavoriteSubscribedSubreddits || mShowSubscribedSubreddits) {
|
||||||
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
|
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
|
||||||
} else {
|
} else {
|
||||||
@@ -931,13 +947,13 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
||||||
switch (position) {
|
switch (position) {
|
||||||
case 0:
|
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((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_TITLE, getString(R.string.subscribed_feed)));
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_TITLE, getString(R.string.local)));
|
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_TITLE, getString(R.string.local)));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_TITLE, getString(R.string.all)));
|
Utils.setTitleWithCustomFontToTab(typeface, tab, mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_TITLE, getString(R.string.all)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (position >= tabCount && (mShowFavoriteMultiReddits || mShowMultiReddits ||
|
if (position >= tabCount && (mShowFavoriteMultiReddits || mShowMultiReddits ||
|
||||||
@@ -985,7 +1001,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
loadSubscriptions();
|
loadSubscriptions();
|
||||||
|
|
||||||
multiRedditViewModel = new ViewModelProvider(this, new MultiRedditViewModel.Factory(getApplication(),
|
multiRedditViewModel = new ViewModelProvider(this, new MultiRedditViewModel.Factory(getApplication(),
|
||||||
mRedditDataRoomDatabase, mAccountName == null ? "-" : mAccountName))
|
mRedditDataRoomDatabase, mAccountQualifiedName == null ? "-" : mAccountQualifiedName))
|
||||||
.get(MultiRedditViewModel.class);
|
.get(MultiRedditViewModel.class);
|
||||||
|
|
||||||
multiRedditViewModel.getAllFavoriteMultiReddits().observe(this, multiReddits -> {
|
multiRedditViewModel.getAllFavoriteMultiReddits().observe(this, multiReddits -> {
|
||||||
@@ -1010,12 +1026,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
sectionsPagerAdapter.setSubscribedSubreddits(subscribedSubredditData);
|
sectionsPagerAdapter.setSubscribedSubreddits(subscribedSubredditData);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
/*subscribedSubredditViewModel.getAllFavoriteSubscribedSubreddits().observe(this, subscribedSubredditData -> {
|
subscribedSubredditViewModel.getAllFavoriteSubscribedSubreddits().observe(this, subscribedSubredditData -> {
|
||||||
adapter.setFavoriteSubscribedSubreddits(subscribedSubredditData);
|
adapter.setFavoriteSubscribedSubreddits(subscribedSubredditData);
|
||||||
if (mShowFavoriteSubscribedSubreddits && sectionsPagerAdapter != null) {
|
if (mShowFavoriteSubscribedSubreddits && sectionsPagerAdapter != null) {
|
||||||
sectionsPagerAdapter.setFavoriteSubscribedSubreddits(subscribedSubredditData);
|
sectionsPagerAdapter.setFavoriteSubscribedSubreddits(subscribedSubredditData);
|
||||||
}
|
}
|
||||||
});*/
|
});
|
||||||
|
|
||||||
accountViewModel = new ViewModelProvider(this,
|
accountViewModel = new ViewModelProvider(this,
|
||||||
new AccountViewModel.Factory(mRedditDataRoomDatabase)).get(AccountViewModel.class);
|
new AccountViewModel.Factory(mRedditDataRoomDatabase)).get(AccountViewModel.class);
|
||||||
@@ -1074,6 +1090,39 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkUserToken() {
|
||||||
|
if (mBearerTokenUsed) {
|
||||||
|
FetchUserData.validateAuthToken(mRetrofit.getRetrofit(), new FetchUserData.ValidateAuthTokenListener() {
|
||||||
|
@Override
|
||||||
|
public void onValidateAuthTokenSuccess() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onValidateAuthTokenFailed() {
|
||||||
|
// Alert user that the token is invalid and they need to re-login
|
||||||
|
new MaterialAlertDialogBuilder(MainActivity.this, R.style.MaterialAlertDialogTheme)
|
||||||
|
.setTitle(R.string.token_expired)
|
||||||
|
.setMessage(R.string.token_expired_message)
|
||||||
|
.setPositiveButton(R.string.ok, (dialogInterface, i) -> {
|
||||||
|
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
|
||||||
|
// Username without instance
|
||||||
|
String username = mAccountName.substring(0, mAccountQualifiedName.indexOf("@"));
|
||||||
|
intent.putExtra(LoginActivity.EXTRA_INPUT_USERNAME, username);
|
||||||
|
intent.putExtra(LoginActivity.EXTRA_INPUT_INSTANCE, mRetrofit.getBaseURL());
|
||||||
|
startActivity(intent);
|
||||||
|
})
|
||||||
|
.setCancelable(false)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCheckFailed(String message) {
|
||||||
|
applySnackBarTheme(Snackbar.make(findViewById(android.R.id.content), getString(R.string.failed_to_check_token_validity,message), Snackbar.LENGTH_LONG)).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void loadUserData() {
|
private void loadUserData() {
|
||||||
if (!mFetchUserInfoSuccess) {
|
if (!mFetchUserInfoSuccess) {
|
||||||
FetchUserData.fetchUnreadCount(mRetrofit.getRetrofit(), mAccessToken, new FetchUserData.FetchUserUnreadCountListener() {
|
FetchUserData.fetchUnreadCount(mRetrofit.getRetrofit(), mAccessToken, new FetchUserData.FetchUserUnreadCountListener() {
|
||||||
@@ -1102,6 +1151,32 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
mFetchUserInfoSuccess = false;
|
mFetchUserInfoSuccess = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
if (mAccessToken != null) {
|
||||||
|
FetchSiteInfo.fetchSiteInfo(mRetrofit.getRetrofit(), mAccessToken, new FetchSiteInfo.FetchSiteInfoListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchSiteInfoSuccess(SiteInfo siteInfo, MyUserInfo myUserInfo) {
|
||||||
|
String[] version = siteInfo.getVersion().split("\\.");
|
||||||
|
if (version.length > 0) {
|
||||||
|
Log.d("MainActvity", "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(mAccessToken);
|
||||||
|
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true).apply();
|
||||||
|
checkUserToken();
|
||||||
|
} else {
|
||||||
|
mRetrofit.setAccessToken(null);
|
||||||
|
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, false).apply();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchSiteInfoFailed(boolean parseFailed) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1127,7 +1202,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
int currentPostType = sectionsPagerAdapter.getCurrentPostType();
|
int currentPostType = sectionsPagerAdapter.getCurrentPostType();
|
||||||
PostFragment postFragment = sectionsPagerAdapter.getCurrentFragment();
|
PostFragment postFragment = sectionsPagerAdapter.getCurrentFragment();
|
||||||
if (postFragment != null) {
|
if (postFragment != null) {
|
||||||
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(currentPostType != PostPagingSource.TYPE_FRONT_PAGE, postFragment.getSortType());
|
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(currentPostType, postFragment.getSortType());
|
||||||
sortTypeBottomSheetFragment.show(getSupportFragmentManager(), sortTypeBottomSheetFragment.getTag());
|
sortTypeBottomSheetFragment.show(getSupportFragmentManager(), sortTypeBottomSheetFragment.getTag());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1507,14 +1582,19 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_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);
|
startActivity(subredditIntent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
boolean nsfw = mNsfwAndSpoilerSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.NSFW_BASE, false);
|
boolean nsfw = mNsfwAndSpoilerSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.NSFW_BASE, false);
|
||||||
thingEditText.addTextChangedListener(new TextWatcher() {
|
thingEditText.addTextChangedListener(new TextWatcher() {
|
||||||
@Override
|
@Override
|
||||||
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
||||||
@@ -1565,7 +1645,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
-> {
|
-> {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_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);
|
startActivity(subredditIntent);
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||||
@@ -1586,7 +1670,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_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);
|
startActivity(userIntent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1599,7 +1687,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
-> {
|
-> {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_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);
|
startActivity(userIntent);
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||||
@@ -1614,7 +1706,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
private void randomThing() {
|
private void randomThing() {
|
||||||
RandomBottomSheetFragment randomBottomSheetFragment = new RandomBottomSheetFragment();
|
RandomBottomSheetFragment randomBottomSheetFragment = new RandomBottomSheetFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putBoolean(RandomBottomSheetFragment.EXTRA_IS_NSFW, !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.NSFW_BASE, false));
|
bundle.putBoolean(RandomBottomSheetFragment.EXTRA_IS_NSFW, !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.NSFW_BASE, false));
|
||||||
randomBottomSheetFragment.setArguments(bundle);
|
randomBottomSheetFragment.setArguments(bundle);
|
||||||
randomBottomSheetFragment.show(getSupportFragmentManager(), randomBottomSheetFragment.getTag());
|
randomBottomSheetFragment.show(getSupportFragmentManager(), randomBottomSheetFragment.getTag());
|
||||||
}
|
}
|
||||||
@@ -1642,7 +1734,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void doNotShowRedditAPIInfoAgain() {
|
public void doNotShowRedditAPIInfoAgain() {
|
||||||
mInternalSharedPreferences.edit().putBoolean(SharedPreferencesUtils.DO_NOT_SHOW_REDDIT_API_INFO_AGAIN, true).apply();
|
mInternalSharedPreferences.edit().putBoolean(SharedPreferencesUtils.DO_NOT_SHOW_REDDIT_API_INFO_V2_AGAIN, true).apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
private class SectionsPagerAdapter extends FragmentStateAdapter {
|
private class SectionsPagerAdapter extends FragmentStateAdapter {
|
||||||
@@ -1675,8 +1767,8 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
@Override
|
@Override
|
||||||
public Fragment createFragment(int position) {
|
public Fragment createFragment(int position) {
|
||||||
if (position == 0) {
|
if (position == 0) {
|
||||||
int postType = mMainActivityTabsSharedPreferences.getInt((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_HOME);
|
int postType = mMainActivityTabsSharedPreferences.getInt((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_HOME);
|
||||||
String name = mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_NAME, "");
|
String name = mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_1_NAME, "");
|
||||||
return generatePostFragment(postType, name);
|
return generatePostFragment(postType, name);
|
||||||
} else {
|
} else {
|
||||||
if (showFavoriteMultiReddits) {
|
if (showFavoriteMultiReddits) {
|
||||||
@@ -1718,11 +1810,11 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
int postType;
|
int postType;
|
||||||
String name;
|
String name;
|
||||||
if (position == 1) {
|
if (position == 1) {
|
||||||
postType = mMainActivityTabsSharedPreferences.getInt((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_POPULAR);
|
postType = mMainActivityTabsSharedPreferences.getInt((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_POPULAR);
|
||||||
name = mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_NAME, "");
|
name = mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_2_NAME, "");
|
||||||
} else {
|
} else {
|
||||||
postType = mMainActivityTabsSharedPreferences.getInt((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_ALL);
|
postType = mMainActivityTabsSharedPreferences.getInt((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_POST_TYPE, SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_ALL);
|
||||||
name = mMainActivityTabsSharedPreferences.getString((mAccountName == null ? "" : mAccountName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_NAME, "");
|
name = mMainActivityTabsSharedPreferences.getString((mAccountQualifiedName == null ? "" : mAccountQualifiedName) + SharedPreferencesUtils.MAIN_PAGE_TAB_3_NAME, "");
|
||||||
}
|
}
|
||||||
return generatePostFragment(postType, name);
|
return generatePostFragment(postType, name);
|
||||||
}
|
}
|
||||||
@@ -1754,7 +1846,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
Bundle bundle = new Bundle();
|
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, mAccessToken == null ? PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE : PostPagingSource.TYPE_FRONT_PAGE);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_ALL) {
|
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_ALL) {
|
||||||
@@ -1763,7 +1855,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
||||||
bundle.putString(PostFragment.EXTRA_NAME, "all");
|
bundle.putString(PostFragment.EXTRA_NAME, "all");
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_SUBREDDIT) {
|
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_SUBREDDIT) {
|
||||||
@@ -1772,7 +1864,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_SUBREDDIT);
|
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_SUBREDDIT);
|
||||||
bundle.putString(PostFragment.EXTRA_NAME, name);
|
bundle.putString(PostFragment.EXTRA_NAME, name);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_MULTIREDDIT) {
|
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_MULTIREDDIT) {
|
||||||
@@ -1781,7 +1873,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
bundle.putString(PostFragment.EXTRA_NAME, name);
|
bundle.putString(PostFragment.EXTRA_NAME, name);
|
||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, mAccessToken == null ? PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT : PostPagingSource.TYPE_MULTI_REDDIT);
|
bundle.putInt(PostFragment.EXTRA_POST_TYPE, mAccessToken == null ? PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT : PostPagingSource.TYPE_MULTI_REDDIT);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_USER) {
|
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_USER) {
|
||||||
@@ -1791,7 +1883,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
bundle.putString(PostFragment.EXTRA_USER_NAME, name);
|
bundle.putString(PostFragment.EXTRA_USER_NAME, name);
|
||||||
bundle.putString(PostFragment.EXTRA_USER_WHERE, PostPagingSource.USER_WHERE_SUBMITTED);
|
bundle.putString(PostFragment.EXTRA_USER_WHERE, PostPagingSource.USER_WHERE_SUBMITTED);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_UPVOTED
|
} else if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_UPVOTED
|
||||||
@@ -1804,7 +1896,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_USER);
|
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_USER);
|
||||||
bundle.putString(PostFragment.EXTRA_USER_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_USER_NAME, mAccountName);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
bundle.putBoolean(PostFragment.EXTRA_DISABLE_READ_POSTS, true);
|
bundle.putBoolean(PostFragment.EXTRA_DISABLE_READ_POSTS, true);
|
||||||
|
|
||||||
if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_UPVOTED) {
|
if (postType == SharedPreferencesUtils.MAIN_PAGE_TAB_POST_TYPE_UPVOTED) {
|
||||||
@@ -1827,7 +1919,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_FRONT_PAGE);
|
||||||
bundle.putString(PostFragment.EXTRA_NAME, "local");
|
bundle.putString(PostFragment.EXTRA_NAME, "local");
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ public class MultiredditSelectionActivity extends BaseActivity implements Activi
|
|||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
bindView(true);
|
bindView(true);
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import android.view.MenuItem;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
|
import androidx.lifecycle.Observer;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
@@ -16,6 +17,7 @@ import com.google.android.material.appbar.CollapsingToolbarLayout;
|
|||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -26,13 +28,14 @@ import butterknife.ButterKnife;
|
|||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.adapters.PostFilterRecyclerViewAdapter;
|
import eu.toldi.infinityforlemmy.adapters.PostFilterWithUsageRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostFilterOptionsBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostFilterOptionsBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.DeletePostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.DeletePostFilter;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilterViewModel;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilterWithUsageViewModel;
|
||||||
|
import eu.toldi.infinityforlemmy.postfilter.PostFilterWithUsage;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
public class PostFilterPreferenceActivity extends BaseActivity {
|
public class PostFilterPreferenceActivity extends BaseActivity {
|
||||||
@@ -62,8 +65,8 @@ public class PostFilterPreferenceActivity extends BaseActivity {
|
|||||||
CustomThemeWrapper customThemeWrapper;
|
CustomThemeWrapper customThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
Executor executor;
|
Executor executor;
|
||||||
public PostFilterViewModel postFilterViewModel;
|
public PostFilterWithUsageViewModel postFilterWithUsageViewModel;
|
||||||
private PostFilterRecyclerViewAdapter adapter;
|
private PostFilterWithUsageRecyclerViewAdapter adapter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -99,7 +102,7 @@ public class PostFilterPreferenceActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
adapter = new PostFilterRecyclerViewAdapter(this, customThemeWrapper, postFilter -> {
|
adapter = new PostFilterWithUsageRecyclerViewAdapter(this, customThemeWrapper, postFilter -> {
|
||||||
if (post != null) {
|
if (post != null) {
|
||||||
showPostFilterOptions(post, postFilter);
|
showPostFilterOptions(post, postFilter);
|
||||||
} else if (subredditName != null) {
|
} else if (subredditName != null) {
|
||||||
@@ -117,10 +120,15 @@ public class PostFilterPreferenceActivity extends BaseActivity {
|
|||||||
|
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
|
|
||||||
postFilterViewModel = new ViewModelProvider(this,
|
postFilterWithUsageViewModel = new ViewModelProvider(this,
|
||||||
new PostFilterViewModel.Factory(redditDataRoomDatabase)).get(PostFilterViewModel.class);
|
new PostFilterWithUsageViewModel.Factory(redditDataRoomDatabase)).get(PostFilterWithUsageViewModel.class);
|
||||||
|
|
||||||
postFilterViewModel.getPostFilterListLiveData().observe(this, postFilters -> adapter.setPostFilterList(postFilters));
|
postFilterWithUsageViewModel.getPostFilterWithUsageListLiveData().observe(this, new Observer<List<PostFilterWithUsage>>() {
|
||||||
|
@Override
|
||||||
|
public void onChanged(List<PostFilterWithUsage> postFilterWithUsages) {
|
||||||
|
adapter.setPostFilterWithUsageList(postFilterWithUsages);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showPostFilterOptions(Post post, PostFilter postFilter) {
|
public void showPostFilterOptions(Post post, PostFilter postFilter) {
|
||||||
|
|||||||
@@ -126,9 +126,9 @@ public class PostFilterUsageListingActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void editAndPostFilterUsageNameOfUsage(int type, String nameOfUsage) {
|
private void editAndPostFilterUsageNameOfUsage(int type, String nameOfUsage) {
|
||||||
View dialogView = getLayoutInflater().inflate(R.layout.dialog_edit_post_filter_name_of_usage, null);
|
View dialogView = getLayoutInflater().inflate(R.layout.dialog_edit_post_or_comment_filter_name_of_usage, null);
|
||||||
TextInputLayout textInputLayout = dialogView.findViewById(R.id.text_input_layout_edit_post_filter_name_of_usage_dialog);
|
TextInputLayout textInputLayout = dialogView.findViewById(R.id.text_input_layout_edit_post_or_comment_filter_name_of_usage_dialog);
|
||||||
TextInputEditText textInputEditText = dialogView.findViewById(R.id.text_input_edit_text_edit_post_filter_name_of_usage_dialog);
|
TextInputEditText textInputEditText = dialogView.findViewById(R.id.text_input_edit_text_edit_post_or_comment_filter_name_of_usage_dialog);
|
||||||
int primaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
int primaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
||||||
textInputLayout.setBoxStrokeColor(primaryTextColor);
|
textInputLayout.setBoxStrokeColor(primaryTextColor);
|
||||||
textInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
textInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor));
|
||||||
@@ -147,7 +147,6 @@ public class PostFilterUsageListingActivity extends BaseActivity {
|
|||||||
titleStringId = R.string.user;
|
titleStringId = R.string.user;
|
||||||
break;
|
break;
|
||||||
case PostFilterUsage.MULTIREDDIT_TYPE:
|
case PostFilterUsage.MULTIREDDIT_TYPE:
|
||||||
textInputEditText.setHint(R.string.settings_tab_multi_reddit_name);
|
|
||||||
titleStringId = R.string.multi_reddit;
|
titleStringId = R.string.multi_reddit;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import com.google.android.material.divider.MaterialDivider;
|
|||||||
import com.google.android.material.materialswitch.MaterialSwitch;
|
import com.google.android.material.materialswitch.MaterialSwitch;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.libRG.CustomTextView;
|
import eu.toldi.infinityforlemmy.CustomTextView;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
@@ -214,7 +214,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(getApplication());
|
||||||
|
|
||||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||||
|
|
||||||
@@ -504,7 +504,7 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadSubredditIcon() {
|
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;
|
iconUrl = iconImageUrl;
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
loadSubredditIconSuccessful = true;
|
loadSubredditIconSuccessful = true;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import com.google.android.material.divider.MaterialDivider;
|
|||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
import com.google.android.material.materialswitch.MaterialSwitch;
|
import com.google.android.material.materialswitch.MaterialSwitch;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.libRG.CustomTextView;
|
import eu.toldi.infinityforlemmy.CustomTextView;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
@@ -228,7 +228,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(getApplication());
|
||||||
|
|
||||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||||
|
|
||||||
@@ -475,6 +475,8 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
nsfwTextView.setTextColor(primaryTextColor);
|
nsfwTextView.setTextColor(primaryTextColor);
|
||||||
titleEditText.setTextColor(primaryTextColor);
|
titleEditText.setTextColor(primaryTextColor);
|
||||||
titleEditText.setHintTextColor(secondaryTextColor);
|
titleEditText.setHintTextColor(secondaryTextColor);
|
||||||
|
contentEditText.setTextColor(primaryTextColor);
|
||||||
|
contentEditText.setHintTextColor(secondaryTextColor);
|
||||||
boolean circleFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false);
|
boolean circleFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false);
|
||||||
applyFABTheme(captureFab, circleFab);
|
applyFABTheme(captureFab, circleFab);
|
||||||
applyFABTheme(selectFromLibraryFab, circleFab);
|
applyFABTheme(selectFromLibraryFab, circleFab);
|
||||||
@@ -487,6 +489,10 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
titleEditText.setTypeface(typeface);
|
titleEditText.setTypeface(typeface);
|
||||||
selectAgainTextView.setTypeface(typeface);
|
selectAgainTextView.setTypeface(typeface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (contentTypeface != null) {
|
||||||
|
contentEditText.setTypeface(contentTypeface);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadImage() {
|
private void loadImage() {
|
||||||
@@ -511,7 +517,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadSubredditIcon() {
|
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;
|
iconUrl = iconImageUrl;
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
loadSubredditIconSuccessful = true;
|
loadSubredditIconSuccessful = true;
|
||||||
@@ -792,7 +798,7 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||||
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||||
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
|||||||
import com.google.android.material.divider.MaterialDivider;
|
import com.google.android.material.divider.MaterialDivider;
|
||||||
import com.google.android.material.materialswitch.MaterialSwitch;
|
import com.google.android.material.materialswitch.MaterialSwitch;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.libRG.CustomTextView;
|
import eu.toldi.infinityforlemmy.CustomTextView;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
@@ -217,7 +217,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(getApplication());
|
||||||
|
|
||||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||||
|
|
||||||
@@ -458,6 +458,8 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
titleEditText.setHintTextColor(secondaryTextColor);
|
titleEditText.setHintTextColor(secondaryTextColor);
|
||||||
suggestTitleButton.setBackgroundColor(mCustomThemeWrapper.getColorPrimaryLightTheme());
|
suggestTitleButton.setBackgroundColor(mCustomThemeWrapper.getColorPrimaryLightTheme());
|
||||||
suggestTitleButton.setTextColor(mCustomThemeWrapper.getButtonTextColor());
|
suggestTitleButton.setTextColor(mCustomThemeWrapper.getButtonTextColor());
|
||||||
|
contentEditText.setTextColor(primaryTextColor);
|
||||||
|
contentEditText.setHintTextColor(secondaryTextColor);
|
||||||
linkEditText.setTextColor(primaryTextColor);
|
linkEditText.setTextColor(primaryTextColor);
|
||||||
linkEditText.setHintTextColor(secondaryTextColor);
|
linkEditText.setHintTextColor(secondaryTextColor);
|
||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
@@ -470,6 +472,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
}
|
}
|
||||||
if (contentTypeface != null) {
|
if (contentTypeface != null) {
|
||||||
linkEditText.setTypeface(contentTypeface);
|
linkEditText.setTypeface(contentTypeface);
|
||||||
|
contentEditText.setTypeface(contentTypeface);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -488,8 +491,8 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadSubredditIcon() {
|
private void loadSubredditIcon() {
|
||||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, communityData.getQualified_name(),
|
||||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||||
iconUrl = iconImageUrl;
|
iconUrl = iconImageUrl;
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
loadSubredditIconSuccessful = true;
|
loadSubredditIconSuccessful = true;
|
||||||
@@ -722,7 +725,7 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||||
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||||
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import com.google.android.material.snackbar.Snackbar;
|
|||||||
import com.google.android.material.textfield.TextInputEditText;
|
import com.google.android.material.textfield.TextInputEditText;
|
||||||
import com.google.android.material.textfield.TextInputLayout;
|
import com.google.android.material.textfield.TextInputLayout;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.libRG.CustomTextView;
|
import eu.toldi.infinityforlemmy.CustomTextView;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
@@ -219,7 +219,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(getApplication());
|
||||||
|
|
||||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||||
|
|
||||||
@@ -500,7 +500,7 @@ public class PostPollActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadSubredditIcon() {
|
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;
|
iconUrl = iconImageUrl;
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
loadSubredditIconSuccessful = true;
|
loadSubredditIconSuccessful = true;
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
|||||||
import com.google.android.material.divider.MaterialDivider;
|
import com.google.android.material.divider.MaterialDivider;
|
||||||
import com.google.android.material.materialswitch.MaterialSwitch;
|
import com.google.android.material.materialswitch.MaterialSwitch;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.libRG.CustomTextView;
|
import eu.toldi.infinityforlemmy.CustomTextView;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
@@ -208,7 +208,7 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(getApplication());
|
||||||
|
|
||||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||||
|
|
||||||
@@ -450,8 +450,8 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadSubredditIcon() {
|
private void loadSubredditIcon() {
|
||||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, communityData.getQualified_name(),
|
||||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||||
iconUrl = iconImageUrl;
|
iconUrl = iconImageUrl;
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
loadSubredditIconSuccessful = true;
|
loadSubredditIconSuccessful = true;
|
||||||
@@ -673,8 +673,8 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
|
|||||||
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
int start = Math.max(contentEditText.getSelectionStart(), 0);
|
||||||
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
int end = Math.max(contentEditText.getSelectionEnd(), 0);
|
||||||
contentEditText.getText().replace(Math.min(start, end), Math.max(start, end),
|
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
|
@Override
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import com.google.android.material.divider.MaterialDivider;
|
|||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
import com.google.android.material.materialswitch.MaterialSwitch;
|
import com.google.android.material.materialswitch.MaterialSwitch;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.libRG.CustomTextView;
|
import eu.toldi.infinityforlemmy.CustomTextView;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
@@ -216,7 +216,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(getApplication());
|
||||||
|
|
||||||
player = new ExoPlayer.Builder(this).build();
|
player = new ExoPlayer.Builder(this).build();
|
||||||
videoPlayerView.setPlayer(player);
|
videoPlayerView.setPlayer(player);
|
||||||
@@ -486,7 +486,7 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
|
|||||||
|
|
||||||
private void loadSubredditIcon() {
|
private void loadSubredditIcon() {
|
||||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
||||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||||
iconUrl = iconImageUrl;
|
iconUrl = iconImageUrl;
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
loadSubredditIconSuccessful = true;
|
loadSubredditIconSuccessful = true;
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ public class RulesActivity extends BaseActivity {
|
|||||||
|
|
||||||
mSubredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME);
|
mSubredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME);
|
||||||
|
|
||||||
mAdapter = new RulesRecyclerViewAdapter(this, mCustomThemeWrapper, sliderPanel);
|
mAdapter = new RulesRecyclerViewAdapter(this, mCustomThemeWrapper, sliderPanel, mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false));
|
||||||
recyclerView.setAdapter(mAdapter);
|
recyclerView.setAdapter(mAdapter);
|
||||||
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), mSubredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
FetchSubredditData.fetchSubredditData(mRetrofit.getRetrofit(), mSubredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package eu.toldi.infinityforlemmy.activities;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.ColorStateList;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -27,11 +28,14 @@ import androidx.lifecycle.ViewModelProvider;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.google.android.material.appbar.AppBarLayout;
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
|
import com.google.android.material.button.MaterialButton;
|
||||||
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
@@ -47,13 +51,14 @@ import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
|||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.recentsearchquery.DeleteRecentSearchQuery;
|
|
||||||
import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQuery;
|
import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQuery;
|
||||||
import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQueryViewModel;
|
import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQueryViewModel;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@@ -98,6 +103,8 @@ public class SearchActivity extends BaseActivity {
|
|||||||
ImageView clearSearchTextImageView;
|
ImageView clearSearchTextImageView;
|
||||||
@BindView(R.id.link_handler_image_view_search_activity)
|
@BindView(R.id.link_handler_image_view_search_activity)
|
||||||
ImageView linkHandlerImageView;
|
ImageView linkHandlerImageView;
|
||||||
|
@BindView(R.id.delete_all_recent_searches_button_search_activity)
|
||||||
|
MaterialButton deleteAllSearchesButton;
|
||||||
@BindView(R.id.subreddit_name_relative_layout_search_activity)
|
@BindView(R.id.subreddit_name_relative_layout_search_activity)
|
||||||
RelativeLayout subredditNameRelativeLayout;
|
RelativeLayout subredditNameRelativeLayout;
|
||||||
@BindView(R.id.search_in_text_view_search_activity)
|
@BindView(R.id.search_in_text_view_search_activity)
|
||||||
@@ -124,6 +131,8 @@ public class SearchActivity extends BaseActivity {
|
|||||||
SharedPreferences mNsfwAndSpoilerSharedPreferences;
|
SharedPreferences mNsfwAndSpoilerSharedPreferences;
|
||||||
@Inject
|
@Inject
|
||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
|
@Inject
|
||||||
|
Executor executor;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String query;
|
private String query;
|
||||||
@@ -163,6 +172,7 @@ public class SearchActivity extends BaseActivity {
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
|
|
||||||
clearSearchTextImageView.setVisibility(View.GONE);
|
clearSearchTextImageView.setVisibility(View.GONE);
|
||||||
|
deleteAllSearchesButton.setVisibility(View.GONE);
|
||||||
|
|
||||||
searchOnlySubreddits = getIntent().getBooleanExtra(EXTRA_SEARCH_ONLY_SUBREDDITS, false);
|
searchOnlySubreddits = getIntent().getBooleanExtra(EXTRA_SEARCH_ONLY_SUBREDDITS, false);
|
||||||
searchOnlyUsers = getIntent().getBooleanExtra(EXTRA_SEARCH_ONLY_USERS, false);
|
searchOnlyUsers = getIntent().getBooleanExtra(EXTRA_SEARCH_ONLY_USERS, false);
|
||||||
@@ -182,9 +192,9 @@ public class SearchActivity extends BaseActivity {
|
|||||||
if (searchOnlySubreddits) {
|
if (searchOnlySubreddits) {
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
||||||
ArrayList<String> subredditNameList = new ArrayList<>();
|
ArrayList<SubredditWithSelection> subredditNameList = new ArrayList<>();
|
||||||
subredditNameList.add(subredditData.getName());
|
subredditNameList.add(new SubredditWithSelection(subredditData.getName(), subredditData.getIconUrl(), LemmyUtils.actorID2FullName(subredditData.getActorId())));
|
||||||
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, subredditNameList);
|
returnIntent.putParcelableArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, subredditNameList);
|
||||||
} else {
|
} else {
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, new SubscribedSubredditData(subredditData));
|
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, new SubscribedSubredditData(subredditData));
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, subredditData.getIconUrl());
|
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, subredditData.getIconUrl());
|
||||||
@@ -276,6 +286,17 @@ public class SearchActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
deleteAllSearchesButton.setOnClickListener(view -> {
|
||||||
|
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||||
|
.setTitle(R.string.confirm)
|
||||||
|
.setMessage(R.string.confirm_delete_all_recent_searches)
|
||||||
|
.setPositiveButton(R.string.yes, (dialogInterface, i) -> {
|
||||||
|
executor.execute(() -> mRedditDataRoomDatabase.recentSearchQueryDao().deleteAllRecentSearchQueries(mAccountName));
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.no, null)
|
||||||
|
.show();
|
||||||
|
});
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
|
||||||
subredditIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE);
|
subredditIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE);
|
||||||
@@ -319,7 +340,7 @@ public class SearchActivity extends BaseActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDelete(RecentSearchQuery recentSearchQuery) {
|
public void onDelete(RecentSearchQuery recentSearchQuery) {
|
||||||
DeleteRecentSearchQuery.deleteRecentSearchQueryListener(mRedditDataRoomDatabase, recentSearchQuery, () -> {});
|
executor.execute(() -> mRedditDataRoomDatabase.recentSearchQueryDao().deleteRecentSearchQueries(recentSearchQuery));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
recyclerView.setVisibility(View.VISIBLE);
|
recyclerView.setVisibility(View.VISIBLE);
|
||||||
@@ -334,8 +355,10 @@ public class SearchActivity extends BaseActivity {
|
|||||||
mRecentSearchQueryViewModel.getAllRecentSearchQueries().observe(this, recentSearchQueries -> {
|
mRecentSearchQueryViewModel.getAllRecentSearchQueries().observe(this, recentSearchQueries -> {
|
||||||
if (recentSearchQueries != null && !recentSearchQueries.isEmpty()) {
|
if (recentSearchQueries != null && !recentSearchQueries.isEmpty()) {
|
||||||
divider.setVisibility(View.VISIBLE);
|
divider.setVisibility(View.VISIBLE);
|
||||||
|
deleteAllSearchesButton.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
divider.setVisibility(View.GONE);
|
divider.setVisibility(View.GONE);
|
||||||
|
deleteAllSearchesButton.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
adapter.setRecentSearchQueries(recentSearchQueries);
|
adapter.setRecentSearchQueries(recentSearchQueries);
|
||||||
});
|
});
|
||||||
@@ -364,6 +387,11 @@ public class SearchActivity extends BaseActivity {
|
|||||||
intent.putExtra(SearchUsersResultActivity.EXTRA_QUERY, query);
|
intent.putExtra(SearchUsersResultActivity.EXTRA_QUERY, query);
|
||||||
intent.putExtra(SearchUsersResultActivity.EXTRA_IS_MULTI_SELECTION, getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false));
|
intent.putExtra(SearchUsersResultActivity.EXTRA_IS_MULTI_SELECTION, getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false));
|
||||||
startActivityForResult(intent, USER_SEARCH_REQUEST_CODE);
|
startActivityForResult(intent, USER_SEARCH_REQUEST_CODE);
|
||||||
|
} else if (query.startsWith("http://") || query.startsWith("https://")) {
|
||||||
|
Intent intent = new Intent(this, LinkResolverActivity.class);
|
||||||
|
intent.setData(Uri.parse(query));
|
||||||
|
startActivity(intent);
|
||||||
|
finish();
|
||||||
} else {
|
} else {
|
||||||
Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class);
|
Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class);
|
||||||
intent.putExtra(SearchResultActivity.EXTRA_QUERY, query);
|
intent.putExtra(SearchResultActivity.EXTRA_QUERY, query);
|
||||||
@@ -377,6 +405,7 @@ public class SearchActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
finish();
|
finish();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -401,6 +430,7 @@ public class SearchActivity extends BaseActivity {
|
|||||||
linkHandlerImageView.setColorFilter(mCustomThemeWrapper.getToolbarPrimaryTextAndIconColor(), android.graphics.PorterDuff.Mode.SRC_IN);
|
linkHandlerImageView.setColorFilter(mCustomThemeWrapper.getToolbarPrimaryTextAndIconColor(), android.graphics.PorterDuff.Mode.SRC_IN);
|
||||||
int colorAccent = mCustomThemeWrapper.getColorAccent();
|
int colorAccent = mCustomThemeWrapper.getColorAccent();
|
||||||
searchInTextView.setTextColor(colorAccent);
|
searchInTextView.setTextColor(colorAccent);
|
||||||
|
deleteAllSearchesButton.setIconTint(ColorStateList.valueOf(mCustomThemeWrapper.getPrimaryIconColor()));
|
||||||
subredditNameTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
subredditNameTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||||
divider.setBackgroundColor(mCustomThemeWrapper.getDividerColor());
|
divider.setBackgroundColor(mCustomThemeWrapper.getDividerColor());
|
||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
@@ -433,18 +463,20 @@ public class SearchActivity extends BaseActivity {
|
|||||||
if (resultCode == RESULT_OK && data != null) {
|
if (resultCode == RESULT_OK && data != null) {
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
|
||||||
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
communityData = data.getParcelableExtra(SubredditSelectionActivity.EXTRA_RETURN_COMMUNITY_DATA);
|
||||||
subredditName = communityData.getName();
|
|
||||||
subredditIsUser = false;
|
subredditIsUser = false;
|
||||||
|
|
||||||
if (subredditName == null) {
|
if (communityData == null) {
|
||||||
subredditNameTextView.setText(R.string.all_communities);
|
subredditNameTextView.setText(R.string.all_communities);
|
||||||
} else {
|
} else {
|
||||||
|
subredditName = communityData.getName();
|
||||||
|
communityQualifiedName = communityData.getQualified_name();
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
}
|
}
|
||||||
} else if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {
|
} else if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
||||||
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, data.getStringArrayListExtra(SearchSubredditsResultActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES));
|
returnIntent.putParcelableArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, data.getParcelableArrayListExtra(SearchSubredditsResultActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES));
|
||||||
} else {
|
} else {
|
||||||
SubscribedSubredditData communityData = data.getParcelableExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
SubscribedSubredditData communityData = data.getParcelableExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_NAME);
|
||||||
String iconUrl = data.getStringExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
String iconUrl = data.getStringExtra(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import org.greenrobot.eventbus.EventBus;
|
|||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
@@ -58,13 +59,13 @@ import eu.toldi.infinityforlemmy.bottomsheetfragments.FABMoreOptionsBottomSheetF
|
|||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostLayoutBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostLayoutBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostTypeBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostTypeBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.RandomBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.RandomBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.SearchPostSortTypeBottomSheetFragment;
|
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.SearchUserAndSubredditSortTypeBottomSheetFragment;
|
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.SortTimeBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.SortTimeBottomSheetFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.SortTypeBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
import eu.toldi.infinityforlemmy.events.ChangeNSFWEvent;
|
import eu.toldi.infinityforlemmy.events.ChangeNSFWEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
|
import eu.toldi.infinityforlemmy.fragments.CommentsListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.SubredditListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.SubredditListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.UserListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.UserListingFragment;
|
||||||
@@ -130,10 +131,11 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
SharedPreferences mCurrentAccountSharedPreferences;
|
SharedPreferences mCurrentAccountSharedPreferences;
|
||||||
@Inject
|
@Inject
|
||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
|
@Inject
|
||||||
|
Executor executor;
|
||||||
private Call<String> subredditAutocompleteCall;
|
private Call<String> subredditAutocompleteCall;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
|
|
||||||
private String mAccountQualifiedName;
|
private String mAccountQualifiedName;
|
||||||
private String mQuery;
|
private String mQuery;
|
||||||
private String mSubredditName;
|
private String mSubredditName;
|
||||||
@@ -244,7 +246,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
private void bindView(Bundle savedInstanceState) {
|
private void bindView(Bundle savedInstanceState) {
|
||||||
sectionsPagerAdapter = new SectionsPagerAdapter(this);
|
sectionsPagerAdapter = new SectionsPagerAdapter(this);
|
||||||
viewPager2.setAdapter(sectionsPagerAdapter);
|
viewPager2.setAdapter(sectionsPagerAdapter);
|
||||||
viewPager2.setOffscreenPageLimit(3);
|
viewPager2.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT);
|
||||||
viewPager2.setUserInputEnabled(!mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false));
|
viewPager2.setUserInputEnabled(!mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false));
|
||||||
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||||
@Override
|
@Override
|
||||||
@@ -269,6 +271,9 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
case 2:
|
case 2:
|
||||||
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.users));
|
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.users));
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
Utils.setTitleWithCustomFontToTab(typeface, tab, getString(R.string.comments));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}).attach();
|
}).attach();
|
||||||
fixViewPager2Sensitivity(viewPager2);
|
fixViewPager2Sensitivity(viewPager2);
|
||||||
@@ -334,7 +339,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_FAB_CHANGE_SORT_TYPE: {
|
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_FAB_CHANGE_SORT_TYPE: {
|
||||||
Fragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
Fragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
||||||
if (fragment instanceof PostFragment) {
|
if (fragment instanceof PostFragment) {
|
||||||
SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SearchPostSortTypeBottomSheetFragment.getNewInstance(((PostFragment) fragment).getSortType());
|
SortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(SortTypeBottomSheetFragment.PAGE_TYPE_SEARCH,((PostFragment) fragment).getSortType());
|
||||||
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -392,25 +397,26 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (mAccountName != null && mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SEARCH_HISTORY, true) && !mInsertSearchQuerySuccess && mQuery != null) {
|
if (mAccountName != null && mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SEARCH_HISTORY, true) && !mInsertSearchQuerySuccess && mQuery != null) {
|
||||||
InsertRecentSearchQuery.insertRecentSearchQueryListener(mRedditDataRoomDatabase, mAccountQualifiedName,
|
InsertRecentSearchQuery.insertRecentSearchQueryListener(executor, new Handler(getMainLooper()),
|
||||||
mQuery, () -> mInsertSearchQuerySuccess = true);
|
mRedditDataRoomDatabase, mAccountQualifiedName, mQuery, () -> mInsertSearchQuerySuccess = true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void displaySortTypeBottomSheetFragment() {
|
private void displaySortTypeBottomSheetFragment() {
|
||||||
Fragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
Fragment fragment = sectionsPagerAdapter.getCurrentFragment();
|
||||||
if (fragment instanceof PostFragment) {
|
if (fragment instanceof PostFragment) {
|
||||||
SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SearchPostSortTypeBottomSheetFragment.getNewInstance(((PostFragment) fragment).getSortType());
|
SortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(SortTypeBottomSheetFragment.PAGE_TYPE_SEARCH,((PostFragment) fragment).getSortType());
|
||||||
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
||||||
} else {
|
} else {
|
||||||
if (fragment instanceof SubredditListingFragment) {
|
if (fragment instanceof SubredditListingFragment) {
|
||||||
SearchUserAndSubredditSortTypeBottomSheetFragment searchUserAndSubredditSortTypeBottomSheetFragment
|
SortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(SortTypeBottomSheetFragment.PAGE_TYPE_SEARCH,((SubredditListingFragment) fragment).getSortType());
|
||||||
= SearchUserAndSubredditSortTypeBottomSheetFragment.getNewInstance(viewPager2.getCurrentItem(), ((SubredditListingFragment) fragment).getSortType());
|
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
||||||
searchUserAndSubredditSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchUserAndSubredditSortTypeBottomSheetFragment.getTag());
|
|
||||||
} else if (fragment instanceof UserListingFragment) {
|
} else if (fragment instanceof UserListingFragment) {
|
||||||
SearchUserAndSubredditSortTypeBottomSheetFragment searchUserAndSubredditSortTypeBottomSheetFragment
|
SortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(SortTypeBottomSheetFragment.PAGE_TYPE_SEARCH,((UserListingFragment) fragment).getSortType());
|
||||||
= SearchUserAndSubredditSortTypeBottomSheetFragment.getNewInstance(viewPager2.getCurrentItem(), ((UserListingFragment) fragment).getSortType());
|
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
||||||
searchUserAndSubredditSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchUserAndSubredditSortTypeBottomSheetFragment.getTag());
|
} else if (fragment instanceof CommentsListingFragment) {
|
||||||
|
SortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(SortTypeBottomSheetFragment.PAGE_TYPE_SEARCH,((CommentsListingFragment) fragment).getSortType());
|
||||||
|
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -470,7 +476,6 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
sectionsPagerAdapter.changeSortType(sortType);
|
sectionsPagerAdapter.changeSortType(sortType);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -774,7 +779,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
bundle.putString(PostFragment.EXTRA_QUERY, mQuery);
|
bundle.putString(PostFragment.EXTRA_QUERY, mQuery);
|
||||||
bundle.putString(PostFragment.EXTRA_TRENDING_SOURCE, getIntent().getStringExtra(EXTRA_TRENDING_SOURCE));
|
bundle.putString(PostFragment.EXTRA_TRENDING_SOURCE, getIntent().getStringExtra(EXTRA_TRENDING_SOURCE));
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
mFragment.setArguments(bundle);
|
mFragment.setArguments(bundle);
|
||||||
return mFragment;
|
return mFragment;
|
||||||
}
|
}
|
||||||
@@ -784,11 +789,12 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
bundle.putString(SubredditListingFragment.EXTRA_QUERY, mQuery);
|
bundle.putString(SubredditListingFragment.EXTRA_QUERY, mQuery);
|
||||||
bundle.putBoolean(SubredditListingFragment.EXTRA_IS_GETTING_SUBREDDIT_INFO, false);
|
bundle.putBoolean(SubredditListingFragment.EXTRA_IS_GETTING_SUBREDDIT_INFO, false);
|
||||||
bundle.putString(SubredditListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(SubredditListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(SubredditListingFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
bundle.putString(SubredditListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||||
|
bundle.putString(SubredditListingFragment.EXTRA_ACCOUNT_QUALIFIED_NAME, mAccountQualifiedName);
|
||||||
mFragment.setArguments(bundle);
|
mFragment.setArguments(bundle);
|
||||||
return mFragment;
|
return mFragment;
|
||||||
}
|
}
|
||||||
default: {
|
case 2: {
|
||||||
UserListingFragment mFragment = new UserListingFragment();
|
UserListingFragment mFragment = new UserListingFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putString(UserListingFragment.EXTRA_QUERY, mQuery);
|
bundle.putString(UserListingFragment.EXTRA_QUERY, mQuery);
|
||||||
@@ -798,6 +804,15 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
mFragment.setArguments(bundle);
|
mFragment.setArguments(bundle);
|
||||||
return mFragment;
|
return mFragment;
|
||||||
}
|
}
|
||||||
|
default: {
|
||||||
|
CommentsListingFragment mFragment = new CommentsListingFragment();
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putString(CommentsListingFragment.EXTRA_SEARCH_QUERY, mQuery);
|
||||||
|
bundle.putString(CommentsListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
|
bundle.putString(CommentsListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||||
|
mFragment.setArguments(bundle);
|
||||||
|
return mFragment;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -822,9 +837,19 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
|
|
||||||
void changeSortType(SortType sortType) {
|
void changeSortType(SortType sortType) {
|
||||||
Fragment fragment = getCurrentFragment();
|
Fragment fragment = getCurrentFragment();
|
||||||
|
|
||||||
if (fragment instanceof PostFragment) {
|
if (fragment instanceof PostFragment) {
|
||||||
((PostFragment) fragment).changeSortType(sortType);
|
((PostFragment) fragment).changeSortType(sortType);
|
||||||
displaySortTypeInToolbar();
|
displaySortTypeInToolbar();
|
||||||
|
} else if (fragment instanceof SubredditListingFragment) {
|
||||||
|
((SubredditListingFragment) fragment).changeSortType(sortType);
|
||||||
|
displaySortTypeInToolbar();
|
||||||
|
} else if (fragment instanceof UserListingFragment) {
|
||||||
|
((UserListingFragment) fragment).changeSortType(sortType);
|
||||||
|
displaySortTypeInToolbar();
|
||||||
|
} else if (fragment instanceof CommentsListingFragment) {
|
||||||
|
((CommentsListingFragment) fragment).changeSortType(sortType);
|
||||||
|
displaySortTypeInToolbar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -867,6 +892,8 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
((SubredditListingFragment) fragment).goBackToTop();
|
((SubredditListingFragment) fragment).goBackToTop();
|
||||||
} else if (fragment instanceof UserListingFragment) {
|
} else if (fragment instanceof UserListingFragment) {
|
||||||
((UserListingFragment) fragment).goBackToTop();
|
((UserListingFragment) fragment).goBackToTop();
|
||||||
|
} else if (fragment instanceof CommentsListingFragment) {
|
||||||
|
((CommentsListingFragment) fragment).goBackToTop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -881,6 +908,9 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
} else if (fragment instanceof UserListingFragment) {
|
} else if (fragment instanceof UserListingFragment) {
|
||||||
SortType sortType = ((UserListingFragment) fragment).getSortType();
|
SortType sortType = ((UserListingFragment) fragment).getSortType();
|
||||||
Utils.displaySortTypeInToolbar(sortType, toolbar);
|
Utils.displaySortTypeInToolbar(sortType, toolbar);
|
||||||
|
} else if (fragment instanceof CommentsListingFragment) {
|
||||||
|
SortType sortType = ((CommentsListingFragment) fragment).getSortType();
|
||||||
|
Utils.displaySortTypeInToolbar(sortType, toolbar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -900,7 +930,7 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return 3;
|
return 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
|||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.fragments.SubredditListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.SubredditListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
@@ -119,7 +120,8 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti
|
|||||||
bundle.putString(SubredditListingFragment.EXTRA_QUERY, query);
|
bundle.putString(SubredditListingFragment.EXTRA_QUERY, query);
|
||||||
bundle.putBoolean(SubredditListingFragment.EXTRA_IS_GETTING_SUBREDDIT_INFO, true);
|
bundle.putBoolean(SubredditListingFragment.EXTRA_IS_GETTING_SUBREDDIT_INFO, true);
|
||||||
bundle.putString(SubredditListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(SubredditListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(SubredditListingFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
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));
|
bundle.putBoolean(SubredditListingFragment.EXTRA_IS_MULTI_SELECTION, getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false));
|
||||||
mFragment.setArguments(bundle);
|
mFragment.setArguments(bundle);
|
||||||
} else {
|
} else {
|
||||||
@@ -170,9 +172,9 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti
|
|||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.action_save_search_subreddits_result_activity) {
|
} else if (item.getItemId() == R.id.action_save_search_subreddits_result_activity) {
|
||||||
if (mFragment != null) {
|
if (mFragment != null) {
|
||||||
ArrayList<String> selectedSubredditNames = ((SubredditListingFragment) mFragment).getSelectedSubredditNames();
|
ArrayList<SubredditWithSelection> selectedSubredditNames = ((SubredditListingFragment) mFragment).getSelectedSubredditNames();
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, selectedSubredditNames);
|
returnIntent.putParcelableArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, selectedSubredditNames);
|
||||||
setResult(Activity.RESULT_OK, returnIntent);
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ public class SelectUserFlairActivity extends BaseActivity implements ActivityToo
|
|||||||
flairEditText.requestFocus();
|
flairEditText.requestFocus();
|
||||||
Utils.showKeyboard(this, new Handler(), flairEditText);
|
Utils.showKeyboard(this, new Handler(), flairEditText);
|
||||||
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||||
.setTitle(R.string.edit_flair)
|
.setTitle("")
|
||||||
.setView(dialogView)
|
.setView(dialogView)
|
||||||
.setPositiveButton(R.string.ok, (dialogInterface, i)
|
.setPositiveButton(R.string.ok, (dialogInterface, i)
|
||||||
-> {
|
-> {
|
||||||
@@ -156,13 +156,13 @@ public class SelectUserFlairActivity extends BaseActivity implements ActivityToo
|
|||||||
} else {
|
} else {
|
||||||
if (userFlair == null) {
|
if (userFlair == null) {
|
||||||
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||||
.setTitle(R.string.clear_user_flair)
|
.setTitle("")
|
||||||
.setPositiveButton(R.string.yes, (dialogInterface, i) -> selectUserFlair(userFlair))
|
.setPositiveButton(R.string.yes, (dialogInterface, i) -> selectUserFlair(userFlair))
|
||||||
.setNegativeButton(R.string.no, null)
|
.setNegativeButton(R.string.no, null)
|
||||||
.show();
|
.show();
|
||||||
} else {
|
} else {
|
||||||
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||||
.setTitle(R.string.select_this_user_flair)
|
.setTitle("")
|
||||||
.setMessage(userFlair.getText())
|
.setMessage(userFlair.getText())
|
||||||
.setPositiveButton(R.string.yes, (dialogInterface, i) -> selectUserFlair(userFlair))
|
.setPositiveButton(R.string.yes, (dialogInterface, i) -> selectUserFlair(userFlair))
|
||||||
.setNegativeButton(R.string.no, null)
|
.setNegativeButton(R.string.no, null)
|
||||||
@@ -181,9 +181,9 @@ public class SelectUserFlairActivity extends BaseActivity implements ActivityToo
|
|||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
if (userFlair == null) {
|
if (userFlair == null) {
|
||||||
Toast.makeText(SelectUserFlairActivity.this, R.string.clear_user_flair_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(SelectUserFlairActivity.this, "", Toast.LENGTH_SHORT).show();
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(SelectUserFlairActivity.this, R.string.select_user_flair_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(SelectUserFlairActivity.this, "", Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
@@ -192,9 +192,9 @@ public class SelectUserFlairActivity extends BaseActivity implements ActivityToo
|
|||||||
public void failed(String errorMessage) {
|
public void failed(String errorMessage) {
|
||||||
if (errorMessage == null || errorMessage.equals("")) {
|
if (errorMessage == null || errorMessage.equals("")) {
|
||||||
if (userFlair == null) {
|
if (userFlair == null) {
|
||||||
Snackbar.make(coordinatorLayout, R.string.clear_user_flair_success, Snackbar.LENGTH_SHORT).show();
|
Snackbar.make(coordinatorLayout, "", Snackbar.LENGTH_SHORT).show();
|
||||||
} else {
|
} else {
|
||||||
Snackbar.make(coordinatorLayout, R.string.select_user_flair_success, Snackbar.LENGTH_SHORT).show();
|
Snackbar.make(coordinatorLayout, "", Snackbar.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_SHORT).show();
|
Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_SHORT).show();
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import com.google.android.material.appbar.CollapsingToolbarLayout;
|
|||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
@@ -29,10 +28,10 @@ import eu.toldi.infinityforlemmy.ActivityToolbarInterface;
|
|||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.adapters.SelectedSubredditsRecyclerViewAdapter;
|
import eu.toldi.infinityforlemmy.adapters.SelectedSubredditsRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.SelectSubredditsOrUsersOptionsBottomSheetFragment;
|
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
public class SelectedSubredditsAndUsersActivity extends BaseActivity implements ActivityToolbarInterface {
|
public class SelectedSubredditsAndUsersActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||||
@@ -62,7 +61,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
private LinearLayoutManagerBugFixed linearLayoutManager;
|
private LinearLayoutManagerBugFixed linearLayoutManager;
|
||||||
private SelectedSubredditsRecyclerViewAdapter adapter;
|
private SelectedSubredditsRecyclerViewAdapter adapter;
|
||||||
private ArrayList<String> subreddits;
|
private ArrayList<SubredditWithSelection> subreddits;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -86,12 +85,11 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
setToolbarGoToTop(toolbar);
|
setToolbarGoToTop(toolbar);
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
subreddits = savedInstanceState.getStringArrayList(SELECTED_SUBREDDITS_STATE);
|
subreddits = savedInstanceState.getParcelableArrayList(SELECTED_SUBREDDITS_STATE);
|
||||||
} else {
|
} else {
|
||||||
subreddits = getIntent().getStringArrayListExtra(EXTRA_SELECTED_SUBREDDITS);
|
subreddits = getIntent().getParcelableArrayListExtra(EXTRA_SELECTED_SUBREDDITS);
|
||||||
}
|
}
|
||||||
|
|
||||||
Collections.sort(subreddits);
|
|
||||||
|
|
||||||
adapter = new SelectedSubredditsRecyclerViewAdapter(this, mCustomThemeWrapper, subreddits);
|
adapter = new SelectedSubredditsRecyclerViewAdapter(this, mCustomThemeWrapper, subreddits);
|
||||||
linearLayoutManager = new LinearLayoutManagerBugFixed(this);
|
linearLayoutManager = new LinearLayoutManagerBugFixed(this);
|
||||||
@@ -110,8 +108,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
});
|
});
|
||||||
|
|
||||||
fab.setOnClickListener(view -> {
|
fab.setOnClickListener(view -> {
|
||||||
SelectSubredditsOrUsersOptionsBottomSheetFragment selectSubredditsOrUsersOptionsBottomSheetFragment = new SelectSubredditsOrUsersOptionsBottomSheetFragment();
|
selectSubreddits();
|
||||||
selectSubredditsOrUsersOptionsBottomSheetFragment.show(getSupportFragmentManager(), selectSubredditsOrUsersOptionsBottomSheetFragment.getTag());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,7 +155,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
if (subreddits == null) {
|
if (subreddits == null) {
|
||||||
subreddits = new ArrayList<>();
|
subreddits = new ArrayList<>();
|
||||||
}
|
}
|
||||||
subreddits = data.getStringArrayListExtra(SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
|
subreddits = data.getParcelableArrayListExtra(SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
|
||||||
adapter.addSubreddits(subreddits);
|
adapter.addSubreddits(subreddits);
|
||||||
}
|
}
|
||||||
} else if (requestCode == USER_SELECTION_REQUEST_CODE) {
|
} else if (requestCode == USER_SELECTION_REQUEST_CODE) {
|
||||||
@@ -176,7 +173,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
if (adapter != null) {
|
if (adapter != null) {
|
||||||
outState.putStringArrayList(SELECTED_SUBREDDITS_STATE, adapter.getSubreddits());
|
outState.putParcelableArrayList(SELECTED_SUBREDDITS_STATE, adapter.getSubreddits());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
package eu.toldi.infinityforlemmy.activities;
|
package eu.toldi.infinityforlemmy.activities;
|
||||||
|
|
||||||
|
import android.content.ActivityNotFoundException;
|
||||||
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Environment;
|
||||||
|
import android.provider.MediaStore;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -10,12 +15,20 @@ import android.widget.EditText;
|
|||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
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.appbar.AppBarLayout;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
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.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
@@ -23,13 +36,24 @@ import butterknife.BindView;
|
|||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
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.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 eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import retrofit2.Retrofit;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
|
|
||||||
public class SendPrivateMessageActivity extends BaseActivity {
|
public class SendPrivateMessageActivity extends BaseActivity implements UploadImageEnabledActivity {
|
||||||
public static final String EXTRA_RECIPIENT_USERNAME = "ERU";
|
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)
|
@BindView(R.id.coordinator_layout_send_private_message_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@BindView(R.id.appbar_layout_send_private_message_activity)
|
@BindView(R.id.appbar_layout_send_private_message_activity)
|
||||||
@@ -40,15 +64,20 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
EditText usernameEditText;
|
EditText usernameEditText;
|
||||||
@BindView(R.id.divider_1_send_private_message_activity)
|
@BindView(R.id.divider_1_send_private_message_activity)
|
||||||
View divider1;
|
View divider1;
|
||||||
@BindView(R.id.subjet_edit_text_send_private_message_activity)
|
|
||||||
EditText subjectEditText;
|
|
||||||
@BindView(R.id.divider_2_send_private_message_activity)
|
@BindView(R.id.divider_2_send_private_message_activity)
|
||||||
View divider2;
|
View divider2;
|
||||||
@BindView(R.id.content_edit_text_send_private_message_activity)
|
@BindView(R.id.content_edit_text_send_private_message_activity)
|
||||||
EditText messageEditText;
|
EditText messageEditText;
|
||||||
|
|
||||||
|
@BindView(R.id.markdown_bottom_bar_recycler_view_send_private_message_activity)
|
||||||
|
RecyclerView markdownBottomBarRecyclerView;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("oauth")
|
@Named("no_oauth")
|
||||||
Retrofit mOauthRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
Executor mExecutor;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@Named("default")
|
@Named("default")
|
||||||
SharedPreferences mSharedPreferences;
|
SharedPreferences mSharedPreferences;
|
||||||
@@ -57,9 +86,18 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
SharedPreferences mCurrentAccountSharedPreferences;
|
SharedPreferences mCurrentAccountSharedPreferences;
|
||||||
@Inject
|
@Inject
|
||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
LemmyPrivateMessageAPI mLemmyPrivateMessageAPI;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
|
|
||||||
|
private BasicUserInfo mRecipientBasicUserInfo;
|
||||||
private boolean isSubmitting = false;
|
private boolean isSubmitting = false;
|
||||||
|
|
||||||
|
private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
|
||||||
|
|
||||||
|
private Uri capturedImageUri;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
@@ -77,14 +115,66 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
addOnOffsetChangedListener(appBarLayout);
|
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);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
|
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
|
if (savedInstanceState != null) {
|
||||||
String username = getIntent().getStringExtra(EXTRA_RECIPIENT_USERNAME);
|
mRecipientBasicUserInfo = savedInstanceState.getParcelable(EXTRA_RECIPIENT_USER_INFO);
|
||||||
if (username != null) {
|
} else {
|
||||||
usernameEditText.setText(username);
|
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
|
@Override
|
||||||
@@ -108,12 +198,6 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
return true;
|
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("")) {
|
if (messageEditText.getText() == null || messageEditText.getText().toString().equals("")) {
|
||||||
isSubmitting = false;
|
isSubmitting = false;
|
||||||
Snackbar.make(coordinatorLayout, R.string.message_content_required, Snackbar.LENGTH_LONG).show();
|
Snackbar.make(coordinatorLayout, R.string.message_content_required, Snackbar.LENGTH_LONG).show();
|
||||||
@@ -125,11 +209,9 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
Snackbar sendingSnackbar = Snackbar.make(coordinatorLayout, R.string.sending_message, Snackbar.LENGTH_INDEFINITE);
|
Snackbar sendingSnackbar = Snackbar.make(coordinatorLayout, R.string.sending_message, Snackbar.LENGTH_INDEFINITE);
|
||||||
sendingSnackbar.show();
|
sendingSnackbar.show();
|
||||||
|
|
||||||
ComposeMessage.composeMessage(mOauthRetrofit, mAccessToken, getResources().getConfiguration().locale,
|
mLemmyPrivateMessageAPI.sendPrivateMessage(mAccessToken, mRecipientBasicUserInfo.getId(), messageEditText.getText().toString(), new LemmyPrivateMessageAPI.PrivateMessageSentListener() {
|
||||||
usernameEditText.getText().toString(), subjectEditText.getText().toString(),
|
|
||||||
messageEditText.getText().toString(), new ComposeMessage.ComposeMessageListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void composeMessageSuccess() {
|
public void onPrivateMessageSentSuccess(@NonNull PrivateMessage privateMessage) {
|
||||||
isSubmitting = false;
|
isSubmitting = false;
|
||||||
item.setEnabled(true);
|
item.setEnabled(true);
|
||||||
item.getIcon().setAlpha(255);
|
item.getIcon().setAlpha(255);
|
||||||
@@ -138,17 +220,13 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void composeMessageFailed(String errorMessage) {
|
public void onPrivateMessageSentError() {
|
||||||
isSubmitting = false;
|
isSubmitting = false;
|
||||||
sendingSnackbar.dismiss();
|
sendingSnackbar.dismiss();
|
||||||
item.setEnabled(true);
|
item.setEnabled(true);
|
||||||
item.getIcon().setAlpha(255);
|
item.getIcon().setAlpha(255);
|
||||||
|
|
||||||
if (errorMessage == null || errorMessage.equals("")) {
|
|
||||||
Snackbar.make(coordinatorLayout, R.string.send_message_failed, Snackbar.LENGTH_LONG).show();
|
Snackbar.make(coordinatorLayout, R.string.send_message_failed, Snackbar.LENGTH_LONG).show();
|
||||||
} else {
|
|
||||||
Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -159,6 +237,7 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putParcelable(EXTRA_RECIPIENT_USER_INFO, mRecipientBasicUserInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -177,19 +256,49 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
|
applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(appBarLayout, null, toolbar);
|
||||||
int primaryTextColor = mCustomThemeWrapper.getPrimaryTextColor();
|
int primaryTextColor = mCustomThemeWrapper.getPrimaryTextColor();
|
||||||
usernameEditText.setTextColor(primaryTextColor);
|
usernameEditText.setTextColor(primaryTextColor);
|
||||||
subjectEditText.setTextColor(primaryTextColor);
|
|
||||||
messageEditText.setTextColor(primaryTextColor);
|
messageEditText.setTextColor(primaryTextColor);
|
||||||
int secondaryTextColor = mCustomThemeWrapper.getSecondaryTextColor();
|
int secondaryTextColor = mCustomThemeWrapper.getSecondaryTextColor();
|
||||||
usernameEditText.setHintTextColor(secondaryTextColor);
|
usernameEditText.setHintTextColor(secondaryTextColor);
|
||||||
subjectEditText.setHintTextColor(secondaryTextColor);
|
|
||||||
messageEditText.setHintTextColor(secondaryTextColor);
|
messageEditText.setHintTextColor(secondaryTextColor);
|
||||||
int dividerColor = mCustomThemeWrapper.getDividerColor();
|
int dividerColor = mCustomThemeWrapper.getDividerColor();
|
||||||
divider1.setBackgroundColor(dividerColor);
|
divider1.setBackgroundColor(dividerColor);
|
||||||
divider2.setBackgroundColor(dividerColor);
|
divider2.setBackgroundColor(dividerColor);
|
||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
usernameEditText.setTypeface(typeface);
|
usernameEditText.setTypeface(typeface);
|
||||||
subjectEditText.setTypeface(typeface);
|
|
||||||
messageEditText.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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -81,7 +81,7 @@ public class SettingsActivity extends BaseActivity implements
|
|||||||
|
|
||||||
setSupportActionBar(binding.toolbarSettingsActivity);
|
setSupportActionBar(binding.toolbarSettingsActivity);
|
||||||
|
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
getSupportFragmentManager()
|
getSupportFragmentManager()
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ import com.google.android.material.button.MaterialButton;
|
|||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
import com.google.android.material.materialswitch.MaterialSwitch;
|
import com.google.android.material.materialswitch.MaterialSwitch;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.libRG.CustomTextView;
|
import eu.toldi.infinityforlemmy.CustomTextView;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
@@ -71,7 +71,7 @@ import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
|||||||
import pl.droidsonroids.gif.GifImageView;
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class SubmitCrosspostActivity extends BaseActivity implements FlairBottomSheetFragment.FlairSelectionCallback,
|
public class SubmitCrosspostActivity extends BaseActivity implements
|
||||||
AccountChooserBottomSheetFragment.AccountChooserListener {
|
AccountChooserBottomSheetFragment.AccountChooserListener {
|
||||||
|
|
||||||
public static final String EXTRA_POST = "EP";
|
public static final String EXTRA_POST = "EP";
|
||||||
@@ -110,10 +110,6 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
MaterialButton rulesButton;
|
MaterialButton rulesButton;
|
||||||
@BindView(R.id.divider_1_submit_crosspost_activity)
|
@BindView(R.id.divider_1_submit_crosspost_activity)
|
||||||
View divider1;
|
View divider1;
|
||||||
@BindView(R.id.flair_custom_text_view_submit_crosspost_activity)
|
|
||||||
CustomTextView flairTextView;
|
|
||||||
@BindView(R.id.spoiler_custom_text_view_submit_crosspost_activity)
|
|
||||||
CustomTextView spoilerTextView;
|
|
||||||
@BindView(R.id.nsfw_custom_text_view_submit_crosspost_activity)
|
@BindView(R.id.nsfw_custom_text_view_submit_crosspost_activity)
|
||||||
CustomTextView nsfwTextView;
|
CustomTextView nsfwTextView;
|
||||||
@BindView(R.id.divider_2_submit_crosspost_activity)
|
@BindView(R.id.divider_2_submit_crosspost_activity)
|
||||||
@@ -204,7 +200,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(getApplication());
|
||||||
|
|
||||||
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
|
||||||
|
|
||||||
@@ -242,7 +238,6 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
if (subredditName != null) {
|
if (subredditName != null) {
|
||||||
subredditNameTextView.setTextColor(primaryTextColor);
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
if (!loadSubredditIconSuccessful) {
|
if (!loadSubredditIconSuccessful) {
|
||||||
loadSubredditIcon();
|
loadSubredditIcon();
|
||||||
}
|
}
|
||||||
@@ -253,17 +248,6 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
mPostingSnackbar.show();
|
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) {
|
if (isNSFW) {
|
||||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||||
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
nsfwTextView.setBorderColor(nsfwBackgroundColor);
|
||||||
@@ -287,13 +271,14 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
titleEditText.setText(post.getTitle());
|
titleEditText.setText(post.getTitle());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (post.getPostType() == Post.TEXT_TYPE) {
|
if (post.getPostType() == Post.TEXT_TYPE || post.getPostType() == Post.LINK_TYPE || post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) {
|
||||||
contentTextView.setVisibility(View.VISIBLE);
|
contentTextView.setVisibility(View.VISIBLE);
|
||||||
contentTextView.setText(post.getSelfTextPlain());
|
contentTextView.setText(generateCrossPostText(post));
|
||||||
} else if (post.getPostType() == Post.LINK_TYPE || post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) {
|
|
||||||
contentTextView.setVisibility(View.VISIBLE);
|
|
||||||
contentTextView.setText(post.getUrl());
|
|
||||||
} else {
|
} else {
|
||||||
|
if (post.getSelfTextPlain() != null && !post.getSelfTextPlain().equals("")) {
|
||||||
|
contentTextView.setVisibility(View.VISIBLE);
|
||||||
|
contentTextView.setText(generateCrossPostText(post));
|
||||||
|
}
|
||||||
Post.Preview preview = getPreview(post);
|
Post.Preview preview = getPreview(post);
|
||||||
if (preview != null) {
|
if (preview != null) {
|
||||||
frameLayout.setVisibility(View.VISIBLE);
|
frameLayout.setVisibility(View.VISIBLE);
|
||||||
@@ -348,39 +333,6 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
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 -> {
|
nsfwTextView.setOnClickListener(view -> {
|
||||||
if (!isNSFW) {
|
if (!isNSFW) {
|
||||||
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
nsfwTextView.setBackgroundColor(nsfwBackgroundColor);
|
||||||
@@ -460,8 +412,6 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
spoilerTextColor = mCustomThemeWrapper.getSpoilerTextColor();
|
||||||
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
nsfwBackgroundColor = mCustomThemeWrapper.getNsfwBackgroundColor();
|
||||||
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
nsfwTextColor = mCustomThemeWrapper.getNsfwTextColor();
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
spoilerTextView.setTextColor(primaryTextColor);
|
|
||||||
nsfwTextView.setTextColor(primaryTextColor);
|
nsfwTextView.setTextColor(primaryTextColor);
|
||||||
titleEditText.setTextColor(primaryTextColor);
|
titleEditText.setTextColor(primaryTextColor);
|
||||||
titleEditText.setHintTextColor(secondaryTextColor);
|
titleEditText.setHintTextColor(secondaryTextColor);
|
||||||
@@ -473,8 +423,6 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
subredditNameTextView.setTypeface(typeface);
|
subredditNameTextView.setTypeface(typeface);
|
||||||
rulesButton.setTypeface(typeface);
|
rulesButton.setTypeface(typeface);
|
||||||
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
receivePostReplyNotificationsTextView.setTypeface(typeface);
|
||||||
flairTextView.setTypeface(typeface);
|
|
||||||
spoilerTextView.setTypeface(typeface);
|
|
||||||
nsfwTextView.setTypeface(typeface);
|
nsfwTextView.setTypeface(typeface);
|
||||||
titleEditText.setTypeface(typeface);
|
titleEditText.setTypeface(typeface);
|
||||||
}
|
}
|
||||||
@@ -499,7 +447,7 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
|
|
||||||
private void loadSubredditIcon() {
|
private void loadSubredditIcon() {
|
||||||
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
|
||||||
mAccessToken, mOauthRetrofit, mRetrofit.getRetrofit(), iconImageUrl -> {
|
mAccessToken, mRetrofit.getRetrofit(), iconImageUrl -> {
|
||||||
iconUrl = iconImageUrl;
|
iconUrl = iconImageUrl;
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
loadSubredditIconSuccessful = true;
|
loadSubredditIconSuccessful = true;
|
||||||
@@ -561,22 +509,19 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
|
|
||||||
mPostingSnackbar.show();
|
mPostingSnackbar.show();
|
||||||
|
|
||||||
String subredditName;
|
String subredditName = subredditNameTextView.getText().toString();
|
||||||
if (subredditIsUser) {
|
|
||||||
subredditName = "u_" + subredditNameTextView.getText().toString();
|
|
||||||
} else {
|
|
||||||
subredditName = subredditNameTextView.getText().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
Intent intent = new Intent(this, SubmitPostService.class);
|
Intent intent = new Intent(this, SubmitPostService.class);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
intent.putExtra(SubmitPostService.EXTRA_ACCOUNT, selectedAccount);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
intent.putExtra(SubmitPostService.EXTRA_SUBREDDIT_NAME, communityData.getId());
|
||||||
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
intent.putExtra(SubmitPostService.EXTRA_TITLE, titleEditText.getText().toString());
|
||||||
if (post.isCrosspost()) {
|
|
||||||
intent.putExtra(SubmitPostService.EXTRA_BODY, "t3_" + post.getCrosspostParentId());
|
intent.putExtra(SubmitPostService.EXTRA_BODY, generateCrossPostText(post));
|
||||||
} else {
|
if (post.getUrl() != null && !post.getUrl().equals("")) {
|
||||||
intent.putExtra(SubmitPostService.EXTRA_BODY, post.getFullName());
|
intent.putExtra(SubmitPostService.EXTRA_URL, post.getUrl());
|
||||||
}
|
}
|
||||||
|
|
||||||
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_CROSSPOST);
|
intent.putExtra(SubmitPostService.EXTRA_KIND, APIUtils.KIND_CROSSPOST);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
intent.putExtra(SubmitPostService.EXTRA_FLAIR, flair);
|
||||||
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
intent.putExtra(SubmitPostService.EXTRA_IS_SPOILER, isSpoiler);
|
||||||
@@ -635,10 +580,6 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
subredditNameTextView.setText(subredditName);
|
subredditNameTextView.setText(subredditName);
|
||||||
displaySubredditIcon();
|
displaySubredditIcon();
|
||||||
|
|
||||||
flairTextView.setVisibility(View.VISIBLE);
|
|
||||||
flairTextView.setBackgroundColor(resources.getColor(android.R.color.transparent));
|
|
||||||
flairTextView.setTextColor(primaryTextColor);
|
|
||||||
flairTextView.setText(getString(R.string.flair));
|
|
||||||
flair = null;
|
flair = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -650,14 +591,6 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void flairSelected(Flair flair) {
|
|
||||||
this.flair = flair;
|
|
||||||
flairTextView.setText(flair.getText());
|
|
||||||
flairTextView.setBackgroundColor(flairBackgroundColor);
|
|
||||||
flairTextView.setBorderColor(flairBackgroundColor);
|
|
||||||
flairTextView.setTextColor(flairTextColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAccountSelected(Account account) {
|
public void onAccountSelected(Account account) {
|
||||||
@@ -699,4 +632,15 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String generateCrossPostText(Post post) {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append("cross-posted from: ").append(post.getPermalink()).append("\n");
|
||||||
|
String[] lines = post.getSelfTextPlain().split("\n");
|
||||||
|
for (String line : lines) {
|
||||||
|
stringBuilder.append("> ").append(line).append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return stringBuilder.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -37,13 +37,14 @@ import eu.toldi.infinityforlemmy.ActivityToolbarInterface;
|
|||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.adapters.SubredditMultiselectionRecyclerViewAdapter;
|
import eu.toldi.infinityforlemmy.adapters.SubredditMultiselectionRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditViewModel;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditViewModel;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class SubredditMultiselectionActivity extends BaseActivity implements ActivityToolbarInterface {
|
public class SubredditMultiselectionActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||||
|
|
||||||
@@ -70,8 +71,8 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act
|
|||||||
@BindView(R.id.error_text_view_subscribed_subreddits_multiselection_activity)
|
@BindView(R.id.error_text_view_subscribed_subreddits_multiselection_activity)
|
||||||
TextView mErrorTextView;
|
TextView mErrorTextView;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("oauth")
|
@Named("no_oauth")
|
||||||
Retrofit mOauthRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
@Inject
|
@Inject
|
||||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -127,11 +128,11 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act
|
|||||||
setSupportActionBar(mToolbar);
|
setSupportActionBar(mToolbar);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(getApplication());
|
||||||
|
|
||||||
mSwipeRefreshLayout.setEnabled(false);
|
mSwipeRefreshLayout.setEnabled(false);
|
||||||
|
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, "-");
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, "-");
|
||||||
|
|
||||||
bindView();
|
bindView();
|
||||||
}
|
}
|
||||||
@@ -150,7 +151,7 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act
|
|||||||
if (subscribedSubredditData == null || subscribedSubredditData.size() == 0) {
|
if (subscribedSubredditData == null || subscribedSubredditData.size() == 0) {
|
||||||
mRecyclerView.setVisibility(View.GONE);
|
mRecyclerView.setVisibility(View.GONE);
|
||||||
mLinearLayout.setVisibility(View.VISIBLE);
|
mLinearLayout.setVisibility(View.VISIBLE);
|
||||||
mGlide.load(R.drawable.error_image).into(mImageView);
|
mGlide.load(R.mipmap.ic_launcher_round).into(mImageView);
|
||||||
} else {
|
} else {
|
||||||
mLinearLayout.setVisibility(View.GONE);
|
mLinearLayout.setVisibility(View.GONE);
|
||||||
mRecyclerView.setVisibility(View.VISIBLE);
|
mRecyclerView.setVisibility(View.VISIBLE);
|
||||||
@@ -177,7 +178,7 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act
|
|||||||
} else if (itemId == R.id.action_save_subreddit_multiselection_activity) {
|
} else if (itemId == R.id.action_save_subreddit_multiselection_activity) {
|
||||||
if (mAdapter != null) {
|
if (mAdapter != null) {
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
returnIntent.putStringArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS,
|
returnIntent.putExtra(EXTRA_RETURN_SELECTED_SUBREDDITS,
|
||||||
mAdapter.getAllSelectedSubreddits());
|
mAdapter.getAllSelectedSubreddits());
|
||||||
setResult(RESULT_OK, returnIntent);
|
setResult(RESULT_OK, returnIntent);
|
||||||
}
|
}
|
||||||
@@ -198,12 +199,12 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE && resultCode == RESULT_OK && data != null && mAdapter != null) {
|
if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE && resultCode == RESULT_OK && data != null && mAdapter != null) {
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
ArrayList<String> selectedSubreddits = mAdapter.getAllSelectedSubreddits();
|
ArrayList<SubredditWithSelection> selectedSubreddits = mAdapter.getAllSelectedSubreddits();
|
||||||
ArrayList<String> searchedSubreddits = data.getStringArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES);
|
ArrayList<SubredditWithSelection> searchedSubreddits = data.getParcelableArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES);
|
||||||
if (searchedSubreddits != null) {
|
if (searchedSubreddits != null) {
|
||||||
selectedSubreddits.addAll(searchedSubreddits);
|
selectedSubreddits.addAll(searchedSubreddits);
|
||||||
}
|
}
|
||||||
returnIntent.putStringArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS, selectedSubreddits);
|
returnIntent.putParcelableArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS, selectedSubreddits);
|
||||||
setResult(RESULT_OK, returnIntent);
|
setResult(RESULT_OK, returnIntent);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,6 @@ import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
|||||||
import eu.toldi.infinityforlemmy.fragments.FollowedUsersListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.FollowedUsersListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.MultiRedditListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.MultiRedditListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.SubscribedSubredditsListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.SubscribedSubredditsListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.DeleteMultiReddit;
|
|
||||||
import eu.toldi.infinityforlemmy.multireddit.FetchMyMultiReddits;
|
import eu.toldi.infinityforlemmy.multireddit.FetchMyMultiReddits;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
@@ -73,7 +72,6 @@ import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
|||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
public class SubscribedThingListingActivity extends BaseActivity implements ActivityToolbarInterface {
|
public class SubscribedThingListingActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||||
|
|
||||||
@@ -113,6 +111,9 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
@Named("current_account")
|
@Named("current_account")
|
||||||
SharedPreferences mCurrentAccountSharedPreferences;
|
SharedPreferences mCurrentAccountSharedPreferences;
|
||||||
@Inject
|
@Inject
|
||||||
|
@Named("internal")
|
||||||
|
SharedPreferences mInternalSharedPreferences;
|
||||||
|
@Inject
|
||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
@@ -234,7 +235,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
||||||
viewPager.setAdapter(sectionsPagerAdapter);
|
viewPager.setAdapter(sectionsPagerAdapter);
|
||||||
viewPager.setOffscreenPageLimit(1);
|
viewPager.setOffscreenPageLimit(1);
|
||||||
if (viewPager.getCurrentItem() != 2) {
|
if (viewPager.getCurrentItem() != 1) {
|
||||||
fab.hide();
|
fab.hide();
|
||||||
}
|
}
|
||||||
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
|
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
|
||||||
@@ -245,7 +246,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
fab.hide();
|
fab.hide();
|
||||||
} else {
|
} else {
|
||||||
lockSwipeRightToGoBack();
|
lockSwipeRightToGoBack();
|
||||||
if (position != 2) {
|
if (position != 1) {
|
||||||
fab.hide();
|
fab.hide();
|
||||||
} else {
|
} else {
|
||||||
fab.show();
|
fab.show();
|
||||||
@@ -256,7 +257,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
tabLayout.setupWithViewPager(viewPager);
|
tabLayout.setupWithViewPager(viewPager);
|
||||||
|
|
||||||
if (showMultiReddits) {
|
if (showMultiReddits) {
|
||||||
viewPager.setCurrentItem(2, false);
|
viewPager.setCurrentItem(1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
loadSubscriptions(false);
|
loadSubscriptions(false);
|
||||||
@@ -324,6 +325,10 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void loadSubscriptions(boolean forceLoad) {
|
public void loadSubscriptions(boolean forceLoad) {
|
||||||
|
if (!forceLoad && System.currentTimeMillis() - mInternalSharedPreferences.getLong(SharedPreferencesUtils.SUBSCRIBED_THINGS_SYNC_TIME, 0L) < 24 * 60 * 60 * 1000) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (mAccessToken != null && !(!forceLoad && mInsertSuccess)) {
|
if (mAccessToken != null && !(!forceLoad && mInsertSuccess)) {
|
||||||
FetchSubscribedThing.fetchSubscribedThing(mRetrofit.getRetrofit(), mAccessToken, mAccountQualifiedName, null,
|
FetchSubscribedThing.fetchSubscribedThing(mRetrofit.getRetrofit(), mAccessToken, mAccountQualifiedName, null,
|
||||||
new ArrayList<>(), new ArrayList<>(),
|
new ArrayList<>(), new ArrayList<>(),
|
||||||
@@ -333,6 +338,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
public void onFetchSubscribedThingSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
public void onFetchSubscribedThingSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
|
||||||
ArrayList<SubscribedUserData> subscribedUserData,
|
ArrayList<SubscribedUserData> subscribedUserData,
|
||||||
ArrayList<SubredditData> subredditData) {
|
ArrayList<SubredditData> subredditData) {
|
||||||
|
mInternalSharedPreferences.edit().putLong(SharedPreferencesUtils.SUBSCRIBED_THINGS_SYNC_TIME, System.currentTimeMillis()).apply();
|
||||||
InsertSubscribedThings.insertSubscribedThings(
|
InsertSubscribedThings.insertSubscribedThings(
|
||||||
mExecutor,
|
mExecutor,
|
||||||
new Handler(),
|
new Handler(),
|
||||||
@@ -379,7 +385,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
FetchMyMultiReddits.fetchMyMultiReddits(mOauthRetrofit, mAccessToken, new FetchMyMultiReddits.FetchMyMultiRedditsListener() {
|
FetchMyMultiReddits.fetchMyMultiReddits(mOauthRetrofit, mAccessToken, new FetchMyMultiReddits.FetchMyMultiRedditsListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success(ArrayList<MultiReddit> multiReddits) {
|
public void success(ArrayList<MultiReddit> multiReddits) {
|
||||||
InsertMultireddit.insertMultireddits(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddits, mAccountName, () -> {
|
InsertMultireddit.insertMultireddits(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddits, mAccountQualifiedName, () -> {
|
||||||
mInsertMultiredditSuccess = true;
|
mInsertMultiredditSuccess = true;
|
||||||
sectionsPagerAdapter.stopMultiRedditRefreshProgressbar();
|
sectionsPagerAdapter.stopMultiRedditRefreshProgressbar();
|
||||||
});
|
});
|
||||||
@@ -401,27 +407,11 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
.setMessage(R.string.delete_multi_reddit_dialog_message)
|
.setMessage(R.string.delete_multi_reddit_dialog_message)
|
||||||
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
||||||
-> {
|
-> {
|
||||||
if (mAccessToken == null) {
|
|
||||||
DeleteMultiredditInDatabase.deleteMultiredditInDatabase(mExecutor, new Handler(), mRedditDataRoomDatabase, mAccountName, multiReddit.getPath(),
|
DeleteMultiredditInDatabase.deleteMultiredditInDatabase(mExecutor, new Handler(), mRedditDataRoomDatabase, mAccountQualifiedName, multiReddit.getPath(),
|
||||||
() -> Toast.makeText(SubscribedThingListingActivity.this,
|
() -> Toast.makeText(SubscribedThingListingActivity.this,
|
||||||
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show());
|
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show());
|
||||||
} else {
|
|
||||||
DeleteMultiReddit.deleteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
|
|
||||||
mAccessToken, mAccountName, multiReddit.getPath(), new DeleteMultiReddit.DeleteMultiRedditListener() {
|
|
||||||
@Override
|
|
||||||
public void success() {
|
|
||||||
Toast.makeText(SubscribedThingListingActivity.this,
|
|
||||||
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
|
||||||
//loadMultiReddits();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Toast.makeText(SubscribedThingListingActivity.this,
|
|
||||||
R.string.delete_multi_reddit_failed, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
.show();
|
.show();
|
||||||
@@ -477,7 +467,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
@Override
|
@Override
|
||||||
public Fragment getItem(int position) {
|
public Fragment getItem(int position) {
|
||||||
switch (position) {
|
switch (position) {
|
||||||
default:
|
|
||||||
case 0: {
|
case 0: {
|
||||||
SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
|
SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
@@ -488,12 +478,20 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
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 ? "-" : mAccountQualifiedName);
|
||||||
|
fragment.setArguments(bundle);
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCount() {
|
public int getCount() {
|
||||||
return 1;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -502,8 +500,6 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
case 0:
|
case 0:
|
||||||
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.communities));
|
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.communities));
|
||||||
case 1:
|
case 1:
|
||||||
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.users));
|
|
||||||
case 2:
|
|
||||||
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.multi_reddits));
|
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.multi_reddits));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -516,8 +512,6 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
Fragment fragment = (Fragment) super.instantiateItem(container, position);
|
Fragment fragment = (Fragment) super.instantiateItem(container, position);
|
||||||
if (position == 0) {
|
if (position == 0) {
|
||||||
subscribedSubredditsListingFragment = (SubscribedSubredditsListingFragment) fragment;
|
subscribedSubredditsListingFragment = (SubscribedSubredditsListingFragment) fragment;
|
||||||
} else if (position == 1) {
|
|
||||||
followedUsersListingFragment = (FollowedUsersListingFragment) fragment;
|
|
||||||
} else {
|
} else {
|
||||||
multiRedditListingFragment = (MultiRedditListingFragment) fragment;
|
multiRedditListingFragment = (MultiRedditListingFragment) fragment;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ public class TrendingActivity extends BaseActivity {
|
|||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(getApplication());
|
||||||
|
|
||||||
DisplayMetrics displayMetrics = new DisplayMetrics();
|
DisplayMetrics displayMetrics = new DisplayMetrics();
|
||||||
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
|
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
|
||||||
@@ -201,7 +201,7 @@ public class TrendingActivity extends BaseActivity {
|
|||||||
isRefreshing = true;
|
isRefreshing = true;
|
||||||
|
|
||||||
errorLinearLayout.setVisibility(View.GONE);
|
errorLinearLayout.setVisibility(View.GONE);
|
||||||
Glide.with(this).clear(errorImageView);
|
Glide.with(getApplication()).clear(errorImageView);
|
||||||
swipeRefreshLayout.setRefreshing(true);
|
swipeRefreshLayout.setRefreshing(true);
|
||||||
trendingSearches = null;
|
trendingSearches = null;
|
||||||
adapter.setTrendingSearches(null);
|
adapter.setTrendingSearches(null);
|
||||||
@@ -278,7 +278,7 @@ public class TrendingActivity extends BaseActivity {
|
|||||||
|
|
||||||
private void showErrorView(int stringId) {
|
private void showErrorView(int stringId) {
|
||||||
errorLinearLayout.setVisibility(View.VISIBLE);
|
errorLinearLayout.setVisibility(View.VISIBLE);
|
||||||
mGlide.load(R.drawable.error_image).into(errorImageView);
|
mGlide.load(R.mipmap.ic_launcher_round).into(errorImageView);
|
||||||
errorTextView.setText(stringId);
|
errorTextView.setText(stringId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ import eu.toldi.infinityforlemmy.font.TitleFontStyle;
|
|||||||
import eu.toldi.infinityforlemmy.services.DownloadMediaService;
|
import eu.toldi.infinityforlemmy.services.DownloadMediaService;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
|
||||||
public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWallpaperCallback, CustomFontReceiver {
|
public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWallpaperCallback, CustomFontReceiver {
|
||||||
|
|
||||||
@@ -108,6 +109,9 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
|||||||
@Named("default")
|
@Named("default")
|
||||||
SharedPreferences mSharedPreferences;
|
SharedPreferences mSharedPreferences;
|
||||||
@Inject
|
@Inject
|
||||||
|
@Named("glide")
|
||||||
|
OkHttpClient okHttpClient;
|
||||||
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
private boolean isActionBarHidden = false;
|
private boolean isActionBarHidden = false;
|
||||||
private boolean isDownloading = false;
|
private boolean isDownloading = false;
|
||||||
@@ -146,7 +150,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
|||||||
getTheme().applyStyle(ContentFontFamily.valueOf(mSharedPreferences
|
getTheme().applyStyle(ContentFontFamily.valueOf(mSharedPreferences
|
||||||
.getString(SharedPreferencesUtils.CONTENT_FONT_FAMILY_KEY, ContentFontFamily.Default.name())).getResId(), true);
|
.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);
|
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());
|
Slidr.attach(this, new SlidrConfig.Builder().position(SlidrPosition.VERTICAL).distanceThreshold(0.125f).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
glide = Glide.with(this);
|
glide = Glide.with(getApplication());
|
||||||
|
|
||||||
handler = new Handler();
|
handler = new Handler();
|
||||||
|
|
||||||
|
|||||||
@@ -62,10 +62,8 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|||||||
import eu.toldi.infinityforlemmy.customviews.NavigationWrapper;
|
import eu.toldi.infinityforlemmy.customviews.NavigationWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
import eu.toldi.infinityforlemmy.events.GoBackToMainPageEvent;
|
import eu.toldi.infinityforlemmy.events.GoBackToMainPageEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.RefreshMultiRedditsEvent;
|
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.DeleteMultiReddit;
|
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
@@ -430,7 +428,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
bundle.putString(PostFragment.EXTRA_NAME, multiPath);
|
bundle.putString(PostFragment.EXTRA_NAME, multiPath);
|
||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, mAccessToken == null ? PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT : PostPagingSource.TYPE_MULTI_REDDIT);
|
bundle.putInt(PostFragment.EXTRA_POST_TYPE, mAccessToken == null ? PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT : PostPagingSource.TYPE_MULTI_REDDIT);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
mFragment.setArguments(bundle);
|
mFragment.setArguments(bundle);
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_multi_reddit_detail_activity, mFragment).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_multi_reddit_detail_activity, mFragment).commit();
|
||||||
}
|
}
|
||||||
@@ -592,7 +590,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
|
|
||||||
private void showSortTypeBottomSheetFragment() {
|
private void showSortTypeBottomSheetFragment() {
|
||||||
if (mFragment instanceof PostFragment) {
|
if (mFragment instanceof PostFragment) {
|
||||||
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(true, ((PostFragment) mFragment).getSortType());
|
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(SortTypeBottomSheetFragment.PAGE_TYPE_MULTICOMMUNITY, ((PostFragment) mFragment).getSortType());
|
||||||
sortTypeBottomSheetFragment.show(getSupportFragmentManager(), sortTypeBottomSheetFragment.getTag());
|
sortTypeBottomSheetFragment.show(getSupportFragmentManager(), sortTypeBottomSheetFragment.getTag());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -678,7 +676,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
-> {
|
-> {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, thingEditText.getText().toString());
|
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, thingEditText.getText().toString());
|
||||||
startActivity(subredditIntent);
|
startActivity(subredditIntent);
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||||
@@ -699,7 +697,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, thingEditText.getText().toString());
|
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, thingEditText.getText().toString());
|
||||||
startActivity(userIntent);
|
startActivity(userIntent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -764,6 +762,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
Intent editIntent = new Intent(this, EditMultiRedditActivity.class);
|
Intent editIntent = new Intent(this, EditMultiRedditActivity.class);
|
||||||
editIntent.putExtra(EditMultiRedditActivity.EXTRA_MULTI_PATH, multiPath);
|
editIntent.putExtra(EditMultiRedditActivity.EXTRA_MULTI_PATH, multiPath);
|
||||||
startActivity(editIntent);
|
startActivity(editIntent);
|
||||||
|
finish();
|
||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.id.action_delete_view_multi_reddit_detail_activity) {
|
} else if (itemId == R.id.action_delete_view_multi_reddit_detail_activity) {
|
||||||
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||||
@@ -771,30 +770,13 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
.setMessage(R.string.delete_multi_reddit_dialog_message)
|
.setMessage(R.string.delete_multi_reddit_dialog_message)
|
||||||
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
||||||
-> {
|
-> {
|
||||||
if (mAccessToken == null) {
|
|
||||||
DeleteMultiredditInDatabase.deleteMultiredditInDatabase(mExecutor, new Handler(), mRedditDataRoomDatabase, mAccountName, multiPath,
|
DeleteMultiredditInDatabase.deleteMultiredditInDatabase(mExecutor, new Handler(), mRedditDataRoomDatabase, mAccountName, multiPath,
|
||||||
() -> {
|
() -> {
|
||||||
Toast.makeText(this, R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
||||||
finish();
|
finish();
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
DeleteMultiReddit.deleteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
|
|
||||||
mAccessToken, mAccountName, multiPath, new DeleteMultiReddit.DeleteMultiRedditListener() {
|
|
||||||
@Override
|
|
||||||
public void success() {
|
|
||||||
Toast.makeText(ViewMultiRedditDetailActivity.this,
|
|
||||||
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
|
||||||
EventBus.getDefault().post(new RefreshMultiRedditsEvent());
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Toast.makeText(ViewMultiRedditDetailActivity.this,
|
|
||||||
R.string.delete_multi_reddit_failed, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
.show();
|
.show();
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ import eu.toldi.infinityforlemmy.SaveComment;
|
|||||||
import eu.toldi.infinityforlemmy.SaveThing;
|
import eu.toldi.infinityforlemmy.SaveThing;
|
||||||
import eu.toldi.infinityforlemmy.SortType;
|
import eu.toldi.infinityforlemmy.SortType;
|
||||||
import eu.toldi.infinityforlemmy.SortTypeSelectionCallback;
|
import eu.toldi.infinityforlemmy.SortTypeSelectionCallback;
|
||||||
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
||||||
import eu.toldi.infinityforlemmy.comment.Comment;
|
import eu.toldi.infinityforlemmy.comment.Comment;
|
||||||
@@ -81,10 +82,12 @@ import eu.toldi.infinityforlemmy.post.HistoryPostPagingSource;
|
|||||||
import eu.toldi.infinityforlemmy.post.ParsePost;
|
import eu.toldi.infinityforlemmy.post.ParsePost;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||||
|
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||||
import eu.toldi.infinityforlemmy.readpost.ReadPost;
|
import eu.toldi.infinityforlemmy.readpost.ReadPost;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
@@ -95,6 +98,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
public static final String EXTRA_POST_ID = "EPI";
|
public static final String EXTRA_POST_ID = "EPI";
|
||||||
public static final String EXTRA_POST_LIST_POSITION = "EPLP";
|
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_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_CONTEXT_NUMBER = "ECN";
|
||||||
public static final String EXTRA_MESSAGE_FULLNAME = "ENI";
|
public static final String EXTRA_MESSAGE_FULLNAME = "ENI";
|
||||||
public static final String EXTRA_NEW_ACCOUNT_NAME = "ENAN";
|
public static final String EXTRA_NEW_ACCOUNT_NAME = "ENAN";
|
||||||
@@ -146,6 +150,11 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
|
@Inject
|
||||||
|
@Named("glide")
|
||||||
|
OkHttpClient okHttpClient;
|
||||||
|
@Inject
|
||||||
|
PostEnricher postEnricher;
|
||||||
@State
|
@State
|
||||||
ArrayList<Post> posts;
|
ArrayList<Post> posts;
|
||||||
@State
|
@State
|
||||||
@@ -180,6 +189,8 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
private SectionsPagerAdapter sectionsPagerAdapter;
|
private SectionsPagerAdapter sectionsPagerAdapter;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
|
|
||||||
|
private String mAccountQalifiedName;
|
||||||
private long postFragmentId;
|
private long postFragmentId;
|
||||||
private int postListPosition;
|
private int postListPosition;
|
||||||
private int orientation;
|
private int orientation;
|
||||||
@@ -192,7 +203,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
BigImageViewer.initialize(GlideImageLoader.with(this.getApplicationContext()));
|
BigImageViewer.initialize(GlideImageLoader.with(this.getApplicationContext(), okHttpClient));
|
||||||
|
|
||||||
setContentView(R.layout.activity_view_post_detail);
|
setContentView(R.layout.activity_view_post_detail);
|
||||||
|
|
||||||
@@ -268,6 +279,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, 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);
|
mVolumeKeysNavigateComments = mSharedPreferences.getBoolean(SharedPreferencesUtils.VOLUME_KEYS_NAVIGATE_COMMENTS, false);
|
||||||
|
|
||||||
@@ -352,7 +364,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
|
|
||||||
private void checkNewAccountAndBindView(Bundle savedInstanceState) {
|
private void checkNewAccountAndBindView(Bundle savedInstanceState) {
|
||||||
if (mNewAccountName != null) {
|
if (mNewAccountName != null) {
|
||||||
if (mAccountName == null || !mAccountName.equals(mNewAccountName)) {
|
if (mAccountName == null || !mAccountQalifiedName.equals(mNewAccountName)) {
|
||||||
SwitchAccount.switchAccount(mRedditDataRoomDatabase, mRetrofit, mCurrentAccountSharedPreferences,
|
SwitchAccount.switchAccount(mRedditDataRoomDatabase, mRetrofit, mCurrentAccountSharedPreferences,
|
||||||
mExecutor, new Handler(), mNewAccountName, newAccount -> {
|
mExecutor, new Handler(), mNewAccountName, newAccount -> {
|
||||||
EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName()));
|
EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName()));
|
||||||
@@ -522,69 +534,38 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
Handler handler = new Handler(Looper.getMainLooper());
|
Handler handler = new Handler(Looper.getMainLooper());
|
||||||
|
|
||||||
if (postType != HistoryPostPagingSource.TYPE_READ_POSTS) {
|
if (postType != HistoryPostPagingSource.TYPE_READ_POSTS) {
|
||||||
|
int nextPage = posts.size() / 25 + 1;
|
||||||
|
|
||||||
mExecutor.execute(() -> {
|
mExecutor.execute(() -> {
|
||||||
RedditAPI api = (mAccessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit).create(RedditAPI.class);
|
LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
|
||||||
Call<String> call;
|
Call<String> call;
|
||||||
String afterKey = posts.isEmpty() ? null : posts.get(posts.size() - 1).getFullName();
|
|
||||||
switch (postType) {
|
switch (postType) {
|
||||||
case PostPagingSource.TYPE_SUBREDDIT:
|
case PostPagingSource.TYPE_SUBREDDIT:
|
||||||
if (mAccessToken == null) {
|
call = api.getPosts(null, sortType.value, nextPage, 25, null, post.getSubredditNamePrefixed(), false, mAccessToken);
|
||||||
call = api.getSubredditBestPosts(subredditName, sortType, sortTime, afterKey);
|
|
||||||
} else {
|
|
||||||
call = api.getSubredditBestPostsOauth(subredditName, sortType,
|
|
||||||
sortTime, afterKey, APIUtils.getOAuthHeader(mAccessToken));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_USER:
|
case PostPagingSource.TYPE_USER:
|
||||||
if (mAccessToken == null) {
|
call = api.getUserPosts(username, sortType.value, nextPage, 25, false, mAccessToken);
|
||||||
call = api.getUserPosts(username, afterKey, sortType, sortTime);
|
|
||||||
} else {
|
|
||||||
call = api.getUserPostsOauth(username, userWhere, afterKey, sortType,
|
|
||||||
sortTime, APIUtils.getOAuthHeader(mAccessToken));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_SEARCH:
|
case PostPagingSource.TYPE_SEARCH:
|
||||||
if (subredditName == null) {
|
call = api.search(query, null, subredditName, null, "Post", sortType.value, "All", nextPage, 25, mAccessToken);
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_MULTI_REDDIT:
|
case PostPagingSource.TYPE_MULTI_REDDIT:
|
||||||
if (mAccessToken == null) {
|
// TODO: Implement multi community
|
||||||
call = api.getMultiRedditPosts(multiPath, afterKey, sortTime);
|
|
||||||
} else {
|
|
||||||
call = api.getMultiRedditPostsOauth(multiPath, afterKey,
|
|
||||||
sortTime, APIUtils.getOAuthHeader(mAccessToken));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
||||||
//case PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT
|
// TODO: Implement anonymous front page
|
||||||
call = api.getSubredditBestPosts(subredditName, sortType, sortTime, afterKey);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
call = api.getBestPosts(sortType, sortTime, afterKey,
|
String type = (subredditName == null) ? "Subscribed" : (subredditName.equals("all")) ? "All" : "Local";
|
||||||
APIUtils.getOAuthHeader(mAccessToken));
|
call = api.getPosts(type, sortType.value, nextPage, 25, null, null, false, mAccessToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Response<String> response = call.execute();
|
Response<String> response = call.execute();
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
String responseString = response.body();
|
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) {
|
if (newPosts == null) {
|
||||||
handler.post(() -> {
|
handler.post(() -> {
|
||||||
loadingMorePostsStatus = LoadingMorePostsStatus.NO_MORE_POSTS;
|
loadingMorePostsStatus = LoadingMorePostsStatus.NO_MORE_POSTS;
|
||||||
@@ -666,7 +647,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
Response<String> response = historyPosts.execute();
|
Response<String> response = historyPosts.execute();
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
String responseString = response.body();
|
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()) {
|
if (newPosts == null || newPosts.isEmpty()) {
|
||||||
handler.post(() -> {
|
handler.post(() -> {
|
||||||
loadingMorePostsStatus = LoadingMorePostsStatus.NO_MORE_POSTS;
|
loadingMorePostsStatus = LoadingMorePostsStatus.NO_MORE_POSTS;
|
||||||
@@ -870,6 +851,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
bundle.putParcelable(ViewPostDetailFragment.EXTRA_POST_DATA, post);
|
bundle.putParcelable(ViewPostDetailFragment.EXTRA_POST_DATA, post);
|
||||||
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_LIST_POSITION, position);
|
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_LIST_POSITION, position);
|
||||||
bundle.putInt(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_ID, getIntent().getIntExtra(EXTRA_SINGLE_COMMENT_ID, 0));
|
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_CONTEXT_NUMBER, getIntent().getStringExtra(EXTRA_CONTEXT_NUMBER));
|
||||||
bundle.putString(ViewPostDetailFragment.EXTRA_MESSAGE_FULLNAME, getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME));
|
bundle.putString(ViewPostDetailFragment.EXTRA_MESSAGE_FULLNAME, getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME));
|
||||||
} else {
|
} else {
|
||||||
@@ -891,6 +873,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_LIST_POSITION, postListPosition);
|
bundle.putInt(ViewPostDetailFragment.EXTRA_POST_LIST_POSITION, postListPosition);
|
||||||
}
|
}
|
||||||
bundle.putInt(ViewPostDetailFragment.EXTRA_SINGLE_COMMENT_ID, getIntent().getIntExtra(EXTRA_SINGLE_COMMENT_ID, 0));
|
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_CONTEXT_NUMBER, getIntent().getStringExtra(EXTRA_CONTEXT_NUMBER));
|
||||||
bundle.putString(ViewPostDetailFragment.EXTRA_MESSAGE_FULLNAME, getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME));
|
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.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
@@ -27,6 +28,7 @@ import org.greenrobot.eventbus.EventBus;
|
|||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
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.PassPrivateMessageEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.PassPrivateMessageIndexEvent;
|
import eu.toldi.infinityforlemmy.events.PassPrivateMessageIndexEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.RepliedToPrivateMessageEvent;
|
import eu.toldi.infinityforlemmy.events.RepliedToPrivateMessageEvent;
|
||||||
import eu.toldi.infinityforlemmy.message.Message;
|
|
||||||
import eu.toldi.infinityforlemmy.message.ReadMessage;
|
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 eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class ViewPrivateMessagesActivity extends BaseActivity implements ActivityToolbarInterface {
|
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_PRIVATE_MESSAGE_INDEX = "EPM";
|
||||||
public static final String EXTRA_MESSAGE_POSITION = "EMP";
|
public static final String EXTRA_MESSAGE_POSITION = "EMP";
|
||||||
private static final String USER_AVATAR_STATE = "UAS";
|
private static final String USER_AVATAR_STATE = "UAS";
|
||||||
@@ -91,14 +94,19 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
|||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
@Inject
|
@Inject
|
||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
LemmyPrivateMessageAPI mLemmyPrivateMessageAPI;
|
||||||
private LinearLayoutManagerBugFixed mLinearLayoutManager;
|
private LinearLayoutManagerBugFixed mLinearLayoutManager;
|
||||||
private PrivateMessagesDetailRecyclerViewAdapter mAdapter;
|
private PrivateMessagesDetailRecyclerViewAdapter mAdapter;
|
||||||
@State
|
@State
|
||||||
Message privateMessage;
|
PrivateMessage privateMessage;
|
||||||
@State
|
@State
|
||||||
Message replyTo;
|
PrivateMessage replyTo;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
|
|
||||||
|
private String mAccountQualifiedName;
|
||||||
private String mUserAvatar;
|
private String mUserAvatar;
|
||||||
private ArrayList<ProvideUserAvatarCallback> mProvideUserAvatarCallbacks;
|
private ArrayList<ProvideUserAvatarCallback> mProvideUserAvatarCallbacks;
|
||||||
private boolean isLoadingUserAvatar = false;
|
private boolean isLoadingUserAvatar = false;
|
||||||
@@ -128,6 +136,11 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
|||||||
addOnOffsetChangedListener(mAppBarLayout);
|
addOnOffsetChangedListener(mAppBarLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Intent intent = getIntent();
|
||||||
|
privateMessage = intent.getParcelableExtra(EXTRA_PRIVATE_MESSAGE);
|
||||||
|
|
||||||
|
Log.i("ViewPrivate", "privateMessage: " + privateMessage);
|
||||||
|
|
||||||
setSupportActionBar(mToolbar);
|
setSupportActionBar(mToolbar);
|
||||||
setToolbarGoToTop(mToolbar);
|
setToolbarGoToTop(mToolbar);
|
||||||
|
|
||||||
@@ -135,6 +148,7 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
|||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
mUserAvatar = savedInstanceState.getString(USER_AVATAR_STATE);
|
mUserAvatar = savedInstanceState.getString(USER_AVATAR_STATE);
|
||||||
@@ -144,36 +158,37 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
|||||||
bindView();
|
bindView();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (privateMessage != null) {
|
||||||
|
bindView();
|
||||||
|
}
|
||||||
EventBus.getDefault().post(new PassPrivateMessageIndexEvent(getIntent().getIntExtra(EXTRA_PRIVATE_MESSAGE_INDEX, -1)));
|
EventBus.getDefault().post(new PassPrivateMessageIndexEvent(getIntent().getIntExtra(EXTRA_PRIVATE_MESSAGE_INDEX, -1)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindView() {
|
private void bindView() {
|
||||||
if (privateMessage != null) {
|
if (privateMessage != null) {
|
||||||
if (privateMessage.getAuthor().equals(mAccountName)) {
|
if (privateMessage.getCreatorQualifiedName().equals(mAccountQualifiedName)) {
|
||||||
setTitle(privateMessage.getDestination());
|
setTitle(privateMessage.getRecipientName());
|
||||||
mToolbar.setOnClickListener(view -> {
|
mToolbar.setOnClickListener(view -> {
|
||||||
if (privateMessage.isDestinationDeleted()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
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);
|
startActivity(intent);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setTitle(privateMessage.getAuthor());
|
setTitle(privateMessage.getCreatorName());
|
||||||
mToolbar.setOnClickListener(view -> {
|
mToolbar.setOnClickListener(view -> {
|
||||||
if (privateMessage.isAuthorDeleted()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
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);
|
startActivity(intent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mAdapter = new PrivateMessagesDetailRecyclerViewAdapter(this, mSharedPreferences,
|
mAdapter = new PrivateMessagesDetailRecyclerViewAdapter(this, mSharedPreferences,
|
||||||
getResources().getConfiguration().locale, privateMessage, mAccountName, mCustomThemeWrapper);
|
getResources().getConfiguration().locale, privateMessage, mAccountQualifiedName, mCustomThemeWrapper);
|
||||||
mLinearLayoutManager = new LinearLayoutManagerBugFixed(this);
|
mLinearLayoutManager = new LinearLayoutManagerBugFixed(this);
|
||||||
mLinearLayoutManager.setStackFromEnd(true);
|
mLinearLayoutManager.setStackFromEnd(true);
|
||||||
mRecyclerView.setLayoutManager(mLinearLayoutManager);
|
mRecyclerView.setLayoutManager(mLinearLayoutManager);
|
||||||
@@ -184,45 +199,40 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
|
|||||||
if (!mEditText.getText().toString().equals("")) {
|
if (!mEditText.getText().toString().equals("")) {
|
||||||
//Send Message
|
//Send Message
|
||||||
if (privateMessage != null) {
|
if (privateMessage != null) {
|
||||||
ArrayList<Message> replies = privateMessage.getReplies();
|
List<PrivateMessage> replies = privateMessage.getReplies();
|
||||||
if (replyTo == null) {
|
if (replyTo == null) {
|
||||||
replyTo = privateMessage;
|
replyTo = privateMessage;
|
||||||
}
|
}
|
||||||
isSendingMessage = true;
|
isSendingMessage = true;
|
||||||
mSendImageView.setColorFilter(mSecondaryTextColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
mSendImageView.setColorFilter(mSecondaryTextColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||||
ReplyMessage.replyMessage(mEditText.getText().toString(), replyTo.getFullname(),
|
|
||||||
getResources().getConfiguration().locale, mOauthRetrofit, mAccessToken,
|
mLemmyPrivateMessageAPI.sendPrivateMessage(mAccessToken, replyTo.getCreatorId(), mEditText.getText().toString(), new LemmyPrivateMessageAPI.PrivateMessageSentListener() {
|
||||||
new ReplyMessage.ReplyMessageListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void replyMessageSuccess(Message message) {
|
public void onPrivateMessageSentSuccess(@NonNull PrivateMessage privateMessage) {
|
||||||
if (mAdapter != null) {
|
if (mAdapter != null) {
|
||||||
mAdapter.addReply(message);
|
mAdapter.addReply(privateMessage);
|
||||||
}
|
}
|
||||||
goToBottom();
|
goToBottom();
|
||||||
mEditText.setText("");
|
mEditText.setText("");
|
||||||
mSendImageView.setColorFilter(mSendMessageIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
|
||||||
isSendingMessage = false;
|
isSendingMessage = false;
|
||||||
EventBus.getDefault().post(new RepliedToPrivateMessageEvent(message, getIntent().getIntExtra(EXTRA_MESSAGE_POSITION, -1)));
|
EventBus.getDefault().post(new RepliedToPrivateMessageEvent(privateMessage, getIntent().getIntExtra(EXTRA_MESSAGE_POSITION, -1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void replyMessageFailed(String errorMessage) {
|
public void onPrivateMessageSentError() {
|
||||||
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();
|
Snackbar.make(mCoordinatorLayout, R.string.reply_message_failed, Snackbar.LENGTH_LONG).show();
|
||||||
}
|
|
||||||
mSendImageView.setColorFilter(mSendMessageIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
mSendImageView.setColorFilter(mSendMessageIconColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||||
isSendingMessage = false;
|
isSendingMessage = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
StringBuilder fullnames = new StringBuilder();
|
StringBuilder fullnames = new StringBuilder();
|
||||||
if (privateMessage.isNew()) {
|
|
||||||
fullnames.append(privateMessage.getFullname()).append(",");
|
|
||||||
}
|
|
||||||
if (replies != null && !replies.isEmpty()) {
|
if (replies != null && !replies.isEmpty()) {
|
||||||
for (Message m : replies) {
|
for (PrivateMessage m : replies) {
|
||||||
if (m.isNew()) {
|
if (!m.getRead()) {
|
||||||
fullnames.append(m).append(",");
|
fullnames.append(m).append(",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,20 @@
|
|||||||
package eu.toldi.infinityforlemmy.activities;
|
package eu.toldi.infinityforlemmy.activities;
|
||||||
|
|
||||||
|
import static android.graphics.BitmapFactory.decodeResource;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@@ -18,12 +24,14 @@ import android.view.ViewTreeObserver;
|
|||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
@@ -36,6 +44,9 @@ import androidx.viewpager2.widget.ViewPager2;
|
|||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.RequestManager;
|
import com.bumptech.glide.RequestManager;
|
||||||
import com.bumptech.glide.request.RequestOptions;
|
import com.bumptech.glide.request.RequestOptions;
|
||||||
|
import com.bumptech.glide.request.target.CustomTarget;
|
||||||
|
import com.bumptech.glide.request.transition.Transition;
|
||||||
|
import com.evernote.android.state.State;
|
||||||
import com.google.android.material.appbar.AppBarLayout;
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
import com.google.android.material.appbar.MaterialToolbar;
|
import com.google.android.material.appbar.MaterialToolbar;
|
||||||
@@ -82,6 +93,8 @@ import eu.toldi.infinityforlemmy.bottomsheetfragments.RandomBottomSheetFragment;
|
|||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.SortTimeBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.SortTimeBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.SortTypeBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.SortTypeBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment;
|
||||||
|
import eu.toldi.infinityforlemmy.community.BlockCommunity;
|
||||||
|
import eu.toldi.infinityforlemmy.community.CommunityStats;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.NavigationWrapper;
|
import eu.toldi.infinityforlemmy.customviews.NavigationWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
@@ -97,6 +110,7 @@ import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
|||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||||
|
import eu.toldi.infinityforlemmy.shortcut.ShortcutManager;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.CommunitySubscription;
|
import eu.toldi.infinityforlemmy.subreddit.CommunitySubscription;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.FetchSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
||||||
@@ -162,12 +176,26 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
TextView communityFullNameTextView;
|
TextView communityFullNameTextView;
|
||||||
@BindView(R.id.subscriber_count_text_view_view_subreddit_detail_activity)
|
@BindView(R.id.subscriber_count_text_view_view_subreddit_detail_activity)
|
||||||
TextView nSubscribersTextView;
|
TextView nSubscribersTextView;
|
||||||
@BindView(R.id.online_subscriber_count_text_view_view_subreddit_detail_activity)
|
@BindView(R.id.active_user_count_text_view_view_subreddit_detail_activity)
|
||||||
TextView nOnlineSubscribersTextView;
|
TextView nActiveUsersTextView;
|
||||||
@BindView(R.id.since_text_view_view_subreddit_detail_activity)
|
@BindView(R.id.post_count_text_view_view_subreddit_detail_activity)
|
||||||
TextView sinceTextView;
|
TextView nPostsTextView;
|
||||||
@BindView(R.id.creation_time_text_view_view_subreddit_detail_activity)
|
@BindView(R.id.comment_count_text_view_view_subreddit_detail_activity)
|
||||||
TextView creationTimeTextView;
|
TextView nCommentsTextView;
|
||||||
|
|
||||||
|
@BindView(R.id.subscriber_count_image_view_view_subreddit_detail_activity)
|
||||||
|
ImageView nSubscribersImageView;
|
||||||
|
@BindView(R.id.active_user_count_image_view_view_subreddit_detail_activity)
|
||||||
|
ImageView nActiveUsersImageView;
|
||||||
|
@BindView(R.id.post_count_image_view_view_subreddit_detail_activity)
|
||||||
|
ImageView nPostsImageView;
|
||||||
|
@BindView(R.id.comment_count_image_view_view_subreddit_detail_activity)
|
||||||
|
ImageView nCommentsImageView;
|
||||||
|
|
||||||
|
@BindView(R.id.community_statistics_block_view_subreddit_detail_activity)
|
||||||
|
ConstraintLayout communityStatisticsBlock;
|
||||||
|
|
||||||
|
|
||||||
@BindView(R.id.description_text_view_view_subreddit_detail_activity)
|
@BindView(R.id.description_text_view_view_subreddit_detail_activity)
|
||||||
TextView descriptionTextView;
|
TextView descriptionTextView;
|
||||||
@Inject
|
@Inject
|
||||||
@@ -210,6 +238,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
private String communityName;
|
private String communityName;
|
||||||
|
|
||||||
private int communityId;
|
private int communityId;
|
||||||
|
|
||||||
|
@State
|
||||||
|
SubredditData communityData;
|
||||||
|
@State
|
||||||
|
CommunityStats mCommunityStats;
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
private String qualifiedName;
|
private String qualifiedName;
|
||||||
@@ -234,8 +267,14 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
private int subscribedColor;
|
private int subscribedColor;
|
||||||
private int fabOption;
|
private int fabOption;
|
||||||
private MaterialAlertDialogBuilder nsfwWarningBuilder;
|
private MaterialAlertDialogBuilder nsfwWarningBuilder;
|
||||||
|
private Bitmap subredditIconBitmap;
|
||||||
|
|
||||||
|
private boolean showStatistics;
|
||||||
|
|
||||||
|
private boolean disableImagePreview;
|
||||||
|
|
||||||
private boolean hideSubredditDescription;
|
private boolean hideSubredditDescription;
|
||||||
|
private boolean isKbinMagazine = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -248,6 +287,8 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
hideFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_FAB_IN_POST_FEED, false);
|
hideFab = mSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_FAB_IN_POST_FEED, false);
|
||||||
|
showStatistics = mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_STATISTICS, true);
|
||||||
|
disableImagePreview = mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false);
|
||||||
showBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.BOTTOM_APP_BAR_KEY, 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),
|
navigationWrapper = new NavigationWrapper(findViewById(R.id.bottom_app_bar_bottom_app_bar), findViewById(R.id.linear_layout_bottom_app_bar),
|
||||||
findViewById(R.id.option_1_bottom_app_bar), findViewById(R.id.option_2_bottom_app_bar),
|
findViewById(R.id.option_1_bottom_app_bar), findViewById(R.id.option_2_bottom_app_bar),
|
||||||
@@ -351,6 +392,14 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
|
|
||||||
|
if (mAccessToken != null) {
|
||||||
|
mRetrofit.setAccessToken(mAccessToken);
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
mMessageFullname = getIntent().getIntExtra(EXTRA_MESSAGE_FULLNAME, 0);
|
mMessageFullname = getIntent().getIntExtra(EXTRA_MESSAGE_FULLNAME, 0);
|
||||||
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
||||||
@@ -360,19 +409,33 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
mMessageFullname = savedInstanceState.getInt(MESSAGE_FULLNAME_STATE);
|
mMessageFullname = savedInstanceState.getInt(MESSAGE_FULLNAME_STATE);
|
||||||
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
||||||
|
|
||||||
if (mFetchSubredditInfoSuccess) {
|
|
||||||
nOnlineSubscribersTextView.setText(getString(R.string.online_subscribers_number_detail, mNCurrentOnlineSubscribers));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
checkNewAccountAndBindView();
|
checkNewAccountAndBindView();
|
||||||
|
|
||||||
fetchSubredditData();
|
fetchSubredditData();
|
||||||
if (communityName != null) {
|
if (communityData != null) {
|
||||||
setupVisibleElements();
|
setupVisibleElements();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
Log.e("ViewSubredditDetail", "onStart");
|
||||||
|
if (communityData != null) {
|
||||||
|
setupVisibleElements();
|
||||||
|
} else {
|
||||||
|
fetchSubredditData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
mFetchSubredditInfoSuccess = false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||||
if (sectionsPagerAdapter != null) {
|
if (sectionsPagerAdapter != null) {
|
||||||
@@ -414,9 +477,13 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
subscribeSubredditChip.setTextColor(mCustomThemeWrapper.getChipTextColor());
|
subscribeSubredditChip.setTextColor(mCustomThemeWrapper.getChipTextColor());
|
||||||
int primaryTextColor = mCustomThemeWrapper.getPrimaryTextColor();
|
int primaryTextColor = mCustomThemeWrapper.getPrimaryTextColor();
|
||||||
nSubscribersTextView.setTextColor(primaryTextColor);
|
nSubscribersTextView.setTextColor(primaryTextColor);
|
||||||
nOnlineSubscribersTextView.setTextColor(primaryTextColor);
|
nActiveUsersTextView.setTextColor(primaryTextColor);
|
||||||
sinceTextView.setTextColor(primaryTextColor);
|
nPostsTextView.setTextColor(primaryTextColor);
|
||||||
creationTimeTextView.setTextColor(primaryTextColor);
|
nCommentsTextView.setTextColor(primaryTextColor);
|
||||||
|
nSubscribersImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||||
|
nActiveUsersImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||||
|
nPostsImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||||
|
nCommentsImageView.setColorFilter(mCustomThemeWrapper.getPrimaryTextColor(), PorterDuff.Mode.SRC_IN);
|
||||||
descriptionTextView.setTextColor(primaryTextColor);
|
descriptionTextView.setTextColor(primaryTextColor);
|
||||||
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
||||||
applyTabLayoutTheme(tabLayout);
|
applyTabLayoutTheme(tabLayout);
|
||||||
@@ -425,9 +492,9 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
subredditNameTextView.setTypeface(typeface);
|
subredditNameTextView.setTypeface(typeface);
|
||||||
subscribeSubredditChip.setTypeface(typeface);
|
subscribeSubredditChip.setTypeface(typeface);
|
||||||
nSubscribersTextView.setTypeface(typeface);
|
nSubscribersTextView.setTypeface(typeface);
|
||||||
nOnlineSubscribersTextView.setTypeface(typeface);
|
nActiveUsersTextView.setTypeface(typeface);
|
||||||
sinceTextView.setTypeface(typeface);
|
nPostsTextView.setTypeface(typeface);
|
||||||
creationTimeTextView.setTypeface(typeface);
|
nCommentsTextView.setTypeface(typeface);
|
||||||
descriptionTextView.setTypeface(typeface);
|
descriptionTextView.setTypeface(typeface);
|
||||||
}
|
}
|
||||||
unsubscribedColor = mCustomThemeWrapper.getUnsubscribed();
|
unsubscribedColor = mCustomThemeWrapper.getUnsubscribed();
|
||||||
@@ -466,7 +533,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
setToolbarGoToTop(toolbar);
|
setToolbarGoToTop(toolbar);
|
||||||
|
|
||||||
glide = Glide.with(this);
|
glide = Glide.with(getApplication());
|
||||||
Locale locale = getResources().getConfiguration().locale;
|
Locale locale = getResources().getConfiguration().locale;
|
||||||
|
|
||||||
MarkwonPlugin miscPlugin = new AbstractMarkwonPlugin() {
|
MarkwonPlugin miscPlugin = new AbstractMarkwonPlugin() {
|
||||||
@@ -491,7 +558,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
Markwon markwon = MarkdownUtils.createDescriptionMarkwon(this, miscPlugin, onLinkLongClickListener);
|
Markwon markwon = MarkdownUtils.createDescriptionMarkwon(this, miscPlugin, onLinkLongClickListener, mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false));
|
||||||
|
|
||||||
descriptionTextView.setOnLongClickListener(view -> {
|
descriptionTextView.setOnLongClickListener(view -> {
|
||||||
if (description != null && !description.equals("") && descriptionTextView.getSelectionStart() == -1 && descriptionTextView.getSelectionEnd() == -1) {
|
if (description != null && !description.equals("") && descriptionTextView.getSelectionStart() == -1 && descriptionTextView.getSelectionEnd() == -1) {
|
||||||
@@ -499,10 +566,14 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
String actorID = (!isKbinMagazine) ? LemmyUtils.qualifiedCommunityName2ActorId(qualifiedName) : LemmyUtils.qualifiedMagazineName2ActorId(qualifiedName);
|
||||||
mSubredditViewModel = new ViewModelProvider(this,
|
mSubredditViewModel = new ViewModelProvider(this,
|
||||||
new SubredditViewModel.Factory(getApplication(), mRedditDataRoomDatabase, LemmyUtils.qualifiedCommunityName2ActorId(qualifiedName)))
|
new SubredditViewModel.Factory(getApplication(), mRedditDataRoomDatabase, actorID))
|
||||||
.get(SubredditViewModel.class);
|
.get(SubredditViewModel.class);
|
||||||
|
addObserverToLiveData();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addObserverToLiveData() {
|
||||||
mSubredditViewModel.getSubredditLiveData().observe(this, subredditData -> {
|
mSubredditViewModel.getSubredditLiveData().observe(this, subredditData -> {
|
||||||
if (subredditData != null) {
|
if (subredditData != null) {
|
||||||
isNsfwSubreddit = subredditData.isNSFW();
|
isNsfwSubreddit = subredditData.isNSFW();
|
||||||
@@ -528,11 +599,23 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
.into(iconGifImageView);
|
.into(iconGifImageView);
|
||||||
iconGifImageView.setOnClickListener(null);
|
iconGifImageView.setOnClickListener(null);
|
||||||
} else {
|
} else {
|
||||||
glide.load(subredditData.getIconUrl())
|
glide.asBitmap()
|
||||||
|
.load(subredditData.getIconUrl())
|
||||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(216, 0)))
|
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(216, 0)))
|
||||||
.error(glide.load(R.drawable.subreddit_default_icon)
|
.error(glide.load(R.drawable.subreddit_default_icon)
|
||||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(216, 0))))
|
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(216, 0))))
|
||||||
.into(iconGifImageView);
|
.into(new CustomTarget<Bitmap>() {
|
||||||
|
@Override
|
||||||
|
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
||||||
|
subredditIconBitmap = resource;
|
||||||
|
iconGifImageView.setImageBitmap(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||||
|
subredditIconBitmap = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
iconGifImageView.setOnClickListener(view -> {
|
iconGifImageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(ViewSubredditDetailActivity.this, ViewImageOrGifActivity.class);
|
Intent intent = new Intent(ViewSubredditDetailActivity.this, ViewImageOrGifActivity.class);
|
||||||
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, subredditData.getIconUrl());
|
intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, subredditData.getIconUrl());
|
||||||
@@ -551,7 +634,13 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
communityFullNameTextView.setText(qualifiedName);
|
communityFullNameTextView.setText(qualifiedName);
|
||||||
String nSubscribers = getString(R.string.subscribers_number_detail, subredditData.getNSubscribers());
|
String nSubscribers = getString(R.string.subscribers_number_detail, subredditData.getNSubscribers());
|
||||||
nSubscribersTextView.setText(nSubscribers);
|
nSubscribersTextView.setText(nSubscribers);
|
||||||
creationTimeTextView.setText(subredditData.getCreatedUTC());
|
|
||||||
|
if (mCommunityStats != null && showStatistics) {
|
||||||
|
communityStatisticsBlock.setVisibility(View.VISIBLE);
|
||||||
|
nActiveUsersTextView.setText(getString(R.string.active_users_number_detail, mCommunityStats.getActiveUsers()));
|
||||||
|
nPostsTextView.setText(getString(R.string.post_count_detail, mCommunityStats.getPosts()));
|
||||||
|
nCommentsTextView.setText(getString(R.string.comment_count_detail, mCommunityStats.getComments()));
|
||||||
|
}
|
||||||
description = subredditData.getDescription();
|
description = subredditData.getDescription();
|
||||||
|
|
||||||
|
|
||||||
@@ -690,14 +779,23 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
qualifiedName = LemmyUtils.actorID2FullName(communityData.getActorId());
|
qualifiedName = LemmyUtils.actorID2FullName(communityData.getActorId());
|
||||||
if (communityName == null) {
|
if (communityName == null) {
|
||||||
communityName = communityData.getTitle();
|
communityName = communityData.getTitle();
|
||||||
|
|
||||||
setupVisibleElements();
|
|
||||||
}
|
}
|
||||||
|
mCommunityStats = communityData.getCommunityStats();
|
||||||
|
if (communityData.getActorId().contains("/m/")) {
|
||||||
|
isKbinMagazine = true;
|
||||||
|
if (mSubredditViewModel != null) {
|
||||||
|
// Remove current observer
|
||||||
|
mSubredditViewModel.getSubredditLiveData().removeObservers(ViewSubredditDetailActivity.this);
|
||||||
|
addObserverToLiveData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setupVisibleElements();
|
||||||
communityId = communityData.getId();
|
communityId = communityData.getId();
|
||||||
|
ViewSubredditDetailActivity.this.communityData = communityData;
|
||||||
setupSubscribeChip();
|
setupSubscribeChip();
|
||||||
|
|
||||||
mNCurrentOnlineSubscribers = nCurrentOnlineSubscribers;
|
mNCurrentOnlineSubscribers = nCurrentOnlineSubscribers;
|
||||||
nOnlineSubscribersTextView.setText(getString(R.string.online_subscribers_number_detail, nCurrentOnlineSubscribers));
|
|
||||||
InsertSubredditData.insertSubredditData(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
InsertSubredditData.insertSubredditData(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
||||||
communityData, () -> mFetchSubredditInfoSuccess = true);
|
communityData, () -> mFetchSubredditInfoSuccess = true);
|
||||||
}
|
}
|
||||||
@@ -730,6 +828,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_OPTION_PROFILE: {
|
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_OPTION_PROFILE: {
|
||||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
||||||
|
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, mAccountQualifiedName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1093,7 +1192,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
viewPager2.setAdapter(sectionsPagerAdapter);
|
viewPager2.setAdapter(sectionsPagerAdapter);
|
||||||
viewPager2.setOffscreenPageLimit(2);
|
viewPager2.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT);
|
||||||
viewPager2.setUserInputEnabled(!mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false));
|
viewPager2.setUserInputEnabled(!mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false));
|
||||||
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
||||||
switch (position) {
|
switch (position) {
|
||||||
@@ -1115,7 +1214,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
private void displaySortTypeBottomSheetFragment() {
|
private void displaySortTypeBottomSheetFragment() {
|
||||||
Fragment fragment = fragmentManager.findFragmentByTag("f0");
|
Fragment fragment = fragmentManager.findFragmentByTag("f0");
|
||||||
if (fragment instanceof PostFragment) {
|
if (fragment instanceof PostFragment) {
|
||||||
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(true, ((PostFragment) fragment).getSortType());
|
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(SortTypeBottomSheetFragment.PAGE_TYPE_COMMUNITY, ((PostFragment) fragment).getSortType());
|
||||||
sortTypeBottomSheetFragment.show(fragmentManager, sortTypeBottomSheetFragment.getTag());
|
sortTypeBottomSheetFragment.show(fragmentManager, sortTypeBottomSheetFragment.getTag());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1123,6 +1222,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.view_subreddit_detail_activity, menu);
|
getMenuInflater().inflate(R.menu.view_subreddit_detail_activity, menu);
|
||||||
|
if (communityData != null && communityData.isBlocked()) {
|
||||||
|
menu.findItem(R.id.block_community_view_subreddit_detail_activity).setVisible(false);
|
||||||
|
} else {
|
||||||
|
menu.findItem(R.id.unblock_community_view_subreddit_detail_activity).setVisible(false);
|
||||||
|
}
|
||||||
applyMenuItemTheme(menu);
|
applyMenuItemTheme(menu);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1151,22 +1255,6 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
PostLayoutBottomSheetFragment postLayoutBottomSheetFragment = new PostLayoutBottomSheetFragment();
|
PostLayoutBottomSheetFragment postLayoutBottomSheetFragment = new PostLayoutBottomSheetFragment();
|
||||||
postLayoutBottomSheetFragment.show(getSupportFragmentManager(), postLayoutBottomSheetFragment.getTag());
|
postLayoutBottomSheetFragment.show(getSupportFragmentManager(), postLayoutBottomSheetFragment.getTag());
|
||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.id.action_select_user_flair_view_subreddit_detail_activity) {
|
|
||||||
if (mAccessToken == null) {
|
|
||||||
Toast.makeText(this, R.string.login_first, Toast.LENGTH_SHORT).show();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Intent selectUserFlairIntent = new Intent(this, SelectUserFlairActivity.class);
|
|
||||||
selectUserFlairIntent.putExtra(SelectUserFlairActivity.EXTRA_SUBREDDIT_NAME, communityName);
|
|
||||||
startActivity(selectUserFlairIntent);
|
|
||||||
return true;
|
|
||||||
} else if (itemId == R.id.action_add_to_multireddit_view_subreddit_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_subreddit_detail_activity) {
|
} else if (itemId == R.id.action_add_to_post_filter_view_subreddit_detail_activity) {
|
||||||
Intent intent = new Intent(this, PostFilterPreferenceActivity.class);
|
Intent intent = new Intent(this, PostFilterPreferenceActivity.class);
|
||||||
intent.putExtra(PostFilterPreferenceActivity.EXTRA_SUBREDDIT_NAME, communityName);
|
intent.putExtra(PostFilterPreferenceActivity.EXTRA_SUBREDDIT_NAME, communityName);
|
||||||
@@ -1176,24 +1264,69 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
||||||
shareIntent.setType("text/plain");
|
shareIntent.setType("text/plain");
|
||||||
String baseURL = mRetrofit.getBaseURL().endsWith("/") ? mRetrofit.getBaseURL() : mRetrofit.getBaseURL() + "/";
|
String baseURL = mRetrofit.getBaseURL().endsWith("/") ? mRetrofit.getBaseURL() : mRetrofit.getBaseURL() + "/";
|
||||||
shareIntent.putExtra(Intent.EXTRA_TEXT, baseURL + "/" + qualifiedName);
|
shareIntent.putExtra(Intent.EXTRA_TEXT, baseURL + "c/" + qualifiedName);
|
||||||
if (shareIntent.resolveActivity(getPackageManager()) != null) {
|
if (shareIntent.resolveActivity(getPackageManager()) != null) {
|
||||||
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(this, R.string.no_app, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.no_app, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.id.action_go_to_wiki_view_subreddit_detail_activity) {
|
|
||||||
Intent wikiIntent = new Intent(this, WikiActivity.class);
|
|
||||||
wikiIntent.putExtra(WikiActivity.EXTRA_SUBREDDIT_NAME, communityName);
|
|
||||||
wikiIntent.putExtra(WikiActivity.EXTRA_WIKI_PATH, "index");
|
|
||||||
startActivity(wikiIntent);
|
|
||||||
return true;
|
|
||||||
} else if (itemId == R.id.action_contact_mods_view_subreddit_detail_activity) {
|
} else if (itemId == R.id.action_contact_mods_view_subreddit_detail_activity) {
|
||||||
Intent intent = new Intent(this, SendPrivateMessageActivity.class);
|
/* Intent intent = new Intent(this, SendPrivateMessageActivity.class);
|
||||||
intent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, "r/" + communityName);
|
intent.putExtra(SendPrivateMessageActivity.EXTRA_RECIPIENT_USERNAME, "r/" + communityName);*/
|
||||||
startActivity(intent);
|
//startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
|
} else if (itemId == R.id.block_community_view_subreddit_detail_activity) {
|
||||||
|
if (mAccessToken == null) {
|
||||||
|
Toast.makeText(this, R.string.login_first, Toast.LENGTH_SHORT).show();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||||
|
.setTitle(R.string.block_community)
|
||||||
|
.setMessage(R.string.are_you_sure)
|
||||||
|
.setPositiveButton(R.string.yes, (dialogInterface, i)
|
||||||
|
-> BlockCommunity.INSTANCE.blockCommunity(mRetrofit.getRetrofit(), communityId, mAccessToken, new BlockCommunity.BlockCommunityListener() {
|
||||||
|
@Override
|
||||||
|
public void onBlockCommunitySuccess() {
|
||||||
|
communityData.setBlocked(true);
|
||||||
|
Toast.makeText(ViewSubredditDetailActivity.this, R.string.block_community_success, Toast.LENGTH_SHORT).show();
|
||||||
|
ViewSubredditDetailActivity.this.invalidateOptionsMenu();
|
||||||
|
sectionsPagerAdapter.refresh(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBlockCommunityError() {
|
||||||
|
Toast.makeText(ViewSubredditDetailActivity.this, R.string.block_community_failed, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
.setNegativeButton(R.string.no, null)
|
||||||
|
.show();
|
||||||
|
return true;
|
||||||
|
} else if (itemId == R.id.unblock_community_view_subreddit_detail_activity) {
|
||||||
|
BlockCommunity.INSTANCE.unBlockCommunity(mRetrofit.getRetrofit(), communityId, mAccessToken, new BlockCommunity.BlockCommunityListener() {
|
||||||
|
@Override
|
||||||
|
public void onBlockCommunitySuccess() {
|
||||||
|
communityData.setBlocked(false);
|
||||||
|
Toast.makeText(ViewSubredditDetailActivity.this, R.string.unblock_community_success, Toast.LENGTH_SHORT).show();
|
||||||
|
ViewSubredditDetailActivity.this.invalidateOptionsMenu();
|
||||||
|
sectionsPagerAdapter.refresh(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBlockCommunityError() {
|
||||||
|
Toast.makeText(ViewSubredditDetailActivity.this, R.string.unblock_community_failed, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
} else if (itemId == R.id.action_add_to_home_screen_view_subreddit_detail_activity) {
|
||||||
|
Bitmap icon = subredditIconBitmap == null ? decodeResource(getResources(), R.drawable.subreddit_default_icon) : subredditIconBitmap;
|
||||||
|
return ShortcutManager.requestPinShortcut(this, qualifiedName, icon);
|
||||||
|
} else if (itemId == R.id.action_view_instance_view_subreddit_detail_activity) {
|
||||||
|
String instance = communityData.getActorId().split("/")[2];
|
||||||
|
Intent intent = new Intent(this,InstanceInfoActivity.class);
|
||||||
|
intent.putExtra(InstanceInfoActivity.EXTRA_INSTANCE_DOMAIN, instance);
|
||||||
|
intent.putExtra(InstanceInfoActivity.EXTRA_INSTANCE_ID, communityData.getInstanceId());
|
||||||
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1285,27 +1418,27 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
break;
|
break;
|
||||||
case PostTypeBottomSheetFragment.TYPE_LINK:
|
case PostTypeBottomSheetFragment.TYPE_LINK:
|
||||||
intent = new Intent(this, PostLinkActivity.class);
|
intent = new Intent(this, PostLinkActivity.class);
|
||||||
intent.putExtra(PostLinkActivity.EXTRA_SUBREDDIT_NAME, communityName);
|
intent.putExtra(PostLinkActivity.EXTRA_SUBREDDIT_NAME, qualifiedName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
break;
|
break;
|
||||||
case PostTypeBottomSheetFragment.TYPE_IMAGE:
|
case PostTypeBottomSheetFragment.TYPE_IMAGE:
|
||||||
intent = new Intent(this, PostImageActivity.class);
|
intent = new Intent(this, PostImageActivity.class);
|
||||||
intent.putExtra(PostImageActivity.EXTRA_SUBREDDIT_NAME, communityName);
|
intent.putExtra(PostImageActivity.EXTRA_SUBREDDIT_NAME, qualifiedName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
break;
|
break;
|
||||||
case PostTypeBottomSheetFragment.TYPE_VIDEO:
|
case PostTypeBottomSheetFragment.TYPE_VIDEO:
|
||||||
intent = new Intent(this, PostVideoActivity.class);
|
intent = new Intent(this, PostVideoActivity.class);
|
||||||
intent.putExtra(PostVideoActivity.EXTRA_SUBREDDIT_NAME, communityName);
|
intent.putExtra(PostVideoActivity.EXTRA_SUBREDDIT_NAME, qualifiedName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
break;
|
break;
|
||||||
case PostTypeBottomSheetFragment.TYPE_GALLERY:
|
case PostTypeBottomSheetFragment.TYPE_GALLERY:
|
||||||
intent = new Intent(this, PostGalleryActivity.class);
|
intent = new Intent(this, PostGalleryActivity.class);
|
||||||
intent.putExtra(PostGalleryActivity.EXTRA_SUBREDDIT_NAME, communityName);
|
intent.putExtra(PostGalleryActivity.EXTRA_SUBREDDIT_NAME, qualifiedName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
break;
|
break;
|
||||||
case PostTypeBottomSheetFragment.TYPE_POLL:
|
case PostTypeBottomSheetFragment.TYPE_POLL:
|
||||||
intent = new Intent(this, PostPollActivity.class);
|
intent = new Intent(this, PostPollActivity.class);
|
||||||
intent.putExtra(PostPollActivity.EXTRA_SUBREDDIT_NAME, communityName);
|
intent.putExtra(PostPollActivity.EXTRA_SUBREDDIT_NAME, qualifiedName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1438,7 +1571,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
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);
|
startActivity(subredditIntent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1496,7 +1633,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
-> {
|
-> {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
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);
|
startActivity(subredditIntent);
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||||
@@ -1517,7 +1658,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
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);
|
startActivity(userIntent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1530,7 +1675,11 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
-> {
|
-> {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
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);
|
startActivity(userIntent);
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||||
@@ -1602,7 +1751,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
bundle.putString(PostFragment.EXTRA_NAME, qualifiedName);
|
bundle.putString(PostFragment.EXTRA_NAME, qualifiedName);
|
||||||
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_SUBREDDIT);
|
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostPagingSource.TYPE_SUBREDDIT);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
@@ -1611,6 +1760,8 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
bundle.putString(SidebarFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(SidebarFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(SidebarFragment.EXTRA_SUBREDDIT_NAME, communityName);
|
bundle.putString(SidebarFragment.EXTRA_SUBREDDIT_NAME, communityName);
|
||||||
bundle.putString(SidebarFragment.EXTRA_COMMUNITY_QUALIFIED_NAME, qualifiedName);
|
bundle.putString(SidebarFragment.EXTRA_COMMUNITY_QUALIFIED_NAME, qualifiedName);
|
||||||
|
bundle.putBoolean(SidebarFragment.EXTRA_SHOW_STATISTICS, !showStatistics);
|
||||||
|
bundle.putBoolean(SidebarFragment.EXTRA_DISABLE_IMAGE_PREVIEW, disableImagePreview);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.content.Intent;
|
|||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@@ -20,12 +21,15 @@ import android.view.ViewTreeObserver;
|
|||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
@@ -52,6 +56,7 @@ import org.greenrobot.eventbus.EventBus;
|
|||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
@@ -71,11 +76,15 @@ import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
|||||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.SortType;
|
import eu.toldi.infinityforlemmy.SortType;
|
||||||
import eu.toldi.infinityforlemmy.SortTypeSelectionCallback;
|
import eu.toldi.infinityforlemmy.SortTypeSelectionCallback;
|
||||||
|
import eu.toldi.infinityforlemmy.account.FetchBlockedThings;
|
||||||
import eu.toldi.infinityforlemmy.adapters.SubredditAutocompleteRecyclerViewAdapter;
|
import eu.toldi.infinityforlemmy.adapters.SubredditAutocompleteRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.AddSubredditOrUserToMultiReddit;
|
import eu.toldi.infinityforlemmy.asynctasks.AddSubredditOrUserToMultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.CheckIsFollowingUser;
|
import eu.toldi.infinityforlemmy.asynctasks.CheckIsFollowingUser;
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
|
||||||
|
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData;
|
||||||
|
import eu.toldi.infinityforlemmy.blockedinstances.BlockedInstanceData;
|
||||||
|
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.CopyTextBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.CopyTextBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.FABMoreOptionsBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.FABMoreOptionsBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostLayoutBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostLayoutBottomSheetFragment;
|
||||||
@@ -101,11 +110,13 @@ import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
|||||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.user.BasicUserInfo;
|
||||||
import eu.toldi.infinityforlemmy.user.BlockUser;
|
import eu.toldi.infinityforlemmy.user.BlockUser;
|
||||||
import eu.toldi.infinityforlemmy.user.FetchUserData;
|
import eu.toldi.infinityforlemmy.user.FetchUserData;
|
||||||
import eu.toldi.infinityforlemmy.user.UserDao;
|
import eu.toldi.infinityforlemmy.user.UserDao;
|
||||||
import eu.toldi.infinityforlemmy.user.UserData;
|
import eu.toldi.infinityforlemmy.user.UserData;
|
||||||
import eu.toldi.infinityforlemmy.user.UserFollowing;
|
import eu.toldi.infinityforlemmy.user.UserFollowing;
|
||||||
|
import eu.toldi.infinityforlemmy.user.UserStats;
|
||||||
import eu.toldi.infinityforlemmy.user.UserViewModel;
|
import eu.toldi.infinityforlemmy.user.UserViewModel;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
@@ -141,6 +152,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
private static final String FETCH_USER_INFO_STATE = "FSIS";
|
private static final String FETCH_USER_INFO_STATE = "FSIS";
|
||||||
private static final String MESSAGE_FULLNAME_STATE = "MFS";
|
private static final String MESSAGE_FULLNAME_STATE = "MFS";
|
||||||
private static final String NEW_ACCOUNT_NAME_STATE = "NANS";
|
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)
|
@BindView(R.id.coordinator_layout_view_user_detail_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@@ -165,11 +177,30 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
|
|
||||||
@BindView(R.id.user_qualified_name_text_view_view_user_detail_activity)
|
@BindView(R.id.user_qualified_name_text_view_view_user_detail_activity)
|
||||||
TextView qualifiedNameTextView;
|
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)
|
@BindView(R.id.subscribe_user_chip_view_user_detail_activity)
|
||||||
Chip subscribeUserChip;
|
Chip subscribeUserChip;
|
||||||
@BindView(R.id.karma_text_view_view_user_detail_activity)
|
|
||||||
TextView karmaTextView;
|
@BindView(R.id.post_count_text_view_view_user_detail_activity)
|
||||||
@BindView(R.id.cakeday_text_view_view_user_detail_activity)
|
TextView postCountTextView;
|
||||||
|
|
||||||
|
@BindView(R.id.comment_count_text_view_view_user_detail_activity)
|
||||||
|
TextView commentCountTextView;
|
||||||
|
|
||||||
|
@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.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;
|
TextView cakedayTextView;
|
||||||
@BindView(R.id.description_text_view_view_user_detail_activity)
|
@BindView(R.id.description_text_view_view_user_detail_activity)
|
||||||
TextView descriptionTextView;
|
TextView descriptionTextView;
|
||||||
@@ -216,8 +247,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
private String mAccountQualifiedName;
|
private String mAccountQualifiedName;
|
||||||
private String username;
|
private String username;
|
||||||
|
|
||||||
private String qualifiedName;
|
private String qualifiedName;
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
|
private boolean showStatistics;
|
||||||
private boolean subscriptionReady = false;
|
private boolean subscriptionReady = false;
|
||||||
private boolean mFetchUserInfoSuccess = false;
|
private boolean mFetchUserInfoSuccess = false;
|
||||||
private int expandedTabTextColor;
|
private int expandedTabTextColor;
|
||||||
@@ -238,6 +272,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
|
|
||||||
private UserData mUserData;
|
private UserData mUserData;
|
||||||
|
|
||||||
|
private boolean isBlocked;
|
||||||
|
|
||||||
//private MaterialAlertDialogBuilder nsfwWarningBuilder;
|
//private MaterialAlertDialogBuilder nsfwWarningBuilder;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -280,6 +316,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
lockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false);
|
lockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false);
|
||||||
|
|
||||||
|
showStatistics = mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_STATISTICS, true);
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
mMessageId = getIntent().getIntExtra(EXTRA_MESSAGE_FULLNAME, 0);
|
mMessageId = getIntent().getIntExtra(EXTRA_MESSAGE_FULLNAME, 0);
|
||||||
@@ -288,6 +325,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE);
|
mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE);
|
||||||
mMessageId = savedInstanceState.getInt(MESSAGE_FULLNAME_STATE);
|
mMessageId = savedInstanceState.getInt(MESSAGE_FULLNAME_STATE);
|
||||||
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
||||||
|
qualifiedName = savedInstanceState.getString("qualified_name");
|
||||||
}
|
}
|
||||||
|
|
||||||
checkNewAccountAndInitializeViewPager();
|
checkNewAccountAndInitializeViewPager();
|
||||||
@@ -299,9 +337,26 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
if (mUserData != null) {
|
||||||
|
setupVisibleElements();
|
||||||
|
} else {
|
||||||
|
fetchUserInfo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
mFetchUserInfoSuccess = false;
|
||||||
|
}
|
||||||
|
|
||||||
private void setupVisibleElements() {
|
private void setupVisibleElements() {
|
||||||
Resources resources = getResources();
|
Resources resources = getResources();
|
||||||
String title = username;
|
String title = username;
|
||||||
|
progressBar.setVisibility(View.GONE);
|
||||||
userNameTextView.setText(title);
|
userNameTextView.setText(title);
|
||||||
qualifiedNameTextView.setText(qualifiedName);
|
qualifiedNameTextView.setText(qualifiedName);
|
||||||
toolbar.setTitle(title);
|
toolbar.setTitle(title);
|
||||||
@@ -382,7 +437,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
glide = Glide.with(this);
|
glide = Glide.with(getApplication());
|
||||||
Locale locale = getResources().getConfiguration().locale;
|
Locale locale = getResources().getConfiguration().locale;
|
||||||
|
|
||||||
MarkwonPlugin miscPlugin = new AbstractMarkwonPlugin() {
|
MarkwonPlugin miscPlugin = new AbstractMarkwonPlugin() {
|
||||||
@@ -406,7 +461,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
urlMenuBottomSheetFragment.show(getSupportFragmentManager(), null);
|
urlMenuBottomSheetFragment.show(getSupportFragmentManager(), null);
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
Markwon markwon = MarkdownUtils.createDescriptionMarkwon(this, miscPlugin, onLinkLongClickListener);
|
Markwon markwon = MarkdownUtils.createDescriptionMarkwon(this, miscPlugin, onLinkLongClickListener, mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false));
|
||||||
|
|
||||||
descriptionTextView.setOnLongClickListener(view -> {
|
descriptionTextView.setOnLongClickListener(view -> {
|
||||||
if (description != null && !description.equals("") && descriptionTextView.getSelectionStart() == -1 && descriptionTextView.getSelectionEnd() == -1) {
|
if (description != null && !description.equals("") && descriptionTextView.getSelectionStart() == -1 && descriptionTextView.getSelectionEnd() == -1) {
|
||||||
@@ -559,8 +614,14 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
getSupportActionBar().setTitle(userFullName);
|
getSupportActionBar().setTitle(userFullName);
|
||||||
}
|
}
|
||||||
String karma = "";//getString(R.string.karma_info_user_detail, userData.getTotalKarma(), userData.getLinkKarma(), userData.getCommentKarma());
|
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(getString(R.string.post_count_detail, userStats.getPostCount()));
|
||||||
|
commentCountTextView.setText(getString(R.string.comment_count_detail, userStats.getCommentCount()));
|
||||||
|
}
|
||||||
|
|
||||||
if (userData.getDescription() == null || userData.getDescription().equals("")) {
|
if (userData.getDescription() == null || userData.getDescription().equals("")) {
|
||||||
descriptionTextView.setVisibility(View.GONE);
|
descriptionTextView.setVisibility(View.GONE);
|
||||||
@@ -628,7 +689,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
unsubscribedColor = mCustomThemeWrapper.getUnsubscribed();
|
unsubscribedColor = mCustomThemeWrapper.getUnsubscribed();
|
||||||
subscribedColor = mCustomThemeWrapper.getSubscribed();
|
subscribedColor = mCustomThemeWrapper.getSubscribed();
|
||||||
userNameTextView.setTextColor(mCustomThemeWrapper.getUsername());
|
userNameTextView.setTextColor(mCustomThemeWrapper.getUsername());
|
||||||
karmaTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
postCountTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||||
|
commentCountTextView.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());
|
cakedayTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor());
|
||||||
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
navigationWrapper.applyCustomTheme(mCustomThemeWrapper.getBottomAppBarIconColor(), mCustomThemeWrapper.getBottomAppBarBackgroundColor());
|
||||||
applyFABTheme(navigationWrapper.floatingActionButton, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
applyFABTheme(navigationWrapper.floatingActionButton, mSharedPreferences.getBoolean(SharedPreferencesUtils.USE_CIRCULAR_FAB, false));
|
||||||
@@ -637,7 +702,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
applyTabLayoutTheme(tabLayout);
|
applyTabLayoutTheme(tabLayout);
|
||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
userNameTextView.setTypeface(typeface);
|
userNameTextView.setTypeface(typeface);
|
||||||
karmaTextView.setTypeface(typeface);
|
postCountTextView.setTypeface(typeface);
|
||||||
|
commentCountTextView.setTypeface(typeface);
|
||||||
cakedayTextView.setTypeface(typeface);
|
cakedayTextView.setTypeface(typeface);
|
||||||
subscribeUserChip.setTypeface(typeface);
|
subscribeUserChip.setTypeface(typeface);
|
||||||
descriptionTextView.setTypeface(typeface);
|
descriptionTextView.setTypeface(typeface);
|
||||||
@@ -671,7 +737,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
private void initializeViewPager() {
|
private void initializeViewPager() {
|
||||||
sectionsPagerAdapter = new SectionsPagerAdapter(this);
|
sectionsPagerAdapter = new SectionsPagerAdapter(this);
|
||||||
viewPager2.setAdapter(sectionsPagerAdapter);
|
viewPager2.setAdapter(sectionsPagerAdapter);
|
||||||
viewPager2.setOffscreenPageLimit(2);
|
viewPager2.setOffscreenPageLimit(ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT);
|
||||||
viewPager2.setUserInputEnabled(!mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false));
|
viewPager2.setUserInputEnabled(!mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_SWIPING_BETWEEN_TABS, false));
|
||||||
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
|
||||||
switch (position) {
|
switch (position) {
|
||||||
@@ -929,6 +995,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_OPTION_PROFILE: {
|
case SharedPreferencesUtils.OTHER_ACTIVITIES_BOTTOM_APP_BAR_OPTION_PROFILE: {
|
||||||
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
Intent intent = new Intent(this, ViewUserDetailActivity.class);
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
|
||||||
|
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY,mAccountQualifiedName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1083,8 +1150,27 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
@Override
|
@Override
|
||||||
public void onFetchUserDataSuccess(UserData userData, int inboxCount) {
|
public void onFetchUserDataSuccess(UserData userData, int inboxCount) {
|
||||||
mUserData = userData;
|
mUserData = userData;
|
||||||
username = userData.getName();
|
username = userData.getDisplayName();
|
||||||
setupVisibleElements();
|
setupVisibleElements();
|
||||||
|
FetchBlockedThings.fetchBlockedThings(mRetrofit.getRetrofit(), mAccessToken, mAccountQualifiedName, new FetchBlockedThings.FetchBlockedThingsListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchBlockedThingsSuccess(List<BlockedUserData> blockedUsers, List<BlockedCommunityData> blockedCommunities, List<BlockedInstanceData> blockedInstances) {
|
||||||
|
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,
|
new ViewUserDetailActivity.InsertUserDataAsyncTask(mRedditDataRoomDatabase.userDao(), userData,
|
||||||
() -> mFetchUserInfoSuccess = true).execute();
|
() -> mFetchUserInfoSuccess = true).execute();
|
||||||
}
|
}
|
||||||
@@ -1123,10 +1209,15 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
getMenuInflater().inflate(R.menu.view_user_detail_activity, menu);
|
getMenuInflater().inflate(R.menu.view_user_detail_activity, menu);
|
||||||
if (username.equals(mAccountName)) {
|
if (username.equals(mAccountName)) {
|
||||||
menu.findItem(R.id.action_send_private_message_view_user_detail_activity).setVisible(false);
|
menu.findItem(R.id.action_send_private_message_view_user_detail_activity).setVisible(false);
|
||||||
menu.findItem(R.id.action_report_view_user_detail_activity).setVisible(false);
|
|
||||||
menu.findItem(R.id.action_block_user_view_user_detail_activity).setVisible(false);
|
menu.findItem(R.id.action_block_user_view_user_detail_activity).setVisible(false);
|
||||||
} else {
|
} else {
|
||||||
menu.findItem(R.id.action_edit_profile_view_user_detail_activity).setVisible(false);
|
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);
|
applyMenuItemTheme(menu);
|
||||||
return true;
|
return true;
|
||||||
@@ -1161,7 +1252,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
||||||
shareIntent.setType("text/plain");
|
shareIntent.setType("text/plain");
|
||||||
String baseURL = mRetrofit.getBaseURL().endsWith("/") ? mRetrofit.getBaseURL() : mRetrofit.getBaseURL() + "/";
|
String baseURL = mRetrofit.getBaseURL().endsWith("/") ? mRetrofit.getBaseURL() : mRetrofit.getBaseURL() + "/";
|
||||||
shareIntent.putExtra(Intent.EXTRA_TEXT, baseURL + qualifiedName);
|
shareIntent.putExtra(Intent.EXTRA_TEXT, baseURL + "u/" + qualifiedName);
|
||||||
if (shareIntent.resolveActivity(getPackageManager()) != null) {
|
if (shareIntent.resolveActivity(getPackageManager()) != null) {
|
||||||
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
||||||
} else {
|
} else {
|
||||||
@@ -1175,26 +1266,14 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
}
|
}
|
||||||
|
|
||||||
Intent pmIntent = new Intent(this, SendPrivateMessageActivity.class);
|
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);
|
startActivity(pmIntent);
|
||||||
return true;
|
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) {
|
} else if (itemId == R.id.action_add_to_post_filter_view_user_detail_activity) {
|
||||||
Intent intent = new Intent(this, PostFilterPreferenceActivity.class);
|
Intent intent = new Intent(this, PostFilterPreferenceActivity.class);
|
||||||
intent.putExtra(PostFilterPreferenceActivity.EXTRA_USER_NAME, username);
|
intent.putExtra(PostFilterPreferenceActivity.EXTRA_USER_NAME, username);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.id.action_report_view_user_detail_activity) {
|
|
||||||
Intent reportIntent = new Intent(this, LinkResolverActivity.class);
|
|
||||||
reportIntent.setData(Uri.parse("https://www.reddithelp.com/en/categories/rules-reporting/account-and-community-restrictions/what-should-i-do-if-i-see-something-i"));
|
|
||||||
startActivity(reportIntent);
|
|
||||||
return true;
|
|
||||||
} else if (itemId == R.id.action_block_user_view_user_detail_activity) {
|
} else if (itemId == R.id.action_block_user_view_user_detail_activity) {
|
||||||
if (mAccessToken == null) {
|
if (mAccessToken == null) {
|
||||||
Toast.makeText(this, R.string.login_first, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.login_first, Toast.LENGTH_SHORT).show();
|
||||||
@@ -1205,10 +1284,13 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
.setTitle(R.string.block_user)
|
.setTitle(R.string.block_user)
|
||||||
.setMessage(R.string.are_you_sure)
|
.setMessage(R.string.are_you_sure)
|
||||||
.setPositiveButton(R.string.yes, (dialogInterface, i)
|
.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
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
Toast.makeText(ViewUserDetailActivity.this, R.string.block_user_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(ViewUserDetailActivity.this, R.string.block_user_success, Toast.LENGTH_SHORT).show();
|
||||||
|
isBlocked = true;
|
||||||
|
sectionsPagerAdapter.refresh();
|
||||||
|
invalidateOptionsMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1222,6 +1304,31 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
} else if (itemId == R.id.action_edit_profile_view_user_detail_activity) {
|
} else if (itemId == R.id.action_edit_profile_view_user_detail_activity) {
|
||||||
startActivity(new Intent(this, EditProfileActivity.class));
|
startActivity(new Intent(this, EditProfileActivity.class));
|
||||||
return true;
|
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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (itemId == R.id.action_view_instance_view_user_detail_activity) {
|
||||||
|
String instance = mUserData.getActorId().split("/")[2];
|
||||||
|
Intent intent = new Intent(this, InstanceInfoActivity.class);
|
||||||
|
intent.putExtra(InstanceInfoActivity.EXTRA_INSTANCE_DOMAIN, instance);
|
||||||
|
intent.putExtra(InstanceInfoActivity.EXTRA_INSTANCE_ID, mUserData.getInstanceId());
|
||||||
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1270,6 +1377,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
outState.putBoolean(FETCH_USER_INFO_STATE, mFetchUserInfoSuccess);
|
outState.putBoolean(FETCH_USER_INFO_STATE, mFetchUserInfoSuccess);
|
||||||
outState.putInt(MESSAGE_FULLNAME_STATE, mMessageId);
|
outState.putInt(MESSAGE_FULLNAME_STATE, mMessageId);
|
||||||
outState.putString(NEW_ACCOUNT_NAME_STATE, mNewAccountName);
|
outState.putString(NEW_ACCOUNT_NAME_STATE, mNewAccountName);
|
||||||
|
outState.putString(NEW_ACCOUNT_QUALIFIED_NAME_STATE, mAccountQualifiedName);
|
||||||
|
outState.putString("qualified_name", qualifiedName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1381,7 +1490,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
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);
|
startActivity(subredditIntent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1439,7 +1552,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
-> {
|
-> {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
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);
|
startActivity(subredditIntent);
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||||
@@ -1460,7 +1577,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
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);
|
startActivity(userIntent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1473,7 +1594,11 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
-> {
|
-> {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
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);
|
startActivity(userIntent);
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||||
@@ -1640,7 +1765,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
bundle.putString(PostFragment.EXTRA_USER_NAME, qualifiedName);
|
bundle.putString(PostFragment.EXTRA_USER_NAME, qualifiedName);
|
||||||
bundle.putString(PostFragment.EXTRA_USER_WHERE, PostPagingSource.USER_WHERE_SUBMITTED);
|
bundle.putString(PostFragment.EXTRA_USER_WHERE, PostPagingSource.USER_WHERE_SUBMITTED);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(PostFragment.EXTRA_ACCOUNT_NAME, mAccountQualifiedName);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,14 +23,11 @@ import android.os.Build;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.text.Html;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.OrientationEventListener;
|
import android.view.OrientationEventListener;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageButton;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -70,7 +67,7 @@ import com.google.android.exoplayer2.upstream.cache.SimpleCache;
|
|||||||
import com.google.android.exoplayer2.util.MimeTypes;
|
import com.google.android.exoplayer2.util.MimeTypes;
|
||||||
import com.google.android.exoplayer2.video.VideoSize;
|
import com.google.android.exoplayer2.video.VideoSize;
|
||||||
import com.google.android.material.bottomappbar.BottomAppBar;
|
import com.google.android.material.bottomappbar.BottomAppBar;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.button.MaterialButton;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.otaliastudios.zoom.ZoomEngine;
|
import com.otaliastudios.zoom.ZoomEngine;
|
||||||
import com.otaliastudios.zoom.ZoomSurfaceView;
|
import com.otaliastudios.zoom.ZoomSurfaceView;
|
||||||
@@ -90,7 +87,7 @@ import app.futured.hauler.LockableNestedScrollView;
|
|||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import eu.toldi.infinityforlemmy.CustomFontReceiver;
|
import eu.toldi.infinityforlemmy.CustomFontReceiver;
|
||||||
import eu.toldi.infinityforlemmy.FetchGfycatOrRedgifsVideoLinks;
|
import eu.toldi.infinityforlemmy.FetchRedgifsVideoLinks;
|
||||||
import eu.toldi.infinityforlemmy.FetchStreamableVideo;
|
import eu.toldi.infinityforlemmy.FetchStreamableVideo;
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
@@ -108,6 +105,7 @@ import eu.toldi.infinityforlemmy.font.TitleFontFamily;
|
|||||||
import eu.toldi.infinityforlemmy.font.TitleFontStyle;
|
import eu.toldi.infinityforlemmy.font.TitleFontStyle;
|
||||||
import eu.toldi.infinityforlemmy.post.FetchPost;
|
import eu.toldi.infinityforlemmy.post.FetchPost;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
|
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||||
import eu.toldi.infinityforlemmy.services.DownloadMediaService;
|
import eu.toldi.infinityforlemmy.services.DownloadMediaService;
|
||||||
import eu.toldi.infinityforlemmy.services.DownloadRedditVideoService;
|
import eu.toldi.infinityforlemmy.services.DownloadRedditVideoService;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
@@ -131,10 +129,10 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
public static final String EXTRA_VIDEO_DOWNLOAD_URL = "EVDU";
|
public static final String EXTRA_VIDEO_DOWNLOAD_URL = "EVDU";
|
||||||
public static final String EXTRA_SUBREDDIT = "ES";
|
public static final String EXTRA_SUBREDDIT = "ES";
|
||||||
public static final String EXTRA_ID = "EI";
|
public static final String EXTRA_ID = "EI";
|
||||||
public static final String EXTRA_POST_TITLE = "EPT";
|
public static final String EXTRA_POST = "EP";
|
||||||
public static final String EXTRA_PROGRESS_SECONDS = "EPS";
|
public static final String EXTRA_PROGRESS_SECONDS = "EPS";
|
||||||
public static final String EXTRA_VIDEO_TYPE = "EVT";
|
public static final String EXTRA_VIDEO_TYPE = "EVT";
|
||||||
public static final String EXTRA_GFYCAT_ID = "EGI";
|
public static final String EXTRA_REDGIFS_ID = "ERI";
|
||||||
public static final String EXTRA_V_REDD_IT_URL = "EVRIU";
|
public static final String EXTRA_V_REDD_IT_URL = "EVRIU";
|
||||||
public static final String EXTRA_STREAMABLE_SHORT_CODE = "ESSC";
|
public static final String EXTRA_STREAMABLE_SHORT_CODE = "ESSC";
|
||||||
public static final String EXTRA_IS_NSFW = "EIN";
|
public static final String EXTRA_IS_NSFW = "EIN";
|
||||||
@@ -143,7 +141,6 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
public static final int VIDEO_TYPE_V_REDD_IT = 4;
|
public static final int VIDEO_TYPE_V_REDD_IT = 4;
|
||||||
public static final int VIDEO_TYPE_DIRECT = 3;
|
public static final int VIDEO_TYPE_DIRECT = 3;
|
||||||
public static final int VIDEO_TYPE_REDGIFS = 2;
|
public static final int VIDEO_TYPE_REDGIFS = 2;
|
||||||
public static final int VIDEO_TYPE_GFYCAT = 1;
|
|
||||||
private static final int VIDEO_TYPE_NORMAL = 0;
|
private static final int VIDEO_TYPE_NORMAL = 0;
|
||||||
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
|
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
|
||||||
|
|
||||||
@@ -162,17 +159,19 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
@BindView(R.id.progress_bar_view_video_activity)
|
@BindView(R.id.progress_bar_view_video_activity)
|
||||||
ProgressBar progressBar;
|
ProgressBar progressBar;
|
||||||
@BindView(R.id.mute_exo_playback_control_view)
|
@BindView(R.id.mute_exo_playback_control_view)
|
||||||
ImageButton muteButton;
|
MaterialButton muteButton;
|
||||||
@BindView(R.id.hd_exo_playback_control_view)
|
@BindView(R.id.hd_exo_playback_control_view)
|
||||||
ImageButton hdButton;
|
MaterialButton hdButton;
|
||||||
@BindView(R.id.bottom_navigation_exo_playback_control_view)
|
@BindView(R.id.bottom_navigation_exo_playback_control_view)
|
||||||
BottomAppBar bottomAppBar;
|
BottomAppBar bottomAppBar;
|
||||||
@BindView(R.id.title_text_view_exo_playback_control_view)
|
@BindView(R.id.title_text_view_exo_playback_control_view)
|
||||||
TextView titleTextView;
|
TextView titleTextView;
|
||||||
|
@BindView(R.id.back_button_exo_playback_control_view)
|
||||||
|
MaterialButton backButton;
|
||||||
@BindView(R.id.download_image_view_exo_playback_control_view)
|
@BindView(R.id.download_image_view_exo_playback_control_view)
|
||||||
ImageView downloadImageView;
|
MaterialButton downloadButton;
|
||||||
@BindView(R.id.playback_speed_image_view_exo_playback_control_view)
|
@BindView(R.id.playback_speed_image_view_exo_playback_control_view)
|
||||||
ImageView playbackSpeedImageView;
|
MaterialButton playbackSpeedButton;
|
||||||
@BindView(R.id.lockable_nested_scroll_view_view_video_activity)
|
@BindView(R.id.lockable_nested_scroll_view_view_video_activity)
|
||||||
LockableNestedScrollView nestedScrollView;
|
LockableNestedScrollView nestedScrollView;
|
||||||
|
|
||||||
@@ -203,10 +202,6 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
@Named("no_oauth")
|
@Named("no_oauth")
|
||||||
RetrofitHolder retrofit;
|
RetrofitHolder retrofit;
|
||||||
|
|
||||||
@Inject
|
|
||||||
@Named("gfycat")
|
|
||||||
Retrofit gfycatRetrofit;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@Named("redgifs")
|
@Named("redgifs")
|
||||||
Retrofit redgifsRetrofit;
|
Retrofit redgifsRetrofit;
|
||||||
@@ -222,10 +217,6 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
@Named("default")
|
@Named("default")
|
||||||
SharedPreferences mSharedPreferences;
|
SharedPreferences mSharedPreferences;
|
||||||
|
|
||||||
@Inject
|
|
||||||
@Named("current_account")
|
|
||||||
SharedPreferences mCurrentAccountSharedPreferences;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
|
|
||||||
@@ -235,6 +226,9 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
@Inject
|
@Inject
|
||||||
SimpleCache mSimpleCache;
|
SimpleCache mSimpleCache;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
PostEnricher postEnricher;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@@ -301,6 +295,12 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
ButterKnife.bind(this);
|
ButterKnife.bind(this);
|
||||||
setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
||||||
|
|
||||||
|
setTitle(" ");
|
||||||
|
|
||||||
|
if (typeface != null) {
|
||||||
|
titleTextView.setTypeface(typeface);
|
||||||
|
}
|
||||||
|
|
||||||
Resources resources = getResources();
|
Resources resources = getResources();
|
||||||
|
|
||||||
getWindow().getDecorView().setSystemUiVisibility(
|
getWindow().getDecorView().setSystemUiVisibility(
|
||||||
@@ -312,7 +312,11 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
if (useBottomAppBar) {
|
if (useBottomAppBar) {
|
||||||
getSupportActionBar().hide();
|
getSupportActionBar().hide();
|
||||||
bottomAppBar.setVisibility(View.VISIBLE);
|
bottomAppBar.setVisibility(View.VISIBLE);
|
||||||
downloadImageView.setOnClickListener(view -> {
|
backButton.setOnClickListener(view -> {
|
||||||
|
finish();
|
||||||
|
});
|
||||||
|
|
||||||
|
downloadButton.setOnClickListener(view -> {
|
||||||
if (isDownloading) {
|
if (isDownloading) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -326,12 +330,8 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
requestPermissionAndDownload();
|
requestPermissionAndDownload();
|
||||||
});
|
});
|
||||||
|
|
||||||
playbackSpeedImageView.setOnClickListener(view -> {
|
playbackSpeedButton.setOnClickListener(view -> {
|
||||||
PlaybackSpeedBottomSheetFragment playbackSpeedBottomSheetFragment = new PlaybackSpeedBottomSheetFragment();
|
changePlaybackSpeed();
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putInt(PlaybackSpeedBottomSheetFragment.EXTRA_PLAYBACK_SPEED, playbackSpeed);
|
|
||||||
playbackSpeedBottomSheetFragment.setArguments(bundle);
|
|
||||||
playbackSpeedBottomSheetFragment.show(getSupportFragmentManager(), playbackSpeedBottomSheetFragment.getTag());
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
ActionBar actionBar = getSupportActionBar();
|
ActionBar actionBar = getSupportActionBar();
|
||||||
@@ -402,12 +402,15 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
};
|
};
|
||||||
orientationEventListener.enable();
|
orientationEventListener.enable();
|
||||||
}
|
}
|
||||||
} catch (Exception ignore) {}
|
} catch (Exception ignore) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String postTitle = intent.getStringExtra(EXTRA_POST_TITLE);
|
Post post = intent.getParcelableExtra(EXTRA_POST);
|
||||||
setSmallTitle(postTitle);
|
if (post != null) {
|
||||||
|
titleTextView.setText(post.getTitle());
|
||||||
|
}
|
||||||
|
|
||||||
trackSelector = new DefaultTrackSelector(this);
|
trackSelector = new DefaultTrackSelector(this);
|
||||||
if (videoType == VIDEO_TYPE_NORMAL && isDataSavingMode && dataSavingModeDefaultResolution > 0) {
|
if (videoType == VIDEO_TYPE_NORMAL && isDataSavingMode && dataSavingModeDefaultResolution > 0) {
|
||||||
@@ -539,29 +542,21 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
}
|
}
|
||||||
} else if (videoType == VIDEO_TYPE_V_REDD_IT) {
|
} else if (videoType == VIDEO_TYPE_V_REDD_IT) {
|
||||||
loadVReddItVideo(savedInstanceState);
|
loadVReddItVideo(savedInstanceState);
|
||||||
} else if (videoType == VIDEO_TYPE_GFYCAT || videoType == VIDEO_TYPE_REDGIFS) {
|
} else if (videoType == VIDEO_TYPE_REDGIFS) {
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
videoDownloadUrl = savedInstanceState.getString(VIDEO_DOWNLOAD_URL_STATE);
|
videoDownloadUrl = savedInstanceState.getString(VIDEO_DOWNLOAD_URL_STATE);
|
||||||
} else {
|
} else {
|
||||||
videoDownloadUrl = intent.getStringExtra(EXTRA_VIDEO_DOWNLOAD_URL);
|
videoDownloadUrl = intent.getStringExtra(EXTRA_VIDEO_DOWNLOAD_URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
String gfycatId = intent.getStringExtra(EXTRA_GFYCAT_ID);
|
String redgifsId = intent.getStringExtra(EXTRA_REDGIFS_ID);
|
||||||
if (gfycatId != null && gfycatId.contains("-")) {
|
if (redgifsId != null && redgifsId.contains("-")) {
|
||||||
gfycatId = gfycatId.substring(0, gfycatId.indexOf('-'));
|
redgifsId = redgifsId.substring(0, redgifsId.indexOf('-'));
|
||||||
}
|
|
||||||
if (videoType == VIDEO_TYPE_GFYCAT) {
|
|
||||||
videoFileName = "Gfycat-" + gfycatId + ".mp4";
|
|
||||||
} else {
|
|
||||||
videoFileName = "Redgifs-" + gfycatId + ".mp4";
|
|
||||||
}
|
}
|
||||||
|
videoFileName = "Redgifs-" + redgifsId + ".mp4";
|
||||||
|
|
||||||
if (mVideoUri == null) {
|
if (mVideoUri == null) {
|
||||||
if (videoType == VIDEO_TYPE_GFYCAT) {
|
loadRedgifsVideo(redgifsId, savedInstanceState);
|
||||||
loadGfycatOrRedgifsVideo(gfycatRetrofit, gfycatId, true, savedInstanceState, true);
|
|
||||||
} else {
|
|
||||||
loadGfycatOrRedgifsVideo(redgifsRetrofit, gfycatId, false, savedInstanceState, false);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
dataSourceFactory = new CacheDataSource.Factory().setCache(mSimpleCache)
|
dataSourceFactory = new CacheDataSource.Factory().setCache(mSimpleCache)
|
||||||
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory().setAllowCrossProtocolRedirects(true).setUserAgent(APIUtils.USER_AGENT));
|
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory().setAllowCrossProtocolRedirects(true).setUserAgent(APIUtils.USER_AGENT));
|
||||||
@@ -598,20 +593,6 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSmallTitle(String title) {
|
|
||||||
if (title != null) {
|
|
||||||
if (useBottomAppBar) {
|
|
||||||
titleTextView.setText(Html.fromHtml(String.format("<font color=\"#FFFFFF\"><small>%s</small></font>", title)));
|
|
||||||
} else {
|
|
||||||
setTitle(Utils.getTabTextWithCustomFont(typeface, Html.fromHtml(String.format("<font color=\"#FFFFFF\"><small>%s</small></font>", title))));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!useBottomAppBar) {
|
|
||||||
setTitle("");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void preparePlayer(Bundle savedInstanceState) {
|
private void preparePlayer(Bundle savedInstanceState) {
|
||||||
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.LOOP_VIDEO, true)) {
|
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.LOOP_VIDEO, true)) {
|
||||||
player.setRepeatMode(Player.REPEAT_MODE_ALL);
|
player.setRepeatMode(Player.REPEAT_MODE_ALL);
|
||||||
@@ -631,17 +612,17 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
isMute = savedInstanceState.getBoolean(IS_MUTE_STATE);
|
isMute = savedInstanceState.getBoolean(IS_MUTE_STATE);
|
||||||
if (isMute) {
|
if (isMute) {
|
||||||
player.setVolume(0f);
|
player.setVolume(0f);
|
||||||
muteButton.setImageResource(R.drawable.ic_mute_24dp);
|
muteButton.setIconResource(R.drawable.ic_mute_24dp);
|
||||||
} else {
|
} else {
|
||||||
player.setVolume(1f);
|
player.setVolume(1f);
|
||||||
muteButton.setImageResource(R.drawable.ic_unmute_24dp);
|
muteButton.setIconResource(R.drawable.ic_unmute_24dp);
|
||||||
}
|
}
|
||||||
} else if (muteVideo) {
|
} else if (muteVideo) {
|
||||||
isMute = true;
|
isMute = true;
|
||||||
player.setVolume(0f);
|
player.setVolume(0f);
|
||||||
muteButton.setImageResource(R.drawable.ic_mute_24dp);
|
muteButton.setIconResource(R.drawable.ic_mute_24dp);
|
||||||
} else {
|
} else {
|
||||||
muteButton.setImageResource(R.drawable.ic_unmute_24dp);
|
muteButton.setIconResource(R.drawable.ic_unmute_24dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
player.addListener(new Player.Listener() {
|
player.addListener(new Player.Listener() {
|
||||||
@@ -685,11 +666,11 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
if (isMute) {
|
if (isMute) {
|
||||||
isMute = false;
|
isMute = false;
|
||||||
player.setVolume(1f);
|
player.setVolume(1f);
|
||||||
muteButton.setImageResource(R.drawable.ic_unmute_24dp);
|
muteButton.setIconResource(R.drawable.ic_unmute_24dp);
|
||||||
} else {
|
} else {
|
||||||
isMute = true;
|
isMute = true;
|
||||||
player.setVolume(0f);
|
player.setVolume(0f);
|
||||||
muteButton.setImageResource(R.drawable.ic_mute_24dp);
|
muteButton.setIconResource(R.drawable.ic_mute_24dp);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -702,6 +683,14 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void changePlaybackSpeed() {
|
||||||
|
PlaybackSpeedBottomSheetFragment playbackSpeedBottomSheetFragment = new PlaybackSpeedBottomSheetFragment();
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putInt(PlaybackSpeedBottomSheetFragment.EXTRA_PLAYBACK_SPEED, playbackSpeed);
|
||||||
|
playbackSpeedBottomSheetFragment.setArguments(bundle);
|
||||||
|
playbackSpeedBottomSheetFragment.show(getSupportFragmentManager(), playbackSpeedBottomSheetFragment.getTag());
|
||||||
|
}
|
||||||
|
|
||||||
private int inferPrimaryTrackType(Format format) {
|
private int inferPrimaryTrackType(Format format) {
|
||||||
int trackType = MimeTypes.getTrackType(format.sampleMimeType);
|
int trackType = MimeTypes.getTrackType(format.sampleMimeType);
|
||||||
if (trackType != C.TRACK_TYPE_UNKNOWN) {
|
if (trackType != C.TRACK_TYPE_UNKNOWN) {
|
||||||
@@ -722,42 +711,10 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
return C.TRACK_TYPE_UNKNOWN;
|
return C.TRACK_TYPE_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadGfycatOrRedgifsVideo(Retrofit retrofit, String gfycatId, boolean isGfycatVideo,
|
private void loadRedgifsVideo(String redgifsId, Bundle savedInstanceState) {
|
||||||
Bundle savedInstanceState, boolean needErrorHandling) {
|
|
||||||
progressBar.setVisibility(View.VISIBLE);
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
if (isGfycatVideo) {
|
FetchRedgifsVideoLinks.fetchRedgifsVideoLinks(mExecutor, new Handler(), redgifsRetrofit,
|
||||||
FetchGfycatOrRedgifsVideoLinks.fetchGfycatVideoLinks(mExecutor, new Handler(), retrofit, gfycatId,
|
redgifsId, new FetchRedgifsVideoLinks.FetchRedgifsVideoLinksListener() {
|
||||||
new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
|
|
||||||
@Override
|
|
||||||
public void success(String webm, String mp4) {
|
|
||||||
progressBar.setVisibility(View.GONE);
|
|
||||||
mVideoUri = Uri.parse(webm);
|
|
||||||
videoDownloadUrl = mp4;
|
|
||||||
dataSourceFactory = new CacheDataSource.Factory().setCache(mSimpleCache)
|
|
||||||
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory().setAllowCrossProtocolRedirects(true).setUserAgent(APIUtils.USER_AGENT));
|
|
||||||
preparePlayer(savedInstanceState);
|
|
||||||
player.prepare();
|
|
||||||
player.setMediaSource(new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(mVideoUri)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed(int errorCode) {
|
|
||||||
if (errorCode == 404 && needErrorHandling) {
|
|
||||||
if (mSharedPreferences.getBoolean(SharedPreferencesUtils.AUTOMATICALLY_TRY_REDGIFS, true)) {
|
|
||||||
loadGfycatOrRedgifsVideo(redgifsRetrofit, gfycatId, false, savedInstanceState, false);
|
|
||||||
} else {
|
|
||||||
Snackbar.make(coordinatorLayout, R.string.load_video_in_redgifs, Snackbar.LENGTH_INDEFINITE).setAction(R.string.yes,
|
|
||||||
view -> loadGfycatOrRedgifsVideo(redgifsRetrofit, gfycatId, false, savedInstanceState, false)).show();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
progressBar.setVisibility(View.GONE);
|
|
||||||
Toast.makeText(ViewVideoActivity.this, R.string.fetch_gfycat_video_failed, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
FetchGfycatOrRedgifsVideoLinks.fetchRedgifsVideoLinks(this, mExecutor, new Handler(), redgifsRetrofit,
|
|
||||||
mCurrentAccountSharedPreferences, gfycatId, new FetchGfycatOrRedgifsVideoLinks.FetchGfycatOrRedgifsVideoLinksListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void success(String webm, String mp4) {
|
public void success(String webm, String mp4) {
|
||||||
progressBar.setVisibility(View.GONE);
|
progressBar.setVisibility(View.GONE);
|
||||||
@@ -777,7 +734,6 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void loadVReddItVideo(Bundle savedInstanceState) {
|
private void loadVReddItVideo(Bundle savedInstanceState) {
|
||||||
progressBar.setVisibility(View.VISIBLE);
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
@@ -791,33 +747,17 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
int commentsIndex = segments.lastIndexOf("comments");
|
int commentsIndex = segments.lastIndexOf("comments");
|
||||||
String postId = segments.get(commentsIndex + 1);
|
String postId = segments.get(commentsIndex + 1);
|
||||||
FetchPost.fetchPost(mExecutor, new Handler(), retrofit.getRetrofit(), postId, null,
|
FetchPost.fetchPost(mExecutor, new Handler(), retrofit.getRetrofit(), postId, null,
|
||||||
new FetchPost.FetchPostListener() {
|
postEnricher, new FetchPost.FetchPostListener() {
|
||||||
@Override
|
@Override
|
||||||
public void fetchPostSuccess(Post post) {
|
public void fetchPostSuccess(Post post) {
|
||||||
if (post.isGfycat()) {
|
if (post.isRedgifs()) {
|
||||||
videoType = VIDEO_TYPE_GFYCAT;
|
|
||||||
String gfycatId = post.getGfycatId();
|
|
||||||
if (gfycatId != null && gfycatId.contains("-")) {
|
|
||||||
gfycatId = gfycatId.substring(0, gfycatId.indexOf('-'));
|
|
||||||
}
|
|
||||||
if (videoType == VIDEO_TYPE_GFYCAT) {
|
|
||||||
videoFileName = "Gfycat-" + gfycatId + ".mp4";
|
|
||||||
} else {
|
|
||||||
videoFileName = "Redgifs-" + gfycatId + ".mp4";
|
|
||||||
}
|
|
||||||
loadGfycatOrRedgifsVideo(gfycatRetrofit, gfycatId, true, savedInstanceState, true);
|
|
||||||
} else if (post.isRedgifs()) {
|
|
||||||
videoType = VIDEO_TYPE_REDGIFS;
|
videoType = VIDEO_TYPE_REDGIFS;
|
||||||
String gfycatId = post.getGfycatId();
|
String redgifsId = post.getRedgifsId();
|
||||||
if (gfycatId != null && gfycatId.contains("-")) {
|
if (redgifsId != null && redgifsId.contains("-")) {
|
||||||
gfycatId = gfycatId.substring(0, gfycatId.indexOf('-'));
|
redgifsId = redgifsId.substring(0, redgifsId.indexOf('-'));
|
||||||
}
|
}
|
||||||
if (videoType == VIDEO_TYPE_GFYCAT) {
|
videoFileName = "Redgifs-" + redgifsId + ".mp4";
|
||||||
videoFileName = "Gfycat-" + gfycatId + ".mp4";
|
loadRedgifsVideo(redgifsId, savedInstanceState);
|
||||||
} else {
|
|
||||||
videoFileName = "Redgifs-" + gfycatId + ".mp4";
|
|
||||||
}
|
|
||||||
loadGfycatOrRedgifsVideo(redgifsRetrofit, gfycatId, false, savedInstanceState, false);
|
|
||||||
} else if (post.isStreamable()) {
|
} else if (post.isStreamable()) {
|
||||||
videoType = VIDEO_TYPE_STREAMABLE;
|
videoType = VIDEO_TYPE_STREAMABLE;
|
||||||
String shortCode = post.getStreamableShortCode();
|
String shortCode = post.getStreamableShortCode();
|
||||||
@@ -884,7 +824,7 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
Toast.makeText(ViewVideoActivity.this, R.string.fetch_streamable_video_failed, Toast.LENGTH_SHORT).show();
|
Toast.makeText(ViewVideoActivity.this, R.string.fetch_streamable_video_failed, Toast.LENGTH_SHORT).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setSmallTitle(streamableVideo.title);
|
titleTextView.setText(streamableVideo.title);
|
||||||
progressBar.setVisibility(View.GONE);
|
progressBar.setVisibility(View.GONE);
|
||||||
videoDownloadUrl = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile.url : streamableVideo.mp4.url;
|
videoDownloadUrl = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile.url : streamableVideo.mp4.url;
|
||||||
mVideoUri = Uri.parse(videoDownloadUrl);
|
mVideoUri = Uri.parse(videoDownloadUrl);
|
||||||
@@ -939,11 +879,7 @@ public class ViewVideoActivity extends AppCompatActivity implements CustomFontRe
|
|||||||
requestPermissionAndDownload();
|
requestPermissionAndDownload();
|
||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.id.action_playback_speed_view_video_activity) {
|
} else if (itemId == R.id.action_playback_speed_view_video_activity) {
|
||||||
PlaybackSpeedBottomSheetFragment playbackSpeedBottomSheetFragment = new PlaybackSpeedBottomSheetFragment();
|
changePlaybackSpeed();
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putInt(PlaybackSpeedBottomSheetFragment.EXTRA_PLAYBACK_SPEED, playbackSpeed);
|
|
||||||
playbackSpeedBottomSheetFragment.setArguments(bundle);
|
|
||||||
playbackSpeedBottomSheetFragment.show(getSupportFragmentManager(), playbackSpeedBottomSheetFragment.getTag());
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,16 +35,9 @@ import javax.inject.Named;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
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.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment;
|
import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
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.JSONUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
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.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class WikiActivity extends BaseActivity {
|
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.setEnabled(mSharedPreferences.getBoolean(SharedPreferencesUtils.PULL_TO_REFRESH, true));
|
||||||
swipeRefreshLayout.setOnRefreshListener(this::loadWiki);
|
swipeRefreshLayout.setOnRefreshListener(this::loadWiki);
|
||||||
@@ -177,7 +176,7 @@ public class WikiActivity extends BaseActivity {
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
markwon = MarkdownUtils.createFullRedditMarkwon(this,
|
markwon = MarkdownUtils.createFullRedditMarkwon(this,
|
||||||
miscPlugin, markdownColor, spoilerBackgroundColor, onLinkLongClickListener);
|
miscPlugin, markdownColor, spoilerBackgroundColor, mGlide, onLinkLongClickListener, mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false));
|
||||||
|
|
||||||
markwonAdapter = MarkdownUtils.createTablesAdapter();
|
markwonAdapter = MarkdownUtils.createTablesAdapter();
|
||||||
LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(this, new SwipeLockInterface() {
|
LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(this, new SwipeLockInterface() {
|
||||||
@@ -219,7 +218,7 @@ public class WikiActivity extends BaseActivity {
|
|||||||
|
|
||||||
swipeRefreshLayout.setRefreshing(true);
|
swipeRefreshLayout.setRefreshing(true);
|
||||||
|
|
||||||
Glide.with(this).clear(mFetchWikiInfoImageView);
|
Glide.with(getApplication()).clear(mFetchWikiInfoImageView);
|
||||||
mFetchWikiInfoLinearLayout.setVisibility(View.GONE);
|
mFetchWikiInfoLinearLayout.setVisibility(View.GONE);
|
||||||
|
|
||||||
retrofit.getRetrofit().create(RedditAPI.class).getWikiPage(getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME), getIntent().getStringExtra(EXTRA_WIKI_PATH)).enqueue(new Callback<String>() {
|
retrofit.getRetrofit().create(RedditAPI.class).getWikiPage(getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME), getIntent().getStringExtra(EXTRA_WIKI_PATH)).enqueue(new Callback<String>() {
|
||||||
@@ -260,7 +259,7 @@ public class WikiActivity extends BaseActivity {
|
|||||||
swipeRefreshLayout.setRefreshing(false);
|
swipeRefreshLayout.setRefreshing(false);
|
||||||
mFetchWikiInfoLinearLayout.setVisibility(View.VISIBLE);
|
mFetchWikiInfoLinearLayout.setVisibility(View.VISIBLE);
|
||||||
mFetchWikiInfoTextView.setText(stringResId);
|
mFetchWikiInfoTextView.setText(stringResId);
|
||||||
mGlide.load(R.drawable.error_image).into(mFetchWikiInfoImageView);
|
mGlide.load(R.mipmap.ic_launcher_round).into(mFetchWikiInfoImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -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,279 @@
|
|||||||
|
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.InstanceInfoActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.blockedinstances.BlockedInstanceData;
|
||||||
|
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 BlockedInstancesRecyclerViewAdapter 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<BlockedInstanceData> mBlockedInstanceData;
|
||||||
|
private List<BlockedInstanceData> mFavoriteBlockedInstanceData;
|
||||||
|
private RequestManager glide;
|
||||||
|
private ItemClickListener itemClickListener;
|
||||||
|
|
||||||
|
private String accessToken;
|
||||||
|
private String instancename;
|
||||||
|
private String instanceIconUrl;
|
||||||
|
private boolean hasClearSelectionRow;
|
||||||
|
|
||||||
|
private int primaryTextColor;
|
||||||
|
private int secondaryTextColor;
|
||||||
|
|
||||||
|
public BlockedInstancesRecyclerViewAdapter(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 BlockedInstancesRecyclerViewAdapter(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 (mFavoriteBlockedInstanceData != null && mFavoriteBlockedInstanceData.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 == mFavoriteBlockedInstanceData.size() + 2) {
|
||||||
|
return VIEW_TYPE_SUBREDDIT_DIVIDER;
|
||||||
|
} else if (position <= mFavoriteBlockedInstanceData.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 == mFavoriteBlockedInstanceData.size() + 3) {
|
||||||
|
return VIEW_TYPE_SUBREDDIT_DIVIDER;
|
||||||
|
} else if (position <= mFavoriteBlockedInstanceData.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 == mFavoriteBlockedInstanceData.size() + 1) {
|
||||||
|
return VIEW_TYPE_SUBREDDIT_DIVIDER;
|
||||||
|
} else if (position <= mFavoriteBlockedInstanceData.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) {
|
||||||
|
return new InstanceViewHolder(LayoutInflater.from(viewGroup.getContext())
|
||||||
|
.inflate(R.layout.item_subscribed_thing, viewGroup, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int i) {
|
||||||
|
|
||||||
|
String name;
|
||||||
|
String iconUrl;
|
||||||
|
|
||||||
|
if (hasClearSelectionRow && viewHolder.getBindingAdapterPosition() == 0) {
|
||||||
|
((InstanceViewHolder) viewHolder).subredditNameTextView.setText(R.string.all_communities);
|
||||||
|
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(null));
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
int offset = hasClearSelectionRow ? 1 : 0;
|
||||||
|
BlockedInstanceData instanceData = mBlockedInstanceData.get(viewHolder.getBindingAdapterPosition() - offset);
|
||||||
|
String domain = mBlockedInstanceData.get(viewHolder.getBindingAdapterPosition() - offset).getDomain();
|
||||||
|
String instanceName = mBlockedInstanceData.get(viewHolder.getBindingAdapterPosition() - offset).getName();
|
||||||
|
name = instanceName != null ? instanceName + " (" + domain + ")" : domain;
|
||||||
|
iconUrl = mBlockedInstanceData.get(viewHolder.getBindingAdapterPosition() - offset).getIcon();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
((InstanceViewHolder) viewHolder).itemView.setOnClickListener(view -> {
|
||||||
|
if (mBlockedInstanceData != null) {
|
||||||
|
BlockedInstanceData instanceData = mBlockedInstanceData.get(viewHolder.getBindingAdapterPosition());
|
||||||
|
Intent intent = new Intent(mActivity, InstanceInfoActivity.class);
|
||||||
|
intent.putExtra(InstanceInfoActivity.EXTRA_INSTANCE_DOMAIN, instanceData.getDomain());
|
||||||
|
intent.putExtra(InstanceInfoActivity.EXTRA_INSTANCE_ID, instanceData.getId());
|
||||||
|
mActivity.startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
if (iconUrl == null || iconUrl.equals("")) {
|
||||||
|
((InstanceViewHolder) viewHolder).iconGifImageView.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
((InstanceViewHolder) viewHolder).iconGifImageView.setVisibility(View.VISIBLE);
|
||||||
|
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(((InstanceViewHolder) viewHolder).iconGifImageView);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
((InstanceViewHolder) viewHolder).subredditNameTextView.setText(name);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
if (mBlockedInstanceData != null) {
|
||||||
|
|
||||||
|
if (itemClickListener != null) {
|
||||||
|
return mBlockedInstanceData.size() > 0 ? mBlockedInstanceData.size() + ((hasClearSelectionRow) ? 1 : 0) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mBlockedInstanceData.size();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
||||||
|
glide.clear(((InstanceViewHolder) holder).iconGifImageView);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void blockedInstances(List<BlockedInstanceData> subscribedSubreddits) {
|
||||||
|
mBlockedInstanceData = subscribedSubreddits;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFavoriteSubscribedSubreddits(List<BlockedInstanceData> favoriteBlockedInstanceData) {
|
||||||
|
mFavoriteBlockedInstanceData = favoriteBlockedInstanceData;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addInstance(String instancename, String instanceIconUrl) {
|
||||||
|
this.instancename = instancename;
|
||||||
|
this.instanceIconUrl = instanceIconUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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 = (mFavoriteBlockedInstanceData != null && mFavoriteBlockedInstanceData.size() > 0) ?
|
||||||
|
mFavoriteBlockedInstanceData.size() + 4 : 0;
|
||||||
|
} else {
|
||||||
|
offset = (mFavoriteBlockedInstanceData != null && mFavoriteBlockedInstanceData.size() > 0) ?
|
||||||
|
mFavoriteBlockedInstanceData.size() + 3 : 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
offset = (mFavoriteBlockedInstanceData != null && mFavoriteBlockedInstanceData.size() > 0) ?
|
||||||
|
mFavoriteBlockedInstanceData.size() + 2 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mBlockedInstanceData.get(position - offset).getDomain().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 mFavoriteBlockedInstanceData.get(position - offset).getDomain().substring(0, 1).toUpperCase();
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ItemClickListener {
|
||||||
|
void onClick(BlockedInstanceData subredditData);
|
||||||
|
}
|
||||||
|
|
||||||
|
class InstanceViewHolder 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 instanceInstanceTextView;
|
||||||
|
|
||||||
|
InstanceViewHolder(View itemView) {
|
||||||
|
super(itemView);
|
||||||
|
ButterKnife.bind(this, itemView);
|
||||||
|
if (mActivity.typeface != null) {
|
||||||
|
subredditNameTextView.setTypeface(mActivity.typeface);
|
||||||
|
}
|
||||||
|
subredditNameTextView.setTextColor(primaryTextColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.adapters;
|
||||||
|
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.R;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilterUsage;
|
||||||
|
import eu.toldi.infinityforlemmy.databinding.ItemCommentFilterUsageEmbeddedBinding;
|
||||||
|
|
||||||
|
|
||||||
|
public class CommentFilterUsageEmbeddedRecyclerViewAdapter extends RecyclerView.Adapter<CommentFilterUsageEmbeddedRecyclerViewAdapter.EntryViewHolder> {
|
||||||
|
private BaseActivity baseActivity;
|
||||||
|
private List<CommentFilterUsage> commentFilterUsageList;
|
||||||
|
|
||||||
|
public CommentFilterUsageEmbeddedRecyclerViewAdapter(BaseActivity baseActivity) {
|
||||||
|
this.baseActivity = baseActivity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public EntryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
return new EntryViewHolder(ItemCommentFilterUsageEmbeddedBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull EntryViewHolder holder, int position) {
|
||||||
|
if (commentFilterUsageList == null || commentFilterUsageList.isEmpty()) {
|
||||||
|
holder.textView.setText(R.string.comment_filter_applied_to_all_subreddits);
|
||||||
|
} else if (holder.getBindingAdapterPosition() > 4) {
|
||||||
|
holder.textView.setText(baseActivity.getString(R.string.comment_filter_usage_embedded_more_count, commentFilterUsageList.size() - 5));
|
||||||
|
} else {
|
||||||
|
CommentFilterUsage commentFilterUsage = commentFilterUsageList.get(holder.getBindingAdapterPosition());
|
||||||
|
switch (commentFilterUsage.usage) {
|
||||||
|
case CommentFilterUsage.SUBREDDIT_TYPE:
|
||||||
|
holder.textView.setText("r/" + commentFilterUsage.nameOfUsage);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return commentFilterUsageList == null || commentFilterUsageList.isEmpty() ? 1 : (commentFilterUsageList.size() > 5 ? 6 : commentFilterUsageList.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCommentFilterUsageList(List<CommentFilterUsage> commentFilterUsageList) {
|
||||||
|
this.commentFilterUsageList = commentFilterUsageList;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
class EntryViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
TextView textView;
|
||||||
|
|
||||||
|
public EntryViewHolder(@NonNull ItemCommentFilterUsageEmbeddedBinding binding) {
|
||||||
|
super(binding.getRoot());
|
||||||
|
textView = binding.getRoot();
|
||||||
|
textView.setTextColor(baseActivity.customThemeWrapper.getSecondaryTextColor());
|
||||||
|
|
||||||
|
if (baseActivity.typeface != null) {
|
||||||
|
textView.setTypeface(baseActivity.typeface);
|
||||||
|
}
|
||||||
|
|
||||||
|
textView.setOnClickListener(view -> {
|
||||||
|
Toast.makeText(baseActivity, textView.getText(), Toast.LENGTH_SHORT).show();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.adapters;
|
||||||
|
|
||||||
|
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 java.util.List;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.R;
|
||||||
|
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilterUsage;
|
||||||
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
|
||||||
|
|
||||||
|
public class CommentFilterUsageRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
|
private List<CommentFilterUsage> commentFilterUsages;
|
||||||
|
private BaseActivity activity;
|
||||||
|
private CustomThemeWrapper customThemeWrapper;
|
||||||
|
private CommentFilterUsageRecyclerViewAdapter.OnItemClickListener onItemClickListener;
|
||||||
|
|
||||||
|
public interface OnItemClickListener {
|
||||||
|
void onClick(CommentFilterUsage commentFilterUsage);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommentFilterUsageRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper,
|
||||||
|
CommentFilterUsageRecyclerViewAdapter.OnItemClickListener onItemClickListener) {
|
||||||
|
this.activity = activity;
|
||||||
|
this.customThemeWrapper = customThemeWrapper;
|
||||||
|
this.onItemClickListener = onItemClickListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
return new CommentFilterUsageRecyclerViewAdapter.CommentFilterUsageViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_filter_usage, parent, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||||
|
CommentFilterUsage commentFilterUsage = commentFilterUsages.get(position);
|
||||||
|
switch (commentFilterUsage.usage) {
|
||||||
|
case CommentFilterUsage.SUBREDDIT_TYPE:
|
||||||
|
((CommentFilterUsageRecyclerViewAdapter.CommentFilterUsageViewHolder) holder).usageTextView.setText(activity.getString(R.string.post_filter_usage_community, commentFilterUsage.nameOfUsage));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return commentFilterUsages == null ? 0 : commentFilterUsages.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCommentFilterUsages(List<CommentFilterUsage> commentFilterUsages) {
|
||||||
|
this.commentFilterUsages = commentFilterUsages;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class CommentFilterUsageViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
TextView usageTextView;
|
||||||
|
|
||||||
|
public CommentFilterUsageViewHolder(@NonNull View itemView) {
|
||||||
|
super(itemView);
|
||||||
|
usageTextView = (TextView) itemView;
|
||||||
|
|
||||||
|
usageTextView.setTextColor(customThemeWrapper.getPrimaryTextColor());
|
||||||
|
|
||||||
|
if (activity.typeface != null) {
|
||||||
|
usageTextView.setTypeface(activity.typeface);
|
||||||
|
}
|
||||||
|
|
||||||
|
usageTextView.setOnClickListener(view -> {
|
||||||
|
onItemClickListener.onClick(commentFilterUsages.get(getBindingAdapterPosition()));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.adapters;
|
||||||
|
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter;
|
||||||
|
import eu.toldi.infinityforlemmy.commentfilter.CommentFilterWithUsage;
|
||||||
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
|
import eu.toldi.infinityforlemmy.databinding.ItemCommentFilterWithUsageBinding;
|
||||||
|
|
||||||
|
|
||||||
|
public class CommentFilterWithUsageRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
|
private BaseActivity activity;
|
||||||
|
private final OnItemClickListener onItemClickListener;
|
||||||
|
private List<CommentFilterWithUsage> commentFilterWithUsageList;
|
||||||
|
private RecyclerView.RecycledViewPool recycledViewPool;
|
||||||
|
|
||||||
|
public interface OnItemClickListener {
|
||||||
|
void onItemClick(CommentFilter commentFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommentFilterWithUsageRecyclerViewAdapter(BaseActivity activity, OnItemClickListener onItemClickListener) {
|
||||||
|
this.activity = activity;
|
||||||
|
this.recycledViewPool = new RecyclerView.RecycledViewPool();
|
||||||
|
this.onItemClickListener = onItemClickListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
return new CommentFilterViewHolder(ItemCommentFilterWithUsageBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||||
|
if (holder instanceof CommentFilterViewHolder) {
|
||||||
|
((CommentFilterViewHolder) holder).binding.commentFilterNameTextViewItemCommentFilter.setText(commentFilterWithUsageList.get(position).commentFilter.name);
|
||||||
|
((CommentFilterViewHolder) holder).adapter.setCommentFilterUsageList(commentFilterWithUsageList.get(position).commentFilterUsageList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return commentFilterWithUsageList == null ? 0 : commentFilterWithUsageList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCommentFilterWithUsageList(List<CommentFilterWithUsage> commentFilterWithUsageList) {
|
||||||
|
this.commentFilterWithUsageList = commentFilterWithUsageList;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class CommentFilterViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
ItemCommentFilterWithUsageBinding binding;
|
||||||
|
CommentFilterUsageEmbeddedRecyclerViewAdapter adapter;
|
||||||
|
|
||||||
|
public CommentFilterViewHolder(@NonNull ItemCommentFilterWithUsageBinding binding) {
|
||||||
|
super(binding.getRoot());
|
||||||
|
this.binding = binding;
|
||||||
|
binding.commentFilterNameTextViewItemCommentFilter.setTextColor(activity.customThemeWrapper.getPrimaryTextColor());
|
||||||
|
|
||||||
|
if (activity.typeface != null) {
|
||||||
|
binding.commentFilterNameTextViewItemCommentFilter.setTypeface(activity.typeface);
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.getRoot().setOnClickListener(view -> {
|
||||||
|
onItemClickListener.onItemClick(commentFilterWithUsageList.get(getBindingAdapterPosition()).commentFilter);
|
||||||
|
});
|
||||||
|
|
||||||
|
binding.commentFilterUsageRecyclerViewItemCommentFilter.setRecycledViewPool(recycledViewPool);
|
||||||
|
binding.commentFilterUsageRecyclerViewItemCommentFilter.setLayoutManager(new LinearLayoutManagerBugFixed(activity));
|
||||||
|
adapter = new CommentFilterUsageEmbeddedRecyclerViewAdapter(activity);
|
||||||
|
binding.commentFilterUsageRecyclerViewItemCommentFilter.setAdapter(adapter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,6 @@ import android.content.Intent;
|
|||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.PorterDuff;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
@@ -12,7 +11,6 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -26,6 +24,9 @@ import androidx.recyclerview.widget.DiffUtil;
|
|||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.google.android.material.button.MaterialButton;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
@@ -49,6 +50,7 @@ import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
|||||||
import eu.toldi.infinityforlemmy.customviews.SpoilerOnClickTextView;
|
import eu.toldi.infinityforlemmy.customviews.SpoilerOnClickTextView;
|
||||||
import eu.toldi.infinityforlemmy.customviews.SwipeLockInterface;
|
import eu.toldi.infinityforlemmy.customviews.SwipeLockInterface;
|
||||||
import eu.toldi.infinityforlemmy.customviews.SwipeLockLinearLayoutManager;
|
import eu.toldi.infinityforlemmy.customviews.SwipeLockLinearLayoutManager;
|
||||||
|
import eu.toldi.infinityforlemmy.databinding.ItemCommentBinding;
|
||||||
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
import eu.toldi.infinityforlemmy.markdown.MarkdownUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
@@ -169,7 +171,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
mMarkwon = MarkdownUtils.createFullRedditMarkwon(mActivity,
|
mMarkwon = MarkdownUtils.createFullRedditMarkwon(mActivity,
|
||||||
miscPlugin, mCommentColor, commentSpoilerBackgroundColor, onLinkLongClickListener);
|
miscPlugin, mCommentColor, commentSpoilerBackgroundColor, Glide.with(mActivity.getApplication()), onLinkLongClickListener, sharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false));
|
||||||
recycledViewPool = new RecyclerView.RecycledViewPool();
|
recycledViewPool = new RecyclerView.RecycledViewPool();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +179,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
@Override
|
@Override
|
||||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
if (viewType == VIEW_TYPE_DATA) {
|
if (viewType == VIEW_TYPE_DATA) {
|
||||||
return new CommentViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_comment, parent, false));
|
return new CommentViewHolder(ItemCommentBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
|
||||||
} else if (viewType == VIEW_TYPE_ERROR) {
|
} else if (viewType == VIEW_TYPE_ERROR) {
|
||||||
return new ErrorViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false));
|
return new ErrorViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false));
|
||||||
} else {
|
} else {
|
||||||
@@ -187,24 +189,21 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||||
if (holder instanceof CommentViewHolder) {
|
if (holder instanceof CommentBaseViewHolder) {
|
||||||
Comment comment = getItem(holder.getBindingAdapterPosition());
|
Comment comment = getItem(holder.getBindingAdapterPosition());
|
||||||
if (comment != null) {
|
if (comment != null) {
|
||||||
String name = comment.getCommunityQualifiedName();
|
String name = comment.getCommunityQualifiedName();
|
||||||
((CommentViewHolder) holder).authorTextView.setText(name);
|
((CommentBaseViewHolder) holder).authorTextView.setText(name);
|
||||||
((CommentViewHolder) holder).authorTextView.setTextColor(mSubredditColor);
|
((CommentBaseViewHolder) holder).authorTextView.setTextColor(mSubredditColor);
|
||||||
|
|
||||||
|
|
||||||
if (mShowElapsedTime) {
|
if (mShowElapsedTime) {
|
||||||
((CommentViewHolder) holder).commentTimeTextView.setText(
|
((CommentBaseViewHolder) holder).commentTimeTextView.setText(
|
||||||
Utils.getElapsedTime(mActivity, comment.getCommentTimeMillis()));
|
Utils.getElapsedTime(mActivity, comment.getCommentTimeMillis()));
|
||||||
} else {
|
} else {
|
||||||
((CommentViewHolder) holder).commentTimeTextView.setText(Utils.getFormattedTime(mLocale, comment.getCommentTimeMillis(), mTimeFormatPattern));
|
((CommentBaseViewHolder) holder).commentTimeTextView.setText(Utils.getFormattedTime(mLocale, comment.getCommentTimeMillis(), mTimeFormatPattern));
|
||||||
}
|
}
|
||||||
|
mMarkwon.setMarkdown(((CommentBaseViewHolder) holder).commentMarkdownView, comment.getCommentMarkdown());
|
||||||
((CommentViewHolder) holder).markwonAdapter.setMarkdown(mMarkwon, comment.getCommentMarkdown());
|
|
||||||
// noinspection NotifyDataSetChanged
|
|
||||||
((CommentViewHolder) holder).markwonAdapter.notifyDataSetChanged();
|
|
||||||
|
|
||||||
String commentText = Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
String commentText = Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||||
comment.getScore() + comment.getVoteType());
|
comment.getScore() + comment.getVoteType());
|
||||||
@@ -213,21 +212,21 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
|
|
||||||
switch (comment.getVoteType()) {
|
switch (comment.getVoteType()) {
|
||||||
case Comment.VOTE_TYPE_UPVOTE:
|
case Comment.VOTE_TYPE_UPVOTE:
|
||||||
((CommentViewHolder) holder).upvoteButton
|
((CommentBaseViewHolder) holder).upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
|
||||||
.setColorFilter(mUpvotedColor, PorterDuff.Mode.SRC_IN);
|
((CommentBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
|
||||||
((CommentViewHolder) holder).scoreTextView.setTextColor(mUpvotedColor);
|
((CommentBaseViewHolder) holder).scoreTextView.setTextColor(mUpvotedColor);
|
||||||
break;
|
break;
|
||||||
case Comment.VOTE_TYPE_DOWNVOTE:
|
case Comment.VOTE_TYPE_DOWNVOTE:
|
||||||
((CommentViewHolder) holder).downvoteButton
|
((CommentBaseViewHolder) holder).downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp);
|
||||||
.setColorFilter(mDownvotedColor, PorterDuff.Mode.SRC_IN);
|
((CommentBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor));
|
||||||
((CommentViewHolder) holder).scoreTextView.setTextColor(mDownvotedColor);
|
((CommentBaseViewHolder) holder).scoreTextView.setTextColor(mDownvotedColor);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (comment.isSaved()) {
|
if (comment.isSaved()) {
|
||||||
((CommentViewHolder) holder).saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
((CommentBaseViewHolder) holder).saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
|
||||||
} else {
|
} else {
|
||||||
((CommentViewHolder) holder).saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
((CommentBaseViewHolder) holder).saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -249,14 +248,14 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
||||||
if (holder instanceof CommentViewHolder) {
|
if (holder instanceof CommentBaseViewHolder) {
|
||||||
((CommentViewHolder) holder).authorFlairTextView.setText("");
|
((CommentBaseViewHolder) holder).authorFlairTextView.setText("");
|
||||||
((CommentViewHolder) holder).authorFlairTextView.setVisibility(View.GONE);
|
((CommentBaseViewHolder) holder).authorFlairTextView.setVisibility(View.GONE);
|
||||||
((CommentViewHolder) holder).awardsTextView.setText("");
|
((CommentBaseViewHolder) holder).upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
|
||||||
((CommentViewHolder) holder).awardsTextView.setVisibility(View.GONE);
|
((CommentBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
((CommentViewHolder) holder).upvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
((CommentBaseViewHolder) holder).scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||||
((CommentViewHolder) holder).downvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
((CommentBaseViewHolder) holder).downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
|
||||||
((CommentViewHolder) holder).scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
((CommentBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,18 +288,18 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onItemSwipe(RecyclerView.ViewHolder viewHolder, int direction, int swipeLeftAction, int swipeRightAction) {
|
public void onItemSwipe(RecyclerView.ViewHolder viewHolder, int direction, int swipeLeftAction, int swipeRightAction) {
|
||||||
if (viewHolder instanceof CommentViewHolder) {
|
if (viewHolder instanceof CommentBaseViewHolder) {
|
||||||
if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.START) {
|
if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.START) {
|
||||||
if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
|
if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
|
||||||
((CommentViewHolder) viewHolder).upvoteButton.performClick();
|
((CommentBaseViewHolder) viewHolder).upvoteButton.performClick();
|
||||||
} else if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
|
} else if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
|
||||||
((CommentViewHolder) viewHolder).downvoteButton.performClick();
|
((CommentBaseViewHolder) viewHolder).downvoteButton.performClick();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
|
if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) {
|
||||||
((CommentViewHolder) viewHolder).upvoteButton.performClick();
|
((CommentBaseViewHolder) viewHolder).upvoteButton.performClick();
|
||||||
} else if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
|
} else if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) {
|
||||||
((CommentViewHolder) viewHolder).downvoteButton.performClick();
|
((CommentBaseViewHolder) viewHolder).downvoteButton.performClick();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -318,46 +317,56 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
void retryLoadingMore();
|
void retryLoadingMore();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CommentViewHolder extends RecyclerView.ViewHolder {
|
public class CommentBaseViewHolder extends RecyclerView.ViewHolder {
|
||||||
@BindView(R.id.vertical_block_indentation_item_comment)
|
|
||||||
CommentIndentationView commentIndentationView;
|
|
||||||
@BindView(R.id.linear_layout_item_comment)
|
|
||||||
LinearLayout linearLayout;
|
LinearLayout linearLayout;
|
||||||
@BindView(R.id.author_text_view_item_post_comment)
|
|
||||||
TextView authorTextView;
|
TextView authorTextView;
|
||||||
@BindView(R.id.author_flair_text_view_item_post_comment)
|
|
||||||
TextView authorFlairTextView;
|
TextView authorFlairTextView;
|
||||||
@BindView(R.id.comment_time_text_view_item_post_comment)
|
|
||||||
TextView commentTimeTextView;
|
TextView commentTimeTextView;
|
||||||
@BindView(R.id.awards_text_view_item_comment)
|
TextView commentMarkdownView;
|
||||||
TextView awardsTextView;
|
|
||||||
@BindView(R.id.comment_markdown_view_item_post_comment)
|
|
||||||
RecyclerView commentMarkdownView;
|
|
||||||
@BindView(R.id.bottom_constraint_layout_item_post_comment)
|
|
||||||
ConstraintLayout bottomConstraintLayout;
|
ConstraintLayout bottomConstraintLayout;
|
||||||
@BindView(R.id.up_vote_button_item_post_comment)
|
MaterialButton upvoteButton;
|
||||||
ImageView upvoteButton;
|
|
||||||
@BindView(R.id.score_text_view_item_post_comment)
|
|
||||||
TextView scoreTextView;
|
TextView scoreTextView;
|
||||||
@BindView(R.id.down_vote_button_item_post_comment)
|
MaterialButton downvoteButton;
|
||||||
ImageView downvoteButton;
|
|
||||||
@BindView(R.id.placeholder_item_post_comment)
|
|
||||||
View placeholder;
|
View placeholder;
|
||||||
@BindView(R.id.more_button_item_post_comment)
|
MaterialButton moreButton;
|
||||||
ImageView moreButton;
|
MaterialButton saveButton;
|
||||||
@BindView(R.id.save_button_item_post_comment)
|
MaterialButton replyButton;
|
||||||
ImageView saveButton;
|
|
||||||
@BindView(R.id.expand_button_item_post_comment)
|
|
||||||
TextView expandButton;
|
|
||||||
@BindView(R.id.reply_button_item_post_comment)
|
|
||||||
ImageView replyButton;
|
|
||||||
@BindView(R.id.divider_item_comment)
|
|
||||||
View commentDivider;
|
View commentDivider;
|
||||||
CustomMarkwonAdapter markwonAdapter;
|
|
||||||
|
|
||||||
CommentViewHolder(View itemView) {
|
CommentBaseViewHolder(@NonNull View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
ButterKnife.bind(this, itemView);
|
}
|
||||||
|
|
||||||
|
void setBaseView(LinearLayout linearLayout,
|
||||||
|
TextView authorTextView,
|
||||||
|
TextView authorFlairTextView,
|
||||||
|
TextView commentTimeTextView,
|
||||||
|
TextView commentMarkdownView,
|
||||||
|
ConstraintLayout bottomConstraintLayout,
|
||||||
|
MaterialButton upvoteButton,
|
||||||
|
TextView scoreTextView,
|
||||||
|
MaterialButton downvoteButton,
|
||||||
|
View placeholder,
|
||||||
|
MaterialButton moreButton,
|
||||||
|
MaterialButton saveButton,
|
||||||
|
TextView expandButton,
|
||||||
|
MaterialButton replyButton,
|
||||||
|
CommentIndentationView commentIndentationView,
|
||||||
|
View commentDivider) {
|
||||||
|
this.linearLayout = linearLayout;
|
||||||
|
this.authorTextView = authorTextView;
|
||||||
|
this.authorFlairTextView = authorFlairTextView;
|
||||||
|
this.commentTimeTextView = commentTimeTextView;
|
||||||
|
this.commentMarkdownView = commentMarkdownView;
|
||||||
|
this.bottomConstraintLayout = bottomConstraintLayout;
|
||||||
|
this.upvoteButton = upvoteButton;
|
||||||
|
this.scoreTextView = scoreTextView;
|
||||||
|
this.downvoteButton = downvoteButton;
|
||||||
|
this.placeholder = placeholder;
|
||||||
|
this.moreButton = moreButton;
|
||||||
|
this.saveButton = saveButton;
|
||||||
|
this.replyButton = replyButton;
|
||||||
|
this.commentDivider = commentDivider;
|
||||||
|
|
||||||
replyButton.setVisibility(View.GONE);
|
replyButton.setVisibility(View.GONE);
|
||||||
|
|
||||||
@@ -412,20 +421,18 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
authorTextView.setTypeface(mActivity.typeface);
|
authorTextView.setTypeface(mActivity.typeface);
|
||||||
authorFlairTextView.setTypeface(mActivity.typeface);
|
authorFlairTextView.setTypeface(mActivity.typeface);
|
||||||
commentTimeTextView.setTypeface(mActivity.typeface);
|
commentTimeTextView.setTypeface(mActivity.typeface);
|
||||||
awardsTextView.setTypeface(mActivity.typeface);
|
upvoteButton.setTypeface(mActivity.typeface);
|
||||||
scoreTextView.setTypeface(mActivity.typeface);
|
|
||||||
}
|
}
|
||||||
itemView.setBackgroundColor(mCommentBackgroundColor);
|
itemView.setBackgroundColor(mCommentBackgroundColor);
|
||||||
authorTextView.setTextColor(mUsernameColor);
|
authorTextView.setTextColor(mUsernameColor);
|
||||||
authorFlairTextView.setTextColor(mAuthorFlairColor);
|
authorFlairTextView.setTextColor(mAuthorFlairColor);
|
||||||
commentTimeTextView.setTextColor(mSecondaryTextColor);
|
commentTimeTextView.setTextColor(mSecondaryTextColor);
|
||||||
awardsTextView.setTextColor(mSecondaryTextColor);
|
upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
upvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
|
||||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||||
downvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
moreButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
moreButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
saveButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
saveButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
replyButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
replyButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
commentDivider.setBackgroundColor(mDividerColor);
|
commentDivider.setBackgroundColor(mDividerColor);
|
||||||
|
|
||||||
authorTextView.setOnClickListener(view -> {
|
authorTextView.setOnClickListener(view -> {
|
||||||
@@ -450,7 +457,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
Comment comment = getItem(getBindingAdapterPosition());
|
Comment comment = getItem(getBindingAdapterPosition());
|
||||||
if (comment != null) {
|
if (comment != null) {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
if (comment.getAuthor().equals(mAccountName)) {
|
if (comment.getAuthorName().equals(mAccountName)) {
|
||||||
bundle.putBoolean(CommentMoreBottomSheetFragment.EXTRA_EDIT_AND_DELETE_AVAILABLE, true);
|
bundle.putBoolean(CommentMoreBottomSheetFragment.EXTRA_EDIT_AND_DELETE_AVAILABLE, true);
|
||||||
}
|
}
|
||||||
bundle.putString(CommentMoreBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(CommentMoreBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
@@ -472,11 +479,12 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
Intent intent = new Intent(mActivity, ViewPostDetailActivity.class);
|
Intent intent = new Intent(mActivity, ViewPostDetailActivity.class);
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getPostId());
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, comment.getPostId());
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, comment.getId());
|
||||||
|
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_PARENT_ID, comment.getParentId());
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
commentMarkdownView.setRecycledViewPool(recycledViewPool);
|
|
||||||
LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(mActivity, new SwipeLockInterface() {
|
LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(mActivity, new SwipeLockInterface() {
|
||||||
@Override
|
@Override
|
||||||
public void lockSwipe() {
|
public void lockSwipe() {
|
||||||
@@ -488,18 +496,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
mActivity.unlockSwipeRightToGoBack();
|
mActivity.unlockSwipeRightToGoBack();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
commentMarkdownView.setLayoutManager(linearLayoutManager);
|
|
||||||
markwonAdapter = MarkdownUtils.createCustomTablesAdapter();
|
|
||||||
markwonAdapter.setOnClickListener(view -> {
|
|
||||||
if (view instanceof SpoilerOnClickTextView) {
|
|
||||||
if (((SpoilerOnClickTextView) view).isSpoilerOnClick()) {
|
|
||||||
((SpoilerOnClickTextView) view).setSpoilerOnClick(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
itemView.callOnClick();
|
|
||||||
});
|
|
||||||
commentMarkdownView.setAdapter(markwonAdapter);
|
|
||||||
|
|
||||||
upvoteButton.setOnClickListener(view -> {
|
upvoteButton.setOnClickListener(view -> {
|
||||||
if (mAccessToken == null) {
|
if (mAccessToken == null) {
|
||||||
@@ -516,20 +513,22 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
int previousVoteType = comment.getVoteType();
|
int previousVoteType = comment.getVoteType();
|
||||||
int newVoteType;
|
int newVoteType;
|
||||||
|
|
||||||
downvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
|
||||||
|
downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
|
|
||||||
if (previousVoteType != Comment.VOTE_TYPE_UPVOTE) {
|
if (previousVoteType != Comment.VOTE_TYPE_UPVOTE) {
|
||||||
//Not upvoted before
|
//Not upvoted before
|
||||||
comment.setVoteType(Comment.VOTE_TYPE_UPVOTE);
|
comment.setVoteType(Comment.VOTE_TYPE_UPVOTE);
|
||||||
newVoteType = Integer.parseInt(APIUtils.DIR_UPVOTE);
|
newVoteType = Integer.parseInt(APIUtils.DIR_UPVOTE);
|
||||||
upvoteButton
|
upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
|
||||||
.setColorFilter(mUpvotedColor, PorterDuff.Mode.SRC_IN);
|
upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
|
||||||
scoreTextView.setTextColor(mUpvotedColor);
|
scoreTextView.setTextColor(mUpvotedColor);
|
||||||
} else {
|
} else {
|
||||||
//Upvoted before
|
//Upvoted before
|
||||||
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
|
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
|
||||||
newVoteType = Integer.parseInt(APIUtils.DIR_UNVOTE);
|
newVoteType = Integer.parseInt(APIUtils.DIR_UNVOTE);
|
||||||
upvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
|
||||||
|
upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -538,30 +537,32 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
comment.getScore() + comment.getVoteType()));
|
comment.getScore() + comment.getVoteType()));
|
||||||
|
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.voteComment(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
|
if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
|
||||||
comment.setVoteType(Comment.VOTE_TYPE_UPVOTE);
|
comment.setVoteType(Comment.VOTE_TYPE_UPVOTE);
|
||||||
if (currentPosition == position) {
|
if (currentPosition == position) {
|
||||||
upvoteButton.setColorFilter(mUpvotedColor, PorterDuff.Mode.SRC_IN);
|
upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
|
||||||
|
upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
|
||||||
scoreTextView.setTextColor(mUpvotedColor);
|
scoreTextView.setTextColor(mUpvotedColor);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
|
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
|
||||||
if (currentPosition == position) {
|
if (currentPosition == position) {
|
||||||
upvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
|
||||||
|
upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentPosition == position) {
|
if (currentPosition == position) {
|
||||||
downvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
|
||||||
|
downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
|
|
||||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||||
comment.getScore() + comment.getVoteType()));
|
comment.getScore() + comment.getVoteType()));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -572,6 +573,10 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
scoreTextView.setOnClickListener(view -> {
|
||||||
|
upvoteButton.performClick();
|
||||||
|
});
|
||||||
|
|
||||||
downvoteButton.setOnClickListener(view -> {
|
downvoteButton.setOnClickListener(view -> {
|
||||||
if (mAccessToken == null) {
|
if (mAccessToken == null) {
|
||||||
Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
|
Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
|
||||||
@@ -587,19 +592,22 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
int previousVoteType = comment.getVoteType();
|
int previousVoteType = comment.getVoteType();
|
||||||
int newVoteType;
|
int newVoteType;
|
||||||
|
|
||||||
upvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
|
||||||
|
upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
|
|
||||||
if (previousVoteType != Comment.VOTE_TYPE_DOWNVOTE) {
|
if (previousVoteType != Comment.VOTE_TYPE_DOWNVOTE) {
|
||||||
//Not downvoted before
|
//Not downvoted before
|
||||||
comment.setVoteType(Comment.VOTE_TYPE_DOWNVOTE);
|
comment.setVoteType(Comment.VOTE_TYPE_DOWNVOTE);
|
||||||
newVoteType = Integer.parseInt(APIUtils.DIR_DOWNVOTE);
|
newVoteType = Integer.parseInt(APIUtils.DIR_DOWNVOTE);
|
||||||
downvoteButton.setColorFilter(mDownvotedColor, PorterDuff.Mode.SRC_IN);
|
downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp);
|
||||||
|
downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor));
|
||||||
scoreTextView.setTextColor(mDownvotedColor);
|
scoreTextView.setTextColor(mDownvotedColor);
|
||||||
} else {
|
} else {
|
||||||
//Downvoted before
|
//Downvoted before
|
||||||
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
|
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
|
||||||
newVoteType = Integer.parseInt(APIUtils.DIR_UNVOTE);
|
newVoteType = Integer.parseInt(APIUtils.DIR_UNVOTE);
|
||||||
downvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
|
||||||
|
downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -608,29 +616,31 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
comment.getScore() + comment.getVoteType()));
|
comment.getScore() + comment.getVoteType()));
|
||||||
|
|
||||||
|
|
||||||
VoteThing.votePost(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
VoteThing.voteComment(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onVoteThingSuccess(int position1) {
|
public void onVoteThingSuccess(int position1) {
|
||||||
int currentPosition = getBindingAdapterPosition();
|
int currentPosition = getBindingAdapterPosition();
|
||||||
if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
|
if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
|
||||||
comment.setVoteType(Comment.VOTE_TYPE_DOWNVOTE);
|
comment.setVoteType(Comment.VOTE_TYPE_DOWNVOTE);
|
||||||
if (currentPosition == position) {
|
if (currentPosition == position) {
|
||||||
downvoteButton.setColorFilter(mDownvotedColor, PorterDuff.Mode.SRC_IN);
|
downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp);
|
||||||
|
downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor));
|
||||||
scoreTextView.setTextColor(mDownvotedColor);
|
scoreTextView.setTextColor(mDownvotedColor);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
|
comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
|
||||||
if (currentPosition == position) {
|
if (currentPosition == position) {
|
||||||
downvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
|
||||||
|
downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
scoreTextView.setTextColor(mCommentIconAndInfoColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentPosition == position) {
|
if (currentPosition == position) {
|
||||||
upvoteButton.setColorFilter(mCommentIconAndInfoColor, PorterDuff.Mode.SRC_IN);
|
upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
|
||||||
|
upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
|
||||||
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
|
||||||
comment.getScore() + comment.getVoteType()));
|
comment.getScore() + comment.getVoteType()));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -656,7 +666,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
public void success() {
|
public void success() {
|
||||||
comment.setSaved(false);
|
comment.setSaved(false);
|
||||||
if (getBindingAdapterPosition() == position) {
|
if (getBindingAdapterPosition() == position) {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||||
}
|
}
|
||||||
Toast.makeText(mActivity, R.string.comment_unsaved_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(mActivity, R.string.comment_unsaved_success, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
@@ -665,7 +675,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
public void failed() {
|
public void failed() {
|
||||||
comment.setSaved(true);
|
comment.setSaved(true);
|
||||||
if (getBindingAdapterPosition() == position) {
|
if (getBindingAdapterPosition() == position) {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
|
||||||
}
|
}
|
||||||
Toast.makeText(mActivity, R.string.comment_unsaved_failed, Toast.LENGTH_SHORT).show();
|
Toast.makeText(mActivity, R.string.comment_unsaved_failed, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
@@ -677,7 +687,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
public void success() {
|
public void success() {
|
||||||
comment.setSaved(true);
|
comment.setSaved(true);
|
||||||
if (getBindingAdapterPosition() == position) {
|
if (getBindingAdapterPosition() == position) {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_grey_24dp);
|
saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
|
||||||
}
|
}
|
||||||
Toast.makeText(mActivity, R.string.comment_saved_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(mActivity, R.string.comment_saved_success, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
@@ -686,7 +696,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
public void failed() {
|
public void failed() {
|
||||||
comment.setSaved(false);
|
comment.setSaved(false);
|
||||||
if (getBindingAdapterPosition() == position) {
|
if (getBindingAdapterPosition() == position) {
|
||||||
saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp);
|
saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
|
||||||
}
|
}
|
||||||
Toast.makeText(mActivity, R.string.comment_saved_failed, Toast.LENGTH_SHORT).show();
|
Toast.makeText(mActivity, R.string.comment_saved_failed, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
@@ -697,6 +707,31 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class CommentViewHolder extends CommentBaseViewHolder {
|
||||||
|
ItemCommentBinding binding;
|
||||||
|
|
||||||
|
CommentViewHolder(ItemCommentBinding binding) {
|
||||||
|
super(binding.getRoot());
|
||||||
|
this.binding = binding;
|
||||||
|
setBaseView(binding.linearLayoutItemComment,
|
||||||
|
binding.authorTextViewItemPostComment,
|
||||||
|
binding.authorFlairTextViewItemPostComment,
|
||||||
|
binding.commentTimeTextViewItemPostComment,
|
||||||
|
binding.commentMarkdownViewItemPostComment,
|
||||||
|
binding.bottomConstraintLayoutItemPostComment,
|
||||||
|
binding.upvoteButtonItemPostComment,
|
||||||
|
binding.scoreTextViewItemPostComment,
|
||||||
|
binding.downvoteButtonItemPostComment,
|
||||||
|
binding.placeholderItemPostComment,
|
||||||
|
binding.moreButtonItemPostComment,
|
||||||
|
binding.saveButtonItemPostComment,
|
||||||
|
binding.expandButtonItemPostComment,
|
||||||
|
binding.replyButtonItemPostComment,
|
||||||
|
binding.verticalBlockIndentationItemComment,
|
||||||
|
binding.dividerItemComment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class ErrorViewHolder extends RecyclerView.ViewHolder {
|
class ErrorViewHolder extends RecyclerView.ViewHolder {
|
||||||
@BindView(R.id.error_text_view_item_footer_error)
|
@BindView(R.id.error_text_view_item_footer_error)
|
||||||
TextView errorTextView;
|
TextView errorTextView;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.adapters;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
|
||||||
|
public class CustomArrayAdapter extends ArrayAdapter<String> {
|
||||||
|
|
||||||
|
CustomThemeWrapper customThemeWrapper;
|
||||||
|
|
||||||
|
public CustomArrayAdapter(@NonNull Context context, int textViewResourceId, @NonNull List<String> objects, CustomThemeWrapper customThemeWrapper) {
|
||||||
|
super(context, textViewResourceId, objects);
|
||||||
|
this.customThemeWrapper = customThemeWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
TextView itemView = (TextView) super.getView(position, convertView, parent);
|
||||||
|
itemView.setTextColor(customThemeWrapper.getPrimaryTextColor()); // Set the text color
|
||||||
|
itemView.setBackgroundColor(customThemeWrapper.getBackgroundColor()); // Set the background color
|
||||||
|
// Apply any other styling as needed
|
||||||
|
return itemView;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
||||||
|
TextView itemView = (TextView) super.getDropDownView(position, convertView, parent);
|
||||||
|
itemView.setTextColor(customThemeWrapper.getPrimaryTextColor()); // Set the text color
|
||||||
|
itemView.setBackgroundColor(customThemeWrapper.getBackgroundColor()); // Set the background color
|
||||||
|
// Apply any other styling as needed
|
||||||
|
return itemView;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -52,7 +52,7 @@ public class FlairBottomSheetRecyclerViewAdapter extends RecyclerView.Adapter<Fl
|
|||||||
flairEditText.requestFocus();
|
flairEditText.requestFocus();
|
||||||
Utils.showKeyboard(activity, new Handler(), flairEditText);
|
Utils.showKeyboard(activity, new Handler(), flairEditText);
|
||||||
new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme)
|
new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme)
|
||||||
.setTitle(R.string.edit_flair)
|
.setTitle("")
|
||||||
.setView(dialogView)
|
.setView(dialogView)
|
||||||
.setPositiveButton(R.string.ok, (dialogInterface, i)
|
.setPositiveButton(R.string.ok, (dialogInterface, i)
|
||||||
-> {
|
-> {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -42,7 +42,7 @@ import io.noties.markwon.Markwon;
|
|||||||
import io.noties.markwon.MarkwonConfiguration;
|
import io.noties.markwon.MarkwonConfiguration;
|
||||||
import io.noties.markwon.core.MarkwonTheme;
|
import io.noties.markwon.core.MarkwonTheme;
|
||||||
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
|
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
|
||||||
import io.noties.markwon.inlineparser.BangInlineProcessor;
|
import io.noties.markwon.image.glide.GlideImagesPlugin;
|
||||||
import io.noties.markwon.inlineparser.HtmlInlineProcessor;
|
import io.noties.markwon.inlineparser.HtmlInlineProcessor;
|
||||||
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin;
|
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin;
|
||||||
import io.noties.markwon.linkify.LinkifyPlugin;
|
import io.noties.markwon.linkify.LinkifyPlugin;
|
||||||
@@ -105,7 +105,6 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<CommentInteract
|
|||||||
mMarkwon = Markwon.builder(mActivity)
|
mMarkwon = Markwon.builder(mActivity)
|
||||||
.usePlugin(MarkwonInlineParserPlugin.create(plugin -> {
|
.usePlugin(MarkwonInlineParserPlugin.create(plugin -> {
|
||||||
plugin.excludeInlineProcessor(HtmlInlineProcessor.class);
|
plugin.excludeInlineProcessor(HtmlInlineProcessor.class);
|
||||||
plugin.excludeInlineProcessor(BangInlineProcessor.class);
|
|
||||||
}))
|
}))
|
||||||
.usePlugin(new AbstractMarkwonPlugin() {
|
.usePlugin(new AbstractMarkwonPlugin() {
|
||||||
@Override
|
@Override
|
||||||
@@ -129,6 +128,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<CommentInteract
|
|||||||
.usePlugin(StrikethroughPlugin.create())
|
.usePlugin(StrikethroughPlugin.create())
|
||||||
.usePlugin(MovementMethodPlugin.create(new SpoilerAwareMovementMethod()))
|
.usePlugin(MovementMethodPlugin.create(new SpoilerAwareMovementMethod()))
|
||||||
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
.usePlugin(LinkifyPlugin.create(Linkify.WEB_URLS))
|
||||||
|
.usePlugin(GlideImagesPlugin.create(mActivity))
|
||||||
.build();
|
.build();
|
||||||
mAccessToken = accessToken;
|
mAccessToken = accessToken;
|
||||||
if (where.equals(FetchMessage.WHERE_MESSAGES)) {
|
if (where.equals(FetchMessage.WHERE_MESSAGES)) {
|
||||||
@@ -156,7 +156,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<CommentInteract
|
|||||||
CommentInteraction message = getItem(holder.getBindingAdapterPosition());
|
CommentInteraction message = getItem(holder.getBindingAdapterPosition());
|
||||||
if (message != null) {
|
if (message != null) {
|
||||||
|
|
||||||
if (message.isRead()) {
|
if (!message.isRead()) {
|
||||||
if (markAllMessagesAsRead) {
|
if (markAllMessagesAsRead) {
|
||||||
message.markAsRead();
|
message.markAsRead();
|
||||||
} else {
|
} else {
|
||||||
@@ -182,6 +182,9 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<CommentInteract
|
|||||||
|
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, message.getComment().getPostId());
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, message.getComment().getPostId());
|
||||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, message.getComment().getId());
|
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);
|
mActivity.startActivity(intent);
|
||||||
} else if (mMessageType == FetchMessage.MESSAGE_TYPE_PRIVATE_MESSAGE) {
|
} else if (mMessageType == FetchMessage.MESSAGE_TYPE_PRIVATE_MESSAGE) {
|
||||||
Intent intent = new Intent(mActivity, ViewPrivateMessagesActivity.class);
|
Intent intent = new Intent(mActivity, ViewPrivateMessagesActivity.class);
|
||||||
@@ -190,7 +193,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<CommentInteract
|
|||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.isRead()) {
|
if (!message.isRead()) {
|
||||||
holder.itemView.setBackgroundColor(mMessageBackgroundColor);
|
holder.itemView.setBackgroundColor(mMessageBackgroundColor);
|
||||||
|
|
||||||
|
|
||||||
@@ -214,7 +217,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<CommentInteract
|
|||||||
((DataViewHolder) holder).authorTextView.setOnClickListener(view -> {
|
((DataViewHolder) holder).authorTextView.setOnClickListener(view -> {
|
||||||
|
|
||||||
Intent intent = new Intent(mActivity, ViewUserDetailActivity.class);
|
Intent intent = new Intent(mActivity, ViewUserDetailActivity.class);
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getComment().getAuthor());
|
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getComment().getAuthorName());
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, message.getComment().getAuthorQualifiedName());
|
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, message.getComment().getAuthorQualifiedName());
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,6 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
@@ -20,15 +19,14 @@ import java.util.concurrent.Executor;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
|
||||||
import me.zhanghai.android.fastscroll.PopupTextProvider;
|
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.InsertMultireddit;
|
import eu.toldi.infinityforlemmy.asynctasks.InsertMultireddit;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.FavoriteMultiReddit;
|
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
|
import me.zhanghai.android.fastscroll.PopupTextProvider;
|
||||||
import pl.droidsonroids.gif.GifImageView;
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
@@ -54,6 +52,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
|
|
||||||
public interface OnItemClickListener {
|
public interface OnItemClickListener {
|
||||||
void onClick(MultiReddit multiReddit);
|
void onClick(MultiReddit multiReddit);
|
||||||
|
|
||||||
void onLongClick(MultiReddit multiReddit);
|
void onLongClick(MultiReddit multiReddit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,70 +129,21 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
if (multiReddit.isFavorite()) {
|
if (multiReddit.isFavorite()) {
|
||||||
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
||||||
multiReddit.setFavorite(false);
|
multiReddit.setFavorite(false);
|
||||||
if (mAccessToken == null) {
|
|
||||||
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
||||||
() -> {
|
() -> {
|
||||||
//Do nothing
|
//Do nothing
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
|
|
||||||
mAccessToken, false, multiReddit,
|
|
||||||
new FavoriteMultiReddit.FavoriteMultiRedditListener() {
|
|
||||||
@Override
|
|
||||||
public void success() {
|
|
||||||
int position = holder.getBindingAdapterPosition() - offset;
|
|
||||||
if(position >= 0 && mMultiReddits.size() > position) {
|
|
||||||
mMultiReddits.get(position).setFavorite(false);
|
|
||||||
}
|
|
||||||
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Toast.makeText(mActivity, R.string.thing_unfavorite_failed, Toast.LENGTH_SHORT).show();
|
|
||||||
int position = holder.getBindingAdapterPosition() - offset;
|
|
||||||
if(position >= 0 && mMultiReddits.size() > position) {
|
|
||||||
mMultiReddits.get(position).setFavorite(true);
|
|
||||||
}
|
|
||||||
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
||||||
multiReddit.setFavorite(true);
|
multiReddit.setFavorite(true);
|
||||||
if (mAccessToken == null) {
|
|
||||||
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
||||||
() -> {
|
() -> {
|
||||||
//Do nothing
|
//Do nothing
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
|
|
||||||
mAccessToken, true, multiReddit,
|
|
||||||
new FavoriteMultiReddit.FavoriteMultiRedditListener() {
|
|
||||||
@Override
|
|
||||||
public void success() {
|
|
||||||
int position = holder.getBindingAdapterPosition() - offset;
|
|
||||||
if(position >= 0 && mMultiReddits.size() > position) {
|
|
||||||
mMultiReddits.get(position).setFavorite(true);
|
|
||||||
}
|
|
||||||
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Toast.makeText(mActivity, R.string.thing_favorite_failed, Toast.LENGTH_SHORT).show();
|
|
||||||
int position = holder.getBindingAdapterPosition() - offset;
|
|
||||||
if(position >= 0 && mMultiReddits.size() > position) {
|
|
||||||
mMultiReddits.get(position).setFavorite(false);
|
|
||||||
}
|
|
||||||
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
holder.itemView.setOnClickListener(view -> {
|
holder.itemView.setOnClickListener(view -> {
|
||||||
mOnItemClickListener.onClick(multiReddit);
|
mOnItemClickListener.onClick(multiReddit);
|
||||||
@@ -230,69 +180,19 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
if (multiReddit.isFavorite()) {
|
if (multiReddit.isFavorite()) {
|
||||||
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
||||||
multiReddit.setFavorite(false);
|
multiReddit.setFavorite(false);
|
||||||
if (mAccessToken == null) {
|
|
||||||
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
||||||
() -> {
|
() -> {
|
||||||
//Do nothing
|
//Do nothing
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
|
|
||||||
mAccessToken, false, multiReddit,
|
|
||||||
new FavoriteMultiReddit.FavoriteMultiRedditListener() {
|
|
||||||
@Override
|
|
||||||
public void success() {
|
|
||||||
int position = holder.getBindingAdapterPosition() - 1;
|
|
||||||
if(position >= 0 && mFavoriteMultiReddits.size() > position) {
|
|
||||||
mFavoriteMultiReddits.get(position).setFavorite(false);
|
|
||||||
}
|
|
||||||
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Toast.makeText(mActivity, R.string.thing_unfavorite_failed, Toast.LENGTH_SHORT).show();
|
|
||||||
int position = holder.getBindingAdapterPosition() - 1;
|
|
||||||
if(position >= 0 && mFavoriteMultiReddits.size() > position) {
|
|
||||||
mFavoriteMultiReddits.get(position).setFavorite(true);
|
|
||||||
}
|
|
||||||
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
||||||
multiReddit.setFavorite(true);
|
multiReddit.setFavorite(true);
|
||||||
if (mAccessToken == null) {
|
|
||||||
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
||||||
() -> {
|
() -> {
|
||||||
//Do nothing
|
//Do nothing
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
|
|
||||||
mAccessToken, true, multiReddit,
|
|
||||||
new FavoriteMultiReddit.FavoriteMultiRedditListener() {
|
|
||||||
@Override
|
|
||||||
public void success() {
|
|
||||||
int position = holder.getBindingAdapterPosition() - 1;
|
|
||||||
if(position >= 0 && mFavoriteMultiReddits.size() > position) {
|
|
||||||
mFavoriteMultiReddits.get(position).setFavorite(true);
|
|
||||||
}
|
|
||||||
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Toast.makeText(mActivity, R.string.thing_favorite_failed, Toast.LENGTH_SHORT).show();
|
|
||||||
int position = holder.getBindingAdapterPosition() - 1;
|
|
||||||
if(position >= 0 && mFavoriteMultiReddits.size() > position) {
|
|
||||||
mFavoriteMultiReddits.get(position).setFavorite(false);
|
|
||||||
}
|
|
||||||
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
holder.itemView.setOnClickListener(view -> {
|
holder.itemView.setOnClickListener(view -> {
|
||||||
@@ -403,7 +303,8 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
}
|
}
|
||||||
|
|
||||||
class FavoriteMultiRedditsDividerViewHolder extends RecyclerView.ViewHolder {
|
class FavoriteMultiRedditsDividerViewHolder extends RecyclerView.ViewHolder {
|
||||||
@BindView(R.id.divider_text_view_item_favorite_thing_divider) TextView dividerTextView;
|
@BindView(R.id.divider_text_view_item_favorite_thing_divider)
|
||||||
|
TextView dividerTextView;
|
||||||
|
|
||||||
FavoriteMultiRedditsDividerViewHolder(@NonNull View itemView) {
|
FavoriteMultiRedditsDividerViewHolder(@NonNull View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
@@ -417,7 +318,8 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
}
|
}
|
||||||
|
|
||||||
class AllMultiRedditsDividerViewHolder extends RecyclerView.ViewHolder {
|
class AllMultiRedditsDividerViewHolder extends RecyclerView.ViewHolder {
|
||||||
@BindView(R.id.divider_text_view_item_favorite_thing_divider) TextView dividerTextView;
|
@BindView(R.id.divider_text_view_item_favorite_thing_divider)
|
||||||
|
TextView dividerTextView;
|
||||||
|
|
||||||
AllMultiRedditsDividerViewHolder(@NonNull View itemView) {
|
AllMultiRedditsDividerViewHolder(@NonNull View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -12,11 +12,15 @@ import java.util.List;
|
|||||||
|
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||||
|
import eu.toldi.infinityforlemmy.adapters.navigationdrawer.PostFilterUsageEmbeddedRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
|
import eu.toldi.infinityforlemmy.databinding.ItemPostFilterWithUsageBinding;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||||
|
import eu.toldi.infinityforlemmy.postfilter.PostFilterWithUsage;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
|
|
||||||
public class PostFilterRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
public class PostFilterWithUsageRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
|
|
||||||
private static final int VIEW_TYPE_HEADER = 1;
|
private static final int VIEW_TYPE_HEADER = 1;
|
||||||
private static final int VIEW_TYPE_POST_FILTER = 2;
|
private static final int VIEW_TYPE_POST_FILTER = 2;
|
||||||
@@ -24,16 +28,18 @@ public class PostFilterRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
private BaseActivity activity;
|
private BaseActivity activity;
|
||||||
private CustomThemeWrapper customThemeWrapper;
|
private CustomThemeWrapper customThemeWrapper;
|
||||||
private final OnItemClickListener onItemClickListener;
|
private final OnItemClickListener onItemClickListener;
|
||||||
private List<PostFilter> postFilterList;
|
private List<PostFilterWithUsage> postFilterWithUsageList;
|
||||||
|
private RecyclerView.RecycledViewPool recycledViewPool;
|
||||||
|
|
||||||
public interface OnItemClickListener {
|
public interface OnItemClickListener {
|
||||||
void onItemClick(PostFilter postFilter);
|
void onItemClick(PostFilter postFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PostFilterRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper,
|
public PostFilterWithUsageRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper,
|
||||||
OnItemClickListener onItemClickListener) {
|
OnItemClickListener onItemClickListener) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
this.customThemeWrapper = customThemeWrapper;
|
this.customThemeWrapper = customThemeWrapper;
|
||||||
|
this.recycledViewPool = new RecyclerView.RecycledViewPool();
|
||||||
this.onItemClickListener = onItemClickListener;
|
this.onItemClickListener = onItemClickListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,43 +57,49 @@ public class PostFilterRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
if (viewType == VIEW_TYPE_HEADER) {
|
if (viewType == VIEW_TYPE_HEADER) {
|
||||||
return new HeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_filter_fragment_header, parent, false));
|
return new HeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_filter_fragment_header, parent, false));
|
||||||
} else {
|
} else {
|
||||||
return new PostFilterViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post_filter, parent, false));
|
return new PostFilterViewHolder(ItemPostFilterWithUsageBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||||
if (holder instanceof PostFilterViewHolder) {
|
if (holder instanceof PostFilterViewHolder) {
|
||||||
((PostFilterViewHolder) holder).textView.setText(postFilterList.get(position - 1).name);
|
((PostFilterViewHolder) holder).binding.postFilterNameTextViewItemPostFilter.setText(postFilterWithUsageList.get(position - 1).postFilter.name);
|
||||||
|
((PostFilterViewHolder) holder).adapter.setPostFilterUsageList(postFilterWithUsageList.get(position - 1).postFilterUsages);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return postFilterList == null ? 1 : 1 + postFilterList.size();
|
return postFilterWithUsageList == null ? 1 : 1 + postFilterWithUsageList.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPostFilterList(List<PostFilter> postFilterList) {
|
public void setPostFilterWithUsageList(List<PostFilterWithUsage> postFilterWithUsageList) {
|
||||||
this.postFilterList = postFilterList;
|
this.postFilterWithUsageList = postFilterWithUsageList;
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PostFilterViewHolder extends RecyclerView.ViewHolder {
|
private class PostFilterViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textView;
|
ItemPostFilterWithUsageBinding binding;
|
||||||
|
PostFilterUsageEmbeddedRecyclerViewAdapter adapter;
|
||||||
|
|
||||||
public PostFilterViewHolder(@NonNull View itemView) {
|
public PostFilterViewHolder(@NonNull ItemPostFilterWithUsageBinding binding) {
|
||||||
super(itemView);
|
super(binding.getRoot());
|
||||||
textView = (TextView) itemView;
|
this.binding = binding;
|
||||||
|
binding.postFilterNameTextViewItemPostFilter.setTextColor(customThemeWrapper.getPrimaryTextColor());
|
||||||
textView.setTextColor(customThemeWrapper.getPrimaryTextColor());
|
|
||||||
|
|
||||||
if (activity.typeface != null) {
|
if (activity.typeface != null) {
|
||||||
textView.setTypeface(activity.typeface);
|
binding.postFilterNameTextViewItemPostFilter.setTypeface(activity.typeface);
|
||||||
}
|
}
|
||||||
|
|
||||||
itemView.setOnClickListener(view -> {
|
binding.getRoot().setOnClickListener(view -> {
|
||||||
onItemClickListener.onItemClick(postFilterList.get(getBindingAdapterPosition() - 1));
|
onItemClickListener.onItemClick(postFilterWithUsageList.get(getBindingAdapterPosition() - 1).postFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
binding.postFilterUsageRecyclerViewItemPostFilter.setRecycledViewPool(recycledViewPool);
|
||||||
|
binding.postFilterUsageRecyclerViewItemPostFilter.setLayoutManager(new LinearLayoutManagerBugFixed(activity));
|
||||||
|
adapter = new PostFilterUsageEmbeddedRecyclerViewAdapter(activity);
|
||||||
|
binding.postFilterUsageRecyclerViewItemPostFilter.setAdapter(adapter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user