Add support for Galaxy Buds3 Pro

- Add Galaxy Buds3 Pro device coordinator and assets
- Remove unnecessary duplicate entries
- Clean up device type migration file
This commit is contained in:
Kreato
2025-12-14 00:55:39 +03:00
parent 625e007b71
commit 790e18a9e3
18 changed files with 1781 additions and 41 deletions
+71
View File
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="45"
height="45"
viewBox="0 0 25 25"
version="1.1"
id="svg5"
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
sodipodi:docname="buds_3_pro_case.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="10.162851"
inkscape:cx="8.9049817"
inkscape:cy="14.907235"
inkscape:window-width="1600"
inkscape:window-height="782"
inkscape:window-x="0"
inkscape:window-y="31"
inkscape:window-maximized="0"
inkscape:current-layer="layer1"
fit-margin-top="5"
fit-margin-left="5"
fit-margin-right="5"
fit-margin-bottom="5"
units="px"
viewbox-height="25"
inkscape:showpageshadow="2"
inkscape:deskcolor="#d1d1d1" />
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-35.169857,-38.996456)">
<rect
style="fill:none;stroke:#000000;stroke-width:2.66666667;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke;stop-color:#000000"
id="rect846"
width="20.062387"
height="19"
x="37.638664"
y="41.996456"
ry="5.7287159" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.11857;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 37.369142,48.081733 c 6.602959,1.04571 13.426354,1.008078 20.447213,0"
id="path1465"
sodipodi:nodetypes="cc" />
<ellipse
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.123958;stroke-linecap:round;stroke-linejoin:round"
id="path1"
cx="47.669857"
cy="52.796013"
rx="0.14457367"
ry="0.1512057" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="28.740126"
height="28.740126"
viewBox="0 0 28.740126 28.740126"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<g
id="layer1"
style="display:inline">
<g
id="layer4"
style="display:inline">
<rect
style="display:inline;fill:#1f7fdb;fill-opacity:1;stroke:none;stroke-width:3.57115;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect817-5"
width="22.819572"
height="21.904638"
x="2.9239759"
y="3.8768768"
ry="0.9472276" />
</g>
<g
id="layer3"
style="display:inline">
<rect
style="display:inline;fill:#4dabf5;fill-opacity:1;stroke:none;stroke-width:3.57115;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect817-7"
width="22.819572"
height="21.904638"
x="2.9317887"
y="3.0349438"
ry="0.9472276" />
</g>
<g
id="layer2"
style="display:inline">
<rect
style="fill:#2196f3;fill-opacity:1;stroke:none;stroke-width:3.57115;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect817"
width="22.819572"
height="21.904638"
x="2.9238882"
y="3.4130721"
ry="0.9472276" />
</g>
<g
id="g_buds3pro"
transform="translate(3.2,3)">
<g
id="buds_outline"
transform="matrix(0.028,0,0,0.028,0,2.3819521)">
<path
d="m 533.65284,105.48235 c 1.1,0.261 5.15,1.181 9,2.045 26.458,5.933 56.753,23.81 80.425,47.458 9.66,9.649 18.517,20.965 23.27,29.731 2.431,4.48 3.12,5.037 7,5.657 6.828,1.09 24.378,9.034 33.485,15.157 13.691,9.204 23.31,21.265 29.387,36.85 2.056,5.27 2.341,7.702 2.343,20 0.002,13.267 -0.167,14.471 -3.235,23 -9.066,25.208 -24.933,46.458 -40.852,54.714 -13.343,6.919 -19.143,8.271 -34.823,8.116 -12.76,-0.126 -14.818,-0.411 -23.237,-3.215 -11.113,-3.702 -20.573,-8.4 -29.07,-14.438 l -6.307,-4.482 -9.693,0.502 c -6.715,0.348 -12.612,-0.019 -19.193,-1.194 -5.225,-0.933 -10.962,-1.927 -12.75,-2.209 l -3.25,-0.513 v 91.08 91.079 l -3.042,6.28 c -1.672,3.454 -3.585,7.368 -4.25,8.698 -1.398,2.799 -5.768,5.431 -13.644,8.219 -3.06,1.083 -6.271,2.348 -7.135,2.812 -0.863,0.464 -4.629,2.068 -8.368,3.563 -9.653,3.862 -13.894,3.258 -23.561,-3.354 -13.924,-9.525 -17.457,-12.588 -19.75,-17.128 l -2.25,-4.454 v -119.859 -119.859 l -7.369,-11.179 c -7.8,-11.832 -13.392,-24.437 -16.176,-36.459 -1.959,-8.463 -1.65,-30.272 0.549,-38.72 2.942,-11.301 7.899,-24.702 10.913,-29.5 0.518,-0.825 2.984,-4.888 5.478,-9.029 7.605,-12.622 23.845,-27.228 36.105,-32.472 12.859,-5.5 18.667,-6.722 33.5,-7.051 7.975,-0.176 15.4,-0.107 16.5,0.154"
style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25;stroke-linecap:round;stroke-linejoin:round"
id="path1-2" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:12.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
d="M 489.697,209.80278 V 377.39842"
id="path9-4" />
<path
id="rect10"
style="fill:#ffffff;stroke:#ffffff;stroke-width:6.04454;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(-0.58655315,-0.80991074,0.93305149,-0.35974285,0,0)"
d="m -356.01971,278.73489 h 16.56293 c 3.75171,0 6.77204,3.02033 6.77204,6.77204 0,3.75171 -3.02033,6.77204 -6.77204,6.77204 h -16.56293 c -3.75171,0 -6.77204,-3.02033 -6.77204,-6.77204 0,-3.75171 3.02033,-6.77204 6.77204,-6.77204 z" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 580.74971,316.10089 C 568.5829,261.68686 590.88285,220.78034 642.69167,191.65893 591.5326,220.59658 566.5975,260.43439 580.74971,316.10089 Z"
id="path13" />
<path
id="path14"
style="fill:none;stroke:#ffffff;stroke-width:12.2116;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.97520822,0.22128925,-0.41510829,0.90977201,0,0)"
d="m 763.10468,136.42346 a 23.39325,33.368073 0 0 1 -23.39325,33.36807 23.39325,33.368073 0 0 1 -23.39325,-33.36807 23.39325,33.368073 0 0 1 23.39325,-33.36807 23.39325,33.368073 0 0 1 23.39325,33.36807 z" />
<path
d="m 264.20879,105.48235 c -1.1,0.261 -5.15,1.181 -9,2.045 -26.458,5.933 -56.753,23.81 -80.425,47.458 -9.66,9.649 -18.517,20.965 -23.27,29.731 -2.431,4.48 -3.12,5.037 -7,5.657 -6.828,1.09 -24.378,9.034 -33.485,15.157 -13.691,9.204 -23.31,21.265 -29.387,36.85 -2.056,5.27 -2.341,7.702 -2.343,20 -0.002,13.267 0.167,14.471 3.235,23 9.066,25.208 24.933,46.458 40.852,54.714 13.343,6.919 19.143,8.271 34.823,8.116 12.76,-0.126 14.818,-0.411 23.237,-3.215 11.113,-3.702 20.573,-8.4 29.07,-14.438 l 6.307,-4.482 9.693,0.502 c 6.715,0.348 12.612,-0.019 19.193,-1.194 5.225,-0.933 10.962,-1.927 12.75,-2.209 l 3.25,-0.513 v 91.08 91.079 l 3.042,6.28 c 1.672,3.454 3.585,7.368 4.25,8.698 1.398,2.799 5.768,5.431 13.644,8.219 3.06,1.083 6.271,2.348 7.135,2.812 0.863,0.464 4.629,2.068 8.368,3.563 9.653,3.862 13.894,3.258 23.561,-3.354 13.924,-9.525 17.457,-12.588 19.75,-17.128 l 2.25,-4.454 v -119.859 -119.859 l 7.369,-11.179 c 7.8,-11.832 13.392,-24.437 16.176,-36.459 1.959,-8.463 1.65,-30.272 -0.549,-38.72 -2.942,-11.301 -7.899,-24.702 -10.913,-29.5 -0.518,-0.825 -2.984,-4.888 -5.478,-9.029 -7.605,-12.622 -23.845,-27.228 -36.105,-32.472 -12.859,-5.5 -18.667,-6.722 -33.5,-7.051 -7.975,-0.176 -15.4,-0.107 -16.5,0.154"
style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25;stroke-linecap:round;stroke-linejoin:round"
id="path1-2-3" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:12.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
d="M 308.16463,209.80278 V 377.39842"
id="path9-4-5" />
<path
id="rect10-8"
style="fill:#ffffff;stroke:#ffffff;stroke-width:6.04454;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.58655315,-0.80991074,-0.93305149,-0.35974285,0,0)"
d="m -59.106523,-389.72366 h 16.562924 c 3.75171,0 6.77204,3.02033 6.77204,6.77204 0,3.75171 -3.02033,6.77204 -6.77204,6.77204 h -16.562924 c -3.75171,0 -6.77204,-3.02033 -6.77204,-6.77204 0,-3.75171 3.02033,-6.77204 6.77204,-6.77204 z" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 217.11192,316.10089 c 12.16681,-54.41403 -10.13314,-95.32055 -61.94196,-124.44196 51.15907,28.93765 76.09417,68.77546 61.94196,124.44196 z"
id="path13-4" />
<path
id="path14-8"
style="fill:none;stroke:#ffffff;stroke-width:12.2116;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(-0.97520822,0.22128925,0.41510829,0.90977201,0,0)"
d="M 21.719896,316.75488 A 23.39325,33.368073 0 0 1 -1.6733534,350.12296 23.39325,33.368073 0 0 1 -25.066603,316.75488 23.39325,33.368073 0 0 1 -1.6733534,283.38681 23.39325,33.368073 0 0 1 21.719896,316.75488 Z" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.9 KiB

