Compare commits
840 Commits
medical_re
...
developmen
| Author | SHA1 | Date |
|---|---|---|
|
|
bc7f3e9f35 | 4 years ago |
|
|
3a9c64779e | 4 years ago |
|
|
4fe2a4444d | 4 years ago |
|
|
bcb1e90ae6 | 4 years ago |
|
|
6bdb2a1600 | 4 years ago |
|
|
092cfbc891 | 4 years ago |
|
|
f2bb245c25 | 4 years ago |
|
|
8b79b0041c | 4 years ago |
|
|
5f7b52a529 | 4 years ago |
|
|
17f32c4dc8 | 4 years ago |
|
|
986af6ba9c | 4 years ago |
|
|
d717d9e0cf | 4 years ago |
|
|
10798f73de | 4 years ago |
|
|
d4f01c19f7 | 4 years ago |
|
|
6c1425ad5a | 4 years ago |
|
|
46760ffc77 | 4 years ago |
|
|
8069e89a61 | 4 years ago |
|
|
c30d6bebd8 | 4 years ago |
|
|
5422472ccc | 4 years ago |
|
|
33b8d6d78d | 4 years ago |
|
|
1a3ad32aa5 | 4 years ago |
|
|
70573d190a | 4 years ago |
|
|
379bfd5bb3 | 4 years ago |
|
|
041c652b86 | 4 years ago |
|
|
89d4a7aacb | 4 years ago |
|
|
9ecfe896f9 | 4 years ago |
|
|
f84ae8b4e7 | 4 years ago |
|
|
447ca6d4dc | 4 years ago |
|
|
4b7b4fda7f | 4 years ago |
|
|
e242aa19bc | 4 years ago |
|
|
9f7cdba8b7 | 4 years ago |
|
|
8bdde45d81 | 4 years ago |
|
|
8c93d5c450 | 4 years ago |
|
|
28defc2582 | 4 years ago |
|
|
f1dd50d7bf | 4 years ago |
|
|
31082249e5 | 4 years ago |
|
|
5ec07bb931 | 4 years ago |
|
|
36e245dd7d | 4 years ago |
|
|
077cad7df5 | 4 years ago |
|
|
a019319589 | 4 years ago |
|
|
323e3f3538 | 4 years ago |
|
|
e73271cb29 | 4 years ago |
|
|
1ac24bee90 | 4 years ago |
|
|
e85a32274a | 4 years ago |
|
|
010310eb48 | 4 years ago |
|
|
47352ae77d | 4 years ago |
|
|
4e6c940cdf | 4 years ago |
|
|
1ca7b28590 | 4 years ago |
|
|
e935014776 | 4 years ago |
|
|
e3a71945de | 4 years ago |
|
|
d743c2c99c | 4 years ago |
|
|
e1c635a911 | 4 years ago |
|
|
7fc52ecad4 | 4 years ago |
|
|
31cf229763 | 4 years ago |
|
|
286dbe0a3f | 4 years ago |
|
|
dfc792ce64 | 4 years ago |
|
|
fa4e4b0dfd | 4 years ago |
|
|
b7892fc18e | 4 years ago |
|
|
6107639ecd | 4 years ago |
|
|
3f41ff267a | 4 years ago |
|
|
c96939e6b0 | 4 years ago |
|
|
fcdec6dbf7 | 4 years ago |
|
|
9a1a7ed247 | 4 years ago |
|
|
7dc71d01de | 4 years ago |
|
|
4eaa62a48c | 4 years ago |
|
|
1dd66803fa | 4 years ago |
|
|
4d820728e8 | 4 years ago |
|
|
eaea16e480 | 4 years ago |
|
|
65ae00cec2 | 4 years ago |
|
|
41e79d5e00 | 4 years ago |
|
|
7962d9b1be | 4 years ago |
|
|
8980f6f440 | 4 years ago |
|
|
39c64779aa | 4 years ago |
|
|
95321a9305 | 4 years ago |
|
|
ed6af7f26e | 4 years ago |
|
|
f7770c0315 | 4 years ago |
|
|
505c3f470f | 4 years ago |
|
|
dc37e2e559 | 4 years ago |
|
|
47dd2ecf56 | 4 years ago |
|
|
d32731451c | 4 years ago |
|
|
208aa9dd6e | 4 years ago |
|
|
4c7db58489 | 4 years ago |
|
|
63b6a957b6 | 4 years ago |
|
|
e61d1e78f6 | 4 years ago |
|
|
c93ea2f285 | 4 years ago |
|
|
240c9aa411 | 4 years ago |
|
|
c083f9ffa3 | 4 years ago |
|
|
e732f9e61c | 4 years ago |
|
|
81d3aa5ad1 | 4 years ago |
|
|
177a2e8bc4 | 4 years ago |
|
|
01cd91ef93 | 4 years ago |
|
|
c4f2543471 | 4 years ago |
|
|
40faef136d | 4 years ago |
|
|
70fa365377 | 4 years ago |
|
|
e5fe12f26b | 4 years ago |
|
|
9f7dbf5ec7 | 4 years ago |
|
|
d22ea2e2fa | 4 years ago |
|
|
17a6ec5795 | 4 years ago |
|
|
d4cef7ba5f | 4 years ago |
|
|
7812d5081e | 4 years ago |
|
|
dceefadc06 | 4 years ago |
|
|
f3b39906f5 | 4 years ago |
|
|
22c26c02de | 4 years ago |
|
|
4505ef9d02 | 4 years ago |
|
|
40c1502a9b | 4 years ago |
|
|
f4c7be6cc2 | 4 years ago |
|
|
b1ddd9935c | 4 years ago |
|
|
ada10f595a | 4 years ago |
|
|
ba62056c4d | 4 years ago |
|
|
954402fe52 | 4 years ago |
|
|
9461d3d4a1 | 4 years ago |
|
|
1f770793fd | 4 years ago |
|
|
85a6f4965f | 4 years ago |
|
|
cdc0d2f4a9 | 4 years ago |
|
|
34f658a166 | 4 years ago |
|
|
f266f54be0 | 4 years ago |
|
|
c76900a868 | 4 years ago |
|
|
8cb5171bc9 | 4 years ago |
|
|
0147481c27 | 4 years ago |
|
|
5f3f509b8c | 4 years ago |
|
|
e10c07f6a4 | 4 years ago |
|
|
ce978db2dd | 4 years ago |
|
|
d5e3a79f85 | 4 years ago |
|
|
5b8211eec4 | 4 years ago |
|
|
c1956aee9b | 4 years ago |
|
|
2b38293d61 | 4 years ago |
|
|
113fb42d68 | 4 years ago |
|
|
3f25acda8f | 4 years ago |
|
|
f769189bee | 4 years ago |
|
|
7afe24c2bc | 4 years ago |
|
|
11652e448d | 4 years ago |
|
|
65e9840418 | 4 years ago |
|
|
228237bf96 | 4 years ago |
|
|
182f890e92 | 4 years ago |
|
|
d0bdf8c1e8 | 4 years ago |
|
|
cb19a5fcfe | 4 years ago |
|
|
f8371f71a1 | 4 years ago |
|
|
0257bb1f16 | 4 years ago |
|
|
2a0148467e | 4 years ago |
|
|
1789eb8c5b | 4 years ago |
|
|
994b43a590 | 4 years ago |
|
|
b22023cdbc | 4 years ago |
|
|
6905ed702e | 4 years ago |
|
|
25f902487c | 4 years ago |
|
|
17998cbbf3 | 4 years ago |
|
|
83ea30303b | 4 years ago |
|
|
df3ba10a54 | 4 years ago |
|
|
e8b5165953 | 4 years ago |
|
|
b8076f177b | 4 years ago |
|
|
db83bec292 | 4 years ago |
|
|
1ae6c4682b | 4 years ago |
|
|
5ed3084130 | 4 years ago |
|
|
45f30a8d61 | 4 years ago |
|
|
bbdc243f0f | 4 years ago |
|
|
06b2e7f194 | 4 years ago |
|
|
8f1d4f80bd | 4 years ago |
|
|
47a077bd52 | 4 years ago |
|
|
b1a65425c5 | 4 years ago |
|
|
e6e5d8e03b | 4 years ago |
|
|
af72810b26 | 4 years ago |
|
|
2ffa745e73 | 4 years ago |
|
|
c6a091ae32 | 4 years ago |
|
|
90c74c2f06 | 4 years ago |
|
|
f7e509d967 | 4 years ago |
|
|
8464c70f35 | 4 years ago |
|
|
4ef41e0c5a | 4 years ago |
|
|
fdc39f28e3 | 4 years ago |
|
|
19d981d9e0 | 4 years ago |
|
|
63e94e0d7b | 4 years ago |
|
|
a829532717 | 4 years ago |
|
|
211990518f | 4 years ago |
|
|
9f77d080c0 | 4 years ago |
|
|
74501dbf07 | 4 years ago |
|
|
de9dc0cb8c | 4 years ago |
|
|
b38a153e22 | 4 years ago |
|
|
694be7315b | 4 years ago |
|
|
fec899ebb7 | 4 years ago |
|
|
d3f0f1a141 | 4 years ago |
|
|
0895a80d16 | 4 years ago |
|
|
fde96fbce7 | 4 years ago |
|
|
ad8d0f32b6 | 4 years ago |
|
|
37928c1757 | 4 years ago |
|
|
44bc3f1c3c | 4 years ago |
|
|
23e1fed349 | 4 years ago |
|
|
be40076def | 4 years ago |
|
|
65d04b2d0f | 4 years ago |
|
|
a5974ad584 | 4 years ago |
|
|
b79eff7f6b | 4 years ago |
|
|
e165ec5b1d | 4 years ago |
|
|
af9e8dd095 | 4 years ago |
|
|
0d542a862e | 4 years ago |
|
|
6d0ff69386 | 4 years ago |
|
|
d9b2a618f5 | 4 years ago |
|
|
f300dbf315 | 4 years ago |
|
|
05b656416d | 4 years ago |
|
|
278bd5e23f | 4 years ago |
|
|
ed447f6b17 | 4 years ago |
|
|
0d61d0febc | 4 years ago |
|
|
ed9c77465f | 4 years ago |
|
|
1b12354581 | 4 years ago |
|
|
26fa1aec62 | 4 years ago |
|
|
79372b86c1 | 4 years ago |
|
|
0a0aa6ba77 | 4 years ago |
|
|
fec10319bf | 4 years ago |
|
|
af1217dd67 | 4 years ago |
|
|
42feae9a2e | 4 years ago |
|
|
406165c348 | 4 years ago |
|
|
5ed5a266e9 | 4 years ago |
|
|
da63af6db3 | 4 years ago |
|
|
810cda1f9b | 4 years ago |
|
|
c8fde6e869 | 4 years ago |
|
|
956afab2b4 | 4 years ago |
|
|
afbd389925 | 4 years ago |
|
|
0f71025e31 | 4 years ago |
|
|
294d979255 | 4 years ago |
|
|
1755650304 | 4 years ago |
|
|
268c637316 | 4 years ago |
|
|
94b86ee4b9 | 4 years ago |
|
|
5ff270858d | 4 years ago |
|
|
6e976c4597 | 4 years ago |
|
|
66637345e9 | 4 years ago |
|
|
71ce8d22e3 | 4 years ago |
|
|
edbb99e445 | 4 years ago |
|
|
5526380da7 | 4 years ago |
|
|
1088a0ef27 | 4 years ago |
|
|
eb5d2f3def | 4 years ago |
|
|
bc4b271d0c | 4 years ago |
|
|
b70ccf66be | 4 years ago |
|
|
88ade7546a | 4 years ago |
|
|
fb610d21b0 | 4 years ago |
|
|
d37d10639a | 4 years ago |
|
|
b9f3eefcbd | 4 years ago |
|
|
17eeaf2cc6 | 4 years ago |
|
|
06855665b5 | 4 years ago |
|
|
d23e725794 | 4 years ago |
|
|
0901a2e39c | 4 years ago |
|
|
e360ff5596 | 4 years ago |
|
|
746c2fdddb | 4 years ago |
|
|
bfeb1ac047 | 4 years ago |
|
|
d9d2e40927 | 4 years ago |
|
|
f02a6f3f30 | 4 years ago |
|
|
d66bc3ea2a | 4 years ago |
|
|
f8051cda0a | 4 years ago |
|
|
c54015c5c1 | 4 years ago |
|
|
bce6dc6f63 | 4 years ago |
|
|
558de8ec75 | 4 years ago |
|
|
4dc93f7c31 | 4 years ago |
|
|
73cc5e4b00 | 4 years ago |
|
|
0c4d6da3f4 | 4 years ago |
|
|
26e80356e1 | 4 years ago |
|
|
480017f887 | 4 years ago |
|
|
a4aa695f25 | 4 years ago |
|
|
0116de2454 | 4 years ago |
|
|
a578d92cb7 | 4 years ago |
|
|
74540f054a | 4 years ago |
|
|
5d20480e9b | 4 years ago |
|
|
3431c353e9 | 4 years ago |
|
|
4dcc20b681 | 4 years ago |
|
|
3e1ac71a48 | 4 years ago |
|
|
56fbc47835 | 4 years ago |
|
|
34b4484972 | 4 years ago |
|
|
ae5c9170a7 | 4 years ago |
|
|
fca6990938 | 4 years ago |
|
|
6f1790d71e | 4 years ago |
|
|
b8b943e3d9 | 4 years ago |
|
|
bd133f8f31 | 4 years ago |
|
|
f68c0fe426 | 4 years ago |
|
|
35279405af | 4 years ago |
|
|
933ecea67c | 4 years ago |
|
|
ad1ae99707 | 4 years ago |
|
|
75a10939fb | 4 years ago |
|
|
63af889e2f | 4 years ago |
|
|
4c1ed7f931 | 4 years ago |
|
|
46ec7d4c99 | 4 years ago |
|
|
10bbf51c52 | 4 years ago |
|
|
c2fbd99ced | 4 years ago |
|
|
af10c60a7e | 4 years ago |
|
|
3200a7a351 | 4 years ago |
|
|
70b3776aa7 | 4 years ago |
|
|
6375d9fb2d | 4 years ago |
|
|
c6635397bb | 4 years ago |
|
|
bff995ecfa | 4 years ago |
|
|
4049b0e066 | 4 years ago |
|
|
fb51325188 | 4 years ago |
|
|
25e09fa105 | 4 years ago |
|
|
c6a77563cc | 4 years ago |
|
|
85e6f63094 | 4 years ago |
|
|
efe25b898d | 4 years ago |
|
|
fc81370b0a | 4 years ago |
|
|
9e4a9c4b6a | 4 years ago |
|
|
658a28e558 | 4 years ago |
|
|
f97b0bee14 | 4 years ago |
|
|
6b0e790cd2 | 4 years ago |
|
|
753a72b85e | 4 years ago |
|
|
fc126caddf | 4 years ago |
|
|
98bc33042f | 4 years ago |
|
|
9a1b9eb50b | 4 years ago |
|
|
b54b4d96e9 | 4 years ago |
|
|
d3e90ed984 | 4 years ago |
|
|
279004b58b | 4 years ago |
|
|
f256527302 | 4 years ago |
|
|
a02e89febb | 4 years ago |
|
|
6c78fda392 | 4 years ago |
|
|
47357fe84e | 4 years ago |
|
|
adc9f8b4dc | 4 years ago |
|
|
2b763e954a | 4 years ago |
|
|
b265210565 | 4 years ago |
|
|
67a5bcff91 | 4 years ago |
|
|
3c8d1fdf39 | 4 years ago |
|
|
ecffe99f19 | 4 years ago |
|
|
fedb4533c7 | 4 years ago |
|
|
5f2e0be78c | 4 years ago |
|
|
9e1aeb857f | 4 years ago |
|
|
5d710054ea | 4 years ago |
|
|
98f6d63fcd | 4 years ago |
|
|
52bd1511e8 | 4 years ago |
|
|
4760d4ae50 | 4 years ago |
|
|
2ff5fbad7c | 4 years ago |
|
|
3d379b3b84 | 4 years ago |
|
|
3bfee08b9d | 4 years ago |
|
|
bd7e683900 | 4 years ago |
|
|
fbaeb1b361 | 4 years ago |
|
|
118d367b4c | 4 years ago |
|
|
1f893042db | 4 years ago |
|
|
72df25d949 | 4 years ago |
|
|
00e0680c95 | 4 years ago |
|
|
e2cde9a39f | 4 years ago |
|
|
e59220d1b7 | 4 years ago |
|
|
b0de660325 | 4 years ago |
|
|
f16f54fee2 | 4 years ago |
|
|
e31fadc9be | 4 years ago |
|
|
8e795535b8 | 4 years ago |
|
|
83bea13b8d | 4 years ago |
|
|
92ceb99212 | 4 years ago |
|
|
f3462385fd | 4 years ago |
|
|
14a43ab53a | 4 years ago |
|
|
cce0a8377c | 4 years ago |
|
|
999c2a920d | 4 years ago |
|
|
b3bfda9128 | 4 years ago |
|
|
5d8b521941 | 4 years ago |
|
|
c17397bf5e | 4 years ago |
|
|
1c8d25c95c | 4 years ago |
|
|
13c05e87dc | 4 years ago |
|
|
6ae4d3a7cd | 4 years ago |
|
|
eda9aeb26b | 4 years ago |
|
|
d1060ba27a | 4 years ago |
|
|
bfd86f533a | 4 years ago |
|
|
189864f4ba | 4 years ago |
|
|
81ae0b04d3 | 4 years ago |
|
|
8a1d88c1f6 | 4 years ago |
|
|
24618e5232 | 4 years ago |
|
|
1146f613df | 4 years ago |
|
|
a8adacfc5c | 4 years ago |
|
|
43c670e5b1 | 4 years ago |
|
|
948b8c877d | 4 years ago |
|
|
d808f8b2ac | 4 years ago |
|
|
1eb2221a00 | 4 years ago |
|
|
f4a9ab14c8 | 4 years ago |
|
|
1f28a09043 | 4 years ago |
|
|
ec83d72038 | 4 years ago |
|
|
cb29b1021e | 4 years ago |
|
|
dc0f3e7235 | 4 years ago |
|
|
ced1c9b392 | 4 years ago |
|
|
ede9574084 | 4 years ago |
|
|
7f9969b6cf | 4 years ago |
|
|
47437c8637 | 4 years ago |
|
|
f99ce10edf | 4 years ago |
|
|
3974586bc9 | 4 years ago |
|
|
dfce0d20e2 | 4 years ago |
|
|
eceb3976ad | 4 years ago |
|
|
37d4dfffa2 | 4 years ago |
|
|
a6153db2f9 | 4 years ago |
|
|
8f0e69df3a | 4 years ago |
|
|
ff1cffc24d | 4 years ago |
|
|
bc92f9b9f5 | 4 years ago |
|
|
49205f797d | 4 years ago |
|
|
6ffbf92d43 | 4 years ago |
|
|
f23607b6e4 | 4 years ago |
|
|
f98c34fcc6 | 4 years ago |
|
|
2e884c4a35 | 4 years ago |
|
|
101bc9f1b6 | 4 years ago |
|
|
ca854638e5 | 4 years ago |
|
|
0bdb15b14e | 4 years ago |
|
|
c4617250ae | 4 years ago |
|
|
8d2b6e9b08 | 4 years ago |
|
|
132d781eb5 | 4 years ago |
|
|
aaabae5900 | 4 years ago |
|
|
92d81700e1 | 4 years ago |
|
|
8e85bb239e | 4 years ago |
|
|
25f65802a5 | 4 years ago |
|
|
61d2c6cdad | 4 years ago |
|
|
eb89dc3395 | 4 years ago |
|
|
52ec3fc0e3 | 4 years ago |
|
|
ffba0ae352 | 4 years ago |
|
|
03acd233cf | 4 years ago |
|
|
26ffd7cb7a | 4 years ago |
|
|
515297ebf6 | 4 years ago |
|
|
cf498de70f | 4 years ago |
|
|
5567b31daf | 4 years ago |
|
|
ad845b882c | 4 years ago |
|
|
4fe53ef71e | 4 years ago |
|
|
3eddf2eab5 | 4 years ago |
|
|
13c42b297a | 4 years ago |
|
|
9eadc0f0b1 | 4 years ago |
|
|
fd9e8ddb28 | 4 years ago |
|
|
482feece26 | 4 years ago |
|
|
75e944427c | 4 years ago |
|
|
514fb71c51 | 4 years ago |
|
|
08df479b37 | 4 years ago |
|
|
d4927873d5 | 4 years ago |
|
|
6f29a70991 | 4 years ago |
|
|
324f515253 | 4 years ago |
|
|
f4311b4106 | 4 years ago |
|
|
4f123b0af2 | 4 years ago |
|
|
1a35201f27 | 4 years ago |
|
|
3229a1ff99 | 4 years ago |
|
|
4d01c74bf8 | 4 years ago |
|
|
cb223be8b3 | 4 years ago |
|
|
5e4b2d8202 | 4 years ago |
|
|
9de1085b49 | 4 years ago |
|
|
d0e6532814 | 4 years ago |
|
|
45822d16d1 | 4 years ago |
|
|
a9d097da54 | 4 years ago |
|
|
e371d105c4 | 4 years ago |
|
|
6b09276c93 | 4 years ago |
|
|
ac1b4d9865 | 4 years ago |
|
|
5e976367f0 | 4 years ago |
|
|
04583d8c42 | 4 years ago |
|
|
22b424515c | 4 years ago |
|
|
97a15bfb35 | 4 years ago |
|
|
2fe475d98a | 4 years ago |
|
|
9270f58615 | 4 years ago |
|
|
6e61bd8c1d | 4 years ago |
|
|
230ebaf445 | 4 years ago |
|
|
93bcfff7a0 | 4 years ago |
|
|
2a677cd5d5 | 4 years ago |
|
|
331b27c3ec | 4 years ago |
|
|
5ad9976c40 | 4 years ago |
|
|
9689044be7 | 4 years ago |
|
|
7723ee2ec1 | 4 years ago |
|
|
faa7c08266 | 4 years ago |
|
|
7b8312fe26 | 4 years ago |
|
|
9e2b72a7cb | 4 years ago |
|
|
514e6c81c7 | 4 years ago |
|
|
60a15d1a60 | 4 years ago |
|
|
056b0bbd78 | 4 years ago |
|
|
9b87ea8c22 | 4 years ago |
|
|
3f7a839950 | 4 years ago |
|
|
ae0c588d32 | 4 years ago |
|
|
dd971ffddb | 4 years ago |
|
|
b355545549 | 4 years ago |
|
|
45f4aa9a22 | 4 years ago |
|
|
b21acfd2c6 | 4 years ago |
|
|
52e5b86f6c | 4 years ago |
|
|
7aa2c9f3ad | 4 years ago |
|
|
64b5652c8d | 4 years ago |
|
|
35acd1f21f | 4 years ago |
|
|
1a3567f917 | 4 years ago |
|
|
72c948371a | 4 years ago |
|
|
4ebecc4277 | 4 years ago |
|
|
a44a207116 | 4 years ago |
|
|
d7b1212b54 | 4 years ago |
|
|
26663b9666 | 4 years ago |
|
|
ee3d207795 | 4 years ago |
|
|
231614e914 | 4 years ago |
|
|
fbf1cd29ee | 4 years ago |
|
|
d035f1ba37 | 4 years ago |
|
|
7684b65e8a | 4 years ago |
|
|
469556758b | 4 years ago |
|
|
d4363aeefb | 4 years ago |
|
|
318560b1d7 | 4 years ago |
|
|
efbe6ae76b | 4 years ago |
|
|
6003df7f63 | 4 years ago |
|
|
93da7b8118 | 4 years ago |
|
|
4e52155342 | 4 years ago |
|
|
54f1bbf184 | 4 years ago |
|
|
e15be3f09d | 4 years ago |
|
|
bb8ffbf63b | 4 years ago |
|
|
96cfc3d659 | 4 years ago |
|
|
2f65546ff6 | 4 years ago |
|
|
9c6cebcffd | 4 years ago |
|
|
a4654e9bce | 4 years ago |
|
|
7436cdb5be | 4 years ago |
|
|
7d4f6d5264 | 4 years ago |
|
|
737f9f6389 | 4 years ago |
|
|
96ee21b15f | 4 years ago |
|
|
35bfa85a1a | 4 years ago |
|
|
6dd8f62b2a | 4 years ago |
|
|
b9ebde0ec8 | 4 years ago |
|
|
17ee942de1 | 4 years ago |
|
|
65f8f061db | 4 years ago |
|
|
8ae51c3580 | 4 years ago |
|
|
d1ccb3c433 | 4 years ago |
|
|
c231ae378a | 4 years ago |
|
|
8be6bd257d | 4 years ago |
|
|
b23fe5ee1b | 4 years ago |
|
|
87b70ff905 | 4 years ago |
|
|
dd4eb2f76d | 4 years ago |
|
|
9a5eff8c8b | 4 years ago |
|
|
495c8fb3b0 | 4 years ago |
|
|
4711b6264c | 4 years ago |
|
|
8a0e94c854 | 4 years ago |
|
|
f05455fddf | 4 years ago |
|
|
ff07686bf7 | 4 years ago |
|
|
2274affd9a | 4 years ago |
|
|
29336a9ef3 | 4 years ago |
|
|
cec3a78d94 | 4 years ago |
|
|
b86bc33266 | 4 years ago |
|
|
fe5456db2a | 4 years ago |
|
|
640dc239b0 | 4 years ago |
|
|
71463dc459 | 4 years ago |
|
|
aaca94e93c | 4 years ago |
|
|
3cd4973eab | 4 years ago |
|
|
62ee6dff3a | 4 years ago |
|
|
f095da8943 | 4 years ago |
|
|
771d94ff4c | 4 years ago |
|
|
0ab0570bc6 | 4 years ago |
|
|
dac8f90a8a | 4 years ago |
|
|
faf8c8ede7 | 4 years ago |
|
|
b27cc6ae9a | 4 years ago |
|
|
6002e22d6d | 4 years ago |
|
|
1a7fd766d5 | 4 years ago |
|
|
062194ba01 | 4 years ago |
|
|
136313ac72 | 4 years ago |
|
|
4663a65fd6 | 4 years ago |
|
|
47df7e5919 | 4 years ago |
|
|
7be6ef6ed6 | 4 years ago |
|
|
288bef5a5f | 4 years ago |
|
|
f56a23aad9 | 4 years ago |
|
|
b2ce970195 | 4 years ago |
|
|
4923b66065 | 4 years ago |
|
|
57d34425ba | 4 years ago |
|
|
b119590e39 | 4 years ago |
|
|
6b7fc1bf56 | 4 years ago |
|
|
8a07dfda15 | 4 years ago |
|
|
8d8200ab9b | 4 years ago |
|
|
28140b6ca4 | 4 years ago |
|
|
942bcd1bd3 | 4 years ago |
|
|
777bdb8a0d | 4 years ago |
|
|
5a821e3d64 | 4 years ago |
|
|
8383ce17bd | 4 years ago |
|
|
66bdf11b1f | 4 years ago |
|
|
a731851a92 | 4 years ago |
|
|
702bb5b8da | 4 years ago |
|
|
d70ad7f2c3 | 4 years ago |
|
|
6ca3baf7cb | 4 years ago |
|
|
b62d4d1dad | 4 years ago |
|
|
c74dca1404 | 4 years ago |
|
|
5e90f14a89 | 4 years ago |
|
|
99868a058c | 4 years ago |
|
|
ca3dddd581 | 5 years ago |
|
|
c1103f26fa | 5 years ago |
|
|
02109a40e1 | 5 years ago |
|
|
6eecb4a614 | 5 years ago |
|
|
f2dbfaf2be | 5 years ago |
|
|
de5621a629 | 5 years ago |
|
|
cdc3b36174 | 5 years ago |
|
|
ce199f7d98 | 5 years ago |
|
|
3d7f8b5997 | 5 years ago |
|
|
9598c09ea2 | 5 years ago |
|
|
696b8b89ec | 5 years ago |
|
|
ba275eaed4 | 5 years ago |
|
|
37cd34f568 | 5 years ago |
|
|
6a96a9cb28 | 5 years ago |
|
|
a1f9729091 | 5 years ago |
|
|
0ff08801f1 | 5 years ago |
|
|
763686fc76 | 5 years ago |
|
|
9317173c05 | 5 years ago |
|
|
09c8d9c09e | 5 years ago |
|
|
fe193f4084 | 5 years ago |
|
|
c5eac79522 | 5 years ago |
|
|
8fc4b1596b | 5 years ago |
|
|
e9e86e4d8c | 5 years ago |
|
|
680ba27bbc | 5 years ago |
|
|
96ad55b552 | 5 years ago |
|
|
1fd192e4bc | 5 years ago |
|
|
aae1cba405 | 5 years ago |
|
|
3762e60552 | 5 years ago |
|
|
353743b1b6 | 5 years ago |
|
|
a014e0140d | 5 years ago |
|
|
a855dfca23 | 5 years ago |
|
|
92c791dd72 | 5 years ago |
|
|
00b7aaf32a | 5 years ago |
|
|
9297ea037d | 5 years ago |
|
|
c608b5601d | 5 years ago |
|
|
e334dbd221 | 5 years ago |
|
|
ba2d97f96e | 5 years ago |
|
|
7ef7c8225c | 5 years ago |
|
|
8fc25538b0 | 5 years ago |
|
|
1ba47515c6 | 5 years ago |
|
|
c9fe9ccb63 | 5 years ago |
|
|
ee41f2f494 | 5 years ago |
|
|
95a694a85f | 5 years ago |
|
|
b461af1be2 | 5 years ago |
|
|
449206c6e8 | 5 years ago |
|
|
ae190d8802 | 5 years ago |
|
|
382d6935ba | 5 years ago |
|
|
26f37893a1 | 5 years ago |
|
|
5bbb2049ce | 5 years ago |
|
|
4c2d55015f | 5 years ago |
|
|
cc26053bc1 | 5 years ago |
|
|
46698a4382 | 5 years ago |
|
|
b707857526 | 5 years ago |
|
|
441d319a9e | 5 years ago |
|
|
835c8cd77d | 5 years ago |
|
|
a4c8178695 | 5 years ago |
|
|
4ce6ff8d7d | 5 years ago |
|
|
478900d4fd | 5 years ago |
|
|
cdbd905a62 | 5 years ago |
|
|
68e37ddf86 | 5 years ago |
|
|
41ed593707 | 5 years ago |
|
|
fdc4e52980 | 5 years ago |
|
|
99a4838044 | 5 years ago |
|
|
8eb9401941 | 5 years ago |
|
|
b1294a863c | 5 years ago |
|
|
6b146ed00b | 5 years ago |
|
|
1f3d1f68fb | 5 years ago |
|
|
766b563550 | 5 years ago |
|
|
2acad4e5dc | 5 years ago |
|
|
0deca4f624 | 5 years ago |
|
|
a0bc5b73de | 5 years ago |
|
|
e5e7452dad | 5 years ago |
|
|
632e930c6b | 5 years ago |
|
|
2a570b98be | 5 years ago |
|
|
19487ba435 | 5 years ago |
|
|
df40a2dc09 | 5 years ago |
|
|
5241273303 | 5 years ago |
|
|
a4ba2de459 | 5 years ago |
|
|
dba43fb7bd | 5 years ago |
|
|
ce6ec576dd | 5 years ago |
|
|
5a91f6a25b | 5 years ago |
|
|
e4f350fad3 | 5 years ago |
|
|
680ac7a4e9 | 5 years ago |
|
|
50e8e7b0d6 | 5 years ago |
|
|
7e552cccd4 | 5 years ago |
|
|
ae70fe1bdf | 5 years ago |
|
|
d4fec5080c | 5 years ago |
|
|
829d7b9be7 | 5 years ago |
|
|
547eb430db | 5 years ago |
|
|
792c7aea9b | 5 years ago |
|
|
844629c8bd | 5 years ago |
|
|
d5cff77743 | 5 years ago |
|
|
a33c0312b7 | 5 years ago |
|
|
f03a6d0982 | 5 years ago |
|
|
ff979c725e | 5 years ago |
|
|
393943a19b | 5 years ago |
|
|
a845f5b48d | 5 years ago |
|
|
2210a0445c | 5 years ago |
|
|
5ba26692c1 | 5 years ago |
|
|
0625de2b15 | 5 years ago |
|
|
ac4a68600c | 5 years ago |
|
|
b3e350ecaa | 5 years ago |
|
|
076301e91a | 5 years ago |
|
|
bf12203e81 | 5 years ago |
|
|
66e33b7085 | 5 years ago |
|
|
047acd7116 | 5 years ago |
|
|
64c98ba128 | 5 years ago |
|
|
943463b1d9 | 5 years ago |
|
|
b0a92d560d | 5 years ago |
|
|
1c2ccd9149 | 5 years ago |
|
|
c17f9fb91d | 5 years ago |
|
|
68e1a2b399 | 5 years ago |
|
|
a5f3731b9a | 5 years ago |
|
|
de6936efb8 | 5 years ago |
|
|
0535566232 | 5 years ago |
|
|
8d493f40fa | 5 years ago |
|
|
528e16c3dc | 5 years ago |
|
|
794c935d05 | 5 years ago |
|
|
6882a327c0 | 5 years ago |
|
|
0fb4b4a890 | 5 years ago |
|
|
1712874c87 | 5 years ago |
|
|
fa9942ac24 | 5 years ago |
|
|
0489e9584f | 5 years ago |
|
|
1d6026f9fd | 5 years ago |
|
|
800d6a1011 | 5 years ago |
|
|
94f7d7773f | 5 years ago |
|
|
e8c0281913 | 5 years ago |
|
|
f25c93f7a2 | 5 years ago |
|
|
abfba6e292 | 5 years ago |
|
|
2c0cdff0dc | 5 years ago |
|
|
9bcfd0587a | 5 years ago |
|
|
e2caebde8b | 5 years ago |
|
|
8b7d61ba03 | 5 years ago |
|
|
d362793fb4 | 5 years ago |
|
|
947fc7f8f8 | 5 years ago |
|
|
4bfcca230e | 5 years ago |
|
|
3d7cd70df6 | 5 years ago |
|
|
79a0e0917f | 5 years ago |
|
|
53d7d68012 | 5 years ago |
|
|
539d8500f1 | 5 years ago |
|
|
4abd005499 | 5 years ago |
|
|
74a6ebebdc | 5 years ago |
|
|
26a1758af9 | 5 years ago |
|
|
42ecf9a0fb | 5 years ago |
|
|
80b976dff3 | 5 years ago |
|
|
13be1c6a00 | 5 years ago |
|
|
562fd1b515 | 5 years ago |
|
|
c49827dec5 | 5 years ago |
|
|
64697b82a6 | 5 years ago |
|
|
c31db4890b | 5 years ago |
|
|
a1aa1d5689 | 5 years ago |
|
|
09ca6d2454 | 5 years ago |
|
|
7b65f1bade | 5 years ago |
|
|
3626857317 | 5 years ago |
|
|
21f3ab9ac8 | 5 years ago |
|
|
0ae0650acb | 5 years ago |
|
|
300ad103d3 | 5 years ago |
|
|
41190bc501 | 5 years ago |
|
|
6db5191e07 | 5 years ago |
|
|
8147d20fc6 | 5 years ago |
|
|
7830c41d02 | 5 years ago |
|
|
8c3fc3a6f7 | 5 years ago |
|
|
ab584c792a | 5 years ago |
|
|
1c45fcea22 | 5 years ago |
|
|
2f89eebffe | 5 years ago |
|
|
ebea54f2cc | 5 years ago |
|
|
8a4e0db113 | 5 years ago |
|
|
369eecb0a3 | 5 years ago |
|
|
854f42ce96 | 5 years ago |
|
|
e046928e3e | 5 years ago |
|
|
0d3b64af7d | 5 years ago |
|
|
a020c9865b | 5 years ago |
|
|
ae30e23d4d | 5 years ago |
|
|
a502308a8a | 5 years ago |
|
|
36786a3079 | 5 years ago |
|
|
9f1631ba4c | 5 years ago |
|
|
e58ce34aa4 | 5 years ago |
|
|
b341bd5f47 | 5 years ago |
|
|
e06bd6a4f8 | 5 years ago |
|
|
bf8ac21122 | 5 years ago |
|
|
243108e81a | 5 years ago |
|
|
0780cafcca | 5 years ago |
|
|
6b65de77e9 | 5 years ago |
|
|
7227679081 | 5 years ago |
|
|
14a0911aec | 5 years ago |
|
|
36f34226bd | 5 years ago |
|
|
529711d2ce | 5 years ago |
|
|
88b04a8f5d | 5 years ago |
|
|
8a69becab3 | 5 years ago |
|
|
3b1a493d76 | 5 years ago |
|
|
7e57882349 | 5 years ago |
|
|
25d0a08105 | 5 years ago |
|
|
d301c2a3f4 | 5 years ago |
|
|
d0d6874159 | 5 years ago |
|
|
8a4dcf2334 | 5 years ago |
|
|
a84027ad6f | 5 years ago |
|
|
adab2d47d3 | 5 years ago |
|
|
a1ab1e4f43 | 5 years ago |
|
|
d0f1f9e17f | 5 years ago |
|
|
057a06fffb | 5 years ago |
|
|
73cadb1c00 | 5 years ago |
|
|
23ccbbe806 | 5 years ago |
|
|
7cc25f6101 | 5 years ago |
|
|
c9a95188ce | 5 years ago |
|
|
6c6b043571 | 5 years ago |
|
|
b85d507781 | 5 years ago |
|
|
b8c7ce2920 | 5 years ago |
|
|
d4ff42ad88 | 5 years ago |
|
|
02307e8fac | 5 years ago |
|
|
e5056c5d93 | 5 years ago |
|
|
57178d3633 | 5 years ago |
|
|
9a2ce62216 | 5 years ago |
|
|
550d54c034 | 5 years ago |
|
|
eb2b614f74 | 5 years ago |
|
|
95c7161987 | 5 years ago |
|
|
a1ef722954 | 5 years ago |
|
|
329711a002 | 5 years ago |
|
|
ca6306950d | 5 years ago |
|
|
ac5ec049da | 5 years ago |
|
|
7f6128b458 | 5 years ago |
|
|
4d3371e882 | 5 years ago |
|
|
327d392f6b | 5 years ago |
|
|
47dfde6e78 | 5 years ago |
|
|
737d0e9bec | 5 years ago |
|
|
3990ba6ff7 | 5 years ago |
|
|
387f75b36c | 5 years ago |
|
|
bf54139647 | 5 years ago |
|
|
8940de50d6 | 5 years ago |
|
|
764e2e29f5 | 5 years ago |
|
|
e4ef47213d | 5 years ago |
|
|
73f2abbea2 | 5 years ago |
|
|
e4fb83826a | 5 years ago |
|
|
2140f0a229 | 5 years ago |
|
|
46d09ee55d | 5 years ago |
|
|
daf125b995 | 5 years ago |
|
|
52eef31e2e | 5 years ago |
|
|
bb20b4d582 | 5 years ago |
|
|
148657e06b | 5 years ago |
|
|
9328724167 | 5 years ago |
|
|
6fd9af9b26 | 5 years ago |
|
|
07857b28cd | 5 years ago |
|
|
ea2a635925 | 5 years ago |
|
|
110a1983c7 | 5 years ago |
|
|
ecb600c4fc | 5 years ago |
|
|
f81e0b58cb | 5 years ago |
|
|
9b3c0af555 | 5 years ago |
|
|
6e6a7deba5 | 5 years ago |
|
|
39887f3ead | 5 years ago |
|
|
5a477848db | 5 years ago |
|
|
931e21ed5e | 5 years ago |
|
|
d784310c82 | 5 years ago |
|
|
1f8a90e47b | 5 years ago |
|
|
60b5d474c1 | 5 years ago |
|
|
0747dfb1e0 | 5 years ago |
|
|
c671b60097 | 5 years ago |
|
|
d0173bd061 | 5 years ago |
|
|
259ea53319 | 5 years ago |
|
|
3d5bb08adf | 5 years ago |
|
|
a5ea23c38e | 5 years ago |
|
|
cc7fedc8f5 | 5 years ago |
|
|
08e104ca56 | 5 years ago |
|
|
01abd02d19 | 5 years ago |
|
|
4a9748739e | 5 years ago |
|
|
4dc72d6f35 | 5 years ago |
|
|
00aa2c3752 | 5 years ago |
|
|
19bac417c4 | 5 years ago |
|
|
49afc338d6 | 5 years ago |
|
|
8d2252ecdf | 5 years ago |
|
|
70020f35c9 | 5 years ago |
|
|
8e656dbc0d | 5 years ago |
|
|
97f7426aee | 5 years ago |
|
|
acffc72f56 | 5 years ago |
|
|
dc22e3f46e | 5 years ago |
|
|
2bff3a594c | 5 years ago |
|
|
0c0062091a | 5 years ago |
|
|
2fa8fa6177 | 5 years ago |
|
|
8f6de2e02b | 5 years ago |
|
|
362d9425cd | 5 years ago |
|
|
2b8caab71d | 5 years ago |
|
|
837ff69c82 | 5 years ago |
|
|
2b429e6679 | 5 years ago |
|
|
1051a704bc | 5 years ago |
|
|
368d94168b | 5 years ago |
|
|
361596a973 | 5 years ago |
|
|
e5de65bc82 | 5 years ago |
|
|
947423a285 | 5 years ago |
|
|
4136546550 | 5 years ago |
|
|
a12ae0e0d1 | 5 years ago |
|
|
e341a6eb4d | 5 years ago |
|
|
8e5316a0b0 | 5 years ago |
@ -1,7 +0,0 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.hmg.hmgDr">
|
||||
<!-- Flutter needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
</manifest>
|
||||
@ -0,0 +1,12 @@
|
||||
package com.hmg.hmgDr
|
||||
|
||||
import com.hmg.hmgDr.globalErrorHandler.LoggingExceptionHandler
|
||||
import io.flutter.app.FlutterApplication
|
||||
|
||||
class AppApplication : FlutterApplication() {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
// LoggingExceptionHandler(this, "ErrorFile")
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,234 @@
|
||||
package com.hmg.hmgDr.Service
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Service
|
||||
import android.content.Context
|
||||
import android.graphics.PixelFormat
|
||||
import android.graphics.Point
|
||||
import android.os.Build
|
||||
import android.os.CountDownTimer
|
||||
import android.util.Log
|
||||
import android.view.*
|
||||
import androidx.core.view.GestureDetectorCompat
|
||||
import com.hmg.hmgDr.R
|
||||
import com.hmg.hmgDr.util.ViewsUtil
|
||||
|
||||
abstract class BaseMovingFloatingWidget : Service() {
|
||||
|
||||
val szWindow = Point()
|
||||
lateinit var windowManagerParams: WindowManager.LayoutParams
|
||||
var mWindowManager: WindowManager? = null
|
||||
var floatingWidgetView: View? = null
|
||||
lateinit var floatingViewContainer: View
|
||||
|
||||
lateinit var mDetector: GestureDetectorCompat
|
||||
|
||||
private var xInitCord = 0
|
||||
private var yInitCord: Int = 0
|
||||
private var xInitMargin: Int = 0
|
||||
private var yInitMargin: Int = 0
|
||||
|
||||
/* Add Floating Widget View to Window Manager */
|
||||
open fun addFloatingWidgetView() {
|
||||
mWindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
||||
|
||||
//Init LayoutInflater
|
||||
val inflater = getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
||||
//Inflate the removing view layout we created
|
||||
floatingWidgetView = inflater.inflate(R.layout.activity_video_call, null)
|
||||
|
||||
//Add the view to the window.
|
||||
windowManagerParams =
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||
WindowManager.LayoutParams(
|
||||
WindowManager.LayoutParams.WRAP_CONTENT,
|
||||
WindowManager.LayoutParams.WRAP_CONTENT,
|
||||
WindowManager.LayoutParams.TYPE_PHONE,
|
||||
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
|
||||
PixelFormat.TRANSLUCENT
|
||||
)
|
||||
} else {
|
||||
WindowManager.LayoutParams(
|
||||
WindowManager.LayoutParams.WRAP_CONTENT,
|
||||
WindowManager.LayoutParams.WRAP_CONTENT,
|
||||
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
|
||||
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
|
||||
PixelFormat.TRANSLUCENT
|
||||
)
|
||||
}
|
||||
|
||||
//Specify the view position
|
||||
windowManagerParams.gravity = Gravity.TOP or Gravity.START
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
val dragListener: View.OnTouchListener = View.OnTouchListener { _, event ->
|
||||
mDetector.onTouchEvent(event)
|
||||
|
||||
//Get Floating widget view params
|
||||
val layoutParams: WindowManager.LayoutParams =
|
||||
floatingWidgetView!!.layoutParams as WindowManager.LayoutParams
|
||||
//get the touch location coordinates
|
||||
val x_cord = event.rawX.toInt()
|
||||
val y_cord = event.rawY.toInt()
|
||||
val x_cord_Destination: Int
|
||||
var y_cord_Destination: Int
|
||||
|
||||
when (event.action) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
xInitCord = x_cord
|
||||
yInitCord = y_cord
|
||||
|
||||
//remember the initial position.
|
||||
xInitMargin = layoutParams.x
|
||||
yInitMargin = layoutParams.y
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
//Get the difference between initial coordinate and current coordinate
|
||||
val x_diff: Int = x_cord - xInitCord
|
||||
val y_diff: Int = y_cord - yInitCord
|
||||
|
||||
y_cord_Destination = yInitMargin + y_diff
|
||||
val barHeight: Int = ViewsUtil.getStatusBarHeight(applicationContext)
|
||||
if (y_cord_Destination < 0) {
|
||||
y_cord_Destination = 0
|
||||
// y_cord_Destination =
|
||||
// -(szWindow.y - (videoCallContainer.height /*+ barHeight*/))
|
||||
// y_cord_Destination = -(szWindow.y / 2)
|
||||
} else if (y_cord_Destination + (floatingViewContainer.height + barHeight) > szWindow.y) {
|
||||
y_cord_Destination = szWindow.y - (floatingViewContainer.height + barHeight)
|
||||
// y_cord_Destination = (szWindow.y / 2)
|
||||
}
|
||||
layoutParams.y = y_cord_Destination
|
||||
|
||||
//reset position if user drags the floating view
|
||||
resetPosition(x_cord)
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
val x_diff_move: Int = x_cord - xInitCord
|
||||
val y_diff_move: Int = y_cord - yInitCord
|
||||
x_cord_Destination = xInitMargin + x_diff_move
|
||||
y_cord_Destination = yInitMargin + y_diff_move
|
||||
|
||||
layoutParams.x = x_cord_Destination
|
||||
layoutParams.y = y_cord_Destination
|
||||
|
||||
//Update the layout with new X & Y coordinate
|
||||
mWindowManager?.updateViewLayout(floatingWidgetView, layoutParams)
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
/**
|
||||
* OnTouch actions
|
||||
*/
|
||||
class MyGestureListener(
|
||||
val onTabCall: () -> Unit,
|
||||
val miniCircleDoubleTap: () -> Unit
|
||||
) : GestureDetector.SimpleOnGestureListener() {
|
||||
|
||||
override fun onSingleTapConfirmed(event: MotionEvent): Boolean {
|
||||
// onTabCall()
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onDoubleTap(e: MotionEvent?): Boolean {
|
||||
miniCircleDoubleTap()
|
||||
return super.onDoubleTap(e)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Reset position of Floating Widget view on dragging */
|
||||
fun resetPosition(x_cord_now: Int) {
|
||||
if (x_cord_now <= szWindow.x / 2) {
|
||||
moveToLeft(x_cord_now)
|
||||
} else {
|
||||
moveToRight(x_cord_now)
|
||||
}
|
||||
}
|
||||
|
||||
/* Method to move the Floating widget view to Left */
|
||||
private fun moveToLeft(current_x_cord: Int) {
|
||||
|
||||
val mParams: WindowManager.LayoutParams =
|
||||
floatingWidgetView!!.layoutParams as WindowManager.LayoutParams
|
||||
|
||||
mParams.x =
|
||||
(szWindow.x - current_x_cord * current_x_cord - floatingViewContainer.width).toInt()
|
||||
|
||||
try {
|
||||
mWindowManager?.updateViewLayout(floatingWidgetView, mParams)
|
||||
} catch (e: Exception) {
|
||||
Log.e("windowManagerUpdate", "${e.localizedMessage}.")
|
||||
}
|
||||
val x = szWindow.x - current_x_cord
|
||||
object : CountDownTimer(500, 5) {
|
||||
//get params of Floating Widget view
|
||||
val mParams: WindowManager.LayoutParams =
|
||||
floatingWidgetView!!.layoutParams as WindowManager.LayoutParams
|
||||
|
||||
override fun onTick(t: Long) {
|
||||
val step = (500 - t) / 5
|
||||
// mParams.x = 0 - (current_x_cord * current_x_cord * step).toInt()
|
||||
mParams.x =
|
||||
(szWindow.x - current_x_cord * current_x_cord * step - floatingViewContainer.width).toInt()
|
||||
|
||||
try {
|
||||
mWindowManager?.updateViewLayout(floatingWidgetView, mParams)
|
||||
} catch (e: Exception) {
|
||||
Log.e("windowManagerUpdate", "${e.localizedMessage}.")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFinish() {
|
||||
mParams.x = -(szWindow.x - floatingViewContainer.width)
|
||||
|
||||
try {
|
||||
mWindowManager?.updateViewLayout(floatingWidgetView, mParams)
|
||||
} catch (e: Exception) {
|
||||
Log.e("windowManagerUpdate", "${e.localizedMessage}.")
|
||||
}
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
||||
/* Method to move the Floating widget view to Right */
|
||||
private fun moveToRight(current_x_cord: Int) {
|
||||
object : CountDownTimer(500, 5) {
|
||||
//get params of Floating Widget view
|
||||
val mParams: WindowManager.LayoutParams =
|
||||
floatingWidgetView!!.layoutParams as WindowManager.LayoutParams
|
||||
|
||||
override fun onTick(t: Long) {
|
||||
val step = (500 - t) / 5
|
||||
mParams.x =
|
||||
(szWindow.x + current_x_cord * current_x_cord * step - floatingViewContainer.width).toInt()
|
||||
|
||||
try {
|
||||
mWindowManager?.updateViewLayout(floatingWidgetView, mParams)
|
||||
} catch (e: Exception) {
|
||||
Log.e("windowManagerUpdate", "${e.localizedMessage}.")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onFinish() {
|
||||
mParams.x = szWindow.x - floatingViewContainer.width
|
||||
|
||||
mWindowManager?.updateViewLayout(floatingWidgetView, mParams)
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
||||
/***
|
||||
* Utils
|
||||
*/
|
||||
|
||||
fun getWindowManagerDefaultDisplay() {
|
||||
val w = mWindowManager!!.defaultDisplay.width
|
||||
val h = mWindowManager!!.defaultDisplay.height
|
||||
szWindow[w] = h
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
package com.hmg.hmgDr.globalErrorHandler
|
||||
|
||||
import android.os.Environment
|
||||
import java.io.BufferedWriter
|
||||
import java.io.File
|
||||
import java.io.FileWriter
|
||||
import java.io.IOException
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
|
||||
object FileUtil {
|
||||
|
||||
val sdf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS")
|
||||
|
||||
fun pushLog(body: String?) {
|
||||
try {
|
||||
val date = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date())
|
||||
val time = SimpleDateFormat("HH:MM:SS", Locale.getDefault()).format(Date())
|
||||
val root =
|
||||
File(Environment.getExternalStorageDirectory(),"error_log_dir")
|
||||
// if external memory exists and folder with name Notes
|
||||
if (!root.exists()) {
|
||||
root.mkdirs() // this will create folder.
|
||||
}
|
||||
val oldFile = File(root, "error" + sdf.format(Date()).toString() + ".txt") // old file
|
||||
if (oldFile.exists()) oldFile.delete()
|
||||
val filepath = File(root, "error$date.txt") // file path to save
|
||||
val bufferedWriter = BufferedWriter(FileWriter(filepath, true))
|
||||
bufferedWriter.append("\r\n")
|
||||
bufferedWriter.append("\r\n").append(body).append(" Time : ").append(time)
|
||||
bufferedWriter.flush()
|
||||
} catch (e: IOException) {
|
||||
e.printStackTrace()
|
||||
} catch (e: IllegalStateException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
package com.hmg.hmgDr.globalErrorHandler
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import com.hmg.hmgDr.MainActivity
|
||||
import com.hmg.hmgDr.globalErrorHandler.FileUtil.pushLog
|
||||
|
||||
|
||||
class LoggingExceptionHandler(private val context: Context, ErrorFile: String) :
|
||||
Thread.UncaughtExceptionHandler {
|
||||
private val rootHandler: Thread.UncaughtExceptionHandler
|
||||
override fun uncaughtException(t: Thread, e: Throwable) {
|
||||
object : Thread() {
|
||||
override fun run() {
|
||||
pushLog("UnCaught Exception is thrown in $error$e")
|
||||
try {
|
||||
sleep(500)
|
||||
val intent = Intent(context, MainActivity::class.java)
|
||||
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
|
||||
context.startActivity(intent)
|
||||
} catch (e1: Exception) {
|
||||
e1.printStackTrace()
|
||||
}
|
||||
}
|
||||
}.start()
|
||||
rootHandler.uncaughtException(t, e)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG = LoggingExceptionHandler::class.java.simpleName
|
||||
lateinit var error: String
|
||||
}
|
||||
|
||||
init {
|
||||
error = "$ErrorFile.error "
|
||||
rootHandler = Thread.getDefaultUncaughtExceptionHandler()
|
||||
Thread.setDefaultUncaughtExceptionHandler(this)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
package com.hmg.hmgDr.globalErrorHandler
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
|
||||
class UCEDefaultActivity : AppCompatActivity() {
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
package com.hmg.hmgDr.globalErrorHandler
|
||||
|
||||
import androidx.core.content.FileProvider
|
||||
|
||||
class UCEFileProvider : FileProvider() {
|
||||
}
|
||||
@ -0,0 +1,280 @@
|
||||
package com.hmg.hmgDr.globalErrorHandler
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Date;
|
||||
import java.util.Deque;
|
||||
import java.util.Locale;
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
class UCEHandler(val builder: Builder) {
|
||||
|
||||
val EXTRA_STACK_TRACE = "EXTRA_STACK_TRACE"
|
||||
val EXTRA_ACTIVITY_LOG = "EXTRA_ACTIVITY_LOG"
|
||||
private val TAG = "UCEHandler"
|
||||
private val UCE_HANDLER_PACKAGE_NAME = "com.rohitss.uceh"
|
||||
private val DEFAULT_HANDLER_PACKAGE_NAME = "com.android.internal.os"
|
||||
private val MAX_STACK_TRACE_SIZE = 131071 //128 KB - 1
|
||||
|
||||
private val MAX_ACTIVITIES_IN_LOG = 50
|
||||
private val SHARED_PREFERENCES_FILE = "uceh_preferences"
|
||||
private val SHARED_PREFERENCES_FIELD_TIMESTAMP = "last_crash_timestamp"
|
||||
private val activityLog: Deque<String> = ArrayDeque(MAX_ACTIVITIES_IN_LOG)
|
||||
var COMMA_SEPARATED_EMAIL_ADDRESSES: String? = null
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private var application: Application? = null
|
||||
private var isInBackground = true
|
||||
private var isBackgroundMode = false
|
||||
private var isUCEHEnabled = false
|
||||
private var isTrackActivitiesEnabled = false
|
||||
private var lastActivityCreated: WeakReference<Activity?> = WeakReference(null)
|
||||
|
||||
fun UCEHandler(builder: Builder) {
|
||||
isUCEHEnabled = builder.isUCEHEnabled
|
||||
isTrackActivitiesEnabled = builder.isTrackActivitiesEnabled
|
||||
isBackgroundMode = builder.isBackgroundModeEnabled
|
||||
COMMA_SEPARATED_EMAIL_ADDRESSES = builder.commaSeparatedEmailAddresses
|
||||
setUCEHandler(builder.context)
|
||||
}
|
||||
|
||||
private fun setUCEHandler(context: Context?) {
|
||||
try {
|
||||
if (context != null) {
|
||||
val oldHandler = Thread.getDefaultUncaughtExceptionHandler()
|
||||
if (oldHandler != null && oldHandler.javaClass.name.startsWith(
|
||||
UCE_HANDLER_PACKAGE_NAME
|
||||
)
|
||||
) {
|
||||
Log.e(TAG, "UCEHandler was already installed, doing nothing!")
|
||||
} else {
|
||||
if (oldHandler != null && !oldHandler.javaClass.name.startsWith(
|
||||
DEFAULT_HANDLER_PACKAGE_NAME
|
||||
)
|
||||
) {
|
||||
Log.e(
|
||||
TAG,
|
||||
"You already have an UncaughtExceptionHandler. If you use a custom UncaughtExceptionHandler, it should be initialized after UCEHandler! Installing anyway, but your original handler will not be called."
|
||||
)
|
||||
}
|
||||
application = context.getApplicationContext() as Application
|
||||
//Setup UCE Handler.
|
||||
Thread.setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler { thread, throwable ->
|
||||
if (isUCEHEnabled) {
|
||||
Log.e(
|
||||
TAG,
|
||||
"App crashed, executing UCEHandler's UncaughtExceptionHandler",
|
||||
throwable
|
||||
)
|
||||
if (hasCrashedInTheLastSeconds(application!!)) {
|
||||
Log.e(
|
||||
TAG,
|
||||
"App already crashed recently, not starting custom error activity because we could enter a restart loop. Are you sure that your app does not crash directly on init?",
|
||||
throwable
|
||||
)
|
||||
if (oldHandler != null) {
|
||||
oldHandler.uncaughtException(thread, throwable)
|
||||
return@UncaughtExceptionHandler
|
||||
}
|
||||
} else {
|
||||
setLastCrashTimestamp(application!!, Date().getTime())
|
||||
if (!isInBackground || isBackgroundMode) {
|
||||
val intent = Intent(application, UCEDefaultActivity::class.java)
|
||||
val sw = StringWriter()
|
||||
val pw = PrintWriter(sw)
|
||||
throwable.printStackTrace(pw)
|
||||
var stackTraceString: String = sw.toString()
|
||||
if (stackTraceString.length > MAX_STACK_TRACE_SIZE) {
|
||||
val disclaimer = " [stack trace too large]"
|
||||
stackTraceString = stackTraceString.substring(
|
||||
0,
|
||||
MAX_STACK_TRACE_SIZE - disclaimer.length
|
||||
) + disclaimer
|
||||
}
|
||||
intent.putExtra(EXTRA_STACK_TRACE, stackTraceString)
|
||||
if (isTrackActivitiesEnabled) {
|
||||
val activityLogStringBuilder = StringBuilder()
|
||||
while (!activityLog.isEmpty()) {
|
||||
activityLogStringBuilder.append(activityLog.poll())
|
||||
}
|
||||
intent.putExtra(
|
||||
EXTRA_ACTIVITY_LOG,
|
||||
activityLogStringBuilder.toString()
|
||||
)
|
||||
}
|
||||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||
application!!.startActivity(intent)
|
||||
} else {
|
||||
if (oldHandler != null) {
|
||||
oldHandler.uncaughtException(thread, throwable)
|
||||
return@UncaughtExceptionHandler
|
||||
}
|
||||
//If it is null (should not be), we let it continue and kill the process or it will be stuck
|
||||
}
|
||||
}
|
||||
val lastActivity: Activity? = lastActivityCreated.get()
|
||||
if (lastActivity != null) {
|
||||
lastActivity.finish()
|
||||
lastActivityCreated.clear()
|
||||
}
|
||||
killCurrentProcess()
|
||||
} else oldHandler?.uncaughtException(thread, throwable)
|
||||
})
|
||||
application!!.registerActivityLifecycleCallbacks(object :
|
||||
Application.ActivityLifecycleCallbacks {
|
||||
val dateFormat: DateFormat =
|
||||
SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US)
|
||||
var currentlyStartedActivities = 0
|
||||
|
||||
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
|
||||
if (activity.javaClass !== UCEDefaultActivity::class.java) {
|
||||
lastActivityCreated = WeakReference(activity)
|
||||
}
|
||||
if (isTrackActivitiesEnabled) {
|
||||
activityLog.add(
|
||||
dateFormat.format(Date())
|
||||
.toString() + ": " + activity.javaClass
|
||||
.getSimpleName() + " created\n"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityStarted(activity: Activity) {
|
||||
currentlyStartedActivities++
|
||||
isInBackground = currentlyStartedActivities == 0
|
||||
}
|
||||
|
||||
override fun onActivityResumed(activity: Activity) {
|
||||
if (isTrackActivitiesEnabled) {
|
||||
activityLog.add(
|
||||
dateFormat.format(Date())
|
||||
.toString() + ": " + activity.javaClass
|
||||
.simpleName + " resumed\n"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityPaused(activity: Activity) {
|
||||
if (isTrackActivitiesEnabled) {
|
||||
activityLog.add(
|
||||
dateFormat.format(Date())
|
||||
.toString() + ": " + activity.javaClass
|
||||
.simpleName + " paused\n"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityStopped(activity: Activity) {
|
||||
currentlyStartedActivities--
|
||||
isInBackground = currentlyStartedActivities == 0
|
||||
}
|
||||
|
||||
override fun onActivitySaveInstanceState(
|
||||
activity: Activity,
|
||||
outState: Bundle
|
||||
) {}
|
||||
override fun onActivityDestroyed(activity: Activity) {
|
||||
if (isTrackActivitiesEnabled) {
|
||||
activityLog.add(
|
||||
dateFormat.format(Date())
|
||||
.toString() + ": " + activity.javaClass
|
||||
.simpleName + " destroyed\n"
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
Log.i(TAG, "UCEHandler has been installed.")
|
||||
} else {
|
||||
Log.e(TAG, "Context can not be null")
|
||||
}
|
||||
} catch (throwable: Throwable) {
|
||||
Log.e(
|
||||
TAG,
|
||||
"UCEHandler can not be initialized. Help making it better by reporting this as a bug.",
|
||||
throwable
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL method that tells if the app has crashed in the last seconds.
|
||||
* This is used to avoid restart loops.
|
||||
*
|
||||
* @return true if the app has crashed in the last seconds, false otherwise.
|
||||
*/
|
||||
private fun hasCrashedInTheLastSeconds(context: Context): Boolean {
|
||||
val lastTimestamp = getLastCrashTimestamp(context)
|
||||
val currentTimestamp: Long = Date().getTime()
|
||||
return lastTimestamp <= currentTimestamp && currentTimestamp - lastTimestamp < 3000
|
||||
}
|
||||
|
||||
@SuppressLint("ApplySharedPref")
|
||||
private fun setLastCrashTimestamp(context: Context, timestamp: Long) {
|
||||
context.getSharedPreferences(SHARED_PREFERENCES_FILE, Context.MODE_PRIVATE).edit()
|
||||
.putLong(SHARED_PREFERENCES_FIELD_TIMESTAMP, timestamp).commit()
|
||||
}
|
||||
|
||||
private fun killCurrentProcess() {
|
||||
// Process.killProcess(Process.myPid())
|
||||
exitProcess(10)
|
||||
}
|
||||
|
||||
private fun getLastCrashTimestamp(context: Context): Long {
|
||||
return context.getSharedPreferences(SHARED_PREFERENCES_FILE, Context.MODE_PRIVATE)
|
||||
.getLong(SHARED_PREFERENCES_FIELD_TIMESTAMP, -1)
|
||||
}
|
||||
|
||||
fun closeApplication(activity: Activity) {
|
||||
activity.finish()
|
||||
killCurrentProcess()
|
||||
}
|
||||
|
||||
inner class Builder(context: Context) {
|
||||
val context: Context
|
||||
var isUCEHEnabled = true
|
||||
var commaSeparatedEmailAddresses: String? = null
|
||||
var isTrackActivitiesEnabled = false
|
||||
var isBackgroundModeEnabled = true
|
||||
fun setUCEHEnabled(isUCEHEnabled: Boolean): Builder {
|
||||
this.isUCEHEnabled = isUCEHEnabled
|
||||
return this
|
||||
}
|
||||
|
||||
fun setTrackActivitiesEnabled(isTrackActivitiesEnabled: Boolean): Builder {
|
||||
this.isTrackActivitiesEnabled = isTrackActivitiesEnabled
|
||||
return this
|
||||
}
|
||||
|
||||
fun setBackgroundModeEnabled(isBackgroundModeEnabled: Boolean): Builder {
|
||||
this.isBackgroundModeEnabled = isBackgroundModeEnabled
|
||||
return this
|
||||
}
|
||||
|
||||
fun addCommaSeparatedEmailAddresses(commaSeparatedEmailAddresses: String?): Builder {
|
||||
this.commaSeparatedEmailAddresses = commaSeparatedEmailAddresses ?: ""
|
||||
return this
|
||||
}
|
||||
|
||||
fun build() {
|
||||
return UCEHandler(this)
|
||||
}
|
||||
|
||||
init {
|
||||
this.context = context
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hmg.hmgDr.Model;
|
||||
package com.hmg.hmgDr.model;
|
||||
|
||||
|
||||
import android.os.Parcel;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hmg.hmgDr.Model;
|
||||
package com.hmg.hmgDr.model;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
@ -0,0 +1,16 @@
|
||||
package com.hmg.hmgDr.model
|
||||
|
||||
/** Represents standard data needed for a Notification. */
|
||||
open class NotificationDataModel(
|
||||
// Standard notification values:
|
||||
var mContentTitle: String,
|
||||
var mContentText: String,
|
||||
var mPriority: Int ,
|
||||
// Notification channel values (O and above):
|
||||
var mChannelId: String,
|
||||
var mChannelName: CharSequence,
|
||||
var mChannelDescription: String,
|
||||
var mChannelImportance: Int ,
|
||||
var mChannelEnableVibrate: Boolean ,
|
||||
var mChannelLockscreenVisibility: Int
|
||||
)
|
||||
@ -0,0 +1,35 @@
|
||||
package com.hmg.hmgDr.model
|
||||
|
||||
import android.app.Notification
|
||||
import android.app.NotificationManager
|
||||
import android.os.Build
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.core.app.NotificationCompat
|
||||
|
||||
class NotificationVideoModel constructor(
|
||||
mContentTitle: String,
|
||||
mContentText: String,
|
||||
mChannelId: String,
|
||||
mChannelName: CharSequence,
|
||||
mChannelDescription: String,
|
||||
mPriority: Int = Notification.PRIORITY_MAX,
|
||||
mChannelImportance: Int = NotificationManager.IMPORTANCE_LOW,
|
||||
mChannelEnableVibrate: Boolean = true,
|
||||
mChannelLockscreenVisibility: Int = NotificationCompat.VISIBILITY_PUBLIC,
|
||||
// Unique data for this Notification.Style:
|
||||
var mBigContentTitle: String = mContentTitle,
|
||||
val mBigText: String = mContentText,
|
||||
var mSummaryText: String
|
||||
) : NotificationDataModel(
|
||||
mContentTitle,
|
||||
mContentText,
|
||||
mPriority,
|
||||
mChannelId,
|
||||
mChannelName,
|
||||
mChannelDescription,
|
||||
mChannelImportance,
|
||||
mChannelEnableVibrate,
|
||||
mChannelLockscreenVisibility
|
||||
) {
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hmg.hmgDr.Model;
|
||||
package com.hmg.hmgDr.model;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
@ -0,0 +1,38 @@
|
||||
package com.hmg.hmgDr.util
|
||||
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
object DateUtils {
|
||||
|
||||
var simpleDateFormat: SimpleDateFormat = SimpleDateFormat("hh:mm:ss", Locale.ENGLISH)
|
||||
|
||||
fun differentDateTimeBetweenDateAndNow(firstDate: Date): String {
|
||||
val now: Date = Calendar.getInstance().time
|
||||
//1 minute = 60 seconds
|
||||
//1 hour = 60 x 60 = 3600
|
||||
//1 day = 3600 x 24 = 86400
|
||||
|
||||
var different: Long = now.time - firstDate.time
|
||||
|
||||
val secondsInMilli: Long = 1000
|
||||
val minutesInMilli = secondsInMilli * 60
|
||||
val hoursInMilli = minutesInMilli * 60
|
||||
val daysInMilli = hoursInMilli * 24
|
||||
|
||||
val elapsedDays = different / daysInMilli
|
||||
different %= daysInMilli
|
||||
|
||||
val elapsedHours = different / hoursInMilli
|
||||
different %= hoursInMilli
|
||||
|
||||
val elapsedMinutes = different / minutesInMilli
|
||||
different %= minutesInMilli
|
||||
|
||||
val elapsedSeconds = different / secondsInMilli
|
||||
|
||||
val format = "%1$02d:%2$02d" // two digits
|
||||
return String.format(format, elapsedMinutes, elapsedSeconds)
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,77 @@
|
||||
package com.hmg.hmgDr.util
|
||||
|
||||
import android.app.NotificationChannel
|
||||
import android.app.NotificationManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.os.Build
|
||||
import androidx.core.app.NotificationCompat
|
||||
import com.hmg.hmgDr.model.NotificationDataModel
|
||||
import com.hmg.hmgDr.model.NotificationVideoModel
|
||||
|
||||
object NotificationUtil {
|
||||
|
||||
fun createNotificationChannel(
|
||||
context: Context,
|
||||
notificationDataModel: NotificationDataModel
|
||||
): String {
|
||||
// The id of the channel.
|
||||
val channelId: String = notificationDataModel.mChannelId
|
||||
|
||||
// NotificationChannels are required for Notifications on O (API 26) and above.
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
// The user-visible name of the channel.
|
||||
val channelName: CharSequence = notificationDataModel.mChannelName
|
||||
// The user-visible description of the channel.
|
||||
val channelDescription: String = notificationDataModel.mChannelDescription
|
||||
val channelImportance: Int = notificationDataModel.mChannelImportance
|
||||
val channelEnableVibrate: Boolean = notificationDataModel.mChannelEnableVibrate
|
||||
val channelLockscreenVisibility: Int =
|
||||
notificationDataModel.mChannelLockscreenVisibility
|
||||
|
||||
// Initializes NotificationChannel.
|
||||
val notificationChannel = NotificationChannel(channelId, channelName, channelImportance)
|
||||
notificationChannel.description = channelDescription
|
||||
notificationChannel.lightColor = Color.BLUE
|
||||
notificationChannel.lockscreenVisibility = channelLockscreenVisibility
|
||||
// no vibration
|
||||
notificationChannel.vibrationPattern = longArrayOf(0)
|
||||
notificationChannel.enableVibration(channelEnableVibrate)
|
||||
|
||||
// Adds NotificationChannel to system. Attempting to create an existing notification
|
||||
// channel with its original values performs no operation, so it's safe to perform the
|
||||
// below sequence.
|
||||
val notificationManager =
|
||||
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||
notificationManager.createNotificationChannel(notificationChannel)
|
||||
}
|
||||
return channelId
|
||||
}
|
||||
|
||||
fun setNotificationBigStyle(notificationData : NotificationVideoModel): NotificationCompat.BigTextStyle {
|
||||
return NotificationCompat.BigTextStyle() // Overrides ContentText in the big form of the template.
|
||||
.bigText(notificationData.mBigText) // Overrides ContentTitle in the big form of the template.
|
||||
.setBigContentTitle(notificationData.mBigContentTitle) // Summary line after the detail section in the big form of the template.
|
||||
// Note: To improve readability, don't overload the user with info. If Summary Text
|
||||
// doesn't add critical information, you should skip it.
|
||||
.setSummaryText(notificationData.mSummaryText)
|
||||
}
|
||||
|
||||
/**
|
||||
* IMPORTANT NOTE: You should not do this action unless the user takes an action to see your
|
||||
* Notifications like this sample demonstrates. Spamming users to re-enable your notifications
|
||||
* is a bad idea.
|
||||
*/
|
||||
fun openNotificationSettingsForApp(context: Context) {
|
||||
// Links to this app's notification settings.
|
||||
val intent = Intent()
|
||||
intent.action = "android.settings.APP_NOTIFICATION_SETTINGS"
|
||||
intent.putExtra("app_package", context.packageName)
|
||||
intent.putExtra("app_uid", context.applicationInfo.uid)
|
||||
|
||||
// for Android 8 and above
|
||||
intent.putExtra("android.provider.extra.APP_PACKAGE", context.packageName)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,467 @@
|
||||
package com.hmg.hmgDr.util.audio
|
||||
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.media.AudioFormat
|
||||
import android.media.AudioManager
|
||||
import android.media.AudioRecord
|
||||
import android.media.AudioTrack
|
||||
import android.media.MediaRecorder.AudioSource
|
||||
import android.os.Process
|
||||
import android.util.Log
|
||||
|
||||
import com.opentok.android.BaseAudioDevice
|
||||
|
||||
import java.nio.ByteBuffer
|
||||
import java.util.concurrent.locks.Condition
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
|
||||
class CustomAudioDevice(context: Context) : BaseAudioDevice() {
|
||||
|
||||
private val m_context: Context = context
|
||||
private var m_audioTrack: AudioTrack? = null
|
||||
private var m_audioRecord: AudioRecord? = null
|
||||
|
||||
// Capture & render buffers
|
||||
private var m_playBuffer: ByteBuffer? = null
|
||||
private var m_recBuffer: ByteBuffer? = null
|
||||
private val m_tempBufPlay: ByteArray
|
||||
private val m_tempBufRec: ByteArray
|
||||
private val m_rendererLock: ReentrantLock = ReentrantLock(true)
|
||||
private val m_renderEvent: Condition = m_rendererLock.newCondition()
|
||||
|
||||
@Volatile
|
||||
private var m_isRendering = false
|
||||
|
||||
@Volatile
|
||||
private var m_shutdownRenderThread = false
|
||||
private val m_captureLock: ReentrantLock = ReentrantLock(true)
|
||||
private val m_captureEvent: Condition = m_captureLock.newCondition()
|
||||
|
||||
@Volatile
|
||||
private var m_isCapturing = false
|
||||
|
||||
@Volatile
|
||||
private var m_shutdownCaptureThread = false
|
||||
private val m_captureSettings: AudioSettings
|
||||
private val m_rendererSettings: AudioSettings
|
||||
|
||||
// Capturing delay estimation
|
||||
private var m_estimatedCaptureDelay = 0
|
||||
|
||||
// Rendering delay estimation
|
||||
private var m_bufferedPlaySamples = 0
|
||||
private var m_playPosition = 0
|
||||
private var m_estimatedRenderDelay = 0
|
||||
private val m_audioManager: AudioManager
|
||||
private var isRendererMuted = false
|
||||
|
||||
companion object {
|
||||
private const val LOG_TAG = "opentok-defaultaudio"
|
||||
private const val SAMPLING_RATE = 44100
|
||||
private const val NUM_CHANNELS_CAPTURING = 1
|
||||
private const val NUM_CHANNELS_RENDERING = 1
|
||||
private const val MAX_SAMPLES = 2 * 480 * 2 // Max 10 ms @ 48 kHz
|
||||
}
|
||||
|
||||
init {
|
||||
try {
|
||||
m_playBuffer = ByteBuffer.allocateDirect(MAX_SAMPLES)
|
||||
m_recBuffer = ByteBuffer.allocateDirect(MAX_SAMPLES)
|
||||
} catch (e: Exception) {
|
||||
Log.e(LOG_TAG, "${e.message}.")
|
||||
}
|
||||
m_tempBufPlay = ByteArray(MAX_SAMPLES)
|
||||
m_tempBufRec = ByteArray(MAX_SAMPLES)
|
||||
m_captureSettings = AudioSettings(
|
||||
SAMPLING_RATE,
|
||||
NUM_CHANNELS_CAPTURING
|
||||
)
|
||||
m_rendererSettings = AudioSettings(
|
||||
SAMPLING_RATE,
|
||||
NUM_CHANNELS_RENDERING
|
||||
)
|
||||
m_audioManager = m_context
|
||||
.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||
m_audioManager.mode = AudioManager.MODE_IN_COMMUNICATION
|
||||
}
|
||||
|
||||
override fun initCapturer(): Boolean {
|
||||
|
||||
// get the minimum buffer size that can be used
|
||||
val minRecBufSize: Int = AudioRecord.getMinBufferSize(
|
||||
m_captureSettings
|
||||
.sampleRate,
|
||||
if (NUM_CHANNELS_CAPTURING == 1) AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO,
|
||||
AudioFormat.ENCODING_PCM_16BIT
|
||||
)
|
||||
|
||||
// double size to be more safe
|
||||
val recBufSize = minRecBufSize * 2
|
||||
|
||||
// release the object
|
||||
if (m_audioRecord != null) {
|
||||
m_audioRecord!!.release()
|
||||
m_audioRecord = null
|
||||
}
|
||||
try {
|
||||
m_audioRecord = AudioRecord(
|
||||
AudioSource.VOICE_COMMUNICATION,
|
||||
m_captureSettings.sampleRate,
|
||||
if (NUM_CHANNELS_CAPTURING == 1) AudioFormat.CHANNEL_IN_MONO else AudioFormat.CHANNEL_IN_STEREO,
|
||||
AudioFormat.ENCODING_PCM_16BIT, recBufSize
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
Log.e(LOG_TAG, "${e.message}.")
|
||||
return false
|
||||
}
|
||||
|
||||
// check that the audioRecord is ready to be used
|
||||
if (m_audioRecord!!.state != AudioRecord.STATE_INITIALIZED) {
|
||||
Log.i(
|
||||
LOG_TAG, "Audio capture is not initialized "
|
||||
+ m_captureSettings.sampleRate
|
||||
)
|
||||
return false
|
||||
}
|
||||
m_shutdownCaptureThread = false
|
||||
Thread(m_captureThread).start()
|
||||
return true
|
||||
}
|
||||
|
||||
override fun destroyCapturer(): Boolean {
|
||||
m_captureLock.lock()
|
||||
// release the object
|
||||
m_audioRecord?.release()
|
||||
m_audioRecord = null
|
||||
m_shutdownCaptureThread = true
|
||||
m_captureEvent.signal()
|
||||
m_captureLock.unlock()
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getEstimatedCaptureDelay(): Int {
|
||||
return m_estimatedCaptureDelay
|
||||
}
|
||||
|
||||
override fun startCapturer(): Boolean {
|
||||
// start recording
|
||||
try {
|
||||
m_audioRecord!!.startRecording()
|
||||
} catch (e: IllegalStateException) {
|
||||
e.printStackTrace()
|
||||
return false
|
||||
}
|
||||
m_captureLock.lock()
|
||||
m_isCapturing = true
|
||||
m_captureEvent.signal()
|
||||
m_captureLock.unlock()
|
||||
return true
|
||||
}
|
||||
|
||||
override fun stopCapturer(): Boolean {
|
||||
m_captureLock.lock()
|
||||
try {
|
||||
// only stop if we are recording
|
||||
if (m_audioRecord!!.recordingState == AudioRecord.RECORDSTATE_RECORDING) {
|
||||
// stop recording
|
||||
try {
|
||||
m_audioRecord!!.stop()
|
||||
} catch (e: IllegalStateException) {
|
||||
e.printStackTrace()
|
||||
return false
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
// Ensure we always unlock
|
||||
m_isCapturing = false
|
||||
m_captureLock.unlock()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private val m_captureThread = Runnable {
|
||||
val samplesToRec = SAMPLING_RATE / 100
|
||||
var samplesRead = 0
|
||||
try {
|
||||
Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
while (!m_shutdownCaptureThread) {
|
||||
m_captureLock.lock()
|
||||
samplesRead = try {
|
||||
if (!m_isCapturing) {
|
||||
m_captureEvent.await()
|
||||
continue
|
||||
} else {
|
||||
if (m_audioRecord == null) {
|
||||
continue
|
||||
}
|
||||
val lengthInBytes = ((samplesToRec shl 1)
|
||||
* NUM_CHANNELS_CAPTURING)
|
||||
val readBytes: Int = m_audioRecord!!.read(
|
||||
m_tempBufRec, 0,
|
||||
lengthInBytes
|
||||
)
|
||||
m_recBuffer!!.rewind()
|
||||
m_recBuffer!!.put(m_tempBufRec)
|
||||
(readBytes shr 1) / NUM_CHANNELS_CAPTURING
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(LOG_TAG, "RecordAudio try failed: " + e.message)
|
||||
continue
|
||||
} finally {
|
||||
// Ensure we always unlock
|
||||
m_captureLock.unlock()
|
||||
}
|
||||
audioBus.writeCaptureData(m_recBuffer, samplesRead)
|
||||
m_estimatedCaptureDelay = samplesRead * 1000 / SAMPLING_RATE
|
||||
}
|
||||
}
|
||||
|
||||
override fun initRenderer(): Boolean {
|
||||
|
||||
// get the minimum buffer size that can be used
|
||||
val minPlayBufSize: Int = AudioTrack.getMinBufferSize(
|
||||
m_rendererSettings
|
||||
.sampleRate,
|
||||
if (NUM_CHANNELS_RENDERING == 1) AudioFormat.CHANNEL_OUT_MONO else AudioFormat.CHANNEL_OUT_STEREO,
|
||||
AudioFormat.ENCODING_PCM_16BIT
|
||||
)
|
||||
var playBufSize = minPlayBufSize
|
||||
if (playBufSize < 6000) {
|
||||
playBufSize *= 2
|
||||
}
|
||||
|
||||
// release the object
|
||||
if (m_audioTrack != null) {
|
||||
m_audioTrack!!.release()
|
||||
m_audioTrack = null
|
||||
}
|
||||
try {
|
||||
m_audioTrack = AudioTrack(
|
||||
AudioManager.STREAM_VOICE_CALL,
|
||||
m_rendererSettings.sampleRate,
|
||||
if (NUM_CHANNELS_RENDERING == 1) AudioFormat.CHANNEL_OUT_MONO else AudioFormat.CHANNEL_OUT_STEREO,
|
||||
AudioFormat.ENCODING_PCM_16BIT, playBufSize,
|
||||
AudioTrack.MODE_STREAM
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
Log.e(LOG_TAG, "${e.message}.")
|
||||
return false
|
||||
}
|
||||
|
||||
// check that the audioRecord is ready to be used
|
||||
if (m_audioTrack!!.state != AudioTrack.STATE_INITIALIZED) {
|
||||
Log.i(
|
||||
LOG_TAG, "Audio renderer not initialized "
|
||||
+ m_rendererSettings.sampleRate
|
||||
)
|
||||
return false
|
||||
}
|
||||
m_bufferedPlaySamples = 0
|
||||
outputMode = OutputMode.SpeakerPhone
|
||||
m_shutdownRenderThread = false
|
||||
Thread(m_renderThread).start()
|
||||
return true
|
||||
}
|
||||
|
||||
override fun destroyRenderer(): Boolean {
|
||||
m_rendererLock.lock()
|
||||
// release the object
|
||||
m_audioTrack!!.release()
|
||||
m_audioTrack = null
|
||||
m_shutdownRenderThread = true
|
||||
m_renderEvent.signal()
|
||||
m_rendererLock.unlock()
|
||||
unregisterHeadsetReceiver()
|
||||
m_audioManager.isSpeakerphoneOn = false
|
||||
m_audioManager.mode = AudioManager.MODE_NORMAL
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getEstimatedRenderDelay(): Int {
|
||||
return m_estimatedRenderDelay
|
||||
}
|
||||
|
||||
override fun startRenderer(): Boolean {
|
||||
// start playout
|
||||
try {
|
||||
m_audioTrack!!.play()
|
||||
} catch (e: IllegalStateException) {
|
||||
e.printStackTrace()
|
||||
return false
|
||||
}
|
||||
m_rendererLock.lock()
|
||||
m_isRendering = true
|
||||
m_renderEvent.signal()
|
||||
m_rendererLock.unlock()
|
||||
return true
|
||||
}
|
||||
|
||||
override fun stopRenderer(): Boolean {
|
||||
m_rendererLock.lock()
|
||||
try {
|
||||
// only stop if we are playing
|
||||
if (m_audioTrack!!.getPlayState() == AudioTrack.PLAYSTATE_PLAYING) {
|
||||
// stop playout
|
||||
try {
|
||||
m_audioTrack!!.stop()
|
||||
} catch (e: IllegalStateException) {
|
||||
e.printStackTrace()
|
||||
return false
|
||||
}
|
||||
|
||||
// flush the buffers
|
||||
m_audioTrack!!.flush()
|
||||
}
|
||||
} finally {
|
||||
// Ensure we always unlock, both for success, exception or error
|
||||
// return.
|
||||
m_isRendering = false
|
||||
m_rendererLock.unlock()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private val m_renderThread = Runnable {
|
||||
val samplesToPlay = SAMPLING_RATE / 100
|
||||
try {
|
||||
Process
|
||||
.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
while (!m_shutdownRenderThread) {
|
||||
m_rendererLock.lock()
|
||||
try {
|
||||
if (!m_isRendering) {
|
||||
m_renderEvent.await()
|
||||
continue
|
||||
} else {
|
||||
m_rendererLock.unlock()
|
||||
|
||||
// Don't lock on audioBus calls
|
||||
m_playBuffer!!.clear()
|
||||
val samplesRead: Int = audioBus.readRenderData(
|
||||
m_playBuffer, samplesToPlay
|
||||
)
|
||||
|
||||
// Log.d(LOG_TAG, "Samples read: " + samplesRead);
|
||||
m_rendererLock.lock()
|
||||
if (!isRendererMuted) {
|
||||
// After acquiring the lock again
|
||||
// we must check if we are still playing
|
||||
if (m_audioTrack == null
|
||||
|| !m_isRendering
|
||||
) {
|
||||
continue
|
||||
}
|
||||
val bytesRead = ((samplesRead shl 1)
|
||||
* NUM_CHANNELS_RENDERING)
|
||||
m_playBuffer!!.get(m_tempBufPlay, 0, bytesRead)
|
||||
val bytesWritten: Int = m_audioTrack!!.write(
|
||||
m_tempBufPlay, 0,
|
||||
bytesRead
|
||||
)
|
||||
|
||||
// increase by number of written samples
|
||||
m_bufferedPlaySamples += ((bytesWritten shr 1)
|
||||
/ NUM_CHANNELS_RENDERING)
|
||||
|
||||
// decrease by number of played samples
|
||||
val pos: Int = m_audioTrack!!.getPlaybackHeadPosition()
|
||||
if (pos < m_playPosition) {
|
||||
// wrap or reset by driver
|
||||
m_playPosition = 0
|
||||
}
|
||||
m_bufferedPlaySamples -= pos - m_playPosition
|
||||
m_playPosition = pos
|
||||
|
||||
// we calculate the estimated delay based on the
|
||||
// buffered samples
|
||||
m_estimatedRenderDelay = (m_bufferedPlaySamples * 1000
|
||||
/ SAMPLING_RATE)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(LOG_TAG, "Exception: " + e.message)
|
||||
e.printStackTrace()
|
||||
} finally {
|
||||
m_rendererLock.unlock()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getCaptureSettings(): AudioSettings {
|
||||
return m_captureSettings
|
||||
}
|
||||
|
||||
override fun getRenderSettings(): AudioSettings {
|
||||
return m_rendererSettings
|
||||
}
|
||||
|
||||
/**
|
||||
* Communication modes handling
|
||||
*/
|
||||
override fun setOutputMode(mode: OutputMode): Boolean {
|
||||
super.setOutputMode(mode)
|
||||
if (mode == OutputMode.Handset) {
|
||||
unregisterHeadsetReceiver()
|
||||
m_audioManager.isSpeakerphoneOn = false
|
||||
} else {
|
||||
m_audioManager.isSpeakerphoneOn = true
|
||||
registerHeadsetReceiver()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private val m_headsetReceiver: BroadcastReceiver = object : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context?, intent: Intent) {
|
||||
if (intent.action!!.compareTo(Intent.ACTION_HEADSET_PLUG) == 0) {
|
||||
val state: Int = intent.getIntExtra("state", 0)
|
||||
m_audioManager.isSpeakerphoneOn = state == 0
|
||||
}
|
||||
}
|
||||
}
|
||||
private var m_receiverRegistered = false
|
||||
private fun registerHeadsetReceiver() {
|
||||
if (!m_receiverRegistered) {
|
||||
val receiverFilter = IntentFilter(
|
||||
Intent.ACTION_HEADSET_PLUG
|
||||
)
|
||||
m_context.registerReceiver(m_headsetReceiver, receiverFilter)
|
||||
m_receiverRegistered = true
|
||||
}
|
||||
}
|
||||
|
||||
private fun unregisterHeadsetReceiver() {
|
||||
if (m_receiverRegistered) {
|
||||
try {
|
||||
m_context.unregisterReceiver(m_headsetReceiver)
|
||||
} catch (e: IllegalArgumentException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
m_receiverRegistered = false
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
if (outputMode == OutputMode.SpeakerPhone) {
|
||||
unregisterHeadsetReceiver()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
if (outputMode == OutputMode.SpeakerPhone) {
|
||||
registerHeadsetReceiver()
|
||||
}
|
||||
}
|
||||
|
||||
fun setRendererMute(isRendererMuted: Boolean) {
|
||||
this.isRendererMuted = isRendererMuted
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hmg.hmgDr.util
|
||||
package com.hmg.hmgDr.util.opentok
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
@ -1,4 +1,4 @@
|
||||
package com.hmg.hmgDr.util
|
||||
package com.hmg.hmgDr.util.opentok
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M7.41,8.59L12,13.17l4.59,-4.58L18,10l-6,6 -6,-6 1.41,-1.41z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M7.41,15.41L12,10.83l4.59,4.58L18,14l-6,-6 -6,6z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,9c-1.6,0 -3.15,0.25 -4.6,0.72v3.1c0,0.39 -0.23,0.74 -0.56,0.9 -0.98,0.49 -1.87,1.12 -2.66,1.85 -0.18,0.18 -0.43,0.28 -0.7,0.28 -0.28,0 -0.53,-0.11 -0.71,-0.29L0.29,13.08c-0.18,-0.17 -0.29,-0.42 -0.29,-0.7 0,-0.28 0.11,-0.53 0.29,-0.71C3.34,8.78 7.46,7 12,7s8.66,1.78 11.71,4.67c0.18,0.18 0.29,0.43 0.29,0.71 0,0.28 -0.11,0.53 -0.29,0.71l-2.48,2.48c-0.18,0.18 -0.43,0.29 -0.71,0.29 -0.27,0 -0.52,-0.11 -0.7,-0.28 -0.79,-0.74 -1.69,-1.36 -2.67,-1.85 -0.33,-0.16 -0.56,-0.5 -0.56,-0.9v-3.1C15.15,9.25 13.6,9 12,9z"/>
|
||||
</vector>
|
||||
@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:fadeScrollbars="false"
|
||||
android:scrollbars="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:text="@string/ask_for_error_log"
|
||||
android:textColor="#212121"
|
||||
android:textSize="18sp"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_view_error_log"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="View Error Log"
|
||||
android:textColor="#212121"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_copy_error_log"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:text="Copy Error Log"
|
||||
android:textColor="#212121"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_share_error_log"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:text="Share Error Log"
|
||||
android:textColor="#212121"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_email_error_log"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:text="Email Error Log"
|
||||
android:textColor="#212121"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_save_error_log"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:text="Save Error Log"
|
||||
android:textColor="#212121"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_close_app"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="Close App"
|
||||
android:textColor="#212121"/>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="88dp"
|
||||
android:background="@android:color/holo_blue_dark"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/padding_space_medium">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_icon"
|
||||
android:layout_width="22dp"
|
||||
android:layout_height="22dp"
|
||||
android:src="@mipmap/ic_launcher" />
|
||||
|
||||
<TextView
|
||||
style="@style/TextAppearance.Compat.Notification"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="@dimen/padding_space_small"
|
||||
android:paddingEnd="@dimen/padding_space_small"
|
||||
android:text="HMG Doctor"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/text_size_small" />
|
||||
|
||||
<Chronometer
|
||||
android:id="@+id/notify_timer"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
style="@style/TextAppearance.Compat.Notification"
|
||||
android:paddingStart="@dimen/padding_space_small"
|
||||
android:paddingEnd="@dimen/padding_space_small"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/text_size_small"
|
||||
android:format="MM:SS"
|
||||
tools:text="25:45" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_Arrow"
|
||||
android:layout_width="22dp"
|
||||
android:layout_height="22dp"
|
||||
android:src="@drawable/ic_arrow_bottom" />
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/notify_title"
|
||||
style="@style/TextAppearance.Compat.Notification.Title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/padding_space_medium"
|
||||
android:paddingStart="@dimen/padding_space_small"
|
||||
android:paddingEnd="@dimen/padding_space_small"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/text_size_small"
|
||||
android:textStyle="bold"
|
||||
tools:text="Mosa zaid mosa abuzaid" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/notify_content"
|
||||
style="@style/TextAppearance.Compat.Notification.Title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="@dimen/padding_space_small"
|
||||
android:paddingEnd="@dimen/padding_space_small"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/text_size_small"
|
||||
android:text="Tap to return to call" />
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@android:color/holo_blue_dark"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/padding_space_medium">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_icon"
|
||||
android:layout_width="22dp"
|
||||
android:layout_height="22dp"
|
||||
android:src="@mipmap/ic_launcher" />
|
||||
|
||||
<TextView
|
||||
style="@style/TextAppearance.Compat.Notification"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="@dimen/padding_space_small"
|
||||
android:paddingEnd="@dimen/padding_space_small"
|
||||
android:text="HMG Doctor"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/text_size_small" />
|
||||
|
||||
<Chronometer
|
||||
android:id="@+id/notify_timer"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
style="@style/TextAppearance.Compat.Notification"
|
||||
android:paddingStart="@dimen/padding_space_small"
|
||||
android:paddingEnd="@dimen/padding_space_small"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/text_size_small"
|
||||
android:format="MM:SS"
|
||||
tools:text="25:45" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_Arrow"
|
||||
android:layout_width="22dp"
|
||||
android:layout_height="22dp"
|
||||
android:src="@drawable/ic_arrow_top" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/notify_title"
|
||||
style="@style/TextAppearance.Compat.Notification.Title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/padding_space_big"
|
||||
android:paddingStart="@dimen/padding_space_small"
|
||||
android:paddingEnd="@dimen/padding_space_small"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/text_size_medium"
|
||||
android:textStyle="bold"
|
||||
tools:text="Mosa zaid mosa abuzaid" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/notify_content"
|
||||
style="@style/TextAppearance.Compat.Notification.Title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="@dimen/padding_space_small"
|
||||
android:paddingEnd="@dimen/padding_space_small"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/text_size_medium"
|
||||
android:text="Tap to return to call" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/btn_end"
|
||||
style="@style/TextAppearance.Compat.Notification.Title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/padding_space_medium"
|
||||
android:layout_marginBottom="@dimen/padding_space_medium"
|
||||
android:paddingStart="@dimen/padding_space_small"
|
||||
android:paddingEnd="@dimen/padding_space_small"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/text_size_medium"
|
||||
android:textStyle="bold"
|
||||
android:text="End call" />
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<external-path name="external_files" path="."/>
|
||||
</paths>
|
||||
@ -0,0 +1 @@
|
||||
include ':app'
|
||||
|
Before Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 348 KiB |
|
Before Width: | Height: | Size: 247 B |
|
Before Width: | Height: | Size: 412 B |
|
Before Width: | Height: | Size: 946 B |
|
Before Width: | Height: | Size: 651 B |
|
Before Width: | Height: | Size: 655 KiB |
|
Before Width: | Height: | Size: 577 KiB |
@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 73 74" style="enable-background:new 0 0 73 74;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#E3E3E3;}
|
||||
.st1{fill:none;stroke:#CCCCCC;}
|
||||
.st2{fill:#B4B4B4;}
|
||||
</style>
|
||||
<g id="Ellipse_123-2" transform="translate(2933 475)">
|
||||
<circle class="st0" cx="-2896.5" cy="-437.5" r="35"/>
|
||||
<circle class="st1" cx="-2896.5" cy="-437.5" r="34.5"/>
|
||||
</g>
|
||||
<path class="st2" d="M40.25,43.44c-0.02-0.24-0.04-0.63-0.05-1.04c3.94-0.38,6.7-1.26,6.7-2.29c-0.01,0-0.01-0.04-0.01-0.06
|
||||
c-2.94-2.48,2.55-20.09-7.68-19.73c-0.64-0.51-1.77-0.96-3.38-0.96c-13.86,0.98-7.73,17.61-10.89,20.75c0,0,0,0-0.01,0
|
||||
c0,0,0,0,0,0.01c0,0,0,0,0,0s0,0,0,0c0.01,1.01,2.68,1.87,6.51,2.26c-0.01,0.25-0.03,0.55-0.08,1.06
|
||||
c-1.59,3.99-12.3,2.87-12.8,10.56H53C52.51,46.31,41.84,47.43,40.25,43.44z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,7 +0,0 @@
|
||||
<svg id="enter" xmlns="http://www.w3.org/2000/svg" width="42" height="42" viewBox="0 0 42 42">
|
||||
<path id="Path_1146" data-name="Path 1146" d="M17.938,210.625H1.313a1.313,1.313,0,1,1,0-2.625H17.938a1.313,1.313,0,1,1,0,2.625Zm0,0" transform="translate(22.749 -190.938)"/>
|
||||
<path id="Path_1147" data-name="Path 1147" d="M123.984,143.736a1.313,1.313,0,0,1-.928-2.242l5.635-5.635-5.635-5.633a1.313,1.313,0,0,1,1.857-1.857l6.563,6.562a1.313,1.313,0,0,1,0,1.857l-6.562,6.562A1.31,1.31,0,0,1,123.984,143.736Zm0,0" transform="translate(-89.86 -117.486)"/>
|
||||
<path id="Path_1148" data-name="Path 1148" d="M312.668,42.076a3.5,3.5,0,0,0,3.5-3.5V7.076A3.522,3.522,0,0,0,313.8,3.753L303.284.248a3.537,3.537,0,0,0-4.616,3.329v31.5a3.524,3.524,0,0,0,2.368,3.321L311.553,41.9A3.662,3.662,0,0,0,312.668,42.076ZM302.168,2.7a1.03,1.03,0,0,1,.313.046l10.47,3.491a.9.9,0,0,1,.592.838v31.5a.922.922,0,0,1-1.188.83l-10.47-3.491a.905.905,0,0,1-.591-.838V3.576A.876.876,0,0,1,302.168,2.7Zm0,0" transform="translate(-298.668 -0.076)"/>
|
||||
<path id="Path_1149" data-name="Path 1149" d="M195.168,8.75a1.313,1.313,0,0,0,1.313-1.312V4.813A4.816,4.816,0,0,0,191.668,0H171.98a1.313,1.313,0,0,0,0,2.625h19.688a2.19,2.19,0,0,1,2.187,2.188V7.438A1.313,1.313,0,0,0,195.168,8.75Zm0,0" transform="translate(-168.48)"/>
|
||||
<path id="Path_1150" data-name="Path 1150" d="M171.98,350.082h7a4.816,4.816,0,0,0,4.812-4.813v-2.625a1.313,1.313,0,0,0-2.625,0v2.625a2.19,2.19,0,0,1-2.187,2.188h-7a1.313,1.313,0,0,0,0,2.625Zm0,0" transform="translate(-155.793 -313.332)"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 753 B |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 246 B |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 206 B |
|
Before Width: | Height: | Size: 987 B |
|
Before Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 409 B |
|
Before Width: | Height: | Size: 942 B |
|
Before Width: | Height: | Size: 765 B |
|
Before Width: | Height: | Size: 232 B |
|
Before Width: | Height: | Size: 616 B |
|
Before Width: | Height: | Size: 1007 B |
|
Before Width: | Height: | Size: 819 B |
|
Before Width: | Height: | Size: 631 B |
|
Before Width: | Height: | Size: 940 B |
|
After Width: | Height: | Size: 969 B |
@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 73 74" style="enable-background:new 0 0 73 74;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#E3E3E3;}
|
||||
.st1{fill:none;stroke:#CCCCCC;}
|
||||
.st2{fill:#B4B4B4;}
|
||||
</style>
|
||||
<g id="Ellipse_123-2" transform="translate(2933 475)">
|
||||
<circle class="st0" cx="-2896.5" cy="-437.5" r="35"/>
|
||||
<circle class="st1" cx="-2896.5" cy="-437.5" r="34.5"/>
|
||||
</g>
|
||||
<path id="Icon_awesome-user-alt" class="st2" d="M36.5,39.75c5.59,0,10.13-4.53,10.13-10.13S42.09,19.5,36.5,19.5
|
||||
s-10.13,4.53-10.13,10.13C26.38,35.22,30.91,39.75,36.5,39.75z M45.5,42h-3.87c-3.25,1.5-7,1.5-10.25,0H27.5c-4.97,0-9,4.03-9,9
|
||||
v1.13c0,1.86,1.51,3.37,3.38,3.38h29.25c1.86,0,3.37-1.51,3.38-3.38V51C54.5,46.03,50.47,42,45.5,42z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 970 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 3.0 KiB |
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="28.123" height="26.245" viewBox="0 0 28.123 26.245">
|
||||
<path id="XMLID_219_" d="M28.984,15.637A2.077,2.077,0,0,1,27.025,17h-.716V27.309a.938.938,0,0,1-.937.937H19.748V21.685a4.687,4.687,0,0,0-9.374,0v6.562H4.749a.938.938,0,0,1-.937-.937V17H3.095a2.1,2.1,0,0,1-1.378-3.675L12.665,2.955a3.486,3.486,0,0,1,4.792,0L28.431,13.347A2.066,2.066,0,0,1,28.984,15.637Z" transform="translate(-0.999 -2.001)" fill="#2e303a"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 467 B |
@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24.899" height="24.899" viewBox="0 0 24.899 24.899">
|
||||
<g id="Layer_76" data-name="Layer 76" transform="translate(-2 -2)">
|
||||
<path id="Path_4380" data-name="Path 4380" d="M3.245,11.96A1.245,1.245,0,0,0,4.49,10.715V5.735A1.245,1.245,0,0,1,5.735,4.49h4.98a1.245,1.245,0,1,0,0-2.49H5.735A3.735,3.735,0,0,0,2,5.735v4.98A1.245,1.245,0,0,0,3.245,11.96Z" transform="translate(0 0)" fill="#2e303a"/>
|
||||
<path id="Path_4381" data-name="Path 4381" d="M20.225,2h-4.98a1.245,1.245,0,0,0,0,2.49h4.98A1.245,1.245,0,0,1,21.47,5.735v4.98a1.245,1.245,0,1,0,2.49,0V5.735A3.735,3.735,0,0,0,20.225,2Z" transform="translate(2.94 0)" fill="#2e303a"/>
|
||||
<path id="Path_4382" data-name="Path 4382" d="M22.715,14a1.245,1.245,0,0,0-1.245,1.245v4.98a1.245,1.245,0,0,1-1.245,1.245h-4.98a1.245,1.245,0,0,0,0,2.49h4.98a3.735,3.735,0,0,0,3.735-3.735v-4.98A1.245,1.245,0,0,0,22.715,14Z" transform="translate(2.94 2.94)" fill="#2e303a"/>
|
||||
<path id="Path_4383" data-name="Path 4383" d="M10.715,21.47H5.735A1.245,1.245,0,0,1,4.49,20.225v-4.98a1.245,1.245,0,0,0-2.49,0v4.98A3.735,3.735,0,0,0,5.735,23.96h4.98a1.245,1.245,0,1,0,0-2.49Z" transform="translate(0 2.94)" fill="#2e303a"/>
|
||||
<rect id="Rectangle_17370" data-name="Rectangle 17370" width="15" height="15" rx="2" transform="translate(7 6.899)" fill="#2e303a"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="26.552" height="20.755" viewBox="0 0 26.552 20.755">
|
||||
<g id="mail-reply" transform="translate(0 -40.338)">
|
||||
<path id="Path_4384" data-name="Path 4384" d="M21.236,51.705h.129a1.8,1.8,0,0,1,2.761-2.272l.788.788V42.437a2.1,2.1,0,0,0-2.1-2.1H2.1a2.1,2.1,0,0,0-2.1,2.1V56.921a2.1,2.1,0,0,0,2.1,2.1H16.575a5.14,5.14,0,0,1,4.66-7.314ZM5.213,43.167H19.7l-7.244,5.312Z" fill="#2e303a"/>
|
||||
<path id="Path_4385" data-name="Path 4385" d="M245.767,175.159l-2.8-2.8a.9.9,0,1,0-1.27,1.27l1.265,1.265h-2.25a4.245,4.245,0,0,0,0,8.489.9.9,0,1,0,0-1.8,2.448,2.448,0,0,1,0-4.9h2.25l-1.265,1.265a.9.9,0,0,0,1.27,1.27l2.8-2.8a.9.9,0,0,0,0-1.27Z" transform="translate(-219.478 -122.292)" fill="#2e303a"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 749 B |
@ -0,0 +1,3 @@
|
||||
<svg id="weekly-calendar-page-symbol" xmlns="http://www.w3.org/2000/svg" width="25.034" height="25.034" viewBox="0 0 25.034 25.034">
|
||||
<path id="Path_4379" data-name="Path 4379" d="M22.53,0H2.5A2.511,2.511,0,0,0,0,2.5V22.53a2.512,2.512,0,0,0,2.5,2.5H22.53a2.512,2.512,0,0,0,2.5-2.5V2.5A2.511,2.511,0,0,0,22.53,0ZM6.756,22.031H2.921V18.62H6.756v3.411Zm0-4.555H2.921v-3.41H6.756v3.41ZM6.467,3.794A1.063,1.063,0,1,1,7.529,2.731,1.062,1.062,0,0,1,6.467,3.794Zm5.406,18.237H8.039V18.62h3.834Zm0-4.555H8.039v-3.41h3.834Zm0-4.552H8.039V9.514h3.834ZM11.455,2.731a1.062,1.062,0,1,1,1.062,1.062A1.062,1.062,0,0,1,11.455,2.731Zm5.54,14.745H13.159v-3.41H17v3.41Zm0-4.552H13.159V9.514H17v3.41ZM17.5,2.731a1.062,1.062,0,1,1,1.062,1.062A1.062,1.062,0,0,1,17.5,2.731Zm4.609,14.745H18.278v-3.41h3.835Zm0-4.552H18.278V9.514h3.835Z" fill="#2e303a"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 838 B |
@ -0,0 +1,57 @@
|
||||
<svg id="woman_2_" data-name="woman (2)" xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
|
||||
<g id="Group_7145" data-name="Group 7145">
|
||||
<g id="Group_7144" data-name="Group 7144">
|
||||
<g id="Group_7143" data-name="Group 7143">
|
||||
<g id="Group_7142" data-name="Group 7142">
|
||||
<g id="XMLID_2114_">
|
||||
<g id="XMLID_2115_">
|
||||
<g id="XMLID_2116_">
|
||||
<g id="XMLID_2117_">
|
||||
<g id="XMLID_2118_">
|
||||
<g id="XMLID_2119_">
|
||||
<g id="XMLID_2120_">
|
||||
<g id="XMLID_2121_">
|
||||
<g id="XMLID_2122_">
|
||||
<g id="XMLID_2123_">
|
||||
<g id="XMLID_2124_">
|
||||
<g id="XMLID_2125_">
|
||||
<g id="XMLID_2126_">
|
||||
<g id="XMLID_2127_">
|
||||
<g id="Group_7141" data-name="Group 7141">
|
||||
<path id="Path_4450" data-name="Path 4450" d="M48,24a23.928,23.928,0,0,1-6.947,16.887C36.7,45.279,30.669,42.776,24,42.776s-12.7,2.5-17.053-1.889A24,24,0,1,1,48,24Z" fill="#e2e2e2"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path id="Path_4451" data-name="Path 4451" d="M48,24q0-1.087-.1-2.151L33.541,7.485,14.75,23.632,31.62,40.5l1.688,2.974c2.921.089,5.548-.37,7.745-2.589A23.928,23.928,0,0,0,48,24Z" fill="#c4c4c4"/>
|
||||
<path id="Path_4452" data-name="Path 4452" d="M24,3.287C20.723,2.9,8.986,6.052,12.5,19.837c.924,3.622,4.646,5.913,6.284,6.51,2.5.913,2.742-.517,5.214-2.007,2.472,1.49,2.71,2.919,5.214,2.007,1.638-.6,5.36-2.888,6.284-6.51C39.014,6.052,27.277,2.9,24,3.287Z" fill="#515151"/>
|
||||
<path id="Path_4453" data-name="Path 4453" d="M35.5,19.838c-.924,3.622-4.646,5.913-6.284,6.51-2.5.913-2.742-.517-5.213-2.007V3.287C27.277,2.9,39.014,6.052,35.5,19.837Z" fill="#3d3d3d"/>
|
||||
<path id="Path_4454" data-name="Path 4454" d="M18.747,23.459H29.253V34.6H18.747Z" fill="#eaa678"/>
|
||||
<path id="Path_4455" data-name="Path 4455" d="M24,23.46h5.253V34.6H24Z" fill="#d38c5b"/>
|
||||
<path id="Path_4456" data-name="Path 4456" d="M18.747,30.452H29.253V41.593H18.747Z" fill="#ffc397"/>
|
||||
<path id="Path_4457" data-name="Path 4457" d="M24,30.452h5.253V41.593H24Z" fill="#eaa678"/>
|
||||
<path id="Path_4458" data-name="Path 4458" d="M41.053,35.918v4.969a24,24,0,0,1-34.106,0V35.918a5.466,5.466,0,0,1,5.466-5.467h6.335L24,37.18l5.253-6.728h6.335A5.466,5.466,0,0,1,41.053,35.918Z" fill="#d02127"/>
|
||||
<path id="Path_4459" data-name="Path 4459" d="M41.053,35.918v4.969A23.925,23.925,0,0,1,24,48V37.18l5.253-6.728h6.335A5.466,5.466,0,0,1,41.053,35.918Z" fill="#aa191e"/>
|
||||
<path id="Path_4460" data-name="Path 4460" d="M28.256,39.447a2.908,2.908,0,0,0-1.3,2.649c.172,1.751,2.3,3.292,2.3,3.292s3.4-3.062,2.069-5.94l-1.446-.556Z" fill="#3d3d3d"/>
|
||||
<path id="Path_4461" data-name="Path 4461" d="M32.274,14.271C31.924,8.965,27.632,7,24,7s-7.924,1.961-8.274,7.267a2.285,2.285,0,0,0-1.5,2.409l.161,2.267a1.875,1.875,0,0,0,2.043,1.7l.175-.019c2.076,5.573,5.33,6.154,7.4,6.48,2.066-.326,5.321-.907,7.4-6.48l.175.019a1.875,1.875,0,0,0,2.043-1.7l.161-2.267A2.285,2.285,0,0,0,32.274,14.271Z" fill="#ffc397"/>
|
||||
<path id="Path_4462" data-name="Path 4462" d="M33.775,16.681l-.161,2.267a1.875,1.875,0,0,1-2.043,1.7l-.175-.019a11.863,11.863,0,0,1-2.445,4.151A7.942,7.942,0,0,1,24,27.1V7c3.632,0,7.924,1.961,8.274,7.267a2.285,2.285,0,0,1,1.5,2.409Z" fill="#eaa678"/>
|
||||
<path id="Path_4463" data-name="Path 4463" d="M24,4.977c-5.521-1.2-9.452,2.277-9.539,6.282a10.3,10.3,0,0,0,3.027,6.969c-.053-3.326,1-4.7,3.062-5.438A8.7,8.7,0,0,0,24,9.96a8.7,8.7,0,0,0,3.45,2.83c2.059.739,3.115,2.112,3.062,5.438a10.3,10.3,0,0,0,3.027-6.969C33.452,7.253,29.521,3.772,24,4.977Z" fill="#515151"/>
|
||||
<path id="Path_4464" data-name="Path 4464" d="M33.539,11.259a10.305,10.305,0,0,1-3.027,6.968c.052-3.326-1-4.7-3.062-5.437A8.7,8.7,0,0,1,24,9.96V4.976C29.521,3.772,33.452,7.253,33.539,11.259Z" fill="#3d3d3d"/>
|
||||
<path id="Path_4465" data-name="Path 4465" d="M33.389,27.8a6.76,6.76,0,0,0-.026-5.35l-3.618,2.514a2.626,2.626,0,0,0-.524.48,2.882,2.882,0,0,0-.2,3.919,3.365,3.365,0,0,0-.367.422,2.833,2.833,0,0,0,.006,3.69c-.043.042-.085.086-.124.132-2.549,2.97.917,5.083.917,5.083a5.421,5.421,0,0,0,3.554-6.78A6.03,6.03,0,0,0,33.389,27.8Z" fill="#3d3d3d"/>
|
||||
<path id="Path_4466" data-name="Path 4466" d="M31.27,39.657H28.377a.7.7,0,0,1-.7-.7V37.87a.7.7,0,0,1,.7-.7H31.27a.7.7,0,0,1,.7.7v1.087A.7.7,0,0,1,31.27,39.657Z" fill="#d02127"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12.179" height="12.188" viewBox="0 0 12.179 12.188">
|
||||
<path id="Path_4406" data-name="Path 4406" d="M12.039,10.586c1.24-1.24,1.644-1.48,1.348-1.776L12.38,7.8a.3.3,0,0,0-.427,0L10.6,9.152l-.976-.976A4.378,4.378,0,1,0,8.2,9.615l.973.972c-1.24,1.24-1.644,1.48-1.348,1.776L8.828,13.37a.3.3,0,0,0,.427,0L10.6,12.022c1.457,1.457,1.679,1.847,1.977,1.55.97-.97,1.1-1.02,1.1-1.222s-.058-.183-1.638-1.764ZM5.892,8.77a2.9,2.9,0,1,1,2.9-2.9A2.9,2.9,0,0,1,5.892,8.77Z" transform="translate(-1.498 -1.476)" fill="#f0448d"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 565 B |
@ -0,0 +1,4 @@
|
||||
<svg id="hospital_3_" data-name="hospital (3)" xmlns="http://www.w3.org/2000/svg" width="20.5" height="20.5" viewBox="0 0 20.5 20.5">
|
||||
<path id="Path_4585" data-name="Path 4585" d="M19.9,182.442a.6.6,0,0,0-.6.6v3H18a2.982,2.982,0,0,0-2.921-2.4H8.648v.578L7.413,184.2a3.059,3.059,0,0,0-2.577-.643,1.8,1.8,0,1,0-3.512-.652l-.123-.077V180.6a.6.6,0,0,0-1.2,0v12.092a.6.6,0,0,0,1.2,0v-3H19.3v3a.6.6,0,0,0,1.2,0v-9.649A.6.6,0,0,0,19.9,182.442Zm-18.7,3.6v-1.8l2.853,1.8Z" transform="translate(0 -172.793)" fill="#28323a"/>
|
||||
<path id="Path_4586" data-name="Path 4586" d="M136.6,1.842h1.2v1.2h-.6a.6.6,0,0,0-.6.6v1.2a1.8,1.8,0,0,0,3.6,0v-1.2a.6.6,0,0,0-.6-.6H139v-1.2h2.4V9.649h1.2V.6a.6.6,0,1,0-1.2.04h-4.8a.6.6,0,0,0,0,1.2Z" transform="translate(-130.555)" fill="#28323a"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 776 B |
@ -0,0 +1,56 @@
|
||||
<svg id="man_5_" data-name="man (5)" xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
|
||||
<g id="Group_7139" data-name="Group 7139">
|
||||
<g id="Group_7138" data-name="Group 7138">
|
||||
<g id="Group_7137" data-name="Group 7137">
|
||||
<g id="Group_7136" data-name="Group 7136">
|
||||
<g id="XMLID_2211_">
|
||||
<g id="XMLID_2212_">
|
||||
<g id="XMLID_2213_">
|
||||
<g id="XMLID_2214_">
|
||||
<g id="XMLID_2215_">
|
||||
<g id="XMLID_2216_">
|
||||
<g id="XMLID_2217_">
|
||||
<g id="XMLID_2218_">
|
||||
<g id="XMLID_2219_">
|
||||
<g id="XMLID_2220_">
|
||||
<g id="XMLID_2221_">
|
||||
<g id="XMLID_2222_">
|
||||
<g id="XMLID_2223_">
|
||||
<g id="XMLID_2224_">
|
||||
<g id="XMLID_2225_">
|
||||
<path id="Path_4436" data-name="Path 4436" d="M0,24A24,24,0,1,1,42.887,38.81c-4.394,5.6-11.221,3.983-18.887,3.983S9.507,44.405,5.113,38.81A23.9,23.9,0,0,1,0,24Z" fill="#e2e2e2"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path id="Path_4437" data-name="Path 4437" d="M42.887,38.81A23.9,23.9,0,0,0,48,24q0-.493-.02-.982L34.651,9.689C26.856,6.362,15.212,20.337,15.212,20.337l9.778,9.778,4.217,12.829C34.718,43.153,39.518,43.1,42.887,38.81Z" fill="#c4c4c4"/>
|
||||
<g id="Group_7140" data-name="Group 7140">
|
||||
<path id="Path_4438" data-name="Path 4438" d="M18.747,23.459H29.253V34.6H18.747Z" fill="#eaa678"/>
|
||||
<path id="Path_4439" data-name="Path 4439" d="M24,23.46h5.253V34.6H24Z" fill="#d38c5b"/>
|
||||
<path id="Path_4440" data-name="Path 4440" d="M32.43,46.477a23.683,23.683,0,0,1-3.177.946,24.178,24.178,0,0,1-10.506,0,23.683,23.683,0,0,1-3.177-.946l3.177-16.024L24,33.857l5.253-3.4Z" fill="#d02127"/>
|
||||
<path id="Path_4441" data-name="Path 4441" d="M32.43,46.477a23.683,23.683,0,0,1-3.177.946A24,24,0,0,1,24,48V33.857l5.253-3.4Z" fill="#aa191e"/>
|
||||
<path id="Path_4442" data-name="Path 4442" d="M18.747,30.452V47.423A24,24,0,0,1,5.113,38.81V35.741A5.289,5.289,0,0,1,10.4,30.452Z" fill="#2b353e"/>
|
||||
<path id="Path_4443" data-name="Path 4443" d="M42.887,35.741V38.81a24,24,0,0,1-13.634,8.613V30.452H37.6A5.289,5.289,0,0,1,42.887,35.741Z" fill="#2b353e"/>
|
||||
<path id="Path_4444" data-name="Path 4444" d="M13.7,39.923v5.761a23.726,23.726,0,0,1-3.023-1.717V39.923Z" fill="#989898"/>
|
||||
<path id="Path_4445" data-name="Path 4445" d="M37.362,39.923v4.016a23.888,23.888,0,0,1-3.023,1.725V39.923Z" fill="#989898"/>
|
||||
<path id="Path_4446" data-name="Path 4446" d="M32.274,14.271C31.924,8.965,27.632,7,24,7s-7.924,1.961-8.274,7.267a2.285,2.285,0,0,0-1.5,2.409l.161,2.267a1.875,1.875,0,0,0,2.043,1.7l.175-.019c2.075,5.573,5.33,6.154,7.4,6.48,2.066-.326,5.321-.907,7.4-6.48l.175.019a1.875,1.875,0,0,0,2.043-1.7l.161-2.267A2.285,2.285,0,0,0,32.274,14.271Z" fill="#ffc397"/>
|
||||
<path id="Path_4447" data-name="Path 4447" d="M33.775,16.681l-.161,2.267a1.875,1.875,0,0,1-2.043,1.7l-.175-.019a11.863,11.863,0,0,1-2.445,4.151A7.942,7.942,0,0,1,24,27.1V7c3.632,0,7.924,1.961,8.274,7.267a2.285,2.285,0,0,1,1.5,2.409Z" fill="#eaa678"/>
|
||||
<path id="Path_4448" data-name="Path 4448" d="M34.651,9.689A13.957,13.957,0,0,0,24,4.41a8.424,8.424,0,0,0-4.772,1.436c-.026,0-3.178-.265-4.44,1.943s-.107,6.613,1.16,8.619L17.426,17.7l.68-4.473a17.48,17.48,0,0,0,11.514-.762l.8,5.234,1.478-1.294A12.875,12.875,0,0,0,33.6,10.422C34.277,9.986,34.651,9.689,34.651,9.689Z" fill="#515151"/>
|
||||
<path id="Path_4449" data-name="Path 4449" d="M29.619,12.467l.8,5.234,1.478-1.294A12.875,12.875,0,0,0,33.6,10.422c.677-.436,1.051-.733,1.051-.733A13.956,13.956,0,0,0,24,4.41v9.415A19.77,19.77,0,0,0,29.619,12.467Z" fill="#3d3d3d"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,3 @@
|
||||
<svg id="_14._Men_sign" data-name="14. Men sign" xmlns="http://www.w3.org/2000/svg" width="12.739" height="12.739" viewBox="0 0 12.739 12.739">
|
||||
<path id="Path_4403" data-name="Path 4403" d="M13.928,1.5H8.757a.313.313,0,0,0-.313.313V3.2a.313.313,0,0,0,.313.313h1.988l-2.3,2.3A4.553,4.553,0,1,0,9.93,7.3l2.3-2.3V6.984a.313.313,0,0,0,.313.313h1.383a.313.313,0,0,0,.313-.313V1.813a.313.313,0,0,0-.313-.313ZM6.057,12.687a3,3,0,1,1,3-3,3,3,0,0,1-3,3Z" transform="translate(-1.502 -1.5)" fill="#1474d5"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 507 B |
@ -0,0 +1,19 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22.631" height="6.466" viewBox="0 0 22.631 6.466">
|
||||
<g id="more_1_" data-name="more (1)" transform="translate(0 -170.666)">
|
||||
<g id="Group_7031" data-name="Group 7031" transform="translate(0 170.666)">
|
||||
<g id="Group_7030" data-name="Group 7030" transform="translate(0 0)">
|
||||
<circle id="Ellipse_145" data-name="Ellipse 145" cx="3.233" cy="3.233" r="3.233"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_7033" data-name="Group 7033" transform="translate(8.082 170.666)">
|
||||
<g id="Group_7032" data-name="Group 7032" transform="translate(0 0)">
|
||||
<circle id="Ellipse_146" data-name="Ellipse 146" cx="3.233" cy="3.233" r="3.233"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_7035" data-name="Group 7035" transform="translate(16.165 170.666)">
|
||||
<g id="Group_7034" data-name="Group 7034" transform="translate(0 0)">
|
||||
<circle id="Ellipse_147" data-name="Ellipse 147" cx="3.233" cy="3.233" r="3.233"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 996 B |
@ -0,0 +1,69 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="118.141" height="107.644" viewBox="0 0 118.141 107.644">
|
||||
<g id="content" transform="translate(0 -22.748)">
|
||||
<g id="Group_7442" data-name="Group 7442" transform="translate(1.731 28.436)">
|
||||
<g id="Group_7439" data-name="Group 7439" transform="translate(0 8.932)">
|
||||
<g id="Group_7438" data-name="Group 7438">
|
||||
<g id="Group_7434" data-name="Group 7434" transform="translate(0 21.014)">
|
||||
<g id="Group_7430" data-name="Group 7430" transform="translate(63.164)">
|
||||
<g id="Group_7429" data-name="Group 7429">
|
||||
<path id="Path_4552" data-name="Path 4552" d="M332.756,179.321v66a2.139,2.139,0,0,1-2.141,2.139H283.381a2.141,2.141,0,0,1-2.141-2.139v-66a2.143,2.143,0,0,1,2.141-2.141h47.233a2.141,2.141,0,0,1,2.141,2.141Z" transform="translate(-281.24 -177.18)" fill="#fff"/>
|
||||
<g id="Group_7428" data-name="Group 7428">
|
||||
<path id="Path_4553" data-name="Path 4553" d="M304.644,177.18v63.254a2.475,2.475,0,0,1-2.476,2.476H281.24V179.321a2.143,2.143,0,0,1,2.141-2.141Z" transform="translate(-281.24 -177.18)" fill="#dbdbdb"/>
|
||||
<path id="Path_4554" data-name="Path 4554" d="M332.758,195.96V179.322a2.141,2.141,0,0,0-2.141-2.141H283.384a2.141,2.141,0,0,0-2.141,2.141V195.96Z" transform="translate(-281.242 -177.18)" fill="#dbdbdb"/>
|
||||
<path id="Path_4555" data-name="Path 4555" d="M473.157,179.319v66a2.14,2.14,0,0,1-2.141,2.141h-7.26a2.14,2.14,0,0,0,2.141-2.141v-66a2.141,2.141,0,0,0-2.141-2.141h7.26A2.141,2.141,0,0,1,473.157,179.319Z" transform="translate(-421.642 -177.178)" fill="#dbdbdb"/>
|
||||
</g>
|
||||
<path id="Path_4556" data-name="Path 4556" d="M332.756,179.321V189.4H281.24V179.321a2.143,2.143,0,0,1,2.141-2.141h47.233A2.141,2.141,0,0,1,332.756,179.321Z" transform="translate(-281.24 -177.18)" fill="#d02127"/>
|
||||
<path id="Path_4557" data-name="Path 4557" d="M371.453,179.57a6.171,6.171,0,1,1-11.863-2.391h11.383A6.141,6.141,0,0,1,371.453,179.57Z" transform="translate(-341.142 -177.18)" fill="#d02127"/>
|
||||
<path id="Path_4558" data-name="Path 4558" d="M473.157,179.319v10.075H465.9V179.319a2.141,2.141,0,0,0-2.141-2.141h7.26A2.141,2.141,0,0,1,473.157,179.319Z" transform="translate(-421.642 -177.178)" fill="#d02127"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_7433" data-name="Group 7433">
|
||||
<g id="Group_7432" data-name="Group 7432">
|
||||
<path id="Path_4559" data-name="Path 4559" d="M59.016,179.321v66a2.141,2.141,0,0,1-2.141,2.139H9.641A2.139,2.139,0,0,1,7.5,245.319v-66a2.141,2.141,0,0,1,2.141-2.141H56.875a2.143,2.143,0,0,1,2.141,2.141Z" transform="translate(-7.5 -177.18)" fill="#fff"/>
|
||||
<g id="Group_7431" data-name="Group 7431" transform="translate(0)">
|
||||
<path id="Path_4560" data-name="Path 4560" d="M148.988,179.321V242.91H126.936a2.476,2.476,0,0,1-2.476-2.476V177.18h22.387a2.143,2.143,0,0,1,2.141,2.141Z" transform="translate(-97.472 -177.18)" fill="#dbdbdb"/>
|
||||
<path id="Path_4561" data-name="Path 4561" d="M59.015,195.96V179.322a2.141,2.141,0,0,0-2.141-2.141H9.641A2.141,2.141,0,0,0,7.5,179.322V195.96Z" transform="translate(-7.5 -177.18)" fill="#dbdbdb"/>
|
||||
<path id="Path_4562" data-name="Path 4562" d="M199.413,179.319v66a2.14,2.14,0,0,1-2.141,2.141h-7.26a2.14,2.14,0,0,0,2.141-2.141v-66a2.141,2.141,0,0,0-2.141-2.141h7.26A2.141,2.141,0,0,1,199.413,179.319Z" transform="translate(-147.898 -177.178)" fill="#dbdbdb"/>
|
||||
</g>
|
||||
<path id="Path_4563" data-name="Path 4563" d="M59.015,189.4H7.5V179.323a2.141,2.141,0,0,1,2.141-2.141H56.875a2.141,2.141,0,0,1,2.141,2.141Z" transform="translate(-7.5 -177.181)" fill="#d02127"/>
|
||||
<path id="Path_4564" data-name="Path 4564" d="M199.413,179.319v10.075h-7.26V179.319a2.141,2.141,0,0,0-2.141-2.141h7.26A2.141,2.141,0,0,1,199.413,179.319Z" transform="translate(-147.898 -177.178)" fill="#20bfd5"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_7437" data-name="Group 7437" transform="translate(26.988)">
|
||||
<g id="Group_7436" data-name="Group 7436">
|
||||
<path id="Path_4565" data-name="Path 4565" d="M181.569,167.391H126.94a2.476,2.476,0,0,1-2.476-2.476V88.586a2.476,2.476,0,0,1,2.476-2.476h54.629a2.476,2.476,0,0,1,2.476,2.476v76.329A2.476,2.476,0,0,1,181.569,167.391Z" transform="translate(-124.463 -86.109)" fill="#fff"/>
|
||||
<path id="Path_4566" data-name="Path 4566" d="M184.044,106.725V88.586a2.476,2.476,0,0,0-2.476-2.476H126.94a2.476,2.476,0,0,0-2.476,2.476v18.14Z" transform="translate(-124.463 -86.109)" fill="#dbdbdb"/>
|
||||
<path id="Path_4567" data-name="Path 4567" d="M346.423,88.582v76.33a2.475,2.475,0,0,1-2.476,2.476h-8.4a2.475,2.475,0,0,0,2.476-2.476V88.582a2.476,2.476,0,0,0-2.476-2.476h8.4A2.476,2.476,0,0,1,346.423,88.582Z" transform="translate(-286.842 -86.106)" fill="#dbdbdb"/>
|
||||
<path id="Path_4568" data-name="Path 4568" d="M184.041,88.586v11.653H124.46V88.586a2.476,2.476,0,0,1,2.476-2.476h54.629A2.475,2.475,0,0,1,184.041,88.586Z" transform="translate(-124.46 -86.109)" fill="#d02127"/>
|
||||
<g id="Group_7435" data-name="Group 7435" transform="translate(37.747)">
|
||||
<path id="Path_4569" data-name="Path 4569" d="M299.01,88.138a5.48,5.48,0,1,1-10.57-2.028h10.18A5.435,5.435,0,0,1,299.01,88.138Z" transform="translate(-288.05 -86.109)" fill="#d02127"/>
|
||||
<path id="Path_4570" data-name="Path 4570" d="M346.423,88.582v11.653h-8.4V88.582a2.476,2.476,0,0,0-2.476-2.476h8.4A2.476,2.476,0,0,1,346.423,88.582Z" transform="translate(-324.59 -86.106)" fill="#d02127"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_7440" data-name="Group 7440" transform="translate(81.132 21.147)">
|
||||
<path id="Path_4571" data-name="Path 4571" d="M359.11,145.215a6.171,6.171,0,1,1,6.171,6.171,6.171,6.171,0,0,1-6.171-6.171" transform="translate(-359.11 -139.044)" fill="#d02127"/>
|
||||
<path id="Path_4572" data-name="Path 4572" d="M372.29,150.533a5.46,5.46,0,0,0,0-10.638,6.173,6.173,0,1,1,0,10.638" transform="translate(-369.249 -139.044)" fill="#d02127"/>
|
||||
</g>
|
||||
<g id="Group_7441" data-name="Group 7441" transform="translate(64.735)">
|
||||
<path id="Path_4573" data-name="Path 4573" d="M288.05,52.878a5.48,5.48,0,1,1,5.48,5.48,5.48,5.48,0,0,1-5.48-5.48" transform="translate(-288.05 -47.398)" fill="#d02127"/>
|
||||
<path id="Path_4574" data-name="Path 4574" d="M299.754,57.6a4.849,4.849,0,0,0,0-9.446,5.481,5.481,0,1,1,0,9.446" transform="translate(-297.053 -47.397)" fill="#d02127"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_7443" data-name="Group 7443" transform="translate(0 22.748)">
|
||||
<path id="Path_4575" data-name="Path 4575" d="M114.27,69.844H96.883a7.887,7.887,0,0,0-6.853-8.735V53.036a4.211,4.211,0,0,0-4.206-4.206H78.948a7.211,7.211,0,1,0-14,0H31.2a4.211,4.211,0,0,0-4.206,4.206V69.844H21.93a1.731,1.731,0,0,0,0,3.461h5.058V82.06H3.461V73.716a.411.411,0,0,1,.41-.41h9.515a1.731,1.731,0,0,0,0-3.461H3.871A3.876,3.876,0,0,0,0,73.716v66a3.876,3.876,0,0,0,3.871,3.871H51.105a3.876,3.876,0,0,0,3.871-3.871v-6.14h8.188v6.14a3.876,3.876,0,0,0,3.871,3.871H81.123a1.731,1.731,0,0,0,0-3.461H67.036a.41.41,0,0,1-.41-.41v-6.14h19.2a4.211,4.211,0,0,0,4.206-4.206V85.521h24.65v54.191a.41.41,0,0,1-.41.41h-24.6a1.731,1.731,0,0,0,0,3.461h24.6a3.876,3.876,0,0,0,3.871-3.871v-66a3.876,3.876,0,0,0-3.871-3.871Zm-20.8-.9a4.441,4.441,0,1,1-4.441-4.441A4.446,4.446,0,0,1,93.475,68.946ZM71.946,43.358a3.75,3.75,0,1,1-3.75,3.75A3.754,3.754,0,0,1,71.946,43.358ZM31.2,52.291H66.941a7.192,7.192,0,0,0,10.011,0h8.873a.746.746,0,0,1,.745.745v8.4a7.9,7.9,0,0,0-2.683,1.519H30.45V53.036a.746.746,0,0,1,.745-.745Zm54.629,77.82H31.2a.746.746,0,0,1-.745-.745V109.979a1.731,1.731,0,0,0-3.461,0v19.386a4.211,4.211,0,0,0,4.206,4.206h20.32v6.14a.41.41,0,0,1-.41.41H3.871a.41.41,0,0,1-.41-.41V85.521H26.989v15.915a1.731,1.731,0,1,0,3.461,0V66.419h51.1a7.895,7.895,0,0,0,5.021,10.033v52.913A.746.746,0,0,1,85.824,130.111ZM90.03,82.06V76.783a7.909,7.909,0,0,0,5.59-3.478h18.65a.41.41,0,0,1,.41.41V82.06H90.03Z" transform="translate(0 -35.94)" fill="#2e303a"/>
|
||||
<path id="Path_4576" data-name="Path 4576" d="M238.224,296.64a8.143,8.143,0,0,0-5.276-1.877h-.027a8.138,8.138,0,0,0-5.261,1.846,1.73,1.73,0,1,0,2.231,2.646,4.746,4.746,0,0,1,3.03-1.03h.015a4.75,4.75,0,0,1,3.04,1.048,1.731,1.731,0,0,0,2.247-2.633Z" transform="translate(-174.656 -231.997)"/>
|
||||
<path id="Path_4577" data-name="Path 4577" d="M288.664,267.015l-.045,0h-.03a1.73,1.73,0,0,0-.156,3.452l.039,0c.042,0,.085.007.128.007h.01a1.73,1.73,0,0,0,.054-3.459Z" transform="translate(-220.675 -210.65)"/>
|
||||
<path id="Path_4578" data-name="Path 4578" d="M207.009,267.012h-.03a1.731,1.731,0,0,0,.011,3.461H207a1.731,1.731,0,0,0,.009-3.461Z" transform="translate(-157.897 -210.65)"/>
|
||||
<path id="Path_4579" data-name="Path 4579" d="M156.674,112.612h.009c.038,0,.077,0,.115.006l.062,0h.009a1.73,1.73,0,0,0,.346-3.426h-.007c-.053-.011-.108-.019-.162-.025-.02,0-.04,0-.06,0-.036,0-.072-.006-.109-.006h-.031a1.721,1.721,0,0,0-1.722,1.731,1.738,1.738,0,0,0,1.549,1.719Z" transform="translate(-119.331 -89.223)"/>
|
||||
<path id="Path_4580" data-name="Path 4580" d="M179.553,112.623a1.731,1.731,0,0,0,0-3.461h-.021a1.722,1.722,0,0,0-1.72,1.731A1.74,1.74,0,0,0,179.553,112.623Z" transform="translate(-136.783 -89.223)"/>
|
||||
<path id="Path_4581" data-name="Path 4581" d="M202.243,112.623a1.731,1.731,0,0,0,0-3.461h-.021a1.722,1.722,0,0,0-1.72,1.731A1.74,1.74,0,0,0,202.243,112.623Z" transform="translate(-154.237 -89.223)"/>
|
||||
<path id="Path_4582" data-name="Path 4582" d="M53.4,116.408a1.73,1.73,0,0,0,2.447,0l.922-.922.922.922a1.73,1.73,0,0,0,2.447-2.447l-.922-.922.922-.922A1.73,1.73,0,0,0,57.7,109.67l-.922.922-.922-.922a1.73,1.73,0,0,0-2.447,2.447l.922.922-.922.922A1.73,1.73,0,0,0,53.4,116.408Z" transform="translate(-40.692 -89.223)"/>
|
||||
<path id="Path_4583" data-name="Path 4583" d="M428.867,107.109a1.73,1.73,0,0,0,2.447,0l.922-.922.922.922a1.73,1.73,0,0,0,2.447-2.447l-.922-.922.922-.922a1.73,1.73,0,0,0-2.447-2.447l-.922.922-.922-.922a1.73,1.73,0,1,0-2.447,2.447l.922.922-.922.922A1.73,1.73,0,0,0,428.867,107.109Z" transform="translate(-329.518 -82.07)"/>
|
||||
<path id="Path_4584" data-name="Path 4584" d="M237.941,29.993a1.73,1.73,0,0,0,2.447,0l.922-.922.922.922a1.73,1.73,0,0,0,2.447-2.447l-.922-.922.922-.922a1.73,1.73,0,0,0-2.447-2.447l-.922.922-.922-.922a1.73,1.73,0,1,0-2.447,2.447l.922.922-.922.922A1.73,1.73,0,0,0,237.941,29.993Z" transform="translate(-182.648 -22.748)"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="25.347" height="25.347" viewBox="0 0 25.347 25.347">
|
||||
<path id="ekg-monitor" d="M.878,0H24.471a.878.878,0,0,1,.877.877V11.77l-7.647,0a.906.906,0,0,0-.845.582l-1.678,4.393L10.98,5.741a.9.9,0,0,0-.846-.583h0a.9.9,0,0,0-.846.582L6.982,11.774,0,11.77V.878A.878.878,0,0,1,.878,0ZM24.471,25.348a.878.878,0,0,0,.877-.877V13.58l-7.023,0-2.3,6.026a.905.905,0,0,1-1.692,0L10.133,8.6,8.451,13a.906.906,0,0,1-.846.582h0l-7.6,0V24.471a.878.878,0,0,0,.877.877H24.471Z" transform="translate(-0.001 -0.001)" fill="#28323a" fill-rule="evenodd"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 584 B |
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="33.043" height="27.106" viewBox="0 0 33.043 27.106">
|
||||
<path id="process" d="M28.2,19.555,27.042,21.1l1.549,1.162H25.1a3.868,3.868,0,0,0-3.735-2.9H11.681a3.868,3.868,0,0,0-3.735,2.9H5.808a3.872,3.872,0,0,1,0-7.744H7.946a3.868,3.868,0,0,0,3.735,2.9h9.681a3.868,3.868,0,0,0,3.735-2.9h2.138a5.808,5.808,0,1,0,0-11.617H25.1A3.868,3.868,0,0,0,21.362,0H11.681A3.868,3.868,0,0,0,7.946,2.9H7.1L3.485.194,2.324,1.742,3.872,2.9H0V4.84H3.872L2.324,6,3.485,7.551,7.1,4.84h.847a3.868,3.868,0,0,0,3.735,2.9h9.681A3.868,3.868,0,0,0,25.1,4.84h2.138a3.872,3.872,0,1,1,0,7.744H25.1a3.868,3.868,0,0,0-3.735-2.9H11.681a3.868,3.868,0,0,0-3.735,2.9H5.808a5.808,5.808,0,1,0,0,11.617H7.946a3.868,3.868,0,0,0,3.735,2.9h9.681A3.868,3.868,0,0,0,25.1,24.2h3.494l-1.549,1.162L28.2,26.912l4.84-3.678Zm0,0" fill="#28323a"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 847 B |
@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="31.83" height="27.976" viewBox="0 0 31.83 27.976">
|
||||
<g id="sticky-note" transform="translate(0 -31.001)">
|
||||
<g id="Group_7171" data-name="Group 7171" transform="translate(11.19 31.001)">
|
||||
<path id="Path_4476" data-name="Path 4476" d="M180,38.461V31.934a.933.933,0,0,1,1.865,0v6.528Z" transform="translate(-180 -31.001)" fill="#28323a"/>
|
||||
</g>
|
||||
<g id="Group_7172" data-name="Group 7172" transform="translate(0 46.403)">
|
||||
<path id="Path_4477" data-name="Path 4477" d="M8.393,289.46a2.779,2.779,0,0,1-1.978-.819A28.3,28.3,0,0,1,0,278.751v11.641a.933.933,0,0,0,.933.933H23.313a.933.933,0,0,0,.933-.933v-.933Z" transform="translate(0 -278.751)" fill="#28323a"/>
|
||||
</g>
|
||||
<g id="Group_7173" data-name="Group 7173" transform="translate(0 34.731)">
|
||||
<path id="Path_4478" data-name="Path 4478" d="M31.557,109.924a24.777,24.777,0,0,1-7.312-17.351v-.64A.933.933,0,0,0,23.313,91H14.92v4.663a.933.933,0,0,1-.933.933h-3.73a.933.933,0,0,1-.933-.933V91H.933A.933.933,0,0,0,0,91.934v.64a26.393,26.393,0,0,0,7.733,18.67.934.934,0,0,0,.66.273H30.9a.933.933,0,0,0,.66-1.592ZM12.123,98.461h7.46a.933.933,0,0,1,0,1.865h-7.46a.933.933,0,0,1,0-1.865Zm7.46,9.325H10.258a.933.933,0,0,1,0-1.865h9.325a.933.933,0,0,1,0,1.865Zm1.865-3.73H8.393a.933.933,0,1,1,0-1.865H21.448a.933.933,0,1,1,0,1.865Z" transform="translate(0 -91.001)" fill="#28323a"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="35.842" height="28.675" viewBox="0 0 35.842 28.675">
|
||||
<path id="Path_4336" data-name="Path 4336" d="M38.948,34.883H29.987V31.3c5.825,0,5.771.134,6.12-.4l1.559-2.285A2.688,2.688,0,0,0,38,23.422a5.377,5.377,0,0,0-5.323-4.669H28.956A12.545,12.545,0,0,0,16.545,8C4.3,8-.668,23.843,9.377,30.823v4.059H6.688a.9.9,0,1,0,0,1.792H38.948a.9.9,0,1,0,0-1.792ZM8.561,21.656a8.065,8.065,0,0,1,14.92-5.224,7.832,7.832,0,0,1,.9,2.321c-2.1,0-1.577.806-1.792.054.161.484.09.224-.367.627a3.584,3.584,0,0,0-6.066,3.8,2.689,2.689,0,0,0,.134,5.377,8.065,8.065,0,0,1-7.724-6.954Zm28.594,3.369a.9.9,0,0,1,.618,1.532c-.367.385,1.174.26-21.228.26a.9.9,0,0,1-.618-1.532C16.286,24.9,14.825,25.026,37.155,25.026Zm-16.542,4.48-.6-.9h4.749a2.841,2.841,0,0,0-.152.9Zm-3.172-8.065a1.792,1.792,0,1,1,1.792,1.792A1.792,1.792,0,0,1,17.442,21.441ZM23.714,31.3h.9v3.584h-.9Zm11.165-1.792H29.987a2.688,2.688,0,0,0-.152-.9H35.48Zm1.263-6.273c-12.993,0-12.249.09-12.706-.215a1.335,1.335,0,0,1-.224-2.079c.5-.565.547-.394,9.463-.394a3.584,3.584,0,0,1,3.468,2.688ZM15.649,32.194h1.792v2.688H15.649Z" transform="translate(-4.002 -8)" fill="#28323a"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30">
|
||||
<path id="Path_4487" data-name="Path 4487" d="M15.879,1.8V0H14.121V1.8C6.047,2.2,0,8.143,0,15.879V17.3l1.27-.629a8.69,8.69,0,0,1,3.182-.787,5.156,5.156,0,0,1,2.9,1.5l.621.615.62-.615a5.156,5.156,0,0,1,2.9-1.5,4.774,4.774,0,0,1,2.637,1.267V27.363a2.637,2.637,0,0,0,5.273,0V25.605H17.637v1.758a.879.879,0,0,1-1.758,0V17.146a4.774,4.774,0,0,1,2.637-1.267,5.156,5.156,0,0,1,2.9,1.5l.621.615.62-.615a5.344,5.344,0,0,1,2.954-1.5,8.222,8.222,0,0,1,3.123.787L30,17.3V15.879C30,8.143,23.953,2.2,15.879,1.8Z" fill="#28323a"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 609 B |
@ -0,0 +1,11 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="33.112" height="30.051" viewBox="0 0 33.112 30.051">
|
||||
<g id="reception" transform="translate(0 -23.667)">
|
||||
<path id="Path_4479" data-name="Path 4479" d="M0,313.745H33.112V301.673H0Zm15.586-9.318h1.94v2.183h2.183v1.94H17.526v2.183h-1.94V308.55H13.4v-1.94h2.183Z" transform="translate(0 -260.027)" fill="#28323a"/>
|
||||
<path id="Path_4480" data-name="Path 4480" d="M30,236.668H59.234v2.264H30Z" transform="translate(-28.062 -199.226)" fill="#28323a"/>
|
||||
<path id="Path_4481" data-name="Path 4481" d="M108.058,103.919c0-.057,0-.113-.005-.169h-6.1c0,.056-.005.112-.005.169a3.057,3.057,0,0,0,2.717,3.034h.672A3.057,3.057,0,0,0,108.058,103.919Z" transform="translate(-95.358 -74.904)" fill="#28323a"/>
|
||||
<path id="Path_4482" data-name="Path 4482" d="M65.158,153.293h-.911a3.888,3.888,0,0,0-3.86,3.452h4.771v-3.452Z" transform="translate(-56.482 -121.243)" fill="#28323a"/>
|
||||
<path id="Path_4483" data-name="Path 4483" d="M165.076,153.293h-.911v3.452h4.771a3.888,3.888,0,0,0-3.86-3.452Z" transform="translate(-153.548 -121.243)" fill="#28323a"/>
|
||||
<path id="Path_4484" data-name="Path 4484" d="M98.828,26.906,99.4,24.35a10.351,10.351,0,0,0-7.394,0l.569,2.556Z" transform="translate(-86.054)" fill="#28323a"/>
|
||||
<path id="Path_4485" data-name="Path 4485" d="M296.991,135.98h10.025v4.572H296.991Z" transform="translate(-277.784 -105.049)" fill="#28323a"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@ -0,0 +1,10 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="17.016" height="15.893" viewBox="0 0 17.016 15.893">
|
||||
<g id="Layer_2" data-name="Layer 2" transform="translate(-1 -1.98)">
|
||||
<path id="Path_4511" data-name="Path 4511" d="M15.429,21.777H3.586A2.592,2.592,0,0,1,1,19.2V11H18.016v8.2a2.592,2.592,0,0,1-2.586,2.581ZM2.134,12.134V19.2a1.458,1.458,0,0,0,1.452,1.446H15.429A1.458,1.458,0,0,0,16.881,19.2V12.134Z" transform="translate(0 -3.904)" fill="#28323a"/>
|
||||
<path id="Path_4512" data-name="Path 4512" d="M18.016,9.1H1V6.6A2.592,2.592,0,0,1,3.586,4H15.429a2.592,2.592,0,0,1,2.586,2.6ZM2.134,7.97H16.881V6.6a1.458,1.458,0,0,0-1.452-1.463H3.586A1.458,1.458,0,0,0,2.134,6.6Z" transform="translate(0 -0.874)" fill="#28323a"/>
|
||||
<rect id="Rectangle_17397" data-name="Rectangle 17397" width="1.134" height="3.437" rx="0.567" transform="translate(4.369 1.98)" fill="#28323a"/>
|
||||
<rect id="Rectangle_17398" data-name="Rectangle 17398" width="1.134" height="3.437" rx="0.567" transform="translate(13.512 1.98)" fill="#28323a"/>
|
||||
<rect id="Rectangle_17399" data-name="Rectangle 17399" width="1.134" height="3.437" rx="0.567" transform="translate(8.941 1.98)" fill="#28323a"/>
|
||||
<path id="Path_4513" data-name="Path 4513" d="M2.31,12v9.217H17.732V12Zm4.929,5.717a.567.567,0,1,1,.567-.567A.567.567,0,0,1,7.239,17.717Zm2.836,0a.567.567,0,1,1,.567-.567A.567.567,0,0,1,10.075,17.717Zm2.836,0a.567.567,0,1,1,.567-.567A.567.567,0,0,1,12.911,17.717Z" transform="translate(-0.567 -4.337)" fill="#28323a"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |