mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 18:59:06 +01:00
Merge branch '2151-bluetooth-connect-ui' into 'master'
Add simple UI for Connect via Bluetooth feature Closes #2151 and #1821 See merge request briar/briar!1524
This commit is contained in:
@@ -1,15 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="499.24374"
|
||||
height="175.49413"
|
||||
viewBox="0 0 499.24373 175.49413"
|
||||
id="svg2"
|
||||
version="1.1">
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="500" height="175" viewBox="0 0 500 175"
|
||||
id="svg2" version="1.1" sodipodi:docname="bluetooth.svg" inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="892"
|
||||
id="namedview10"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.93337848"
|
||||
inkscape:cx="-49.861215"
|
||||
inkscape:cy="137.66042"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="144"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg2" />
|
||||
<defs
|
||||
id="defs4" />
|
||||
<metadata
|
||||
@@ -26,22 +39,23 @@
|
||||
</metadata>
|
||||
<path
|
||||
id="path4201"
|
||||
d="m 459.80937,171.15983 -4.32657,-4.3343 -7.06956,-2.42737 c -3.88825,-1.33505 -8.72285,-2.99587 -10.74354,-3.6907 l -3.674,-1.26333 3.524,-0.1726 c 8.24183,-0.40367 12.98778,-4.00671 14.33634,-10.88389 0.79628,-4.06078 1.12887,-17.29805 0.83016,-33.04122 -0.15338,-8.08375 -0.16617,-15.41641 -0.0284,-16.29481 0.13775,-0.8784 0.53527,-2.42011 0.88339,-3.42602 1.22247,-3.53243 0.33996,-11.90828 -1.8577,-17.63146 -0.34848,-0.9075 -1.93434,-4.215 -3.52415,-7.35 -4.15849,-8.2003 -4.50458,-8.94188 -4.89292,-10.4841 -0.45865,-1.82145 -0.21161,-5.43531 0.4625,-6.7659 0.66625,-1.31505 2.15695,-2.91616 3.24622,-3.48662 1.29885,-0.68024 2.61568,0.12202 4.6864,2.85512 3.42153,4.51599 14.00135,19.44095 15.73191,22.19301 3.74551,5.95636 5.95558,11.16496 7.9722,18.78849 0.6547,2.475 1.88525,6.9975 2.73456,10.05 0.84931,3.0525 2.71404,10.15792 4.14385,15.78983 l 2.59964,10.23983 4.65,5.19319 c 2.5575,2.85626 5.7975,6.46371 7.2,8.01657 1.4025,1.55286 2.55,2.97543 2.55,3.16127 0,0.33546 -34.49955,29.29931 -34.89913,29.29931 -0.11475,0 -2.15559,-1.95044 -4.5352,-4.3343 z M 365.9443,154.77206 c -1.25762,-0.62844 -2.20557,-1.3788 -2.91402,-2.30663 -2.08931,-2.73629 -1.95034,2.36868 -1.86433,-68.48249 l 0.0777,-64.03881 0.66066,-1.23494 c 1.0152,-1.89767 1.99201,-2.91087 3.73952,-3.87887 l 1.59982,-0.88619 37.78387,-0.0796 c 42.45592,-0.0894 39.40239,-0.2483 42.11646,2.19188 0.87544,0.78709 1.75715,1.95946 2.18393,2.90385 0.71264,1.57698 0.71613,1.63839 0.80561,14.20405 l 0.0899,12.62022 -1.79817,-0.13007 c -1.42577,-0.10313 -2.08143,0.007 -3.16601,0.5321 -2.01294,0.97445 -3.93993,2.89871 -5.11476,5.10753 l -1.03717,1.95 -0.007,-12.825 -0.007,-12.825 -33.6,0 -33.6,0 0,51.3 0,51.3 33.59873,0 33.59874,0 0.0763,-34.425 c 0.073,-32.96021 0.0982,-34.36117 0.59098,-32.925 0.28309,0.825 1.80562,3.9975 3.3834,7.05 5.49252,10.62624 5.40494,9.86009 5.39597,47.20335 -0.007,27.62122 -0.12358,29.95084 -1.66204,33.10906 -1.07144,2.19949 -2.71143,3.71042 -5.05823,4.66019 l -1.67381,0.6774 -36.1677,0.0797 -36.16769,0.0797 -1.864,-0.93145 z m 42.39939,-5.03813 c 2.87119,-1.30885 4.45771,-3.6784 4.43003,-6.61652 -0.0388,-4.11587 -3.1088,-7.22328 -7.1364,-7.22328 -2.11956,0 -3.56727,0.60889 -5.16364,2.17177 -2.24518,2.19807 -2.75398,5.43897 -1.30101,8.28704 0.71312,1.39782 2.52137,3.00905 3.96214,3.53045 1.49707,0.54176 3.84003,0.47454 5.20888,-0.14946 z"
|
||||
style="fill:#000000" />
|
||||
d="m 459.80937,167.15983 -4.32657,-4.3343 -7.06956,-2.42737 c -3.88825,-1.33505 -8.72285,-2.99587 -10.74354,-3.6907 l -3.674,-1.26333 3.524,-0.1726 c 8.24183,-0.40367 12.98778,-4.00671 14.33634,-10.88389 0.79628,-4.06078 1.12887,-17.29805 0.83016,-33.04122 -0.15338,-8.08375 -0.16617,-15.41641 -0.0284,-16.29481 0.13775,-0.8784 0.53527,-2.42011 0.88339,-3.42602 1.22247,-3.53243 0.33996,-11.90828 -1.8577,-17.63146 -0.34848,-0.9075 -1.93434,-4.215 -3.52415,-7.35 -4.15849,-8.2003 -4.50458,-8.94188 -4.89292,-10.4841 -0.45865,-1.82145 -0.21161,-5.43531 0.4625,-6.7659 0.66625,-1.31505 2.15695,-2.91616 3.24622,-3.48662 1.29885,-0.68024 2.61568,0.12202 4.6864,2.85512 3.42153,4.51599 14.00135,19.44095 15.73191,22.19301 3.74551,5.95636 5.95558,11.16496 7.9722,18.78849 0.6547,2.475 1.88525,6.9975 2.73456,10.05 0.84931,3.0525 2.71404,10.15792 4.14385,15.78983 l 2.59964,10.23983 4.65,5.19319 c 2.5575,2.85626 5.7975,6.46371 7.2,8.01657 1.4025,1.55286 2.55,2.97543 2.55,3.16127 0,0.33546 -34.49955,29.29931 -34.89913,29.29931 -0.11475,0 -2.15559,-1.95044 -4.5352,-4.3343 z M 365.9443,150.77206 c -1.25762,-0.62844 -2.20557,-1.3788 -2.91402,-2.30663 -2.08931,-2.73629 -1.95034,2.36868 -1.86433,-68.48249 l 0.0777,-64.03881 0.66066,-1.23494 c 1.0152,-1.89767 1.99201,-2.91087 3.73952,-3.87887 l 1.59982,-0.88619 37.78387,-0.0796 c 42.45592,-0.0894 39.40239,-0.2483 42.11646,2.19188 0.87544,0.78709 1.75715,1.95946 2.18393,2.90385 0.71264,1.57698 0.71613,1.63839 0.80561,14.20405 l 0.0899,12.62022 -1.79817,-0.13007 c -1.42577,-0.10313 -2.08143,0.007 -3.16601,0.5321 -2.01294,0.97445 -3.93993,2.89871 -5.11476,5.10753 l -1.03717,1.95 -0.007,-12.825 -0.007,-12.825 h -33.6 -33.6 v 51.3 51.3 h 33.59873 33.59874 l 0.0763,-34.425 c 0.073,-32.96021 0.0982,-34.36117 0.59098,-32.925 0.28309,0.825 1.80562,3.9975 3.3834,7.05 5.49252,10.62624 5.40494,9.86009 5.39597,47.20335 -0.007,27.62122 -0.12358,29.95084 -1.66204,33.10906 -1.07144,2.19949 -2.71143,3.71042 -5.05823,4.66019 l -1.67381,0.6774 -36.1677,0.0797 -36.16769,0.0797 -1.864,-0.93145 z m 42.39939,-5.03813 c 2.87119,-1.30885 4.45771,-3.6784 4.43003,-6.61652 -0.0388,-4.11587 -3.1088,-7.22328 -7.1364,-7.22328 -2.11956,0 -3.56727,0.60889 -5.16364,2.17177 -2.24518,2.19807 -2.75398,5.43897 -1.30101,8.28704 0.71312,1.39782 2.52137,3.00905 3.96214,3.53045 1.49707,0.54176 3.84003,0.47454 5.20888,-0.14946 z"
|
||||
style="fill:#000000;stroke:none" />
|
||||
<path
|
||||
id="path4201-1"
|
||||
d="m 39.434334,171.15983 4.32657,-4.3343 7.06956,-2.42737 c 3.88825,-1.33505 8.72285,-2.99587 10.74354,-3.6907 l 3.674,-1.26333 -3.524,-0.1726 c -8.24183,-0.40367 -12.98778,-4.00671 -14.33634,-10.88389 -0.79628,-4.06078 -1.12887,-17.29805 -0.83016,-33.04122 0.15338,-8.08375 0.16617,-15.41641 0.0284,-16.29481 -0.13775,-0.8784 -0.53527,-2.42011 -0.88339,-3.42602 -1.22247,-3.53243 -0.33996,-11.90828 1.8577,-17.63146 0.34848,-0.9075 1.93434,-4.215 3.52415,-7.35 4.15849,-8.2003 4.50458,-8.94188 4.89292,-10.4841 0.45865,-1.82145 0.21161,-5.43531 -0.4625,-6.7659 -0.66625,-1.31505 -2.15695,-2.91616 -3.24622,-3.48662 -1.29885,-0.68024 -2.61568,0.12202 -4.6864,2.85512 -3.42153,4.51599 -14.00135,19.44095 -15.73191,22.19301 -3.74551,5.95636 -5.955584,11.16496 -7.972204,18.78849 -0.6547,2.475 -1.88525,6.9975 -2.73456,10.05 -0.84931,3.0525 -2.71404,10.15792 -4.14385,15.78983 L 14.4,129.82379 9.75,135.01698 c -2.5575,2.85626 -5.7975,6.46371 -7.2,8.01657 -1.4025,1.55286 -2.55,2.97543 -2.55,3.16127 0,0.33546 34.499554,29.29931 34.899134,29.29931 0.11475,0 2.15559,-1.95044 4.53519,-4.3343 z m 93.865056,-16.38777 c 1.25762,-0.62844 2.20557,-1.3788 2.91402,-2.30663 2.08931,-2.73629 1.95034,2.36868 1.86433,-68.48249 l -0.0777,-64.03881 -0.66066,-1.23494 c -1.0152,-1.89767 -1.99201,-2.91087 -3.73952,-3.87887 l -1.59982,-0.88619 -37.783856,-0.0796 c -42.45592,-0.0894 -39.40239,-0.2483 -42.11646,2.19188 -0.87544,0.78709 -1.75715,1.95946 -2.18393,2.90385 -0.71264,1.57698 -0.71613,1.63839 -0.80561,14.20405 l -0.0899,12.62022 1.79817,-0.13007 c 1.42577,-0.10313 2.08143,0.007 3.16601,0.5321 2.01294,0.97445 3.93993,2.89871 5.11476,5.10753 l 1.03717,1.95 0.007,-12.825 0.007,-12.825 33.6,0 33.599986,0 0,51.3 0,51.3 -33.598716,0 -33.59874,0 -0.0763,-34.425 c -0.073,-32.96021 -0.0982,-34.36117 -0.59098,-32.925 -0.28309,0.825 -1.80562,3.9975 -3.3834,7.05 -5.49252,10.62624 -5.40494,9.86009 -5.39597,47.20335 0.007,27.62122 0.12358,29.95084 1.66204,33.10906 1.07144,2.19949 2.71143,3.71042 5.05823,4.66019 l 1.67381,0.6774 36.1677,0.0797 36.167676,0.0797 1.864,-0.93145 z m -42.399376,-5.03813 c -2.87119,-1.30885 -4.45771,-3.6784 -4.43003,-6.61652 0.0388,-4.11587 3.1088,-7.22328 7.1364,-7.22328 2.11956,0 3.56727,0.60889 5.16364,2.17177 2.245176,2.19807 2.753976,5.43897 1.301006,8.28704 -0.713116,1.39782 -2.521366,3.00905 -3.962136,3.53045 -1.49707,0.54176 -3.84003,0.47454 -5.20888,-0.14946 z"
|
||||
style="fill:#000000" />
|
||||
d="m 39.434334,167.15983 4.32657,-4.3343 7.06956,-2.42737 c 3.88825,-1.33505 8.72285,-2.99587 10.74354,-3.6907 l 3.674,-1.26333 -3.524,-0.1726 c -8.24183,-0.40367 -12.98778,-4.00671 -14.33634,-10.88389 -0.79628,-4.06078 -1.12887,-17.29805 -0.83016,-33.04122 0.15338,-8.08375 0.16617,-15.41641 0.0284,-16.29481 -0.13775,-0.8784 -0.53527,-2.42011 -0.88339,-3.42602 -1.22247,-3.53243 -0.33996,-11.90828 1.8577,-17.63146 0.34848,-0.9075 1.93434,-4.215 3.52415,-7.35 4.15849,-8.2003 4.50458,-8.94188 4.89292,-10.4841 0.45865,-1.82145 0.21161,-5.43531 -0.4625,-6.7659 -0.66625,-1.31505 -2.15695,-2.91616 -3.24622,-3.48662 -1.29885,-0.68024 -2.61568,0.12202 -4.6864,2.85512 -3.42153,4.51599 -14.00135,19.44095 -15.73191,22.19301 -3.74551,5.95636 -5.955584,11.16496 -7.972204,18.78849 -0.6547,2.475 -1.88525,6.9975 -2.73456,10.05 -0.84931,3.0525 -2.71404,10.15792 -4.14385,15.78983 L 14.4,125.82379 9.75,131.01698 c -2.5575,2.85626 -5.7975,6.46371 -7.2,8.01657 -1.4025,1.55286 -2.55,2.97543 -2.55,3.16127 0,0.33546 34.499554,29.29931 34.899134,29.29931 0.11475,0 2.15559,-1.95044 4.53519,-4.3343 z m 93.865056,-16.38777 c 1.25762,-0.62844 2.20557,-1.3788 2.91402,-2.30663 2.08931,-2.73629 1.95034,2.36868 1.86433,-68.48249 l -0.0777,-64.03881 -0.66066,-1.23494 c -1.0152,-1.89767 -1.99201,-2.91087 -3.73952,-3.87887 L 132.00004,9.94413 94.216184,9.86453 c -42.45592,-0.0894 -39.40239,-0.2483 -42.11646,2.19188 -0.87544,0.78709 -1.75715,1.95946 -2.18393,2.90385 -0.71264,1.57698 -0.71613,1.63839 -0.80561,14.20405 l -0.0899,12.62022 1.79817,-0.13007 c 1.42577,-0.10313 2.08143,0.007 3.16601,0.5321 2.01294,0.97445 3.93993,2.89871 5.11476,5.10753 l 1.03717,1.95 0.007,-12.825 0.007,-12.825 h 33.6 33.599986 v 51.3 51.3 H 93.751664 60.152924 l -0.0763,-34.425 c -0.073,-32.96021 -0.0982,-34.36117 -0.59098,-32.925 -0.28309,0.825 -1.80562,3.9975 -3.3834,7.05 -5.49252,10.62624 -5.40494,9.86009 -5.39597,47.20335 0.007,27.62122 0.12358,29.95084 1.66204,33.10906 1.07144,2.19949 2.71143,3.71042 5.05823,4.66019 l 1.67381,0.6774 36.1677,0.0797 36.167676,0.0797 1.864,-0.93145 z m -42.399376,-5.03813 c -2.87119,-1.30885 -4.45771,-3.6784 -4.43003,-6.61652 0.0388,-4.11587 3.1088,-7.22328 7.1364,-7.22328 2.11956,0 3.56727,0.60889 5.16364,2.17177 2.245176,2.19807 2.753976,5.43897 1.301006,8.28704 -0.713116,1.39782 -2.521366,3.00905 -3.962136,3.53045 -1.49707,0.54176 -3.84003,0.47454 -5.20888,-0.14946 z"
|
||||
style="fill:#000000;stroke:none" />
|
||||
<path
|
||||
id="rect4270"
|
||||
d="m 247.25369,75.97921 4.73637,0 c 13.16497,0 23.76348,10.598514 23.76348,23.763485 l 0,32.174615 c 0,13.16497 -10.59851,23.76348 -23.76348,23.76348 l -4.73637,0 c -13.16497,0 -23.76349,-10.59851 -23.76349,-23.76348 l 0,-32.174615 c 0,-13.164971 10.59852,-23.763485 23.76349,-23.763485 z"
|
||||
style="fill:#0a3d91" />
|
||||
<path
|
||||
id="path4272"
|
||||
d="m 236.31105,102.92749 24.90674,25.07007 -12.00423,14.53574 0,-51.936691 12.00423,13.882451 -24.90674,24.41678"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:4.32805729" />
|
||||
d="m 247.25369,71.97921 h 4.73637 c 13.16497,0 23.76348,10.598514 23.76348,23.763485 v 32.174615 c 0,13.16497 -10.59851,23.76348 -23.76348,23.76348 h -4.73637 c -13.16497,0 -23.76349,-10.59851 -23.76349,-23.76348 V 95.742695 c 0,-13.164971 10.59852,-23.763485 23.76349,-23.763485 z"
|
||||
style="fill:#0a3d91;stroke:none" />
|
||||
<path
|
||||
id="path4844"
|
||||
d="m 143.67921,27.5571 c -1.59043,2.623831 0.18153,5.574737 2.78461,6.642714 2.69504,1.572445 6.1706,4.987176 9.14793,2.232151 2.23313,-2.039515 0.60129,-5.727894 -2.04109,-6.67035 -3.06433,-1.676733 -6.55172,-5.514807 -9.89145,-2.204515 z M 351.7046,27.12937 c -2.76779,1.960623 -7.06819,2.694997 -8.37782,6.042717 -0.64195,2.73095 1.93572,4.99255 4.58419,4.426453 3.2021,-1.637914 7.05658,-2.8424 9.17849,-5.94769 0.56931,-2.60435 -1.49324,-5.35066 -4.26769,-4.745697 -0.41558,-0.107679 -0.76003,0.03505 -1.11717,0.224217 z m -26.76172,13.17187 c -2.93431,1.708015 -7.32039,1.922759 -8.93076,5.153004 -0.90775,2.654328 1.43202,5.159236 4.12365,4.861044 3.35587,-1.304271 7.31954,-2.112696 9.73662,-5.002268 0.81368,-2.537666 -0.97658,-5.469583 -3.79644,-5.128908 -0.4035,-0.14574 -0.75969,-0.03824 -1.13307,0.117128 z m -155.23633,2.46289 c -1.21948,2.711869 0.75683,5.460507 3.4437,6.14538 2.85847,1.080772 6.66937,4.11785 9.31224,1.23392 2.3151,-2.03652 0.33929,-5.835383 -2.40983,-6.41823 -3.32833,-1.175814 -7.38479,-4.713633 -10.34611,-0.96107 z m 127.27344,7.61719 c -3.12289,1.309174 -7.49226,0.970678 -9.49244,3.970097 -1.23184,2.518748 0.7727,5.298264 3.48037,5.339749 3.48706,-0.907308 7.56742,-1.1128 10.30314,-3.739116 1.11397,-2.422222 -0.31199,-5.546068 -3.1516,-5.551016 -0.3827,-0.195662 -0.75023,-0.126964 -1.13947,-0.01971 z m -97.49023,1.54492 c -2.22858,1.461838 -2.68005,4.865948 -0.27553,6.376909 2.5869,1.470583 5.91459,1.954941 8.83971,2.495346 2.78485,0.332188 4.74603,-2.479173 3.89118,-5.048668 -2.04264,-3.279676 -6.47206,-2.73364 -9.71704,-4.089227 -0.91277,0.08855 -1.82555,0.177093 -2.73832,0.26564 z m 68.51367,4.50782 c -3.27623,0.788856 -7.46081,-0.187875 -9.93635,2.381992 -1.64972,2.268076 -0.15709,5.353662 2.50432,5.86185 3.61172,-0.292365 7.71764,0.09072 10.84009,-2.093962 1.46245,-2.227649 0.52336,-5.531725 -2.28478,-5.959415 -0.34949,-0.249225 -0.72211,-0.239347 -1.12328,-0.190465 z m -39.44922,1.41796 c -1.93309,1.83595 -1.76537,5.266611 0.87081,6.321491 2.80857,0.988807 6.17065,0.846733 9.1444,0.861366 2.79909,-0.172766 4.22635,-3.289835 2.92376,-5.664738 -2.60365,-2.851635 -6.84699,-1.541752 -10.29251,-2.269899 -0.88215,0.250593 -1.76431,0.501187 -2.64646,0.75178 z"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#0a3d91;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.55000019;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:7.55, 22.65;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
d="m 143.67921,23.5571 c -1.59043,2.623831 0.18153,5.574737 2.78461,6.642714 2.69504,1.572445 6.1706,4.987176 9.14793,2.232151 2.23313,-2.039515 0.60129,-5.727894 -2.04109,-6.67035 -3.06433,-1.676733 -6.55172,-5.514807 -9.89145,-2.204515 z M 351.7046,23.12937 c -2.76779,1.960623 -7.06819,2.694997 -8.37782,6.042717 -0.64195,2.73095 1.93572,4.99255 4.58419,4.426453 3.2021,-1.637914 7.05658,-2.8424 9.17849,-5.94769 0.56931,-2.60435 -1.49324,-5.35066 -4.26769,-4.745697 -0.41558,-0.107679 -0.76003,0.03505 -1.11717,0.224217 z m -26.76172,13.17187 c -2.93431,1.708015 -7.32039,1.922759 -8.93076,5.153004 -0.90775,2.654328 1.43202,5.159236 4.12365,4.861044 3.35587,-1.304271 7.31954,-2.112696 9.73662,-5.002268 0.81368,-2.537666 -0.97658,-5.469583 -3.79644,-5.128908 -0.4035,-0.14574 -0.75969,-0.03824 -1.13307,0.117128 z m -155.23633,2.46289 c -1.21948,2.711869 0.75683,5.460507 3.4437,6.14538 2.85847,1.080772 6.66937,4.11785 9.31224,1.23392 2.3151,-2.03652 0.33929,-5.835383 -2.40983,-6.41823 -3.32833,-1.175814 -7.38479,-4.713633 -10.34611,-0.96107 z m 127.27344,7.61719 c -3.12289,1.309174 -7.49226,0.970678 -9.49244,3.970097 -1.23184,2.518748 0.7727,5.298264 3.48037,5.339749 3.48706,-0.907308 7.56742,-1.1128 10.30314,-3.739116 1.11397,-2.422222 -0.31199,-5.546068 -3.1516,-5.551016 -0.3827,-0.195662 -0.75023,-0.126964 -1.13947,-0.01971 z m -97.49023,1.54492 c -2.22858,1.461838 -2.68005,4.865948 -0.27553,6.376909 2.5869,1.470583 5.91459,1.954941 8.83971,2.495346 2.78485,0.332188 4.74603,-2.479173 3.89118,-5.048668 -2.04264,-3.279676 -6.47206,-2.73364 -9.71704,-4.089227 -0.91277,0.08855 -1.82555,0.177093 -2.73832,0.26564 z m 68.51367,4.50782 c -3.27623,0.788856 -7.46081,-0.187875 -9.93635,2.381992 -1.64972,2.268076 -0.15709,5.353662 2.50432,5.86185 3.61172,-0.292365 7.71764,0.09072 10.84009,-2.093962 1.46245,-2.227649 0.52336,-5.531725 -2.28478,-5.959415 -0.34949,-0.249225 -0.72211,-0.239347 -1.12328,-0.190465 z m -39.44922,1.41796 c -1.93309,1.83595 -1.76537,5.266611 0.87081,6.321491 2.80857,0.988807 6.17065,0.846733 9.1444,0.861366 2.79909,-0.172766 4.22635,-3.289835 2.92376,-5.664738 -2.60365,-2.851635 -6.84699,-1.541752 -10.29251,-2.269899 -0.88215,0.250593 -1.76431,0.501187 -2.64646,0.75178 z"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#0a3d91;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.55;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:7.55, 22.65;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<path
|
||||
d="m 252.50083,112.08988 11.6563,-11.45156 -17.12592,-19.790888 0.0193,25.792048 -9.14185,-9.24454 -3.12531,3.09064 11.5214,11.58063 -11.49773,11.30756 c 3.03061,3.05593 0,0 3.03061,3.05593 l 9.18921,-8.97308 c 0.0443,4.73517 0.004,27.16515 0.004,27.16515 l 17.10224,-20.77257 z m -1.07721,-19.570428 6.79869,7.863838 -6.79869,6.63278 z m -0.0237,40.027828 0.0237,-15.39623 6.89338,6.9879 z"
|
||||
id="path1536"
|
||||
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.254891"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccc" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 10 KiB |
@@ -462,6 +462,17 @@
|
||||
android:label="@string/hotspot_title"
|
||||
android:theme="@style/BriarTheme" />
|
||||
|
||||
<activity
|
||||
android:name=".android.contact.connect.ConnectViaBluetoothActivity"
|
||||
android:exported="false"
|
||||
android:label="@string/connect_via_bluetooth_title"
|
||||
android:parentActivityName="org.briarproject.briar.android.conversation.ConversationActivity"
|
||||
android:theme="@style/BriarTheme">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="org.briarproject.briar.android.conversation.ConversationActivity" />
|
||||
</activity>
|
||||
|
||||
</application>
|
||||
|
||||
<queries>
|
||||
|
||||
@@ -35,6 +35,7 @@ import org.briarproject.briar.BriarCoreEagerSingletons;
|
||||
import org.briarproject.briar.BriarCoreModule;
|
||||
import org.briarproject.briar.android.attachment.AttachmentModule;
|
||||
import org.briarproject.briar.android.attachment.media.MediaModule;
|
||||
import org.briarproject.briar.android.contact.connect.BluetoothIntroFragment;
|
||||
import org.briarproject.briar.android.conversation.glide.BriarModelLoader;
|
||||
import org.briarproject.briar.android.hotspot.AbstractTabsFragment;
|
||||
import org.briarproject.briar.android.hotspot.FallbackFragment;
|
||||
@@ -236,4 +237,6 @@ public interface AndroidComponent
|
||||
void inject(SendFragment sendFragment);
|
||||
|
||||
void inject(ReceiveFragment receiveFragment);
|
||||
|
||||
void inject(BluetoothIntroFragment bluetoothIntroFragment);
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ import org.briarproject.briar.android.account.SetupModule;
|
||||
import org.briarproject.briar.android.blog.BlogModule;
|
||||
import org.briarproject.briar.android.contact.ContactListModule;
|
||||
import org.briarproject.briar.android.contact.add.nearby.AddNearbyContactModule;
|
||||
import org.briarproject.briar.android.contact.connect.ConnectViaBluetoothModule;
|
||||
import org.briarproject.briar.android.forum.ForumModule;
|
||||
import org.briarproject.briar.android.hotspot.HotspotModule;
|
||||
import org.briarproject.briar.android.introduction.IntroductionModule;
|
||||
@@ -89,6 +90,7 @@ import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD;
|
||||
DevReportModule.class,
|
||||
ContactListModule.class,
|
||||
IntroductionModule.class,
|
||||
ConnectViaBluetoothModule.class,
|
||||
// below need to be within same scope as ViewModelProvider.Factory
|
||||
BlogModule.class,
|
||||
ForumModule.class,
|
||||
|
||||
@@ -28,8 +28,8 @@ import org.briarproject.briar.android.contact.add.remote.AddContactActivity;
|
||||
import org.briarproject.briar.android.contact.add.remote.LinkExchangeFragment;
|
||||
import org.briarproject.briar.android.contact.add.remote.NicknameFragment;
|
||||
import org.briarproject.briar.android.contact.add.remote.PendingContactListActivity;
|
||||
import org.briarproject.briar.android.contact.connect.ConnectViaBluetoothActivity;
|
||||
import org.briarproject.briar.android.conversation.AliasDialogFragment;
|
||||
import org.briarproject.briar.android.conversation.BluetoothConnecterDialogFragment;
|
||||
import org.briarproject.briar.android.conversation.ConversationActivity;
|
||||
import org.briarproject.briar.android.conversation.ConversationSettingsDialog;
|
||||
import org.briarproject.briar.android.conversation.ImageActivity;
|
||||
@@ -238,9 +238,6 @@ public interface ActivityComponent {
|
||||
|
||||
void inject(ConversationSettingsDialog dialog);
|
||||
|
||||
void inject(
|
||||
BluetoothConnecterDialogFragment bluetoothConnecterDialogFragment);
|
||||
|
||||
void inject(RssFeedImportFragment fragment);
|
||||
|
||||
void inject(RssFeedManageFragment fragment);
|
||||
@@ -248,4 +245,6 @@ public interface ActivityComponent {
|
||||
void inject(RssFeedImportFailedDialogFragment fragment);
|
||||
|
||||
void inject(RssFeedDeleteFeedDialogFragment fragment);
|
||||
|
||||
void inject(ConnectViaBluetoothActivity connectViaBluetoothActivity);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
package org.briarproject.briar.android.contact.connect;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
|
||||
import org.briarproject.briar.R;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.UiThread;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
|
||||
import static android.os.Build.VERSION.SDK_INT;
|
||||
import static androidx.core.app.ActivityCompat.shouldShowRequestPermissionRationale;
|
||||
import static org.briarproject.briar.android.util.UiUtils.getGoToSettingsListener;
|
||||
import static org.briarproject.briar.android.util.UiUtils.isLocationEnabled;
|
||||
import static org.briarproject.briar.android.util.UiUtils.showLocationDialog;
|
||||
|
||||
class BluetoothConditionManager {
|
||||
|
||||
private enum Permission {
|
||||
UNKNOWN, GRANTED, SHOW_RATIONALE, PERMANENTLY_DENIED
|
||||
}
|
||||
|
||||
private Permission locationPermission = Permission.UNKNOWN;
|
||||
|
||||
/**
|
||||
* Call this when the using activity or fragment starts,
|
||||
* because permissions might have changed while it was stopped.
|
||||
*/
|
||||
void reset() {
|
||||
locationPermission = Permission.UNKNOWN;
|
||||
}
|
||||
|
||||
@UiThread
|
||||
void onLocationPermissionResult(Activity activity,
|
||||
@Nullable Boolean result) {
|
||||
if (result != null && result) {
|
||||
locationPermission = Permission.GRANTED;
|
||||
} else if (shouldShowRequestPermissionRationale(activity,
|
||||
ACCESS_FINE_LOCATION)) {
|
||||
locationPermission = Permission.SHOW_RATIONALE;
|
||||
} else {
|
||||
locationPermission = Permission.PERMANENTLY_DENIED;
|
||||
}
|
||||
}
|
||||
|
||||
boolean areRequirementsFulfilled(Context ctx,
|
||||
ActivityResultLauncher<String> permissionRequest,
|
||||
Runnable onLocationDenied) {
|
||||
boolean permissionGranted =
|
||||
SDK_INT < 23 || locationPermission == Permission.GRANTED;
|
||||
boolean locationEnabled = isLocationEnabled(ctx);
|
||||
if (permissionGranted && locationEnabled) return true;
|
||||
|
||||
if (locationPermission == Permission.PERMANENTLY_DENIED) {
|
||||
showDenialDialog(ctx, onLocationDenied);
|
||||
} else if (locationPermission == Permission.SHOW_RATIONALE) {
|
||||
showRationale(ctx, permissionRequest);
|
||||
} else if (!locationEnabled) {
|
||||
showLocationDialog(ctx);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void showDenialDialog(Context ctx, Runnable onLocationDenied) {
|
||||
new AlertDialog.Builder(ctx, R.style.BriarDialogTheme)
|
||||
.setTitle(R.string.permission_location_title)
|
||||
.setMessage(R.string.permission_location_denied_body)
|
||||
.setPositiveButton(R.string.ok, getGoToSettingsListener(ctx))
|
||||
.setNegativeButton(R.string.cancel, (v, d) ->
|
||||
onLocationDenied.run())
|
||||
.show();
|
||||
}
|
||||
|
||||
private void showRationale(Context ctx,
|
||||
ActivityResultLauncher<String> permissionRequest) {
|
||||
new AlertDialog.Builder(ctx, R.style.BriarDialogTheme)
|
||||
.setTitle(R.string.permission_location_title)
|
||||
.setMessage(R.string.permission_location_request_body)
|
||||
.setPositiveButton(R.string.ok, (dialog, which) ->
|
||||
permissionRequest.launch(ACCESS_FINE_LOCATION))
|
||||
.show();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package org.briarproject.briar.android.contact.connect;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||
import org.briarproject.briar.R;
|
||||
import org.briarproject.briar.android.util.ActivityLaunchers.RequestBluetoothDiscoverable;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts.RequestPermission;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
|
||||
import static android.widget.Toast.LENGTH_LONG;
|
||||
import static org.briarproject.briar.android.AppModule.getAndroidComponent;
|
||||
|
||||
@MethodsNotNullByDefault
|
||||
@ParametersNotNullByDefault
|
||||
public class BluetoothIntroFragment extends Fragment {
|
||||
|
||||
final static String TAG = BluetoothIntroFragment.class.getName();
|
||||
|
||||
@Inject
|
||||
ViewModelProvider.Factory viewModelFactory;
|
||||
|
||||
private final BluetoothConditionManager conditionManager =
|
||||
new BluetoothConditionManager();
|
||||
private ConnectViaBluetoothViewModel viewModel;
|
||||
|
||||
private final ActivityResultLauncher<Integer> bluetoothDiscoverableRequest =
|
||||
registerForActivityResult(new RequestBluetoothDiscoverable(),
|
||||
this::onBluetoothDiscoverable);
|
||||
private final ActivityResultLauncher<String> permissionRequest =
|
||||
registerForActivityResult(new RequestPermission(),
|
||||
this::onPermissionRequestResult);
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
getAndroidComponent(requireContext()).inject(this);
|
||||
viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
|
||||
.get(ConnectViaBluetoothViewModel.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater,
|
||||
@Nullable ViewGroup container,
|
||||
@Nullable Bundle savedInstanceState) {
|
||||
return inflater
|
||||
.inflate(R.layout.fragment_bluetooth_intro, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||
Button startButton = view.findViewById(R.id.startButton);
|
||||
startButton.setOnClickListener(this::onStartClicked);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
conditionManager.reset();
|
||||
}
|
||||
|
||||
private void onStartClicked(View v) {
|
||||
if (viewModel.shouldStartFlow()) {
|
||||
// The dialog starts a permission request which comes back as true
|
||||
// if the permission is already granted.
|
||||
// So we can use the request as a generic entry point
|
||||
// to the whole flow.
|
||||
permissionRequest.launch(ACCESS_FINE_LOCATION);
|
||||
}
|
||||
}
|
||||
|
||||
private void onPermissionRequestResult(@Nullable Boolean result) {
|
||||
Activity a = requireActivity();
|
||||
// update permission result in BluetoothConnecter
|
||||
conditionManager.onLocationPermissionResult(a, result);
|
||||
// what to do when the user denies granting the location permission
|
||||
Runnable onLocationPermissionDenied = () -> Toast.makeText(
|
||||
requireContext(),
|
||||
R.string.connect_via_bluetooth_no_location_permission,
|
||||
LENGTH_LONG).show();
|
||||
// if requirements are fulfilled, request Bluetooth discoverability
|
||||
if (conditionManager.areRequirementsFulfilled(a, permissionRequest,
|
||||
onLocationPermissionDenied)) {
|
||||
bluetoothDiscoverableRequest.launch(120); // for 2min
|
||||
}
|
||||
}
|
||||
|
||||
private void onBluetoothDiscoverable(@Nullable Boolean result) {
|
||||
if (result != null && result) {
|
||||
viewModel.onBluetoothDiscoverable();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.briarproject.briar.android.contact.connect;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||
import org.briarproject.briar.R;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
@MethodsNotNullByDefault
|
||||
@ParametersNotNullByDefault
|
||||
public class BluetoothProgressFragment extends Fragment {
|
||||
|
||||
final static String TAG = BluetoothProgressFragment.class.getName();
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater,
|
||||
@Nullable ViewGroup container,
|
||||
@Nullable Bundle savedInstanceState) {
|
||||
return inflater
|
||||
.inflate(R.layout.fragment_bluetooth_progress, container, false);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package org.briarproject.briar.android.contact.connect;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.briarproject.bramble.api.contact.ContactId;
|
||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||
import org.briarproject.briar.R;
|
||||
import org.briarproject.briar.android.activity.ActivityComponent;
|
||||
import org.briarproject.briar.android.activity.BriarActivity;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import static android.widget.Toast.LENGTH_LONG;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
import static org.briarproject.briar.android.conversation.ConversationActivity.CONTACT_ID;
|
||||
import static org.briarproject.briar.android.util.UiUtils.showFragment;
|
||||
|
||||
@MethodsNotNullByDefault
|
||||
@ParametersNotNullByDefault
|
||||
public class ConnectViaBluetoothActivity extends BriarActivity {
|
||||
|
||||
@Inject
|
||||
ViewModelProvider.Factory viewModelFactory;
|
||||
|
||||
private ConnectViaBluetoothViewModel viewModel;
|
||||
|
||||
@Override
|
||||
public void injectActivity(ActivityComponent component) {
|
||||
component.inject(this);
|
||||
|
||||
viewModel = new ViewModelProvider(this, viewModelFactory)
|
||||
.get(ConnectViaBluetoothViewModel.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Intent intent = requireNonNull(getIntent());
|
||||
int contactId = intent.getIntExtra(CONTACT_ID, -1);
|
||||
if (contactId == -1) throw new IllegalArgumentException("ContactId");
|
||||
viewModel.setContactId(new ContactId(contactId));
|
||||
|
||||
setContentView(R.layout.activity_fragment_container);
|
||||
|
||||
viewModel.getState().observeEvent(this, this::onStateChanged);
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
Fragment f = new BluetoothIntroFragment();
|
||||
String tag = BluetoothIntroFragment.TAG;
|
||||
getSupportFragmentManager().beginTransaction()
|
||||
.replace(R.id.fragmentContainer, f, tag)
|
||||
.commitNow();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
viewModel.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||
if (item.getItemId() == android.R.id.home) {
|
||||
onBackPressed();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
private void onStateChanged(ConnectViaBluetoothState state) {
|
||||
if (state instanceof ConnectViaBluetoothState.Connecting) {
|
||||
Fragment f = new BluetoothProgressFragment();
|
||||
String tag = BluetoothProgressFragment.TAG;
|
||||
showFragment(getSupportFragmentManager(), f, tag, false);
|
||||
} else if (state instanceof ConnectViaBluetoothState.Success) {
|
||||
Toast.makeText(this, R.string.connect_via_bluetooth_success,
|
||||
LENGTH_LONG).show();
|
||||
supportFinishAfterTransition();
|
||||
} else if (state instanceof ConnectViaBluetoothState.Error) {
|
||||
Toast.makeText(this,
|
||||
((ConnectViaBluetoothState.Error) state).errorRes,
|
||||
LENGTH_LONG).show();
|
||||
supportFinishAfterTransition();
|
||||
} else throw new AssertionError();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.briarproject.briar.android.contact.connect;
|
||||
|
||||
import org.briarproject.briar.android.viewmodel.ViewModelKey;
|
||||
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import dagger.Binds;
|
||||
import dagger.Module;
|
||||
import dagger.multibindings.IntoMap;
|
||||
|
||||
@Module
|
||||
public abstract class ConnectViaBluetoothModule {
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ViewModelKey(ConnectViaBluetoothViewModel.class)
|
||||
abstract ViewModel bindContactListViewModel(
|
||||
ConnectViaBluetoothViewModel connectViaBluetoothViewModel);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.briarproject.briar.android.contact.connect;
|
||||
|
||||
import androidx.annotation.StringRes;
|
||||
|
||||
abstract class ConnectViaBluetoothState {
|
||||
|
||||
static class Connecting extends ConnectViaBluetoothState {
|
||||
}
|
||||
|
||||
static class Success extends ConnectViaBluetoothState {
|
||||
}
|
||||
|
||||
static class Error extends ConnectViaBluetoothState {
|
||||
@StringRes
|
||||
final int errorRes;
|
||||
|
||||
Error(@StringRes int errorRes) {
|
||||
this.errorRes = errorRes;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
package org.briarproject.briar.android.conversation;
|
||||
package org.briarproject.briar.android.contact.connect;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.content.Context;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.briarproject.bramble.api.connection.ConnectionManager;
|
||||
import org.briarproject.bramble.api.connection.ConnectionRegistry;
|
||||
import org.briarproject.bramble.api.contact.ContactId;
|
||||
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
||||
import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.db.TransactionManager;
|
||||
import org.briarproject.bramble.api.event.Event;
|
||||
import org.briarproject.bramble.api.event.EventBus;
|
||||
import org.briarproject.bramble.api.event.EventListener;
|
||||
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
||||
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
import org.briarproject.bramble.api.plugin.PluginManager;
|
||||
import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
|
||||
import org.briarproject.bramble.api.plugin.event.ConnectionOpenedEvent;
|
||||
@@ -21,23 +22,22 @@ import org.briarproject.bramble.api.properties.TransportPropertyManager;
|
||||
import org.briarproject.bramble.api.system.AndroidExecutor;
|
||||
import org.briarproject.bramble.plugin.bluetooth.BluetoothPlugin;
|
||||
import org.briarproject.briar.R;
|
||||
import org.briarproject.briar.android.contact.ContactItem;
|
||||
import org.briarproject.briar.android.contact.connect.ConnectViaBluetoothState.Connecting;
|
||||
import org.briarproject.briar.android.contact.connect.ConnectViaBluetoothState.Success;
|
||||
import org.briarproject.briar.android.viewmodel.DbViewModel;
|
||||
import org.briarproject.briar.android.viewmodel.LiveEvent;
|
||||
import org.briarproject.briar.android.viewmodel.MutableLiveEvent;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.annotation.UiThread;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
|
||||
import static android.os.Build.VERSION.SDK_INT;
|
||||
import static androidx.core.app.ActivityCompat.shouldShowRequestPermissionRationale;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
import static java.util.concurrent.TimeUnit.SECONDS;
|
||||
import static java.util.logging.Level.WARNING;
|
||||
import static java.util.logging.Logger.getLogger;
|
||||
@@ -46,48 +46,50 @@ import static org.briarproject.bramble.api.plugin.BluetoothConstants.PROP_UUID;
|
||||
import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE;
|
||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||
import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty;
|
||||
import static org.briarproject.briar.android.util.UiUtils.getGoToSettingsListener;
|
||||
import static org.briarproject.briar.android.util.UiUtils.isLocationEnabled;
|
||||
import static org.briarproject.briar.android.util.UiUtils.showLocationDialog;
|
||||
|
||||
class BluetoothConnecter implements EventListener {
|
||||
@UiThread
|
||||
@NotNullByDefault
|
||||
class ConnectViaBluetoothViewModel extends DbViewModel implements
|
||||
EventListener {
|
||||
|
||||
private final Logger LOG = getLogger(BluetoothConnecter.class.getName());
|
||||
private final Logger LOG =
|
||||
getLogger(ConnectViaBluetoothViewModel.class.getName());
|
||||
|
||||
private final long BT_ACTIVE_TIMEOUT = SECONDS.toMillis(5);
|
||||
|
||||
private enum Permission {
|
||||
UNKNOWN, GRANTED, SHOW_RATIONALE, PERMANENTLY_DENIED
|
||||
}
|
||||
|
||||
private final Application app;
|
||||
private final PluginManager pluginManager;
|
||||
private final Executor ioExecutor;
|
||||
private final AndroidExecutor androidExecutor;
|
||||
private final ConnectionRegistry connectionRegistry;
|
||||
@Nullable
|
||||
private final BluetoothAdapter bt = BluetoothAdapter.getDefaultAdapter();
|
||||
private final EventBus eventBus;
|
||||
private final TransportPropertyManager transportPropertyManager;
|
||||
private final ConnectionManager connectionManager;
|
||||
|
||||
@Nullable
|
||||
private volatile BluetoothPlugin bluetoothPlugin;
|
||||
|
||||
private Permission locationPermission = Permission.UNKNOWN;
|
||||
@Nullable
|
||||
private ContactId contactId = null;
|
||||
|
||||
private final MutableLiveEvent<ConnectViaBluetoothState> state =
|
||||
new MutableLiveEvent<>();
|
||||
|
||||
@Inject
|
||||
BluetoothConnecter(Application app,
|
||||
ConnectViaBluetoothViewModel(
|
||||
Application app,
|
||||
@DatabaseExecutor Executor dbExecutor,
|
||||
LifecycleManager lifecycleManager,
|
||||
TransactionManager db,
|
||||
AndroidExecutor androidExecutor,
|
||||
PluginManager pluginManager,
|
||||
@IoExecutor Executor ioExecutor,
|
||||
AndroidExecutor androidExecutor,
|
||||
ConnectionRegistry connectionRegistry,
|
||||
EventBus eventBus,
|
||||
TransportPropertyManager transportPropertyManager,
|
||||
ConnectionManager connectionManager) {
|
||||
this.app = app;
|
||||
super(app, dbExecutor, lifecycleManager, db, androidExecutor);
|
||||
this.pluginManager = pluginManager;
|
||||
this.ioExecutor = ioExecutor;
|
||||
this.androidExecutor = androidExecutor;
|
||||
this.bluetoothPlugin = (BluetoothPlugin) pluginManager.getPlugin(ID);
|
||||
this.connectionRegistry = connectionRegistry;
|
||||
this.eventBus = eventBus;
|
||||
@@ -95,20 +97,22 @@ class BluetoothConnecter implements EventListener {
|
||||
this.connectionManager = connectionManager;
|
||||
}
|
||||
|
||||
boolean isConnectedViaBluetooth(ContactId contactId) {
|
||||
return connectionRegistry.isConnected(contactId, ID);
|
||||
}
|
||||
|
||||
boolean isDiscovering() {
|
||||
return bluetoothPlugin.isDiscovering();
|
||||
@Override
|
||||
protected void onCleared() {
|
||||
stopConnecting();
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this when the using activity or fragment starts,
|
||||
* because permissions might have changed while it was stopped.
|
||||
* Set this as soon as it becomes available.
|
||||
*/
|
||||
void setContactId(ContactId contactId) {
|
||||
this.contactId = contactId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call this when the using activity or fragment starts.
|
||||
*/
|
||||
void reset() {
|
||||
locationPermission = Permission.UNKNOWN;
|
||||
// When this class is instantiated before we are logged in
|
||||
// (like when returning to a killed activity), bluetoothPlugin would be
|
||||
// null and we consider bluetooth not supported. So reset here.
|
||||
@@ -116,94 +120,52 @@ class BluetoothConnecter implements EventListener {
|
||||
}
|
||||
|
||||
@UiThread
|
||||
void onLocationPermissionResult(Activity activity,
|
||||
@Nullable Boolean result) {
|
||||
if (result != null && result) {
|
||||
locationPermission = Permission.GRANTED;
|
||||
} else if (shouldShowRequestPermissionRationale(activity,
|
||||
ACCESS_FINE_LOCATION)) {
|
||||
locationPermission = Permission.SHOW_RATIONALE;
|
||||
} else {
|
||||
locationPermission = Permission.PERMANENTLY_DENIED;
|
||||
boolean shouldStartFlow() {
|
||||
if (isBluetoothNotSupported()) {
|
||||
state.setEvent(new ConnectViaBluetoothState.Error(
|
||||
R.string.bt_plugin_status_inactive));
|
||||
return false;
|
||||
} else if (isConnectedViaBluetooth()) {
|
||||
state.setEvent(new Success());
|
||||
return false;
|
||||
} else if (isDiscovering()) {
|
||||
state.setEvent(new ConnectViaBluetoothState.Error(
|
||||
R.string.connect_via_bluetooth_already_discovering));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean isBluetoothNotSupported() {
|
||||
private boolean isBluetoothNotSupported() {
|
||||
return bt == null || bluetoothPlugin == null;
|
||||
}
|
||||
|
||||
boolean areRequirementsFulfilled(Context ctx,
|
||||
ActivityResultLauncher<String> permissionRequest,
|
||||
Runnable onLocationDenied) {
|
||||
boolean permissionGranted =
|
||||
SDK_INT < 23 || locationPermission == Permission.GRANTED;
|
||||
boolean locationEnabled = isLocationEnabled(ctx);
|
||||
if (permissionGranted && locationEnabled) return true;
|
||||
|
||||
if (locationPermission == Permission.PERMANENTLY_DENIED) {
|
||||
showDenialDialog(ctx, onLocationDenied);
|
||||
} else if (locationPermission == Permission.SHOW_RATIONALE) {
|
||||
showRationale(ctx, permissionRequest);
|
||||
} else if (!locationEnabled) {
|
||||
showLocationDialog(ctx);
|
||||
}
|
||||
return false;
|
||||
private boolean isDiscovering() {
|
||||
// we should not be calling this if isBluetoothNotSupported() is true
|
||||
return requireNonNull(bluetoothPlugin).isDiscovering();
|
||||
}
|
||||
|
||||
private void showDenialDialog(Context ctx, Runnable onLocationDenied) {
|
||||
new AlertDialog.Builder(ctx, R.style.BriarDialogTheme)
|
||||
.setTitle(R.string.permission_location_title)
|
||||
.setMessage(R.string.permission_location_denied_body)
|
||||
.setPositiveButton(R.string.ok, getGoToSettingsListener(ctx))
|
||||
.setNegativeButton(R.string.cancel, (v, d) ->
|
||||
onLocationDenied.run())
|
||||
.show();
|
||||
}
|
||||
|
||||
private void showRationale(Context ctx,
|
||||
ActivityResultLauncher<String> permissionRequest) {
|
||||
new AlertDialog.Builder(ctx, R.style.BriarDialogTheme)
|
||||
.setTitle(R.string.permission_location_title)
|
||||
.setMessage(R.string.permission_location_request_body)
|
||||
.setPositiveButton(R.string.ok, (dialog, which) ->
|
||||
permissionRequest.launch(ACCESS_FINE_LOCATION))
|
||||
.show();
|
||||
private boolean isConnectedViaBluetooth() {
|
||||
return connectionRegistry.isConnected(requireNonNull(contactId), ID);
|
||||
}
|
||||
|
||||
@UiThread
|
||||
void onBluetoothDiscoverable(ContactItem contact) {
|
||||
contactId = contact.getContact().getId();
|
||||
connect();
|
||||
}
|
||||
void onBluetoothDiscoverable() {
|
||||
ContactId contactId = requireNonNull(this.contactId);
|
||||
BluetoothPlugin bluetoothPlugin = requireNonNull(this.bluetoothPlugin);
|
||||
|
||||
@UiThread
|
||||
@Override
|
||||
public void eventOccurred(@NonNull Event e) {
|
||||
if (e instanceof ConnectionOpenedEvent) {
|
||||
ConnectionOpenedEvent c = (ConnectionOpenedEvent) e;
|
||||
if (c.getContactId().equals(contactId) && c.isIncoming() &&
|
||||
c.getTransportId() == ID) {
|
||||
if (bluetoothPlugin != null) {
|
||||
bluetoothPlugin.stopDiscoverAndConnect();
|
||||
}
|
||||
LOG.info("Contact connected to us");
|
||||
showToast(R.string.toast_connect_via_bluetooth_success);
|
||||
}
|
||||
}
|
||||
}
|
||||
state.setEvent(new Connecting());
|
||||
|
||||
private void connect() {
|
||||
bluetoothPlugin.disablePolling();
|
||||
pluginManager.setPluginEnabled(ID, true);
|
||||
|
||||
ioExecutor.execute(() -> {
|
||||
try {
|
||||
if (!waitForBluetoothActive()) {
|
||||
showToast(R.string.bt_plugin_status_inactive);
|
||||
state.postEvent(new ConnectViaBluetoothState.Error(
|
||||
R.string.bt_plugin_status_inactive));
|
||||
LOG.warning("Bluetooth plugin didn't become active");
|
||||
return;
|
||||
}
|
||||
showToast(R.string.toast_connect_via_bluetooth_start);
|
||||
eventBus.addListener(this);
|
||||
try {
|
||||
String uuid = null;
|
||||
@@ -226,7 +188,7 @@ class BluetoothConnecter implements EventListener {
|
||||
LOG.info("Could connect, handling connection");
|
||||
connectionManager
|
||||
.manageOutgoingConnection(contactId, ID, conn);
|
||||
showToast(R.string.toast_connect_via_bluetooth_success);
|
||||
state.postEvent(new Success());
|
||||
}
|
||||
} finally {
|
||||
eventBus.removeListener(this);
|
||||
@@ -237,8 +199,23 @@ class BluetoothConnecter implements EventListener {
|
||||
});
|
||||
}
|
||||
|
||||
@UiThread
|
||||
@Override
|
||||
public void eventOccurred(@NonNull Event e) {
|
||||
if (e instanceof ConnectionOpenedEvent) {
|
||||
ConnectionOpenedEvent c = (ConnectionOpenedEvent) e;
|
||||
if (c.getContactId().equals(contactId) && c.isIncoming() &&
|
||||
c.getTransportId() == ID) {
|
||||
stopConnecting();
|
||||
LOG.info("Contact connected to us");
|
||||
state.postEvent(new Success());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@IoExecutor
|
||||
private boolean waitForBluetoothActive() {
|
||||
BluetoothPlugin bluetoothPlugin = requireNonNull(this.bluetoothPlugin);
|
||||
long left = BT_ACTIVE_TIMEOUT;
|
||||
final long sleep = 250;
|
||||
try {
|
||||
@@ -264,9 +241,9 @@ class BluetoothConnecter implements EventListener {
|
||||
final long sleep = 250;
|
||||
try {
|
||||
while (left > 0) {
|
||||
if (isConnectedViaBluetooth(contactId)) {
|
||||
if (isConnectedViaBluetooth()) {
|
||||
LOG.info("Failed to connect, but contact connected");
|
||||
// no Toast needed here, as it gets shown when
|
||||
// no success state needed here, as it gets shown when
|
||||
// ConnectionOpenedEvent is received
|
||||
return;
|
||||
}
|
||||
@@ -277,13 +254,19 @@ class BluetoothConnecter implements EventListener {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
LOG.warning("Failed to connect");
|
||||
showToast(R.string.toast_connect_via_bluetooth_error);
|
||||
state.postEvent(new ConnectViaBluetoothState.Error(
|
||||
R.string.connect_via_bluetooth_error));
|
||||
}
|
||||
|
||||
private void showToast(@StringRes int res) {
|
||||
androidExecutor.runOnUiThread(() ->
|
||||
Toast.makeText(app, res, Toast.LENGTH_LONG).show()
|
||||
);
|
||||
private void stopConnecting() {
|
||||
BluetoothPlugin bluetoothPlugin = this.bluetoothPlugin;
|
||||
if (bluetoothPlugin != null) {
|
||||
bluetoothPlugin.stopDiscoverAndConnect();
|
||||
}
|
||||
}
|
||||
|
||||
LiveEvent<ConnectViaBluetoothState> getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,151 +0,0 @@
|
||||
package org.briarproject.briar.android.conversation;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.briarproject.bramble.api.contact.ContactId;
|
||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||
import org.briarproject.briar.R;
|
||||
import org.briarproject.briar.android.activity.BaseActivity;
|
||||
import org.briarproject.briar.android.contact.ContactItem;
|
||||
import org.briarproject.briar.android.util.ActivityLaunchers.RequestBluetoothDiscoverable;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts.RequestPermission;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
|
||||
import static android.content.DialogInterface.BUTTON_POSITIVE;
|
||||
import static android.widget.Toast.LENGTH_LONG;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
|
||||
@MethodsNotNullByDefault
|
||||
@ParametersNotNullByDefault
|
||||
public class BluetoothConnecterDialogFragment extends DialogFragment {
|
||||
|
||||
final static String TAG = BluetoothConnecterDialogFragment.class.getName();
|
||||
|
||||
@Inject
|
||||
ViewModelProvider.Factory viewModelFactory;
|
||||
|
||||
private ConversationViewModel viewModel;
|
||||
private BluetoothConnecter bluetoothConnecter;
|
||||
|
||||
private final ActivityResultLauncher<Integer> bluetoothDiscoverableRequest =
|
||||
registerForActivityResult(new RequestBluetoothDiscoverable(),
|
||||
this::onBluetoothDiscoverable);
|
||||
private final ActivityResultLauncher<String> permissionRequest =
|
||||
registerForActivityResult(new RequestPermission(),
|
||||
this::onPermissionRequestResult);
|
||||
|
||||
@Override
|
||||
public void onAttach(Context ctx) {
|
||||
super.onAttach(ctx);
|
||||
((BaseActivity) requireActivity()).getActivityComponent().inject(this);
|
||||
viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
|
||||
.get(ConversationViewModel.class);
|
||||
bluetoothConnecter = viewModel.getBluetoothConnecter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
|
||||
Context ctx = requireContext();
|
||||
return new AlertDialog.Builder(ctx, R.style.BriarDialogTheme)
|
||||
.setTitle(R.string.dialog_title_connect_via_bluetooth)
|
||||
.setMessage(R.string.dialog_message_connect_via_bluetooth)
|
||||
// actual listener gets set in onResume()
|
||||
.setPositiveButton(R.string.start, null)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setCancelable(false) // keep it open until dismissed
|
||||
.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
bluetoothConnecter.reset();
|
||||
if (bluetoothConnecter.isBluetoothNotSupported()) {
|
||||
showToast(R.string.toast_connect_via_bluetooth_error);
|
||||
dismiss();
|
||||
return;
|
||||
}
|
||||
// MenuItem only gets enabled after contactItem has loaded
|
||||
ContactItem contact =
|
||||
requireNonNull(viewModel.getContactItem().getValue());
|
||||
ContactId contactId = contact.getContact().getId();
|
||||
if (bluetoothConnecter.isConnectedViaBluetooth(contactId)) {
|
||||
showToast(R.string.toast_connect_via_bluetooth_success);
|
||||
dismiss();
|
||||
return;
|
||||
}
|
||||
if (bluetoothConnecter.isDiscovering()) {
|
||||
showToast(R.string.toast_connect_via_bluetooth_already_discovering);
|
||||
dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
// Set the click listener for the START button here
|
||||
// to prevent it from automatically dismissing the dialog.
|
||||
// The dialog is shown in onStart(), so we set the listener here later.
|
||||
AlertDialog dialog = (AlertDialog) getDialog();
|
||||
Button positiveButton = dialog.getButton(BUTTON_POSITIVE);
|
||||
positiveButton.setOnClickListener(this::onStartClicked);
|
||||
}
|
||||
|
||||
private void onStartClicked(View v) {
|
||||
// The dialog starts a permission request which comes back as true
|
||||
// if the permission is already granted.
|
||||
// So we can use the request as a generic entry point to the whole flow.
|
||||
permissionRequest.launch(ACCESS_FINE_LOCATION);
|
||||
}
|
||||
|
||||
private void onPermissionRequestResult(@Nullable Boolean result) {
|
||||
Activity a = requireActivity();
|
||||
// update permission result in BluetoothConnecter
|
||||
bluetoothConnecter.onLocationPermissionResult(a, result);
|
||||
// what to do when the user denies granting the location permission
|
||||
Runnable onLocationPermissionDenied = () -> {
|
||||
Toast.makeText(requireContext(),
|
||||
R.string.toast_connect_via_bluetooth_no_location_permission,
|
||||
LENGTH_LONG).show();
|
||||
dismiss();
|
||||
};
|
||||
// if requirements are fulfilled, request Bluetooth discoverability
|
||||
if (bluetoothConnecter.areRequirementsFulfilled(a, permissionRequest,
|
||||
onLocationPermissionDenied)) {
|
||||
bluetoothDiscoverableRequest.launch(120); // for 2min
|
||||
}
|
||||
}
|
||||
|
||||
private void onBluetoothDiscoverable(@Nullable Boolean result) {
|
||||
if (result != null && result) {
|
||||
// MenuItem only gets enabled after contactItem has loaded
|
||||
ContactItem contact =
|
||||
requireNonNull(viewModel.getContactItem().getValue());
|
||||
bluetoothConnecter.onBluetoothDiscoverable(contact);
|
||||
dismiss();
|
||||
} else {
|
||||
showToast(R.string.toast_connect_via_bluetooth_not_discoverable);
|
||||
}
|
||||
}
|
||||
|
||||
private void showToast(@StringRes int stringRes) {
|
||||
Toast.makeText(requireContext(), stringRes, LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -48,6 +48,7 @@ import org.briarproject.briar.android.activity.BriarActivity;
|
||||
import org.briarproject.briar.android.attachment.AttachmentItem;
|
||||
import org.briarproject.briar.android.attachment.AttachmentRetriever;
|
||||
import org.briarproject.briar.android.blog.BlogActivity;
|
||||
import org.briarproject.briar.android.contact.connect.ConnectViaBluetoothActivity;
|
||||
import org.briarproject.briar.android.conversation.ConversationVisitor.AttachmentCache;
|
||||
import org.briarproject.briar.android.conversation.ConversationVisitor.TextCache;
|
||||
import org.briarproject.briar.android.forum.ForumActivity;
|
||||
@@ -104,7 +105,6 @@ import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.app.ActivityOptionsCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
@@ -422,9 +422,9 @@ public class ConversationActivity extends BriarActivity
|
||||
onAutoDeleteTimerNoticeClicked();
|
||||
return true;
|
||||
} else if (itemId == R.id.action_connect_via_bluetooth) {
|
||||
FragmentManager fm = getSupportFragmentManager();
|
||||
new BluetoothConnecterDialogFragment().show(fm,
|
||||
BluetoothConnecterDialogFragment.TAG);
|
||||
Intent intent = new Intent(this, ConnectViaBluetoothActivity.class);
|
||||
intent.putExtra(CONTACT_ID, contactId.getInt());
|
||||
startActivity(intent);
|
||||
return true;
|
||||
} else if (itemId == R.id.action_transfer_data) {
|
||||
Intent intent = new Intent(this, RemovableDriveActivity.class);
|
||||
|
||||
@@ -101,7 +101,6 @@ public class ConversationViewModel extends DbViewModel
|
||||
private final AttachmentCreator attachmentCreator;
|
||||
private final AutoDeleteManager autoDeleteManager;
|
||||
private final ConversationManager conversationManager;
|
||||
private final BluetoothConnecter bluetoothConnecter;
|
||||
|
||||
@Nullable
|
||||
private ContactId contactId = null;
|
||||
@@ -140,8 +139,7 @@ public class ConversationViewModel extends DbViewModel
|
||||
AttachmentRetriever attachmentRetriever,
|
||||
AttachmentCreator attachmentCreator,
|
||||
AutoDeleteManager autoDeleteManager,
|
||||
ConversationManager conversationManager,
|
||||
BluetoothConnecter bluetoothConnecter) {
|
||||
ConversationManager conversationManager) {
|
||||
super(application, dbExecutor, lifecycleManager, db, androidExecutor);
|
||||
this.db = db;
|
||||
this.eventBus = eventBus;
|
||||
@@ -154,7 +152,6 @@ public class ConversationViewModel extends DbViewModel
|
||||
this.attachmentCreator = attachmentCreator;
|
||||
this.autoDeleteManager = autoDeleteManager;
|
||||
this.conversationManager = conversationManager;
|
||||
this.bluetoothConnecter = bluetoothConnecter;
|
||||
messagingGroupId = map(contactItem, c ->
|
||||
messagingManager.getContactGroup(c.getContact()).getId());
|
||||
eventBus.addListener(this);
|
||||
@@ -414,10 +411,6 @@ public class ConversationViewModel extends DbViewModel
|
||||
return attachmentRetriever;
|
||||
}
|
||||
|
||||
BluetoothConnecter getBluetoothConnecter() {
|
||||
return bluetoothConnecter;
|
||||
}
|
||||
|
||||
LiveData<ContactItem> getContactItem() {
|
||||
return contactItem;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import androidx.core.widget.NestedScrollView;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import static android.view.View.FOCUS_DOWN;
|
||||
import static android.view.View.GONE;
|
||||
|
||||
/**
|
||||
* A fragment to be used at the end of a user flow
|
||||
@@ -81,7 +82,12 @@ public class FinalFragment extends Fragment {
|
||||
int color = getResources().getColor(args.getInt(ARG_ICON_TINT));
|
||||
ColorStateList tint = ColorStateList.valueOf(color);
|
||||
ImageViewCompat.setImageTintList(iconView, tint);
|
||||
textView.setText(args.getInt(ARG_TEXT));
|
||||
int textRes = args.getInt(ARG_TEXT);
|
||||
if (textRes == 0) {
|
||||
textView.setVisibility(GONE);
|
||||
} else {
|
||||
textView.setText(textRes);
|
||||
}
|
||||
|
||||
buttonView.setOnClickListener(view -> onBackButtonPressed());
|
||||
|
||||
|
||||
21
briar-android/src/main/res/drawable/ic_bluetooth.xml
Normal file
21
briar-android/src/main/res/drawable/ic_bluetooth.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="100dp"
|
||||
android:height="35dp"
|
||||
android:viewportWidth="500"
|
||||
android:viewportHeight="175">
|
||||
<path
|
||||
android:fillColor="?attr/colorControlNormal"
|
||||
android:pathData="m459.809,167.16 l-4.327,-4.334 -7.07,-2.427c-3.888,-1.335 -8.723,-2.996 -10.744,-3.691l-3.674,-1.263 3.524,-0.173c8.242,-0.404 12.988,-4.007 14.336,-10.884 0.796,-4.061 1.129,-17.298 0.83,-33.041 -0.153,-8.084 -0.166,-15.416 -0.028,-16.295 0.138,-0.878 0.535,-2.42 0.883,-3.426 1.222,-3.532 0.34,-11.908 -1.858,-17.631 -0.348,-0.908 -1.934,-4.215 -3.524,-7.35 -4.158,-8.2 -4.505,-8.942 -4.893,-10.484 -0.459,-1.821 -0.212,-5.435 0.463,-6.766 0.666,-1.315 2.157,-2.916 3.246,-3.487 1.299,-0.68 2.616,0.122 4.686,2.855 3.422,4.516 14.001,19.441 15.732,22.193 3.746,5.956 5.956,11.165 7.972,18.788 0.655,2.475 1.885,6.997 2.735,10.05 0.849,3.053 2.714,10.158 4.144,15.79l2.6,10.24 4.65,5.193c2.557,2.856 5.798,6.464 7.2,8.017 1.403,1.553 2.55,2.975 2.55,3.161 0,0.335 -34.5,29.299 -34.899,29.299 -0.115,0 -2.156,-1.95 -4.535,-4.334zM365.944,150.772c-1.258,-0.628 -2.206,-1.379 -2.914,-2.307 -2.089,-2.736 -1.95,2.369 -1.864,-68.482l0.078,-64.039 0.661,-1.235c1.015,-1.898 1.992,-2.911 3.74,-3.879l1.6,-0.886 37.784,-0.08c42.456,-0.089 39.402,-0.248 42.116,2.192 0.875,0.787 1.757,1.959 2.184,2.904 0.713,1.577 0.716,1.638 0.806,14.204l0.09,12.62 -1.798,-0.13c-1.426,-0.103 -2.081,0.007 -3.166,0.532 -2.013,0.974 -3.94,2.899 -5.115,5.108l-1.037,1.95 -0.007,-12.825 -0.007,-12.825h-33.6,-33.6v51.3,51.3h33.599,33.599l0.076,-34.425c0.073,-32.96 0.098,-34.361 0.591,-32.925 0.283,0.825 1.806,3.997 3.383,7.05 5.493,10.626 5.405,9.86 5.396,47.203 -0.007,27.621 -0.124,29.951 -1.662,33.109 -1.071,2.199 -2.711,3.71 -5.058,4.66l-1.674,0.677 -36.168,0.08 -36.168,0.08 -1.864,-0.931zM408.344,145.734c2.871,-1.309 4.458,-3.678 4.43,-6.617 -0.039,-4.116 -3.109,-7.223 -7.136,-7.223 -2.12,0 -3.567,0.609 -5.164,2.172 -2.245,2.198 -2.754,5.439 -1.301,8.287 0.713,1.398 2.521,3.009 3.962,3.53 1.497,0.542 3.84,0.475 5.209,-0.149z" />
|
||||
<path
|
||||
android:fillColor="?attr/colorControlNormal"
|
||||
android:pathData="m39.434,167.16 l4.327,-4.334 7.07,-2.427c3.888,-1.335 8.723,-2.996 10.744,-3.691l3.674,-1.263 -3.524,-0.173c-8.242,-0.404 -12.988,-4.007 -14.336,-10.884 -0.796,-4.061 -1.129,-17.298 -0.83,-33.041 0.153,-8.084 0.166,-15.416 0.028,-16.295 -0.138,-0.878 -0.535,-2.42 -0.883,-3.426 -1.222,-3.532 -0.34,-11.908 1.858,-17.631 0.348,-0.908 1.934,-4.215 3.524,-7.35 4.158,-8.2 4.505,-8.942 4.893,-10.484 0.459,-1.821 0.212,-5.435 -0.463,-6.766 -0.666,-1.315 -2.157,-2.916 -3.246,-3.487 -1.299,-0.68 -2.616,0.122 -4.686,2.855 -3.422,4.516 -14.001,19.441 -15.732,22.193 -3.746,5.956 -5.956,11.165 -7.972,18.788 -0.655,2.475 -1.885,6.997 -2.735,10.05 -0.849,3.053 -2.714,10.158 -4.144,15.79L14.4,125.824 9.75,131.017c-2.557,2.856 -5.798,6.464 -7.2,8.017 -1.403,1.553 -2.55,2.975 -2.55,3.161 0,0.335 34.5,29.299 34.899,29.299 0.115,0 2.156,-1.95 4.535,-4.334zM133.299,150.772c1.258,-0.628 2.206,-1.379 2.914,-2.307 2.089,-2.736 1.95,2.369 1.864,-68.482l-0.078,-64.039 -0.661,-1.235c-1.015,-1.898 -1.992,-2.911 -3.74,-3.879L132,9.944 94.216,9.865c-42.456,-0.089 -39.402,-0.248 -42.116,2.192 -0.875,0.787 -1.757,1.959 -2.184,2.904 -0.713,1.577 -0.716,1.638 -0.806,14.204l-0.09,12.62 1.798,-0.13c1.426,-0.103 2.081,0.007 3.166,0.532 2.013,0.974 3.94,2.899 5.115,5.108l1.037,1.95 0.007,-12.825 0.007,-12.825h33.6,33.6v51.3,51.3L93.752,126.194 60.153,126.194l-0.076,-34.425c-0.073,-32.96 -0.098,-34.361 -0.591,-32.925 -0.283,0.825 -1.806,3.997 -3.383,7.05 -5.493,10.626 -5.405,9.86 -5.396,47.203 0.007,27.621 0.124,29.951 1.662,33.109 1.071,2.199 2.711,3.71 5.058,4.66l1.674,0.677 36.168,0.08 36.168,0.08 1.864,-0.931zM90.9,145.734c-2.871,-1.309 -4.458,-3.678 -4.43,-6.617 0.039,-4.116 3.109,-7.223 7.136,-7.223 2.12,0 3.567,0.609 5.164,2.172 2.245,2.198 2.754,5.439 1.301,8.287 -0.713,1.398 -2.521,3.009 -3.962,3.53 -1.497,0.542 -3.84,0.475 -5.209,-0.149z" />
|
||||
<path
|
||||
android:fillColor="#0a3d91"
|
||||
android:pathData="m247.254,71.979h4.736c13.165,0 23.763,10.599 23.763,23.763v32.175c0,13.165 -10.599,23.763 -23.763,23.763h-4.736c-13.165,0 -23.763,-10.599 -23.763,-23.763V95.743c0,-13.165 10.599,-23.763 23.763,-23.763z" />
|
||||
<path
|
||||
android:fillColor="#0a3d91"
|
||||
android:pathData="m143.679,23.557c-1.59,2.624 0.182,5.575 2.785,6.643 2.695,1.572 6.171,4.987 9.148,2.232 2.233,-2.04 0.601,-5.728 -2.041,-6.67 -3.064,-1.677 -6.552,-5.515 -9.891,-2.205zM351.705,23.129c-2.768,1.961 -7.068,2.695 -8.378,6.043 -0.642,2.731 1.936,4.993 4.584,4.426 3.202,-1.638 7.057,-2.842 9.178,-5.948 0.569,-2.604 -1.493,-5.351 -4.268,-4.746 -0.416,-0.108 -0.76,0.035 -1.117,0.224zM324.943,36.301c-2.934,1.708 -7.32,1.923 -8.931,5.153 -0.908,2.654 1.432,5.159 4.124,4.861 3.356,-1.304 7.32,-2.113 9.737,-5.002 0.814,-2.538 -0.977,-5.47 -3.796,-5.129 -0.403,-0.146 -0.76,-0.038 -1.133,0.117zM169.707,38.764c-1.219,2.712 0.757,5.461 3.444,6.145 2.858,1.081 6.669,4.118 9.312,1.234 2.315,-2.037 0.339,-5.835 -2.41,-6.418 -3.328,-1.176 -7.385,-4.714 -10.346,-0.961zM296.98,46.381c-3.123,1.309 -7.492,0.971 -9.492,3.97 -1.232,2.519 0.773,5.298 3.48,5.34 3.487,-0.907 7.567,-1.113 10.303,-3.739 1.114,-2.422 -0.312,-5.546 -3.152,-5.551 -0.383,-0.196 -0.75,-0.127 -1.139,-0.02zM199.49,47.926c-2.229,1.462 -2.68,4.866 -0.276,6.377 2.587,1.471 5.915,1.955 8.84,2.495 2.785,0.332 4.746,-2.479 3.891,-5.049 -2.043,-3.28 -6.472,-2.734 -9.717,-4.089 -0.913,0.089 -1.826,0.177 -2.738,0.266zM268.003,52.434c-3.276,0.789 -7.461,-0.188 -9.936,2.382 -1.65,2.268 -0.157,5.354 2.504,5.862 3.612,-0.292 7.718,0.091 10.84,-2.094 1.462,-2.228 0.523,-5.532 -2.285,-5.959 -0.349,-0.249 -0.722,-0.239 -1.123,-0.19zM228.554,53.852c-1.933,1.836 -1.765,5.267 0.871,6.321 2.809,0.989 6.171,0.847 9.144,0.861 2.799,-0.173 4.226,-3.29 2.924,-5.665 -2.604,-2.852 -6.847,-1.542 -10.293,-2.27 -0.882,0.251 -1.764,0.501 -2.646,0.752z" />
|
||||
<path
|
||||
android:fillColor="#ffffff"
|
||||
android:pathData="m252.501,112.09 l11.656,-11.452 -17.126,-19.791 0.019,25.792 -9.142,-9.245 -3.125,3.091 11.521,11.581 -11.498,11.308c3.031,3.056 0,0 3.031,3.056l9.189,-8.973c0.044,4.735 0.004,27.165 0.004,27.165l17.102,-20.773zM251.424,92.519 L258.222,100.383 251.424,107.016zM251.4,132.547 L251.424,117.151 258.317,124.139z" />
|
||||
</vector>
|
||||
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="true"
|
||||
tools:context=".android.contact.connect.BluetoothIntroFragment">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/introImageView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_margin="16dp"
|
||||
app:layout_constraintBottom_toTopOf="@+id/introTextView"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHeight_percent="0.2"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/ic_bluetooth" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/introTextView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="16dp"
|
||||
android:text="@string/connect_via_bluetooth_intro"
|
||||
app:layout_constraintBottom_toTopOf="@+id/startButton"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/introImageView" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/startButton"
|
||||
style="@style/BriarButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="16dp"
|
||||
android:text="@string/start"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</ScrollView>
|
||||
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/introImageView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_margin="16dp"
|
||||
app:layout_constraintBottom_toTopOf="@+id/progressBar"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHeight_percent="0.2"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
app:srcCompat="@drawable/ic_bluetooth" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progressBar"
|
||||
style="?android:attr/progressBarStyleHorizontal"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:indeterminate="true"
|
||||
app:layout_constraintBottom_toTopOf="@+id/textView"
|
||||
app:layout_constraintEnd_toEndOf="@+id/introImageView"
|
||||
app:layout_constraintStart_toStartOf="@+id/introImageView"
|
||||
app:layout_constraintTop_toBottomOf="@+id/introImageView" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="16dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/connect_via_bluetooth_start"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/progressBar" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">مرحبًا بك في Briar (براير)</string>
|
||||
<string name="setup_name_explanation">سيتم إظهار اسمك المستعار بجانب كل ما تنشره من محتوى. لا يمكنك تغيير الاسم بعد إنشاء حسابك.</string>
|
||||
@@ -175,7 +175,7 @@
|
||||
<string name="set_contact_alias">تعديل إسم جهة الاتصال</string>
|
||||
<string name="set_contact_alias_hint">اسم جهة الاتصال</string>
|
||||
<string name="menu_item_connect_via_bluetooth">الإتصال عبر بلوتوث</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">الإتصال عبر بلوتوث</string>
|
||||
<string name="connect_via_bluetooth_title">الإتصال عبر بلوتوث</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Добре дошли в Briar</string>
|
||||
<string name="setup_name_explanation">Прякорът ви ще бъде видим до всяка ваша публикация. Няма да можете да го промените след като създадете профил.</string>
|
||||
@@ -165,14 +165,14 @@
|
||||
<string name="set_contact_alias_hint">Име на контакта</string>
|
||||
<string name="menu_item_disappearing_messages">Изчезващи съобщения</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Свързване чрез Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Свързване чрез Bluetooth</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">За да сработи този метод, контактът трябва да бъде близо до вас.\n\nДвамата трябва да натиснете „Start“ едновременно.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Има започнат опит за връзка чрез Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Не може да продължи без Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Не може да продължи без разрешение за местоположение</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Свързване чрез Bluetooth…</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Успешно свързване чрез Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Не може да се установи връзка чрез Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Свързване чрез Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_intro">За да сработи този метод, контактът трябва да бъде близо до вас.\n\nДвамата трябва да натиснете „Start“ едновременно.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Има започнат опит за връзка чрез Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Не може да продължи без Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Не може да продължи без разрешение за местоположение</string>
|
||||
<string name="connect_via_bluetooth_start">Свързване чрез Bluetooth…</string>
|
||||
<string name="connect_via_bluetooth_success">Успешно свързване чрез Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_error">Не може да се установи връзка чрез Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">Съобщението ще изчезне след %1$s. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Benvingut a Briar</string>
|
||||
<string name="setup_name_explanation">El vostre sobrenom etiquetarà tot el que publiqueu. Després de crear el compte ja no podreu canviar el sobrenom.</string>
|
||||
@@ -165,14 +165,14 @@
|
||||
<string name="set_contact_alias_hint">Nom del contacte</string>
|
||||
<string name="menu_item_disappearing_messages">Missatges fonedissos</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Connecta via bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Connecta via bluetooth</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">El vostre contacte ha de ser a prop per a que vagi bé.\n\nVós i el vostre contacte heu de prémer «Engega» simultàniament.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Ja està mirant de connectar-se amb Bluetooth.</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">No es pot continuar sense Bluetooth.</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">No es pot continuar sense permís per obtenir la posició.</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Connectant-se via Bluetooth...</string>
|
||||
<string name="toast_connect_via_bluetooth_success">S\'ha connectat via Bluetooth.</string>
|
||||
<string name="toast_connect_via_bluetooth_error">No ha pogut connectar-se amb Bluetooth.</string>
|
||||
<string name="connect_via_bluetooth_title">Connecta via bluetooth</string>
|
||||
<string name="connect_via_bluetooth_intro">El vostre contacte ha de ser a prop per a que vagi bé.\n\nVós i el vostre contacte heu de prémer «Engega» simultàniament.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Ja està mirant de connectar-se amb Bluetooth.</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">No es pot continuar sense Bluetooth.</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">No es pot continuar sense permís per obtenir la posició.</string>
|
||||
<string name="connect_via_bluetooth_start">Connectant-se via Bluetooth...</string>
|
||||
<string name="connect_via_bluetooth_success">S\'ha connectat via Bluetooth.</string>
|
||||
<string name="connect_via_bluetooth_error">No ha pogut connectar-se amb Bluetooth.</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">Els vostres missatges es faran fonedissos en %1$s. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Willkommen bei Briar</string>
|
||||
<string name="setup_name_explanation">Dein Benutzername wird neben deinem geposteten Inhalt angezeigt. Du kannst diesen nicht mehr ändern, nachdem du dein Konto erstellt hast.</string>
|
||||
@@ -165,14 +165,14 @@
|
||||
<string name="set_contact_alias_hint">Name des Kontakts</string>
|
||||
<string name="menu_item_disappearing_messages">Selbstlöschende Nachrichten</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Über Bluetooth verbinden</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Über Bluetooth verbinden</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">Dein Kontakt muss in der Nähe sein, damit dies funktioniert.\n\nDu und dein Kontakt sollten beide gleichzeitig \"Start\" drücken.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Versucht bereits, eine Verbindung über Bluetooth herzustellen</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Kann ohne Bluetooth nicht fortgesetzt werden</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Kann ohne Standortberechtigung nicht fortgesetzt werden</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Verbinde über Bluetooth…</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Erfolgsreich über Bluetooth verbunden</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Konnte keine Verbindung über Bluetooth herstellen</string>
|
||||
<string name="connect_via_bluetooth_title">Über Bluetooth verbinden</string>
|
||||
<string name="connect_via_bluetooth_intro">Dein Kontakt muss in der Nähe sein, damit dies funktioniert.\n\nDu und dein Kontakt sollten beide gleichzeitig \"Start\" drücken.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Versucht bereits, eine Verbindung über Bluetooth herzustellen</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Kann ohne Bluetooth nicht fortgesetzt werden</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Kann ohne Standortberechtigung nicht fortgesetzt werden</string>
|
||||
<string name="connect_via_bluetooth_start">Verbinde über Bluetooth…</string>
|
||||
<string name="connect_via_bluetooth_success">Erfolgsreich über Bluetooth verbunden</string>
|
||||
<string name="connect_via_bluetooth_error">Konnte keine Verbindung über Bluetooth herstellen</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">Deine Nachrichten werden nach %1$sgelöscht. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Bienvenido a Briar</string>
|
||||
<string name="setup_name_explanation">Tu nombre de usuario aparecerá junto a cualquier contenido que publiques. No puedes cambiarlo después de crear tu cuenta.</string>
|
||||
@@ -165,14 +165,14 @@
|
||||
<string name="set_contact_alias_hint">Nombre del contacto</string>
|
||||
<string name="menu_item_disappearing_messages">Mensajes con caducidad</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Conectar mediante Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Conectar mediante Bluetooth</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">Tu contacto necesita estar cerca para que esto funcione.\n\nTú y tu contacto deberían presionar \"Iniciar\" ambos al mismo tiempo.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Ya se está intentando conectar mediante Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">No se puede continuar sin Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">No se puede continuar sin permiso de ubicación</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Conectar mediante Bluetooth...</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Conectado exitosamente mediante Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_error">No se pudo conectar mediante Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Conectar mediante Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_intro">Tu contacto necesita estar cerca para que esto funcione.\n\nTú y tu contacto deberían presionar \"Iniciar\" ambos al mismo tiempo.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Ya se está intentando conectar mediante Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">No se puede continuar sin Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">No se puede continuar sin permiso de ubicación</string>
|
||||
<string name="connect_via_bluetooth_start">Conectar mediante Bluetooth...</string>
|
||||
<string name="connect_via_bluetooth_success">Conectado exitosamente mediante Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_error">No se pudo conectar mediante Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">Tus mensajes desaparecerán después de %1$s. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Ongi etorri Briar-era</string>
|
||||
<string name="setup_name_explanation">Zure ezizena argitaratzen dituzun eduki guztien ondoan agertuko da. Ezingo duzu aldatu, kontua sortu eta gero.</string>
|
||||
@@ -130,7 +130,7 @@
|
||||
<string name="set_contact_alias">Aldatu kontaktuaren izena</string>
|
||||
<string name="set_contact_alias_hint">Kontaktuaren izena</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Konektatu Bluetooth bidez</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Konektatu Bluetooth bidez</string>
|
||||
<string name="connect_via_bluetooth_title">Konektatu Bluetooth bidez</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">به Briar (برایر) خوش آمدید</string>
|
||||
<string name="setup_name_explanation">نام مستعار شما کنار هر مطلبی که پست کنید قرار خواهد گرفت. بعد از ایجاد حساب کاربری امکان تغییر آن وجود ندارد.</string>
|
||||
@@ -171,14 +171,14 @@
|
||||
<string name="set_contact_alias_hint">نام مخاطب</string>
|
||||
<string name="menu_item_disappearing_messages">پیامهای ناپدید شونده</string>
|
||||
<string name="menu_item_connect_via_bluetooth">اتصال از طریق بلوتوث</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">اتصال از طریق بلوتوث</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">برای امکان این عملکرد، مخاطب شما باید نزدیک باشد. \n\n شما و مخاطبتان باید همزمان گزینهی \"شروع\" را بفشارید.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">در حال تلاش برای اتصال از طریق بلوتوث</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">امکان ادامه بدون بلوتوث وجود ندارد</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">امکان ادامه بدون اجازه مکانیابی وجود ندارد</string>
|
||||
<string name="toast_connect_via_bluetooth_start">در حال اتصال از طریق بلوتوث</string>
|
||||
<string name="toast_connect_via_bluetooth_success">ارتباط از طریق بلوتوث با موفقیت انجام شد</string>
|
||||
<string name="toast_connect_via_bluetooth_error">اتصال از طریق بلوتوث برقرار نشد</string>
|
||||
<string name="connect_via_bluetooth_title">اتصال از طریق بلوتوث</string>
|
||||
<string name="connect_via_bluetooth_intro">برای امکان این عملکرد، مخاطب شما باید نزدیک باشد. \n\n شما و مخاطبتان باید همزمان گزینهی \"شروع\" را بفشارید.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">در حال تلاش برای اتصال از طریق بلوتوث</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">امکان ادامه بدون بلوتوث وجود ندارد</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">امکان ادامه بدون اجازه مکانیابی وجود ندارد</string>
|
||||
<string name="connect_via_bluetooth_start">در حال اتصال از طریق بلوتوث</string>
|
||||
<string name="connect_via_bluetooth_success">ارتباط از طریق بلوتوث با موفقیت انجام شد</string>
|
||||
<string name="connect_via_bluetooth_error">اتصال از طریق بلوتوث برقرار نشد</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">پیام شما پس از %1$s ناپدید خواهد شد. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Bienvenue à Briar</string>
|
||||
<string name="setup_name_explanation">Votre pseudonyme sera affiché à côté de tout contenu que vous publierez. Vous pourrez le modifier après avoir créé votre compte.</string>
|
||||
@@ -165,14 +165,14 @@
|
||||
<string name="set_contact_alias_hint">Nom du contact</string>
|
||||
<string name="menu_item_disappearing_messages">Messages éphémères</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Se connecter par Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Se connecter par Bluetooth</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">Afin que cela fonctionne, votre contact doit être à proximité.\n\nVotre contact et vous devriez appuyer ensemble sur « Commencer ».</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Tentative de connexion par Bluetooth déjà en cours</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Impossible de poursuivre sans le Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Impossible de poursuivre sans la permission de position</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Connexion par Bluetooth…</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Connectée par Bluetooth avec succès</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Impossible de se connecter par Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Se connecter par Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_intro">Afin que cela fonctionne, votre contact doit être à proximité.\n\nVotre contact et vous devriez appuyer ensemble sur « Commencer ».</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Tentative de connexion par Bluetooth déjà en cours</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Impossible de poursuivre sans le Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Impossible de poursuivre sans la permission de position</string>
|
||||
<string name="connect_via_bluetooth_start">Connexion par Bluetooth…</string>
|
||||
<string name="connect_via_bluetooth_success">Connectée par Bluetooth avec succès</string>
|
||||
<string name="connect_via_bluetooth_error">Impossible de se connecter par Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">Vos messages disparaîtront après %1$s. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Benvida a Briar</string>
|
||||
<string name="setup_name_explanation">O teu alcume mostrarase xunto a todas as mensaxes que publiques. Podes cambialo tras crear a túa conta.</string>
|
||||
@@ -158,13 +158,13 @@
|
||||
<string name="set_contact_alias_hint">Nome do contacto</string>
|
||||
<string name="menu_item_disappearing_messages">Mensaxes efémeras</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Conectar vía Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Conectar vía Bluetooth</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">O teu contacto ten que estar preto para que isto funcione.\n\nTi e o teu contacto tedes que premer en \"Iniciar\" ao mesmo tempo.</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Non se pode continuar sen o Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Non se pode continuar sen o permiso de localización</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Conectando vía Bluetooth...</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Conectouse correctamente vía Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Non se puido conectar vía Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Conectar vía Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_intro">O teu contacto ten que estar preto para que isto funcione.\n\nTi e o teu contacto tedes que premer en \"Iniciar\" ao mesmo tempo.</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Non se pode continuar sen o Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Non se pode continuar sen o permiso de localización</string>
|
||||
<string name="connect_via_bluetooth_start">Conectando vía Bluetooth...</string>
|
||||
<string name="connect_via_bluetooth_success">Conectouse correctamente vía Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_error">Non se puido conectar vía Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">As túas mensaxes desaparecerán após %1$s . %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">ברוך בואך אל Briar</string>
|
||||
<string name="setup_name_explanation">כינויך יוראה ליד תוכן כלשהו שתכתוב. אינך יכול לשנות אותו לאחר יצירת חשבונך.</string>
|
||||
@@ -165,7 +165,7 @@
|
||||
<string name="set_contact_alias">שַׁנֵּה שם איש קשר</string>
|
||||
<string name="set_contact_alias_hint">שם איש הקשר</string>
|
||||
<string name="menu_item_connect_via_bluetooth">התחבר באמצעות שן כחולה</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">התחבר באמצעות שן כחולה</string>
|
||||
<string name="connect_via_bluetooth_title">התחבר באמצעות שן כחולה</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Briar में आपका स्वागत है</string>
|
||||
<string name="setup_name_explanation">आपके उपनाम आप पोस्ट किसी भी सामग्री के बगल में दिखाया जाएगा। आप अपना खाता बनाने के बाद इसे बदल नहीं सकते</string>
|
||||
@@ -124,7 +124,7 @@
|
||||
<string name="set_contact_alias">संपर्क नाम बदलें</string>
|
||||
<string name="set_contact_alias_hint">संपर्क नाम</string>
|
||||
<string name="menu_item_connect_via_bluetooth">ब्लूटूथ के माध्यम से कनेक्ट करें</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">ब्लूटूथ के माध्यम से कनेक्ट करें</string>
|
||||
<string name="connect_via_bluetooth_title">ब्लूटूथ के माध्यम से कनेक्ट करें</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Köszöntjük a Briar-ban</string>
|
||||
<string name="setup_name_explanation">A beceneve fog megjelenni minden tartalom mellett amit Ön osztott meg. Nem tudja megváltoztatni a fiók létrehozása után.</string>
|
||||
@@ -165,14 +165,14 @@
|
||||
<string name="set_contact_alias_hint">Kapcsolat neve</string>
|
||||
<string name="menu_item_disappearing_messages">Eltűnő üzenetek</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Csatlakozás bluetooth-on keresztül</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Csatlakozás bluetooth-on keresztül</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">A kapcsolatai közel kell legyenek, hogy ez működjön.\n\n Ön és a kapcsolata egyaránt meg kell nyomja a \"Start\" gombot egyidőben.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Már próbálkozik csatlakozni Bluetooth-on</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Nem folytatható Bluetooth nélkül</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Nem folytatható hely engedélyek nélkül</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Csatlakozás Bluetooth-on...</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Sikeres csatlakozás Bluetooth-on.</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Nem sikerült csatlakozni Bluetooth-on</string>
|
||||
<string name="connect_via_bluetooth_title">Csatlakozás bluetooth-on keresztül</string>
|
||||
<string name="connect_via_bluetooth_intro">A kapcsolatai közel kell legyenek, hogy ez működjön.\n\n Ön és a kapcsolata egyaránt meg kell nyomja a \"Start\" gombot egyidőben.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Már próbálkozik csatlakozni Bluetooth-on</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Nem folytatható Bluetooth nélkül</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Nem folytatható hely engedélyek nélkül</string>
|
||||
<string name="connect_via_bluetooth_start">Csatlakozás Bluetooth-on...</string>
|
||||
<string name="connect_via_bluetooth_success">Sikeres csatlakozás Bluetooth-on.</string>
|
||||
<string name="connect_via_bluetooth_error">Nem sikerült csatlakozni Bluetooth-on</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">Az üzenetei eltűnnek %1$s. %2$s múlva</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Velkomin í Briar</string>
|
||||
<string name="setup_name_explanation">Stuttnefnið þitt birtist við hlið alls þess efnis sem þú sendir inn. Þú getur ekki breytt því eftir að þú hefur skráð notandaaðganginn þinn.</string>
|
||||
@@ -161,14 +161,14 @@
|
||||
<string name="set_contact_alias_hint">Nafn tengiliðar</string>
|
||||
<string name="menu_item_disappearing_messages">Sjálfeyðandi skilaboð</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Tengjast í gegnum Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Tengjast í gegnum Bluetooth</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">Tengiliðurinn þinn þarf að vera nálægt til að þetta virki.\n\nÞú og tengiliðurinn ættuð bæði að ýta á \"Byrja\" á sama tíma.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Þegar að reyna að tengjast í gegnum Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Get ekki haldið áfram án Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Get ekki haldið áfram án heimildar til að nota staðsetningu</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Tengist í gegnum Bluetooth…</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Tókst að tengjast í gegnum Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Gat ekki tengst í gegnum Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Tengjast í gegnum Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_intro">Tengiliðurinn þinn þarf að vera nálægt til að þetta virki.\n\nÞú og tengiliðurinn ættuð bæði að ýta á \"Byrja\" á sama tíma.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Þegar að reyna að tengjast í gegnum Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Get ekki haldið áfram án Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Get ekki haldið áfram án heimildar til að nota staðsetningu</string>
|
||||
<string name="connect_via_bluetooth_start">Tengist í gegnum Bluetooth…</string>
|
||||
<string name="connect_via_bluetooth_success">Tókst að tengjast í gegnum Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_error">Gat ekki tengst í gegnum Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">Skilaboðin þín munu hverfa eftir %1$s. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Benvenuto su Briar</string>
|
||||
<string name="setup_name_explanation">Il tuo nickname sarà accanto ad ogni contenuto pubblicato. Non potrai cambiarlo dopo aver creato l\'account.</string>
|
||||
@@ -165,14 +165,14 @@
|
||||
<string name="set_contact_alias_hint">Nome contatto</string>
|
||||
<string name="menu_item_disappearing_messages">Messaggi dissolventi</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Connessione attraverso Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Connessione attraverso Bluetooth</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">Per funzionare, il tuo contatto deve essere nelle vicinanze.\n\nDovreste entrambi premere \"Inizia\" nello stesso momento.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Si sta già tentanto di connettersi via Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Impossibile continuare senza Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Impossibile continuare senza l\'autorizzazione per la geolocalizzazione</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Connessione via Bluetooth…</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Connessione via Bluetooth riuscita</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Connessione via Bluetooth fallita</string>
|
||||
<string name="connect_via_bluetooth_title">Connessione attraverso Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_intro">Per funzionare, il tuo contatto deve essere nelle vicinanze.\n\nDovreste entrambi premere \"Inizia\" nello stesso momento.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Si sta già tentanto di connettersi via Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Impossibile continuare senza Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Impossibile continuare senza l\'autorizzazione per la geolocalizzazione</string>
|
||||
<string name="connect_via_bluetooth_start">Connessione via Bluetooth…</string>
|
||||
<string name="connect_via_bluetooth_success">Connessione via Bluetooth riuscita</string>
|
||||
<string name="connect_via_bluetooth_error">Connessione via Bluetooth fallita</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">I tuoi messaggi spariranno dopo %1$s. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Briarへようこそ</string>
|
||||
<string name="setup_name_explanation">あなたのニックネームは、常に、あなたが投稿するコンテンツとともに表示されます。プロフィール作成後、編集はできません。</string>
|
||||
@@ -154,14 +154,14 @@
|
||||
<string name="set_contact_alias_hint">連絡先名</string>
|
||||
<string name="menu_item_disappearing_messages">消えたメッセージ</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Bluetooth経由で接続する</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Bluetooth経由で接続する</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">この機能を利用するには、あなたの連絡先が近くにある必要があります。\n\nあなたとあなたの連絡先が同時に\"開始\"を押してください。</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Bluetooth経由の接続を既に試行中です</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Bluetoothなくして続行不可能</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">位置情報の権限なくして続行不可能</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Bluetooth経由で接続中…</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Bluetooth経由で接続に成功</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Bluetooth経由で接続不可能</string>
|
||||
<string name="connect_via_bluetooth_title">Bluetooth経由で接続する</string>
|
||||
<string name="connect_via_bluetooth_intro">この機能を利用するには、あなたの連絡先が近くにある必要があります。\n\nあなたとあなたの連絡先が同時に\"開始\"を押してください。</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Bluetooth経由の接続を既に試行中です</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Bluetoothなくして続行不可能</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">位置情報の権限なくして続行不可能</string>
|
||||
<string name="connect_via_bluetooth_start">Bluetooth経由で接続中…</string>
|
||||
<string name="connect_via_bluetooth_success">Bluetooth経由で接続に成功</string>
|
||||
<string name="connect_via_bluetooth_error">Bluetooth経由で接続不可能</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Briar에 오신 것을 환영합니다</string>
|
||||
<string name="setup_name_explanation">별명은 게시한 모든 컨텐츠 옆에 보여지게 됩니다. 별명은 계정을 만든 후에는 바꿀 수 없습니다.</string>
|
||||
@@ -150,7 +150,7 @@
|
||||
<string name="set_contact_alias">연락처 이름 바꾸기</string>
|
||||
<string name="set_contact_alias_hint">연락처 이름</string>
|
||||
<string name="menu_item_connect_via_bluetooth">블루투스로 연결하기</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">블루투스로 연결하기</string>
|
||||
<string name="connect_via_bluetooth_title">블루투스로 연결하기</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Sveiki atvykę į Briar</string>
|
||||
<string name="setup_name_explanation">Jūsų slapyvardis bus rodomas šalia bet kokio jūsų skelbiamo turinio. Sukūrę paskyrą, slapyvardžio pakeisti nebegalėsite.</string>
|
||||
@@ -175,14 +175,14 @@
|
||||
<string name="set_contact_alias_hint">Adresato vardas</string>
|
||||
<string name="menu_item_disappearing_messages">Išnykstančios žinutės</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Prisijungti per Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Prisijungti per Bluetooth</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">Norint, kad tai suveiktų, jūsų adresatas privalo būti šalia jūsų.\n\nJūs ir jūsų adresatas abu vienu metu turėtumėte paspausti „Pradėti“.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Jau bandoma prisijungti per Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Nepavyksta tęsti be Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Nepavyksta tęsti be įrenginio vietovės leidimo</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Jungiamasi per Bluetooth…</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Sėkmingai prisijungta per Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Nepavyko prisijungti per Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Prisijungti per Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_intro">Norint, kad tai suveiktų, jūsų adresatas privalo būti šalia jūsų.\n\nJūs ir jūsų adresatas abu vienu metu turėtumėte paspausti „Pradėti“.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Jau bandoma prisijungti per Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Nepavyksta tęsti be Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Nepavyksta tęsti be įrenginio vietovės leidimo</string>
|
||||
<string name="connect_via_bluetooth_start">Jungiamasi per Bluetooth…</string>
|
||||
<string name="connect_via_bluetooth_success">Sėkmingai prisijungta per Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_error">Nepavyko prisijungti per Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">Jūsų žinutės išnyks po %1$s. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Добредојде во Briar</string>
|
||||
<string name="setup_name_explanation">Вашето корисничко име ќе се појави до секоја содржина која ќе ја објавите. Истото не можете да го промените откога ќе ја креирате вашата сметка.</string>
|
||||
@@ -154,7 +154,7 @@
|
||||
<string name="set_contact_alias">Промена на име на контакт</string>
|
||||
<string name="set_contact_alias_hint">Име на контакт</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Поврзи се преку Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Поврзи се преку Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Поврзи се преку Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Briar မှ ကြိုဆိုပါသည်</string>
|
||||
<string name="setup_name_explanation">သင့်နာမည်ပြောင်သည် သင်တင်ထားသမျှအရာ၏ဘေးတွင် ပေါ်နေပါလိမ့်မည်။ သို့ပါ၍ သင့်နာမည်ပြောင်အား အကောင့်ဖွင့်ပြီးနောက် ပြောင်း၍မရတော့ပါ။</string>
|
||||
@@ -160,14 +160,14 @@
|
||||
<string name="set_contact_alias_hint">အဆက်အသွယ်အမည်</string>
|
||||
<string name="menu_item_disappearing_messages">ပျောက်ကွယ် မက်ဆေ့ချ်များ</string>
|
||||
<string name="menu_item_connect_via_bluetooth">ဘလူးတုသ် နှင့် ချိတ်မယ်</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">ဘလူးတုသ် နှင့် ချိတ်မယ်</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">လုပ်ဆောင်ချက် အောင်မြင်နိုင်ရန် သင်၏ အဆက်အသွယ်သည် အနီးအနားတွင်ရှိရပါမည်။ \n\n သင် နှင့် သင်၏ အဆက်အသွယ် နှစ်ဦးစလုံးသည် \"စတင်ရန်\" ကို တစ်ပြိုင်တည်း နှိပ်ရပါမည်။</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">ဘလူးတုသ် နှင့် ချိတ်ဆက်ရန် ကြိုးစားနေပါသည်</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">ဘလူးတုသ် မပါဘဲ ဆက်လက်မလုပ်ဆောင်နိုင်ပါ</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">တည်နေရာသုံးခွင့် မပါဘဲ ဆက်လက်မလုပ်ဆောင်နိုင်ပါ</string>
|
||||
<string name="toast_connect_via_bluetooth_start">ဘလူးတုသ် နှင့် ချိတ်ဆက်နေသည်...</string>
|
||||
<string name="toast_connect_via_bluetooth_success">ဘလူးတုသ် နှင့် အောင်မြင်စွာ ချိတ်ဆက်ပြီး</string>
|
||||
<string name="toast_connect_via_bluetooth_error">ဘလူးတုသ် နှင့် ချိတ်ဆက်၍မရပါ</string>
|
||||
<string name="connect_via_bluetooth_title">ဘလူးတုသ် နှင့် ချိတ်မယ်</string>
|
||||
<string name="connect_via_bluetooth_intro">လုပ်ဆောင်ချက် အောင်မြင်နိုင်ရန် သင်၏ အဆက်အသွယ်သည် အနီးအနားတွင်ရှိရပါမည်။ \n\n သင် နှင့် သင်၏ အဆက်အသွယ် နှစ်ဦးစလုံးသည် \"စတင်ရန်\" ကို တစ်ပြိုင်တည်း နှိပ်ရပါမည်။</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">ဘလူးတုသ် နှင့် ချိတ်ဆက်ရန် ကြိုးစားနေပါသည်</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">ဘလူးတုသ် မပါဘဲ ဆက်လက်မလုပ်ဆောင်နိုင်ပါ</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">တည်နေရာသုံးခွင့် မပါဘဲ ဆက်လက်မလုပ်ဆောင်နိုင်ပါ</string>
|
||||
<string name="connect_via_bluetooth_start">ဘလူးတုသ် နှင့် ချိတ်ဆက်နေသည်...</string>
|
||||
<string name="connect_via_bluetooth_success">ဘလူးတုသ် နှင့် အောင်မြင်စွာ ချိတ်ဆက်ပြီး</string>
|
||||
<string name="connect_via_bluetooth_error">ဘလူးတုသ် နှင့် ချိတ်ဆက်၍မရပါ</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">သင်၏မက်ဆေ့ချ်များသည် %1$s အကြာတွင် ပျောက်ကွယ်သွားပါမည်။ %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Welkom bij Briar</string>
|
||||
<string name="setup_name_explanation">Je bijnaam wordt getoond bij alle content die je post. Nadat je account is aangemaakt is het niet mogelijk je bijnaam te wijzigen.</string>
|
||||
@@ -155,7 +155,7 @@
|
||||
<string name="set_contact_alias">Verander naam van contact</string>
|
||||
<string name="set_contact_alias_hint">Contactnaam</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Verbind via Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Verbind via Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Verbind via Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">La benvenguda a Briar</string>
|
||||
<string name="setup_name_explanation">Vòstre escais-nom serà mostrat al costat de cada de vòstra publicacion. Poiretz pas lo cambiar aprèp la creacion del compte.</string>
|
||||
@@ -130,7 +130,7 @@ Volètz suprimir vòstre compte e ne crear un nòu ?\n
|
||||
<string name="set_contact_alias">Cambiar lo nom del contacte</string>
|
||||
<string name="set_contact_alias_hint">Nom del contacte</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Se connectar per Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Se connectar per Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Se connectar per Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Witaj w Briar</string>
|
||||
<string name="setup_name_explanation">Twoja nazwa użytkownika będzie wyświetlana przy każdej zamieszczonej przez Ciebie treści. Nie można jej zmienić po tworzeniu konta.</string>
|
||||
@@ -145,7 +145,7 @@
|
||||
<string name="set_contact_alias_hint">Nazwa kontaktu</string>
|
||||
<string name="menu_item_disappearing_messages">Znikające wiadomości</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Połącz przez Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Połącz przez Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Połącz przez Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Boas-vindas ao Briar</string>
|
||||
<string name="setup_name_explanation">Seu nome de usuária será mostrado próximo a qualquer conteúdo que você publicar. Você não pode mudá-lo depois que criar sua conta,</string>
|
||||
@@ -155,7 +155,7 @@
|
||||
<string name="set_contact_alias">Alterar nome do contato</string>
|
||||
<string name="set_contact_alias_hint">Nome de contato</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Conectar via Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Conectar via Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Conectar via Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Bine ați venit la Briar</string>
|
||||
<string name="setup_name_explanation">Numele dumneavoastră va fi afișat lângă orice conținut trimis. Nu îl veți putea schimba după crearea contului.</string>
|
||||
@@ -162,7 +162,7 @@
|
||||
<string name="set_contact_alias_hint">Nume contact</string>
|
||||
<string name="menu_item_disappearing_messages">Mesaje ce dispar</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Conectare prin Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Conectare prin Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Conectare prin Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Добро пожаловать в Briar</string>
|
||||
<string name="setup_name_explanation">Ваш псевдоним будет отображаться рядом с любым размещаемым вами контентом. Его нельзя изменить после создания аккаунта.</string>
|
||||
@@ -177,14 +177,14 @@
|
||||
<string name="set_contact_alias_hint">Имя контакта</string>
|
||||
<string name="menu_item_disappearing_messages">Исчезающие сообщения</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Подключение через Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Подключение через Bluetooth</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">Чтобы это сработало, ваш контакт должен находиться поблизости.\n\nВы и ваш собеседник должны одновременно нажать кнопку \"Начать\".</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Пробуем подключиться через Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Невозможно продолжить без Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Невозможно продолжить без доступа к местоположению</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Подключение через Bluetooth...</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Успешное подключение через Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Не удалось подключиться через Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Подключение через Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_intro">Чтобы это сработало, ваш контакт должен находиться поблизости.\n\nВы и ваш собеседник должны одновременно нажать кнопку \"Начать\".</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Пробуем подключиться через Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Невозможно продолжить без Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Невозможно продолжить без доступа к местоположению</string>
|
||||
<string name="connect_via_bluetooth_start">Подключение через Bluetooth...</string>
|
||||
<string name="connect_via_bluetooth_success">Успешное подключение через Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_error">Не удалось подключиться через Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">Ваши сообщения исчезнут спустя %1$s. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Mirë se vini në Briar</string>
|
||||
<string name="setup_name_explanation">Nofka juaj do të shfaqet në krah të çfarëdo gjëje që postoni. S\’mund ta ndryshoni më, pas krijimit të llogarisë tuaj.</string>
|
||||
@@ -166,14 +166,14 @@ këmbyes aplikacionesh)\n\n2. Shtypni dhe mbajeni të shtypur figurën e Briar-i
|
||||
<string name="set_contact_alias_hint">Emër kontakti</string>
|
||||
<string name="menu_item_disappearing_messages">Mesazhe që treten</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Lidhu përmes Bluetooth-i</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Lidhu përmes Bluetooth-i</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">Është e nevojshme që kontakti juaj të jetë atypari, që kjo të funksionojë.\n\nJu dhe kontakti juaj duhet që të shtypin “Fillo” në të njëjtën kohë.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Po provohet tashmë të lidhet përmes Bluetooth-i</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">S’mund të vazhdohet pa Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">S’mund të vazhdohet pa leje vendore</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Po lidhet me Bluetooth…</string>
|
||||
<string name="toast_connect_via_bluetooth_success">U lidh me sukses përmes Bluetooth-i</string>
|
||||
<string name="toast_connect_via_bluetooth_error">S’u lidh dot përmes Bluetooth-i</string>
|
||||
<string name="connect_via_bluetooth_title">Lidhu përmes Bluetooth-i</string>
|
||||
<string name="connect_via_bluetooth_intro">Është e nevojshme që kontakti juaj të jetë atypari, që kjo të funksionojë.\n\nJu dhe kontakti juaj duhet që të shtypin “Fillo” në të njëjtën kohë.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Po provohet tashmë të lidhet përmes Bluetooth-i</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">S’mund të vazhdohet pa Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">S’mund të vazhdohet pa leje vendore</string>
|
||||
<string name="connect_via_bluetooth_start">Po lidhet me Bluetooth…</string>
|
||||
<string name="connect_via_bluetooth_success">U lidh me sukses përmes Bluetooth-i</string>
|
||||
<string name="connect_via_bluetooth_error">S’u lidh dot përmes Bluetooth-i</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">Mesazhet tuaja do të treten pas %1$s. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Välkommen till Briar</string>
|
||||
<string name="setup_name_explanation">Ditt användarnamn kommer att visas bredvid allt innehåll som du lägger upp. Du kan inte ändra ditt användarnamn efter att ditt konto skapats.</string>
|
||||
@@ -155,7 +155,7 @@
|
||||
<string name="set_contact_alias">Ändra namn på kontakt</string>
|
||||
<string name="set_contact_alias_hint">Kontaktnamn</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Anslut via Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Anslut via Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Anslut via Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Karibu kwenye Briar</string>
|
||||
<string name="setup_name_explanation">lakabu lako litaonekana kwenye kila chapisho lako . Na hutaweza badilisha baada ya kuteneneza akaunti yako .</string>
|
||||
@@ -146,7 +146,7 @@ Umepoteza nenosiri.</string>
|
||||
<string name="set_contact_alias">Badilisha jina lako la mawasiliano </string>
|
||||
<string name="set_contact_alias_hint">Jina la mawasiliano </string>
|
||||
<string name="menu_item_connect_via_bluetooth">Unganisha kwa Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Unganisha kwa Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Unganisha kwa Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Briar\'a Hoşgeldiniz</string>
|
||||
<string name="setup_name_explanation">Takma adınız, gönderdiğiniz herhangi bir içeriğin yanında gösterilecek. Hesabınızı oluşturduktan sonra onu değiştiremezsiniz.</string>
|
||||
@@ -165,14 +165,14 @@
|
||||
<string name="set_contact_alias_hint">Ad</string>
|
||||
<string name="menu_item_disappearing_messages">Kaybolan iletiler</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Bluetooth ile Bağlan</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Bluetooth ile Bağlan</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">Bunun çalışması için kişinin yakınlarda olması gerekiyor.\n\nSizin ve kişinin \"Başlat\" düğmesine aynı anda basması gerekiyor.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Zaten Bluetooth\'a bağlanmaya çalışıyor</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Bluetooth olmadan devam edilemez</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Konum izni olmadan devam edilemez</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Bluetooth ile bağlanılıyor…</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Bluetooth ile başarılı bir şekilde bağlandı</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Bluetooth ile bağlanamıyor</string>
|
||||
<string name="connect_via_bluetooth_title">Bluetooth ile Bağlan</string>
|
||||
<string name="connect_via_bluetooth_intro">Bunun çalışması için kişinin yakınlarda olması gerekiyor.\n\nSizin ve kişinin \"Başlat\" düğmesine aynı anda basması gerekiyor.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Zaten Bluetooth\'a bağlanmaya çalışıyor</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">Bluetooth olmadan devam edilemez</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Konum izni olmadan devam edilemez</string>
|
||||
<string name="connect_via_bluetooth_start">Bluetooth ile bağlanılıyor…</string>
|
||||
<string name="connect_via_bluetooth_success">Bluetooth ile başarılı bir şekilde bağlandı</string>
|
||||
<string name="connect_via_bluetooth_error">Bluetooth ile bağlanamıyor</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">İletileriniz %1$s sonra kaybolacak. %2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">Вітаємо у Briar</string>
|
||||
<string name="setup_name_explanation">Ваше ім\'я користувача буде відображено біля будь-якого матеріалу, який ви опублікуєте. Ви не зможете змінити його після створення облікового запису.</string>
|
||||
@@ -135,7 +135,7 @@
|
||||
<string name="set_contact_alias">Змінити ім\'я контакту</string>
|
||||
<string name="set_contact_alias_hint">Назва контакту</string>
|
||||
<string name="menu_item_connect_via_bluetooth">З\'єднатися через Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">З\'єднатися через Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">З\'єднатися через Bluetooth</string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
<!--The first placeholder will show a contact's name. The second placeholder will show a duration like "7 days". The third placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<!--Setup-->
|
||||
<string name="setup_title">欢迎来到 Briar</string>
|
||||
<string name="setup_name_explanation">您的昵称将被显示在您发布的任何内容旁边。昵称在创建帐户后无法更改。</string>
|
||||
@@ -160,14 +160,14 @@
|
||||
<string name="set_contact_alias_hint">联系人姓名</string>
|
||||
<string name="menu_item_disappearing_messages">让消息自动消失 </string>
|
||||
<string name="menu_item_connect_via_bluetooth">通过蓝牙连接</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">通过蓝牙连接</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">你的联络人必须在附近才能起作用。\n\n你和你的联系人应该同时按“开始”。</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">已在尝试通过蓝牙进行连接</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">没有蓝牙无法继续 </string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">没有位置权限不能继续 </string>
|
||||
<string name="toast_connect_via_bluetooth_start">正通过蓝牙连接 …</string>
|
||||
<string name="toast_connect_via_bluetooth_success">通过蓝牙连接成功</string>
|
||||
<string name="toast_connect_via_bluetooth_error">无法通过蓝牙连接 </string>
|
||||
<string name="connect_via_bluetooth_title">通过蓝牙连接</string>
|
||||
<string name="connect_via_bluetooth_intro">你的联络人必须在附近才能起作用。\n\n你和你的联系人应该同时按“开始”。</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">已在尝试通过蓝牙进行连接</string>
|
||||
<string name="connect_via_bluetooth_not_discoverable">没有蓝牙无法继续 </string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">没有位置权限不能继续 </string>
|
||||
<string name="connect_via_bluetooth_start">正通过蓝牙连接 …</string>
|
||||
<string name="connect_via_bluetooth_success">通过蓝牙连接成功</string>
|
||||
<string name="connect_via_bluetooth_error">无法通过蓝牙连接 </string>
|
||||
<!--The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more."-->
|
||||
<string name="auto_delete_msg_you_enabled">你的消息将在 %1$s 后消失。%2$s</string>
|
||||
<!--The placeholder at the end will add "Tap to learn more."-->
|
||||
|
||||
@@ -178,15 +178,6 @@
|
||||
<string name="set_contact_alias">Change contact name</string>
|
||||
<string name="set_contact_alias_hint">Contact name</string>
|
||||
<string name="menu_item_disappearing_messages">Disappearing messages</string>
|
||||
<string name="menu_item_connect_via_bluetooth">Connect via Bluetooth</string>
|
||||
<string name="dialog_title_connect_via_bluetooth">Connect via Bluetooth</string>
|
||||
<string name="dialog_message_connect_via_bluetooth">Your contact needs to be nearby for this to work.\n\nYou and your contact should both press \"Start\" at the same time.</string>
|
||||
<string name="toast_connect_via_bluetooth_already_discovering">Already trying to connect via Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_not_discoverable">Cannot continue without Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_no_location_permission">Cannot continue without location permission</string>
|
||||
<string name="toast_connect_via_bluetooth_start">Connecting via Bluetooth…</string>
|
||||
<string name="toast_connect_via_bluetooth_success">Successfully connected via Bluetooth</string>
|
||||
<string name="toast_connect_via_bluetooth_error">Could not connect via Bluetooth</string>
|
||||
<!-- The first placeholder will show a duration like "7 days". The second placeholder at the end will add "Tap to learn more." -->
|
||||
<string name="auto_delete_msg_you_enabled">Your messages will disappear after %1$s. %2$s</string>
|
||||
<!-- The placeholder at the end will add "Tap to learn more." -->
|
||||
@@ -342,6 +333,18 @@
|
||||
<string name="introduction_response_declined_received">%1$s declined the introduction to %2$s.</string>
|
||||
<string name="introduction_response_declined_received_by_introducee">%1$s says that %2$s declined the introduction.</string>
|
||||
|
||||
<!-- Connect via Bluetooth -->
|
||||
|
||||
<string name="menu_item_connect_via_bluetooth">Connect via Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_title">Connect via Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_intro">In case Bluetooth connections do not work automatically, you can use this screen to connect manually.\n\nYour contact needs to be nearby for this to work.\n\nYou and your contact should both press \"Start\" at the same time.</string>
|
||||
<string name="connect_via_bluetooth_already_discovering">Already trying to connect via Bluetooth. Please try again shortly.</string>
|
||||
<string name="connect_via_bluetooth_no_location_permission">Cannot continue without location permission</string>
|
||||
<string name="connect_via_bluetooth_start">Connecting via Bluetooth…</string>
|
||||
<string name="connect_via_bluetooth_success">Successfully connected via Bluetooth</string>
|
||||
<string name="connect_via_bluetooth_error">Could not connect via Bluetooth.</string>
|
||||
<string name="connect_via_bluetooth_error_not_supported">Bluetooth is not supported by device.</string>
|
||||
|
||||
<!-- Private Groups -->
|
||||
<string name="groups_list_empty">No groups to show</string>
|
||||
<string name="groups_list_empty_action">Tap the + icon to create a group, or ask your contacts to share groups with you</string>
|
||||
@@ -707,7 +710,6 @@
|
||||
<string name="permission_hotspot_location_denied_body">You have denied access to your location, but Briar needs this permission to create a Wi-Fi hotspot.\n\nPlease consider granting access.</string>
|
||||
<string name="wifi_settings_title">Wi-Fi setting</string>
|
||||
<string name="wifi_settings_request_enable_body">To create a Wi-Fi hotspot, Briar needs to use Wi-Fi. Please enable it.</string>
|
||||
<string name="wifi_settings_request_denied_body">You have denied permission to enable Wi-Fi, but Briar needs to use Wi-Fi.\n\nPlease consider enabling it.</string>
|
||||
|
||||
<string name="hotspot_tab_manual">Manual</string>
|
||||
<!-- The placeholder to be inserted into the string 'hotspot_manual_wifi': People can connect by %s -->
|
||||
|
||||
Reference in New Issue
Block a user