Compare commits
584 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
b93e23a314 | 23 hours ago |
|
|
fb64d3b957 | 1 day ago |
|
|
e73d2534cc | 1 day ago |
|
|
e52aa24822 | 1 day ago |
|
|
83a414796a | 1 day ago |
|
|
dfc2e21e8c | 1 day ago |
|
|
1366518ce1 | 1 day ago |
|
|
38e1a9ae4e | 1 day ago |
|
|
10db964fd8 | 1 day ago |
|
|
61f17a3feb | 1 day ago |
|
|
b18ddd1ad7 | 1 day ago |
|
|
8a41b5716f | 1 day ago |
|
|
779ea23efa | 1 day ago |
|
|
05aaa71cf9 | 1 day ago |
|
|
8c925a7f5e | 1 day ago |
|
|
5374110bff | 2 days ago |
|
|
1810071f1b | 2 days ago |
|
|
513422cb03 | 2 days ago |
|
|
bf7b0d922e | 2 days ago |
|
|
464991153f | 2 days ago |
|
|
a651e2a650 | 2 days ago |
|
|
cb2e3c7574 | 2 days ago |
|
|
b51cd52fa4 | 2 days ago |
|
|
6c3808effe | 2 days ago |
|
|
d7794d8ab2 | 2 days ago |
|
|
baa9ebe7ea | 2 days ago |
|
|
256537cfb3 | 2 days ago |
|
|
1849a90b32 | 2 days ago |
|
|
c91d25add3 | 2 days ago |
|
|
cfcbaa85a3 | 2 days ago |
|
|
086df4cdd8 | 2 days ago |
|
|
fbe2406d34 | 2 days ago |
|
|
ee8257054e | 2 days ago |
|
|
6b4d43caf3 | 2 days ago |
|
|
fecf17fb7e | 2 days ago |
|
|
28d03644ba | 2 days ago |
|
|
fee2001499 | 2 days ago |
|
|
929a25d9a4 | 2 days ago |
|
|
43497a2f11 | 2 days ago |
|
|
138e65d6fc | 2 days ago |
|
|
60b71e9b1d | 2 days ago |
|
|
1515fc57e5 | 2 days ago |
|
|
bf9b88e79c | 2 days ago |
|
|
a81044c7eb | 2 days ago |
|
|
8be2398cc6 | 2 days ago |
|
|
94993fa6fb | 2 days ago |
|
|
66e23197c5 | 2 days ago |
|
|
1e65a67f0e | 3 days ago |
|
|
42e710c61f | 3 days ago |
|
|
bd581c4fe0 | 3 days ago |
|
|
248faa3ac7 | 3 days ago |
|
|
82f2adfc3f | 3 days ago |
|
|
c1c434789e | 3 days ago |
|
|
a31c4c99df | 3 days ago |
|
|
2d36d91ab6 | 3 days ago |
|
|
2c45063291 | 3 days ago |
|
|
c2dcf95d52 | 3 days ago |
|
|
01e56e4fb5 | 3 days ago |
|
|
db2ccd3be6 | 3 days ago |
|
|
50a597b4d3 | 3 days ago |
|
|
6bc80a394d | 3 days ago |
|
|
f14958f9e1 | 3 days ago |
|
|
14771b32d3 | 3 days ago |
|
|
c2d468bd74 | 3 days ago |
|
|
5c3b1fe448 | 3 days ago |
|
|
5a4e5e138b | 3 days ago |
|
|
898cbb0a78 | 3 days ago |
|
|
8e9c5ae6df | 3 days ago |
|
|
9ff303d514 | 3 days ago |
|
|
c29d5e4846 | 3 days ago |
|
|
aa22ad1e07 | 3 days ago |
|
|
4cd5132627 | 3 days ago |
|
|
ce0eda7448 | 3 days ago |
|
|
0a24e6cfd1 | 3 days ago |
|
|
2a850c732d | 3 days ago |
|
|
fd3e434b0c | 3 days ago |
|
|
7d86ca0511 | 3 days ago |
|
|
4c56137f10 | 3 days ago |
|
|
2c3f671a50 | 3 days ago |
|
|
c19451a6b6 | 3 days ago |
|
|
203c025183 | 3 days ago |
|
|
9e5c9f9b4c | 3 days ago |
|
|
81cdb4be30 | 4 days ago |
|
|
a38a2a0619 | 4 days ago |
|
|
75bd5fbe15 | 4 days ago |
|
|
69310575e5 | 4 days ago |
|
|
994bf95043 | 4 days ago |
|
|
9cf6a63c4e | 4 days ago |
|
|
4f60227429 | 4 days ago |
|
|
772f6caa38 | 4 days ago |
|
|
bb565c58f4 | 4 days ago |
|
|
befcee7c65 | 4 days ago |
|
|
a2c2b24b2a | 4 days ago |
|
|
76c3013840 | 4 days ago |
|
|
bd3aeefbe8 | 4 days ago |
|
|
2f4db29a70 | 4 days ago |
|
|
f0b8db0318 | 4 days ago |
|
|
f199fca859 | 4 days ago |
|
|
461fa11df3 | 4 days ago |
|
|
ac6e96ad6c | 4 days ago |
|
|
04d14a4d82 | 4 days ago |
|
|
6104f38535 | 4 days ago |
|
|
16e898bb6c | 4 days ago |
|
|
90bcdf674d | 4 days ago |
|
|
620d89fcd1 | 5 days ago |
|
|
bc97bded62 | 5 days ago |
|
|
303fb87661 | 5 days ago |
|
|
ef021c1fa0 | 5 days ago |
|
|
fcf990bc00 | 5 days ago |
|
|
cfea843c4f | 5 days ago |
|
|
2b0f8b45b0 | 5 days ago |
|
|
8c3121fd38 | 5 days ago |
|
|
a144f30f42 | 5 days ago |
|
|
d97ead4e03 | 5 days ago |
|
|
fb93aa1092 | 5 days ago |
|
|
12b611500d | 5 days ago |
|
|
ebfefefec0 | 5 days ago |
|
|
7bf69c52f0 | 5 days ago |
|
|
2c7c71c566 | 5 days ago |
|
|
730a4f0040 | 6 days ago |
|
|
be8cf08005 | 6 days ago |
|
|
509eeb69ac | 6 days ago |
|
|
b10142061e | 6 days ago |
|
|
be08c3f228 | 6 days ago |
|
|
bd5ef5e84a | 6 days ago |
|
|
beab4c1d08 | 6 days ago |
|
|
8e8177e573 | 6 days ago |
|
|
b7986b753b | 6 days ago |
|
|
3d226c39d0 | 6 days ago |
|
|
207b84e493 | 7 days ago |
|
|
7e2c470767 | 7 days ago |
|
|
5f82f0db2d | 7 days ago |
|
|
46f9d38dcc | 7 days ago |
|
|
76ebdf6062 | 7 days ago |
|
|
86fa198afc | 7 days ago |
|
|
c7875aca35 | 1 week ago |
|
|
50c49ffb01 | 1 week ago |
|
|
408c0c83d9 | 1 week ago |
|
|
a55bfb3b51 | 1 week ago |
|
|
17c6d11df2 | 1 week ago |
|
|
b4ab3a112c | 1 week ago |
|
|
b82f4cbcb4 | 1 week ago |
|
|
e60d2566d9 | 1 week ago |
|
|
a1e90ac0b6 | 1 week ago |
|
|
3777ab8898 | 1 week ago |
|
|
13ce350434 | 1 week ago |
|
|
1aacda08a3 | 1 week ago |
|
|
5989dda613 | 1 week ago |
|
|
21c7b05df9 | 1 week ago |
|
|
fcdc96d944 | 1 week ago |
|
|
c5b91a0bb5 | 1 week ago |
|
|
0566685e48 | 1 week ago |
|
|
21ae30a8cc | 1 week ago |
|
|
5f559a44dd | 1 week ago |
|
|
f836b5d67a | 1 week ago |
|
|
6a687f4ff6 | 1 week ago |
|
|
f472bd49f4 | 1 week ago |
|
|
a0d9c35d0a | 1 week ago |
|
|
9703e23a32 | 1 week ago |
|
|
5b44329972 | 1 week ago |
|
|
39cbee029a | 1 week ago |
|
|
74479850f5 | 1 week ago |
|
|
7a0caa05c3 | 1 week ago |
|
|
d1e0ec31e6 | 1 week ago |
|
|
ad0cbe1e21 | 1 week ago |
|
|
b33a559305 | 1 week ago |
|
|
d899d21fa3 | 1 week ago |
|
|
f8df84177d | 1 week ago |
|
|
8af7be05bf | 1 week ago |
|
|
bb274e80c1 | 1 week ago |
|
|
3d1c415e2c | 1 week ago |
|
|
fbb758e227 | 1 week ago |
|
|
76006dcb73 | 1 week ago |
|
|
6d647d75be | 1 week ago |
|
|
5a402b45b7 | 1 week ago |
|
|
a5f7bd80b2 | 1 week ago |
|
|
5c9221da66 | 1 week ago |
|
|
75473e26bd | 1 week ago |
|
|
708cbb138d | 1 week ago |
|
|
1acd088581 | 1 week ago |
|
|
126423d6a1 | 1 week ago |
|
|
909bbab48b | 1 week ago |
|
|
5900657b52 | 1 week ago |
|
|
2d7aa5d80d | 1 week ago |
|
|
acff5d220c | 1 week ago |
|
|
a2de3f1b14 | 1 week ago |
|
|
65b7b9e2ec | 1 week ago |
|
|
cc9ac07923 | 1 week ago |
|
|
712e835176 | 1 week ago |
|
|
fe1e0fdb40 | 1 week ago |
|
|
10fa8c46cf | 1 week ago |
|
|
572c37785b | 1 week ago |
|
|
6939630ce0 | 1 week ago |
|
|
a5c661b35f | 1 week ago |
|
|
5318437941 | 1 week ago |
|
|
18331f077e | 1 week ago |
|
|
287dcf3482 | 1 week ago |
|
|
7fcee6a988 | 1 week ago |
|
|
6e2d87d172 | 1 week ago |
|
|
185f505ed9 | 1 week ago |
|
|
991f9c7a9b | 1 week ago |
|
|
71030c0fe9 | 1 week ago |
|
|
7abee6bb5e | 1 week ago |
|
|
13a4c9e0f8 | 1 week ago |
|
|
e3f5bb69ac | 1 week ago |
|
|
081dfce480 | 1 week ago |
|
|
59fc109454 | 1 week ago |
|
|
a9f46a39cc | 1 week ago |
|
|
92101d2b05 | 1 week ago |
|
|
b3fa4c9bdf | 1 week ago |
|
|
0d4563542a | 1 week ago |
|
|
bd85c9368d | 1 week ago |
|
|
89a1da4407 | 1 week ago |
|
|
d8ab3c047f | 1 week ago |
|
|
56f5151c0c | 1 week ago |
|
|
c716490b0e | 1 week ago |
|
|
351026e42c | 1 week ago |
|
|
be6d33e51b | 1 week ago |
|
|
fed6cf6784 | 1 week ago |
|
|
453cfc07e1 | 2 weeks ago |
|
|
9c51f53a4d | 2 weeks ago |
|
|
1fa03fff5e | 2 weeks ago |
|
|
973fdc3692 | 2 weeks ago |
|
|
07bf971575 | 2 weeks ago |
|
|
2ae9ab9fac | 2 weeks ago |
|
|
e9ec23f506 | 2 weeks ago |
|
|
21477f34dc | 2 weeks ago |
|
|
0eb9ec11d3 | 2 weeks ago |
|
|
f929bd9017 | 2 weeks ago |
|
|
400e5daac0 | 2 weeks ago |
|
|
aa17688de6 | 2 weeks ago |
|
|
6def7b5263 | 2 weeks ago |
|
|
3d39190c62 | 2 weeks ago |
|
|
04cbb3db40 | 2 weeks ago |
|
|
830086a5b9 | 2 weeks ago |
|
|
0c6ff3efe8 | 2 weeks ago |
|
|
a8620c1f72 | 2 weeks ago |
|
|
75531c2254 | 2 weeks ago |
|
|
4959392f74 | 2 weeks ago |
|
|
7135800552 | 2 weeks ago |
|
|
a2fa661db4 | 2 weeks ago |
|
|
bdeec6a412 | 2 weeks ago |
|
|
8a11cc03cb | 2 weeks ago |
|
|
5be4f66718 | 2 weeks ago |
|
|
f7446d0d41 | 2 weeks ago |
|
|
2a8f67bba1 | 2 weeks ago |
|
|
8112f9bb0a | 2 weeks ago |
|
|
3703afe8bd | 2 weeks ago |
|
|
edeae70aa0 | 2 weeks ago |
|
|
1f290c5bfe | 2 weeks ago |
|
|
deca29b423 | 2 weeks ago |
|
|
93af246700 | 2 weeks ago |
|
|
c18bf9f2c1 | 2 weeks ago |
|
|
f9f2e22376 | 2 weeks ago |
|
|
ac8189fa17 | 2 weeks ago |
|
|
7e73741d08 | 2 weeks ago |
|
|
bd65d05e9e | 2 weeks ago |
|
|
9612b0019c | 2 weeks ago |
|
|
a13d0cf0e4 | 2 weeks ago |
|
|
c970a3f697 | 2 weeks ago |
|
|
6178062ed0 | 2 weeks ago |
|
|
ecdef5f057 | 2 weeks ago |
|
|
6108a629a2 | 2 weeks ago |
|
|
837a934d0d | 2 weeks ago |
|
|
c324007e61 | 2 weeks ago |
|
|
38471a773c | 2 weeks ago |
|
|
d3dfb2e2a5 | 2 weeks ago |
|
|
fbb2570d8e | 2 weeks ago |
|
|
db89408185 | 2 weeks ago |
|
|
833ccc9ff1 | 2 weeks ago |
|
|
78a6d55b35 | 2 weeks ago |
|
|
841fca027c | 2 weeks ago |
|
|
078b236b67 | 2 weeks ago |
|
|
ddb97423c7 | 2 weeks ago |
|
|
e29aba81da | 2 weeks ago |
|
|
a8138ba231 | 2 weeks ago |
|
|
8b829b9101 | 2 weeks ago |
|
|
a45980162d | 2 weeks ago |
|
|
444e7b562f | 2 weeks ago |
|
|
88da9af44b | 2 weeks ago |
|
|
7a4e28bbea | 2 weeks ago |
|
|
7611c1d58c | 2 weeks ago |
|
|
f1555c76a3 | 2 weeks ago |
|
|
dfc666673d | 3 weeks ago |
|
|
2babda2d63 | 3 weeks ago |
|
|
f56c41c82f | 3 weeks ago |
|
|
bf7ee71801 | 3 weeks ago |
|
|
6a4793f122 | 3 weeks ago |
|
|
d4ed2b47bc | 3 weeks ago |
|
|
4dce062daf | 3 weeks ago |
|
|
1d1c756412 | 3 weeks ago |
|
|
fc21746683 | 3 weeks ago |
|
|
1709b80e84 | 3 weeks ago |
|
|
4a3d66f01a | 3 weeks ago |
|
|
0ed6103b15 | 3 weeks ago |
|
|
d053f58b7d | 3 weeks ago |
|
|
d703c382e5 | 3 weeks ago |
|
|
3d877ed28d | 3 weeks ago |
|
|
55b8bc162c | 4 weeks ago |
|
|
08928ddd28 | 1 month ago |
|
|
f84d5c6769 | 1 month ago |
|
|
657f886391 | 1 month ago |
|
|
30bdfac442 | 1 month ago |
|
|
d194b5a45b | 1 month ago |
|
|
1a68ffd500 | 1 month ago |
|
|
50d78551c2 | 1 month ago |
|
|
abbf016694 | 1 month ago |
|
|
2c0d010bac | 1 month ago |
|
|
24fa8e18f3 | 1 month ago |
|
|
dda4dbeba9 | 1 month ago |
|
|
f51e37db55 | 1 month ago |
|
|
4f303d8496 | 1 month ago |
|
|
151fcf23d1 | 1 month ago |
|
|
ff75531f26 | 1 month ago |
|
|
114e9e7929 | 1 month ago |
|
|
47b50e35a1 | 1 month ago |
|
|
80adf1bd2f | 1 month ago |
|
|
29447cc9fa | 1 month ago |
|
|
5b04a5a3ea | 1 month ago |
|
|
cdbba6f270 | 1 month ago |
|
|
6e71aa7f13 | 1 month ago |
|
|
fdeeed10d6 | 1 month ago |
|
|
8de8039096 | 1 month ago |
|
|
040ff6a80d | 1 month ago |
|
|
f46b3f745f | 1 month ago |
|
|
acfab432cc | 1 month ago |
|
|
074c060e36 | 1 month ago |
|
|
b4a7508f7c | 1 month ago |
|
|
d6eb6970af | 2 months ago |
|
|
961a1f5b03 | 2 months ago |
|
|
68ff91561f | 2 months ago |
|
|
631fabad23 | 2 months ago |
|
|
7b2e3a5a54 | 2 months ago |
|
|
71ac91a076 | 2 months ago |
|
|
558381b797 | 2 months ago |
|
|
f5aa12a04b | 2 months ago |
|
|
b75f0c7ee4 | 2 months ago |
|
|
79b23584db | 2 months ago |
|
|
295709cbc2 | 2 months ago |
|
|
1286455f8c | 2 months ago |
|
|
8878558f12 | 2 months ago |
|
|
5e16169867 | 2 months ago |
|
|
ee358259f5 | 2 months ago |
|
|
8368dbd4d9 | 2 months ago |
|
|
faf00b88ef | 2 months ago |
|
|
cf27430e29 | 2 months ago |
|
|
dffed5df6b | 2 months ago |
|
|
cf3c14281c | 2 months ago |
|
|
d9013a1dc2 | 2 months ago |
|
|
a25df34f42 | 2 months ago |
|
|
6cc058e86d | 2 months ago |
|
|
fbe9cd9dff | 2 months ago |
|
|
84224ae61b | 2 months ago |
|
|
7100283a9d | 2 months ago |
|
|
3f9046f1e4 | 2 months ago |
|
|
b334f631bd | 2 months ago |
|
|
a395d9b93a | 2 months ago |
|
|
c2028841c5 | 2 months ago |
|
|
bfeb3dce4e | 2 months ago |
|
|
dc0e4e5eb6 | 2 months ago |
|
|
46c8fbf0f6 | 2 months ago |
|
|
658b77aa37 | 2 months ago |
|
|
2a819a2d97 | 2 months ago |
|
|
9413e54d3a | 2 months ago |
|
|
b91850d388 | 2 months ago |
|
|
105ab2326a | 2 months ago |
|
|
ec506869cc | 2 months ago |
|
|
05b6d02e4c | 2 months ago |
|
|
5ea70397e2 | 2 months ago |
|
|
c416d84a3a | 2 months ago |
|
|
8309f311e6 | 2 months ago |
|
|
c6ee3c453f | 2 months ago |
|
|
4b710523e8 | 2 months ago |
|
|
e1788f1187 | 2 months ago |
|
|
aab1f6411b | 2 months ago |
|
|
afae41c410 | 2 months ago |
|
|
b44ae1e838 | 2 months ago |
|
|
2be65cba51 | 2 months ago |
|
|
530b87282f | 2 months ago |
|
|
2e1f4e87e0 | 2 months ago |
|
|
87e0c5b6eb | 2 months ago |
|
|
2fb787c31f | 2 months ago |
|
|
1575a8e308 | 2 months ago |
|
|
23e2809fdb | 2 months ago |
|
|
7296bfb6fc | 2 months ago |
|
|
df0b926e59 | 2 months ago |
|
|
0da4b63d74 | 2 months ago |
|
|
2162b8102a | 2 months ago |
|
|
305b3274c0 | 2 months ago |
|
|
5015747580 | 2 months ago |
|
|
c48cb78cd9 | 2 months ago |
|
|
4912f686f9 | 2 months ago |
|
|
d76bd2a295 | 2 months ago |
|
|
cb44e902a3 | 2 months ago |
|
|
9b3c172dd1 | 2 months ago |
|
|
20ed54243b | 2 months ago |
|
|
01c21377aa | 2 months ago |
|
|
183bcce003 | 2 months ago |
|
|
02398d3bb4 | 2 months ago |
|
|
d137e1166d | 2 months ago |
|
|
e62df81ba2 | 2 months ago |
|
|
a105d87241 | 2 months ago |
|
|
48718a3406 | 2 months ago |
|
|
68f5e64557 | 2 months ago |
|
|
2c7f4ddc48 | 2 months ago |
|
|
95b65ed8a5 | 2 months ago |
|
|
102690b2b8 | 2 months ago |
|
|
c9279e2272 | 2 months ago |
|
|
23abbebf9e | 2 months ago |
|
|
a4573c8710 | 2 months ago |
|
|
4ce1e912ce | 2 months ago |
|
|
eeaa22357f | 2 months ago |
|
|
000c403f6b | 2 months ago |
|
|
47ec43850d | 2 months ago |
|
|
f09d478a03 | 2 months ago |
|
|
3c9c3032a5 | 2 months ago |
|
|
2ab3e178a2 | 2 months ago |
|
|
9ed016ad8b | 2 months ago |
|
|
a6344d6a81 | 2 months ago |
|
|
92e745fe49 | 2 months ago |
|
|
3af43dc676 | 2 months ago |
|
|
0d6d23dbbc | 2 months ago |
|
|
66ff6ed8b6 | 2 months ago |
|
|
478be330df | 2 months ago |
|
|
85ccf41d04 | 2 months ago |
|
|
b309342cdc | 2 months ago |
|
|
ee3dd0b5c7 | 2 months ago |
|
|
5c684a6a0d | 2 months ago |
|
|
f340f4fb8f | 3 months ago |
|
|
bafe835ebd | 3 months ago |
|
|
8472a45530 | 3 months ago |
|
|
31a7aa907b | 3 months ago |
|
|
70a6d90ce3 | 3 months ago |
|
|
8740178f8c | 3 months ago |
|
|
cfd0c16738 | 3 months ago |
|
|
df3b36eb00 | 3 months ago |
|
|
7014ac397e | 3 months ago |
|
|
63cdced84e | 3 months ago |
|
|
49542a9112 | 3 months ago |
|
|
1ae1212733 | 3 months ago |
|
|
7f8b2979e7 | 3 months ago |
|
|
537d93915e | 3 months ago |
|
|
f376f430c6 | 3 months ago |
|
|
b9350afead | 3 months ago |
|
|
2c2cb8bb99 | 3 months ago |
|
|
8c7f4afe76 | 3 months ago |
|
|
c50f8d63ef | 3 months ago |
|
|
118da8da36 | 3 months ago |
|
|
4e6d3d3178 | 3 months ago |
|
|
9c7cfde5f4 | 3 months ago |
|
|
f78eb5da67 | 3 months ago |
|
|
6e1eb0d0bb | 3 months ago |
|
|
41a4005d41 | 3 months ago |
|
|
940ce5ff14 | 3 months ago |
|
|
05e87bbb2e | 3 months ago |
|
|
ae3ed83dd0 | 3 months ago |
|
|
245b66150f | 3 months ago |
|
|
0c2fe81c99 | 3 months ago |
|
|
bb4719bd87 | 3 months ago |
|
|
931e3fa968 | 3 months ago |
|
|
6e4d7519fb | 3 months ago |
|
|
2648f304f6 | 3 months ago |
|
|
cd4fbb1905 | 3 months ago |
|
|
b0708d85d9 | 3 months ago |
|
|
37909feb50 | 3 months ago |
|
|
20216cd4ae | 3 months ago |
|
|
22c388da23 | 3 months ago |
|
|
2bbfe1f131 | 3 months ago |
|
|
8b701255ed | 3 months ago |
|
|
7ead6d79e5 | 3 months ago |
|
|
3e9a381ed7 | 3 months ago |
|
|
cf7ff4ce1d | 3 months ago |
|
|
e4b6360808 | 3 months ago |
|
|
f46f978326 | 3 months ago |
|
|
14f3c6cb81 | 3 months ago |
|
|
10a5a6f558 | 3 months ago |
|
|
e8ca8b42bf | 3 months ago |
|
|
4188365e6d | 3 months ago |
|
|
d2deb974b1 | 3 months ago |
|
|
f48eb631ab | 3 months ago |
|
|
b6c665cbf1 | 3 months ago |
|
|
f54ce71177 | 3 months ago |
|
|
07447e148b | 3 months ago |
|
|
6faca94b89 | 3 months ago |
|
|
d027415302 | 3 months ago |
|
|
99282f34e3 | 3 months ago |
|
|
418297b6fb | 3 months ago |
|
|
4ceca016bb | 3 months ago |
|
|
3bdc4e246f | 3 months ago |
|
|
9ef70a250d | 3 months ago |
|
|
5b24dadb51 | 3 months ago |
|
|
40ba1bd246 | 3 months ago |
|
|
3fc1302eaf | 3 months ago |
|
|
e38892ff2d | 3 months ago |
|
|
838929591a | 3 months ago |
|
|
5feacfaf27 | 3 months ago |
|
|
39af08ddc3 | 3 months ago |
|
|
f026ae1d62 | 3 months ago |
|
|
e5f24b9c06 | 3 months ago |
|
|
00475dc100 | 3 months ago |
|
|
23b92cef41 | 3 months ago |
|
|
3ff9628cd3 | 3 months ago |
|
|
bb72c7f7d6 | 3 months ago |
|
|
0017c0601b | 3 months ago |
|
|
7d8537fae6 | 3 months ago |
|
|
1edeff439e | 3 months ago |
|
|
a1beacc36e | 3 months ago |
|
|
3e6ee8c10c | 3 months ago |
|
|
87422e8e05 | 3 months ago |
|
|
0b9df1f22b | 3 months ago |
|
|
179b86b2b0 | 3 months ago |
|
|
f6aa1fc7ac | 3 months ago |
|
|
9795276ef9 | 3 months ago |
|
|
45b013a048 | 3 months ago |
|
|
1599cfed4e | 3 months ago |
|
|
96ccb40f36 | 3 months ago |
|
|
bb7c05493a | 3 months ago |
|
|
169215fd7b | 3 months ago |
|
|
97a47ce4e8 | 3 months ago |
|
|
287e2b9562 | 3 months ago |
|
|
77a04e637e | 3 months ago |
|
|
8b5c4d7575 | 3 months ago |
|
|
8c92df8648 | 3 months ago |
|
|
a816afadea | 3 months ago |
|
|
d76ff5828f | 3 months ago |
|
|
8f428297cb | 3 months ago |
|
|
e9d3b3680a | 3 months ago |
|
|
a0008c9104 | 3 months ago |
|
|
1d224702ac | 3 months ago |
|
|
69666a6f6c | 3 months ago |
|
|
475a9b9acb | 3 months ago |
|
|
06c67a0409 | 3 months ago |
|
|
d1b1bbf777 | 3 months ago |
|
|
0ddaa6899d | 3 months ago |
|
|
42222804fd | 3 months ago |
|
|
bf210e664d | 3 months ago |
|
|
6725ab028d | 3 months ago |
|
|
609ae6ab83 | 3 months ago |
|
|
344adf23c0 | 3 months ago |
|
|
44ce353dac | 3 months ago |
|
|
b5753769b7 | 3 months ago |
|
|
250af1506c | 3 months ago |
|
|
fc750174fe | 3 months ago |
|
|
d848291930 | 3 months ago |
|
|
aee496b7c3 | 3 months ago |
|
|
16da0f4d0a | 3 months ago |
|
|
8ee0e3b4ea | 3 months ago |
|
|
0c68ca4438 | 3 months ago |
|
|
e454c9c991 | 3 months ago |
|
|
96ebc3c7e9 | 3 months ago |
|
|
2240c6cc65 | 3 months ago |
|
|
0514716910 | 3 months ago |
|
|
e903f9c418 | 3 months ago |
|
|
ac0d72b3ff | 3 months ago |
|
|
f62c7c9b20 | 3 months ago |
|
|
c11e859df1 | 3 months ago |
|
|
91c16f13d1 | 3 months ago |
|
|
1c0842ab95 | 3 months ago |
|
|
02930a901e | 3 months ago |
|
|
20e4f82df3 | 3 months ago |
|
|
8ae81d2b24 | 3 months ago |
|
|
34e8386ca1 | 3 months ago |
|
|
cc255e9c9a | 3 months ago |
|
|
11de01e079 | 4 months ago |
|
|
62bb667cb8 | 4 months ago |
|
|
f3674ba06f | 4 months ago |
|
|
a53602dc8c | 4 months ago |
|
|
7a03242396 | 4 months ago |
|
|
68f044de52 | 4 months ago |
|
|
c9de23347a | 4 months ago |
|
|
190492a191 | 4 months ago |
|
|
3d8daeb58d | 4 months ago |
|
|
0b3fea230f | 4 months ago |
|
|
86a91ab383 | 5 months ago |
|
|
89ff10f506 | 5 months ago |
|
|
8191852f4d | 5 months ago |
|
|
e17d3cde87 | 5 months ago |
|
|
77242825bb | 5 months ago |
|
|
27ad4e0764 | 5 months ago |
|
|
eae16eec44 | 5 months ago |
|
|
3f123d12d6 | 6 months ago |
|
|
de8c7bc605 | 6 months ago |
|
|
cb56503622 | 6 months ago |
|
|
e8319a0d3f | 6 months ago |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 949 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
@ -0,0 +1 @@
|
||||
{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]}
|
||||
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 40 KiB |
@ -0,0 +1,6 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgaPetsOq3tqUlswBN
|
||||
BFUWIIdEg4dcTCGRUKbAEx8ViFygCgYIKoZIzj0DAQehRANCAAS6IKkZ4tCeBlN6
|
||||
DtXiBekCiIbgHxWk8AWppP0H3mJ+I2s8cIEaquL4/yeLDcHzAHf8tHcYhF/TvggT
|
||||
nc30yDLv
|
||||
-----END PRIVATE KEY-----
|
||||
@ -0,0 +1 @@
|
||||
{"agcgw":{"url":"connect-drcn.dbankcloud.cn","backurl":"connect-drcn.hispace.hicloud.com","websocketurl":"connect-ws-drcn.hispace.dbankcloud.cn","websocketbackurl":"connect-ws-drcn.hispace.dbankcloud.com"},"agcgw_all":{"SG":"connect-dra.dbankcloud.cn","SG_back":"connect-dra.hispace.hicloud.com","CN":"connect-drcn.dbankcloud.cn","CN_back":"connect-drcn.hispace.hicloud.com","RU":"connect-drru.hispace.dbankcloud.ru","RU_back":"connect-drru.hispace.dbankcloud.cn","DE":"connect-dre.dbankcloud.cn","DE_back":"connect-dre.hispace.hicloud.com"},"websocketgw_all":{"SG":"connect-ws-dra.hispace.dbankcloud.cn","SG_back":"connect-ws-dra.hispace.dbankcloud.com","CN":"connect-ws-drcn.hispace.dbankcloud.cn","CN_back":"connect-ws-drcn.hispace.dbankcloud.com","RU":"connect-ws-drru.hispace.dbankcloud.ru","RU_back":"connect-ws-drru.hispace.dbankcloud.cn","DE":"connect-ws-dre.hispace.dbankcloud.cn","DE_back":"connect-ws-dre.hispace.dbankcloud.com"},"client":{"cp_id":"2640966000002322881","product_id":"736430079244816567","client_id":"563735388191982656","client_secret":"650C7C799812AFFD53A10C7756CF05FB9F215A7E49032ABA8EBF3E14B77535CF","project_id":"736430079244816567","app_id":"116912301","api_key":"CgB6e3x9DJzMgRCmnT6dyUEkp6UsIfddb6l3w0ZEXzeiRMHEFi3400Z5fJ5qaHneU0OrAI/JRpk+DMGVs3QpUxlI","package_name":"com.cloudsolutions.HMGPatientApp"},"oauth_client":{"client_id":"116912301","client_type":1},"app_info":{"app_id":"116912301","package_name":"com.cloudsolutions.HMGPatientApp"},"service":{"analytics":{"collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn","collector_url_cn":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn","collector_url_de":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn","collector_url_ru":"datacollector-drru.dt.dbankcloud.ru,datacollector-drru.dt.hicloud.com","collector_url_sg":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn","resource_id":"p1","channel_id":""},"ml":{"mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn"},"cloudstorage":{"storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn","storage_url_ru":"https://agc-storage-drru.cloud.huawei.ru","storage_url_sg":"https://ops-dra.agcstorage.link","storage_url_de":"https://ops-dre.agcstorage.link","storage_url_cn":"https://agc-storage-drcn.platform.dbankcloud.cn","storage_url_ru_back":"https://agc-storage-drru.cloud.huawei.ru","storage_url_sg_back":"https://agc-storage-dra.cloud.huawei.asia","storage_url_de_back":"https://agc-storage-dre.cloud.huawei.eu","storage_url_cn_back":"https://agc-storage-drcn.cloud.huawei.com.cn"},"search":{"url":"https://search-drcn.cloud.huawei.com"},"edukit":{"edu_url":"edukit.cloud.huawei.com.cn","dh_url":"edukit.cloud.huawei.com.cn"}},"region":"CN","configuration_version":"3.0","appInfos":[{"package_name":"com.cloudsolutions.HMGPatientApp","client":{"app_id":"116912301"},"app_info":{"package_name":"com.cloudsolutions.HMGPatientApp","app_id":"116912301"},"oauth_client":{"client_type":1,"client_id":"116912301"}},{"package_name":"com.ejada.hmg","client":{"app_id":"102857389"},"app_info":{"package_name":"com.ejada.hmg","app_id":"102857389"},"oauth_client":{"client_type":1,"client_id":"102857389"}}]}
|
||||
@ -1,74 +1 @@
|
||||
{
|
||||
"agcgw":{
|
||||
"backurl":"connect-drcn.hispace.hicloud.com",
|
||||
"url":"connect-drcn.dbankcloud.cn",
|
||||
"websocketbackurl":"connect-ws-drcn.hispace.dbankcloud.com",
|
||||
"websocketurl":"connect-ws-drcn.hispace.dbankcloud.cn"
|
||||
},
|
||||
"agcgw_all":{
|
||||
"CN":"connect-drcn.dbankcloud.cn",
|
||||
"CN_back":"connect-drcn.hispace.hicloud.com",
|
||||
"DE":"connect-dre.dbankcloud.cn",
|
||||
"DE_back":"connect-dre.hispace.hicloud.com",
|
||||
"RU":"connect-drru.dbankcloud.cn",
|
||||
"RU_back":"connect-drru.hispace.hicloud.com",
|
||||
"SG":"connect-dra.dbankcloud.cn",
|
||||
"SG_back":"connect-dra.hispace.hicloud.com"
|
||||
},
|
||||
"client":{
|
||||
"cp_id":"2640966000002322881",
|
||||
"product_id":"736430079244816567",
|
||||
"client_id":"563735388191982656",
|
||||
"client_secret":"650C7C799812AFFD53A10C7756CF05FB9F215A7E49032ABA8EBF3E14B77535CF",
|
||||
"project_id":"736430079244816567",
|
||||
"app_id":"102857389",
|
||||
"api_key":"CgB6e3x9DJzMgRCmnT6dyUEkp6UsIfddb6l3w0ZEXzeiRMHEFi3400Z5fJ5qaHneU0OrAI/JRpk+DMGVs3QpUxlI",
|
||||
"package_name":"com.ejada.hmg"
|
||||
},
|
||||
"oauth_client":{
|
||||
"client_id":"102857389",
|
||||
"client_type":1
|
||||
},
|
||||
"app_info":{
|
||||
"app_id":"102857389",
|
||||
"package_name":"com.ejada.hmg"
|
||||
},
|
||||
"service":{
|
||||
"analytics":{
|
||||
"collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
|
||||
"collector_url_ru":"datacollector-drru.dt.hicloud.com,datacollector-drru.dt.dbankcloud.cn",
|
||||
"collector_url_sg":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn",
|
||||
"collector_url_de":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn",
|
||||
"collector_url_cn":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
|
||||
"resource_id":"p1",
|
||||
"channel_id":""
|
||||
},
|
||||
"search":{
|
||||
"url":"https://search-drcn.cloud.huawei.com"
|
||||
},
|
||||
"cloudstorage":{
|
||||
"storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn"
|
||||
},
|
||||
"ml":{
|
||||
"mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn"
|
||||
}
|
||||
},
|
||||
"region":"CN",
|
||||
"configuration_version":"3.0",
|
||||
"appInfos":[
|
||||
{
|
||||
"package_name":"com.ejada.hmg",
|
||||
"client":{
|
||||
"app_id":"102857389"
|
||||
},
|
||||
"app_info":{
|
||||
"package_name":"com.ejada.hmg",
|
||||
"app_id":"102857389"
|
||||
},
|
||||
"oauth_client":{
|
||||
"client_type":1,
|
||||
"client_id":"102857389"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
{"agcgw":{"url":"connect-drcn.dbankcloud.cn","backurl":"connect-drcn.hispace.hicloud.com","websocketurl":"connect-ws-drcn.hispace.dbankcloud.cn","websocketbackurl":"connect-ws-drcn.hispace.dbankcloud.com"},"agcgw_all":{"SG":"connect-dra.dbankcloud.cn","SG_back":"connect-dra.hispace.hicloud.com","CN":"connect-drcn.dbankcloud.cn","CN_back":"connect-drcn.hispace.hicloud.com","RU":"connect-drru.hispace.dbankcloud.ru","RU_back":"connect-drru.hispace.dbankcloud.cn","DE":"connect-dre.dbankcloud.cn","DE_back":"connect-dre.hispace.hicloud.com"},"websocketgw_all":{"SG":"connect-ws-dra.hispace.dbankcloud.cn","SG_back":"connect-ws-dra.hispace.dbankcloud.com","CN":"connect-ws-drcn.hispace.dbankcloud.cn","CN_back":"connect-ws-drcn.hispace.dbankcloud.com","RU":"connect-ws-drru.hispace.dbankcloud.ru","RU_back":"connect-ws-drru.hispace.dbankcloud.cn","DE":"connect-ws-dre.hispace.dbankcloud.cn","DE_back":"connect-ws-dre.hispace.dbankcloud.com"},"client":{"cp_id":"2640966000002322881","product_id":"736430079244816567","client_id":"563735388191982656","client_secret":"650C7C799812AFFD53A10C7756CF05FB9F215A7E49032ABA8EBF3E14B77535CF","project_id":"736430079244816567","app_id":"116912301","api_key":"CgB6e3x9DJzMgRCmnT6dyUEkp6UsIfddb6l3w0ZEXzeiRMHEFi3400Z5fJ5qaHneU0OrAI/JRpk+DMGVs3QpUxlI","package_name":"com.cloudsolutions.HMGPatientApp"},"oauth_client":{"client_id":"116912301","client_type":1},"app_info":{"app_id":"116912301","package_name":"com.cloudsolutions.HMGPatientApp"},"service":{"analytics":{"collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn","collector_url_cn":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn","collector_url_de":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn","collector_url_ru":"datacollector-drru.dt.dbankcloud.ru,datacollector-drru.dt.hicloud.com","collector_url_sg":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn","resource_id":"p1","channel_id":""},"ml":{"mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn"},"cloudstorage":{"storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn","storage_url_ru":"https://agc-storage-drru.cloud.huawei.ru","storage_url_sg":"https://ops-dra.agcstorage.link","storage_url_de":"https://ops-dre.agcstorage.link","storage_url_cn":"https://agc-storage-drcn.platform.dbankcloud.cn","storage_url_ru_back":"https://agc-storage-drru.cloud.huawei.ru","storage_url_sg_back":"https://agc-storage-dra.cloud.huawei.asia","storage_url_de_back":"https://agc-storage-dre.cloud.huawei.eu","storage_url_cn_back":"https://agc-storage-drcn.cloud.huawei.com.cn"},"search":{"url":"https://search-drcn.cloud.huawei.com"},"edukit":{"edu_url":"edukit.cloud.huawei.com.cn","dh_url":"edukit.cloud.huawei.com.cn"}},"region":"CN","configuration_version":"3.0","appInfos":[{"package_name":"com.cloudsolutions.HMGPatientApp","client":{"app_id":"116912301"},"app_info":{"package_name":"com.cloudsolutions.HMGPatientApp","app_id":"116912301"},"oauth_client":{"client_type":1,"client_id":"116912301"}},{"package_name":"com.ejada.hmg","client":{"app_id":"102857389"},"app_info":{"package_name":"com.ejada.hmg","app_id":"102857389"},"oauth_client":{"client_type":1,"client_id":"102857389"}}]}
|
||||
@ -1,5 +1,5 @@
|
||||
//package com.cloud.diplomaticquarterapp
|
||||
package com.ejada.hmg
|
||||
package com.cloudsolutions.HMGPatientApp
|
||||
|
||||
|
||||
import io.flutter.app.FlutterApplication
|
||||
@ -1,15 +1,14 @@
|
||||
package com.ejada.hmg.penguin
|
||||
package com.cloudsolutions.HMGPatientApp
|
||||
|
||||
import com.ejada.hmg.MainActivity
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import androidx.annotation.RequiresApi
|
||||
import com.ejada.hmg.penguin.PenguinView
|
||||
import com.cloudsolutions.HMGPatientApp.penguin.PenguinView
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugin.common.MethodCall
|
||||
import com.ejada.hmg.PermissionManager.HostNotificationPermissionManager
|
||||
import com.ejada.hmg.PermissionManager.HostBgLocationManager
|
||||
import com.ejada.hmg.PermissionManager.HostGpsStateManager
|
||||
import com.cloudsolutions.HMGPatientApp.PermissionManager.HostNotificationPermissionManager
|
||||
import com.cloudsolutions.HMGPatientApp.PermissionManager.HostBgLocationManager
|
||||
import com.cloudsolutions.HMGPatientApp.PermissionManager.HostGpsStateManager
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
|
||||
class PenguinInPlatformBridge(
|
||||
@ -1,4 +1,4 @@
|
||||
package com.ejada.hmg.PermissionManager;
|
||||
package com.cloudsolutions.HMGPatientApp.PermissionManager;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.ejada.hmg.PermissionManager;
|
||||
package com.cloudsolutions.HMGPatientApp.PermissionManager;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.ejada.hmg.PermissionManager;
|
||||
package com.cloudsolutions.HMGPatientApp.PermissionManager;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.ejada.hmg.PermissionManager;
|
||||
package com.cloudsolutions.HMGPatientApp.PermissionManager;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.pm.PackageManager;
|
||||
@ -1,7 +1,6 @@
|
||||
package com.ejada.hmg.PermissionManager
|
||||
package com.cloudsolutions.HMGPatientApp.PermissionManager
|
||||
|
||||
import android.Manifest
|
||||
import android.os.Build
|
||||
|
||||
object PermissionHelper {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.ejada.hmg.PermissionManager
|
||||
package com.cloudsolutions.HMGPatientApp.PermissionManager
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
@ -1,4 +1,4 @@
|
||||
package com.ejada.hmg.PermissionManager
|
||||
package com.cloudsolutions.HMGPatientApp.PermissionManager
|
||||
|
||||
// PermissionResultReceiver.kt
|
||||
import android.content.BroadcastReceiver
|
||||
@ -1,4 +1,4 @@
|
||||
package com.ejada.hmg.penguin
|
||||
package com.cloudsolutions.HMGPatientApp.penguin
|
||||
|
||||
enum class PenguinMethod {
|
||||
// initializePenguin("initializePenguin"),
|
||||
@ -0,0 +1,402 @@
|
||||
package com.cloudsolutions.HMGPatientApp.watch.samsung_watch
|
||||
|
||||
|
||||
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import androidx.annotation.RequiresApi
|
||||
import com.cloudsolutions.HMGPatientApp.MainActivity
|
||||
import com.cloudsolutions.HMGPatientApp.watch.samsung_watch.model.Vitals
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugin.common.MethodCall
|
||||
import com.samsung.android.sdk.health.data.HealthDataService
|
||||
import com.samsung.android.sdk.health.data.HealthDataStore
|
||||
import com.samsung.android.sdk.health.data.data.AggregatedData
|
||||
import com.samsung.android.sdk.health.data.data.HealthDataPoint
|
||||
import com.samsung.android.sdk.health.data.permission.AccessType
|
||||
import com.samsung.android.sdk.health.data.permission.Permission
|
||||
import com.samsung.android.sdk.health.data.request.DataType
|
||||
import com.samsung.android.sdk.health.data.request.DataTypes
|
||||
import com.samsung.android.sdk.health.data.request.LocalTimeFilter
|
||||
import com.samsung.android.sdk.health.data.request.LocalTimeGroup
|
||||
import com.samsung.android.sdk.health.data.request.LocalTimeGroupUnit
|
||||
import com.samsung.android.sdk.health.data.request.Ordering
|
||||
import com.samsung.android.sdk.health.data.response.DataResponse
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.launch
|
||||
import java.time.LocalDateTime
|
||||
import java.time.LocalTime
|
||||
|
||||
class SamsungWatch(
|
||||
private var flutterEngine: FlutterEngine,
|
||||
private var mainActivity: MainActivity
|
||||
) {
|
||||
|
||||
private lateinit var channel: MethodChannel
|
||||
private lateinit var dataStore: HealthDataStore
|
||||
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
||||
private val TAG = "SamsungWatch"
|
||||
|
||||
|
||||
private lateinit var vitals: MutableMap<String, List<Vitals>>
|
||||
companion object {
|
||||
private const val CHANNEL = "samsung_watch"
|
||||
|
||||
}
|
||||
init{
|
||||
create()
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
fun create() {
|
||||
Log.d(TAG, "create: is called")
|
||||
// openTok = OpenTok(mainActivity, flutterEngine)
|
||||
channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
|
||||
channel.setMethodCallHandler { call: MethodCall, result: MethodChannel.Result ->
|
||||
when (call.method) {
|
||||
"init" -> {
|
||||
Log.d(TAG, "onMethodCall: init called")
|
||||
dataStore = HealthDataService.getStore(mainActivity)
|
||||
vitals = mutableMapOf()
|
||||
result.success("initialized")
|
||||
}
|
||||
|
||||
"getPermission"->{
|
||||
if(!this::dataStore.isInitialized)
|
||||
result.error("DataStoreNotInitialized", "Please call init before requesting permissions", null)
|
||||
val permSet = setOf(
|
||||
Permission.of(DataTypes.HEART_RATE, AccessType.READ),
|
||||
Permission.of(DataTypes.STEPS, AccessType.READ),
|
||||
Permission.of(DataTypes.BLOOD_OXYGEN, AccessType.READ),
|
||||
Permission.of(DataTypes.ACTIVITY_SUMMARY, AccessType.READ),
|
||||
Permission.of(DataTypes.SLEEP, AccessType.READ),
|
||||
Permission.of(DataTypes.BODY_TEMPERATURE, AccessType.READ),
|
||||
Permission.of(DataTypes.EXERCISE, AccessType.READ),
|
||||
// Permission.of(DataTypes.SKIN_TEMPERATURE, AccessType.READ),
|
||||
// Permission.of(DataTypes.NUTRITION, AccessType.READ),
|
||||
|
||||
)
|
||||
scope.launch {
|
||||
try {
|
||||
var granted = dataStore.getGrantedPermissions(permSet)
|
||||
|
||||
if (granted.containsAll(permSet)) {
|
||||
result.success("Permission Granted")
|
||||
return@launch
|
||||
}
|
||||
|
||||
granted = dataStore.requestPermissions(permSet, mainActivity)
|
||||
|
||||
if (granted.containsAll(permSet)) {
|
||||
result.success("Permission Granted") // adapt result as needed
|
||||
return@launch
|
||||
}
|
||||
result.error("PermissionError", "Permission Not Granted", null) // adapt result as needed
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "create: getPermission failed", e)
|
||||
result.error("PermissionError", e.message, null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
"getHeartRate"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val readRequest = DataTypes.HEART_RATE.readDataRequestBuilder
|
||||
.setLocalTimeFilter(localTimeFilter)
|
||||
.setOrdering(Ordering.DESC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val heartRateList = dataStore.readData(readRequest).dataList
|
||||
processHeartVital(heartRateList)
|
||||
Log.d("TAG"," the data is ${vitals}")
|
||||
print("the data is ${vitals}")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
"getSleepData" -> {
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val readRequest = DataTypes.SLEEP.readDataRequestBuilder
|
||||
.setLocalTimeFilter(localTimeFilter)
|
||||
.setOrdering(Ordering.ASC)
|
||||
.build()
|
||||
scope.launch {
|
||||
val sleepData = dataStore.readData(readRequest).dataList
|
||||
processSleepVital(sleepData)
|
||||
print("the data is $vitals")
|
||||
Log.d(TAG, "the data is $vitals")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
"steps"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val localTimeGroup = LocalTimeGroup.of(LocalTimeGroupUnit.HOURLY, 1)
|
||||
val aggregateRequest = DataType.StepsType.TOTAL.requestBuilder
|
||||
.setLocalTimeFilterWithGroup(localTimeFilter, localTimeGroup)
|
||||
.setOrdering(Ordering.ASC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val steps = dataStore.aggregateData(aggregateRequest)
|
||||
processStepsCount(steps)
|
||||
print("the data is $vitals")
|
||||
Log.d(TAG, "the data is $vitals")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
}
|
||||
|
||||
"activitySummary"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val localTimeGroup = LocalTimeGroup.of(LocalTimeGroupUnit.HOURLY, 1)
|
||||
val readRequest = DataType.ActivitySummaryType.TOTAL_ACTIVE_CALORIES_BURNED
|
||||
.requestBuilder
|
||||
.setLocalTimeFilterWithGroup(localTimeFilter, localTimeGroup)
|
||||
.setOrdering(Ordering.DESC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val activityResult = dataStore.aggregateData(readRequest).dataList
|
||||
processActivity(activityResult)
|
||||
Log.d("TAG"," the data is ${vitals}")
|
||||
print("the data is ${vitals}")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
|
||||
// val readRequest = DataTypes.EXERCISE.readDataRequestBuilder
|
||||
// .setLocalTimeFilter(localTimeFilter)
|
||||
// .build()
|
||||
//
|
||||
// scope.launch{
|
||||
// try {
|
||||
// val readResult = dataStore.readData(readRequest)
|
||||
// val dataPoints = readResult.dataList
|
||||
//
|
||||
// processActivity(dataPoints)
|
||||
//
|
||||
//
|
||||
// } catch (e: Exception) {
|
||||
// e.printStackTrace()
|
||||
// }
|
||||
// result.success("Data is obtained")
|
||||
// }
|
||||
}
|
||||
|
||||
"bloodOxygen"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val readRequest = DataTypes.BLOOD_OXYGEN.readDataRequestBuilder
|
||||
.setLocalTimeFilter(localTimeFilter)
|
||||
.setOrdering(Ordering.DESC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val bloodOxygenList = dataStore.readData(readRequest).dataList
|
||||
processBloodOxygen(bloodOxygenList)
|
||||
Log.d("TAG"," the data is ${vitals}")
|
||||
print("the data is ${vitals["bloodOxygen"]}")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
"bodyTemperature"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val readRequest = DataTypes.BODY_TEMPERATURE.readDataRequestBuilder
|
||||
.setLocalTimeFilter(localTimeFilter)
|
||||
.setOrdering(Ordering.DESC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val bodyTemperatureList = dataStore.readData(readRequest).dataList
|
||||
processBodyTemperature(bodyTemperatureList)
|
||||
Log.d("TAG"," the data is ${vitals}")
|
||||
print("the data is ${vitals["bodyTemperature"]}")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
}
|
||||
|
||||
"distance"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val localTimeGroup = LocalTimeGroup.of(LocalTimeGroupUnit.HOURLY, 1)
|
||||
val readRequest = DataType.ActivitySummaryType.TOTAL_DISTANCE.requestBuilder
|
||||
.setLocalTimeFilterWithGroup(localTimeFilter, localTimeGroup)
|
||||
.setOrdering(Ordering.DESC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val activityResult = dataStore.aggregateData(readRequest).dataList
|
||||
processDistance(activityResult)
|
||||
Log.d("TAG"," the data is ${vitals}")
|
||||
print("the data is ${vitals}")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
}
|
||||
|
||||
"retrieveData"->{
|
||||
if(vitals.isEmpty()){
|
||||
result.error("NoDataFound", "No Data was obtained", null)
|
||||
return@setMethodCallHandler
|
||||
}
|
||||
result.success("""
|
||||
{
|
||||
"heartRate": ${vitals["heartRate"]},
|
||||
"steps": ${vitals["steps"]},
|
||||
"sleep": ${vitals["sleep"]},
|
||||
"activity": ${vitals["activity"]},
|
||||
"bloodOxygen": ${vitals["bloodOxygen"]},
|
||||
"bodyTemperature": ${vitals["bodyTemperature"]},
|
||||
"distance": ${vitals["distance"]}
|
||||
}
|
||||
""".trimIndent())
|
||||
}
|
||||
|
||||
|
||||
"closeCoroutineScope"->{
|
||||
destroy()
|
||||
result.success("Coroutine Scope Cancelled")
|
||||
}
|
||||
|
||||
else -> {
|
||||
result.notImplemented()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun CoroutineScope.processDistance(activityResult: List<AggregatedData<Float>>) {
|
||||
vitals["distance"] = mutableListOf()
|
||||
activityResult.forEach { stepData ->
|
||||
val vitalData = Vitals().apply {
|
||||
|
||||
value = stepData.value.toString()
|
||||
timeStamp = stepData.startTime.toString()
|
||||
}
|
||||
(vitals["distance"] as MutableList).add(vitalData)
|
||||
}
|
||||
}
|
||||
|
||||
private fun CoroutineScope.processBodyTemperature( bodyTemperatureList :List<HealthDataPoint>) {
|
||||
vitals["bodyTemperature"] = mutableListOf()
|
||||
bodyTemperatureList.forEach { stepData ->
|
||||
val vitalData = Vitals().apply {
|
||||
value = stepData.getValue(DataType.BodyTemperatureType.BODY_TEMPERATURE).toString()
|
||||
timeStamp = stepData.endTime.toString()
|
||||
}
|
||||
(vitals["bodyTemperature"] as MutableList).add(vitalData)
|
||||
}
|
||||
}
|
||||
|
||||
private fun CoroutineScope.processBloodOxygen( bloodOxygenList :List<HealthDataPoint>) {
|
||||
vitals["bloodOxygen"] = mutableListOf()
|
||||
bloodOxygenList.forEach { stepData ->
|
||||
val vitalData = Vitals().apply {
|
||||
value = stepData.getValue(DataType.BloodOxygenType.OXYGEN_SATURATION).toString()
|
||||
timeStamp = stepData.endTime.toString()
|
||||
}
|
||||
(vitals["bloodOxygen"] as MutableList).add(vitalData)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// private fun CoroutineScope.processActivity(activityResult: List<AggregatedData<Float>>) {
|
||||
//
|
||||
// vitals["activity"] = mutableListOf()
|
||||
// activityResult.forEach { stepData ->
|
||||
// val vitalData = Vitals().apply {
|
||||
//
|
||||
// value = stepData.value.toString()
|
||||
// timeStamp = stepData.startTime.toString()
|
||||
// }
|
||||
// (vitals["activity"] as MutableList).add(vitalData)
|
||||
// }
|
||||
// }
|
||||
private fun CoroutineScope.processActivity(activityResult: List<AggregatedData<Float>>) {
|
||||
|
||||
vitals["activity"] = mutableListOf()
|
||||
activityResult.forEach { stepData ->
|
||||
val vitalData = Vitals().apply {
|
||||
|
||||
value = stepData.value.toString()
|
||||
timeStamp = stepData.startTime.toString()
|
||||
}
|
||||
(vitals["activity"] as MutableList).add(vitalData)
|
||||
}
|
||||
|
||||
// dataPoints.forEach { dataPoint ->
|
||||
// val sessions = dataPoint.getValue(DataType.ExerciseType.SESSIONS)
|
||||
//
|
||||
// sessions?.forEach { session ->
|
||||
//
|
||||
// val exerciseSessionCalories = session.calories
|
||||
// val vitalData = Vitals().apply {
|
||||
// value = exerciseSessionCalories.toString()
|
||||
// timeStamp = session.startTime.toString()
|
||||
// }
|
||||
// (vitals["activity"] as MutableList).add(vitalData)
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
private fun CoroutineScope.processStepsCount(result: DataResponse<AggregatedData<Long>>) {
|
||||
val stepCount = ArrayList<AggregatedData<Long>>()
|
||||
var totalSteps: Long = 0
|
||||
vitals["steps"] = mutableListOf()
|
||||
result.dataList.forEach { stepData ->
|
||||
val vitalData = Vitals().apply {
|
||||
value = (stepData.value as Long).toString()
|
||||
timeStamp = stepData.startTime.toString()
|
||||
}
|
||||
(vitals["steps"] as MutableList).add(vitalData)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun CoroutineScope.processSleepVital(sleepData: List<HealthDataPoint>) {
|
||||
vitals["sleep"] = mutableListOf()
|
||||
sleepData.forEach {
|
||||
(vitals["sleep"] as MutableList).add(
|
||||
Vitals().apply {
|
||||
timeStamp = it.startTime.toString()
|
||||
value = (it.getValue(DataType.SleepType.DURATION)?.toMillis().toString())
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun CoroutineScope.processHeartVital(
|
||||
heartRateList: List<HealthDataPoint>,
|
||||
) {
|
||||
vitals["heartRate"] = mutableListOf()
|
||||
heartRateList.forEach {
|
||||
(vitals["heartRate"] as MutableList).add(processHeartRateData(it))
|
||||
}
|
||||
}
|
||||
|
||||
private fun processHeartRateData(heartRateData: HealthDataPoint) =
|
||||
Vitals().apply {
|
||||
heartRateData.getValue(DataType.HeartRateType.MAX_HEART_RATE)?.let {
|
||||
value = it.toString()
|
||||
}
|
||||
timeStamp = heartRateData.startTime.toString()
|
||||
}
|
||||
|
||||
|
||||
fun destroy() {
|
||||
scope.cancel()
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package com.cloudsolutions.HMGPatientApp.watch.samsung_watch.model
|
||||
|
||||
data class Vitals(
|
||||
var value : String = "",
|
||||
var timeStamp :String = ""
|
||||
){
|
||||
override fun toString(): String {
|
||||
return """{
|
||||
"value": "$value",
|
||||
"timeStamp": "$timeStamp"}
|
||||
""".trimIndent()
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 14 KiB |
@ -0,0 +1,274 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.cloudsolutions.HMGPatientApp">
|
||||
<!--
|
||||
io.flutter.app.FlutterApplication is an android.app.Application that
|
||||
calls FlutterMain.startInitialization(this); in its onCreate method.
|
||||
In most cases you can leave this as-is, but you if you want to provide
|
||||
additional functionality it is fine to subclass or reimplement
|
||||
FlutterApplication and put your custom class here.
|
||||
-->
|
||||
<uses-permission
|
||||
android:name="android.permission.ACTIVITY_RECOGNITION"
|
||||
tools:node="remove" />
|
||||
<uses-permission
|
||||
android:name="android.permission.READ_PHONE_STATE"
|
||||
tools:node="remove" /> <!-- <uses-permission android:name="android.permission.BLUETOOTH" tools:node="remove"/> -->
|
||||
<!-- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" tools:node="remove"/> -->
|
||||
<!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" tools:node="remove"/> -->
|
||||
<!-- <uses-permission android:name="android.permission.BLUETOOTH_SCAN" tools:node="remove"/> -->
|
||||
<uses-permission
|
||||
android:name="android.permission.BROADCAST_STICKY"
|
||||
tools:node="remove" />
|
||||
<uses-permission
|
||||
android:name="com.google.android.gms.permission.AD_ID"
|
||||
tools:node="remove" /> <!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> -->
|
||||
<uses-permission
|
||||
android:name="android.permission.FOREGROUND_SERVICE"
|
||||
tools:node="remove" />
|
||||
<uses-permission
|
||||
android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE"
|
||||
tools:node="remove" />
|
||||
<uses-permission
|
||||
android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION"
|
||||
tools:node="remove" />
|
||||
<uses-permission
|
||||
android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"
|
||||
tools:node="remove" />
|
||||
<uses-permission
|
||||
android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE"
|
||||
tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" />
|
||||
|
||||
<!-- Added by open_filex -->
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" tools:node="remove" />
|
||||
|
||||
<uses-permission
|
||||
android:name="android.permission.ACCESS_BACKGROUND_LOCATION"
|
||||
tools:node="remove" /> <!-- <uses-permission android:name="android.permission.INTERNET" /> -->
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
|
||||
|
||||
|
||||
<uses-feature android:name="android.hardware.camera.any" />
|
||||
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.sensor.stepcounter"
|
||||
android:required="false"
|
||||
tools:node="replace" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.sensor.stepdetector"
|
||||
android:required="false"
|
||||
tools:node="replace" />
|
||||
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<uses-feature android:name="android.hardware.camera.autofocus" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="true" />
|
||||
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
||||
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
|
||||
|
||||
<uses-permission android:name="android.permission.VIDEO_CAPTURE" />
|
||||
<uses-permission android:name="android.permission.AUDIO_CAPTURE" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_PHONE_CALL" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.location.network"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.location.gps"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="com.huawei.appmarket.service.commondata.permission.GET_COMMON_DATA" /> <!-- <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" /> -->
|
||||
<!-- Wifi Permissions -->
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> -->
|
||||
<!-- Detect Reboot Permission -->
|
||||
<!-- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> -->
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.speech.RecognitionService" />
|
||||
</intent>
|
||||
|
||||
<package android:name="com.whatsapp" />
|
||||
<package android:name="com.whatsapp.w4b" />
|
||||
</queries>
|
||||
|
||||
<application
|
||||
android:foregroundServiceType="mediaPlayback|connectedDevice|dataSync"
|
||||
android:name=".Application"
|
||||
android:allowBackup="false"
|
||||
android:icon="@mipmap/ic_launcher_local"
|
||||
android:label="Dr. Alhabib Beta"
|
||||
android:screenOrientation="sensorPortrait"
|
||||
android:showOnLockScreen="true"
|
||||
android:usesCleartextTraffic="true"
|
||||
tools:replace="android:label">
|
||||
<meta-data
|
||||
android:name="com.huawei.hms.client.appid"
|
||||
android:value="102857389"/>
|
||||
<!-- <activity-->
|
||||
<!-- android:name="com.cloud.hmg_patient_app.whatsapp.WhatsAppCodeActivity"-->
|
||||
<!-- android:exported="true"-->
|
||||
<!-- android:enabled="true"-->
|
||||
<!-- android:launchMode="standard"-->
|
||||
<!-- >-->
|
||||
<!-- <intent-filter>-->
|
||||
<!-- <action android:name="com.whatsapp.otp.OTP_RETRIEVED" />-->
|
||||
<!-- </intent-filter>-->
|
||||
<!-- </activity>-->
|
||||
|
||||
<meta-data
|
||||
android:name="push_kit_auto_init_enabled"
|
||||
android:value="true" />
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||
android:enabled="true"
|
||||
android:exported="true"
|
||||
android:hardwareAccelerated="true"
|
||||
android:launchMode="singleTop"
|
||||
android:showOnLockScreen="true"
|
||||
android:theme="@style/LaunchTheme"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
tools:node="merge">
|
||||
|
||||
<!--
|
||||
Specifies an Android theme to apply to this Activity as soon as
|
||||
the Android process has started. This theme is visible to the user
|
||||
while the Flutter UI initializes. After that, this theme continues
|
||||
to determine the Window background behind the Flutter UI.
|
||||
-->
|
||||
<meta-data
|
||||
android:name="io.flutter.embedding.android.NormalTheme"
|
||||
android:resource="@style/NormalTheme" />
|
||||
<!--
|
||||
Displays an Android View that continues showing the launch screen
|
||||
Drawable until Flutter paints its first frame, then this splash
|
||||
screen fades out. A splash screen is useful to avoid any visual
|
||||
gap between the end of Android's launch screen and the painting of
|
||||
Flutter's first frame.
|
||||
-->
|
||||
<meta-data
|
||||
android:name="io.flutter.embedding.android.SplashScreenDrawable"
|
||||
android:resource="@drawable/launch_background" />
|
||||
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="FLUTTER_NOTIFICATION_CLICK" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity> <!-- <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver" android:exported="true"> -->
|
||||
<!-- <intent-filter> -->
|
||||
<!-- <action android:name="android.intent.action.BOOT_COMPLETED"/> -->
|
||||
<!-- <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/> -->
|
||||
<!-- </intent-filter> -->
|
||||
<!-- </receiver> -->
|
||||
<!-- Geofencing -->
|
||||
<!-- <service-->
|
||||
<!-- android:name=".geofence.intent_receivers.GeofenceTransitionsJobIntentService"-->
|
||||
<!-- android:exported="true"-->
|
||||
<!-- android:permission="android.permission.BIND_JOB_SERVICE" />-->
|
||||
|
||||
<!-- <receiver-->
|
||||
<!-- android:name=".geofence.intent_receivers.GeofenceBroadcastReceiver"-->
|
||||
<!-- android:enabled="true"-->
|
||||
<!-- android:exported="false" />-->
|
||||
<!-- <receiver-->
|
||||
<!-- android:name=".geofence.intent_receivers.GeofencingRebootBroadcastReceiver"-->
|
||||
<!-- android:enabled="true"-->
|
||||
<!-- android:exported="false">-->
|
||||
<!-- <intent-filter>-->
|
||||
<!-- <action android:name="android.intent.action.BOOT_COMPLETED" />-->
|
||||
<!-- <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />-->
|
||||
<!-- </intent-filter>-->
|
||||
<!-- </receiver>-->
|
||||
<!-- <receiver-->
|
||||
<!-- android:name=".geofence.intent_receivers.LocationProviderChangeReceiver"-->
|
||||
<!-- android:exported="false">-->
|
||||
<!-- <intent-filter>-->
|
||||
<!-- <action android:name="android.location.PROVIDERS_CHANGED" />-->
|
||||
<!-- </intent-filter>-->
|
||||
<!-- </receiver>-->
|
||||
|
||||
<!-- <service-->
|
||||
<!-- android:name=".geofence.intent_receivers.ReregisterGeofenceJobService"-->
|
||||
<!-- android:exported="true"-->
|
||||
<!-- android:permission="android.permission.BIND_JOB_SERVICE" /> <!– Geofencing –>-->
|
||||
<!--
|
||||
Huawei Push Notifications
|
||||
Set push kit auto enable to true (for obtaining the token on initialize)
|
||||
-->
|
||||
<!-- <meta-data -->
|
||||
<!-- android:name="push_kit_auto_init_enabled" -->
|
||||
<!-- android:value="true" /> -->
|
||||
<!-- These receivers are for sending scheduled local notifications -->
|
||||
<!-- <receiver-->
|
||||
<!-- android:name="com.huawei.hms.flutter.push.receiver.local.HmsLocalNotificationBootEventReceiver"-->
|
||||
<!-- android:exported="false">-->
|
||||
<!-- <intent-filter>-->
|
||||
<!-- <action android:name="android.intent.action.BOOT_COMPLETED" />-->
|
||||
<!-- </intent-filter>-->
|
||||
<!-- </receiver>-->
|
||||
<!-- <receiver-->
|
||||
<!-- android:name="com.huawei.hms.flutter.push.receiver.local.HmsLocalNotificationScheduledPublisher"-->
|
||||
<!-- android:enabled="true"-->
|
||||
<!-- android:exported="false" />-->
|
||||
<!-- <receiver-->
|
||||
<!-- android:name="com.huawei.hms.flutter.push.receiver.BackgroundMessageBroadcastReceiver"-->
|
||||
<!-- android:enabled="true"-->
|
||||
<!-- android:exported="true">-->
|
||||
<!-- <intent-filter>-->
|
||||
<!-- <action android:name="com.huawei.hms.flutter.push.receiver.BACKGROUND_REMOTE_MESSAGE" />-->
|
||||
<!-- </intent-filter>-->
|
||||
<!-- </receiver> <!– Huawei Push Notifications –>-->
|
||||
<meta-data
|
||||
android:name="com.google.android.geo.API_KEY"
|
||||
android:value="AIzaSyB6TERnxIr0yJ3qG4ULBZbu0sAD4tGqtng" />
|
||||
<!--
|
||||
Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java
|
||||
-->
|
||||
<meta-data
|
||||
android:name="flutterEmbedding"
|
||||
android:value="2" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@ -0,0 +1,84 @@
|
||||
package com.ejada.hmg
|
||||
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import android.view.WindowManager
|
||||
import androidx.annotation.NonNull
|
||||
import androidx.annotation.Nullable
|
||||
import androidx.annotation.RequiresApi
|
||||
import com.ejada.hmg.penguin.PenguinInPlatformBridge
|
||||
import com.ejada.hmg.watch.huawei.HuaweiWatch
|
||||
import com.ejada.hmg.watch.huawei.samsung_watch.SamsungWatch
|
||||
import com.huawei.hms.hihealth.result.HealthKitAuthResult
|
||||
import com.huawei.hms.support.api.entity.auth.Scope
|
||||
import io.flutter.embedding.android.FlutterFragmentActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugins.GeneratedPluginRegistrant
|
||||
|
||||
|
||||
class MainActivity: FlutterFragmentActivity() {
|
||||
|
||||
private var huaweiWatch : HuaweiWatch? = null
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
|
||||
GeneratedPluginRegistrant.registerWith(flutterEngine);
|
||||
// Create Flutter Platform Bridge
|
||||
this.window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON)
|
||||
|
||||
PenguinInPlatformBridge(flutterEngine, this).create()
|
||||
SamsungWatch(flutterEngine, this)
|
||||
huaweiWatch = HuaweiWatch(flutterEngine, this)
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<out String>,
|
||||
grantResults: IntArray
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
|
||||
val granted = grantResults.all { it == PackageManager.PERMISSION_GRANTED }
|
||||
val intent = Intent("PERMISSION_RESULT_ACTION").apply {
|
||||
putExtra("PERMISSION_GRANTED", granted)
|
||||
}
|
||||
sendBroadcast(intent)
|
||||
|
||||
// Log the request code and permission results
|
||||
Log.d("PermissionsResult", "Request Code: $requestCode")
|
||||
Log.d("PermissionsResult", "Permissions: ${permissions.joinToString()}")
|
||||
Log.d("PermissionsResult", "Grant Results: ${grantResults.joinToString()}")
|
||||
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
}
|
||||
|
||||
// override fun onActivityResult(requestCode: Int, resultCode: Int, @Nullable data: Intent?) {
|
||||
// super.onActivityResult(requestCode, resultCode, data)
|
||||
//
|
||||
// // Process only the response result of the authorization process.
|
||||
// if (requestCode == 1002) {
|
||||
// // Obtain the authorization response result from the intent.
|
||||
// val result: HealthKitAuthResult? = huaweiWatch?.mSettingController?.parseHealthKitAuthResultFromIntent(data)
|
||||
// if (result == null) {
|
||||
// Log.w(huaweiWatch?.TAG, "authorization fail")
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// if (result.isSuccess) {
|
||||
// Log.i(huaweiWatch?.TAG, "authorization success")
|
||||
// if (result.getAuthAccount() != null && result.authAccount.authorizedScopes != null) {
|
||||
// val authorizedScopes: MutableSet<Scope?> = result.authAccount.authorizedScopes
|
||||
// if(authorizedScopes.isNotEmpty()) {
|
||||
// huaweiWatch?.getHealthAppAuthorization()
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// Log.w("MainActivty", "authorization fail, errorCode:" + result.getErrorCode())
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
@ -0,0 +1,402 @@
|
||||
package com.ejada.hmg.watch.huawei.samsung_watch
|
||||
|
||||
|
||||
|
||||
import com.ejada.hmg.MainActivity
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import androidx.annotation.RequiresApi
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugin.common.MethodCall
|
||||
import com.ejada.hmg.watch.huawei.samsung_watch.model.Vitals
|
||||
import com.samsung.android.sdk.health.data.HealthDataService
|
||||
import com.samsung.android.sdk.health.data.HealthDataStore
|
||||
import com.samsung.android.sdk.health.data.data.AggregatedData
|
||||
import com.samsung.android.sdk.health.data.data.HealthDataPoint
|
||||
import com.samsung.android.sdk.health.data.permission.AccessType
|
||||
import com.samsung.android.sdk.health.data.permission.Permission
|
||||
import com.samsung.android.sdk.health.data.request.DataType
|
||||
import com.samsung.android.sdk.health.data.request.DataTypes
|
||||
import com.samsung.android.sdk.health.data.request.LocalTimeFilter
|
||||
import com.samsung.android.sdk.health.data.request.LocalTimeGroup
|
||||
import com.samsung.android.sdk.health.data.request.LocalTimeGroupUnit
|
||||
import com.samsung.android.sdk.health.data.request.Ordering
|
||||
import com.samsung.android.sdk.health.data.response.DataResponse
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.launch
|
||||
import java.time.LocalDateTime
|
||||
import java.time.LocalTime
|
||||
|
||||
class SamsungWatch(
|
||||
private var flutterEngine: FlutterEngine,
|
||||
private var mainActivity: MainActivity
|
||||
) {
|
||||
|
||||
private lateinit var channel: MethodChannel
|
||||
private lateinit var dataStore: HealthDataStore
|
||||
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
||||
private val TAG = "SamsungWatch"
|
||||
|
||||
|
||||
private lateinit var vitals: MutableMap<String, List<Vitals>>
|
||||
companion object {
|
||||
private const val CHANNEL = "samsung_watch"
|
||||
|
||||
}
|
||||
init{
|
||||
create()
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
fun create() {
|
||||
Log.d(TAG, "create: is called")
|
||||
// openTok = OpenTok(mainActivity, flutterEngine)
|
||||
channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
|
||||
channel.setMethodCallHandler { call: MethodCall, result: MethodChannel.Result ->
|
||||
when (call.method) {
|
||||
"init" -> {
|
||||
Log.d(TAG, "onMethodCall: init called")
|
||||
dataStore = HealthDataService.getStore(mainActivity)
|
||||
vitals = mutableMapOf()
|
||||
result.success("initialized")
|
||||
}
|
||||
|
||||
"getPermission"->{
|
||||
if(!this::dataStore.isInitialized)
|
||||
result.error("DataStoreNotInitialized", "Please call init before requesting permissions", null)
|
||||
val permSet = setOf(
|
||||
Permission.of(DataTypes.HEART_RATE, AccessType.READ),
|
||||
Permission.of(DataTypes.STEPS, AccessType.READ),
|
||||
Permission.of(DataTypes.BLOOD_OXYGEN, AccessType.READ),
|
||||
Permission.of(DataTypes.ACTIVITY_SUMMARY, AccessType.READ),
|
||||
Permission.of(DataTypes.SLEEP, AccessType.READ),
|
||||
Permission.of(DataTypes.BODY_TEMPERATURE, AccessType.READ),
|
||||
Permission.of(DataTypes.EXERCISE, AccessType.READ),
|
||||
// Permission.of(DataTypes.SKIN_TEMPERATURE, AccessType.READ),
|
||||
// Permission.of(DataTypes.NUTRITION, AccessType.READ),
|
||||
|
||||
)
|
||||
scope.launch {
|
||||
try {
|
||||
var granted = dataStore.getGrantedPermissions(permSet)
|
||||
|
||||
if (granted.containsAll(permSet)) {
|
||||
result.success("Permission Granted")
|
||||
return@launch
|
||||
}
|
||||
|
||||
granted = dataStore.requestPermissions(permSet, mainActivity)
|
||||
|
||||
if (granted.containsAll(permSet)) {
|
||||
result.success("Permission Granted") // adapt result as needed
|
||||
return@launch
|
||||
}
|
||||
result.error("PermissionError", "Permission Not Granted", null) // adapt result as needed
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "create: getPermission failed", e)
|
||||
result.error("PermissionError", e.message, null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
"getHeartRate"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val readRequest = DataTypes.HEART_RATE.readDataRequestBuilder
|
||||
.setLocalTimeFilter(localTimeFilter)
|
||||
.setOrdering(Ordering.DESC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val heartRateList = dataStore.readData(readRequest).dataList
|
||||
processHeartVital(heartRateList)
|
||||
Log.d("TAG"," the data is ${vitals}")
|
||||
print("the data is ${vitals}")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
"getSleepData" -> {
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val readRequest = DataTypes.SLEEP.readDataRequestBuilder
|
||||
.setLocalTimeFilter(localTimeFilter)
|
||||
.setOrdering(Ordering.ASC)
|
||||
.build()
|
||||
scope.launch {
|
||||
val sleepData = dataStore.readData(readRequest).dataList
|
||||
processSleepVital(sleepData)
|
||||
print("the data is $vitals")
|
||||
Log.d(TAG, "the data is $vitals")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
"steps"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val localTimeGroup = LocalTimeGroup.of(LocalTimeGroupUnit.HOURLY, 1)
|
||||
val aggregateRequest = DataType.StepsType.TOTAL.requestBuilder
|
||||
.setLocalTimeFilterWithGroup(localTimeFilter, localTimeGroup)
|
||||
.setOrdering(Ordering.ASC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val steps = dataStore.aggregateData(aggregateRequest)
|
||||
processStepsCount(steps)
|
||||
print("the data is $vitals")
|
||||
Log.d(TAG, "the data is $vitals")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
}
|
||||
|
||||
"activitySummary"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val localTimeGroup = LocalTimeGroup.of(LocalTimeGroupUnit.HOURLY, 1)
|
||||
val readRequest = DataType.ActivitySummaryType.TOTAL_ACTIVE_CALORIES_BURNED
|
||||
.requestBuilder
|
||||
.setLocalTimeFilterWithGroup(localTimeFilter, localTimeGroup)
|
||||
.setOrdering(Ordering.DESC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val activityResult = dataStore.aggregateData(readRequest).dataList
|
||||
processActivity(activityResult)
|
||||
Log.d("TAG"," the data is ${vitals}")
|
||||
print("the data is ${vitals}")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
|
||||
// val readRequest = DataTypes.EXERCISE.readDataRequestBuilder
|
||||
// .setLocalTimeFilter(localTimeFilter)
|
||||
// .build()
|
||||
//
|
||||
// scope.launch{
|
||||
// try {
|
||||
// val readResult = dataStore.readData(readRequest)
|
||||
// val dataPoints = readResult.dataList
|
||||
//
|
||||
// processActivity(dataPoints)
|
||||
//
|
||||
//
|
||||
// } catch (e: Exception) {
|
||||
// e.printStackTrace()
|
||||
// }
|
||||
// result.success("Data is obtained")
|
||||
// }
|
||||
}
|
||||
|
||||
"bloodOxygen"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val readRequest = DataTypes.BLOOD_OXYGEN.readDataRequestBuilder
|
||||
.setLocalTimeFilter(localTimeFilter)
|
||||
.setOrdering(Ordering.DESC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val bloodOxygenList = dataStore.readData(readRequest).dataList
|
||||
processBloodOxygen(bloodOxygenList)
|
||||
Log.d("TAG"," the data is ${vitals}")
|
||||
print("the data is ${vitals["bloodOxygen"]}")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
"bodyTemperature"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val readRequest = DataTypes.BODY_TEMPERATURE.readDataRequestBuilder
|
||||
.setLocalTimeFilter(localTimeFilter)
|
||||
.setOrdering(Ordering.DESC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val bodyTemperatureList = dataStore.readData(readRequest).dataList
|
||||
processBodyTemperature(bodyTemperatureList)
|
||||
Log.d("TAG"," the data is ${vitals}")
|
||||
print("the data is ${vitals["bodyTemperature"]}")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
}
|
||||
|
||||
"distance"->{
|
||||
val dateTime = LocalDateTime.now().with(LocalTime.MIDNIGHT).minusDays(365)
|
||||
val localTimeFilter = LocalTimeFilter.of(dateTime, LocalDateTime.now())
|
||||
val localTimeGroup = LocalTimeGroup.of(LocalTimeGroupUnit.HOURLY, 1)
|
||||
val readRequest = DataType.ActivitySummaryType.TOTAL_DISTANCE.requestBuilder
|
||||
.setLocalTimeFilterWithGroup(localTimeFilter, localTimeGroup)
|
||||
.setOrdering(Ordering.DESC)
|
||||
.build()
|
||||
|
||||
scope.launch {
|
||||
val activityResult = dataStore.aggregateData(readRequest).dataList
|
||||
processDistance(activityResult)
|
||||
Log.d("TAG"," the data is ${vitals}")
|
||||
print("the data is ${vitals}")
|
||||
result.success("Data is obtained")
|
||||
}
|
||||
}
|
||||
|
||||
"retrieveData"->{
|
||||
if(vitals.isEmpty()){
|
||||
result.error("NoDataFound", "No Data was obtained", null)
|
||||
return@setMethodCallHandler
|
||||
}
|
||||
result.success("""
|
||||
{
|
||||
"heartRate": ${vitals["heartRate"]},
|
||||
"steps": ${vitals["steps"]},
|
||||
"sleep": ${vitals["sleep"]},
|
||||
"activity": ${vitals["activity"]},
|
||||
"bloodOxygen": ${vitals["bloodOxygen"]},
|
||||
"bodyTemperature": ${vitals["bodyTemperature"]},
|
||||
"distance": ${vitals["distance"]}
|
||||
}
|
||||
""".trimIndent())
|
||||
}
|
||||
|
||||
|
||||
"closeCoroutineScope"->{
|
||||
destroy()
|
||||
result.success("Coroutine Scope Cancelled")
|
||||
}
|
||||
|
||||
else -> {
|
||||
result.notImplemented()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun CoroutineScope.processDistance(activityResult: List<AggregatedData<Float>>) {
|
||||
vitals["distance"] = mutableListOf()
|
||||
activityResult.forEach { stepData ->
|
||||
val vitalData = Vitals().apply {
|
||||
|
||||
value = stepData.value.toString()
|
||||
timeStamp = stepData.startTime.toString()
|
||||
}
|
||||
(vitals["distance"] as MutableList).add(vitalData)
|
||||
}
|
||||
}
|
||||
|
||||
private fun CoroutineScope.processBodyTemperature( bodyTemperatureList :List<HealthDataPoint>) {
|
||||
vitals["bodyTemperature"] = mutableListOf()
|
||||
bodyTemperatureList.forEach { stepData ->
|
||||
val vitalData = Vitals().apply {
|
||||
value = stepData.getValue(DataType.BodyTemperatureType.BODY_TEMPERATURE).toString()
|
||||
timeStamp = stepData.endTime.toString()
|
||||
}
|
||||
(vitals["bodyTemperature"] as MutableList).add(vitalData)
|
||||
}
|
||||
}
|
||||
|
||||
private fun CoroutineScope.processBloodOxygen( bloodOxygenList :List<HealthDataPoint>) {
|
||||
vitals["bloodOxygen"] = mutableListOf()
|
||||
bloodOxygenList.forEach { stepData ->
|
||||
val vitalData = Vitals().apply {
|
||||
value = stepData.getValue(DataType.BloodOxygenType.OXYGEN_SATURATION).toString()
|
||||
timeStamp = stepData.endTime.toString()
|
||||
}
|
||||
(vitals["bloodOxygen"] as MutableList).add(vitalData)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// private fun CoroutineScope.processActivity(activityResult: List<AggregatedData<Float>>) {
|
||||
//
|
||||
// vitals["activity"] = mutableListOf()
|
||||
// activityResult.forEach { stepData ->
|
||||
// val vitalData = Vitals().apply {
|
||||
//
|
||||
// value = stepData.value.toString()
|
||||
// timeStamp = stepData.startTime.toString()
|
||||
// }
|
||||
// (vitals["activity"] as MutableList).add(vitalData)
|
||||
// }
|
||||
// }
|
||||
private fun CoroutineScope.processActivity(activityResult: List<AggregatedData<Float>>) {
|
||||
|
||||
vitals["activity"] = mutableListOf()
|
||||
activityResult.forEach { stepData ->
|
||||
val vitalData = Vitals().apply {
|
||||
|
||||
value = stepData.value.toString()
|
||||
timeStamp = stepData.startTime.toString()
|
||||
}
|
||||
(vitals["activity"] as MutableList).add(vitalData)
|
||||
}
|
||||
|
||||
// dataPoints.forEach { dataPoint ->
|
||||
// val sessions = dataPoint.getValue(DataType.ExerciseType.SESSIONS)
|
||||
//
|
||||
// sessions?.forEach { session ->
|
||||
//
|
||||
// val exerciseSessionCalories = session.calories
|
||||
// val vitalData = Vitals().apply {
|
||||
// value = exerciseSessionCalories.toString()
|
||||
// timeStamp = session.startTime.toString()
|
||||
// }
|
||||
// (vitals["activity"] as MutableList).add(vitalData)
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
private fun CoroutineScope.processStepsCount(result: DataResponse<AggregatedData<Long>>) {
|
||||
val stepCount = ArrayList<AggregatedData<Long>>()
|
||||
var totalSteps: Long = 0
|
||||
vitals["steps"] = mutableListOf()
|
||||
result.dataList.forEach { stepData ->
|
||||
val vitalData = Vitals().apply {
|
||||
value = (stepData.value as Long).toString()
|
||||
timeStamp = stepData.startTime.toString()
|
||||
}
|
||||
(vitals["steps"] as MutableList).add(vitalData)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun CoroutineScope.processSleepVital(sleepData: List<HealthDataPoint>) {
|
||||
vitals["sleep"] = mutableListOf()
|
||||
sleepData.forEach {
|
||||
(vitals["sleep"] as MutableList).add(
|
||||
Vitals().apply {
|
||||
timeStamp = it.startTime.toString()
|
||||
value = (it.getValue(DataType.SleepType.DURATION)?.toMillis().toString())
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun CoroutineScope.processHeartVital(
|
||||
heartRateList: List<HealthDataPoint>,
|
||||
) {
|
||||
vitals["heartRate"] = mutableListOf()
|
||||
heartRateList.forEach {
|
||||
(vitals["heartRate"] as MutableList).add(processHeartRateData(it))
|
||||
}
|
||||
}
|
||||
|
||||
private fun processHeartRateData(heartRateData: HealthDataPoint) =
|
||||
Vitals().apply {
|
||||
heartRateData.getValue(DataType.HeartRateType.MAX_HEART_RATE)?.let {
|
||||
value = it.toString()
|
||||
}
|
||||
timeStamp = heartRateData.startTime.toString()
|
||||
}
|
||||
|
||||
|
||||
fun destroy() {
|
||||
scope.cancel()
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package com.ejada.hmg.watch.huawei.samsung_watch.model
|
||||
|
||||
data class Vitals(
|
||||
var value : String = "",
|
||||
var timeStamp :String = ""
|
||||
){
|
||||
override fun toString(): String {
|
||||
return """{
|
||||
"value": "$value",
|
||||
"timeStamp": "$timeStamp"}
|
||||
""".trimIndent()
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Modify this file to customize your launch splash screen -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="?android:colorBackground" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
</layer-list>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Modify this file to customize your launch splash screen -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@android:color/white" />
|
||||
|
||||
<!-- You can insert your own image assets here -->
|
||||
<!-- <item>
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@mipmap/launch_image" />
|
||||
</item> -->
|
||||
</layer-list>
|
||||
|
After Width: | Height: | Size: 1021 B |
|
After Width: | Height: | Size: 180 B |
|
After Width: | Height: | Size: 1.0 KiB |
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="com.cloud.diplomaticquarterapp.whatsapp.WhatsAppCodeActivity">
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@ -0,0 +1,14 @@
|
||||
<?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:orientation="horizontal"
|
||||
android:gravity="center_horizontal"
|
||||
android:layout_gravity="center_horizontal">
|
||||
<FrameLayout
|
||||
android:id="@+id/publisher_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#FF9800" />
|
||||
|
||||
</LinearLayout>
|
||||
@ -0,0 +1,20 @@
|
||||
<?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:orientation="horizontal"
|
||||
android:gravity="center_horizontal"
|
||||
android:layout_gravity="center_horizontal">
|
||||
<FrameLayout
|
||||
android:id="@+id/subscriber_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#3F51B5" />
|
||||
|
||||
<TextView
|
||||
android:text="Remote"
|
||||
android:textColor="#FFFFFF"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 544 B |
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 442 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 721 B |
|
After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:keep="@drawable/*,@raw/slow_spring_board" />
|
||||
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
the Flutter engine draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||
running.
|
||||
|
||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<item name="android:windowBackground">?android:colorBackground</item>
|
||||
</style>
|
||||
</resources>
|
||||
@ -0,0 +1,3 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- <string name="mapbox_access_token" translatable="false" tools:ignore="UnusedResources">sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg</string>-->
|
||||
</resources>
|
||||
@ -0,0 +1,23 @@
|
||||
<resources>
|
||||
<string name="app_name">HMG Patient App</string>
|
||||
|
||||
<string name="geofence_unknown_error">
|
||||
Unknown error: the Geofence service is not available now.
|
||||
</string>
|
||||
<string name="geofence_not_available">
|
||||
Geofence service is not available now. Go to Settings>Location>Mode and choose High accuracy.
|
||||
</string>
|
||||
<string name="geofence_too_many_geofences">
|
||||
Your app has registered too many geofences.
|
||||
</string>
|
||||
<string name="geofence_too_many_pending_intents">
|
||||
You have provided too many PendingIntents to the addGeofences() call.
|
||||
</string>
|
||||
<string name="GEOFENCE_INSUFFICIENT_LOCATION_PERMISSION">
|
||||
App do not have permission to access location service.
|
||||
</string>
|
||||
<string name="GEOFENCE_REQUEST_TOO_FREQUENT">
|
||||
Geofence requests happened too frequently.
|
||||
</string>
|
||||
<string name="mapbox_access_token" translatable="false">pk.eyJ1IjoicndhaWQiLCJhIjoiY2x5cGo4aHNjMGNsbTJyc2djempobGQxaSJ9.RCaC6WrUt4A4YnZNfxnONQ</string>
|
||||
</resources>
|
||||
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Theme applied to the Android Window while the process is starting -->
|
||||
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<!-- Show a splash screen on the activity. Automatically removed when
|
||||
Flutter draws its first frame -->
|
||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||
</style>
|
||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||
This theme determines the color of the Android Window while your
|
||||
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||
running.
|
||||
|
||||
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||
<item name="android:windowBackground">@android:color/white</item>
|
||||
</style>
|
||||
</resources>
|
||||
@ -1,3 +1,10 @@
|
||||
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
||||
android.useAndroidX=true
|
||||
#org.gradle.jvmargs=-xmx4608m
|
||||
android.enableR8=true
|
||||
android.enableJetifier=true
|
||||
android.useDeprecatedNdk=true
|
||||
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
||||
org.gradle.daemon=true
|
||||
org.gradle.parallel=true
|
||||
org.gradle.configureondemand=true
|
||||
android.useAndroidX=true
|
||||
android.enableImpeller=false
|
||||
|
||||
@ -1,767 +1 @@
|
||||
{
|
||||
"nm": "HDFC Success",
|
||||
"h": 512,
|
||||
"w": 512,
|
||||
"meta": {
|
||||
"g": "LottieFiles AE 1.0.0"
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"ty": 4,
|
||||
"nm": "check",
|
||||
"sr": 1,
|
||||
"st": 0,
|
||||
"op": 240,
|
||||
"ip": 0,
|
||||
"hasMask": false,
|
||||
"ao": 0,
|
||||
"ks": {
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
256,
|
||||
256,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
"ef": [],
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"nm": "Shape 1",
|
||||
"it": [
|
||||
{
|
||||
"ty": "sh",
|
||||
"nm": "Path 1",
|
||||
"d": 1,
|
||||
"ks": {
|
||||
"a": 0,
|
||||
"k": {
|
||||
"c": false,
|
||||
"i": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"o": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"v": [
|
||||
[
|
||||
-82.5,
|
||||
4.5
|
||||
],
|
||||
[
|
||||
-31,
|
||||
55
|
||||
],
|
||||
[
|
||||
73,
|
||||
-52.5
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "tm",
|
||||
"nm": "Trim Paths 1",
|
||||
"e": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"o": {
|
||||
"x": 1,
|
||||
"y": 0.076
|
||||
},
|
||||
"i": {
|
||||
"x": 0.667,
|
||||
"y": 1
|
||||
},
|
||||
"s": [
|
||||
0
|
||||
],
|
||||
"t": 60
|
||||
},
|
||||
{
|
||||
"s": [
|
||||
100
|
||||
],
|
||||
"t": 85
|
||||
}
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"m": 1
|
||||
},
|
||||
{
|
||||
"ty": "st",
|
||||
"nm": "Stroke 1",
|
||||
"lc": 2,
|
||||
"lj": 2,
|
||||
"ml": 1,
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
},
|
||||
"w": {
|
||||
"a": 0,
|
||||
"k": 30
|
||||
},
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ind": 1
|
||||
},
|
||||
{
|
||||
"ty": 4,
|
||||
"nm": "Shape Layer 2",
|
||||
"sr": 1,
|
||||
"st": 0,
|
||||
"op": 240,
|
||||
"ip": 0,
|
||||
"hasMask": false,
|
||||
"ao": 0,
|
||||
"ks": {
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"o": {
|
||||
"x": 0.656,
|
||||
"y": 0.872
|
||||
},
|
||||
"i": {
|
||||
"x": 0,
|
||||
"y": 0.98
|
||||
},
|
||||
"s": [
|
||||
0,
|
||||
0,
|
||||
100
|
||||
],
|
||||
"t": 20
|
||||
},
|
||||
{
|
||||
"s": [
|
||||
150,
|
||||
150,
|
||||
100
|
||||
],
|
||||
"t": 60
|
||||
}
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
256,
|
||||
257.86,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
"ef": [],
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"nm": "Ellipse 1",
|
||||
"it": [
|
||||
{
|
||||
"ty": "el",
|
||||
"nm": "Ellipse Path 1",
|
||||
"d": 1,
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
236,
|
||||
236
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"nm": "Fill 1",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0.094,
|
||||
0.761,
|
||||
0.451
|
||||
]
|
||||
},
|
||||
"r": 1,
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
-3
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ind": 2
|
||||
},
|
||||
{
|
||||
"ty": 4,
|
||||
"nm": "Shape Layer 1",
|
||||
"sr": 1,
|
||||
"st": 0,
|
||||
"op": 240,
|
||||
"ip": 0,
|
||||
"hasMask": false,
|
||||
"ao": 0,
|
||||
"ks": {
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"o": {
|
||||
"x": 0.477,
|
||||
"y": 0.587
|
||||
},
|
||||
"i": {
|
||||
"x": 0,
|
||||
"y": 0.999
|
||||
},
|
||||
"s": [
|
||||
0,
|
||||
0,
|
||||
100
|
||||
],
|
||||
"t": 10
|
||||
},
|
||||
{
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0.167
|
||||
},
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 0.833
|
||||
},
|
||||
"s": [
|
||||
150,
|
||||
150,
|
||||
100
|
||||
],
|
||||
"t": 50
|
||||
},
|
||||
{
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0
|
||||
},
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 1
|
||||
},
|
||||
"s": [
|
||||
150,
|
||||
150,
|
||||
100
|
||||
],
|
||||
"t": 76
|
||||
},
|
||||
{
|
||||
"s": [
|
||||
210,
|
||||
210,
|
||||
100
|
||||
],
|
||||
"t": 123
|
||||
}
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
256,
|
||||
257.86,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"o": {
|
||||
"x": 0.912,
|
||||
"y": 0.073
|
||||
},
|
||||
"i": {
|
||||
"x": 0.626,
|
||||
"y": 0.729
|
||||
},
|
||||
"s": [
|
||||
100
|
||||
],
|
||||
"t": 76
|
||||
},
|
||||
{
|
||||
"s": [
|
||||
0
|
||||
],
|
||||
"t": 119
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"ef": [],
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"nm": "Ellipse 1",
|
||||
"it": [
|
||||
{
|
||||
"ty": "el",
|
||||
"nm": "Ellipse Path 1",
|
||||
"d": 1,
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
236,
|
||||
236
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "st",
|
||||
"nm": "Stroke 1",
|
||||
"lc": 1,
|
||||
"lj": 1,
|
||||
"ml": 4,
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
},
|
||||
"w": {
|
||||
"a": 0,
|
||||
"k": 2
|
||||
},
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"nm": "Fill 1",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0.784,
|
||||
0.945,
|
||||
0.878
|
||||
]
|
||||
},
|
||||
"r": 1,
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
-3
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ind": 3
|
||||
},
|
||||
{
|
||||
"ty": 4,
|
||||
"nm": "BG",
|
||||
"sr": 1,
|
||||
"st": 0,
|
||||
"op": 240,
|
||||
"ip": 0,
|
||||
"hasMask": false,
|
||||
"ao": 0,
|
||||
"ks": {
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
256,
|
||||
256,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
"ef": [],
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"nm": "Rectangle 1",
|
||||
"it": [
|
||||
{
|
||||
"ty": "rc",
|
||||
"nm": "Rectangle Path 1",
|
||||
"d": 1,
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
554,
|
||||
556
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"nm": "Fill 1",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0.972,
|
||||
0.972,
|
||||
0.972
|
||||
]
|
||||
},
|
||||
"r": 1,
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
-1,
|
||||
6
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ind": 4
|
||||
}
|
||||
],
|
||||
"v": "4.8.0",
|
||||
"fr": 60,
|
||||
"op": 130,
|
||||
"ip": 0,
|
||||
"assets": []
|
||||
}
|
||||
{"nm":"Main Scene","ddd":0,"h":512,"w":512,"meta":{"g":"@lottiefiles/creator 1.75.0"},"layers":[{"ty":4,"nm":"check","sr":1,"st":0,"op":240,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[256,256],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Shape 1","ix":1,"cix":2,"np":4,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-82.5,4.5],[-31,55],[73,-52.5]]},"ix":2}},{"ty":"tm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Trim","nm":"Trim Paths 1","ix":2,"e":{"a":1,"k":[{"o":{"x":1,"y":0.076},"i":{"x":0.667,"y":1},"s":[0],"t":60},{"s":[100],"t":85}],"ix":2},"o":{"a":0,"k":0,"ix":3},"s":{"a":0,"k":0,"ix":1},"m":1},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":30,"ix":5},"c":{"a":0,"k":[1,1,1],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Shape Layer 2","sr":1,"st":0,"op":240,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.656,"y":0.872},"i":{"x":0,"y":0.98},"s":[0,0,100],"t":20},{"s":[150,150,100],"t":60}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[256,257.86],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[236,236],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.0941,0.7608,0.451],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,-3],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"Shape Layer 1","sr":1,"st":0,"op":240,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.477,"y":0.587},"i":{"x":0,"y":0.999},"s":[0,0,100],"t":10},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[150,150,100],"t":50},{"o":{"x":0.167,"y":0},"i":{"x":0.833,"y":1},"s":[150,150,100],"t":76},{"s":[210,210,100],"t":123}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[256,257.86],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.912,"y":0.073},"i":{"x":0.626,"y":0.729},"s":[100],"t":76},{"s":[0],"t":119}],"ix":11}},"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[236,236],"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"c":{"a":0,"k":[1,1,1],"ix":3}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.7843,0.9451,0.8784],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,-3],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3}],"v":"5.7.0","fr":60,"op":130,"ip":0,"assets":[]}
|
||||
@ -0,0 +1,767 @@
|
||||
{
|
||||
"nm": "HDFC Success",
|
||||
"h": 512,
|
||||
"w": 512,
|
||||
"meta": {
|
||||
"g": "LottieFiles AE 1.0.0"
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"ty": 4,
|
||||
"nm": "check",
|
||||
"sr": 1,
|
||||
"st": 0,
|
||||
"op": 240,
|
||||
"ip": 0,
|
||||
"hasMask": false,
|
||||
"ao": 0,
|
||||
"ks": {
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
256,
|
||||
256,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
"ef": [],
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"nm": "Shape 1",
|
||||
"it": [
|
||||
{
|
||||
"ty": "sh",
|
||||
"nm": "Path 1",
|
||||
"d": 1,
|
||||
"ks": {
|
||||
"a": 0,
|
||||
"k": {
|
||||
"c": false,
|
||||
"i": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"o": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"v": [
|
||||
[
|
||||
-82.5,
|
||||
4.5
|
||||
],
|
||||
[
|
||||
-31,
|
||||
55
|
||||
],
|
||||
[
|
||||
73,
|
||||
-52.5
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "tm",
|
||||
"nm": "Trim Paths 1",
|
||||
"e": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"o": {
|
||||
"x": 1,
|
||||
"y": 0.076
|
||||
},
|
||||
"i": {
|
||||
"x": 0.667,
|
||||
"y": 1
|
||||
},
|
||||
"s": [
|
||||
0
|
||||
],
|
||||
"t": 60
|
||||
},
|
||||
{
|
||||
"s": [
|
||||
100
|
||||
],
|
||||
"t": 85
|
||||
}
|
||||
]
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"m": 1
|
||||
},
|
||||
{
|
||||
"ty": "st",
|
||||
"nm": "Stroke 1",
|
||||
"lc": 2,
|
||||
"lj": 2,
|
||||
"ml": 1,
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
},
|
||||
"w": {
|
||||
"a": 0,
|
||||
"k": 30
|
||||
},
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ind": 1
|
||||
},
|
||||
{
|
||||
"ty": 4,
|
||||
"nm": "Shape Layer 2",
|
||||
"sr": 1,
|
||||
"st": 0,
|
||||
"op": 240,
|
||||
"ip": 0,
|
||||
"hasMask": false,
|
||||
"ao": 0,
|
||||
"ks": {
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"o": {
|
||||
"x": 0.656,
|
||||
"y": 0.872
|
||||
},
|
||||
"i": {
|
||||
"x": 0,
|
||||
"y": 0.98
|
||||
},
|
||||
"s": [
|
||||
0,
|
||||
0,
|
||||
100
|
||||
],
|
||||
"t": 20
|
||||
},
|
||||
{
|
||||
"s": [
|
||||
150,
|
||||
150,
|
||||
100
|
||||
],
|
||||
"t": 60
|
||||
}
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
256,
|
||||
257.86,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
"ef": [],
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"nm": "Ellipse 1",
|
||||
"it": [
|
||||
{
|
||||
"ty": "el",
|
||||
"nm": "Ellipse Path 1",
|
||||
"d": 1,
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
236,
|
||||
236
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"nm": "Fill 1",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0.094,
|
||||
0.761,
|
||||
0.451
|
||||
]
|
||||
},
|
||||
"r": 1,
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
-3
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ind": 2
|
||||
},
|
||||
{
|
||||
"ty": 4,
|
||||
"nm": "Shape Layer 1",
|
||||
"sr": 1,
|
||||
"st": 0,
|
||||
"op": 240,
|
||||
"ip": 0,
|
||||
"hasMask": false,
|
||||
"ao": 0,
|
||||
"ks": {
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"o": {
|
||||
"x": 0.477,
|
||||
"y": 0.587
|
||||
},
|
||||
"i": {
|
||||
"x": 0,
|
||||
"y": 0.999
|
||||
},
|
||||
"s": [
|
||||
0,
|
||||
0,
|
||||
100
|
||||
],
|
||||
"t": 10
|
||||
},
|
||||
{
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0.167
|
||||
},
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 0.833
|
||||
},
|
||||
"s": [
|
||||
150,
|
||||
150,
|
||||
100
|
||||
],
|
||||
"t": 50
|
||||
},
|
||||
{
|
||||
"o": {
|
||||
"x": 0.167,
|
||||
"y": 0
|
||||
},
|
||||
"i": {
|
||||
"x": 0.833,
|
||||
"y": 1
|
||||
},
|
||||
"s": [
|
||||
150,
|
||||
150,
|
||||
100
|
||||
],
|
||||
"t": 76
|
||||
},
|
||||
{
|
||||
"s": [
|
||||
210,
|
||||
210,
|
||||
100
|
||||
],
|
||||
"t": 123
|
||||
}
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
256,
|
||||
257.86,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 1,
|
||||
"k": [
|
||||
{
|
||||
"o": {
|
||||
"x": 0.912,
|
||||
"y": 0.073
|
||||
},
|
||||
"i": {
|
||||
"x": 0.626,
|
||||
"y": 0.729
|
||||
},
|
||||
"s": [
|
||||
100
|
||||
],
|
||||
"t": 76
|
||||
},
|
||||
{
|
||||
"s": [
|
||||
0
|
||||
],
|
||||
"t": 119
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"ef": [],
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"nm": "Ellipse 1",
|
||||
"it": [
|
||||
{
|
||||
"ty": "el",
|
||||
"nm": "Ellipse Path 1",
|
||||
"d": 1,
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
236,
|
||||
236
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "st",
|
||||
"nm": "Stroke 1",
|
||||
"lc": 1,
|
||||
"lj": 1,
|
||||
"ml": 4,
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
},
|
||||
"w": {
|
||||
"a": 0,
|
||||
"k": 2
|
||||
},
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"nm": "Fill 1",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0.784,
|
||||
0.945,
|
||||
0.878
|
||||
]
|
||||
},
|
||||
"r": 1,
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
-3
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ind": 3
|
||||
},
|
||||
{
|
||||
"ty": 4,
|
||||
"nm": "BG",
|
||||
"sr": 1,
|
||||
"st": 0,
|
||||
"op": 240,
|
||||
"ip": 0,
|
||||
"hasMask": false,
|
||||
"ao": 0,
|
||||
"ks": {
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
256,
|
||||
256,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
"ef": [],
|
||||
"shapes": [
|
||||
{
|
||||
"ty": "gr",
|
||||
"nm": "Rectangle 1",
|
||||
"it": [
|
||||
{
|
||||
"ty": "rc",
|
||||
"nm": "Rectangle Path 1",
|
||||
"d": 1,
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
554,
|
||||
556
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "fl",
|
||||
"nm": "Fill 1",
|
||||
"c": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0.972,
|
||||
0.972,
|
||||
0.972
|
||||
]
|
||||
},
|
||||
"r": 1,
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
},
|
||||
{
|
||||
"ty": "tr",
|
||||
"a": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"s": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"sk": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"p": {
|
||||
"a": 0,
|
||||
"k": [
|
||||
-1,
|
||||
6
|
||||
]
|
||||
},
|
||||
"r": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"sa": {
|
||||
"a": 0,
|
||||
"k": 0
|
||||
},
|
||||
"o": {
|
||||
"a": 0,
|
||||
"k": 100
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ind": 4
|
||||
}
|
||||
],
|
||||
"v": "4.8.0",
|
||||
"fr": 60,
|
||||
"op": 130,
|
||||
"ip": 0,
|
||||
"assets": []
|
||||
}
|
||||