2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-08-31 22:25:08 +00:00

Compare commits

..

89 Commits

Author SHA1 Message Date
Albert Vaca Cintora
a331b1e3f1 WIP Power plugin 2020-10-18 14:49:59 +02:00
l10n daemon script
c429bb81b0 GIT_SILENT made messages (after extraction) 2020-10-18 02:23:18 +02:00
l10n daemon script
3865c31820 GIT_SILENT made messages (after extraction) 2020-10-16 02:18:35 +02:00
l10n daemon script
f0fb35bb6e GIT_SILENT made messages (after extraction) 2020-10-15 02:23:15 +02:00
l10n daemon script
0e90a6038d GIT_SILENT made messages (after extraction) 2020-10-13 02:21:22 +02:00
l10n daemon script
d6e654f140 GIT_SILENT made messages (after extraction) 2020-10-12 02:21:28 +02:00
Albert Vaca Cintora
3f703c9732 Bump version 2020-10-11 17:41:08 +02:00
Albert Vaca Cintora
cffafc40f7 Removed something that isn't a permission 2020-10-11 17:40:25 +02:00
Yuri Chornoivan
f7007fd557 Fix minor typo 2020-10-11 08:41:48 +03:00
l10n daemon script
4cee466940 GIT_SILENT made messages (after extraction) 2020-10-11 02:23:02 +02:00
Albert Vaca Cintora
42a2d68bdd Bump version 2020-10-10 22:43:42 +02:00
Albert Vaca Cintora
bb39e95658 Remove unused permission 2020-10-10 22:32:49 +02:00
Albert Vaca Cintora
0a608580d9 Release 1.15.0 2020-10-10 15:14:37 +02:00
Albert Vaca Cintora
5b34bcf3da More explicit explanation 2020-10-10 15:14:37 +02:00
Albert Vaca Cintora
bbd648c2fc Bump all deps 2020-10-10 14:40:14 +02:00
Simon Redman
aa8bd4ad59 [SMS App] Fix sending simple SMS
## Summary

In https://invent.kde.org/network/kdeconnect-kde/-/merge_requests/316 we made some changes which are not backwards-compatible with the Android app. Since we have not yet released the Android app since those changes, we have hopefully not broken anybody but me.

However, this might be related to a recent bug: https://bugs.kde.org/show_bug.cgi?id=425638

Also updates some of the header comments for the recent changes

## Test Plan

### Before:
Sending SMS would silently fail

### After:
Sending SMS throws an IllegalArgumentException

With https://invent.kde.org/network/kdeconnect-kde/-/merge_requests/320, SMS can be sent normally
2020-10-09 00:36:03 +00:00
l10n daemon script
4193f09267 GIT_SILENT made messages (after extraction) 2020-10-09 02:21:56 +02:00
Anjani Kumar
69b3154b69 SharePlugin: Configure receiving directory in plugin permission mechanism
BUG: 422330
2020-09-26 06:12:47 +00:00
l10n daemon script
07101533c7 GIT_SILENT made messages (after extraction) 2020-09-24 02:29:26 +02:00
l10n daemon script
a116fbd6fc GIT_SILENT made messages (after extraction) 2020-09-20 02:17:07 +02:00
Isira Seneviratne
b49dda30f8 Update project dependencies. 2020-09-19 05:38:53 +00:00
Titir Adhikary
4ed6f1070f [SMS Plugin] Fix confusing method names for fetching all conversations vs. single conversation
Revert a7a66ecb2b which accidentally confused two very similar method names

Rename those methods to make sure it's clearer for anyone else who reads this code in the future
2020-09-19 05:20:32 +00:00
l10n daemon script
651fed4e1f GIT_SILENT made messages (after extraction) 2020-09-19 02:15:02 +02:00
Titir Adhikary
a7a66ecb2b Update SMSPlugin.java by removing a duplicate lines 2020-09-15 06:24:40 +00:00
Simon Redman
aa51019d0a [SMS App] Stop getting messages from the conversations?simple=true content URI
This fixes an issue with the first sync of threads not returning the actual most-recent message if the most-recent message was an MMS with no plain-text body
2020-09-14 17:24:54 -07:00
l10n daemon script
0ef541588b GIT_SILENT Add new file (after extraction) 2020-09-15 02:20:25 +02:00
l10n daemon script
41b39c625f GIT_SILENT made messages (after extraction) 2020-09-15 02:20:12 +02:00
l10n daemon script
fdb1dd3b3c GIT_SILENT made messages (after extraction) 2020-09-13 02:20:43 +02:00
l10n daemon script
0840cda923 GIT_SILENT made messages (after extraction) 2020-09-07 02:18:52 +02:00
l10n daemon script
dc14e9cd8d GIT_SILENT made messages (after extraction) 2020-09-06 02:19:01 +02:00
Aniket Kumar
ba89ef3abc Added support to process PACKET_TYPE_SMS_REQUEST_ATTACHMENT packet and transfers the requested attachment file to the desktop using PACKET_TYPE_SMS_ATTACHMENT_FILE packet. 2020-08-31 14:41:22 +05:30
l10n daemon script
1ddebd86aa GIT_SILENT made messages (after extraction) 2020-08-29 02:18:33 +02:00
Philip Cohn-Cort
e9215b1bd0 Disable BigscreenPlugin's microphone permission on non-TV links. 2020-08-24 06:33:22 +00:00
Isira Seneviratne
e79aac5b6f Add more usages of try-with-resources. 2020-08-20 18:29:20 +00:00
l10n daemon script
f5635a42ad GIT_SILENT made messages (after extraction) 2020-08-19 02:20:43 +02:00
Aniket Kumar
b1de227b2d Fixed issue of appliaction's MmsSentReceiver Class not being invoked on receiving MMS_SENT intent. 2020-08-18 16:22:22 +00:00
Nicolas Fella
91b8db4544 Fix crash in devices list
When we trigger a refresh and immediately navigate away from the list the view is destroyed and the refreshing end callback is accessing the now null devicesListBinding
2020-08-18 14:28:28 +02:00
Nicolas Fella
17f37ebd04 Bump gradle stuff 2020-08-18 14:10:16 +02:00
Isira Seneviratne
ca69a1f4fc Add null check in TelephonyHelper.getAllPhoneNumbers(). 2020-08-18 12:02:43 +00:00
l10n daemon script
6ae658e6fd GIT_SILENT made messages (after extraction) 2020-08-18 02:18:30 +02:00
Nicolas Fella
b3b74f25f4 Convert license headers to SPDX 2020-08-17 16:17:20 +02:00
l10n daemon script
9565318944 GIT_SILENT made messages (after extraction) 2020-08-17 02:14:12 +02:00
Aniket Kumar
f3d683e2c5 Modifying SMSHelper.Message class and PACKET_TYPE_SMS_MESSAGE to contain list of attachment objects. 2020-08-12 17:08:02 +05:30
l10n daemon script
31dd2cbd5f GIT_SILENT made messages (after extraction) 2020-08-11 02:20:15 +02:00
l10n daemon script
456e4ed9cd GIT_SILENT made messages (after extraction) 2020-08-09 02:14:34 +02:00
l10n daemon script
348d6fb379 GIT_SILENT made messages (after extraction) 2020-08-08 02:15:26 +02:00
l10n daemon script
c327a5fd3e GIT_SILENT made messages (after extraction) 2020-08-07 02:16:58 +02:00
l10n daemon script
07e422ebe7 GIT_SILENT made messages (after extraction) 2020-08-06 02:17:32 +02:00
Aniket Kumar
0528de7fde Implemented notification support to notify the user about the newly received SMS/MMS when KDE Connect will be set as the default SMS app. 2020-08-05 15:22:31 +05:30
Aniket Kumar
2758fba3d0 Removed APN settings from user preferences completely and replaced Klinker's get APN settings method with TelephonyHelper's getPreferredApn method. 2020-08-05 15:14:30 +05:30
l10n daemon script
83cf689478 GIT_SILENT made messages (after extraction) 2020-08-04 02:17:59 +02:00
Isira Seneviratne
c6f8a2ecdc Fix test compilation errors. 2020-08-02 16:56:21 +00:00
Isira Seneviratne
340d7b0154 Adjust build optimizations 2020-08-02 06:31:33 +00:00
Sohny Bohny
fd29755cf1 Add null check before using RemoteKeyboardService.instance.visible 2020-08-01 22:11:49 +00:00
l10n daemon script
7ad78d95c4 GIT_SILENT made messages (after extraction) 2020-08-01 02:18:00 +02:00
l10n daemon script
d69ba84919 GIT_SILENT made messages (after extraction) 2020-07-30 02:17:25 +02:00
Isira Seneviratne
fb79673e85 Use StringUtils.join(). 2020-07-26 21:50:10 +00:00
Isira Seneviratne
7458adc7d6 Use ArrayUtils.EMPTY_STRING_ARRAY constant. 2020-07-26 21:50:10 +00:00
Isira Seneviratne
f6187333a8 Use StringUtils.firstNonEmpty(). 2020-07-26 21:50:10 +00:00
Isira Seneviratne
d22967f475 Use ArrayUtils.contains(). 2020-07-26 21:50:10 +00:00
Isira Seneviratne
531c158756 Use NumberUtils.toInt(). 2020-07-26 21:50:10 +00:00
Isira Seneviratne
bccc002d04 Use StringUtils' startsWith() and endsWith(). 2020-07-26 21:50:10 +00:00
Isira Seneviratne
b520291ccd Use StringUtils.defaultString(). 2020-07-26 21:50:10 +00:00
Isira Seneviratne
24efa1968c Use ArrayUtils' isEmpty() and isNotEmpty(). 2020-07-26 21:50:10 +00:00
Isira Seneviratne
e74743c684 Use StringUtils.contains(). 2020-07-26 21:50:10 +00:00
Isira Seneviratne
84ca679d84 Use StringUtils.containsAny(). 2020-07-26 21:50:10 +00:00
Isira Seneviratne
29c6d28569 Add Apache Commons Lang. 2020-07-26 21:50:10 +00:00
Isira Seneviratne
a6c08d00b2 Use android:src instead of app:srcCompat. 2020-07-25 10:35:33 +05:30
Anjani Kumar
f7f2045da1 RunCommandWidget: Add System Dark theme support 2020-07-24 10:54:43 +00:00
Isira Seneviratne
1a2a01d3ff Use Kotlin's Charsets class. 2020-07-24 10:53:09 +00:00
Isira Seneviratne
fcae39846e Use view binding in the classes in the 'List' package. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
5073f5e3dd Use view binding in PairingFragment. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
cfa00c05ca Use view binding in RunCommandWidgetDeviceSelector. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
0c38405965 Use view binding in TrustedNetworksActivity. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
d064cf6a1e Use view binding in CustomDevicesActivity. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
3207e4b0eb Use view binding in ShareActivity. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
32c9dc5ad5 Use view binding in RunCommandActivity. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
74f9aba31a Use view binding in PresenterActivity. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
2ab615d55e Use view binding in NotificationFilterActivity. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
a6cf26e739 Use view binding in FindMyPhoneActivity. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
54335ac755 Use view binding in MainActivity. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
4624033991 Use view binding in DeviceFragment. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
286bb7b3cd Use view binding in BigscreenActivity. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
179d04ef00 Enable view binding. 2020-07-24 10:50:15 +00:00
Isira Seneviratne
2f386ff5c0 Use FileUtils.directoryContains(). 2020-07-24 10:49:32 +00:00
Isira Seneviratne
4a4147bd4d Use FilenameUtils' getBaseName() and getExtension(). 2020-07-24 10:48:28 +00:00
l10n daemon script
0deb624ca2 GIT_SILENT made messages (after extraction) 2020-07-22 02:20:05 +02:00
l10n daemon script
edfbf131f9 GIT_SILENT made messages (after extraction) 2020-07-19 02:13:27 +02:00
Nicolas Fella
dff9a2218e Send correct keyboard state when changing onlyWhenEditing option
Otherwise the desktop side won't show the input as available

I didn't even know that feature existed :)
2020-07-18 21:56:49 +00:00
199 changed files with 4482 additions and 4028 deletions

View File

@@ -2,8 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.kde.kdeconnect_tp"
android:versionCode="11421"
android:versionName="1.14.2">
android:versionCode="11503"
android:versionName="1.15.0">
<supports-screens
android:anyDensity="true"
@@ -35,10 +35,8 @@
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.provider.Telephony.SMS_RECEIVED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
@@ -90,11 +88,16 @@
android:taskAffinity="com.klinker.android.messaging.MMS_RECEIVED" />
<receiver
android:name="org.kde.kdeconnect.Plugins.SMSPlugin.MmsSentReceiver"
android:name="org.kde.kdeconnect.Plugins.SMSPlugin.MmsSentReceiverImpl"
android:exported="true"
android:enabled="true"
android:taskAffinity="com.klinker.android.messaging.MMS_SENT" />
<receiver
android:name="org.kde.kdeconnect.Plugins.SMSPlugin.NotificationReplyReceiver"
android:enabled="true"
android:exported="true">
</receiver>
<service
android:name="org.kde.kdeconnect.Plugins.SMSPlugin.HeadlessSmsSendService"
android:exported="true"
@@ -111,6 +114,14 @@
</intent-filter>
</service>
<!-- New signature permission to ensure only systemui can bind to these services -->
<service android:name="org.kde.kdeconnect.Plugins.PowerPlugin.PowerControlsService" android:label="@string/kde_connect"
android:permission="android.permission.BIND_CONTROLS">
<intent-filter>
<action android:name="android.service.controls.ControlsProviderService" />
</intent-filter>
</service>
<service
android:name="com.android.mms.transaction.TransactionService"
android:enabled="true"

208
LICENSES/Apache-2.0.txt Normal file
View File

@@ -0,0 +1,208 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION,
AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and distribution
as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct
or indirect, to cause the direction or management of such entity, whether
by contract or otherwise, or (ii) ownership of fifty percent (50%) or more
of the outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions
granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation
or translation of a Source form, including but not limited to compiled object
code, generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form,
made available under the License, as indicated by a copyright notice that
is included in or attached to the work (an example is provided in the Appendix
below).
"Derivative Works" shall mean any work, whether in Source or Object form,
that is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative
Works shall not include works that remain separable from, or merely link (or
bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative
Works thereof, that is intentionally submitted to Licensor for inclusion in
the Work by the copyright owner or by an individual or Legal Entity authorized
to submit on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication
sent to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor
for the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently incorporated
within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of this
License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
Derivative Works of, publicly display, publicly perform, sublicense, and distribute
the Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of this License,
each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section) patent
license to make, have made, use, offer to sell, sell, import, and otherwise
transfer the Work, where such license applies only to those patent claims
licensable by such Contributor that are necessarily infringed by their Contribution(s)
alone or by combination of their Contribution(s) with the Work to which such
Contribution(s) was submitted. If You institute patent litigation against
any entity (including a cross-claim or counterclaim in a lawsuit) alleging
that the Work or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses granted to You
under this License for that Work shall terminate as of the date such litigation
is filed.
4. Redistribution. You may reproduce and distribute copies of the Work or
Derivative Works thereof in any medium, with or without modifications, and
in Source or Object form, provided that You meet the following conditions:
(a) You must give any other recipients of the Work or Derivative Works a copy
of this License; and
(b) You must cause any modified files to carry prominent notices stating that
You changed the files; and
(c) You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source
form of the Work, excluding those notices that do not pertain to any part
of the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its distribution,
then any Derivative Works that You distribute must include a readable copy
of the attribution notices contained within such NOTICE file, excluding those
notices that do not pertain to any part of the Derivative Works, in at least
one of the following places: within a NOTICE text file distributed as part
of the Derivative Works; within the Source form or documentation, if provided
along with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works
that You distribute, alongside or as an addendum to the NOTICE text from the
Work, provided that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction,
or distribution of Your modifications, or for any such Derivative Works as
a whole, provided Your use, reproduction, and distribution of the Work otherwise
complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any
Contribution intentionally submitted for inclusion in the Work by You to the
Licensor shall be under the terms and conditions of this License, without
any additional terms or conditions. Notwithstanding the above, nothing herein
shall supersede or modify the terms of any separate license agreement you
may have executed with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade names,
trademarks, service marks, or product names of the Licensor, except as required
for reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or agreed to
in writing, Licensor provides the Work (and each Contributor provides its
Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied, including, without limitation, any warranties
or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR
A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness
of using or redistributing the Work and assume any risks associated with Your
exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, whether
in tort (including negligence), contract, or otherwise, unless required by
applicable law (such as deliberate and grossly negligent acts) or agreed to
in writing, shall any Contributor be liable to You for damages, including
any direct, indirect, special, incidental, or consequential damages of any
character arising as a result of this License or out of the use or inability
to use the Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all other commercial
damages or losses), even if such Contributor has been advised of the possibility
of such damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work
or Derivative Works thereof, You may choose to offer, and charge a fee for,
acceptance of support, warranty, indemnity, or other liability obligations
and/or rights consistent with this License. However, in accepting such obligations,
You may act only on Your own behalf and on Your sole responsibility, not on
behalf of any other Contributor, and only if You agree to indemnify, defend,
and hold each Contributor harmless for any liability incurred by, or claims
asserted against, such Contributor by reason of your accepting any such warranty
or additional liability. END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "[]" replaced with your own identifying
information. (Don't include the brackets!) The text should be enclosed in
the appropriate comment syntax for the file format. We also recommend that
a file or class name and description of purpose be included on the same "printed
page" as the copyright notice for easier identification within third-party
archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

319
LICENSES/GPL-2.0-only.txt Normal file
View File

@@ -0,0 +1,319 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to share
and change it. By contrast, the GNU General Public License is intended to
guarantee your freedom to share and change free software--to make sure the
software is free for all its users. This General Public License applies to
most of the Free Software Foundation's software and to any other program whose
authors commit to using it. (Some other Free Software Foundation software
is covered by the GNU Lesser General Public License instead.) You can apply
it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our
General Public Licenses are designed to make sure that you have the freedom
to distribute copies of free software (and charge for this service if you
wish), that you receive source code or can get it if you want it, that you
can change the software or use pieces of it in new free programs; and that
you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to
deny you these rights or to ask you to surrender the rights. These restrictions
translate to certain responsibilities for you if you distribute copies of
the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or
for a fee, you must give the recipients all the rights that you have. You
must make sure that they, too, receive or can get the source code. And you
must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2)
offer you this license which gives you legal permission to copy, distribute
and/or modify the software.
Also, for each author's protection and ours, we want to make certain that
everyone understands that there is no warranty for this free software. If
the software is modified by someone else and passed on, we want its recipients
to know that what they have is not the original, so that any problems introduced
by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We
wish to avoid the danger that redistributors of a free program will individually
obtain patent licenses, in effect making the program proprietary. To prevent
this, we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification
follow.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice
placed by the copyright holder saying it may be distributed under the terms
of this General Public License. The "Program", below, refers to any such program
or work, and a "work based on the Program" means either the Program or any
derivative work under copyright law: that is to say, a work containing the
Program or a portion of it, either verbatim or with modifications and/or translated
into another language. (Hereinafter, translation is included without limitation
in the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not covered
by this License; they are outside its scope. The act of running the Program
is not restricted, and the output from the Program is covered only if its
contents constitute a work based on the Program (independent of having been
made by running the Program). Whether that is true depends on what the Program
does.
1. You may copy and distribute verbatim copies of the Program's source code
as you receive it, in any medium, provided that you conspicuously and appropriately
publish on each copy an appropriate copyright notice and disclaimer of warranty;
keep intact all the notices that refer to this License and to the absence
of any warranty; and give any other recipients of the Program a copy of this
License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you
may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it,
thus forming a work based on the Program, and copy and distribute such modifications
or work under the terms of Section 1 above, provided that you also meet all
of these conditions:
a) You must cause the modified files to carry prominent notices stating that
you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in whole or
in part contains or is derived from the Program or any part thereof, to be
licensed as a whole at no charge to all third parties under the terms of this
License.
c) If the modified program normally reads commands interactively when run,
you must cause it, when started running for such interactive use in the most
ordinary way, to print or display an announcement including an appropriate
copyright notice and a notice that there is no warranty (or else, saying that
you provide a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this License.
(Exception: if the Program itself is interactive but does not normally print
such an announcement, your work based on the Program is not required to print
an announcement.)
These requirements apply to the modified work as a whole. If identifiable
sections of that work are not derived from the Program, and can be reasonably
considered independent and separate works in themselves, then this License,
and its terms, do not apply to those sections when you distribute them as
separate works. But when you distribute the same sections as part of a whole
which is a work based on the Program, the distribution of the whole must be
on the terms of this License, whose permissions for other licensees extend
to the entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest your
rights to work written entirely by you; rather, the intent is to exercise
the right to control the distribution of derivative or collective works based
on the Program.
In addition, mere aggregation of another work not based on the Program with
the Program (or with a work based on the Program) on a volume of a storage
or distribution medium does not bring the other work under the scope of this
License.
3. You may copy and distribute the Program (or a work based on it, under Section
2) in object code or executable form under the terms of Sections 1 and 2 above
provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source code,
which must be distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to give
any third party, for a charge no more than your cost of physically performing
source distribution, a complete machine-readable copy of the corresponding
source code, to be distributed under the terms of Sections 1 and 2 above on
a medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to distribute
corresponding source code. (This alternative is allowed only for noncommercial
distribution and only if you received the program in object code or executable
form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making
modifications to it. For an executable work, complete source code means all
the source code for all modules it contains, plus any associated interface
definition files, plus the scripts used to control compilation and installation
of the executable. However, as a special exception, the source code distributed
need not include anything that is normally distributed (in either source or
binary form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component itself
accompanies the executable.
If distribution of executable or object code is made by offering access to
copy from a designated place, then offering equivalent access to copy the
source code from the same place counts as distribution of the source code,
even though third parties are not compelled to copy the source along with
the object code.
4. You may not copy, modify, sublicense, or distribute the Program except
as expressly provided under this License. Any attempt otherwise to copy, modify,
sublicense or distribute the Program is void, and will automatically terminate
your rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses terminated
so long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed
it. However, nothing else grants you permission to modify or distribute the
Program or its derivative works. These actions are prohibited by law if you
do not accept this License. Therefore, by modifying or distributing the Program
(or any work based on the Program), you indicate your acceptance of this License
to do so, and all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program),
the recipient automatically receives a license from the original licensor
to copy, distribute or modify the Program subject to these terms and conditions.
You may not impose any further restrictions on the recipients' exercise of
the rights granted herein. You are not responsible for enforcing compliance
by third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent infringement
or for any other reason (not limited to patent issues), conditions are imposed
on you (whether by court order, agreement or otherwise) that contradict the
conditions of this License, they do not excuse you from the conditions of
this License. If you cannot distribute so as to satisfy simultaneously your
obligations under this License and any other pertinent obligations, then as
a consequence you may not distribute the Program at all. For example, if a
patent license would not permit royalty-free redistribution of the Program
by all those who receive copies directly or indirectly through you, then the
only way you could satisfy both it and this License would be to refrain entirely
from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply and
the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents
or other property right claims or to contest validity of any such claims;
this section has the sole purpose of protecting the integrity of the free
software distribution system, which is implemented by public license practices.
Many people have made generous contributions to the wide range of software
distributed through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing to
distribute software through any other system and a licensee cannot impose
that choice.
This section is intended to make thoroughly clear what is believed to be a
consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain
countries either by patents or by copyrighted interfaces, the original copyright
holder who places the Program under this License may add an explicit geographical
distribution limitation excluding those countries, so that distribution is
permitted only in or among countries not thus excluded. In such case, this
License incorporates the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions of
the General Public License from time to time. Such new versions will be similar
in spirit to the present version, but may differ in detail to address new
problems or concerns.
Each version is given a distinguishing version number. If the Program specifies
a version number of this License which applies to it and "any later version",
you have the option of following the terms and conditions either of that version
or of any later version published by the Free Software Foundation. If the
Program does not specify a version number of this License, you may choose
any version ever published by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs
whose distribution conditions are different, write to the author to ask for
permission. For software which is copyrighted by the Free Software Foundation,
write to the Free Software Foundation; we sometimes make exceptions for this.
Our decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing and reuse
of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible
use to the public, the best way to achieve this is to make it free software
which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach
them to the start of each source file to most effectively convey the exclusion
of warranty; and each file should have at least the "copyright" line and a
pointer to where the full notice is found.
<one line to give the program's name and an idea of what it does.>
Copyright (C)< yyyy> <name of author>
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
Street, Fifth Floor, Boston, MA 02110-1301, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this when
it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software,
and you are welcome to redistribute it under certain conditions; type `show
c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may be
called something other than `show w' and `show c'; they could even be mouse-clicks
or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your school,
if any, to sign a "copyright disclaimer" for the program, if necessary. Here
is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision'
(which makes passes at compilers) written by James Hacker.
<signature of Ty Coon >, 1 April 1989 Ty Coon, President of Vice This General
Public License does not permit incorporating your program into proprietary
programs. If your program is a subroutine library, you may consider it more
useful to permit linking proprietary applications with the library. If this
is what you want to do, use the GNU Lesser General Public License instead
of this License.

625
LICENSES/GPL-3.0-only.txt Normal file
View File

@@ -0,0 +1,625 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for software and
other kinds of works.
The licenses for most software and other practical works are designed to take
away your freedom to share and change the works. By contrast, the GNU General
Public License is intended to guarantee your freedom to share and change all
versions of a program--to make sure it remains free software for all its users.
We, the Free Software Foundation, use the GNU General Public License for most
of our software; it applies also to any other work released this way by its
authors. You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our
General Public Licenses are designed to make sure that you have the freedom
to distribute copies of free software (and charge for them if you wish), that
you receive source code or can get it if you want it, that you can change
the software or use pieces of it in new free programs, and that you know you
can do these things.
To protect your rights, we need to prevent others from denying you these rights
or asking you to surrender the rights. Therefore, you have certain responsibilities
if you distribute copies of the software, or if you modify it: responsibilities
to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or
for a fee, you must pass on to the recipients the same freedoms that you received.
You must make sure that they, too, receive or can get the source code. And
you must show them these terms so they know their rights.
Developers that use the GNU GPL protect your rights with two steps: (1) assert
copyright on the software, and (2) offer you this License giving you legal
permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains that
there is no warranty for this free software. For both users' and authors'
sake, the GPL requires that modified versions be marked as changed, so that
their problems will not be attributed erroneously to authors of previous versions.
Some devices are designed to deny users access to install or run modified
versions of the software inside them, although the manufacturer can do so.
This is fundamentally incompatible with the aim of protecting users' freedom
to change the software. The systematic pattern of such abuse occurs in the
area of products for individuals to use, which is precisely where it is most
unacceptable. Therefore, we have designed this version of the GPL to prohibit
the practice for those products. If such problems arise substantially in other
domains, we stand ready to extend this provision to those domains in future
versions of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents. States
should not allow patents to restrict development and use of software on general-purpose
computers, but in those that do, we wish to avoid the special danger that
patents applied to a free program could make it effectively proprietary. To
prevent this, the GPL assures that patents cannot be used to render the program
non-free.
The precise terms and conditions for copying, distribution and modification
follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of works,
such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this License.
Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals
or organizations.
To "modify" a work means to copy from or adapt all or part of the work in
a fashion requiring copyright permission, other than the making of an exact
copy. The resulting work is called a "modified version" of the earlier work
or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based on the
Program.
To "propagate" a work means to do anything with it that, without permission,
would make you directly or secondarily liable for infringement under applicable
copyright law, except executing it on a computer or modifying a private copy.
Propagation includes copying, distribution (with or without modification),
making available to the public, and in some countries other activities as
well.
To "convey" a work means any kind of propagation that enables other parties
to make or receive copies. Mere interaction with a user through a computer
network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices" to the
extent that it includes a convenient and prominently visible feature that
(1) displays an appropriate copyright notice, and (2) tells the user that
there is no warranty for the work (except to the extent that warranties are
provided), that licensees may convey the work under this License, and how
to view a copy of this License. If the interface presents a list of user commands
or options, such as a menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work for making
modifications to it. "Object code" means any non-source form of a work.
A "Standard Interface" means an interface that either is an official standard
defined by a recognized standards body, or, in the case of interfaces specified
for a particular programming language, one that is widely used among developers
working in that language.
The "System Libraries" of an executable work include anything, other than
the work as a whole, that (a) is included in the normal form of packaging
a Major Component, but which is not part of that Major Component, and (b)
serves only to enable use of the work with that Major Component, or to implement
a Standard Interface for which an implementation is available to the public
in source code form. A "Major Component", in this context, means a major essential
component (kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to produce
the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all the source
code needed to generate, install, and (for an executable work) run the object
code and to modify the work, including scripts to control those activities.
However, it does not include the work's System Libraries, or general-purpose
tools or generally available free programs which are used unmodified in performing
those activities but which are not part of the work. For example, Corresponding
Source includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically linked
subprograms that the work is specifically designed to require, such as by
intimate data communication or control flow between those subprograms and
other parts of the work.
The Corresponding Source need not include anything that users can regenerate
automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of copyright
on the Program, and are irrevocable provided the stated conditions are met.
This License explicitly affirms your unlimited permission to run the unmodified
Program. The output from running a covered work is covered by this License
only if the output, given its content, constitutes a covered work. This License
acknowledges your rights of fair use or other equivalent, as provided by copyright
law.
You may make, run and propagate covered works that you do not convey, without
conditions so long as your license otherwise remains in force. You may convey
covered works to others for the sole purpose of having them make modifications
exclusively for you, or provide you with facilities for running those works,
provided that you comply with the terms of this License in conveying all material
for which you do not control copyright. Those thus making or running the covered
works for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of your copyrighted
material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions
stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological measure
under any applicable law fulfilling obligations under article 11 of the WIPO
copyright treaty adopted on 20 December 1996, or similar laws prohibiting
or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention
of technological measures to the extent such circumvention is effected by
exercising rights under this License with respect to the covered work, and
you disclaim any intention to limit operation or modification of the work
as a means of enforcing, against the work's users, your or third parties'
legal rights to forbid circumvention of technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you receive
it, in any medium, provided that you conspicuously and appropriately publish
on each copy an appropriate copyright notice; keep intact all notices stating
that this License and any non-permissive terms added in accord with section
7 apply to the code; keep intact all notices of the absence of any warranty;
and give all recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey, and you
may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to produce
it from the Program, in the form of source code under the terms of section
4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified it, and
giving a relevant date.
b) The work must carry prominent notices stating that it is released under
this License and any conditions added under section 7. This requirement modifies
the requirement in section 4 to "keep intact all notices".
c) You must license the entire work, as a whole, under this License to anyone
who comes into possession of a copy. This License will therefore apply, along
with any applicable section 7 additional terms, to the whole of the work,
and all its parts, regardless of how they are packaged. This License gives
no permission to license the work in any other way, but it does not invalidate
such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display Appropriate
Legal Notices; however, if the Program has interactive interfaces that do
not display Appropriate Legal Notices, your work need not make them do so.
A compilation of a covered work with other separate and independent works,
which are not by their nature extensions of the covered work, and which are
not combined with it such as to form a larger program, in or on a volume of
a storage or distribution medium, is called an "aggregate" if the compilation
and its resulting copyright are not used to limit the access or legal rights
of the compilation's users beyond what the individual works permit. Inclusion
of a covered work in an aggregate does not cause this License to apply to
the other parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of sections
4 and 5, provided that you also convey the machine-readable Corresponding
Source under the terms of this License, in one of these ways:
a) Convey the object code in, or embodied in, a physical product (including
a physical distribution medium), accompanied by the Corresponding Source fixed
on a durable physical medium customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product (including
a physical distribution medium), accompanied by a written offer, valid for
at least three years and valid for as long as you offer spare parts or customer
support for that product model, to give anyone who possesses the object code
either (1) a copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical medium customarily
used for software interchange, for a price no more than your reasonable cost
of physically performing this conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the written
offer to provide the Corresponding Source. This alternative is allowed only
occasionally and noncommercially, and only if you received the object code
with such an offer, in accord with subsection 6b.
d) Convey the object code by offering access from a designated place (gratis
or for a charge), and offer equivalent access to the Corresponding Source
in the same way through the same place at no further charge. You need not
require recipients to copy the Corresponding Source along with the object
code. If the place to copy the object code is a network server, the Corresponding
Source may be on a different server (operated by you or a third party) that
supports equivalent copying facilities, provided you maintain clear directions
next to the object code saying where to find the Corresponding Source. Regardless
of what server hosts the Corresponding Source, you remain obligated to ensure
that it is available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided you inform
other peers where the object code and Corresponding Source of the work are
being offered to the general public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from
the Corresponding Source as a System Library, need not be included in conveying
the object code work.
A "User Product" is either (1) a "consumer product", which means any tangible
personal property which is normally used for personal, family, or household
purposes, or (2) anything designed or sold for incorporation into a dwelling.
In determining whether a product is a consumer product, doubtful cases shall
be resolved in favor of coverage. For a particular product received by a particular
user, "normally used" refers to a typical or common use of that class of product,
regardless of the status of the particular user or of the way in which the
particular user actually uses, or expects or is expected to use, the product.
A product is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent the
only significant mode of use of the product.
"Installation Information" for a User Product means any methods, procedures,
authorization keys, or other information required to install and execute modified
versions of a covered work in that User Product from a modified version of
its Corresponding Source. The information must suffice to ensure that the
continued functioning of the modified object code is in no case prevented
or interfered with solely because modification has been made.
If you convey an object code work under this section in, or with, or specifically
for use in, a User Product, and the conveying occurs as part of a transaction
in which the right of possession and use of the User Product is transferred
to the recipient in perpetuity or for a fixed term (regardless of how the
transaction is characterized), the Corresponding Source conveyed under this
section must be accompanied by the Installation Information. But this requirement
does not apply if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has been installed
in ROM).
The requirement to provide Installation Information does not include a requirement
to continue to provide support service, warranty, or updates for a work that
has been modified or installed by the recipient, or for the User Product in
which it has been modified or installed. Access to a network may be denied
when the modification itself materially and adversely affects the operation
of the network or violates the rules and protocols for communication across
the network.
Corresponding Source conveyed, and Installation Information provided, in accord
with this section must be in a format that is publicly documented (and with
an implementation available to the public in source code form), and must require
no special password or key for unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this License
by making exceptions from one or more of its conditions. Additional permissions
that are applicable to the entire Program shall be treated as though they
were included in this License, to the extent that they are valid under applicable
law. If additional permissions apply only to part of the Program, that part
may be used separately under those permissions, but the entire Program remains
governed by this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any
additional permissions from that copy, or from any part of it. (Additional
permissions may be written to require their own removal in certain cases when
you modify the work.) You may place additional permissions on material, added
by you to a covered work, for which you have or can give appropriate copyright
permission.
Notwithstanding any other provision of this License, for material you add
to a covered work, you may (if authorized by the copyright holders of that
material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the terms of
sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or author
attributions in that material or in the Appropriate Legal Notices displayed
by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or requiring
that modified versions of such material be marked in reasonable ways as different
from the original version; or
d) Limiting the use for publicity purposes of names of licensors or authors
of the material; or
e) Declining to grant rights under trademark law for use of some trade names,
trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that material by
anyone who conveys the material (or modified versions of it) with contractual
assumptions of liability to the recipient, for any liability that these contractual
assumptions directly impose on those licensors and authors.
All other non-permissive additional terms are considered "further restrictions"
within the meaning of section 10. If the Program as you received it, or any
part of it, contains a notice stating that it is governed by this License
along with a term that is a further restriction, you may remove that term.
If a license document contains a further restriction but permits relicensing
or conveying under this License, you may add to a covered work material governed
by the terms of that license document, provided that the further restriction
does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place,
in the relevant source files, a statement of the additional terms that apply
to those files, or a notice indicating where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form
of a separately written license, or stated as exceptions; the above requirements
apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly provided
under this License. Any attempt otherwise to propagate or modify it is void,
and will automatically terminate your rights under this License (including
any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from
a particular copyright holder is reinstated (a) provisionally, unless and
until the copyright holder explicitly and finally terminates your license,
and (b) permanently, if the copyright holder fails to notify you of the violation
by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently
if the copyright holder notifies you of the violation by some reasonable means,
this is the first time you have received notice of violation of this License
(for any work) from that copyright holder, and you cure the violation prior
to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses
of parties who have received copies or rights from you under this License.
If your rights have been terminated and not permanently reinstated, you do
not qualify to receive new licenses for the same material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a copy
of the Program. Ancillary propagation of a covered work occurring solely as
a consequence of using peer-to-peer transmission to receive a copy likewise
does not require acceptance. However, nothing other than this License grants
you permission to propagate or modify any covered work. These actions infringe
copyright if you do not accept this License. Therefore, by modifying or propagating
a covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically receives
a license from the original licensors, to run, modify and propagate that work,
subject to this License. You are not responsible for enforcing compliance
by third parties with this License.
An "entity transaction" is a transaction transferring control of an organization,
or substantially all assets of one, or subdividing an organization, or merging
organizations. If propagation of a covered work results from an entity transaction,
each party to that transaction who receives a copy of the work also receives
whatever licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the Corresponding
Source of the work from the predecessor in interest, if the predecessor has
it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights
granted or affirmed under this License. For example, you may not impose a
license fee, royalty, or other charge for exercise of rights granted under
this License, and you may not initiate litigation (including a cross-claim
or counterclaim in a lawsuit) alleging that any patent claim is infringed
by making, using, selling, offering for sale, or importing the Program or
any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this License
of the Program or a work on which the Program is based. The work thus licensed
is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned or controlled
by the contributor, whether already acquired or hereafter acquired, that would
be infringed by some manner, permitted by this License, of making, using,
or selling its contributor version, but do not include claims that would be
infringed only as a consequence of further modification of the contributor
version. For purposes of this definition, "control" includes the right to
grant patent sublicenses in a manner consistent with the requirements of this
License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent
license under the contributor's essential patent claims, to make, use, sell,
offer for sale, import and otherwise run, modify and propagate the contents
of its contributor version.
In the following three paragraphs, a "patent license" is any express agreement
or commitment, however denominated, not to enforce a patent (such as an express
permission to practice a patent or covenant not to sue for patent infringement).
To "grant" such a patent license to a party means to make such an agreement
or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the
Corresponding Source of the work is not available for anyone to copy, free
of charge and under the terms of this License, through a publicly available
network server or other readily accessible means, then you must either (1)
cause the Corresponding Source to be so available, or (2) arrange to deprive
yourself of the benefit of the patent license for this particular work, or
(3) arrange, in a manner consistent with the requirements of this License,
to extend the patent license to downstream recipients. "Knowingly relying"
means you have actual knowledge that, but for the patent license, your conveying
the covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that country
that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement,
you convey, or propagate by procuring conveyance of, a covered work, and grant
a patent license to some of the parties receiving the covered work authorizing
them to use, propagate, modify or convey a specific copy of the covered work,
then the patent license you grant is automatically extended to all recipients
of the covered work and works based on it.
A patent license is "discriminatory" if it does not include within the scope
of its coverage, prohibits the exercise of, or is conditioned on the non-exercise
of one or more of the rights that are specifically granted under this License.
You may not convey a covered work if you are a party to an arrangement with
a third party that is in the business of distributing software, under which
you make payment to the third party based on the extent of your activity of
conveying the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory patent
license (a) in connection with copies of the covered work conveyed by you
(or copies made from those copies), or (b) primarily for and in connection
with specific products or compilations that contain the covered work, unless
you entered into that arrangement, or that patent license was granted, prior
to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied
license or other defenses to infringement that may otherwise be available
to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or otherwise)
that contradict the conditions of this License, they do not excuse you from
the conditions of this License. If you cannot convey a covered work so as
to satisfy simultaneously your obligations under this License and any other
pertinent obligations, then as a consequence you may not convey it at all.
For example, if you agree to terms that obligate you to collect a royalty
for further conveying from those to whom you convey the Program, the only
way you could satisfy both those terms and this License would be to refrain
entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have permission to
link or combine any covered work with a work licensed under version 3 of the
GNU Affero General Public License into a single combined work, and to convey
the resulting work. The terms of this License will continue to apply to the
part which is the covered work, but the special requirements of the GNU Affero
General Public License, section 13, concerning interaction through a network
will apply to the combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of the
GNU General Public License from time to time. Such new versions will be similar
in spirit to the present version, but may differ in detail to address new
problems or concerns.
Each version is given a distinguishing version number. If the Program specifies
that a certain numbered version of the GNU General Public License "or any
later version" applies to it, you have the option of following the terms and
conditions either of that numbered version or of any later version published
by the Free Software Foundation. If the Program does not specify a version
number of the GNU General Public License, you may choose any version ever
published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions of
the GNU General Public License can be used, that proxy's public statement
of acceptance of a version permanently authorizes you to choose that version
for the Program.
Later license versions may give you additional or different permissions. However,
no additional obligations are imposed on any author or copyright holder as
a result of your choosing to follow a later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM
PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM
AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO
USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided above cannot
be given local legal effect according to their terms, reviewing courts shall
apply local law that most closely approximates an absolute waiver of all civil
liability in connection with the Program, unless a warranty or assumption
of liability accompanies a copy of the Program in return for a fee. END OF
TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible
use to the public, the best way to achieve this is to make it free software
which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach
them to the start of each source file to most effectively state the exclusion
of warranty; and each file should have at least the "copyright" line and a
pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like
this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it under certain
conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands might
be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary. For
more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General Public
License instead of this License. But first, please read <https://www.gnu.org/
licenses /why-not-lgpl.html>.