@@ -0,0 +1,206 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="28.740126"
height="28.740126"
viewBox="0 0 28.740126 28.740126"
sodipodi:docname="ic_device_galaxy_buds_3_pro_disabled.svg"
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 14.370063 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="28.740126 : 14.370063 : 1"
inkscape:persp3d-origin="14.370063 : 9.580042 : 1"
id="perspective903" />
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1520"
inkscape:window-height="781"
id="namedview4"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="16"
inkscape:cx="2.53125"
inkscape:cy="12.4375"
inkscape:window-x="19"
inkscape:window-y="31"
inkscape:window-maximized="0"
inkscape:current-layer="buds_outline"
inkscape:pagecheckerboard="0"
inkscape:showpageshadow="2"
inkscape:deskcolor="#d1d1d1">
<inkscape:grid
type="xygrid"
id="grid972"
originx="0"
originy="0"
spacingy="1"
spacingx="1"
units="px" />
</sodipodi:namedview>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="Background"
style="display:inline">
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Bottom"
style="display:inline"
sodipodi:insensitive="true">
<rect
style="display:inline;fill:#7a7a7a;fill-opacity:1;stroke:none;stroke-width:3.57115;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect817-5"
width="22.819572"
height="21.904638"
x="2.9239759"
y="3.8768768"
ry="0.9472276" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Middle"
style="display:inline"
sodipodi:insensitive="true">
<rect
style="display:inline;fill:#9f9f9f;fill-opacity:0.94117647;stroke:none;stroke-width:3.57115;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect817-7"
width="22.819572"
height="21.904638"
x="2.9317887"
y="3.0349438"
ry="0.9472276" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Top"
style="display:inline"
sodipodi:insensitive="true">
<rect
style="fill:#8a8a8a;fill-opacity:1;stroke:none;stroke-width:3.57115;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect817"
width="22.819572"
height="21.904638"
x="2.9238882"
y="3.4130721"
ry="0.9472276" />
</g>
<g
id="g_buds3pro"
transform="translate(3.2,3)">
<g
id="buds_outline"
transform="matrix(0.028,0,0,0.028,0,2.3819521)">
<g
id="g15"
transform="translate(-13.111915,-23.494582)">
<g
id="g14"
transform="translate(24.553571,22.321429)">
<path
d="m 522.21118,106.6555 c 1.1,0.261 5.15,1.181 9,2.045 26.458,5.933 56.753,23.81 80.425,47.458 9.66,9.649 18.517,20.965 23.27,29.731 2.431,4.48 3.12,5.037 7,5.657 6.828,1.09 24.378,9.034 33.485,15.157 13.691,9.204 23.31,21.265 29.387,36.85 2.056,5.27 2.341,7.702 2.343,20 0.002,13.267 -0.167,14.471 -3.235,23 -9.066,25.208 -24.933,46.458 -40.852,54.714 -13.343,6.919 -19.143,8.271 -34.823,8.116 -12.76,-0.126 -14.818,-0.411 -23.237,-3.215 -11.113,-3.702 -20.573,-8.4 -29.07,-14.438 l -6.307,-4.482 -9.693,0.502 c -6.715,0.348 -12.612,-0.019 -19.193,-1.194 -5.225,-0.933 -10.962,-1.927 -12.75,-2.209 l -3.25,-0.513 v 91.08 91.079 l -3.042,6.28 c -1.672,3.454 -3.585,7.368 -4.25,8.698 -1.398,2.799 -5.768,5.431 -13.644,8.219 -3.06,1.083 -6.271,2.348 -7.135,2.812 -0.863,0.464 -4.629,2.068 -8.368,3.563 -9.653,3.862 -13.894,3.258 -23.561,-3.354 -13.924,-9.525 -17.457,-12.588 -19.75,-17.128 l -2.25,-4.454 v -119.859 -119.859 l -7.369,-11.179 c -7.8,-11.832 -13.392,-24.437 -16.176,-36.459 -1.959,-8.463 -1.65,-30.272 0.549,-38.72 2.942,-11.301 7.899,-24.702 10.913,-29.5 0.518,-0.825 2.984,-4.888 5.478,-9.029 7.605,-12.622 23.845,-27.228 36.105,-32.472 12.859,-5.5 18.667,-6.722 33.5,-7.051 7.975,-0.176 15.4,-0.107 16.5,0.154"
style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25;stroke-linecap:round;stroke-linejoin:round"
id="path1-2" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:12.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
d="M 478.25534,210.97593 V 378.57157"
id="path9-4" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:6.04454;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="rect10"
width="30.107004"
height="13.544081"
x="-359.66623"
y="268.4371"
transform="matrix(-0.58655315,-0.80991074,0.93305149,-0.35974285,0,0)"
ry="6.7720404" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 569.30805,317.27404 c -12.16681,-54.41403 10.13314,-95.32055 61.94196,-124.44196 -51.15907,28.93765 -76.09417,68.77546 -61.94196,124.44196 z"
id="path13"
sodipodi:nodetypes="ccc" />
<ellipse
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:12.2116;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path14"
cx="729.57709"
cy="140.17801"
transform="matrix(0.97520822,0.22128925,-0.41510829,0.90977201,0,0)"
rx="23.39325"
ry="33.368073" />
</g>
<g
id="g14-0"
transform="matrix(-1,0,0,1,799.53189,22.321429)"
style="display:inline">
<path
d="m 522.21118,106.6555 c 1.1,0.261 5.15,1.181 9,2.045 26.458,5.933 56.753,23.81 80.425,47.458 9.66,9.649 18.517,20.965 23.27,29.731 2.431,4.48 3.12,5.037 7,5.657 6.828,1.09 24.378,9.034 33.485,15.157 13.691,9.204 23.31,21.265 29.387,36.85 2.056,5.27 2.341,7.702 2.343,20 0.002,13.267 -0.167,14.471 -3.235,23 -9.066,25.208 -24.933,46.458 -40.852,54.714 -13.343,6.919 -19.143,8.271 -34.823,8.116 -12.76,-0.126 -14.818,-0.411 -23.237,-3.215 -11.113,-3.702 -20.573,-8.4 -29.07,-14.438 l -6.307,-4.482 -9.693,0.502 c -6.715,0.348 -12.612,-0.019 -19.193,-1.194 -5.225,-0.933 -10.962,-1.927 -12.75,-2.209 l -3.25,-0.513 v 91.08 91.079 l -3.042,6.28 c -1.672,3.454 -3.585,7.368 -4.25,8.698 -1.398,2.799 -5.768,5.431 -13.644,8.219 -3.06,1.083 -6.271,2.348 -7.135,2.812 -0.863,0.464 -4.629,2.068 -8.368,3.563 -9.653,3.862 -13.894,3.258 -23.561,-3.354 -13.924,-9.525 -17.457,-12.588 -19.75,-17.128 l -2.25,-4.454 v -119.859 -119.859 l -7.369,-11.179 c -7.8,-11.832 -13.392,-24.437 -16.176,-36.459 -1.959,-8.463 -1.65,-30.272 0.549,-38.72 2.942,-11.301 7.899,-24.702 10.913,-29.5 0.518,-0.825 2.984,-4.888 5.478,-9.029 7.605,-12.622 23.845,-27.228 36.105,-32.472 12.859,-5.5 18.667,-6.722 33.5,-7.051 7.975,-0.176 15.4,-0.107 16.5,0.154"
style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25;stroke-linecap:round;stroke-linejoin:round"
id="path1-2-3" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:12.5;stroke-linecap:round;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
d="M 478.25534,210.97593 V 378.57157"
id="path9-4-5" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:6.04454;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="rect10-8"
width="30.107004"
height="13.544081"
x="-359.66623"
y="268.4371"
transform="matrix(-0.58655315,-0.80991074,0.93305149,-0.35974285,0,0)"
ry="6.7720404" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:12.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 569.30805,317.27404 c -12.16681,-54.41403 10.13314,-95.32055 61.94196,-124.44196 -51.15907,28.93765 -76.09417,68.77546 -61.94196,124.44196 z"
id="path13-4"
sodipodi:nodetypes="ccc" />
<ellipse
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:12.2116;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path14-8"
cx="729.57709"
cy="140.17801"
transform="matrix(0.97520822,0.22128925,-0.41510829,0.90977201,0,0)"
rx="23.39325"
ry="33.368073" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="22.722658mm"
height="24.000002mm"
viewBox="0 0 22.722658 24.000001"
version="1.1"
id="svg7609"
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
sodipodi:docname="ic_galaxy_buds_3_pro_l.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7611"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
fit-margin-left="2"
fit-margin-right="2"
fit-margin-bottom="2"
fit-margin-top="2"
inkscape:zoom="5.0814255"
inkscape:cx="49.100395"
inkscape:cy="41.917371"
inkscape:window-width="1600"
inkscape:window-height="781"
inkscape:window-x="0"
inkscape:window-y="31"
inkscape:window-maximized="0"
inkscape:current-layer="g1"
inkscape:showpageshadow="2"
inkscape:deskcolor="#d1d1d1" />
<defs
id="defs7606" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(4.0001844,3.9998056)">
<g
id="g1"
transform="matrix(6.5332593,0,0,6.3507336,16.40368,14.732954)">
<path
d="m -1.087598,-2.6574099 c -0.00815,0.0019 -0.038153,0.0087 -0.066675,0.01515 -0.1960096,0.04395 -0.4204449,0.176392 -0.5958149,0.351585 -0.071565,0.07148 -0.1371801,0.155315 -0.1723918,0.220257 -0.01801,0.03319 -0.023114,0.03731 -0.051858,0.04191 -0.050584,0.0081 -0.1806002,0.06693 -0.2480679,0.112288 -0.1014274,0.06819 -0.1726882,0.157538 -0.2177086,0.272997 -0.015232,0.03904 -0.017343,0.05706 -0.017358,0.148166 -1.48e-5,0.09829 0.00124,0.107206 0.023966,0.170392 0.067164,0.186749 0.1847118,0.34417602 0.302645,0.40533902 0.098849,0.05126 0.1418177,0.06127 0.2579803,0.06013 0.09453,-9.33e-4 0.1097767,-0.003 0.1721474,-0.02382 0.082329,-0.02742 0.1524116,-0.06223 0.2153601,-0.106961 l 0.046724,-0.0332 0.071809,0.0037 c 0.049747,0.0026 0.093434,-1.41e-4 0.1421881,-0.0088 0.038708,-0.0069 0.08121,-0.01428 0.094456,-0.01637 l 0.024077,-0.0038 v 0.6747501 0.674744 l 0.022536,0.04652 c 0.012387,0.02559 0.026559,0.05458 0.031485,0.06444 0.010357,0.02074 0.042731,0.04023 0.1010793,0.06089 0.02267,0.008 0.046458,0.0174 0.052858,0.02083 0.00639,0.0034 0.034293,0.01532 0.061993,0.0264 0.071513,0.02861 0.1029314,0.02414 0.1745477,-0.02485 0.1031536,-0.07056 0.1293272,-0.09326 0.1463145,-0.12689 l 0.016669,-0.033 v -0.887955 -0.8879551 l 0.054592,-0.08282 c 0.057785,-0.08765 0.099212,-0.181037 0.1198372,-0.2701 0.014513,-0.0627 0.012224,-0.224265 -0.00407,-0.286851 -0.021795,-0.08372 -0.058518,-0.183 -0.080847,-0.218546 -0.00384,-0.0061 -0.022107,-0.03621 -0.040583,-0.06689 -0.05634,-0.09351 -0.1766517,-0.201714 -0.2674778,-0.240564 -0.095264,-0.04075 -0.1382913,-0.0498 -0.248179,-0.05224 -0.059081,-0.0013 -0.1140883,-7.93e-4 -0.1222375,0.0011"
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.185208;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="path1-2-3" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.0926041;stroke-linecap:round;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
d="m -0.7619586,-1.8845699 v 1.24160402"
id="path9-4-5" />
<path
id="rect10-8"
style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:0.044028;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
d="m -0.6078779,-2.0455649 0.071972,-0.09938 c 0.016303,-0.02251 0.00855,-0.04868 -0.017384,-0.05868 -0.025933,-0.01 -0.059935,7.4e-5 -0.076238,0.02259 l -0.071972,0.09938 c -0.016303,0.02251 -0.00855,0.04868 0.017384,0.05868 0.025933,0.01 0.059935,-7.4e-5 0.076238,-0.02258 z" />
<path
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.0926041;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m -1.4365071,-1.0970779 c 0.090136,-0.403117 -0.07507,-0.706166 -0.4588865,-0.921907 0.3790032,0.214379 0.5637307,0.509511 0.4588865,0.921907 z"
id="path13-4"
sodipodi:nodetypes="ccc" />
<path
id="path14-8"
style="display:inline;fill:none;stroke:#000000;stroke-width:0.0895161;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
d="m -2.2277592,-1.2683579 a 0.25176858,0.16660072 55.660797 0 0 0.2716238,0.186547 0.25176858,0.16660072 55.660797 0 0 0.066393,-0.263248 0.25176858,0.16660072 55.660797 0 0 -0.2716238,-0.186546 0.25176858,0.16660072 55.660797 0 0 -0.066393,0.263247 z" />
<g
aria-label="L"
id="text23582-9"
style="font-size:7.05556px;line-height:124%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.264583px;stroke-opacity:1"
transform="matrix(0.25680874,0,0,0.17587676,-3.6154219,-1.7800046)">
<path
d="m 5.740478,6.7282383 h 0.8331118 l -0.036823,4.0106167 1.7746367,-0.02331 v 1.144028 l -2.5954745,0.02331 z"
id="path24331-4"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:5.8;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="ccccccc" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="22.722658mm"
height="24.000002mm"
viewBox="0 0 22.722658 24.000001"
version="1.1"
id="svg7609"
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
sodipodi:docname="ic_galaxy_buds_3_pro_r.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7611"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
fit-margin-left="2"
fit-margin-right="2"
fit-margin-bottom="2"
fit-margin-top="2"
inkscape:zoom="5.0814255"
inkscape:cx="39.457432"
inkscape:cy="40.933396"
inkscape:window-width="1184"
inkscape:window-height="717"
inkscape:window-x="416"
inkscape:window-y="31"
inkscape:window-maximized="0"
inkscape:current-layer="text23582-9"
inkscape:showpageshadow="2"
inkscape:deskcolor="#d1d1d1" />
<defs
id="defs7606" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(4.0001844,3.9998056)">
<g
id="g1"
transform="matrix(6.5332593,0,0,6.3507336,16.40368,14.732954)">
<path
d="m -1.6805566,-2.6574099 c 0.00815,0.0019 0.038153,0.0087 0.066675,0.01515 0.1960096,0.04395 0.4204449,0.176392 0.5958149,0.351585 0.071565,0.07148 0.13718014,0.155315 0.17239184,0.220257 0.01801,0.03319 0.023114,0.03731 0.051858,0.04191 0.050584,0.0081 0.1806002,0.06693 0.2480679,0.112288 0.1014274,0.06819 0.1726882,0.157538 0.2177086,0.272997 0.015232,0.03904 0.017343,0.05706 0.017358,0.148166 1.48e-5,0.09829 -0.00124,0.107206 -0.023966,0.170392 -0.067164,0.186749 -0.1847118,0.34417602 -0.302645,0.40533902 -0.098849,0.05126 -0.1418177,0.06127 -0.2579803,0.06013 -0.09453,-9.33e-4 -0.10977674,-0.003 -0.17214744,-0.02382 -0.082329,-0.02742 -0.1524116,-0.06223 -0.2153601,-0.106961 l -0.046724,-0.0332 -0.071809,0.0037 c -0.049747,0.0026 -0.093434,-1.41e-4 -0.1421881,-0.0088 -0.038708,-0.0069 -0.08121,-0.01428 -0.094456,-0.01637 l -0.024077,-0.0038 v 0.67475012 0.674744 l -0.022536,0.04652 c -0.012387,0.02559 -0.026559,0.05458 -0.031485,0.06444 -0.010357,0.02074 -0.042731,0.04023 -0.1010793,0.06089 -0.02267,0.008 -0.046458,0.0174 -0.052858,0.02083 -0.00639,0.0034 -0.034293,0.01532 -0.061993,0.0264 -0.071513,0.02861 -0.1029314,0.02414 -0.1745477,-0.02485 -0.1031536,-0.07056 -0.1293272,-0.09326 -0.1463145,-0.12689 l -0.016669,-0.033 v -0.887955 -0.88795512 l -0.054592,-0.08282 c -0.057785,-0.08765 -0.099212,-0.181037 -0.1198372,-0.2701 -0.014513,-0.0627 -0.012224,-0.224265 0.00407,-0.286851 0.021795,-0.08372 0.058518,-0.183 0.080847,-0.218546 0.00384,-0.0061 0.022107,-0.03621 0.040583,-0.06689 0.05634,-0.09351 0.1766517,-0.201714 0.2674778,-0.240564 0.095264,-0.04075 0.1382913,-0.0498 0.248179,-0.05224 0.059081,-0.0013 0.1140883,-7.93e-4 0.1222375,0.0011"
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.185208;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
id="path1-2-3" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.0926041;stroke-linecap:round;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
d="m -2.006196,-1.8845699 v 1.24160402"
id="path9-4-5" />
<path
id="rect10-8"
style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:0.044028;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
d="m -2.1602767,-2.0455649 -0.071972,-0.09938 c -0.016303,-0.02251 -0.00855,-0.04868 0.017384,-0.05868 0.025933,-0.01 0.059935,7.4e-5 0.076238,0.02259 l 0.071972,0.09938 c 0.016303,0.02251 0.00855,0.04868 -0.017384,0.05868 -0.025933,0.01 -0.059935,-7.4e-5 -0.076238,-0.02258 z" />
<path
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.0926041;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m -1.3316475,-1.0970779 c -0.090136,-0.403117 0.07507,-0.706166 0.45888654,-0.921907 -0.37900324,0.214379 -0.56373074,0.509511 -0.45888654,0.921907 z"
id="path13-4"
sodipodi:nodetypes="ccc" />
<path
id="path14-8"
style="display:inline;fill:none;stroke:#000000;stroke-width:0.0895161;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
d="m -0.54039536,-1.2683579 a 0.16660072,0.25176858 34.339203 0 1 -0.2716238,0.186547 0.16660072,0.25176858 34.339203 0 1 -0.066393,-0.263248 0.16660072,0.25176858 34.339203 0 1 0.2716238,-0.186546 0.16660072,0.25176858 34.339203 0 1 0.066393,0.263247 z" />
<g
aria-label="L"
id="text23582-9"
style="font-size:7.05556px;line-height:124%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;stroke:#000000;stroke-width:0.264583px"
transform="matrix(0.13663008,0,0,0.10044243,-2.7487242,-2.8621994)">
<path
d="m 14.414279,27.435316 q 0.309546,0.132156 0.600043,0.564696 0.295261,0.432529 0.59052,1.189459 l 0.976262,2.451007 h -1.033409 l -0.909591,-2.300825 q -0.352407,-0.901105 -0.685763,-1.195467 -0.328596,-0.29436 -0.900066,-0.29436 h -1.047696 v 3.790652 h -0.961973 v -8.969006 h 2.171586 q 1.219137,0 1.81918,0.642787 0.600044,0.642789 0.600044,1.940383 0,0.847039 -0.314309,1.405724 -0.309547,0.558686 -0.904828,0.77495 z m -2.4097,-3.766622 v 3.183909 h 1.209613 q 0.695289,0 1.047696,-0.402496 0.357167,-0.4085 0.357167,-1.195465 0,-0.786966 -0.357167,-1.183453 -0.352407,-0.402495 -1.047696,-0.402495 z"
id="path21707"
style="font-size:7.05556px;line-height:124%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;stroke:#000000;stroke-width:0.46118;stroke-miterlimit:5.8;stroke-dasharray:none" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

