Merge branch 'dev' into localprofile
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m5 2v2h-2c-.55228 0-1 .44772-1 1v16c0 .55228.44772 1 1 1h10c.55228 0 1-.44772 1-1v-16c0-.55228-.44772-1-1-1h-2v-2zm15.07 2.9297-1.4102 1.4102c3.13 3.12 3.13 8.1903 0 11.32l1.4102 1.4102c3.9-3.9 3.9-10.231 0-14.141zm-16.07 1.0703h8v14h-2v-1.5h-2v1.5h-2v-1.5h-2zm13.24 1.7598-1.4102 1.4102c1.56 1.56 1.56 4.0902 0 5.6602l1.4102 1.4102c2.34-2.34 2.34-6.1405 0-8.4805z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 522 B |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m5 2v2h-2c-.55228 0-1 .44772-1 1v16c0 .55228.44772 1 1 1h10c.55228 0 1-.44772 1-1v-16c0-.55228-.44772-1-1-1h-2v-2zm15.07 2.9297-1.4102 1.4102c3.13 3.12 3.13 8.1903 0 11.32l1.4102 1.4102c3.9-3.9 3.9-10.231 0-14.141zm-16.07 1.0703h8v11h-2v1h2v2h-2v-2h-2v2h-2v-2h-2zm2 12h2v-1h-2zm11.24-10.24-1.4102 1.4102c1.56 1.56 1.56 4.0902 0 5.6602l1.4102 1.4102c2.34-2.34 2.34-6.1405 0-8.4805z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 538 B |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m5 2v2h-2c-.55228 0-1 .44772-1 1v16c0 .55228.44772 1 1 1h10c.55228 0 1-.44772 1-1v-16c0-.55228-.44772-1-1-1h-2v-2zm15.07 2.9297-1.4102 1.4102c3.13 3.12 3.13 8.1903 0 11.32l1.4102 1.4102c3.9-3.9 3.9-10.231 0-14.141zm-16.07 1.0703h8v10h-2v2h2v2h-2v-2h-2v2h-2v-2h-2zm2 12h2v-2h-2zm11.24-10.24-1.4102 1.4102c1.56 1.56 1.56 4.0902 0 5.6602l1.4102 1.4102c2.34-2.34 2.34-6.1405 0-8.4805z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 538 B |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m5 2v2h-2c-.55228 0-1 .44772-1 1v16c0 .55228.44772 1 1 1h10c.55228 0 1-.44772 1-1v-16c0-.55228-.44772-1-1-1h-2v-2zm15.07 2.9297-1.4102 1.4102c3.13 3.12 3.13 8.1903 0 11.32l1.4102 1.4102c3.9-3.9 3.9-10.231 0-14.141zm-16.07 1.0703h8v10h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v-2h2v-1.5h-2zm2 10v2h2v-2zm2 0h2v-1.5h-2zm9.2402-8.2402-1.4102 1.4102c1.56 1.56 1.56 4.0902 0 5.6602l1.4102 1.4102c2.34-2.34 2.34-6.1405 0-8.4805z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 567 B |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m5 2v2h-2c-.55228 0-1 .44772-1 1v16c0 .55228.44772 1 1 1h10c.55228 0 1-.44772 1-1v-16c0-.55228-.44772-1-1-1h-2v-2zm15.07 2.9297-1.4102 1.4102c3.13 3.12 3.13 8.1903 0 11.32l1.4102 1.4102c3.9-3.9 3.9-10.231 0-14.141zm-16.07 1.0703h8v7h-2v1h2v2h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v-2h2v-2h-2zm2 8h2v-1h-2zm2 0v2h2v-2zm0 2h-2v2h2zm9.2402-8.2402-1.4102 1.4102c1.56 1.56 1.56 4.0902 0 5.6602l1.4102 1.4102c2.34-2.34 2.34-6.1405 0-8.4805z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 582 B |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m5 2v2h-2c-.55228 0-1 .44772-1 1v16c0 .55228.44772 1 1 1h10c.55228 0 1-.44772 1-1v-16c0-.55228-.44772-1-1-1h-2v-2zm15.07 2.9297-1.4102 1.4102c3.13 3.12 3.13 8.1903 0 11.32l1.4102 1.4102c3.9-3.9 3.9-10.231 0-14.141zm-16.07 1.0703h8v6h-2v2h2v2h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v-2h2v-2h-2v-2h2v-.40039h-2zm2 6v2h2v-2zm2 0h2v-.40039h-2zm0 2v2h2v-2zm0 2h-2v2h2zm9.2402-8.2402-1.4102 1.4102c1.56 1.56 1.56 4.0902 0 5.6602l1.4102 1.4102c2.34-2.34 2.34-6.1405 0-8.4805z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 615 B |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m5 2v2h-2c-.55228 0-1 .44772-1 1v16c0 .55228.44772 1 1 1h10c.55228 0 1-.44772 1-1v-16c0-.55228-.44772-1-1-1h-2v-2zm15.07 2.9297-1.4102 1.4102c3.13 3.12 3.13 8.1903 0 11.32l1.4102 1.4102c3.9-3.9 3.9-10.231 0-14.141zm-16.07 1.0703h8v6h-2v2h2v2h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v-2h2v-2h-2v-2h2v-2h-2zm2 6v2h2v-2zm2 0h2v-2h-2zm0 2v2h2v-2zm0 2h-2v2h2zm9.2402-8.2402-1.4102 1.4102c1.56 1.56 1.56 4.0902 0 5.6602l1.4102 1.4102c2.34-2.34 2.34-6.1405 0-8.4805z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 605 B |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m5 2v2h-2c-.55228 0-1 .44772-1 1v16c0 .55228.44772 1 1 1h10c.55228 0 1-.44772 1-1v-16c0-.55228-.44772-1-1-1h-2v-2zm15.07 2.9297-1.4102 1.4102c3.13 3.12 3.13 8.1903 0 11.32l1.4102 1.4102c3.9-3.9 3.9-10.231 0-14.141zm-16.07 1.0703h8v3h-2v1h2v2h-2v2h2v2h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v-2h2v-2h-2v-2h2v-2h-2zm2 4h2v-1h-2zm2 0v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm9.2402-8.2402-1.4102 1.4102c1.56 1.56 1.56 4.0902 0 5.6602l1.4102 1.4102c2.34-2.34 2.34-6.1405 0-8.4805z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 626 B |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m5 2v2h-2c-.55228 0-1 .44772-1 1v16c0 .55228.44772 1 1 1h10c.55228 0 1-.44772 1-1v-16c0-.55228-.44772-1-1-1h-2v-2zm15.07 2.9297-1.4102 1.4102c3.13 3.12 3.13 8.1903 0 11.32l1.4102 1.4102c3.9-3.9 3.9-10.231 0-14.141zm-16.07 1.0703h8v2h-2v2h2v2h-2v2h2v2h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-.5h-2zm2 2v2h2v-2zm2 0h2v-.5h-2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm9.2402-8.2402-1.4102 1.4102c1.56 1.56 1.56 4.0902 0 5.6602l1.4102 1.4102c2.34-2.34 2.34-6.1405 0-8.4805z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 651 B |
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m5 2v2h-2a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-16a1 1 0 0 0-1-1h-2v-2h-6zm15.07 2.9297-1.4102 1.4102c3.13 3.12 3.13 8.1903 0 11.32l1.4102 1.4102c3.9-3.9 3.9-10.231 0-14.141zm-14.07 1.0703h2v2h2v-2h2v2h-2v2h2v2h-2v2h2v2h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2zm0 2v2h2v-2h-2zm2 2v2h2v-2h-2zm0 2h-2v2h2v-2zm0 2v2h2v-2h-2zm0 2h-2v2h2v-2zm9.2402-8.2402-1.4102 1.4102c1.56 1.56 1.56 4.0902 0 5.6602l1.4102 1.4102c2.34-2.34 2.34-6.1405 0-8.4805z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 628 B |
4
icons/battery-burnin/battery-unknown-burnin.svg
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m9 2v2h-1.6699a1.33 1.33 0 0 0-1.3301 1.3301v15.34c0 .73.60008 1.3301 1.3301 1.3301h9.3398a1.33 1.33 0 0 0 1.3301-1.3301v-15.34c0-.73-.60008-1.3301-1.3301-1.3301h-1.6699v-2h-6zm-1 4h8v14h-8v-14zm3.9922 1.6348c-.20776.0001459-.41627.012296-.53906.035156-.40487.075377-.87711.27315-1.1992.50391-.6162.44145-1.052 1.0995-1.2012 1.8145-.036974.17724-.068135.43288-.068359.54883v.076172h.75.75v-.09375c.0014-.40911.27856-.88798.66211-1.1445.27527-.18413.51594-.25465.85547-.25195.42432.00337.77536.15218 1.0664.45312.18687.19323.29535.3781.37695.64648.041091.13522.045052.18127.044922.39648-.00018.27125-.03153.43084-.12695.63476-.09497.20296-.18126.30868-.59375.72852-.74662.75992-.86069.88539-.99219 1.082-.13974.20897-.2684.46308-.34766.68945-.05321.15199-.14258.52203-.14258.58984v.037109h.75977.75781l.009765-.048828c.03414-.15494.12253-.39847.19141-.5332.15368-.3006.29355-.46626 1.0293-1.2148.18393-.18714.36832-.38472.41211-.4375.25761-.31052.44302-.7197.51172-1.1309.04095-.24512.02889-.73384-.02539-.98828-.12115-.568-.37976-1.0577-.77734-1.4727-.45238-.47215-.98198-.76014-1.6328-.88672-.11668-.022692-.32349-.03335-.53125-.033203zm-.75781 8.2637v.75.75h.75.75195v-.75-.75h-.75195-.75z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
55
icons/battery-source/mask-burnin-battery-raw.svg
Normal file
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
id="svg4"
|
||||
sodipodi:docname="mask-burnin-battery-raw.svg"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1018"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="33.379557"
|
||||
inkscape:cx="5.9350871"
|
||||
inkscape:cy="13.348904"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
style="opacity:1;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 6 6 L 6 8 L 8 8 L 8 6 L 6 6 z M 8 8 L 8 10 L 10 10 L 10 8 L 8 8 z M 10 8 L 12 8 L 12 6 L 10 6 L 10 8 z M 10 10 L 10 12 L 12 12 L 12 10 L 10 10 z M 10 12 L 8 12 L 8 14 L 10 14 L 10 12 z M 10 14 L 10 16 L 12 16 L 12 14 L 10 14 z M 10 16 L 8 16 L 8 18 L 10 18 L 10 16 z M 10 18 L 10 20 L 12 20 L 12 18 L 10 18 z M 8 18 L 6 18 L 6 20 L 8 20 L 8 18 z M 6 18 L 6 16 L 4 16 L 4 18 L 6 18 z M 6 16 L 8 16 L 8 14 L 6 14 L 6 16 z M 6 14 L 6 12 L 4 12 L 4 14 L 6 14 z M 6 12 L 8 12 L 8 10 L 6 10 L 6 12 z M 6 10 L 6 8 L 4 8 L 4 10 L 6 10 z "
|
||||
id="rect824-9" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
223
icons/battery-source/mask-burnin-battery.svg
Normal file
|
@ -0,0 +1,223 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
id="svg4"
|
||||
sodipodi:docname="mask-burnin-battery.svg"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1018"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="33.379557"
|
||||
inkscape:cx="5.9350871"
|
||||
inkscape:cy="13.348904"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<g
|
||||
id="g1106"
|
||||
transform="translate(-9.526788,-0.134268)">
|
||||
<g
|
||||
transform="translate(9.526789,4.1342669)"
|
||||
id="g933">
|
||||
<path
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 4,2 H 6 V 4 H 4 Z"
|
||||
id="rect824"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 6,2 H 8 V 4 H 6 Z"
|
||||
id="rect824-9" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 8,2 H 9.9999996 V 4 H 8 Z"
|
||||
id="rect824-2" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 10,2 h 2 v 2 h -2 z"
|
||||
id="rect824-9-1" />
|
||||
</g>
|
||||
<g
|
||||
transform="rotate(180,16.253008,7.0403444)"
|
||||
id="g927">
|
||||
<path
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 10.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 12.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-9-8" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 14.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-2-0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 16.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-9-1-8" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(9.526789,8.1342669)"
|
||||
id="g933-9">
|
||||
<path
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 4,2 H 6 V 4 H 4 Z"
|
||||
id="rect824-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 6,2 H 8 V 4 H 6 Z"
|
||||
id="rect824-9-18" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 8,2 H 9.9999996 V 4 H 8 Z"
|
||||
id="rect824-2-8" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 10,2 h 2 v 2 h -2 z"
|
||||
id="rect824-9-1-0" />
|
||||
</g>
|
||||
<g
|
||||
transform="rotate(180,16.253008,9.0403445)"
|
||||
id="g927-9">
|
||||
<path
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 10.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-8-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 12.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-9-8-6" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 14.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-2-0-8" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 16.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-9-1-8-4" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(9.526789,12.134267)"
|
||||
id="g933-1">
|
||||
<path
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 4,2 H 6 V 4 H 4 Z"
|
||||
id="rect824-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 6,2 H 8 V 4 H 6 Z"
|
||||
id="rect824-9-16" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 8,2 H 9.9999996 V 4 H 8 Z"
|
||||
id="rect824-2-83" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 10,2 h 2 v 2 h -2 z"
|
||||
id="rect824-9-1-1" />
|
||||
</g>
|
||||
<g
|
||||
transform="rotate(180,16.253008,11.040345)"
|
||||
id="g927-4">
|
||||
<path
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 10.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-8-4"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 12.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-9-8-1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 14.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-2-0-0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 16.979228,3.946422 h 2 v 2 h -2 z"
|
||||
id="rect824-9-1-8-8" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(9.526788,16.134268)"
|
||||
id="g933-0">
|
||||
<path
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 4,2 H 6 V 4 H 4 Z"
|
||||
id="rect824-63"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 6,2 H 8 V 4 H 6 Z"
|
||||
id="rect824-9-85" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="M 8,2 H 9.9999996 V 4 H 8 Z"
|
||||
id="rect824-2-87" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:1;fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.99737531;paint-order:markers stroke fill"
|
||||
d="m 10,2 h 2 v 2 h -2 z"
|
||||
id="rect824-9-1-7" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 13 KiB |
1
icons/battery/battery-charging-wireless-10.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,18.5H4V6H12V18.5Z" /></svg>
|
After Width: | Height: | Size: 606 B |
1
icons/battery/battery-charging-wireless-20.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,17H4V6H12V17Z" /></svg>
|
After Width: | Height: | Size: 602 B |
1
icons/battery/battery-charging-wireless-30.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,16H4V6H12V16Z" /></svg>
|
After Width: | Height: | Size: 602 B |
1
icons/battery/battery-charging-wireless-40.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,14.5H4V6H12V14.5Z" /></svg>
|
After Width: | Height: | Size: 606 B |
1
icons/battery/battery-charging-wireless-50.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,13H4V6H12V13Z" /></svg>
|
After Width: | Height: | Size: 602 B |
1
icons/battery/battery-charging-wireless-60.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,11.6H4V6H12V11.6Z" /></svg>
|
After Width: | Height: | Size: 606 B |
1
icons/battery/battery-charging-wireless-70.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,10H4V6H12V10Z" /></svg>
|
After Width: | Height: | Size: 602 B |
1
icons/battery/battery-charging-wireless-80.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,9H4V6H12V9Z" /></svg>
|
After Width: | Height: | Size: 600 B |
1
icons/battery/battery-charging-wireless-90.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,7.5H4V6H12V7.5Z" /></svg>
|
After Width: | Height: | Size: 604 B |
1
icons/battery/battery-charging-wireless.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76Z" /></svg>
|
After Width: | Height: | Size: 586 B |
1
icons/battery/battery-outline.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M16,20H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z" /></svg>
|
After Width: | Height: | Size: 440 B |
1
icons/battery/battery-unknown.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M15.07,12.25L14.17,13.17C13.63,13.71 13.25,14.18 13.09,15H11.05C11.16,14.1 11.56,13.28 12.17,12.67L13.41,11.41C13.78,11.05 14,10.55 14,10C14,8.89 13.1,8 12,8A2,2 0 0,0 10,10H8A4,4 0 0,1 12,6A4,4 0 0,1 16,10C16,10.88 15.64,11.68 15.07,12.25M13,19H11V17H13M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.66C6,21.4 6.6,22 7.33,22H16.67C17.4,22 18,21.4 18,20.66V5.33C18,4.59 17.4,4 16.67,4Z" /></svg>
|
After Width: | Height: | Size: 682 B |
93
icons/complications-source/ic_br_cob_iob_orig.svg
Normal file
|
@ -0,0 +1,93 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
version="1.1"
|
||||
id="svg6582"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||
sodipodi:docname="ic_br_cob_iob_orig.svg">
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="20.48"
|
||||
inkscape:cx="21.368628"
|
||||
inkscape:cy="7.6899364"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true">
|
||||
<sodipodi:guide
|
||||
position="7.0150757,3.6431885"
|
||||
orientation="0,1"
|
||||
id="guide7239"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="6.110738,1.9637045"
|
||||
orientation="0,1"
|
||||
id="guide4515"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-290.64998)">
|
||||
<path
|
||||
style="fill:#000000;stroke-width:0.99999988"
|
||||
d="m 0.03622667,296.52928 c -0.05573246,-0.0616 -0.05418386,-0.0663 0.0545402,-0.1676 0.0615457,-0.0574 0.11915314,-0.12579 0.12801621,-0.15212 0.008863,-0.0264 -0.0358645,-0.14128 -0.0993956,-0.25541 -0.11006156,-0.19773 -0.11551067,-0.22183 -0.11551067,-0.51082 0,-0.27606 0.0084459,-0.31854 0.09406667,-0.47311 0.11396967,-0.20573 0.29667962,-0.37806 0.34723811,-0.32749 0.0650151,0.065 0.10430015,0.034 0.18887001,-0.14919 0.13241088,-0.28679 0.24662218,-0.40499 0.3924149,-0.40611 0.1141555,-8.6e-4 0.1239478,-0.009 0.1669233,-0.13767 0.025367,-0.0759 0.1153545,-0.21076 0.2025129,-0.3033 l 0.1568592,-0.16657 0.1259147,0.14214 c 0.069253,0.0782 0.1514296,0.18951 0.1826144,0.24742 0.031184,0.0579 0.074962,0.10528 0.097285,0.10528 0.022322,0 0.1232137,-0.0641 0.2242032,-0.1424 0.2551499,-0.19787 0.4707024,-0.26368 0.8024812,-0.24499 0.073924,0.003 0.075677,0.0105 0.060668,0.2203 -0.018902,0.2642 -0.1054117,0.46835 -0.2776124,0.65516 -0.071801,0.0779 -0.1305487,0.15755 -0.1305487,0.177 0,0.0194 0.075424,0.0848 0.1676113,0.14531 0.092186,0.0605 0.2081383,0.1437 0.2576717,0.18495 l 0.090061,0.075 -0.1219865,0.1237 c -0.067093,0.0681 -0.2010031,0.16002 -0.2975793,0.2044 -0.199175,0.0915 -0.2308085,0.12454 -0.1908675,0.19916 0.036351,0.068 -0.1489458,0.25209 -0.3518735,0.34972 -0.2420168,0.11644 -0.2399953,0.11454 -0.2300318,0.21521 0.00753,0.076 -0.014618,0.1162 -0.1102841,0.2002 -0.065833,0.0578 -0.1972437,0.14059 -0.2920236,0.18399 -0.1511967,0.0692 -0.2052261,0.0771 -0.4406271,0.0648 -0.23174967,-0.0122 -0.29885754,-0.0301 -0.49261315,-0.13125 l -0.22431318,-0.11718 -0.13823523,0.12743 c -0.0760293,0.0701 -0.14517698,0.12742 -0.15366134,0.12742 -0.008483,0 -0.0412387,-0.0284 -0.0727873,-0.0634 z m 1.47652803,-0.19404 c 0.074834,-0.0322 0.1454948,-0.0831 0.157023,-0.1132 0.05126,-0.13358 -0.38361,-0.32453 -0.6545159,-0.2874 -0.18637946,0.0257 -0.42075507,0.16129 -0.42075507,0.24369 0,0.12311 0.41715077,0.267 0.67044497,0.23125 0.061457,-0.009 0.1729686,-0.0421 0.247803,-0.0743 z m -0.95860832,-0.48265 c 0.0758147,-0.11469 0.0881196,-0.16528 0.0873291,-0.35916 -0.001169,-0.28626 -0.11548526,-0.54494 -0.24081925,-0.54494 -0.17348331,0 -0.28704584,0.48479 -0.18397596,0.7854 0.0980628,0.28599 0.20256607,0.32275 0.33746611,0.1187 z m 1.38140422,-0.0292 c 0.1856471,-0.0398 0.339672,-0.15275 0.3108314,-0.22791 -0.036872,-0.0961 -0.3571185,-0.22243 -0.5638097,-0.22243 -0.2049092,0 -0.4262288,0.0935 -0.4945342,0.2089 -0.041951,0.071 0.034352,0.1341 0.2645597,0.21918 0.1753201,0.0648 0.2652676,0.0689 0.4829528,0.0223 z m -0.8639771,-0.44935 c 0.1737466,-0.1865 0.2053776,-0.55083 0.070735,-0.81476 -0.1284641,-0.25181 -0.21204859,-0.2578 -0.32554745,-0.0234 -0.12087975,0.2497 -0.0886573,0.57245 0.0834178,0.83551 0.0586103,0.0896 0.0898824,0.0901 0.17139505,0.003 z m 1.5901381,-0.16903 c 0.176478,-0.0822 0.2038657,-0.13507 0.1117407,-0.21585 -0.2457795,-0.21549 -0.6736019,-0.23825 -0.9418152,-0.0501 -0.1378586,0.0967 -0.1129176,0.16431 0.095778,0.25956 0.2460525,0.11232 0.5019589,0.11452 0.7342967,0.006 z m -0.9395138,-0.52788 c 0.074142,-0.14449 0.087995,-0.20668 0.078224,-0.35117 -0.012903,-0.19079 -0.13139,-0.46543 -0.2216396,-0.51373 -0.078974,-0.0422 -0.1770734,0.0737 -0.237132,0.28028 -0.056866,0.19561 -0.026219,0.43452 0.083271,0.64914 0.094132,0.18452 0.1789426,0.16611 0.2972777,-0.0645 z m 0.6441989,-0.15798 c 0.1891937,-0.0821 0.3202273,-0.20649 0.4125549,-0.39177 0.1512249,-0.30347 0.097564,-0.40563 -0.1711463,-0.32584 -0.2829441,0.0841 -0.5846126,0.43186 -0.5846126,0.67407 0,0.14794 0.079282,0.158 0.343204,0.0435 z"
|
||||
id="path7219"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="layer1-1"
|
||||
transform="matrix(0.58700842,0,0,0.58700842,1.7392457,119.14951)"
|
||||
style="fill:#000000;stroke-width:1.70355296">
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.90146357;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="M 0.62430507,292.16017 V 295.604 H -1.4578422 v 0.65081 h 2.7329683 v -3.44383 h 1.0710931 v 1.66668 h 1.6138442 v 1.77715 H 6.3496096 V 295.604 h -1.738725 v -1.77475 H 2.9970403 v -1.66908 z"
|
||||
id="path6563"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;stroke-width:1"
|
||||
d="m 2.7360592,296.16852 c 0.035985,-0.0266 0.079014,-0.0464 0.095561,-0.0439 0.028453,0.004 0.1012562,0.0628 0.1998654,0.16077 0.042618,0.0422 0.050276,0.0379 0.2271026,-0.13015 0.1006543,-0.0957 0.1837529,-0.17894 0.1846679,-0.18509 7.368e-4,-0.005 -0.080243,-0.0992 -0.1803661,-0.20667 -0.1001149,-0.10752 -0.1858963,-0.21293 -0.1906298,-0.23422 -0.01591,-0.0715 0.00672,-0.14361 0.055248,-0.17596 0.052777,-0.0351 0.1863359,-0.0256 0.2035889,0.0146 0.00599,0.0138 0.028459,0.0383 0.049986,0.0543 0.034199,0.0255 0.1469599,-0.0773 0.8921084,-0.81307 0.4959648,-0.48972 0.8786622,-0.84956 0.9143988,-0.85984 0.057272,-0.0164 0.1193571,-0.006 0.4656563,0.0774 l 0.1179261,0.0284 0.2688188,-0.25067 c 0.4071733,-0.37969 0.4103449,-0.37495 0.026669,0.0399 l -0.2462072,0.26615 0.042598,0.25476 c 0.023426,0.14012 0.037869,0.28652 0.032094,0.3253 -0.00841,0.0565 -0.1829859,0.24089 -0.871827,0.92127 l -0.8613178,0.85072 0.056621,0.0699 c 0.080472,0.0992 0.086441,0.16909 0.02003,0.23528 -0.099061,0.0988 -0.169502,0.0709 -0.3691134,-0.14606 -0.097862,-0.10638 -0.1875382,-0.19485 -0.1992942,-0.1966 -0.01811,-0.003 -0.2766334,0.23868 -0.346337,0.3234 -0.014924,0.0182 0.00872,0.0666 0.069195,0.14254 0.1016878,0.12757 0.1059961,0.18332 0.020346,0.26412 -0.09641,0.0909 -0.1470079,0.0616 -0.4406566,-0.25571 -0.1491273,-0.16113 -0.2817818,-0.31113 -0.2947946,-0.33331 -0.037247,-0.0635 -0.013228,-0.14534 0.058107,-0.19819 z m 1.2661739,-0.0595 c 0.00508,7.5e-4 0.024809,0.009 0.042796,0.0201 0.02401,0.0137 0.2623398,-0.20766 0.8700641,-0.80776 0.4603218,-0.45456 0.839611,-0.84429 0.8428512,-0.86604 0.00323,-0.0217 -0.00965,-0.1319 -0.028692,-0.24474 -0.040702,-0.24158 -0.049455,-0.24932 -0.328551,-0.29089 -0.1607045,-0.0239 -0.2000044,-0.0227 -0.2397059,0.0103 -0.026037,0.0213 -0.043089,0.049 -0.037808,0.0615 0.00526,0.0126 0.079361,0.0959 0.1645424,0.18593 0.1467729,0.15491 0.1751347,0.20713 0.124336,0.22895 -0.012216,0.005 -0.096829,-0.0721 -0.1880173,-0.17197 -0.1747009,-0.19129 -0.1974008,-0.19898 -0.2757157,-0.0937 -0.024291,0.0327 -0.00304,0.0658 0.1358708,0.21208 0.090572,0.0953 0.1627979,0.18582 0.1605287,0.20105 -0.00998,0.067 -0.060365,0.0359 -0.2143205,-0.1314 -0.090441,-0.0983 -0.1694681,-0.1795 -0.175613,-0.18042 -0.00636,-9.4e-4 -0.037769,0.0259 -0.070354,0.0598 l -0.059172,0.0615 0.1595191,0.17024 c 0.087744,0.0935 0.1607166,0.18409 0.1621791,0.201 0.00675,0.0776 -0.058967,0.0374 -0.2140684,-0.13126 l -0.1681788,-0.18284 -0.051111,0.0492 c -0.028143,0.0272 -0.052465,0.057 -0.054123,0.0659 -0.00176,0.01 0.095906,0.12352 0.2167832,0.25426 0.1208911,0.13069 0.2213029,0.24481 0.2231458,0.25359 0.002,0.008 -0.2203961,0.23363 -0.4938623,0.49971 -0.4231911,0.41178 -0.5536869,0.55846 -0.5034353,0.56594 z"
|
||||
id="path825"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
83
icons/complications-source/ic_cob_detailed_orig.svg
Normal file
|
@ -0,0 +1,83 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
version="1.1"
|
||||
id="svg6582"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||
sodipodi:docname="ic_cob_detailed_orig.svg">
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="10.24"
|
||||
inkscape:cx="15.646632"
|
||||
inkscape:cy="-12.499983"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true">
|
||||
<sodipodi:guide
|
||||
position="5.3485108,-2.2479248"
|
||||
orientation="0,1"
|
||||
id="guide7239"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4930827,-2.2479248"
|
||||
orientation="0,1"
|
||||
id="guide4515"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-290.64998)">
|
||||
<path
|
||||
style="fill:#000000;stroke-width:0.99999994"
|
||||
d="m 0.05089598,294.93416 c -0.07830027,-0.0866 -0.07612459,-0.0931 0.07662521,-0.23546 0.0864674,-0.0807 0.16740192,-0.17673 0.17985392,-0.21372 0.0124519,-0.0371 -0.0503872,-0.19849 -0.13964395,-0.35883 -0.15462889,-0.27779 -0.1622845,-0.31166 -0.1622845,-0.71767 0,-0.38785 0.01186591,-0.44752 0.13215717,-0.66469 0.16011951,-0.28904 0.41681436,-0.53114 0.48784554,-0.4601 0.0913417,0.0914 0.1465345,0.0477 0.26534931,-0.2096 0.18602812,-0.40291 0.34648712,-0.56898 0.55131572,-0.57056 0.1603807,-0.001 0.1741382,-0.0125 0.2345157,-0.1934 0.035639,-0.10668 0.1620652,-0.29611 0.2845168,-0.42613 l 0.2203763,-0.23402 0.1769015,0.1997 c 0.097295,0.10979 0.212748,0.26624 0.2565605,0.34761 0.043811,0.0814 0.1053167,0.14791 0.1366786,0.14791 0.031361,0 0.1731067,-0.09 0.3149901,-0.20006 0.358468,-0.278 0.6613044,-0.37046 1.1274306,-0.34419 0.1038581,0.004 0.1063214,0.0148 0.085235,0.3095 -0.026556,0.37118 -0.1480962,0.65799 -0.3900263,0.92046 -0.1008754,0.10945 -0.1834119,0.22134 -0.1834119,0.24866 0,0.0273 0.1059661,0.11915 0.2354823,0.20416 0.1295149,0.085 0.2924199,0.20189 0.362011,0.25984 l 0.1265294,0.10535 -0.1713826,0.17378 c -0.094261,0.0957 -0.2823955,0.22482 -0.4180783,0.28717 -0.2798272,0.12855 -0.3242699,0.17497 -0.2681556,0.27981 0.051071,0.0956 -0.2092585,0.35418 -0.4943581,0.49132 -0.3400167,0.16361 -0.3371767,0.16094 -0.3231787,0.30237 0.010579,0.10678 -0.020536,0.16325 -0.1549416,0.28125 -0.092491,0.0813 -0.2771137,0.19753 -0.4102729,0.25852 -0.2124209,0.0972 -0.2883285,0.10823 -0.6190505,0.091 -0.3255924,-0.0172 -0.4198742,-0.0423 -0.69208754,-0.18441 l -0.31514452,-0.16462 -0.19421093,0.17903 c -0.1068159,0.0985 -0.20396363,0.17902 -0.21588358,0.17902 -0.011918,0 -0.05793753,-0.0399 -0.10226112,-0.0891 z m 2.07441972,-0.27261 c 0.1051369,-0.0453 0.2044102,-0.11674 0.2206066,-0.15904 0.072017,-0.18766 -0.5389456,-0.45594 -0.9195496,-0.40378 -0.2618503,0.0361 -0.59113182,0.2266 -0.59113182,0.34238 0,0.17295 0.58606802,0.37512 0.94192882,0.3249 0.086342,-0.0127 0.2430089,-0.0592 0.348146,-0.10435 z m -1.34677832,-0.6781 c 0.1065144,-0.16113 0.12380194,-0.2322 0.12269135,-0.50459 -0.001642,-0.40217 -0.16224881,-0.76561 -0.3383344,-0.76561 -0.24373207,0 -0.40327958,0.68111 -0.25847353,1.10345 0.13777147,0.4018 0.28459134,0.45344 0.47411658,0.16675 z m 1.94077752,-0.0411 c 0.2608212,-0.0559 0.4772157,-0.2146 0.4366965,-0.3202 -0.051801,-0.13501 -0.5017268,-0.3125 -0.7921136,-0.3125 -0.2878833,0 -0.598822,0.13137 -0.6947864,0.29349 -0.058938,0.0998 0.048262,0.18841 0.3716881,0.30794 0.2463126,0.091 0.3726826,0.0968 0.6785154,0.0313 z m -1.2138282,-0.6313 c 0.244102,-0.26202 0.2885414,-0.77388 0.099378,-1.14469 -0.1804831,-0.35378 -0.2979135,-0.36219 -0.4573717,-0.033 -0.16982766,0.35082 -0.1245573,0.80425 0.1171964,1.17383 0.082343,0.12588 0.1262785,0.12658 0.2407982,0.004 z m 2.2340342,-0.23749 c 0.2479394,-0.11543 0.2864171,-0.18975 0.1569879,-0.30324 -0.3453032,-0.30275 -0.9463641,-0.33474 -1.3231853,-0.0704 -0.1936818,0.13585 -0.1586414,0.23084 0.1345615,0.36465 0.3456868,0.15781 0.7052176,0.1609 1.0316361,0.008 z m -1.319952,-0.74162 c 0.1041645,-0.203 0.1236269,-0.29037 0.1098991,-0.49337 -0.018127,-0.26805 -0.1845938,-0.6539 -0.3113883,-0.72176 -0.1109526,-0.0593 -0.248776,0.10357 -0.3331541,0.39378 -0.079893,0.27482 -0.036837,0.61047 0.1169895,0.912 0.1322489,0.25923 0.251402,0.23337 0.4176547,-0.0907 z m 0.9050549,-0.22195 c 0.2658041,-0.11532 0.4498971,-0.29011 0.5796111,-0.55042 0.2124605,-0.42634 0.1370707,-0.56987 -0.2404487,-0.45778 -0.397517,0.11816 -0.8213403,0.60673 -0.8213403,0.94702 0,0.20785 0.1113854,0.22198 0.4821779,0.0612 z"
|
||||
id="path7219"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.42386249;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 2.9588068,295.12302 a 0.21218709,0.21218709 0 0 0 0.021187,0.42374 h 1.861385 a 0.21195244,0.21195244 0 1 0 0,-0.42374 h -1.861385 a 0.21195244,0.21195244 0 0 0 -0.021187,0 z m 2.4784015,0 a 0.21218709,0.21218709 0 0 0 0.021187,0.42374 H 6.132256 a 0.21195244,0.21195244 0 1 0 0,-0.42374 H 5.4583956 a 0.21195244,0.21195244 0 0 0 -0.021187,0 z m -2.4784015,0.72657 a 0.21218709,0.21218709 0 0 0 0.021187,0.42374 h 0.8030516 a 0.21195244,0.21195244 0 1 0 0,-0.42374 H 2.9799941 a 0.21195244,0.21195244 0 0 0 -0.021187,0 z m 1.4273029,0 a 0.21218709,0.21218709 0 0 0 0.021704,0.42374 h 1.7244425 a 0.21195244,0.21195244 0 1 0 0,-0.42374 H 4.4078138 a 0.21195244,0.21195244 0 0 0 -0.021704,0 z m -1.4273029,0.72657 a 0.21218709,0.21218709 0 0 0 0.021187,0.42374 H 6.132256 a 0.21195244,0.21195244 0 1 0 0,-0.42374 H 2.9799941 a 0.21195244,0.21195244 0 0 0 -0.021187,0 z"
|
||||
id="path819-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.9 KiB |
83
icons/complications-source/ic_cob_iob_orig.svg
Normal file
|
@ -0,0 +1,83 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
version="1.1"
|
||||
id="svg6582"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||
sodipodi:docname="ic_cob_iob_orig.svg">
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="20.48"
|
||||
inkscape:cx="11.749487"
|
||||
inkscape:cy="7.6899364"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true">
|
||||
<sodipodi:guide
|
||||
position="5.3485108,-2.2479248"
|
||||
orientation="0,1"
|
||||
id="guide7239"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4930827,-2.2479248"
|
||||
orientation="0,1"
|
||||
id="guide4515"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-290.64998)">
|
||||
<path
|
||||
style="fill:#000000;stroke-width:0.99999988"
|
||||
d="m 0.04584936,294.50936 c -0.07053636,-0.078 -0.06857641,-0.0839 0.06902739,-0.21211 0.0778937,-0.0727 0.15080309,-0.15921 0.1620204,-0.19253 0.0112172,-0.0334 -0.045391,-0.17881 -0.12579747,-0.32325 -0.13929657,-0.25025 -0.14619309,-0.28076 -0.14619309,-0.64651 0,-0.34939 0.01068934,-0.40315 0.11905305,-0.59878 0.14424277,-0.26038 0.37548489,-0.47848 0.43947293,-0.41448 0.0822847,0.0823 0.13200479,0.043 0.23903845,-0.18882 0.16758237,-0.36296 0.31213098,-0.51256 0.49664968,-0.51398 0.1444781,-0.001 0.1568714,-0.0113 0.2112622,-0.17423 0.032105,-0.0961 0.1459955,-0.26675 0.2563053,-0.38387 l 0.1985248,-0.21082 0.1593607,0.1799 c 0.087648,0.0989 0.1916529,0.23984 0.2311211,0.31314 0.039467,0.0733 0.094874,0.13325 0.1231262,0.13325 0.028251,0 0.1559422,-0.0811 0.283757,-0.18023 0.3229239,-0.25043 0.5957324,-0.33372 1.0156396,-0.31006 0.09356,0.004 0.095779,0.0133 0.076783,0.27881 -0.023923,0.33438 -0.1334116,0.59275 -0.351353,0.82919 -0.090873,0.0986 -0.1652256,0.1994 -0.1652256,0.22401 0,0.0246 0.095459,0.10733 0.2121329,0.18391 0.1166728,0.0766 0.2634249,0.18188 0.3261156,0.23408 l 0.1139833,0.0949 -0.154389,0.15655 c -0.084915,0.0862 -0.2543944,0.20253 -0.3766235,0.2587 -0.2520808,0.1158 -0.2921168,0.15762 -0.2415665,0.25206 0.046007,0.0861 -0.1885094,0.31906 -0.4453397,0.44261 -0.3063022,0.14738 -0.3037438,0.14498 -0.2911338,0.27238 0.00953,0.0962 -0.0185,0.14707 -0.1395782,0.25337 -0.08332,0.0732 -0.2496364,0.17794 -0.3695921,0.23288 -0.1913582,0.0876 -0.2597391,0.0975 -0.5576682,0.082 -0.2933081,-0.0155 -0.3782413,-0.0381 -0.62346317,-0.16613 l -0.28389618,-0.14829 -0.17495384,0.16127 c -0.0962245,0.0887 -0.18373949,0.16127 -0.19447751,0.16127 -0.0107363,0 -0.0521927,-0.0359 -0.09212136,-0.0803 z m 1.86872944,-0.24558 c 0.094712,-0.0408 0.1841418,-0.10516 0.1987322,-0.14327 0.064876,-0.16905 -0.4855061,-0.41073 -0.8283711,-0.36374 -0.2358864,0.0325 -0.53251782,0.20413 -0.53251782,0.30843 0,0.1558 0.52795612,0.33792 0.84853132,0.29268 0.077781,-0.0114 0.2189132,-0.0533 0.3136254,-0.094 z m -1.21323775,-0.61086 c 0.0959529,-0.14515 0.11152629,-0.20918 0.11052582,-0.45456 -0.001479,-0.36229 -0.14616094,-0.68969 -0.30478666,-0.68969 -0.21956467,0 -0.36329215,0.61357 -0.23284443,0.99403 0.12411066,0.36196 0.25637252,0.40848 0.42710527,0.15022 z m 1.74833855,-0.037 c 0.2349594,-0.0504 0.4298971,-0.19332 0.3933956,-0.28845 -0.046665,-0.12162 -0.4519777,-0.28151 -0.7135711,-0.28151 -0.259338,0 -0.5394454,0.11834 -0.6258944,0.26439 -0.053094,0.0899 0.043477,0.16972 0.3348331,0.2774 0.2218894,0.082 0.3357291,0.0872 0.6112368,0.0282 z m -1.0934703,-0.5687 c 0.2198979,-0.23604 0.2599309,-0.69715 0.089524,-1.03119 -0.1625872,-0.3187 -0.2683737,-0.32628 -0.4120207,-0.0297 -0.15298833,0.31603 -0.11220682,0.7245 0.1055757,1.05744 0.074178,0.1134 0.1137573,0.11403 0.2169217,0.004 z m 2.0125172,-0.21394 c 0.2233548,-0.10399 0.2580173,-0.17094 0.1414217,-0.27318 -0.3110645,-0.27273 -0.8525268,-0.30154 -1.1919841,-0.0634 -0.1744772,0.12238 -0.1429112,0.20795 0.121219,0.3285 0.31141,0.14216 0.6352913,0.14494 0.9293436,0.007 z m -1.1890714,-0.66809 c 0.093836,-0.18287 0.1113686,-0.26158 0.099002,-0.44445 -0.01633,-0.24147 -0.1662903,-0.58906 -0.2805124,-0.65019 -0.099951,-0.0534 -0.2241085,0.0933 -0.30012,0.35473 -0.071971,0.24757 -0.033184,0.54994 0.1053893,0.82157 0.1191357,0.23353 0.2264741,0.21023 0.3762419,-0.0817 z m 0.8153137,-0.19994 c 0.2394481,-0.10389 0.4052873,-0.26134 0.5221394,-0.49584 0.1913939,-0.38407 0.1234794,-0.51337 -0.2166069,-0.41239 -0.3581009,0.10644 -0.7398998,0.54657 -0.7398998,0.85312 0,0.18724 0.1003409,0.19997 0.4343673,0.0551 z"
|
||||
id="path7219"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#000000;stroke-width:1"
|
||||
d="m 1.7447878,295.94036 c 0.045855,-0.0339 0.1006869,-0.0591 0.1217726,-0.0559 0.036257,0.005 0.1290298,0.08 0.2546866,0.20487 0.054308,0.0538 0.064066,0.0483 0.2893948,-0.16585 0.1282628,-0.12195 0.2341546,-0.22802 0.2353206,-0.23586 9.389e-4,-0.006 -0.1022529,-0.12641 -0.2298389,-0.26336 -0.1275755,-0.13701 -0.2368859,-0.27133 -0.2429178,-0.29846 -0.020274,-0.0911 0.00856,-0.183 0.070402,-0.22423 0.067253,-0.0447 0.2374462,-0.0326 0.2594315,0.0186 0.00763,0.0176 0.036265,0.0488 0.063697,0.0692 0.043579,0.0325 0.1872697,-0.0985 1.1368056,-1.03609 0.6320035,-0.62404 1.1196713,-1.08258 1.1652101,-1.09568 0.072981,-0.0209 0.1520957,-0.008 0.5933816,0.0986 l 0.1502722,0.0362 0.3425533,-0.31943 c 0.5188572,-0.48383 0.5228988,-0.47779 0.033984,0.0509 l -0.3137396,0.33915 0.054282,0.32464 c 0.029852,0.17855 0.048256,0.36511 0.040897,0.41452 -0.010717,0.072 -0.2331773,0.30697 -1.1109612,1.17397 l -1.0975694,1.08406 0.072152,0.0891 c 0.1025447,0.12641 0.110151,0.21547 0.025524,0.29981 -0.1262325,0.1259 -0.2159948,0.0904 -0.4703578,-0.18612 -0.1247047,-0.13556 -0.2389782,-0.2483 -0.2539588,-0.25053 -0.023077,-0.004 -0.3525114,0.30415 -0.4413341,0.41211 -0.019017,0.0232 0.011112,0.0849 0.088175,0.18164 0.1295798,0.16256 0.1350698,0.2336 0.025927,0.33656 -0.1228544,0.11584 -0.1873308,0.0785 -0.5615247,-0.32585 -0.1900316,-0.20532 -0.359072,-0.39647 -0.3756541,-0.42473 -0.047464,-0.0809 -0.016856,-0.18521 0.074045,-0.25255 z m 1.6134739,-0.0758 c 0.00647,9.6e-4 0.031614,0.0115 0.054535,0.0256 0.030596,0.0175 0.3342972,-0.26462 1.1087147,-1.02932 0.5865839,-0.57924 1.0699087,-1.07587 1.0740377,-1.10358 0.00412,-0.0277 -0.012297,-0.16808 -0.036562,-0.31187 -0.051866,-0.30785 -0.06302,-0.31771 -0.4186696,-0.37068 -0.2047842,-0.0305 -0.2548637,-0.0289 -0.305455,0.0131 -0.033179,0.0271 -0.054908,0.0624 -0.048178,0.0784 0.0067,0.0161 0.101129,0.12221 0.2096749,0.23693 0.1870314,0.1974 0.2231725,0.26394 0.1584402,0.29175 -0.015567,0.006 -0.1233883,-0.0919 -0.2395887,-0.21914 -0.2226198,-0.24376 -0.2515461,-0.25356 -0.351342,-0.1194 -0.030954,0.0417 -0.00387,0.0838 0.1731389,0.27025 0.1154151,0.12144 0.2074519,0.23679 0.2045603,0.2562 -0.012717,0.0854 -0.076923,0.0457 -0.2731067,-0.16745 -0.1152481,-0.12526 -0.2159517,-0.22873 -0.223782,-0.2299 -0.0081,-0.001 -0.048129,0.033 -0.089651,0.0762 l -0.075402,0.0784 0.2032737,0.21693 c 0.1118114,0.11915 0.2047997,0.23459 0.2066633,0.25614 0.0086,0.0989 -0.075141,0.0476 -0.2727854,-0.16727 l -0.2143087,-0.23299 -0.06513,0.0627 c -0.035862,0.0347 -0.066856,0.0726 -0.068968,0.084 -0.00224,0.0127 0.1222121,0.1574 0.2762448,0.324 0.1540505,0.16654 0.2820043,0.31196 0.2843527,0.32315 0.00255,0.0102 -0.2808487,0.29771 -0.6293242,0.63678 -0.5392686,0.52472 -0.7055582,0.71164 -0.641523,0.72117 z"
|
||||
id="path825"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.5 KiB |
57
icons/complications-source/ic_ins_burnin_orig.svg
Normal file
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg6582"
|
||||
version="1.1"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
height="24"
|
||||
width="24"
|
||||
sodipodi:docname="ic_ins_burnin_orig.svg"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
id="namedview7"
|
||||
showgrid="false"
|
||||
inkscape:zoom="9.8333334"
|
||||
inkscape:cx="-16.577819"
|
||||
inkscape:cy="-13.406881"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6582" />
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
style="fill:#000000;stroke-width:1"
|
||||
d="m 5.2032286,5.5871636 c -0.04934,-0.04934 -0.08964,-0.111011 -0.08957,-0.137051 1.52e-4,-0.04479 0.07357,-0.17029 0.201637,-0.344565 0.05534,-0.07532 0.04685,-0.08608 -0.252444,-0.319785 -0.170344,-0.133015 -0.317626,-0.241845 -0.327294,-0.241845 -0.0097,0 -0.134233,0.146285 -0.276812,0.325077 -0.14258,0.178792 -0.285173,0.33503 -0.316874,0.347195 -0.106583,0.0409 -0.222631,0.0226 -0.28355,-0.04472 -0.06622,-0.07318 -0.08206,-0.280988 -0.02413,-0.316785 0.01999,-0.01236 0.05248,-0.05261 0.0722,-0.08944 0.03132,-0.05851 -0.152744,-0.208523 -1.45636,-1.186943 -0.867679,-0.65123 -1.50947501,-1.157865 -1.53346701,-1.210523 -0.03847,-0.08443 -0.03669,-0.182385 0.01334,-0.734653 l 0.01703,-0.188057 -0.447569,-0.356365 c -0.677916,-0.53977105 -0.671352,-0.54573805 0.05517,-0.05015 l 0.46618901,0.318004 0.382456,-0.124018 c 0.210351,-0.06821 0.432408,-0.124018 0.49346,-0.124018 0.08878,0 0.412826,0.226458 1.618266,1.1309 l 1.507261,1.1309 0.09444,-0.1032 c 0.13419,-0.146644 0.240524,-0.171859 0.357656,-0.08481 0.174744,0.129864 0.147971,0.244692 -0.140308,0.601765 -0.141329,0.175055 -0.256962,0.333412 -0.256962,0.351903 0,0.02852 0.430933,0.371143 0.577336,0.459025 0.03126,0.01877 0.100589,-0.02865 0.203562,-0.139225 0.173028,-0.185803 0.257926,-0.205222 0.401944,-0.09194 0.162187,0.127576 0.128598,0.212191 -0.292577,0.737056 -0.21388,0.266535 -0.414377,0.505167 -0.445547,0.530293 -0.08919,0.07189 -0.220737,0.05371 -0.318466,-0.04402 z m -0.38208,-1.935654 c 0,-0.0084 0.0095,-0.04015 0.0212,-0.07054 0.0154,-0.04012 -0.379863,-0.35625 -1.443129,-1.154214 -0.805383,-0.604426 -1.492346,-1.098957 -1.526584,-1.098957 -0.03424,0 -0.200846,0.04514 -0.37024,0.100301 -0.362556,0.118072 -0.37248,0.133324 -0.37248,0.57253 0,0.252909 0.01163,0.313126 0.07079,0.36667 0.03893,0.03524 0.08535,0.05506 0.103151,0.04406 0.0178,-0.011 0.12963,-0.144179 0.248515,-0.295954 0.204828,-0.261494 0.278719,-0.31713 0.323961,-0.243927 0.01089,0.01762 -0.08884,0.165617 -0.221625,0.328891 -0.254408,0.312833 -0.261065,0.349543 -0.08088,0.445977 0.05584,0.02989 0.101998,-0.01041 0.295319,-0.257823 0.126023,-0.161285 0.248747,-0.293246 0.27272,-0.293246 0.1052,0 0.06917,0.08472 -0.153163,0.360085 -0.130623,0.161786 -0.237497,0.30207 -0.237497,0.311742 0,0.0097 0.04864,0.05222 0.108097,0.09456 l 0.108096,0.07697 0.225527,-0.284627 c 0.12404,-0.156545 0.246547,-0.28965 0.272238,-0.295788 0.118009,-0.0282 0.07105,0.08224 -0.152949,0.359672 l -0.242907,0.300856 2.0068089,1.5336611 z"
|
||||
id="path825"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccscccccsccccccssscccsscccccccccsscsccscccsscsccsccccc" />
|
||||
</svg>
|
After Width: | Height: | Size: 4.1 KiB |
56
icons/complications-source/ic_ins_orig.svg
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg6582"
|
||||
version="1.1"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
height="24"
|
||||
width="24"
|
||||
sodipodi:docname="ic_ins_orig.svg"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1301"
|
||||
inkscape:window-height="764"
|
||||
id="namedview7"
|
||||
showgrid="false"
|
||||
inkscape:zoom="4.9166667"
|
||||
inkscape:cx="-24.10281"
|
||||
inkscape:cy="-2.764539"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg6582" />
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
style="fill:#000000;stroke-width:1"
|
||||
d="m 5.2032286,5.5871636 c -0.04934,-0.04934 -0.08964,-0.111011 -0.08957,-0.137051 1.52e-4,-0.04479 0.07357,-0.17029 0.201637,-0.344565 0.05534,-0.07532 0.04685,-0.08608 -0.252444,-0.319785 -0.170344,-0.133015 -0.317626,-0.241845 -0.327294,-0.241845 -0.0097,0 -0.134233,0.146285 -0.276812,0.325077 -0.14258,0.178792 -0.285173,0.33503 -0.316874,0.347195 -0.106583,0.0409 -0.222631,0.0226 -0.28355,-0.04472 -0.06622,-0.07318 -0.08206,-0.280988 -0.02413,-0.316785 0.01999,-0.01236 0.05248,-0.05261 0.0722,-0.08944 0.03132,-0.05851 -0.152744,-0.208523 -1.45636,-1.186943 -0.867679,-0.65123 -1.50947501,-1.157865 -1.53346701,-1.210523 -0.03847,-0.08443 -0.03669,-0.182385 0.01334,-0.734653 l 0.01703,-0.188057 -0.447569,-0.356365 c -0.677916,-0.53977105 -0.671352,-0.54573805 0.05517,-0.05015 l 0.46618901,0.318004 0.382456,-0.124018 c 0.210351,-0.06821 0.432408,-0.124018 0.49346,-0.124018 0.08878,0 0.412826,0.226458 1.618266,1.1309 l 1.507261,1.1309 0.09444,-0.1032 c 0.13419,-0.146644 0.240524,-0.171859 0.357656,-0.08481 0.174744,0.129864 0.147971,0.244692 -0.140308,0.601765 -0.141329,0.175055 -0.256962,0.333412 -0.256962,0.351903 0,0.02852 0.430933,0.371143 0.577336,0.459025 0.03126,0.01877 0.100589,-0.02865 0.203562,-0.139225 0.173028,-0.185803 0.257926,-0.205222 0.401944,-0.09194 0.162187,0.127576 0.128598,0.212191 -0.292577,0.737056 -0.21388,0.266535 -0.414377,0.505167 -0.445547,0.530293 -0.08919,0.07189 -0.220737,0.05371 -0.318466,-0.04402 z m -0.38208,-1.935654 c 0,-0.0084 0.0095,-0.04015 0.0212,-0.07054 0.0154,-0.04012 -0.379863,-0.35625 -1.443129,-1.154214 -0.805383,-0.604426 -1.492346,-1.098957 -1.526584,-1.098957 -0.03424,0 -0.200846,0.04514 -0.37024,0.100301 -0.362556,0.118072 -0.37248,0.133324 -0.37248,0.57253 0,0.252909 0.01163,0.313126 0.07079,0.36667 0.03893,0.03524 0.08535,0.05506 0.103151,0.04406 0.0178,-0.011 0.12963,-0.144179 0.248515,-0.295954 0.204828,-0.261494 0.278719,-0.31713 0.323961,-0.243927 0.01089,0.01762 -0.08884,0.165617 -0.221625,0.328891 -0.254408,0.312833 -0.261065,0.349543 -0.08088,0.445977 0.05584,0.02989 0.101998,-0.01041 0.295319,-0.257823 0.126023,-0.161285 0.248747,-0.293246 0.27272,-0.293246 0.1052,0 0.06917,0.08472 -0.153163,0.360085 -0.130623,0.161786 -0.237497,0.30207 -0.237497,0.311742 0,0.0097 0.04864,0.05222 0.108097,0.09456 l 0.108096,0.07697 0.225527,-0.284627 c 0.12404,-0.156545 0.246547,-0.28965 0.272238,-0.295788 0.118009,-0.0282 0.07105,0.08224 -0.152949,0.359672 l -0.242907,0.300856 0.08764,0.06738 c 0.0482,0.03706 0.09946,0.06775 0.11391,0.06819 0.01445,4.42e-4 0.168222,-0.175983 0.341718,-0.392066 0.173497,-0.216083 0.326136,-0.396847 0.339198,-0.401698 0.01306,-0.0049 0.410233,0.285716 0.882601,0.645702 0.73098,0.557073 0.986764,0.72433 0.986764,0.645245 z"
|
||||
id="path825"
|
||||
inkscape:connector-curvature="0" />
|
||||
</svg>
|
After Width: | Height: | Size: 4.3 KiB |
88
icons/complications-source/ic_iob_detailed_orig.svg
Normal file
|
@ -0,0 +1,88 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
version="1.1"
|
||||
id="svg6582"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||
sodipodi:docname="ic_iob_detailed_orig.svg">
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="10.24"
|
||||
inkscape:cx="34.884913"
|
||||
inkscape:cy="-12.499983"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true">
|
||||
<sodipodi:guide
|
||||
position="5.3485108,-2.2479248"
|
||||
orientation="0,1"
|
||||
id="guide7239"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="7.4930827,-2.2479248"
|
||||
orientation="0,1"
|
||||
id="guide4515"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="8.2940674,-11.575521"
|
||||
orientation="0,1"
|
||||
id="guide950"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-290.64998)">
|
||||
<path
|
||||
style="fill:#000000;stroke-width:0.99999994"
|
||||
d="m 0.10358636,294.55177 c 0.0493981,-0.0365 0.10846679,-0.0637 0.13118174,-0.0602 0.0390585,0.005 0.13899969,0.0862 0.27436575,0.2207 0.0585043,0.058 0.0690163,0.052 0.31175579,-0.17867 0.13817342,-0.13137 0.25224726,-0.24563 0.25350336,-0.25408 0.00101,-0.006 -0.11015378,-0.13618 -0.2475981,-0.28371 -0.13743302,-0.1476 -0.25518963,-0.29229 -0.2616876,-0.32152 -0.0218405,-0.0981 0.009221,-0.19714 0.0758418,-0.24156 0.0724495,-0.0481 0.25579322,-0.0351 0.27947728,0.02 0.00822,0.019 0.0390671,0.0526 0.0686187,0.0746 0.0469462,0.035 0.20173962,-0.10611 1.22464432,-1.11615 0.6808372,-0.67226 1.2061862,-1.16623 1.2552437,-1.18034 0.07862,-0.0225 0.1638478,-0.009 0.6392311,0.10622 l 0.1618834,0.039 0.3690218,-0.34412 c 0.5589482,-0.52121 0.563302,-0.5147 0.03661,0.0548 l -0.3379816,0.36535 0.058476,0.34973 c 0.032159,0.19234 0.051985,0.39332 0.044057,0.44655 -0.011545,0.0776 -0.2511945,0.33069 -1.1968031,1.26468 l -1.1823765,1.16782 0.077727,0.096 c 0.1104681,0.13618 0.1186621,0.23212 0.027496,0.32298 -0.1359863,0.13563 -0.2326844,0.0974 -0.5067015,-0.2005 -0.1343404,-0.14604 -0.2574436,-0.26749 -0.2735817,-0.26989 -0.02486,-0.004 -0.3797493,0.32765 -0.47543506,0.44395 -0.0204864,0.025 0.0119706,0.0915 0.0949881,0.19568 0.1395922,0.17512 0.1455064,0.25165 0.02793,0.36256 -0.13234709,0.12479 -0.20180545,0.0846 -0.60491261,-0.35102 -0.20471498,-0.22119 -0.38681681,-0.42711 -0.40468017,-0.45755 -0.05113146,-0.0871 -0.01815844,-0.19952 0.07976631,-0.27207 z m 1.73814394,-0.0817 c 0.00697,10e-4 0.034057,0.0124 0.058749,0.0276 0.03296,0.0189 0.3601277,-0.28507 1.194383,-1.10885 0.6319081,-0.624 1.1525785,-1.159 1.1570265,-1.18885 0.00444,-0.0299 -0.013247,-0.18107 -0.039387,-0.33597 -0.055874,-0.33164 -0.06789,-0.34226 -0.4510194,-0.39932 -0.2206075,-0.0329 -0.2745566,-0.0311 -0.329057,0.0141 -0.035743,0.0292 -0.059151,0.0672 -0.051901,0.0845 0.00722,0.0173 0.1089431,0.13165 0.2258761,0.25523 0.201483,0.21266 0.2404166,0.28434 0.1706826,0.3143 -0.01677,0.006 -0.1329223,-0.099 -0.2581013,-0.23608 -0.2398212,-0.26259 -0.2709826,-0.27315 -0.3784895,-0.12862 -0.033346,0.0449 -0.00417,0.0903 0.186517,0.29113 0.124333,0.13082 0.2234813,0.25509 0.2203663,0.276 -0.0137,0.092 -0.082867,0.0492 -0.2942092,-0.18039 -0.1241531,-0.13494 -0.2326378,-0.24641 -0.2410732,-0.24767 -0.00873,-10e-4 -0.051848,0.0356 -0.096578,0.0821 l -0.081228,0.0845 0.2189803,0.23369 c 0.1204508,0.12836 0.2206241,0.25272 0.2226317,0.27593 0.00926,0.10654 -0.080947,0.0513 -0.293863,-0.18019 l -0.2308679,-0.251 -0.070162,0.0675 c -0.038633,0.0374 -0.072022,0.0782 -0.074297,0.0905 -0.00241,0.0137 0.1316552,0.16956 0.2975897,0.34903 0.1659537,0.17941 0.3037943,0.33607 0.3063241,0.34812 0.00275,0.011 -0.3025493,0.32072 -0.6779509,0.68599 -0.5809368,0.56526 -0.7600753,0.76662 -0.6910922,0.77689 z"
|
||||
id="path825"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.42386249;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 2.9588068,295.12302 a 0.21218709,0.21218709 0 0 0 0.021187,0.42374 h 1.861385 a 0.21195244,0.21195244 0 1 0 0,-0.42374 h -1.861385 a 0.21195244,0.21195244 0 0 0 -0.021187,0 z m 2.4784015,0 a 0.21218709,0.21218709 0 0 0 0.021187,0.42374 H 6.132256 a 0.21195244,0.21195244 0 1 0 0,-0.42374 H 5.4583956 a 0.21195244,0.21195244 0 0 0 -0.021187,0 z m -2.4784015,0.72657 a 0.21218709,0.21218709 0 0 0 0.021187,0.42374 h 0.8030516 a 0.21195244,0.21195244 0 1 0 0,-0.42374 H 2.9799941 a 0.21195244,0.21195244 0 0 0 -0.021187,0 z m 1.4273029,0 a 0.21218709,0.21218709 0 0 0 0.021704,0.42374 h 1.7244425 a 0.21195244,0.21195244 0 1 0 0,-0.42374 H 4.4078138 a 0.21195244,0.21195244 0 0 0 -0.021704,0 z m -1.4273029,0.72657 a 0.21218709,0.21218709 0 0 0 0.021187,0.42374 H 6.132256 a 0.21195244,0.21195244 0 1 0 0,-0.42374 H 2.9799941 a 0.21195244,0.21195244 0 0 0 -0.021187,0 z"
|
||||
id="path819-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.2 KiB |
36
icons/complications/ic_aaps_full.svg
Normal file
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg4879"
|
||||
version="1.1"
|
||||
viewBox="-0.1 0 38.4175 38.4175"
|
||||
height="38.4175mm"
|
||||
width="38.4175mm">
|
||||
<defs
|
||||
id="defs4873" />
|
||||
<metadata
|
||||
id="metadata4876">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(267.81708,63.899226)"
|
||||
id="layer1">
|
||||
<path
|
||||
id="path197"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-267.91708,-63.899226)"
|
||||
d="M 72.599609 0 C 62.799597 0 53.499969 1.9003894 45 5.4003906 C 27.099969 12.800392 12.800365 27.099999 5.4003906 45 C 1.9003591 53.499999 0 62.799608 0 72.599609 C 0 82.399611 1.9003591 91.69922 5.4003906 100.19922 C 12.800365 118.09922 27.099969 132.40078 45 139.80078 C 53.499969 143.30078 62.799597 145.19922 72.599609 145.19922 C 82.399584 145.19922 91.699212 143.30078 100.19922 139.80078 C 118.09921 132.40078 132.40077 118.09922 139.80078 100.19922 C 143.30077 91.69922 145.19922 82.399611 145.19922 72.599609 C 145.19922 62.799608 143.30077 53.499999 139.80078 45 C 132.40077 27.099999 118.09921 12.800392 100.19922 5.4003906 C 91.699212 1.9003894 82.399584 0 72.599609 0 z M 72.5 11.300781 C 106.29997 11.300781 133.69922 38.799997 133.69922 72.5 C 133.69922 84.099997 130.5004 94.899219 124.90039 104.19922 L 124.90039 72.699219 C 125.00055 62.899221 122.6996 53.900781 118.09961 45.800781 C 113.49958 37.700781 107.19963 31.39922 99.099609 26.699219 C 95.599616 24.699217 91.899584 23.100001 88.099609 22 C 83.899609 20.700001 79.599609 24.099999 79.599609 28.5 C 79.599609 31.5 81.600403 34.000391 84.400391 34.900391 C 87.000403 35.700392 89.400781 36.799221 91.800781 38.199219 C 97.600769 41.69922 102.19998 46.400391 105.5 52.400391 C 108.79998 58.400391 110.5 65.099609 110.5 72.599609 C 110.5 80.099609 108.79998 86.800781 105.5 92.800781 C 102.09997 98.800781 97.600769 103.50039 91.800781 106.90039 C 90.200756 107.80039 88.600384 108.60078 86.900391 109.30078 L 86.900391 106.09961 L 86.900391 98.900391 L 86.900391 92.900391 L 86.900391 82.400391 C 86.900391 80.300391 86.200794 78.499611 84.800781 77.099609 C 83.400806 75.699608 81.699987 75 79.5 75 C 77.499987 75 75.800762 75.699608 74.300781 77.099609 C 72.900769 78.499611 72.099609 80.200388 72.099609 82.400391 L 72.099609 92.900391 L 72.099609 98.900391 L 72.099609 106.5 L 72.099609 112.40039 L 72.099609 117.19922 C 72.099609 119.19922 72.800762 120.90039 74.300781 122.40039 C 75.700756 123.80039 77.499987 124.59961 79.5 124.59961 C 80.599994 124.59961 81.69959 124.39999 82.599609 124 C 86.299616 123.1 89.899238 121.89961 93.199219 120.09961 C 99.999231 116.59961 105.59963 111.90078 110.09961 105.80078 L 110.09961 117.19922 C 110.09961 118.39922 110.29916 119.40078 110.69922 120.30078 C 100.19924 128.70078 86.9 133.69922 72.5 133.69922 C 38.699987 133.69922 11.300781 106.2 11.300781 72.5 C 11.300781 38.799997 38.799994 11.300781 72.5 11.300781 z M 64.900391 20.300781 C 64.00041 20.300781 63.200365 20.499233 62.400391 20.699219 C 56.400391 21.699217 50.700384 23.699219 45.400391 26.699219 C 37.400378 31.299217 31.100384 37.700781 26.400391 45.800781 C 21.800365 53.900781 19.5 62.899221 19.5 72.699219 C 19.5 82.49922 21.6992 91.499999 26.199219 99.5 C 30.6992 107.5 36.799609 113.8 44.599609 118.5 C 48.199609 120.7 51.999616 122.30039 56.099609 123.40039 C 60.499622 124.60039 64.900391 121.40078 64.900391 116.80078 C 64.900391 113.70078 62.800384 111.19922 59.900391 110.19922 C 57.400384 109.39922 54.899603 108.30039 52.599609 106.90039 C 46.699616 103.50039 42.100762 98.800781 38.800781 92.800781 C 35.400794 86.800781 33.800781 80.099609 33.800781 72.599609 C 33.800781 65.099609 35.500762 58.400391 38.800781 52.400391 C 42.100762 46.400391 46.799622 41.69922 52.599609 38.199219 C 54.199597 37.299219 55.899578 36.500784 57.599609 35.800781 L 57.599609 38 L 57.599609 44 L 57.599609 51.599609 L 57.599609 57.5 L 57.599609 62.300781 C 57.599609 64.300779 58.300762 66 59.800781 67.5 C 61.200794 68.900001 63.000025 69.699219 65 69.699219 C 67.100019 69.699219 68.900806 69 70.300781 67.5 C 71.700794 66.099999 72.400391 64.300779 72.400391 62.300781 L 72.400391 57.5 L 72.400391 51.199219 L 72.400391 44 L 72.400391 38 L 72.400391 27.5 C 72.400391 25.4 71.700794 23.59922 70.300781 22.199219 C 68.8008 20.999219 67.100416 20.300781 64.900391 20.300781 z "
|
||||
style="stroke-width:0.99999994;fill:#ffffff" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.7 KiB |
35
icons/complications/ic_basal.svg
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg6582"
|
||||
version="1.1"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
height="24"
|
||||
width="24">
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(0,-290.64998)"
|
||||
id="layer1">
|
||||
<path
|
||||
id="path6563"
|
||||
d="m 1.6933594,292.16016 v 2.80078 H 0 v 0.52929 h 2.2226562 v -2.80078 H 3.09375 v 1.35547 h 1.3125 v 1.44531 h 1.9433594 v -0.52929 H 4.9355469 v -1.44336 h -1.3125 v -1.35742 z"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
40
icons/complications/ic_br_cob_iob.svg
Normal file
After Width: | Height: | Size: 8.8 KiB |
35
icons/complications/ic_carbs.svg
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg6582"
|
||||
version="1.1"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
height="24"
|
||||
width="24">
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(0,-290.64998)"
|
||||
id="layer1">
|
||||
<path
|
||||
id="path7219"
|
||||
d="m 0.07295798,296.83173 c -0.1122387,-0.12403 -0.10912,-0.13361 0.1098377,-0.33755 0.123946,-0.11545 0.2399605,-0.2533 0.2578097,-0.30635 0.017849,-0.053 -0.072227,-0.28451 -0.2001711,-0.51436 -0.2216511,-0.3982 -0.232625,-0.44673 -0.232625,-1.02872 0,-0.55596 0.01701,-0.64151 0.1894393,-0.95278 0.2295216,-0.41433 0.5974781,-0.76138 0.699297,-0.65956 0.13093292,0.13093 0.21004832,0.0684 0.38036222,-0.30044 0.26666,-0.57755 0.4966683,-0.81559 0.7902781,-0.81787 0.2298957,-0.002 0.2496163,-0.0181 0.3361639,-0.27725 0.051087,-0.15301 0.2323105,-0.42442 0.4078375,-0.61081 l 0.3158958,-0.33544 0.2535776,0.28625 c 0.1394675,0.15744 0.3049613,0.38166 0.367764,0.49829 0.062802,0.11662 0.150967,0.21203 0.1959215,0.21203 0.044954,0 0.2481379,-0.12905 0.4515189,-0.28678 0.5138423,-0.3985 0.9479397,-0.53103 1.6161036,-0.49339 0.1488754,0.008 0.1524038,0.0212 0.1221769,0.44366 -0.038067,0.53204 -0.2122871,0.9432 -0.5590789,1.31942 -0.1446004,0.15688 -0.2629099,0.31727 -0.2629099,0.35643 0,0.0392 0.1518971,0.17085 0.3375495,0.29265 0.185652,0.1218 0.4191662,0.2894 0.5189208,0.37247 l 0.1813712,0.15102 -0.2456665,0.24913 c -0.1351167,0.13703 -0.4047968,0.32226 -0.5992897,0.41164 -0.4011153,0.18432 -0.4648215,0.2508 -0.3843851,0.40109 0.073206,0.13678 -0.2999593,0.50766 -0.708632,0.70428 -0.4873936,0.23449 -0.4833225,0.23068 -0.4632573,0.43341 0.015149,0.15308 -0.029439,0.23403 -0.222099,0.40318 -0.1325804,0.11641 -0.3972262,0.28315 -0.5881017,0.37054 -0.3044925,0.13941 -0.4133015,0.1554 -0.8873715,0.13052 -0.466717,-0.0245 -0.6018643,-0.0605 -0.9920655,-0.26433 l -0.45174132,-0.23597 -0.2783896,0.25662 c -0.1531142,0.14114 -0.2923695,0.25661 -0.309456,0.25661 -0.017086,0 -0.08305,-0.0574 -0.1465851,-0.12764 z M 3.046513,296.44094 c 0.1507077,-0.0649 0.2930096,-0.16746 0.3162261,-0.22796 0.1032308,-0.26902 -0.7725458,-0.65358 -1.3181185,-0.5788 -0.3753467,0.0515 -0.8473517,0.32482 -0.8473517,0.49076 0,0.24793 0.8400929,0.5377 1.3501978,0.46571 0.1237678,-0.0175 0.3483389,-0.0848 0.4990463,-0.14971 z m -1.9305252,-0.972 c 0.1526821,-0.23095 0.1774628,-0.33287 0.1758706,-0.72332 -0.00236,-0.57649 -0.2325739,-1.09745 -0.48498192,-1.09745 -0.3493751,0 -0.5780768,0.97634 -0.3705061,1.58171 0.1974871,0.57597 0.4079444,0.64999 0.67961742,0.23906 z m 2.7819869,-0.0587 c 0.3738715,-0.0802 0.6840596,-0.30762 0.625978,-0.45898 -0.074257,-0.19351 -0.719195,-0.44794 -1.1354468,-0.44794 -0.4126632,0 -0.858375,0.18827 -0.9959339,0.42069 -0.084486,0.14275 0.069181,0.27006 0.5327922,0.4414 0.3530742,0.1305 0.534218,0.13884 0.9726105,0.0448 z M 2.1580258,294.5053 c 0.3499054,-0.37558 0.4136063,-1.10931 0.1424518,-1.64082 -0.2587115,-0.50712 -0.4270412,-0.51919 -0.6556148,-0.047 -0.2434377,0.50288 -0.1785456,1.15285 0.1679929,1.68264 0.1180344,0.18046 0.1810123,0.18141 0.3451701,0.005 z m 3.2023524,-0.34041 c 0.355406,-0.16547 0.4105616,-0.27201 0.2250328,-0.43468 -0.4949714,-0.43399 -1.3565556,-0.47981 -1.896706,-0.10086 -0.277631,0.19477 -0.2274028,0.33089 0.1928854,0.52273 0.495521,0.22618 1.0108864,0.23064 1.4787878,0.0128 z m -1.8920711,-1.06321 c 0.1493138,-0.29099 0.1772115,-0.41624 0.157532,-0.70724 -0.025984,-0.38422 -0.264604,-0.93731 -0.4463561,-1.03458 -0.1590461,-0.0851 -0.3566052,0.14839 -0.4775562,0.56444 -0.114522,0.39395 -0.052801,0.87509 0.1676979,1.3073 0.1895712,0.3716 0.3603694,0.33453 0.5986824,-0.12992 z m 1.2973412,-0.31818 c 0.3810141,-0.16525 0.6449005,-0.41584 0.8308376,-0.78896 0.3045492,-0.61116 0.1964826,-0.81689 -0.3446688,-0.65619 -0.5698163,0.16922 -1.1773414,0.8697 -1.1773414,1.35748 0,0.29794 0.1596627,0.31819 0.6911726,0.0877 z"
|
||||
style="fill:#ffffff;stroke-width:1" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.4 KiB |
36
icons/complications/ic_cob_detailed.svg
Normal file
After Width: | Height: | Size: 6.2 KiB |
36
icons/complications/ic_cob_iob.svg
Normal file
After Width: | Height: | Size: 8.4 KiB |
31
icons/complications/ic_ins.svg
Normal file
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
version="1.1"
|
||||
id="svg6582">
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
id="path825"
|
||||
d="m 5.2032286,5.5871636 c -0.04934,-0.04934 -0.08964,-0.111011 -0.08957,-0.137051 1.52e-4,-0.04479 0.07357,-0.17029 0.201637,-0.344565 0.05534,-0.07532 0.04685,-0.08608 -0.252444,-0.319785 -0.170344,-0.133015 -0.317626,-0.241845 -0.327294,-0.241845 -0.0097,0 -0.134233,0.146285 -0.276812,0.325077 -0.14258,0.178792 -0.285173,0.33503 -0.316874,0.347195 -0.106583,0.0409 -0.222631,0.0226 -0.28355,-0.04472 -0.06622,-0.07318 -0.08206,-0.280988 -0.02413,-0.316785 0.01999,-0.01236 0.05248,-0.05261 0.0722,-0.08944 0.03132,-0.05851 -0.152744,-0.208523 -1.45636,-1.186943 -0.867679,-0.65123 -1.50947501,-1.157865 -1.53346701,-1.210523 -0.03847,-0.08443 -0.03669,-0.182385 0.01334,-0.734653 l 0.01703,-0.188057 -0.447569,-0.356365 c -0.677916,-0.53977105 -0.671352,-0.54573805 0.05517,-0.05015 l 0.46618901,0.318004 0.382456,-0.124018 c 0.210351,-0.06821 0.432408,-0.124018 0.49346,-0.124018 0.08878,0 0.412826,0.226458 1.618266,1.1309 l 1.507261,1.1309 0.09444,-0.1032 c 0.13419,-0.146644 0.240524,-0.171859 0.357656,-0.08481 0.174744,0.129864 0.147971,0.244692 -0.140308,0.601765 -0.141329,0.175055 -0.256962,0.333412 -0.256962,0.351903 0,0.02852 0.430933,0.371143 0.577336,0.459025 0.03126,0.01877 0.100589,-0.02865 0.203562,-0.139225 0.173028,-0.185803 0.257926,-0.205222 0.401944,-0.09194 0.162187,0.127576 0.128598,0.212191 -0.292577,0.737056 -0.21388,0.266535 -0.414377,0.505167 -0.445547,0.530293 -0.08919,0.07189 -0.220737,0.05371 -0.318466,-0.04402 z m -0.38208,-1.935654 c 0,-0.0084 0.0095,-0.04015 0.0212,-0.07054 0.0154,-0.04012 -0.379863,-0.35625 -1.443129,-1.154214 -0.805383,-0.604426 -1.492346,-1.098957 -1.526584,-1.098957 -0.03424,0 -0.200846,0.04514 -0.37024,0.100301 -0.362556,0.118072 -0.37248,0.133324 -0.37248,0.57253 0,0.252909 0.01163,0.313126 0.07079,0.36667 0.03893,0.03524 0.08535,0.05506 0.103151,0.04406 0.0178,-0.011 0.12963,-0.144179 0.248515,-0.295954 0.204828,-0.261494 0.278719,-0.31713 0.323961,-0.243927 0.01089,0.01762 -0.08884,0.165617 -0.221625,0.328891 -0.254408,0.312833 -0.261065,0.349543 -0.08088,0.445977 0.05584,0.02989 0.101998,-0.01041 0.295319,-0.257823 0.126023,-0.161285 0.248747,-0.293246 0.27272,-0.293246 0.1052,0 0.06917,0.08472 -0.153163,0.360085 -0.130623,0.161786 -0.237497,0.30207 -0.237497,0.311742 0,0.0097 0.04864,0.05222 0.108097,0.09456 l 0.108096,0.07697 0.225527,-0.284627 c 0.12404,-0.156545 0.246547,-0.28965 0.272238,-0.295788 0.118009,-0.0282 0.07105,0.08224 -0.152949,0.359672 l -0.242907,0.300856 0.08764,0.06738 c 0.0482,0.03706 0.09946,0.06775 0.11391,0.06819 0.01445,4.42e-4 0.168222,-0.175983 0.341718,-0.392066 0.173497,-0.216083 0.326136,-0.396847 0.339198,-0.401698 0.01306,-0.0049 0.410233,0.285716 0.882601,0.645702 0.73098,0.557073 0.986764,0.72433 0.986764,0.645245 z"
|
||||
style="fill:#ffffff;stroke-width:1" />
|
||||
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
31
icons/complications/ic_ins_burnin.svg
Normal file
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
version="1.1"
|
||||
id="svg6582">
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
id="path825"
|
||||
d="m 5.2032286,5.5871636 c -0.04934,-0.04934 -0.08964,-0.111011 -0.08957,-0.137051 1.52e-4,-0.04479 0.07357,-0.17029 0.201637,-0.344565 0.05534,-0.07532 0.04685,-0.08608 -0.252444,-0.319785 -0.170344,-0.133015 -0.317626,-0.241845 -0.327294,-0.241845 -0.0097,0 -0.134233,0.146285 -0.276812,0.325077 -0.14258,0.178792 -0.285173,0.33503 -0.316874,0.347195 -0.106583,0.0409 -0.222631,0.0226 -0.28355,-0.04472 -0.06622,-0.07318 -0.08206,-0.280988 -0.02413,-0.316785 0.01999,-0.01236 0.05248,-0.05261 0.0722,-0.08944 0.03132,-0.05851 -0.152744,-0.208523 -1.45636,-1.186943 -0.867679,-0.65123 -1.50947501,-1.157865 -1.53346701,-1.210523 -0.03847,-0.08443 -0.03669,-0.182385 0.01334,-0.734653 l 0.01703,-0.188057 -0.447569,-0.356365 c -0.677916,-0.53977105 -0.671352,-0.54573805 0.05517,-0.05015 l 0.46618901,0.318004 0.382456,-0.124018 c 0.210351,-0.06821 0.432408,-0.124018 0.49346,-0.124018 0.08878,0 0.412826,0.226458 1.618266,1.1309 l 1.507261,1.1309 0.09444,-0.1032 c 0.13419,-0.146644 0.240524,-0.171859 0.357656,-0.08481 0.174744,0.129864 0.147971,0.244692 -0.140308,0.601765 -0.141329,0.175055 -0.256962,0.333412 -0.256962,0.351903 0,0.02852 0.430933,0.371143 0.577336,0.459025 0.03126,0.01877 0.100589,-0.02865 0.203562,-0.139225 0.173028,-0.185803 0.257926,-0.205222 0.401944,-0.09194 0.162187,0.127576 0.128598,0.212191 -0.292577,0.737056 -0.21388,0.266535 -0.414377,0.505167 -0.445547,0.530293 -0.08919,0.07189 -0.220737,0.05371 -0.318466,-0.04402 z m -0.38208,-1.935654 c 0,-0.0084 0.0095,-0.04015 0.0212,-0.07054 0.0154,-0.04012 -0.379863,-0.35625 -1.443129,-1.154214 -0.805383,-0.604426 -1.492346,-1.098957 -1.526584,-1.098957 -0.03424,0 -0.200846,0.04514 -0.37024,0.100301 -0.362556,0.118072 -0.37248,0.133324 -0.37248,0.57253 0,0.252909 0.01163,0.313126 0.07079,0.36667 0.03893,0.03524 0.08535,0.05506 0.103151,0.04406 0.0178,-0.011 0.12963,-0.144179 0.248515,-0.295954 0.204828,-0.261494 0.278719,-0.31713 0.323961,-0.243927 0.01089,0.01762 -0.08884,0.165617 -0.221625,0.328891 -0.254408,0.312833 -0.261065,0.349543 -0.08088,0.445977 0.05584,0.02989 0.101998,-0.01041 0.295319,-0.257823 0.126023,-0.161285 0.248747,-0.293246 0.27272,-0.293246 0.1052,0 0.06917,0.08472 -0.153163,0.360085 -0.130623,0.161786 -0.237497,0.30207 -0.237497,0.311742 0,0.0097 0.04864,0.05222 0.108097,0.09456 l 0.108096,0.07697 0.225527,-0.284627 c 0.12404,-0.156545 0.246547,-0.28965 0.272238,-0.295788 0.118009,-0.0282 0.07105,0.08224 -0.152949,0.359672 l -0.242907,0.300856 2.0068089,1.5336611 z"
|
||||
style="fill:#ffffff;stroke-width:1" />
|
||||
</svg>
|
After Width: | Height: | Size: 3.2 KiB |
36
icons/complications/ic_iob_detailed.svg
Normal file
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg6582"
|
||||
version="1.1"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
height="24"
|
||||
width="24">
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(0,-290.64998)"
|
||||
id="layer1">
|
||||
<path
|
||||
id="path825"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,0,290.64998)"
|
||||
d="M 19.140625 0.001953125 C 19.121272 -0.027012229 18.589483 0.4583956 17.533203 1.4433594 L 16.138672 2.7441406 L 15.527344 2.5976562 C 13.730619 2.1621791 13.408475 2.1102731 13.111328 2.1953125 C 12.925914 2.2486416 10.94043 4.1154248 8.3671875 6.65625 C 4.501091 10.473724 3.9157157 11.007283 3.7382812 10.875 C 3.6265902 10.79185 3.5095833 10.665561 3.4785156 10.59375 C 3.3890011 10.385498 2.6956999 10.335783 2.421875 10.517578 C 2.1700799 10.685465 2.054172 11.058916 2.1367188 11.429688 C 2.161278 11.540163 2.6055681 12.088626 3.125 12.646484 C 3.6444746 13.204078 4.0643642 13.696073 4.0605469 13.71875 C 4.0557994 13.750687 3.6257459 14.181218 3.1035156 14.677734 C 2.186075 15.549558 2.1449467 15.572728 1.9238281 15.353516 C 1.4122084 14.845169 1.0343414 14.538429 0.88671875 14.519531 C 0.80121122 14.506356 0.57686699 14.608976 0.390625 14.746094 C 0.022338157 15.020354 -0.10299958 15.442985 0.08984375 15.771484 C 0.15735881 15.886533 0.84541472 16.665959 1.6191406 17.501953 C 3.1426952 19.148391 3.4060405 19.299772 3.90625 18.828125 C 4.3506332 18.408938 4.3283738 18.120855 3.8007812 17.458984 C 3.4870143 17.065233 3.3639773 16.813238 3.4414062 16.71875 C 3.8030532 16.279191 5.1443222 15.025898 5.2382812 15.041016 C 5.2992756 15.050086 5.7637411 15.508585 6.2714844 16.060547 C 7.3071396 17.186468 7.673536 17.330977 8.1875 16.818359 C 8.5320648 16.474952 8.5015016 16.112352 8.0839844 15.597656 L 7.7890625 15.234375 L 12.257812 10.820312 C 15.831766 7.2902716 16.737615 6.334307 16.78125 6.0410156 C 16.811214 5.8398314 16.73678 5.08047 16.615234 4.3535156 L 16.394531 3.03125 L 17.671875 1.6503906 C 18.667198 0.57417015 19.159978 0.030918479 19.140625 0.001953125 z M 13.359375 2.9960938 C 13.540323 2.9885819 13.799901 3.0179049 14.216797 3.0800781 C 15.664845 3.295738 15.710698 3.3344481 15.921875 4.5878906 C 16.020672 5.1733394 16.087094 5.744414 16.070312 5.8574219 C 16.053501 5.9702408 14.08558 7.9931373 11.697266 10.351562 C 8.5441747 13.465062 7.308167 14.614402 7.1835938 14.542969 C 7.0902697 14.48552 6.9872808 14.44128 6.9609375 14.4375 L 6.9609375 14.439453 C 6.700214 14.400637 7.376599 13.638369 9.5722656 11.501953 C 10.991106 10.121405 12.145159 8.9517311 12.134766 8.9101562 C 12.125204 8.8646129 11.603789 8.271835 10.976562 7.59375 C 10.349408 6.9154382 9.8424538 6.3271702 9.8515625 6.2753906 C 9.8601609 6.2289024 9.986798 6.0749481 10.132812 5.9335938 L 10.398438 5.6777344 L 11.271484 6.6269531 C 12.076206 7.501876 12.415858 7.7093115 12.380859 7.3066406 C 12.373272 7.2189178 11.99431 6.748812 11.539062 6.2636719 L 10.712891 5.3808594 L 11.019531 5.0625 C 11.18859 4.886752 11.35177 4.7481736 11.384766 4.7519531 C 11.416647 4.7567153 11.825682 5.1774906 12.294922 5.6875 C 13.093696 6.5552417 13.356424 6.7168572 13.408203 6.3691406 C 13.419976 6.2901107 13.044139 5.8206097 12.574219 5.3261719 C 11.853512 4.5671294 11.743108 4.3962633 11.869141 4.2265625 C 12.275466 3.6803074 12.39437 3.7204245 13.300781 4.7128906 C 13.773899 5.2309883 14.212008 5.6261928 14.275391 5.6035156 C 14.538952 5.490281 14.39237 5.21977 13.630859 4.4160156 C 13.188908 3.9489416 12.804632 3.5165577 12.777344 3.4511719 C 12.749942 3.385786 12.837565 3.2431747 12.972656 3.1328125 C 13.075649 3.0473952 13.178427 3.0036056 13.359375 2.9960938 z M 11.183594 16.90625 A 0.80196695 0.80196695 0 0 0 11.263672 18.507812 L 18.298828 18.507812 A 0.80108009 0.80108009 0 1 0 18.298828 16.90625 L 11.263672 16.90625 A 0.80108009 0.80108009 0 0 0 11.183594 16.90625 z M 20.550781 16.90625 A 0.80196695 0.80196695 0 0 0 20.630859 18.507812 L 23.177734 18.507812 A 0.80108009 0.80108009 0 1 0 23.177734 16.90625 L 20.630859 16.90625 A 0.80108009 0.80108009 0 0 0 20.550781 16.90625 z M 11.183594 19.652344 A 0.80196695 0.80196695 0 0 0 11.263672 21.253906 L 14.298828 21.253906 A 0.80108009 0.80108009 0 1 0 14.298828 19.652344 L 11.263672 19.652344 A 0.80108009 0.80108009 0 0 0 11.183594 19.652344 z M 16.578125 19.652344 A 0.80196695 0.80196695 0 0 0 16.660156 21.253906 L 23.177734 21.253906 A 0.80108009 0.80108009 0 1 0 23.177734 19.652344 L 16.660156 19.652344 A 0.80108009 0.80108009 0 0 0 16.578125 19.652344 z M 11.183594 22.398438 A 0.80196695 0.80196695 0 0 0 11.263672 24 L 23.177734 24 A 0.80108009 0.80108009 0 1 0 23.177734 22.398438 L 11.263672 22.398438 A 0.80108009 0.80108009 0 0 0 11.183594 22.398438 z "
|
||||
style="fill:#ffffff;stroke-width:3.77952743" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.2 KiB |
35
icons/complications/ic_sgv.svg
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg6582"
|
||||
version="1.1"
|
||||
viewBox="0 0 6.3499999 6.3500002"
|
||||
height="24"
|
||||
width="24">
|
||||
<defs
|
||||
id="defs6576" />
|
||||
<metadata
|
||||
id="metadata6579">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(0,-290.64998)"
|
||||
id="layer1">
|
||||
<path
|
||||
id="path7206"
|
||||
d="m 2.6709439,296.94599 c -0.564202,-0.13292 -1.10932,-0.57834 -1.395458,-1.14023 -0.209976,-0.41234 -0.255,-1.03331 -0.115079,-1.58719 0.192881,-0.76352 1.199054,-2.58796 1.865321,-3.38228 l 0.156223,-0.18625 0.127394,0.15521 c 0.255954,0.31183 1.051728,1.53363 1.300101,1.99612 0.140327,0.2613 0.343099,0.70829 0.450605,0.99333 0.251656,0.66721 0.280223,1.46003 0.06928,1.9227 -0.424912,0.93195 -1.479804,1.45914 -2.458384,1.22859 z m 0.0041,-1.00028 c 0.121194,-0.12119 0.08718,-0.27576 -0.138214,-0.62811 -0.319446,-0.49937 -0.421499,-0.87437 -0.397534,-1.46074 0.01125,-0.27533 0.003,-0.48091 -0.01834,-0.45684 -0.120721,0.13615 -0.385751,0.96774 -0.411897,1.29242 -0.03899,0.4842 0.107815,0.95289 0.366713,1.17073 0.198622,0.16713 0.476417,0.2054 0.599268,0.0825 z"
|
||||
style="fill:#ffffff;stroke-width:0.99999994" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -1,4 +1,18 @@
|
|||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.dicedmelon.gradle:jacoco-android:0.1.4'
|
||||
}
|
||||
}
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'jacoco-android'
|
||||
|
||||
jacoco {
|
||||
toolVersion = "0.8.3"
|
||||
}
|
||||
|
||||
ext {
|
||||
wearableVersion = "2.4.0"
|
||||
|
@ -93,6 +107,10 @@ dependencies {
|
|||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
//implementation files("libs/hellocharts-library-1.5.5.jar")
|
||||
//compile "com.ustwo.android:clockwise-wearable:1.0.2"
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
|
||||
|
||||
compileOnly "com.google.android.wearable:wearable:${wearableVersion}"
|
||||
implementation "com.google.android.support:wearable:${wearableVersion}"
|
||||
implementation "com.google.android.gms:play-services-wearable:${playServicesWearable}"
|
||||
|
@ -105,7 +123,16 @@ dependencies {
|
|||
|
||||
testImplementation "junit:junit:4.12"
|
||||
testImplementation "org.json:json:20140107"
|
||||
testImplementation "org.mockito:mockito-core:2.8.47"
|
||||
testImplementation ("org.mockito:mockito-core:2.8.47") {
|
||||
exclude group: 'net.bytebuddy', module: 'byte-buddy'
|
||||
exclude group: 'net.bytebuddy', module: 'byte-buddy-android'
|
||||
exclude group: 'net.bytebuddy', module: 'byte-buddy-agent'
|
||||
}
|
||||
// to fix org.mockito:mockito-core dependency issues, fixed in mockito 3+
|
||||
testImplementation 'net.bytebuddy:byte-buddy:1.8.22'
|
||||
testImplementation 'net.bytebuddy:byte-buddy-android:1.8.22'
|
||||
testImplementation 'net.bytebuddy:byte-buddy-agent:1.8.22'
|
||||
|
||||
testImplementation "org.powermock:powermock-api-mockito2:${powermockVersion}"
|
||||
testImplementation "org.powermock:powermock-module-junit4-rule-agent:${powermockVersion}"
|
||||
testImplementation "org.powermock:powermock-module-junit4-rule:${powermockVersion}"
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
|
||||
<application
|
||||
android:name=".aaps"
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_icon"
|
||||
android:label="@string/app_name"
|
||||
|
@ -231,6 +232,229 @@
|
|||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.LongStatusComplication"
|
||||
android:icon="@drawable/ic_aaps_full"
|
||||
android:label="Full Status"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="LONG_TEXT" />
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="300" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.LongStatusFlippedComplication"
|
||||
android:icon="@drawable/ic_aaps_full"
|
||||
android:label="Full Status (flipped)"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="LONG_TEXT" />
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="300" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.SgvComplication"
|
||||
android:icon="@drawable/ic_sgv"
|
||||
android:label="Blood Glucose"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="SHORT_TEXT" />
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="300" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.BrCobIobComplication"
|
||||
android:icon="@drawable/ic_br_cob_iob"
|
||||
android:label="BR, CoB & IoB"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="SHORT_TEXT" />
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="300" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.CobIobComplication"
|
||||
android:icon="@drawable/ic_cob_iob"
|
||||
android:label="CoB & IoB"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="SHORT_TEXT" />
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="300" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.CobIconComplication"
|
||||
android:icon="@drawable/ic_carbs"
|
||||
android:label="CoB Icon"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="SHORT_TEXT" />
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="300" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.CobDetailedComplication"
|
||||
android:icon="@drawable/ic_cob_detailed"
|
||||
android:label="CoB Detailed"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="SHORT_TEXT" />
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="300" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.IobIconComplication"
|
||||
android:icon="@drawable/ic_ins"
|
||||
android:label="IoB Icon"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="SHORT_TEXT" />
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="300" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.IobDetailedComplication"
|
||||
android:icon="@drawable/ic_iob_detailed"
|
||||
android:label="IoB Detailed"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="SHORT_TEXT" />
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="300" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.UploaderBattery"
|
||||
android:icon="@drawable/ic_battery_charging_wireless_50"
|
||||
android:label="Uploader/Phone Battery"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="RANGED_VALUE,SHORT_TEXT,ICON" />
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="300" />
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.WallpaperLightComplication"
|
||||
android:icon="@drawable/ic_aaps_light"
|
||||
android:label="Light Walpaper"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="LARGE_IMAGE"/>
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="0"/>
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.WallpaperDarkComplication"
|
||||
android:icon="@drawable/ic_aaps_dark"
|
||||
android:label="Dark Walpaper"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="LARGE_IMAGE"/>
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="0"/>
|
||||
</service>
|
||||
|
||||
<service
|
||||
android:name=".complications.WallpaperGrayComplication"
|
||||
android:icon="@drawable/ic_aaps_gray"
|
||||
android:label="Gray Walpaper"
|
||||
android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.SUPPORTED_TYPES"
|
||||
android:value="LARGE_IMAGE"/>
|
||||
<meta-data
|
||||
android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
|
||||
android:value="0"/>
|
||||
</service>
|
||||
|
||||
<receiver android:name=".complications.ComplicationTapBroadcastReceiver"/>
|
||||
|
||||
<activity
|
||||
android:name=".interaction.menus.MainMenuActivity"
|
||||
android:label="@string/label_actions_activity">
|
||||
|
|
BIN
wear/src/main/assets/watch_dark.jpg
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
wear/src/main/assets/watch_gray.jpg
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
wear/src/main/assets/watch_light.jpg
Normal file
After Width: | Height: | Size: 19 KiB |
75
wear/src/main/java/info/nightscout/androidaps/aaps.java
Normal file
|
@ -0,0 +1,75 @@
|
|||
package info.nightscout.androidaps;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
import info.nightscout.androidaps.interaction.utils.Persistence;
|
||||
|
||||
/**
|
||||
* Created for xDrip+ by Emma Black on 3/21/15.
|
||||
* Adapted for AAPS by dlvoy 2019-11-06.
|
||||
*/
|
||||
|
||||
public class aaps extends Application implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private static Context context;
|
||||
private static Boolean unicodeComplications = true;
|
||||
private static String complicationTapAction = "default";
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
aaps.context = getApplicationContext();
|
||||
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
sharedPrefs.registerOnSharedPreferenceChangeListener(this);
|
||||
updatePrefs(sharedPrefs);
|
||||
super.onCreate();
|
||||
}
|
||||
|
||||
private void updatePrefs(SharedPreferences sharedPrefs) {
|
||||
unicodeComplications = sharedPrefs.getBoolean("complication_unicode", true);
|
||||
complicationTapAction = sharedPrefs.getString("complication_tap_action", "default");
|
||||
}
|
||||
|
||||
public static Context getAppContext() {
|
||||
return aaps.context;
|
||||
}
|
||||
|
||||
private static boolean isWear2OrAbove() {
|
||||
return Build.VERSION.SDK_INT > 23;
|
||||
}
|
||||
|
||||
public static String gs(@StringRes final int id) {
|
||||
return getAppContext().getString(id);
|
||||
}
|
||||
|
||||
public static String gs(@StringRes final int id, String... args) {
|
||||
return getAppContext().getString(id, (Object[]) args);
|
||||
}
|
||||
|
||||
public static Boolean areComplicationsUnicode() {
|
||||
return unicodeComplications;
|
||||
}
|
||||
|
||||
public static String getComplicationTapAction() {
|
||||
return complicationTapAction;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
updatePrefs(sharedPrefs);
|
||||
|
||||
// we trigger update on Complications
|
||||
Intent messageIntent = new Intent();
|
||||
messageIntent.setAction(Intent.ACTION_SEND);
|
||||
LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,411 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationManager;
|
||||
import android.support.wearable.complications.ComplicationProviderService;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.support.wearable.complications.ProviderUpdateRequester;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.aaps;
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.data.ListenerService;
|
||||
import info.nightscout.androidaps.interaction.utils.Constants;
|
||||
import info.nightscout.androidaps.interaction.utils.DisplayFormat;
|
||||
import info.nightscout.androidaps.interaction.utils.Inevitable;
|
||||
import info.nightscout.androidaps.interaction.utils.Persistence;
|
||||
import info.nightscout.androidaps.interaction.utils.WearUtil;
|
||||
|
||||
/**
|
||||
* Base class for all complications
|
||||
*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public abstract class BaseComplicationProviderService extends ComplicationProviderService {
|
||||
|
||||
private static final String TAG = BaseComplicationProviderService.class.getSimpleName();
|
||||
|
||||
private static final String KEY_COMPLICATIONS = "complications";
|
||||
private static final String KEY_LAST_SHOWN_SINCE_VALUE = "lastSince";
|
||||
private static final String KEY_STALE_REPORTED = "staleReported";
|
||||
private static final String TASK_ID_REFRESH_COMPLICATION = "refresh-complication";
|
||||
|
||||
|
||||
private LocalBroadcastManager localBroadcastManager;
|
||||
private MessageReceiver messageReceiver;
|
||||
|
||||
public static void turnOff() {
|
||||
Log.d(TAG, "TURNING OFF all active complications");
|
||||
final Persistence persistence = new Persistence();
|
||||
persistence.putString(KEY_COMPLICATIONS, "");
|
||||
}
|
||||
|
||||
//==============================================================================================
|
||||
// ABSTRACT COMPLICATION INTERFACE
|
||||
//==============================================================================================
|
||||
|
||||
public abstract ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent);
|
||||
public abstract String getProviderCanonicalName();
|
||||
|
||||
public ComplicationAction getComplicationAction() { return ComplicationAction.MENU; };
|
||||
|
||||
//----------------------------------------------------------------------------------------------
|
||||
// DEFAULT BEHAVIOURS
|
||||
//----------------------------------------------------------------------------------------------
|
||||
|
||||
public ComplicationData buildNoSyncComplicationData(int dataType,
|
||||
RawDisplayData raw,
|
||||
PendingIntent complicationPendingIntent,
|
||||
PendingIntent exceptionalPendingIntent,
|
||||
long since) {
|
||||
|
||||
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(dataType);
|
||||
if (dataType != ComplicationData.TYPE_LARGE_IMAGE) {
|
||||
builder.setIcon(Icon.createWithResource(this, R.drawable.ic_sync_alert));
|
||||
}
|
||||
|
||||
if (dataType == ComplicationData.TYPE_RANGED_VALUE) {
|
||||
builder.setMinValue(0);
|
||||
builder.setMaxValue(100);
|
||||
builder.setValue(0);
|
||||
}
|
||||
|
||||
switch (dataType) {
|
||||
case ComplicationData.TYPE_ICON:
|
||||
case ComplicationData.TYPE_SHORT_TEXT:
|
||||
case ComplicationData.TYPE_RANGED_VALUE:
|
||||
if (since > 0) {
|
||||
builder.setShortText(ComplicationText.plainText(DisplayFormat.shortTimeSince(since) + " old"));
|
||||
} else {
|
||||
builder.setShortText(ComplicationText.plainText("!err!"));
|
||||
}
|
||||
break;
|
||||
case ComplicationData.TYPE_LONG_TEXT:
|
||||
builder.setLongTitle(ComplicationText.plainText(aaps.gs(R.string.label_warning_sync)));
|
||||
if (since > 0) {
|
||||
builder.setLongText(ComplicationText.plainText(String.format(aaps.gs(R.string.label_warning_since), DisplayFormat.shortTimeSince(since))));
|
||||
} else {
|
||||
builder.setLongText(ComplicationText.plainText(aaps.gs(R.string.label_warning_sync_aaps)));
|
||||
}
|
||||
break;
|
||||
case ComplicationData.TYPE_LARGE_IMAGE:
|
||||
return buildComplicationData(dataType, raw, complicationPendingIntent);
|
||||
default:
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
builder.setTapAction(exceptionalPendingIntent);
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public ComplicationData buildOutdatedComplicationData(int dataType,
|
||||
RawDisplayData raw,
|
||||
PendingIntent complicationPendingIntent,
|
||||
PendingIntent exceptionalPendingIntent,
|
||||
long since) {
|
||||
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(dataType);
|
||||
if (dataType != ComplicationData.TYPE_LARGE_IMAGE) {
|
||||
builder.setIcon(Icon.createWithResource(this, R.drawable.ic_alert));
|
||||
builder.setBurnInProtectionIcon(Icon.createWithResource(this, R.drawable.ic_alert_burnin));
|
||||
}
|
||||
|
||||
if (dataType == ComplicationData.TYPE_RANGED_VALUE) {
|
||||
builder.setMinValue(0);
|
||||
builder.setMaxValue(100);
|
||||
builder.setValue(0);
|
||||
}
|
||||
|
||||
switch (dataType) {
|
||||
case ComplicationData.TYPE_ICON:
|
||||
case ComplicationData.TYPE_SHORT_TEXT:
|
||||
case ComplicationData.TYPE_RANGED_VALUE:
|
||||
if (since > 0) {
|
||||
builder.setShortText(ComplicationText.plainText(DisplayFormat.shortTimeSince(since) + " old"));
|
||||
} else {
|
||||
builder.setShortText(ComplicationText.plainText("!old!"));
|
||||
}
|
||||
break;
|
||||
case ComplicationData.TYPE_LONG_TEXT:
|
||||
builder.setLongTitle(ComplicationText.plainText(aaps.gs(R.string.label_warning_old)));
|
||||
if (since > 0) {
|
||||
builder.setLongText(ComplicationText.plainText(String.format(aaps.gs(R.string.label_warning_since), DisplayFormat.shortTimeSince(since))));
|
||||
} else {
|
||||
builder.setLongText(ComplicationText.plainText(aaps.gs(R.string.label_warning_sync_aaps)));
|
||||
}
|
||||
break;
|
||||
case ComplicationData.TYPE_LARGE_IMAGE:
|
||||
return buildComplicationData(dataType, raw, complicationPendingIntent);
|
||||
default:
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
builder.setTapAction(exceptionalPendingIntent);
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* If Complication depend on "since" field and need to be updated every minute or not
|
||||
* and need only update when new DisplayRawData arrive
|
||||
*/
|
||||
protected boolean usesSinceField() {
|
||||
return false;
|
||||
}
|
||||
|
||||
//==============================================================================================
|
||||
// COMPLICATION LIFECYCLE
|
||||
//==============================================================================================
|
||||
|
||||
/*
|
||||
* Called when a complication has been activated. The method is for any one-time
|
||||
* (per complication) set-up.
|
||||
*
|
||||
* You can continue sending data for the active complicationId until onComplicationDeactivated()
|
||||
* is called.
|
||||
*/
|
||||
@Override
|
||||
public void onComplicationActivated(
|
||||
int complicationId, int dataType, ComplicationManager complicationManager) {
|
||||
Log.d(TAG, "onComplicationActivated(): " + complicationId + " of kind: "+getProviderCanonicalName());
|
||||
|
||||
Persistence persistence = new Persistence();
|
||||
persistence.putString("complication_"+complicationId, getProviderCanonicalName());
|
||||
persistence.putBoolean("complication_"+complicationId+"_since", usesSinceField());
|
||||
persistence.addToSet(KEY_COMPLICATIONS, "complication_"+complicationId);
|
||||
|
||||
IntentFilter messageFilter = new IntentFilter(Intent.ACTION_SEND);
|
||||
|
||||
messageReceiver = new BaseComplicationProviderService.MessageReceiver();
|
||||
localBroadcastManager = LocalBroadcastManager.getInstance(this);
|
||||
localBroadcastManager.registerReceiver(messageReceiver, messageFilter);
|
||||
|
||||
ListenerService.requestData(this);
|
||||
checkIfUpdateNeeded();
|
||||
}
|
||||
|
||||
/*
|
||||
* Called when the complication needs updated data from your provider. There are four scenarios
|
||||
* when this will happen:
|
||||
*
|
||||
* 1. An active watch face complication is changed to use this provider
|
||||
* 2. A complication using this provider becomes active
|
||||
* 3. The period of time you specified in the manifest has elapsed (UPDATE_PERIOD_SECONDS)
|
||||
* 4. You triggered an update from your own class via the
|
||||
* ProviderUpdateRequester.requestUpdate() method.
|
||||
*/
|
||||
@Override
|
||||
public void onComplicationUpdate(
|
||||
int complicationId, int dataType, ComplicationManager complicationManager) {
|
||||
Log.d(TAG, "onComplicationUpdate() id: " + complicationId + " of class: "+getProviderCanonicalName());
|
||||
|
||||
// Create Tap Action so that the user can checkIfUpdateNeeded an update by tapping the complication.
|
||||
final ComponentName thisProvider = new ComponentName(this, getProviderCanonicalName());
|
||||
|
||||
// We pass the complication id, so we can only update the specific complication tapped.
|
||||
final PendingIntent complicationPendingIntent =
|
||||
ComplicationTapBroadcastReceiver.getTapActionIntent(
|
||||
aaps.getAppContext(), thisProvider, complicationId, getComplicationAction());
|
||||
|
||||
final Persistence persistence = new Persistence();
|
||||
|
||||
final RawDisplayData raw = new RawDisplayData();
|
||||
raw.updateForComplicationsFromPersistence(persistence);
|
||||
Log.d(TAG, "Complication data: " + raw.toDebugString());
|
||||
|
||||
// store what is currently rendered in 'SGV since' field, to detect if it was changed and need update
|
||||
persistence.putString(KEY_LAST_SHOWN_SINCE_VALUE, DisplayFormat.shortTimeSince(raw.datetime));
|
||||
|
||||
// by each render we clear stale flag to ensure it is re-rendered at next refresh detection round
|
||||
persistence.putBoolean(KEY_STALE_REPORTED, false);
|
||||
|
||||
ComplicationData complicationData;
|
||||
|
||||
if (WearUtil.msSince(persistence.whenDataUpdated()) > Constants.STALE_MS) {
|
||||
// no new data arrived - probably configuration or connection error
|
||||
final PendingIntent infoToast = ComplicationTapBroadcastReceiver.getTapWarningSinceIntent(
|
||||
aaps.getAppContext(), thisProvider, complicationId, ComplicationAction.WARNING_SYNC, persistence.whenDataUpdated());
|
||||
complicationData = buildNoSyncComplicationData(dataType, raw, complicationPendingIntent, infoToast, persistence.whenDataUpdated());
|
||||
} else if (WearUtil.msSince(raw.datetime) > Constants.STALE_MS) {
|
||||
// data arriving from phone AAPS, but it is outdated (uploader/NS/xDrip/Sensor error)
|
||||
final PendingIntent infoToast = ComplicationTapBroadcastReceiver.getTapWarningSinceIntent(
|
||||
aaps.getAppContext(), thisProvider, complicationId, ComplicationAction.WARNING_OLD, raw.datetime);
|
||||
complicationData = buildOutdatedComplicationData(dataType, raw, complicationPendingIntent, infoToast, raw.datetime);
|
||||
} else {
|
||||
// data is up-to-date, we can render standard complication
|
||||
complicationData = buildComplicationData(dataType, raw, complicationPendingIntent);
|
||||
}
|
||||
|
||||
if (complicationData != null) {
|
||||
complicationManager.updateComplicationData(complicationId, complicationData);
|
||||
} else {
|
||||
// If no data is sent, we still need to inform the ComplicationManager, so the update
|
||||
// job can finish and the wake lock isn't held any longer than necessary.
|
||||
complicationManager.noUpdateRequired(complicationId);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Called when the complication has been deactivated.
|
||||
*/
|
||||
@Override
|
||||
public void onComplicationDeactivated(int complicationId) {
|
||||
Log.d(TAG, "onComplicationDeactivated(): " + complicationId);
|
||||
|
||||
Persistence persistence = new Persistence();
|
||||
persistence.removeFromSet(KEY_COMPLICATIONS, "complication_"+complicationId);
|
||||
|
||||
if (localBroadcastManager != null && messageReceiver != null) {
|
||||
localBroadcastManager.unregisterReceiver(messageReceiver);
|
||||
}
|
||||
Inevitable.kill(TASK_ID_REFRESH_COMPLICATION);
|
||||
}
|
||||
|
||||
//==============================================================================================
|
||||
// UPDATE AND REFRESH LOGIC
|
||||
//==============================================================================================
|
||||
|
||||
/*
|
||||
* Schedule check for field update
|
||||
*/
|
||||
public static void checkIfUpdateNeeded() {
|
||||
|
||||
Persistence p = new Persistence();
|
||||
|
||||
Log.d(TAG, "Pending check if update needed - "+p.getString(KEY_COMPLICATIONS, ""));
|
||||
|
||||
Inevitable.task(TASK_ID_REFRESH_COMPLICATION, 15 * Constants.SECOND_IN_MS, () -> {
|
||||
if (WearUtil.isBelowRateLimit("complication-checkIfUpdateNeeded", 5)) {
|
||||
Log.d(TAG, "Checking if update needed");
|
||||
requestUpdateIfSinceChanged();
|
||||
// We reschedule need for check - to make sure next check will Inevitable go in next 15s
|
||||
checkIfUpdateNeeded();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if displayed since field (field that shows how old, in minutes, is reading)
|
||||
* is up-to-date or need to be changed (a minute or more elapsed)
|
||||
*/
|
||||
private static void requestUpdateIfSinceChanged() {
|
||||
final Persistence persistence = new Persistence();
|
||||
|
||||
final RawDisplayData raw = new RawDisplayData();
|
||||
raw.updateForComplicationsFromPersistence(persistence);
|
||||
|
||||
final String lastSince = persistence.getString(KEY_LAST_SHOWN_SINCE_VALUE, "-");
|
||||
final String calcSince = DisplayFormat.shortTimeSince(raw.datetime);
|
||||
final boolean isStale = (WearUtil.msSince(persistence.whenDataUpdated()) > Constants.STALE_MS)
|
||||
||(WearUtil.msSince(raw.datetime) > Constants.STALE_MS);
|
||||
|
||||
final boolean staleWasRefreshed = persistence.getBoolean(KEY_STALE_REPORTED, false);
|
||||
final boolean sinceWasChanged = !lastSince.equals(calcSince);
|
||||
|
||||
if (sinceWasChanged|| (isStale && !staleWasRefreshed)) {
|
||||
persistence.putString(KEY_LAST_SHOWN_SINCE_VALUE, calcSince);
|
||||
persistence.putBoolean(KEY_STALE_REPORTED, isStale);
|
||||
|
||||
Log.d(TAG, "Detected refresh of time needed! Reason: "
|
||||
+ (isStale ? "- stale detected": "")
|
||||
+ (sinceWasChanged ? "- since changed from: "+lastSince+" to: "+calcSince : ""));
|
||||
|
||||
if (isStale) {
|
||||
// all complications should update to show offline/old warning
|
||||
requestUpdate(getActiveProviderClasses());
|
||||
} else {
|
||||
// ... but only some require update due to 'since' field change
|
||||
requestUpdate(getSinceDependingProviderClasses());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Request update for specified list of providers
|
||||
*/
|
||||
private static void requestUpdate(Set<String> providers) {
|
||||
for (String provider: providers) {
|
||||
Log.d(TAG, "Pending update of "+provider);
|
||||
// We wait with updating allowing all request, from various sources, to arrive
|
||||
Inevitable.task("update-req-"+provider, 700, () -> {
|
||||
if (WearUtil.isBelowRateLimit("update-req-"+provider, 2)) {
|
||||
Log.d(TAG, "Requesting update of "+provider);
|
||||
final ComponentName componentName = new ComponentName(aaps.getAppContext(), provider);
|
||||
final ProviderUpdateRequester providerUpdateRequester = new ProviderUpdateRequester(aaps.getAppContext(), componentName);
|
||||
providerUpdateRequester.requestUpdateAll();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* List all Complication providing classes that have active (registered) providers
|
||||
*/
|
||||
private static Set<String> getActiveProviderClasses() {
|
||||
Persistence persistence = new Persistence();
|
||||
Set<String> providers = new HashSet<>();
|
||||
Set<String> complications = persistence.getSetOf(KEY_COMPLICATIONS);
|
||||
for (String complication: complications) {
|
||||
final String providerClass = persistence.getString(complication, "");
|
||||
if (providerClass.length() > 0) {
|
||||
providers.add(providerClass);
|
||||
}
|
||||
}
|
||||
return providers;
|
||||
}
|
||||
|
||||
/*
|
||||
* List all Complication providing classes that have active (registered) providers
|
||||
* and additionally they depend on "since" field
|
||||
* == they need to be updated not only on data broadcasts, but every minute or so
|
||||
*/
|
||||
private static Set<String> getSinceDependingProviderClasses() {
|
||||
Persistence persistence = new Persistence();
|
||||
Set<String> providers = new HashSet<>();
|
||||
Set<String> complications = persistence.getSetOf(KEY_COMPLICATIONS);
|
||||
for (String complication: complications) {
|
||||
final String providerClass = persistence.getString(complication, "");
|
||||
final boolean dependOnSince = persistence.getBoolean(complication+"_since", false);
|
||||
if ((providerClass.length() > 0)&&(dependOnSince)) {
|
||||
providers.add(providerClass);
|
||||
}
|
||||
}
|
||||
return providers;
|
||||
}
|
||||
|
||||
/*
|
||||
* Listen to broadcast --> new data was stored by ListenerService to Persistence
|
||||
*/
|
||||
public class MessageReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Set<String> complications = Persistence.setOf(KEY_COMPLICATIONS);
|
||||
if (complications.size() > 0) {
|
||||
checkIfUpdateNeeded();
|
||||
// We request all active providers
|
||||
requestUpdate(getActiveProviderClasses());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.util.Log;
|
||||
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.interaction.utils.DisplayFormat;
|
||||
import info.nightscout.androidaps.interaction.utils.SmallestDoubleString;
|
||||
|
||||
import static info.nightscout.androidaps.interaction.utils.DisplayFormat.MAX_FIELD_LEN_SHORT;
|
||||
import static info.nightscout.androidaps.interaction.utils.DisplayFormat.MIN_FIELD_LEN_COB;
|
||||
import static info.nightscout.androidaps.interaction.utils.DisplayFormat.MIN_FIELD_LEN_IOB;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class BrCobIobComplication extends BaseComplicationProviderService {
|
||||
|
||||
private static final String TAG = BrCobIobComplication.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
if (dataType == ComplicationData.TYPE_SHORT_TEXT) {
|
||||
final String cob = new SmallestDoubleString(raw.sCOB2, SmallestDoubleString.Units.USE).minimise(MIN_FIELD_LEN_COB);
|
||||
final String iob = new SmallestDoubleString(raw.sIOB1, SmallestDoubleString.Units.USE).minimise(Math.max(MIN_FIELD_LEN_IOB, (MAX_FIELD_LEN_SHORT -1) - cob.length()));
|
||||
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
|
||||
.setShortText(ComplicationText.plainText(DisplayFormat.basalRateSymbol()+raw.sBasalRate))
|
||||
.setShortTitle(ComplicationText.plainText(cob + " " + iob))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
|
||||
complicationData = builder.build();
|
||||
} else {
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return BrCobIobComplication.class.getCanonicalName();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.util.Log;
|
||||
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.interaction.utils.DisplayFormat;
|
||||
import info.nightscout.androidaps.interaction.utils.Pair;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class CobDetailedComplication extends BaseComplicationProviderService {
|
||||
|
||||
private static final String TAG = CobDetailedComplication.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
if (dataType == ComplicationData.TYPE_SHORT_TEXT) {
|
||||
|
||||
Pair<String, String> cob = DisplayFormat.detailedCob(raw);
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
|
||||
.setShortText(ComplicationText.plainText(cob.first))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
|
||||
if (cob.second.length() > 0) {
|
||||
builder.setShortTitle(ComplicationText.plainText(cob.second));
|
||||
}
|
||||
|
||||
complicationData = builder.build();
|
||||
} else {
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return CobDetailedComplication.class.getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComplicationAction getComplicationAction() {
|
||||
return ComplicationAction.WIZARD;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.util.Log;
|
||||
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class CobIconComplication extends BaseComplicationProviderService {
|
||||
|
||||
private static final String TAG = CobIconComplication.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
if (dataType == ComplicationData.TYPE_SHORT_TEXT) {
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
|
||||
.setShortText(ComplicationText.plainText(raw.sCOB2))
|
||||
.setIcon(
|
||||
Icon.createWithResource(
|
||||
this, R.drawable.ic_carbs))
|
||||
.setBurnInProtectionIcon(
|
||||
Icon.createWithResource(
|
||||
this, R.drawable.ic_carbs))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
|
||||
complicationData = builder.build();
|
||||
} else {
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return CobIconComplication.class.getCanonicalName();
|
||||
}
|
||||
|
||||
public ComplicationAction getComplicationAction() {
|
||||
return ComplicationAction.WIZARD;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.util.Log;
|
||||
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.interaction.utils.SmallestDoubleString;
|
||||
|
||||
import static info.nightscout.androidaps.interaction.utils.DisplayFormat.MAX_FIELD_LEN_SHORT;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class CobIobComplication extends BaseComplicationProviderService {
|
||||
|
||||
private static final String TAG = CobIobComplication.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
if (dataType == ComplicationData.TYPE_SHORT_TEXT) {
|
||||
final String cob = raw.sCOB2;
|
||||
final String iob = new SmallestDoubleString(raw.sIOB1, SmallestDoubleString.Units.USE).minimise(MAX_FIELD_LEN_SHORT);
|
||||
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
|
||||
.setShortText(ComplicationText.plainText(cob))
|
||||
.setShortTitle(ComplicationText.plainText(iob))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
|
||||
complicationData = builder.build();
|
||||
} else {
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return CobIobComplication.class.getCanonicalName();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
public enum ComplicationAction {
|
||||
NONE,
|
||||
MENU,
|
||||
WIZARD,
|
||||
BOLUS,
|
||||
ECARB,
|
||||
STATUS,
|
||||
WARNING_SYNC,
|
||||
WARNING_OLD
|
||||
}
|
|
@ -0,0 +1,167 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.wearable.complications.ProviderUpdateRequester;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.StringRes;
|
||||
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.aaps;
|
||||
import info.nightscout.androidaps.interaction.actions.BolusActivity;
|
||||
import info.nightscout.androidaps.interaction.actions.ECarbActivity;
|
||||
import info.nightscout.androidaps.interaction.actions.WizardActivity;
|
||||
import info.nightscout.androidaps.interaction.menus.MainMenuActivity;
|
||||
import info.nightscout.androidaps.interaction.menus.StatusMenuActivity;
|
||||
import info.nightscout.androidaps.interaction.utils.Constants;
|
||||
import info.nightscout.androidaps.interaction.utils.DisplayFormat;
|
||||
import info.nightscout.androidaps.interaction.utils.WearUtil;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class ComplicationTapBroadcastReceiver extends BroadcastReceiver {
|
||||
|
||||
private static final String TAG = ComplicationTapBroadcastReceiver.class.getSimpleName();
|
||||
|
||||
private static final String EXTRA_PROVIDER_COMPONENT =
|
||||
"info.nightscout.androidaps.complications.action.PROVIDER_COMPONENT";
|
||||
private static final String EXTRA_COMPLICATION_ID =
|
||||
"info.nightscout.androidaps.complications.action.COMPLICATION_ID";
|
||||
private static final String EXTRA_COMPLICATION_ACTION =
|
||||
"info.nightscout.androidaps.complications.action.COMPLICATION_ACTION";
|
||||
private static final String EXTRA_COMPLICATION_SINCE =
|
||||
"info.nightscout.androidaps.complications.action.COMPLICATION_SINCE";
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Bundle extras = intent.getExtras();
|
||||
ComponentName provider = extras.getParcelable(EXTRA_PROVIDER_COMPONENT);
|
||||
int complicationId = extras.getInt(EXTRA_COMPLICATION_ID);
|
||||
String complicationAction = extras.getString(EXTRA_COMPLICATION_ACTION, ComplicationAction.MENU.toString());
|
||||
|
||||
ComplicationAction action = ComplicationAction.MENU;
|
||||
try {
|
||||
action = ComplicationAction.valueOf(ComplicationAction.class, complicationAction);
|
||||
} catch (IllegalArgumentException | NullPointerException ex) {
|
||||
// but how?
|
||||
Log.e(TAG, "Cannot interpret complication action: "+complicationAction);
|
||||
}
|
||||
|
||||
action = remapActionWithUserPreferences(action);
|
||||
|
||||
// Request an update for the complication that has just been tapped.
|
||||
ProviderUpdateRequester requester = new ProviderUpdateRequester(context, provider);
|
||||
requester.requestUpdate(complicationId);
|
||||
|
||||
Intent intentOpen = null;
|
||||
|
||||
switch (action) {
|
||||
case NONE:
|
||||
// do nothing
|
||||
return;
|
||||
case WIZARD:
|
||||
intentOpen = new Intent(aaps.getAppContext(), WizardActivity.class);
|
||||
break;
|
||||
case BOLUS:
|
||||
intentOpen = new Intent(aaps.getAppContext(), BolusActivity.class);
|
||||
break;
|
||||
case ECARB:
|
||||
intentOpen = new Intent(aaps.getAppContext(), ECarbActivity.class);
|
||||
break;
|
||||
case STATUS:
|
||||
intentOpen = new Intent(aaps.getAppContext(), StatusMenuActivity.class);
|
||||
break;
|
||||
case WARNING_OLD:
|
||||
case WARNING_SYNC:
|
||||
long oneAndHalfMinuteAgo = WearUtil.timestamp() - (Constants.MINUTE_IN_MS+Constants.SECOND_IN_MS * 30);
|
||||
long since = extras.getLong(EXTRA_COMPLICATION_SINCE, oneAndHalfMinuteAgo);
|
||||
@StringRes int labelId = (action == ComplicationAction.WARNING_SYNC) ?
|
||||
R.string.msg_warning_sync : R.string.msg_warning_old;
|
||||
String msg = String.format(aaps.gs(labelId), DisplayFormat.shortTimeSince(since));
|
||||
Toast.makeText(aaps.getAppContext(), msg, Toast.LENGTH_LONG).show();
|
||||
break;
|
||||
case MENU:
|
||||
default:
|
||||
intentOpen = new Intent(aaps.getAppContext(), MainMenuActivity.class);
|
||||
}
|
||||
|
||||
if (intentOpen != null) {
|
||||
// Perform intent - open dialog
|
||||
intentOpen.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
aaps.getAppContext().startActivity(intentOpen);
|
||||
}
|
||||
}
|
||||
|
||||
private ComplicationAction remapActionWithUserPreferences(ComplicationAction originalAction) {
|
||||
final String userPrefAction = aaps.getComplicationTapAction();
|
||||
switch (originalAction) {
|
||||
case WARNING_OLD:
|
||||
case WARNING_SYNC:
|
||||
// warnings cannot be reconfigured by user
|
||||
return originalAction;
|
||||
default:
|
||||
switch (userPrefAction) {
|
||||
case "menu":
|
||||
return ComplicationAction.MENU;
|
||||
case "wizard":
|
||||
return ComplicationAction.WIZARD;
|
||||
case "bolus":
|
||||
return ComplicationAction.BOLUS;
|
||||
case "ecarb":
|
||||
return ComplicationAction.ECARB;
|
||||
case "status":
|
||||
return ComplicationAction.STATUS;
|
||||
case "none":
|
||||
return ComplicationAction.NONE;
|
||||
case "default":
|
||||
default:
|
||||
return originalAction;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a pending intent, suitable for use as a tap intent, that causes a complication to be
|
||||
* toggled and updated.
|
||||
*/
|
||||
static PendingIntent getTapActionIntent(
|
||||
Context context, ComponentName provider, int complicationId, ComplicationAction action) {
|
||||
Intent intent = new Intent(context, ComplicationTapBroadcastReceiver.class);
|
||||
intent.putExtra(EXTRA_PROVIDER_COMPONENT, provider);
|
||||
intent.putExtra(EXTRA_COMPLICATION_ID, complicationId);
|
||||
intent.putExtra(EXTRA_COMPLICATION_ACTION, action.toString());
|
||||
|
||||
|
||||
// Pass complicationId as the requestCode to ensure that different complications get
|
||||
// different intents.
|
||||
return PendingIntent.getBroadcast(
|
||||
context, complicationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a pending intent, suitable for use as a tap intent, that causes a complication to be
|
||||
* toggled and updated.
|
||||
*/
|
||||
static PendingIntent getTapWarningSinceIntent(
|
||||
Context context, ComponentName provider, int complicationId, ComplicationAction action, long since) {
|
||||
Intent intent = new Intent(context, ComplicationTapBroadcastReceiver.class);
|
||||
intent.putExtra(EXTRA_PROVIDER_COMPONENT, provider);
|
||||
intent.putExtra(EXTRA_COMPLICATION_ID, complicationId);
|
||||
intent.putExtra(EXTRA_COMPLICATION_ACTION, action.toString());
|
||||
intent.putExtra(EXTRA_COMPLICATION_SINCE, since);
|
||||
|
||||
|
||||
// Pass complicationId as the requestCode to ensure that different complications get
|
||||
// different intents.
|
||||
return PendingIntent.getBroadcast(
|
||||
context, complicationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.util.Log;
|
||||
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.interaction.utils.DisplayFormat;
|
||||
import info.nightscout.androidaps.interaction.utils.Pair;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class IobDetailedComplication extends BaseComplicationProviderService {
|
||||
|
||||
private static final String TAG = IobDetailedComplication.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
if (dataType == ComplicationData.TYPE_SHORT_TEXT) {
|
||||
|
||||
Pair<String, String> iob = DisplayFormat.detailedIob(raw);
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
|
||||
.setShortText(ComplicationText.plainText(iob.first))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
|
||||
if (iob.second.length() > 0) {
|
||||
builder.setShortTitle(ComplicationText.plainText(iob.second));
|
||||
}
|
||||
|
||||
complicationData = builder.build();
|
||||
} else {
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return IobDetailedComplication.class.getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComplicationAction getComplicationAction() {
|
||||
return ComplicationAction.BOLUS;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.util.Log;
|
||||
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.interaction.utils.SmallestDoubleString;
|
||||
|
||||
import static info.nightscout.androidaps.interaction.utils.DisplayFormat.MAX_FIELD_LEN_SHORT;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class IobIconComplication extends BaseComplicationProviderService {
|
||||
|
||||
private static final String TAG = IobIconComplication.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
if (dataType == ComplicationData.TYPE_SHORT_TEXT) {
|
||||
final String iob = new SmallestDoubleString(raw.sIOB1, SmallestDoubleString.Units.USE).minimise(MAX_FIELD_LEN_SHORT);
|
||||
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
|
||||
.setShortText(ComplicationText.plainText(iob))
|
||||
.setIcon(Icon.createWithResource(
|
||||
this, R.drawable.ic_ins))
|
||||
.setBurnInProtectionIcon(
|
||||
Icon.createWithResource(
|
||||
this, R.drawable.ic_ins_burnin))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
|
||||
complicationData = builder.build();
|
||||
} else {
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return IobIconComplication.class.getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComplicationAction getComplicationAction() {
|
||||
return ComplicationAction.BOLUS;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.util.Log;
|
||||
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.interaction.utils.DisplayFormat;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class LongStatusComplication extends BaseComplicationProviderService {
|
||||
|
||||
private static final String TAG = LongStatusComplication.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
switch (dataType) {
|
||||
case ComplicationData.TYPE_LONG_TEXT:
|
||||
|
||||
final String glucoseLine = DisplayFormat.longGlucoseLine(raw);
|
||||
final String detailsLine = DisplayFormat.longDetailsLine(raw);
|
||||
|
||||
final ComplicationData.Builder builderLong = new ComplicationData.Builder(ComplicationData.TYPE_LONG_TEXT)
|
||||
.setLongTitle(ComplicationText.plainText(glucoseLine))
|
||||
.setLongText(ComplicationText.plainText(detailsLine))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
complicationData = builderLong.build();
|
||||
|
||||
break;
|
||||
default:
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return LongStatusComplication.class.getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean usesSinceField() {
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.util.Log;
|
||||
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.interaction.utils.DisplayFormat;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class LongStatusFlippedComplication extends BaseComplicationProviderService {
|
||||
|
||||
private static final String TAG = LongStatusFlippedComplication.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
switch (dataType) {
|
||||
case ComplicationData.TYPE_LONG_TEXT:
|
||||
|
||||
final String glucoseLine = DisplayFormat.longGlucoseLine(raw);
|
||||
final String detailsLine = DisplayFormat.longDetailsLine(raw);
|
||||
|
||||
final ComplicationData.Builder builderLong = new ComplicationData.Builder(ComplicationData.TYPE_LONG_TEXT)
|
||||
.setLongTitle(ComplicationText.plainText(detailsLine))
|
||||
.setLongText(ComplicationText.plainText(glucoseLine))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
complicationData = builderLong.build();
|
||||
|
||||
break;
|
||||
default:
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return LongStatusFlippedComplication.class.getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean usesSinceField() {
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.util.Log;
|
||||
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.interaction.utils.DisplayFormat;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class SgvComplication extends BaseComplicationProviderService {
|
||||
|
||||
private static final String TAG = SgvComplication.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
switch (dataType) {
|
||||
case ComplicationData.TYPE_SHORT_TEXT:
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
|
||||
.setShortText(ComplicationText.plainText(raw.sSgv + raw.sDirection))
|
||||
.setShortTitle(ComplicationText.plainText(DisplayFormat.shortTrend(raw)))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
|
||||
complicationData = builder.build();
|
||||
break;
|
||||
default:
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return SgvComplication.class.getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean usesSinceField() {
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,114 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.support.wearable.complications.ComplicationText;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class UploaderBattery extends BaseComplicationProviderService {
|
||||
|
||||
private static final String TAG = UploaderBattery.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
@DrawableRes int batteryIcon = R.drawable.ic_battery_unknown;
|
||||
@DrawableRes int burnInBatteryIcon = R.drawable.ic_battery_unknown_burnin;
|
||||
int level = 0;
|
||||
String levelStr = "???";
|
||||
|
||||
if (raw.sUploaderBattery.matches("^[0-9]+$")) {
|
||||
try {
|
||||
level = Integer.parseInt(raw.sUploaderBattery);
|
||||
level = Math.max(Math.min(level, 100), 0);
|
||||
levelStr = level + "%";
|
||||
int iconNo = (int)Math.floor(level / 10.0);
|
||||
if (level > 95) {
|
||||
iconNo = 10;
|
||||
}
|
||||
switch (iconNo) {
|
||||
case 10: batteryIcon = R.drawable.ic_battery_charging_wireless; break;
|
||||
case 9: batteryIcon = R.drawable.ic_battery_charging_wireless_90; break;
|
||||
case 8: batteryIcon = R.drawable.ic_battery_charging_wireless_80; break;
|
||||
case 7: batteryIcon = R.drawable.ic_battery_charging_wireless_70; break;
|
||||
case 6: batteryIcon = R.drawable.ic_battery_charging_wireless_60; break;
|
||||
case 5: batteryIcon = R.drawable.ic_battery_charging_wireless_50; break;
|
||||
case 4: batteryIcon = R.drawable.ic_battery_charging_wireless_40; break;
|
||||
case 3: batteryIcon = R.drawable.ic_battery_charging_wireless_30; break;
|
||||
case 2: batteryIcon = R.drawable.ic_battery_charging_wireless_20; break;
|
||||
case 1: batteryIcon = R.drawable.ic_battery_charging_wireless_10; break;
|
||||
case 0: batteryIcon = R.drawable.ic_battery_alert_variant_outline; break;
|
||||
default: batteryIcon = R.drawable.ic_battery_charging_wireless_outline;
|
||||
}
|
||||
|
||||
switch (iconNo) {
|
||||
case 10: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_burnin; break;
|
||||
case 9: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_90_burnin; break;
|
||||
case 8: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_80_burnin; break;
|
||||
case 7: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_70_burnin; break;
|
||||
case 6: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_60_burnin; break;
|
||||
case 5: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_50_burnin; break;
|
||||
case 4: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_40_burnin; break;
|
||||
case 3: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_30_burnin; break;
|
||||
case 2: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_20_burnin; break;
|
||||
case 1: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_10_burnin; break;
|
||||
case 0: burnInBatteryIcon = R.drawable.ic_battery_alert_variant_outline; break;
|
||||
default: burnInBatteryIcon = R.drawable.ic_battery_charging_wireless_outline;
|
||||
}
|
||||
|
||||
|
||||
} catch (NumberFormatException ex){
|
||||
Log.e(TAG, "Cannot parse battery level of: " + raw.sUploaderBattery);
|
||||
}
|
||||
}
|
||||
|
||||
if (dataType == ComplicationData.TYPE_RANGED_VALUE) {
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_RANGED_VALUE)
|
||||
.setMinValue(0)
|
||||
.setMaxValue(100)
|
||||
.setValue(level)
|
||||
.setShortText(ComplicationText.plainText(levelStr))
|
||||
.setIcon(Icon.createWithResource(this, batteryIcon))
|
||||
.setBurnInProtectionIcon(Icon.createWithResource(this, burnInBatteryIcon))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
complicationData = builder.build();
|
||||
} else if (dataType == ComplicationData.TYPE_SHORT_TEXT) {
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
|
||||
.setShortText(ComplicationText.plainText(levelStr))
|
||||
.setIcon(Icon.createWithResource(this, batteryIcon))
|
||||
.setBurnInProtectionIcon(Icon.createWithResource(this, burnInBatteryIcon))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
complicationData = builder.build();
|
||||
} else if (dataType == ComplicationData.TYPE_ICON) {
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_ICON)
|
||||
.setIcon(Icon.createWithResource(this, batteryIcon))
|
||||
.setBurnInProtectionIcon(Icon.createWithResource(this, burnInBatteryIcon))
|
||||
.setTapAction(complicationPendingIntent);
|
||||
complicationData = builder.build();
|
||||
} else {
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return UploaderBattery.class.getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComplicationAction getComplicationAction() {
|
||||
return ComplicationAction.STATUS;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.res.AssetManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.support.wearable.complications.ComplicationData;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import info.nightscout.androidaps.aaps;
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public abstract class WallpaperComplication extends BaseComplicationProviderService {
|
||||
|
||||
public abstract String getWallpaperAssetsFileName();
|
||||
|
||||
private static final String TAG = WallpaperComplication.class.getSimpleName();
|
||||
|
||||
public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) {
|
||||
|
||||
ComplicationData complicationData = null;
|
||||
|
||||
if (dataType == ComplicationData.TYPE_LARGE_IMAGE) {
|
||||
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
WindowManager windowManager = (WindowManager) aaps.getAppContext()
|
||||
.getSystemService(Context.WINDOW_SERVICE);
|
||||
windowManager.getDefaultDisplay().getMetrics(metrics);
|
||||
int width = metrics.widthPixels;
|
||||
int height = metrics.heightPixels;
|
||||
|
||||
final ComplicationData.Builder builder = new ComplicationData.Builder(ComplicationData.TYPE_LARGE_IMAGE);
|
||||
|
||||
AssetManager assetManager = getAssets();
|
||||
try (InputStream istr = assetManager.open(getWallpaperAssetsFileName())) {
|
||||
Bitmap bitmap = BitmapFactory.decodeStream(istr);
|
||||
Bitmap scaled = Bitmap.createScaledBitmap(bitmap, width, height, true);
|
||||
builder.setLargeImage(Icon.createWithBitmap(scaled));
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Cannot read wallpaper asset: "+e.getMessage(), e);
|
||||
}
|
||||
|
||||
complicationData = builder.build();
|
||||
} else {
|
||||
if (Log.isLoggable(TAG, Log.WARN)) {
|
||||
Log.w(TAG, "Unexpected complication type " + dataType);
|
||||
}
|
||||
}
|
||||
return complicationData;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class WallpaperDarkComplication extends WallpaperComplication {
|
||||
|
||||
@Override
|
||||
public String getWallpaperAssetsFileName() {
|
||||
return "watch_dark.jpg";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return WallpaperDarkComplication.class.getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComplicationAction getComplicationAction() {
|
||||
return ComplicationAction.NONE;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class WallpaperGrayComplication extends WallpaperComplication {
|
||||
|
||||
@Override
|
||||
public String getWallpaperAssetsFileName() {
|
||||
return "watch_gray.jpg";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return WallpaperGrayComplication.class.getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComplicationAction getComplicationAction() {
|
||||
return ComplicationAction.NONE;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package info.nightscout.androidaps.complications;
|
||||
|
||||
/*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class WallpaperLightComplication extends WallpaperComplication {
|
||||
|
||||
@Override
|
||||
public String getWallpaperAssetsFileName() {
|
||||
return "watch_light.jpg";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProviderCanonicalName() {
|
||||
return WallpaperLightComplication.class.getCanonicalName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComplicationAction getComplicationAction() {
|
||||
return ComplicationAction.NONE;
|
||||
};
|
||||
}
|
|
@ -40,6 +40,7 @@ import info.nightscout.androidaps.interaction.AAPSPreferences;
|
|||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.interaction.actions.AcceptActivity;
|
||||
import info.nightscout.androidaps.interaction.actions.CPPActivity;
|
||||
import info.nightscout.androidaps.interaction.utils.Persistence;
|
||||
import info.nightscout.androidaps.interaction.utils.SafeParse;
|
||||
import info.nightscout.androidaps.interaction.utils.WearUtil;
|
||||
|
||||
|
@ -512,12 +513,14 @@ public class ListenerService extends WearableListenerService implements GoogleAp
|
|||
Intent messageIntent = new Intent();
|
||||
messageIntent.setAction(Intent.ACTION_SEND);
|
||||
messageIntent.putExtra("status", dataMap.toBundle());
|
||||
Persistence.storeDataMap(RawDisplayData.STATUS_PERSISTENCE_KEY, dataMap);
|
||||
LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent);
|
||||
} else if (path.equals(BASAL_DATA_PATH)){
|
||||
dataMap = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
|
||||
Intent messageIntent = new Intent();
|
||||
messageIntent.setAction(Intent.ACTION_SEND);
|
||||
messageIntent.putExtra("basals", dataMap.toBundle());
|
||||
Persistence.storeDataMap(RawDisplayData.BASALS_PERSISTENCE_KEY, dataMap);
|
||||
LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent);
|
||||
} else if (path.equals(NEW_PREFERENCES_PATH)){
|
||||
dataMap = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();
|
||||
|
@ -541,6 +544,7 @@ public class ListenerService extends WearableListenerService implements GoogleAp
|
|||
Intent messageIntent = new Intent();
|
||||
messageIntent.setAction(Intent.ACTION_SEND);
|
||||
messageIntent.putExtra("data", dataMap.toBundle());
|
||||
Persistence.storeDataMap(RawDisplayData.DATA_PERSISTENCE_KEY, dataMap);
|
||||
LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,272 @@
|
|||
package info.nightscout.androidaps.data;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.PowerManager;
|
||||
|
||||
import com.google.android.gms.wearable.DataMap;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
import info.nightscout.androidaps.interaction.utils.Constants;
|
||||
import info.nightscout.androidaps.interaction.utils.Persistence;
|
||||
import info.nightscout.androidaps.interaction.utils.WearUtil;
|
||||
|
||||
/**
|
||||
* Holds bunch of data model variables and lists that arrive from phone app and are due to be
|
||||
* displayed on watchface and complications. Keeping them together makes code cleaner and allows
|
||||
* passing it to complications via persistence layer.
|
||||
*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class RawDisplayData {
|
||||
|
||||
static final String DATA_PERSISTENCE_KEY = "raw_data";
|
||||
static final String BASALS_PERSISTENCE_KEY = "raw_basals";
|
||||
static final String STATUS_PERSISTENCE_KEY = "raw_status";
|
||||
|
||||
// data bundle
|
||||
public long sgvLevel = 0;
|
||||
public long datetime;
|
||||
public String sSgv = "---";
|
||||
public String sDirection = "--";
|
||||
public String sDelta = "--";
|
||||
public String sAvgDelta = "--";
|
||||
public String sUnits = "-";
|
||||
|
||||
// status bundle
|
||||
public String sBasalRate = "-.--U/h";
|
||||
public String sUploaderBattery = "--";
|
||||
public String sRigBattery = "--";
|
||||
public boolean detailedIOB = false;
|
||||
public String sIOB1 = "IOB";
|
||||
public String sIOB2 = "-.--";
|
||||
public String sCOB1 = "Carb";
|
||||
public String sCOB2= "--g";
|
||||
public String sBgi = "--";
|
||||
public boolean showBGI = false;
|
||||
public String externalStatusString = "no status";
|
||||
public int batteryLevel = 1;
|
||||
public long openApsStatus = -1;
|
||||
|
||||
// basals bundle
|
||||
public ArrayList<BgWatchData> bgDataList = new ArrayList<>();
|
||||
public ArrayList<TempWatchData> tempWatchDataList = new ArrayList<>();
|
||||
public ArrayList<BasalWatchData> basalWatchDataList = new ArrayList<>();
|
||||
public ArrayList<BolusWatchData> bolusWatchDataList = new ArrayList<>();
|
||||
public ArrayList<BgWatchData> predictionList = new ArrayList<>();
|
||||
|
||||
public String toDebugString() {
|
||||
return "DisplayRawData{" +
|
||||
"sgvLevel=" + sgvLevel +
|
||||
", datetime=" + datetime +
|
||||
", sSgv='" + sSgv + '\'' +
|
||||
", sDirection='" + sDirection + '\'' +
|
||||
", sDelta='" + sDelta + '\'' +
|
||||
", sAvgDelta='" + sAvgDelta + '\'' +
|
||||
", sUnits='" + sUnits + '\'' +
|
||||
", sBasalRate='" + sBasalRate + '\'' +
|
||||
", sUploaderBattery='" + sUploaderBattery + '\'' +
|
||||
", sRigBattery='" + sRigBattery + '\'' +
|
||||
", detailedIOB=" + detailedIOB +
|
||||
", sIOB1='" + sIOB1 + '\'' +
|
||||
", sIOB2='" + sIOB2 + '\'' +
|
||||
", sCOB1='" + sCOB1 + '\'' +
|
||||
", sCOB2='" + sCOB2 + '\'' +
|
||||
", sBgi='" + sBgi + '\'' +
|
||||
", showBGI=" + showBGI +
|
||||
", externalStatusString='" + externalStatusString + '\'' +
|
||||
", batteryLevel=" + batteryLevel +
|
||||
", openApsStatus=" + openApsStatus +
|
||||
", bgDataList size=" + bgDataList.size() +
|
||||
", tempWatchDataList size=" + tempWatchDataList.size() +
|
||||
", basalWatchDataList size=" + basalWatchDataList.size() +
|
||||
", bolusWatchDataLis size=" + bolusWatchDataList.size() +
|
||||
", predictionList size=" + predictionList.size() +
|
||||
'}';
|
||||
}
|
||||
|
||||
public void updateFromPersistence(Persistence persistence) {
|
||||
|
||||
DataMap dataMapData = persistence.getDataMap(DATA_PERSISTENCE_KEY);
|
||||
if (dataMapData != null) {
|
||||
updateData(dataMapData);
|
||||
}
|
||||
DataMap dataMapStatus = persistence.getDataMap(STATUS_PERSISTENCE_KEY);
|
||||
if (dataMapStatus != null) {
|
||||
updateStatus(dataMapStatus);
|
||||
}
|
||||
DataMap dataMapBasals = persistence.getDataMap(BASALS_PERSISTENCE_KEY);
|
||||
if (dataMapBasals != null) {
|
||||
updateBasals(dataMapBasals);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Since complications do not need Basals, we skip them for performance
|
||||
*/
|
||||
public void updateForComplicationsFromPersistence(Persistence persistence) {
|
||||
|
||||
DataMap dataMapData = persistence.getDataMap(DATA_PERSISTENCE_KEY);
|
||||
if (dataMapData != null) {
|
||||
updateData(dataMapData);
|
||||
}
|
||||
DataMap dataMapStatus = persistence.getDataMap(STATUS_PERSISTENCE_KEY);
|
||||
if (dataMapStatus != null) {
|
||||
updateStatus(dataMapStatus);
|
||||
}
|
||||
}
|
||||
|
||||
public DataMap updateDataFromMessage(Intent intent, PowerManager.WakeLock wakeLock) {
|
||||
Bundle bundle = intent.getBundleExtra("data");
|
||||
if (bundle != null) {
|
||||
DataMap dataMap = WearUtil.bundleToDataMap(bundle);
|
||||
updateData(dataMap);
|
||||
return dataMap;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void updateData(DataMap dataMap) {
|
||||
WearUtil.getWakeLock("readingPrefs", 50);
|
||||
sgvLevel = dataMap.getLong("sgvLevel");
|
||||
datetime = dataMap.getLong("timestamp");
|
||||
sSgv = dataMap.getString("sgvString");
|
||||
sDirection = dataMap.getString("slopeArrow");
|
||||
sDelta = dataMap.getString("delta");
|
||||
sAvgDelta = dataMap.getString("avgDelta");
|
||||
sUnits = dataMap.getString("glucoseUnits");
|
||||
}
|
||||
|
||||
public DataMap updateStatusFromMessage(Intent intent, PowerManager.WakeLock wakeLock) {
|
||||
Bundle bundle = intent.getBundleExtra("status");
|
||||
if (bundle != null) {
|
||||
DataMap dataMap = WearUtil.bundleToDataMap(bundle);
|
||||
updateStatus(dataMap);
|
||||
return dataMap;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void updateStatus(DataMap dataMap) {
|
||||
WearUtil.getWakeLock("readingPrefs", 50);
|
||||
sBasalRate = dataMap.getString("currentBasal");
|
||||
sUploaderBattery = dataMap.getString("battery");
|
||||
sRigBattery = dataMap.getString("rigBattery");
|
||||
detailedIOB = dataMap.getBoolean("detailedIob");
|
||||
sIOB1 = dataMap.getString("iobSum") + "U";
|
||||
sIOB2 = dataMap.getString("iobDetail");
|
||||
sCOB1 = "Carb";
|
||||
sCOB2 = dataMap.getString("cob");
|
||||
sBgi = dataMap.getString("bgi");
|
||||
showBGI = dataMap.getBoolean("showBgi");
|
||||
externalStatusString = dataMap.getString("externalStatusString");
|
||||
batteryLevel = dataMap.getInt("batteryLevel");
|
||||
openApsStatus = dataMap.getLong("openApsStatus");
|
||||
}
|
||||
|
||||
public DataMap updateBasalsFromMessage(Intent intent, PowerManager.WakeLock wakeLock) {
|
||||
Bundle bundle = intent.getBundleExtra("basals");
|
||||
if (bundle != null) {
|
||||
DataMap dataMap = WearUtil.bundleToDataMap(bundle);
|
||||
updateBasals(dataMap);
|
||||
return dataMap;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void updateBasals(DataMap dataMap) {
|
||||
WearUtil.getWakeLock("readingPrefs", 500);
|
||||
loadBasalsAndTemps(dataMap);
|
||||
}
|
||||
|
||||
private void loadBasalsAndTemps(DataMap dataMap) {
|
||||
ArrayList<DataMap> temps = dataMap.getDataMapArrayList("temps");
|
||||
if (temps != null) {
|
||||
tempWatchDataList = new ArrayList<>();
|
||||
for (DataMap temp : temps) {
|
||||
TempWatchData twd = new TempWatchData();
|
||||
twd.startTime = temp.getLong("starttime");
|
||||
twd.startBasal = temp.getDouble("startBasal");
|
||||
twd.endTime = temp.getLong("endtime");
|
||||
twd.endBasal = temp.getDouble("endbasal");
|
||||
twd.amount = temp.getDouble("amount");
|
||||
tempWatchDataList.add(twd);
|
||||
}
|
||||
}
|
||||
ArrayList<DataMap> basals = dataMap.getDataMapArrayList("basals");
|
||||
if (basals != null) {
|
||||
basalWatchDataList = new ArrayList<>();
|
||||
for (DataMap basal : basals) {
|
||||
BasalWatchData bwd = new BasalWatchData();
|
||||
bwd.startTime = basal.getLong("starttime");
|
||||
bwd.endTime = basal.getLong("endtime");
|
||||
bwd.amount = basal.getDouble("amount");
|
||||
basalWatchDataList.add(bwd);
|
||||
}
|
||||
}
|
||||
ArrayList<DataMap> boluses = dataMap.getDataMapArrayList("boluses");
|
||||
if (boluses != null) {
|
||||
bolusWatchDataList = new ArrayList<>();
|
||||
for (DataMap bolus : boluses) {
|
||||
BolusWatchData bwd = new BolusWatchData();
|
||||
bwd.date = bolus.getLong("date");
|
||||
bwd.bolus = bolus.getDouble("bolus");
|
||||
bwd.carbs = bolus.getDouble("carbs");
|
||||
bwd.isSMB = bolus.getBoolean("isSMB");
|
||||
bwd.isValid = bolus.getBoolean("isValid");
|
||||
bolusWatchDataList.add(bwd);
|
||||
}
|
||||
}
|
||||
ArrayList<DataMap> predictions = dataMap.getDataMapArrayList("predictions");
|
||||
if (boluses != null) {
|
||||
predictionList = new ArrayList<>();
|
||||
for (DataMap prediction : predictions) {
|
||||
BgWatchData bwd = new BgWatchData();
|
||||
bwd.timestamp = prediction.getLong("timestamp");
|
||||
bwd.sgv = prediction.getDouble("sgv");
|
||||
bwd.color = prediction.getInt("color");
|
||||
predictionList.add(bwd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addToWatchSet(DataMap dataMap) {
|
||||
ArrayList<DataMap> entries = dataMap.getDataMapArrayList("entries");
|
||||
if (entries != null) {
|
||||
bgDataList = new ArrayList<>();
|
||||
for (DataMap entry : entries) {
|
||||
double sgv = entry.getDouble("sgvDouble");
|
||||
double high = entry.getDouble("high");
|
||||
double low = entry.getDouble("low");
|
||||
long timestamp = entry.getLong("timestamp");
|
||||
int color = entry.getInt("color", 0);
|
||||
bgDataList.add(new BgWatchData(sgv, high, low, timestamp, color));
|
||||
}
|
||||
} else {
|
||||
double sgv = dataMap.getDouble("sgvDouble");
|
||||
double high = dataMap.getDouble("high");
|
||||
double low = dataMap.getDouble("low");
|
||||
long timestamp = dataMap.getLong("timestamp");
|
||||
int color = dataMap.getInt("color", 0);
|
||||
|
||||
final int size = bgDataList.size();
|
||||
if (size > 0) {
|
||||
if (bgDataList.get(size - 1).timestamp == timestamp)
|
||||
return; // Ignore duplicates.
|
||||
}
|
||||
|
||||
bgDataList.add(new BgWatchData(sgv, high, low, timestamp, color));
|
||||
}
|
||||
|
||||
// We use iterator instead for-loop because we iterate and remove on the go
|
||||
Iterator itr = bgDataList.iterator();
|
||||
while (itr.hasNext()) {
|
||||
BgWatchData entry = (BgWatchData)itr.next();
|
||||
if (entry.timestamp < (WearUtil.timestamp() - (Constants.HOUR_IN_MS * 5))) {
|
||||
itr.remove(); //Get rid of anything more than 5 hours old
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package info.nightscout.androidaps.interaction.utils;
|
||||
|
||||
public class Constants {
|
||||
|
||||
public static final long SECOND_IN_MS = 1000;
|
||||
public static final long MINUTE_IN_MS = 60000;
|
||||
public static final long HOUR_IN_MS = 3600000;
|
||||
public static final long DAY_IN_MS = 86400000;
|
||||
public static final long WEEK_IN_MS = DAY_IN_MS * 7;
|
||||
public static final long MONTH_IN_MS = DAY_IN_MS * 30;
|
||||
|
||||
public static final long STALE_MS = Constants.MINUTE_IN_MS * 12;
|
||||
|
||||
}
|
|
@ -0,0 +1,143 @@
|
|||
package info.nightscout.androidaps.interaction.utils;
|
||||
|
||||
import info.nightscout.androidaps.aaps;
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
|
||||
public class DisplayFormat {
|
||||
|
||||
/**
|
||||
* Maximal and minimal lengths of fields/labels shown in complications, in characters
|
||||
* For MAX values - above that WearOS and watch faces may start ellipsize (...) contents
|
||||
* For MIN values - this is minimal length that can hold legible data
|
||||
*/
|
||||
public static final int MAX_FIELD_LEN_LONG = 22; // this is found out empirical, for TYPE_LONG_TEXT
|
||||
public static final int MAX_FIELD_LEN_SHORT = 7; // according to Wear OS docs for TYPE_SHORT_TEXT
|
||||
public static final int MIN_FIELD_LEN_COB = 3; // since carbs are usually 0..99g
|
||||
public static final int MIN_FIELD_LEN_IOB = 3; // IoB can range from like .1U to 99U
|
||||
|
||||
public static String deltaSymbol() {
|
||||
return aaps.areComplicationsUnicode() ? "\u0394" : "";
|
||||
}
|
||||
|
||||
public static String verticalSeparatorSymbol() {
|
||||
return aaps.areComplicationsUnicode() ? "\u205E" : "|";
|
||||
}
|
||||
|
||||
public static String basalRateSymbol() {
|
||||
return aaps.areComplicationsUnicode() ? "\u238D\u2006" : "";
|
||||
}
|
||||
|
||||
public static String shortTimeSince(final long refTime) {
|
||||
|
||||
long deltaTimeMs = WearUtil.msSince(refTime);
|
||||
|
||||
if (deltaTimeMs < Constants.MINUTE_IN_MS) {
|
||||
return "0'";
|
||||
} else if (deltaTimeMs < Constants.HOUR_IN_MS) {
|
||||
int minutes = (int) (deltaTimeMs / Constants.MINUTE_IN_MS);
|
||||
return minutes + "'";
|
||||
} else if (deltaTimeMs < Constants.DAY_IN_MS) {
|
||||
int hours = (int) (deltaTimeMs / Constants.HOUR_IN_MS);
|
||||
return hours + "h";
|
||||
} else {
|
||||
int days = (int) (deltaTimeMs / Constants.DAY_IN_MS);
|
||||
if (days < 7) {
|
||||
return days + "d";
|
||||
} else {
|
||||
int weeks = days / 7;
|
||||
return weeks + "w";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static String shortTrend(final RawDisplayData raw) {
|
||||
String minutes = "--";
|
||||
if (raw.datetime > 0) {
|
||||
minutes = shortTimeSince(raw.datetime);
|
||||
}
|
||||
|
||||
if (minutes.length() + raw.sDelta.length() + deltaSymbol().length() + 1 <= MAX_FIELD_LEN_SHORT) {
|
||||
return minutes + " " + deltaSymbol() + raw.sDelta;
|
||||
}
|
||||
|
||||
// that only optimizes obvious things like 0 before . or at end, + at beginning
|
||||
String delta = (new SmallestDoubleString(raw.sDelta)).minimise(MAX_FIELD_LEN_SHORT -1);
|
||||
if (minutes.length() + delta.length() + deltaSymbol().length() + 1 <= MAX_FIELD_LEN_SHORT) {
|
||||
return minutes + " " + deltaSymbol() + delta;
|
||||
}
|
||||
|
||||
String shortDelta = (new SmallestDoubleString(raw.sDelta)).minimise(MAX_FIELD_LEN_SHORT -(1+minutes.length()));
|
||||
|
||||
return minutes + " " + shortDelta;
|
||||
}
|
||||
|
||||
public static String longGlucoseLine(final RawDisplayData raw) {
|
||||
return raw.sSgv + raw.sDirection + " " + deltaSymbol() + (new SmallestDoubleString(raw.sDelta)).minimise(8) + " (" + shortTimeSince(raw.datetime) + ")";
|
||||
}
|
||||
|
||||
public static String longDetailsLine(final RawDisplayData raw) {
|
||||
|
||||
final String SEP_LONG = " " + verticalSeparatorSymbol() + " ";
|
||||
final String SEP_SHORT = " " + verticalSeparatorSymbol() + " ";
|
||||
final int SEP_SHORT_LEN = SEP_SHORT.length();
|
||||
final String SEP_MIN = " ";
|
||||
|
||||
String line = raw.sCOB2 + SEP_LONG + raw.sIOB1 + SEP_LONG + basalRateSymbol()+raw.sBasalRate;
|
||||
if (line.length() <= MAX_FIELD_LEN_LONG) {
|
||||
return line;
|
||||
}
|
||||
line = raw.sCOB2 + SEP_SHORT + raw.sIOB1 + SEP_SHORT + raw.sBasalRate;
|
||||
if (line.length() <= MAX_FIELD_LEN_LONG) {
|
||||
return line;
|
||||
}
|
||||
|
||||
int remainingMax = MAX_FIELD_LEN_LONG - (raw.sCOB2.length() + raw.sBasalRate.length() + SEP_SHORT_LEN*2);
|
||||
final String smallestIoB = new SmallestDoubleString(raw.sIOB1, SmallestDoubleString.Units.USE).minimise(Math.max(MIN_FIELD_LEN_IOB, remainingMax));
|
||||
line = raw.sCOB2 + SEP_SHORT + smallestIoB + SEP_SHORT + raw.sBasalRate;
|
||||
if (line.length() <= MAX_FIELD_LEN_LONG) {
|
||||
return line;
|
||||
}
|
||||
|
||||
remainingMax = MAX_FIELD_LEN_LONG - (smallestIoB.length() + raw.sBasalRate.length() + SEP_SHORT_LEN*2);
|
||||
final String simplifiedCob = new SmallestDoubleString(raw.sCOB2, SmallestDoubleString.Units.USE).minimise(Math.max(MIN_FIELD_LEN_COB, remainingMax));
|
||||
|
||||
line = simplifiedCob + SEP_SHORT + smallestIoB + SEP_SHORT + raw.sBasalRate;
|
||||
if (line.length() <= MAX_FIELD_LEN_LONG) {
|
||||
return line;
|
||||
}
|
||||
|
||||
line = simplifiedCob + SEP_MIN + smallestIoB + SEP_MIN + raw.sBasalRate;
|
||||
|
||||
return line;
|
||||
}
|
||||
|
||||
public static Pair<String, String> detailedIob(RawDisplayData raw) {
|
||||
final String iob1 = new SmallestDoubleString(raw.sIOB1, SmallestDoubleString.Units.USE).minimise(MAX_FIELD_LEN_SHORT);
|
||||
String iob2 = "";
|
||||
if (raw.sIOB2.contains("|")) {
|
||||
String[] iobs = raw.sIOB2.replace("(", "").replace(")", "").split("\\|");
|
||||
|
||||
String iobBolus = new SmallestDoubleString(iobs[0]).minimise(MIN_FIELD_LEN_IOB);
|
||||
if (iobBolus.trim().length() == 0) {
|
||||
iobBolus = "--";
|
||||
}
|
||||
String iobBasal = new SmallestDoubleString(iobs[1]).minimise((MAX_FIELD_LEN_SHORT -1) - Math.max(MIN_FIELD_LEN_IOB, iobBolus.length()));
|
||||
if (iobBasal.trim().length() == 0) {
|
||||
iobBasal = "--";
|
||||
}
|
||||
iob2 = iobBolus+" "+iobBasal;
|
||||
}
|
||||
return Pair.create(iob1, iob2);
|
||||
}
|
||||
|
||||
public static Pair<String, String> detailedCob(final RawDisplayData raw) {
|
||||
SmallestDoubleString cobMini = new SmallestDoubleString(raw.sCOB2, SmallestDoubleString.Units.USE);
|
||||
|
||||
String cob2 = "";
|
||||
if (cobMini.getExtra().length() > 0) {
|
||||
cob2 = cobMini.getExtra() + cobMini.getUnits();
|
||||
}
|
||||
final String cob1 = cobMini.minimise(MAX_FIELD_LEN_SHORT);
|
||||
return Pair.create(cob1, cob2);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
package info.nightscout.androidaps.interaction.utils;
|
||||
|
||||
import android.os.PowerManager;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import info.nightscout.androidaps.BuildConfig;
|
||||
|
||||
/**
|
||||
* Created for xDrip by jamorham on 07/03/2018
|
||||
* Adapted for AAPS by dlvoy on 2019-11-11
|
||||
*
|
||||
* Tasks which are fired from events can be scheduled here and only execute when they become idle
|
||||
* and are not being rescheduled within their wait window.
|
||||
*
|
||||
*/
|
||||
|
||||
public class Inevitable {
|
||||
|
||||
private static final String TAG = Inevitable.class.getSimpleName();
|
||||
private static final int MAX_QUEUE_TIME = (int) Constants.MINUTE_IN_MS * 6;
|
||||
private static final boolean debug = BuildConfig.DEBUG;
|
||||
|
||||
private static final ConcurrentHashMap<String, Task> tasks = new ConcurrentHashMap<>();
|
||||
|
||||
public static synchronized void task(final String id, long idle_for, Runnable runnable) {
|
||||
if (idle_for > MAX_QUEUE_TIME) {
|
||||
throw new RuntimeException(id + " Requested time: " + idle_for + " beyond max queue time");
|
||||
}
|
||||
final Task task = tasks.get(id);
|
||||
if (task != null) {
|
||||
// if it already exists then extend the time
|
||||
task.extendTime(idle_for);
|
||||
|
||||
if (debug)
|
||||
Log.d(TAG, "Extending time for: " + id + " to " + WearUtil.dateTimeText(task.when));
|
||||
} else {
|
||||
// otherwise create new task
|
||||
if (runnable == null) return; // extension only if already exists
|
||||
tasks.put(id, new Task(id, idle_for, runnable));
|
||||
|
||||
if (debug) {
|
||||
Log.d(TAG, "Creating task: " + id + " due: " + WearUtil.dateTimeText(tasks.get(id).when));
|
||||
}
|
||||
|
||||
// create a thread to wait and execute in background
|
||||
final Thread t = new Thread(() -> {
|
||||
final PowerManager.WakeLock wl = WearUtil.getWakeLock(id, MAX_QUEUE_TIME + 5000);
|
||||
try {
|
||||
boolean running = true;
|
||||
// wait for task to be due or killed
|
||||
while (running) {
|
||||
WearUtil.threadSleep(500);
|
||||
final Task thisTask = tasks.get(id);
|
||||
running = thisTask != null && !thisTask.poll();
|
||||
}
|
||||
} finally {
|
||||
WearUtil.releaseWakeLock(wl);
|
||||
}
|
||||
});
|
||||
t.setPriority(Thread.MIN_PRIORITY);
|
||||
t.start();
|
||||
}
|
||||
}
|
||||
|
||||
public static synchronized void stackableTask(String id, long idle_for, Runnable runnable) {
|
||||
int stack = 0;
|
||||
while (tasks.get(id = id + "-" + stack) != null) {
|
||||
stack++;
|
||||
}
|
||||
if (stack > 0) {
|
||||
Log.d(TAG, "Task stacked to: " + id);
|
||||
}
|
||||
task(id, idle_for, runnable);
|
||||
}
|
||||
|
||||
public static void kill(final String id) {
|
||||
tasks.remove(id);
|
||||
}
|
||||
|
||||
public static boolean waiting(final String id) {
|
||||
return tasks.containsKey(id);
|
||||
}
|
||||
|
||||
private static class Task {
|
||||
private long when;
|
||||
private final Runnable what;
|
||||
private final String id;
|
||||
|
||||
Task(String id, long offset, Runnable what) {
|
||||
this.what = what;
|
||||
this.id = id;
|
||||
extendTime(offset);
|
||||
}
|
||||
|
||||
public void extendTime(long offset) {
|
||||
this.when = WearUtil.timestamp() + offset;
|
||||
}
|
||||
|
||||
public boolean poll() {
|
||||
final long till = WearUtil.msTill(when);
|
||||
if (till < 1) {
|
||||
if (debug) Log.d(TAG, "Executing task! " + this.id);
|
||||
tasks.remove(this.id); // early remove to allow overlapping scheduling
|
||||
what.run();
|
||||
return true;
|
||||
} else if (till > MAX_QUEUE_TIME) {
|
||||
Log.wtf(TAG, "Task: " + this.id + " In queue too long: " + till);
|
||||
tasks.remove(this.id);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package info.nightscout.androidaps.interaction.utils;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Same as android Pair, but clean room java class - does not require Android SDK for tests
|
||||
*/
|
||||
public class Pair<F, S> {
|
||||
|
||||
public final F first;
|
||||
public final S second;
|
||||
|
||||
public Pair(F first, S second) {
|
||||
this.first = first;
|
||||
this.second = second;
|
||||
}
|
||||
|
||||
public static <F, S> Pair<F, S> create(F f, S s) {
|
||||
return new Pair<>(f, s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(java.lang.Object o) {
|
||||
if (o instanceof Pair) {
|
||||
return ((Pair) o).first.equals(first) && ((Pair) o).second.equals(second);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "First: \""+first.toString()+"\" Second: \""+second.toString()+"\"";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(first, second);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
package info.nightscout.androidaps.interaction.utils;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.util.Base64;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.google.android.gms.wearable.DataMap;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import info.nightscout.androidaps.aaps;
|
||||
|
||||
/**
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class Persistence {
|
||||
|
||||
final SharedPreferences preferences;
|
||||
public static final String COMPLICATION_PROVIDER_PREFERENCES_FILE_KEY =
|
||||
"info.nightscout.androidaps.complications.COMPLICATION_PROVIDER_PREFERENCES_FILE_KEY";
|
||||
|
||||
public Persistence() {
|
||||
preferences = aaps.getAppContext().getSharedPreferences(COMPLICATION_PROVIDER_PREFERENCES_FILE_KEY, 0);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public DataMap getDataMap(String key) {
|
||||
if (preferences.contains(key)) {
|
||||
final String rawB64Data = preferences.getString(key, null);
|
||||
byte[] rawData = Base64.decode(rawB64Data, Base64.DEFAULT);
|
||||
try {
|
||||
return DataMap.fromByteArray(rawData);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
// Should never happen, and if it happen - we ignore and fallback to null
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void putDataMap(String key, DataMap dataMap) {
|
||||
preferences.edit().putString(key, Base64.encodeToString(dataMap.toByteArray(), Base64.DEFAULT)).apply();
|
||||
}
|
||||
|
||||
public String getString(String key, String defaultValue) {
|
||||
return preferences.getString(key, defaultValue);
|
||||
}
|
||||
|
||||
public void putString(String key, String value) {
|
||||
preferences.edit().putString(key, value).apply();
|
||||
}
|
||||
|
||||
public boolean getBoolean(String key, boolean defaultValue) {
|
||||
return preferences.getBoolean(key, defaultValue);
|
||||
}
|
||||
|
||||
public void putBoolean(String key, boolean value) {
|
||||
preferences.edit().putBoolean(key, value).apply();
|
||||
}
|
||||
|
||||
public long whenDataUpdated() {
|
||||
return preferences.getLong("data_updated_at", 0);
|
||||
}
|
||||
|
||||
private void markDataUpdated() {
|
||||
preferences.edit().putLong("data_updated_at", WearUtil.timestamp()).apply();
|
||||
}
|
||||
|
||||
public Set<String> getSetOf(String key) {
|
||||
return WearUtil.explodeSet(getString(key, ""), "|");
|
||||
}
|
||||
|
||||
public void addToSet(String key, String value) {
|
||||
final Set<String> set = WearUtil.explodeSet(getString(key, ""), "|");
|
||||
set.add(value);
|
||||
putString(key, WearUtil.joinSet(set, "|"));
|
||||
}
|
||||
|
||||
public void removeFromSet(String key, String value) {
|
||||
final Set<String> set = WearUtil.explodeSet(getString(key, ""), "|");
|
||||
set.remove(value);
|
||||
putString(key, WearUtil.joinSet(set, "|"));
|
||||
}
|
||||
|
||||
public static void storeDataMap(String key, DataMap dataMap) {
|
||||
Persistence p = new Persistence();
|
||||
p.putDataMap(key, dataMap);
|
||||
p.markDataUpdated();
|
||||
}
|
||||
|
||||
public static Set<String> setOf(String key) {
|
||||
Persistence p = new Persistence();
|
||||
return p.getSetOf(key);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,135 @@
|
|||
package info.nightscout.androidaps.interaction.utils;
|
||||
|
||||
import java.math.RoundingMode;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Helper to minimise various floating point values, with or without unit, to fit into specified
|
||||
* and limited size, scarifying precision (rounding up) and extra characters like leading zero,
|
||||
* following zero(s) in fractional part, extra plus sign etc.
|
||||
*
|
||||
* Created by dlvoy on 2019-11-12
|
||||
*/
|
||||
public class SmallestDoubleString {
|
||||
|
||||
private String sign = "";
|
||||
private String decimal = "";
|
||||
private String separator = "";
|
||||
private String fractional = "";
|
||||
private String extra = "";
|
||||
private String units = "";
|
||||
|
||||
private final Units withUnits;
|
||||
|
||||
public enum Units {
|
||||
SKIP,
|
||||
USE
|
||||
}
|
||||
|
||||
private static Pattern pattern = Pattern.compile("^([+-]?)([0-9]*)([,.]?)([0-9]*)(\\([^)]*\\))?(.*?)$", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE );
|
||||
|
||||
public SmallestDoubleString(String inputString) {
|
||||
this(inputString, Units.SKIP);
|
||||
}
|
||||
|
||||
public SmallestDoubleString(String inputString, Units withUnits) {
|
||||
Matcher matcher = pattern.matcher(inputString);
|
||||
matcher.matches();
|
||||
|
||||
sign = matcher.group(1);
|
||||
decimal = matcher.group(2);
|
||||
separator = matcher.group(3);
|
||||
fractional = matcher.group(4);
|
||||
units = matcher.group(6);
|
||||
|
||||
if (fractional == null || fractional.length() == 0) {
|
||||
separator = "";
|
||||
fractional = "";
|
||||
}
|
||||
if (decimal == null || decimal.length() == 0) {
|
||||
decimal = "";
|
||||
}
|
||||
if (separator == null || separator.length() == 0) {
|
||||
separator = "";
|
||||
}
|
||||
if (sign == null || sign.length() == 0) {
|
||||
sign = "";
|
||||
}
|
||||
|
||||
final String extraCandidate = matcher.group(5);
|
||||
if (extraCandidate != null && extraCandidate.length() > 2) {
|
||||
extra = extraCandidate.substring(1, extraCandidate.length()-1);
|
||||
}
|
||||
|
||||
if (units != null) {
|
||||
units = units.trim();
|
||||
}
|
||||
|
||||
this.withUnits = withUnits;
|
||||
}
|
||||
|
||||
public String minimise(int maxSize) {
|
||||
final String originalSeparator = separator;
|
||||
|
||||
if (Integer.parseInt("0"+fractional) == 0) {
|
||||
separator = "";
|
||||
fractional = "";
|
||||
}
|
||||
if (Integer.parseInt("0"+decimal) == 0 && (fractional.length() >0)) {
|
||||
decimal = "";
|
||||
}
|
||||
if (currentLen() <= maxSize)
|
||||
return toString();
|
||||
|
||||
if (sign.equals("+")) {
|
||||
sign = "";
|
||||
}
|
||||
if (currentLen() <= maxSize) {
|
||||
return toString();
|
||||
}
|
||||
|
||||
while ((fractional.length() > 1)&&(fractional.charAt(fractional.length()-1) == '0')) {
|
||||
fractional = fractional.substring(0, fractional.length()-1);
|
||||
}
|
||||
if (currentLen() <= maxSize) {
|
||||
return toString();
|
||||
}
|
||||
|
||||
if (fractional.length() > 0) {
|
||||
int remainingForFraction = maxSize-currentLen()+fractional.length();
|
||||
String formatCandidate = "#";
|
||||
if (remainingForFraction>=1) {
|
||||
formatCandidate = "#."+("#######".substring(0, remainingForFraction));
|
||||
}
|
||||
DecimalFormat df = new DecimalFormat(formatCandidate);
|
||||
df.setRoundingMode(RoundingMode.HALF_UP);
|
||||
|
||||
final String decimalSup = (decimal.length() > 0) ? decimal : "0";
|
||||
String result = sign + df.format(Double.parseDouble(decimalSup+"."+fractional)).replace(",", originalSeparator).replace(".", originalSeparator) +
|
||||
((withUnits == Units.USE) ? units : "");
|
||||
return (decimal.length() > 0) ? result : result.substring(1);
|
||||
}
|
||||
return toString();
|
||||
}
|
||||
|
||||
private int currentLen() {
|
||||
return sign.length() + decimal.length() + separator.length() + fractional.length() +
|
||||
((withUnits == Units.USE) ? units.length() : 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return sign+decimal+separator+fractional +
|
||||
((withUnits == Units.USE) ? units : "");
|
||||
}
|
||||
|
||||
public String getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
public String getUnits() { return units; }
|
||||
|
||||
|
||||
}
|
|
@ -1,19 +1,134 @@
|
|||
package info.nightscout.androidaps.interaction.utils;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.PowerManager;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.android.gms.wearable.DataMap;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import info.nightscout.androidaps.aaps;
|
||||
|
||||
/**
|
||||
* Created by andy on 3/5/19.
|
||||
* Adapted by dlvoy on 2019-11-06 using code from jamorham JoH class
|
||||
*/
|
||||
|
||||
public class WearUtil {
|
||||
|
||||
private final static boolean debug_wakelocks = false;
|
||||
private static final Map<String, Long> rateLimits = new HashMap<String, Long>();
|
||||
private static final String TAG = WearUtil.class.getName();
|
||||
|
||||
//==============================================================================================
|
||||
// Time related util methods
|
||||
//==============================================================================================
|
||||
|
||||
public static String dateTimeText(long timeInMs) {
|
||||
Date d = new Date(timeInMs);
|
||||
return "" + d.getDay() + "." + d.getMonth() + "." + d.getYear() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
|
||||
}
|
||||
|
||||
public static long timestamp() {
|
||||
return System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public static long msSince(long when) {
|
||||
return (timestamp() - when);
|
||||
}
|
||||
|
||||
public static long msTill(long when) {
|
||||
return (when - timestamp());
|
||||
}
|
||||
|
||||
//==============================================================================================
|
||||
// Thread and power management utils
|
||||
//==============================================================================================
|
||||
|
||||
// return true if below rate limit
|
||||
public static synchronized boolean isBelowRateLimit(String named, int onceForSeconds) {
|
||||
// check if over limit
|
||||
if ((rateLimits.containsKey(named)) && (timestamp() - rateLimits.get(named) < (onceForSeconds * 1000))) {
|
||||
Log.d(TAG, named + " rate limited to one for " + onceForSeconds + " seconds");
|
||||
return false;
|
||||
}
|
||||
// not over limit
|
||||
rateLimits.put(named, timestamp());
|
||||
return true;
|
||||
}
|
||||
|
||||
public static PowerManager.WakeLock getWakeLock(final String name, int millis) {
|
||||
final PowerManager pm = (PowerManager) aaps.getAppContext().getSystemService(Context.POWER_SERVICE);
|
||||
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "AAPS::"+name);
|
||||
wl.acquire(millis);
|
||||
if (debug_wakelocks) Log.d(TAG, "getWakeLock: " + name + " " + wl.toString());
|
||||
return wl;
|
||||
}
|
||||
|
||||
public static void releaseWakeLock(PowerManager.WakeLock wl) {
|
||||
if (debug_wakelocks) Log.d(TAG, "releaseWakeLock: " + wl.toString());
|
||||
if (wl == null) return;
|
||||
if (wl.isHeld()) wl.release();
|
||||
}
|
||||
|
||||
public static void startActivity(Class c) {
|
||||
aaps.getAppContext().startActivity(getStartActivityIntent(c));
|
||||
}
|
||||
|
||||
public static Intent getStartActivityIntent(Class c) {
|
||||
return new Intent(aaps.getAppContext(), c).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
}
|
||||
|
||||
public static void threadSleep(long millis) {
|
||||
try {
|
||||
Thread.sleep(millis);
|
||||
} catch (InterruptedException e) {
|
||||
// we simply ignore if sleep was interrupted
|
||||
}
|
||||
}
|
||||
|
||||
public static String joinSet(Set<String> set, String separator) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int i = 0;
|
||||
for (String item : set) {
|
||||
final String itemToAdd = item.trim();
|
||||
if (itemToAdd.length() > 0) {
|
||||
if (i > 0) {
|
||||
sb.append(separator);
|
||||
}
|
||||
i++;
|
||||
sb.append(itemToAdd);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static Set<String> explodeSet(String joined, String separator) {
|
||||
// special RegEx literal \\Q starts sequence we escape, \\E ends is
|
||||
// we use it to escape separator for use in RegEx
|
||||
String[] items = joined.split("\\Q"+separator+"\\E");
|
||||
Set<String> set = new HashSet<>();
|
||||
for (String item : items) {
|
||||
final String itemToAdd = item.trim();
|
||||
if (itemToAdd.length() > 0) {
|
||||
set.add(itemToAdd);
|
||||
}
|
||||
}
|
||||
return set;
|
||||
}
|
||||
|
||||
/**
|
||||
* Taken out to helper method to allow testing
|
||||
*/
|
||||
public static DataMap bundleToDataMap(Bundle bundle) {
|
||||
return DataMap.fromBundle(bundle);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ import android.graphics.Color;
|
|||
import android.graphics.Paint;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.os.PowerManager;
|
||||
import android.preference.PreferenceManager;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
|
@ -33,20 +32,18 @@ import com.ustwo.clockwise.common.WatchFaceTime;
|
|||
import com.ustwo.clockwise.common.WatchShape;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
|
||||
import info.nightscout.androidaps.data.BasalWatchData;
|
||||
import info.nightscout.androidaps.data.BgWatchData;
|
||||
import info.nightscout.androidaps.data.BolusWatchData;
|
||||
import info.nightscout.androidaps.complications.BaseComplicationProviderService;
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.data.ListenerService;
|
||||
import info.nightscout.androidaps.R;
|
||||
import info.nightscout.androidaps.data.TempWatchData;
|
||||
import lecho.lib.hellocharts.view.LineChartView;
|
||||
|
||||
/**
|
||||
* Created by emmablack on 12/29/14.
|
||||
* Updated by andrew-warrington on 02-Jan-2018.
|
||||
* Refactored by dlvoy on 2019-11-2019
|
||||
*/
|
||||
|
||||
public abstract class BaseWatchFace extends WatchFace implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
|
@ -54,13 +51,10 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
public static final long[] vibratePattern = {0,400,300,400,300,400};
|
||||
public TextView mTime, mSgv, mDirection, mTimestamp, mUploaderBattery, mRigBattery, mDelta, mAvgDelta, mStatus, mBasalRate, mIOB1, mIOB2, mCOB1, mCOB2, mBgi, mLoop, mDay, mMonth, isAAPSv2, mHighLight, mLowLight;
|
||||
public ImageView mGlucoseDial, mDeltaGauge, mHourHand, mMinuteHand;
|
||||
public long datetime;
|
||||
public RelativeLayout mRelativeLayout;
|
||||
public LinearLayout mLinearLayout, mLinearLayout2, mDate, mChartTap, mMainMenuTap;
|
||||
public long sgvLevel = 0;
|
||||
public int ageLevel = 1;
|
||||
public int loopLevel = 1;
|
||||
public int batteryLevel = 1;
|
||||
public int highColor = Color.YELLOW;
|
||||
public int lowColor = Color.RED;
|
||||
public int midColor = Color.WHITE;
|
||||
|
@ -74,11 +68,9 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
public int pointSize = 2;
|
||||
public BgGraphBuilder bgGraphBuilder;
|
||||
public LineChartView chart;
|
||||
public ArrayList<BgWatchData> bgDataList = new ArrayList<>();
|
||||
public ArrayList<TempWatchData> tempWatchDataList = new ArrayList<>();
|
||||
public ArrayList<BasalWatchData> basalWatchDataList = new ArrayList<>();
|
||||
public ArrayList<BolusWatchData> bolusWatchDataList = new ArrayList<>();
|
||||
public ArrayList<BgWatchData> predictionList = new ArrayList<>();
|
||||
|
||||
|
||||
public RawDisplayData rawData = new RawDisplayData();
|
||||
|
||||
public PowerManager.WakeLock wakeLock;
|
||||
// related endTime manual layout
|
||||
|
@ -90,26 +82,9 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
|
||||
protected SharedPreferences sharedPrefs;
|
||||
|
||||
public boolean detailedIOB = false;
|
||||
public boolean showBGI = false;
|
||||
public boolean forceSquareCanvas = false; //set to true by the Steampunk watch face.
|
||||
public long openApsStatus;
|
||||
public String externalStatusString = "no status";
|
||||
public String sSgv = "---";
|
||||
public String sDirection = "--";
|
||||
public String sUploaderBattery = "--";
|
||||
public String sRigBattery = "--";
|
||||
public String sDelta = "--";
|
||||
public String sAvgDelta = "--";
|
||||
public String sBasalRate = "-.--U/h";
|
||||
public String sIOB1 = "IOB";
|
||||
public String sIOB2 = "-.--";
|
||||
public String sCOB1 = "Carb";
|
||||
public String sCOB2 = "--g";
|
||||
public String sBgi = "--";
|
||||
public String sMinute = "0";
|
||||
public String sHour = "0";
|
||||
public String sUnits = "-";
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
|
@ -126,6 +101,8 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
}
|
||||
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
sharedPrefs.registerOnSharedPreferenceChangeListener(this);
|
||||
|
||||
BaseComplicationProviderService.turnOff();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -197,11 +174,11 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
}
|
||||
|
||||
public double timeSince() {
|
||||
return System.currentTimeMillis() - datetime;
|
||||
return System.currentTimeMillis() - rawData.datetime;
|
||||
}
|
||||
|
||||
public String readingAge(boolean shortString) {
|
||||
if (datetime == 0) { return shortString?"--'":"-- Minute ago"; }
|
||||
if (rawData.datetime == 0) { return shortString?"--'":"-- Minute ago"; }
|
||||
int minutesAgo = (int) Math.floor(timeSince()/(1000*60));
|
||||
if (minutesAgo == 1) {
|
||||
return minutesAgo + (shortString?"'":" Minute ago");
|
||||
|
@ -266,50 +243,20 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
|
||||
Bundle bundle = intent.getBundleExtra("data");
|
||||
if (layoutSet && bundle != null) {
|
||||
DataMap dataMap = DataMap.fromBundle(bundle);
|
||||
wakeLock.acquire(50);
|
||||
sgvLevel = dataMap.getLong("sgvLevel");
|
||||
datetime = dataMap.getLong("timestamp");
|
||||
sSgv = dataMap.getString("sgvString");
|
||||
sDirection = dataMap.getString("slopeArrow");
|
||||
sDelta = dataMap.getString("delta");
|
||||
sAvgDelta = dataMap.getString("avgDelta");
|
||||
sUnits = dataMap.getString("glucoseUnits");
|
||||
if (chart != null) {
|
||||
addToWatchSet(dataMap);
|
||||
if (layoutSet) {
|
||||
final DataMap dataMap = rawData.updateDataFromMessage(intent, wakeLock);
|
||||
if (chart != null && dataMap != null) {
|
||||
rawData.addToWatchSet(dataMap);
|
||||
setupCharts();
|
||||
}
|
||||
}
|
||||
|
||||
bundle = intent.getBundleExtra("status");
|
||||
if (layoutSet && bundle != null) {
|
||||
DataMap dataMap = DataMap.fromBundle(bundle);
|
||||
wakeLock.acquire(50);
|
||||
sBasalRate = dataMap.getString("currentBasal");
|
||||
sUploaderBattery = dataMap.getString("battery");
|
||||
sRigBattery = dataMap.getString("rigBattery");
|
||||
detailedIOB = dataMap.getBoolean("detailedIob");
|
||||
sIOB1 = dataMap.getString("iobSum") + "U";
|
||||
sIOB2 = dataMap.getString("iobDetail");
|
||||
sCOB1 = "Carb";
|
||||
sCOB2 = dataMap.getString("cob");
|
||||
sBgi = dataMap.getString("bgi");
|
||||
showBGI = dataMap.getBoolean("showBgi");
|
||||
externalStatusString = dataMap.getString("externalStatusString");
|
||||
batteryLevel = dataMap.getInt("batteryLevel");
|
||||
openApsStatus = dataMap.getLong("openApsStatus");
|
||||
rawData.updateStatusFromMessage(intent, wakeLock);
|
||||
}
|
||||
|
||||
setDataFields();
|
||||
setColor();
|
||||
|
||||
bundle = intent.getBundleExtra("basals");
|
||||
if (layoutSet && bundle != null) {
|
||||
DataMap dataMap = DataMap.fromBundle(bundle);
|
||||
wakeLock.acquire(500);
|
||||
loadBasalsAndTemps(dataMap);
|
||||
if (layoutSet) {
|
||||
rawData.updateBasalsFromMessage(intent, wakeLock);
|
||||
}
|
||||
|
||||
mRelativeLayout.measure(specW, specH);
|
||||
|
@ -328,7 +275,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
|
||||
if (mSgv != null) {
|
||||
if (sharedPrefs.getBoolean("showBG", true)) {
|
||||
mSgv.setText(sSgv);
|
||||
mSgv.setText(rawData.sSgv);
|
||||
mSgv.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
//leave the textview there but invisible, as a height holder for the empty space above the white line
|
||||
|
@ -341,7 +288,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
|
||||
if (mDirection != null) {
|
||||
if (sharedPrefs.getBoolean("show_direction", true)) {
|
||||
mDirection.setText(sDirection);
|
||||
mDirection.setText(rawData.sDirection);
|
||||
mDirection.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mDirection.setVisibility(View.GONE);
|
||||
|
@ -350,7 +297,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
|
||||
if (mDelta != null) {
|
||||
if (sharedPrefs.getBoolean("showDelta", true)) {
|
||||
mDelta.setText(sDelta);
|
||||
mDelta.setText(rawData.sDelta);
|
||||
mDelta.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mDelta.setVisibility(View.GONE);
|
||||
|
@ -359,7 +306,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
|
||||
if (mAvgDelta != null) {
|
||||
if (sharedPrefs.getBoolean("showAvgDelta", true)) {
|
||||
mAvgDelta.setText(sAvgDelta);
|
||||
mAvgDelta.setText(rawData.sAvgDelta);
|
||||
mAvgDelta.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mAvgDelta.setVisibility(View.GONE);
|
||||
|
@ -367,7 +314,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
}
|
||||
|
||||
if (mCOB1 != null && mCOB2 != null) {
|
||||
mCOB2.setText(sCOB2);
|
||||
mCOB2.setText(rawData.sCOB2);
|
||||
if (sharedPrefs.getBoolean("show_cob", true)) {
|
||||
mCOB1.setVisibility(View.VISIBLE);
|
||||
mCOB2.setVisibility(View.VISIBLE);
|
||||
|
@ -377,7 +324,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
}
|
||||
//deal with cases where there is only the value shown for COB, and not the label
|
||||
} else if (mCOB2 != null) {
|
||||
mCOB2.setText(sCOB2);
|
||||
mCOB2.setText(rawData.sCOB2);
|
||||
if (sharedPrefs.getBoolean("show_cob", true)) {
|
||||
mCOB2.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
|
@ -389,12 +336,12 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
if (sharedPrefs.getBoolean("show_iob", true)) {
|
||||
mIOB1.setVisibility(View.VISIBLE);
|
||||
mIOB2.setVisibility(View.VISIBLE);
|
||||
if (detailedIOB) {
|
||||
mIOB1.setText(sIOB1);
|
||||
mIOB2.setText(sIOB2);
|
||||
if (rawData.detailedIOB) {
|
||||
mIOB1.setText(rawData.sIOB1);
|
||||
mIOB2.setText(rawData.sIOB2);
|
||||
} else {
|
||||
mIOB1.setText("IOB");
|
||||
mIOB2.setText(sIOB1);
|
||||
mIOB2.setText(rawData.sIOB1);
|
||||
}
|
||||
} else {
|
||||
mIOB1.setVisibility(View.GONE);
|
||||
|
@ -404,10 +351,10 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
} else if (mIOB2 != null) {
|
||||
if (sharedPrefs.getBoolean("show_iob", true)) {
|
||||
mIOB2.setVisibility(View.VISIBLE);
|
||||
if (detailedIOB) {
|
||||
mIOB2.setText(sIOB2);
|
||||
if (rawData.detailedIOB) {
|
||||
mIOB2.setText(rawData.sIOB2);
|
||||
} else {
|
||||
mIOB2.setText(sIOB1);
|
||||
mIOB2.setText(rawData.sIOB1);
|
||||
}
|
||||
} else {
|
||||
mIOB2.setText("");
|
||||
|
@ -434,13 +381,13 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
if (mUploaderBattery != null) {
|
||||
if (sharedPrefs.getBoolean("show_uploader_battery", true)) {
|
||||
if (isAAPSv2 != null) {
|
||||
mUploaderBattery.setText(sUploaderBattery + "%");
|
||||
mUploaderBattery.setText(rawData.sUploaderBattery + "%");
|
||||
mUploaderBattery.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
if (sharedPrefs.getBoolean("showExternalStatus", true)) {
|
||||
mUploaderBattery.setText("U: " + sUploaderBattery + "%");
|
||||
mUploaderBattery.setText("U: " + rawData.sUploaderBattery + "%");
|
||||
} else {
|
||||
mUploaderBattery.setText("Uploader: " + sUploaderBattery + "%");
|
||||
mUploaderBattery.setText("Uploader: " + rawData.sUploaderBattery + "%");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -450,7 +397,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
|
||||
if (mRigBattery != null) {
|
||||
if (sharedPrefs.getBoolean("show_rig_battery", false)) {
|
||||
mRigBattery.setText(sRigBattery);
|
||||
mRigBattery.setText(rawData.sRigBattery);
|
||||
mRigBattery.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mRigBattery.setVisibility(View.GONE);
|
||||
|
@ -459,7 +406,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
|
||||
if (mBasalRate != null) {
|
||||
if (sharedPrefs.getBoolean("show_temp_basal", true)) {
|
||||
mBasalRate.setText(sBasalRate);
|
||||
mBasalRate.setText(rawData.sBasalRate);
|
||||
mBasalRate.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mBasalRate.setVisibility(View.GONE);
|
||||
|
@ -467,8 +414,8 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
}
|
||||
|
||||
if (mBgi != null) {
|
||||
if (showBGI) {
|
||||
mBgi.setText(sBgi);
|
||||
if (rawData.showBGI) {
|
||||
mBgi.setText(rawData.sBgi);
|
||||
mBgi.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mBgi.setVisibility(View.GONE);
|
||||
|
@ -477,7 +424,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
|
||||
if (mStatus != null) {
|
||||
if (sharedPrefs.getBoolean("showExternalStatus", true)) {
|
||||
mStatus.setText(externalStatusString);
|
||||
mStatus.setText(rawData.externalStatusString);
|
||||
mStatus.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mStatus.setVisibility(View.GONE);
|
||||
|
@ -487,8 +434,8 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
if (mLoop != null) {
|
||||
if (sharedPrefs.getBoolean("showExternalStatus", true)) {
|
||||
mLoop.setVisibility(View.VISIBLE);
|
||||
if (openApsStatus != -1) {
|
||||
int mins = (int) ((System.currentTimeMillis() - openApsStatus) / 1000 / 60);
|
||||
if (rawData.openApsStatus != -1) {
|
||||
int mins = (int) ((System.currentTimeMillis() - rawData.openApsStatus) / 1000 / 60);
|
||||
mLoop.setText(mins + "'");
|
||||
if (mins > 14) {
|
||||
loopLevel = 0;
|
||||
|
@ -594,50 +541,13 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
}
|
||||
}
|
||||
|
||||
public void addToWatchSet(DataMap dataMap) {
|
||||
|
||||
ArrayList<DataMap> entries = dataMap.getDataMapArrayList("entries");
|
||||
if (entries != null) {
|
||||
bgDataList = new ArrayList<BgWatchData>();
|
||||
for (DataMap entry : entries) {
|
||||
double sgv = entry.getDouble("sgvDouble");
|
||||
double high = entry.getDouble("high");
|
||||
double low = entry.getDouble("low");
|
||||
long timestamp = entry.getLong("timestamp");
|
||||
int color = entry.getInt("color", 0);
|
||||
bgDataList.add(new BgWatchData(sgv, high, low, timestamp, color));
|
||||
}
|
||||
} else {
|
||||
double sgv = dataMap.getDouble("sgvDouble");
|
||||
double high = dataMap.getDouble("high");
|
||||
double low = dataMap.getDouble("low");
|
||||
long timestamp = dataMap.getLong("timestamp");
|
||||
int color = dataMap.getInt("color", 0);
|
||||
|
||||
final int size = bgDataList.size();
|
||||
if (size > 0) {
|
||||
if (bgDataList.get(size - 1).timestamp == timestamp)
|
||||
return; // Ignore duplicates.
|
||||
}
|
||||
|
||||
bgDataList.add(new BgWatchData(sgv, high, low, timestamp, color));
|
||||
}
|
||||
|
||||
for (int i = 0; i < bgDataList.size(); i++) {
|
||||
if (bgDataList.get(i).timestamp < (System.currentTimeMillis() - (1000 * 60 * 60 * 5))) {
|
||||
bgDataList.remove(i); //Get rid of anything more than 5 hours old
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setupCharts() {
|
||||
if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things
|
||||
if(rawData.bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things
|
||||
int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3"));
|
||||
if (lowResMode) {
|
||||
bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe);
|
||||
bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), rawData, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe);
|
||||
} else {
|
||||
bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList,predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe);
|
||||
bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), rawData, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe);
|
||||
}
|
||||
|
||||
chart.setLineChartData(bgGraphBuilder.lineData());
|
||||
|
@ -646,54 +556,4 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen
|
|||
}
|
||||
}
|
||||
|
||||
private void loadBasalsAndTemps(DataMap dataMap) {
|
||||
ArrayList<DataMap> temps = dataMap.getDataMapArrayList("temps");
|
||||
if (temps != null) {
|
||||
tempWatchDataList = new ArrayList<>();
|
||||
for (DataMap temp : temps) {
|
||||
TempWatchData twd = new TempWatchData();
|
||||
twd.startTime = temp.getLong("starttime");
|
||||
twd.startBasal = temp.getDouble("startBasal");
|
||||
twd.endTime = temp.getLong("endtime");
|
||||
twd.endBasal = temp.getDouble("endbasal");
|
||||
twd.amount = temp.getDouble("amount");
|
||||
tempWatchDataList.add(twd);
|
||||
}
|
||||
}
|
||||
ArrayList<DataMap> basals = dataMap.getDataMapArrayList("basals");
|
||||
if (basals != null) {
|
||||
basalWatchDataList = new ArrayList<>();
|
||||
for (DataMap basal : basals) {
|
||||
BasalWatchData bwd = new BasalWatchData();
|
||||
bwd.startTime = basal.getLong("starttime");
|
||||
bwd.endTime = basal.getLong("endtime");
|
||||
bwd.amount = basal.getDouble("amount");
|
||||
basalWatchDataList.add(bwd);
|
||||
}
|
||||
}
|
||||
ArrayList<DataMap> boluses = dataMap.getDataMapArrayList("boluses");
|
||||
if (boluses != null) {
|
||||
bolusWatchDataList = new ArrayList<>();
|
||||
for (DataMap bolus : boluses) {
|
||||
BolusWatchData bwd = new BolusWatchData();
|
||||
bwd.date = bolus.getLong("date");
|
||||
bwd.bolus = bolus.getDouble("bolus");
|
||||
bwd.carbs = bolus.getDouble("carbs");
|
||||
bwd.isSMB = bolus.getBoolean("isSMB");
|
||||
bwd.isValid = bolus.getBoolean("isValid");
|
||||
bolusWatchDataList.add(bwd);
|
||||
}
|
||||
}
|
||||
ArrayList<DataMap> predictions = dataMap.getDataMapArrayList("predictions");
|
||||
if (boluses != null) {
|
||||
predictionList = new ArrayList<>();
|
||||
for (DataMap prediction : predictions) {
|
||||
BgWatchData bwd = new BgWatchData();
|
||||
bwd.timestamp = prediction.getLong("timestamp");
|
||||
bwd.sgv = prediction.getDouble("sgv");
|
||||
bwd.color = prediction.getInt("color");
|
||||
predictionList.add(bwd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package info.nightscout.androidaps.watchfaces;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.DashPathEffect;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.format.DateFormat;
|
||||
|
@ -18,6 +17,7 @@ import java.util.TimeZone;
|
|||
import info.nightscout.androidaps.data.BasalWatchData;
|
||||
import info.nightscout.androidaps.data.BgWatchData;
|
||||
import info.nightscout.androidaps.data.BolusWatchData;
|
||||
import info.nightscout.androidaps.data.RawDisplayData;
|
||||
import info.nightscout.androidaps.data.TempWatchData;
|
||||
import lecho.lib.hellocharts.model.Axis;
|
||||
import lecho.lib.hellocharts.model.AxisValue;
|
||||
|
@ -115,6 +115,42 @@ public class BgGraphBuilder {
|
|||
this.end_time = (predictionEndTime>end_time)?predictionEndTime:end_time;
|
||||
}
|
||||
|
||||
public BgGraphBuilder(Context context, RawDisplayData raw, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusInvalidColor, int carbsColor, int timespan) {
|
||||
this(context,
|
||||
raw.bgDataList,
|
||||
raw.predictionList,
|
||||
raw.tempWatchDataList,
|
||||
raw.basalWatchDataList,
|
||||
raw.bolusWatchDataList,
|
||||
aPointSize,
|
||||
aHighColor,
|
||||
aLowColor,
|
||||
aMidColor,
|
||||
gridColour,
|
||||
basalBackgroundColor,
|
||||
basalCenterColor,
|
||||
bolusInvalidColor,
|
||||
carbsColor,
|
||||
timespan);
|
||||
}
|
||||
|
||||
public BgGraphBuilder(Context context, RawDisplayData raw, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusInvalidColor, int carbsColor, int timespan) {
|
||||
this(context,
|
||||
raw.bgDataList,
|
||||
raw.predictionList,
|
||||
raw.tempWatchDataList,
|
||||
raw.basalWatchDataList,
|
||||
raw.bolusWatchDataList,
|
||||
aPointSize,
|
||||
aMidColor,
|
||||
gridColour,
|
||||
basalBackgroundColor,
|
||||
basalCenterColor,
|
||||
bolusInvalidColor,
|
||||
carbsColor,
|
||||
timespan);
|
||||
}
|
||||
|
||||
public LineChartData lineData() {
|
||||
LineChartData lineData = new LineChartData(defaultLines());
|
||||
lineData.setAxisYLeft(yAxis());
|
||||
|
|
|
@ -48,13 +48,13 @@ public class Cockpit extends BaseWatchFace {
|
|||
setTextSizes();
|
||||
|
||||
if (mHighLight != null && mLowLight != null) {
|
||||
if (sgvLevel == 1) {
|
||||
if (rawData.sgvLevel == 1) {
|
||||
mHighLight.setBackgroundResource(R.drawable.airplane_led_yellow_lit);
|
||||
mLowLight.setBackgroundResource(R.drawable.airplane_led_grey_unlit);
|
||||
} else if (sgvLevel == 0) {
|
||||
} else if (rawData.sgvLevel == 0) {
|
||||
mHighLight.setBackgroundResource(R.drawable.airplane_led_grey_unlit);
|
||||
mLowLight.setBackgroundResource(R.drawable.airplane_led_grey_unlit);
|
||||
} else if (sgvLevel == -1) {
|
||||
} else if (rawData.sgvLevel == -1) {
|
||||
mHighLight.setBackgroundResource(R.drawable.airplane_led_grey_unlit);
|
||||
mLowLight.setBackgroundResource(R.drawable.airplane_led_red_lit);
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ public class Cockpit extends BaseWatchFace {
|
|||
protected void setTextSizes() {
|
||||
|
||||
if (mIOB2 != null) {
|
||||
if (detailedIOB) {
|
||||
if (rawData.detailedIOB) {
|
||||
if (bIsRound) {
|
||||
mIOB2.setTextSize(10);
|
||||
} else {
|
||||
|
|
|
@ -68,15 +68,15 @@ public class Home extends BaseWatchFace {
|
|||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_statusView));
|
||||
mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime));
|
||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
||||
if (sgvLevel == 1) {
|
||||
if (rawData.sgvLevel == 1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor));
|
||||
} else if (sgvLevel == 0) {
|
||||
} else if (rawData.sgvLevel == 0) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||
} else if (sgvLevel == -1) {
|
||||
} else if (rawData.sgvLevel == -1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor));
|
||||
|
@ -88,7 +88,7 @@ public class Home extends BaseWatchFace {
|
|||
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_TimestampOld));
|
||||
}
|
||||
|
||||
if (batteryLevel == 1) {
|
||||
if (rawData.batteryLevel == 1) {
|
||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery));
|
||||
} else {
|
||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty));
|
||||
|
@ -133,15 +133,15 @@ public class Home extends BaseWatchFace {
|
|||
if (getCurrentWatchMode() == WatchMode.INTERACTIVE) {
|
||||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_stripe_background));
|
||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background));
|
||||
if (sgvLevel == 1) {
|
||||
if (rawData.sgvLevel == 1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
||||
} else if (sgvLevel == 0) {
|
||||
} else if (rawData.sgvLevel == 0) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_midColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_midColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_midColor));
|
||||
} else if (sgvLevel == -1) {
|
||||
} else if (rawData.sgvLevel == -1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_lowColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_lowColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_lowColor));
|
||||
|
@ -153,7 +153,7 @@ public class Home extends BaseWatchFace {
|
|||
mTimestamp.setTextColor(Color.RED);
|
||||
}
|
||||
|
||||
if (batteryLevel == 1) {
|
||||
if (rawData.batteryLevel == 1) {
|
||||
mUploaderBattery.setTextColor(Color.WHITE);
|
||||
} else {
|
||||
mUploaderBattery.setTextColor(Color.RED);
|
||||
|
|
|
@ -78,13 +78,13 @@ public class Home2 extends BaseWatchFace {
|
|||
|
||||
setTextSizes();
|
||||
|
||||
if (sgvLevel == 1) {
|
||||
if (rawData.sgvLevel == 1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor));
|
||||
} else if (sgvLevel == 0) {
|
||||
} else if (rawData.sgvLevel == 0) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||
} else if (sgvLevel == -1) {
|
||||
} else if (rawData.sgvLevel == -1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor));
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ public class Home2 extends BaseWatchFace {
|
|||
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_TimestampOld));
|
||||
}
|
||||
|
||||
if (batteryLevel == 1) {
|
||||
if (rawData.batteryLevel == 1) {
|
||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery));
|
||||
} else {
|
||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty));
|
||||
|
@ -176,13 +176,13 @@ public class Home2 extends BaseWatchFace {
|
|||
|
||||
setTextSizes();
|
||||
|
||||
if (sgvLevel == 1) {
|
||||
if (rawData.sgvLevel == 1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
||||
} else if (sgvLevel == 0) {
|
||||
} else if (rawData.sgvLevel == 0) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_midColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_midColor));
|
||||
} else if (sgvLevel == -1) {
|
||||
} else if (rawData.sgvLevel == -1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_lowColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_lowColor));
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ public class Home2 extends BaseWatchFace {
|
|||
mTimestamp.setTextColor(Color.RED);
|
||||
}
|
||||
|
||||
if (batteryLevel == 1) {
|
||||
if (rawData.batteryLevel == 1) {
|
||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||
} else {
|
||||
mUploaderBattery.setTextColor(Color.RED);
|
||||
|
@ -229,7 +229,7 @@ public class Home2 extends BaseWatchFace {
|
|||
|
||||
if (mIOB1 != null && mIOB2 != null) {
|
||||
|
||||
if (detailedIOB) {
|
||||
if (rawData.detailedIOB) {
|
||||
mIOB1.setTextSize(14);
|
||||
mIOB2.setTextSize(10);
|
||||
} else {
|
||||
|
|
|
@ -52,15 +52,15 @@ public class LargeHome extends BaseWatchFace {
|
|||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mLinearLayout));
|
||||
mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime));
|
||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background));
|
||||
if (sgvLevel == 1) {
|
||||
if (rawData.sgvLevel == 1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor));
|
||||
} else if (sgvLevel == 0) {
|
||||
} else if (rawData.sgvLevel == 0) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor));
|
||||
} else if (sgvLevel == -1) {
|
||||
} else if (rawData.sgvLevel == -1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_lowColor));
|
||||
|
@ -72,7 +72,7 @@ public class LargeHome extends BaseWatchFace {
|
|||
mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_TimestampOld));
|
||||
}
|
||||
|
||||
if (batteryLevel == 1) {
|
||||
if (rawData.batteryLevel == 1) {
|
||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery));
|
||||
} else {
|
||||
mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty));
|
||||
|
@ -86,15 +86,15 @@ public class LargeHome extends BaseWatchFace {
|
|||
if (getCurrentWatchMode() == WatchMode.INTERACTIVE) {
|
||||
mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_stripe_background));
|
||||
mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background));
|
||||
if (sgvLevel == 1) {
|
||||
if (rawData.sgvLevel == 1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor));
|
||||
} else if (sgvLevel == 0) {
|
||||
} else if (rawData.sgvLevel == 0) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_midColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_midColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_midColor));
|
||||
} else if (sgvLevel == -1) {
|
||||
} else if (rawData.sgvLevel == -1) {
|
||||
mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_lowColor));
|
||||
mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_lowColor));
|
||||
mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_lowColor));
|
||||
|
@ -106,7 +106,7 @@ public class LargeHome extends BaseWatchFace {
|
|||
mTimestamp.setTextColor(Color.RED);
|
||||
}
|
||||
|
||||
if (batteryLevel == 1) {
|
||||
if (rawData.batteryLevel == 1) {
|
||||
mUploaderBattery.setTextColor(Color.WHITE);
|
||||
} else {
|
||||
mUploaderBattery.setTextColor(Color.RED);
|
||||
|
@ -116,15 +116,15 @@ public class LargeHome extends BaseWatchFace {
|
|||
} else {
|
||||
mRelativeLayout.setBackgroundColor(Color.BLACK);
|
||||
mLinearLayout.setBackgroundColor(Color.LTGRAY);
|
||||
if (sgvLevel == 1) {
|
||||
if (rawData.sgvLevel == 1) {
|
||||
mSgv.setTextColor(Color.YELLOW);
|
||||
mDirection.setTextColor(Color.YELLOW);
|
||||
mDelta.setTextColor(Color.YELLOW);
|
||||
} else if (sgvLevel == 0) {
|
||||
} else if (rawData.sgvLevel == 0) {
|
||||
mSgv.setTextColor(Color.WHITE);
|
||||
mDirection.setTextColor(Color.WHITE);
|
||||
mDelta.setTextColor(Color.WHITE);
|
||||
} else if (sgvLevel == -1) {
|
||||
} else if (rawData.sgvLevel == -1) {
|
||||
mSgv.setTextColor(Color.RED);
|
||||
mDirection.setTextColor(Color.RED);
|
||||
mDelta.setTextColor(Color.RED);
|
||||
|
|
|
@ -83,24 +83,24 @@ public class Steampunk extends BaseWatchFace {
|
|||
}
|
||||
}
|
||||
|
||||
if (!sSgv.equals("---")) {
|
||||
if (!rawData.sSgv.equals("---")) {
|
||||
|
||||
float rotationAngle = 0f; //by default, show ? on the dial (? is at 0 degrees on the dial)
|
||||
|
||||
if (!sUnits.equals("-")) {
|
||||
if (!rawData.sUnits.equals("-")) {
|
||||
|
||||
//ensure the glucose dial is the correct units
|
||||
if (sUnits.equals("mmol")) {
|
||||
if (rawData.sUnits.equals("mmol")) {
|
||||
mGlucoseDial.setImageResource(R.drawable.steampunk_dial_mmol);
|
||||
} else {
|
||||
mGlucoseDial.setImageResource(R.drawable.steampunk_dial_mgdl);
|
||||
}
|
||||
|
||||
//convert the Sgv to degrees of rotation
|
||||
if (sUnits.equals("mmol")) {
|
||||
rotationAngle = Float.valueOf(sSgv) * 18f; //convert to mg/dL, which is equivalent to degrees
|
||||
if (rawData.sUnits.equals("mmol")) {
|
||||
rotationAngle = Float.valueOf(rawData.sSgv) * 18f; //convert to mg/dL, which is equivalent to degrees
|
||||
} else {
|
||||
rotationAngle = Float.valueOf(sSgv); //if glucose a value is received, use it to determine the amount of rotation of the dial.
|
||||
rotationAngle = Float.valueOf(rawData.sSgv); //if glucose a value is received, use it to determine the amount of rotation of the dial.
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -122,36 +122,36 @@ public class Steampunk extends BaseWatchFace {
|
|||
|
||||
//set the delta gauge and rotate the delta pointer
|
||||
float deltaIsNegative = 1f; //by default go clockwise
|
||||
if (!sAvgDelta.equals("--")) { //if a legitimate delta value is received, then...
|
||||
if (sAvgDelta.substring(0,1).equals("-")) deltaIsNegative = -1f; //if the delta is negative, go counter-clockwise
|
||||
if (!rawData.sAvgDelta.equals("--")) { //if a legitimate delta value is received, then...
|
||||
if (rawData.sAvgDelta.substring(0,1).equals("-")) deltaIsNegative = -1f; //if the delta is negative, go counter-clockwise
|
||||
|
||||
//ensure the delta gauge is the right units and granularity
|
||||
if (!sUnits.equals("-")) {
|
||||
if (sUnits.equals("mmol")) {
|
||||
if (!rawData.sUnits.equals("-")) {
|
||||
if (rawData.sUnits.equals("mmol")) {
|
||||
if (sharedPrefs.getString("delta_granularity", "2").equals("1")) { //low
|
||||
mLinearLayout.setBackgroundResource(R.drawable.steampunk_gauge_mmol_10);
|
||||
deltaRotationAngle = (Float.valueOf(sAvgDelta.substring(1)) * 30f); //get rid of the sign so it can be converted to float.
|
||||
deltaRotationAngle = (Float.valueOf(rawData.sAvgDelta.substring(1)) * 30f); //get rid of the sign so it can be converted to float.
|
||||
}
|
||||
if (sharedPrefs.getString("delta_granularity", "2").equals("2")) { //medium
|
||||
mLinearLayout.setBackgroundResource(R.drawable.steampunk_gauge_mmol_05);
|
||||
deltaRotationAngle = (Float.valueOf(sAvgDelta.substring(1)) * 60f); //get rid of the sign so it can be converted to float.
|
||||
deltaRotationAngle = (Float.valueOf(rawData.sAvgDelta.substring(1)) * 60f); //get rid of the sign so it can be converted to float.
|
||||
}
|
||||
if (sharedPrefs.getString("delta_granularity", "2").equals("3")) { //high
|
||||
mLinearLayout.setBackgroundResource(R.drawable.steampunk_gauge_mmol_03);
|
||||
deltaRotationAngle = (Float.valueOf(sAvgDelta.substring(1)) * 100f); //get rid of the sign so it can be converted to float.
|
||||
deltaRotationAngle = (Float.valueOf(rawData.sAvgDelta.substring(1)) * 100f); //get rid of the sign so it can be converted to float.
|
||||
}
|
||||
} else {
|
||||
if (sharedPrefs.getString("delta_granularity", "2").equals("1")) { //low
|
||||
mLinearLayout.setBackgroundResource(R.drawable.steampunk_gauge_mgdl_20);
|
||||
deltaRotationAngle = (Float.valueOf(sAvgDelta.substring(1)) * 1.5f); //get rid of the sign so it can be converted to float.
|
||||
deltaRotationAngle = (Float.valueOf(rawData.sAvgDelta.substring(1)) * 1.5f); //get rid of the sign so it can be converted to float.
|
||||
}
|
||||
if (sharedPrefs.getString("delta_granularity", "2").equals("2")) { //medium
|
||||
mLinearLayout.setBackgroundResource(R.drawable.steampunk_gauge_mgdl_10);
|
||||
deltaRotationAngle = (Float.valueOf(sAvgDelta.substring(1)) * 3f); //get rid of the sign so it can be converted to float.
|
||||
deltaRotationAngle = (Float.valueOf(rawData.sAvgDelta.substring(1)) * 3f); //get rid of the sign so it can be converted to float.
|
||||
}
|
||||
if (sharedPrefs.getString("delta_granularity", "2").equals("3")) { //high
|
||||
mLinearLayout.setBackgroundResource(R.drawable.steampunk_gauge_mgdl_5);
|
||||
deltaRotationAngle = (Float.valueOf(sAvgDelta.substring(1)) * 6f); //get rid of the sign so it can be converted to float.
|
||||
deltaRotationAngle = (Float.valueOf(rawData.sAvgDelta.substring(1)) * 6f); //get rid of the sign so it can be converted to float.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -213,7 +213,7 @@ public class Steampunk extends BaseWatchFace {
|
|||
//top row. large font unless text too big (i.e. detailedIOB)
|
||||
mCOB2.setTextSize(fontLarge);
|
||||
mBasalRate.setTextSize(fontLarge);
|
||||
if (sIOB2.length() < 7) {
|
||||
if (rawData.sIOB2.length() < 7) {
|
||||
mIOB2.setTextSize(fontLarge);
|
||||
} else {
|
||||
mIOB2.setTextSize(fontSmall);
|
||||
|
|
12
wear/src/main/res/drawable/ic_aaps_dark.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="38.4175"
|
||||
android:viewportHeight="38.4175"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/black"
|
||||
android:pathData="M19.2086,0C16.6157,0 14.1552,0.5028 11.9062,1.4289C7.1702,3.3868 3.3868,7.1702 1.4288,11.9062C0.5028,14.1552 -0,16.6157 -0,19.2086C-0,21.8016 0.5028,24.2621 1.4288,26.511C3.3868,31.2471 7.1702,35.031 11.9062,36.989C14.1552,37.915 16.6157,38.4173 19.2086,38.4173C21.8015,38.4173 24.2621,37.915 26.511,36.989C31.2471,35.031 35.031,31.2471 36.9889,26.511C37.915,24.2621 38.4173,21.8016 38.4173,19.2086C38.4173,16.6157 37.915,14.1552 36.9889,11.9062C35.031,7.1702 31.2471,3.3868 26.511,1.4289C24.2621,0.5028 21.8015,0 19.2086,0zM19.1823,2.99C28.1252,2.99 35.3746,10.2658 35.3746,19.1823C35.3746,22.2515 34.5282,25.1087 33.0466,27.5694L33.0466,19.235C33.0731,16.6421 32.4643,14.2612 31.2472,12.1181C30.0301,9.975 28.3632,8.3077 26.2201,7.0642C25.2941,6.535 24.3151,6.1119 23.3097,5.8208C22.1984,5.4769 21.0607,6.3765 21.0607,7.5406C21.0607,8.3344 21.5901,8.9959 22.3309,9.2341C23.0189,9.4457 23.6539,9.7365 24.2889,10.1069C25.8235,11.0329 27.0404,12.2768 27.9135,13.8643C28.7867,15.4518 29.2365,17.2243 29.2365,19.2086C29.2365,21.193 28.7867,22.966 27.9135,24.5535C27.0139,26.141 25.8235,27.3845 24.2889,28.2841C23.8656,28.5222 23.4422,28.734 22.9924,28.9192L22.9924,28.0722L22.9924,26.1674L22.9924,24.5799L22.9924,21.8018C22.9924,21.2461 22.8073,20.7697 22.4369,20.3993C22.0665,20.0289 21.6164,19.8437 21.0344,19.8437C20.5052,19.8437 20.0556,20.0289 19.6587,20.3993C19.2883,20.7697 19.0763,21.2197 19.0763,21.8018L19.0763,24.5799L19.0763,26.1674L19.0763,28.1781L19.0763,29.7393L19.0763,31.009C19.0763,31.5381 19.2619,31.9882 19.6587,32.3851C20.0292,32.7555 20.5052,32.967 21.0344,32.967C21.3254,32.967 21.6163,32.9142 21.8545,32.8083C22.8334,32.5702 23.7858,32.2526 24.659,31.7764C26.4581,30.8503 27.9399,29.6071 29.1305,27.9931L29.1305,31.009C29.1305,31.3265 29.1833,31.5915 29.2892,31.8296C26.511,34.0521 22.9923,35.3746 19.1823,35.3746C10.2394,35.3746 2.99,28.0987 2.99,19.1823C2.99,10.2658 10.2658,2.99 19.1823,2.99zM17.1716,5.3712C16.9334,5.3712 16.7218,5.4238 16.5101,5.4767C14.9226,5.7413 13.4145,6.2704 12.0122,7.0642C9.8955,8.2813 8.2286,9.975 6.9851,12.1181C5.768,14.2612 5.1594,16.6421 5.1594,19.235C5.1594,21.8279 5.7412,24.2094 6.9319,26.326C8.1225,28.4427 9.7366,30.1096 11.8003,31.3531C12.7528,31.9352 13.7582,32.3586 14.843,32.6497C16.0072,32.9672 17.1716,32.1206 17.1716,30.9035C17.1716,30.0833 16.6159,29.4215 15.8486,29.1569C15.1872,28.9452 14.5255,28.6545 13.917,28.2841C12.3559,27.3845 11.1392,26.141 10.266,24.5535C9.3665,22.966 8.9431,21.193 8.9431,19.2086C8.9431,17.2243 9.3929,15.4518 10.266,13.8643C11.1392,12.2768 12.3824,11.0329 13.917,10.1069C14.3403,9.8688 14.7901,9.6575 15.2399,9.4723L15.2399,10.0542L15.2399,11.6417L15.2399,13.6524L15.2399,15.2135L15.2399,16.4837C15.2399,17.0129 15.4254,17.4625 15.8223,17.8594C16.1927,18.2298 16.6688,18.4412 17.1979,18.4412C17.7535,18.4412 18.23,18.2562 18.6004,17.8594C18.9708,17.489 19.1559,17.0129 19.1559,16.4837L19.1559,15.2135L19.1559,13.5465L19.1559,11.6417L19.1559,10.0542L19.1559,7.276C19.1559,6.7204 18.9708,6.244 18.6004,5.8735C18.2035,5.556 17.7536,5.3712 17.1716,5.3712z"
|
||||
android:strokeWidth="0.99999994" />
|
||||
</vector>
|
12
wear/src/main/res/drawable/ic_aaps_full.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="38.4175"
|
||||
android:viewportHeight="38.4175"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M19.2086,0C16.6157,0 14.1552,0.5028 11.9062,1.4289C7.1702,3.3868 3.3868,7.1702 1.4288,11.9062C0.5028,14.1552 -0,16.6157 -0,19.2086C-0,21.8016 0.5028,24.2621 1.4288,26.511C3.3868,31.2471 7.1702,35.031 11.9062,36.989C14.1552,37.915 16.6157,38.4173 19.2086,38.4173C21.8015,38.4173 24.2621,37.915 26.511,36.989C31.2471,35.031 35.031,31.2471 36.9889,26.511C37.915,24.2621 38.4173,21.8016 38.4173,19.2086C38.4173,16.6157 37.915,14.1552 36.9889,11.9062C35.031,7.1702 31.2471,3.3868 26.511,1.4289C24.2621,0.5028 21.8015,0 19.2086,0zM19.1823,2.99C28.1252,2.99 35.3746,10.2658 35.3746,19.1823C35.3746,22.2515 34.5282,25.1087 33.0466,27.5694L33.0466,19.235C33.0731,16.6421 32.4643,14.2612 31.2472,12.1181C30.0301,9.975 28.3632,8.3077 26.2201,7.0642C25.2941,6.535 24.3151,6.1119 23.3097,5.8208C22.1984,5.4769 21.0607,6.3765 21.0607,7.5406C21.0607,8.3344 21.5901,8.9959 22.3309,9.2341C23.0189,9.4457 23.6539,9.7365 24.2889,10.1069C25.8235,11.0329 27.0404,12.2768 27.9135,13.8643C28.7867,15.4518 29.2365,17.2243 29.2365,19.2086C29.2365,21.193 28.7867,22.966 27.9135,24.5535C27.0139,26.141 25.8235,27.3845 24.2889,28.2841C23.8656,28.5222 23.4422,28.734 22.9924,28.9192L22.9924,28.0722L22.9924,26.1674L22.9924,24.5799L22.9924,21.8018C22.9924,21.2461 22.8073,20.7697 22.4369,20.3993C22.0665,20.0289 21.6164,19.8437 21.0344,19.8437C20.5052,19.8437 20.0556,20.0289 19.6587,20.3993C19.2883,20.7697 19.0763,21.2197 19.0763,21.8018L19.0763,24.5799L19.0763,26.1674L19.0763,28.1781L19.0763,29.7393L19.0763,31.009C19.0763,31.5381 19.2619,31.9882 19.6587,32.3851C20.0292,32.7555 20.5052,32.967 21.0344,32.967C21.3254,32.967 21.6163,32.9142 21.8545,32.8083C22.8334,32.5702 23.7858,32.2526 24.659,31.7764C26.4581,30.8503 27.9399,29.6071 29.1305,27.9931L29.1305,31.009C29.1305,31.3265 29.1833,31.5915 29.2892,31.8296C26.511,34.0521 22.9923,35.3746 19.1823,35.3746C10.2394,35.3746 2.99,28.0987 2.99,19.1823C2.99,10.2658 10.2658,2.99 19.1823,2.99zM17.1716,5.3712C16.9334,5.3712 16.7218,5.4238 16.5101,5.4767C14.9226,5.7413 13.4145,6.2704 12.0122,7.0642C9.8955,8.2813 8.2286,9.975 6.9851,12.1181C5.768,14.2612 5.1594,16.6421 5.1594,19.235C5.1594,21.8279 5.7412,24.2094 6.9319,26.326C8.1225,28.4427 9.7366,30.1096 11.8003,31.3531C12.7528,31.9352 13.7582,32.3586 14.843,32.6497C16.0072,32.9672 17.1716,32.1206 17.1716,30.9035C17.1716,30.0833 16.6159,29.4215 15.8486,29.1569C15.1872,28.9452 14.5255,28.6545 13.917,28.2841C12.3559,27.3845 11.1392,26.141 10.266,24.5535C9.3665,22.966 8.9431,21.193 8.9431,19.2086C8.9431,17.2243 9.3929,15.4518 10.266,13.8643C11.1392,12.2768 12.3824,11.0329 13.917,10.1069C14.3403,9.8688 14.7901,9.6575 15.2399,9.4723L15.2399,10.0542L15.2399,11.6417L15.2399,13.6524L15.2399,15.2135L15.2399,16.4837C15.2399,17.0129 15.4254,17.4625 15.8223,17.8594C16.1927,18.2298 16.6688,18.4412 17.1979,18.4412C17.7535,18.4412 18.23,18.2562 18.6004,17.8594C18.9708,17.489 19.1559,17.0129 19.1559,16.4837L19.1559,15.2135L19.1559,13.5465L19.1559,11.6417L19.1559,10.0542L19.1559,7.276C19.1559,6.7204 18.9708,6.244 18.6004,5.8735C18.2035,5.556 17.7536,5.3712 17.1716,5.3712z"
|
||||
android:strokeWidth="0.99999994" />
|
||||
</vector>
|
12
wear/src/main/res/drawable/ic_aaps_gray.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="38.4175"
|
||||
android:viewportHeight="38.4175"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/darker_gray"
|
||||
android:pathData="M19.2086,0C16.6157,0 14.1552,0.5028 11.9062,1.4289C7.1702,3.3868 3.3868,7.1702 1.4288,11.9062C0.5028,14.1552 -0,16.6157 -0,19.2086C-0,21.8016 0.5028,24.2621 1.4288,26.511C3.3868,31.2471 7.1702,35.031 11.9062,36.989C14.1552,37.915 16.6157,38.4173 19.2086,38.4173C21.8015,38.4173 24.2621,37.915 26.511,36.989C31.2471,35.031 35.031,31.2471 36.9889,26.511C37.915,24.2621 38.4173,21.8016 38.4173,19.2086C38.4173,16.6157 37.915,14.1552 36.9889,11.9062C35.031,7.1702 31.2471,3.3868 26.511,1.4289C24.2621,0.5028 21.8015,0 19.2086,0zM19.1823,2.99C28.1252,2.99 35.3746,10.2658 35.3746,19.1823C35.3746,22.2515 34.5282,25.1087 33.0466,27.5694L33.0466,19.235C33.0731,16.6421 32.4643,14.2612 31.2472,12.1181C30.0301,9.975 28.3632,8.3077 26.2201,7.0642C25.2941,6.535 24.3151,6.1119 23.3097,5.8208C22.1984,5.4769 21.0607,6.3765 21.0607,7.5406C21.0607,8.3344 21.5901,8.9959 22.3309,9.2341C23.0189,9.4457 23.6539,9.7365 24.2889,10.1069C25.8235,11.0329 27.0404,12.2768 27.9135,13.8643C28.7867,15.4518 29.2365,17.2243 29.2365,19.2086C29.2365,21.193 28.7867,22.966 27.9135,24.5535C27.0139,26.141 25.8235,27.3845 24.2889,28.2841C23.8656,28.5222 23.4422,28.734 22.9924,28.9192L22.9924,28.0722L22.9924,26.1674L22.9924,24.5799L22.9924,21.8018C22.9924,21.2461 22.8073,20.7697 22.4369,20.3993C22.0665,20.0289 21.6164,19.8437 21.0344,19.8437C20.5052,19.8437 20.0556,20.0289 19.6587,20.3993C19.2883,20.7697 19.0763,21.2197 19.0763,21.8018L19.0763,24.5799L19.0763,26.1674L19.0763,28.1781L19.0763,29.7393L19.0763,31.009C19.0763,31.5381 19.2619,31.9882 19.6587,32.3851C20.0292,32.7555 20.5052,32.967 21.0344,32.967C21.3254,32.967 21.6163,32.9142 21.8545,32.8083C22.8334,32.5702 23.7858,32.2526 24.659,31.7764C26.4581,30.8503 27.9399,29.6071 29.1305,27.9931L29.1305,31.009C29.1305,31.3265 29.1833,31.5915 29.2892,31.8296C26.511,34.0521 22.9923,35.3746 19.1823,35.3746C10.2394,35.3746 2.99,28.0987 2.99,19.1823C2.99,10.2658 10.2658,2.99 19.1823,2.99zM17.1716,5.3712C16.9334,5.3712 16.7218,5.4238 16.5101,5.4767C14.9226,5.7413 13.4145,6.2704 12.0122,7.0642C9.8955,8.2813 8.2286,9.975 6.9851,12.1181C5.768,14.2612 5.1594,16.6421 5.1594,19.235C5.1594,21.8279 5.7412,24.2094 6.9319,26.326C8.1225,28.4427 9.7366,30.1096 11.8003,31.3531C12.7528,31.9352 13.7582,32.3586 14.843,32.6497C16.0072,32.9672 17.1716,32.1206 17.1716,30.9035C17.1716,30.0833 16.6159,29.4215 15.8486,29.1569C15.1872,28.9452 14.5255,28.6545 13.917,28.2841C12.3559,27.3845 11.1392,26.141 10.266,24.5535C9.3665,22.966 8.9431,21.193 8.9431,19.2086C8.9431,17.2243 9.3929,15.4518 10.266,13.8643C11.1392,12.2768 12.3824,11.0329 13.917,10.1069C14.3403,9.8688 14.7901,9.6575 15.2399,9.4723L15.2399,10.0542L15.2399,11.6417L15.2399,13.6524L15.2399,15.2135L15.2399,16.4837C15.2399,17.0129 15.4254,17.4625 15.8223,17.8594C16.1927,18.2298 16.6688,18.4412 17.1979,18.4412C17.7535,18.4412 18.23,18.2562 18.6004,17.8594C18.9708,17.489 19.1559,17.0129 19.1559,16.4837L19.1559,15.2135L19.1559,13.5465L19.1559,11.6417L19.1559,10.0542L19.1559,7.276C19.1559,6.7204 18.9708,6.244 18.6004,5.8735C18.2035,5.556 17.7536,5.3712 17.1716,5.3712z"
|
||||
android:strokeWidth="0.99999994" />
|
||||
</vector>
|
12
wear/src/main/res/drawable/ic_aaps_light.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="38.4175"
|
||||
android:viewportHeight="38.4175"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M19.2086,0C16.6157,0 14.1552,0.5028 11.9062,1.4289C7.1702,3.3868 3.3868,7.1702 1.4288,11.9062C0.5028,14.1552 -0,16.6157 -0,19.2086C-0,21.8016 0.5028,24.2621 1.4288,26.511C3.3868,31.2471 7.1702,35.031 11.9062,36.989C14.1552,37.915 16.6157,38.4173 19.2086,38.4173C21.8015,38.4173 24.2621,37.915 26.511,36.989C31.2471,35.031 35.031,31.2471 36.9889,26.511C37.915,24.2621 38.4173,21.8016 38.4173,19.2086C38.4173,16.6157 37.915,14.1552 36.9889,11.9062C35.031,7.1702 31.2471,3.3868 26.511,1.4289C24.2621,0.5028 21.8015,0 19.2086,0zM19.1823,2.99C28.1252,2.99 35.3746,10.2658 35.3746,19.1823C35.3746,22.2515 34.5282,25.1087 33.0466,27.5694L33.0466,19.235C33.0731,16.6421 32.4643,14.2612 31.2472,12.1181C30.0301,9.975 28.3632,8.3077 26.2201,7.0642C25.2941,6.535 24.3151,6.1119 23.3097,5.8208C22.1984,5.4769 21.0607,6.3765 21.0607,7.5406C21.0607,8.3344 21.5901,8.9959 22.3309,9.2341C23.0189,9.4457 23.6539,9.7365 24.2889,10.1069C25.8235,11.0329 27.0404,12.2768 27.9135,13.8643C28.7867,15.4518 29.2365,17.2243 29.2365,19.2086C29.2365,21.193 28.7867,22.966 27.9135,24.5535C27.0139,26.141 25.8235,27.3845 24.2889,28.2841C23.8656,28.5222 23.4422,28.734 22.9924,28.9192L22.9924,28.0722L22.9924,26.1674L22.9924,24.5799L22.9924,21.8018C22.9924,21.2461 22.8073,20.7697 22.4369,20.3993C22.0665,20.0289 21.6164,19.8437 21.0344,19.8437C20.5052,19.8437 20.0556,20.0289 19.6587,20.3993C19.2883,20.7697 19.0763,21.2197 19.0763,21.8018L19.0763,24.5799L19.0763,26.1674L19.0763,28.1781L19.0763,29.7393L19.0763,31.009C19.0763,31.5381 19.2619,31.9882 19.6587,32.3851C20.0292,32.7555 20.5052,32.967 21.0344,32.967C21.3254,32.967 21.6163,32.9142 21.8545,32.8083C22.8334,32.5702 23.7858,32.2526 24.659,31.7764C26.4581,30.8503 27.9399,29.6071 29.1305,27.9931L29.1305,31.009C29.1305,31.3265 29.1833,31.5915 29.2892,31.8296C26.511,34.0521 22.9923,35.3746 19.1823,35.3746C10.2394,35.3746 2.99,28.0987 2.99,19.1823C2.99,10.2658 10.2658,2.99 19.1823,2.99zM17.1716,5.3712C16.9334,5.3712 16.7218,5.4238 16.5101,5.4767C14.9226,5.7413 13.4145,6.2704 12.0122,7.0642C9.8955,8.2813 8.2286,9.975 6.9851,12.1181C5.768,14.2612 5.1594,16.6421 5.1594,19.235C5.1594,21.8279 5.7412,24.2094 6.9319,26.326C8.1225,28.4427 9.7366,30.1096 11.8003,31.3531C12.7528,31.9352 13.7582,32.3586 14.843,32.6497C16.0072,32.9672 17.1716,32.1206 17.1716,30.9035C17.1716,30.0833 16.6159,29.4215 15.8486,29.1569C15.1872,28.9452 14.5255,28.6545 13.917,28.2841C12.3559,27.3845 11.1392,26.141 10.266,24.5535C9.3665,22.966 8.9431,21.193 8.9431,19.2086C8.9431,17.2243 9.3929,15.4518 10.266,13.8643C11.1392,12.2768 12.3824,11.0329 13.917,10.1069C14.3403,9.8688 14.7901,9.6575 15.2399,9.4723L15.2399,10.0542L15.2399,11.6417L15.2399,13.6524L15.2399,15.2135L15.2399,16.4837C15.2399,17.0129 15.4254,17.4625 15.8223,17.8594C16.1927,18.2298 16.6688,18.4412 17.1979,18.4412C17.7535,18.4412 18.23,18.2562 18.6004,17.8594C18.9708,17.489 19.1559,17.0129 19.1559,16.4837L19.1559,15.2135L19.1559,13.5465L19.1559,11.6417L19.1559,10.0542L19.1559,7.276C19.1559,6.7204 18.9708,6.244 18.6004,5.8735C18.2035,5.556 17.7536,5.3712 17.1716,5.3712z"
|
||||
android:strokeWidth="0.99999994" />
|
||||
</vector>
|
9
wear/src/main/res/drawable/ic_alert.xml
Normal file
|
@ -0,0 +1,9 @@
|
|||
<!-- drawable/alert.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M13,14H11V10H13M13,18H11V16H13M1,21H23L12,2L1,21Z" />
|
||||
</vector>
|
9
wear/src/main/res/drawable/ic_alert_burnin.xml
Normal file
|
@ -0,0 +1,9 @@
|
|||
<!-- drawable/alert_outline.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16" />
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<!-- drawable/battery_alert_variant_outline.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M14 20H6V6H14M14.67 4H13V2H7V4H5.33C4.6 4 4 4.6 4 5.33V20.67C4 21.4 4.6 22 5.33 22H14.67C15.4 22 16 21.4 16 20.67V5.33C16 4.6 15.4 4 14.67 4M21 8H19V13H21V8M21 15H19V17H21V15Z" />
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<!-- drawable/battery_charging_wireless.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76Z" />
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<!-- drawable/battery_charging_wireless_10.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,18.5H4V6H12V18.5Z" />
|
||||
</vector>
|
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="m5,2v2h-2c-0.5523,0 -1,0.4477 -1,1v16c0,0.5523 0.4477,1 1,1h10c0.5523,0 1,-0.4477 1,-1v-16c0,-0.5523 -0.4477,-1 -1,-1h-2v-2zM20.07,4.9297 L18.6598,6.3399c3.13,3.12 3.13,8.1903 0,11.32l1.4102,1.4102c3.9,-3.9 3.9,-10.231 0,-14.141zM4,6h8v14h-2v-1.5h-2v1.5h-2v-1.5h-2zM17.24,7.7598 L15.8298,9.17c1.56,1.56 1.56,4.0902 0,5.6602l1.4102,1.4102c2.34,-2.34 2.34,-6.1405 0,-8.4805z"/>
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<!-- drawable/battery_charging_wireless_20.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,17H4V6H12V17Z" />
|
||||
</vector>
|
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="m5,2v2h-2c-0.5523,0 -1,0.4477 -1,1v16c0,0.5523 0.4477,1 1,1h10c0.5523,0 1,-0.4477 1,-1v-16c0,-0.5523 -0.4477,-1 -1,-1h-2v-2zM20.07,4.9297 L18.6598,6.3399c3.13,3.12 3.13,8.1903 0,11.32l1.4102,1.4102c3.9,-3.9 3.9,-10.231 0,-14.141zM4,6h8v11h-2v1h2v2h-2v-2h-2v2h-2v-2h-2zM6,18h2v-1h-2zM17.24,7.76 L15.8298,9.1702c1.56,1.56 1.56,4.0902 0,5.6602l1.4102,1.4102c2.34,-2.34 2.34,-6.1405 0,-8.4805z"/>
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<!-- drawable/battery_charging_wireless_30.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,16H4V6H12V16Z" />
|
||||
</vector>
|
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="m5,2v2h-2c-0.5523,0 -1,0.4477 -1,1v16c0,0.5523 0.4477,1 1,1h10c0.5523,0 1,-0.4477 1,-1v-16c0,-0.5523 -0.4477,-1 -1,-1h-2v-2zM20.07,4.9297 L18.6598,6.3399c3.13,3.12 3.13,8.1903 0,11.32l1.4102,1.4102c3.9,-3.9 3.9,-10.231 0,-14.141zM4,6h8v10h-2v2h2v2h-2v-2h-2v2h-2v-2h-2zM6,18h2v-2h-2zM17.24,7.76 L15.8298,9.1702c1.56,1.56 1.56,4.0902 0,5.6602l1.4102,1.4102c2.34,-2.34 2.34,-6.1405 0,-8.4805z"/>
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<!-- drawable/battery_charging_wireless_40.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,14.5H4V6H12V14.5Z" />
|
||||
</vector>
|
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="m5,2v2h-2c-0.5523,0 -1,0.4477 -1,1v16c0,0.5523 0.4477,1 1,1h10c0.5523,0 1,-0.4477 1,-1v-16c0,-0.5523 -0.4477,-1 -1,-1h-2v-2zM20.07,4.9297 L18.6598,6.3399c3.13,3.12 3.13,8.1903 0,11.32l1.4102,1.4102c3.9,-3.9 3.9,-10.231 0,-14.141zM4,6h8v10h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v-2h2v-1.5h-2zM6,16v2h2v-2zM8,16h2v-1.5h-2zM17.2402,7.7598 L15.83,9.17c1.56,1.56 1.56,4.0902 0,5.6602l1.4102,1.4102c2.34,-2.34 2.34,-6.1405 0,-8.4805z"/>
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<!-- drawable/battery_charging_wireless_50.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,13H4V6H12V13Z" />
|
||||
</vector>
|
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="m5,2v2h-2c-0.5523,0 -1,0.4477 -1,1v16c0,0.5523 0.4477,1 1,1h10c0.5523,0 1,-0.4477 1,-1v-16c0,-0.5523 -0.4477,-1 -1,-1h-2v-2zM20.07,4.9297 L18.6598,6.3399c3.13,3.12 3.13,8.1903 0,11.32l1.4102,1.4102c3.9,-3.9 3.9,-10.231 0,-14.141zM4,6h8v7h-2v1h2v2h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v-2h2v-2h-2zM6,14h2v-1h-2zM8,14v2h2v-2zM8,16h-2v2h2zM17.2402,7.7598 L15.83,9.17c1.56,1.56 1.56,4.0902 0,5.6602l1.4102,1.4102c2.34,-2.34 2.34,-6.1405 0,-8.4805z"/>
|
||||
</vector>
|
|
@ -0,0 +1,9 @@
|
|||
<!-- drawable/battery_charging_wireless_60.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M20.07,4.93L18.66,6.34C21.79,9.46 21.79,14.53 18.66,17.66L20.07,19.07C23.97,15.17 23.97,8.84 20.07,4.93M17.24,7.76L15.83,9.17C17.39,10.73 17.39,13.26 15.83,14.83L17.24,16.24C19.58,13.9 19.58,10.1 17.24,7.76M13,4H11V2H5V4H3A1,1 0 0,0 2,5V21A1,1 0 0,0 3,22H13A1,1 0 0,0 14,21V5A1,1 0 0,0 13,4M12,11.6H4V6H12V11.6Z" />
|
||||
</vector>
|
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="m5,2v2h-2c-0.5523,0 -1,0.4477 -1,1v16c0,0.5523 0.4477,1 1,1h10c0.5523,0 1,-0.4477 1,-1v-16c0,-0.5523 -0.4477,-1 -1,-1h-2v-2zM20.07,4.9297 L18.6598,6.3399c3.13,3.12 3.13,8.1903 0,11.32l1.4102,1.4102c3.9,-3.9 3.9,-10.231 0,-14.141zM4,6h8v6h-2v2h2v2h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v-2h2v-2h-2v-2h2v-0.4004h-2zM6,12v2h2v-2zM8,12h2v-0.4004h-2zM8,14v2h2v-2zM8,16h-2v2h2zM17.2402,7.7598 L15.83,9.17c1.56,1.56 1.56,4.0902 0,5.6602l1.4102,1.4102c2.34,-2.34 2.34,-6.1405 0,-8.4805z"/>
|
||||
</vector>
|