View File

@@ -0,0 +1,12 @@
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 3 of
the license or (at your option) at any later version that is
accepted by the membership of KDE e.V. (or its successor
approved by the membership of KDE e.V.), which shall act as a
proxy as defined in Section 14 of version 3 of the license.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

View File

@@ -6,26 +6,29 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
buildscript {
ext.kotlin_version = '1.3.72'
ext.kotlin_version = '1.4.10'
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
classpath 'com.android.tools.build:gradle:4.0.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
android {
compileSdkVersion 29
compileSdkVersion 30
defaultConfig {
minSdkVersion 21
minSdkVersion 14
targetSdkVersion 29
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
multiDexEnabled true
}
buildFeatures {
viewBinding true
}
dexOptions {
javaMaxHeapSize "2g"
}
@@ -71,12 +74,14 @@ android {
buildTypes {
debug {
minifyEnabled true
shrinkResources true
signingConfig signingConfigs.debug
}
// keep minifyEnabled false above for faster builds; set to 'true'
// when testing to make sure ProGuard/R8 is not deleting important stuff
release {
minifyEnabled true
shrinkResources true
}
}
}
@@ -130,7 +135,7 @@ Provider<String> gitHashProvider = project.provider {
}
ext {
coroutines_version = '1.3.6'
coroutines_version = '1.3.8'
}
dependencies {
@@ -145,23 +150,25 @@ dependencies {
*/
}
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.media:media:1.1.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.3.0'
implementation 'androidx.media:media:1.2.0'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.preference:preference:1.1.1'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'androidx.documentfile:documentfile:1.0.1'
implementation 'androidx.lifecycle:lifecycle-runtime:2.2.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'com.jakewharton:disklrucache:2.0.2' //For caching album art bitmaps
implementation 'com.jaredrummler:android-device-names:1.1.9' //To get a human-friendly device name
implementation 'org.reactivestreams:reactive-streams:1.0.3'
implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
implementation 'org.apache.sshd:sshd-core:0.14.0'
implementation 'org.apache.mina:mina-core:2.0.19' //For some reason, makes sshd-core:0.14.0 work without NIO, which isn't available until Android 8 (api 26)
@@ -180,6 +187,7 @@ dependencies {
implementation 'commons-io:commons-io:2.7'
implementation 'org.apache.commons:commons-collections4:4.4'
implementation 'org.apache.commons:commons-lang3:3.10'
// Kotlin
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

5
proguard-rules.pro vendored
View File

@@ -18,11 +18,6 @@
-dontobfuscate
# Allow obfuscation of android.support.v7.internal.view.menu.**
# to avoid problem on Samsung 4.2.2 devices with appcompat v21
# see https://code.google.com/p/android/issues/detail?id=78377
-keepnames class !android.support.v7.internal.view.menu.**,android.support.v7.** {*;}
-dontwarn org.spongycastle.**
-dontwarn org.apache.sshd.**
-dontwarn org.apache.mina.**

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#F67400"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM9,11L7,11L7,9h2v2zM13,11h-2L11,9h2v2zM17,11h-2L15,9h2v2z"/>
</vector>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.gridlayout.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:grid="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
@@ -13,7 +12,7 @@
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
android:contentDescription="@string/bigscreen_home"
app:srcCompat="@drawable/ic_home_black_24dp"
android:src="@drawable/ic_home_black_24dp"
android:theme="@style/DisableableButton" />
<ImageButton
@@ -23,7 +22,7 @@
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
android:contentDescription="@string/bigscreen_up"
app:srcCompat="@drawable/ic_arrow_upward_black_24dp"
android:src="@drawable/ic_arrow_upward_black_24dp"
android:theme="@style/DisableableButton" />
<ImageButton
@@ -33,7 +32,7 @@
grid:layout_row="0"
grid:layout_rowWeight="1"
android:contentDescription="@string/bigscreen_mic"
app:srcCompat="@drawable/ic_mic_black"
android:src="@drawable/ic_mic_black"
android:theme="@style/DisableableButton" />
<ImageButton
@@ -43,7 +42,7 @@
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
android:contentDescription="@string/bigscreen_left"
app:srcCompat="@drawable/ic_arrow_back_black_24dp"
android:src="@drawable/ic_arrow_back_black_24dp"
android:theme="@style/DisableableButton" />
<ImageButton
@@ -53,7 +52,7 @@
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
android:contentDescription="@string/bigscreen_select"
app:srcCompat="@drawable/ic_keyboard_return_black_24dp"
android:src="@drawable/ic_keyboard_return_black_24dp"
android:theme="@style/DisableableButton" />
<ImageButton
@@ -63,7 +62,7 @@
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
android:contentDescription="@string/bigscreen_right"
app:srcCompat="@drawable/ic_arrow_forward_black_24dp"
android:src="@drawable/ic_arrow_forward_black_24dp"
android:theme="@style/DisableableButton" />
<ImageButton
@@ -73,6 +72,6 @@
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
android:contentDescription="@string/bigscreen_down"
app:srcCompat="@drawable/ic_arrow_downward_black_24dp"
android:src="@drawable/ic_arrow_downward_black_24dp"
android:theme="@style/DisableableButton" />
</androidx.gridlayout.widget.GridLayout>

View File

@@ -32,5 +32,5 @@
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:elevation="@dimen/fab_elevation"
app:srcCompat="@drawable/ic_add"/>
android:src="@drawable/ic_add"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -87,7 +87,7 @@
android:paddingLeft="0dip"
android:paddingRight="8dip"
android:paddingStart="0dip"
app:srcCompat="@drawable/ic_error_outline_48dp"
android:src="@drawable/ic_error_outline_48dp"
app:tint="?attr/colorHighContrast"
tools:ignore="UnusedAttribute"/>

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/shutdown"
android:layout_width="fill_parent"
android:layout_height="75dp"
android:layout_gravity="center"
android:adjustViewBounds="false"
android:baselineAlignBottom="true"
android:clickable="false"
android:text="@string/power_shutdown"
android:theme="@style/DisableableButton" />
<Button
android:id="@+id/suspend"
android:layout_width="fill_parent"
android:layout_height="75dp"
android:layout_gravity="center"
android:adjustViewBounds="false"
android:baselineAlignBottom="true"
android:clickable="false"
android:text="@string/power_suspend"
android:theme="@style/DisableableButton" />
<Button
android:id="@+id/lock"
android:layout_width="fill_parent"
android:layout_height="75dp"
android:layout_gravity="center"
android:adjustViewBounds="false"
android:baselineAlignBottom="true"
android:clickable="false"
android:text="@string/power_lock"
android:theme="@style/DisableableButton" />
</LinearLayout>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/mpris_control_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
@@ -33,7 +32,7 @@
android:layout_weight="0.25"
android:layout_marginRight="3dp"
android:layout_marginEnd="3dp"
app:srcCompat="@drawable/ic_previous_black"
android:src="@drawable/ic_previous_black"
android:theme="@style/DisableableButton" />
<ImageButton
@@ -44,7 +43,7 @@
android:layout_marginStart="3dp"
android:layout_weight="0.25"
android:contentDescription="@string/mpris_ff"
app:srcCompat="@drawable/ic_next_black"
android:src="@drawable/ic_next_black"
android:theme="@style/DisableableButton" />
</LinearLayout>

View File

@@ -5,7 +5,7 @@
android:layout_height="match_parent">
<ListView
android:id="@+id/runcommandslist"
android:id="@+id/run_commands_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="4dp"
@@ -18,13 +18,13 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
app:srcCompat="@drawable/ic_action_image_edit_24dp"
android:src="@drawable/ic_action_image_edit_24dp"
app:backgroundTint="@color/primary"
app:layout_anchor="@id/runcommandslist"
app:layout_anchor="@id/run_commands_list"
app:layout_anchorGravity="bottom|end" />
<TextView
android:id="@+id/addcomand_explanation"
android:id="@+id/add_comand_explanation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"

View File

@@ -27,7 +27,7 @@
android:background="@android:color/transparent"
android:contentDescription="@string/mute"
android:scaleType="fitXY"
app:srcCompat="@drawable/ic_volume_black"
android:src="@drawable/ic_volume_black"
app:tint="?attr/colorHighContrast" />
<SeekBar

View File

@@ -21,7 +21,7 @@
android:layout_marginLeft="12dp"
android:layout_marginStart="12dp"
android:contentDescription="@string/device_icon_description"
app:srcCompat="@drawable/ic_device_laptop_32dp"
android:src="@drawable/ic_device_laptop_32dp"
app:tint="?attr/colorControlNormal"/>
<LinearLayout

View File

@@ -46,7 +46,7 @@
android:baselineAlignBottom="true"
android:clickable="false"
android:contentDescription="@string/mpris_play"
app:srcCompat="@drawable/ic_play_black"
android:src="@drawable/ic_play_black"
android:theme="@style/DisableableButton" />
<LinearLayout
@@ -61,7 +61,7 @@
android:layout_height="fill_parent"
android:layout_weight="0.25"
android:contentDescription="@string/mpris_previous"
app:srcCompat="@drawable/ic_previous_black"
android:src="@drawable/ic_previous_black"
android:theme="@style/DisableableButton" />
<ImageButton
@@ -70,7 +70,7 @@
android:layout_height="fill_parent"
android:layout_weight="0.25"
android:contentDescription="@string/mpris_rew"
app:srcCompat="@drawable/ic_rewind_black"
android:src="@drawable/ic_rewind_black"
android:theme="@style/DisableableButton" />
<ImageButton
@@ -79,7 +79,7 @@
android:layout_height="fill_parent"
android:layout_weight="0.25"
android:contentDescription="@string/mpris_stop"
app:srcCompat="@drawable/ic_stop"
android:src="@drawable/ic_stop"
android:theme="@style/DisableableButton" />
@@ -89,7 +89,7 @@
android:layout_height="fill_parent"
android:layout_weight="0.25"
android:contentDescription="@string/mpris_ff"
app:srcCompat="@drawable/ic_fast_forward_black"
android:src="@drawable/ic_fast_forward_black"
android:theme="@style/DisableableButton" />
<ImageButton
@@ -98,7 +98,7 @@
android:layout_height="fill_parent"
android:layout_weight="0.25"
android:contentDescription="@string/mpris_next"
app:srcCompat="@drawable/ic_next_black"
android:src="@drawable/ic_next_black"
android:theme="@style/DisableableButton" />
</LinearLayout>
@@ -155,7 +155,7 @@
android:layout_weight="0"
android:contentDescription="@string/mpris_volume"
android:maxWidth="30dip"
app:srcCompat="@drawable/ic_volume_black"
android:src="@drawable/ic_volume_black"
app:tint="?attr/colorHighContrast" />

View File

@@ -6,7 +6,7 @@
android:padding="20dp">
<ListView
android:id="@+id/runcommandsdevicelist"
android:id="@+id/run_commands_device_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="4dp"

View File

@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:background="#FFFFFF"
android:background="@color/on_secondary"
android:theme="@style/KdeConnectTheme"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/runcommandWidgetTitleHeader"
@@ -29,7 +30,7 @@
</LinearLayout>
<ListView
android:id="@+id/runcommandslist"
android:id="@+id/run_commands_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="4dp"

334
res/values-az/strings.xml Normal file
View File

@@ -0,0 +1,334 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Hər hansı bir cihaz qoşulmayıb</string>
<string name="foreground_notification_devices">Qoşulub: %s</string>
<string name="foreground_notification_send_clipboard">Mübadilə buferindəkini göndərmək</string>
<string name="pref_plugin_telephony">Telefon bildirişi</string>
<string name="pref_plugin_telephony_desc">Gələn zəng bildirişlərini göndərmək</string>
<string name="pref_plugin_battery">Batareya məlumatı</string>
<string name="pref_plugin_battery_desc">Batareya vəziyyətini vaxtaşırı bildirmək</string>
<string name="pref_plugin_sftp">Fayl sistemi açılır</string>
<string name="pref_plugin_sftp_desc">Bu cihazın fayl sisteminə baxmağa icazə vermək</string>
<string name="pref_plugin_clipboard">Mübadilə Buferini eyniləşdirmək</string>
<string name="pref_plugin_clipboard_desc">Mübadilə buferi tərkiblərini paylaşmaq</string>
<string name="pref_plugin_clipboard_sent">Mübadilə buferini göndərmək</string>
<string name="pref_plugin_mousepad">Məsafədən yazmaq</string>
<string name="pref_plugin_mousepad_desc">Telefon və Planşetinizi toxunma paneli və klaviatura kimi istifadə edin</string>
<string name="pref_plugin_presenter">Məsafədən slayd göstərişi</string>
<string name="pref_plugin_presenter_desc">Cihazınızı təqdimatda slaydları dəyişmək üçün istifadə edin</string>
<string name="pref_plugin_remotekeyboard">Məsafədən düyməyə basmanı almaq</string>
<string name="pref_plugin_remotekeyboard_desc">Düyməyə basmanı məsafədəki qurğudan almaq</string>
<string name="pref_plugin_mpris">Multimedia idarəsi</string>
<string name="pref_plugin_mpris_desc">Media oynadıcınızı idarə etməyə imkan verir</string>
<string name="pref_plugin_runcommand">Əmr başlatmaq</string>
<string name="pref_plugin_runcommand_desc">Əmrləri telefon və ya planşetiniz ilə məsafədən başlatmaq</string>
<string name="pref_plugin_contacts">Kontaktları eyniləşdirmək</string>
<string name="pref_plugin_contacts_desc">Cihazın kontak kitabçasını eyniləşdirməyə icazə vermək</string>
<string name="pref_plugin_ping">Dümsükləmək</string>
<string name="pref_plugin_ping_desc">Siqnal göndərmək və almaq</string>
<string name="pref_plugin_notifications">Bildiriş eyniləşdirməsi</string>
<string name="pref_plugin_notifications_desc">Bildirişləri digər cihazlardan əldə etmək</string>
<string name="pref_plugin_receive_notifications">Bildirişləri almaq</string>
<string name="pref_plugin_receive_notifications_desc">Bildirişləri digər cihazlardan almaq və onları Android\'də göstərmək</string>
<string name="pref_plugin_sharereceiver">Paylaşmaq və Almaq</string>
<string name="pref_plugin_sharereceiver_desc">Faylları və URL\'ları cihazlarla paylaşmaq</string>
<string name="device_list_empty">Cihaz yoxdur</string>
<string name="ok">OK</string>
<string name="sad_ok">OK :(</string>
<string name="cancel">İmtina</string>
<string name="open_settings">Ayarları açmaq</string>
<string name="no_permissions">Bildirişlər almağa icazə verməniz lazımdır</string>
<string name="no_permission_mprisreceiver">Media oynadıcını idarə etmək üçün bildirişlərə girişə icazə verməniz lazımdır</string>
<string name="no_permissions_remotekeyboard">Düymə basılmalarını almaq üçün KDE Connect Klaviaturasını aktiv etməlisiniz</string>
<string name="send_ping">Dümsükləmək</string>
<string name="open_mpris_controls">Multimedia idarə edilməsi</string>
<string name="remotekeyboard_editing_only_title">Məsafədəki düymələri yalnız redaktə edərkən idarə edin</string>
<string name="remotekeyboard_not_connected">Aktiv bir uzaq klaviatura bağlantısı yoxdur, onu kdeconnect-də yaradın</string>
<string name="remotekeyboard_connected">Uzaq klaviatura bağlantısını aktiv edin</string>
<string name="remotekeyboard_multiple_connections">Birdən çox uzaq klaviatura bağlantısı var, tənzimləmək üçün cihazı seçin</string>
<string name="open_mousepad">Məsafədən yazmaq</string>
<string name="mousepad_info">Siçan kursorunu hərəkət etdirmək üçün barmağı ekranda sürüşdürün. Klik üçün ekrana vurun, sağ və orta siçan düymələri üçün iki/üç barmaqla toxunuş edin. Sürüşdürmək üçün iki barmaqdan istifadə edin. Tutub saxlamaq üçün basın saxlayın.</string>
<string name="mousepad_double_tap_settings_title">İki barmaq toxunuşu əməlini təyin edin</string>
<string name="mousepad_triple_tap_settings_title">Üç barmaq toxunuşu əməlini təyin edin</string>
<string name="mousepad_sensitivity_settings_title">Toxunma panelinin həsassləğını təyin edin</string>
<string name="mousepad_acceleration_profile_settings_title">Kursorun sürətini təyin edin</string>
<string name="mousepad_scroll_direction_title">Sürüşdürmənin əks istiqaməti</string>
<string-array name="mousepad_tap_entries">
<item>Sağ klik</item>
<item>Orta klik</item>
<item>Heç biri</item>
</string-array>
<string-array name="mousepad_sensitivity_entries">
<item>Ən yavaş</item>
<item>Ən yavaşın üstü</item>
<item>Standart</item>
<item>Standartın üstü</item>
<item>Ən tez</item>
</string-array>
<string-array name="mousepad_acceleration_profile_entries">
<item>Sürətlənmə yoxdur</item>
<item>Ən zəif</item>
<item>Zəif</item>
<item>Orta</item>
<item>Güclü</item>
<item>Ən güclü</item>
</string-array>
<string name="category_connected_devices">Qoşulmuş cihazlar</string>
<string name="category_not_paired_devices">Mövcud cihazlar</string>
<string name="category_remembered_devices">Yadda saxlanılan cihazlar</string>
<string name="device_menu_plugins">Plaqin ayarları</string>
<string name="device_menu_unpair">Ayırmaq</string>
<string name="pair_new_device">Yeni cihaz qoşmaq</string>
<string name="unknown_device">Naməlum Cihaz</string>
<string name="error_not_reachable">Cihaz əlçatmazdır</string>
<string name="error_already_paired">Cihaz artıq qoşulub</string>
<string name="error_could_not_send_package">Paket göndərilə bilmədi</string>
<string name="error_timed_out">Vaxt bitdi</string>
<string name="error_canceled_by_user">İstifadəçi ləğv etdi</string>
<string name="error_canceled_by_other_peer">Digər istifadəçi ləğv etdi</string>
<string name="encryption_info_title">Şifrələmə məlumatı</string>
<string name="encryption_info_msg_no_ssl">Digər cihaz köhnə şifrələmə metodu istifadə edən KDE Connect\'in sonuncu versiyasını istifadə etmir.</string>
<string name="my_device_fingerprint">Cihazınızın SHA1 şifrə izi:</string>
<string name="remote_device_fingerprint">Uzaq cihazın SHA1 şifrə izi:</string>
<string name="pair_requested">Qoşulma soruşuldu</string>
<string name="pairing_request_from">%1s tərəfindən qoşulma sorğusu</string>
<plurals name="incoming_file_title">
<item quantity="one">%1$d fayl %2$s\'dn alınır</item>
<item quantity="other">%1$d fayl %2$s\'dn alınır</item>
</plurals>
<plurals name="incoming_files_text">
<item quantity="one">Fayl: %1s</item>
<item quantity="other">(Fayl %2$d %3$d) : %1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">%1$d fayl %2$s\'a(ə) göndərilir</item>
<item quantity="other">%1$d fayl %2$s\'a(ə) göndərilir</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Fayl: %1$s</item>
<item quantity="other">(Fayl %2$d %3$d) : %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Fayl %1$s\'dn alındı</item>
<item quantity="other">%2$d fayl %1$s\'dn alındı</item>
</plurals>
<plurals name="received_files_fail_title">
<item quantity="one">Faylın %1$sdn alınması baş tutmadı</item>
<item quantity="other">%3$d-n %2$d faylının %1$s\'dn alınması baş tutmadı</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Faylı %1$s\'a(ə) göndərmək</item>
<item quantity="other">%2$d faylı %1$s göndərmək</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">faylı %1$s\'a(ə) göndərmək baş tutmadı</item>
<item quantity="other">%3$d-n %2$d faylını %1$s\'a(ə) göndərək baş tutmadı</item>
</plurals>
<string name="tap_to_open">Açmaq üçün toxunun</string>
<string name="received_file_text">\'%1s\' açmaq üçün toxunun</string>
<string name="cannot_create_file">%s faylı yaradıla bilmir</string>
<string name="tap_to_answer">Cavab üçün toxunun</string>
<string name="right_click">Sağ Klik göndərmək</string>
<string name="middle_click">Orta Klik göndərmək</string>
<string name="show_keyboard">Klaviaturanı göstərmək</string>
<string name="device_not_paired">Cihaz qoşulmayıb</string>
<string name="request_pairing">Qoşulma tələbi</string>
<string name="pairing_accept">Qəbul etmək</string>
<string name="pairing_reject">İmtina etmək</string>
<string name="settings">Ayarlar</string>
<string name="mpris_play">Səsləndirmək</string>
<string name="mpris_pause">Fasilə</string>
<string name="mpris_previous">Əvvəlki</string>
<string name="mpris_rew">Geri almaq</string>
<string name="mpris_ff">Sürətli irəli</string>
<string name="mpris_next">Sonrakı</string>
<string name="mpris_volume">Səs səviyyəsi</string>
<string name="mpris_time_settings_title">İrəli/Geri düymələri</string>
<string name="mpris_time_settings_summary">Basıldığında sürətli irəli/geriyə üçün vaxtı ayarlamaq</string>
<string-array name="mpris_time_entries">
<item>10 saniyə</item>
<item>20 saniyə</item>
<item>30 saniyə</item>
<item>1 dəqiqə</item>
<item>2 dəqiqə</item>
</string-array>
<string name="mpris_notification_settings_title">Media idarəetmə bildirişlərini göstərmək</string>
<string name="mpris_notification_settings_summary">KDE Connect açmadan media oynadıcınızın idarəsinə icazə vermək</string>
<string name="share_to">Paylaşmaq...</string>
<string name="protocol_version_newer">Bu cihaz yeni protokol versiyası istifadə edir</string>
<string name="plugin_settings_with_name">%s ayarları</string>
<string name="invalid_device_name">Səhv cihaz adı</string>
<string name="shareplugin_text_saved">Mətn alındı, mübadilə buferində saxlanıldı</string>
<string name="custom_devices_settings">Fərdi cihaz siyahısı</string>
<string name="custom_device_list">Cihazı İP ilə əlavə etmək</string>
<string name="custom_device_deleted">Fərdi cihaz silindi</string>
<string name="custom_device_list_help">Əgər cihazınız avtomatik aşkar edilməmişsə, Üzən Fəaliyyət Düyməsinə vuraraq onun onun İP ünvanını və host adını daxil edə bilərsiniz</string>
<string name="custom_device_fab_hint">Cihaz əlavə etmək</string>
<string name="undo">Geriyə qaytarmaq</string>
<string name="share_notification_preference">Səsli bildirişlər</string>
<string name="share_notification_preference_summary">Fayl qəbul edilərkən vibrasiya və səsli bildiriş</string>
<string name="share_destination_customize">Hədəf qovluğunu təyin etmək</string>
<string name="share_destination_customize_summary_disabled">Alınan fayllar Yüklənənlər\'də saxlanılacaq</string>
<string name="share_destination_customize_summary_enabled">Fayllar aşağıdakı qovluqda saxlanılacaq</string>
<string name="share_destination_folder_preference">Hədəf qovluğu</string>
<string name="share">Paylaşmaq</string>
<string name="share_received_file">\"%s\" paylaşmaq</string>
<string name="title_activity_notification_filter">Bildiriş filtri</string>
<string name="filter_apps_info">Bildirişlər seçilmiş tətbiqlər üçün eyniləşdiriləcəkdir</string>
<string name="sftp_sdcard_num">SD kart %d</string>
<string name="sftp_sdcard">SD kart</string>
<string name="sftp_readonly">(yalnız oxumaq)</string>
<string name="sftp_camera">Kamera şəkilləri</string>
<string name="add_device_dialog_title">Cihaz əlavə etmək</string>
<string name="add_device_hint">Host_adı və ya İP ünvanı</string>
<string name="sftp_preference_detected_sdcards">SD kartı aşkar edildi</string>
<string name="sftp_preference_edit_sdcard_title">SD karta düzəliş</string>
<string name="sftp_preference_configured_storage_locations">Saxlama yerini tənzimləmək</string>
<string name="sftp_preference_add_storage_location_title">Saxlama yeri əlavə etmək</string>
<string name="sftp_preference_edit_storage_location">Saxlama yerinə düzəliş</string>
<string name="sftp_preference_add_camera_shortcut">Kamera qovluğu qısayolu yaratmaq</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Kamera qovluğuna qısayolu əlavə etmək</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Kamera qovluğuna qısayol əlavə etməmək</string>
<string name="sftp_storage_preference_storage_location">Saxlama yeri</string>
<string name="sftp_storage_preference_storage_location_already_configured">Bu yer artıq tənzimlənib</string>
<string name="sftp_storage_preference_click_to_select">klikləyərək seçin</string>
<string name="sftp_storage_preference_display_name">Görünən adı</string>
<string name="sftp_storage_preference_display_name_already_used">Bu ad artıq istifadə olunub</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Görünən ad boş ola bilməz</string>
<string name="sftp_action_mode_menu_delete">Silmək</string>
<string name="sftp_no_sdcard_detected">SD kart aşkar edilmədi</string>
<string name="sftp_no_storage_locations_configured">Saxlama yeri tənzimlənməyib</string>
<string name="sftp_saf_permission_explanation">Fayllara uzaqdan daxil olmaq üçün saxlama yerlərini konfiqurasiya etməlisiniz</string>
<string name="no_players_connected">Pleyer tapılmadı</string>
<string name="send_files">Faylları göndərmək</string>
<string name="pairing_title">KDE Connect Cihazları</string>
<string name="pairing_description">Eyni şəbəkədəki KDE Connect işləyən digər cihazlar burada görünməlidir</string>
<string name="device_rename_title">Cihazın adını dəyişmək</string>
<string name="device_rename_confirm">Adını Dəyişmək</string>
<string name="refresh">Təzələmək</string>
<string name="unreachable_description">Bu qoşulan cihaz əlçatan deyil. Bu cihazın sizinki ilə eyni şəbəkəyə qoşulduğundan əmin olun.</string>
<string name="no_wifi">"Siz Wi-Fi şəbəkəsinə qoşulmamısınız, belə ki, siz digər cihazları görə bilməzsiniz. Wi-Fi\'ı aktiv etmək üçün buraya vurun."</string>
<string name="on_non_trusted_message">Etibarlı şəbəkədə deyil, avtomatik aşkar edilmə söndürüldü.</string>
<string name="no_file_browser">Fayllara baxma vasitəsi quraşdırılmayıb.</string>
<string name="pref_plugin_telepathy">SMS göndərmək</string>
<string name="pref_plugin_telepathy_desc">İş Masanızdan mətn ismarıcı göndərin</string>
<string name="pref_plugin_telepathy_mms">MMS göndərmək</string>
<string name="pref_plugin_telepathy_mms_desc">KDE Connect\'dən MMS göndərmək üçün, onu standart SMS tətbiqi kimi təyin etməniz lazımdır.</string>
<string name="findmyphone_title">Telefonumu tapmaq</string>
<string name="findmyphone_title_tablet">Planşetimi tapmaq</string>
<string name="findmyphone_title_tv">TV-ni tapmaq</string>
<string name="findmyphone_description">Cihaz zəng çalır, beləliklə onu tapırsınız</string>
<string name="findmyphone_found">Onu tapmaq</string>
<string name="open">Açmaq</string>
<string name="close">Bağlamaq</string>
<string name="plugins_need_permission">Bəzi qoşmaların işləməsi üçün icazələr lazımdır (daha çox məlumat üçün toxunun):</string>
<string name="permission_explanation">Bu qoşmanın işləməsi üçün icazələr lazımdır</string>
<string name="optional_permission_explanation">Bütün funksiyaların işləməsi üçün əlavə icazələr verməlisiniz</string>
<string name="plugins_need_optional_permission">Bəzi qoşmalarda icazə çatışmamazlığı səbəbindən bir sıra imkanlar söndürülmüşdür (daha çox məlumat üçün toxunun)</string>
<string name="share_optional_permission_explanation">Paylaşılan faylları qəbul etmək üçün saxlama qovluğu seçməlisiniz</string>
<string name="telepathy_permission_explanation">İş Masanızdan telefonunuzdakı SMS\'ləri oxumaq və SMS göndərmək üçün SMS\'ə girişə icazə verməlisiniz</string>
<string name="telephony_permission_explanation">İş Masanızda telefon zənglərini görmək üçün Zəng Tarixşəsinə və Zəng yığımı vəziyyətinə icazə verməlisiniz</string>
<string name="telephony_optional_permission_explanation">Telefon nömrəsi əvəzinə kontaktın adını görmək üçün Kontakt Kitabçasına girişə icazə verməlisiniz</string>
<string name="contacts_permission_explanation">İş Masası vasitəsi ilə kontaktlar kitabçasını paylaşmaq üçün kontaktlara girişə icazə verməlisiniz</string>
<string name="select_ringtone">Zəng səsini seçmək</string>
<string name="telephony_pref_blocked_title">Əngəllənmiş nömrələr</string>
<string name="telephony_pref_blocked_dialog_desc">Bu nömrədən SMS və zənglər göstərilməsin. Hər sətirdə bir nömrə göstərin</string>
<string name="mpris_coverart_description">Mövcud medianın üz qabığı</string>
<string name="device_icon_description">Cihaın nişanı</string>
<string name="settings_icon_description">Ayarlar nişanı</string>
<string name="presenter_fullscreen">Tam_Ekran</string>
<string name="presenter_exit">Təqdimatdan çıxış</string>
<string name="presenter_lock_tip">Siz cihazınızı kilidləyə və səs düymələri ilə əvvəlki/sonrakı slayda keçid edə bilərsiniz</string>
<string name="add_command">Əmr əlavə etmək</string>
<string name="addcommand_explanation">Əmrlər qeyd edilməyib</string>
<string name="addcommand_explanation2">Sİz KDE Connect Sistem Ayarların\'da yeni əmr əlavə edə bilərsiniz</string>
<string name="add_command_description">İş Masasında yeni əmr əlavə edə bilərsiniz</string>
<string name="pref_plugin_mprisreceiver">Media Pleyer İdarəsi</string>
<string name="pref_plugin_mprisreceiver_desc">Telefonunuzun media pleyerlərini digər cihazdan idarə edin</string>
<string name="notification_channel_default">Digər bildirişlər</string>
<string name="notification_channel_persistent">Daimi göstərici</string>
<string name="notification_channel_media_control">Media İdarəsi</string>
<string name="notification_channel_filetransfer">Fayl göndərişi</string>
<string name="notification_channel_high_priority">Yüksək üstünlük</string>
<string name="notification_channel_sms_mms">Yeni İsmarıc</string>
<string name="mpris_stop">Cari pleyeri dayandırmaq</string>
<string name="copy_url_to_clipboard">URL\'u mübadilə buferinə kopyalamaq</string>
<string name="clipboard_toast">Mübadilə buferinə kopyalandı</string>
<string name="runcommand_notreachable">Cihaz əlçatan deyil</string>
<string name="runcommand_notpaired">Cihaz qoşulmayıb</string>
<string name="runcommand_nosuchdevice">Belə cihaz yoxdur</string>
<string name="runcommand_noruncommandplugin">Bu cihazda aktiv edilmiş Əmr Başlatma Əlavəsi yoxdur</string>
<string name="pref_plugin_findremotedevice">Uzaq cihazı tapmaq</string>
<string name="pref_plugin_findremotedevice_desc">Uzaq cihazınıza zəng göndərin</string>
<string name="ring">Zəng</string>
<string name="pref_plugin_systemvolume">Sistem səs səviyyəsi</string>
<string name="pref_plugin_systemvolume_desc">Uzaq cihazın sistem səs səviyəsini idarə etmək</string>
<string name="mute">Susdurmaq</string>
<string name="all">Hamısı</string>
<string name="devices">Cihazlar</string>
<string name="settings_rename">Cihazın adı</string>
<string name="settings_dark_mode">Qaranlıq Görünüş</string>
<string name="settings_more_settings_title">Digər ayarlar</string>
<string name="settings_more_settings_text">Hər cihaz üçün ayarları cihazın \'Qoşma Ayarları\' bölməsində tapa bilərsiniz.</string>
<string name="setting_persistent_notification">Daimi bildirişi göstərmək</string>
<string name="setting_persistent_notification_oreo">Daimi bildiriş</string>
<string name="setting_persistent_notification_description">Bildiriş ayarlarında aktiv/deaktiv etmək üçün toxunun</string>
<string name="extra_options">Əlavə seçimlər</string>
<string name="privacy_options">Məxfilik seçimləri</string>
<string name="set_privacy_options">Məxfilik seçimlərini quraşdırın</string>
<string name="block_contents">Bildirişlərin məzmununu bloklamaq</string>
<string name="block_images">Bildirişlərin şəkillərini bloklamaq</string>
<string name="notification_channel_receivenotification">Digar cihazlardan bilsirişlər</string>
<string name="take_picture">Kameranı açmaq</string>
<string name="plugin_photo_desc">Şəkillər çəkmək və göndərməyi asanlaşdırmaq üçün kamera tətbiqini başladın</string>
<string name="no_app_for_opening">Bu faylı açmaq üçün uyğun tətbiq tapılmadı</string>
<string name="remote_keyboard_service">KDE Connect Uzaq Klaviaturası</string>
<string name="presenter_pointer">Kursor</string>
<string name="trusted_networks">Etibarlı şəbəkələr</string>
<string name="trusted_networks_desc">Bilinən şəbəkələrin avtomatik aşkar edilməsini məhdudlaşdırmaq</string>
<string name="add_trusted_network">%1s əlavə etmək</string>
<string name="empty_trusted_networks_list_text">Hələlik hər hansı bir etibarlı şəbəkə əlavə edilməyib</string>
<string name="allow_all_networks_text">Hamısına icazə vermək</string>
<string name="location_permission_needed_title">İcazə tələb edlir</string>
<string name="location_permission_needed_desc">Android, Sizin WiFi şəbəkənizi müəyyənləşdirmək üçün icazə tələb edir</string>
<string name="clipboard_android_x_incompat">Android 10 bütün tətbiqlər üçün mübadilə buferinə girişi aradan qaldırıb. Bu qoşma söndürüləcək.</string>
<string name="mpris_open_url">Burada oxutmağa davam edin</string>
<string name="cant_open_url">Oxutmanı davam etdirmək üçün URL açıla bilmir</string>
<string name="bigscreen_home">Ev</string>
<string name="bigscreen_up">Yuxarı</string>
<string name="bigscreen_left">Sola</string>
<string name="bigscreen_select">Seçim</string>
<string name="bigscreen_right">Sağa</string>
<string name="bigscreen_down">Aşağı</string>
<string name="bigscreen_mic">Mik</string>
<string name="pref_plugin_bigscreen">Böyük ekran məsafədən idarəsi</string>
<string name="pref_plugin_bigscreen_desc">Plasma Böyük Ekran\'ını cihazınızla məsafədən idarə edin</string>
<string name="bigscreen_optional_permission_explanation">Telefonunuzun mikrofon girişini paylaşmaq üçün telefonun səs girişinə icazə verməlisiniz</string>
<string name="bigscreen_speech_extra_prompt">Danışıq</string>
<string name="message_reply_label">CAVAB</string>
<string name="mark_as_read_label">OXUNMUŞ KİMİ İŞARƏLƏMƏK</string>
<string name="user_display_name">Siz</string>
<string name="set_default_sms_app_title">MMS göndərmək</string>
<string name="set_group_message_as_mms_title">MMS qrupu göndərmək</string>
<string name="set_long_text_as_mms_title">Uzun mətni MMS kimi göndərmək</string>
<string name="convert_to_mms_after_title">MMS\'ə çevirmək</string>
<string-array name="convert_to_mms_after_entries">
<item>Bir ismarıcdan sonra</item>
<item>İki ismarıcdan sonra</item>
<item>Üş ismarıcdan sonra1</item>
<item>Dörd ismarıcdan sonra1</item>
<item>Beş ismarıcdan sonra1</item>
</string-array>
<string name="theme_dialog_title">Mövzunu seçin</string>
<string-array name="theme_list">
<item>Batareyaya Qənaət tərəfindən təyin edilr</item>
<item>İşıqlı</item>
<item>Qaranlıq</item>
</string-array>
<string-array name="theme_list_v28">
<item>Standart Sistem</item>
<item>İşıqlı</item>
<item>Qaranlıq</item>
</string-array>
</resources>

View File

@@ -129,8 +129,8 @@
<string name="received_file_text">Toqueu per a obrir «%1s»</string>
<string name="cannot_create_file">No s\'ha pogut crear el fitxer %s</string>
<string name="tap_to_answer">Toqueu per a respondre</string>
<string name="right_click">Envia un clic del botó dret</string>
<string name="middle_click">Envia un clic del botó del mig</string>
<string name="right_click">Envia un clic dret</string>
<string name="middle_click">Envia un clic del mig</string>
<string name="show_keyboard">Mostra el teclat</string>
<string name="device_not_paired">El dispositiu no està aparellat</string>
<string name="request_pairing">Demana aparellar</string>
@@ -226,7 +226,7 @@
<string name="permission_explanation">Aquest connector necessita permisos per a funcionar</string>
<string name="optional_permission_explanation">Us caldrà concedir permisos extres per a accedir a totes les característiques</string>
<string name="plugins_need_optional_permission">Alguns connectors tenen característiques desactivades per la falta de permís (toqueu per a més informació):</string>
<string name="share_optional_permission_explanation">Per a compartir fitxers entre el telèfon i l\'escriptori, haureu de donar accés a l\'emmagatzematge del telèfon</string>
<string name="share_optional_permission_explanation">Per a rebre fitxers compartits cal triar un directori de destinació</string>
<string name="telepathy_permission_explanation">Per a llegir i escriure SMS des de l\'escriptori, haureu de donar permís als SMS</string>
<string name="telephony_permission_explanation">Per a veure les trucades telefòniques des de l\'escriptori, haureu de donar permís d\'accés al registre de trucades telefòniques i a l\'estat del telèfon</string>
<string name="telephony_optional_permission_explanation">Per a veure un nom de contacte en comptes d\'un número de telèfon, haureu de donar permís als contactes del telèfon</string>
@@ -251,12 +251,13 @@
<string name="notification_channel_media_control">Control multimèdia</string>
<string name="notification_channel_filetransfer">Transferència de fitxers</string>
<string name="notification_channel_high_priority">Prioritat alta</string>
<string name="notification_channel_sms_mms">Missatge nou</string>
<string name="mpris_stop">Atura el reproductor actual</string>
<string name="copy_url_to_clipboard">Copia l\'URL al porta-retalls</string>
<string name="clipboard_toast">Copiat al porta-retalls</string>
<string name="runcommand_notreachable">No es pot accedir al dispositiu</string>
<string name="runcommand_notpaired">El dispositiu no està aparellat</string>
<string name="runcommand_nosuchdevice">No existeix aquest dispositiu</string>
<string name="runcommand_nosuchdevice">El dispositiu no existeix</string>
<string name="runcommand_noruncommandplugin">Aquest dispositiu no té el connector d\'executar ordres activat</string>
<string name="pref_plugin_findremotedevice">Cerca el dispositiu remot</string>
<string name="pref_plugin_findremotedevice_desc">Truca al dispositiu remot</string>
@@ -290,7 +291,7 @@
<string name="empty_trusted_networks_list_text">Encara no heu afegit cap xarxa de confiança</string>
<string name="allow_all_networks_text">Permet totes</string>
<string name="location_permission_needed_title">Es requereix permís</string>
<string name="location_permission_needed_desc">L\'Android requereix el permís d\'ubicació per a identificar la xarxa WiFi</string>
<string name="location_permission_needed_desc">L\'Android requereix el permís d\'ubicació per a identificar la xarxa Wi-Fi</string>
<string name="clipboard_android_x_incompat">L\'Android 10 ha tret l\'accés al porta-retalls a totes les aplicacions. Aquest connector estarà inhabilitat.</string>
<string name="mpris_open_url">Continua reproduint aquí</string>
<string name="cant_open_url">No s\'ha pogut obrir l\'URL per a continuar reproduint</string>
@@ -305,16 +306,13 @@
<string name="pref_plugin_bigscreen_desc">Useu el dispositiu com a remot per a la Bigscreen del Plasma</string>
<string name="bigscreen_optional_permission_explanation">Per a compartir l\'entrada del micròfon del telèfon cal donar accés a l\'entrada d\'àudio del telèfon</string>
<string name="bigscreen_speech_extra_prompt">Veu</string>
<string name="message_reply_label">RESPON</string>
<string name="mark_as_read_label">MARCA COM A LLEGIT</string>
<string name="user_display_name">Vós</string>
<string name="set_default_sms_app_title">Envia un MMS</string>
<string name="set_group_message_as_mms_title">Envia un MMS de grup</string>
<string name="set_long_text_as_mms_title">Envia un text llarg com a MMS</string>
<string name="convert_to_mms_after_title">Converteix a MMS</string>
<string name="sms_pref_set_mmsc_dialog_desc">Estableix el MMSC</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Estableix el servidor intermediari de MMS</string>
<string name="sms_pref_set_mms_proxy_title">Servidor intermediari de MMS</string>
<string name="sms_pref_set_mms_port_dialog_desc">Estableix el port de MMS</string>
<string name="sms_pref_set_mms_port_title">Port de MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>Després d\'un missatge</item>
<item>Després de dos missatges</item>

View File

@@ -242,7 +242,6 @@
<string name="permission_explanation">Tento modul potřebuje pro práci povolení</string>
<string name="optional_permission_explanation">Pro zpřístupnění všech funkcí potřebujete další oprávnění</string>
<string name="plugins_need_optional_permission">Některé moduly mají vypnuté vlastnosti, kvůli nedostatečným oprávněním (ťukněte pro více informací):</string>
<string name="share_optional_permission_explanation">Pro sdílení souborů mezi telefonem a počítačem potřebujete udělit oprávnění k úložišti telefonu</string>
<string name="telepathy_permission_explanation">Pro čtení a psaní SMS z počítače musíte udělit oprávnění k SMS</string>
<string name="telephony_permission_explanation">Pro zobrazení telefonátů v počítači musíte udělit oprávnění k záznamům telefonování a stavu telefonu</string>
<string name="telephony_optional_permission_explanation">Pro zobrazení jména kontaktu u telefonního čísla je potřeba udělit oprávnění ke kontaktům v telefonu</string>
@@ -267,6 +266,7 @@
<string name="notification_channel_media_control">Ovládání médií</string>
<string name="notification_channel_filetransfer">Přenos souboru</string>
<string name="notification_channel_high_priority">Vysoká priorita</string>
<string name="notification_channel_sms_mms">Nová zpráva</string>
<string name="mpris_stop">Zastavit současný přehrávač</string>
<string name="copy_url_to_clipboard">Kopírovat URL do schránky</string>
<string name="clipboard_toast">Zkopírováno do schránky</string>
@@ -321,16 +321,13 @@
<string name="pref_plugin_bigscreen_desc">Používejte své zařízení jako ovladač pro Plasma Bigscreen</string>
<string name="bigscreen_optional_permission_explanation">Pro sdílení vstupu mikrofonu z vašeho telefonu je potřeba udělit přístup ke vstupnímu audio zařízení telefonu</string>
<string name="bigscreen_speech_extra_prompt">Mluvené slovo</string>
<string name="message_reply_label">ODPOVĚĎ</string>
<string name="mark_as_read_label">OZNAČIT JAKO PŘEČTENÉ</string>
<string name="user_display_name">Vy</string>
<string name="set_default_sms_app_title">Poslat MMS</string>
<string name="set_group_message_as_mms_title">Poslat skupinovou MMS</string>
<string name="set_long_text_as_mms_title">Poslat dlouhý text jako MMS</string>
<string name="convert_to_mms_after_title">Převést na MMS</string>
<string name="sms_pref_set_mmsc_dialog_desc">Nastavit MMSC</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Nastavit MMS proxy</string>
<string name="sms_pref_set_mms_proxy_title">MMS proxy</string>
<string name="sms_pref_set_mms_port_dialog_desc">Nastavit port MMS</string>
<string name="sms_pref_set_mms_port_title">Port MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>Po jedné zprávě</item>
<item>Po dvou zprávách</item>

View File

@@ -139,7 +139,6 @@
<string name="permission_explanation">Dette plugin kræver tilladelser for at virke</string>
<string name="optional_permission_explanation">Du skal give ekstra tilladelser for at aktivere alle funktioner</string>
<string name="plugins_need_optional_permission">Nogle plugins har deaktiverede funktioner pga. manglende tilladelser (tap for mere info):</string>
<string name="share_optional_permission_explanation">For at dele filer mellem din telefon og din desktop skal du give adgang til telefonens datalager.</string>
<string name="telepathy_permission_explanation">For at læse og skrive sms\'er fra din desktop, skal du give tilladelse til sms</string>
<string name="telephony_optional_permission_explanation">For at se et kontaktnavn i stedet for et telefonnummer, skal du give adgang til telefonens kontakter</string>
<string-array name="convert_to_mms_after_entries">

View File

@@ -219,7 +219,6 @@
<string name="permission_explanation">Dieses Modul benötigt zusätzliche Berechtigungen</string>
<string name="optional_permission_explanation">Es müssen weitere Berechtigungen erteilt werden, um alle Funktionen nutzen zu können</string>
<string name="plugins_need_optional_permission">Einige Module haben eingeschränkte Funktionen wegen fehlender Berechtigungen, tippen Sie für weitere Informationen:</string>
<string name="share_optional_permission_explanation">Um Dateien zwischen Rechner und Telefon auszutauschen, muss der Zugriff auf den Telefonspeicher gewährt werden</string>
<string name="telepathy_permission_explanation">Um SMS vom Rechner aus zu lesen und zu versenden, muss der Zugriff auf die SMS-Funktion gewährt werden</string>
<string name="telephony_permission_explanation">Um eingehende Anrufe auf der Arbeitsfläche anzuzeigen, muss der Zugriff auf die Anrufliste und den Telefonstatus gewährt werden</string>
<string name="telephony_optional_permission_explanation">Um einen Namen anstelle der Telefonnummer anzuzeigen, muss der Zugriff auf das Adressbuch gewährt werden</string>
@@ -280,6 +279,8 @@
<string name="trusted_networks">Vertrauenswürdiges Netzwerk</string>
<string name="add_trusted_network">%1s hinzufügen</string>
<string name="location_permission_needed_title">Berechtigung erforderlich</string>
<string name="bigscreen_right">Rechts</string>
<string name="set_default_sms_app_title">SMS senden</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>

View File

@@ -1,20 +1,30 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Δεν είναι συνδεδεμένο σε συσκευή</string>
<string name="foreground_notification_devices">Συνδεδεμένό σε: %s</string>
<string name="foreground_notification_send_clipboard">Αποστολή προχείρου</string>
<string name="pref_plugin_telephony">Ειδοποιήσεις τηλεφωνίας</string>
<string name="pref_plugin_telephony_desc">Αποστολή ειδοποιήσεων για εισερχόμενες κλήσεις</string>
<string name="pref_plugin_battery">Αναφορά μπαταρίας</string>
<string name="pref_plugin_battery_desc">Περιοδική αναφορά κατάστασης μπαταρίας</string>
<string name="pref_plugin_sftp">Αποκάλυψη συστήματος αρχείων</string>
<string name="pref_plugin_sftp_desc">Επιτρέπει την απομακρυσμένη περιήγηση του συστήματος αρχείων του κινητού</string>
<string name="pref_plugin_clipboard">Συγχρονισμός προχείρου</string>
<string name="pref_plugin_clipboard_desc">Διαμοιρασμός περιεχομένου προχείρου</string>
<string name="pref_plugin_clipboard_sent">Το πρόχειρο εστάλη</string>
<string name="pref_plugin_mousepad">Απομακρυσμένη είσοδος στοιχείων</string>
<string name="pref_plugin_mousepad_desc">Χρήση του τηλεφώνου ή της ταμπλέτας σας ως επιφάνεια αφής και πληκτρολόγιο</string>
<string name="pref_plugin_presenter">Απομακρυσμένος έλεγχος παρουσίασης διαφανειών</string>
<string name="pref_plugin_presenter_desc">Χρησιμοποιήστε τη συσκευή σας για να αλλάξετε διαφάνειες σε μία παρουσίαση</string>
<string name="pref_plugin_remotekeyboard">Λήψη απομακρυσμένων πληκτρολογήσεων</string>
<string name="pref_plugin_remotekeyboard_desc">Λήψη συμβάντων πληκτρολόγησης από απομακρυσμένες συσκευές</string>
<string name="pref_plugin_mpris">Κονσόλα πολυμέσων</string>
<string name="pref_plugin_mpris_desc">Παρέχει ένα τηλεχειριστήριο για την αναπαραγωγή πολυμέσων</string>
<string name="pref_plugin_runcommand">Εκτέλεση εντολής</string>
<string name="pref_plugin_runcommand_desc">Εκτέλεση απομακρυσμένων εντολών από το τηλέφωνο ή την ταμπλέτα</string>
<string name="pref_plugin_contacts">Πρόγραμμα συγχρονισμού επαφών</string>
<string name="pref_plugin_contacts_desc">Επιτρέπει το συγχρονισμό του βιβλίου επαφών της συσκευής</string>
<string name="pref_plugin_ping">Ping</string>
<string name="pref_plugin_ping_desc">Αποστολή και λήψη pings</string>
<string name="pref_plugin_notifications">Συγχρονισμός ειδοποιήσεων</string>
@@ -25,9 +35,12 @@
<string name="pref_plugin_sharereceiver_desc">Διαμοιρασμός αρχείων και URL μεταξύ συσκευών</string>
<string name="device_list_empty">Χωρίς συσκευές</string>
<string name="ok">Εντάξει</string>
<string name="sad_ok">Εντάξει :(</string>
<string name="cancel">Ακύρωση</string>
<string name="open_settings">Ρυθμίσεις ανοίγματος</string>
<string name="no_permissions">Απαιτείται παραχώρηση δικαιωμάτων για την πρόσβαση σε ειδοποιήσεις</string>
<string name="no_permission_mprisreceiver">Για να ελέγξετε τους αναπαραγωγείς πολυμέσων απαιτείται να παραχωρήσετε πρόσβαση στις ειδοποιήσεις</string>
<string name="no_permissions_remotekeyboard">Για να λαμβάνετε πατήματα πλήκτρων απαιτείται να ενεργοποιήσετε το πληκτρολόγιο απομακρυσμένης σύνδεσης του KDE</string>
<string name="send_ping">Αποστολή ping</string>
<string name="open_mpris_controls">Έλεγχος πολυμέσων</string>
<string name="remotekeyboard_editing_only_title">Χειρισμός απομακρυσμένων πλήκτρων μόνο στην επεξεργασία</string>
@@ -35,9 +48,11 @@
<string name="remotekeyboard_connected">Η σύνδεση με απομακρυσμένο πληκτρολόγιο είναι ενεργή</string>
<string name="remotekeyboard_multiple_connections">Υπάρχουν περισσότερες της μίας συνδέσεις με απομακρυσμένο πληκτρολόγιο, επιλέξτε ποια συσκευή θα διαμορφώσετε</string>
<string name="open_mousepad">Απομακρυσμένη είσοδος στοιχείων</string>
<string name="mousepad_info">Μετακινείστε το δάκτυλο στην οθόνη για να μετακινηθεί ο δρομέας του ποντικιού. Χτυπήστε για κλικ και χρησιμοποιήστε δύο/τρία δάκτυλα για δεξί και μεσαίο κλικ. Χρησιμοποιήστε 2 δάκτυλα για κύλιση. Πιέστε με διάρκεια για μετακίνηση και απόθεση.</string>
<string name="mousepad_double_tap_settings_title">Ρύθμιση δύο δακτύλων για την ενέργεια χτυπήματος</string>
<string name="mousepad_triple_tap_settings_title">Ρύθμιση τριών δακτύλων για την ενέργεια χτυπήματος</string>
<string name="mousepad_sensitivity_settings_title">Ρύθμιση ευαισθησίας της οθόνης αφής</string>
<string name="mousepad_acceleration_profile_settings_title">Ρύθμιση επιτάχυνσης δείκτη</string>
<string name="mousepad_scroll_direction_title">Κατεύθυνση ανάστροφης κύλησης</string>
<string-array name="mousepad_tap_entries">
<item>Δεξί κλικ</item>
@@ -52,12 +67,12 @@
<item>Το ταχύτερο</item>
</string-array>
<string-array name="mousepad_acceleration_profile_entries">
<item>No Acceleration</item>
<item>Weakest</item>
<item>Weaker</item>
<item>Medium</item>
<item>Stronger</item>
<item>Strongest</item>
<item>Χωρίς επιτάχυνση</item>
<item>Η πιο αδύναμη</item>
<item>Πιο αδύναμη</item>
<item>Μέση</item>
<item>Πιο δυνατή</item>
<item>Η πιο δυνατή</item>
</string-array>
<string name="category_connected_devices">Συνδεδεμένες συσκευές</string>
<string name="category_not_paired_devices">Διαθέσιμες συσκευές</string>
@@ -78,7 +93,41 @@
<string name="remote_device_fingerprint">Το ίχνος SHA1 του πιστοποιητικού της απομακρυσμένης συσκευής είναι:</string>
<string name="pair_requested">Ζητήθηκε σύζευξη</string>
<string name="pairing_request_from">Αίτημα σύζευξης από %1s</string>
<plurals name="incoming_file_title">
<item quantity="one">Ελήφθη %1$d αρχείο από %2$s`</item>
<item quantity="other">Ελήφθησαν %1$d αρχεία από %2$s</item>
</plurals>
<plurals name="incoming_files_text">
<item quantity="one">Αρχείο: %1s</item>
<item quantity="other">(Αρχείο %2$d από %3$d) : %1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">Αποστολή %1$d αρχείου σε %2$s</item>
<item quantity="other">Αποστολή %1$d αρχείων σε %2$s</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Αρχείο: %1$s</item>
<item quantity="other">(Αρχείο %2$d από %3$d) : %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">Ελήφθη αρχείο από %1$s</item>
<item quantity="other">Ελήφθησαν %2$d αρχεία από %1$s</item>
</plurals>
<plurals name="received_files_fail_title">
<item quantity="one">Αποτυχία λήψης αρχείου από %1$s</item>
<item quantity="other">Αποτυχία λήψης %2$d από %3$d αρχείου από %1$s</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">Εστάλη αρχείο στο %1$s</item>
<item quantity="other">Εστάλησαν %2$d αρχεία στο %1$s</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">Αποτυχία αποστολής αρχείου στο %1$s</item>
<item quantity="other">Αποτυχία αποστολής %2$d σπό %3$d αρχείων στο %1$s</item>
</plurals>
<string name="tap_to_open">Χτυπήστε για άνοιγμα</string>
<string name="received_file_text">Χτυπήστε για άνοιγμα \'%1s\'</string>
<string name="cannot_create_file">Αδυναμία δημιουργίας αρχείου %s</string>
<string name="tap_to_answer">Χτυπήστε για να απαντήσετε</string>
<string name="right_click">Αποστολή δεξιού κλικ</string>
<string name="middle_click">Αποστολή μεσαίου κλικ</string>
@@ -87,13 +136,16 @@
<string name="request_pairing">Αίτημα σύζευξης</string>
<string name="pairing_accept">Αποδοχή</string>
<string name="pairing_reject">Απόρριψη</string>
<string name="settings">Ρυθμίσεις</string>
<string name="mpris_play">Αναπαραγωγή</string>
<string name="mpris_pause">Παύση</string>
<string name="mpris_previous">Προηγούμενο</string>
<string name="mpris_rew">Ταχεία ώθηση όπισθεν</string>
<string name="mpris_ff">Ταχεία προώθηση</string>
<string name="mpris_next">Επόμενο</string>
<string name="mpris_volume">Τόμος</string>
<string name="mpris_time_settings_title">Κουμπιά ταχείας ώθησης</string>
<string name="mpris_time_settings_summary">Χρονική προσαρμογή ταχείας ώθησης ανάλογα με την πίεση</string>
<string-array name="mpris_time_entries">
<item>10 seconds</item>
<item>20 seconds</item>
@@ -101,24 +153,53 @@
<item>1 λεπτό</item>
<item>2 λεπτά</item>
</string-array>
<string name="mpris_notification_settings_title">Εμφάνιση ειδοποίησης κονσόλας πολυμέσων</string>
<string name="mpris_notification_settings_summary">Να επιτρέπεται ο έλεγχος των αναπαραφωγέων πολυμέσων χωρίς άνοιγμα του KDE Connect</string>
<string name="share_to">Διαμοιρασμός με…</string>
<string name="protocol_version_newer">Η συσκευή αυτή χρησιμοποιεί νεότερη έκδοση πρωτοκόλλου</string>
<string name="plugin_settings_with_name">%s ρυθμίσεις</string>
<string name="invalid_device_name">Μη έγκυρο όνομα συσκευής</string>
<string name="shareplugin_text_saved">Ελήφθη κείμενο, αποθηκεύτηκε στο πρόχειρο</string>
<string name="custom_devices_settings">Προσαρμοσμένη λίστα συσκευών</string>
<string name="custom_device_list">Προσθήκη συσκευών ανά IP</string>
<string name="custom_device_deleted">Η προσαρμοσμένη λίστα διαγράφηκε</string>
<string name="custom_device_list_help">Αν η συσκευή σας δεν εντοπίζεται αυτόματα μπορείτε να προσθέσετε την IP διεύθυνσή της ή το όνομά της με κλικ στο κουμπί αιωρούμενης ενέργειας</string>
<string name="custom_device_fab_hint">Προσθήκη συσκευής</string>
<string name="undo">Αναίρεση</string>
<string name="share_notification_preference">Θορυβώδεις ειδοποιήσεις</string>
<string name="share_notification_preference_summary">Δόνηση και ηχητική ένδειξη με τη λήψη αρχείου</string>
<string name="share_destination_customize">Προσαρμογή καταλόγου προορισμού</string>
<string name="share_destination_customize_summary_disabled">Τα ληφθέντα αρχεία θα εμφανίζονται στις Λήψεις</string>
<string name="share_destination_customize_summary_enabled">Τα αρχεία θα αποθηκεύονται στον παρακάτω κατάλογο</string>
<string name="share_destination_folder_preference">Κατάλογος προορισμού</string>
<string name="share">Διαμοιρασμός</string>
<string name="share_received_file">Διαμοιρασμός «%s»</string>
<string name="title_activity_notification_filter">Φιλτράρισμα ειδοποιήσεων</string>
<string name="filter_apps_info">Οι ειδοποιήσεις θα συγχρονίζονται για επιλεγμένες εφαρμογές.</string>
<string name="sftp_sdcard_num">SD card %d</string>
<string name="sftp_sdcard">SD card</string>
<string name="sftp_readonly">(ανάγνωση μόνο)</string>
<string name="sftp_camera">Φωτογραφίες</string>
<string name="add_device_dialog_title">Προσθήκη συσκευής</string>
<string name="add_device_hint">Όνομα ή IP διεύθυνση</string>
<string name="sftp_preference_detected_sdcards">Εντοπισμένες SD κάρτες</string>
<string name="sftp_preference_edit_sdcard_title">Επεξεργασία SD κάρτας</string>
<string name="sftp_preference_configured_storage_locations">Διαμορφωμένες τοποθεσίες αποθήκης</string>
<string name="sftp_preference_add_storage_location_title">Προσθήκη τοποθεσίας αποθήκης</string>
<string name="sftp_preference_edit_storage_location">Επεξεργασία τοποθεσίας αποθήκης</string>
<string name="sftp_preference_add_camera_shortcut">Προσθήκη συντόμευσης φακέλου κάμερας</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Προσθήκη συντόμευσης στο φάκελο της κάμερας</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Να μην προστεθεί συντόμευση στο φάκελο της κάμερας</string>
<string name="sftp_storage_preference_storage_location">Τοποθεσία αποθήκης</string>
<string name="sftp_storage_preference_storage_location_already_configured">Αυτή η τοποθεσία έχει ήδη διαμορφωθεί</string>
<string name="sftp_storage_preference_click_to_select">κλικ για επιλογή</string>
<string name="sftp_storage_preference_display_name">Όνομα οθόνης</string>
<string name="sftp_storage_preference_display_name_already_used">Αυτό το όνομα οθόνης είναι σε χρήση</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Το όνομα οθόνης δε γίνεται να είναι κενό</string>
<string name="sftp_action_mode_menu_delete">Διαγραφή</string>
<string name="sftp_no_sdcard_detected">Δεν εντοπίστηκε SD κάρτα</string>
<string name="sftp_no_storage_locations_configured">Δεν διαμορφώθηκαν τοποθεσίες αποθήκης</string>
<string name="sftp_saf_permission_explanation">Για να έχετε απομακρυσμένη πρόσβαση σε αρχεία απαιτείται να διαμορφώσετε τοποθεσίες αποθήκης</string>
<string name="no_players_connected">Δεν βρέθηκαν συσκευές αναπαραγωγής</string>
<string name="send_files">Αποστολή αρχείων</string>
<string name="pairing_title">Συσκευές KDE Connect</string>
@@ -127,36 +208,127 @@
<string name="device_rename_confirm">Μετονομασία</string>
<string name="refresh">Ανανέωση</string>
<string name="unreachable_description">Αυτή η συζευγμένη συσκευή δεν είναι προσβάσιμη. Βεβαιωθείτε ότι είναι συνδεδεμένη στο δίκτυό σας.</string>
<string name="no_wifi">Δεν είστε συνδεδεμένοι σε ασύρματο δίκτυο, έτσι ίσως να μη βλέπετε καμία συσκευή.Κάνετε κλικ εδώ για να ενεργοποιήσετε το Wi-Fi.</string>
<string name="on_non_trusted_message">Δεν είστε σε έμπιστο δίκτυο: ο αυτόματος εντοπισμός είναι ανενεργός.</string>
<string name="no_file_browser">Δεν υπάρχουν εγκατεστημένοι περιηγητές αρχείων.</string>
<string name="pref_plugin_telepathy">Αποστολή SMS</string>
<string name="pref_plugin_telepathy_desc">Αποστολή μηνυμάτων κειμένου από τον υπολογιστή σας</string>
<string name="pref_plugin_telepathy_mms">Αποστολή MMS</string>
<string name="pref_plugin_telepathy_mms_desc">Για να μπορείτε να στέλνετε MMS από το KDE Connect απαιτείται να το ρυθμίσετε ως την προκαθορισμένη εφαρμογή για SMS.</string>
<string name="findmyphone_title">Αναζήτηση του κινητού μου</string>
<string name="findmyphone_title_tablet">Εύρεση της ταμπλέτας μου</string>
<string name="findmyphone_title_tablet">Αναζήτηση του πινακίου μου</string>
<string name="findmyphone_title_tv">Αναζήτηση της τηλεόρασής μου</string>
<string name="findmyphone_description">Καλεί αυτή τη συσκευή ώστε να την εντοπίσετε</string>
<string name="findmyphone_found">Βρέθηκε</string>
<string name="open">Άνοιγμα</string>
<string name="close">Κλείσιμο</string>
<string name="plugins_need_permission">Κάποια πρόσθετα απαιτούν δικαιώματα για να λειτουργήσουν (χτυπήστε για περισσότερες πληροφορίες):</string>
<string name="permission_explanation">Αυτό το πρόσθετο χρειάζεται δικαιώματα για να λειτουργήσει</string>
<string name="optional_permission_explanation">Απαιτείται παραχώρηση επιπλέον δικαιωμάτων για την ενεργοποίηση όλων των λειτουργιών</string>
<string name="plugins_need_optional_permission">Κάποια πρόσθετα έχουν λειτουργίες ανενεργές εξαιτίας της απουσίας δικαιωμάτων (χτυπήστε για περισσότερες πληροφορίες):</string>
<string name="share_optional_permission_explanation">Για το διαμοιρασμό αρχείων ανάμεσα στο τηλέφωνο και τον υπολογιστή σας χρειάζεται να παραχωρήσετε πρόσβαση στον αποθηκευτικό χώρο του τηλεφώνου σας</string>
<string name="share_optional_permission_explanation">Για να λάβετε κοινόχρηστα αρχεία πρέπει να επιλέξετε έναν κατάλογο προορισμού</string>
<string name="telepathy_permission_explanation">Για να διαβάσετε και να γράψετε SMS από την επιφάνεια εργασίας, χρειάζεται να δώσετε δικαιώματα στο SMS</string>
<string name="telephony_permission_explanation">Για να δείτε τηλεφωνικές κλήσεις στην επιφάνεια εργασίας απαιτείται να παραχωρήσετε δικαιώματα σε καταγραφές τηλεφωνικών κλήσεων και στην κατάσταση του τηλεφώνου</string>
<string name="telephony_optional_permission_explanation">Για να δείτε το όνομα επαφής αντί για τον αριθμό κλήσης χρειάζεται να παραχωρήσετε πρόσβαση στις επαφές στο τηλέφωνο</string>
<string name="contacts_permission_explanation">Για να μοιραστείτε το βιβλίο επαφών σας με την επιφάνεια εργασίας, απαιτείται να δώσετε δικαιώματα στις επαφές</string>
<string name="select_ringtone">Επιλογή ήχου κλήσης</string>
<string name="telephony_pref_blocked_title">Αριθμοί σε φραγή</string>
<string name="telephony_pref_blocked_dialog_desc">Να μην εμφανίζονται κλήσεις ή SMS από αυτούς τους αριθμούς. Καθορίστε έναν αριθμό ανά γραμμή</string>
<string name="mpris_coverart_description">Καλλιτεχνικό εξώφυλλο των πολυμέσων</string>
<string name="device_icon_description">Εικονίδιο συσκευής</string>
<string name="settings_icon_description">Εικονίδιο ρυθμίσεων</string>
<string name="presenter_fullscreen">Πλήρης οθόνη</string>
<string name="presenter_exit">Έξοδος από την παρουσίαση</string>
<string name="presenter_lock_tip">Μπορείτε να κλειδώσετε τη συσκευή σας και να χρησιμοποιήσετε τα πλήκτρα της έντασης για να μεταβείτε σε προηγούμενη/επόμενη διαφάνεια</string>
<string name="add_command">Προσθήκη εντολής</string>
<string name="addcommand_explanation">Δεν υπάρχουν καταχωρημένες εντολές</string>
<string name="addcommand_explanation2">Μπορείτε να προσθέσετε νέες εντολές στις ρυθμίσεις συστήματος του KDE Connect</string>
<string name="add_command_description">Μπορείτε να προσθέσετε εντολές στην επιφάνεια εργασίας</string>
<string name="pref_plugin_mprisreceiver">Κονσόλα αναπαραγωγέα πολυμέσων</string>
<string name="pref_plugin_mprisreceiver_desc">Ελέγξτε τους αναπαραγωγείς πολυμέσων του τηλεφώνου σας από άλλη συσκευή</string>
<string name="notification_channel_default">Άλλες ειδοποιήσεις</string>
<string name="notification_channel_persistent">Μόνιμος δείκτης</string>
<string name="notification_channel_media_control">Κονσόλα πολυμέσων</string>
<string name="notification_channel_filetransfer">Μεταφορά αρχείου</string>
<string name="notification_channel_high_priority">Υψηλής προτεραιότητας</string>
<string name="notification_channel_sms_mms">Νέο μήνυμα</string>
<string name="mpris_stop">Διακοπή του τρέχοντος αναπαραγωγέα</string>
<string name="copy_url_to_clipboard">Αντιγραφή του URL στο πρόχειρο</string>
<string name="clipboard_toast">Έγινε αντιγραφή στο πρόχειρο</string>
<string name="runcommand_notreachable">Η συσκευή δεν είναι προσβάσιμη</string>
<string name="runcommand_notpaired">Η συσκευή δεν συζεύχθηκε</string>
<string name="runcommand_nosuchdevice">Δεν υπάρχει τέτοια συσκευή</string>
<string name="runcommand_noruncommandplugin">Αυτή η συσκευή δεν έχει ενεργοποιημένο το πρόσθετο εκτέλεσης εντολής</string>
<string name="pref_plugin_findremotedevice">Εύρεση απομακρυσμένης συσκευής</string>
<string name="pref_plugin_findremotedevice_desc">Ενεργοποιήστε τον ήχο κλήσης της απομακρυσμένης συσκευής σας</string>
<string name="ring">Ήχος κλήσης</string>
<string name="pref_plugin_systemvolume">Ένταση συστήματος</string>
<string name="pref_plugin_systemvolume_desc">Ελέγξτε την ένταση του συστήματος της απομακρυσμένης συσκευής</string>
<string name="mute">Σίγαση</string>
<string name="all">Όλα</string>
<string name="devices">Συσκευές</string>
<string name="settings_rename">Όνομα συσκευής</string>
<string name="settings_dark_mode">Σκούρο θέμα</string>
<string name="settings_more_settings_title">Περισσότερες ρυθμίσεις</string>
<string name="settings_more_settings_text">Ρυθμίσεις ανά συσκευή είναι στο \'Ρυθμίσεις προσθέτων\' μέσα από τη συσκευή.</string>
<string name="setting_persistent_notification">Εμφάνιση μόνιμων ειδοποιήσεων</string>
<string name="setting_persistent_notification_oreo">Μόνιμες ειδοποιήσεις</string>
<string name="setting_persistent_notification_description">Χτύπημα για (απ)ενεργοποίηση στις ρυμίσεις ειδοποιήσεων</string>
<string name="extra_options">Επιπλέον επιλογές</string>
<string name="privacy_options">Επιλογές ιδιωτικού απορρήτου</string>
<string name="set_privacy_options">Ρύθμιση επιλογών ιδιωτικού απορρήτου</string>
<string name="block_contents">Φραγή περιεχομένου ειδοποιήσεων</string>
<string name="block_images">Φραγή εικόνων σε ειδοποιήσεις</string>
<string name="notification_channel_receivenotification">Ειδοποιήσεις από άλλες συσκευές</string>
<string name="take_picture">Εκτέλεση κάμερας</string>
<string name="plugin_photo_desc">Εκτέλεση της εφαρμογής κάμερας για διευκόλυνση στη λήψη και μεταφορά φωτογραφιών</string>
<string name="no_app_for_opening">Δεν βρέθηκε κατάλληλη εφαρμογή για το άνοιγμα αυτού του αρχείου</string>
<string name="remote_keyboard_service">Απομακρυσμένο πληκτρολόγιο KDE Connect</string>
<string name="presenter_pointer">Δείκτης</string>
<string name="trusted_networks">Έμπιστα δίκτυα</string>
<string name="trusted_networks_desc">Να περιοριστεί η αυτόματη ανακάλυψη σε γνωστά δίκτυα</string>
<string name="add_trusted_network">Προσθήκη %1s</string>
<string name="empty_trusted_networks_list_text">Δεν έχετε προσθέσει ακόμη κάποιο έμπιστο δίκτυο</string>
<string name="allow_all_networks_text">Να επιτρέπονται όλα</string>
<string name="location_permission_needed_title">Απαιτείται πρόσβαση</string>
<string name="location_permission_needed_desc">Το android απαιτεί το δικαίωμα πρόσβασης στην τοποθεσία για να αναγνωρίσει το WiFI δίκτυό σας</string>
<string name="clipboard_android_x_incompat">Το android έχει αφαιρέσει την πρόσβαση στο πρόχειρο από όλες τις εφαρμογές. Αυτό το πρόσθετο θα απενεργοποιηθεί.</string>
<string name="mpris_open_url">Συνεχίστε να παίζετε εδώ</string>
<string name="cant_open_url">Αδυναμία ανοίγματος URL για να συνεχίσετε να παίζετε</string>
<string name="bigscreen_home">Αρχική</string>
<string name="bigscreen_up">Επάνω</string>
<string name="bigscreen_left">Αριστερά</string>
<string name="bigscreen_select">Επιλογή</string>
<string name="bigscreen_right">Δεξιά</string>
<string name="bigscreen_down">Κάτω</string>
<string name="bigscreen_mic">Μικ</string>
<string name="pref_plugin_bigscreen">Απομακρυσμένη μεγάλη οθόνη</string>
<string name="pref_plugin_bigscreen_desc">Χρησιμοποιήστε τη συσκευή σας ως απομακρυσμένη για το Plasma Bigscreen</string>
<string name="bigscreen_optional_permission_explanation">Για να μοιραστείτε την είσοδο του μικροφώνου από το τηλέφωνό σας απαιτείται να παραχωρήσετε πρόσβαση στην είσοδο ήχου του τηλεφώνου</string>
<string name="bigscreen_speech_extra_prompt">Ομιλία</string>
<string name="message_reply_label">ΑΠΑΝΤΗΣΗ</string>
<string name="mark_as_read_label">ΝΑ ΣΗΜΕΙΩΘΕΙ ΩΣ ΑΝΑΓΝΩΣΜΕΝΟ</string>
<string name="user_display_name">Εσείς</string>
<string name="set_default_sms_app_title">Αποστολή MMS</string>
<string name="set_group_message_as_mms_title">Αποστολή MMS σε ομάδα</string>
<string name="set_long_text_as_mms_title">Αποστολή μεγάλου κειμένου ως MMS</string>
<string name="convert_to_mms_after_title">Μετατροπή σε MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
<item>After three messages</item>
<item>After four messages</item>
<item>After five messages</item>
<item>Μετά από ένα μήνυμα</item>
<item>Μετά από δύο μηνύματα</item>
<item>Μετά από τρία μηνύματα</item>
<item>Μετά από τέσσερα μηνύματα</item>
<item>Μετά από πέντε μηνύματα</item>
</string-array>
<string name="theme_dialog_title">Επιλογή θέματος</string>
<string-array name="theme_list">
<item>Set by Battery Saver</item>
<item/>
<item>Dark</item>
<item>Ρύθμιση με την εξοικονόμηση μπαταρίας</item>
<item>Φωτεινό</item>
<item>Σκούρο</item>
</string-array>
<string-array name="theme_list_v28">
<item/>
<item/>
<item>Dark</item>
<item>Προκαθορισμένο συστήματος</item>
<item>Φωτεινό</item>
<item>Σκούρο</item>
</string-array>
</resources>

View File

@@ -213,6 +213,8 @@
<string name="no_file_browser">There are no file browsers installed.</string>
<string name="pref_plugin_telepathy">Send SMS</string>
<string name="pref_plugin_telepathy_desc">Send text messages from your desktop</string>
<string name="pref_plugin_telepathy_mms">Send MMS</string>
<string name="pref_plugin_telepathy_mms_desc">To be able to send MMS from KDE Connect you need to set it as the default SMS app.</string>
<string name="findmyphone_title">Find my phone</string>
<string name="findmyphone_title_tablet">Find my tablet</string>
<string name="findmyphone_title_tv">Find my TV</string>
@@ -224,7 +226,7 @@
<string name="permission_explanation">This plugin needs permissions to work</string>
<string name="optional_permission_explanation">You need to grant extra permissions to enable all functions</string>
<string name="plugins_need_optional_permission">Some plugins have features disabled because of lack of permission (tap for more info):</string>
<string name="share_optional_permission_explanation">To share files between your phone and your desktop you need to give access to the phone\'s storage</string>
<string name="share_optional_permission_explanation">To receive shared files you need to choose a destination directory</string>
<string name="telepathy_permission_explanation">To read and write SMS from your desktop you need to give permission to SMS</string>
<string name="telephony_permission_explanation">To see phone calls on the desktop you need to give permission to phone call logs and phone state</string>
<string name="telephony_optional_permission_explanation">To see a contact name instead of a phone number you need to give access to the phone\'s contacts</string>
@@ -249,6 +251,7 @@
<string name="notification_channel_media_control">Media control</string>
<string name="notification_channel_filetransfer">File transfer</string>
<string name="notification_channel_high_priority">High priority</string>
<string name="notification_channel_sms_mms">New Message</string>
<string name="mpris_stop">Stop the current player</string>
<string name="copy_url_to_clipboard">Copy URL to clipboard</string>
<string name="clipboard_toast">Copied to clipboard</string>
@@ -303,6 +306,13 @@
<string name="pref_plugin_bigscreen_desc">Use your device as a remote for Plasma Bigscreen</string>
<string name="bigscreen_optional_permission_explanation">To share microphone input from your phone you need to give access to the phone\'s audio input</string>
<string name="bigscreen_speech_extra_prompt">Speech</string>
<string name="message_reply_label">REPLY</string>
<string name="mark_as_read_label">MARK AS READ</string>
<string name="user_display_name">You</string>
<string name="set_default_sms_app_title">Send MMS</string>
<string name="set_group_message_as_mms_title">Send group MMS</string>
<string name="set_long_text_as_mms_title">Send long text as MMS</string>
<string name="convert_to_mms_after_title">Convert to MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
@@ -316,4 +326,9 @@
<item>Light</item>
<item>Dark</item>
</string-array>
<string-array name="theme_list_v28">
<item>System Default</item>
<item>Light</item>
<item>Dark</item>
</string-array>
</resources>

View File

@@ -213,6 +213,8 @@
<string name="no_file_browser">No hay navegadores de archivos instalados.</string>
<string name="pref_plugin_telepathy">Enviar SMS</string>
<string name="pref_plugin_telepathy_desc">Enviar mensajes de texto desde su escritorio</string>
<string name="pref_plugin_telepathy_mms">Enviar MMS</string>
<string name="pref_plugin_telepathy_mms_desc">Para poder enviar MMS desde KDE Connect necesita configurarlo como la aplicación por omisión de SMS.</string>
<string name="findmyphone_title">Encontrar mi teléfono</string>
<string name="findmyphone_title_tablet">Encontrar mi tableta</string>
<string name="findmyphone_title_tv">Encontrar mi TV</string>
@@ -224,7 +226,7 @@
<string name="permission_explanation">Este complemento necesita permisos para funcionar</string>
<string name="optional_permission_explanation">Debe otorgar permisos extra para activar todas las funciones</string>
<string name="plugins_need_optional_permission">Algunos complementos tienen funcionalidades desactivadas por falta de permisos (pulse para más información):</string>
<string name="share_optional_permission_explanation">Para compartir archivos entre su teléfono y su escritorio, necesita dar acceso al almacenamiento de su teléfono</string>
<string name="share_optional_permission_explanation">Para recibir archivos compartidos debe elegir un directorio destino</string>
<string name="telepathy_permission_explanation">Para leer y escribir SMS desde su escritorio, necesita dar permisos para SMS</string>
<string name="telephony_permission_explanation">Para ver las llamadas telefónicas en el escritorio, necesita dar permisos al registro de llamadas telefónicas y al estado del teléfono</string>
<string name="telephony_optional_permission_explanation">Para ver el nombre de un contacto en lugar de un número telefónico, necesita dar acceso a los contactos de su teléfono</string>
@@ -249,6 +251,7 @@
<string name="notification_channel_media_control">Control multimedia</string>
<string name="notification_channel_filetransfer">Transferencia de archivo</string>
<string name="notification_channel_high_priority">Alta prioridad</string>
<string name="notification_channel_sms_mms">Nuevo mensaje</string>
<string name="mpris_stop">Parar el reproductor actual</string>
<string name="copy_url_to_clipboard">Copiar URL al portapapeles</string>
<string name="clipboard_toast">Copiado en el portapapeles</string>
@@ -303,12 +306,19 @@
<string name="pref_plugin_bigscreen_desc">Use su dispositivo como mando remoto para Plasma Bigscreen</string>
<string name="bigscreen_optional_permission_explanation">Para compartir la entrada del micrófono desde su teléfono, necesita dar acceso a la entrada de audio de su teléfono</string>
<string name="bigscreen_speech_extra_prompt">Habla</string>
<string name="message_reply_label">Responder</string>
<string name="mark_as_read_label">Marcar como leído</string>
<string name="user_display_name"></string>
<string name="set_default_sms_app_title">Enviar MMS</string>
<string name="set_group_message_as_mms_title">Enviar MMS a un grupo</string>
<string name="set_long_text_as_mms_title">Enviar textos largos como MMS</string>
<string name="convert_to_mms_after_title">Convertir a MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
<item>After three messages</item>
<item>After four messages</item>
<item>After five messages</item>
<item>Tras un mensaje</item>
<item>Tras dos mensajes</item>
<item>Tras tres mensajes</item>
<item>Tras cuatro mensajes</item>
<item>Tras cinco mensajes</item>
</string-array>
<string name="theme_dialog_title">Elegir tema</string>
<string-array name="theme_list">
@@ -316,4 +326,9 @@
<item>Claro</item>
<item>Oscuro</item>
</string-array>
<string-array name="theme_list_v28">
<item>Valor por omisión del sistema</item>
<item>Claro</item>
<item>Oscuro</item>
</string-array>
</resources>

View File

@@ -15,7 +15,7 @@
<string name="pref_plugin_clipboard_sent">Lõikepuhvrist saadud</string>
<string name="pref_plugin_mousepad">Kaugsisestus</string>
<string name="pref_plugin_mousepad_desc">Telefoni või tahvli kasutamine puuteplaadi ja klaviatuurina</string>
<string name="pref_plugin_presenter">Kaugslaidiseanss</string>
<string name="pref_plugin_presenter">Slaidiseansi pult</string>
<string name="pref_plugin_presenter_desc">Seadme kasutamine esitluse slaidide vahetamiseks</string>
<string name="pref_plugin_remotekeyboard">Kaugklahvivajutuste vastuvõtmine</string>
<string name="pref_plugin_remotekeyboard_desc">Kaugseadmete klahvivajutuste vastuvõtmine</string>
@@ -211,8 +211,10 @@
<string name="no_wifi">Sul puudub ühendus Wi-Fi võrguga, mistõttu sa ei näe ühtegi seadet. Klõpsa siia Wi-Fi sisselülitamiseks.</string>
<string name="on_non_trusted_message">See ei ole usaldusväärne võrk: automaatne tuvastamine on keelatud.</string>
<string name="no_file_browser">Ühtegi failisirvijat pole paigaldatud</string>
<string name="pref_plugin_telepathy">Saada SMS</string>
<string name="pref_plugin_telepathy">SMS-ide saatmine</string>
<string name="pref_plugin_telepathy_desc">Tekstisõnumite saatmine oma töölaualt</string>
<string name="pref_plugin_telepathy_mms">MMS-ide saatmine</string>
<string name="pref_plugin_telepathy_mms_desc">KDE Connecti kaudu MMS-ide saatmiseks tuleb see määrata SMS-ide vaikerakenduseks.</string>
<string name="findmyphone_title">Leia mu telefon</string>
<string name="findmyphone_title_tablet">Leia mu tahvel</string>
<string name="findmyphone_title_tv">Leia mu teler</string>
@@ -224,7 +226,6 @@
<string name="permission_explanation">See plugin vajab töötamiseks õigusi</string>
<string name="optional_permission_explanation">Kõigi funktsioonide lubamiseks tuleb sul anda lisaõigusi</string>
<string name="plugins_need_optional_permission">Mõne plugina osa omadusi on keelatud õiguste puudumise tõttu (koputa rohkema teabe saamiseks):</string>
<string name="share_optional_permission_explanation">Failide jagamiseks telefoni ja töölau vahel tuleb anda telefonile ligipääs</string>
<string name="telepathy_permission_explanation">SMS-ide lugemiseks ja kirjutamiseks töölaual tuleb anda õigused SMS-ile</string>
<string name="telephony_permission_explanation">Kõnede nägemiseks töölaual tuleb anda õigused telefonikõnede logile ja telefoni olekule</string>
<string name="telephony_optional_permission_explanation">Telefoninumbri asemel kontakti nime nägemiseks tuleb anda õigused telefoni kontaktidele</string>
@@ -249,6 +250,7 @@
<string name="notification_channel_media_control">Meedia juhtimine</string>
<string name="notification_channel_filetransfer">Failiülekanne</string>
<string name="notification_channel_high_priority">Kõrge prioriteediga</string>
<string name="notification_channel_sms_mms">Uus sõnum</string>
<string name="mpris_stop">Peata aktiivne mängija</string>
<string name="copy_url_to_clipboard">Kopeeri URL lõikepuhvrisse</string>
<string name="clipboard_toast">Kopeeriti lõikepuhvrisse</string>
@@ -299,10 +301,12 @@
<string name="bigscreen_right">Paremal</string>
<string name="bigscreen_down">All</string>
<string name="bigscreen_mic">Mikrofon</string>
<string name="pref_plugin_bigscreen">Kaugsuurekraan</string>
<string name="pref_plugin_bigscreen_desc">Oma seadme kasutamine Plasma kaugsuurekraanina</string>
<string name="pref_plugin_bigscreen">Suurekraani pult</string>
<string name="pref_plugin_bigscreen_desc">Oma seadme kasutamine Plasma suurekraani puldina</string>
<string name="bigscreen_optional_permission_explanation">Oma telefoni mikrofonisisendi jagamiseks tuleb anda juurdepääs telefoni helisisendile</string>
<string name="bigscreen_speech_extra_prompt">Kõne</string>
<string name="message_reply_label">VASTA</string>
<string name="mark_as_read_label">MÄRGI LOETUKS</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
@@ -316,4 +320,9 @@
<item>Hele</item>
<item>Tume</item>
</string-array>
<string-array name="theme_list_v28">
<item>Süsteemi vaikeväärtus</item>
<item>Hele</item>
<item>Tume</item>
</string-array>
</resources>

View File

@@ -211,8 +211,10 @@
<string name="no_wifi">Ez zaude Wi-Fi sare batera konektatuta, baliteke gailurik ez ikustea. Egin klik hemen Wi-Fia gaitzeko.</string>
<string name="on_non_trusted_message">Ez dago konfiantza duen sare batean: aurkitze automatikoa desgaituta dago.</string>
<string name="no_file_browser">Ez dago fitxategi arakatzailerik instalatuta.</string>
<string name="pref_plugin_telepathy">Bidali SMSa</string>
<string name="pref_plugin_telepathy">Bidali SMS</string>
<string name="pref_plugin_telepathy_desc">Bidali testu-mezuak zure mahaigainetik</string>
<string name="pref_plugin_telepathy_mms">Bidali MMS</string>
<string name="pref_plugin_telepathy_mms_desc">KDE Connect bidez MMSak bidali ahal izateko, SMS aplikazio lehenetsi gisa ezarri behar duzu.</string>
<string name="findmyphone_title">Bilatu nire telefonoa</string>
<string name="findmyphone_title_tablet">Bilatu nire tableta</string>
<string name="findmyphone_title_tv">Aurkitu nire TB</string>
@@ -224,7 +226,6 @@
<string name="permission_explanation">Plugin honek baimena behar du funtzionatzeko</string>
<string name="optional_permission_explanation">Baimen gehiago eman behar dituzu funtzio guztiak gaitzeko</string>
<string name="plugins_need_optional_permission">Plugin batzuek desgaitutako eginbideak dituzte baimenak faltan dituztelako (tak egin informazio gehiagorako):</string>
<string name="share_optional_permission_explanation">Zure telefonoa eta mahaigainaren artean fitxategiak partekatzeko telefonoaren biltegiratzea atzitzeko baimena eman behar duzu</string>
<string name="telepathy_permission_explanation">SMSak zure mahaigainetik bidali ahal izateko, SMSak erabiltzeko baimena eman behar duzu</string>
<string name="telephony_permission_explanation">Telefono deiak zure mahaigainetik ikusteko, telefono deien egunkarira eta telefonoaren egoerara baimena eman behar duzu</string>
<string name="telephony_optional_permission_explanation">Telefono zenbakiaren ordez kontaktuaren izena ikusteko telefonoko kontaktuak atzitzeko baimena eman behar duzu</string>
@@ -249,6 +250,7 @@
<string name="notification_channel_media_control">Euskarrien kontrola</string>
<string name="notification_channel_filetransfer">Fitxategi transferentzia</string>
<string name="notification_channel_high_priority">Lehentasun handia</string>
<string name="notification_channel_sms_mms">Mezu berria</string>
<string name="mpris_stop">Gelditu uneko jotzailea</string>
<string name="copy_url_to_clipboard">Kopiatu URLa arbelera</string>
<string name="clipboard_toast">Arbelera kopiatua</string>
@@ -303,12 +305,19 @@
<string name="pref_plugin_bigscreen_desc">Erabili zure gailua Plasma Bigscreen-en urrutiko aginte gisa</string>
<string name="bigscreen_optional_permission_explanation">Zure telefonoko mikrofonoko sarrerakoa partekatzeko, telefonoko audio sarrerakora sarbidea eman behar diozu</string>
<string name="bigscreen_speech_extra_prompt">Hizketa</string>
<string name="message_reply_label">ERANTZUN</string>
<string name="mark_as_read_label">MARKATU IRAKURRITAKO GISA</string>
<string name="user_display_name">Zu</string>
<string name="set_default_sms_app_title">Bidali MMS</string>
<string name="set_group_message_as_mms_title">Bidali taldeko MMS</string>
<string name="set_long_text_as_mms_title">Bidali testu luzea MMS gisa</string>
<string name="convert_to_mms_after_title">Bihurtu MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
<item>After three messages</item>
<item>After four messages</item>
<item>After five messages</item>
<item>Mezu baten ondoren</item>
<item>Bi mezu ondoren</item>
<item>Hiru mezu ondoren</item>
<item>Lau mezu ondoren</item>
<item>Bost mezu ondoren</item>
</string-array>
<string name="theme_dialog_title">Aukeratu gaia</string>
<string-array name="theme_list">
@@ -316,4 +325,9 @@
<item>Argia</item>
<item>Iluna</item>
</string-array>
<string-array name="theme_list_v28">
<item>Sistemako lehenetsia</item>
<item>Argia</item>
<item>Iluna</item>
</string-array>
</resources>

View File

@@ -213,6 +213,8 @@
<string name="no_file_browser">Tiedostoselaimia ei asennettu.</string>
<string name="pref_plugin_telepathy">Lähetä tekstiviesti</string>
<string name="pref_plugin_telepathy_desc">Lähetä tekstiviestejä työpöydältäsi</string>
<string name="pref_plugin_telepathy_mms">Lähetä multimediaviesti</string>
<string name="pref_plugin_telepathy_mms_desc">Multimediaviestien lähettämiseksi KDE Connect on asetettava oletustekstiviestisovellukseksi.</string>
<string name="findmyphone_title">Löydä puhelimeni</string>
<string name="findmyphone_title_tablet">Löydä tablettini</string>
<string name="findmyphone_title_tv">Etsi televeisioni</string>
@@ -224,7 +226,6 @@
<string name="permission_explanation">Liitännäinen tarvitsee toimiakseen lisäkäyttöoikeuksia</string>
<string name="optional_permission_explanation">Kaikkien toimintojen käyttämiseksi sinun on annettava lisäkäyttöoikeuksia</string>
<string name="plugins_need_optional_permission">Jotkin liitännäisten ominaisuudet eivät ole käytössä puuttuvien käyttöoikeuksien takia (lisätietoa napsauttamalla):</string>
<string name="share_optional_permission_explanation">Jakaaksesi tiedostoja puhelimen ja työpöydän välillä sinun on annettava käyttöoikeudet puhelimen tallennustilaan</string>
<string name="telepathy_permission_explanation">Lukeaksesi ja lähettääksesi tekstiviestejä työpöydältä sinun on annettava käyttöoikeudet tekstiviesteihin</string>
<string name="telephony_permission_explanation">Puhelujen näyttäminen työpöydällä vaatii käyttöoikeuden puhelulokiin ja puhelimen tilaan</string>
<string name="telephony_optional_permission_explanation">Puhelimen yhteystietoihin on annettava käyttöoikeudet, jotta voit nähdä yhteystiedoissa nimet puhelinnumerojen sijaan</string>
@@ -249,6 +250,7 @@
<string name="notification_channel_media_control">Mediaohjaimet</string>
<string name="notification_channel_filetransfer">Tiedostonsiirto</string>
<string name="notification_channel_high_priority">Korkea etusija</string>
<string name="notification_channel_sms_mms">Uusi viesti</string>
<string name="mpris_stop">Pysäytä nykyinen soitin</string>
<string name="copy_url_to_clipboard">Kopioi verkko-osoite leikepöydälle</string>
<string name="clipboard_toast">Kopioitu leikepöydälle</string>
@@ -303,12 +305,19 @@
<string name="pref_plugin_bigscreen_desc">Käytä laitetta Plasma Bigscreen -kaukosäätimenä</string>
<string name="bigscreen_optional_permission_explanation">Jakaaksesi puhelimen mikrofonisyötteen puhelimen äänisyötteeseen on annettava käyttöoikeus</string>
<string name="bigscreen_speech_extra_prompt">Puhe</string>
<string name="message_reply_label">VASTAA</string>
<string name="mark_as_read_label">MERKITSE LUETUKSI</string>
<string name="user_display_name">Sinä</string>
<string name="set_default_sms_app_title">Lähetä multimediaviesti</string>
<string name="set_group_message_as_mms_title">Lähetä ryhmämultimediaviesti</string>
<string name="set_long_text_as_mms_title">Lähetä pitkä teksti multimediaviestinä</string>
<string name="convert_to_mms_after_title">Muunna multimediaviestiksi</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
<item>After three messages</item>
<item>After four messages</item>
<item>After five messages</item>
<item>Yhden viestin jälkeen</item>
<item>Kahden viestin jälkeen</item>
<item>Kolmen viestin jälkeen</item>
<item>Neljän viestin jälkeen</item>
<item>Viiden viestin jälkeen</item>
</string-array>
<string name="theme_dialog_title">Valitse teema</string>
<string-array name="theme_list">
@@ -316,4 +325,9 @@
<item>Vaalea</item>
<item>Tumma</item>
</string-array>
<string-array name="theme_list_v28">
<item>Järjestelmän oletus</item>
<item>Vaalea</item>
<item>Tumma</item>
</string-array>
</resources>

View File

@@ -226,7 +226,7 @@
<string name="permission_explanation">Ce module externe nécessite des permissions pour fonctionner</string>
<string name="optional_permission_explanation">Vous devez accorder des permissions supplémentaires pour activer toutes les fonctionnalités</string>
<string name="plugins_need_optional_permission">Certaines fonctionnalités de modules externes sont désactivées faute de permissions suffisantes (tapez pour plus d\'informations) :</string>
<string name="share_optional_permission_explanation">Pour partager des fichiers entre votre téléphone et votre ordinateur, veuillez permettre l\'accès à la mémoire de stockage du téléphone</string>
<string name="share_optional_permission_explanation">Pour la réception de fichiers partagés, vous devez sélectionner un dossier de destination.</string>
<string name="telepathy_permission_explanation">Pour lire et écrire des SMS depuis votre ordinateur, veuillez permettre l\'accès aux SMS</string>
<string name="telephony_permission_explanation">Pour voir les appels depuis votre ordinateur, veuillez permettre l\'accès au journal des appels et à l\'état du téléphone</string>
<string name="telephony_optional_permission_explanation">Pour voir le nom du contact au lieu du numéro de téléphone, veuillez permettre l\'accès aux contacts du téléphone</string>
@@ -251,6 +251,7 @@
<string name="notification_channel_media_control">Contrôle multimédia</string>
<string name="notification_channel_filetransfer">Transfert de fichiers</string>
<string name="notification_channel_high_priority">Haute priorité</string>
<string name="notification_channel_sms_mms">Nouveau message</string>
<string name="mpris_stop">Arrêter le lecteur actuel</string>
<string name="copy_url_to_clipboard">Copier l\'URL dans le presse-papiers</string>
<string name="clipboard_toast">Copié dans le presse-papier</string>
@@ -305,16 +306,13 @@
<string name="pref_plugin_bigscreen_desc">Utiliser votre périphérique comme télécommande pour Plasma Bigscreen</string>
<string name="bigscreen_optional_permission_explanation">Pour partager l\'entrée microphone de votre téléphone, vous devez donner accès à l\'entrée audio du téléphone.</string>
<string name="bigscreen_speech_extra_prompt">Discours</string>
<string name="message_reply_label">REPONDRE</string>
<string name="mark_as_read_label">MARQUER COMME LU</string>
<string name="user_display_name">Vous</string>
<string name="set_default_sms_app_title">Envoyer un « MMS »</string>
<string name="set_group_message_as_mms_title">Envoyer un ensemble de « SMS »</string>
<string name="set_long_text_as_mms_title">Envoyer un long message comme un « MMS »</string>
<string name="convert_to_mms_after_title">Convertir en « MMS »</string>
<string name="sms_pref_set_mmsc_dialog_desc">Définir « MMSC »</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Définir un serveur mandataire de « MMS »</string>
<string name="sms_pref_set_mms_proxy_title">Serveur mandataire de « MMS »</string>
<string name="sms_pref_set_mms_port_dialog_desc">Définir le port « MMS »</string>
<string name="sms_pref_set_mms_port_title">Port « MMS »</string>
<string-array name="convert_to_mms_after_entries">
<item>Après un message</item>
<item>Après deux messages</item>

View File

@@ -218,7 +218,6 @@
<string name="permission_explanation">Este complemento necesita permisos para funcionar.</string>
<string name="optional_permission_explanation">Ten que conceder permisos adicionais para activar todas as funcións.</string>
<string name="plugins_need_optional_permission">Algúns complementos teñen funcionalidades desactivadas por mor dunha falta de permisos (toque para máis información):</string>
<string name="share_optional_permission_explanation">Para compartir ficheiros entre o teléfono e o escritorio ten que dar acceso ao almacenamento do teléfono.</string>
<string name="telepathy_permission_explanation">Para ler e escribir SMS desde o escritorio ten que dar permiso de SMS.</string>
<string name="telephony_permission_explanation">Para ver as chamadas de teléfono no escritorio ten que dar permiso aos rexistros de chamadas telefónicas e ao estado do teléfono</string>
<string name="telephony_optional_permission_explanation">Para ver o nome dun contacto en vez dun número de teléfono ten que dar acceso aos contactos do teléfono.</string>

View File

@@ -1,11 +1,32 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Non connectite a ulle dispositivo</string>
<string name="foreground_notification_devices">Connectite : %s</string>
<string name="foreground_notification_send_clipboard">Invia Area de transferentia</string>
<string name="pref_plugin_telephony">Notificator de telephonia</string>
<string name="pref_plugin_telephony_desc">Invia notificationes per appellos in arrivata</string>
<string name="pref_plugin_battery">Reporto de batteria</string>
<string name="pref_plugin_battery_desc">Periodicamente reporta stato de batteria</string>
<string name="pref_plugin_sftp_desc">Permitte navigat in le systema de file de iste dispositivo remotemente</string>
<string name="pref_plugin_clipboard">Sync de area de transferentia</string>
<string name="pref_plugin_clipboard_desc">Comparti le contento de area de transferentia</string>
<string name="pref_plugin_clipboard_sent">Area de transferentia inviate</string>
<string name="pref_plugin_mousepad">Entrata remote</string>
<string name="pref_plugin_presenter">"Sequentia de diapositivas remote"</string>
<string name="pref_plugin_presenter_desc">Usa tu dispositivo per cambiar diapositivas in un presentation</string>
<string name="pref_plugin_mpris">Controlos de Multimedia</string>
<string name="pref_plugin_runcommand">Executa commando</string>
<string name="pref_plugin_ping">Ping</string>
<string name="ok">OK</string>
<string name="sad_ok">OK :(</string>
<string name="cancel">Cancella</string>
<string name="send_ping">Invia Ping</string>
<string name="open_mpris_controls">Controlo mutimedia</string>
<string name="open_mousepad">Entrata remote</string>
<string-array name="mousepad_tap_entries">
<item>Right click</item>
<item>Middle click</item>
<item>Pulsa a dextera</item>
<item>Click in medio</item>
<item>Nihil</item>
</string-array>
<string-array name="mousepad_sensitivity_entries">
@@ -19,16 +40,30 @@
<item>No Acceleration</item>
<item>Weakest</item>
<item>Weaker</item>
<item>Medium</item>
<item>Medie</item>
<item>Stronger</item>
<item>Strongest</item>
</string-array>
<string name="category_connected_devices">Dispositivos connectite</string>
<string name="category_not_paired_devices">Dispositivos disponibile</string>
<string name="device_menu_plugins">"Preferentias de plugin "</string>
<string name="device_menu_unpair">De-Associa</string>
<string name="unknown_device">Dispositivo incognite</string>
<string name="error_canceled_by_other_peer">Cancellate per altere pare</string>
<string name="pair_requested">Coppiar requirite</string>
<plurals name="outgoing_file_title">
<item quantity="one">"Inviante file %1$d a %2$s"</item>
<item quantity="other">Invia %1$d files %2$s</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">"Inviate file a %1$s"</item>
<item quantity="other">"Inviate %2$d files a %1$s"</item>
</plurals>
<string name="pairing_accept">Accepta</string>
<string name="pairing_reject">Rejecta</string>
<string name="settings">Preferentias</string>
<string name="mpris_play">Reproduce</string>
<string name="mpris_pause">Pausa</string>
<string name="mpris_previous">Precedente</string>
<string name="mpris_rew">Rebobina</string>
<string name="mpris_ff">Avantia velocemente</string>
@@ -41,13 +76,50 @@
<item>1 minuta</item>
<item>2 minutas</item>
</string-array>
<string name="custom_device_fab_hint">Adde un dispositivo</string>
<string name="undo">Annulla</string>
<string name="share">Comparti</string>
<string name="sftp_readonly">(solmente de lectura)</string>
<string name="add_device_dialog_title">Adde dispositivo</string>
<string name="add_device_hint">Nomine de hospite o adresse IP</string>
<string name="sftp_storage_preference_display_name">Nomine de monstrar</string>
<string name="sftp_action_mode_menu_delete">Dele</string>
<string name="send_files">Invia files</string>
<string name="device_rename_confirm">Renomina</string>
<string name="refresh">Refresca</string>
<string name="pref_plugin_telepathy">Invia SMS</string>
<string name="pref_plugin_telepathy_mms">Invia MMS</string>
<string name="open">Aperi</string>
<string name="close">Claude</string>
<string name="device_icon_description">Icone de dispositivo</string>
<string name="settings_icon_description">Icone de Preferentias</string>
<string name="presenter_fullscreen">Schermo plen</string>
<string name="notification_channel_media_control">Controlo de multimedia</string>
<string name="notification_channel_filetransfer">Transferimento de file</string>
<string name="notification_channel_high_priority">Prioritate alte</string>
<string name="notification_channel_sms_mms">Nove message</string>
<string name="copy_url_to_clipboard">Copia URL a area de transferentia</string>
<string name="runcommand_notpaired">Dispositivo non es associate</string>
<string name="mute">Surdina</string>
<string name="all">Omne</string>
<string name="devices">Dispositivos</string>
<string name="settings_rename">Nomine de dispositivo</string>
<string name="settings_more_settings_title">Altere preferentias</string>
<string name="extra_options">Optiones extra</string>
<string name="privacy_options">Optiones de confidentialitate</string>
<string name="presenter_pointer">Punctator</string>
<string name="bigscreen_home">Domo o initio</string>
<string name="bigscreen_up">In alto</string>
<string name="bigscreen_left">Sinistra</string>
<string name="bigscreen_select">Selige</string>
<string name="bigscreen_right">Dextera</string>
<string name="bigscreen_down">A basso</string>
<string name="bigscreen_speech_extra_prompt">Voce</string>
<string name="message_reply_label">RESPONSA</string>
<string name="mark_as_read_label">MARCA COMO LEGITE</string>
<string name="user_display_name">Tu</string>
<string name="set_default_sms_app_title">Invia MMS</string>
<string name="set_group_message_as_mms_title">Invia MMS de gruppo</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
@@ -57,12 +129,12 @@
</string-array>
<string-array name="theme_list">
<item>Set by Battery Saver</item>
<item>Light</item>
<item>Legier</item>
<item>Dark</item>
</string-array>
<string-array name="theme_list_v28">
<item/>
<item>Light</item>
<item>Predefinite de systema</item>
<item>Legier</item>
<item>Dark</item>
</string-array>
</resources>

View File

@@ -170,7 +170,6 @@
<string name="permission_explanation">Plugin ini perlu perizinan untuk kerja</string>
<string name="optional_permission_explanation">Kamu perlu mengabulkan perizinan extra untuk memfungsikan semua fungsian</string>
<string name="plugins_need_optional_permission">Beberapa plugin yang memiliki fitur dinonfungsikan karena kurangnya perizinan (ketuk untuk info selebihnya):</string>
<string name="share_optional_permission_explanation">Untuk membagikan file antara teleponmu dan desktopmu kamu harus memberikan akses ke penyimpanan teleponmu</string>
<string name="telepathy_permission_explanation">Untuk membaca dan menulis SMS dari desktopmu kamu harus memberikan perizinan untuk SMS</string>
<string name="telephony_permission_explanation">Untuk melihat panggilan ponsel pada desktop kamu harus memberikan perizinan untuk log panggilan ponsel dan keadaan ponsel</string>
<string name="telephony_optional_permission_explanation">Untuk melihat nama kontak alih-alih nomor ponsel, kamu harus memberikan akses ke kontak ponsel</string>

View File

@@ -226,7 +226,6 @@
<string name="permission_explanation">Questa estensione ha bisogno di permessi per funzionare</string>
<string name="optional_permission_explanation">Devi concedere permessi aggiuntivi per abilitare tutte le funzioni</string>
<string name="plugins_need_optional_permission">Alcune estensioni hanno funzioni disabilitate per una mancanza di permessi (tocca per maggiori informazioni):</string>
<string name="share_optional_permission_explanation">Per condividere i file tra il telefono e il tuo desktop devi dare accesso alla memoria del telefono</string>
<string name="telepathy_permission_explanation">Per leggere e scrivere SMS dal tuo desktop, devi concedere l\'autorizzazione per SMS</string>
<string name="telephony_permission_explanation">Per vedere le chiamate telefoniche dal desktop devi dare l\'autorizzazione per accedere al registro delle chiamate e allo stato del telefono</string>
<string name="telephony_optional_permission_explanation">Per vedere il nome di un contatto invece del numero di telefono devi dare accesso alla rubrica del telefono</string>
@@ -251,6 +250,7 @@
<string name="notification_channel_media_control">Controllo multimediale</string>
<string name="notification_channel_filetransfer">Trasferimento file</string>
<string name="notification_channel_high_priority">Priorità alta</string>
<string name="notification_channel_sms_mms">Nuovo messaggio</string>
<string name="mpris_stop">Ferma il lettore attuale</string>
<string name="copy_url_to_clipboard">Copia l\'URL negli appunti</string>
<string name="clipboard_toast">Copiato negli appunti</string>
@@ -305,16 +305,13 @@
<string name="pref_plugin_bigscreen_desc">Utilizza il tuo dispositivo come telecomando per Plasma Bigscreen</string>
<string name="bigscreen_optional_permission_explanation">Per condividere l\'ingresso del microfono dal telefono è necessario consentire l\'accesso all\'ingresso audio del telefono</string>
<string name="bigscreen_speech_extra_prompt">Parlato</string>
<string name="message_reply_label">RISPONDI</string>
<string name="mark_as_read_label">MARCA COME LETTO</string>
<string name="user_display_name">Tu</string>
<string name="set_default_sms_app_title">Invia MMS</string>
<string name="set_group_message_as_mms_title">Invia MMS di gruppo</string>
<string name="set_long_text_as_mms_title">Invia testo lungo come MMS</string>
<string name="convert_to_mms_after_title">Converti in MMS</string>
<string name="sms_pref_set_mmsc_dialog_desc">Imposta MMSC</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Imposta proxy MMS</string>
<string name="sms_pref_set_mms_proxy_title">Proxy MMS</string>
<string name="sms_pref_set_mms_port_dialog_desc">Impostare porta MMS</string>
<string name="sms_pref_set_mms_port_title">Porta MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>Dopo un messaggio</item>
<item>Dopo due messaggi</item>

View File

@@ -210,7 +210,6 @@
<string name="permission_explanation">このプラグインが機能するには権限が必要です</string>
<string name="optional_permission_explanation">すべての機能を有効にするには、追加の権限を許可する必要があります</string>
<string name="plugins_need_optional_permission">権限が不足しているため、いくつかのプラグインの機能は無効化されています (タップして詳細情報を表示):</string>
<string name="share_optional_permission_explanation">スマートフォンとデスクトップ間でファイルを共有するには、端末のストレージへのアクセスを許可する必要があります</string>
<string name="telepathy_permission_explanation">デスクトップから SMS を送受信するには SMS の権限を付与する必要があります</string>
<string name="telephony_permission_explanation">デスクトップで通話を表示するために、電話の状態と通話履歴の権限を許可する必要があります</string>
<string name="telephony_optional_permission_explanation">電話番号ではなく連絡先名を見るには、端末の連絡先へのアクセスを許可する必要があります</string>

View File

@@ -205,6 +205,8 @@
<string name="no_file_browser">설치된 파일 탐색기가 없습니다.</string>
<string name="pref_plugin_telepathy">SMS 보내기</string>
<string name="pref_plugin_telepathy_desc">데스크톱에서 문자 메시지 보내기</string>
<string name="pref_plugin_telepathy_mms">MMS 보내기</string>
<string name="pref_plugin_telepathy_mms_desc">KDE Connect에서 MMS를 보내려면 기본 SMS 앱으로 설정해야 합니다.</string>
<string name="findmyphone_title">내 휴대폰 찾기</string>
<string name="findmyphone_title_tablet">내 태블릿 찾기</string>
<string name="findmyphone_title_tv">내 TV 찾기</string>
@@ -216,7 +218,6 @@
<string name="permission_explanation">이 플러그인을 사용하려면 권한이 필요합니다</string>
<string name="optional_permission_explanation">모든 기능을 사용하려면 추가 권한이 필요합니다</string>
<string name="plugins_need_optional_permission">일부 플러그인은 권한이 없어서 비활성화되었습니다(정보를 보려면 누르기):</string>
<string name="share_optional_permission_explanation">휴대폰과 데스크톱간 파일을 공유하려면 휴대폰 저장소 접근 권한이 필요합니다</string>
<string name="telepathy_permission_explanation">데스크톱에서 문자 메시지를 읽고 보내려면 문자 메시지 접근 권한이 필요합니다</string>
<string name="telephony_permission_explanation">데스크톱에서 통화와 문자 메시지를 보려면 통화 기록 및 휴대폰 상태 접근 권한이 필요합니다</string>
<string name="telephony_optional_permission_explanation">전화번호 대신 연락처에 등록된 이름을 보려면 주소록 접근 권한이 필요합니다</string>
@@ -241,6 +242,7 @@
<string name="notification_channel_media_control">미디어 제어</string>
<string name="notification_channel_filetransfer">파일 전송</string>
<string name="notification_channel_high_priority">높은 우선 순위</string>
<string name="notification_channel_sms_mms">새 메시지</string>
<string name="mpris_stop">현재 재생기 정지</string>
<string name="copy_url_to_clipboard">클립보드로 URL 복사</string>
<string name="clipboard_toast">클립보드에 복사됨</string>
@@ -295,12 +297,19 @@
<string name="pref_plugin_bigscreen_desc">내 장치를 Plasma 큰 화면의 리모콘으로 사용</string>
<string name="bigscreen_optional_permission_explanation">휴대폰 마이크 입력을 공유하려면 오디오 입력 접근 권한이 필요합니다</string>
<string name="bigscreen_speech_extra_prompt">말하기</string>
<string name="message_reply_label">답장</string>
<string name="mark_as_read_label">읽은 상태로 표시</string>
<string name="user_display_name"></string>
<string name="set_default_sms_app_title">MMS 보내기</string>
<string name="set_group_message_as_mms_title">그룹 MMS 보내기</string>
<string name="set_long_text_as_mms_title">긴 텍스트를 MMS로 보내기</string>
<string name="convert_to_mms_after_title">MMS로 변환</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
<item>After three messages</item>
<item>After four messages</item>
<item>After five messages</item>
<item>메시지 1개 이후</item>
<item>메시지 2개 이후</item>
<item>메시지 3개 이후</item>
<item>메시지 4개 이후</item>
<item>메시지 5개 이후</item>
</string-array>
<string name="theme_dialog_title">테마 선택</string>
<string-array name="theme_list">
@@ -308,4 +317,9 @@
<item>밝음</item>
<item>어두움</item>
</string-array>
<string-array name="theme_list_v28">
<item>시스템 기본값</item>
<item>밝음</item>
<item>어두움</item>
</string-array>
</resources>

View File

@@ -240,7 +240,6 @@
<string name="permission_explanation">Šis papildinys tam, kad veiktų, reikalauja leidimų</string>
<string name="optional_permission_explanation">Norėdami įjungti visas funkcijas, turite suteikti papildomus leidimus</string>
<string name="plugins_need_optional_permission">Kai kurių papildinių ypatybės, dėl leidimų trūkumo, buvo išjungtos (bakstelėkite išsamesnei informacijai):</string>
<string name="share_optional_permission_explanation">Norėdami bendrinti failus tarp savo telefono ir savo darbalaukio, turite suteikti prieigą prie telefono saugyklos</string>
<string name="telepathy_permission_explanation">Norėdami skaityti ir rašyti SMS žinutes iš savo darbalaukio, turite suteikti prieigą prie SMS žinučių</string>
<string name="telephony_permission_explanation">Norėdami matyti telefono skambučius darbalaukyje, turite suteikti prieigą prie telefono skambučių žurnalo ir telefono būsenos</string>
<string name="telephony_optional_permission_explanation">Norėdami vietoj adresato numerio matyti adresato vardą, turite suteikti priegą prie telefono adresatų</string>

View File

@@ -226,7 +226,7 @@
<string name="permission_explanation">Deze plug-in heeft toestemming nodig om te werken</string>
<string name="optional_permission_explanation">U moet toestemming geven om alle functies in te schakelen</string>
<string name="plugins_need_optional_permission">Sommige plug-ins hebben functies uitgeschakeld vanwege ontbrekende toestemming (tik voor meer informatie):</string>
<string name="share_optional_permission_explanation">Om bestanden tussen uw telefoon en uw bureaublad te delen moet u toegang geven tot de opslag van uw telefoon</string>
<string name="share_optional_permission_explanation">Om gedeelde bestanden te ontvangen moet u een bestemmingsmap kiezen</string>
<string name="telepathy_permission_explanation">Om een SMS te lezen of te schrijven vanaf uw bureaublad moet u toestemming geven tot SMS</string>
<string name="telephony_permission_explanation">Om telefoonoproepen te zien op het bureaublad moet u toestemming geven tot telefoonoproeplogs en telefoonstatus</string>
<string name="telephony_optional_permission_explanation">Om een naam van een contactpersoon te zien in plaats van een telefoonnummer moet u toegang geven tot de contacten in uw telefoon</string>
@@ -251,6 +251,7 @@
<string name="notification_channel_media_control">Besturing van media</string>
<string name="notification_channel_filetransfer">Bestandsoverdracht</string>
<string name="notification_channel_high_priority">Hoge prioriteit</string>
<string name="notification_channel_sms_mms">Nieuw bericht</string>
<string name="mpris_stop">Stop de huidige speler</string>
<string name="copy_url_to_clipboard">URL-adres kopiëren naar klembord</string>
<string name="clipboard_toast">Gekopieerd naar klembord</string>
@@ -305,16 +306,13 @@
<string name="pref_plugin_bigscreen_desc">Gebruik uw apparaat als een Bigscreen op afstand</string>
<string name="bigscreen_optional_permission_explanation">Om microfooninvoer vanaf uw telefoon te delen moet u toegang geven tot de geluidsinvoer van de telefoon</string>
<string name="bigscreen_speech_extra_prompt">Spraak</string>
<string name="message_reply_label">BEANTWOORDEN</string>
<string name="mark_as_read_label">MARKEREN ALS GELEZEN</string>
<string name="user_display_name">U</string>
<string name="set_default_sms_app_title">MMS verzenden</string>
<string name="set_group_message_as_mms_title">MMS verzenden naar groep</string>
<string name="set_long_text_as_mms_title">Lange tekst als MMS verzenden</string>
<string name="convert_to_mms_after_title">Naar MMS converteren</string>
<string name="sms_pref_set_mmsc_dialog_desc">MMSC instellen</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">MMS-proxy instellen</string>
<string name="sms_pref_set_mms_proxy_title">MMS-proxy</string>
<string name="sms_pref_set_mms_port_dialog_desc">MMS-poort instellen</string>
<string name="sms_pref_set_mms_port_title">MMS-poort</string>
<string-array name="convert_to_mms_after_entries">
<item>Na één bericht</item>
<item>Na twee berichten</item>

View File

@@ -90,7 +90,7 @@
<string name="encryption_info_title">Krypteringsinfo</string>
<string name="encryption_info_msg_no_ssl">Den andre eininga brukar ein gammal versjon av KDE Connect, med ein utdatert krypteringsmetode.</string>
<string name="my_device_fingerprint">SHA-fingeravtrykket til einingssertifikatet er:</string>
<string name="remote_device_fingerprint">SHA-fingeravtrykket fjerneiningssertifikatet er:</string>
<string name="remote_device_fingerprint">SHA-fingeravtrykket til fjerneiningssertifikatet er:</string>
<string name="pair_requested">Paringsførespurnad</string>
<string name="pairing_request_from">Paringsførespurnad frå %1s</string>
<plurals name="incoming_file_title">
@@ -213,6 +213,8 @@
<string name="no_file_browser">Ingen filhandsamarar er installerte.</string>
<string name="pref_plugin_telepathy">Send SMS</string>
<string name="pref_plugin_telepathy_desc">Send tekstmeldingar frå datamaskina</string>
<string name="pref_plugin_telepathy_mms">Send MMS</string>
<string name="pref_plugin_telepathy_mms_desc">Du må velja KDE Connect som standard­app for å kunna senda MMS.</string>
<string name="findmyphone_title">Finn telefonen min</string>
<string name="findmyphone_title_tablet">Finn nettbrettet mitt</string>
<string name="findmyphone_title_tv">Finn TV-en min</string>
@@ -224,7 +226,6 @@
<string name="permission_explanation">Dette tillegget treng utvida løyve for å fungera</string>
<string name="optional_permission_explanation">Du må gje utvida løyve for at alle funksjonane skal fungera</string>
<string name="plugins_need_optional_permission">På grunn av manglande løyve vil desse funksjonane ikkje verka (trykk på dei for meir informasjon):</string>
<string name="share_optional_permission_explanation">For å kunna dela filer mellom telefonen og datamaskina må du gje appen lese- og skriveløyve til lagringsområdet på telefonen</string>
<string name="telepathy_permission_explanation">For å kunna lesa og skriva tekstmeldingar frå datamaskina må du gje appen tilgang til SMS</string>
<string name="telephony_permission_explanation">For å kunna sjå telefonsamtalar på datamaskina må du gje appen tilgang til samtaleloggar og telefonstatus</string>
<string name="telephony_optional_permission_explanation">For å kunna sjå namn på kontaktar i staden for berre telefonnummeret må du gje appen tilgang til kontaktlista di</string>
@@ -249,6 +250,7 @@
<string name="notification_channel_media_control">Mediestyring</string>
<string name="notification_channel_filetransfer">Filoverføring</string>
<string name="notification_channel_high_priority">Høg prioritet</string>
<string name="notification_channel_sms_mms">Ny melding</string>
<string name="mpris_stop">Stopp gjeldande avspelar</string>
<string name="copy_url_to_clipboard">Kopier adresse til utklippstavla</string>
<string name="clipboard_toast">Kopiert til utklippstavla</string>
@@ -303,12 +305,19 @@
<string name="pref_plugin_bigscreen_desc">Bruk eininga som fjernkontroll for Plasma Bigscreen</string>
<string name="bigscreen_optional_permission_explanation">For å kunna dela mikrofon­lyd frå telefonen må du gje appen mikrofontilgang</string>
<string name="bigscreen_speech_extra_prompt">Tale</string>
<string name="message_reply_label">SVAR</string>
<string name="mark_as_read_label">MERK SOM LESEN</string>
<string name="user_display_name">Du</string>
<string name="set_default_sms_app_title">Send MMS</string>
<string name="set_group_message_as_mms_title">Send gruppe-MMS</string>
<string name="set_long_text_as_mms_title">Send lang tekst som MMS</string>
<string name="convert_to_mms_after_title">Gjer om til MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
<item>After three messages</item>
<item>After four messages</item>
<item>After five messages</item>
<item>Etter éi melding</item>
<item>Etter to meldingar</item>
<item>Etter tre meldingar</item>
<item>Etter fire meldingar</item>
<item>Etter fem meldingar</item>
</string-array>
<string name="theme_dialog_title">Vel tema</string>
<string-array name="theme_list">
@@ -316,4 +325,9 @@
<item>Lyst</item>
<item>Mørkt</item>
</string-array>
<string-array name="theme_list_v28">
<item>Systemstandard</item>
<item>Lyst</item>
<item>Mørk</item>
</string-array>
</resources>

View File

@@ -234,7 +234,6 @@
<string name="permission_explanation">Ta wtyczka wymaga uprawnień do działania</string>
<string name="optional_permission_explanation">Musisz przydzielić dodatkowe uprawnienia, aby włączyć wszystkie funkcje</string>
<string name="plugins_need_optional_permission">Niektóre wtyczki mają ograniczone możliwości ze względu na ograniczone uprawnienia (stuknij, aby dowiedzieć się więcej)</string>
<string name="share_optional_permission_explanation">Aby udostępniać pliki z twojego telefonu na twoim komputerze, należy zezwolić na dostęp do pamięci telefonu</string>
<string name="telepathy_permission_explanation">Aby odbierać i wysyłać esemesy z pulpitu, należy nadać uprawnienia do esemesów</string>
<string name="telephony_permission_explanation">Aby widzieć rozmowy telefoniczne na pulpicie, należy nadać uprawnienia do dziennika rozmów i stanu telefonu</string>
<string name="telephony_optional_permission_explanation">Aby widzieć nazwę kontaktu zamiast numeru telefonu, należy zezwolić na dostęp do kontaktów telefonu</string>

View File

@@ -226,7 +226,6 @@
<string name="permission_explanation">Este plugin precisa de permissões para funcionar</string>
<string name="optional_permission_explanation">Você precisa conceder permissões extras para ativar todas as funções</string>
<string name="plugins_need_optional_permission">Alguns plugins possuem recursos desativados devido à falta de permissões (toque para obter mais informações):</string>
<string name="share_optional_permission_explanation">Para compartilhar arquivos entre o seu celular e o seu ambiente de trabalho é necessário permissão para acessar o armazenamento do seu celular</string>
<string name="telepathy_permission_explanation">Para ler e gravar SMS a partir do seu ambiente de trabalho é necessário conceder permissão para SMS</string>
<string name="telephony_permission_explanation">Para ver as chamadas telefônicas no seu ambiente de trabalho é preciso dar permissões para registro de chamadas telefônicas e do estado do telefone</string>
<string name="telephony_optional_permission_explanation">Para ver o nome de um contato em vez do seu número de telefone é necessário conceder acesso aos contatos do celular</string>
@@ -251,6 +250,7 @@
<string name="notification_channel_media_control">Controle multimídia</string>
<string name="notification_channel_filetransfer">Transferência de arquivo</string>
<string name="notification_channel_high_priority">Prioridade alta</string>
<string name="notification_channel_sms_mms">Nova mensagem</string>
<string name="mpris_stop">Parar o reprodutor atual</string>
<string name="copy_url_to_clipboard">Copiar URL para a área de transferência</string>
<string name="clipboard_toast">Copiado para a área de transferência</string>
@@ -305,16 +305,13 @@
<string name="pref_plugin_bigscreen_desc">Use seu dispositivo como um controle remoto para o Plasma Bigscreen</string>
<string name="bigscreen_optional_permission_explanation">Para compartilhar a entrada do microfone de seu telefone você precisa conceder acesso à entrada de áudio do telefone</string>
<string name="bigscreen_speech_extra_prompt">Falar</string>
<string name="message_reply_label">Responder</string>
<string name="mark_as_read_label">Marcar como lido</string>
<string name="user_display_name">Você</string>
<string name="set_default_sms_app_title">Enviar MMS</string>
<string name="set_group_message_as_mms_title">Enviar MMS em grupo</string>
<string name="set_long_text_as_mms_title">Enviar texto longo como MMS</string>
<string name="convert_to_mms_after_title">Converter para MMS</string>
<string name="sms_pref_set_mmsc_dialog_desc">Definir MMSC</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Definir proxy MMS</string>
<string name="sms_pref_set_mms_proxy_title">Proxy MMS</string>
<string name="sms_pref_set_mms_port_dialog_desc">Definir porta MMS</string>
<string name="sms_pref_set_mms_port_title">Porta MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>Após uma mensagem</item>
<item>Após duas mensagens</item>

View File

@@ -226,7 +226,7 @@
<string name="permission_explanation">Este \'plugin\' precisa de permissões para funcionar</string>
<string name="optional_permission_explanation">Precisa de dar permissões extra para activar todas as funcionalidades</string>
<string name="plugins_need_optional_permission">Alguns \'plugins\' têm funcionalidades desactivadas devido à falta de permissões (toque para obter mais informações):</string>
<string name="share_optional_permission_explanation">Para partilhar ficheiros entre o seu telemóvel e o seu ambiente de trabalho, precisa de permissão para aceder ao armazenamento do seu telemóvel</string>
<string name="share_optional_permission_explanation">Para receber os ficheiros partilhados, tem de escolher uma pasta de destino</string>
<string name="telepathy_permission_explanation">Para ler e escrever SMS\'s a partir do seu ambiente de trabalho, precisa de dar permissões para os SMS\'s</string>
<string name="telephony_permission_explanation">Para ver as chamadas telefónicas a partir do seu ambiente de trabalho, precisa de dar permissões para o registo de chamadas telefónicas e do estado do telemóvel</string>
<string name="telephony_optional_permission_explanation">Para ver o nome de um contacto em vez do seu número de telefone, precisa de dar acesso aos contactos do telemóvel</string>
@@ -251,6 +251,7 @@
<string name="notification_channel_media_control">Comando multimédia</string>
<string name="notification_channel_filetransfer">Transferência de ficheiros</string>
<string name="notification_channel_high_priority">Alta prioridade</string>
<string name="notification_channel_sms_mms">Nova Mensagem</string>
<string name="mpris_stop">Parar o leitor actual</string>
<string name="copy_url_to_clipboard">Copiar o URL para a área de transferência</string>
<string name="clipboard_toast">Copiado para a área de transferência</string>
@@ -305,16 +306,13 @@
<string name="pref_plugin_bigscreen_desc">Use o seu dispositivo como um comando à distância para o Plasma em Ecrã Grande</string>
<string name="bigscreen_optional_permission_explanation">Para partilhar os dados provenientes do microfone do seu telefone, terá de dar acesso à entrada de áudio do telefone</string>
<string name="bigscreen_speech_extra_prompt">Fala</string>
<string name="message_reply_label">RESPONDER</string>
<string name="mark_as_read_label">MARCAR COMO LIDA</string>
<string name="user_display_name">Você</string>
<string name="set_default_sms_app_title">Enviar um MMS</string>
<string name="set_group_message_as_mms_title">Enviar um MMS em grupo</string>
<string name="set_long_text_as_mms_title">Enviar o texto extenso como MMS</string>
<string name="convert_to_mms_after_title">Converter para MMS</string>
<string name="sms_pref_set_mmsc_dialog_desc">Definir o MMSC</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Definir o \'proxy\' do MMS</string>
<string name="sms_pref_set_mms_proxy_title">\'Proxy\' do MMS</string>
<string name="sms_pref_set_mms_port_dialog_desc">Definir o porto do MMS</string>
<string name="sms_pref_set_mms_port_title">Porto do MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>Ao fim de uma mensagem</item>
<item>Ao fim de duas mensagens</item>

View File

@@ -1,44 +1,85 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="kde_connect">KDE Connect</string>
<string name="foreground_notification_no_devices">Niciun dispozitiv conectat</string>
<string name="foreground_notification_devices">Conectat la: %s</string>
<string name="foreground_notification_send_clipboard">Trimite clipboard</string>
<string name="pref_plugin_telephony">Notificator de telefonie</string>
<string name="pref_plugin_telephony_desc">Trimite notificări pentru apeluri de intrare</string>
<string name="pref_plugin_battery">Raport acumulator</string>
<string name="pref_plugin_battery_desc">Raportează periodic starea acumulatorului</string>
<string name="pref_plugin_sftp">Expunere sistem de fișiere</string>
<string name="pref_plugin_sftp_desc">Permite răsfoirea de la distanță a sistemul de fișiere al acestui dispozitiv</string>
<string name="pref_plugin_clipboard">Sincronizare clipboard</string>
<string name="pref_plugin_clipboard_desc">Partajează conținutul clipboardului</string>
<string name="pref_plugin_clipboard_desc">Partajează conținutul clipboard-ului</string>
<string name="pref_plugin_clipboard_sent">Clipboard trimis</string>
<string name="pref_plugin_mousepad">Introducere de la distanță</string>
<string name="pref_plugin_mousepad_desc">Folosiți telefonul sau tableta ca zonă tactilă și tastatură</string>
<string name="pref_plugin_presenter">Telecomandă pentru diaporamă</string>
<string name="pref_plugin_presenter_desc">Folosiți dispozitivul pentru a schimba diapozitivele dintr-o prezentare</string>
<string name="pref_plugin_remotekeyboard">Primește apăsări de taste de la distanță</string>
<string name="pref_plugin_remotekeyboard_desc">Primește evenimente de apăsare a tastelor de la dispozitive distante</string>
<string name="pref_plugin_mpris">Controale multimedia</string>
<string name="pref_plugin_mpris_desc">Furnizează control de la distanță pentru lectorul multimedia</string>
<string name="pref_plugin_runcommand">Rulează comandă</string>
<string name="pref_plugin_runcommand_desc">Declanșează comenzi la distanță de pe telefon sau tabletă</string>
<string name="pref_plugin_contacts">Sincronizator de contacte</string>
<string name="pref_plugin_contacts_desc">Permite sincronizarea cărții de telefoane a dispozitivului</string>
<string name="pref_plugin_ping">Ping</string>
<string name="pref_plugin_ping_desc">Trimite și primește ping-uri</string>
<string name="pref_plugin_notifications">Sincronizare notificări</string>
<string name="pref_plugin_notifications_desc">Accesați-vă notificările de pe alte dispozitive</string>
<string name="pref_plugin_receive_notifications">Primește notificări</string>
<string name="pref_plugin_receive_notifications_desc">Primește notificări de pe alte dispozitive și le afișează în Android</string>
<string name="pref_plugin_sharereceiver">Partajează și primește</string>
<string name="pref_plugin_sharereceiver_desc">Partajează fișiere și URL-uri între dispozitive</string>
<string name="device_list_empty">Niciun dispozitiv</string>
<string name="ok">Bine</string>
<string name="sad_ok">Bine :(</string>
<string name="cancel">Renunță</string>
<string name="open_settings">Deschide configurările</string>
<string name="no_permissions">Trebuie să acordați permisiunea pentru accesarea notificărilor</string>
<string name="no_permission_mprisreceiver">Pentru a putea controla lectorul multimedia, trebuie să permiteți accesul la notificări</string>
<string name="no_permissions_remotekeyboard">Pentru a primi apăsări de taste, trebuie să activați Tastatura de la distanță KDE Connect</string>
<string name="send_ping">Trimite ping</string>
<string name="open_mpris_controls">Control multimedia</string>
<string name="remotekeyboard_editing_only_title">Manipulează taste de la distanță numai la redactare</string>
<string name="remotekeyboard_not_connected">Nu e nicio conexiune activă de tastatură la distanță, stabiliți una în kdeconnect</string>
<string name="remotekeyboard_connected">Conexiunea de tastatură la distanță e activă</string>
<string name="remotekeyboard_multiple_connections">Sunt mai multe conexiuni de tastatură la distanță, alegeți dispozitivul de configurat</string>
<string name="open_mousepad">Introducere de la distanță</string>
<string name="mousepad_info">"Mișcați un deget pe ecran pentru a muta cursorul mausului. Atingeți pentru clic, folosiți două/trei degete pentru butoanele drept și mijlociu. Folosiți 2 degete pentru a derula. Apăsați lung pentru tragere-și-lăsare."</string>
<string name="mousepad_double_tap_settings_title">Stabilește acțiunea de atingere cu două degete</string>
<string name="mousepad_triple_tap_settings_title">Stabilește acțiunea de atingere cu trei degete</string>
<string name="mousepad_sensitivity_settings_title">Stabilește sensibilitatea zonei tactile</string>
<string name="mousepad_acceleration_profile_settings_title">Stabilește accelerația indicatorului</string>
<string name="mousepad_scroll_direction_title">Inversează direcția derulării</string>
<string-array name="mousepad_tap_entries">
<item>Right click</item>
<item>Middle click</item>
<item>Nothing</item>
<item>Clic-dreapta</item>
<item>Clic-mijloc</item>
<item>Nimic</item>
</string-array>
<string-array name="mousepad_sensitivity_entries">
<item>Slowest</item>
<item>Above Slowest</item>
<item>Default</item>
<item>Above Default</item>
<item>Fastest</item>
<item>Cea mai lentă</item>
<item>Mai puțin lentă</item>
<item>Implicită</item>
<item>Peste implicită</item>
<item>Cea mai rapidă</item>
</string-array>
<string-array name="mousepad_acceleration_profile_entries">
<item>No Acceleration</item>
<item>Weakest</item>
<item>Weaker</item>
<item>Medium</item>
<item>Stronger</item>
<item>Strongest</item>
<item>Fără accelerație</item>
<item>Cea mai slabă</item>
<item>Mai slabă</item>
<item>Medie</item>
<item>Mai puternică</item>
<item>Cea mai puternică</item>
</string-array>
<string name="category_connected_devices">Dispozitive conectate</string>
<string name="category_not_paired_devices">Dispozitive disponibile</string>
<string name="category_remembered_devices">Dispozitive memorizate</string>
<string name="device_menu_plugins">Configurare extensii</string>
<string name="device_menu_unpair">Dezasociază</string>
<string name="pair_new_device">Asociază dispozitiv nou</string>
<string name="unknown_device">Dispozitiv necunoscut</string>
<string name="error_not_reachable">Dispozitivul nu e accesibil</string>
<string name="error_already_paired">Dispozitiv asociat deja</string>
@@ -46,43 +87,255 @@
<string name="error_timed_out">A expirat</string>
<string name="error_canceled_by_user">Anulat de către utilizator</string>
<string name="error_canceled_by_other_peer">Anulat de către partener</string>
<string name="encryption_info_title">Informații despre criptare</string>
<string name="encryption_info_msg_no_ssl">Celălalt dispozitiv nu folosește o versiune recentă de KDE Connect, se va folosi metoda de criptare moștenită.</string>
<string name="my_device_fingerprint">Amprenta SHA1 a certificatului acestui dispozitiv e:</string>
<string name="remote_device_fingerprint">Amprenta SHA1 a certificatului dispozitivului distant e:</string>
<string name="pair_requested">Asociere cerută</string>
<string name="pairing_request_from">Cerere de asociere de la %1s</string>
<plurals name="incoming_file_title">
<item quantity="one">Se primește %1$d fișier de la %2$s</item>
<item quantity="few">Se primesc %1$d fișiere de la %2$s</item>
<item quantity="other">Se primesc %1$d de fișiere de la %2$s</item>
</plurals>
<plurals name="incoming_files_text">
<item quantity="one">Fișier: %1s</item>
<item quantity="few">(Fișier %2$d din %3$d) : %1$s</item>
<item quantity="other">(Fișier %2$d din %3$d) : %1$s</item>
</plurals>
<plurals name="outgoing_file_title">
<item quantity="one">Se trimite %1$d fișier la %2$s</item>
<item quantity="few">Se trimit %1$d fișiere la %2$s</item>
<item quantity="other">Se trimit %1$d de fișiere la %2$s</item>
</plurals>
<plurals name="outgoing_files_text">
<item quantity="one">Fișier: %1$s</item>
<item quantity="few">(Fișier %2$d din %3$d) : %1$s</item>
<item quantity="other">(Fișier %2$d din %3$d) : %1$s</item>
</plurals>
<plurals name="received_files_title">
<item quantity="one">S-a primit un fișier de la %1$s</item>
<item quantity="few">S-au primit %2$d fișiere de la %1$s</item>
<item quantity="other">S-au primit %2$d de fișiere de la %1$s</item>
</plurals>
<plurals name="received_files_fail_title">
<item quantity="one">Primirea unui fișier de la %1$s a eșuat</item>
<item quantity="few">Primirea a %2$d din %3$d fișiere de la %1$s a eșuat</item>
<item quantity="other">Primirea a %2$d din %3$d de fișiere de la %1$s a eșuat</item>
</plurals>
<plurals name="sent_files_title">
<item quantity="one">A fost trimis un fișier la %1$s</item>
<item quantity="few">Au fost trimise %2$d fișiere la %1$s</item>
<item quantity="other">Au fost trimise %2$d de fișiere la %1$s</item>
</plurals>
<plurals name="send_files_fail_title">
<item quantity="one">A eșuat trimiterea fișierului la %1$s</item>
<item quantity="few">A eșuat trimiterea a %2$d din %3$d fișiere la %1$s</item>
<item quantity="other">A eșuat trimiterea a %2$d din %3$d de fișiere la %1$s</item>
</plurals>
<string name="tap_to_open">Atingeți pentru a deschide</string>
<string name="received_file_text">Atingeți pentru a deschide „%1s”</string>
<string name="cannot_create_file">Nu se poate crea fișierul %s</string>
<string name="tap_to_answer">Atingeți pentru a răspunde</string>
<string name="right_click">Trimite clic drept</string>
<string name="middle_click">Trimite clic mijlociu</string>
<string name="show_keyboard">Arată tastatura</string>
<string name="device_not_paired">Dispozitiv neasociat</string>
<string name="request_pairing">Cere asocierea</string>
<string name="pairing_accept">Acceptă</string>
<string name="pairing_reject">Respinge</string>
<string name="settings">Configurări</string>
<string name="mpris_play">Redă</string>
<string name="mpris_pause">Întrerupe</string>
<string name="mpris_previous">Precedent</string>
<string name="mpris_rew">Derulează</string>
<string name="mpris_ff">Derulare rapidă înainte</string>
<string name="mpris_rew">Rebobinează</string>
<string name="mpris_ff">Derulează rapid înainte</string>
<string name="mpris_next">Următor</string>
<string name="mpris_volume">Volum</string>
<string name="mpris_time_settings_title">Butoane pentru derulare/rebobinare</string>
<string name="mpris_time_settings_summary">Ajustează durata de derulat/rebobinat rapid la apăsare</string>
<string-array name="mpris_time_entries">
<item>10 seconds</item>
<item>20 seconds</item>
<item>30 seconds</item>
<item>1 minute</item>
<item>2 minutes</item>
<item>10 secunde</item>
<item>20 de secunde</item>
<item>30 de secunde</item>
<item>1 minut</item>
<item>2 minute</item>
</string-array>
<string name="mpris_notification_settings_title">Arată notificare cu control multimedia</string>
<string name="mpris_notification_settings_summary">Permite controlul lectorilor multimedia fără a deschide KDE Connect</string>
<string name="share_to">Partajează cu...</string>
<string name="protocol_version_newer">Acest dispozitiv folosește o versiune mai nouă a protocolului</string>
<string name="plugin_settings_with_name">Configurări „%s”</string>
<string name="invalid_device_name">Denumire nevalidă a dispozitivului</string>
<string name="shareplugin_text_saved">S-a primit text, salvat în clipboard</string>
<string name="custom_devices_settings">Listă de dispozitive personalizate</string>
<string name="custom_device_list">Adaugă dispozitive după IP</string>
<string name="custom_device_deleted">S-a șters dispozitiv personalizat</string>
<string name="custom_device_list_help">Dacă dispozitivul nu e detectat automat, îi puteți adăuga adresa IP saunumele de gazdă apăsând butonul flotant de acțiune</string>
<string name="custom_device_fab_hint">Adaugă dispozitiv</string>
<string name="undo">Desfă</string>
<string name="share_notification_preference">Notificări zgomotoase</string>
<string name="share_notification_preference_summary">Vibrează și redă un sunet la primirea unui fișier</string>
<string name="share_destination_customize">Specifică dosarul destinație</string>
<string name="share_destination_customize_summary_disabled">Fișierele primite vor apărea în Descărcări</string>
<string name="share_destination_customize_summary_enabled">Fișierele vor fi stocate în dosarul de mai jos</string>
<string name="share_destination_folder_preference">Dosar destinație</string>
<string name="share">Partajează</string>
<string name="share_received_file">Partajează „%s”</string>
<string name="title_activity_notification_filter">Filtru de notificări</string>
<string name="filter_apps_info">Notificările vor fi sincronizate pentru aplicațiile alese.</string>
<string name="sftp_sdcard_num">Card SD %d</string>
<string name="sftp_sdcard">Card SD</string>
<string name="sftp_readonly">(numai citire)</string>
<string name="sftp_camera">Fotografii</string>
<string name="add_device_dialog_title">Adaugă dispozitiv</string>
<string name="add_device_hint">Nume gazdă sau adresă IP</string>
<string name="sftp_preference_detected_sdcards">Carduri SD detectate</string>
<string name="sftp_preference_edit_sdcard_title">Modifică card SD</string>
<string name="sftp_preference_configured_storage_locations">Locuri de stocare configurate</string>
<string name="sftp_preference_add_storage_location_title">Adaugă loc de stocare</string>
<string name="sftp_preference_edit_storage_location">Modifică locul de stocare</string>
<string name="sftp_preference_add_camera_shortcut">Adaugă scurtătură pentru dosarul camerei</string>
<string name="sftp_preference_add_camera_shortcut_summary_on">Adaugă o scurtătură pentru dosarul camerei de fotografiat</string>
<string name="sftp_preference_add_camera_shortcut_summary_off">Nu adăuga o scurtătură pentru dosarul camerei de fotografiat</string>
<string name="sftp_storage_preference_storage_location">Loc de stocare</string>
<string name="sftp_storage_preference_storage_location_already_configured">Această amplasare a fost configurată deja</string>
<string name="sftp_storage_preference_click_to_select">apasă pentru a alege</string>
<string name="sftp_storage_preference_display_name">Denumire afișată</string>
<string name="sftp_storage_preference_display_name_already_used">Această denumire afișată e folosită deja</string>
<string name="sftp_storage_preference_display_name_cannot_be_empty">Denumirea afișată nu poate fi goală</string>
<string name="sftp_action_mode_menu_delete">Șterge</string>
<string name="sftp_no_sdcard_detected">Niciun card SD detectat</string>
<string name="sftp_no_storage_locations_configured">Niciun loc de stocare configurat</string>
<string name="sftp_saf_permission_explanation">Pentru a accesa fișiere de la distanță, trebuie să configurați locuri de stocare</string>
<string name="no_players_connected">Niciun program de redare găsit</string>
<string name="send_files">Trimite fișiere</string>
<string name="pairing_title">Dispozitive KDE Connect</string>
<string name="pairing_description">Aici ar trebui să apară alte dispozitive ce rulează KDE Connect în aceeași rețea.</string>
<string name="device_rename_title">Redenumește dispozitivul</string>
<string name="device_rename_confirm">Redenumește</string>
<string name="refresh">Reîmprospătează</string>
<string name="unreachable_description">Acest dispozitiv asociat nu e disponibil. Asigurați-vă că e conectat la aceeași rețea.</string>
<string name="no_wifi">Nu v-ați conectat la o rețea Wi-Fi, așa că s-ar putea să nu vedeți niciun dispozitiv.Apăsați aici pentru a activa Wi-Fi.</string>
<string name="on_non_trusted_message">În afara unei rețele de încredere: descoperirea automată e dezactivată.</string>
<string name="no_file_browser">Nu e niciun navigator de fișiere instalat.</string>
<string name="pref_plugin_telepathy">Expediază SMS</string>
<string name="pref_plugin_telepathy_desc">Trimite mesaje textuale de pe calculatorul de birou</string>
<string name="pref_plugin_telepathy_mms">Expediază MMS</string>
<string name="pref_plugin_telepathy_mms_desc">Pentru a putea trimite MMS-uri din KDE Connect, trebuie să-l indicați ca aplicație implicită de SMS.</string>
<string name="findmyphone_title">Găsește-mi telefonul</string>
<string name="findmyphone_title_tablet">Găsește-mi tableta</string>
<string name="findmyphone_title_tv">Găsește-mi televizorul</string>
<string name="findmyphone_description">Sună acest dispozitiv ca să-l puteți găsi</string>
<string name="findmyphone_found">L-am găsit</string>
<string name="open">Deschide</string>
<string name="close">Închide</string>
<string name="plugins_need_permission">Unele extensii necesită permisiuni pentru a funcționa (atingeți pentru informații suplimentare):</string>
<string name="permission_explanation">Această extensie are nevoie de permisiuni ca să lucreze</string>
<string name="optional_permission_explanation">Trebuie să acordați permisiuni suplimentare pentru activarea tuturor funcțiilor</string>
<string name="plugins_need_optional_permission">Unele extensii au caracteristici dezactivate din cauza lipsei permisiunilor (atingeți pentru informații suplimentare):</string>
<string name="telepathy_permission_explanation">Pentru a citi și scrie SMS de pe calculatorul de birou, trebuie să acordați permisiuni asupra SMS-urilor</string>
<string name="telephony_permission_explanation">Pentru a vedea apelurile pe calculatorul de birou, trebuie să acordați permisiuni asupra jurnalului de apeluri și stării telefonului</string>
<string name="telephony_optional_permission_explanation">Pentru a vedea numele contactului în locul numărului de telefon, trebuie să permiteți accesul la contactele telefonului.</string>
<string name="contacts_permission_explanation">Pentru a vă partaja agenda de contacte cu biroul, trebuie să permiteți accesul la contacte</string>
<string name="select_ringtone">Alegeți tonul de apel</string>
<string name="telephony_pref_blocked_title">Numere blocate</string>
<string name="telephony_pref_blocked_dialog_desc">Nu arăta apeluri și SMS de la aceste numere. Specificați un număr pe linie</string>
<string name="mpris_coverart_description">Coperta piesei actuale</string>
<string name="device_icon_description">Pictogramă dispozitiv</string>
<string name="settings_icon_description">Pictogramă configurări</string>
<string name="presenter_fullscreen">Ecran complet</string>
<string name="presenter_exit">Părăsește prezentarea</string>
<string name="presenter_lock_tip">Puteți bloca dispozitivul și folosi butoanele de volum pentru a merge la diapozitivul precedent/următor</string>
<string name="add_command">Adaugă o comandă</string>
<string name="addcommand_explanation">Nu sunt comenzi înregistrate</string>
<string name="addcommand_explanation2">Puteți adăuga noi comenzi în configurările de sistem KDE Connect</string>
<string name="add_command_description">Puteți adăuga comenzi pe calculatorul de birou</string>
<string name="pref_plugin_mprisreceiver">Control lector multimedia</string>
<string name="pref_plugin_mprisreceiver_desc">Controlați programele multimedia din telefon de pe alt dispozitiv</string>
<string name="notification_channel_default">Alte notificări</string>
<string name="notification_channel_persistent">Indicator persistent</string>
<string name="notification_channel_media_control">Control multimedia</string>
<string name="notification_channel_filetransfer">Transfer de fișiere</string>
<string name="notification_channel_high_priority">Prioritate ridicată</string>
<string name="notification_channel_sms_mms">Mesaj nou</string>
<string name="mpris_stop">Oprește lectorul actual</string>
<string name="copy_url_to_clipboard">Copiază URL în clipboard</string>
<string name="clipboard_toast">Copiat în clipboard</string>
<string name="runcommand_notreachable">Dispozitivul nu e accesibil</string>
<string name="runcommand_notpaired">Dispozitivul nu e asociat</string>
<string name="runcommand_nosuchdevice">Nu există un asemenea dispozitiv</string>
<string name="runcommand_noruncommandplugin">Acest dispozitiv nu are extensia „Rulează comandă” activată</string>
<string name="pref_plugin_findremotedevice">Găsește dispozitivul distant</string>
<string name="pref_plugin_findremotedevice_desc">Sună dispozitivul distant</string>
<string name="ring">Sună</string>
<string name="pref_plugin_systemvolume">Volum de sistem</string>
<string name="pref_plugin_systemvolume_desc">Controlează volumul de sistem al dispozitivului distant</string>
<string name="mute">Muțește</string>
<string name="all">Toate</string>
<string name="devices">Dispozitive</string>
<string name="settings_rename">Denumire dispozitiv</string>
<string name="settings_dark_mode">Tematică întunecată</string>
<string name="settings_more_settings_title">Mai multe configurări</string>
<string name="settings_more_settings_text">Configurările fiecărui dispozitiv le puteți găsi în „Configurare extensii” dintr-un dispozitiv.</string>
<string name="setting_persistent_notification">Arată notificare persistentă</string>
<string name="setting_persistent_notification_oreo">Notificare persistentă</string>
<string name="setting_persistent_notification_description">Atingeți pentru a activa/dezactiva în configurările notificării</string>
<string name="extra_options">Opțiuni suplimentare</string>
<string name="privacy_options">Opțiuni de intimitate</string>
<string name="set_privacy_options">Stabiliți opțiunile de intimitate</string>
<string name="block_contents">Blochează conținutul notificărilor</string>
<string name="block_images">Blochează imaginile din notificări</string>
<string name="notification_channel_receivenotification">Notificări de pe alte dispozitive</string>
<string name="take_picture">Lansează aparatul foto</string>
<string name="plugin_photo_desc">Lansează aplicația de aparat foto pentru a facilita obținerea și transferul pozelor</string>
<string name="no_app_for_opening">Nu a fost găsită nicio aplicație care să deschidă acest fișier</string>
<string name="remote_keyboard_service">Tastatura de la distanță KDE Connect</string>
<string name="presenter_pointer">Indicator</string>
<string name="trusted_networks">Rețele de încredere</string>
<string name="trusted_networks_desc">Restricționează descoperirea automată la rețele de încredere</string>
<string name="add_trusted_network">Adaugă %1s</string>
<string name="empty_trusted_networks_list_text">Încă nu ați adăugat nicio rețea de încredere</string>
<string name="allow_all_networks_text">Permite toate</string>
<string name="location_permission_needed_title">Permisiune cerută</string>
<string name="location_permission_needed_desc">Android cere permisiunea de localizare pentru a vă identifica rețeaua WiFi</string>
<string name="clipboard_android_x_incompat">Android 10 a eliminat accesul la clipboard pentru toate aplicațiile. Această extensie va fi dezactivată.</string>
<string name="mpris_open_url">Continuă redarea aici</string>
<string name="cant_open_url">URL-ul nu poate fi deschis pentru a continua redarea</string>
<string name="bigscreen_home">Acasă</string>
<string name="bigscreen_up">Sus</string>
<string name="bigscreen_left">Stânga</string>
<string name="bigscreen_select">Alege</string>
<string name="bigscreen_right">Dreapta</string>
<string name="bigscreen_down">Jos</string>
<string name="bigscreen_mic">Mic</string>
<string name="pref_plugin_bigscreen">Telecomandă pentru ecran mare</string>
<string name="pref_plugin_bigscreen_desc">Folosiți dispozitivul ca telecomandă pentru Plasma Bigscreen</string>
<string name="bigscreen_optional_permission_explanation">Pentru a partaja microfonul de la telefon, trebuie să permiteți accesul laintrarea de sunet a telefonului dumneavoastră.</string>
<string name="bigscreen_speech_extra_prompt">Vorbire</string>
<string name="message_reply_label">RĂSPUNDE</string>
<string name="mark_as_read_label">MARCHEAZĂ CA CITIT</string>
<string name="user_display_name">Tu</string>
<string name="set_default_sms_app_title">Expediază MMS</string>
<string name="set_group_message_as_mms_title">Expediază MMS la grup</string>
<string name="set_long_text_as_mms_title">Expediază text lung ca MMS</string>
<string name="convert_to_mms_after_title">Convertește la MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
<item>After three messages</item>
<item>After four messages</item>
<item>After five messages</item>
<item>După un mesaj</item>
<item>După două mesaje</item>
<item>După trei mesaje</item>
<item>După patru mesaje</item>
<item>După cinci mesaje</item>
</string-array>
<string name="theme_dialog_title">Alege tematica</string>
<string-array name="theme_list">
<item>Set by Battery Saver</item>
<item>Light</item>
<item>Dark</item>
<item>Stabilită de economizorul de acumulator</item>
<item>Luminoasă</item>
<item>Întunecată</item>
</string-array>
<string-array name="theme_list_v28">
<item>System Default</item>
<item>Light</item>
<item>Dark</item>
<item>Implicit de sistem</item>
<item>Luminoasă</item>
<item>Întunecată</item>
</string-array>
</resources>

View File

@@ -239,7 +239,6 @@
<string name="permission_explanation">Этому модулю нужны разрешения для работы</string>
<string name="optional_permission_explanation">Необходимо предоставить дополнительные разрешения для включения всех функций</string>
<string name="plugins_need_optional_permission">Некоторые функции модулей отключены из-за отсутствия необходимых разрешений (нажмите для просмотра подробностей):</string>
<string name="share_optional_permission_explanation">Чтобы обмениваться файлами между телефоном и компьютером, необходимо предоставить доступ к встроенной памяти телефона</string>
<string name="telepathy_permission_explanation">Чтобы читать и писать SMS с компьютера, вам необходимо дать разрешение на доступ к SMS</string>
<string name="telephony_permission_explanation">Чтобы видеть телефонные звонки на компьютере, необходимо дать разрешение на доступ к списку звонков и состоянию телефона</string>
<string name="telephony_optional_permission_explanation">Чтобы видеть имя контакта вместо номера телефона, необходимо предоставить доступ к контактам</string>

View File

@@ -242,7 +242,6 @@
<string name="permission_explanation">Tento zásuvný modul vyžaduje oprávnenie, aby mohol fungovať</string>
<string name="optional_permission_explanation">Musíte udeliť oprávnenia navyše, aby boli povolené všetky funkcie</string>
<string name="plugins_need_optional_permission">Niektoré zásuvné moduly majú zakázané funkcie, pretože im chýbajú oprávnenia (ťuknutím získate viac informácií):</string>
<string name="share_optional_permission_explanation">Na zdieľanie súborov medzi vašim telefónom a počítačom, musíte udeliť prístup k úložisku telefónu</string>
<string name="telepathy_permission_explanation">Na čítanie a písanie SMS z vášho počítača, musíte udeliť oprávnenie k správam SMS</string>
<string name="telephony_permission_explanation">Na prezeranie telefónnych hovorov z vášho počítača, musíte udeliť oprávnenie k záznamom hovorov a stavu telefónu</string>
<string name="telephony_optional_permission_explanation">Na prezeranie mien kontaktov namiesto telefónnych čísel, musíte udeliť prístup k telefónnym kontaktom</string>
@@ -267,6 +266,7 @@
<string name="notification_channel_media_control">Multimediálny ovládač</string>
<string name="notification_channel_filetransfer">Prenos súborov</string>
<string name="notification_channel_high_priority">Vysoká priorita</string>
<string name="notification_channel_sms_mms">Nová správa</string>
<string name="mpris_stop">Zastaviť aktuálny prehrávač</string>
<string name="copy_url_to_clipboard">Kopírovať URL do schránky</string>
<string name="clipboard_toast">Uložené do schránky</string>
@@ -321,16 +321,13 @@
<string name="pref_plugin_bigscreen_desc">Použije vaše zariadenie ako diaľkové ovládanie obrazovky Plasma Bigscreen</string>
<string name="bigscreen_optional_permission_explanation">Na zdieľanie mikrofónového vstupu z vášho telefónu musíte dať prístup k zvukovému vstupu telefónu.</string>
<string name="bigscreen_speech_extra_prompt">Reč</string>
<string name="message_reply_label">Odpovedať</string>
<string name="mark_as_read_label">Označiť ako prečítané</string>
<string name="user_display_name">Vy</string>
<string name="set_default_sms_app_title">Odoslať MMS</string>
<string name="set_group_message_as_mms_title">Odoslať skupinovú MMS</string>
<string name="set_long_text_as_mms_title">Poslať dlhý text ako MMS</string>
<string name="convert_to_mms_after_title">Konvertovať na MMS</string>
<string name="sms_pref_set_mmsc_dialog_desc">Nastaviť MMSC</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Nastaviť MMS proxy</string>
<string name="sms_pref_set_mms_proxy_title">MMS proxy</string>
<string name="sms_pref_set_mms_port_dialog_desc">nastaviť MMS port</string>
<string name="sms_pref_set_mms_port_title">MMS port</string>
<string-array name="convert_to_mms_after_entries">
<item>Po jednej správe</item>
<item>Po dvoch správach</item>
@@ -344,4 +341,9 @@
<item>Svetlá</item>
<item>Tmavá</item>
</string-array>
<string-array name="theme_list_v28">
<item>Predvolené systémom</item>
<item>Svetlá</item>
<item>Tmavá</item>
</string-array>
</resources>

View File

@@ -171,7 +171,7 @@
</string-array>
<string name="mpris_notification_settings_title">Pokaži obvestilo o nadzoru medija</string>
<string name="mpris_notification_settings_summary">Dovoli nadzor nad predvajalniki medijev, ne da bi odprli KDE Connect</string>
<string name="share_to">Deli z...</string>
<string name="share_to">Deli z</string>
<string name="protocol_version_newer">Ta naprava uporablja novejšo različico protokola</string>
<string name="plugin_settings_with_name">Nastavitve %s</string>
<string name="invalid_device_name">Neveljavno ime naprave</string>
@@ -242,7 +242,7 @@
<string name="permission_explanation">Ti vtičniki potrebujejo dovoljenja za delovanje</string>
<string name="optional_permission_explanation">Če želite omogočiti vse funkcije, morate podeliti dodatna dovoljenja</string>
<string name="plugins_need_optional_permission">Nekateri vtičniki imajo funkcije onemogočene zaradi pomanjkanja dovoljenj (tapnite za več informacij):</string>
<string name="share_optional_permission_explanation">Za skupno rabo datotek med telefonom in namizjem morate dovoliti dostop v shrambo telefona</string>
<string name="share_optional_permission_explanation">Če želite prejemati datoteke v skupni rabi, morate izbrati ciljni imenik</string>
<string name="telepathy_permission_explanation">Če želite brati in pisati SMS z namizja, morate izdati dovoljenje za SMS</string>
<string name="telephony_permission_explanation">Če želite videti telefonske klice na namizju, morate dati dovoljenje za dnevnike klicev in stanje telefona</string>
<string name="telephony_optional_permission_explanation">Če želite namesto telefonske številke videti ime stika, morate omogočiti dostop do stikov telefona</string>
@@ -267,6 +267,7 @@
<string name="notification_channel_media_control">Nadzor medija</string>
<string name="notification_channel_filetransfer">Prenos datotek</string>
<string name="notification_channel_high_priority">Visoka prednost</string>
<string name="notification_channel_sms_mms">Novo sporočilo</string>
<string name="mpris_stop">Ustavi trenutni predvajalnik</string>
<string name="copy_url_to_clipboard">Kopiraj spletni naslov na odložišče</string>
<string name="clipboard_toast">Kopirano na odložišče</string>
@@ -321,16 +322,13 @@
<string name="pref_plugin_bigscreen_desc">Uporabite svojo napravo kot daljinec za Plasmin veliki zaslon</string>
<string name="bigscreen_optional_permission_explanation">Če želite deliti vhod mikrofona iz telefona, morate imeti dostop do avdio vhoda telefona</string>
<string name="bigscreen_speech_extra_prompt">Govor</string>
<string name="message_reply_label">ODGOVORI</string>
<string name="mark_as_read_label">OZNAČI KOT PREBRANO</string>
<string name="user_display_name">Vi</string>
<string name="set_default_sms_app_title">Pošlji MMS</string>
<string name="set_group_message_as_mms_title">Pošlji skupinski SMS</string>
<string name="set_long_text_as_mms_title">Pošlji dolgo besedilo kot MMS</string>
<string name="convert_to_mms_after_title">Pretvori v MMS</string>
<string name="sms_pref_set_mmsc_dialog_desc">Nastavi MMSC</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Nastavi posrednika za MMS</string>
<string name="sms_pref_set_mms_proxy_title">Posrednik za MMS</string>
<string name="sms_pref_set_mms_port_dialog_desc">Nastavi vrata za MMS</string>
<string name="sms_pref_set_mms_port_title">Vrata za MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>Po enem sporočilu</item>
<item>Po dveh sporočilih</item>

View File

@@ -226,7 +226,7 @@
<string name="permission_explanation">Insticksprogrammet behöver rättigheter för att fungera</string>
<string name="optional_permission_explanation">Du måste ge extra rättigheter för att aktivera alla funktioner</string>
<string name="plugins_need_optional_permission">Vissa insticksprogram har inaktiverade funktioner på grund av att rättigheter saknas (rör för mer information):</string>
<string name="share_optional_permission_explanation">För att dela filer mellan telefonen och skrivbordet behöver du ge tillgång till telefonens lagringsutrymme</string>
<string name="share_optional_permission_explanation">För att ta emot delade filer måste du välja en målkatalog</string>
<string name="telepathy_permission_explanation">För att läsa och skriva SMS från skrivbordet måste du ge rättigheter för SMS</string>
<string name="telephony_permission_explanation">För att se telefonsamtal på skrivbordet måste du ge rättigheter för telefonsamtalsloggar och telefontillstånd</string>
<string name="telephony_optional_permission_explanation">För att se ett kontaktnamn istället för ett telefonnummer måste du ge tillgång till telefonens kontakter</string>
@@ -251,6 +251,7 @@
<string name="notification_channel_media_control">Kontroll av media</string>
<string name="notification_channel_filetransfer">Filöverföring</string>
<string name="notification_channel_high_priority">Hög prioritet</string>
<string name="notification_channel_sms_mms">Nytt meddelande</string>
<string name="mpris_stop">Stoppa aktuell spelare</string>
<string name="copy_url_to_clipboard">Kopiera webbadress till klippbordet</string>
<string name="clipboard_toast">Kopierad till klippbordet</string>
@@ -305,16 +306,13 @@
<string name="pref_plugin_bigscreen_desc">Använd apparaten som en fjärrkontroll för Plasma storskärm</string>
<string name="bigscreen_optional_permission_explanation">För att dela mikrofoningången från telefonen måste du ge tillgång till telefonens ljudingång</string>
<string name="bigscreen_speech_extra_prompt">Tal</string>
<string name="message_reply_label">SVARA</string>
<string name="mark_as_read_label">MARKERA SOM LÄST</string>
<string name="user_display_name">Du</string>
<string name="set_default_sms_app_title">Skicka MMS</string>
<string name="set_group_message_as_mms_title">Skicka grupp-MMS</string>
<string name="set_long_text_as_mms_title">Skicka lång text som MMS</string>
<string name="convert_to_mms_after_title">Konvertera till MMS</string>
<string name="sms_pref_set_mmsc_dialog_desc">Ange MMSC</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Ange MMS-proxy</string>
<string name="sms_pref_set_mms_proxy_title">MMS-proxy</string>
<string name="sms_pref_set_mms_port_dialog_desc">Ange MMS-port</string>
<string name="sms_pref_set_mms_port_title">MMS-port</string>
<string-array name="convert_to_mms_after_entries">
<item>Efter ett meddelande</item>
<item>Efter två meddelanden</item>

View File

@@ -217,7 +217,6 @@
<string name="permission_explanation">Bu eklenti, çalışmak için izne ihtiyaç duyuyor</string>
<string name="optional_permission_explanation">Tüm işlevleri etkinleştirmek için daha fazla yetkiye ihtiyacınız var</string>
<string name="plugins_need_optional_permission">Bazı eklentilerin özellikleri, izin yetersizliğinden kapalı gelmektedir (daha fazla bilgi için dokunun):</string>
<string name="share_optional_permission_explanation">Telefon ve masaüstünüz arasında dosya paylaşılabilmesi için, telefonun depolama alanına erişim izni olmalıdır</string>
<string name="telepathy_permission_explanation">Masaüstünde SMS yazma ve okuma yapmak için SMS izni gereklidir</string>
<string name="telephony_permission_explanation">Masaüstünde telefon görüşmelerini görmek için telefon görüşmesi kayıtlarına ve telefon durumuna izin vermeniz gerekir</string>
<string name="telephony_optional_permission_explanation">Telefon numarası yerine kişi ismi görebilmek için telefonun kişilerine erişim gereklidir</string>

View File

@@ -242,7 +242,7 @@
<string name="permission_explanation">Для роботи цього додатка потрібні додаткові права доступу</string>
<string name="optional_permission_explanation">Щоб уможливити використання усіх функцій, вам слід надати програмі додаткові права доступу</string>
<string name="plugins_need_optional_permission">Можливості деяких додатків вимкнено, оскільки програмі не вистачає прав доступу (натисніть, щоб дізнатися більше):</string>
<string name="share_optional_permission_explanation">Щоб спільного використовувати файли на вашому телефоні і робочому комп’ютері, вам слід надати програмі доступ до сховища даних вашого телефону</string>
<string name="share_optional_permission_explanation">Для отримання файлів спільного користування вам слід вибрати каталог призначення</string>
<string name="telepathy_permission_explanation">Щоб читати і писати SMS з вашого робочого комп’ютера, вам слід надати програмі доступ до SMS</string>
<string name="telephony_permission_explanation">Щоб переглядати дзвінки з робочого комп’ютера, вам слід надати програмі доступ до журналу дзвінків та стану телефону</string>
<string name="telephony_optional_permission_explanation">Щоб бачити ім’я контакту замість номеру телефону, вам слід надати програмі доступ до записів контактів на телефоні</string>
@@ -267,6 +267,7 @@
<string name="notification_channel_media_control">Керування відтворенням</string>
<string name="notification_channel_filetransfer">Передавання файлів</string>
<string name="notification_channel_high_priority">Високий пріоритет</string>
<string name="notification_channel_sms_mms">Нове повідомлення</string>
<string name="mpris_stop">Зупинити відтворення у поточному програвачі</string>
<string name="copy_url_to_clipboard">Скопіювати адресу до буфера</string>
<string name="clipboard_toast">Скопійовано до буфера</string>
@@ -321,16 +322,13 @@
<string name="pref_plugin_bigscreen_desc">Скористайтеся вашим пристроєм як дистанційним керуванням для великого екрана Плазми</string>
<string name="bigscreen_optional_permission_explanation">Щоб оприлюднити вхідні дані з мікрофона вашого телефону, вам слід надати програми доступ до вхідного звукового каналу телефону</string>
<string name="bigscreen_speech_extra_prompt">Озвучення</string>
<string name="message_reply_label">ВІДПОВІСТИ</string>
<string name="mark_as_read_label">ПОЗНАЧИТИ ЯК ПРОЧИТАНЕ</string>
<string name="user_display_name">Ви</string>
<string name="set_default_sms_app_title">Надіслати MMS</string>
<string name="set_group_message_as_mms_title">Надіслати групове MMS</string>
<string name="set_long_text_as_mms_title">Надіслати довгий текст як MMS</string>
<string name="convert_to_mms_after_title">Перетворити на MMS</string>
<string name="sms_pref_set_mmsc_dialog_desc">Встановити MMSC</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Встановити проксі MMS</string>
<string name="sms_pref_set_mms_proxy_title">Проксі MMS</string>
<string name="sms_pref_set_mms_port_dialog_desc">Встановити порт MMS</string>
<string name="sms_pref_set_mms_port_title">Порт MMS</string>
<string-array name="convert_to_mms_after_entries">
<item>Після одного повідомлення</item>
<item>Після двох повідомлень</item>

View File

@@ -205,6 +205,8 @@
<string name="no_file_browser">未安装文件浏览器</string>
<string name="pref_plugin_telepathy">发送短消息</string>
<string name="pref_plugin_telepathy_desc">从桌面发送短消息</string>
<string name="pref_plugin_telepathy_mms">发送彩信</string>
<string name="pref_plugin_telepathy_mms_desc">您需要将 KDE Connect 设置为默认短信应用程序才能通过它发送彩信。</string>
<string name="findmyphone_title">找到我的手机</string>
<string name="findmyphone_title_tablet">找到我的平板电脑</string>
<string name="findmyphone_title_tv">查找我的电视</string>
@@ -216,7 +218,6 @@
<string name="permission_explanation">这个插件需要权限才能工作</string>
<string name="optional_permission_explanation">您需要授予额外权限以启用全部功能</string>
<string name="plugins_need_optional_permission">因缺少权限,某些插件的一些功能已禁用(点击以查看更多信息):</string>
<string name="share_optional_permission_explanation">您需要给予访问手机存储的权限才能在手机和桌面计算机之间分享文件</string>
<string name="telepathy_permission_explanation">从计算机桌面读取、写入短消息需要向应用程序授予 SMS 权限</string>
<string name="telephony_permission_explanation">要桌面上查看手机通话记录,您需要授予访问通话记录和手机状态的权限</string>
<string name="telephony_optional_permission_explanation">要查看联系人姓名而非电话号码,您需要授予访问手机通讯录的权限</string>
@@ -241,6 +242,7 @@
<string name="notification_channel_media_control">媒体控制</string>
<string name="notification_channel_filetransfer">文件传送</string>
<string name="notification_channel_high_priority">高优先级</string>
<string name="notification_channel_sms_mms">新建消息</string>
<string name="mpris_stop">停止但前播放器</string>
<string name="copy_url_to_clipboard">复制 URL 到剪贴板</string>
<string name="clipboard_toast">已复制到剪贴板</string>
@@ -290,24 +292,34 @@
<string name="bigscreen_select">选择</string>
<string name="bigscreen_right"></string>
<string name="bigscreen_down"></string>
<string name="bigscreen_mic">麦克风</string>
<string name="pref_plugin_bigscreen">电视遥控</string>
<string name="pref_plugin_bigscreen_desc">使用您手机遥控 Plasma 电视</string>
<string name="bigscreen_optional_permission_explanation">请开启手机的麦克风以共享语音输入。</string>
<string name="bigscreen_speech_extra_prompt">语音</string>
<string name="message_reply_label">回复</string>
<string name="mark_as_read_label">标记为已读</string>
<string name="user_display_name"></string>
<string name="set_default_sms_app_title">发送彩信</string>
<string name="set_group_message_as_mms_title">群发彩信</string>
<string name="set_long_text_as_mms_title">将长文本以彩信形式发送</string>
<string name="convert_to_mms_after_title">转换为彩信</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>
<item>After two messages</item>
<item>After three messages</item>
<item>After four messages</item>
<item>After five messages</item>
<item>在1条消息后</item>
<item>在2条消息后</item>
<item>在3条消息后</item>
<item>在4条消息后</item>
<item>在5条消息后</item>
</string-array>
<string name="theme_dialog_title">选择主题</string>
<string-array name="theme_list">
<item>Set by Battery Saver</item>
<item>由省电模式设定</item>
<item>浅色主题</item>
<item>深色主题</item>
</string-array>
<string-array name="theme_list_v28">
<item>System Default</item>
<item>Light</item>
<item>Dark</item>
<item>系统默认</item>
<item>亮色</item>
<item>深色</item>
</string-array>
</resources>

View File

@@ -216,7 +216,6 @@
<string name="permission_explanation">這外掛程式需要權限以運作</string>
<string name="optional_permission_explanation">你需要授予延伸的權限以啟用所有的功能</string>
<string name="plugins_need_optional_permission">部份的外掛程式因為缺乏權限,而導致功能被停用。(按一下以了解更多資訊):</string>
<string name="share_optional_permission_explanation">為了要在您的手機與電腦之間分享檔案,你需要同意存取手機的儲存空間。</string>
<string name="telepathy_permission_explanation">為了要在您的個人電腦上讀取與撰寫簡訊,你需要提供簡訊的權限。</string>
<string name="telephony_permission_explanation">為了要在桌面上檢視手機通話,您需要提供手機通話記錄及手機狀態的權限。</string>
<string name="telephony_optional_permission_explanation">為了要讓聯絡人名稱取代手機號碼,您需要提供手機通訊錄的權限。</string>

View File

@@ -29,6 +29,8 @@
<string name="pref_plugin_mpris_desc">Provides a remote control for your media player</string>
<string name="pref_plugin_runcommand">Run Command</string>
<string name="pref_plugin_runcommand_desc">Trigger remote commands from your phone or tablet</string>
<string name="pref_plugin_power">Power</string>
<string name="pref_plugin_power_desc">Power off, lock or suspend your device</string>
<string name="pref_plugin_contacts">Contacts Synchronizer</string>
<string name="pref_plugin_contacts_desc">Allow synchronizing the device\'s contacts book</string>
<string name="pref_plugin_ping">Ping</string>
@@ -183,6 +185,9 @@
<string name="mpris_time_settings_title">Forward/rewind buttons</string>
<string name="mpris_time_settings_summary">Adjust the time to fast forward/rewind when pressed</string>
<string name="mpris_time_key" translatable="false">mpris_interval_time</string>
<string name="power_shutdown">Shutdown</string>
<string name="power_suspend">Suspend</string>
<string name="power_lock">Lock screen</string>
<string-array name="mpris_time_entries">
<item>10 seconds</item>
<item>20 seconds</item>
@@ -280,7 +285,7 @@
<string name="permission_explanation">This plugin needs permissions to work</string>
<string name="optional_permission_explanation">You need to grant extra permissions to enable all functions</string>
<string name="plugins_need_optional_permission">Some plugins have features disabled because of lack of permission (tap for more info):</string>
<string name="share_optional_permission_explanation">To share files between your phone and your desktop you need to give access to the phone\'s storage</string>
<string name="share_optional_permission_explanation">To receive shared files you need to choose a destination directory</string>
<string name="telepathy_permission_explanation">To read and write SMS from your desktop you need to give permission to SMS</string>
<string name="telephony_permission_explanation">To see phone calls on the desktop you need to give permission to phone call logs and phone state</string>
<string name="telephony_optional_permission_explanation">To see a contact name instead of a phone number you need to give access to the phone\'s contacts</string>
@@ -308,6 +313,7 @@
<string name="notification_channel_media_control">Media control</string>
<string name="notification_channel_filetransfer">File transfer</string>
<string name="notification_channel_high_priority">High priority</string>
<string name="notification_channel_sms_mms">New Message</string>
<string name="mpris_stop">Stop the current player</string>
<string name="copy_url_to_clipboard">Copy URL to clipboard</string>
@@ -374,6 +380,9 @@
<string name="bigscreen_optional_permission_explanation">To share microphone input from your phone you need to give access to the phone\'s audio input</string>
<string name="bigscreen_speech_extra_prompt">Speech</string>
<string name="message_reply_label">REPLY</string>
<string name="mark_as_read_label">MARK AS READ</string>
<string name="user_display_name">You</string>
<string name="set_default_sms_app_title">Send MMS</string>
<string name="set_group_message_as_mms_title">Send group MMS</string>
<string name="set_group_message_as_mms" translatable="false">set_group_message_as_mms</string>
@@ -381,15 +390,6 @@
<string name="set_long_text_as_mms" translatable="false">set_long_text_as_mms</string>
<string name="convert_to_mms_after_title">Convert to MMS</string>
<string name="convert_to_mms_after" translatable="false">convert_to_mms_after</string>
<string name="sms_pref_set_mmsc_dialog_desc">Set MMSC</string>
<string name="sms_pref_set_mmsc_title">MMSC</string>
<string name="sms_pref_set_mmsc" translatable="false">sms_pref_set_mmsc</string>
<string name="sms_pref_set_mms_proxy_dialog_desc">Set MMS proxy</string>
<string name="sms_pref_set_mms_proxy_title">MMS proxy</string>
<string name="sms_pref_set_mms_proxy" translatable="false">sms_pref_set_mms_proxy</string>
<string name="sms_pref_set_mms_port_dialog_desc">Set MMS port</string>
<string name="sms_pref_set_mms_port_title">MMS port</string>
<string name="sms_pref_set_mms_port" translatable="false">sms_pref_set_mms_port</string>
<string name="convert_to_mms_after_default" translatable="false">3</string>
<string-array name="convert_to_mms_after_entries">
<item>After one message</item>

View File

@@ -1,32 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 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"
tools:keep="@xml/smsplugin_preferences">
<EditTextPreference
android:dialogMessage="@string/sms_pref_set_mmsc_dialog_desc"
android:key="@string/sms_pref_set_mmsc"
android:title="@string/sms_pref_set_mmsc_title"
android:defaultValue="Not set"
app:useSimpleSummaryProvider="true" />
<EditTextPreference
android:dialogMessage="@string/sms_pref_set_mms_proxy_dialog_desc"
android:key="@string/sms_pref_set_mms_proxy"
android:title="@string/sms_pref_set_mms_proxy_title"
android:defaultValue="Not set"
app:useSimpleSummaryProvider="true" />
<EditTextPreference
android:dialogMessage="@string/sms_pref_set_mms_port_dialog_desc"
android:key="@string/sms_pref_set_mms_port"
android:title="@string/sms_pref_set_mms_port_title"
android:defaultValue="Not set"
app:useSimpleSummaryProvider="true" />
<CheckBoxPreference
android:id="@+id/group_message_preference"
android:defaultValue="true"

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2015 Vineet Garg <grg.vineet@gmail.com>
* SPDX-FileCopyrightText: 2015 Vineet Garg <grg.vineet@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends;

View File

@@ -1,33 +1,17 @@
/*
* Copyright 2016 Saikrishna Arcot <saiarcot895@gmail.com>
* SPDX-FileCopyrightText: 2016 Saikrishna Arcot <saiarcot895@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends.BluetoothBackend;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.os.Build;
import android.util.Log;
import androidx.annotation.WorkerThread;
import org.json.JSONException;
import org.json.JSONObject;
import org.kde.kdeconnect.Backends.BaseLink;
@@ -40,10 +24,9 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.nio.charset.Charset;
import java.util.UUID;
import androidx.annotation.WorkerThread;
import kotlin.text.Charsets;
public class BluetoothLink extends BaseLink {
private final ConnectionMultiplexer connection;
@@ -59,7 +42,7 @@ public class BluetoothLink extends BaseLink {
public void run() {
StringBuilder sb = new StringBuilder();
try {
Reader reader = new InputStreamReader(input, "UTF-8");
Reader reader = new InputStreamReader(input, Charsets.UTF_8);
char[] buf = new char[512];
while (continueAccepting) {
while (sb.indexOf("\n") == -1 && continueAccepting) {
@@ -146,7 +129,7 @@ public class BluetoothLink extends BaseLink {
}
private void sendMessage(NetworkPacket np) throws JSONException, IOException {
byte[] message = np.serialize().getBytes(Charset.forName("UTF-8"));
byte[] message = np.serialize().getBytes(Charsets.UTF_8);
Log.i("BluetoothLink", "Beginning to send message");
output.write(message);
Log.i("BluetoothLink", "Finished sending message");

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2016 Saikrishna Arcot <saiarcot895@gmail.com>
* SPDX-FileCopyrightText: 2016 Saikrishna Arcot <saiarcot895@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends.BluetoothBackend;
@@ -48,6 +34,8 @@ import java.util.Map;
import java.util.Set;
import java.util.UUID;
import kotlin.text.Charsets;
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public class BluetoothLinkProvider extends BaseLinkProvider {
@@ -187,19 +175,24 @@ public class BluetoothLinkProvider extends BaseLinkProvider {
}
}
ConnectionMultiplexer connection = null;
Log.i("BTLinkProvider/Server", "Received connection from " + socket.getRemoteDevice().getAddress());
//Delay to let bluetooth initialize stuff correctly
try {
Log.i("BTLinkProvider/Server", "Received connection from " + socket.getRemoteDevice().getAddress());
//Delay to let bluetooth initialize stuff correctly
Thread.sleep(500);
} catch (Exception e) {
synchronized (sockets) {
sockets.remove(socket.getRemoteDevice());
}
throw e;
}
connection = new ConnectionMultiplexer(socket);
try (ConnectionMultiplexer connection = new ConnectionMultiplexer(socket)) {
OutputStream outputStream = connection.getDefaultOutputStream();
InputStream inputStream = connection.getDefaultInputStream();
NetworkPacket np = NetworkPacket.createIdentityPacket(context);
byte[] message = np.serialize().getBytes("UTF-8");
byte[] message = np.serialize().getBytes(Charsets.UTF_8);
outputStream.write(message);
outputStream.flush();
@@ -207,7 +200,7 @@ public class BluetoothLinkProvider extends BaseLinkProvider {
// Listen for the response
StringBuilder sb = new StringBuilder();
Reader reader = new InputStreamReader(inputStream, "UTF-8");
Reader reader = new InputStreamReader(inputStream, Charsets.UTF_8);
int charsRead;
char[] buf = new char[512];
while (sb.lastIndexOf("\n") == -1 && (charsRead = reader.read(buf)) != -1) {
@@ -231,7 +224,6 @@ public class BluetoothLinkProvider extends BaseLinkProvider {
} catch (Exception e) {
synchronized (sockets) {
sockets.remove(socket.getRemoteDevice());
IOUtils.close(connection);
}
throw e;
}

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2015 Vineet Garg <grg.vineet@gmail.com>
* SPDX-FileCopyrightText: 2015 Vineet Garg <grg.vineet@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends.BluetoothBackend;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends.LanBackend;
@@ -23,12 +9,13 @@ package org.kde.kdeconnect.Backends.LanBackend;
import android.content.Context;
import android.util.Log;
import androidx.annotation.WorkerThread;
import org.json.JSONObject;
import org.kde.kdeconnect.Backends.BaseLink;
import org.kde.kdeconnect.Backends.BasePairingHandler;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper;
import org.kde.kdeconnect.Helpers.StringsHelper;
import org.kde.kdeconnect.NetworkPacket;
import java.io.BufferedReader;
@@ -45,7 +32,7 @@ import java.nio.channels.NotYetConnectedException;
import javax.net.ssl.SSLHandshakeException;
import javax.net.ssl.SSLSocket;
import androidx.annotation.WorkerThread;
import kotlin.text.Charsets;
public class LanLink extends BaseLink {
@@ -92,7 +79,7 @@ public class LanLink extends BaseLink {
//Create a thread to take care of incoming data for the new socket
new Thread(() -> {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(newSocket.getInputStream(), StringsHelper.UTF8));
BufferedReader reader = new BufferedReader(new InputStreamReader(newSocket.getInputStream(), Charsets.UTF_8));
while (true) {
String packet;
try {
@@ -167,7 +154,7 @@ public class LanLink extends BaseLink {
//Send body of the network package
try {
OutputStream writer = socket.getOutputStream();
writer.write(np.serialize().getBytes(StringsHelper.UTF8));
writer.write(np.serialize().getBytes(Charsets.UTF_8));
writer.flush();
} catch (Exception e) {
disconnect(); //main socket is broken, disconnect

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends.LanBackend;
@@ -32,7 +18,6 @@ import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.DeviceHelper;
import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper;
import org.kde.kdeconnect.Helpers.StringsHelper;
import org.kde.kdeconnect.Helpers.TrustedNetworkHelper;
import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect.UserInterface.CustomDevicesActivity;
@@ -57,6 +42,8 @@ import java.util.TimerTask;
import javax.net.SocketFactory;
import javax.net.ssl.SSLSocket;
import kotlin.text.Charsets;
/**
* This BaseLinkProvider creates {@link LanLink}s to other devices on the same
* WiFi network. The first packet sent over a socket must be an
@@ -122,7 +109,7 @@ public class LanLinkProvider extends BaseLinkProvider implements LanLink.LinkDis
try {
String message = new String(packet.getData(), StringsHelper.UTF8);
String message = new String(packet.getData(), Charsets.UTF_8);
final NetworkPacket identityPacket = NetworkPacket.unserialize(message);
final String deviceId = identityPacket.getString("deviceId");
if (!identityPacket.getType().equals(NetworkPacket.PACKET_TYPE_IDENTITY)) {
@@ -388,7 +375,7 @@ public class LanLinkProvider extends BaseLinkProvider implements LanLink.LinkDis
socket = new DatagramSocket();
socket.setReuseAddress(true);
socket.setBroadcast(true);
bytes = identity.serialize().getBytes(StringsHelper.UTF8);
bytes = identity.serialize().getBytes(Charsets.UTF_8);
} catch (Exception e) {
Log.e("KDE/LanLinkProvider", "Failed to create DatagramSocket", e);
}

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2015 Vineet Garg <grg.vineet@gmail.com>
* SPDX-FileCopyrightText: 2015 Vineet Garg <grg.vineet@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends.LanBackend;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends.LoopbackBackend;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends.LoopbackBackend;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2015 Vineet Garg <grg.vineet@gmail.com>
* SPDX-FileCopyrightText: 2015 Vineet Garg <grg.vineet@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Backends.LoopbackBackend;

View File

@@ -1,268 +0,0 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* Copyright 2019 Simon Redman <simon@ergotech.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kde.kdeconnect.Backends.MulticastBackend;
import android.content.Context;
import android.util.Log;
import org.json.JSONObject;
import org.kde.kdeconnect.Backends.BaseLink;
import org.kde.kdeconnect.Backends.BasePairingHandler;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper;
import org.kde.kdeconnect.Helpers.StringsHelper;
import org.kde.kdeconnect.NetworkPacket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.nio.channels.NotYetConnectedException;
import javax.net.ssl.SSLSocket;
public class MulticastLink extends BaseLink {
static final String LOG_TAG = "MulticastLink";
public interface LinkDisconnectedCallback {
void linkDisconnected(MulticastLink brokenLink);
}
public enum ConnectionStarted {
Locally, Remotely
}
private ConnectionStarted connectionSource; // If the other device sent me a broadcast,
// I should not close the connection with it
// because it's probably trying to find me and
// potentially ask for pairing.
private volatile SSLSocket socket = null;
private final LinkDisconnectedCallback callback;
@Override
public void disconnect() {
Log.i(LOG_TAG + "Disconnect","socket:"+ socket.hashCode());
try {
socket.close();
} catch (IOException e) {
Log.e(LOG_TAG, "Error", e);
}
}
//Returns the old socket
public SSLSocket reset(final SSLSocket newSocket, ConnectionStarted connectionSource) throws IOException {
SSLSocket oldSocket = socket;
socket = newSocket;
this.connectionSource = connectionSource;
if (oldSocket != null) {
oldSocket.close(); //This should cancel the readThread
}
//Log.e(LOG_TAG, "Start listening");
//Create a thread to take care of incoming data for the new socket
new Thread(() -> {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(newSocket.getInputStream(), StringsHelper.UTF8));
while (true) {
String packet;
try {
packet = reader.readLine();
} catch (SocketTimeoutException e) {
continue;
}
if (packet == null) {
throw new IOException("End of stream");
}
if (packet.isEmpty()) {
continue;
}
NetworkPacket np = NetworkPacket.unserialize(packet);
receivedNetworkPacket(np);
}
} catch (Exception e) {
Log.i(LOG_TAG, "Socket closed: " + newSocket.hashCode() + ". Reason: " + e.getMessage());
try { Thread.sleep(300); } catch (InterruptedException ignored) {} // Wait a bit because we might receive a new socket meanwhile
boolean thereIsaANewSocket = (newSocket != socket);
if (!thereIsaANewSocket) {
callback.linkDisconnected(MulticastLink.this);
}
}
}).start();
return oldSocket;
}
public MulticastLink(Context context, String deviceId, MulticastLinkProvider linkProvider, SSLSocket socket, ConnectionStarted connectionSource) throws IOException {
super(context, deviceId, linkProvider);
callback = linkProvider;
reset(socket, connectionSource);
}
@Override
public String getName() {
return "LanLink";
}
@Override
public BasePairingHandler getPairingHandler(Device device, BasePairingHandler.PairingHandlerCallback callback) {
return new MulticastPairingHandler(device, callback);
}
//Blocking, do not call from main thread
@Override
public boolean sendPacket(NetworkPacket np, final Device.SendPacketStatusCallback callback) {
if (socket == null) {
Log.e(LOG_TAG + "sendPacket", "Not yet connected");
callback.onFailure(new NotYetConnectedException());
return false;
}
try {
//Prepare socket for the payload
final ServerSocket server;
if (np.hasPayload()) {
server = MulticastLinkProvider.openServerSocketOnFreePort(MulticastLinkProvider.PAYLOAD_TRANSFER_MIN_PORT);
JSONObject payloadTransferInfo = new JSONObject();
payloadTransferInfo.put("port", server.getLocalPort());
np.setPayloadTransferInfo(payloadTransferInfo);
} else {
server = null;
}
//Log.e("LanLink/sendPacket", np.getType());
//Send body of the network package
try {
OutputStream writer = socket.getOutputStream();
writer.write(np.serialize().getBytes(StringsHelper.UTF8));
writer.flush();
} catch (Exception e) {
disconnect(); //main socket is broken, disconnect
throw e;
}
//Send payload
if (server != null) {
Socket payloadSocket = null;
OutputStream outputStream = null;
InputStream inputStream;
try {
//Wait a maximum of 10 seconds for the other end to establish a connection with our socket, close it afterwards
server.setSoTimeout(10*1000);
payloadSocket = server.accept();
//Convert to SSL if needed
payloadSocket = SslHelper.convertToSslSocket(context, payloadSocket, getDeviceId(), true, false);
outputStream = payloadSocket.getOutputStream();
inputStream = np.getPayload().getInputStream();
Log.i(LOG_TAG, "Beginning to send payload");
byte[] buffer = new byte[4096];
int bytesRead;
long size = np.getPayloadSize();
long progress = 0;
long timeSinceLastUpdate = -1;
while (!np.isCanceled() && (bytesRead = inputStream.read(buffer)) != -1) {
//Log.e("ok",""+bytesRead);
progress += bytesRead;
outputStream.write(buffer, 0, bytesRead);
if (size > 0) {
if (timeSinceLastUpdate + 500 < System.currentTimeMillis()) { //Report progress every half a second
long percent = ((100 * progress) / size);
callback.onProgressChanged((int) percent);
timeSinceLastUpdate = System.currentTimeMillis();
}
}
}
outputStream.flush();
Log.i(LOG_TAG, "Finished sending payload ("+progress+" bytes written)");
} finally {
try { server.close(); } catch (Exception ignored) { }
try { payloadSocket.close(); } catch (Exception ignored) { }
np.getPayload().close();
try { outputStream.close(); } catch (Exception ignored) { }
}
}
if (!np.isCanceled()) {
callback.onSuccess();
}
return true;
} catch (Exception e) {
if (callback != null) {
callback.onFailure(e);
}
return false;
} finally {
//Make sure we close the payload stream, if any
if (np.hasPayload()) {
np.getPayload().close();
}
}
}
private void receivedNetworkPacket(NetworkPacket np) {
if (np.hasPayloadTransferInfo()) {
Socket payloadSocket = new Socket();
try {
int tcpPort = np.getPayloadTransferInfo().getInt("port");
InetSocketAddress deviceAddress = (InetSocketAddress) socket.getRemoteSocketAddress();
payloadSocket.connect(new InetSocketAddress(deviceAddress.getAddress(), tcpPort));
payloadSocket = SslHelper.convertToSslSocket(context, payloadSocket, getDeviceId(), true, true);
np.setPayload(new NetworkPacket.Payload(payloadSocket, np.getPayloadSize()));
} catch (Exception e) {
try { payloadSocket.close(); } catch(Exception ignored) { }
Log.e(LOG_TAG, "Exception connecting to payload remote socket", e);
}
}
packageReceived(np);
}
@Override
public boolean linkShouldBeKeptAlive() {
return true; //FIXME: Current implementation is broken, so for now we will keep links always established
//We keep the remotely initiated connections, since the remotes require them if they want to request
//pairing to us, or connections that are already paired.
//return (connectionSource == ConnectionStarted.Remotely);
}
}

View File

@@ -1,495 +0,0 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* Copyright 2018 Teemu Rytilahti
* Copyright 2019 Simon Redman <simon@ergotech.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kde.kdeconnect.Backends.MulticastBackend;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.Network;
import android.net.nsd.NsdManager;
import android.net.nsd.NsdManager.RegistrationListener;
import android.net.nsd.NsdManager.ResolveListener;
import android.net.nsd.NsdServiceInfo;
import android.os.Build;
import android.util.Base64;
import android.util.Log;
import androidx.annotation.RequiresApi;
import org.json.JSONException;
import org.kde.kdeconnect.Backends.BaseLink;
import org.kde.kdeconnect.Backends.BaseLinkProvider;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.Helpers.DeviceHelper;
import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper;
import org.kde.kdeconnect.NetworkPacket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;
import java.security.cert.Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import javax.net.SocketFactory;
import javax.net.ssl.SSLSocket;
/**
* This MulticastLinkProvider creates {@link MulticastLink}s to other devices on the same
* WiFi network. The first packet sent over a socket must be an
* {@link NetworkPacket#createIdentityPacket(Context)}.
*
* @see #identityPacketReceived(NetworkPacket, Socket, MulticastLink.ConnectionStarted)
*/
public class MulticastLinkProvider extends BaseLinkProvider implements MulticastLink.LinkDisconnectedCallback {
static final String LOG_TAG = "MulticastLink";
static final String SERVICE_TYPE = "_kdeconnect._tcp";
private final static int MIN_PORT = 1716;
private final static int MAX_PORT = 1764;
final static int PAYLOAD_TRANSFER_MIN_PORT = 1739;
private final Context context;
private NsdManager mNsdManager;
private RegistrationListener mRegistrationListener;
private NsdManager.DiscoveryListener discoveryListener;
private ServerSocket tcpServer;
private boolean listening = false;
private final HashMap<String, MulticastLink> visibleComputers = new HashMap<>(); //Links by device id
@Override // SocketClosedCallback
public void linkDisconnected(MulticastLink brokenLink) {
String deviceId = brokenLink.getDeviceId();
visibleComputers.remove(deviceId);
connectionLost(brokenLink);
}
// They received my mDNS broadcast and are connecting to me. The first thing they send should be their identity.
private void tcpPacketReceived(Socket socket) {
writeIdentity(socket);
NetworkPacket otherIdentity = readIdentity(socket);
if (!otherIdentity.getType().equals(NetworkPacket.PACKET_TYPE_IDENTITY)) {
Log.e(LOG_TAG, "Expecting an identity package instead of " + otherIdentity.getType());
return;
}
Log.i(LOG_TAG, "Identity package received from a TCP connection from " + otherIdentity.getString("deviceName"));
identityPacketReceived(otherIdentity, socket, MulticastLink.ConnectionStarted.Locally);
}
private void configureSocket(Socket socket) {
try {
socket.setKeepAlive(true);
} catch (SocketException e) {
Log.e(LOG_TAG, "Exception", e);
}
}
/**
* Called when a new 'identity' packet is received. Those are passed here by
* {@link #tcpPacketReceived(Socket)}
* <p>
* If the remote device should be connected, this calls {@link #addLink}.
* Otherwise, if there was an Exception, we unpair from that device.
* </p>
*
* @param identityPacket identity of a remote device
* @param socket a new Socket, which should be used to receive packets from the remote device
* @param connectionStarted which side started this connection
*/
private void identityPacketReceived(final NetworkPacket identityPacket, final Socket socket, final MulticastLink.ConnectionStarted connectionStarted) {
String myId = DeviceHelper.getDeviceId(context);
final String deviceId = identityPacket.getString("deviceId");
if (deviceId.equals(myId)) {
Log.e(LOG_TAG, "Somehow I'm connected to myself, ignoring. This should not happen.");
return;
}
// If I'm the TCP server I will be the SSL client and viceversa.
final boolean clientMode = (connectionStarted == MulticastLink.ConnectionStarted.Locally);
// Do the SSL handshake
try {
SharedPreferences preferences = context.getSharedPreferences("trusted_devices", Context.MODE_PRIVATE);
boolean isDeviceTrusted = preferences.getBoolean(deviceId, false);
if (isDeviceTrusted && !SslHelper.isCertificateStored(context, deviceId)) {
//Device paired with and old version, we can't use it as we lack the certificate
BackgroundService.RunCommand(context, service -> {
Device device = service.getDevice(deviceId);
if (device == null) return;
device.unpair();
//Retry as unpaired
identityPacketReceived(identityPacket, socket, connectionStarted);
});
}
Log.i(LOG_TAG, "Starting SSL handshake with " + identityPacket.getString("deviceName") + " trusted:" + isDeviceTrusted);
final SSLSocket sslsocket = SslHelper.convertToSslSocket(context, socket, deviceId, isDeviceTrusted, clientMode);
sslsocket.addHandshakeCompletedListener(event -> {
String mode = clientMode ? "client" : "server";
try {
Certificate certificate = event.getPeerCertificates()[0];
identityPacket.set("certificate", Base64.encodeToString(certificate.getEncoded(), 0));
Log.i(LOG_TAG, "Handshake as " + mode + " successful with " + identityPacket.getString("deviceName") + " secured with " + event.getCipherSuite());
addLink(identityPacket, sslsocket, connectionStarted);
} catch (Exception e) {
Log.e(LOG_TAG, "Handshake as " + mode + " failed with " + identityPacket.getString("deviceName"), e);
BackgroundService.RunCommand(context, service -> {
Device device = service.getDevice(deviceId);
if (device == null) return;
device.unpair();
});
}
});
//Handshake is blocking, so do it on another thread and free this thread to keep receiving new connection
new Thread(() -> {
try {
synchronized (this) {
sslsocket.startHandshake();
}
} catch (Exception e) {
Log.e(LOG_TAG, "Handshake failed with " + identityPacket.getString("deviceName"), e);
//String[] ciphers = sslsocket.getSupportedCipherSuites();
//for (String cipher : ciphers) {
// Log.i("SupportedCiphers","cipher: " + cipher);
//}
}
}).start();
} catch (Exception e) {
Log.e(LOG_TAG, "Exception", e);
}
}
/**
* Add or update a link in the {@link #visibleComputers} map. This method is synchronized, which ensures that only one
* link is operated on at a time.
* <p>
* Without synchronization, the call to {@link SslHelper#parseCertificate(byte[])} in
* {@link Device#addLink(NetworkPacket, BaseLink)} crashes on some devices running Oreo 8.1 (SDK level 27).
* </p>
*
* @param identityPacket representation of remote device
* @param socket a new Socket, which should be used to receive packets from the remote device
* @param connectionOrigin which side started this connection
* @throws IOException if an exception is thrown by {@link MulticastLink#reset(SSLSocket, MulticastLink.ConnectionStarted)}
*/
private void addLink(final NetworkPacket identityPacket, SSLSocket socket, MulticastLink.ConnectionStarted connectionOrigin) throws IOException {
String deviceId = identityPacket.getString("deviceId");
MulticastLink currentLink = visibleComputers.get(deviceId);
if (currentLink != null) {
//Update old link
Log.i(LOG_TAG, "Reusing same link for device " + deviceId);
final Socket oldSocket = currentLink.reset(socket, connectionOrigin);
//Log.e(LOG_TAG, "Replacing socket. old: "+ oldSocket.hashCode() + " - new: "+ socket.hashCode());
} else {
Log.i(LOG_TAG, "Creating a new link for device " + deviceId);
//Let's create the link
MulticastLink link = new MulticastLink(context, deviceId, this, socket, connectionOrigin);
visibleComputers.put(deviceId, link);
connectionAccepted(identityPacket, link);
}
}
public MulticastLinkProvider(Context context) {
this.context = context;
}
private void writeIdentity(Socket socket) {
try {
OutputStream out = socket.getOutputStream();
NetworkPacket myIdentity = NetworkPacket.createIdentityPacket(context);
out.write(myIdentity.serialize().getBytes());
out.flush();
} catch (IOException e) {
Log.e(LOG_TAG, "Unable to get stream from socket", e);
return;
} catch (JSONException e) {
Log.e(LOG_TAG, "Unable to deserialize JSON", e);
return;
}
}
private NetworkPacket readIdentity(Socket socket) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = reader.readLine();
Log.e("TcpListener","Received TCP package: "+message);
return NetworkPacket.unserialize(message);
} catch (Exception e) {
Log.e(LOG_TAG, "Exception while receiving TCP packet", e);
return null;
}
}
private void setupTcpListener() {
try {
tcpServer = openServerSocketOnFreePort(MIN_PORT);
} catch (Exception e) {
Log.e(LOG_TAG, "Error creating tcp server", e);
return;
}
new Thread(() -> {
while (listening) {
try {
Socket socket = tcpServer.accept();
configureSocket(socket);
tcpPacketReceived(socket);
} catch (Exception e) {
Log.e(LOG_TAG, "TcpReceive exception", e);
}
}
Log.w("TcpListener", "Stopping TCP listener");
}).start();
}
static ServerSocket openServerSocketOnFreePort(int minPort) throws IOException {
int tcpPort = minPort;
while (tcpPort <= MAX_PORT) {
try {
ServerSocket candidateServer = new ServerSocket();
candidateServer.bind(new InetSocketAddress(tcpPort));
Log.i(LOG_TAG, "Using port " + tcpPort);
return candidateServer;
} catch (IOException e) {
tcpPort++;
if (tcpPort == MAX_PORT) {
Log.e(LOG_TAG, "No ports available");
throw e; //Propagate exception
}
}
}
throw new RuntimeException("This should not be reachable");
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void initializeRegistrationListener() {
mRegistrationListener = new NsdManager.RegistrationListener() {
@Override
public void onServiceRegistered(NsdServiceInfo NsdServiceInfo) {
// Save the service name. Android may have changed it in order to
// resolve a conflict, so update the name you initially requested
// with the name Android actually used.
Log.e(LOG_TAG, "Registered " + NsdServiceInfo.getServiceName());
}
@Override
public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
// Registration failed! Put debugging code here to determine why.
Log.e(LOG_TAG, "Registration failed");
}
@Override
public void onServiceUnregistered(NsdServiceInfo arg0) {
// Service has been unregistered. This only happens when you call
// NsdManager.unregisterService() and pass in this listener.
Log.e(LOG_TAG, "Service unregistered: " + arg0);
}
@Override
public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
// Unregistration failed. Put debugging code here to determine why.
Log.e(LOG_TAG, "Unregister of " + serviceInfo + " failed with: " + errorCode);
}
};
}
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
public void initializeNsdManager() {
mNsdManager = (NsdManager) context.getSystemService(Context.NSD_SERVICE);
NsdServiceInfo serviceInfo = new NsdServiceInfo();
// It wasn't possible for the device which receives the incoming connection
// to use these attributes (there's no way to correlate the incoming connection
// with a discovered service), so we have to rely on sending this stuff in
// an identity packet like in the LanLink. That's the reason this is commented out.
// These cause the requirement for api level 21.
serviceInfo.setAttribute("id", DeviceHelper.getDeviceId(context));
// The name is subject to change based on conflicts
// with other services advertised on the same network.
//serviceInfo.setAttribute("name", DeviceHelper.getDeviceName(context));
//serviceInfo.setAttribute("type", DeviceHelper.getDeviceType(context).toString());
//serviceInfo.setAttribute("version", Integer.toString(DeviceHelper.ProtocolVersion));
// It might be nice to add the capabilities in the mDNS advertisement too, but without
// some kind of encoding that is too large for the TXT record
serviceInfo.setServiceName("KDE Connect on " + DeviceHelper.getDeviceName(context));
serviceInfo.setServiceType(SERVICE_TYPE);
// This gets autodetected if not set
//serviceInfo.setHost(this.tcpServer.getInetAddress());
serviceInfo.setPort(this.tcpServer.getLocalPort());
//Log.d("KDE/Lan", "service: " + serviceInfo.toString());
mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
public ResolveListener createResolveListener() {
return new ResolveListener() {
@Override
public void onResolveFailed(NsdServiceInfo serviceInfo, int i) {
Log.e(LOG_TAG, "Could not resolve service: " + serviceInfo);
}
@Override
public void onServiceResolved(NsdServiceInfo serviceInfo) {
Log.e(LOG_TAG, "Successfully resolved " + serviceInfo);
byte[] id = serviceInfo.getAttributes().get("id");
if (id != null && DeviceHelper.getDeviceId(context).equals(new String(id, StandardCharsets.UTF_8))) {
Log.e(LOG_TAG, "Ignoring connection to myself");
return;
}
InetAddress hostname = serviceInfo.getHost();
int remotePort = serviceInfo.getPort();
SocketFactory socketFactory = SocketFactory.getDefault();
Socket socket;
try {
socket = socketFactory.createSocket(hostname, remotePort);
} catch (IOException e) {
Log.e(LOG_TAG, "Unable to open socket to mDNS remote: " + serviceInfo, e);
return;
}
writeIdentity(socket);
NetworkPacket otherIdentity = readIdentity(socket);
try {
Log.i(LOG_TAG, "Got identity: " + otherIdentity.serialize());
} catch (Exception e) {
Log.e(LOG_TAG, "Got identity, but unable to serialize from " + serviceInfo, e);
return;
}
}
};
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
public void initializeDiscoveryListener() {
// Instantiate a new DiscoveryListener
discoveryListener = new NsdManager.DiscoveryListener() {
// Called as soon as service discovery begins.
@Override
public void onDiscoveryStarted(String regType) {
Log.d(LOG_TAG, "Service discovery started");
}
@Override
public void onServiceFound(NsdServiceInfo service) {
// A service was found! Do something with it.
Log.e(LOG_TAG, "Service discovery success" + service);
mNsdManager.resolveService(service, createResolveListener());
}
@Override
public void onServiceLost(NsdServiceInfo service) {
// When the network service is no longer available.
// Internal bookkeeping code goes here.
Log.e(LOG_TAG, "service lost: " + service);
}
@Override
public void onDiscoveryStopped(String serviceType) {
Log.e(LOG_TAG, "Discovery stopped: " + serviceType);
listening = false;
}
@Override
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
Log.e(LOG_TAG, "Discovery failed: Error code:" + errorCode);
mNsdManager.stopServiceDiscovery(this);
}
@Override
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
Log.e(LOG_TAG, "Discovery failed: Error code:" + errorCode);
mNsdManager.stopServiceDiscovery(this);
}
};
mNsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, discoveryListener);
}
@Override
public void onNetworkChange() {
onStop();
onStart();
}
@Override
public synchronized void onStart() {
if (!listening) {
listening = true;
// Need to set up TCP before setting up mDNS because we need to know the TCP listening
// address and port
setupTcpListener();
initializeRegistrationListener();
initializeNsdManager();
initializeDiscoveryListener();
}
}
@Override
public synchronized void onStop() {
//if (listening) {
// mNsdManager.stopServiceDiscovery(discoveryListener);
// mNsdManager.unregisterService(mRegistrationListener);
// try { tcpServer.close(); } catch (IOException ignored) { }
// listening = false;
//}
}
@Override
public String getName() {
return "MulticastLinkProvider";
}
}

View File

@@ -1,217 +0,0 @@
/*
* Copyright 2015 Vineet Garg <grg.vineet@gmail.com>
* Copyright 2019 Simon Redman <simon@ergotech.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kde.kdeconnect.Backends.MulticastBackend;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Base64;
import android.util.Log;
import org.kde.kdeconnect.Backends.BasePairingHandler;
import org.kde.kdeconnect.Device;
import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect_tp.R;
import java.security.cert.CertificateEncodingException;
import java.util.Timer;
import java.util.TimerTask;
public class MulticastPairingHandler extends BasePairingHandler {
private Timer mPairingTimer;
public MulticastPairingHandler(Device device, final PairingHandlerCallback callback) {
super(device, callback);
if (device.isPaired()) {
mPairStatus = PairStatus.Paired;
} else {
mPairStatus = PairStatus.NotPaired;
}
}
private NetworkPacket createPairPacket() {
NetworkPacket np = new NetworkPacket(NetworkPacket.PACKET_TYPE_PAIR);
np.set("pair", true);
return np;
}
@Override
public void packageReceived(NetworkPacket np) {
boolean wantsPair = np.getBoolean("pair");
if (wantsPair == isPaired()) {
if (mPairStatus == PairStatus.Requested) {
//Log.e("Device","Unpairing (pair rejected)");
mPairStatus = PairStatus.NotPaired;
hidePairingNotification();
mCallback.pairingFailed(mDevice.getContext().getString(R.string.error_canceled_by_other_peer));
}
return;
}
if (wantsPair) {
if (mPairStatus == PairStatus.Requested) { //We started pairing
hidePairingNotification();
pairingDone();
} else {
// If device is already paired, accept pairing silently
if (mDevice.isPaired()) {
acceptPairing();
return;
}
// Pairing notifications are still managed by device as there is no other way to
// know about notificationId to cancel notification when PairActivity is started
// Even putting notificationId in intent does not work because PairActivity can be
// started from MainActivity too, so then notificationId cannot be set
hidePairingNotification();
mDevice.displayPairingNotification();
mPairingTimer = new Timer();
mPairingTimer.schedule(new TimerTask() {
@Override
public void run() {
Log.w("KDE/Device","Unpairing (timeout B)");
mPairStatus = PairStatus.NotPaired;
hidePairingNotification();
}
}, 25*1000); //Time to show notification, waiting for user to accept (peer will timeout in 30 seconds)
mPairStatus = PairStatus.RequestedByPeer;
mCallback.incomingRequest();
}
} else {
Log.i("KDE/Pairing", "Unpair request");
if (mPairStatus == PairStatus.Requested) {
hidePairingNotification();
mCallback.pairingFailed(mDevice.getContext().getString(R.string.error_canceled_by_other_peer));
} else if (mPairStatus == PairStatus.Paired) {
mCallback.unpaired();
}
mPairStatus = PairStatus.NotPaired;
}
}
@Override
public void requestPairing() {
Device.SendPacketStatusCallback statusCallback = new Device.SendPacketStatusCallback() {
@Override
public void onSuccess() {
hidePairingNotification(); //Will stop the pairingTimer if it was running
mPairingTimer = new Timer();
mPairingTimer.schedule(new TimerTask() {
@Override
public void run() {
mCallback.pairingFailed(mDevice.getContext().getString(R.string.error_timed_out));
Log.w("KDE/Device","Unpairing (timeout A)");
mPairStatus = PairStatus.NotPaired;
}
}, 30*1000); //Time to wait for the other to accept
mPairStatus = PairStatus.Requested;
}
@Override
public void onFailure(Throwable e) {
Log.e("LanPairing/onFailure", "Exception", e);
mCallback.pairingFailed(mDevice.getContext().getString(R.string.error_could_not_send_package));
}
};
mDevice.sendPacket(createPairPacket(), statusCallback);
}
private void hidePairingNotification() {
mDevice.hidePairingNotification();
if (mPairingTimer != null) {
mPairingTimer .cancel();
}
}
@Override
public void acceptPairing() {
hidePairingNotification();
Device.SendPacketStatusCallback statusCallback = new Device.SendPacketStatusCallback() {
@Override
public void onSuccess() {
pairingDone();
}
@Override
public void onFailure(Throwable e) {
Log.e("LanPairing/onFailure", "Exception", e);
mCallback.pairingFailed(mDevice.getContext().getString(R.string.error_not_reachable));
}
};
mDevice.sendPacket(createPairPacket(), statusCallback);
}
@Override
public void rejectPairing() {
hidePairingNotification();
mPairStatus = PairStatus.NotPaired;
NetworkPacket np = new NetworkPacket(NetworkPacket.PACKET_TYPE_PAIR);
np.set("pair", false);
mDevice.sendPacket(np);
}
private void pairingDone() {
// Store device information needed to create a Device object in a future
//Log.e("KDE/PairingDone", "Pairing Done");
SharedPreferences.Editor editor = mDevice.getContext().getSharedPreferences(mDevice.getDeviceId(), Context.MODE_PRIVATE).edit();
try {
String encodedCertificate = Base64.encodeToString(mDevice.certificate.getEncoded(), 0);
editor.putString("certificate", encodedCertificate);
} catch (NullPointerException n) {
Log.w("KDE/PairingDone", "Certificate is null, remote device does not support ssl", n);
} catch (CertificateEncodingException c) {
Log.e("KDE/PairingDOne", "Error encoding certificate", c);
} catch (Exception e) {
Log.e("KDE/Pairng", "Exception", e);
}
editor.apply();
mPairStatus = PairStatus.Paired;
mCallback.pairingDone();
}
@Override
public void unpair() {
mPairStatus = PairStatus.NotPaired;
NetworkPacket np = new NetworkPacket(NetworkPacket.PACKET_TYPE_PAIR);
np.set("pair", false);
mDevice.sendPacket(np);
}
}

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect;
@@ -42,7 +28,6 @@ import androidx.core.content.ContextCompat;
import org.kde.kdeconnect.Backends.BaseLink;
import org.kde.kdeconnect.Backends.BaseLinkProvider;
import org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider;
import org.kde.kdeconnect.Backends.MulticastBackend.MulticastLinkProvider;
import org.kde.kdeconnect.Helpers.NotificationHelper;
import org.kde.kdeconnect.Helpers.SecurityHelpers.RsaHelper;
import org.kde.kdeconnect.Helpers.SecurityHelpers.SslHelper;
@@ -163,8 +148,7 @@ public class BackgroundService extends Service {
}
private void registerLinkProviders() {
//linkProviders.add(new LanLinkProvider(this));
linkProviders.add(new MulticastLinkProvider(this));
linkProviders.add(new LanLinkProvider(this));
// linkProviders.add(new LoopbackLinkProvider(this));
// linkProviders.add(new BluetoothLinkProvider(this));
}

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect;
@@ -28,7 +14,6 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.preference.PreferenceManager;
import android.util.Base64;
import android.util.Log;
@@ -41,6 +26,7 @@ import androidx.core.content.ContextCompat;
import org.apache.commons.collections4.MultiValuedMap;
import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;
import org.apache.commons.lang3.StringUtils;
import org.kde.kdeconnect.Backends.BaseLink;
import org.kde.kdeconnect.Backends.BasePairingHandler;
import org.kde.kdeconnect.Helpers.DeviceHelper;
@@ -188,7 +174,7 @@ public class Device implements BaseLink.PacketReceiver {
}
public String getName() {
return name != null ? name : context.getString(R.string.unknown_device);
return StringUtils.defaultString(name, context.getString(R.string.unknown_device));
}
public Drawable getIcon() {
@@ -736,8 +722,8 @@ public class Device implements BaseLink.PacketReceiver {
Plugin existing = plugins.get(pluginKey);
if (existing != null) {
if (existing.getMinSdk() > Build.VERSION.SDK_INT) {
Log.i("KDE/addPlugin", "Min API level not fulfilled " + pluginKey);
if (existing.isIncompatible()) {
Log.i("KDE/addPlugin", "Minimum requirements (e.g. API level) not fulfilled " + pluginKey);
return false;
}
@@ -758,8 +744,8 @@ public class Device implements BaseLink.PacketReceiver {
return false;
}
if (plugin.getMinSdk() > Build.VERSION.SDK_INT) {
Log.i("KDE/addPlugin", "Min API level not fulfilled" + pluginKey);
if (plugin.isIncompatible()) {
Log.i("KDE/addPlugin", "Minimum requirements (e.g. API level) not fulfilled " + pluginKey);
return false;
}

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Helpers;

View File

@@ -1,22 +1,8 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* Copyright 2018 Simon Redman <simon@ergotech.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2018 Simon Redman <simon@ergotech.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Helpers;
@@ -37,6 +23,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -48,7 +35,8 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import kotlin.text.Charsets;
public class ContactsHelper {
@@ -169,16 +157,11 @@ public class ContactsHelper {
Uri vcardURI = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
try (InputStream input = context.getContentResolver().openInputStream(vcardURI)) {
if (input == null)
{
if (input == null) {
throw new NullPointerException("ContentResolver did not give us a stream for the VCard for uID " + ID);
}
final Reader reader = new InputStreamReader(input);
final List<String> lines = IOUtils.readLines(reader);
reader.close();
toReturn.put(ID, new VCardBuilder(lines.stream().collect(Collectors.joining("\n"))));
final List<String> lines = IOUtils.readLines(input, Charsets.UTF_8);
toReturn.put(ID, new VCardBuilder(StringUtils.join(lines, '\n')));
} catch (IOException e) {
// If you are experiencing this, please open a bug report indicating how you got here
Log.e("Contacts", "Exception while fetching vcards", e);

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Helpers;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Helpers;
@@ -31,6 +17,8 @@ import android.provider.OpenableColumns;
import android.util.Log;
import android.webkit.MimeTypeMap;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.kde.kdeconnect.NetworkPacket;
import java.io.File;
@@ -38,33 +26,20 @@ import java.io.InputStream;
import java.util.Arrays;
public class FilesHelper {
public static final String LOG_TAG = "SendFileActivity";
private static String getFileExt(String filename) {
//return MimeTypeMap.getFileExtensionFromUrl(filename);
return filename.substring((filename.lastIndexOf(".") + 1));
}
public static String getFileNameWithoutExt(String filename) {
int dot = filename.lastIndexOf(".");
return (dot < 0) ? filename : filename.substring(0, dot);
}
public static String getMimeTypeFromFile(String file) {
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(getFileExt(file));
if (mime == null) mime = "*/*";
return mime;
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(FilenameUtils.getExtension(file));
return StringUtils.defaultString(mime, "*/*");
}
public static String findNonExistingNameForNewFile(String path, String filename) {
int dot = filename.lastIndexOf(".");
String name = (dot < 0) ? filename : filename.substring(0, dot);
String ext = (dot < 0) ? "" : filename.substring(filename.lastIndexOf("."));
String name = FilenameUtils.getBaseName(filename);
String ext = FilenameUtils.getExtension(filename);
int num = 1;
while (new File(path + "/" + filename).exists()) {
filename = name + " (" + num + ")" + ext;
filename = name + " (" + num + ")." + ext;
num++;
}

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2020 Vincent Blücher <vincent.bluecher@gmail.com>
* SPDX-FileCopyrightText: 2020 Vincent Blücher <vincent.bluecher@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Helpers;

View File

@@ -19,6 +19,7 @@ public class NotificationHelper {
public final static String DEFAULT = "default";
public final static String MEDIA_CONTROL = "media_control";
public final static String FILETRANSFER = "filetransfer";
public final static String SMS_MMS = "sms_mms";
public final static String RECEIVENOTIFICATION = "receive";
public final static String HIGHPRIORITY = "highpriority";
}
@@ -83,6 +84,12 @@ public class NotificationHelper {
NotificationManager.IMPORTANCE_DEFAULT)
);
manager.createNotificationChannel(new NotificationChannel(
Channels.SMS_MMS,
context.getString(R.string.notification_channel_sms_mms),
NotificationManager.IMPORTANCE_DEFAULT)
);
NotificationChannel highPriority = new NotificationChannel(Channels.HIGHPRIORITY, context.getString(R.string.notification_channel_high_priority), NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(highPriority);
}

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2019 Simon Redman <simon@ergotech.com>
* SPDX-FileCopyrightText: 2019 Simon Redman <simon@ergotech.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Helpers;
@@ -26,6 +12,9 @@ import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.media.ThumbnailUtils;
import android.net.Uri;
import android.os.Build;
import android.os.Looper;
@@ -40,9 +29,14 @@ import androidx.annotation.RequiresApi;
import com.klinker.android.send_message.Utils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.kde.kdeconnect.Plugins.SMSPlugin.MimeType;
import org.kde.kdeconnect.Plugins.SMSPlugin.SmsMmsUtils;
import java.io.IOException;
import java.io.InputStream;
@@ -53,7 +47,6 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -63,9 +56,14 @@ import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import kotlin.text.Charsets;
@SuppressLint("InlinedApi")
public class SMSHelper {
private static final int THUMBNAIL_HEIGHT = 100;
private static final int THUMBNAIL_WIDTH = 100;
/**
* Get a URI for querying SMS messages
*/
@@ -81,13 +79,14 @@ public class SMSHelper {
return Telephony.Mms.CONTENT_URI;
}
private static Uri getMMSPartUri() {
public static Uri getMMSPartUri() {
// Android says we should have Telephony.Mms.Part.CONTENT_URI. Alas, we do not.
return Uri.parse("content://mms/part/");
}
/**
* Get the base address for all message conversations
* We only use this to fetch thread_ids because the data it returns if often incomplete or useless
*/
private static Uri getConversationUri() {
@@ -124,7 +123,7 @@ public class SMSHelper {
}
/**
* Get some or all the messages in a requested thread
* Get some or all the messages in a requested thread, starting with the most-recent message
*
* @param context android.content.Context running the request
* @param threadID Thread to look up
@@ -136,11 +135,7 @@ public class SMSHelper {
@NonNull ThreadID threadID,
@Nullable Long numberToGet
) {
Uri uri = Uri.withAppendedPath(getConversationUri(), threadID.toString());
String sortOrder = Message.DATE + " DESC";
return getMessages(uri, context, null, null, sortOrder, numberToGet);
return getMessagesInRange(context, threadID, Long.MAX_VALUE, numberToGet);
}
/**
@@ -255,17 +250,10 @@ public class SMSHelper {
null,
null)
) {
if (availableColumnsCursor != null) {
return true; // if we got the cursor, the query shouldn't fail
}
return false;
return availableColumnsCursor != null; // if we got the cursor, the query shouldn't fail
} catch (SQLiteException | IllegalArgumentException e) {
// With uri content://mms-sms/conversations this query throws an exception if sub_id is not supported
String errMessage = e.getMessage();
if (errMessage != null && errMessage.contains(Telephony.Sms.SUBSCRIPTION_ID)) {
return false;
}
return true;
return !StringUtils.contains(e.getMessage(), Telephony.Sms.SUBSCRIPTION_ID);
}
}
@@ -305,7 +293,7 @@ public class SMSHelper {
try (Cursor myCursor = context.getContentResolver().query(
uri,
fetchColumns.toArray(new String[]{}),
fetchColumns.toArray(ArrayUtils.EMPTY_STRING_ARRAY),
selection,
selectionArgs,
sortOrder)
@@ -404,7 +392,7 @@ public class SMSHelper {
) {
try (Cursor myCursor = context.getContentResolver().query(
uri,
fetchColumns.toArray(new String[]{}),
fetchColumns.toArray(ArrayUtils.EMPTY_STRING_ARRAY),
selection,
selectionArgs,
sortOrder)
@@ -597,8 +585,7 @@ public class SMSHelper {
int read = Integer.parseInt(messageInfo.get(Message.READ));
@NonNull ThreadID threadID = new ThreadID(Long.parseLong(messageInfo.get(Message.THREAD_ID)));
long uID = Long.parseLong(messageInfo.get(Message.U_ID));
int subscriptionID = messageInfo.get(Message.SUBSCRIPTION_ID) != null ?
Integer.parseInt(messageInfo.get(Message.SUBSCRIPTION_ID)) : 0;
int subscriptionID = NumberUtils.toInt(messageInfo.get(Message.SUBSCRIPTION_ID));
return new Message(
address,
@@ -609,7 +596,8 @@ public class SMSHelper {
threadID,
uID,
event,
subscriptionID
subscriptionID,
null
);
}
@@ -630,8 +618,8 @@ public class SMSHelper {
int read = Integer.parseInt(messageInfo.get(Message.READ));
@NonNull ThreadID threadID = new ThreadID(Long.parseLong(messageInfo.get(Message.THREAD_ID)));
long uID = Long.parseLong(messageInfo.get(Message.U_ID));
int subscriptionID = messageInfo.get(Message.SUBSCRIPTION_ID) != null ?
Integer.parseInt(messageInfo.get(Message.SUBSCRIPTION_ID)) : 0;
int subscriptionID = NumberUtils.toInt(messageInfo.get(Message.SUBSCRIPTION_ID));
List<Attachment> attachments = new ArrayList<>();
String[] columns = {
Telephony.Mms.Part._ID, // The content ID of this part
@@ -664,7 +652,7 @@ public class SMSHelper {
long partID = cursor.getLong(partIDColumn);
String contentType = cursor.getString(contentTypeColumn);
String data = cursor.getString(dataColumn);
if ("text/plain".equals(contentType)) {
if (MimeType.isTypeText(contentType)) {
if (data != null) {
// data != null means the data is on disk. Go get it.
body = getMmsText(context, partID);
@@ -672,10 +660,41 @@ public class SMSHelper {
body = cursor.getString(textColumn);
}
event = addEventFlag(event, Message.EVENT_TEXT_MESSAGE);
} //TODO: Parse more content types (photos and other attachments) here
} else if (MimeType.isTypeImage(contentType)) {
String mimeType = contentType;
String fileName = data.substring(data.lastIndexOf('/') + 1);
// Get the actual image from the mms database convert it into thumbnail and encode to Base64
Bitmap image = SmsMmsUtils.getMmsImage(context, partID);
Bitmap thumbnailImage = ThumbnailUtils.extractThumbnail(image, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT);
String encodedThumbnail = SmsMmsUtils.bitMapToBase64(thumbnailImage);
attachments.add(new Attachment(partID, mimeType, encodedThumbnail, fileName));
} else if (MimeType.isTypeVideo(contentType)) {
String mimeType = contentType;
String fileName = data.substring(data.lastIndexOf('/') + 1);
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(context, ContentUris.withAppendedId(getMMSPartUri(), partID));
Bitmap videoThumbnail = retriever.getFrameAtTime();
String encodedThumbnail = SmsMmsUtils.bitMapToBase64(
Bitmap.createScaledBitmap(videoThumbnail, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, true)
);
attachments.add(new Attachment(partID, mimeType, encodedThumbnail, fileName));
} else if (MimeType.isTypeAudio(contentType)) {
String mimeType = contentType;
String fileName = data.substring(data.lastIndexOf('/') + 1);
attachments.add(new Attachment(partID, mimeType, null, fileName));
} else {
Log.v("SMSHelper", "Unsupported attachment type: " + contentType);
}
} while (cursor.moveToNext());
}
} catch (Exception e) {
e.printStackTrace();
}
// Determine whether the message was in- our out- bound
@@ -693,7 +712,26 @@ public class SMSHelper {
}
// Get address(es) of the message
List<Address> addresses = getMmsAddresses(context, Long.parseLong(mmsID), userPhoneNumbers);
Uri uri = ContentUris.appendId(getMMSUri().buildUpon(), uID).build();
Address from = SmsMmsUtils.getMmsFrom(context, uri);
List<Address> to = SmsMmsUtils.getMmsTo(context, uri);
List<Address> addresses = new ArrayList<>();
if (from != null) {
if (!userPhoneNumbers.contains(from.toString()) && !from.toString().equals("insert-address-token")) {
addresses.add(from);
}
}
if (to != null) {
for (Address address : to) {
if (!userPhoneNumbers.contains(address.toString()) && !address.toString().equals("insert-address-token")) {
addresses.add(address);
}
}
}
// It looks like addresses[0] is always the sender of the message and
// following addresses are recipient(s)
// This usually means the addresses list is at least 2 long, but there are cases (special
@@ -717,78 +755,11 @@ public class SMSHelper {
threadID,
uID,
event,
subscriptionID
subscriptionID,
attachments
);
}
/**
* Get the address(es) of an MMS message
* Original implementation from https://stackoverflow.com/a/6446831/3723163
*
* The message at the first position of the list should be the sender of the message
*
* @param messageID ID of this message in the MMS database for looking up the remaining info
* @param userPhoneNumbers List of phone numbers which should be removed from the list of addresses
*/
private static @NonNull List<Address> getMmsAddresses(
@NonNull Context context,
@NonNull Long messageID,
@NonNull List<String> userPhoneNumbers
) {
Uri uri = ContentUris.appendId(getMMSUri().buildUpon(), messageID).appendPath("addr").build();
String[] columns = {
Telephony.Mms.Addr.MSG_ID, // ID of the message for which we are fetching addresses
Telephony.Mms.Addr.ADDRESS, // Address of this part
Telephony.Mms.Addr.CHARSET, // Charset of the returned address (where relevant) //TODO: Handle
};
String selection = Telephony.Mms.Addr.MSG_ID + " = ?";
String[] selectionArgs = {messageID.toString()};
// Keep an ordered set rather than a list because Android sometimes throws duplicates at us
Set<Address> addresses = new LinkedHashSet<>();
try (Cursor addrCursor = context.getContentResolver().query(
uri,
columns,
selection,
selectionArgs,
null
)) {
if (addrCursor != null && addrCursor.moveToFirst()) {
int addressIndex = addrCursor.getColumnIndex(Telephony.Mms.Addr.ADDRESS);
do {
String address = addrCursor.getString(addressIndex);
addresses.add(new Address(address));
} while (addrCursor.moveToNext());
}
}
// Prune the user's phone numbers from the list of addresses
List<Address> prunedAddresses = new ArrayList<>(addresses);
prunedAddresses.removeAll(userPhoneNumbers);
if (prunedAddresses.size() == 0) {
// If it turns out that we have pruned away everything, prune away nothing
// (The user is allowed to talk to themself)
// Remove duplicate entries, since the user knows if a conversation says "Me" on it,
// it is the conversation with themself. (We don't need to say "Me, Me")
// This leaves the multi-sim case alone, so the returned address list might say
// "Me1, Me2"
prunedAddresses = new ArrayList<>(addresses.size()); // The old one was empty too, but just to be clear...
for (Address address : addresses) {
if (!prunedAddresses.contains(address)) {
prunedAddresses.add(address);
}
}
}
return prunedAddresses;
}
/**
* Get a text part of an MMS message
* Original implementation from https://stackoverflow.com/a/6446831/3723163
@@ -799,7 +770,7 @@ public class SMSHelper {
try (InputStream is = context.getContentResolver().openInputStream(partURI)) {
if (is != null) {
// The stream is buffered internally, so buffering it separately is unnecessary.
body = IOUtils.toString(is, StringsHelper.UTF8);
body = IOUtils.toString(is, Charsets.UTF_8);
}
} catch (IOException e) {
throw new SMSHelper.MessageAccessException(partURI, e);
@@ -850,6 +821,46 @@ public class SMSHelper {
}
}
public static class Attachment {
final long partID;
final String mimeType;
final String base64EncodedFile;
final String uniqueIdentifier;
/**
* Attachment object field names
*/
public static final String PART_ID = "part_id";
public static final String MIME_TYPE = "mime_type";
public static final String ENCODED_THUMBNAIL = "encoded_thumbnail";
public static final String UNIQUE_IDENTIFIER = "unique_identifier";
public Attachment(long partID,
String mimeType,
@Nullable String base64EncodedFile,
String uniqueIdentifier
) {
this.partID = partID;
this.mimeType = mimeType;
this.base64EncodedFile = base64EncodedFile;
this.uniqueIdentifier = uniqueIdentifier;
}
public JSONObject toJson() throws JSONException {
JSONObject json = new JSONObject();
json.put(Attachment.PART_ID, this.partID);
json.put(Attachment.MIME_TYPE, this.mimeType);
if (this.base64EncodedFile != null) {
json.put(Attachment.ENCODED_THUMBNAIL, this.base64EncodedFile);
}
json.put(Attachment.UNIQUE_IDENTIFIER, this.uniqueIdentifier);
return json;
}
}
public static class Address {
final String address;
@@ -909,7 +920,6 @@ public class SMSHelper {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String address = jsonObject.getString("address");
addresses.add(new Address(address));
Log.e("address", address);
}
} catch (Exception e) {
e.printStackTrace();
@@ -955,6 +965,7 @@ public class SMSHelper {
public final long uID;
public final int event;
public final int subscriptionID;
public final List<Attachment> attachments;
/**
* Named constants which are used to construct a Message
@@ -969,6 +980,7 @@ public class SMSHelper {
static final String U_ID = Telephony.Sms._ID; // Something which uniquely identifies this message
static final String EVENT = "event";
static final String SUBSCRIPTION_ID = Telephony.Sms.SUBSCRIPTION_ID; // An ID which appears to identify a SIM card
static final String ATTACHMENTS = "attachments"; // List of files attached in an MMS
/**
* Event flags
@@ -1020,7 +1032,8 @@ public class SMSHelper {
@NonNull ThreadID threadID,
long uID,
int event,
int subscriptionID
int subscriptionID,
@Nullable List<Attachment> attachments
) {
this.addresses = addresses;
this.body = body;
@@ -1039,6 +1052,7 @@ public class SMSHelper {
this.uID = uID;
this.subscriptionID = subscriptionID;
this.event = event;
this.attachments = attachments;
}
public JSONObject toJSONObject() throws JSONException {
@@ -1059,6 +1073,14 @@ public class SMSHelper {
json.put(Message.SUBSCRIPTION_ID, subscriptionID);
json.put(Message.EVENT, event);
if (this.attachments != null) {
JSONArray jsonAttachments = new JSONArray();
for (Attachment attachment : this.attachments) {
jsonAttachments.put(attachment.toJson());
}
json.put(Message.ATTACHMENTS, jsonAttachments);
}
return json;
}

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2015 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2015 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Helpers.SecurityHelpers;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2015 Vineet Garg <grg.vineet@gmail.com>
* SPDX-FileCopyrightText: 2015 Vineet Garg <grg.vineet@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Helpers.SecurityHelpers;
@@ -29,6 +15,7 @@ import android.preference.PreferenceManager;
import android.util.Base64;
import android.util.Log;
import org.apache.commons.lang3.ArrayUtils;
import org.kde.kdeconnect.Helpers.DeviceHelper;
import org.kde.kdeconnect.Helpers.RandomHelper;
import org.spongycastle.asn1.x500.RDN;
@@ -241,7 +228,7 @@ public class SslHelper {
supportedCiphers.add("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"); // API 20+
}
supportedCiphers.add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"); // API 11+
socket.setEnabledCipherSuites(supportedCiphers.toArray(new String[0]));
socket.setEnabledCipherSuites(supportedCiphers.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
socket.setSoTimeout(10000);

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Helpers;
@@ -31,11 +17,12 @@ import android.util.Log;
import androidx.annotation.NonNull;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
@@ -109,7 +96,7 @@ public class StorageHelper {
}
if (!path.startsWith("/storage/emulated") || dirs.length == 1) {
if (!paths.contains(path) && !paths.contains(path2)) {
if (mounts == null || mounts.contains(path) || mounts.contains(path2)) {
if (mounts == null || StringUtils.containsAny(mounts, path, path2)) {
list.add(0, new StorageInfo(path, dir.canWrite(), true, cur_removable_number++));
paths.add(path);
}
@@ -123,8 +110,7 @@ public class StorageHelper {
try (FileReader fileReader = new FileReader("/proc/mounts")) {
// The reader is buffered internally, so buffering it separately is unnecessary.
final List<String> lines = IOUtils.readLines(fileReader).stream()
.filter(line -> line.contains("vfat") || line.contains("exfat") ||
line.contains("ntfs") || line.contains("/mnt"))
.filter(line -> StringUtils.containsAny(line, "vfat", "exfat", "ntfs", "/mnt"))
.collect(Collectors.toList());
for (String line : lines) {
if (line.contains("/storage/sdcard"))
@@ -144,21 +130,15 @@ public class StorageHelper {
continue;
}
tokens.nextToken(); //file system
List<String> flags = Arrays.asList(tokens.nextToken().split(",")); //flags
boolean readonly = flags.contains("ro");
String[] flags = tokens.nextToken().split(","); //flags
boolean readonly = ArrayUtils.contains(flags, "ro");
if (line.contains("/dev/block/vold")) {
if (!line.contains("/mnt/secure")
&& !line.contains("/mnt/asec")
&& !line.contains("/mnt/obb")
&& !line.contains("/dev/mapper")
&& !line.contains("tmpfs")) {
paths.add(mount_point);
list.add(new StorageInfo(mount_point, readonly, true, cur_removable_number++));
}
if (line.contains("/dev/block/vold") && !StringUtils.containsAny(line, "/mnt/secure",
"/mnt/asec", "/mnt/obb", "/dev/mapper", "tmpfs")) {
paths.add(mount_point);
list.add(new StorageInfo(mount_point, readonly, true, cur_removable_number++));
}
}
}
return list;

View File

@@ -1,8 +0,0 @@
package org.kde.kdeconnect.Helpers;
import java.nio.charset.Charset;
public class StringsHelper {
public static final Charset UTF8 = Charset.forName("UTF-8");
}

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2019 Simon Redman <simon@ergotech.com>
* SPDX-FileCopyrightText: 2019 Simon Redman <simon@ergotech.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Helpers;
@@ -60,6 +46,11 @@ public class TelephonyHelper {
return Collections.emptyList();
}
List<SubscriptionInfo> subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList();
if (subscriptionInfos == null) {
// This happens when there is no SIM card inserted
Log.w(LOGGING_TAG, "Could not get SubscriptionInfos");
return Collections.emptyList();
}
List<Integer> subscriptionIDs = new ArrayList<>(subscriptionInfos.size());
for (SubscriptionInfo info : subscriptionInfos) {
subscriptionIDs.add(info.getSubscriptionId());

View File

@@ -11,8 +11,8 @@ import android.text.TextUtils;
import androidx.core.content.ContextCompat;
import java.util.Arrays;
import java.util.Collections;
import org.apache.commons.lang3.ArrayUtils;
import java.util.List;
public class TrustedNetworkHelper {
@@ -29,12 +29,12 @@ public class TrustedNetworkHelper {
this.context = context;
}
public List<String> read() {
public String[] read() {
String serializeTrustedNetwork = PreferenceManager.getDefaultSharedPreferences(context).getString(
KEY_CUSTOM_TRUSTED_NETWORKS, "");
if (serializeTrustedNetwork.isEmpty())
return Collections.emptyList();
return Arrays.asList(serializeTrustedNetwork.split(NETWORK_SSID_DELIMITER));
return ArrayUtils.EMPTY_STRING_ARRAY;
return serializeTrustedNetwork.split(NETWORK_SSID_DELIMITER);
}
public void update(List<String> trustedNetworks) {
@@ -85,6 +85,6 @@ public class TrustedNetworkHelper {
if (trustedNetworkHelper.allAllowed()){
return true;
}
return trustedNetworkHelper.read().contains(trustedNetworkHelper.currentSSID());
return ArrayUtils.contains(trustedNetworkHelper.read(), trustedNetworkHelper.currentSSID());
}
}

View File

@@ -1,5 +1,7 @@
package org.kde.kdeconnect.Helpers;
import org.apache.commons.lang3.StringUtils;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Locale;
@@ -29,9 +31,7 @@ public class VideoUrlsHelper {
boolean seekUrl = false;
// Override defaults if necessary
if (host.contains("youtube.com")
|| host.contains("youtu.be")
|| host.contains("pornhub.com")) {
if (StringUtils.containsAny(host, "youtube.com", "youtu.be", "pornhub.com")) {
seekUrl = true;
url = stripTimestampS(url, parameter, trailer, inQuery);
} else if (host.contains("vimeo.com")) {

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.BatteryPlugin;

View File

@@ -1,22 +1,8 @@
/*
* Copyright 2014 Ahmed I. Khalil <ahmedibrahimkhali@gmail.com>
* Copyright 2020 Sylvia van Os <sylvia@hackerchick.me>
* SPDX-FileCopyrightText: 2014 Ahmed I. Khalil <ahmedibrahimkhali@gmail.com>
* SPDX-FileCopyrightText: 2020 Sylvia van Os <sylvia@hackerchick.me>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.BigscreenPlugin;
@@ -27,16 +13,16 @@ import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.util.Log;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.UserInterface.MainActivity;
import org.kde.kdeconnect.UserInterface.PermissionsAlertDialogFragment;
import org.kde.kdeconnect.UserInterface.ThemeUtil;
import org.kde.kdeconnect_tp.R;
import androidx.appcompat.app.AppCompatActivity;
import org.kde.kdeconnect_tp.databinding.ActivityBigscreenBinding;
import java.util.ArrayList;
@@ -49,23 +35,24 @@ public class BigscreenActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
ThemeUtil.setUserPreferredTheme(this);
setContentView(R.layout.activity_bigscreen);
final ActivityBigscreenBinding binding = ActivityBigscreenBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
final String deviceId = getIntent().getStringExtra("deviceId");
if (!SpeechRecognizer.isRecognitionAvailable(this)) {
findViewById(R.id.mic_button).setEnabled(false);
findViewById(R.id.mic_button).setVisibility(View.INVISIBLE);
binding.micButton.setEnabled(false);
binding.micButton.setVisibility(View.INVISIBLE);
}
BackgroundService.RunWithPlugin(this, deviceId, BigscreenPlugin.class, plugin -> runOnUiThread(() -> {
findViewById(R.id.left_button).setOnClickListener(v -> plugin.sendLeft());
findViewById(R.id.right_button).setOnClickListener(v -> plugin.sendRight());
findViewById(R.id.up_button).setOnClickListener(v -> plugin.sendUp());
findViewById(R.id.down_button).setOnClickListener(v -> plugin.sendDown());
findViewById(R.id.select_button).setOnClickListener(v -> plugin.sendSelect());
findViewById(R.id.home_button).setOnClickListener(v -> plugin.sendHome());
findViewById(R.id.mic_button).setOnClickListener(v -> {
binding.leftButton.setOnClickListener(v -> plugin.sendLeft());
binding.rightButton.setOnClickListener(v -> plugin.sendRight());
binding.upButton.setOnClickListener(v -> plugin.sendUp());
binding.downButton.setOnClickListener(v -> plugin.sendDown());
binding.selectButton.setOnClickListener(v -> plugin.sendSelect());
binding.homeButton.setOnClickListener(v -> plugin.sendHome());
binding.micButton.setOnClickListener(v -> {
if (plugin.hasMicPermission()) {
activateSTT();
} else {

View File

@@ -1,22 +1,8 @@
/*
* Copyright 2014 Ahmed I. Khalil <ahmedibrahimkhali@gmail.com>
* Copyright 2020 Sylvia van Os <sylvia@hackerchick.me>
* SPDX-FileCopyrightText: 2014 Ahmed I. Khalil <ahmedibrahimkhali@gmail.com>
* SPDX-FileCopyrightText: 2020 Sylvia van Os <sylvia@hackerchick.me>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.BigscreenPlugin;
@@ -44,10 +30,15 @@ public class BigscreenPlugin extends Plugin {
private final static String PACKET_TYPE_MOUSEPAD_REQUEST = "kdeconnect.mousepad.request";
private final static String PACKET_TYPE_BIGSCREEN_STT = "kdeconnect.bigscreen.stt";
@Override
public boolean isIncompatible() {
return !device.getDeviceType().equals(Device.DeviceType.Tv) || super.isIncompatible();
}
@Override
public boolean onCreate() {
optionalPermissionExplanation = R.string.bigscreen_optional_permission_explanation;
return device.getDeviceType().equals(Device.DeviceType.Tv);
return true;
}
@Override

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2020 Anjani Kumar <anjanik012@gmail.com>
* SPDX-FileCopyrightText: 2020 Anjani Kumar <anjanik012@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.ClibpoardPlugin;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.ClibpoardPlugin;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.ClibpoardPlugin;

View File

@@ -2,23 +2,9 @@
* ContactsPlugin.java - This file is part of KDE Connect's Android App
* Implement a way to request and send contact information
*
* Copyright 2018 Simon Redman <simon@ergotech.com>
* SPDX-FileCopyrightText: 2018 Simon Redman <simon@ergotech.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.ContactsPlugin;

View File

@@ -1,21 +1,7 @@
/* Copyright 2018 Nicolas Fella <nicolas.fella@gmx.de>
* Copyright 2015 David Edmundson <david@davidedmundson.co.uk>
/* SPDX-FileCopyrightText: 2018 Nicolas Fella <nicolas.fella@gmx.de>
* SPDX-FileCopyrightText: 2015 David Edmundson <david@davidedmundson.co.uk>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.FindMyPhonePlugin;
@@ -28,12 +14,11 @@ import androidx.appcompat.app.AppCompatActivity;
import org.kde.kdeconnect.BackgroundService;
import org.kde.kdeconnect.UserInterface.ThemeUtil;
import org.kde.kdeconnect_tp.R;
import org.kde.kdeconnect_tp.databinding.ActivityFindMyPhoneBinding;
public class FindMyPhoneActivity extends AppCompatActivity {
static final String EXTRA_DEVICE_ID = "deviceId";
private String deviceId;
private FindMyPhonePlugin plugin;
@Override
@@ -41,14 +26,15 @@ public class FindMyPhoneActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
ThemeUtil.setUserPreferredTheme(this);
setContentView(R.layout.activity_find_my_phone);
final ActivityFindMyPhoneBinding binding = ActivityFindMyPhoneBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
if (!getIntent().hasExtra(EXTRA_DEVICE_ID)) {
Log.e("FindMyPhoneActivity", "You must include the deviceId for which this activity is started as an intent EXTRA");
finish();
}
deviceId = getIntent().getStringExtra(EXTRA_DEVICE_ID);
String deviceId = getIntent().getStringExtra(EXTRA_DEVICE_ID);
plugin = BackgroundService.getInstance().getDevice(deviceId).getPlugin(FindMyPhonePlugin.class);
Window window = this.getWindow();
@@ -56,7 +42,7 @@ public class FindMyPhoneActivity extends AppCompatActivity {
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
findViewById(R.id.bFindMyPhone).setOnClickListener(view -> finish());
binding.bFindMyPhone.setOnClickListener(view -> finish());
}
@Override

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2015 David Edmundson <david@davidedmundson.co.uk>
* SPDX-FileCopyrightText: 2015 David Edmundson <david@davidedmundson.co.uk>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.FindMyPhonePlugin;
@@ -38,6 +24,7 @@ import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import org.apache.commons.lang3.ArrayUtils;
import org.kde.kdeconnect.Helpers.DeviceHelper;
import org.kde.kdeconnect.Helpers.NotificationHelper;
import org.kde.kdeconnect.MyApplication;
@@ -215,7 +202,7 @@ public class FindMyPhonePlugin extends Plugin {
@Override
public String[] getOutgoingPacketTypes() {
return new String[0];
return ArrayUtils.EMPTY_STRING_ARRAY;
}
@Override

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2018 Erik Duisters <e.duisters1@gmail.com>
* SPDX-FileCopyrightText: 2018 Erik Duisters <e.duisters1@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.FindMyPhonePlugin;

View File

@@ -1,27 +1,14 @@
/*
* Copyright 2014 Albert Vaca Cintora <albertvaka@gmail.com>
* SPDX-FileCopyrightText: 2014 Albert Vaca Cintora <albertvaka@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.FindRemoteDevicePlugin;
import android.app.Activity;
import org.apache.commons.lang3.ArrayUtils;
import org.kde.kdeconnect.NetworkPacket;
import org.kde.kdeconnect.Plugins.FindMyPhonePlugin.FindMyPhonePlugin;
import org.kde.kdeconnect.Plugins.Plugin;
@@ -70,12 +57,11 @@ public class FindRemoteDevicePlugin extends Plugin {
@Override
public String[] getSupportedPacketTypes() {
return new String[]{};
return ArrayUtils.EMPTY_STRING_ARRAY;
}
@Override
public String[] getOutgoingPacketTypes() {
return new String[]{FindMyPhonePlugin.PACKET_TYPE_FINDMYPHONE_REQUEST};
}
}

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Saikrishna Arcot <saiarcot895@gmail.com>
* SPDX-FileCopyrightText: 2014 Saikrishna Arcot <saiarcot895@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.MousePadPlugin;

View File

@@ -1,21 +1,7 @@
/*
* Copyright 2014 Ahmed I. Khalil <ahmedibrahimkhali@gmail.com>
* SPDX-FileCopyrightText: 2014 Ahmed I. Khalil <ahmedibrahimkhali@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
package org.kde.kdeconnect.Plugins.MousePadPlugin;

Some files were not shown because too many files have changed in this diff Show More