@@ -400,8 +400,27 @@ public class DeviceSettingsPreferenceConst {
public static final String PREF_GALAXY_BUDS_PRO_AMBIENT_SOUND_TONE ="pref_galaxy_buds_pro_ambient_sound_tone";
public static final String PREFS_NOISE_CONTROL_WITH_ONE_EARBUD ="pref_galaxy_buds_noise_controls_with_one_earbud";
public static final String PREF_GALAXY_BUDS_PRO_ANC_LEVEL="pref_galaxy_buds_pro_anc_level";
public static final String PREF_GALAXY_BUDS_3_PRO_ANC_LEVEL="pref_galaxy_buds_3_pro_anc_level";
public static final String PREFS_GALAXY_BUDS_SEAMLESS_CONNECTION="prefs_galaxy_buds_seamless_connection";
// Galaxy Buds3 Pro specific
public static final String PREF_GALAXY_BUDS_3_PRO_MEDIA_CONTROLS="pref_galaxy_buds_3_pro_media_controls";
public static final String PREF_GALAXY_BUDS_3_PRO_ANSWER_CALL="pref_galaxy_buds_3_pro_answer_call";
public static final String PREF_GALAXY_BUDS_3_PRO_DECLINE_CALL="pref_galaxy_buds_3_pro_decline_call";
public static final String PREF_GALAXY_BUDS_3_PRO_EARBUD_LIGHTS="pref_galaxy_buds_3_pro_earbud_lights";
// Galaxy Buds3 Pro checkbox-based noise control switching (left earbud)
public static final String PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ANC="pref_galaxy_buds_touch_left_switch_anc";
public static final String PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_AMBIENT="pref_galaxy_buds_touch_left_switch_ambient";
public static final String PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ADAPTIVE="pref_galaxy_buds_touch_left_switch_adaptive";
public static final String PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_OFF="pref_galaxy_buds_touch_left_switch_off";
// Galaxy Buds3 Pro checkbox-based noise control switching (right earbud)
public static final String PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ANC="pref_galaxy_buds_touch_right_switch_anc";
public static final String PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_AMBIENT="pref_galaxy_buds_touch_right_switch_ambient";
public static final String PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ADAPTIVE="pref_galaxy_buds_touch_right_switch_adaptive";
public static final String PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_OFF="pref_galaxy_buds_touch_right_switch_off";
public static final String PREF_REDMI_BUDS_5_PRO_AMBIENT_SOUND_CONTROL="pref_redmi_buds_5_pro_ambient_sound_control";
public static final String PREF_REDMI_BUDS_5_PRO_NOISE_CANCELLING_STRENGTH="pref_redmi_buds_5_pro_noise_cancelling_strength";
public static final String PREF_REDMI_BUDS_5_PRO_TRANSPARENCY_STRENGTH="pref_redmi_buds_5_pro_transparency_strength";
@@ -0,0 +1,71 @@
/* Copyright (C) 2025 kreato
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.devices.galaxy_buds;
import java.util.regex.Pattern;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer;
import android.content.SharedPreferences;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.BatteryConfig;
public class GalaxyBuds3ProDeviceCoordinator extends GalaxyBudsGenericCoordinator {
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("^(Galaxy )?Buds3 Pro.*");
}
@Override
public DeviceSpecificSettingsCustomizer getDeviceSpecificSettingsCustomizer(final GBDevice device) {
return new GalaxyBudsSettingsCustomizer(device);
}
@Override
public int getBatteryCount(final GBDevice device) {
return 3;
}
@Override
public BatteryConfig[] getBatteryConfig(final GBDevice device) {
BatteryConfig battery1 = new BatteryConfig(0, R.drawable.buds_3_pro_case, R.string.battery_case);
BatteryConfig battery2 = new BatteryConfig(1, R.drawable.ic_galaxy_buds_3_pro_l, R.string.left_earbud);
BatteryConfig battery3 = new BatteryConfig(2, R.drawable.ic_galaxy_buds_3_pro_r, R.string.right_earbud);
return new BatteryConfig[]{battery1, battery2, battery3};
}
@Override
public int[] getSupportedDeviceSpecificSettings(GBDevice device) {
return new int[]{
R.xml.devicesettings_galaxy_buds_3_pro,
};
}
@Override
public int getDeviceNameResource() {
return R.string.devicetype_galaxybuds_3_pro;
}
@Override
public int getDefaultIconResource() {
return R.drawable.ic_device_galaxy_buds_3_pro;
}
}
@@ -23,8 +23,21 @@ import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.Dev
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_PRO_NOISE_CONTROL;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ANC;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_AMBIENT;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ADAPTIVE;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_OFF;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ANC;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_AMBIENT;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ADAPTIVE;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_OFF;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_MEDIA_CONTROLS;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_ANSWER_CALL;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_DECLINE_CALL;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_EARBUD_LIGHTS;
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_ANC_LEVEL;
import android.os.Parcel;
@@ -52,7 +65,6 @@ public class GalaxyBudsSettingsCustomizer implements DeviceSpecificSettingsCusto
@Override
public void customizeSettings(final DeviceSpecificSettingsHandler handler, Prefs prefs, final String rootKey) {
final Preference pref_galaxy_buds_pro_balance = handler.findPreference(PREF_GALAXY_BUDS_PRO_BALANCE);
if (pref_galaxy_buds_pro_balance != null) {
pref_galaxy_buds_pro_balance.setSummary(String.valueOf((prefs.getInt(PREF_GALAXY_BUDS_PRO_BALANCE, 16) - 16)));
@@ -158,28 +170,96 @@ public class GalaxyBudsSettingsCustomizer implements DeviceSpecificSettingsCusto
final Preference pref_galaxy_buds_touch_right = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_RIGHT);
String pref_galaxy_buds_touch_right_value = prefs.getString(PREF_GALAXY_BUDS_TOUCH_RIGHT, "1");
final Preference pref_galaxy_buds_touch_right_switch = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH);
// For Buds3 Pro: checkbox-based switch controls (Buds2 Pro uses ListPreference)
final Preference pref_galaxy_buds_touch_right_switch_anc = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ANC);
final Preference pref_galaxy_buds_touch_right_switch_ambient = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_AMBIENT);
final Preference pref_galaxy_buds_touch_right_switch_adaptive = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ADAPTIVE);
final Preference pref_galaxy_buds_touch_right_switch_off = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_OFF);
// Add change listeners for Buds3 Pro checkbox preferences to notify protocol handler
if (pref_galaxy_buds_touch_right_switch_anc != null) {
pref_galaxy_buds_touch_right_switch_anc.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ANC);
return true;
}
});
}
if (pref_galaxy_buds_touch_right_switch_ambient != null) {
pref_galaxy_buds_touch_right_switch_ambient.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_AMBIENT);
return true;
}
});
}
if (pref_galaxy_buds_touch_right_switch_adaptive != null) {
pref_galaxy_buds_touch_right_switch_adaptive.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ADAPTIVE);
return true;
}
});
}
if (pref_galaxy_buds_touch_right_switch_off != null) {
pref_galaxy_buds_touch_right_switch_off.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_OFF);
return true;
}
});
}
if (pref_galaxy_buds_touch_right != null) {
switch (pref_galaxy_buds_touch_right_value) {
case "2":
pref_galaxy_buds_touch_right_switch.setEnabled(true);
break;
default:
pref_galaxy_buds_touch_right_switch.setEnabled(false);
boolean isNoiseControl = pref_galaxy_buds_touch_right_value.equals("2");
// Enable/disable old-style switch preference (for older models)
if (pref_galaxy_buds_touch_right_switch != null) {
pref_galaxy_buds_touch_right_switch.setEnabled(isNoiseControl);
}
// Enable/disable Buds3 Pro checkboxes (Buds2 Pro uses old ListPreference)
if (pref_galaxy_buds_touch_right_switch_anc != null) {
pref_galaxy_buds_touch_right_switch_anc.setEnabled(isNoiseControl);
}
if (pref_galaxy_buds_touch_right_switch_ambient != null) {
pref_galaxy_buds_touch_right_switch_ambient.setEnabled(isNoiseControl);
}
if (pref_galaxy_buds_touch_right_switch_adaptive != null) {
pref_galaxy_buds_touch_right_switch_adaptive.setEnabled(isNoiseControl);
}
if (pref_galaxy_buds_touch_right_switch_off != null) {
pref_galaxy_buds_touch_right_switch_off.setEnabled(isNoiseControl);
}
pref_galaxy_buds_touch_right.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_TOUCH_RIGHT);
switch (newVal.toString()) {
case "2":
pref_galaxy_buds_touch_right_switch.setEnabled(true);
break;
default:
pref_galaxy_buds_touch_right_switch.setEnabled(false);
boolean enable = newVal.toString().equals("2");
// Update old-style switch
if (pref_galaxy_buds_touch_right_switch != null) {
pref_galaxy_buds_touch_right_switch.setEnabled(enable);
}
// Update Buds3 Pro checkboxes
if (pref_galaxy_buds_touch_right_switch_anc != null) {
pref_galaxy_buds_touch_right_switch_anc.setEnabled(enable);
}
if (pref_galaxy_buds_touch_right_switch_ambient != null) {
pref_galaxy_buds_touch_right_switch_ambient.setEnabled(enable);
}
if (pref_galaxy_buds_touch_right_switch_adaptive != null) {
pref_galaxy_buds_touch_right_switch_adaptive.setEnabled(enable);
}
if (pref_galaxy_buds_touch_right_switch_off != null) {
pref_galaxy_buds_touch_right_switch_off.setEnabled(enable);
}
return true;
@@ -190,28 +270,96 @@ public class GalaxyBudsSettingsCustomizer implements DeviceSpecificSettingsCusto
final Preference pref_galaxy_buds_touch_left = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_LEFT);
String pref_galaxy_buds_touch_left_value = prefs.getString(PREF_GALAXY_BUDS_TOUCH_LEFT, "1");
final Preference pref_galaxy_buds_touch_left_switch = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH);
// For Buds3 Pro: checkbox-based switch controls (Buds2 Pro uses ListPreference)
final Preference pref_galaxy_buds_touch_left_switch_anc = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ANC);
final Preference pref_galaxy_buds_touch_left_switch_ambient = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_AMBIENT);
final Preference pref_galaxy_buds_touch_left_switch_adaptive = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ADAPTIVE);
final Preference pref_galaxy_buds_touch_left_switch_off = handler.findPreference(PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_OFF);
// Add change listeners for Buds3 Pro checkbox preferences to notify protocol handler
if (pref_galaxy_buds_touch_left_switch_anc != null) {
pref_galaxy_buds_touch_left_switch_anc.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ANC);
return true;
}
});
}
if (pref_galaxy_buds_touch_left_switch_ambient != null) {
pref_galaxy_buds_touch_left_switch_ambient.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_AMBIENT);
return true;
}
});
}
if (pref_galaxy_buds_touch_left_switch_adaptive != null) {
pref_galaxy_buds_touch_left_switch_adaptive.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ADAPTIVE);
return true;
}
});
}
if (pref_galaxy_buds_touch_left_switch_off != null) {
pref_galaxy_buds_touch_left_switch_off.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_OFF);
return true;
}
});
}
if (pref_galaxy_buds_touch_left != null) {
switch (pref_galaxy_buds_touch_left_value) {
case "2":
pref_galaxy_buds_touch_left_switch.setEnabled(true);
break;
default:
pref_galaxy_buds_touch_left_switch.setEnabled(false);
boolean isNoiseControl = pref_galaxy_buds_touch_left_value.equals("2");
// Enable/disable old-style switch preference (for older models)
if (pref_galaxy_buds_touch_left_switch != null) {
pref_galaxy_buds_touch_left_switch.setEnabled(isNoiseControl);
}
// Enable/disable Buds3 Pro checkboxes (Buds2 Pro uses old ListPreference)
if (pref_galaxy_buds_touch_left_switch_anc != null) {
pref_galaxy_buds_touch_left_switch_anc.setEnabled(isNoiseControl);
}
if (pref_galaxy_buds_touch_left_switch_ambient != null) {
pref_galaxy_buds_touch_left_switch_ambient.setEnabled(isNoiseControl);
}
if (pref_galaxy_buds_touch_left_switch_adaptive != null) {
pref_galaxy_buds_touch_left_switch_adaptive.setEnabled(isNoiseControl);
}
if (pref_galaxy_buds_touch_left_switch_off != null) {
pref_galaxy_buds_touch_left_switch_off.setEnabled(isNoiseControl);
}
pref_galaxy_buds_touch_left.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_TOUCH_LEFT);
switch (newVal.toString()) {
case "2":
pref_galaxy_buds_touch_left_switch.setEnabled(true);
break;
default:
pref_galaxy_buds_touch_left_switch.setEnabled(false);
boolean enable = newVal.toString().equals("2");
// Update old-style switch
if (pref_galaxy_buds_touch_left_switch != null) {
pref_galaxy_buds_touch_left_switch.setEnabled(enable);
}
// Update Buds3 Pro checkboxes
if (pref_galaxy_buds_touch_left_switch_anc != null) {
pref_galaxy_buds_touch_left_switch_anc.setEnabled(enable);
}
if (pref_galaxy_buds_touch_left_switch_ambient != null) {
pref_galaxy_buds_touch_left_switch_ambient.setEnabled(enable);
}
if (pref_galaxy_buds_touch_left_switch_adaptive != null) {
pref_galaxy_buds_touch_left_switch_adaptive.setEnabled(enable);
}
if (pref_galaxy_buds_touch_left_switch_off != null) {
pref_galaxy_buds_touch_left_switch_off.setEnabled(enable);
}
return true;
@@ -219,6 +367,72 @@ public class GalaxyBudsSettingsCustomizer implements DeviceSpecificSettingsCusto
});
}
// ANC level change listener
if (pref_galaxy_buds_pro_anc_level != null) {
pref_galaxy_buds_pro_anc_level.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_PRO_ANC_LEVEL);
return true;
}
});
}
// Galaxy Buds3 Pro specific preferences - add change listeners
final Preference pref_galaxy_buds_3_pro_media_controls = handler.findPreference(PREF_GALAXY_BUDS_3_PRO_MEDIA_CONTROLS);
if (pref_galaxy_buds_3_pro_media_controls != null) {
pref_galaxy_buds_3_pro_media_controls.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_3_PRO_MEDIA_CONTROLS);
return true;
}
});
}
final Preference pref_galaxy_buds_3_pro_answer_call = handler.findPreference(PREF_GALAXY_BUDS_3_PRO_ANSWER_CALL);
if (pref_galaxy_buds_3_pro_answer_call != null) {
pref_galaxy_buds_3_pro_answer_call.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_3_PRO_ANSWER_CALL);
return true;
}
});
}
final Preference pref_galaxy_buds_3_pro_decline_call = handler.findPreference(PREF_GALAXY_BUDS_3_PRO_DECLINE_CALL);
if (pref_galaxy_buds_3_pro_decline_call != null) {
pref_galaxy_buds_3_pro_decline_call.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_3_PRO_DECLINE_CALL);
return true;
}
});
}
final Preference pref_galaxy_buds_3_pro_earbud_lights = handler.findPreference(PREF_GALAXY_BUDS_3_PRO_EARBUD_LIGHTS);
if (pref_galaxy_buds_3_pro_earbud_lights != null) {
pref_galaxy_buds_3_pro_earbud_lights.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_3_PRO_EARBUD_LIGHTS);
return true;
}
});
}
final Preference pref_galaxy_buds_3_pro_anc_level = handler.findPreference(PREF_GALAXY_BUDS_3_PRO_ANC_LEVEL);
if (pref_galaxy_buds_3_pro_anc_level != null) {
pref_galaxy_buds_3_pro_anc_level.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newVal) {
handler.notifyPreferenceChanged(PREF_GALAXY_BUDS_3_PRO_ANC_LEVEL);
return true;
}
});
}
/*
final Preference pref_galaxy_buds_ambient_mode = handler.findPreference(PREF_GALAXY_BUDS_AMBIENT_SOUND);
@@ -59,6 +59,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.fitpro.colacao.ColaCao23Coor
import nodomain.freeyourgadget.gadgetbridge.devices.flipper.zero.FlipperZeroCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.galaxy_buds.GalaxyBuds2DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.galaxy_buds.GalaxyBuds2ProDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.galaxy_buds.GalaxyBuds3ProDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.galaxy_buds.GalaxyBudsDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.galaxy_buds.GalaxyBudsLiveDeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.galaxy_buds.GalaxyBudsProDeviceCoordinator;
@@ -706,6 +707,7 @@ public enum DeviceType {
GALAXY_BUDS(GalaxyBudsDeviceCoordinator.class),
GALAXY_BUDS2(GalaxyBuds2DeviceCoordinator.class),
GALAXY_BUDS2_PRO(GalaxyBuds2ProDeviceCoordinator.class),
GALAXY_BUDS3_PRO(GalaxyBuds3ProDeviceCoordinator.class),
SONY_WH_1000XM3(SonyWH1000XM3Coordinator.class),
SONY_WF_SP800N(SonyWFSP800NCoordinator.class),
SONY_WI_C100(SonyWIC100Coordinator.class),
@@ -384,6 +384,11 @@ public class GalaxyBudsProtocol extends GBDeviceProtocol {
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_PRO_ANC_LEVEL:
int anc_level = Integer.parseInt(prefs.getString(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_PRO_ANC_LEVEL, "0"));
return encodeMessage(set_noise_reduction_level, (byte) anc_level);
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_ANC_LEVEL:
// Buds3 Pro uses integer-based SeekBarPreference (0-4)
int anc_level_3pro = prefs.getInt(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_ANC_LEVEL, 4);
return encodeMessage(set_noise_reduction_level, (byte) anc_level_3pro);
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_AMBIENT_SOUND:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_PRO_AMBIENT_VOLUME_RIGHT:
@@ -410,6 +415,51 @@ public class GalaxyBudsProtocol extends GBDeviceProtocol {
int ambient_volume = prefs.getInt(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_AMBIENT_VOLUME, 0);
byte ambient_volume_byte = (byte) (ambient_volume);
return encodeMessage(set_ambient_volume, ambient_volume_byte);
// Galaxy Buds3 Pro: Full touch controls message (10 bytes)
// Command 0x90 now controls ALL touch features with extended payload
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_MEDIA_CONTROLS:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_ANSWER_CALL:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_DECLINE_CALL:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_EARBUD_LIGHTS:
// Build full 10-byte payload for Buds3 Pro touch controls
// Format discovered from Samsung Galaxy Wearable app decompilation
byte[] touchPayload = new byte[10];
// Byte 0: Overall touch controls (always enabled for Buds3 Pro)
// Note: This is a device state field, not a user preference
touchPayload[0] = (byte) 0x01;
// Byte 1: Single pinch (play/pause)
boolean mediaControlsOn = prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_MEDIA_CONTROLS, true);
touchPayload[1] = (byte) (mediaControlsOn ? 0x01 : 0x00);
// Byte 2: Double pinch (next track)
touchPayload[2] = (byte) (mediaControlsOn ? 0x01 : 0x00);
// Byte 3: Triple pinch (previous track)
touchPayload[3] = (byte) (mediaControlsOn ? 0x01 : 0x00);
// Byte 4: Pinch and hold (always enabled for Buds3 Pro)
touchPayload[4] = (byte) 0x01;
// Byte 5: Single pinch to answer call
touchPayload[5] = (byte) (prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_ANSWER_CALL, true) ? 0x01 : 0x00);
// Byte 6: Pinch and hold to decline call
touchPayload[6] = (byte) (prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_DECLINE_CALL, true) ? 0x01 : 0x00);
// Byte 7: Swipe up/down for volume
touchPayload[7] = (byte) (mediaControlsOn ? 0x01 : 0x00);
// Byte 8: Earbud lights mode (0=?, 1=steady, 2=blinking, 3=fade)
String lightsMode = prefs.getString(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_3_PRO_EARBUD_LIGHTS, "0");
touchPayload[8] = (byte) Integer.parseInt(lightsMode);
// Byte 9: Quick launch advanced (unused for now)
touchPayload[9] = (byte) 0x00;
return encodeMessage(set_lock_touch, touchPayload);
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_LOCK_TOUCH:
byte set_lock = (byte) (prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_LOCK_TOUCH, false) ? 0x01 : 0x00);
return encodeMessage(set_lock_touch, set_lock);
@@ -448,20 +498,44 @@ public class GalaxyBudsProtocol extends GBDeviceProtocol {
byte touchmode_right = (byte) Integer.parseInt(touch_right);
return encodeMessage(set_touchpad_options, touchmode_left, touchmode_right);
// Noise control switching for pinch-and-hold gesture
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH:
String touch_right_switch = prefs.getString(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH, "1");
String touch_left_switch = prefs.getString(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH, "1");
byte[] touch_right_switch_b = encode_touch_switch(touch_right_switch);
byte[] touch_left_switch_b = encode_touch_switch(touch_left_switch);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
outputStream.write(touch_left_switch_b);
outputStream.write(touch_right_switch_b);
} catch (IOException e) {
LOG.warn("Assembling message failed: " + e.getMessage());
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ANC:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_AMBIENT:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ADAPTIVE:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_OFF:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ANC:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_AMBIENT:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ADAPTIVE:
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_OFF:
// Check if using newer format (Buds3 Pro only) - 1 byte per side with checkboxes
// vs older format (Buds Live, Buds Pro, Buds2 Pro) - 3 bytes per side with list selection
DeviceType type = getDevice().getType();
boolean useNewFormat = type.equals(DeviceType.GALAXY_BUDS3_PRO);
byte[] touch_payload;
if (useNewFormat) {
// New format: 2 bytes total (1 per side with bit flags from checkboxes)
byte touch_left_byte = encode_touch_switch_checkboxes(prefs, true);
byte touch_right_byte = encode_touch_switch_checkboxes(prefs, false);
touch_payload = new byte[]{touch_left_byte, touch_right_byte};
} else {
// Old format: 6 bytes total (3 per side from list selection)
String touch_right_switch = prefs.getString(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH, "1");
String touch_left_switch = prefs.getString(DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH, "1");
byte[] touch_right_switch_b = encode_touch_switch(touch_right_switch);
byte[] touch_left_switch_b = encode_touch_switch(touch_left_switch);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
outputStream.write(touch_left_switch_b);
outputStream.write(touch_right_switch_b);
} catch (IOException e) {
LOG.warn("Assembling message failed: " + e.getMessage());
}
touch_payload = outputStream.toByteArray();
}
return encodeMessage(set_touch_and_hold_noise_controls, outputStream.toByteArray());
return encodeMessage(set_touch_and_hold_noise_controls, touch_payload);
case DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_LIVE_ANC:
@@ -529,10 +603,59 @@ public class GalaxyBudsProtocol extends GBDeviceProtocol {
return new byte[]{0x1, 0x0, 0x1};
case "2":
return new byte[]{0x0, 0x1, 0x1};
case "3":
return new byte[]{0x1, 0x0, 0x0};
case "4":
return new byte[]{0x0, 0x0, 0x1};
default:
return new byte[]{0x1, 0x1, 0x0};
}
}
/**
* Encode touch switch for newer Galaxy Buds models (Buds3 Pro) using checkboxes
* Format: Single byte with bit flags
* Bit 3 (0x08): ANC enabled
* Bit 2 (0x04): Off enabled
* Bit 1 (0x02): Adaptive enabled
* Bit 0 (0x01): Ambient enabled
*/
private byte encode_touch_switch_checkboxes(SharedPreferences prefs, boolean isLeft) {
byte result = 0x00;
// Select the correct preference keys based on left/right side
String prefANC = isLeft ? DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ANC
: DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ANC;
String prefAmbient = isLeft ? DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_AMBIENT
: DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_AMBIENT;
String prefAdaptive = isLeft ? DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_ADAPTIVE
: DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_ADAPTIVE;
String prefOff = isLeft ? DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_LEFT_SWITCH_OFF
: DeviceSettingsPreferenceConst.PREF_GALAXY_BUDS_TOUCH_RIGHT_SWITCH_OFF;
// Build byte from checkbox states using bit flags
if (prefs.getBoolean(prefANC, true)) {
result |= 0x08; // Set bit 3
}
if (prefs.getBoolean(prefOff, false)) {
result |= 0x04; // Set bit 2
}
if (prefs.getBoolean(prefAdaptive, false)) {
result |= 0x02; // Set bit 1
}
if (prefs.getBoolean(prefAmbient, true)) {
result |= 0x01; // Set bit 0
}
// Ensure at least one mode is selected (default to ANC + Ambient if none selected)
if (result == 0x00) {
LOG.warn("No noise control modes selected for " + (isLeft ? "left" : "right") + " earbud, defaulting to ANC + Ambient");
result = 0x09; // ANC | Ambient
}
LOG.debug("Noise control byte for " + (isLeft ? "left" : "right") + ": 0x" + String.format("%02X", result));
return result;
}
protected GalaxyBudsProtocol(GBDevice device) {
super(device);
@@ -540,7 +663,8 @@ public class GalaxyBudsProtocol extends GBDeviceProtocol {
if (type.equals(DeviceType.GALAXY_BUDS_LIVE)
|| type.equals(DeviceType.GALAXY_BUDS_PRO)
|| type.equals(DeviceType.GALAXY_BUDS2)
|| type.equals(DeviceType.GALAXY_BUDS2_PRO)) {
|| type.equals(DeviceType.GALAXY_BUDS2_PRO)
|| type.equals(DeviceType.GALAXY_BUDS3_PRO)) {
StartOfMessage = SOM_BUDS_PLUS;
EndOfMessage = EOM_BUDS_PLUS;
}
@@ -0,0 +1,27 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="25"
android:viewportHeight="25"
android:width="45dp"
android:height="45dp">
<group
android:translateX="-35.16986"
android:translateY="-38.99646">
<path
android:pathData="M43.36738 41.99646H51.97234A5.728716 5.728716 0 0 1 57.70105 47.72517V55.26774A5.728716 5.728716 0 0 1 51.97234 60.99646H43.36738A5.728716 5.728716 0 0 1 37.63866 55.26774V47.72517A5.728716 5.728716 0 0 1 43.36738 41.99646Z"
android:strokeColor="#000000"
android:strokeWidth="2.666667"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M37.369142 48.081733c6.602959 1.04571 13.426354 1.008078 20.447213 0"
android:strokeColor="#000000"
android:strokeWidth="2.11857" />
<path
android:pathData="M47.81443 52.79601A0.1445737 0.1512057 0 0 1 47.52528 52.79601A0.1445737 0.1512057 0 0 1 47.81443 52.79601Z"
android:fillColor="#000000"
android:strokeColor="#000000"
android:strokeWidth="0.123958"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</vector>
@@ -0,0 +1,120 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="28.74013"
android:viewportHeight="28.74013"
android:width="28.74013dp"
android:height="28.74013dp">
<path
android:pathData="M3.871204 3.876877H24.79632A0.9472276 0.9472276 0 0 1 25.74355 4.824104V24.83429A0.9472276 0.9472276 0 0 1 24.79632 25.78151H3.871204A0.9472276 0.9472276 0 0 1 2.923976 24.83429V4.824104A0.9472276 0.9472276 0 0 1 3.871204 3.876877Z"
android:fillColor="#1F7FDB" />
<path
android:pathData="M3.879016 3.034944H24.80413A0.9472276 0.9472276 0 0 1 25.75136 3.982171V23.99235A0.9472276 0.9472276 0 0 1 24.80413 24.93958H3.879016A0.9472276 0.9472276 0 0 1 2.931789 23.99235V3.982171A0.9472276 0.9472276 0 0 1 3.879016 3.034944Z"
android:fillColor="#4DABF5" />
<path
android:pathData="M3.871116 3.413072H24.79623A0.9472276 0.9472276 0 0 1 25.74346 4.3603V24.37048A0.9472276 0.9472276 0 0 1 24.79623 25.31771H3.871116A0.9472276 0.9472276 0 0 1 2.923888 24.37048V4.3603A0.9472276 0.9472276 0 0 1 3.871116 3.413072Z"
android:fillColor="#2196F3" />
<group
android:translateX="3.2"
android:translateY="3">
<group
android:scaleX="0.028"
android:scaleY="0.028"
android:translateY="2.381952">
<path
android:pathData="M533.65284 105.48235c1.1 0.261 5.15 1.181 9 2.045 26.458 5.933 56.753 23.81 80.425 47.458 9.66 9.649 18.517 20.965 23.27 29.731 2.431 4.48 3.12 5.037 7 5.657 6.828 1.09 24.378 9.034 33.485 15.157 13.691 9.204 23.31 21.265 29.387 36.85 2.056 5.27 2.341 7.702 2.343 20 0.002 13.267 -0.167 14.471 -3.235 23 -9.066 25.208 -24.933 46.458 -40.852 54.714 -13.343 6.919 -19.143 8.271 -34.823 8.116 -12.76 -0.126 -14.818 -0.411 -23.237 -3.215 -11.113 -3.702 -20.573 -8.4 -29.07 -14.438l-6.307 -4.482 -9.693 0.502c-6.715 0.348 -12.612 -0.019 -19.193 -1.194 -5.225 -0.933 -10.962 -1.927 -12.75 -2.209l-3.25 -0.513v91.08 91.079l-3.042 6.28c-1.672 3.454 -3.585 7.368 -4.25 8.698 -1.398 2.799 -5.768 5.431 -13.644 8.219 -3.06 1.083 -6.271 2.348 -7.135 2.812 -0.863 0.464 -4.629 2.068 -8.368 3.563 -9.653 3.862 -13.894 3.258 -23.561 -3.354 -13.924 -9.525 -17.457 -12.588 -19.75 -17.128l-2.25 -4.454v-119.859 -119.859l-7.369 -11.179c-7.8 -11.832 -13.392 -24.437 -16.176 -36.459 -1.959 -8.463 -1.65 -30.272 0.549 -38.72 2.942 -11.301 7.899 -24.702 10.913 -29.5 0.518 -0.825 2.984 -4.888 5.478 -9.029 7.605 -12.622 23.845 -27.228 36.105 -32.472 12.859 -5.5 18.667 -6.722 33.5 -7.051 7.975 -0.176 15.4 -0.107 16.5 0.154"
android:strokeColor="#FFFFFF"
android:strokeWidth="25"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M489.697 209.80278V377.39842"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.5"
android:strokeLineCap="round"
android:strokeLineJoin="bevel" />
<group
android:rotation="16.5014"
android:scaleX="1.12068"
android:scaleY="0.862598">
<group
android:rotation="-135">
<path
android:pathData="M-356.01971 278.73489h16.56293c3.75171 0 6.77204 3.02033 6.77204 6.77204 0 3.75171 -3.02033 6.77204 -6.77204 6.77204h-16.56293c-3.75171 0 -6.77204 -3.02033 -6.77204 -6.77204 0 -3.75171 3.02033 -6.77204 6.77204 -6.77204z"
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeWidth="6.04454"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</group>
<path
android:pathData="M580.74971 316.10089C568.5829 261.68686 590.88285 220.78034 642.69167 191.65893 591.5326 220.59658 566.5975 260.43439 580.74971 316.10089Z"
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.5"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<group
android:rotation="-26.34455"
android:scaleX="1.097039"
android:scaleY="0.8924717">
<group
android:rotation="45">
<path
android:pathData="M763.10468 136.42346a23.39325 33.368073 0 0 1 -23.39325 33.36807 23.39325 33.368073 0 0 1 -23.39325 -33.36807 23.39325 33.368073 0 0 1 23.39325 -33.36807 23.39325 33.368073 0 0 1 23.39325 33.36807z"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.2116"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</group>
<path
android:pathData="M264.20879 105.48235c-1.1 0.261 -5.15 1.181 -9 2.045 -26.458 5.933 -56.753 23.81 -80.425 47.458 -9.66 9.649 -18.517 20.965 -23.27 29.731 -2.431 4.48 -3.12 5.037 -7 5.657 -6.828 1.09 -24.378 9.034 -33.485 15.157 -13.691 9.204 -23.31 21.265 -29.387 36.85 -2.056 5.27 -2.341 7.702 -2.343 20 -0.002 13.267 0.167 14.471 3.235 23 9.066 25.208 24.933 46.458 40.852 54.714 13.343 6.919 19.143 8.271 34.823 8.116 12.76 -0.126 14.818 -0.411 23.237 -3.215 11.113 -3.702 20.573 -8.4 29.07 -14.438l6.307 -4.482 9.693 0.502c6.715 0.348 12.612 -0.019 19.193 -1.194 5.225 -0.933 10.962 -1.927 12.75 -2.209l3.25 -0.513v91.08 91.079l3.042 6.28c1.672 3.454 3.585 7.368 4.25 8.698 1.398 2.799 5.768 5.431 13.644 8.219 3.06 1.083 6.271 2.348 7.135 2.812 0.863 0.464 4.629 2.068 8.368 3.563 9.653 3.862 13.894 3.258 23.561 -3.354 13.924 -9.525 17.457 -12.588 19.75 -17.128l2.25 -4.454v-119.859 -119.859l7.369 -11.179c7.8 -11.832 13.392 -24.437 16.176 -36.459 1.959 -8.463 1.65 -30.272 -0.549 -38.72 -2.942 -11.301 -7.899 -24.702 -10.913 -29.5 -0.518 -0.825 -2.984 -4.888 -5.478 -9.029 -7.605 -12.622 -23.845 -27.228 -36.105 -32.472 -12.859 -5.5 -18.667 -6.722 -33.5 -7.051 -7.975 -0.176 -15.4 -0.107 -16.5 0.154"
android:strokeColor="#FFFFFF"
android:strokeWidth="25"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M308.16463 209.80278V377.39842"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.5"
android:strokeLineCap="round"
android:strokeLineJoin="bevel" />
<group
android:rotation="-16.5014"
android:scaleX="1.12068"
android:scaleY="-0.862598">
<group
android:rotation="45">
<path
android:pathData="M-59.106523 -389.72366h16.562924c3.75171 0 6.77204 3.02033 6.77204 6.77204 0 3.75171 -3.02033 6.77204 -6.77204 6.77204h-16.562924c-3.75171 0 -6.77204 -3.02033 -6.77204 -6.77204 0 -3.75171 3.02033 -6.77204 6.77204 -6.77204z"
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeWidth="6.04454"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</group>
<path
android:pathData="M217.11192 316.10089c12.16681 -54.41403 -10.13314 -95.32055 -61.94196 -124.44196 51.15907 28.93765 76.09417 68.77546 61.94196 124.44196z"
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.5"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<group
android:rotation="26.34455"
android:scaleX="1.097039"
android:scaleY="-0.8924717">
<group
android:rotation="-135">
<path
android:pathData="M21.719896 316.75488A23.39325 33.368073 0 0 1 -1.6733534 350.12296 23.39325 33.368073 0 0 1 -25.066603 316.75488 23.39325 33.368073 0 0 1 -1.6733534 283.38681 23.39325 33.368073 0 0 1 21.719896 316.75488Z"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.2116"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</group>
</group>
</group>
</vector>
@@ -0,0 +1,135 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="28.74013"
android:viewportHeight="28.74013"
android:width="28.74013dp"
android:height="28.74013dp">
<path
android:pathData="M3.871204 3.876877H24.79632A0.9472276 0.9472276 0 0 1 25.74355 4.824104V24.83429A0.9472276 0.9472276 0 0 1 24.79632 25.78151H3.871204A0.9472276 0.9472276 0 0 1 2.923976 24.83429V4.824104A0.9472276 0.9472276 0 0 1 3.871204 3.876877Z"
android:fillColor="#7A7A7A" />
<path
android:pathData="M3.879016 3.034944H24.80413A0.9472276 0.9472276 0 0 1 25.75136 3.982171V23.99235A0.9472276 0.9472276 0 0 1 24.80413 24.93958H3.879016A0.9472276 0.9472276 0 0 1 2.931789 23.99235V3.982171A0.9472276 0.9472276 0 0 1 3.879016 3.034944Z"
android:fillColor="#9F9F9F"
android:fillAlpha="0.9411765" />
<path
android:pathData="M3.871116 3.413072H24.79623A0.9472276 0.9472276 0 0 1 25.74346 4.3603V24.37048A0.9472276 0.9472276 0 0 1 24.79623 25.31771H3.871116A0.9472276 0.9472276 0 0 1 2.923888 24.37048V4.3603A0.9472276 0.9472276 0 0 1 3.871116 3.413072Z"
android:fillColor="#8A8A8A" />
<group
android:translateX="3.2"
android:translateY="3">
<group
android:scaleX="0.028"
android:scaleY="0.028"
android:translateY="2.381952">
<group
android:translateX="-13.11192"
android:translateY="-23.49458">
<group
android:translateX="24.55357"
android:translateY="22.32143">
<path
android:pathData="M522.21118 106.6555c1.1 0.261 5.15 1.181 9 2.045 26.458 5.933 56.753 23.81 80.425 47.458 9.66 9.649 18.517 20.965 23.27 29.731 2.431 4.48 3.12 5.037 7 5.657 6.828 1.09 24.378 9.034 33.485 15.157 13.691 9.204 23.31 21.265 29.387 36.85 2.056 5.27 2.341 7.702 2.343 20 0.002 13.267 -0.167 14.471 -3.235 23 -9.066 25.208 -24.933 46.458 -40.852 54.714 -13.343 6.919 -19.143 8.271 -34.823 8.116 -12.76 -0.126 -14.818 -0.411 -23.237 -3.215 -11.113 -3.702 -20.573 -8.4 -29.07 -14.438l-6.307 -4.482 -9.693 0.502c-6.715 0.348 -12.612 -0.019 -19.193 -1.194 -5.225 -0.933 -10.962 -1.927 -12.75 -2.209l-3.25 -0.513v91.08 91.079l-3.042 6.28c-1.672 3.454 -3.585 7.368 -4.25 8.698 -1.398 2.799 -5.768 5.431 -13.644 8.219 -3.06 1.083 -6.271 2.348 -7.135 2.812 -0.863 0.464 -4.629 2.068 -8.368 3.563 -9.653 3.862 -13.894 3.258 -23.561 -3.354 -13.924 -9.525 -17.457 -12.588 -19.75 -17.128l-2.25 -4.454v-119.859 -119.859l-7.369 -11.179c-7.8 -11.832 -13.392 -24.437 -16.176 -36.459 -1.959 -8.463 -1.65 -30.272 0.549 -38.72 2.942 -11.301 7.899 -24.702 10.913 -29.5 0.518 -0.825 2.984 -4.888 5.478 -9.029 7.605 -12.622 23.845 -27.228 36.105 -32.472 12.859 -5.5 18.667 -6.722 33.5 -7.051 7.975 -0.176 15.4 -0.107 16.5 0.154"
android:strokeColor="#FFFFFF"
android:strokeWidth="25"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M478.25534 210.97593V378.57157"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.5"
android:strokeLineCap="round"
android:strokeLineJoin="bevel" />
<group
android:rotation="16.5014"
android:scaleX="1.12068"
android:scaleY="0.862598">
<group
android:rotation="-135">
<path
android:pathData="M-352.8942 268.4371H-336.3313A6.77204 6.77204 0 0 1 -329.5592 275.2091V275.2091A6.77204 6.77204 0 0 1 -336.3313 281.9812H-352.8942A6.77204 6.77204 0 0 1 -359.6662 275.2091V275.2091A6.77204 6.77204 0 0 1 -352.8942 268.4371Z"
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeWidth="6.04454"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</group>
<path
android:pathData="M569.30805 317.27404c-12.16681 -54.41403 10.13314 -95.32055 61.94196 -124.44196 -51.15907 28.93765 -76.09417 68.77546 -61.94196 124.44196z"
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.5"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<group
android:rotation="-26.34455"
android:scaleX="1.097039"
android:scaleY="0.8924717">
<group
android:rotation="45">
<path
android:pathData="M752.9703 140.178A23.39325 33.36807 0 0 1 706.1838 140.178A23.39325 33.36807 0 0 1 752.9703 140.178Z"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.2116"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</group>
</group>
<group
android:rotation="-0"
android:scaleX="-1"
android:translateX="799.5319"
android:translateY="22.32143">
<path
android:pathData="M522.21118 106.6555c1.1 0.261 5.15 1.181 9 2.045 26.458 5.933 56.753 23.81 80.425 47.458 9.66 9.649 18.517 20.965 23.27 29.731 2.431 4.48 3.12 5.037 7 5.657 6.828 1.09 24.378 9.034 33.485 15.157 13.691 9.204 23.31 21.265 29.387 36.85 2.056 5.27 2.341 7.702 2.343 20 0.002 13.267 -0.167 14.471 -3.235 23 -9.066 25.208 -24.933 46.458 -40.852 54.714 -13.343 6.919 -19.143 8.271 -34.823 8.116 -12.76 -0.126 -14.818 -0.411 -23.237 -3.215 -11.113 -3.702 -20.573 -8.4 -29.07 -14.438l-6.307 -4.482 -9.693 0.502c-6.715 0.348 -12.612 -0.019 -19.193 -1.194 -5.225 -0.933 -10.962 -1.927 -12.75 -2.209l-3.25 -0.513v91.08 91.079l-3.042 6.28c-1.672 3.454 -3.585 7.368 -4.25 8.698 -1.398 2.799 -5.768 5.431 -13.644 8.219 -3.06 1.083 -6.271 2.348 -7.135 2.812 -0.863 0.464 -4.629 2.068 -8.368 3.563 -9.653 3.862 -13.894 3.258 -23.561 -3.354 -13.924 -9.525 -17.457 -12.588 -19.75 -17.128l-2.25 -4.454v-119.859 -119.859l-7.369 -11.179c-7.8 -11.832 -13.392 -24.437 -16.176 -36.459 -1.959 -8.463 -1.65 -30.272 0.549 -38.72 2.942 -11.301 7.899 -24.702 10.913 -29.5 0.518 -0.825 2.984 -4.888 5.478 -9.029 7.605 -12.622 23.845 -27.228 36.105 -32.472 12.859 -5.5 18.667 -6.722 33.5 -7.051 7.975 -0.176 15.4 -0.107 16.5 0.154"
android:strokeColor="#FFFFFF"
android:strokeWidth="25"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M478.25534 210.97593V378.57157"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.5"
android:strokeLineCap="round"
android:strokeLineJoin="bevel" />
<group
android:rotation="16.5014"
android:scaleX="1.12068"
android:scaleY="0.862598">
<group
android:rotation="-135">
<path
android:pathData="M-352.8942 268.4371H-336.3313A6.77204 6.77204 0 0 1 -329.5592 275.2091V275.2091A6.77204 6.77204 0 0 1 -336.3313 281.9812H-352.8942A6.77204 6.77204 0 0 1 -359.6662 275.2091V275.2091A6.77204 6.77204 0 0 1 -352.8942 268.4371Z"
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeWidth="6.04454"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</group>
<path
android:pathData="M569.30805 317.27404c-12.16681 -54.41403 10.13314 -95.32055 61.94196 -124.44196 -51.15907 28.93765 -76.09417 68.77546 -61.94196 124.44196z"
android:fillColor="#FFFFFF"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.5"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<group
android:rotation="-26.34455"
android:scaleX="1.097039"
android:scaleY="0.8924717">
<group
android:rotation="45">
<path
android:pathData="M752.9703 140.178A23.39325 33.36807 0 0 1 706.1838 140.178A23.39325 33.36807 0 0 1 752.9703 140.178Z"
android:strokeColor="#FFFFFF"
android:strokeWidth="12.2116"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</group>
</group>
</group>
</group>
</group>
</group>
</vector>
@@ -0,0 +1,58 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="22.72266"
android:viewportHeight="24"
android:width="80.51335dp"
android:height="85.03938dp">
<group
android:translateX="4.000184"
android:translateY="3.999806">
<group
android:scaleX="6.533259"
android:scaleY="6.350734"
android:translateX="16.40368"
android:translateY="14.73295">
<path
android:pathData="M-1.087598 -2.6574099c-0.00815 0.0019 -0.038153 0.0087 -0.066675 0.01515 -0.1960096 0.04395 -0.4204449 0.176392 -0.5958149 0.351585 -0.071565 0.07148 -0.1371801 0.155315 -0.1723918 0.220257 -0.01801 0.03319 -0.023114 0.03731 -0.051858 0.04191 -0.050584 0.0081 -0.1806002 0.06693 -0.2480679 0.112288 -0.1014274 0.06819 -0.1726882 0.157538 -0.2177086 0.272997 -0.015232 0.03904 -0.017343 0.05706 -0.017358 0.148166 -0.0000148 0.09829 0.00124 0.107206 0.023966 0.170392 0.067164 0.186749 0.1847118 0.34417602 0.302645 0.40533902 0.098849 0.05126 0.1418177 0.06127 0.2579803 0.06013 0.09453 -0.000933 0.1097767 -0.003 0.1721474 -0.02382 0.082329 -0.02742 0.1524116 -0.06223 0.2153601 -0.106961l0.046724 -0.0332 0.071809 0.0037c0.049747 0.0026 0.093434 -0.000141 0.1421881 -0.0088 0.038708 -0.0069 0.08121 -0.01428 0.094456 -0.01637l0.024077 -0.0038v0.6747501 0.674744l0.022536 0.04652c0.012387 0.02559 0.026559 0.05458 0.031485 0.06444 0.010357 0.02074 0.042731 0.04023 0.1010793 0.06089 0.02267 0.008 0.046458 0.0174 0.052858 0.02083 0.00639 0.0034 0.034293 0.01532 0.061993 0.0264 0.071513 0.02861 0.1029314 0.02414 0.1745477 -0.02485 0.1031536 -0.07056 0.1293272 -0.09326 0.1463145 -0.12689l0.016669 -0.033v-0.887955 -0.8879551l0.054592 -0.08282c0.057785 -0.08765 0.099212 -0.181037 0.1198372 -0.2701 0.014513 -0.0627 0.012224 -0.224265 -0.00407 -0.286851 -0.021795 -0.08372 -0.058518 -0.183 -0.080847 -0.218546 -0.00384 -0.0061 -0.022107 -0.03621 -0.040583 -0.06689 -0.05634 -0.09351 -0.1766517 -0.201714 -0.2674778 -0.240564 -0.095264 -0.04075 -0.1382913 -0.0498 -0.248179 -0.05224 -0.059081 -0.0013 -0.1140883 -0.000793 -0.1222375 0.0011"
android:strokeColor="#000000"
android:strokeWidth="0.185208"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M-0.7619586 -1.8845699v1.24160402"
android:strokeColor="#000000"
android:strokeWidth="0.0926041"
android:strokeLineCap="round"
android:strokeLineJoin="bevel" />
<path
android:pathData="M-0.6078779 -2.0455649l0.071972 -0.09938c0.016303 -0.02251 0.00855 -0.04868 -0.017384 -0.05868 -0.025933 -0.01 -0.059935 0.000074 -0.076238 0.02259l-0.071972 0.09938c-0.016303 0.02251 -0.00855 0.04868 0.017384 0.05868 0.025933 0.01 0.059935 -0.000074 0.076238 -0.02258z"
android:fillColor="#FFFFFF"
android:strokeColor="#000000"
android:strokeWidth="0.044028"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M-1.4365071 -1.0970779c0.090136 -0.403117 -0.07507 -0.706166 -0.4588865 -0.921907 0.3790032 0.214379 0.5637307 0.509511 0.4588865 0.921907z"
android:fillColor="#FFFFFF"
android:strokeColor="#000000"
android:strokeWidth="0.0926041"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M-2.2277592 -1.2683579a0.25176858 0.16660072 55.660797 0 0 0.2716238 0.186547 0.25176858 0.16660072 55.660797 0 0 0.066393 -0.263248 0.25176858 0.16660072 55.660797 0 0 -0.2716238 -0.186546 0.25176858 0.16660072 55.660797 0 0 -0.066393 0.263247z"
android:strokeColor="#000000"
android:strokeWidth="0.0895161"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<group
android:scaleX="0.2568087"
android:scaleY="0.1758768"
android:translateX="-3.615422"
android:translateY="-1.780005">
<path
android:pathData="M5.740478 6.7282383h0.8331118l-0.036823 4.0106167 1.7746367 -0.02331v1.144028l-2.5954745 0.02331z"
android:fillColor="#000000"
android:strokeMiterLimit="5.8" />
</group>
</group>
</group>
</vector>
@@ -0,0 +1,60 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="22.72266"
android:viewportHeight="24"
android:width="80.51335dp"
android:height="85.03938dp">
<group
android:translateX="4.000184"
android:translateY="3.999806">
<group
android:scaleX="6.533259"
android:scaleY="6.350734"
android:translateX="16.40368"
android:translateY="14.73295">
<path
android:pathData="M-1.6805566 -2.6574099c0.00815 0.0019 0.038153 0.0087 0.066675 0.01515 0.1960096 0.04395 0.4204449 0.176392 0.5958149 0.351585 0.071565 0.07148 0.13718014 0.155315 0.17239184 0.220257 0.01801 0.03319 0.023114 0.03731 0.051858 0.04191 0.050584 0.0081 0.1806002 0.06693 0.2480679 0.112288 0.1014274 0.06819 0.1726882 0.157538 0.2177086 0.272997 0.015232 0.03904 0.017343 0.05706 0.017358 0.148166 0.0000148 0.09829 -0.00124 0.107206 -0.023966 0.170392 -0.067164 0.186749 -0.1847118 0.34417602 -0.302645 0.40533902 -0.098849 0.05126 -0.1418177 0.06127 -0.2579803 0.06013 -0.09453 -0.000933 -0.10977674 -0.003 -0.17214744 -0.02382 -0.082329 -0.02742 -0.1524116 -0.06223 -0.2153601 -0.106961l-0.046724 -0.0332 -0.071809 0.0037c-0.049747 0.0026 -0.093434 -0.000141 -0.1421881 -0.0088 -0.038708 -0.0069 -0.08121 -0.01428 -0.094456 -0.01637l-0.024077 -0.0038v0.67475012 0.674744l-0.022536 0.04652c-0.012387 0.02559 -0.026559 0.05458 -0.031485 0.06444 -0.010357 0.02074 -0.042731 0.04023 -0.1010793 0.06089 -0.02267 0.008 -0.046458 0.0174 -0.052858 0.02083 -0.00639 0.0034 -0.034293 0.01532 -0.061993 0.0264 -0.071513 0.02861 -0.1029314 0.02414 -0.1745477 -0.02485 -0.1031536 -0.07056 -0.1293272 -0.09326 -0.1463145 -0.12689l-0.016669 -0.033v-0.887955 -0.88795512l-0.054592 -0.08282c-0.057785 -0.08765 -0.099212 -0.181037 -0.1198372 -0.2701 -0.014513 -0.0627 -0.012224 -0.224265 0.00407 -0.286851 0.021795 -0.08372 0.058518 -0.183 0.080847 -0.218546 0.00384 -0.0061 0.022107 -0.03621 0.040583 -0.06689 0.05634 -0.09351 0.1766517 -0.201714 0.2674778 -0.240564 0.095264 -0.04075 0.1382913 -0.0498 0.248179 -0.05224 0.059081 -0.0013 0.1140883 -0.000793 0.1222375 0.0011"
android:strokeColor="#000000"
android:strokeWidth="0.185208"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M-2.006196 -1.8845699v1.24160402"
android:strokeColor="#000000"
android:strokeWidth="0.0926041"
android:strokeLineCap="round"
android:strokeLineJoin="bevel" />
<path
android:pathData="M-2.1602767 -2.0455649l-0.071972 -0.09938c-0.016303 -0.02251 -0.00855 -0.04868 0.017384 -0.05868 0.025933 -0.01 0.059935 0.000074 0.076238 0.02259l0.071972 0.09938c0.016303 0.02251 0.00855 0.04868 -0.017384 0.05868 -0.025933 0.01 -0.059935 -0.000074 -0.076238 -0.02258z"
android:fillColor="#FFFFFF"
android:strokeColor="#000000"
android:strokeWidth="0.044028"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M-1.3316475 -1.0970779c-0.090136 -0.403117 0.07507 -0.706166 0.45888654 -0.921907 -0.37900324 0.214379 -0.56373074 0.509511 -0.45888654 0.921907z"
android:fillColor="#FFFFFF"
android:strokeColor="#000000"
android:strokeWidth="0.0926041"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<path
android:pathData="M-0.54039536 -1.2683579a0.16660072 0.25176858 34.339203 0 1 -0.2716238 0.186547 0.16660072 0.25176858 34.339203 0 1 -0.066393 -0.263248 0.16660072 0.25176858 34.339203 0 1 0.2716238 -0.186546 0.16660072 0.25176858 34.339203 0 1 0.066393 0.263247z"
android:strokeColor="#000000"
android:strokeWidth="0.0895161"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<group
android:scaleX="0.1366301"
android:scaleY="0.1004424"
android:translateX="-2.748724"
android:translateY="-2.862199">
<path
android:pathData="M14.414279 27.435316q0.309546 0.132156 0.600043 0.564696 0.295261 0.432529 0.59052 1.189459l0.976262 2.451007h-1.033409l-0.909591 -2.300825q-0.352407 -0.901105 -0.685763 -1.195467 -0.328596 -0.29436 -0.900066 -0.29436h-1.047696v3.790652h-0.961973v-8.969006h2.171586q1.219137 0 1.81918 0.642787 0.600044 0.642789 0.600044 1.940383 0 0.847039 -0.314309 1.405724 -0.309547 0.558686 -0.904828 0.77495zm-2.4097 -3.766622v3.183909h1.209613q0.695289 0 1.047696 -0.402496 0.357167 -0.4085 0.357167 -1.195465 0 -0.786966 -0.357167 -1.183453 -0.352407 -0.402495 -1.047696 -0.402495z"
android:fillColor="#000000"
android:strokeColor="#000000"
android:strokeWidth="0.46118"
android:strokeMiterLimit="5.8" />
</group>
</group>
</group>
</vector>
+41
View File
@@ -3589,6 +3589,20 @@
<item>@string/prefs_ambient_sound</item>
</string-array>
<string-array name="galaxy_buds_3_pro_noise_controls_options_values">
<item>0</item>
<item>1</item>
<item>3</item>
<item>2</item>
</string-array>
<string-array name="galaxy_buds_3_pro_noise_controls_options">
<item>@string/off</item>
<item>@string/prefs_active_noise_cancelling</item>
<item>@string/redmi_buds_5_pro_adaptive_sound</item>
<item>@string/prefs_ambient_sound</item>
</string-array>
<string-array name="galaxy_pro_anc_level_values">
<item>0</item>
<item>1</item>
@@ -3621,6 +3635,21 @@
<item>4</item>
</string-array>
<string-array name="galaxy_buds_3_pro_touch_options_left">
<item>@string/pref_switch_noise_control</item>
<item>@string/pref_title_touch_voice_assistant</item>
</string-array>
<string-array name="galaxy_buds_3_pro_touch_options_right">
<item>@string/pref_switch_noise_control</item>
<item>@string/pref_title_touch_voice_assistant</item>
</string-array>
<string-array name="galaxy_buds_3_pro_touch_options_values">
<item>2</item>
<item>1</item>
</string-array>
<string-array name="galaxy_pro_touch_switch_controls_options">
<item>@string/pref_switch_controls_anc_ambient</item>
<item>@string/pref_switch_controls_anc_off</item>
@@ -3633,6 +3662,18 @@
<item>2</item>
</string-array>
<string-array name="galaxy_buds_3_pro_earbud_lights_options">
<item>@string/supercars_lights_blinking_label</item>
<item>@string/prefs_earbud_lights_fade</item>
<item>@string/prefs_earbud_lights_steady</item>
</string-array>
<string-array name="galaxy_buds_3_pro_earbud_lights_values">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="galaxy_pro_voice_detect_duration_options">
<item>@string/pref_voice_detect_duration_5</item>
<item>@string/pref_voice_detect_duration_10</item>
+14
View File
@@ -3009,6 +3009,7 @@
<string name="devicetype_galaxybuds_pro" translatable="false">Galaxy Buds Pro</string>
<string name="devicetype_galaxybuds_2" translatable="false">Galaxy Buds2</string>
<string name="devicetype_galaxybuds_2_pro" translatable="false">Galaxy Buds2 Pro</string>
<string name="devicetype_galaxybuds_3_pro" translatable="false">Galaxy Buds3 Pro</string>
<string name="nothing_prefs_inear_summary">Play/pause the music depending if you wear the earbuds</string>
<string name="nothing_prefs_inear_title">In-Ear detection</string>
<string name="prefs_in_ear_detection_summary">Play calls through your earbuds when they are in your ears</string>
@@ -3064,7 +3065,20 @@
<string name="prefs_right">Right</string>
<string name="prefs_switch_control_left">Switch control left</string>
<string name="prefs_switch_control_right">Switch control right</string>
<string name="prefs_pinch_and_hold_action">Pinch and hold action</string>
<string name="prefs_noise_modes_to_cycle">Noise modes to cycle</string>
<string name="prefs_galaxy_touch_options">Touch Options</string>
<string name="prefs_media_controls">Media controls</string>
<string name="prefs_media_controls_summary">Pinch • Swipe up and down</string>
<string name="prefs_pinch_and_hold_controls">Pinch and hold controls</string>
<string name="prefs_call_controls">Call controls</string>
<string name="prefs_answer_call_or_end_call">Answer call or end call</string>
<string name="prefs_answer_call_summary">Pinch</string>
<string name="prefs_decline_call">Decline call</string>
<string name="prefs_decline_call_summary">Pinch and hold</string>
<string name="prefs_earbud_lights_controls">Earbud lights controls</string>
<string name="prefs_earbud_lights_fade">Fade in and out</string>
<string name="prefs_earbud_lights_steady">Steady</string>
<string name="battery_i">Battery %d</string>
<string name="battery_case">Battery case</string>
<string name="left_earbud">Left earbud</string>
@@ -0,0 +1,289 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ListPreference
android:defaultValue="0"
android:entries="@array/galaxy_buds_3_pro_noise_controls_options"
android:entryValues="@array/galaxy_buds_3_pro_noise_controls_options_values"
android:icon="@drawable/ic_surround"
android:key="pref_galaxy_buds_pro_noise_control"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_noise_control" />
<PreferenceScreen
android:icon="@drawable/ic_hearing"
android:key="prefs_accessibility"
android:persistent="false"
android:title="@string/nothing_prefs_audiomode_title">
<PreferenceCategory android:title="@string/prefs_active_noise_cancelling">
<SeekBarPreference
android:defaultValue="4"
android:icon="@drawable/ic_surround"
android:key="pref_galaxy_buds_3_pro_anc_level"
android:max="4"
android:min="0"
android:title="@string/prefs_active_noise_cancelling_level"
app:showSeekBarValue="true" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/prefs_voice_detect">
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_voice"
android:key="pref_galaxy_buds_pro_voice_detect"
android:layout="@layout/preference_checkbox"
android:summary="@string/prefs_voice_detect_summary"
android:title="@string/prefs_voice_detect" />
<ListPreference
android:defaultValue="5"
android:dependency="pref_galaxy_buds_pro_voice_detect"
android:entries="@array/galaxy_pro_voice_detect_duration_options"
android:entryValues="@array/galaxy_pro_voice_detect_duration_values"
android:icon="@drawable/ic_timer"
android:key="pref_galaxy_buds_pro_voice_detect_duration"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_voice_detect_duration" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/prefs_ambient_sound">
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_phone"
android:key="pref_galaxy_buds_ambient_mode_during_call"
android:layout="@layout/preference_checkbox"
android:summary="@string/prefs_ambient_sound_during_call_summary"
android:title="@string/prefs_ambient_sound_during_call_title" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_hearing"
android:key="pref_galaxy_buds_ambient_sound"
android:layout="@layout/preference_checkbox"
android:title="@string/prefs_customize_ambient_sound_summary" />
<SeekBarPreference
android:defaultValue="1"
android:dependency="pref_galaxy_buds_ambient_sound"
android:icon="@drawable/ic_volume_up"
android:key="pref_galaxy_buds_pro_ambient_volume_right"
android:max="4"
android:min="0"
android:title="@string/prefs_ambient_volume_right"
app:showSeekBarValue="false" />
<SeekBarPreference
android:defaultValue="1"
android:dependency="pref_galaxy_buds_ambient_sound"
android:icon="@drawable/ic_volume_up"
android:key="pref_galaxy_buds_pro_ambient_volume_left"
android:max="4"
android:min="0"
android:title="@string/prefs_ambient_volume_left"
app:showSeekBarValue="false" />
<SeekBarPreference
android:defaultValue="1"
android:dependency="pref_galaxy_buds_ambient_sound"
android:icon="@drawable/ic_surround"
android:key="pref_galaxy_buds_pro_ambient_sound_tone"
android:max="4"
android:min="0"
android:summary="@string/pref_ambient_sound_tone_summary"
android:title="@string/pref_ambient_sound_tone"
app:showSeekBarValue="false" />
</PreferenceCategory>
</PreferenceScreen>
<ListPreference
android:defaultValue="0"
android:entries="@array/galaxy_buds_live_equalizer_modes"
android:entryValues="@array/galaxy_buds_live_equalizer_values"
android:icon="@drawable/ic_equalizer"
android:key="pref_galaxy_buds_equalizer_mode"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_equalizer_preset" />
<PreferenceScreen
android:icon="@drawable/ic_touch"
android:key="prefs_galaxy_touch_options"
android:persistent="false"
android:title="@string/prefs_galaxy_touch_options">
<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_touch"
android:key="pref_galaxy_buds_3_pro_media_controls"
android:layout="@layout/preference_checkbox"
android:summary="@string/prefs_media_controls_summary"
android:title="@string/prefs_media_controls" />
<!-- Left Earbud Touch Controls -->
<PreferenceCategory android:title="@string/prefs_left">
<ListPreference
android:defaultValue="0"
android:entries="@array/galaxy_buds_3_pro_touch_options_left"
android:entryValues="@array/galaxy_buds_3_pro_touch_options_values"
android:icon="@drawable/ic_switch_left"
android:key="pref_galaxy_buds_touch_left"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_pinch_and_hold_action" />
<PreferenceCategory
android:dependency="pref_galaxy_buds_touch_left"
android:title="@string/prefs_noise_modes_to_cycle">
<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_surround"
android:key="pref_galaxy_buds_touch_left_switch_anc"
android:layout="@layout/preference_checkbox"
android:title="@string/prefs_active_noise_cancelling" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_auto_awesome"
android:key="pref_galaxy_buds_touch_left_switch_adaptive"
android:layout="@layout/preference_checkbox"
android:title="@string/redmi_buds_5_pro_adaptive_sound" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_hearing"
android:key="pref_galaxy_buds_touch_left_switch_ambient"
android:layout="@layout/preference_checkbox"
android:title="@string/prefs_ambient_sound" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_volume_off"
android:key="pref_galaxy_buds_touch_left_switch_off"
android:layout="@layout/preference_checkbox"
android:title="@string/off" />
</PreferenceCategory>
</PreferenceCategory>
<!-- Right Earbud Touch Controls -->
<PreferenceCategory android:title="@string/prefs_right">
<ListPreference
android:defaultValue="0"
android:entries="@array/galaxy_buds_3_pro_touch_options_right"
android:entryValues="@array/galaxy_buds_3_pro_touch_options_values"
android:icon="@drawable/ic_switch_right"
android:key="pref_galaxy_buds_touch_right"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_pinch_and_hold_action" />
<PreferenceCategory
android:dependency="pref_galaxy_buds_touch_right"
android:title="@string/prefs_noise_modes_to_cycle">
<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_surround"
android:key="pref_galaxy_buds_touch_right_switch_anc"
android:layout="@layout/preference_checkbox"
android:title="@string/prefs_active_noise_cancelling" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_auto_awesome"
android:key="pref_galaxy_buds_touch_right_switch_adaptive"
android:layout="@layout/preference_checkbox"
android:title="@string/redmi_buds_5_pro_adaptive_sound" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_hearing"
android:key="pref_galaxy_buds_touch_right_switch_ambient"
android:layout="@layout/preference_checkbox"
android:title="@string/prefs_ambient_sound" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_volume_off"
android:key="pref_galaxy_buds_touch_right_switch_off"
android:layout="@layout/preference_checkbox"
android:title="@string/off" />
</PreferenceCategory>
</PreferenceCategory>
<PreferenceCategory android:title="@string/prefs_call_controls">
<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_phone"
android:key="pref_galaxy_buds_3_pro_answer_call"
android:layout="@layout/preference_checkbox"
android:summary="@string/prefs_answer_call_summary"
android:title="@string/prefs_answer_call_or_end_call" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:icon="@drawable/ic_phone"
android:key="pref_galaxy_buds_3_pro_decline_call"
android:layout="@layout/preference_checkbox"
android:summary="@string/prefs_decline_call_summary"
android:title="@string/prefs_decline_call" />
</PreferenceCategory>
<ListPreference
android:defaultValue="0"
android:entries="@array/galaxy_buds_3_pro_earbud_lights_options"
android:entryValues="@array/galaxy_buds_3_pro_earbud_lights_values"
android:icon="@drawable/ic_led_color"
android:key="pref_galaxy_buds_3_pro_earbud_lights"
app:useSimpleSummaryProvider="true"
android:title="@string/prefs_earbud_lights_controls" />
</PreferenceScreen>
<PreferenceScreen
android:icon="@drawable/ic_settings"
android:key="prefs_settings"
android:persistent="false"
android:title="@string/title_activity_settings">
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_hearing"
android:key="pref_galaxy_buds_pro_in_ear_detection"
android:layout="@layout/preference_checkbox"
android:summary="@string/prefs_in_ear_detection_summary"
android:title="@string/nothing_prefs_inear_title" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_auto_awesome"
android:key="prefs_galaxy_buds_seamless_connection"
android:layout="@layout/preference_checkbox"
android:summary="@string/prefs_seamless_connection_switch_summary"
android:title="@string/prefs_seamless_connection_switch_title" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_hearing"
android:key="pref_galaxy_buds_noise_controls_with_one_earbud"
android:layout="@layout/preference_checkbox"
android:summary="@string/prefs_noise_control_with_one_earbud_summary"
android:title="@string/prefs_noise_control_with_one_earbud" />
<SeekBarPreference
android:defaultValue="50"
android:icon="@drawable/ic_volume_up"
android:key="pref_galaxy_buds_pro_balance"
android:max="32"
android:min="0"
android:title="@string/pref_balance"
app:defaultValue="16"
app:showSeekBarValue="true" />
<PreferenceCategory android:title="@string/prefs_galaxy_buds_experimental">
<SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_videogame"
android:key="pref_galaxy_buds_game_mode"
android:layout="@layout/preference_checkbox"
android:summary="@string/prefs_game_mode_summary"
android:title="@string/prefs_game_mode" />
</PreferenceCategory>
<!-- <SwitchPreferenceCompat
android:defaultValue="false"
android:icon="@drawable/ic_graphic_eq"
android:key="pref_galaxy_buds_pro_read_notifications_outloud"
android:layout="@layout/preference_checkbox"
android:title="@string/prefs_read_notification_outloud" />
-->
</PreferenceScreen>
</androidx.preference.PreferenceScreen>