diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 405cc9f320b..ebe39c7b8ff 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,33 +1,41 @@
-
+Let's begin with a checklist: replace the empty checkboxes [ ] below with checked ones [x] accordingly -->
-
I have:
- [ ] searched open and closed issues for duplicates
- [ ] read https://github.com/WhisperSystems/Signal-Android/wiki/Submitting-useful-bug-reports
+----------------------------------------
+
### Bug description
+Describe here the issue that you are experiencing.
### Steps to reproduce
-- add your steps here
-- as a list
-- using hyphens
+- using hyphens as bullet points
+- list the steps
+- that reproduce the bug
-### Screenshots
-
+**Actual result:** Describe here what happens after you run the steps above (i.e. the buggy behaviour)
+**Expected result:** Describe here what should happen after you run the steps above (i.e. what would be the correct behaviour)
-### Device info
-
- **Model:** Manufacturer Model XVI
+### Screenshots
+
- **Android version:** 0.0.0
- **Signal version:** 0.0.0
+### Device info
+
+**Device:** Manufacturer Model XVI
+**Android version:** 0.0.0
+**Signal version:** 0.0.0
### Link to debug log
+
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 1bae5c5f473..06aa056012b 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,18 +1,23 @@
-
+
### First time contributor checklist
-
+
- [ ] I have read [how to contribute](https://github.com/WhisperSystems/Signal-Android/blob/master/CONTRIBUTING.md) to this project
-- [ ] I have signed the [Contributor Licence Agreement](https://whispersystems.org/cla/)
### Contributor checklist
-
+
- [ ] I am following the [Code Style Guidelines](https://github.com/WhisperSystems/Signal-Android/wiki/Code-Style-Guidelines)
- [ ] I have tested my contribution on these devices:
* Device A, Android X.Y.Z
* Device B, Android Z.Y
+ * Virtual device W, Android Y.Y.Z
- [ ] My contribution is fully baked and ready to be merged as is
-- [ ] I have made the choice whether I want the Bithub reward or not by omitting or adding the word `FREEBIE` in my commit message
+- [ ] I ensure that all the open issues my contribution fixes are mentioned in the commit message of my first commit using the `Fixes #1234` [syntax](https://help.github.com/articles/closing-issues-via-commit-messages/)
+- [ ] I have made the choice whether I want the [BitHub reward](https://github.com/WhisperSystems/Signal-Android/wiki/BitHub-Rewards) or not by omitting or adding the word `FREEBIE` in the commit message of my first commit
----------
### Description
+
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000000..02bcc716156
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,15 @@
+[submodule "libs/libtextsecure-java"]
+ path = libs/libtextsecure-java
+ url = https://github.com/LibreSignal/libtextsecure-java.git
+[submodule "libs/android-support-v4-preferencefragment"]
+ path = libs/android-support-v4-preferencefragment
+ url = https://github.com/kolavar/android-support-v4-preferencefragment.git
+[submodule "libs/org.w3c.dom"]
+ path = libs/org.w3c.dom
+ url = https://github.com/SMSSecure/org.w3c.dom.git
+[submodule "libs/ShortcutBadger"]
+ path = libs/ShortcutBadger
+ url = https://github.com/WhisperSystems/ShortcutBadger.git
+[submodule "libs/PhotoView"]
+ path = libs/PhotoView
+ url = https://github.com/chrisbanes/PhotoView.git
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6b0ff555dc8..55ad0dfdc36 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2,8 +2,8 @@
+ android:versionCode="221"
+ android:versionName="3.25.3">
@@ -97,16 +97,12 @@
android:allowBackup="false"
android:theme="@style/TextSecure.LightTheme">
-
-
-
-
+
+
+
-
+
+
@@ -262,11 +262,9 @@
android:windowSoftInputMode="stateHidden"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
-
-
-
+
+
+
+
@@ -454,6 +461,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BUILDING.md b/BUILDING.md
index 4aded97c9d7..dec48b976cb 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -1,33 +1,40 @@
-Building Signal
+Building LibreSignal
===============
Basics
------
-Signal uses [Gradle](http://gradle.org) to build the project and to maintain
-dependencies. However, you needn't install it yourself; the
-"gradle wrapper" `gradlew`, mentioned below, will do that for you.
+LibreSignal uses [Gradle](http://gradle.org) to build the project and to maintain dependencies. However, you needn't install it yourself; the "gradle wrapper" `gradlew`, mentioned below, will do that for you.
-Building Signal
+Building LibreSignal
---------------
-The following steps should help you (re)build Signal from the command line.
+The following steps should help you (re)build LibreSignal from the command line.
-1. Checkout the Signal-Android project source with the command:
+1. Checkout the LibreSignal project source and all submodules with the command (`git` 1.6.5 or higher):
+
+ git clone --recursive https://github.com/LibreSignal/LibreSignal.git
- git clone https://github.com/WhisperSystems/Signal-Android.git
-2. Make sure you have the [Android SDK](https://developer.android.com/sdk/index.html) installed.
+2. Make sure you have the [Android SDK](https://developer.android.com/sdk/index.html) and [Android NDK](https://developer.android.com/ndk/index.html) installed.
3. Ensure that the following packages are installed from the Android SDK manager:
* Android SDK Build Tools
* SDK Platform (API level 22)
* Android Support Repository
- * Google Repository
-4. Create a local.properties file at the root of your source checkout and add an sdk.dir entry to it. For example:
+4. Create a local.properties file at the root of your source checkout and add the sdk.dir and ndk.dir entries to it. For example:
- sdk.dir=/Application/android-sdk-macosx
+ sdk.dir=/home/username/android-sdk
+ ndk.dir=/home/username/android-ndk
-5. Execute Gradle:
+5. Compile NDK code:
+
+ ndk-build --directory=jni
+
+6. Gradle clean:
+
+ ./gradlew clean
+
+7. Gradle build:
./gradlew build
@@ -39,8 +46,8 @@ Source assets tend to be large binary blobs, which are best stored outside of gi
Sample command for generating our audio placeholder image:
```bash
-pngs_from_svg.py ic_audio.svg /path/to/Signal/res/ 150 --color #000 --opacity 0.54 --suffix _light
-pngs_from_svg.py ic_audio.svg /path/to/Signal/res/ 150 --color #fff --opacity 1.00 --suffix _light
+pngs_from_svg.py ic_audio.svg /path/to/LibreSignal/res/ 150 --color #000 --opacity 0.54 --suffix _light
+pngs_from_svg.py ic_audio.svg /path/to/LibreSignal/res/ 150 --color #fff --opacity 1.00 --suffix _light
```
Setting up a development environment
@@ -53,7 +60,7 @@ Setting up a development environment
3. From the Quickstart panel, choose "Configure" then "SDK Manager".
4. In the SDK Tools tab of the SDK Manager, make sure that the "Android Support Repository" is installed, and that the latest "Android SDK build-tools" are installed. Click "OK" to return to the Quickstart panel.
5. From the Quickstart panel, choose "Checkout from Version Control" then "git".
-6. Paste the URL for the Signal-Android project when prompted (https://github.com/WhisperSystems/Signal-Android.git).
+6. Paste the URL for the LibreSignal-Android project when prompted (https://github.com/LibreSignal/LibreSignal.git).
7. Android studio should detect the presence of a project file and ask you whether to open it. Click "yes".
9. Default config options should be good enough.
9. Project initialisation and build should proceed.
@@ -62,11 +69,3 @@ Contributing code
-----------------
Code contributions should be sent via github as pull requests, from feature branches [as explained here](https://help.github.com/articles/using-pull-requests).
-
-Mailing list
-------------
-
-Development discussion happens on the whispersystems mailing list.
-[To join](https://lists.riseup.net/www/info/whispersystems)
-Send emails to whispersystems@lists.riseup.net
-
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 0a41a4626a6..dcea34be81a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,10 @@
-# Contributing to Signal Android
+# Contributing to LibreSignal for Android
-Thank you for deciding to help this project! If you have contributed to other open source projects before please note that some conventions here might be a bit different than what you have been used to. Reading this document will save you, other contributors and the developers time.
+Thank you for deciding to help this project!
+
+**Before contributing to LibreSignal, think about adding your code to [Signal-Android](https://github.com/WhisperSystems/Signal-Android/wiki), as we pull from there.**
+
+If you have contributed to other open source projects before please note that some conventions here might be a bit different than what you have been used to. Reading this document will save you, other contributors and the developers time.
## Development Ideology
@@ -27,16 +31,10 @@ Please do not submit issues or pull requests for translation fixes. Anyone can u
1. Read the [Submitting useful bug reports guide](https://github.com/WhisperSystems/Signal-Android/wiki/Submitting-useful-bug-reports) before posting a bug.
### Issue tracker is for bugs
-The main purpose of this issue tracker is to track bugs for the Android client. Relevant, concise and to the point comments that help to solve the issue are very welcome.
-
-##### Send support questions to support
-Please do **not** ask support questions at the issue tracker. We want to help you using Signal and we have created our support system just for that. You can reach support by sending email to support@whispersystems.org or by going to our [Support Center](http://support.whispersystems.org). You can also search for existing troubleshooting articles at the [Support Center](http://support.whispersystems.org).
-
-##### Not a discussion forum
-Please do **not** use this issue tracker as a discussion forum. Discussion related to the bug in question should of course go to the issue itself. However other discussion should take place at the [community forum](https://whispersystems.discoursehosting.net). You can use that forum to discuss any Signal related topics or to just hang out with your fellow users.
+The main purpose of this issue tracker is to track bugs for the Android client. Relevant, concise and to the point comments that help to solve the issue are very welcome. Please do **not** use this issue tracker as a discussion forum. Discussion related to the bug in question should of course go to the issue itself.
### Don't bump issues
-Every time someone comments on an issue, GitHub sends email to [everyone who is watching](https://github.com/WhisperSystems/Signal-Android/watchers) the repository (currently around 500 people). Thus bumping issues with :+1:s, _me toos_ or asking for updates just generate unnecessary email notifications. Moreover bumping an issue does not help solving it. Please be respectful to everyone's time and try to only comment when you have relevant new information to add.
+Every time someone comments on an issue, GitHub sends email to [everyone who is watching](https://github.com/LibreSignal/LibreSignal/watchers) the repository. Thus bumping issues with :+1:s, _me toos_ or asking for updates just generate unnecessary email notifications. Moreover bumping an issue does not help solving it. Please be respectful to everyone's time and try to only comment when you have relevant new information to add.
### Open issues
@@ -46,13 +44,12 @@ Have you followed all the points in the [Submitting useful bug reports guide](ht
### Closed issues
#### "My issue was closed without giving a reason!"
-Please understand that writing detailed explanations every time for every issue someone comes up with takes time. Sometimes a reason has been posted earlier to another related issue which you can search for. It's also possible that your issue was not in line with the guidelines of the project (see especially the [Development Ideology](https://github.com/WhisperSystems/Signal-Android/blob/master/CONTRIBUTING.md#development-ideology)). Or it was just simply decided that the issue is not something that Signal should do at this time.
+Please understand that writing detailed explanations every time for every issue someone comes up with takes time. Sometimes a reason has been posted earlier to another related issue which you can search for. It's also possible that your issue was not in line with the guidelines of the project (see especially the [Development Ideology](https://github.com/LibreSignal/LibreSignal/blob/master/CONTRIBUTING.md#development-ideology)). Or it was just simply decided that the issue is not something that LibreSignal should do at this time.
## Pull requests
-### Sign the Contributor Licence Agreement (CLA)
-You need to sign our CLA before your pull request can be merged. You can sign it at: https://whispersystems.org/cla/
+Please read the documentation on [how to use pull requests](https://help.github.com/articles/using-pull-requests/).
### Follow the Code Style Guidelines
Before submitting a pull request please check that your code adheres to the [Code style Guidelines](https://github.com/WhisperSystems/Signal-Android/wiki/Code-Style-Guidelines).
@@ -66,23 +63,14 @@ Please do not try to change too much at once. Big changes are less likely to be
### Merging can sometimes take a while
If your pull request follows all the advice above but still has not been merged it usually means the developers haven't simply had the time to review it yet. We understand that this might feel frustrating. We are sorry!
-### Bithub
-Accepted pull requests will be rewarded with Bitcoins! After your pull request has been merged you will automatically receive an email to the address you have specified as your Git commit email. Follow the instructions in the email to claim your coins. If you wish to submit your contribution for free please add the word `FREEBIE` in your Git commit message. You may wish to explore some previously merged commits to see how it all works.
-
-
## How can I contribute?
Any one can help by
- advising new people about the guidelines of this project
- - redirecting support questions to support@whispersystems.org and the [support site](http://support.whispersystems.org)
- - redirecting non-bug related discussions to the [community forum](https://whispersystems.discoursehosting.net)
-- improving documentation at the [wiki](https://github.com/WhisperSystems/Signal-Android/wiki)
+- improving documentation at the [original Signal wiki](https://github.com/WhisperSystems/Signal-Android/wiki)
- [translating](https://www.transifex.com/projects/p/signal-android/)
- finding and marking duplicate issues
- trying to reproduce issues
- finding solutions to open issues and posting relevant findings as comments
- submitting pull requests
- testing other people's pull requests
-- spreading the joy of Signal to your friends and family
-- donating money to our [BitHub](https://www.coinbase.com/checkouts/51dac699e660a4d773216b5ad94d6a0b) or through the [Freedom of the Press Foundation's donation page](https://freedom.press/bundle/encryption-tools-journalists)
-
-[](https://gitter.im/WhisperSystems/Signal-Android?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+- spreading the joy of LibreSignal to your friends and family
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000000..9e99cddaadf
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,26 @@
+FROM ubuntu:14.04.3
+
+RUN dpkg --add-architecture i386 && \
+ apt-get update -y && \
+ apt-get install -y software-properties-common && \
+ add-apt-repository -y ppa:openjdk-r/ppa && \
+ apt-get update -y && \
+ apt-get install -y libc6:i386=2.19-0ubuntu6.7 libncurses5:i386=5.9+20140118-1ubuntu1 libstdc++6:i386=4.8.4-2ubuntu1~14.04.1 lib32z1=1:1.2.8.dfsg-1ubuntu1 wget openjdk-8-jdk=8u72-b15-1~trusty1 git unzip && \
+ rm -rf /var/lib/apt/lists/* && \
+ apt-get autoremove -y && \
+ apt-get clean
+
+ENV ANDROID_SDK_FILENAME android-sdk_r24.4.1-linux.tgz
+ENV ANDROID_SDK_URL https://dl.google.com/android/${ANDROID_SDK_FILENAME}
+ENV ANDROID_API_LEVELS android-24
+ENV ANDROID_BUILD_TOOLS_VERSION 23.0.3
+ENV ANDROID_HOME /usr/local/android-sdk-linux
+ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
+RUN cd /usr/local/ && \
+ wget -q ${ANDROID_SDK_URL} && \
+ tar -xzf ${ANDROID_SDK_FILENAME} && \
+ rm ${ANDROID_SDK_FILENAME}
+RUN echo y | android update sdk --no-ui -a --filter ${ANDROID_API_LEVELS}
+RUN echo y | android update sdk --no-ui -a --filter extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository
+RUN echo y | android update sdk --no-ui -a --filter tools,platform-tools,build-tools-${ANDROID_BUILD_TOOLS_VERSION}
+RUN rm -rf ${ANDROID_HOME}/tools && unzip ${ANDROID_HOME}/temp/*.zip -d ${ANDROID_HOME}
diff --git a/README.md b/README.md
index c0c7f6f7b76..f8526fb5c25 100644
--- a/README.md
+++ b/README.md
@@ -1,68 +1,34 @@
-# Signal Android
+#The project was abandoned because of https://github.com/LibreSignal/LibreSignal/issues/37#issuecomment-217211165
-Signal is a messaging app for simple private communication with friends.
+# LibreSignal for Android
-Signal uses your phone's data connection (WiFi/3G/4G) to communicate securely, optionally supports plain SMS/MMS to function as a unified messenger, and can also encrypt the stored messages on your phone.
+`LibreSignal` is the **Google-Free** fork of the original `Signal` messaging app for simple private communication with friends. `LibreSignal` uses your phone's data connection (WiFi/3G/4G) to communicate securely, optionally supports plain SMS/MMS to function as a unified messenger, and can also encrypt the stored messages on your phone. Featured on [Kuketz IT-Security Blog](https://www.kuketz-blog.de/?s=LibreSignal).
-Currently available on the Play store.
-
-
-
-#WebSocket Support#
-
-This branch adds rudimentary WebSocket-ONLY support to Signal Private Messenger.
-In order to build a modified version of libtextsecure is needed, for that [checkout](https://github.com/JavaJens/libtextsecure-java/tree/fix/maven_local) my fork
-
-and run: ````./gradlew tasks installArchives```` to install in local maven directory.
+# WebSocket Support
+For push notifications, Google Cloud Messaging has been completely replaced by WebSocket to directly connect to Open Whisper Systems's server.
+It's done via a modified version of `libtextsecure`, which has been included as a submodule.
## Contributing Bug reports
-We use GitHub for bug tracking. Please search the existing issues for your bug and create a new one if the issue is not yet tracked!
-
-https://github.com/WhisperSystems/Signal-Android/issues
-
-## Joining the Beta
-Want to live life on the bleeding edge and help out with testing?
-
-You can subscribe to Signal Android Beta releases here:
-https://play.google.com/apps/testing/org.thoughtcrime.securesms
-
-If you're interested in a life of peace and tranquility, stick with the standard releases.
+We use GitHub for bug tracking. Please search the [existing issues](https://github.com/LibreSignal/LibreSignal/issues) for your bug and create a new one if yours is not present.
## Contributing Translations
-Interested in helping to translate Signal? Contribute here:
+Interested in helping to translate LibreSignal? Contribute here:
https://www.transifex.com/projects/p/signal-android/
## Contributing Code
-Instructions on how to setup your development environment and build Signal can be found in [BUILDING.md](https://github.com/WhisperSystems/Signal-Android/blob/master/BUILDING.md).
-
-If you're new to the Signal codebase, we recommend going through our issues and picking out a simple bug to fix (check the "easy" label in our issues) in order to get yourself familiar. Also please have a look at the [CONTRIBUTING.md](https://github.com/WhisperSystems/Signal-Android/blob/master/CONTRIBUTING.md), that might answer some of your questions.
-
-For larger changes and feature ideas, we ask that you propose it on the [unofficial Community Forum](https://whispersystems.discoursehosting.net) for a high-level discussion with the wider community before implementation.
-
-This repository is set up with [BitHub](https://whispersystems.org/blog/bithub/), so you can make money for committing to Signal. The current BitHub price for an accepted pull request is:
-
-[](https://whispersystems.org/blog/bithub/)
+Before contributing to LibreSignal, think about adding your code to [Signal-Android](https://github.com/WhisperSystems/Signal-Android/wiki), as we pull from there. Instructions on how to setup your development environment and build LibreSignal can be found in [BUILDING.md](https://github.com/LibreSignal/LibreSignal/blob/master/BUILDING.md). If you're new to the LibreSignal codebase, we recommend going through our issues and picking out a simple bug to fix (check the "easy" label in our issues) in order to get yourself familiar. Also please have a look at the [CONTRIBUTING.md](https://github.com/LibreSignal/LibreSignal/blob/master/CONTRIBUTING.md), that might answer some questions.
## Contributing Ideas
-Have something you want to say about Open Whisper Systems projects or want to be part of the conversation? Get involved in the [community forum](https://whispersystems.discoursehosting.net).
-
-## Contributing Funds
-[](https://www.coinbase.com/checkouts/51dac699e660a4d773216b5ad94d6a0b)
-
-You can add funds to BitHub to directly help further development efforts.
+Have something you want to say about LibreSignal or want to be part of the conversation? Feel invited to [post your new idea](https://github.com/LibreSignal/LibreSignal/issues/new), but please be patient for a reply and don't be mad should developers decide to not implement it or are busy with other things.
Help
====
## Support
-For troubleshooting and questions, please visit our support center!
-
-http://support.whispersystems.org/
+For troubleshooting and questions, please read our [FAQ](https://github.com/LibreSignal/LibreSignal/wiki/FAQ) and see our [GitHub Issues](https://github.com/LibreSignal/LibreSignal/issues)!
## Documentation
-Looking for documentation? Check out the wiki!
-
-https://github.com/WhisperSystems/Signal-Android/wiki
+Looking for documentation? Check out the [original Signal wiki](https://github.com/WhisperSystems/Signal-Android/wiki).
# Legal things
## Cryptography Notice
@@ -76,8 +42,4 @@ The form and manner of this distribution makes it eligible for export under the
## License
-Copyright 2011 Whisper Systems
-
-Copyright 2013-2016 Open Whisper Systems
-
Licensed under the GPLv3: http://www.gnu.org/licenses/gpl-3.0.html
diff --git a/apkdiff/apkdiff.py b/apkdiff/apkdiff.py
new file mode 100755
index 00000000000..4dbb253994b
--- /dev/null
+++ b/apkdiff/apkdiff.py
@@ -0,0 +1,78 @@
+#! /usr/bin/env python
+
+import sys
+from zipfile import ZipFile
+
+class ApkDiff:
+
+ IGNORE_FILES = ["META-INF/CERT.RSA", "META-INF/CERT.SF", "META-INF/MANIFEST.MF"]
+
+ def compare(self, sourceApk, destinationApk):
+ sourceZip = ZipFile(sourceApk, 'r')
+ destinationZip = ZipFile(destinationApk, 'r')
+
+ if self.compareManifests(sourceZip, destinationZip) and self.compareEntries(sourceZip, destinationZip) == True:
+ print "APKs match!"
+ else:
+ print "APKs don't match!"
+
+ def compareManifests(self, sourceZip, destinationZip):
+ sourceEntrySortedList = sorted(sourceZip.namelist())
+ destinationEntrySortedList = sorted(destinationZip.namelist())
+
+ for ignoreFile in self.IGNORE_FILES:
+ while ignoreFile in sourceEntrySortedList: sourceEntrySortedList.remove(ignoreFile)
+ while ignoreFile in destinationEntrySortedList: destinationEntrySortedList.remove(ignoreFile)
+
+ if len(sourceEntrySortedList) != len(destinationEntrySortedList):
+ print "Manifest lengths differ!"
+
+ for (sourceEntryName, destinationEntryName) in zip(sourceEntrySortedList, destinationEntrySortedList):
+ if sourceEntryName != destinationEntryName:
+ print "Sorted manifests don't match, %s vs %s" % (sourceEntryName, destinationEntryName)
+ return False
+
+ return True
+
+ def compareEntries(self, sourceZip, destinationZip):
+ sourceInfoList = filter(lambda sourceInfo: sourceInfo.filename not in self.IGNORE_FILES, sourceZip.infolist())
+ destinationInfoList = filter(lambda destinationInfo: destinationInfo.filename not in self.IGNORE_FILES, destinationZip.infolist())
+
+ if len(sourceInfoList) != len(destinationInfoList):
+ print "APK info lists of different length!"
+ return False
+
+ for sourceEntryInfo in sourceInfoList:
+ for destinationEntryInfo in list(destinationInfoList):
+ if sourceEntryInfo.filename == destinationEntryInfo.filename:
+ sourceEntry = sourceZip.open(sourceEntryInfo, 'r')
+ destinationEntry = destinationZip.open(destinationEntryInfo, 'r')
+
+ if self.compareFiles(sourceEntry, destinationEntry) != True:
+ print "APK entry %s does not match %s!" % (sourceEntryInfo.filename, destinationEntryInfo.filename)
+ return False
+
+ destinationInfoList.remove(destinationEntryInfo)
+ break
+
+ return True
+
+ def compareFiles(self, sourceFile, destinationFile):
+ sourceChunk = sourceFile.read(1024)
+ destinationChunk = destinationFile.read(1024)
+
+ while sourceChunk != "" or destinationChunk != "":
+ if sourceChunk != destinationChunk:
+ return False
+
+ sourceChunk = sourceFile.read(1024)
+ destinationChunk = destinationFile.read(1024)
+
+ return True
+
+if __name__ == '__main__':
+ if len(sys.argv) != 3:
+ print "Usage: apkdiff "
+ sys.exit(1)
+
+ ApkDiff().compare(sys.argv[1], sys.argv[2])
diff --git a/assets/emoji-nature.png b/assets/emoji-nature.png
deleted file mode 100644
index 695e8e99711..00000000000
Binary files a/assets/emoji-nature.png and /dev/null differ
diff --git a/assets/emoji-objects.png b/assets/emoji-objects.png
deleted file mode 100644
index b3b1fe5e206..00000000000
Binary files a/assets/emoji-objects.png and /dev/null differ
diff --git a/assets/emoji-people.png b/assets/emoji-people.png
deleted file mode 100644
index 7239a83347e..00000000000
Binary files a/assets/emoji-people.png and /dev/null differ
diff --git a/assets/emoji-places.png b/assets/emoji-places.png
deleted file mode 100644
index b1dd5365c40..00000000000
Binary files a/assets/emoji-places.png and /dev/null differ
diff --git a/assets/emoji-symbol.png b/assets/emoji-symbol.png
deleted file mode 100644
index 4d9b917afc8..00000000000
Binary files a/assets/emoji-symbol.png and /dev/null differ
diff --git a/assets/emoji/Activity.png b/assets/emoji/Activity.png
new file mode 100644
index 00000000000..2558066d250
Binary files /dev/null and b/assets/emoji/Activity.png differ
diff --git a/assets/emoji/Flags.png b/assets/emoji/Flags.png
new file mode 100644
index 00000000000..a8814899b7d
Binary files /dev/null and b/assets/emoji/Flags.png differ
diff --git a/assets/emoji/Foods.png b/assets/emoji/Foods.png
new file mode 100644
index 00000000000..18961ecbd48
Binary files /dev/null and b/assets/emoji/Foods.png differ
diff --git a/assets/emoji/Nature.png b/assets/emoji/Nature.png
new file mode 100644
index 00000000000..6e42b042776
Binary files /dev/null and b/assets/emoji/Nature.png differ
diff --git a/assets/emoji/Objects.png b/assets/emoji/Objects.png
new file mode 100644
index 00000000000..c6fac145f90
Binary files /dev/null and b/assets/emoji/Objects.png differ
diff --git a/assets/emoji/People.png b/assets/emoji/People.png
new file mode 100644
index 00000000000..e8587df305b
Binary files /dev/null and b/assets/emoji/People.png differ
diff --git a/assets/emoji/Places.png b/assets/emoji/Places.png
new file mode 100644
index 00000000000..ae0a72ee464
Binary files /dev/null and b/assets/emoji/Places.png differ
diff --git a/assets/emoji/Symbols.png b/assets/emoji/Symbols.png
new file mode 100644
index 00000000000..786d2d55202
Binary files /dev/null and b/assets/emoji/Symbols.png differ
diff --git a/assets/stickers/animals/anteater.png b/assets/stickers/animals/anteater.png
new file mode 100644
index 00000000000..ca798a852fd
Binary files /dev/null and b/assets/stickers/animals/anteater.png differ
diff --git a/assets/stickers/animals/bat.png b/assets/stickers/animals/bat.png
new file mode 100644
index 00000000000..27a586a8476
Binary files /dev/null and b/assets/stickers/animals/bat.png differ
diff --git a/assets/stickers/animals/beetle.png b/assets/stickers/animals/beetle.png
new file mode 100644
index 00000000000..ee58fb14f92
Binary files /dev/null and b/assets/stickers/animals/beetle.png differ
diff --git a/assets/stickers/animals/bulldog.png b/assets/stickers/animals/bulldog.png
new file mode 100644
index 00000000000..b9fc34307d6
Binary files /dev/null and b/assets/stickers/animals/bulldog.png differ
diff --git a/assets/stickers/animals/butterfly.png b/assets/stickers/animals/butterfly.png
new file mode 100644
index 00000000000..467927a2338
Binary files /dev/null and b/assets/stickers/animals/butterfly.png differ
diff --git a/assets/stickers/animals/camel.png b/assets/stickers/animals/camel.png
new file mode 100644
index 00000000000..1026c7044b4
Binary files /dev/null and b/assets/stickers/animals/camel.png differ
diff --git a/assets/stickers/animals/cat.png b/assets/stickers/animals/cat.png
new file mode 100644
index 00000000000..a2777120822
Binary files /dev/null and b/assets/stickers/animals/cat.png differ
diff --git a/assets/stickers/animals/chameleon.png b/assets/stickers/animals/chameleon.png
new file mode 100644
index 00000000000..45a16a389ee
Binary files /dev/null and b/assets/stickers/animals/chameleon.png differ
diff --git a/assets/stickers/animals/clown-fish.png b/assets/stickers/animals/clown-fish.png
new file mode 100644
index 00000000000..836a7a72603
Binary files /dev/null and b/assets/stickers/animals/clown-fish.png differ
diff --git a/assets/stickers/animals/cobra.png b/assets/stickers/animals/cobra.png
new file mode 100644
index 00000000000..56f54d0e4fa
Binary files /dev/null and b/assets/stickers/animals/cobra.png differ
diff --git a/assets/stickers/animals/cow.png b/assets/stickers/animals/cow.png
new file mode 100644
index 00000000000..dbb128df8e1
Binary files /dev/null and b/assets/stickers/animals/cow.png differ
diff --git a/assets/stickers/animals/crab.png b/assets/stickers/animals/crab.png
new file mode 100644
index 00000000000..d9b69dc6de3
Binary files /dev/null and b/assets/stickers/animals/crab.png differ
diff --git a/assets/stickers/animals/crocodile.png b/assets/stickers/animals/crocodile.png
new file mode 100644
index 00000000000..ad9f2f8b0fe
Binary files /dev/null and b/assets/stickers/animals/crocodile.png differ
diff --git a/assets/stickers/animals/duck.png b/assets/stickers/animals/duck.png
new file mode 100644
index 00000000000..ad987a53c1d
Binary files /dev/null and b/assets/stickers/animals/duck.png differ
diff --git a/assets/stickers/animals/elephant.png b/assets/stickers/animals/elephant.png
new file mode 100644
index 00000000000..38e9fd23684
Binary files /dev/null and b/assets/stickers/animals/elephant.png differ
diff --git a/assets/stickers/animals/frog.png b/assets/stickers/animals/frog.png
new file mode 100644
index 00000000000..f9631266e88
Binary files /dev/null and b/assets/stickers/animals/frog.png differ
diff --git a/assets/stickers/animals/giraffe.png b/assets/stickers/animals/giraffe.png
new file mode 100644
index 00000000000..9b183015451
Binary files /dev/null and b/assets/stickers/animals/giraffe.png differ
diff --git a/assets/stickers/animals/hen.png b/assets/stickers/animals/hen.png
new file mode 100644
index 00000000000..f875bb1bf35
Binary files /dev/null and b/assets/stickers/animals/hen.png differ
diff --git a/assets/stickers/animals/hippopotamus.png b/assets/stickers/animals/hippopotamus.png
new file mode 100644
index 00000000000..04782f93621
Binary files /dev/null and b/assets/stickers/animals/hippopotamus.png differ
diff --git a/assets/stickers/animals/kangaroo.png b/assets/stickers/animals/kangaroo.png
new file mode 100644
index 00000000000..b9c60b1ce63
Binary files /dev/null and b/assets/stickers/animals/kangaroo.png differ
diff --git a/assets/stickers/animals/lion.png b/assets/stickers/animals/lion.png
new file mode 100644
index 00000000000..0c73c676a9d
Binary files /dev/null and b/assets/stickers/animals/lion.png differ
diff --git a/assets/stickers/animals/llama.png b/assets/stickers/animals/llama.png
new file mode 100644
index 00000000000..43945dc3d1d
Binary files /dev/null and b/assets/stickers/animals/llama.png differ
diff --git a/assets/stickers/animals/macaw.png b/assets/stickers/animals/macaw.png
new file mode 100644
index 00000000000..4c7c10668d1
Binary files /dev/null and b/assets/stickers/animals/macaw.png differ
diff --git a/assets/stickers/animals/monkey.png b/assets/stickers/animals/monkey.png
new file mode 100644
index 00000000000..50248cd7f90
Binary files /dev/null and b/assets/stickers/animals/monkey.png differ
diff --git a/assets/stickers/animals/moose.png b/assets/stickers/animals/moose.png
new file mode 100644
index 00000000000..29f8fe5cd54
Binary files /dev/null and b/assets/stickers/animals/moose.png differ
diff --git a/assets/stickers/animals/mouse.png b/assets/stickers/animals/mouse.png
new file mode 100644
index 00000000000..c15080a4434
Binary files /dev/null and b/assets/stickers/animals/mouse.png differ
diff --git a/assets/stickers/animals/octopus.png b/assets/stickers/animals/octopus.png
new file mode 100644
index 00000000000..0aa5c457c36
Binary files /dev/null and b/assets/stickers/animals/octopus.png differ
diff --git a/assets/stickers/animals/ostrich.png b/assets/stickers/animals/ostrich.png
new file mode 100644
index 00000000000..f9fd66c2c3b
Binary files /dev/null and b/assets/stickers/animals/ostrich.png differ
diff --git a/assets/stickers/animals/owl.png b/assets/stickers/animals/owl.png
new file mode 100644
index 00000000000..bcaf9a6a96b
Binary files /dev/null and b/assets/stickers/animals/owl.png differ
diff --git a/assets/stickers/animals/panda.png b/assets/stickers/animals/panda.png
new file mode 100644
index 00000000000..80ad77836bd
Binary files /dev/null and b/assets/stickers/animals/panda.png differ
diff --git a/assets/stickers/animals/pelican.png b/assets/stickers/animals/pelican.png
new file mode 100644
index 00000000000..b04d90cda3b
Binary files /dev/null and b/assets/stickers/animals/pelican.png differ
diff --git a/assets/stickers/animals/penguin.png b/assets/stickers/animals/penguin.png
new file mode 100644
index 00000000000..7a730d11192
Binary files /dev/null and b/assets/stickers/animals/penguin.png differ
diff --git a/assets/stickers/animals/pig.png b/assets/stickers/animals/pig.png
new file mode 100644
index 00000000000..181da2e2d6b
Binary files /dev/null and b/assets/stickers/animals/pig.png differ
diff --git a/assets/stickers/animals/rabbit.png b/assets/stickers/animals/rabbit.png
new file mode 100644
index 00000000000..7c45ebdd038
Binary files /dev/null and b/assets/stickers/animals/rabbit.png differ
diff --git a/assets/stickers/animals/racoon.png b/assets/stickers/animals/racoon.png
new file mode 100644
index 00000000000..80183ce2687
Binary files /dev/null and b/assets/stickers/animals/racoon.png differ
diff --git a/assets/stickers/animals/ray.png b/assets/stickers/animals/ray.png
new file mode 100644
index 00000000000..3f280ab231f
Binary files /dev/null and b/assets/stickers/animals/ray.png differ
diff --git a/assets/stickers/animals/rhinoceros.png b/assets/stickers/animals/rhinoceros.png
new file mode 100644
index 00000000000..bee18d6a23a
Binary files /dev/null and b/assets/stickers/animals/rhinoceros.png differ
diff --git a/assets/stickers/animals/sea-cow.png b/assets/stickers/animals/sea-cow.png
new file mode 100644
index 00000000000..ad0c4ff109e
Binary files /dev/null and b/assets/stickers/animals/sea-cow.png differ
diff --git a/assets/stickers/animals/shark.png b/assets/stickers/animals/shark.png
new file mode 100644
index 00000000000..db300fbaae0
Binary files /dev/null and b/assets/stickers/animals/shark.png differ
diff --git a/assets/stickers/animals/sheep.png b/assets/stickers/animals/sheep.png
new file mode 100644
index 00000000000..2799792d891
Binary files /dev/null and b/assets/stickers/animals/sheep.png differ
diff --git a/assets/stickers/animals/siberian-husky.png b/assets/stickers/animals/siberian-husky.png
new file mode 100644
index 00000000000..21e619bca43
Binary files /dev/null and b/assets/stickers/animals/siberian-husky.png differ
diff --git a/assets/stickers/animals/sloth.png b/assets/stickers/animals/sloth.png
new file mode 100644
index 00000000000..b22f3c73831
Binary files /dev/null and b/assets/stickers/animals/sloth.png differ
diff --git a/assets/stickers/animals/snake.png b/assets/stickers/animals/snake.png
new file mode 100644
index 00000000000..ab2bffafa21
Binary files /dev/null and b/assets/stickers/animals/snake.png differ
diff --git a/assets/stickers/animals/spider.png b/assets/stickers/animals/spider.png
new file mode 100644
index 00000000000..36843a66668
Binary files /dev/null and b/assets/stickers/animals/spider.png differ
diff --git a/assets/stickers/animals/squirrel.png b/assets/stickers/animals/squirrel.png
new file mode 100644
index 00000000000..bd75170e22d
Binary files /dev/null and b/assets/stickers/animals/squirrel.png differ
diff --git a/assets/stickers/animals/swan.png b/assets/stickers/animals/swan.png
new file mode 100644
index 00000000000..832449151f0
Binary files /dev/null and b/assets/stickers/animals/swan.png differ
diff --git a/assets/stickers/animals/tiger.png b/assets/stickers/animals/tiger.png
new file mode 100644
index 00000000000..0ff4f9c8943
Binary files /dev/null and b/assets/stickers/animals/tiger.png differ
diff --git a/assets/stickers/animals/toucan.png b/assets/stickers/animals/toucan.png
new file mode 100644
index 00000000000..0c4986722fa
Binary files /dev/null and b/assets/stickers/animals/toucan.png differ
diff --git a/assets/stickers/animals/turtle.png b/assets/stickers/animals/turtle.png
new file mode 100644
index 00000000000..cca4b7d1384
Binary files /dev/null and b/assets/stickers/animals/turtle.png differ
diff --git a/assets/stickers/animals/whale.png b/assets/stickers/animals/whale.png
new file mode 100644
index 00000000000..ff0c3227cbb
Binary files /dev/null and b/assets/stickers/animals/whale.png differ
diff --git a/assets/stickers/clothes/backpack.png b/assets/stickers/clothes/backpack.png
new file mode 100644
index 00000000000..da551cc24f4
Binary files /dev/null and b/assets/stickers/clothes/backpack.png differ
diff --git a/assets/stickers/clothes/bathrobe.png b/assets/stickers/clothes/bathrobe.png
new file mode 100644
index 00000000000..c0ed9a76caa
Binary files /dev/null and b/assets/stickers/clothes/bathrobe.png differ
diff --git a/assets/stickers/clothes/belt.png b/assets/stickers/clothes/belt.png
new file mode 100644
index 00000000000..0c8724a113f
Binary files /dev/null and b/assets/stickers/clothes/belt.png differ
diff --git a/assets/stickers/clothes/boot.png b/assets/stickers/clothes/boot.png
new file mode 100644
index 00000000000..2bbc116e627
Binary files /dev/null and b/assets/stickers/clothes/boot.png differ
diff --git a/assets/stickers/clothes/bow-tie.png b/assets/stickers/clothes/bow-tie.png
new file mode 100644
index 00000000000..5cb39bf95ed
Binary files /dev/null and b/assets/stickers/clothes/bow-tie.png differ
diff --git a/assets/stickers/clothes/bowler-hat.png b/assets/stickers/clothes/bowler-hat.png
new file mode 100644
index 00000000000..05f9675f560
Binary files /dev/null and b/assets/stickers/clothes/bowler-hat.png differ
diff --git a/assets/stickers/clothes/boxers.png b/assets/stickers/clothes/boxers.png
new file mode 100644
index 00000000000..38eba6fbf2c
Binary files /dev/null and b/assets/stickers/clothes/boxers.png differ
diff --git a/assets/stickers/clothes/bra.png b/assets/stickers/clothes/bra.png
new file mode 100644
index 00000000000..6e98519f600
Binary files /dev/null and b/assets/stickers/clothes/bra.png differ
diff --git a/assets/stickers/clothes/cap.png b/assets/stickers/clothes/cap.png
new file mode 100644
index 00000000000..c1abd23ed6c
Binary files /dev/null and b/assets/stickers/clothes/cap.png differ
diff --git a/assets/stickers/clothes/dress-1.png b/assets/stickers/clothes/dress-1.png
new file mode 100644
index 00000000000..67e961b94f2
Binary files /dev/null and b/assets/stickers/clothes/dress-1.png differ
diff --git a/assets/stickers/clothes/dress-2.png b/assets/stickers/clothes/dress-2.png
new file mode 100644
index 00000000000..af94d5f40c1
Binary files /dev/null and b/assets/stickers/clothes/dress-2.png differ
diff --git a/assets/stickers/clothes/dress-3.png b/assets/stickers/clothes/dress-3.png
new file mode 100644
index 00000000000..74ff0cb9a56
Binary files /dev/null and b/assets/stickers/clothes/dress-3.png differ
diff --git a/assets/stickers/clothes/dress.png b/assets/stickers/clothes/dress.png
new file mode 100644
index 00000000000..73a85cc10a2
Binary files /dev/null and b/assets/stickers/clothes/dress.png differ
diff --git a/assets/stickers/clothes/glasses.png b/assets/stickers/clothes/glasses.png
new file mode 100644
index 00000000000..5de0e5bf1d7
Binary files /dev/null and b/assets/stickers/clothes/glasses.png differ
diff --git a/assets/stickers/clothes/hat.png b/assets/stickers/clothes/hat.png
new file mode 100644
index 00000000000..f383ab14298
Binary files /dev/null and b/assets/stickers/clothes/hat.png differ
diff --git a/assets/stickers/clothes/high-heel.png b/assets/stickers/clothes/high-heel.png
new file mode 100644
index 00000000000..b488e7cc1a6
Binary files /dev/null and b/assets/stickers/clothes/high-heel.png differ
diff --git a/assets/stickers/clothes/jacket-1.png b/assets/stickers/clothes/jacket-1.png
new file mode 100644
index 00000000000..0d18f1b9921
Binary files /dev/null and b/assets/stickers/clothes/jacket-1.png differ
diff --git a/assets/stickers/clothes/jacket-2.png b/assets/stickers/clothes/jacket-2.png
new file mode 100644
index 00000000000..7b87ef8b1fa
Binary files /dev/null and b/assets/stickers/clothes/jacket-2.png differ
diff --git a/assets/stickers/clothes/jacket-3.png b/assets/stickers/clothes/jacket-3.png
new file mode 100644
index 00000000000..fc9229ab47b
Binary files /dev/null and b/assets/stickers/clothes/jacket-3.png differ
diff --git a/assets/stickers/clothes/jacket-4.png b/assets/stickers/clothes/jacket-4.png
new file mode 100644
index 00000000000..fd8fa1df1f8
Binary files /dev/null and b/assets/stickers/clothes/jacket-4.png differ
diff --git a/assets/stickers/clothes/jacket.png b/assets/stickers/clothes/jacket.png
new file mode 100644
index 00000000000..952e1cc03eb
Binary files /dev/null and b/assets/stickers/clothes/jacket.png differ
diff --git a/assets/stickers/clothes/jeans.png b/assets/stickers/clothes/jeans.png
new file mode 100644
index 00000000000..f6dc108d2c5
Binary files /dev/null and b/assets/stickers/clothes/jeans.png differ
diff --git a/assets/stickers/clothes/lingerie.png b/assets/stickers/clothes/lingerie.png
new file mode 100644
index 00000000000..5c569eeaec6
Binary files /dev/null and b/assets/stickers/clothes/lingerie.png differ
diff --git a/assets/stickers/clothes/overall.png b/assets/stickers/clothes/overall.png
new file mode 100644
index 00000000000..50afb351082
Binary files /dev/null and b/assets/stickers/clothes/overall.png differ
diff --git a/assets/stickers/clothes/polo.png b/assets/stickers/clothes/polo.png
new file mode 100644
index 00000000000..d61d39c05cd
Binary files /dev/null and b/assets/stickers/clothes/polo.png differ
diff --git a/assets/stickers/clothes/pullover.png b/assets/stickers/clothes/pullover.png
new file mode 100644
index 00000000000..fa0763bde85
Binary files /dev/null and b/assets/stickers/clothes/pullover.png differ
diff --git a/assets/stickers/clothes/purse-1.png b/assets/stickers/clothes/purse-1.png
new file mode 100644
index 00000000000..f0c8e715836
Binary files /dev/null and b/assets/stickers/clothes/purse-1.png differ
diff --git a/assets/stickers/clothes/purse.png b/assets/stickers/clothes/purse.png
new file mode 100644
index 00000000000..1e80ded3d6e
Binary files /dev/null and b/assets/stickers/clothes/purse.png differ
diff --git a/assets/stickers/clothes/scarf.png b/assets/stickers/clothes/scarf.png
new file mode 100644
index 00000000000..6502e06b670
Binary files /dev/null and b/assets/stickers/clothes/scarf.png differ
diff --git a/assets/stickers/clothes/shirt-1.png b/assets/stickers/clothes/shirt-1.png
new file mode 100644
index 00000000000..a161e734910
Binary files /dev/null and b/assets/stickers/clothes/shirt-1.png differ
diff --git a/assets/stickers/clothes/shirt-2.png b/assets/stickers/clothes/shirt-2.png
new file mode 100644
index 00000000000..ee7761926d1
Binary files /dev/null and b/assets/stickers/clothes/shirt-2.png differ
diff --git a/assets/stickers/clothes/shirt.png b/assets/stickers/clothes/shirt.png
new file mode 100644
index 00000000000..834d74ccbf9
Binary files /dev/null and b/assets/stickers/clothes/shirt.png differ
diff --git a/assets/stickers/clothes/shoe.png b/assets/stickers/clothes/shoe.png
new file mode 100644
index 00000000000..e2470e3573b
Binary files /dev/null and b/assets/stickers/clothes/shoe.png differ
diff --git a/assets/stickers/clothes/shorts.png b/assets/stickers/clothes/shorts.png
new file mode 100644
index 00000000000..a28db713234
Binary files /dev/null and b/assets/stickers/clothes/shorts.png differ
diff --git a/assets/stickers/clothes/skirt.png b/assets/stickers/clothes/skirt.png
new file mode 100644
index 00000000000..f584573b752
Binary files /dev/null and b/assets/stickers/clothes/skirt.png differ
diff --git a/assets/stickers/clothes/sleeveless.png b/assets/stickers/clothes/sleeveless.png
new file mode 100644
index 00000000000..c7f8eed064f
Binary files /dev/null and b/assets/stickers/clothes/sleeveless.png differ
diff --git a/assets/stickers/clothes/slippers.png b/assets/stickers/clothes/slippers.png
new file mode 100644
index 00000000000..d1856025b93
Binary files /dev/null and b/assets/stickers/clothes/slippers.png differ
diff --git a/assets/stickers/clothes/sneakers-1.png b/assets/stickers/clothes/sneakers-1.png
new file mode 100644
index 00000000000..aec9611d099
Binary files /dev/null and b/assets/stickers/clothes/sneakers-1.png differ
diff --git a/assets/stickers/clothes/sneakers.png b/assets/stickers/clothes/sneakers.png
new file mode 100644
index 00000000000..7819f1015d2
Binary files /dev/null and b/assets/stickers/clothes/sneakers.png differ
diff --git a/assets/stickers/clothes/socks.png b/assets/stickers/clothes/socks.png
new file mode 100644
index 00000000000..115efb4dac7
Binary files /dev/null and b/assets/stickers/clothes/socks.png differ
diff --git a/assets/stickers/clothes/suitcase.png b/assets/stickers/clothes/suitcase.png
new file mode 100644
index 00000000000..22f1ec57ed9
Binary files /dev/null and b/assets/stickers/clothes/suitcase.png differ
diff --git a/assets/stickers/clothes/sweatshirt.png b/assets/stickers/clothes/sweatshirt.png
new file mode 100644
index 00000000000..1f0d71816cb
Binary files /dev/null and b/assets/stickers/clothes/sweatshirt.png differ
diff --git a/assets/stickers/clothes/swimsuit-1.png b/assets/stickers/clothes/swimsuit-1.png
new file mode 100644
index 00000000000..3ca05d0329e
Binary files /dev/null and b/assets/stickers/clothes/swimsuit-1.png differ
diff --git a/assets/stickers/clothes/swimsuit.png b/assets/stickers/clothes/swimsuit.png
new file mode 100644
index 00000000000..e0b3207dc6f
Binary files /dev/null and b/assets/stickers/clothes/swimsuit.png differ
diff --git a/assets/stickers/clothes/tie.png b/assets/stickers/clothes/tie.png
new file mode 100644
index 00000000000..a881563c8f8
Binary files /dev/null and b/assets/stickers/clothes/tie.png differ
diff --git a/assets/stickers/clothes/trench-coat.png b/assets/stickers/clothes/trench-coat.png
new file mode 100644
index 00000000000..9d5a92b0ecd
Binary files /dev/null and b/assets/stickers/clothes/trench-coat.png differ
diff --git a/assets/stickers/clothes/trousers.png b/assets/stickers/clothes/trousers.png
new file mode 100644
index 00000000000..53e9d478849
Binary files /dev/null and b/assets/stickers/clothes/trousers.png differ
diff --git a/assets/stickers/clothes/underpants.png b/assets/stickers/clothes/underpants.png
new file mode 100644
index 00000000000..e381a692a07
Binary files /dev/null and b/assets/stickers/clothes/underpants.png differ
diff --git a/assets/stickers/clothes/vest.png b/assets/stickers/clothes/vest.png
new file mode 100644
index 00000000000..2a55a3dd0b7
Binary files /dev/null and b/assets/stickers/clothes/vest.png differ
diff --git a/assets/stickers/clothes/winter-hat.png b/assets/stickers/clothes/winter-hat.png
new file mode 100644
index 00000000000..202a4383c07
Binary files /dev/null and b/assets/stickers/clothes/winter-hat.png differ
diff --git a/assets/stickers/emoticons/angry-1.png b/assets/stickers/emoticons/angry-1.png
new file mode 100644
index 00000000000..a881db9bee1
Binary files /dev/null and b/assets/stickers/emoticons/angry-1.png differ
diff --git a/assets/stickers/emoticons/angry.png b/assets/stickers/emoticons/angry.png
new file mode 100644
index 00000000000..d78a86d3bc2
Binary files /dev/null and b/assets/stickers/emoticons/angry.png differ
diff --git a/assets/stickers/emoticons/bored-1.png b/assets/stickers/emoticons/bored-1.png
new file mode 100644
index 00000000000..7655c2ba67e
Binary files /dev/null and b/assets/stickers/emoticons/bored-1.png differ
diff --git a/assets/stickers/emoticons/bored-2.png b/assets/stickers/emoticons/bored-2.png
new file mode 100644
index 00000000000..cbd57695679
Binary files /dev/null and b/assets/stickers/emoticons/bored-2.png differ
diff --git a/assets/stickers/emoticons/bored.png b/assets/stickers/emoticons/bored.png
new file mode 100644
index 00000000000..1e56e6ba2ed
Binary files /dev/null and b/assets/stickers/emoticons/bored.png differ
diff --git a/assets/stickers/emoticons/confused-1.png b/assets/stickers/emoticons/confused-1.png
new file mode 100644
index 00000000000..5f81f7e8eb3
Binary files /dev/null and b/assets/stickers/emoticons/confused-1.png differ
diff --git a/assets/stickers/emoticons/confused.png b/assets/stickers/emoticons/confused.png
new file mode 100644
index 00000000000..2306f5c406a
Binary files /dev/null and b/assets/stickers/emoticons/confused.png differ
diff --git a/assets/stickers/emoticons/crying-1.png b/assets/stickers/emoticons/crying-1.png
new file mode 100644
index 00000000000..b63927db8c9
Binary files /dev/null and b/assets/stickers/emoticons/crying-1.png differ
diff --git a/assets/stickers/emoticons/crying.png b/assets/stickers/emoticons/crying.png
new file mode 100644
index 00000000000..f8af6376102
Binary files /dev/null and b/assets/stickers/emoticons/crying.png differ
diff --git a/assets/stickers/emoticons/embarrassed.png b/assets/stickers/emoticons/embarrassed.png
new file mode 100644
index 00000000000..32333eb8f8c
Binary files /dev/null and b/assets/stickers/emoticons/embarrassed.png differ
diff --git a/assets/stickers/emoticons/emoticons.png b/assets/stickers/emoticons/emoticons.png
new file mode 100644
index 00000000000..c40f0b8a370
Binary files /dev/null and b/assets/stickers/emoticons/emoticons.png differ
diff --git a/assets/stickers/emoticons/happy-1.png b/assets/stickers/emoticons/happy-1.png
new file mode 100644
index 00000000000..32bedb03234
Binary files /dev/null and b/assets/stickers/emoticons/happy-1.png differ
diff --git a/assets/stickers/emoticons/happy-2.png b/assets/stickers/emoticons/happy-2.png
new file mode 100644
index 00000000000..5dafe9271fc
Binary files /dev/null and b/assets/stickers/emoticons/happy-2.png differ
diff --git a/assets/stickers/emoticons/happy-3.png b/assets/stickers/emoticons/happy-3.png
new file mode 100644
index 00000000000..65ef3d3cffa
Binary files /dev/null and b/assets/stickers/emoticons/happy-3.png differ
diff --git a/assets/stickers/emoticons/happy-4.png b/assets/stickers/emoticons/happy-4.png
new file mode 100644
index 00000000000..35f14c9a7d3
Binary files /dev/null and b/assets/stickers/emoticons/happy-4.png differ
diff --git a/assets/stickers/emoticons/happy.png b/assets/stickers/emoticons/happy.png
new file mode 100644
index 00000000000..090fe168097
Binary files /dev/null and b/assets/stickers/emoticons/happy.png differ
diff --git a/assets/stickers/emoticons/ill.png b/assets/stickers/emoticons/ill.png
new file mode 100644
index 00000000000..9c12470350f
Binary files /dev/null and b/assets/stickers/emoticons/ill.png differ
diff --git a/assets/stickers/emoticons/in-love.png b/assets/stickers/emoticons/in-love.png
new file mode 100644
index 00000000000..256a8fbc138
Binary files /dev/null and b/assets/stickers/emoticons/in-love.png differ
diff --git a/assets/stickers/emoticons/kissing.png b/assets/stickers/emoticons/kissing.png
new file mode 100644
index 00000000000..2b2f7da188b
Binary files /dev/null and b/assets/stickers/emoticons/kissing.png differ
diff --git a/assets/stickers/emoticons/mad.png b/assets/stickers/emoticons/mad.png
new file mode 100644
index 00000000000..cb0dcaa7fd8
Binary files /dev/null and b/assets/stickers/emoticons/mad.png differ
diff --git a/assets/stickers/emoticons/nerd.png b/assets/stickers/emoticons/nerd.png
new file mode 100644
index 00000000000..1a9f8fcbb78
Binary files /dev/null and b/assets/stickers/emoticons/nerd.png differ
diff --git a/assets/stickers/emoticons/ninja.png b/assets/stickers/emoticons/ninja.png
new file mode 100644
index 00000000000..d9ce9b8c698
Binary files /dev/null and b/assets/stickers/emoticons/ninja.png differ
diff --git a/assets/stickers/emoticons/quiet.png b/assets/stickers/emoticons/quiet.png
new file mode 100644
index 00000000000..7de2ea4f9d5
Binary files /dev/null and b/assets/stickers/emoticons/quiet.png differ
diff --git a/assets/stickers/emoticons/sad.png b/assets/stickers/emoticons/sad.png
new file mode 100644
index 00000000000..af670a5df47
Binary files /dev/null and b/assets/stickers/emoticons/sad.png differ
diff --git a/assets/stickers/emoticons/secret.png b/assets/stickers/emoticons/secret.png
new file mode 100644
index 00000000000..60713557443
Binary files /dev/null and b/assets/stickers/emoticons/secret.png differ
diff --git a/assets/stickers/emoticons/smart.png b/assets/stickers/emoticons/smart.png
new file mode 100644
index 00000000000..e607932aac8
Binary files /dev/null and b/assets/stickers/emoticons/smart.png differ
diff --git a/assets/stickers/emoticons/smile.png b/assets/stickers/emoticons/smile.png
new file mode 100644
index 00000000000..7deeb0c2487
Binary files /dev/null and b/assets/stickers/emoticons/smile.png differ
diff --git a/assets/stickers/emoticons/smiling.png b/assets/stickers/emoticons/smiling.png
new file mode 100644
index 00000000000..0d3e4138096
Binary files /dev/null and b/assets/stickers/emoticons/smiling.png differ
diff --git a/assets/stickers/emoticons/surprised-1.png b/assets/stickers/emoticons/surprised-1.png
new file mode 100644
index 00000000000..1b8da1e3581
Binary files /dev/null and b/assets/stickers/emoticons/surprised-1.png differ
diff --git a/assets/stickers/emoticons/surprised.png b/assets/stickers/emoticons/surprised.png
new file mode 100644
index 00000000000..554201279f2
Binary files /dev/null and b/assets/stickers/emoticons/surprised.png differ
diff --git a/assets/stickers/emoticons/suspicious-1.png b/assets/stickers/emoticons/suspicious-1.png
new file mode 100644
index 00000000000..d9b4aab2631
Binary files /dev/null and b/assets/stickers/emoticons/suspicious-1.png differ
diff --git a/assets/stickers/emoticons/suspicious.png b/assets/stickers/emoticons/suspicious.png
new file mode 100644
index 00000000000..3d33e5bc2b9
Binary files /dev/null and b/assets/stickers/emoticons/suspicious.png differ
diff --git a/assets/stickers/emoticons/tongue-out-1.png b/assets/stickers/emoticons/tongue-out-1.png
new file mode 100644
index 00000000000..98341abad89
Binary files /dev/null and b/assets/stickers/emoticons/tongue-out-1.png differ
diff --git a/assets/stickers/emoticons/tongue-out.png b/assets/stickers/emoticons/tongue-out.png
new file mode 100644
index 00000000000..62616f0e406
Binary files /dev/null and b/assets/stickers/emoticons/tongue-out.png differ
diff --git a/assets/stickers/emoticons/unhappy.png b/assets/stickers/emoticons/unhappy.png
new file mode 100644
index 00000000000..29e0b19d676
Binary files /dev/null and b/assets/stickers/emoticons/unhappy.png differ
diff --git a/assets/stickers/emoticons/wink.png b/assets/stickers/emoticons/wink.png
new file mode 100644
index 00000000000..9902bd8e8ea
Binary files /dev/null and b/assets/stickers/emoticons/wink.png differ
diff --git a/assets/stickers/food/apple.png b/assets/stickers/food/apple.png
new file mode 100644
index 00000000000..c0c87ad7a39
Binary files /dev/null and b/assets/stickers/food/apple.png differ
diff --git a/assets/stickers/food/artichoke.png b/assets/stickers/food/artichoke.png
new file mode 100644
index 00000000000..618b2d57447
Binary files /dev/null and b/assets/stickers/food/artichoke.png differ
diff --git a/assets/stickers/food/aubergine.png b/assets/stickers/food/aubergine.png
new file mode 100644
index 00000000000..0c89cbe2687
Binary files /dev/null and b/assets/stickers/food/aubergine.png differ
diff --git a/assets/stickers/food/avocado.png b/assets/stickers/food/avocado.png
new file mode 100644
index 00000000000..8183cfdf2c6
Binary files /dev/null and b/assets/stickers/food/avocado.png differ
diff --git a/assets/stickers/food/bacon.png b/assets/stickers/food/bacon.png
new file mode 100644
index 00000000000..b727419969d
Binary files /dev/null and b/assets/stickers/food/bacon.png differ
diff --git a/assets/stickers/food/banana.png b/assets/stickers/food/banana.png
new file mode 100644
index 00000000000..78e87340c3f
Binary files /dev/null and b/assets/stickers/food/banana.png differ
diff --git a/assets/stickers/food/beans.png b/assets/stickers/food/beans.png
new file mode 100644
index 00000000000..7cfd0ef42ca
Binary files /dev/null and b/assets/stickers/food/beans.png differ
diff --git a/assets/stickers/food/bell-pepper.png b/assets/stickers/food/bell-pepper.png
new file mode 100644
index 00000000000..74e18b68cdf
Binary files /dev/null and b/assets/stickers/food/bell-pepper.png differ
diff --git a/assets/stickers/food/birthday-cake.png b/assets/stickers/food/birthday-cake.png
new file mode 100644
index 00000000000..fbb80c4e490
Binary files /dev/null and b/assets/stickers/food/birthday-cake.png differ
diff --git a/assets/stickers/food/biscuit.png b/assets/stickers/food/biscuit.png
new file mode 100644
index 00000000000..660dff4a1ac
Binary files /dev/null and b/assets/stickers/food/biscuit.png differ
diff --git a/assets/stickers/food/boiled-egg.png b/assets/stickers/food/boiled-egg.png
new file mode 100644
index 00000000000..fb4a1e867e4
Binary files /dev/null and b/assets/stickers/food/boiled-egg.png differ
diff --git a/assets/stickers/food/bread.png b/assets/stickers/food/bread.png
new file mode 100644
index 00000000000..ed19ee71023
Binary files /dev/null and b/assets/stickers/food/bread.png differ
diff --git a/assets/stickers/food/broccoli.png b/assets/stickers/food/broccoli.png
new file mode 100644
index 00000000000..9a13522ce2f
Binary files /dev/null and b/assets/stickers/food/broccoli.png differ
diff --git a/assets/stickers/food/brochette.png b/assets/stickers/food/brochette.png
new file mode 100644
index 00000000000..3658cbd7771
Binary files /dev/null and b/assets/stickers/food/brochette.png differ
diff --git a/assets/stickers/food/burger-1.png b/assets/stickers/food/burger-1.png
new file mode 100644
index 00000000000..3f7f3ff6621
Binary files /dev/null and b/assets/stickers/food/burger-1.png differ
diff --git a/assets/stickers/food/burger.png b/assets/stickers/food/burger.png
new file mode 100644
index 00000000000..203d336ffb8
Binary files /dev/null and b/assets/stickers/food/burger.png differ
diff --git a/assets/stickers/food/burrito.png b/assets/stickers/food/burrito.png
new file mode 100644
index 00000000000..3c3c3e5b080
Binary files /dev/null and b/assets/stickers/food/burrito.png differ
diff --git a/assets/stickers/food/cake.png b/assets/stickers/food/cake.png
new file mode 100644
index 00000000000..0d59a3e3cf2
Binary files /dev/null and b/assets/stickers/food/cake.png differ
diff --git a/assets/stickers/food/candy-cane.png b/assets/stickers/food/candy-cane.png
new file mode 100644
index 00000000000..3d8f048262d
Binary files /dev/null and b/assets/stickers/food/candy-cane.png differ
diff --git a/assets/stickers/food/candy.png b/assets/stickers/food/candy.png
new file mode 100644
index 00000000000..1fb7d708192
Binary files /dev/null and b/assets/stickers/food/candy.png differ
diff --git a/assets/stickers/food/carrot.png b/assets/stickers/food/carrot.png
new file mode 100644
index 00000000000..1ca46171611
Binary files /dev/null and b/assets/stickers/food/carrot.png differ
diff --git a/assets/stickers/food/cheese.png b/assets/stickers/food/cheese.png
new file mode 100644
index 00000000000..df545a670ad
Binary files /dev/null and b/assets/stickers/food/cheese.png differ
diff --git a/assets/stickers/food/cherry.png b/assets/stickers/food/cherry.png
new file mode 100644
index 00000000000..c1081f47a34
Binary files /dev/null and b/assets/stickers/food/cherry.png differ
diff --git a/assets/stickers/food/chicken-leg.png b/assets/stickers/food/chicken-leg.png
new file mode 100644
index 00000000000..044084cb37d
Binary files /dev/null and b/assets/stickers/food/chicken-leg.png differ
diff --git a/assets/stickers/food/chili-pepper.png b/assets/stickers/food/chili-pepper.png
new file mode 100644
index 00000000000..163271db49e
Binary files /dev/null and b/assets/stickers/food/chili-pepper.png differ
diff --git a/assets/stickers/food/chocolate.png b/assets/stickers/food/chocolate.png
new file mode 100644
index 00000000000..dd2a7f27f1c
Binary files /dev/null and b/assets/stickers/food/chocolate.png differ
diff --git a/assets/stickers/food/chorizo.png b/assets/stickers/food/chorizo.png
new file mode 100644
index 00000000000..fe524120a36
Binary files /dev/null and b/assets/stickers/food/chorizo.png differ
diff --git a/assets/stickers/food/corn.png b/assets/stickers/food/corn.png
new file mode 100644
index 00000000000..b1e5c32f492
Binary files /dev/null and b/assets/stickers/food/corn.png differ
diff --git a/assets/stickers/food/cotton-candy.png b/assets/stickers/food/cotton-candy.png
new file mode 100644
index 00000000000..1013eb2eeb1
Binary files /dev/null and b/assets/stickers/food/cotton-candy.png differ
diff --git a/assets/stickers/food/crab.png b/assets/stickers/food/crab.png
new file mode 100644
index 00000000000..1a1e2774255
Binary files /dev/null and b/assets/stickers/food/crab.png differ
diff --git a/assets/stickers/food/croissant.png b/assets/stickers/food/croissant.png
new file mode 100644
index 00000000000..0cc7ff36869
Binary files /dev/null and b/assets/stickers/food/croissant.png differ
diff --git a/assets/stickers/food/cupcake-1.png b/assets/stickers/food/cupcake-1.png
new file mode 100644
index 00000000000..26fc0ed2165
Binary files /dev/null and b/assets/stickers/food/cupcake-1.png differ
diff --git a/assets/stickers/food/cupcake.png b/assets/stickers/food/cupcake.png
new file mode 100644
index 00000000000..61b93ab6e08
Binary files /dev/null and b/assets/stickers/food/cupcake.png differ
diff --git a/assets/stickers/food/doner-kebab.png b/assets/stickers/food/doner-kebab.png
new file mode 100644
index 00000000000..47fc90d10eb
Binary files /dev/null and b/assets/stickers/food/doner-kebab.png differ
diff --git a/assets/stickers/food/donut.png b/assets/stickers/food/donut.png
new file mode 100644
index 00000000000..463b16438b1
Binary files /dev/null and b/assets/stickers/food/donut.png differ
diff --git a/assets/stickers/food/drink.png b/assets/stickers/food/drink.png
new file mode 100644
index 00000000000..269aad4de9e
Binary files /dev/null and b/assets/stickers/food/drink.png differ
diff --git a/assets/stickers/food/fish.png b/assets/stickers/food/fish.png
new file mode 100644
index 00000000000..754e1df4a53
Binary files /dev/null and b/assets/stickers/food/fish.png differ
diff --git a/assets/stickers/food/french-fries.png b/assets/stickers/food/french-fries.png
new file mode 100644
index 00000000000..f26bf8aa35e
Binary files /dev/null and b/assets/stickers/food/french-fries.png differ
diff --git a/assets/stickers/food/fried-egg.png b/assets/stickers/food/fried-egg.png
new file mode 100644
index 00000000000..ce6cd45cd29
Binary files /dev/null and b/assets/stickers/food/fried-egg.png differ
diff --git a/assets/stickers/food/garlic.png b/assets/stickers/food/garlic.png
new file mode 100644
index 00000000000..53a697ea0c4
Binary files /dev/null and b/assets/stickers/food/garlic.png differ
diff --git a/assets/stickers/food/gingerbread-man.png b/assets/stickers/food/gingerbread-man.png
new file mode 100644
index 00000000000..f3de236dcb7
Binary files /dev/null and b/assets/stickers/food/gingerbread-man.png differ
diff --git a/assets/stickers/food/grapes.png b/assets/stickers/food/grapes.png
new file mode 100644
index 00000000000..4b44de88333
Binary files /dev/null and b/assets/stickers/food/grapes.png differ
diff --git a/assets/stickers/food/honey.png b/assets/stickers/food/honey.png
new file mode 100644
index 00000000000..fcb5a88a65d
Binary files /dev/null and b/assets/stickers/food/honey.png differ
diff --git a/assets/stickers/food/hot-dog.png b/assets/stickers/food/hot-dog.png
new file mode 100644
index 00000000000..ac7a7c9c14d
Binary files /dev/null and b/assets/stickers/food/hot-dog.png differ
diff --git a/assets/stickers/food/ice-cream.png b/assets/stickers/food/ice-cream.png
new file mode 100644
index 00000000000..b7957676e11
Binary files /dev/null and b/assets/stickers/food/ice-cream.png differ
diff --git a/assets/stickers/food/jam.png b/assets/stickers/food/jam.png
new file mode 100644
index 00000000000..ec0ad544d8d
Binary files /dev/null and b/assets/stickers/food/jam.png differ
diff --git a/assets/stickers/food/jelly.png b/assets/stickers/food/jelly.png
new file mode 100644
index 00000000000..d8da5f5c0b6
Binary files /dev/null and b/assets/stickers/food/jelly.png differ
diff --git a/assets/stickers/food/ketchup.png b/assets/stickers/food/ketchup.png
new file mode 100644
index 00000000000..6918b393379
Binary files /dev/null and b/assets/stickers/food/ketchup.png differ
diff --git a/assets/stickers/food/kiwi.png b/assets/stickers/food/kiwi.png
new file mode 100644
index 00000000000..dd6e03bf781
Binary files /dev/null and b/assets/stickers/food/kiwi.png differ
diff --git a/assets/stickers/food/lemon.png b/assets/stickers/food/lemon.png
new file mode 100644
index 00000000000..c9a46827226
Binary files /dev/null and b/assets/stickers/food/lemon.png differ
diff --git a/assets/stickers/food/lettuce.png b/assets/stickers/food/lettuce.png
new file mode 100644
index 00000000000..0e98a66811b
Binary files /dev/null and b/assets/stickers/food/lettuce.png differ
diff --git a/assets/stickers/food/lobster.png b/assets/stickers/food/lobster.png
new file mode 100644
index 00000000000..e81ef920099
Binary files /dev/null and b/assets/stickers/food/lobster.png differ
diff --git a/assets/stickers/food/lollipop-1.png b/assets/stickers/food/lollipop-1.png
new file mode 100644
index 00000000000..0ac95d80ef3
Binary files /dev/null and b/assets/stickers/food/lollipop-1.png differ
diff --git a/assets/stickers/food/lollipop.png b/assets/stickers/food/lollipop.png
new file mode 100644
index 00000000000..6e80ca6b4a8
Binary files /dev/null and b/assets/stickers/food/lollipop.png differ
diff --git a/assets/stickers/food/macarons.png b/assets/stickers/food/macarons.png
new file mode 100644
index 00000000000..8235533ca04
Binary files /dev/null and b/assets/stickers/food/macarons.png differ
diff --git a/assets/stickers/food/muffin.png b/assets/stickers/food/muffin.png
new file mode 100644
index 00000000000..66c49b5d491
Binary files /dev/null and b/assets/stickers/food/muffin.png differ
diff --git a/assets/stickers/food/mushroom.png b/assets/stickers/food/mushroom.png
new file mode 100644
index 00000000000..787e88aaa3c
Binary files /dev/null and b/assets/stickers/food/mushroom.png differ
diff --git a/assets/stickers/food/mussel.png b/assets/stickers/food/mussel.png
new file mode 100644
index 00000000000..bfbe8fb3577
Binary files /dev/null and b/assets/stickers/food/mussel.png differ
diff --git a/assets/stickers/food/noodles.png b/assets/stickers/food/noodles.png
new file mode 100644
index 00000000000..e23b8b7498f
Binary files /dev/null and b/assets/stickers/food/noodles.png differ
diff --git a/assets/stickers/food/olive-oil.png b/assets/stickers/food/olive-oil.png
new file mode 100644
index 00000000000..e23608592c2
Binary files /dev/null and b/assets/stickers/food/olive-oil.png differ
diff --git a/assets/stickers/food/olives.png b/assets/stickers/food/olives.png
new file mode 100644
index 00000000000..10f4447149d
Binary files /dev/null and b/assets/stickers/food/olives.png differ
diff --git a/assets/stickers/food/onion-rings.png b/assets/stickers/food/onion-rings.png
new file mode 100644
index 00000000000..45e266c6e29
Binary files /dev/null and b/assets/stickers/food/onion-rings.png differ
diff --git a/assets/stickers/food/onion.png b/assets/stickers/food/onion.png
new file mode 100644
index 00000000000..9d9357066cd
Binary files /dev/null and b/assets/stickers/food/onion.png differ
diff --git a/assets/stickers/food/orange.png b/assets/stickers/food/orange.png
new file mode 100644
index 00000000000..23f35fc7876
Binary files /dev/null and b/assets/stickers/food/orange.png differ
diff --git a/assets/stickers/food/pancakes.png b/assets/stickers/food/pancakes.png
new file mode 100644
index 00000000000..e7550258aaf
Binary files /dev/null and b/assets/stickers/food/pancakes.png differ
diff --git a/assets/stickers/food/pasta.png b/assets/stickers/food/pasta.png
new file mode 100644
index 00000000000..c68500294c5
Binary files /dev/null and b/assets/stickers/food/pasta.png differ
diff --git a/assets/stickers/food/peach.png b/assets/stickers/food/peach.png
new file mode 100644
index 00000000000..6826b4b7799
Binary files /dev/null and b/assets/stickers/food/peach.png differ
diff --git a/assets/stickers/food/pear.png b/assets/stickers/food/pear.png
new file mode 100644
index 00000000000..21a09b3dc41
Binary files /dev/null and b/assets/stickers/food/pear.png differ
diff --git a/assets/stickers/food/pepper.png b/assets/stickers/food/pepper.png
new file mode 100644
index 00000000000..241bfe317eb
Binary files /dev/null and b/assets/stickers/food/pepper.png differ
diff --git a/assets/stickers/food/pie.png b/assets/stickers/food/pie.png
new file mode 100644
index 00000000000..cc10302a990
Binary files /dev/null and b/assets/stickers/food/pie.png differ
diff --git a/assets/stickers/food/pineapple.png b/assets/stickers/food/pineapple.png
new file mode 100644
index 00000000000..71eb128141b
Binary files /dev/null and b/assets/stickers/food/pineapple.png differ
diff --git a/assets/stickers/food/pizza.png b/assets/stickers/food/pizza.png
new file mode 100644
index 00000000000..0161cf59c5b
Binary files /dev/null and b/assets/stickers/food/pizza.png differ
diff --git a/assets/stickers/food/popcorn.png b/assets/stickers/food/popcorn.png
new file mode 100644
index 00000000000..43c8477f12b
Binary files /dev/null and b/assets/stickers/food/popcorn.png differ
diff --git a/assets/stickers/food/prawn.png b/assets/stickers/food/prawn.png
new file mode 100644
index 00000000000..afe5431ab12
Binary files /dev/null and b/assets/stickers/food/prawn.png differ
diff --git a/assets/stickers/food/pretzel.png b/assets/stickers/food/pretzel.png
new file mode 100644
index 00000000000..bbe72aa23b5
Binary files /dev/null and b/assets/stickers/food/pretzel.png differ
diff --git a/assets/stickers/food/pumpkin.png b/assets/stickers/food/pumpkin.png
new file mode 100644
index 00000000000..4572125205c
Binary files /dev/null and b/assets/stickers/food/pumpkin.png differ
diff --git a/assets/stickers/food/radish.png b/assets/stickers/food/radish.png
new file mode 100644
index 00000000000..5284a8b4d1a
Binary files /dev/null and b/assets/stickers/food/radish.png differ
diff --git a/assets/stickers/food/raspberry.png b/assets/stickers/food/raspberry.png
new file mode 100644
index 00000000000..e0238f530fa
Binary files /dev/null and b/assets/stickers/food/raspberry.png differ
diff --git a/assets/stickers/food/rice.png b/assets/stickers/food/rice.png
new file mode 100644
index 00000000000..55bd59397c1
Binary files /dev/null and b/assets/stickers/food/rice.png differ
diff --git a/assets/stickers/food/roast-chicken.png b/assets/stickers/food/roast-chicken.png
new file mode 100644
index 00000000000..afff0a926a2
Binary files /dev/null and b/assets/stickers/food/roast-chicken.png differ
diff --git a/assets/stickers/food/salad.png b/assets/stickers/food/salad.png
new file mode 100644
index 00000000000..c9f0e4e6b19
Binary files /dev/null and b/assets/stickers/food/salad.png differ
diff --git a/assets/stickers/food/salt.png b/assets/stickers/food/salt.png
new file mode 100644
index 00000000000..6850890abfd
Binary files /dev/null and b/assets/stickers/food/salt.png differ
diff --git a/assets/stickers/food/sandwich-1.png b/assets/stickers/food/sandwich-1.png
new file mode 100644
index 00000000000..d7fd4ca4b4a
Binary files /dev/null and b/assets/stickers/food/sandwich-1.png differ
diff --git a/assets/stickers/food/sandwich.png b/assets/stickers/food/sandwich.png
new file mode 100644
index 00000000000..ac6c5f8a433
Binary files /dev/null and b/assets/stickers/food/sandwich.png differ
diff --git a/assets/stickers/food/sardine.png b/assets/stickers/food/sardine.png
new file mode 100644
index 00000000000..41dcfeac6cf
Binary files /dev/null and b/assets/stickers/food/sardine.png differ
diff --git a/assets/stickers/food/soup.png b/assets/stickers/food/soup.png
new file mode 100644
index 00000000000..c40c4c172e7
Binary files /dev/null and b/assets/stickers/food/soup.png differ
diff --git a/assets/stickers/food/soya.png b/assets/stickers/food/soya.png
new file mode 100644
index 00000000000..3af760957b1
Binary files /dev/null and b/assets/stickers/food/soya.png differ
diff --git a/assets/stickers/food/steak.png b/assets/stickers/food/steak.png
new file mode 100644
index 00000000000..ed6b842dc51
Binary files /dev/null and b/assets/stickers/food/steak.png differ
diff --git a/assets/stickers/food/strawberry.png b/assets/stickers/food/strawberry.png
new file mode 100644
index 00000000000..e40ca7ad63a
Binary files /dev/null and b/assets/stickers/food/strawberry.png differ
diff --git a/assets/stickers/food/sushi.png b/assets/stickers/food/sushi.png
new file mode 100644
index 00000000000..0f5cd26670f
Binary files /dev/null and b/assets/stickers/food/sushi.png differ
diff --git a/assets/stickers/food/taco.png b/assets/stickers/food/taco.png
new file mode 100644
index 00000000000..75596a2d35d
Binary files /dev/null and b/assets/stickers/food/taco.png differ
diff --git a/assets/stickers/food/toaster.png b/assets/stickers/food/toaster.png
new file mode 100644
index 00000000000..d0fa0d8c1bb
Binary files /dev/null and b/assets/stickers/food/toaster.png differ
diff --git a/assets/stickers/food/tomato.png b/assets/stickers/food/tomato.png
new file mode 100644
index 00000000000..db3b66cd648
Binary files /dev/null and b/assets/stickers/food/tomato.png differ
diff --git a/assets/stickers/food/tuna.png b/assets/stickers/food/tuna.png
new file mode 100644
index 00000000000..57c9a34c3d6
Binary files /dev/null and b/assets/stickers/food/tuna.png differ
diff --git a/assets/stickers/food/vinegar.png b/assets/stickers/food/vinegar.png
new file mode 100644
index 00000000000..ea3d718e1be
Binary files /dev/null and b/assets/stickers/food/vinegar.png differ
diff --git a/assets/stickers/food/watermelon.png b/assets/stickers/food/watermelon.png
new file mode 100644
index 00000000000..6997e3d10ae
Binary files /dev/null and b/assets/stickers/food/watermelon.png differ
diff --git a/assets/stickers/food/yogurt.png b/assets/stickers/food/yogurt.png
new file mode 100644
index 00000000000..b3ea7125732
Binary files /dev/null and b/assets/stickers/food/yogurt.png differ
diff --git a/assets/stickers/weather/cloud.png b/assets/stickers/weather/cloud.png
new file mode 100644
index 00000000000..ef4fb37cb83
Binary files /dev/null and b/assets/stickers/weather/cloud.png differ
diff --git a/assets/stickers/weather/cloudy-1.png b/assets/stickers/weather/cloudy-1.png
new file mode 100644
index 00000000000..0d3660034cd
Binary files /dev/null and b/assets/stickers/weather/cloudy-1.png differ
diff --git a/assets/stickers/weather/cloudy-night.png b/assets/stickers/weather/cloudy-night.png
new file mode 100644
index 00000000000..1bf8aea2c53
Binary files /dev/null and b/assets/stickers/weather/cloudy-night.png differ
diff --git a/assets/stickers/weather/cloudy.png b/assets/stickers/weather/cloudy.png
new file mode 100644
index 00000000000..11f835d669e
Binary files /dev/null and b/assets/stickers/weather/cloudy.png differ
diff --git a/assets/stickers/weather/eclipse.png b/assets/stickers/weather/eclipse.png
new file mode 100644
index 00000000000..cf32f42ffd8
Binary files /dev/null and b/assets/stickers/weather/eclipse.png differ
diff --git a/assets/stickers/weather/full-moon.png b/assets/stickers/weather/full-moon.png
new file mode 100644
index 00000000000..05397836978
Binary files /dev/null and b/assets/stickers/weather/full-moon.png differ
diff --git a/assets/stickers/weather/hail.png b/assets/stickers/weather/hail.png
new file mode 100644
index 00000000000..0c816e8db9a
Binary files /dev/null and b/assets/stickers/weather/hail.png differ
diff --git a/assets/stickers/weather/lightning.png b/assets/stickers/weather/lightning.png
new file mode 100644
index 00000000000..3ea01115f6c
Binary files /dev/null and b/assets/stickers/weather/lightning.png differ
diff --git a/assets/stickers/weather/moon-phases-1.png b/assets/stickers/weather/moon-phases-1.png
new file mode 100644
index 00000000000..862d9530e4d
Binary files /dev/null and b/assets/stickers/weather/moon-phases-1.png differ
diff --git a/assets/stickers/weather/moon-phases-2.png b/assets/stickers/weather/moon-phases-2.png
new file mode 100644
index 00000000000..3060dce0319
Binary files /dev/null and b/assets/stickers/weather/moon-phases-2.png differ
diff --git a/assets/stickers/weather/moon-phases-3.png b/assets/stickers/weather/moon-phases-3.png
new file mode 100644
index 00000000000..91c9beac545
Binary files /dev/null and b/assets/stickers/weather/moon-phases-3.png differ
diff --git a/assets/stickers/weather/moon-phases-4.png b/assets/stickers/weather/moon-phases-4.png
new file mode 100644
index 00000000000..48b851c965a
Binary files /dev/null and b/assets/stickers/weather/moon-phases-4.png differ
diff --git a/assets/stickers/weather/moon-phases-5.png b/assets/stickers/weather/moon-phases-5.png
new file mode 100644
index 00000000000..9e3808340c8
Binary files /dev/null and b/assets/stickers/weather/moon-phases-5.png differ
diff --git a/assets/stickers/weather/moon-phases.png b/assets/stickers/weather/moon-phases.png
new file mode 100644
index 00000000000..bc075453639
Binary files /dev/null and b/assets/stickers/weather/moon-phases.png differ
diff --git a/assets/stickers/weather/planet-earth.png b/assets/stickers/weather/planet-earth.png
new file mode 100644
index 00000000000..43e150a9f95
Binary files /dev/null and b/assets/stickers/weather/planet-earth.png differ
diff --git a/assets/stickers/weather/rain-1.png b/assets/stickers/weather/rain-1.png
new file mode 100644
index 00000000000..d0675e7eb83
Binary files /dev/null and b/assets/stickers/weather/rain-1.png differ
diff --git a/assets/stickers/weather/rain.png b/assets/stickers/weather/rain.png
new file mode 100644
index 00000000000..8d1e8d67719
Binary files /dev/null and b/assets/stickers/weather/rain.png differ
diff --git a/assets/stickers/weather/raindrop.png b/assets/stickers/weather/raindrop.png
new file mode 100644
index 00000000000..7cfdb25ea5d
Binary files /dev/null and b/assets/stickers/weather/raindrop.png differ
diff --git a/assets/stickers/weather/rainy-1.png b/assets/stickers/weather/rainy-1.png
new file mode 100644
index 00000000000..ea3c6d96334
Binary files /dev/null and b/assets/stickers/weather/rainy-1.png differ
diff --git a/assets/stickers/weather/rainy.png b/assets/stickers/weather/rainy.png
new file mode 100644
index 00000000000..811543b772b
Binary files /dev/null and b/assets/stickers/weather/rainy.png differ
diff --git a/assets/stickers/weather/snowflake.png b/assets/stickers/weather/snowflake.png
new file mode 100644
index 00000000000..5c29926032f
Binary files /dev/null and b/assets/stickers/weather/snowflake.png differ
diff --git a/assets/stickers/weather/storm.png b/assets/stickers/weather/storm.png
new file mode 100644
index 00000000000..3ef7df8e57a
Binary files /dev/null and b/assets/stickers/weather/storm.png differ
diff --git a/assets/stickers/weather/sun.png b/assets/stickers/weather/sun.png
new file mode 100644
index 00000000000..79112507eb5
Binary files /dev/null and b/assets/stickers/weather/sun.png differ
diff --git a/assets/stickers/weather/temperature-1.png b/assets/stickers/weather/temperature-1.png
new file mode 100644
index 00000000000..9a42e118bcc
Binary files /dev/null and b/assets/stickers/weather/temperature-1.png differ
diff --git a/assets/stickers/weather/temperature.png b/assets/stickers/weather/temperature.png
new file mode 100644
index 00000000000..3aed2004749
Binary files /dev/null and b/assets/stickers/weather/temperature.png differ
diff --git a/assets/stickers/weather/thermometer-1.png b/assets/stickers/weather/thermometer-1.png
new file mode 100644
index 00000000000..7a61974e9d8
Binary files /dev/null and b/assets/stickers/weather/thermometer-1.png differ
diff --git a/assets/stickers/weather/thermometer-2.png b/assets/stickers/weather/thermometer-2.png
new file mode 100644
index 00000000000..b4a67d9e3ea
Binary files /dev/null and b/assets/stickers/weather/thermometer-2.png differ
diff --git a/assets/stickers/weather/thermometer.png b/assets/stickers/weather/thermometer.png
new file mode 100644
index 00000000000..2d1e7baec81
Binary files /dev/null and b/assets/stickers/weather/thermometer.png differ
diff --git a/assets/stickers/weather/tornado.png b/assets/stickers/weather/tornado.png
new file mode 100644
index 00000000000..fbe95eab511
Binary files /dev/null and b/assets/stickers/weather/tornado.png differ
diff --git a/assets/stickers/weather/wind.png b/assets/stickers/weather/wind.png
new file mode 100644
index 00000000000..450c052d9b2
Binary files /dev/null and b/assets/stickers/weather/wind.png differ
diff --git a/build.gradle b/build.gradle
index 70fa66832d9..0023c48fd39 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,12 +1,12 @@
buildscript {
repositories {
- mavenLocal()
maven {
url "https://repo1.maven.org/maven2"
+ jcenter()
}
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.2.3'
+ classpath 'com.android.tools.build:gradle:2.2.3'
classpath files('libs/gradle-witness.jar')
}
}
@@ -18,32 +18,17 @@ repositories {
maven {
url "https://repo1.maven.org/maven2/"
}
- maven {
- url "https://raw.github.com/whispersystems/maven/master/preferencefragment/releases/"
- }
- maven {
- url "https://raw.github.com/whispersystems/maven/master/smil/releases/"
- }
- maven {
- url "https://raw.github.com/whispersystems/maven/master/shortcutbadger/releases/"
- }
- maven { // textdrawable
- url 'https://dl.bintray.com/amulyakhare/maven'
- }
jcenter()
mavenLocal()
}
dependencies {
- compile 'me.leolin:ShortcutBadger:1.1.0-WS1'
+ compile project(':libs:ShortcutBadger:ShortcutBadger')
+ compile project(':libs:PhotoView:library')
compile 'se.emilsjolander:stickylistheaders:2.7.0'
- compile 'com.google.android.gms:play-services-gcm:8.1.0'
- compile 'com.google.android.gms:play-services-maps:8.1.0'
- compile 'com.google.android.gms:play-services-location:8.1.0'
compile 'com.jpardogo.materialtabstrip:library:1.0.9'
- compile 'org.w3c:smil:1.0.0'
+ compile project(':libs:org.w3c.dom')
compile 'org.apache.httpcomponents:httpclient-android:4.3.5'
- compile 'com.github.chrisbanes.photoview:library:1.2.3'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.makeramen:roundedimageview:2.1.0'
compile 'com.pnikosis:materialish-progress:1.5'
@@ -56,9 +41,8 @@ dependencies {
compile 'com.android.support:cardview-v7:22.2.1'
compile 'com.melnykov:floatingactionbutton:1.3.0'
compile 'com.google.zxing:android-integration:3.1.0'
- compile ('com.android.support:support-v4-preferencefragment:1.0.0@aar'){
- exclude module: 'support-v4'
- }
+ compile project('libs:android-support-v4-preferencefragment')
+
compile ('com.android.support:gridlayout-v7:22.2.0') {
exclude module: 'support-v4'
}
@@ -73,10 +57,15 @@ dependencies {
compile 'org.whispersystems:jobmanager:1.0.2'
compile 'org.whispersystems:libpastelog:1.0.7'
compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
- compile 'org.whispersystems:textsecure-android:2.8.6'
+ compile project(':android')
+
compile 'com.h6ah4i.android.compat:mulsellistprefcompat:1.0.0'
compile 'com.google.zxing:core:3.2.1'
+ compile ('cn.carbswang.android:NumberPickerView:1.0.9') {
+ exclude group: 'com.android.support', module: 'appcompat-v7'
+ }
+
testCompile 'junit:junit:4.12'
testCompile 'org.assertj:assertj-core:1.7.1'
testCompile 'org.mockito:mockito-core:1.9.5'
@@ -90,7 +79,7 @@ dependencies {
androidTestCompile ('org.assertj:assertj-core:1.7.1') {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
}
- androidTestCompile ('com.squareup.assertj:assertj-android:1.0.0') {
+ androidTestCompile ('com.squareup.assertj:assertj-android:1.1.1') {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
exclude group: 'com.android.support', module: 'support-annotations'
}
@@ -98,15 +87,12 @@ dependencies {
dependencyVerification {
verify = [
- 'me.leolin:ShortcutBadger:3142d017234bfa0cdd69ccded7cc5ea63f13b97574803c8c616c9bbeaad33ad9',
+ //'me.leolin:ShortcutBadger:3142d017234bfa0cdd69ccded7cc5ea63f13b97574803c8c616c9bbeaad33ad9',
'se.emilsjolander:stickylistheaders:a08ca948aa6b220f09d82f16bbbac395f6b78897e9eeac6a9f0b0ba755928eeb',
- 'com.google.android.gms:play-services-gcm:757ecd2c837ac81c98f4cc7dc783e7454c6d0506f6cc66b10417126b675248c9',
- 'com.google.android.gms:play-services-maps:c58a9d98a98889fb0b27f78100f2d9341ed7722db24ccf832df62b6e8ce1b42e',
- 'com.google.android.gms:play-services-location:8226f778aa86bd15b9143f62425262cc53d64021990f62eb1aaec108d4e25f35',
'com.jpardogo.materialtabstrip:library:c6ef812fba4f74be7dc4a905faa4c2908cba261a94c13d4f96d5e67e4aad4aaa',
- 'org.w3c:smil:085dc40f2bb249651578bfa07499fd08b16ad0886dbe2c4078586a408da62f9b',
+ //'org.w3c:smil:085dc40f2bb249651578bfa07499fd08b16ad0886dbe2c4078586a408da62f9b',
'org.apache.httpcomponents:httpclient-android:6f56466a9bd0d42934b90bfbfe9977a8b654c058bf44a12bdc2877c4e1f033f1',
- 'com.github.chrisbanes.photoview:library:8b5344e206f125e7ba9d684008f36c4992d03853c57e5814125f88496126e3cc',
+ //'com.github.chrisbanes.photoview:library:f152dd0a87aca891aa182e42863fa05e0e8b2842e3b9fc512d7a3a6243c38ac4',
'com.github.bumptech.glide:glide:76ef123957b5fbaebb05fcbe6606dd58c3bc3fcdadb257f99811d0ac9ea9b88b',
'com.makeramen:roundedimageview:1f5a1865796b308c6cdd114acc6e78408b110f0a62fc63553278fbeacd489cd1',
'com.pnikosis:materialish-progress:d71d80e00717a096784482aee21001a9d299fec3833e4ebd87739ed36cf77c54',
@@ -119,7 +105,7 @@ dependencyVerification {
'com.android.support:cardview-v7:2c2354761a4e20ba451ae903ab808f15c9acc8343b1e74001869c2d0a672c1fc',
'com.melnykov:floatingactionbutton:15d58d4fac0f7a288d0e5301bbaf501a146f5b3f5921277811bf99bd3b397263',
'com.google.zxing:android-integration:89e56aadf1164bd71e57949163c53abf90af368b51669c0d4a47a163335f95c4',
- 'com.android.support:support-v4-preferencefragment:5470f5872514a6226fa1fc6f4e000991f38805691c534cf0bd2778911fc773ad',
+ //'com.android.support:support-v4-preferencefragment:5470f5872514a6226fa1fc6f4e000991f38805691c534cf0bd2778911fc773ad',
'com.android.support:gridlayout-v7:a9b770cffca2c7c5cd83cba4dd12503365de5e8d9c79c479165adf18ab3bc25b',
'com.squareup.dagger:dagger:789aca24537022e49f91fc6444078d9de8f1dd99e1bfb090f18491b186967883',
'com.doomonafireball.betterpickers:library:132ecd685c95a99e7377c4e27bfadbb2d7ed0bea995944060cd62d4369fdaf3d',
@@ -127,51 +113,53 @@ dependencyVerification {
'org.whispersystems:jobmanager:506f679fc2fcf7bb6d10f00f41d6f6ea0abf75c70dc95b913398661ad538a181',
'org.whispersystems:libpastelog:bb331d9a98240fc139101128ba836c1edec3c40e000597cdbb29ebf4cbf34d88',
'com.amulyakhare:com.amulyakhare.textdrawable:54c92b5fba38cfd316a07e5a30528068f45ce8515a6890f1297df4c401af5dcb',
- 'org.whispersystems:textsecure-android:0405821f479985677d6d5f4032eaaa732e04562c1975969cbaea37939030ec96',
+ //'org.whispersystems:signal-service-android:1c89623336505f6511e6f68ea126c85eae7f28f6c72beb6b362e5743bc5e5126',
'com.h6ah4i.android.compat:mulsellistprefcompat:47167c5cb796de1a854788e9ff318358e36c8fb88123baaa6e38fb78511dfabe',
'com.google.zxing:core:b4d82452e7a6bf6ec2698904b332431717ed8f9a850224f295aec89de80f2259',
- 'com.google.android.gms:play-services-base:ef36e50fa5c0415ed41f74dd399a889efd2fa327c449036e140c7c3786aa0e1f',
- 'com.android.support:support-annotations:104f353b53d5dd8d64b2f77eece4b37f6b961de9732eb6b706395e91033ec70a',
+ //'com.android.support:support-annotations:1e4d471c5378b283d95abfb128e7ed3c6b3cb19bb6f0c317a9b75e48e99365ff',
'com.nineoldandroids:library:68025a14e3e7673d6ad2f95e4b46d78d7d068343aa99256b686fe59de1b3163a',
'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
'com.madgag.spongycastle:core:8d6240b974b0aca4d3da9c7dd44d42339d8a374358aca5fc98e50a995764511f',
- 'org.whispersystems:textsecure-java:d4ee0d0537693f82b7a9f76fe32cf6b61f79e27d8657a486ee4959b54b738c5a',
- 'org.whispersystems:axolotl-android:40d3db5004a84749a73f68d2f0d01b2ae35a73c54df96d8c6c6723b96efb6fc0',
- 'com.google.android.gms:play-services-basement:e1d29b21e02fd2a63e5a31807415cbb17a59568e27e3254181c01ffae10659bf',
- 'com.googlecode.libphonenumber:libphonenumber:9625de9d2270e9a280ff4e6d9ef3106573fb4828773fd32c9b7614f4e17d2811',
+ //'org.whispersystems:signal-service-java:48db52056aa3510deb8c4ccd2dfb35033ae115bc4176048820c6dff73290ba6e',
+ 'org.whispersystems:signal-protocol-android:1b4b9d557c8eaf861797ff683990d482d4aa8e9f23d9b17ff0cc67a02f38cb19',
+ 'com.googlecode.libphonenumber:libphonenumber:7214dc6dfc6243e34fb1a3e02ad15331bfff6ab902d679e3ba337695265c21ca',
'com.google.protobuf:protobuf-java:e0c1c64575c005601725e7c6a02cebf9e1285e888f756b2a1d73ffa8d725cc74',
'com.squareup.okhttp:okhttp:89b7f63e2e5b6c410266abc14f50fe52ea8d2d8a57260829e499b1cd9f0e61af',
'com.fasterxml.jackson.core:jackson-databind:835097bcdd11f5bc8a08378c70d4c8054dfa4b911691cc2752063c75534d198d',
- 'org.whispersystems:axolotl-java:6daee739b89d8d7101de6d98f77132fee48495c6ea647d880e77def842f999ea',
- 'org.whispersystems:curve25519-android:3c29a4131a69b0d16baaa3d707678deb39602c3a3ffd75805ce7f9db252e5d0d',
+ 'org.whispersystems:curve25519-android:bf6c34223d45d2f2813a8efcab9923caf99115115c760c9acea680bcb42d23c0',
+ 'org.whispersystems:signal-protocol-java:a835cd0609cf116a74651bd0aa748db9392bba48c2d2af787757b8a1b50d131c',
'com.squareup.okio:okio:5e1098bd3fdee4c3347f5ab815b40ba851e4ab1b348c5e49a5b0362f0ce6e978',
'com.fasterxml.jackson.core:jackson-annotations:0ca408c24202a7626ec8b861e99d85eca5e38b73311dd6dd12e3e9deecc3fe94',
'com.fasterxml.jackson.core:jackson-core:cbf4604784b4de226262845447a1ad3bb38a6728cebe86562e2c5afada8be2c0',
- 'org.whispersystems:curve25519-java:9ccef8f5aba05d9942336f023c589d6278b4f9135bdc34a7bade1f4e7ad65fa3',
- 'com.android.support:support-v4:c62f0d025dafa86f423f48df9185b0d89496adbc5f6a9be5a7c394d84cf91423',
- ]
+ 'org.whispersystems:curve25519-java:00f1d4919f759055f41f7853a3d475dc7c8decf0dbf045ae93414f8f23b066cc',
+ 'com.android.support:support-v4:ed4cda7c752f51d33f9bbdfff3422b425b323d356cd1bdc9786aa413c912e594',
+ ]
}
android {
- compileSdkVersion 22
- buildToolsVersion '22.0.1'
-
- dexOptions {
- javaMaxHeapSize "4g"
- }
+ compileSdkVersion 24
+ buildToolsVersion '23.0.3'
+ useLibrary 'org.apache.http.legacy'
defaultConfig {
+ applicationId "org.libresignal"
minSdkVersion 9
targetSdkVersion 22
- buildConfigField "long", "BUILD_TIMESTAMP", System.currentTimeMillis() + "L"
+ vectorDrawables.useSupportLibrary = true
+
+ buildConfigField "long", "BUILD_TIMESTAMP", getLastCommitTimestamp() + "L"
buildConfigField "String", "TEXTSECURE_URL", "\"https://textsecure-service.whispersystems.org\""
- buildConfigField "String", "USER_AGENT", "\"JEN\""
+ buildConfigField "String", "USER_AGENT", "\"LSA\""
+ buildConfigField "String[]", "CENSORED_COUNTRIES", "{\"+20\", \"+971\", \"+53\", \"+968\"}"
+ buildConfigField "String", "UNCENSORED_FRONTING_HOST", "\"https://www.google.com\""
+ buildConfigField "String", "CENSORED_REFLECTOR", "\"signal-reflector-meek.appspot.com\""
+ buildConfigField "String", "GIPHY_PROXY_HOST", "\"giphy-proxy-production.whispersystems.org\""
+ buildConfigField "int", "GIPHY_PROXY_PORT", "80"
buildConfigField "String", "REDPHONE_MASTER_URL", "\"https://redphone-master.whispersystems.org\""
buildConfigField "String", "REDPHONE_RELAY_HOST", "\"relay.whispersystems.org\""
buildConfigField "String", "REDPHONE_PREFIX_NAME", "\".whispersystems.org\""
buildConfigField "boolean", "DEV_BUILD", "false"
- buildConfigField "boolean", "FORCE_WEBSOCKETS", "false"
}
compileOptions {
@@ -209,33 +197,18 @@ android {
'proguard-shortcutbadger.pro',
'proguard-retrofit.pro',
'proguard.cfg'
+ //buildConfigField "String", "TEXTSECURE_URL", "\"https://textsecure-service-staging.whispersystems.org\""
+ //buildConfigField "String", "REDPHONE_MASTER_URL", "\"https://redphone-staging.whispersystems.org\""
+ //buildConfigField "String", "REDPHONE_RELAY_HOST", "\"redphone-staging-relay.whispersystems.org\""
+ testProguardFiles 'proguard-automation.pro'
}
release {
minifyEnabled true
proguardFiles = buildTypes.debug.proguardFiles
signingConfig signingConfigs.release
}
- dev.initWith(buildTypes.debug)
- dev {
- buildConfigField "boolean", "DEV_BUILD", "true"
- versionNameSuffix "-dev"
- }
- websockets.initWith(buildTypes.dev)
- websockets {
- buildConfigField "boolean", "FORCE_WEBSOCKETS", "true"
- }
}
- productFlavors {
- prod {
- // defaults
- }
- staging {
- buildConfigField "String", "TEXTSECURE_URL", "\"https://textsecure-service-staging.whispersystems.org\""
- buildConfigField "String", "REDPHONE_MASTER_URL", "\"https://redphone-staging.whispersystems.org\""
- buildConfigField "String", "REDPHONE_RELAY_HOST", "\"redphone-staging-relay.whispersystems.org\""
- }
- }
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
@@ -257,6 +230,7 @@ android {
lintOptions {
abortOnError false
+ disable 'MissingTranslation'
}
}
@@ -266,6 +240,18 @@ tasks.whenTaskAdded { task ->
}
}
+def getLastCommitTimestamp() {
+ new ByteArrayOutputStream().withStream { os ->
+ def result = exec {
+ executable = 'git'
+ args = ['log', '-1', '--pretty=format:%ct']
+ standardOutput = os
+ }
+
+ return os.toString() + "000"
+ }
+}
+
def Properties props = new Properties()
def propFile = new File('signing.properties')
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 513819a3ab6..7dc78b5e79c 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Jul 22 14:31:11 PDT 2015
+#Sun Aug 28 20:14:40 PDT 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/jni/Android.mk b/jni/Android.mk
index 2882b8f5ce2..3d4190875cb 100644
--- a/jni/Android.mk
+++ b/jni/Android.mk
@@ -53,6 +53,14 @@ libwebrtc_spl \
libwebrtc_vad \
libcrypto_static
-
include $(BUILD_SHARED_LIBRARY)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := native-utils
+LOCAL_C_INCLUDES := $(JNI_DIR)/utils/
+LOCAL_CFLAGS += -Wall
+
+LOCAL_SRC_FILES := $(JNI_DIR)/utils/org_thoughtcrime_securesms_util_FileUtils.cpp
+
+include $(BUILD_SHARED_LIBRARY)
\ No newline at end of file
diff --git a/jni/openssl/crypto/pkcs7/p7/a1 b/jni/openssl/crypto/pkcs7/p7/a1
deleted file mode 100644
index 56ca9437626..00000000000
--- a/jni/openssl/crypto/pkcs7/p7/a1
+++ /dev/null
@@ -1,2 +0,0 @@
-j,H>_æá_DôzEîLœ VJ³ß觬¤””E3ûáYäx%_Àk
-3ê)DLScñ8%ôM
\ No newline at end of file
diff --git a/jni/openssl/crypto/pkcs7/p7/a2 b/jni/openssl/crypto/pkcs7/p7/a2
deleted file mode 100644
index 23d8fb5e93b..00000000000
--- a/jni/openssl/crypto/pkcs7/p7/a2
+++ /dev/null
@@ -1 +0,0 @@
-k~@a”,NâM͹¼ ×U¿o_½BqrmÎ?Ù t?t÷ÏéId2‰Š
\ No newline at end of file
diff --git a/jni/redphone/RtpAudioReceiver.cpp b/jni/redphone/RtpAudioReceiver.cpp
index 616dd525c95..12e111d06e2 100644
--- a/jni/redphone/RtpAudioReceiver.cpp
+++ b/jni/redphone/RtpAudioReceiver.cpp
@@ -26,6 +26,11 @@ RtpPacket* RtpAudioReceiver::receive(char* encodedData, int encodedDataLen) {
return NULL;
}
+ if (received < RtpPacket::getMinimumSize()) {
+ __android_log_print(ANDROID_LOG_WARN, TAG, "recveived malformed packet!");
+ return NULL;
+ }
+
RtpPacket *packet = new RtpPacket(encodedData, received);
if (srtpStream.decrypt(*packet, sequenceCounter.convertNext(packet->getSequenceNumber())) != 0) {
diff --git a/jni/redphone/RtpPacket.h b/jni/redphone/RtpPacket.h
index 2a06563945f..bacd251490c 100644
--- a/jni/redphone/RtpPacket.h
+++ b/jni/redphone/RtpPacket.h
@@ -21,6 +21,10 @@ class RtpPacket {
RtpPacket(char *payload, int payloadLen, int sequenceNumber, int timestamp);
~RtpPacket();
+ static int getMinimumSize() {
+ return sizeof(RtpHeader);
+ }
+
uint16_t getSequenceNumber();
int getPayloadType();
uint32_t getTimestamp();
diff --git a/jni/utils/org_thoughtcrime_securesms_util_FileUtils.cpp b/jni/utils/org_thoughtcrime_securesms_util_FileUtils.cpp
new file mode 100644
index 00000000000..ef86ac8e350
--- /dev/null
+++ b/jni/utils/org_thoughtcrime_securesms_util_FileUtils.cpp
@@ -0,0 +1,31 @@
+#include "org_thoughtcrime_securesms_util_FileUtils.h"
+
+#include
+#include
+#include
+
+jint JNICALL Java_org_thoughtcrime_securesms_util_FileUtils_getFileDescriptorOwner
+ (JNIEnv *env, jclass clazz, jobject fileDescriptor)
+{
+ jclass fdClass = env->GetObjectClass(fileDescriptor);
+
+ if (fdClass == NULL) {
+ return -1;
+ }
+
+ jfieldID fdFieldId = env->GetFieldID(fdClass, "descriptor", "I");
+
+ if (fdFieldId == NULL) {
+ return -1;
+ }
+
+ int fd = env->GetIntField(fileDescriptor, fdFieldId);
+
+ struct stat stat_struct;
+
+ if (fstat(fd, &stat_struct) != 0) {
+ return -1;
+ }
+
+ return stat_struct.st_uid;
+}
\ No newline at end of file
diff --git a/jni/utils/org_thoughtcrime_securesms_util_FileUtils.h b/jni/utils/org_thoughtcrime_securesms_util_FileUtils.h
new file mode 100644
index 00000000000..abf13b35bcf
--- /dev/null
+++ b/jni/utils/org_thoughtcrime_securesms_util_FileUtils.h
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include
+/* Header for class org_thoughtcrime_securesms_util_FileUtils */
+
+#ifndef _Included_org_thoughtcrime_securesms_util_FileUtils
+#define _Included_org_thoughtcrime_securesms_util_FileUtils
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: org_thoughtcrime_securesms_util_FileUtils
+ * Method: getFileDescriptorOwner
+ * Signature: (Ljava/io/FileDescriptor;)I
+ */
+JNIEXPORT jint JNICALL Java_org_thoughtcrime_securesms_util_FileUtils_getFileDescriptorOwner
+ (JNIEnv *, jclass, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/libs/.gitignore b/libs/.gitignore
new file mode 100644
index 00000000000..140f8cf80f2
--- /dev/null
+++ b/libs/.gitignore
@@ -0,0 +1 @@
+*.so
diff --git a/libs/PhotoView b/libs/PhotoView
new file mode 160000
index 00000000000..10e13fd7610
--- /dev/null
+++ b/libs/PhotoView
@@ -0,0 +1 @@
+Subproject commit 10e13fd761084dcbceb5245b7b5bfb6903f11e5d
diff --git a/libs/ShortcutBadger b/libs/ShortcutBadger
new file mode 160000
index 00000000000..226f4f889b8
--- /dev/null
+++ b/libs/ShortcutBadger
@@ -0,0 +1 @@
+Subproject commit 226f4f889b8afd6326c1aa5da513f8db09dd1bd5
diff --git a/libs/android-support-v4-preferencefragment b/libs/android-support-v4-preferencefragment
new file mode 160000
index 00000000000..717a45433b9
--- /dev/null
+++ b/libs/android-support-v4-preferencefragment
@@ -0,0 +1 @@
+Subproject commit 717a45433b927d2f0dfc5328f79e77c9682c37bc
diff --git a/libs/armeabi-v7a/libredphone-audio.so b/libs/armeabi-v7a/libredphone-audio.so
index a8241c8e54d..50c624dbfd2 100755
Binary files a/libs/armeabi-v7a/libredphone-audio.so and b/libs/armeabi-v7a/libredphone-audio.so differ
diff --git a/libs/armeabi/libredphone-audio.so b/libs/armeabi/libredphone-audio.so
index 7949956a034..951f3a4c404 100755
Binary files a/libs/armeabi/libredphone-audio.so and b/libs/armeabi/libredphone-audio.so differ
diff --git a/libs/gradle-witness.jar b/libs/gradle-witness.jar
index 561041d3661..6ab83e59625 100644
Binary files a/libs/gradle-witness.jar and b/libs/gradle-witness.jar differ
diff --git a/libs/libtextsecure-java b/libs/libtextsecure-java
new file mode 160000
index 00000000000..8d68eb20629
--- /dev/null
+++ b/libs/libtextsecure-java
@@ -0,0 +1 @@
+Subproject commit 8d68eb20629aad3224086ef2e49df1eebe4ae3a7
diff --git a/libs/org.w3c.dom b/libs/org.w3c.dom
new file mode 160000
index 00000000000..91f12458e37
--- /dev/null
+++ b/libs/org.w3c.dom
@@ -0,0 +1 @@
+Subproject commit 91f12458e37bbb783f49ec97bcd070dd62c3070b
diff --git a/libs/x86/libredphone-audio.so b/libs/x86/libredphone-audio.so
index 597cc96c1c1..9968b3408e6 100755
Binary files a/libs/x86/libredphone-audio.so and b/libs/x86/libredphone-audio.so differ
diff --git a/proguard-appcompat-v7.pro b/proguard-appcompat-v7.pro
index 718eb9da93b..f0d673934f8 100644
--- a/proguard-appcompat-v7.pro
+++ b/proguard-appcompat-v7.pro
@@ -7,3 +7,7 @@
-keep public class * extends android.support.v4.view.ActionProvider {
public (android.content.Context);
}
+
+-keepattributes *Annotation*
+-keep public class * extends android.support.design.widget.CoordinatorLayout.Behavior { *; }
+-keep public class * extends android.support.design.widget.ViewOffsetBehavior { *; }
diff --git a/proguard-spongycastle.pro b/proguard-spongycastle.pro
index 42dbe10897d..26c6842672d 100644
--- a/proguard-spongycastle.pro
+++ b/proguard-spongycastle.pro
@@ -11,7 +11,11 @@
-keep class org.spongycastle.crypto.prng.* {*;}
-keep class org.spongycastle.crypto.signers.* {*;}
--keep class org.spongycastle.jcajce.provider.asymmetric.** {*;}
+-keep class org.spongycastle.jcajce.provider.asymmetric.* {*;}
+-keep class org.spongycastle.jcajce.provider.asymmetric.util.* {*;}
+-keep class org.spongycastle.jcajce.provider.asymmetric.dh.* {*;}
+-keep class org.spongycastle.jcajce.provider.asymmetric.ec.* {*;}
+
-keep class org.spongycastle.jcajce.provider.digest.** {*;}
-keep class org.spongycastle.jcajce.provider.keystore.** {*;}
-keep class org.spongycastle.jcajce.provider.symmetric.** {*;}
diff --git a/res/animator/bottom_pause_to_play_animation.xml b/res/animator/bottom_pause_to_play_animation.xml
new file mode 100644
index 00000000000..f5b474bb709
--- /dev/null
+++ b/res/animator/bottom_pause_to_play_animation.xml
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/res/animator/bottom_play_to_pause_animation.xml b/res/animator/bottom_play_to_pause_animation.xml
new file mode 100644
index 00000000000..4f2778d6853
--- /dev/null
+++ b/res/animator/bottom_play_to_pause_animation.xml
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/res/animator/rotate_90_animation.xml b/res/animator/rotate_90_animation.xml
new file mode 100644
index 00000000000..7d44ce6900a
--- /dev/null
+++ b/res/animator/rotate_90_animation.xml
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/res/animator/rotate_minus_90_animation.xml b/res/animator/rotate_minus_90_animation.xml
new file mode 100644
index 00000000000..ef9e1b6f1f7
--- /dev/null
+++ b/res/animator/rotate_minus_90_animation.xml
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/res/animator/upper_pause_to_play_animation.xml b/res/animator/upper_pause_to_play_animation.xml
new file mode 100644
index 00000000000..880c7b0b83f
--- /dev/null
+++ b/res/animator/upper_pause_to_play_animation.xml
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/res/animator/upper_play_to_pause_animation.xml b/res/animator/upper_play_to_pause_animation.xml
new file mode 100644
index 00000000000..ffa933231cb
--- /dev/null
+++ b/res/animator/upper_play_to_pause_animation.xml
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/res/drawable-hdpi-v11/icon_cached.png b/res/drawable-hdpi-v11/icon_cached.png
index a752f80ecb7..777153ba4db 100644
Binary files a/res/drawable-hdpi-v11/icon_cached.png and b/res/drawable-hdpi-v11/icon_cached.png differ
diff --git a/res/drawable-hdpi-v9/icon_cached.png b/res/drawable-hdpi-v9/icon_cached.png
deleted file mode 100644
index 979b2fe918d..00000000000
Binary files a/res/drawable-hdpi-v9/icon_cached.png and /dev/null differ
diff --git a/res/drawable-hdpi/ic_brush_white_24dp.png b/res/drawable-hdpi/ic_brush_white_24dp.png
new file mode 100644
index 00000000000..c8aa20ca2b0
Binary files /dev/null and b/res/drawable-hdpi/ic_brush_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_check_white_36dp.png b/res/drawable-hdpi/ic_check_white_36dp.png
new file mode 100644
index 00000000000..9e3f948c938
Binary files /dev/null and b/res/drawable-hdpi/ic_check_white_36dp.png differ
diff --git a/res/drawable-hdpi/ic_check_white_48dp.png b/res/drawable-hdpi/ic_check_white_48dp.png
new file mode 100644
index 00000000000..2c2ad771f72
Binary files /dev/null and b/res/drawable-hdpi/ic_check_white_48dp.png differ
diff --git a/res/drawable-hdpi/ic_circle_fill_white_48dp.png b/res/drawable-hdpi/ic_circle_fill_white_48dp.png
new file mode 100644
index 00000000000..a417946f2ac
Binary files /dev/null and b/res/drawable-hdpi/ic_circle_fill_white_48dp.png differ
diff --git a/res/drawable-hdpi/ic_close_white_48dp.png b/res/drawable-hdpi/ic_close_white_48dp.png
new file mode 100644
index 00000000000..6b717e0dda8
Binary files /dev/null and b/res/drawable-hdpi/ic_close_white_48dp.png differ
diff --git a/res/drawable-hdpi/ic_dashboard_white_24dp.png b/res/drawable-hdpi/ic_dashboard_white_24dp.png
new file mode 100644
index 00000000000..3208779f855
Binary files /dev/null and b/res/drawable-hdpi/ic_dashboard_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_emoji_activity_activated_dark.png b/res/drawable-hdpi/ic_emoji_activity_activated_dark.png
new file mode 100644
index 00000000000..f6adac4d806
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_activity_activated_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_activity_activated_light.png b/res/drawable-hdpi/ic_emoji_activity_activated_light.png
new file mode 100644
index 00000000000..cec4c2ba310
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_activity_activated_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_activity_normal_dark.png b/res/drawable-hdpi/ic_emoji_activity_normal_dark.png
new file mode 100644
index 00000000000..a61dcce747b
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_activity_normal_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_activity_normal_light.png b/res/drawable-hdpi/ic_emoji_activity_normal_light.png
new file mode 100644
index 00000000000..f6adac4d806
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_activity_normal_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_flag_activated_dark.png b/res/drawable-hdpi/ic_emoji_flag_activated_dark.png
new file mode 100644
index 00000000000..cb37eb1f06a
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_flag_activated_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_flag_activated_light.png b/res/drawable-hdpi/ic_emoji_flag_activated_light.png
new file mode 100644
index 00000000000..97bc953d62e
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_flag_activated_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_flag_normal_dark.png b/res/drawable-hdpi/ic_emoji_flag_normal_dark.png
new file mode 100644
index 00000000000..56583915da8
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_flag_normal_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_flag_normal_light.png b/res/drawable-hdpi/ic_emoji_flag_normal_light.png
new file mode 100644
index 00000000000..cb37eb1f06a
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_flag_normal_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_foods_activated_dark.png b/res/drawable-hdpi/ic_emoji_foods_activated_dark.png
new file mode 100644
index 00000000000..2f07dbb6580
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_foods_activated_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_foods_activated_light.png b/res/drawable-hdpi/ic_emoji_foods_activated_light.png
new file mode 100644
index 00000000000..365785adaf9
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_foods_activated_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_foods_normal_dark.png b/res/drawable-hdpi/ic_emoji_foods_normal_dark.png
new file mode 100644
index 00000000000..5c533050f1d
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_foods_normal_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_foods_normal_light.png b/res/drawable-hdpi/ic_emoji_foods_normal_light.png
new file mode 100644
index 00000000000..2f07dbb6580
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_foods_normal_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_nature_activated_dark.png b/res/drawable-hdpi/ic_emoji_nature_activated_dark.png
index 8ae67c762a4..8e970200bfa 100644
Binary files a/res/drawable-hdpi/ic_emoji_nature_activated_dark.png and b/res/drawable-hdpi/ic_emoji_nature_activated_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_nature_activated_light.png b/res/drawable-hdpi/ic_emoji_nature_activated_light.png
index 5d02a02a30a..b6f53b41dba 100644
Binary files a/res/drawable-hdpi/ic_emoji_nature_activated_light.png and b/res/drawable-hdpi/ic_emoji_nature_activated_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_nature_normal_dark.png b/res/drawable-hdpi/ic_emoji_nature_normal_dark.png
index fd22d38a4f2..90ca0acb571 100644
Binary files a/res/drawable-hdpi/ic_emoji_nature_normal_dark.png and b/res/drawable-hdpi/ic_emoji_nature_normal_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_nature_normal_light.png b/res/drawable-hdpi/ic_emoji_nature_normal_light.png
index 2a939505236..8e970200bfa 100644
Binary files a/res/drawable-hdpi/ic_emoji_nature_normal_light.png and b/res/drawable-hdpi/ic_emoji_nature_normal_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_object_activated_dark.png b/res/drawable-hdpi/ic_emoji_object_activated_dark.png
new file mode 100644
index 00000000000..823394d6e7b
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_object_activated_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_object_activated_light.png b/res/drawable-hdpi/ic_emoji_object_activated_light.png
new file mode 100644
index 00000000000..2ece8ceadab
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_object_activated_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_object_normal_dark.png b/res/drawable-hdpi/ic_emoji_object_normal_dark.png
new file mode 100644
index 00000000000..23f6b43a08a
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_object_normal_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_object_normal_light.png b/res/drawable-hdpi/ic_emoji_object_normal_light.png
new file mode 100644
index 00000000000..823394d6e7b
Binary files /dev/null and b/res/drawable-hdpi/ic_emoji_object_normal_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_people_activated_dark.png b/res/drawable-hdpi/ic_emoji_people_activated_dark.png
index e70241562c1..787d0002cf8 100644
Binary files a/res/drawable-hdpi/ic_emoji_people_activated_dark.png and b/res/drawable-hdpi/ic_emoji_people_activated_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_people_activated_light.png b/res/drawable-hdpi/ic_emoji_people_activated_light.png
index b16705c5f80..262ea943a2c 100644
Binary files a/res/drawable-hdpi/ic_emoji_people_activated_light.png and b/res/drawable-hdpi/ic_emoji_people_activated_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_people_normal_dark.png b/res/drawable-hdpi/ic_emoji_people_normal_dark.png
index aea6cfe795a..e581af307a9 100644
Binary files a/res/drawable-hdpi/ic_emoji_people_normal_dark.png and b/res/drawable-hdpi/ic_emoji_people_normal_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_people_normal_light.png b/res/drawable-hdpi/ic_emoji_people_normal_light.png
index 00bc3b6d00a..787d0002cf8 100644
Binary files a/res/drawable-hdpi/ic_emoji_people_normal_light.png and b/res/drawable-hdpi/ic_emoji_people_normal_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_places_activated_dark.png b/res/drawable-hdpi/ic_emoji_places_activated_dark.png
index b4683d11c14..721281d84f9 100644
Binary files a/res/drawable-hdpi/ic_emoji_places_activated_dark.png and b/res/drawable-hdpi/ic_emoji_places_activated_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_places_activated_light.png b/res/drawable-hdpi/ic_emoji_places_activated_light.png
index f6d936827d1..78a4a39e007 100644
Binary files a/res/drawable-hdpi/ic_emoji_places_activated_light.png and b/res/drawable-hdpi/ic_emoji_places_activated_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_places_normal_dark.png b/res/drawable-hdpi/ic_emoji_places_normal_dark.png
index 4527cdefced..1744eb741c3 100644
Binary files a/res/drawable-hdpi/ic_emoji_places_normal_dark.png and b/res/drawable-hdpi/ic_emoji_places_normal_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_places_normal_light.png b/res/drawable-hdpi/ic_emoji_places_normal_light.png
index ebcfd5a2915..721281d84f9 100644
Binary files a/res/drawable-hdpi/ic_emoji_places_normal_light.png and b/res/drawable-hdpi/ic_emoji_places_normal_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_symbols_activated_dark.png b/res/drawable-hdpi/ic_emoji_symbols_activated_dark.png
index 9738d5d6a8f..05fe46c8bfc 100644
Binary files a/res/drawable-hdpi/ic_emoji_symbols_activated_dark.png and b/res/drawable-hdpi/ic_emoji_symbols_activated_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_symbols_activated_light.png b/res/drawable-hdpi/ic_emoji_symbols_activated_light.png
index dbe027f33c5..76c8b1ba027 100644
Binary files a/res/drawable-hdpi/ic_emoji_symbols_activated_light.png and b/res/drawable-hdpi/ic_emoji_symbols_activated_light.png differ
diff --git a/res/drawable-hdpi/ic_emoji_symbols_normal_dark.png b/res/drawable-hdpi/ic_emoji_symbols_normal_dark.png
index 7c768717c71..6f56d2d57f0 100644
Binary files a/res/drawable-hdpi/ic_emoji_symbols_normal_dark.png and b/res/drawable-hdpi/ic_emoji_symbols_normal_dark.png differ
diff --git a/res/drawable-hdpi/ic_emoji_symbols_normal_light.png b/res/drawable-hdpi/ic_emoji_symbols_normal_light.png
index dddaa949686..05fe46c8bfc 100644
Binary files a/res/drawable-hdpi/ic_emoji_symbols_normal_light.png and b/res/drawable-hdpi/ic_emoji_symbols_normal_light.png differ
diff --git a/res/drawable-hdpi/ic_flag_white_24dp.png b/res/drawable-hdpi/ic_flag_white_24dp.png
new file mode 100644
index 00000000000..f0f86ad04e6
Binary files /dev/null and b/res/drawable-hdpi/ic_flag_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_gif_white_36dp.png b/res/drawable-hdpi/ic_gif_white_36dp.png
new file mode 100644
index 00000000000..17b6ed692e2
Binary files /dev/null and b/res/drawable-hdpi/ic_gif_white_36dp.png differ
diff --git a/res/drawable-hdpi/ic_hourglass_empty_white_18dp.png b/res/drawable-hdpi/ic_hourglass_empty_white_18dp.png
new file mode 100644
index 00000000000..785feac7dbf
Binary files /dev/null and b/res/drawable-hdpi/ic_hourglass_empty_white_18dp.png differ
diff --git a/res/drawable-hdpi/ic_hourglass_full_white_18dp.png b/res/drawable-hdpi/ic_hourglass_full_white_18dp.png
new file mode 100644
index 00000000000..323c14dc337
Binary files /dev/null and b/res/drawable-hdpi/ic_hourglass_full_white_18dp.png differ
diff --git a/res/drawable-hdpi/ic_lightbulb_outline_white_24dp.png b/res/drawable-hdpi/ic_lightbulb_outline_white_24dp.png
new file mode 100644
index 00000000000..c9dd4c1ec0b
Binary files /dev/null and b/res/drawable-hdpi/ic_lightbulb_outline_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_local_dining_white_24dp.png b/res/drawable-hdpi/ic_local_dining_white_24dp.png
new file mode 100644
index 00000000000..04dec6088ba
Binary files /dev/null and b/res/drawable-hdpi/ic_local_dining_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_menu_lock_dark.png b/res/drawable-hdpi/ic_menu_lock_dark.png
new file mode 100644
index 00000000000..de260b90692
Binary files /dev/null and b/res/drawable-hdpi/ic_menu_lock_dark.png differ
diff --git a/res/drawable-hdpi/ic_menu_lock_holo_dark.png b/res/drawable-hdpi/ic_menu_lock_holo_dark.png
deleted file mode 100644
index ed62fb8e8d1..00000000000
Binary files a/res/drawable-hdpi/ic_menu_lock_holo_dark.png and /dev/null differ
diff --git a/res/drawable-hdpi/ic_pets_white_24dp.png b/res/drawable-hdpi/ic_pets_white_24dp.png
new file mode 100644
index 00000000000..9094bb55a58
Binary files /dev/null and b/res/drawable-hdpi/ic_pets_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_photo_library_white_24dp.png b/res/drawable-hdpi/ic_photo_library_white_24dp.png
new file mode 100644
index 00000000000..c4a2229e94c
Binary files /dev/null and b/res/drawable-hdpi/ic_photo_library_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_play_circle_outline_white_48dp.png b/res/drawable-hdpi/ic_play_circle_outline_white_48dp.png
new file mode 100644
index 00000000000..6e1b578c54d
Binary files /dev/null and b/res/drawable-hdpi/ic_play_circle_outline_white_48dp.png differ
diff --git a/res/drawable-hdpi/ic_replay_white_24dp.png b/res/drawable-hdpi/ic_replay_white_24dp.png
new file mode 100644
index 00000000000..5ef425a1708
Binary files /dev/null and b/res/drawable-hdpi/ic_replay_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_security_white_24dp.png b/res/drawable-hdpi/ic_security_white_24dp.png
new file mode 100644
index 00000000000..262800a4d89
Binary files /dev/null and b/res/drawable-hdpi/ic_security_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_share_white_24dp.png b/res/drawable-hdpi/ic_share_white_24dp.png
new file mode 100644
index 00000000000..b09a6926de5
Binary files /dev/null and b/res/drawable-hdpi/ic_share_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_tag_faces_white_24dp.png b/res/drawable-hdpi/ic_tag_faces_white_24dp.png
new file mode 100644
index 00000000000..3aeae65b146
Binary files /dev/null and b/res/drawable-hdpi/ic_tag_faces_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_text_fields_white_24dp.png b/res/drawable-hdpi/ic_text_fields_white_24dp.png
new file mode 100644
index 00000000000..a675d51c6e5
Binary files /dev/null and b/res/drawable-hdpi/ic_text_fields_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_timer_off_white_24dp.png b/res/drawable-hdpi/ic_timer_off_white_24dp.png
new file mode 100644
index 00000000000..60136f7b519
Binary files /dev/null and b/res/drawable-hdpi/ic_timer_off_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_timer_white_24dp.png b/res/drawable-hdpi/ic_timer_white_24dp.png
new file mode 100644
index 00000000000..10619fc8c5c
Binary files /dev/null and b/res/drawable-hdpi/ic_timer_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_view_stream_white_24dp.png b/res/drawable-hdpi/ic_view_stream_white_24dp.png
new file mode 100644
index 00000000000..857becfc246
Binary files /dev/null and b/res/drawable-hdpi/ic_view_stream_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_wb_sunny_white_24dp.png b/res/drawable-hdpi/ic_wb_sunny_white_24dp.png
new file mode 100644
index 00000000000..e0bdc4934da
Binary files /dev/null and b/res/drawable-hdpi/ic_wb_sunny_white_24dp.png differ
diff --git a/res/drawable-hdpi/ic_work_white_24dp.png b/res/drawable-hdpi/ic_work_white_24dp.png
new file mode 100644
index 00000000000..87c5a053d1a
Binary files /dev/null and b/res/drawable-hdpi/ic_work_white_24dp.png differ
diff --git a/res/drawable-hdpi/icon_cached.png b/res/drawable-hdpi/icon_cached.png
new file mode 100644
index 00000000000..d319ca5216a
Binary files /dev/null and b/res/drawable-hdpi/icon_cached.png differ
diff --git a/res/drawable-hdpi/poweredby_giphy.png b/res/drawable-hdpi/poweredby_giphy.png
new file mode 100644
index 00000000000..df5e4f06e13
Binary files /dev/null and b/res/drawable-hdpi/poweredby_giphy.png differ
diff --git a/res/drawable-mdpi-v11/icon_cached.png b/res/drawable-mdpi-v11/icon_cached.png
index 994f08c782b..5654c491471 100644
Binary files a/res/drawable-mdpi-v11/icon_cached.png and b/res/drawable-mdpi-v11/icon_cached.png differ
diff --git a/res/drawable-mdpi-v9/icon_cached.png b/res/drawable-mdpi-v9/icon_cached.png
deleted file mode 100644
index dd146f705f2..00000000000
Binary files a/res/drawable-mdpi-v9/icon_cached.png and /dev/null differ
diff --git a/res/drawable-mdpi/ic_brush_white_24dp.png b/res/drawable-mdpi/ic_brush_white_24dp.png
new file mode 100644
index 00000000000..ae4dd03dc9c
Binary files /dev/null and b/res/drawable-mdpi/ic_brush_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_check_white_36dp.png b/res/drawable-mdpi/ic_check_white_36dp.png
new file mode 100644
index 00000000000..729f2901047
Binary files /dev/null and b/res/drawable-mdpi/ic_check_white_36dp.png differ
diff --git a/res/drawable-mdpi/ic_check_white_48dp.png b/res/drawable-mdpi/ic_check_white_48dp.png
new file mode 100644
index 00000000000..3b2b65d2629
Binary files /dev/null and b/res/drawable-mdpi/ic_check_white_48dp.png differ
diff --git a/res/drawable-mdpi/ic_circle_fill_white_48dp.png b/res/drawable-mdpi/ic_circle_fill_white_48dp.png
new file mode 100644
index 00000000000..783f82cf1e7
Binary files /dev/null and b/res/drawable-mdpi/ic_circle_fill_white_48dp.png differ
diff --git a/res/drawable-mdpi/ic_close_white_48dp.png b/res/drawable-mdpi/ic_close_white_48dp.png
new file mode 100644
index 00000000000..b7c7ffd0e79
Binary files /dev/null and b/res/drawable-mdpi/ic_close_white_48dp.png differ
diff --git a/res/drawable-mdpi/ic_dashboard_white_24dp.png b/res/drawable-mdpi/ic_dashboard_white_24dp.png
new file mode 100644
index 00000000000..1614347a829
Binary files /dev/null and b/res/drawable-mdpi/ic_dashboard_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_emoji_activity_activated_dark.png b/res/drawable-mdpi/ic_emoji_activity_activated_dark.png
new file mode 100644
index 00000000000..4a1574abea1
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_activity_activated_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_activity_activated_light.png b/res/drawable-mdpi/ic_emoji_activity_activated_light.png
new file mode 100644
index 00000000000..677223f79f0
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_activity_activated_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_activity_normal_dark.png b/res/drawable-mdpi/ic_emoji_activity_normal_dark.png
new file mode 100644
index 00000000000..bfcafda8a90
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_activity_normal_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_activity_normal_light.png b/res/drawable-mdpi/ic_emoji_activity_normal_light.png
new file mode 100644
index 00000000000..4a1574abea1
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_activity_normal_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_flag_activated_dark.png b/res/drawable-mdpi/ic_emoji_flag_activated_dark.png
new file mode 100644
index 00000000000..ae1ca3f9d48
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_flag_activated_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_flag_activated_light.png b/res/drawable-mdpi/ic_emoji_flag_activated_light.png
new file mode 100644
index 00000000000..2bc9f8f09ba
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_flag_activated_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_flag_normal_dark.png b/res/drawable-mdpi/ic_emoji_flag_normal_dark.png
new file mode 100644
index 00000000000..ede66c9761b
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_flag_normal_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_flag_normal_light.png b/res/drawable-mdpi/ic_emoji_flag_normal_light.png
new file mode 100644
index 00000000000..ae1ca3f9d48
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_flag_normal_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_foods_activated_dark.png b/res/drawable-mdpi/ic_emoji_foods_activated_dark.png
new file mode 100644
index 00000000000..785deee0182
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_foods_activated_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_foods_activated_light.png b/res/drawable-mdpi/ic_emoji_foods_activated_light.png
new file mode 100644
index 00000000000..68efa0a50e2
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_foods_activated_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_foods_normal_dark.png b/res/drawable-mdpi/ic_emoji_foods_normal_dark.png
new file mode 100644
index 00000000000..aed613d5bc6
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_foods_normal_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_foods_normal_light.png b/res/drawable-mdpi/ic_emoji_foods_normal_light.png
new file mode 100644
index 00000000000..785deee0182
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_foods_normal_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_nature_activated_dark.png b/res/drawable-mdpi/ic_emoji_nature_activated_dark.png
index 04d0559515d..7de887a96e3 100644
Binary files a/res/drawable-mdpi/ic_emoji_nature_activated_dark.png and b/res/drawable-mdpi/ic_emoji_nature_activated_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_nature_activated_light.png b/res/drawable-mdpi/ic_emoji_nature_activated_light.png
index c37a2334542..234f2d98029 100644
Binary files a/res/drawable-mdpi/ic_emoji_nature_activated_light.png and b/res/drawable-mdpi/ic_emoji_nature_activated_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_nature_normal_dark.png b/res/drawable-mdpi/ic_emoji_nature_normal_dark.png
index 2e460a0bd44..d63616d118e 100644
Binary files a/res/drawable-mdpi/ic_emoji_nature_normal_dark.png and b/res/drawable-mdpi/ic_emoji_nature_normal_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_nature_normal_light.png b/res/drawable-mdpi/ic_emoji_nature_normal_light.png
index e1e93c7563b..7de887a96e3 100644
Binary files a/res/drawable-mdpi/ic_emoji_nature_normal_light.png and b/res/drawable-mdpi/ic_emoji_nature_normal_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_object_activated_dark.png b/res/drawable-mdpi/ic_emoji_object_activated_dark.png
new file mode 100644
index 00000000000..6206af2b2bc
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_object_activated_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_object_activated_light.png b/res/drawable-mdpi/ic_emoji_object_activated_light.png
new file mode 100644
index 00000000000..11f25dcc69a
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_object_activated_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_object_normal_dark.png b/res/drawable-mdpi/ic_emoji_object_normal_dark.png
new file mode 100644
index 00000000000..cdc756575c3
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_object_normal_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_object_normal_light.png b/res/drawable-mdpi/ic_emoji_object_normal_light.png
new file mode 100644
index 00000000000..6206af2b2bc
Binary files /dev/null and b/res/drawable-mdpi/ic_emoji_object_normal_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_people_activated_dark.png b/res/drawable-mdpi/ic_emoji_people_activated_dark.png
index faf91ff98e9..91cae22a776 100644
Binary files a/res/drawable-mdpi/ic_emoji_people_activated_dark.png and b/res/drawable-mdpi/ic_emoji_people_activated_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_people_activated_light.png b/res/drawable-mdpi/ic_emoji_people_activated_light.png
index 4ca14de904b..353a3100a2a 100644
Binary files a/res/drawable-mdpi/ic_emoji_people_activated_light.png and b/res/drawable-mdpi/ic_emoji_people_activated_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_people_normal_dark.png b/res/drawable-mdpi/ic_emoji_people_normal_dark.png
index c027acc1b09..851df9e9649 100644
Binary files a/res/drawable-mdpi/ic_emoji_people_normal_dark.png and b/res/drawable-mdpi/ic_emoji_people_normal_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_people_normal_light.png b/res/drawable-mdpi/ic_emoji_people_normal_light.png
index 94009c3647d..91cae22a776 100644
Binary files a/res/drawable-mdpi/ic_emoji_people_normal_light.png and b/res/drawable-mdpi/ic_emoji_people_normal_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_places_activated_dark.png b/res/drawable-mdpi/ic_emoji_places_activated_dark.png
index d000e34b455..ceab263b395 100644
Binary files a/res/drawable-mdpi/ic_emoji_places_activated_dark.png and b/res/drawable-mdpi/ic_emoji_places_activated_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_places_activated_light.png b/res/drawable-mdpi/ic_emoji_places_activated_light.png
index 3fc3956d904..23ae27f1408 100644
Binary files a/res/drawable-mdpi/ic_emoji_places_activated_light.png and b/res/drawable-mdpi/ic_emoji_places_activated_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_places_normal_dark.png b/res/drawable-mdpi/ic_emoji_places_normal_dark.png
index 137813ec4d6..67f90d42f67 100644
Binary files a/res/drawable-mdpi/ic_emoji_places_normal_dark.png and b/res/drawable-mdpi/ic_emoji_places_normal_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_places_normal_light.png b/res/drawable-mdpi/ic_emoji_places_normal_light.png
index 59acd0078e7..ceab263b395 100644
Binary files a/res/drawable-mdpi/ic_emoji_places_normal_light.png and b/res/drawable-mdpi/ic_emoji_places_normal_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_symbols_activated_dark.png b/res/drawable-mdpi/ic_emoji_symbols_activated_dark.png
index a2a9a985563..3aca48546c7 100644
Binary files a/res/drawable-mdpi/ic_emoji_symbols_activated_dark.png and b/res/drawable-mdpi/ic_emoji_symbols_activated_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_symbols_activated_light.png b/res/drawable-mdpi/ic_emoji_symbols_activated_light.png
index 7cbd256cb15..3db7b5a0fbb 100644
Binary files a/res/drawable-mdpi/ic_emoji_symbols_activated_light.png and b/res/drawable-mdpi/ic_emoji_symbols_activated_light.png differ
diff --git a/res/drawable-mdpi/ic_emoji_symbols_normal_dark.png b/res/drawable-mdpi/ic_emoji_symbols_normal_dark.png
index 62fef53d337..aa56d6b40f7 100644
Binary files a/res/drawable-mdpi/ic_emoji_symbols_normal_dark.png and b/res/drawable-mdpi/ic_emoji_symbols_normal_dark.png differ
diff --git a/res/drawable-mdpi/ic_emoji_symbols_normal_light.png b/res/drawable-mdpi/ic_emoji_symbols_normal_light.png
index 39956edf3ed..3aca48546c7 100644
Binary files a/res/drawable-mdpi/ic_emoji_symbols_normal_light.png and b/res/drawable-mdpi/ic_emoji_symbols_normal_light.png differ
diff --git a/res/drawable-mdpi/ic_flag_white_24dp.png b/res/drawable-mdpi/ic_flag_white_24dp.png
new file mode 100644
index 00000000000..0d2c5f65c1a
Binary files /dev/null and b/res/drawable-mdpi/ic_flag_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_gif_white_36dp.png b/res/drawable-mdpi/ic_gif_white_36dp.png
new file mode 100644
index 00000000000..0978a141a9f
Binary files /dev/null and b/res/drawable-mdpi/ic_gif_white_36dp.png differ
diff --git a/res/drawable-mdpi/ic_hourglass_empty_white_18dp.png b/res/drawable-mdpi/ic_hourglass_empty_white_18dp.png
new file mode 100644
index 00000000000..e1db32b3cbc
Binary files /dev/null and b/res/drawable-mdpi/ic_hourglass_empty_white_18dp.png differ
diff --git a/res/drawable-mdpi/ic_hourglass_full_white_18dp.png b/res/drawable-mdpi/ic_hourglass_full_white_18dp.png
new file mode 100644
index 00000000000..1b7feed9bb9
Binary files /dev/null and b/res/drawable-mdpi/ic_hourglass_full_white_18dp.png differ
diff --git a/res/drawable-mdpi/ic_lightbulb_outline_white_24dp.png b/res/drawable-mdpi/ic_lightbulb_outline_white_24dp.png
new file mode 100644
index 00000000000..91702b1d6b3
Binary files /dev/null and b/res/drawable-mdpi/ic_lightbulb_outline_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_local_dining_white_24dp.png b/res/drawable-mdpi/ic_local_dining_white_24dp.png
new file mode 100644
index 00000000000..5b68bb59ae2
Binary files /dev/null and b/res/drawable-mdpi/ic_local_dining_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_menu_lock_dark.png b/res/drawable-mdpi/ic_menu_lock_dark.png
new file mode 100644
index 00000000000..530ca8c6e6d
Binary files /dev/null and b/res/drawable-mdpi/ic_menu_lock_dark.png differ
diff --git a/res/drawable-mdpi/ic_menu_lock_holo_dark.png b/res/drawable-mdpi/ic_menu_lock_holo_dark.png
deleted file mode 100644
index 771cfc179d0..00000000000
Binary files a/res/drawable-mdpi/ic_menu_lock_holo_dark.png and /dev/null differ
diff --git a/res/drawable-mdpi/ic_pets_white_24dp.png b/res/drawable-mdpi/ic_pets_white_24dp.png
new file mode 100644
index 00000000000..1194342fb55
Binary files /dev/null and b/res/drawable-mdpi/ic_pets_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_photo_library_white_24dp.png b/res/drawable-mdpi/ic_photo_library_white_24dp.png
new file mode 100644
index 00000000000..02ef4cdb008
Binary files /dev/null and b/res/drawable-mdpi/ic_photo_library_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_play_circle_outline_white_48dp.png b/res/drawable-mdpi/ic_play_circle_outline_white_48dp.png
new file mode 100644
index 00000000000..615b80d0854
Binary files /dev/null and b/res/drawable-mdpi/ic_play_circle_outline_white_48dp.png differ
diff --git a/res/drawable-mdpi/ic_replay_white_24dp.png b/res/drawable-mdpi/ic_replay_white_24dp.png
new file mode 100644
index 00000000000..5a79970a98b
Binary files /dev/null and b/res/drawable-mdpi/ic_replay_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_security_white_24dp.png b/res/drawable-mdpi/ic_security_white_24dp.png
new file mode 100644
index 00000000000..44ee7346e38
Binary files /dev/null and b/res/drawable-mdpi/ic_security_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_share_white_24dp.png b/res/drawable-mdpi/ic_share_white_24dp.png
new file mode 100644
index 00000000000..e944fd70c42
Binary files /dev/null and b/res/drawable-mdpi/ic_share_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_tag_faces_white_24dp.png b/res/drawable-mdpi/ic_tag_faces_white_24dp.png
new file mode 100644
index 00000000000..e6cc505f9fc
Binary files /dev/null and b/res/drawable-mdpi/ic_tag_faces_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_text_fields_white_24dp.png b/res/drawable-mdpi/ic_text_fields_white_24dp.png
new file mode 100644
index 00000000000..1b45ea0b414
Binary files /dev/null and b/res/drawable-mdpi/ic_text_fields_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_timer_off_white_24dp.png b/res/drawable-mdpi/ic_timer_off_white_24dp.png
new file mode 100644
index 00000000000..b3a619767ca
Binary files /dev/null and b/res/drawable-mdpi/ic_timer_off_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_timer_white_24dp.png b/res/drawable-mdpi/ic_timer_white_24dp.png
new file mode 100644
index 00000000000..72e1320c468
Binary files /dev/null and b/res/drawable-mdpi/ic_timer_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_view_stream_white_24dp.png b/res/drawable-mdpi/ic_view_stream_white_24dp.png
new file mode 100644
index 00000000000..a0a663458ae
Binary files /dev/null and b/res/drawable-mdpi/ic_view_stream_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_wb_sunny_white_24dp.png b/res/drawable-mdpi/ic_wb_sunny_white_24dp.png
new file mode 100644
index 00000000000..58458b22a5a
Binary files /dev/null and b/res/drawable-mdpi/ic_wb_sunny_white_24dp.png differ
diff --git a/res/drawable-mdpi/ic_work_white_24dp.png b/res/drawable-mdpi/ic_work_white_24dp.png
new file mode 100644
index 00000000000..ba06d79a766
Binary files /dev/null and b/res/drawable-mdpi/ic_work_white_24dp.png differ
diff --git a/res/drawable-mdpi/icon_cached.png b/res/drawable-mdpi/icon_cached.png
new file mode 100644
index 00000000000..07d3a7e9d58
Binary files /dev/null and b/res/drawable-mdpi/icon_cached.png differ
diff --git a/res/drawable-mdpi/poweredby_giphy.png b/res/drawable-mdpi/poweredby_giphy.png
new file mode 100644
index 00000000000..0cee864a36e
Binary files /dev/null and b/res/drawable-mdpi/poweredby_giphy.png differ
diff --git a/res/drawable-xhdpi-v11/icon_cached.png b/res/drawable-xhdpi-v11/icon_cached.png
index b8c5e402fb1..66a4b60dd38 100644
Binary files a/res/drawable-xhdpi-v11/icon_cached.png and b/res/drawable-xhdpi-v11/icon_cached.png differ
diff --git a/res/drawable-xhdpi/ic_brush_white_24dp.png b/res/drawable-xhdpi/ic_brush_white_24dp.png
new file mode 100644
index 00000000000..6a7239478f7
Binary files /dev/null and b/res/drawable-xhdpi/ic_brush_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_check_white_36dp.png b/res/drawable-xhdpi/ic_check_white_36dp.png
new file mode 100644
index 00000000000..2c2ad771f72
Binary files /dev/null and b/res/drawable-xhdpi/ic_check_white_36dp.png differ
diff --git a/res/drawable-xhdpi/ic_check_white_48dp.png b/res/drawable-xhdpi/ic_check_white_48dp.png
new file mode 100644
index 00000000000..d670618c7e9
Binary files /dev/null and b/res/drawable-xhdpi/ic_check_white_48dp.png differ
diff --git a/res/drawable-xhdpi/ic_circle_fill_white_48dp.png b/res/drawable-xhdpi/ic_circle_fill_white_48dp.png
new file mode 100644
index 00000000000..0bd9683860e
Binary files /dev/null and b/res/drawable-xhdpi/ic_circle_fill_white_48dp.png differ
diff --git a/res/drawable-xhdpi/ic_close_white_48dp.png b/res/drawable-xhdpi/ic_close_white_48dp.png
new file mode 100644
index 00000000000..39641921925
Binary files /dev/null and b/res/drawable-xhdpi/ic_close_white_48dp.png differ
diff --git a/res/drawable-xhdpi/ic_dashboard_white_24dp.png b/res/drawable-xhdpi/ic_dashboard_white_24dp.png
new file mode 100644
index 00000000000..da1a5852c9d
Binary files /dev/null and b/res/drawable-xhdpi/ic_dashboard_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_activity_activated_dark.png b/res/drawable-xhdpi/ic_emoji_activity_activated_dark.png
new file mode 100644
index 00000000000..1d04bc797d1
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_activity_activated_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_activity_activated_light.png b/res/drawable-xhdpi/ic_emoji_activity_activated_light.png
new file mode 100644
index 00000000000..7001af641f3
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_activity_activated_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_activity_normal_dark.png b/res/drawable-xhdpi/ic_emoji_activity_normal_dark.png
new file mode 100644
index 00000000000..68b5d8d2ff8
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_activity_normal_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_activity_normal_light.png b/res/drawable-xhdpi/ic_emoji_activity_normal_light.png
new file mode 100644
index 00000000000..1d04bc797d1
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_activity_normal_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_flag_activated_dark.png b/res/drawable-xhdpi/ic_emoji_flag_activated_dark.png
new file mode 100644
index 00000000000..471d644f843
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_flag_activated_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_flag_activated_light.png b/res/drawable-xhdpi/ic_emoji_flag_activated_light.png
new file mode 100644
index 00000000000..58a1b7bf2d6
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_flag_activated_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_flag_normal_dark.png b/res/drawable-xhdpi/ic_emoji_flag_normal_dark.png
new file mode 100644
index 00000000000..597de87f52e
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_flag_normal_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_flag_normal_light.png b/res/drawable-xhdpi/ic_emoji_flag_normal_light.png
new file mode 100644
index 00000000000..471d644f843
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_flag_normal_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_foods_activated_dark.png b/res/drawable-xhdpi/ic_emoji_foods_activated_dark.png
new file mode 100644
index 00000000000..a49d4f55b10
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_foods_activated_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_foods_activated_light.png b/res/drawable-xhdpi/ic_emoji_foods_activated_light.png
new file mode 100644
index 00000000000..8ad2915cc88
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_foods_activated_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_foods_normal_dark.png b/res/drawable-xhdpi/ic_emoji_foods_normal_dark.png
new file mode 100644
index 00000000000..e1cac3ffc7e
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_foods_normal_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_foods_normal_light.png b/res/drawable-xhdpi/ic_emoji_foods_normal_light.png
new file mode 100644
index 00000000000..a49d4f55b10
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_foods_normal_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_nature_activated_dark.png b/res/drawable-xhdpi/ic_emoji_nature_activated_dark.png
index 423ee33fa37..0b409d57ceb 100644
Binary files a/res/drawable-xhdpi/ic_emoji_nature_activated_dark.png and b/res/drawable-xhdpi/ic_emoji_nature_activated_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_nature_activated_light.png b/res/drawable-xhdpi/ic_emoji_nature_activated_light.png
index 2ed1a5447dd..c4e2e997789 100644
Binary files a/res/drawable-xhdpi/ic_emoji_nature_activated_light.png and b/res/drawable-xhdpi/ic_emoji_nature_activated_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_nature_normal_dark.png b/res/drawable-xhdpi/ic_emoji_nature_normal_dark.png
index 8b9a9a1b176..8bce7885657 100644
Binary files a/res/drawable-xhdpi/ic_emoji_nature_normal_dark.png and b/res/drawable-xhdpi/ic_emoji_nature_normal_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_nature_normal_light.png b/res/drawable-xhdpi/ic_emoji_nature_normal_light.png
index 711036f0323..0b409d57ceb 100644
Binary files a/res/drawable-xhdpi/ic_emoji_nature_normal_light.png and b/res/drawable-xhdpi/ic_emoji_nature_normal_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_object_activated_dark.png b/res/drawable-xhdpi/ic_emoji_object_activated_dark.png
new file mode 100644
index 00000000000..e7afca3f6ec
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_object_activated_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_object_activated_light.png b/res/drawable-xhdpi/ic_emoji_object_activated_light.png
new file mode 100644
index 00000000000..1b51f9e1282
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_object_activated_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_object_normal_dark.png b/res/drawable-xhdpi/ic_emoji_object_normal_dark.png
new file mode 100644
index 00000000000..02e7ea6d44a
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_object_normal_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_object_normal_light.png b/res/drawable-xhdpi/ic_emoji_object_normal_light.png
new file mode 100644
index 00000000000..e7afca3f6ec
Binary files /dev/null and b/res/drawable-xhdpi/ic_emoji_object_normal_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_people_activated_dark.png b/res/drawable-xhdpi/ic_emoji_people_activated_dark.png
index 91dd01151f0..693a1c69f6a 100644
Binary files a/res/drawable-xhdpi/ic_emoji_people_activated_dark.png and b/res/drawable-xhdpi/ic_emoji_people_activated_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_people_activated_light.png b/res/drawable-xhdpi/ic_emoji_people_activated_light.png
index 965a7c45d2e..6ae3d264c91 100644
Binary files a/res/drawable-xhdpi/ic_emoji_people_activated_light.png and b/res/drawable-xhdpi/ic_emoji_people_activated_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_people_normal_dark.png b/res/drawable-xhdpi/ic_emoji_people_normal_dark.png
index d6f523aa29f..fe91469aabe 100644
Binary files a/res/drawable-xhdpi/ic_emoji_people_normal_dark.png and b/res/drawable-xhdpi/ic_emoji_people_normal_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_people_normal_light.png b/res/drawable-xhdpi/ic_emoji_people_normal_light.png
index 6e5078b5e4e..693a1c69f6a 100644
Binary files a/res/drawable-xhdpi/ic_emoji_people_normal_light.png and b/res/drawable-xhdpi/ic_emoji_people_normal_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_places_activated_dark.png b/res/drawable-xhdpi/ic_emoji_places_activated_dark.png
index fd3022a28e4..0b368d62fb6 100644
Binary files a/res/drawable-xhdpi/ic_emoji_places_activated_dark.png and b/res/drawable-xhdpi/ic_emoji_places_activated_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_places_activated_light.png b/res/drawable-xhdpi/ic_emoji_places_activated_light.png
index 098f36f9c1f..d4c49d78f29 100644
Binary files a/res/drawable-xhdpi/ic_emoji_places_activated_light.png and b/res/drawable-xhdpi/ic_emoji_places_activated_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_places_normal_dark.png b/res/drawable-xhdpi/ic_emoji_places_normal_dark.png
index 425e2cc036d..fc67497e112 100644
Binary files a/res/drawable-xhdpi/ic_emoji_places_normal_dark.png and b/res/drawable-xhdpi/ic_emoji_places_normal_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_places_normal_light.png b/res/drawable-xhdpi/ic_emoji_places_normal_light.png
index 86188352fde..0b368d62fb6 100644
Binary files a/res/drawable-xhdpi/ic_emoji_places_normal_light.png and b/res/drawable-xhdpi/ic_emoji_places_normal_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_symbols_activated_dark.png b/res/drawable-xhdpi/ic_emoji_symbols_activated_dark.png
index 664a7375b93..a28e4a84ad7 100644
Binary files a/res/drawable-xhdpi/ic_emoji_symbols_activated_dark.png and b/res/drawable-xhdpi/ic_emoji_symbols_activated_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_symbols_activated_light.png b/res/drawable-xhdpi/ic_emoji_symbols_activated_light.png
index 13b587852cb..a6f6ebc4e07 100644
Binary files a/res/drawable-xhdpi/ic_emoji_symbols_activated_light.png and b/res/drawable-xhdpi/ic_emoji_symbols_activated_light.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_symbols_normal_dark.png b/res/drawable-xhdpi/ic_emoji_symbols_normal_dark.png
index cf5c6747db2..7c016ef6654 100644
Binary files a/res/drawable-xhdpi/ic_emoji_symbols_normal_dark.png and b/res/drawable-xhdpi/ic_emoji_symbols_normal_dark.png differ
diff --git a/res/drawable-xhdpi/ic_emoji_symbols_normal_light.png b/res/drawable-xhdpi/ic_emoji_symbols_normal_light.png
index eaea7bd3333..a28e4a84ad7 100644
Binary files a/res/drawable-xhdpi/ic_emoji_symbols_normal_light.png and b/res/drawable-xhdpi/ic_emoji_symbols_normal_light.png differ
diff --git a/res/drawable-xhdpi/ic_flag_white_24dp.png b/res/drawable-xhdpi/ic_flag_white_24dp.png
new file mode 100644
index 00000000000..23c4bb7f0ad
Binary files /dev/null and b/res/drawable-xhdpi/ic_flag_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_gif_white_36dp.png b/res/drawable-xhdpi/ic_gif_white_36dp.png
new file mode 100644
index 00000000000..acdb6d0b904
Binary files /dev/null and b/res/drawable-xhdpi/ic_gif_white_36dp.png differ
diff --git a/res/drawable-xhdpi/ic_hourglass_empty_white_18dp.png b/res/drawable-xhdpi/ic_hourglass_empty_white_18dp.png
new file mode 100644
index 00000000000..b24e375a5ac
Binary files /dev/null and b/res/drawable-xhdpi/ic_hourglass_empty_white_18dp.png differ
diff --git a/res/drawable-xhdpi/ic_hourglass_full_white_18dp.png b/res/drawable-xhdpi/ic_hourglass_full_white_18dp.png
new file mode 100644
index 00000000000..29ee1d09b3a
Binary files /dev/null and b/res/drawable-xhdpi/ic_hourglass_full_white_18dp.png differ
diff --git a/res/drawable-xhdpi/ic_lightbulb_outline_white_24dp.png b/res/drawable-xhdpi/ic_lightbulb_outline_white_24dp.png
new file mode 100644
index 00000000000..afc7e537a6c
Binary files /dev/null and b/res/drawable-xhdpi/ic_lightbulb_outline_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_local_dining_white_24dp.png b/res/drawable-xhdpi/ic_local_dining_white_24dp.png
new file mode 100644
index 00000000000..e081e1afb81
Binary files /dev/null and b/res/drawable-xhdpi/ic_local_dining_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_menu_lock_dark.png b/res/drawable-xhdpi/ic_menu_lock_dark.png
new file mode 100644
index 00000000000..34b753d5884
Binary files /dev/null and b/res/drawable-xhdpi/ic_menu_lock_dark.png differ
diff --git a/res/drawable-xhdpi/ic_menu_lock_holo_dark.png b/res/drawable-xhdpi/ic_menu_lock_holo_dark.png
deleted file mode 100644
index 36921cf3046..00000000000
Binary files a/res/drawable-xhdpi/ic_menu_lock_holo_dark.png and /dev/null differ
diff --git a/res/drawable-xhdpi/ic_pets_white_24dp.png b/res/drawable-xhdpi/ic_pets_white_24dp.png
new file mode 100644
index 00000000000..f28287f3593
Binary files /dev/null and b/res/drawable-xhdpi/ic_pets_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_photo_library_white_24dp.png b/res/drawable-xhdpi/ic_photo_library_white_24dp.png
new file mode 100644
index 00000000000..4bd2898a839
Binary files /dev/null and b/res/drawable-xhdpi/ic_photo_library_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_play_circle_outline_white_48dp.png b/res/drawable-xhdpi/ic_play_circle_outline_white_48dp.png
new file mode 100644
index 00000000000..516f6432693
Binary files /dev/null and b/res/drawable-xhdpi/ic_play_circle_outline_white_48dp.png differ
diff --git a/res/drawable-xhdpi/ic_replay_white_24dp.png b/res/drawable-xhdpi/ic_replay_white_24dp.png
new file mode 100644
index 00000000000..3b41913257d
Binary files /dev/null and b/res/drawable-xhdpi/ic_replay_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_security_white_24dp.png b/res/drawable-xhdpi/ic_security_white_24dp.png
new file mode 100644
index 00000000000..7e306c303cb
Binary files /dev/null and b/res/drawable-xhdpi/ic_security_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_share_white_24dp.png b/res/drawable-xhdpi/ic_share_white_24dp.png
new file mode 100644
index 00000000000..22a8783e70f
Binary files /dev/null and b/res/drawable-xhdpi/ic_share_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_tag_faces_white_24dp.png b/res/drawable-xhdpi/ic_tag_faces_white_24dp.png
new file mode 100644
index 00000000000..c97abc49f1f
Binary files /dev/null and b/res/drawable-xhdpi/ic_tag_faces_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_text_fields_white_24dp.png b/res/drawable-xhdpi/ic_text_fields_white_24dp.png
new file mode 100644
index 00000000000..612d143869d
Binary files /dev/null and b/res/drawable-xhdpi/ic_text_fields_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_timer_off_white_24dp.png b/res/drawable-xhdpi/ic_timer_off_white_24dp.png
new file mode 100644
index 00000000000..494a59fc8a7
Binary files /dev/null and b/res/drawable-xhdpi/ic_timer_off_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_timer_white_24dp.png b/res/drawable-xhdpi/ic_timer_white_24dp.png
new file mode 100644
index 00000000000..9d239966f32
Binary files /dev/null and b/res/drawable-xhdpi/ic_timer_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_view_stream_white_24dp.png b/res/drawable-xhdpi/ic_view_stream_white_24dp.png
new file mode 100644
index 00000000000..9e640ae5596
Binary files /dev/null and b/res/drawable-xhdpi/ic_view_stream_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_wb_sunny_white_24dp.png b/res/drawable-xhdpi/ic_wb_sunny_white_24dp.png
new file mode 100644
index 00000000000..123f780c711
Binary files /dev/null and b/res/drawable-xhdpi/ic_wb_sunny_white_24dp.png differ
diff --git a/res/drawable-xhdpi/ic_work_white_24dp.png b/res/drawable-xhdpi/ic_work_white_24dp.png
new file mode 100644
index 00000000000..10ddce1027e
Binary files /dev/null and b/res/drawable-xhdpi/ic_work_white_24dp.png differ
diff --git a/res/drawable-xhdpi/icon_cached.png b/res/drawable-xhdpi/icon_cached.png
new file mode 100644
index 00000000000..b34b69604cd
Binary files /dev/null and b/res/drawable-xhdpi/icon_cached.png differ
diff --git a/res/drawable-xhdpi/poweredby_giphy.png b/res/drawable-xhdpi/poweredby_giphy.png
new file mode 100644
index 00000000000..09b38f190f6
Binary files /dev/null and b/res/drawable-xhdpi/poweredby_giphy.png differ
diff --git a/res/drawable-xxhdpi-v11/icon_cached.png b/res/drawable-xxhdpi-v11/icon_cached.png
new file mode 100644
index 00000000000..d17e250790f
Binary files /dev/null and b/res/drawable-xxhdpi-v11/icon_cached.png differ
diff --git a/res/drawable-xxhdpi/ic_brush_white_24dp.png b/res/drawable-xxhdpi/ic_brush_white_24dp.png
new file mode 100644
index 00000000000..300529d20ec
Binary files /dev/null and b/res/drawable-xxhdpi/ic_brush_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_check_white_36dp.png b/res/drawable-xxhdpi/ic_check_white_36dp.png
new file mode 100644
index 00000000000..9b91350bc23
Binary files /dev/null and b/res/drawable-xxhdpi/ic_check_white_36dp.png differ
diff --git a/res/drawable-xxhdpi/ic_check_white_48dp.png b/res/drawable-xxhdpi/ic_check_white_48dp.png
new file mode 100644
index 00000000000..bfd7b82aaa1
Binary files /dev/null and b/res/drawable-xxhdpi/ic_check_white_48dp.png differ
diff --git a/res/drawable-xxhdpi/ic_circle_fill_white_48dp.png b/res/drawable-xxhdpi/ic_circle_fill_white_48dp.png
new file mode 100644
index 00000000000..c83d5fba16a
Binary files /dev/null and b/res/drawable-xxhdpi/ic_circle_fill_white_48dp.png differ
diff --git a/res/drawable-xxhdpi/ic_close_white_48dp.png b/res/drawable-xxhdpi/ic_close_white_48dp.png
new file mode 100644
index 00000000000..4927bc242e2
Binary files /dev/null and b/res/drawable-xxhdpi/ic_close_white_48dp.png differ
diff --git a/res/drawable-xxhdpi/ic_dashboard_white_24dp.png b/res/drawable-xxhdpi/ic_dashboard_white_24dp.png
new file mode 100644
index 00000000000..471aa0db16e
Binary files /dev/null and b/res/drawable-xxhdpi/ic_dashboard_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_activity_activated_dark.png b/res/drawable-xxhdpi/ic_emoji_activity_activated_dark.png
new file mode 100644
index 00000000000..5cf9101c061
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_activity_activated_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_activity_activated_light.png b/res/drawable-xxhdpi/ic_emoji_activity_activated_light.png
new file mode 100644
index 00000000000..76a4aebe5b1
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_activity_activated_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_activity_normal_dark.png b/res/drawable-xxhdpi/ic_emoji_activity_normal_dark.png
new file mode 100644
index 00000000000..6d90599b1f8
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_activity_normal_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_activity_normal_light.png b/res/drawable-xxhdpi/ic_emoji_activity_normal_light.png
new file mode 100644
index 00000000000..5cf9101c061
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_activity_normal_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_flag_activated_dark.png b/res/drawable-xxhdpi/ic_emoji_flag_activated_dark.png
new file mode 100644
index 00000000000..5797242bc03
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_flag_activated_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_flag_activated_light.png b/res/drawable-xxhdpi/ic_emoji_flag_activated_light.png
new file mode 100644
index 00000000000..adf73cf40fc
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_flag_activated_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_flag_normal_dark.png b/res/drawable-xxhdpi/ic_emoji_flag_normal_dark.png
new file mode 100644
index 00000000000..47f75e2cae5
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_flag_normal_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_flag_normal_light.png b/res/drawable-xxhdpi/ic_emoji_flag_normal_light.png
new file mode 100644
index 00000000000..5797242bc03
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_flag_normal_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_foods_activated_dark.png b/res/drawable-xxhdpi/ic_emoji_foods_activated_dark.png
new file mode 100644
index 00000000000..8a0be6d5059
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_foods_activated_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_foods_activated_light.png b/res/drawable-xxhdpi/ic_emoji_foods_activated_light.png
new file mode 100644
index 00000000000..784f603a501
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_foods_activated_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_foods_normal_dark.png b/res/drawable-xxhdpi/ic_emoji_foods_normal_dark.png
new file mode 100644
index 00000000000..ed5571a88ec
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_foods_normal_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_foods_normal_light.png b/res/drawable-xxhdpi/ic_emoji_foods_normal_light.png
new file mode 100644
index 00000000000..8a0be6d5059
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_foods_normal_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_nature_activated_dark.png b/res/drawable-xxhdpi/ic_emoji_nature_activated_dark.png
index 4439faa92ed..15214246c20 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_nature_activated_dark.png and b/res/drawable-xxhdpi/ic_emoji_nature_activated_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_nature_activated_light.png b/res/drawable-xxhdpi/ic_emoji_nature_activated_light.png
index d0ae5eaf31c..65947ba0663 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_nature_activated_light.png and b/res/drawable-xxhdpi/ic_emoji_nature_activated_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_nature_normal_dark.png b/res/drawable-xxhdpi/ic_emoji_nature_normal_dark.png
index 29ac9b5c62d..12a2324fd08 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_nature_normal_dark.png and b/res/drawable-xxhdpi/ic_emoji_nature_normal_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_nature_normal_light.png b/res/drawable-xxhdpi/ic_emoji_nature_normal_light.png
index a881fd5a54c..15214246c20 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_nature_normal_light.png and b/res/drawable-xxhdpi/ic_emoji_nature_normal_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_object_activated_dark.png b/res/drawable-xxhdpi/ic_emoji_object_activated_dark.png
new file mode 100644
index 00000000000..41b8604be63
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_object_activated_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_object_activated_light.png b/res/drawable-xxhdpi/ic_emoji_object_activated_light.png
new file mode 100644
index 00000000000..1979f6513f3
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_object_activated_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_object_normal_dark.png b/res/drawable-xxhdpi/ic_emoji_object_normal_dark.png
new file mode 100644
index 00000000000..671eef82739
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_object_normal_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_object_normal_light.png b/res/drawable-xxhdpi/ic_emoji_object_normal_light.png
new file mode 100644
index 00000000000..41b8604be63
Binary files /dev/null and b/res/drawable-xxhdpi/ic_emoji_object_normal_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_people_activated_dark.png b/res/drawable-xxhdpi/ic_emoji_people_activated_dark.png
index b5a7ac55cfa..40753d285e6 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_people_activated_dark.png and b/res/drawable-xxhdpi/ic_emoji_people_activated_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_people_activated_light.png b/res/drawable-xxhdpi/ic_emoji_people_activated_light.png
index 4c532476467..2b6ed0c1635 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_people_activated_light.png and b/res/drawable-xxhdpi/ic_emoji_people_activated_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_people_normal_dark.png b/res/drawable-xxhdpi/ic_emoji_people_normal_dark.png
index b73d3ba0c05..72df107d853 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_people_normal_dark.png and b/res/drawable-xxhdpi/ic_emoji_people_normal_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_people_normal_light.png b/res/drawable-xxhdpi/ic_emoji_people_normal_light.png
index f38fddc7f06..40753d285e6 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_people_normal_light.png and b/res/drawable-xxhdpi/ic_emoji_people_normal_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_places_activated_dark.png b/res/drawable-xxhdpi/ic_emoji_places_activated_dark.png
index cba29598fc7..9ae9fc7b264 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_places_activated_dark.png and b/res/drawable-xxhdpi/ic_emoji_places_activated_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_places_activated_light.png b/res/drawable-xxhdpi/ic_emoji_places_activated_light.png
index 1a09a342903..a7fafaec649 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_places_activated_light.png and b/res/drawable-xxhdpi/ic_emoji_places_activated_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_places_normal_dark.png b/res/drawable-xxhdpi/ic_emoji_places_normal_dark.png
index 2e752e6f0d9..dbdbd9e0cca 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_places_normal_dark.png and b/res/drawable-xxhdpi/ic_emoji_places_normal_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_places_normal_light.png b/res/drawable-xxhdpi/ic_emoji_places_normal_light.png
index c3b3b123e18..9ae9fc7b264 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_places_normal_light.png and b/res/drawable-xxhdpi/ic_emoji_places_normal_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_symbols_activated_dark.png b/res/drawable-xxhdpi/ic_emoji_symbols_activated_dark.png
index 1e55d5d3058..780b6397dc4 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_symbols_activated_dark.png and b/res/drawable-xxhdpi/ic_emoji_symbols_activated_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_symbols_activated_light.png b/res/drawable-xxhdpi/ic_emoji_symbols_activated_light.png
index 83d76f150a2..2cb85bbd80c 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_symbols_activated_light.png and b/res/drawable-xxhdpi/ic_emoji_symbols_activated_light.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_symbols_normal_dark.png b/res/drawable-xxhdpi/ic_emoji_symbols_normal_dark.png
index 34c889a79f5..fc60900710f 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_symbols_normal_dark.png and b/res/drawable-xxhdpi/ic_emoji_symbols_normal_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_emoji_symbols_normal_light.png b/res/drawable-xxhdpi/ic_emoji_symbols_normal_light.png
index dfd75697b0f..780b6397dc4 100644
Binary files a/res/drawable-xxhdpi/ic_emoji_symbols_normal_light.png and b/res/drawable-xxhdpi/ic_emoji_symbols_normal_light.png differ
diff --git a/res/drawable-xxhdpi/ic_flag_white_24dp.png b/res/drawable-xxhdpi/ic_flag_white_24dp.png
new file mode 100644
index 00000000000..fb2bc30ceb9
Binary files /dev/null and b/res/drawable-xxhdpi/ic_flag_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_gif_white_36dp.png b/res/drawable-xxhdpi/ic_gif_white_36dp.png
new file mode 100644
index 00000000000..ae117123cf4
Binary files /dev/null and b/res/drawable-xxhdpi/ic_gif_white_36dp.png differ
diff --git a/res/drawable-xxhdpi/ic_hourglass_empty_white_18dp.png b/res/drawable-xxhdpi/ic_hourglass_empty_white_18dp.png
new file mode 100644
index 00000000000..c7d64b63524
Binary files /dev/null and b/res/drawable-xxhdpi/ic_hourglass_empty_white_18dp.png differ
diff --git a/res/drawable-xxhdpi/ic_hourglass_full_white_18dp.png b/res/drawable-xxhdpi/ic_hourglass_full_white_18dp.png
new file mode 100644
index 00000000000..4f5a2ecc388
Binary files /dev/null and b/res/drawable-xxhdpi/ic_hourglass_full_white_18dp.png differ
diff --git a/res/drawable-xxhdpi/ic_lightbulb_outline_white_24dp.png b/res/drawable-xxhdpi/ic_lightbulb_outline_white_24dp.png
new file mode 100644
index 00000000000..1c1676105c2
Binary files /dev/null and b/res/drawable-xxhdpi/ic_lightbulb_outline_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_local_dining_white_24dp.png b/res/drawable-xxhdpi/ic_local_dining_white_24dp.png
new file mode 100644
index 00000000000..8c43c1c2435
Binary files /dev/null and b/res/drawable-xxhdpi/ic_local_dining_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_menu_lock_dark.png b/res/drawable-xxhdpi/ic_menu_lock_dark.png
new file mode 100644
index 00000000000..2090e9b25d4
Binary files /dev/null and b/res/drawable-xxhdpi/ic_menu_lock_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_menu_lock_holo_dark.png b/res/drawable-xxhdpi/ic_menu_lock_holo_dark.png
deleted file mode 100644
index 07fc9bd590a..00000000000
Binary files a/res/drawable-xxhdpi/ic_menu_lock_holo_dark.png and /dev/null differ
diff --git a/res/drawable-xxhdpi/ic_pets_white_24dp.png b/res/drawable-xxhdpi/ic_pets_white_24dp.png
new file mode 100644
index 00000000000..6996e7cad44
Binary files /dev/null and b/res/drawable-xxhdpi/ic_pets_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_photo_library_white_24dp.png b/res/drawable-xxhdpi/ic_photo_library_white_24dp.png
new file mode 100644
index 00000000000..497479291e6
Binary files /dev/null and b/res/drawable-xxhdpi/ic_photo_library_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_play_circle_outline_white_48dp.png b/res/drawable-xxhdpi/ic_play_circle_outline_white_48dp.png
new file mode 100644
index 00000000000..0311f899dd6
Binary files /dev/null and b/res/drawable-xxhdpi/ic_play_circle_outline_white_48dp.png differ
diff --git a/res/drawable-xxhdpi/ic_replay_white_24dp.png b/res/drawable-xxhdpi/ic_replay_white_24dp.png
new file mode 100644
index 00000000000..fcddcf02ddb
Binary files /dev/null and b/res/drawable-xxhdpi/ic_replay_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_security_white_24dp.png b/res/drawable-xxhdpi/ic_security_white_24dp.png
new file mode 100644
index 00000000000..7bcb2fd013f
Binary files /dev/null and b/res/drawable-xxhdpi/ic_security_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_share_white_24dp.png b/res/drawable-xxhdpi/ic_share_white_24dp.png
new file mode 100644
index 00000000000..a35b3cd14af
Binary files /dev/null and b/res/drawable-xxhdpi/ic_share_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_tag_faces_white_24dp.png b/res/drawable-xxhdpi/ic_tag_faces_white_24dp.png
new file mode 100644
index 00000000000..4bfd7518672
Binary files /dev/null and b/res/drawable-xxhdpi/ic_tag_faces_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_text_fields_white_24dp.png b/res/drawable-xxhdpi/ic_text_fields_white_24dp.png
new file mode 100644
index 00000000000..2d76a1da723
Binary files /dev/null and b/res/drawable-xxhdpi/ic_text_fields_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_timer_off_white_24dp.png b/res/drawable-xxhdpi/ic_timer_off_white_24dp.png
new file mode 100644
index 00000000000..52e8dbdb311
Binary files /dev/null and b/res/drawable-xxhdpi/ic_timer_off_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_timer_white_24dp.png b/res/drawable-xxhdpi/ic_timer_white_24dp.png
new file mode 100644
index 00000000000..bb6f9a63b5b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_timer_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_view_stream_white_24dp.png b/res/drawable-xxhdpi/ic_view_stream_white_24dp.png
new file mode 100644
index 00000000000..b8656197f4b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_view_stream_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_wb_sunny_white_24dp.png b/res/drawable-xxhdpi/ic_wb_sunny_white_24dp.png
new file mode 100644
index 00000000000..f0b22b6eff8
Binary files /dev/null and b/res/drawable-xxhdpi/ic_wb_sunny_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/ic_work_white_24dp.png b/res/drawable-xxhdpi/ic_work_white_24dp.png
new file mode 100644
index 00000000000..af82415d5fd
Binary files /dev/null and b/res/drawable-xxhdpi/ic_work_white_24dp.png differ
diff --git a/res/drawable-xxhdpi/icon_cached.png b/res/drawable-xxhdpi/icon_cached.png
new file mode 100644
index 00000000000..ac8c2958108
Binary files /dev/null and b/res/drawable-xxhdpi/icon_cached.png differ
diff --git a/res/drawable-xxhdpi/poweredby_giphy.png b/res/drawable-xxhdpi/poweredby_giphy.png
new file mode 100644
index 00000000000..aca5bf66145
Binary files /dev/null and b/res/drawable-xxhdpi/poweredby_giphy.png differ
diff --git a/res/drawable-xxxhdpi-v11/icon_cached.png b/res/drawable-xxxhdpi-v11/icon_cached.png
new file mode 100644
index 00000000000..fc6a8335472
Binary files /dev/null and b/res/drawable-xxxhdpi-v11/icon_cached.png differ
diff --git a/res/drawable-xxxhdpi/ic_brush_white_24dp.png b/res/drawable-xxxhdpi/ic_brush_white_24dp.png
new file mode 100644
index 00000000000..8297819ffd2
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_brush_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_check_white_36dp.png b/res/drawable-xxxhdpi/ic_check_white_36dp.png
new file mode 100644
index 00000000000..bfd7b82aaa1
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_check_white_36dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_check_white_48dp.png b/res/drawable-xxxhdpi/ic_check_white_48dp.png
new file mode 100644
index 00000000000..23a197082a4
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_check_white_48dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_circle_fill_white_48dp.png b/res/drawable-xxxhdpi/ic_circle_fill_white_48dp.png
new file mode 100644
index 00000000000..b6b9ab51bd7
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_circle_fill_white_48dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_close_white_48dp.png b/res/drawable-xxxhdpi/ic_close_white_48dp.png
new file mode 100644
index 00000000000..1ab2312754a
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_close_white_48dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_dashboard_white_24dp.png b/res/drawable-xxxhdpi/ic_dashboard_white_24dp.png
new file mode 100644
index 00000000000..817f274cfaf
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_dashboard_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_activity_activated_dark.png b/res/drawable-xxxhdpi/ic_emoji_activity_activated_dark.png
new file mode 100644
index 00000000000..b2c61c6bd1f
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_activity_activated_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_activity_activated_light.png b/res/drawable-xxxhdpi/ic_emoji_activity_activated_light.png
new file mode 100644
index 00000000000..3196e256a6d
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_activity_activated_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_activity_normal_dark.png b/res/drawable-xxxhdpi/ic_emoji_activity_normal_dark.png
new file mode 100644
index 00000000000..6745d84e543
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_activity_normal_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_activity_normal_light.png b/res/drawable-xxxhdpi/ic_emoji_activity_normal_light.png
new file mode 100644
index 00000000000..b2c61c6bd1f
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_activity_normal_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_flag_activated_dark.png b/res/drawable-xxxhdpi/ic_emoji_flag_activated_dark.png
new file mode 100644
index 00000000000..dced7d63837
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_flag_activated_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_flag_activated_light.png b/res/drawable-xxxhdpi/ic_emoji_flag_activated_light.png
new file mode 100644
index 00000000000..678adf4d2d5
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_flag_activated_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_flag_normal_dark.png b/res/drawable-xxxhdpi/ic_emoji_flag_normal_dark.png
new file mode 100644
index 00000000000..c69c5c3e825
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_flag_normal_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_flag_normal_light.png b/res/drawable-xxxhdpi/ic_emoji_flag_normal_light.png
new file mode 100644
index 00000000000..dced7d63837
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_flag_normal_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_foods_activated_dark.png b/res/drawable-xxxhdpi/ic_emoji_foods_activated_dark.png
new file mode 100644
index 00000000000..39455b4fc55
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_foods_activated_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_foods_activated_light.png b/res/drawable-xxxhdpi/ic_emoji_foods_activated_light.png
new file mode 100644
index 00000000000..662dbac2b9a
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_foods_activated_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_foods_normal_dark.png b/res/drawable-xxxhdpi/ic_emoji_foods_normal_dark.png
new file mode 100644
index 00000000000..c2b24323269
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_foods_normal_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_foods_normal_light.png b/res/drawable-xxxhdpi/ic_emoji_foods_normal_light.png
new file mode 100644
index 00000000000..39455b4fc55
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_foods_normal_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_nature_activated_dark.png b/res/drawable-xxxhdpi/ic_emoji_nature_activated_dark.png
new file mode 100644
index 00000000000..e9106a7c4f4
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_nature_activated_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_nature_activated_light.png b/res/drawable-xxxhdpi/ic_emoji_nature_activated_light.png
new file mode 100644
index 00000000000..9d3e7d4de7d
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_nature_activated_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_nature_normal_dark.png b/res/drawable-xxxhdpi/ic_emoji_nature_normal_dark.png
new file mode 100644
index 00000000000..2e8d684359d
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_nature_normal_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_nature_normal_light.png b/res/drawable-xxxhdpi/ic_emoji_nature_normal_light.png
new file mode 100644
index 00000000000..e9106a7c4f4
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_nature_normal_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_object_activated_dark.png b/res/drawable-xxxhdpi/ic_emoji_object_activated_dark.png
new file mode 100644
index 00000000000..841e9f12e75
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_object_activated_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_object_activated_light.png b/res/drawable-xxxhdpi/ic_emoji_object_activated_light.png
new file mode 100644
index 00000000000..21bcb25ad1b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_object_activated_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_object_normal_dark.png b/res/drawable-xxxhdpi/ic_emoji_object_normal_dark.png
new file mode 100644
index 00000000000..5541e5b8490
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_object_normal_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_object_normal_light.png b/res/drawable-xxxhdpi/ic_emoji_object_normal_light.png
new file mode 100644
index 00000000000..841e9f12e75
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_object_normal_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_people_activated_dark.png b/res/drawable-xxxhdpi/ic_emoji_people_activated_dark.png
new file mode 100644
index 00000000000..daa4020ce45
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_people_activated_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_people_activated_light.png b/res/drawable-xxxhdpi/ic_emoji_people_activated_light.png
new file mode 100644
index 00000000000..eac554f5369
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_people_activated_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_people_normal_dark.png b/res/drawable-xxxhdpi/ic_emoji_people_normal_dark.png
new file mode 100644
index 00000000000..e093154a75a
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_people_normal_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_people_normal_light.png b/res/drawable-xxxhdpi/ic_emoji_people_normal_light.png
new file mode 100644
index 00000000000..daa4020ce45
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_people_normal_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_places_activated_dark.png b/res/drawable-xxxhdpi/ic_emoji_places_activated_dark.png
new file mode 100644
index 00000000000..1953371c4db
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_places_activated_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_places_activated_light.png b/res/drawable-xxxhdpi/ic_emoji_places_activated_light.png
new file mode 100644
index 00000000000..27f4935a32b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_places_activated_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_places_normal_dark.png b/res/drawable-xxxhdpi/ic_emoji_places_normal_dark.png
new file mode 100644
index 00000000000..4088e500051
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_places_normal_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_places_normal_light.png b/res/drawable-xxxhdpi/ic_emoji_places_normal_light.png
new file mode 100644
index 00000000000..1953371c4db
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_places_normal_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_symbols_activated_dark.png b/res/drawable-xxxhdpi/ic_emoji_symbols_activated_dark.png
new file mode 100644
index 00000000000..062f031337b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_symbols_activated_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_symbols_activated_light.png b/res/drawable-xxxhdpi/ic_emoji_symbols_activated_light.png
new file mode 100644
index 00000000000..eecad279338
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_symbols_activated_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_symbols_normal_dark.png b/res/drawable-xxxhdpi/ic_emoji_symbols_normal_dark.png
new file mode 100644
index 00000000000..86152fa2260
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_symbols_normal_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_emoji_symbols_normal_light.png b/res/drawable-xxxhdpi/ic_emoji_symbols_normal_light.png
new file mode 100644
index 00000000000..062f031337b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_emoji_symbols_normal_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_flag_white_24dp.png b/res/drawable-xxxhdpi/ic_flag_white_24dp.png
new file mode 100644
index 00000000000..41089527cab
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_flag_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_gif_white_36dp.png b/res/drawable-xxxhdpi/ic_gif_white_36dp.png
new file mode 100644
index 00000000000..0ffbdb35542
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_gif_white_36dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_hourglass_empty_white_18dp.png b/res/drawable-xxxhdpi/ic_hourglass_empty_white_18dp.png
new file mode 100644
index 00000000000..e2e2d74f594
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hourglass_empty_white_18dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_hourglass_full_white_18dp.png b/res/drawable-xxxhdpi/ic_hourglass_full_white_18dp.png
new file mode 100644
index 00000000000..908b6a098a5
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_hourglass_full_white_18dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_lightbulb_outline_white_24dp.png b/res/drawable-xxxhdpi/ic_lightbulb_outline_white_24dp.png
new file mode 100644
index 00000000000..983a25340c2
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_lightbulb_outline_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_local_dining_white_24dp.png b/res/drawable-xxxhdpi/ic_local_dining_white_24dp.png
new file mode 100644
index 00000000000..8ad36ced7da
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_local_dining_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_menu_lock_dark.png b/res/drawable-xxxhdpi/ic_menu_lock_dark.png
new file mode 100644
index 00000000000..22f75edfb9b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_menu_lock_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_pets_white_24dp.png b/res/drawable-xxxhdpi/ic_pets_white_24dp.png
new file mode 100644
index 00000000000..f1fe74c154c
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_pets_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_photo_library_white_24dp.png b/res/drawable-xxxhdpi/ic_photo_library_white_24dp.png
new file mode 100644
index 00000000000..8627f427678
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_photo_library_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_play_circle_outline_white_48dp.png b/res/drawable-xxxhdpi/ic_play_circle_outline_white_48dp.png
new file mode 100644
index 00000000000..7a5a16858b0
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_play_circle_outline_white_48dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_replay_white_24dp.png b/res/drawable-xxxhdpi/ic_replay_white_24dp.png
new file mode 100644
index 00000000000..1573fb111b5
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_replay_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_security_white_24dp.png b/res/drawable-xxxhdpi/ic_security_white_24dp.png
new file mode 100644
index 00000000000..b1eddbd6c30
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_security_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_share_white_24dp.png b/res/drawable-xxxhdpi/ic_share_white_24dp.png
new file mode 100644
index 00000000000..e351c7beb08
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_share_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_tag_faces_white_24dp.png b/res/drawable-xxxhdpi/ic_tag_faces_white_24dp.png
new file mode 100644
index 00000000000..319a13a3875
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_tag_faces_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_text_fields_white_24dp.png b/res/drawable-xxxhdpi/ic_text_fields_white_24dp.png
new file mode 100644
index 00000000000..f4e597a8e2e
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_text_fields_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_off_white_24dp.png b/res/drawable-xxxhdpi/ic_timer_off_white_24dp.png
new file mode 100644
index 00000000000..0b389438422
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_off_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_timer_white_24dp.png b/res/drawable-xxxhdpi/ic_timer_white_24dp.png
new file mode 100644
index 00000000000..b8914c4a210
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_timer_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_view_stream_white_24dp.png b/res/drawable-xxxhdpi/ic_view_stream_white_24dp.png
new file mode 100644
index 00000000000..1e679697e97
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_view_stream_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_wb_sunny_white_24dp.png b/res/drawable-xxxhdpi/ic_wb_sunny_white_24dp.png
new file mode 100644
index 00000000000..97c34a0e006
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_wb_sunny_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/ic_work_white_24dp.png b/res/drawable-xxxhdpi/ic_work_white_24dp.png
new file mode 100644
index 00000000000..1bc11a8bbb1
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_work_white_24dp.png differ
diff --git a/res/drawable-xxxhdpi/icon_cached.png b/res/drawable-xxxhdpi/icon_cached.png
new file mode 100644
index 00000000000..07c7bd53828
Binary files /dev/null and b/res/drawable-xxxhdpi/icon_cached.png differ
diff --git a/res/drawable-xxxhdpi/poweredby_giphy.png b/res/drawable-xxxhdpi/poweredby_giphy.png
new file mode 100644
index 00000000000..f266ba65274
Binary files /dev/null and b/res/drawable-xxxhdpi/poweredby_giphy.png differ
diff --git a/res/drawable/clickable_card_dark.xml b/res/drawable/clickable_card_dark.xml
index 567ce86c346..5828c140657 100644
--- a/res/drawable/clickable_card_dark.xml
+++ b/res/drawable/clickable_card_dark.xml
@@ -6,5 +6,11 @@
+ -
+
+
+
+
+
diff --git a/res/drawable/clickable_card_light.xml b/res/drawable/clickable_card_light.xml
index 68374a0b858..38211ea6e2b 100644
--- a/res/drawable/clickable_card_light.xml
+++ b/res/drawable/clickable_card_light.xml
@@ -6,5 +6,11 @@
+ -
+
+
+
+
+
diff --git a/res/drawable/compose_divider_background.xml b/res/drawable/compose_divider_background.xml
new file mode 100644
index 00000000000..0046fe4e43a
--- /dev/null
+++ b/res/drawable/compose_divider_background.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/res/drawable/conversation_attachment_edit.xml b/res/drawable/conversation_attachment_edit.xml
new file mode 100644
index 00000000000..4e3413c1cb1
--- /dev/null
+++ b/res/drawable/conversation_attachment_edit.xml
@@ -0,0 +1,17 @@
+
+
+ -
+
+
+
+
+
+
+ -
+
+
diff --git a/res/drawable/conversation_item_background.xml b/res/drawable/conversation_item_background.xml
index 7014300913c..d4cbc9d8422 100644
--- a/res/drawable/conversation_item_background.xml
+++ b/res/drawable/conversation_item_background.xml
@@ -1,4 +1,5 @@
-
\ No newline at end of file
+
+
diff --git a/res/drawable/conversation_list_item_read_background.xml b/res/drawable/conversation_list_item_read_background.xml
index 45108a5b760..8ad9fae3581 100644
--- a/res/drawable/conversation_list_item_read_background.xml
+++ b/res/drawable/conversation_list_item_read_background.xml
@@ -2,5 +2,6 @@
+
-
\ No newline at end of file
+
diff --git a/res/drawable/conversation_list_item_read_background_dark.xml b/res/drawable/conversation_list_item_read_background_dark.xml
index c5153ed1888..237d729853e 100644
--- a/res/drawable/conversation_list_item_read_background_dark.xml
+++ b/res/drawable/conversation_list_item_read_background_dark.xml
@@ -2,5 +2,6 @@
+
-
\ No newline at end of file
+
diff --git a/res/drawable/conversation_list_item_unread_background.xml b/res/drawable/conversation_list_item_unread_background.xml
index cede161f7cd..2f11d8cc992 100644
--- a/res/drawable/conversation_list_item_unread_background.xml
+++ b/res/drawable/conversation_list_item_unread_background.xml
@@ -2,5 +2,6 @@
+
-
\ No newline at end of file
+
diff --git a/res/drawable/conversation_list_item_unread_background_dark.xml b/res/drawable/conversation_list_item_unread_background_dark.xml
index e6ae4638c87..bf0b92d2908 100644
--- a/res/drawable/conversation_list_item_unread_background_dark.xml
+++ b/res/drawable/conversation_list_item_unread_background_dark.xml
@@ -2,5 +2,6 @@
+
-
\ No newline at end of file
+
diff --git a/res/drawable/emoji_category_activity_dark.xml b/res/drawable/emoji_category_activity_dark.xml
new file mode 100644
index 00000000000..84269ce568a
--- /dev/null
+++ b/res/drawable/emoji_category_activity_dark.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/res/drawable/emoji_category_activity_light.xml b/res/drawable/emoji_category_activity_light.xml
new file mode 100644
index 00000000000..befeb3138df
--- /dev/null
+++ b/res/drawable/emoji_category_activity_light.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/res/drawable/emoji_category_flags_dark.xml b/res/drawable/emoji_category_flags_dark.xml
new file mode 100644
index 00000000000..41416774f3e
--- /dev/null
+++ b/res/drawable/emoji_category_flags_dark.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/res/drawable/emoji_category_flags_light.xml b/res/drawable/emoji_category_flags_light.xml
new file mode 100644
index 00000000000..2f61d042d20
--- /dev/null
+++ b/res/drawable/emoji_category_flags_light.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/res/drawable/emoji_category_foods_dark.xml b/res/drawable/emoji_category_foods_dark.xml
new file mode 100644
index 00000000000..650de4343a7
--- /dev/null
+++ b/res/drawable/emoji_category_foods_dark.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/res/drawable/emoji_category_foods_light.xml b/res/drawable/emoji_category_foods_light.xml
new file mode 100644
index 00000000000..475bd213526
--- /dev/null
+++ b/res/drawable/emoji_category_foods_light.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/res/drawable/emoji_category_objects_dark.xml b/res/drawable/emoji_category_objects_dark.xml
index 4ca7bc63558..3eb67ce51c3 100644
--- a/res/drawable/emoji_category_objects_dark.xml
+++ b/res/drawable/emoji_category_objects_dark.xml
@@ -1,7 +1,9 @@
-
-
+ android:enterFadeDuration="200"
+ android:exitFadeDuration="300">
+
+
+
+
diff --git a/res/drawable/emoji_category_objects_light.xml b/res/drawable/emoji_category_objects_light.xml
index 2db2e1438f4..83421c32c0d 100644
--- a/res/drawable/emoji_category_objects_light.xml
+++ b/res/drawable/emoji_category_objects_light.xml
@@ -1,7 +1,9 @@
-
-
+ android:enterFadeDuration="200"
+ android:exitFadeDuration="300">
+
+
+
+
diff --git a/res/drawable/pause_icon.xml b/res/drawable/pause_icon.xml
new file mode 100644
index 00000000000..e7f9fce53e8
--- /dev/null
+++ b/res/drawable/pause_icon.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/pause_to_play_animation.xml b/res/drawable/pause_to_play_animation.xml
new file mode 100644
index 00000000000..4d19dc4f9f6
--- /dev/null
+++ b/res/drawable/pause_to_play_animation.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/play_icon.xml b/res/drawable/play_icon.xml
new file mode 100644
index 00000000000..7472ac7de07
--- /dev/null
+++ b/res/drawable/play_icon.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/play_to_pause_animation.xml b/res/drawable/play_to_pause_animation.xml
new file mode 100644
index 00000000000..b8bc7934fe7
--- /dev/null
+++ b/res/drawable/play_to_pause_animation.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/qr_code_background.xml b/res/drawable/qr_code_background.xml
new file mode 100644
index 00000000000..a5266a706ed
--- /dev/null
+++ b/res/drawable/qr_code_background.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/reminder_background.xml b/res/drawable/reminder_background.xml
new file mode 100644
index 00000000000..349f949c234
--- /dev/null
+++ b/res/drawable/reminder_background.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/res/drawable/touch_highlight_background.xml b/res/drawable/touch_highlight_background.xml
index de376e0b19e..8089a028086 100644
--- a/res/drawable/touch_highlight_background.xml
+++ b/res/drawable/touch_highlight_background.xml
@@ -1,5 +1,6 @@
+
-
\ No newline at end of file
+
diff --git a/res/drawable/vertical_separator.xml b/res/drawable/vertical_separator.xml
new file mode 100644
index 00000000000..ac3f47aa349
--- /dev/null
+++ b/res/drawable/vertical_separator.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/res/layout/attachment_type_selector.xml b/res/layout/attachment_type_selector.xml
index 9b912d01226..93d90fdf92f 100644
--- a/res/layout/attachment_type_selector.xml
+++ b/res/layout/attachment_type_selector.xml
@@ -5,12 +5,20 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attachment_type_selector_background"
- android:elevation="4dp"
- android:padding="16dp">
+ android:elevation="4dp">
+
+
-
+
+
+
+
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ tools:context="org.thoughtcrime.securesms.components.AudioView">
+ tools:visibility="gone"/>
+ android:scaleType="centerInside"
+ tools:visibility="gone"
+ android:contentDescription="@string/audio_view__play_accessibility_description"/>
+ android:scaleType="centerInside"
+ android:contentDescription="@string/audio_view__pause_accessibility_description"/>
+ android:contentDescription="@string/audio_view__download_accessibility_description"/>
diff --git a/res/layout/contact_filter_toolbar.xml b/res/layout/contact_filter_toolbar.xml
index 19003526f84..6738e2bace2 100644
--- a/res/layout/contact_filter_toolbar.xml
+++ b/res/layout/contact_filter_toolbar.xml
@@ -5,15 +5,6 @@
android:layout_height="match_parent"
android:orientation="horizontal">
-
-
@@ -57,6 +47,7 @@
android:gravity="center_vertical"
android:clickable="true"
android:visibility="gone"
+ android:focusable="true"
android:background="@drawable/circle_touch_highlight_background"
android:src="@drawable/ic_keyboard_white_24dp" />
@@ -67,6 +58,7 @@
android:gravity="center_vertical"
android:clickable="true"
android:visibility="gone"
+ android:focusable="true"
android:background="@drawable/circle_touch_highlight_background"
android:src="@drawable/ic_clear_white_24dp" />
@@ -76,4 +68,4 @@
-
\ No newline at end of file
+
diff --git a/res/layout/contact_selection_activity.xml b/res/layout/contact_selection_activity.xml
index 26030dda906..709f7b65e64 100644
--- a/res/layout/contact_selection_activity.xml
+++ b/res/layout/contact_selection_activity.xml
@@ -3,7 +3,8 @@
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="vertical"
- xmlns:android="http://schemas.android.com/apk/res/android">
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ android:theme="?attr/actionBarStyle"/>
+ android:layout_height="match_parent"
+ android:scrollbars="vertical" />
diff --git a/res/layout/conversation_activity.xml b/res/layout/conversation_activity.xml
index ca51f733cf9..443e086c54a 100644
--- a/res/layout/conversation_activity.xml
+++ b/res/layout/conversation_activity.xml
@@ -40,19 +40,12 @@
android:background="?android:windowBackground"
android:visibility="gone">
-
-
-
+ app:widgetBackground="@color/white"
+ app:foregroundTintColor="@color/grey_500"
+ app:backgroundTintColor="@color/white"/>
-
+
@@ -85,6 +79,13 @@
android:text="@string/ConversationActivity_unblock"
android:visibility="gone"/>
+
+
-
+
-
+
+
+
+
+
diff --git a/res/layout/conversation_input_panel.xml b/res/layout/conversation_input_panel.xml
index 2fbfb2c30b2..305cd216bc6 100644
--- a/res/layout/conversation_input_panel.xml
+++ b/res/layout/conversation_input_panel.xml
@@ -65,7 +65,7 @@
android:layout_gravity="bottom"
android:src="?quick_camera_icon"
android:background="@drawable/touch_highlight_background"
- android:contentDescription="@string/conversation_activity__quick_attachment_drawer_toggle_description"
+ android:contentDescription="@string/conversation_activity__quick_attachment_drawer_toggle_camera_description"
android:padding="10dp"/>
@@ -43,7 +46,8 @@
android:layout_toRightOf="@id/contact_photo"
android:layout_marginRight="35dp"
android:background="@drawable/received_bubble"
- android:orientation="vertical">
+ android:orientation="vertical"
+ tools:backgroundTint="@color/blue_900">
+ android:tintMode="multiply"
+ tools:visibility="visible"/>
+
+
+ tools:text="Now"
+ tools:visibility="visible"/>
+
+
+ android:contentDescription="@string/conversation_item__secure_message_description"
+ tools:visibility="visible"/>
diff --git a/res/layout/conversation_item_update.xml b/res/layout/conversation_item_update.xml
index 29557e17a1c..f22e7248cf9 100644
--- a/res/layout/conversation_item_update.xml
+++ b/res/layout/conversation_item_update.xml
@@ -5,6 +5,8 @@
android:id="@+id/conversation_update_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:focusable="true"
+ android:background="@drawable/conversation_item_background"
android:orientation="horizontal"
android:gravity="center"
android:padding="20dp">
diff --git a/res/layout/conversation_list_item_view.xml b/res/layout/conversation_list_item_view.xml
index 364c5b19a44..3f11661ea01 100644
--- a/res/layout/conversation_list_item_view.xml
+++ b/res/layout/conversation_list_item_view.xml
@@ -4,6 +4,9 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
+ android:focusable="true"
+ android:nextFocusRight="@+id/fab"
+ android:nextFocusLeft="@+id/container"
android:layout_height="70dp">
-
+
+ android:layout_height="wrap_content"
+ tools:visibility="gone"/>
+ android:contentDescription="@string/conversation_item_sent__delivered_description"
+ tools:visibility="visible"/>
\ No newline at end of file
diff --git a/res/layout/device_add_fragment.xml b/res/layout/device_add_fragment.xml
index eb9369d6223..2880654acbb 100644
--- a/res/layout/device_add_fragment.xml
+++ b/res/layout/device_add_fragment.xml
@@ -20,6 +20,7 @@
@@ -39,14 +40,35 @@
android:layout_height="wrap_content"
android:tint="@color/gray27"
android:transitionName="devices"
- android:layout_marginBottom="16dp"/>
+ android:layout_marginBottom="3dp"/>
+
+
+
+
+
+
diff --git a/res/layout/expiration_dialog.xml b/res/layout/expiration_dialog.xml
new file mode 100644
index 00000000000..efe2831a899
--- /dev/null
+++ b/res/layout/expiration_dialog.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/expiration_timer_menu.xml b/res/layout/expiration_timer_menu.xml
new file mode 100644
index 00000000000..a4f9bd3fb06
--- /dev/null
+++ b/res/layout/expiration_timer_menu.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/export_fragment.xml b/res/layout/export_fragment.xml
index 3f8dcfeac77..c46800eab83 100644
--- a/res/layout/export_fragment.xml
+++ b/res/layout/export_fragment.xml
@@ -60,7 +60,8 @@
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:background="?import_export_item_card_background"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:focusable="true">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/giphy_activity_toolbar.xml b/res/layout/giphy_activity_toolbar.xml
new file mode 100644
index 00000000000..4f34a054862
--- /dev/null
+++ b/res/layout/giphy_activity_toolbar.xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/giphy_fragment.xml b/res/layout/giphy_fragment.xml
new file mode 100644
index 00000000000..ce14150fa64
--- /dev/null
+++ b/res/layout/giphy_fragment.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/giphy_thumbnail.xml b/res/layout/giphy_thumbnail.xml
new file mode 100644
index 00000000000..eed7e09e1ad
--- /dev/null
+++ b/res/layout/giphy_thumbnail.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
diff --git a/res/layout/import_fragment.xml b/res/layout/import_fragment.xml
index b8dd80d19a1..25453eb1178 100644
--- a/res/layout/import_fragment.xml
+++ b/res/layout/import_fragment.xml
@@ -17,6 +17,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?import_export_item_card_background"
+ android:focusable="true"
android:orientation="vertical">
diff --git a/res/layout/media_overview_activity.xml b/res/layout/media_overview_activity.xml
index cf8900f382a..56a6def5e48 100644
--- a/res/layout/media_overview_activity.xml
+++ b/res/layout/media_overview_activity.xml
@@ -9,7 +9,8 @@
+ android:layout_height="match_parent"
+ android:scrollbars="vertical" />
+
+
diff --git a/res/layout/media_view_edit_button.xml b/res/layout/media_view_edit_button.xml
new file mode 100644
index 00000000000..a850254421a
--- /dev/null
+++ b/res/layout/media_view_edit_button.xml
@@ -0,0 +1,8 @@
+
+
diff --git a/res/layout/message_details_header.xml b/res/layout/message_details_header.xml
index 39e7d55ed24..8ae2dad37e6 100644
--- a/res/layout/message_details_header.xml
+++ b/res/layout/message_details_header.xml
@@ -75,6 +75,27 @@
+
+
+
+
+
+
+
+
diff --git a/res/layout/recent_photo_view.xml b/res/layout/recent_photo_view.xml
new file mode 100644
index 00000000000..c06cb67630d
--- /dev/null
+++ b/res/layout/recent_photo_view.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/recent_photo_view_item.xml b/res/layout/recent_photo_view_item.xml
new file mode 100644
index 00000000000..39214dfc50a
--- /dev/null
+++ b/res/layout/recent_photo_view_item.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/res/layout/reminder_header.xml b/res/layout/reminder_header.xml
index 2d4354abeec..d2a0a8efc0a 100644
--- a/res/layout/reminder_header.xml
+++ b/res/layout/reminder_header.xml
@@ -13,7 +13,9 @@
tools:visibility="visible"
android:padding="2dp"
android:gravity="center_vertical"
- android:background="?reminder_header_background">
+ android:focusable="true"
+ android:nextFocusRight="@+id/cancel"
+ android:background="@drawable/reminder_background">
diff --git a/res/layout/scribble_activity.xml b/res/layout/scribble_activity.xml
new file mode 100644
index 00000000000..cd2b89c6a1f
--- /dev/null
+++ b/res/layout/scribble_activity.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/scribble_select_sticker_activity.xml b/res/layout/scribble_select_sticker_activity.xml
new file mode 100644
index 00000000000..d05cc2b6029
--- /dev/null
+++ b/res/layout/scribble_select_sticker_activity.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/scribble_select_sticker_fragment.xml b/res/layout/scribble_select_sticker_fragment.xml
new file mode 100644
index 00000000000..805a3bc80d1
--- /dev/null
+++ b/res/layout/scribble_select_sticker_fragment.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/res/layout/scribble_sticker_item.xml b/res/layout/scribble_sticker_item.xml
new file mode 100644
index 00000000000..a3359695954
--- /dev/null
+++ b/res/layout/scribble_sticker_item.xml
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/res/layout/scribble_toolbar.xml b/res/layout/scribble_toolbar.xml
new file mode 100644
index 00000000000..4d460d0d807
--- /dev/null
+++ b/res/layout/scribble_toolbar.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/scribble_view.xml b/res/layout/scribble_view.xml
new file mode 100644
index 00000000000..5dbd35fbfa4
--- /dev/null
+++ b/res/layout/scribble_view.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/signal_map_view.xml b/res/layout/signal_map_view.xml
deleted file mode 100644
index dd87d28f8e5..00000000000
--- a/res/layout/signal_map_view.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/layout/thumbnail_view.xml b/res/layout/thumbnail_view.xml
index 1e446b0552e..24851538c32 100644
--- a/res/layout/thumbnail_view.xml
+++ b/res/layout/thumbnail_view.xml
@@ -10,6 +10,18 @@
android:scaleType="fitCenter"
android:contentDescription="@string/conversation_item__mms_image_description" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/verify_identity_activity.xml b/res/layout/verify_identity_activity.xml
deleted file mode 100644
index 78146b758cc..00000000000
--- a/res/layout/verify_identity_activity.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/layout/verify_scan_fragment.xml b/res/layout/verify_scan_fragment.xml
new file mode 100644
index 00000000000..d379c600231
--- /dev/null
+++ b/res/layout/verify_scan_fragment.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/video_player.xml b/res/layout/video_player.xml
new file mode 100644
index 00000000000..144e0f51ecd
--- /dev/null
+++ b/res/layout/video_player.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/view_identity_activity.xml b/res/layout/view_identity_activity.xml
deleted file mode 100644
index 1bc52c3ac20..00000000000
--- a/res/layout/view_identity_activity.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/res/menu/conversation_callable_insecure.xml b/res/menu/conversation_callable_insecure.xml
index 3ebc79704f1..04be0b922a6 100644
--- a/res/menu/conversation_callable_insecure.xml
+++ b/res/menu/conversation_callable_insecure.xml
@@ -4,6 +4,6 @@
+ app:showAsAction="always" />
diff --git a/res/menu/conversation_callable_secure.xml b/res/menu/conversation_callable_secure.xml
index 01658d6e7f7..6cf92f06247 100644
--- a/res/menu/conversation_callable_secure.xml
+++ b/res/menu/conversation_callable_secure.xml
@@ -5,6 +5,6 @@
+ app:showAsAction="always" />
\ No newline at end of file
diff --git a/res/menu/conversation_expiring_off.xml b/res/menu/conversation_expiring_off.xml
new file mode 100644
index 00000000000..155f45d3dd3
--- /dev/null
+++ b/res/menu/conversation_expiring_off.xml
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/res/menu/conversation_expiring_on.xml b/res/menu/conversation_expiring_on.xml
new file mode 100644
index 00000000000..5dbf88b0012
--- /dev/null
+++ b/res/menu/conversation_expiring_on.xml
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/res/menu/media_preview.xml b/res/menu/media_preview.xml
index d788224150d..8bee8363781 100644
--- a/res/menu/media_preview.xml
+++ b/res/menu/media_preview.xml
@@ -1,8 +1,16 @@
diff --git a/res/menu/new_conversation_activity.xml b/res/menu/new_conversation_activity.xml
index 589fc4afb2d..78dbfde0c2f 100644
--- a/res/menu/new_conversation_activity.xml
+++ b/res/menu/new_conversation_activity.xml
@@ -1,7 +1,15 @@
\ No newline at end of file
diff --git a/res/menu/verify_display_fragment_context_menu.xml b/res/menu/verify_display_fragment_context_menu.xml
new file mode 100644
index 00000000000..db095c5b97f
--- /dev/null
+++ b/res/menu/verify_display_fragment_context_menu.xml
@@ -0,0 +1,10 @@
+
+
diff --git a/res/menu/verify_identity.xml b/res/menu/verify_identity.xml
new file mode 100644
index 00000000000..6163830bf4a
--- /dev/null
+++ b/res/menu/verify_identity.xml
@@ -0,0 +1,8 @@
+
+
diff --git a/res/raw/censorship_fronting.store b/res/raw/censorship_fronting.store
new file mode 100644
index 00000000000..431b9c54f9d
Binary files /dev/null and b/res/raw/censorship_fronting.store differ
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index c8f64de11d2..a693a711a2a 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -5,6 +5,8 @@
لا
ØØ°Ù
رجاء الانتظار...
+
+ رسالة جديدة
ØØ§Ù„يا: %s
لم تقم Ø¨ØªØØ¯ÙŠØ¯ عبارة سرية بعد!
@@ -27,7 +29,7 @@
ØØ°Ù
تعطيل العبارة السرية؟
- سو٠يتم إلغاء Ù‚ÙÙ„ سييجنال وإشعارات الرسائل دائماً
+ إلغاء Ù‚ÙÙ„ سيجنال وإشعارات الرسائل بشكل دائم
تعطيل
جار٠إلغاء التسجيل
جار٠إلغاء التسجيل من رسائل ومكالمات سيجنال...
@@ -74,8 +76,6 @@
مكالمة واردة
- لقد تغير Ø§Ù„Ù…ÙØªØ§Ø التعريÙÙŠ الخاص بـ%1$s. وهذا يعني أن شخص ما ÙŠØØ§ÙˆÙ„ اعتراض Ø§Ù„Ù…ØØ§Ø¯Ø«Ø© أو %2$s قام بإعادة تثبيت سيجنال ÙˆØ£ØµØ¨Ø Ù„Ø¯ÙŠÙ‡ Ù…ÙØªØ§Ø تعريÙÙŠ جديد.
- ربما تود التØÙ‚Ù‚ من جهة الاتصال.
مواÙقة
رسالة %s
@@ -138,13 +138,14 @@
رسائل الوسائط المتعددة غير مدعمة
لا يمكن الإرسال لأن شبكة الجوال التي تستخدمها لا تدعم رسائل الوسائط المتعددة.
رجاء اختيار جهة اتصال
- إلغاء Ø§Ù„ØØ¸Ø±ØŸ
- تأكيد إلغاء ØØ¸Ø± جهة الاتصال؟
+ إلغاء ØØ¸Ø± جهة الاتصال؟
+ سو٠تتمكن مرة أخرى من استقبال الرسائل والمكالمات من هذا المستخدم.
إلغاء Ø§Ù„ØØ¸Ø±
ØØ¬Ù… المرÙÙ‚ تجاوز Ø§Ù„ØØ¯ Ø§Ù„Ù…Ø³Ù…ÙˆØ Ø¨Ù‡Ø°Ø§ النوع من الرسائل.
الكاميرا غير موجودة
تعذر تسجيل الصوت!
خطأ ÙÙŠ إرسال الرسالة الصوتية...
+ لا يوجد تطبيق على الجهاز لمعالجة الرابط.
ØªÙØ§ØµÙŠÙ„ الرسالة
نقل: %1$s\nSent/Received: %2$s
@@ -166,8 +167,41 @@
- سو٠يتم ØØ°Ù %1$d رسالة مختارة نهائيا.
Ø£ØÙظ ÙÙŠ الذاكرة؟
- تم بنجاØ!
+
+ - ØÙظ %1$d وسيط ÙÙŠ الذاكرة ÙŠØ³Ù…Ø ï»·ÙŠ تطبيق آخر على الهات٠من Ø§Ù„Ù†ÙØ§Ø° له. \n\nاستمر؟
+ - ØÙظ الوسائط ÙÙŠ الذاكرة ÙŠØ³Ù…Ø ï»·ÙŠ تطبيق آخر على الهات٠من Ø§Ù„Ù†ÙØ§Ø° له. \n\nاستمر؟
+ - ØÙظ %1$d وسيط ÙÙŠ الذاكرة ÙŠØ³Ù…Ø ï»·ÙŠ تطبيق آخر على الهات٠من Ø§Ù„Ù†ÙØ§Ø° له. \n\nاستمر؟
+ - ØÙظ %1$d وسيط ÙÙŠ الذاكرة ÙŠØ³Ù…Ø ï»·ÙŠ تطبيق آخر على الهات٠من Ø§Ù„Ù†ÙØ§Ø° له. \n\nاستمر؟
+ - ØÙظ %1$d وسيط ÙÙŠ الذاكرة ÙŠØ³Ù…Ø ï»·ÙŠ تطبيق آخر على الهات٠من Ø§Ù„Ù†ÙØ§Ø° له. \n\nاستمر؟
+ - ØÙظ %1$d وسيط ÙÙŠ الذاكرة ÙŠØ³Ù…Ø ï»·ÙŠ تطبيق آخر على الهات٠من Ø§Ù„Ù†ÙØ§Ø° له. \n\nاستمر؟
+
+
+ - وقع خطأ أثناء ØÙظ المرÙقات ÙÙŠ Ù…Ø³Ø§ØØ© التخزين!
+ - وقع خطأ أثناء ØÙظ المرÙÙ‚ ÙÙŠ Ù…Ø³Ø§ØØ© التخزين!
+ - وقع خطأ أثناء ØÙظ المرÙقات ÙÙŠ Ù…Ø³Ø§ØØ© التخزين!
+ - وقع خطأ أثناء ØÙظ المرÙقات ÙÙŠ Ù…Ø³Ø§ØØ© التخزين!
+ - وقع خطأ أثناء ØÙظ المرÙقات ÙÙŠ Ù…Ø³Ø§ØØ© التخزين!
+ - وقع خطأ أثناء ØÙظ المرÙقات ÙÙŠ Ù…Ø³Ø§ØØ© التخزين!
+
+ تم ØÙظ المل٠بنجاØ.
تعذر Ø§Ù„Ø¥Ø¶Ø§ÙØ© إلى الذاكرة!
+
+ - جار٠ØÙظ %1$d مرÙÙ‚
+ - جار٠ØÙظ المرÙÙ‚
+ - جار٠ØÙظ %1$d مرÙÙ‚
+ - جار٠ØÙظ %1$d مرÙÙ‚
+ - جار٠ØÙظ %1$d مرÙÙ‚
+ - جار٠ØÙظ %1$d مرÙÙ‚
+
+
+ - جار٠ØÙظ %1$d مرÙÙ‚ ÙÙŠ الذاكرة...
+ - جار٠ØÙظ المرÙÙ‚ ÙÙŠ الذاكرة...
+ - جار٠ØÙظ %1$d مرÙÙ‚ ÙÙŠ الذاكرة...
+ - جار٠ØÙظ %1$d مرÙÙ‚ ÙÙŠ الذاكرة...
+ - جار٠ØÙظ %1$d مرÙÙ‚ ÙÙŠ الذاكرة...
+ - جار٠ØÙظ %1$d مرÙÙ‚ ÙÙŠ الذاكرة...
+
+ جار٠جمع المرÙقات...
معلق...
بيانات (سيجنال)
رسالة وسائط متعددة
@@ -176,6 +210,7 @@
ØØ°Ù الرسائل جارÙ...
Ø¨ØØ«...
+ لا يوجد Ù…ØªØµÙØ بالجهاز.
- ØØ°Ù Ø§Ù„Ù…ØØ§Ø¯Ø«Ø§Øª المختارة؟
@@ -221,7 +256,6 @@
الاستخدام Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ: %s
لا شيء
- الآن
%d دقيقة
إلغاء ربط \'%s\'؟
@@ -254,10 +288,12 @@
خطأ. تعذر الكتابة على بطاقة الذاكرة!
e
خطأ أثناء الكتابة على بطاقة الذاكرة.
- تم بنجاØ!
+ تم التصدير بنجاØ
ÙØ´Ù„ دائما ÙÙŠ اتصال سيجنال!
سيجنال لم يتمكن من التسجيل مع خدمات جوجل بلاي، وتم تعطيل رسائل ومكالمات سيجنال. رجاء Ù…ØØ§ÙˆÙ„Ø© إعادة التسجيل عبر قائمة الإعدادات بالتطبيق ثم اختيار متقدم.
+
+
مجموعة جديدة
ØªØØ¯ÙŠØ« المجموعة
@@ -304,20 +340,12 @@
ألمس وأضغط لتسجيل رسالة صوتية. Ø§Ø³ØØ¨ إصبعك للإرسال
شارك
- أرسل رسالة
+ اختر جهات الاتصال
إلغاء
ارسال...
قلب
تم إرسال الدعوات!
الدعوة إلى سيجنال
-
- - أرسل إلى %d صديق
- - أرسل إلى صديق ÙˆØ§ØØ¯.
- - أرسل إلى %d صديق
- - أرسل إلى %d صديق
- - أرسل إلى %d صديق
- - أرسل إلى %d صديق
-
- ارسل %d دعوة برسالة نصية؟
- ارسل دعوة ÙˆØ§ØØ¯Ø© عبر رسالة؟
@@ -335,7 +363,6 @@
سيجنال ÙŠØØªØ§Ø¬ إلى Ù…Ø§Ø³Ø Barcode لرموز الاستجابة السريعة.
الإرسال ÙØ´Ù„.
- هوية جديدة
خطأ بتخزين رسالة الوسائط المتعددة!
خطأ ÙÙŠ الاتصال مع مزود خدمة رسالة الوسائط المتعددة...
@@ -383,6 +410,10 @@
عذرا، الرابط غير صØÙŠØ.
ربط سيجنال بجهاز؟
يبدو أنك ØªØØ§ÙˆÙ„ ربط سيجنال باستخدام Ù…Ø§Ø³Ø Ø¶ÙˆØ¦ÙŠ خارجي. رجاء Ù…Ø³Ø Ø§Ù„ÙƒÙˆØ¯ مرة أخرى باستخدام الخاصية المدمجة ÙÙŠ سيجنال من أجل ØÙ…ايتك.
+
+ الرسائل المختÙية
+ صلاØÙŠØ© رسائلك لن تنتهي.
+ الرسائل الصادرة والواردة ÙÙŠ هذه Ø§Ù„Ù…ØØ§Ø¯Ø«Ø© سو٠تختÙÙŠ بعد %s من رؤيتهم.
أدخل العبارة السرية
أيقونة سيجنال
@@ -396,12 +427,13 @@
قَيّم الآن
لا، شكرا
Ùيما بعد
+ أوبس، تطبيق المتجر ﻻ يظهر على أنه مثبت على جهازك
ØØ¸Ø± جهة الاتصال؟
- لن تتلقى رسائل أو مكالمات مجددا من هذا المستخدم.
+ لن تتلقى الرسائل أو المكالمات من هذا المستخدم مستقبلا.
ØØ¸Ø±
إلغاء ØØ¸Ø± جهة الاتصال؟
- تأكيد إلغاء ØØ¸Ø± جهة الاتصال؟
+ سو٠تتمكن مرة أخرى من استقبال الرسائل والمكالمات من هذا المستخدم.
Ø±ÙØ¹ Ø§Ù„ØØ¸Ø±
Ù…ÙØ¹Ù„
معطل
@@ -476,9 +508,8 @@
تم استلام رسالة تبادل Ù…ÙØ§ØªÙŠØ ØªØ§Ù„ÙØ©.
تم استلام رسالة تبادل Ù…ÙØ§ØªÙŠØ مع إصدارة بروتوكول غير صØÙŠØØ©.
- تم استلام رسالة Ø¨Ù…ÙØªØ§Ø هوية غير معلوم. أنقر للمتابعة والإظهار.
- تم استلام ØªØØ¯ÙŠØ« ولكن معلومات الهوية مجهولة. أنقر للتØÙ‚Ù‚ من الهوية.
- إعادة ضبط جلسة آمنة.
+ لقد قمت بإعادة ضبط تأمين Ø§Ù„Ù…ØØ§Ø¯Ø«Ø©.
+ %s أعاد ضبط تأمين Ø§Ù„Ù…ØØ§Ø¯Ø«Ø©.
رسالة مكررة.
ترك المجموعة...
@@ -489,22 +520,9 @@
مكالمة ÙØ§Ø¦ØªØ©
رسالة وسائط متعددة
%s إنضم إلى سيجنال.. ألقي التØÙŠØ©!
+ ضبط توقيت Ø¥Ø®ÙØ§Ø¡ الرسائل إلى %s
- لا يوجد لديك Ù…ÙØªØ§Ø تعريÙÙŠ.
- لا يوجد لدى الطر٠الاخر Ù…ÙØªØ§Ø تعريÙÙŠ.
- لا يوجد لدى الطر٠الاخر Ù…ÙØªØ§Ø تعريÙÙŠ!
- ØªØØ°ÙŠØ±: Ø§Ù„Ù…ÙØªØ§Ø الذي تم مسØÙ‡ ضوئياً لا يتطابق! تأكد من بصمة Ø§Ù„Ù…ÙØªØ§Ø Ø¨ØØ°Ø±.
- لم يتم التØÙ‚Ù‚!
- Ù…ÙØªØ§ØÙ‡Ù… صØÙŠØ. يجب أيضاً أن تقوم بالتØÙ‚Ù‚ من Ù…ÙØªØ§ØÙƒ لديهم أيضاً.
- تم التØÙ‚Ù‚!
- لا يوجد لديك Ù…ÙØªØ§Ø هوية!
-
- لا يوجد لديك Ù…ÙØªØ§Ø هوية.
- ØªØØ°ÙŠØ±: Ø§Ù„Ù…ÙØªØ§Ø الذي تم مسØÙ‡ ضوئياً لا يتطابق!
- لم يتم التØÙ‚Ù‚!
- Ø§Ù„Ù…ÙØªØ§Ø الذي تم مسØÙ‡ ضوئياً متطابق!
- تم التØÙ‚Ù‚!
- بصمة Ø§Ù„Ù…ÙØªØ§Ø الخاصة بك
+ يبدو عدم وجود أي تطبيقات لديك للمشاركة من خلالها.
ابدأ على الرغم من الطلب Ø§Ù„ØØ§Ù„ي؟
أرسل
@@ -532,6 +550,8 @@
جاري الاستيراد...
استيراد رسائل نصية
+ تم الاستيراد
+ تم استيراد قاعدة بيانات النظام.
المس Ù„Ù„ÙØªØ.
المس Ù„Ù„ÙØªØ أو المس رمز القÙÙ„ للإغلاق.
@@ -586,13 +606,13 @@
أرسل رسالة سيجنال.
أرسل رسالة نصية غير آمنة
أرسل رسالة وسائط متعددة غير آمنة
+ من %1$s
أرسل
إزالة
Ù…ØØ§Ø¯Ø«Ø© مع %1$s
تكوين الرسالة
تبديل Ù„ÙˆØØ© Ù…ÙØ§ØªÙŠØ الرموز التعبيرية
المصغّرة للمرÙÙ‚
- ÙØªØ درج المرÙقات
Ø³ØØ¨ للإلغاء
@@ -609,6 +629,7 @@
تنزيل
صورة جهة الاتصال
التنزيل جارÙ...
+
وضع اختيار Ø§Ù„Ø¯ÙØ¹Ø§Øª
%s اختيار
@@ -624,11 +645,53 @@
ربط جهاز جديد
استمر
+
+ مغلق
+ %ds
+
+ - %d دققية
+ - دقيقة
+ - %d دققتان
+ - %d دقائق
+ - %d دقيقة
+ - %d دقيقة
+
+ %dm
+
+ - %d ساعة
+ - ساعة
+ - %d ساعتان
+ - %d ساعة
+ - %d ساعة
+ - %d ساعة
+
+ %dh
+
+ - %d يوم
+ - يوم ÙˆØ§ØØ¯
+ - %d يومان
+ - %d أيام
+ - %d يوم
+ - %d يوم
+
+ %dd
+
+ - %d أسابيع
+ - أسبوع ÙˆØ§ØØ¯
+ - %d أسبوع
+ - %d أسابيع
+ - %d أسبوع
+ - %d أسبوع
+
+ %dw
+
+
تعذر التقاط السجلات من هاتÙÙƒ. يمكنك استخدام ADB Ù„Ù„ØØµÙˆÙ„ على سجل التشغيل بدلا من ذلك.
شكرا للمساعدة!
إرسال
جاري نشر السجلات إلى Gist...
+ لا يوجد Ù…ØªØµÙØ.
هل تود استيراد الرسائل النصية الموجودة إلى قاعدة بيانات سيجنال Ø§Ù„Ù…Ø´ÙØ±Ø©ØŸ
لن يتم تغيير قاعدة البيانات الأساسية بأي طريقة.
@@ -686,7 +749,6 @@
ØØ¸Ø±
اللون
اللون المخصص لجهة الاتصال
- تØÙ‚Ù‚ من الهوية
مكالمة سيجنال
إنهاء المكالمة
@@ -744,14 +806,15 @@
ØªØ£ÙƒÙØ¯
أدخل اسم أو رقم
- Ø¥Ø¶Ø§ÙØ© عضو
-
- هويتهم (كما يقرؤونها هم):
- هويتك (كما تقرأها أنت):
+ Ø¥Ø¶Ø§ÙØ© أعضاء
+
+ المس للمسØ
+
بعض المشاكل تتطلب انتباهك.
أرسلت
استلمت
+ Ø§Ù„Ø§Ø®ØªÙØ§Ø¡
بواسطة
إلى:
من:
@@ -761,20 +824,17 @@
أدخل العبارة السرية
اخر جهات الاتصال
تم العثور على سيجنال
- Ù…ÙØªØ§Ø الهوية العلني
غير العبارة السرية
- تØÙ‚Ù‚ من الهوية
أرسل سجل التشغيل.
معاينة الوسائط
جميع الصور
جميع الصور مع %1$s
ØªÙØ§ØµÙŠÙ„ الرسالة
- إدارة الأجهزة المقترنة
+ الأجهزة المتصلة
دعوة الأصدقاء
Ø£Ø±Ø´ÙŠÙ Ø§Ù„Ù…ØØ§Ø¯Ø«Ø©
استيراد / تصدير
- Ù…ØªÙØ§Ø الهوية الخاص بك
استخدم Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ
تخصيص
كتم لمدة ساعة
@@ -882,7 +942,7 @@
ØØ¯ طول Ø§Ù„Ù…ØØ§Ø¯Ø«Ø©
تقليم كل Ø§Ù„Ù…ØØ§Ø¯Ø«Ø§Øª الآن
ÙØØµ وتقليم كل Ø§Ù„Ù…ØØ§Ø¯Ø«Ø§Øª ÙˆÙÙ‚ Ø§Ù„ØØ¯ الأقصى
- الأجهزة
+ الأجهزة المتصلة
ÙØ§ØªØ
داكن
المظهر
@@ -895,6 +955,8 @@
وضع التواÙÙ‚ مع \'مكالمات الواي ÙØ§ÙŠ\'
يمكنك ØªÙØ¹ÙŠÙ„ الخاصية إذا كان هاتÙÙƒ يدعم خاصية WiFi Calling لتسليم الرسائل النصية والوسائط المتعددة ( قم Ø¨Ø§Ù„ØªÙØ¹ÙŠÙ„ Ùقط ÙÙŠ ØØ§Ù„ ØªÙØ¹ÙŠÙ„ WiFi Calling بهاتÙÙƒ)
جهات الاتصال Ø§Ù„Ù…ØØ¸ÙˆØ±Ø©
+ التأكد من أرقام الأمان
+ طلب التصديق عند تغير بصمة الهوية.
أظهر ÙÙŠ الإشعارات
عند استخدام بيانات الجوّال
عند استخدام واي ÙØ§ÙŠ
@@ -928,6 +990,10 @@
إعادة الإرسال
ØÙظ المرÙÙ‚
+
+ الرسائل المختÙية
+
+ صلاØÙŠØ© الرسائل
دعوة
@@ -946,8 +1012,6 @@
Ù…ØØ§Ø¯Ø«Ø© جديدة
- الأمن
- تØÙ‚Ù‚ من الهوية
إعادة ضبط جلسة آمنة
إلغاء الكتم.
@@ -971,6 +1035,8 @@
بث
قارن
+ اعرض رمز الاستجابة السريع الخاص بك
+ Ù…Ø³Ø Ø±Ù…Ø² الاستجابة السريع الخاص بجهة الاتصال
رسالة جديدة
مجموعة جديدة
@@ -979,6 +1045,7 @@
اعتبارها رسائل مقروءة
دعوة الأصدقاء
مساعدة
+
لقد انتهت صلاØÙŠØ© هذه الإصدارة من سيجنال.
@@ -1016,6 +1083,7 @@
Ø£ØÙظ
+ ØÙظ الكل
معاينه الصوره
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 081c69a4167..26d017338f9 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -4,6 +4,8 @@
Ðе
Выдаліць
Пачакайце калі лаÑка
+
+ Ðовае паведамленне
ЦÑпер: %s
Ð’Ñ‹ ÑÑˆÑ‡Ñ Ð½Ðµ ÑžÑталÑвалі пароль
@@ -35,7 +37,6 @@
- Магчыма Ð’Ñ‹ жадаеце верыфікаваць гÑты кантакт?
Ðб\'ём паведамленнÑ: %d KB
@@ -77,7 +78,6 @@
ТранÑпарт: %1$s\nДаÑлана/Ðтрымана: %2$s
Ðдпраўшчык: %1$s\nТранÑпарт: %2$s\nДаÑлана: %3$s\nÐтрымана: %4$s
Захаваць на дыÑк?
- ПаÑпÑхова!
Ðемагчыма запіÑаць на дыÑк!
У працÑÑе...
MMS
@@ -94,7 +94,6 @@
ВыкарыÑтоўваць Ñтандартны: %s
Ðе
- Зараз
@@ -104,8 +103,9 @@
ÐкÑпарт
Ðдмена
ÐкÑпарт
- ПаÑпÑхова!
+
+
ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð°
Ðбнавіць групу
@@ -148,7 +148,6 @@
УÑталÑваць ÑканÑÑ€ штрыхкодаў?
Ðе атрымалаÑÑ Ð´Ð°Ñлаць
- ÐÐ¾Ð²Ð°Ñ Ð°Ñоба
Памылка Ð·Ð°Ñ…Ð°Ð²Ð°Ð½Ð½Ñ MMS!
Памылка злучÑÐ½Ð½Ñ Ð· MMS правайдÑрам...
@@ -172,6 +171,7 @@
ÐÑ Ð·Ð½Ð¾Ð¹Ð´Ð·ÐµÐ½Ð° дÑвайÑаў.
Памылка Ñеткі.
ÐÑправільны QR код.
+
УвÑдзіце пароль
Ðдправіць пароль
@@ -221,26 +221,11 @@
Ðтрыманы пашкоджаны ключ абмену паведамленнÑмі!
Ðтрыманы ключ абмену паведамленнÑмі Ð´Ð»Ñ Ð½Ñправільнай верÑÑ–Ñ– пратакола.
- ÐÑ‚Ñ€Ñ‹Ð¼Ð°Ð½Ð°Ñ Ñ–Ð½Ñ„Ð°Ñ€Ð¼Ð°Ñ†Ñ‹Ñ Ð°Ð±Ð½Ð¾ÑžÐ»ÐµÐ½Ð°Ñ, але мае невÑдомую інфармацыю індÑнтыфікацыі. ÐаціÑніце каб валідзіраваць ідÑнтыфікацыю.
Дублікат паведамленнÑ.
Пакінуць групу...
Чарнавік:
- У Ð²Ð°Ñ Ð½Ñма індÑнтыфікацыйнага ключа.
- Ðтрымальнік Ð½Ñ Ð¼Ð°Ðµ ідÑнтыфікацыйнага ключа.
- Ðтрымальнік Ð½Ñ Ð¼Ð°Ðµ ідÑнтыфікацыйнага ключа!
- УВÐГÐ, адÑÐºÐ°Ð½Ð°Ð²Ð°Ð½Ñ‹Ñ ÐºÐ»ÑŽÑ‡Ñ‹ не Ñупадаюць! Калі лаÑка ўважліва праверце адбіткі.
- ÐЕ верыфікавана!
- Іх ключ правільны. ТакÑама не забудзьÑÑ Ð²ÐµÑ€Ñ‹Ñ„Ñ–ÐºÐ°Ð²Ð°Ñ†ÑŒ Ñвой ключ з імі.
- Верыфікавана!
- У Ð’Ð°Ñ Ð½Ñма ідÑнтыфікацыйнага ключа!
-
- У Ð’Ð°Ñ Ð½Ñма ідÑнтыфікацыйнага ключа.
- УВÐГÐ, адÑканаваны ключ не Ñупадае!
- Ðе верыфікавана!
- ÐдÑÐºÐ°Ð½Ð°Ð²Ð°Ð½Ñ‹Ñ ÐºÐ»ÑŽÑ‡ Ñупадае!
- Верыфікавана!
ІніцыÑваць нÑгледзÑчы на Ñ–Ñнуючы запыт?
ДаÑлаць
@@ -318,6 +303,7 @@
Запампаваць
Фота кантакта
Запампоўка...
+
Пакетны Ñ€Ñжым выбару
%s абрана
@@ -328,6 +314,10 @@
+
+ Выкл
+
+
ДзÑкуй за вашу дапамогу!
ПадпіÑка
@@ -399,10 +389,8 @@
Праверыць
УвÑдзіце Ñ–Ð¼Ñ Ð°Ð»ÑŒÐ±Ð¾ нумар Ñ‚Ñлефона
- Дадаць удзельніка
-
- Іх ідÑнтыфікатар (Ñны чытаюць):
- Ваш ідÑнтыфікатар (вы чытаеце):
+
+
ÐÐµÐºÐ°Ñ‚Ð¾Ñ€Ñ‹Ñ Ð°ÐºÐ°Ð»Ñ–Ñ‡Ð½Ð°Ñці патрабуюць вашай увагі.
Ðдпраўлена
@@ -415,9 +403,7 @@
Стварыць пароль
УвÑдзіце пароль
Ðбраць кантакты
- Публічны ідÑнтыфікацыйны ключ
ЗмÑніць пароль
- Праверыць ідÑнтыфікатар
УÑе выÑвы
УÑе выÑвы з %1$s
@@ -526,6 +512,8 @@
Ð’Ñ‹Ñлаць паведамленне ізноў
Захаваць дадатак
+
+
ЗапраÑіць
@@ -541,8 +529,6 @@
ÐÐ¾Ð²Ð°Ñ Ñ€Ð°Ð·Ð¼Ð¾Ð²Ð°
- БÑÑпка
- Праверыць ідÑнтыфікатар
@@ -566,6 +552,7 @@
Ðалады
Заблакіраваць
Пазначыць уÑе Ñк прачытаныÑ
+
Ð’Ñ‹
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 1537090da5c..5d863fe0790 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -1,10 +1,12 @@
- Signal
+ Сигнал
Да
Ðе
Изтрий
ÐœÐ¾Ð»Ñ Ð¸Ð·Ñ‡Ð°ÐºÐ°Ð¹Ñ‚Ðµ...
+
+ Ðово Ñъобщение
В момента: %s
Ð’Ñе още не Ñи Ñложил парола!
@@ -19,21 +21,21 @@
Изтрий
Изключи паролата?
- Това ще отключи изцÑло вÑички извеÑÑ‚Ð¸Ñ ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ Signal ÑъобщениÑ.
+ Това ще отключи изцÑло вÑички извеÑÑ‚Ð¸Ñ ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ Сигнал ÑъобщениÑ.
Изключи
ОтпиÑване
- ДерегиÑтриране от Singal ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ обажданиÑ...
- Деактивирай Signal ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ обажданиÑ?
- Деактивирайте Signal ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ Ð¾Ð±Ð°Ð¶Ð´Ð°Ð½Ð¸Ñ ÐºÐ°Ñ‚Ð¾ Ñе дерегиÑтрирате от Ñървъра. Ще трÑбва да региÑтрирате ÑвоÑÑ‚ номер отново, за да ползвате уÑлугите в бъдеще.
+ ДерегиÑтриране от Сигнал ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ обажданиÑ...
+ Деактивирай Сигнал ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ обажданиÑ?
+ Деактивирайте Сигнал ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ Ð¾Ð±Ð°Ð¶Ð´Ð°Ð½Ð¸Ñ ÐºÐ°Ñ‚Ð¾ Ñе дерегиÑтрирате от Ñървъра. Ще трÑбва да региÑтрирате ÑвоÑÑ‚ номер отново, за да ползвате уÑлугите в бъдеще.
Грешка при Ñвързване ÑÑŠÑ Ñървъра!
SMS разрешени
ÐатиÑни, за да зададеш SMS програма по подразбиране
SMS забранени
- ÐатиÑни, за да направиш Signal ÑвоÑта SMS програма по подразбиране
- вкл
- Включено
- изкл
- Изключено
+ ÐатиÑни, за да направиш Сигнал ÑвоÑта SMS програма по подразбиране
+ активирана
+ Разрешени
+ деактивирана
+ Спрени
SMS %1$s, MMS %2$s
Парола %1$s, Защита на екрана %2$s
Тема %1$s, Език %2$s
@@ -62,13 +64,12 @@
ВходÑщо обаждане
- ИдентифициращиÑÑ‚ ключ за %1$s е променен. Това значи че или нÑкой Ñе опитва да прихване комуникациите ти, или че %2$s е преинÑталирал Signal и вече има нов ключ за ÑамоличноÑÑ‚.
- Може би е добре да Ñе провери âŽ
-този контакт. âŽ
+ ЧиÑлата Ви за ÑигурноÑÑ‚ Ñ %1$s Ñа променени. Това означава, че или нÑкой Ñе опитва да прехване куминикациÑта Ви, или че %2$s е преинÑталирал Сигнал.
+ Може да желаете да проверите чиÑлата за ÑигурноÑÑ‚ Ñ Ñ‚Ð¾Ð·Ð¸ контакт.
Приемам
Съобщение %s
- Сигнал обаждане %s
+ Ð¡Ð¸Ð³Ð½Ð°Ð»Ñ Ð¾Ð±Ð°Ð¶Ð´Ð°Ð½Ðµ %s
Размер на Ñъобщението: %d KB
Изтича: %s
@@ -79,10 +80,10 @@
Получи Ñе Ñъобщение за обмÑна на ключове, натиÑни, за да продължиш.
%1$s напуÑна групата.
ÐатиÑни за повече информациÑ
- ÐатиÑни, за да разрешиш преминавене към не криптирани ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² краен Ñлучай
+ ÐатиÑни, за да разрешиш преминавене към некриптирани ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² краен Ñлучай
Разреши преминавене към не шифровани SMS-и?
Разреши преминавене към не шифровани MMS-и?
- Това Ñъобщение ÐЯМРда бъде криптирано, защото Ð¿Ð¾Ð»ÑƒÑ‡Ñ‚ÐµÐ»Ñ Ð²ÐµÑ‡Ðµ не е потребител на Signal.\n\nИзпрати незащитено Ñъобщение?
+ Това Ñъобщение ÐЯМРда бъде криптирано, защото Ð¿Ð¾Ð»ÑƒÑ‡Ñ‚ÐµÐ»Ñ Ð²ÐµÑ‡Ðµ не е потребител на Сигнал.\n\nИзпрати незащитено Ñъобщение?
ÐеуÑпешно откриване на приложение за отварÑне на този файл.
от %s
do %s
@@ -116,20 +117,21 @@
Сигурен ли Ñи, че иÑкаш да напуÑнеш тази група?
Ðекриптиран SMS
Ðекриптиран MMS
- Signal
- Да преминем към Signal %1$s
+ Сигнал
+ Да преминем към Сигнал %1$s
Да използваме Ñледното за чатене: %1$s
Грешка при напуÑкането на група...
MMS не Ñе поддържа
Това Ñъобщение не може да бъде изпратезо, защото Ð¼Ð¾Ð±Ð¸Ð»Ð½Ð¸Ñ Ð’Ð¸ оператор не поддържа MMS.
ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€Ð¸ контакт
- Отблокирай?
- Сигурен ли Ñи, че иÑкаш да отблокираш този контакт?
+ Отблокирай този контакт?
+ Отново ще може да получавате ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ Ð¾Ð±Ð°Ð¶Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚ този контакт.
Отблокирай
Размерът на Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð» надминава допуÑÑ‚Ð¸Ð¼Ð¸Ñ Ð»Ð¸Ð¼Ð¸Ñ‚ за типа Ñъобщение, който изпращате.
Камерата е недоÑтъпна
Ðе може да бъде запиÑано аудио!
Грешка при изпращане на глаÑово Ñъобщение...
+ ÐÑмате инÑталирано приложение, което да може да използва тази препратка.
Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ñъобщението
ТранÑпорт: %1$s\nИзпратени/Получени: %2$s
@@ -151,7 +153,7 @@
- Грешка при запазването на прикачениÑÑ‚ файл!
- Грешка при запазването на прикачените файлове!
- УÑпех!
+ Файлът е уÑпешно запазен.
ÐеуÑпеше Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° SD карта!
- Запазване на Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»
@@ -163,13 +165,14 @@
Събиране на прикачените файлове...
ПредÑтоÑщ...
- Данни (Signal)
+ Данни (Сигнал)
MMS
SMS
Изтриване
Изтриване на ÑъобщениÑ...
ТърÑене...
+ ÐÑмате инÑталиран браузър.
- Изтриване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ñ€Ð°Ð·Ð³Ð¾Ð²Ð¾Ñ€?
@@ -199,7 +202,7 @@
Използване на подразбиращ Ñе: %s
ÐÑма
- Сега
+ Току що
%d мин
Премахни връзката \'%s\'?
@@ -215,59 +218,64 @@
ПоÑледна активноÑÑ‚ %s
ДнеÑ
- Сподели Ñ
+ СподелÑне Ñ
- Добре дошли в Signal.
- TextSecure и Redphone Ñе обедениха в чат програма за конфеденциално разговори, за вÑÑка ÑитуациÑ: Signal.
- Добре дошли в Signal!
- TextSecure вече е Signal.
- TextSecure и Redphone вече Ñа една програма: Signal. ÐатиÑни за да разгледаш.
+ Добре дошли в Сигнал.
+ TextSecure и Redphone Ñе обедениха в чат програма за конфеденциално разговори, за вÑÑка ÑитуациÑ: Сигнал.
+ Добре дошли в Сигнал!
+ TextSecure вече е Сигнал.
+ TextSecure и Redphone вече Ñа една програма: Сигнал. ÐатиÑни за да разгледаш.
ИзнаÑÑне
- ИзнеÑи некриптирано на диÑка?
- Внимание, това ще изнеÑе некриптиран архив на Signal ÑъобщениÑта на външната памет.
+ ИзнаÑÑне в некриптирано ÑÑŠÑтоÑние на диÑка?
+ Внимание, това ще изнеÑе некриптиран архив на Сигнал ÑъобщениÑта на външната памет.
Отказ
ИзнаÑÑне
- ИзнеÑи некриптирано на външната памет...
+ ИзнеÑÑне в некриптирано ÑÑŠÑтоÑние на външната памет...
Грешка, неуÑпешен опит за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° външната памет.
Грешка при запиÑване на външната памет.
- УÑпех!
+ ИзнаÑÑнето е уÑпешен.
- Перманентна Signal комуникационна грешка!
- Signal не уÑÐ¿Ñ Ð´Ð° Ñе региÑтрира Ñ Google Play Services. Signal ÑÑŠÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ разговори Ñа деактивирани, Ð¼Ð¾Ð»Ñ Ð¿Ñ€ÐµÑ€ÐµÐ³Ð¸Ñтрирайте през менюто ÐаÑтройки > Допълнителние.
+ Перманентна Сигнал комуникационна грешка!
+ Сигнал не уÑÐ¿Ñ Ð´Ð° Ñе региÑтрира Ñ Google Play Services. Сигнал ÑÑŠÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ разговори Ñа деактивирани, Ð¼Ð¾Ð»Ñ Ð¿Ñ€ÐµÑ€ÐµÐ³Ð¸Ñтрирайте през менюто ÐаÑтройки > Допълнителние.
+
+ Грешка при изтеглÑнето на GIF-а в пълни размери...
+
+ GIF-ове
+ Стикери
Ðова група
Промени група
Име на групата
Ðова MMS група
- Избрахте контакт, който не поддържа Signal групи, така че групата ще бъде MMS.
- Ðе Ñте региÑтриран за Signal ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ разговори, така че Signal групи Ñа деактивирани. МолÑ, опитайте да Ñе региÑтрирате в ÐаÑтройки > Допълнителни.
+ Избрахте контакт, който не поддържа Сигнал групи, така че групата ще бъде MMS.
+ Ðе Ñте региÑтриран за Сигнал ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ разговори, така че Сигнал групи Ñа деактивирани. МолÑ, опитайте да Ñе региÑтрирате в ÐаÑтройки > Допълнителни.
ÐаÑтъпи не очаквана грешка, коÑто доведе до неуÑпешно Ñъздаване на група.
- ТрÑбва да добавиш поне един човек в групата Ñи!
+ ТрÑбва да добавите поне един човек в групата Ñи!
Един от членовете на групата има номер, който не може да бъде разпознат правилно. МолÑ, оправи номера на контакта или го премахни.
Ðватар за групата
Създай група
Създаване на %1$s...
ОбновÑване %1$s...
- ÐеуÑпешно добавÑне на %1$s, защото те не Ñа потребители на Signal.
+ ÐеуÑпешно добавÑне на %1$s, защото те не Ñа потребители на Сигнал.
Зареждане на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° групата...
Вече Ñте в групата.
Ðз
- ВнеÑи
- ИзнеÑи
+ ВнаÑÑне
+ ИзнеÑÑне
- Добави вÑички ÑъщеÑтвуващи SMS-и?
+ ДобавÑне на вÑички ÑъщеÑтвуващи SMS-и?
Това ще внеÑе
-SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте внеÑли
+SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Сигнал. Ðко вече Ñте внеÑли
ÑиÑтемата SMS базата данни това ще доведе до дублиратне на ÑъобщениÑта.
- ВнеÑи
+ ВнаÑÑне
Отказ
ВъзÑтанови от шифровано архивно копие?
ВъзÑтановÑването от криптиран архив напълно ще промени ÑъщеÑтвуващите ключове, наÑтройки и ÑъобщениÑ.
-Ще изгубите вÑичката информациÑ, коÑто е в Ñегашната инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° Signal, но не и в ÐºÑ€Ð¸Ð¿Ñ‚Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð².
+Ще изгубите вÑичката информациÑ, коÑто е в Ñегашната инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° Сигнал, но не и в ÐºÑ€Ð¸Ð¿Ñ‚Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð².
ВъзÑтанови
ВъзÑтанови от разшифровано архивно копие?
Това ще възÑтанови
@@ -285,41 +293,41 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
ÐатиÑнете и задръжте, за да запишете глаÑово Ñъобщение, отпуÑнете, за да изпратите
- Сподели
- Изпрати SMS
+ СподелÑне
+ Изберете контакти
Откажи
Изпращане...
Сърце
Поканите изпратени!
- Покани в Signal
-
- - ИЗПРÐТИ ДО 1 ПРИЯТЕЛ
- - ИЗПРÐТИ ДО %d ПРИЯТЕЛЯ
+ Покани в Сигнал
+
+ - ИЗПРÐТЕТЕ SMS ДО 1 ПРИЯТЕЛ
+ - ИЗПРÐТЕТЕ SMS ДО %d ПРИЯТЕЛЯ
- Изпрати 1 SMS покана?
- Изпрати %d SMS покани?
- Да преминем към Signal %1$s
- Изглежда нÑмате приложениÑ, Ñ ÐºÐ¾Ð¸Ñ‚Ð¾ да можете да Ñподелите.
- ПриÑтелите не дават на приÑтелите Ñи да чатÑÑ‚ без криптиране.
+ Да преминем към Сигнал%1$s
+ Изглежда нÑмате приложениÑ, Ñ ÐºÐ¾Ð¸Ñ‚Ð¾ да можете да ÑподÑлите.
+ ПриÑтелите не оÑтавÑÑ‚ приÑтелите Ñи да чатÑÑ‚ без криптиране.
Ðе е намерен Ñканиран ключ!
ИнÑталирай Ñкенер за баркодове?
- Signal Ñе нуждае от баркод Ñкенер за QR кодове.
+ Сигнал Ñе нуждае от баркод Ñкенер за QR кодове.
ÐеуÑпешно изпращане
- Ðова ÑамоличноÑÑ‚
+ Ðови чиÑла за ÑигурноÑÑ‚
Грешка при ÑъхранÑване на MMS!
Грешка при Ñвързването Ñ MMS доÑтавчика...
Грешка при четене на MMS наÑтройките...
- Протича Signal разговор
+ Протича Сигнал разговор
ПропуÑнато обаждане от %s
- ПропуÑнато Signal обаждане
- УÑтановÑване на Signal разговор
- ВходÑщо Signal обадждане
+ ПропуÑнато Сигнал обаждане
+ УÑтановÑване на Сигнал разговор
+ ВходÑщо Сигнал обадждане
Забрани обаждането
Приеми обаждането
Прекрати обаждането
@@ -327,13 +335,16 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Мултимедийно Ñъобщение
- Получихте Ñъобщение криптирано ÑÑŠÑ Ñтара верÑÐ¸Ñ Ð½Ð° Signal, коÑто вече не Ñе поддържа. ÐœÐ¾Ð»Ñ Ð¿Ð¾Ð¼Ð¾Ð»ÐµÑ‚Ðµ изпращача да обнови верÑиÑта Ñи и да препрати Ñъобщението.
+ Получихте Ñъобщение криптирано ÑÑŠÑ Ñтара верÑÐ¸Ñ Ð½Ð° Сигнал, коÑто вече не Ñе поддържа. ÐœÐ¾Ð»Ñ Ð¿Ð¾Ð¼Ð¾Ð»ÐµÑ‚Ðµ изпращача да обнови верÑиÑта Ñи и да препрати Ñъобщението.
ÐапуÑнахте групата.
Групата е обновена.
%s ти Ñе обади
Обаждане до %s
ПропуÑнато обаждане от %s
- %s е в Signal, кажи им здраÑти!
+ %s е в Сигнал, кажи им здраÑти!
+ Заложихте време за изчезване на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° %1$s.
+ %1$s заложи време за изчезване на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° %2$s.
+ ЧиÑлата Ви за ÑигурноÑÑ‚ Ñ %s Ñа променени
Паролите не Ñъвпадат!
Грешна Ñтара парола!
@@ -354,13 +365,17 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Ðе е открито уÑтройÑтво.
Проблем Ñ Ð¼Ð¾Ð±Ð¸Ð»Ð½Ð°Ñ‚Ð° мрежа.
Ðевалиден QR код.
- За Ñъжалние имаш твърде много региÑтрирани уÑтройÑтва, опитай да премахнеш нÑкои от Ñ‚ÑÑ…...
+ За Ñъжалние имате твърде много региÑтрирани уÑтройÑтва, опитайте да премахнете нÑкои от Ñ‚ÑÑ…...
За Ñъжаление това не е валидна QR връзка.
- Свържи Ñ Signal уÑтройÑтво?
- Изглежда Ñе опитвате да Ñвържете Signal уÑтройÑтво Ñ 3та Ñкенер програма. За Ваша ÑигурноÑÑ‚, Ð¼Ð¾Ð»Ñ Ñканирайте кодът повторно използвайки Signal.
+ Свържи Ñ Ð¡Ð¸Ð³Ð½Ð°Ð» уÑтройÑтво?
+ Изглежда Ñе опитвате да Ñвържете Сигнал уÑтройÑтво Ñ Ð²ÑŠÐ½ÑˆÐ½Ð° Ñкенер програма. За Ваша ÑигурноÑÑ‚, Ð¼Ð¾Ð»Ñ Ñканирайте кодът повторно използвайки Сигнал.
+
+ Изчезващи ÑъобщениÑ
+ Съобщението Ви нÑма да изчезне.
+ Изпратени и получени ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² този разговор ще изчезнат %s Ñлед изпращането им.
Въведи паролата
- Signal икона
+ Сигнал икона
Задай паролата
Грешна парола!
@@ -371,15 +386,16 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Оцени Ñега!
Ðе благодарÑ
По-къÑно
+ Опа, Play Store приложението не е инÑталирано на уÑтройÑтвото Ви.
Блокирай този контакт?
- Повече нÑма да получавате ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¾Ð±Ð°Ð¶Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚ този потребител.
+ Повече нÑма да получавате ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ Ð¾Ð±Ð°Ð¶Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚ този контакт.
Блокирай
Отблокирай този контакт?
- Сигурен ли Ñи, че иÑкаш да отблокираш този контакт?
+ Отново ще може да получавате ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ Ð¾Ð±Ð°Ð¶Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚ този контакт.
Отблокирай
- Включено
- Изключено
+ Разрешени
+ Спрени
Вдигане
ПрекратÑване на обаждането
@@ -402,7 +418,7 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Ðомерът, който набрахте не поддържа криптирани обажданиÑ!
ЯÑно
- Свържи Ñе ÑÑŠÑ Signal
+ Свържи Ñе ÑÑŠÑ Ð¡Ð¸Ð³Ð½Ð°Ð»
Избери държавата Ñи
ТрÑбва да въведеш ÑвоÑ
международен код
@@ -441,12 +457,12 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Твърде много опити!
ÐаÑкоро вече поиÑка обаждане. Може да поиÑкаш повторно Ñлед 20 минути.
Конфликт при региÑтрациÑта
- Този номер е вече региÑтриран Ñ Ð´Ñ€ÑƒÐ³ Signal Ñървър (CyanogenMod?). ТрÑбва да Ñе дерегиÑтрирате от него преди да Ñе региÑтрирате тук.
+ Този номер е вече региÑтриран Ñ Ð´Ñ€ÑƒÐ³ Сигнал Ñървър (CyanogenMod?). ТрÑбва да Ñе дерегиÑтрирате от него преди да Ñе региÑтрирате тук.
РегиÑтрациÑта завършена...
- Signal региÑтрациÑта е уÑпешно завършена.
+ Сигнал региÑтрациÑта е уÑпешно завършена.
Грешка при региÑтрациÑта
- Signal региÑтрациÑта Ñе натъкна на проблем.
+ Сигнал региÑтрациÑта Ñе натъкна на проблем.
Изображение
Ðудио
@@ -457,9 +473,9 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Съобщението за обмÑна на ключа е Ñ Ð³Ñ€ÐµÑˆÐ½Ð° верÑÐ¸Ñ Ð½Ð° протокола.
- Получено е Ñъобщение Ñ Ð½Ðµ познат ключ за ÑамоличноÑÑ‚. ÐатиÑни, за да го обработиш и покажеш.
- Получена е променена, но непозната Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° ÑамоличноÑÑ‚. ÐатиÑни, за да Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¸Ñˆ.
- Сигурната ÑеÑÐ¸Ñ Ðµ започната от начало.
+ Получихте Ñъобщение Ñ Ð½Ð¾Ð²Ð¸ чиÑла за ÑигурноÑÑ‚. ÐатиÑнете, за да ги видите и обработите.
+ Вие реÑтартирахте Ñигурната ÑеÑиÑ.
+ %s реÑтартира Ñигурната ÑеÑиÑ.
Дублирай Ñъобщението.
ÐапуÑна групата...
@@ -469,27 +485,17 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Ви Ñе обади
ПропуÑнато обаждане
Медийно Ñъобщение
- %s е в Signal, кажи му здраÑти!
+ %s е в Сигнал, кажи му здраÑти!
+ Времето за изчезване на ÑъобщениÑта е %s
+ ЧиÑлата Ви за ÑигурноÑÑ‚ Ñ %s Ñа променени.
- ÐÑмаш ключ за ÑамоличноÑÑ‚.
- ПолучателÑÑ‚ нÑма ключ за ÑамоличноÑÑ‚.
- ПолучателÑÑ‚ нÑма ключ за ÑамоличноÑÑ‚.
- Сканирай QR кодът на контакта
- Покажи ÑобÑÑ‚Ð²ÐµÐ½Ð¸Ñ QR code
- Ð’ÐИМÐÐИЕ, ÑканираниÑÑ‚ ключ ÐЕ Е ÑъщиÑÑ‚! МолÑ, провери текÑÑ‚Ð¾Ð²Ð¸Ñ Ð¾Ñ‚Ð¿ÐµÑ‡Ð°Ñ‚ÑŠÐº внимателно.
- ÐЕ Е Проверен!
- ТехниÑÑ‚ ключ е правилен. Ðеобходимо е да Ñе провери и твоÑÑ‚ ключ от Ñ‚ÑÑ….
- Проверен!
- ÐÑмаш ключ за ÑамоличноÑÑ‚!
-
- ÐÑмаш ключ за ÑамоличноÑÑ‚!
- Сканирай QR кодът на контакта
- Покажи ÑобÑÑ‚Ð²ÐµÐ½Ð¸Ñ QR code
- Ð’ÐИМÐÐИЕ, ÑканираниÑÑ‚ ключ ÐЕ Е Ñъвпада!
- Ðе потвърдено!
- СканираниÑÑ‚ ключ е ÑъщиÑ!
- Проверен!
- ВашиÑÑ‚ ключ за ÑамоличноÑÑ‚
+ ВашиÑÑ‚ контакт използва Ñтара верÑÐ¸Ñ Ð½Ð° Сигна. Помолети го да Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸ преди да Ñравните чиÑлата за ÑигурноÑÑ‚.
+ ВашиÑÑ‚ контакт използва по-нова верÑÐ¸Ñ Ð½Ð° Сигнал Ñ Ð½ÐµÑъвмеÑтим QR формат. МолÑ, обновете верÑиÑта Ñи, за да можете да Ñравните.
+ СканираниÑÑ‚ QR код не предÑтавлÑва правило форматирани чиÑла за ÑигурноÑÑ‚. МолÑ, опитайте да Ñканирате отново.
+ СподелÑне на чиÑла за ÑигурноÑÑ‚ през...
+ Ðашите Сигнал чиÑла за ÑигурноÑÑ‚:
+ Изглежда нÑмате приложениÑ, Ñ ÐºÐ¾Ð¸Ñ‚Ð¾ да можете да ÑподÑлите.
+ Ðе Ñа открити копирани чиÑла за ÑигурноÑÑ‚
Покани въпреки ÑъщеÑтвуващата покана?
Изпрати
@@ -518,11 +524,11 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Извършва Ñе внаÑÑне
ВнаÑÑне на текÑтови ÑъобщениÑ
ВнаÑÑнето завършено
- ВнаÑÑнето на ÑиÑтемната база данни на Signal е завършено.
+ ВнаÑÑнето на ÑиÑтемната база данни е завършено.
ÐатиÑните, за да отворите.
ÐатиÑнете, за да отворите или натиÑнете катинара, за да затворите.
- Signal е отключен
+ Сигнал е отключен
Заключи паролата
%1$d нови ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² %2$d чата
@@ -538,18 +544,27 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Медийно Ñъобщение
Отговори
- Бърз отговор не е възможен, когато Signal е заключен!
+ Бърз отговор не е възможен, когато Сигнал е заключен!
Проблем при изпрашане на Ñъобщение!
- Signal
+ Сигнал
Ðово Ñъобщение
Изображение
+ Изображение
Ðудио
+ Ðудио
Видео
+ Видео
Контакт
+ Контакт
Камера
+ Камера
МеÑтоположение
+ МеÑтоположение
+ GIF
+ Gif
+ ЗатворÑне/отворÑне на чекмеджето Ñ Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½Ð¸ файлове
Стара парола
Ðова парола
@@ -570,16 +585,19 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Чатът е в тих режим
- Изпрати Signal Ñъобщение
+ Изпрати Сигнал Ñъобщение
Изпрати некриптиран SMS
Изпрати некриптиран MMS
+ От %1$s
Изпрати
Премахни
Разговор Ñ %1$s
Създаване на Ñъобщение
Смени emoji клавиатурата
Изображение на прикачен файл
- Затвори/отвори чекмеджето Ñ Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½Ð¸ файлове
+ ЗатворÑне/отворÑне на чекмеджето за прикчаване на файл от камера
+ ЗапиÑване и изпращане прикачено аудио
+ Ðктивиране на Сигнал за SMS-и
ПЛЪЗÐЕТЕ, ЗРДРОТКÐЖЕТЕ
@@ -596,6 +614,10 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Изтегли
Снимка на контакта
Ð˜Ð·Ñ‚ÐµÐ³Ð»Ñ Ñе
+
+ ПуÑкане
+ Пауза
+ ИзтеглÑне
Режим на групово избиране
%s избран
@@ -611,28 +633,60 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Свържи ново уÑтройÑтво
продължи
+
+ Спрени
+
+ - 1 Ñекунда
+ - %d Ñекунди
+
+ %ds
+
+ - 1 минута
+ - %d минути
+
+ %dm
+
+ - 1 чаÑ
+ - %d чаÑа
+
+ %dh
+
+ - 1 ден
+ - %d дена
+
+ %dd
+
+ - 1 Ñедмица
+ - %d Ñедмици
+
+ %dw
+
+ ТърÑи Ñред GIF-ове и Ñтикери
+
+ ÐÑма нищо открито
ÐеуÑпешно прочитане на доклада на Вашето уÑтройÑтво. Ð’Ñе пак може да използвате ADB, за да получте доклада.
Ð‘Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ð·Ð° помоща!
Изпращане
Изпращане на доклад до gist...
+ ÐÑма инÑталиран браузър
- Желаете ли да внеÑете вече ÑъщеÑтуващите текÑтови ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² криптиранта база данни на Signal?
+ Желаете ли да внеÑете вече ÑъщеÑтуващите текÑтови ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² криптиранта база данни на Сигнал?
СиÑтемната база данни нÑма да бъде променена по никакъв начин.
ПропуÑни
- ВнеÑи
+ ВнаÑÑне
Това може да отнеме малко време. МолÑ, за търпение, ще те уведомим, когато вноÑÑŠÑ‚ е завършен.
Ð’ÐÐСЯÐЕ
ОбновÑване на базата данни...
Запази разшифрован архив
- ИзнеÑи некриптиран архив ÑъвмеÑтим Ñ \'SMS изнаÑÑне & внаÑÑне\' върху външната памет
- ВнеÑи вÑички ÑъщеÑтвуващи SMS-и
- ВнеÑи базата данни от ÑиÑтемната програма за ÑъобщениÑ.
+ ИзнаÑÑне на некриптиран архив ÑъвмеÑтим Ñ \'SMS изнаÑÑне & внаÑÑне\' върху външната памет
+ ВнаÑÑне на вÑички вече ÑъщеÑтвуващи SMS-и
+ ВнаÑÑне на базата данни от ÑиÑтемната програма за ÑъобщениÑ.
ВъзÑтанови от криптирано архивно копие?
- ВъзÑтанови криптиран Singal архив, който Ñи изнеÑъл преди време.
- ВнеÑи разшифрован архив
- ВнеÑи некриптиран архив ÑъвмеÑтим Ñ \'SMS изнаÑÑне & внаÑÑне\' върху външната памет
+ ВъзÑтановÑване на криптиран Сигнал архив, който Ñте изнеÑли преди
+ ВнаÑÑне на некриптиран архив
+ ВнеÑÑне на некриптиран архив ÑъвмеÑтим Ñ \'SMS изнаÑÑне & внаÑÑне\' върху външната памет
Разгледай Ñ†ÐµÐ»Ð¸Ñ Ñ€Ð°Ð·Ð³Ð¾Ð²Ð¾Ñ€
@@ -642,8 +696,8 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
ИЗПРÐТИ ПОВТОРÐО
Ðалагат Ñе ръчни MMS наÑтройки за Ñ‚Ð²Ð¾Ñ Ñ‚ÐµÐ»ÐµÑ„Ð¾Ð½.
- Включено
- Изключено
+ Разрешени
+ Спрени
Ðе е избрано
ВъведениÑÑ‚ текÑÑ‚ не е валиден адреÑ
ВъведениÑÑ‚ текÑÑ‚ не валиден host
@@ -657,7 +711,7 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Отключи
- Signal Ñе нуждае от MMS наÑтройки, за да може да доÑтави медийни и групови ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ· мрежата. УÑтройÑтвото ти не прави тази Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð¾Ñтъпна, което Ñе Ñлучва понÑкога за заключени уÑтройва и други ограничени конфигурации.
+ Сигнал Ñе нуждае от MMS наÑтройки, за да може да доÑтави медийни и групови ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ· мрежата. УÑтройÑтвото ти не прави тази Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð¾Ñтъпна, което Ñе Ñлучва понÑкога за заключени уÑтройва и други ограничени конфигурации.
За да изптратиш медийни и групови ÑъобщениÑ, избери \'ОК\' и наглаÑи изиÑкваните наÑтройки. MMS наÑтройките на Ñ‚Ð²Ð¾Ñ Ð¼Ð¾Ð±Ð¸Ð»ÐµÐ½ оператор могат да бъдат намерени като потърÑиш \'APN наÑтройки\'. Ðужно е да изпълниш тази Ñтъпка Ñамо веднъж.
БЛОКИРÐÐ
@@ -669,16 +723,16 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
Блокирай
ЦвÑÑ‚
ЦвÑÑ‚ за този контакт
- Провери ÑамоличноÑтта
+ Проверка на чиÑлата за ÑигурноÑÑ‚
- Signal-Ñко обаждане
+ Сигнал-Ñко обаждане
прекрати обаждането
Ðудио
Заглуши
- Signal-Ñко обаждане
+ Сигнал-Ñко обаждане
-Потвърди ÑÐ²Ð¾Ñ Ñ‚ÐµÐ»Ñ„Ð¾Ð½ÐµÐ½ номер, за да Ñе Ñвържеш Ñ Signal
+Потвърди ÑÐ²Ð¾Ñ Ñ‚ÐµÐ»Ñ„Ð¾Ð½ÐµÐ½ номер, за да Ñе Ñвържеш Ñ Ð¡Ð¸Ð³Ð½Ð°Ð»
ТВОЯТРДЪРЖÐÐ’Ð
КОДРÐРТВОЯТРДЪРЖÐВРИ
ТЕЛЕФОÐЕРÐОМЕÐ
@@ -692,37 +746,37 @@ SMS-те от ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð² в Signal. Ðко вече Ñте в
SMS прихващачи.
-ÐÑкои други чат програми като Handcent или GoSMS Ñе държат зле и прихващат вÑички входÑщи SMS ÑъобщениÑ. Проверете дали Ñте получили Ñъобщение започващо ÑÑŠÑ \'ВашиÑÑ‚ Signal код:\', в който Ñлучай наглаÑете текущата чат програма да пропуÑка ÑъобщениÑта.
+ÐÑкои други чат програми като Handcent или GoSMS Ñе държат зле и прихващат вÑички входÑщи SMS ÑъобщениÑ. Проверете дали Ñте получили Ñъобщение започващо ÑÑŠÑ \'ВашиÑÑ‚ Сигнал код:\', в който Ñлучай наглаÑете текущата чат програма да пропуÑка ÑъобщениÑта.
Грешен номер.
МолÑ, провери дали номера, който Ñе въвели е правилен и добре форматиран
за региона, в който Ñе намираш.
Google Voice
-Signal не работи Ñ Google Voice номера.
+Сигнал не работи Ñ Google Voice номера.
ГлаÑово потвърждение
-Signal може да ти Ñе обади, за да потвърди номера ти. ÐатиÑни \'Обади ми Ñе\' и въведи 6 Ñ†Ð¸Ñ„Ñ€ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´,
+Сигнал може да ти Ñе обади, за да потвърди номера ти. ÐатиÑни \'Обади ми Ñе\' и въведи 6 Ñ†Ð¸Ñ„Ñ€ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´,
който чуваш, долу.
Потвърди
Обади ми Ñе
Промени номера
Грешка при Ñвързването.
- Signal не уÑÐ¿Ñ Ð´Ð° Ñе Ñвърже ÑÑŠÑ Ñървъра.
+ Сигнал не уÑÐ¿Ñ Ð´Ð° Ñе Ñвърже ÑÑŠÑ Ñървъра.
ÐÑколко вероÑтни
проблема включват:
ÐÑма интернет
връзка.
УÑтройÑтвот Ви
-Ñе нуждае от връзка Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚, за да може да използва тази Signal уÑлуга.
+Ñе нуждае от връзка Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚, за да може да използва тази Сигнал уÑлуга.
Проверете и Ñе убедете, че Ñте Ñвързани Ñ Ð¼Ð¾Ð±Ð¸Ð»Ð½Ð°Ñ‚Ð° мрежа или Wi-Fi.
Firewall-a e твърде реÑтриктивен.
-Ðко Ñте Ñвързане през Wi-Fi, възможно е да имате firewall, който блокирва доÑтъпа до Signal Ñървъра. Оптайте друг вид доÑтъп до интернет.
+Ðко Ñте Ñвързане през Wi-Fi, възможно е да имате firewall, който блокирва доÑтъпа до Сигнал Ñървъра. Оптайте друг вид доÑтъп до интернет.
-Signal ще опита да потвърди Ñ‚ÐµÐ»ÐµÑ„Ð¾Ð½Ð½Ð¸Ñ Ñ‚Ð¸ номер, автоматично, поÑредÑтвом SMS.
+Сигнал ще опита да потвърди Ñ‚ÐµÐ»ÐµÑ„Ð¾Ð½Ð½Ð¸Ñ Ñ‚Ð¸ номер, автоматично, поÑредÑтвом SMS.
Свързване...
Изчкване за SMS
потвърждение...
@@ -730,7 +784,7 @@ Signal ще опита да потвърди Ñ‚ÐµÐ»ÐµÑ„Ð¾Ð½Ð½Ð¸Ñ Ñ‚Ð¸ номе
Това
може да отнеме момент. МолÑ, бъди търпелив, ще те уведомим, когато потвърждението е завършено.
-Signal чака твърде дълго за SMS потвърждение.
+Сигнал чака твърде дълго за SMS потвърждение.
SMS потвърждението е
неуÑпешно.
@@ -740,14 +794,17 @@ Signal чака твърде дълго за SMS потвърждение.Провери
Въведи име или номер
- Добави член
-
- ТÑхната ÑамоличноÑÑ‚ (те четат):
- ТвоÑта ÑамоличноÑÑ‚ (ти чети):
+ ДобавÑне на членове
+
+ Ðаучете повече за проверката за ÑигурноÑÑ‚ Ñ Ñ‡Ð¸Ñла.]]>
+ ÐатиÑните за Ñканиране
+
+ СподелÑне на чиÑла за ÑигурноÑÑ‚
ÐÑколко проблема изиÑкват вашето внимание.
Изпратен
Получен
+ Изчезва
През
До:
От:
@@ -756,21 +813,19 @@ Signal чака твърде дълго за SMS потвърждение.Създай парола
Въведи парола
Избери контакти
- Открит е Signal
- Публичен ключ за ÑамоличноÑÑ‚
+ Открит е Сигнал
Смени паролата
- Провери ÑамоличноÑтта
+ Проверка на чиÑлата за ÑигурноÑÑ‚
Изпрати доклад
Преглед на медиÑта
Ð’Ñички изображениÑ
Ð’Ñички Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ %1$s
Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ñъобщението
- Управление на Ñвързани уÑтройÑтва
+ Свързани уÑтройÑтва
Поканете приÑтели
Ðрхивирани разговори
ВнаÑÑне / изнаÑÑне
- ВашиÑÑ‚ ключ за ÑамоличноÑÑ‚
Използвай подразбиращ Ñе
Използвай Ñпециален
Тих режим за 1 чаÑ
@@ -779,8 +834,8 @@ Signal чака твърде дълго за SMS потвърждение.Тих режим за 7 дена
Тих режим за 1 година
ÐаÑтройки по подразбиране
- Включено
- Изключено
+ Разрешени
+ Спрени
Име и Ñъобщение
Само име
ÐÑма име или ÑъобщениÑ
@@ -797,8 +852,8 @@ Signal чака твърде дълго за SMS потвърждение.SMS и MMS
Използвай за вÑички SMS-и
Използвай за вÑички MMS-и
- Използвай Signal за вÑички входÑщи текÑтови ÑъобщениÑ
- Използвай Signal за вÑички входÑщи мултимедийни ÑъобщениÑ
+ Използвай Сигнал за вÑички входÑщи текÑтови ÑъобщениÑ
+ Използвай Сигнал за вÑички входÑщи мултимедийни ÑъобщениÑ
ÐаÑтройки на въвеждането
Разреши клавиша Enter
Замени клавиша за емотикони Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° Enter
@@ -810,22 +865,22 @@ Signal чака твърде дълго за SMS потвърждение.Смени паролата
Сменете паролата Ñи
Включи парола
- Заключи Signal и вÑички извеÑÐ¸Ñ‚Ð¸Ñ Ñ Ð¿Ð°Ñ€Ð¾Ð»Ð°
+ Заключи Сигнал и вÑички извеÑÐ¸Ñ‚Ð¸Ñ Ñ Ð¿Ð°Ñ€Ð¾Ð»Ð°
СигурноÑÑ‚ на екрана
Забрани автоматично копиране на екрана в ÑпиÑка Ñ Ñ‡ÐµÑто използвани програми и в Ñамата програма.
- Ðвтоматично заключвай Signal Ñлед зададен период от неактивноÑÑ‚
+ Ðвтоматично заключвай Сигнал Ñлед зададен период от неактивноÑÑ‚
Парола за период на неактивноÑÑ‚
ПродължителноÑÑ‚ на период за неактивноÑÑ‚
ИзвеÑтиÑ
Разреши извеÑÑ‚Ð¸Ñ Ð·Ð° ÑъобщениÑ
ИзвеÑÑ‚Ð¸Ñ Ð·Ð° нови контакти
- Показва извеÑÑ‚Ð¸Ñ Ð·Ð° нови Signal контакти
+ Показва извеÑÑ‚Ð¸Ñ Ð·Ð° нови Сигнал контакти
LED цвÑÑ‚
Ðепознат
LED извеÑÑ‚Ñване
Промени извеÑÑ‚Ñването Ñ LED мигане
- Включено за:
- Изключено за:
+ Разрешени за:
+ Спрени за:
ÐовиÑÑ‚ начин за LED извеÑÑ‚Ñване зададен!
МелодиÑ
Промени звуков Ñигнал за извеÑтие
@@ -874,19 +929,21 @@ Signal чака твърде дълго за SMS потвърждение.Граница за дължина на разговора
СкъÑи вÑички разговори Ñега
Сканирай вÑички разговори и приложи ограничението за дължина на разговори
- УÑтройÑтва
+ Свързани уÑтройÑтва
Светла
Тъмна
- Външен вид
+ Облик
Тема
По подразбиране
Език
- Signal ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ обажданиÑ
- Безплатни, лични ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ Ð¾Ð±Ð°Ð¶Ð´Ð°Ð½Ð¸Ñ Ð´Ð¾ Signal потребители
+ Сигнал ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ обажданиÑ
+ Безплатни, лични ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ Ð¾Ð±Ð°Ð¶Ð´Ð°Ð½Ð¸Ñ Ð´Ð¾ Сигнал потребители
Изпрати доклад
СъвмеÑтим режим \'WiFi Calling\'
Включи ако уÑтройÑтвото ти използва WiFi за SMS/MMS(Ñамо ако \'Wifi Calling\' е включен на уÑтройÑтвото ти)
Блокирани контакти
+ УдобрÑване на чиÑлата за ÑигурноÑÑ‚
+ ИзиÑкай удобрÑване на новите чиÑла, когато бъдат променени
Покажи в полето Ñ Ð¸Ð·Ð²ÐµÑтиÑ
Когато използвам мобилен интернет
Когато използвам Wi-Fi
@@ -894,14 +951,14 @@ Signal чака твърде дълго за SMS потвърждение.Ðвтоматично теглене на мултимедиÑ
Съкращаване на ÑъобщениÑта
Използвай вградените emoji-та
- Деактивирай вградена в Signal подръжка на emoji-та
+ Деактивирай вградена в Сигнал подръжка на emoji-та
Избери вÑичко
Ðе избирай нищо
- SIGNAL ПОТРЕБИТЕЛИ
+ ПОТРЕБИТЕЛИ ÐРСИГÐÐЛ
ВСИЧКИ КОÐТÐКТИ
Ðово Ñъобщение до...
@@ -911,7 +968,7 @@ Signal чака твърде дълго за SMS потвърждение.
Обаждане
- Signal обаждане
+ Сигнал обаждане
Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ñъобщението
Копирай текÑта
@@ -920,6 +977,10 @@ Signal чака твърде дълго за SMS потвърждение.Повторно изпращане
Запази Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»
+
+ Изчезващи ÑъобщениÑ
+
+ СъобщениÑ, които изчеват
Покани
@@ -938,8 +999,6 @@ Signal чака твърде дълго за SMS потвърждение.
Ðов разговор
- СигурноÑÑ‚
- Провери ÑамоличноÑтта
Започни нова Ñигурна ÑеÑиÑ
Изключи тих режим
@@ -955,7 +1014,7 @@ Signal чака твърде дълго за SMS потвърждение.
Разшири диалога
- Добави в контакти
+ ДобавÑне в контакти
СпиÑък на получатели
ДоÑтавка
@@ -970,34 +1029,37 @@ Signal чака твърде дълго за SMS потвърждение.Ðова група
ÐаÑтройки
Заключи
- Маркирай вÑички като прочетени
+ Маркирана на вÑички като прочетени
Поканете приÑтели
Помощ
+
+ Копиране
+ СравнÑване Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð°Ð½Ð¸
- Вашата верÑÐ¸Ñ Ð½Ð° Signal е Ñтара
+ Вашата верÑÐ¸Ñ Ð½Ð° Сигнал е Ñтара
- - Вашата верÑÐ¸Ñ Ð½Ð° Signal ще изтече Ñлед 1 ден. ÐатиÑнете, за да обновите до най-новата верÑиÑ.
- - Вашата верÑÐ¸Ñ Ð½Ð° Signal ще изтече Ñлед %d дена. ÐатиÑнете, за да обновите до най-новата верÑиÑ.
+ - Вашата верÑÐ¸Ñ Ð½Ð° Сигнал ще изтече Ñлед 1 ден. ÐатиÑнете, за да обновите до най-новата верÑиÑ.
+ - Вашата верÑÐ¸Ñ Ð½Ð° Сигнал ще изтече Ñлед %d дена. ÐатиÑнете, за да обновите до най-новата верÑиÑ.
- Вашата верÑÐ¸Ñ Ð½Ð° Signal ще изтече днеÑ. ÐатиÑнете, за да обновите до най-новата верÑиÑ.
- Вашата верÑÐ¾Ñ Ð¼Ð° Signal е изтекла!
+ Вашата верÑÐ¸Ñ Ð½Ð° Сигнал ще изтече днеÑ. ÐатиÑнете, за да обновите до най-новата верÑиÑ.
+ Вашата верÑÐ¾Ñ Ð¼Ð° Сигнал е изтекла!
СъобщениÑта нÑма да уÑпеÑно изпращани от Ñега нататък. ÐатиÑнете, за да обновите до най-новата верÑиÑ.
ОБÐОВИ
Използвай като SMS програма по подразбиране
- ÐатиÑни, за да направиш Signal ÑвоÑта SMS програма по подразбиране.
+ ÐатиÑни, за да направиш Сигнал ÑвоÑта SMS програма по подразбиране.
ЗÐДÐЙ
- ВнеÑи ÑиÑтемните SMS-и
+ ВнеÑÑне на ÑиÑтемните SMS-и
ÐатиÑнете, за да копирате SMS ÑъобщениÑта от Ð’Ð°ÑˆÐ¸Ñ Ñ‚ÐµÐ»ÐµÑ„Ð¾Ð½ в криптираната база данни на Сигнал.
- Ð’ÐЕСИ
- Ðктивирай Singal ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ обажданиÑ
+ Ð’ÐÐСЯÐЕ
+ Ðктивирай Сигнал ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ обажданиÑ
Обнови комуникациÑта Ñи.
ÐКТИВИРÐЙ
- Покани в Signal
+ Покани в Сигнал
Издигни разговора Ñи Ñ %1$s до ново ниво.
ПОКÐÐИ
Поканете приÑтелите Ñи!
- Колкото повече приÑтели използват Signal, толкова по-добър Ñтава той.
- СПОДЕЛИ
+ Колкото повече приÑтели използват Сигнал, толкова по-добър Ñтава той.
+ СПОДЕЛЯÐЕ
ЗÐТВОРИ
Ти
@@ -1005,6 +1067,8 @@ Signal чака твърде дълго за SMS потвърждение.Ðеподдържан медиен формат.
Запази
+ Препращане
+ Ð’Ñички изображениÑ
Запази вÑички
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
new file mode 100644
index 00000000000..63ad500e4ac
--- /dev/null
+++ b/res/values-ca/strings.xml
@@ -0,0 +1,981 @@
+
+
+ Signal
+ Si
+ No
+ Esborra
+ Espera...
+
+ Nou missatge
+
+ Actualment: %s
+ Encara no has establert cap frase contrasenya!
+
+ - 1 missatge per xat
+ - %d missatges per xat
+
+ Esborrar ara els missatges antics?
+
+ - Això reduirà immediatament tots els xats al missatge més recent.
+ - Això reduirà immediatament tots els xats als %d missatges més recents.
+
+ Esborra
+ Voleu desactivar la contrasenya?
+ Es desbloquejarà permanentment Signal i les notificacions dels missatges.
+ Desactiva
+ Cancel·lació del registre
+ Cancel·lant el registre de missatges i trucades de Signal...
+ Voleu desactivar els missatges i trucades de Signal?
+ Desactivació dels missatges i trucades de Signal per cancel·lació del registre del servidor. Si en un futur vols tornar a utilitzar Signal hauràs de registrar de nou el teu número de telèfon.
+ Error connectant amb el servidor!
+ SMS Habilitats
+ Toca per canviar la teva app d\'SMS predeterminada
+ SMS Deshabilitats
+ Prem per fer de Signal la seva aplicació de SMS per defecte
+ actiu
+ Actiu
+ inactiu
+ Inactiu
+ SMS %1$s, MMS %2$s
+ Contrassenya %1$s, Seguretat de la pantalla %2$s
+ Tema %1$s, Idioma %2$s
+
+
+ - 1 minut
+ - %d minuts
+
+
+ (imatge)
+ (so)
+ (vÃdeo)
+ (lloc)
+
+ No es pot trobar una app per a aquest tipus d\'arxiu
+
+ CÃ mera
+ Fotografia
+ VÃdeo
+ So
+ Informació del contacte
+
+ Error al reproduir l\'Ã udio!
+
+ Contactes bloquejats
+
+ Trucada entrant
+
+ Acceptar
+
+ Missatge %s
+ Trucada Signal %s
+
+ Mida del missatge: %d KB
+ Expira: %s
+ No enviat
+ Vols veure continguts segurs?
+ Aquests arxius han estat guardats en una base de dades xifrada. Malauradament, per veure\'ls en un visualitzador de continguts extern es necessita que les dades es desxifrin temporalment i s\'emmagatzemin. Estàs segur que vol fer-ho?
+ Error, s\'ha rebut un missatge d\'intercanvi de clau viciat.
+ Missatge d\'intercanvi rebut, premi per procedir.
+ %1$s ha deixat el grup.
+ Premi per saber més
+ Prem per una còpia de seguretat no-segura
+ De la còpia de seguretat a SMS no-encriptats?
+ De la còpia de seguretat a MMS no-encriptats?
+ Aquest missatge no serà xifrat perquè el destinatari ja no és usuari de Signal.\n\nEnviar missatge no-segur?
+ No es pot trobar una app que pugui obrir aquest tipus d\'arxiu.
+ des de %s
+ a %s
+
+ Reseteja la sessió segura?
+ Això pot ajudar si tens problemes de xifrat en aquesta conversa. Els teus missatges es guardaran.
+ Reseteig
+ Esborrar la conversa?
+ Es borraran tots els missatges d\'aquesta conversa.
+ Afegeix un adjunt
+ Selecciona info del contacte
+ Escriure missatge
+ Ho sento, hi ha hagut un error establint el teu adjunt.
+ El GIF seleccionat és massa gran!
+ Disculpa, el vÃdeo seleccionat excedeix les restriccions de mida (%1$skB).
+ Disculpa, el so seleccionat excedeix les restriccions de mida (%1$skB).
+ El recipient no és una adreça de correu electrònic o SMS và lid!
+ El missatge és buit!
+ Membres del grup
+ Conversa en grup
+ Grup sense nom
+
+ - 1 membre
+ - %d membres
+
+ Esborrany desat
+ Destinatari invà lid!
+ Trucades no disponibles
+ Aquest dispositiu no sembla suportar accions de trucada.
+ Deixar el grup?
+ Estàs segur que vols deixar aquest grup?
+ SMS no-segur
+ MMS no-segur
+ Signal
+ Canviem a Signal %1$s
+ Fem servir això per xerrar %1$s
+ Error al sortir del grup
+ MMS no disponibles
+ Aquest missatge no ha pogut ser enviat perquè el seu operador de telefonia no accepta MMS.
+ Escull un contacte, si us plau.
+ Voleus desblocar aquest contacte?
+ Desbloca
+ L\'arxiu adjunt excedeix la mida mà xima pel tipus de missatge que estàs enviant.
+ CÃ mara no disponible
+ No s\'ha pogut gravar el so!
+ Error enviant el missatge de veu...
+
+ Detalls del missatge
+ Trà nsit: %1$s\nEnviat/Rebut: %2$s
+ Emissor: %1$s\nTrà nsit: %2$s\nEnviat: %3$s\nRebut: %4$s
+
+ - Esborrar el missatge seleccionat?
+ - Esborrar els missatges seleccionats?
+
+
+ - S\'esborrarà permanentment el missatge seleccionat.
+ - S\'esborraran permanentment tots els %1$d missatges seleccionats.
+
+ Guardar-ho a l\'emmagatzematge?
+
+ - Guardant aquest mitjà a emmagatzematge permetrà que altres apps del teu dispositiu puguin accedir-hi també.\n\nContinuo?
+ - Guardant tots els %1$d mitjans a emmagatzematge permetrà que altres apps del teu dispositiu puguin accedir-hi també.\n\nContinuo?
+
+
+ - Error al desar l\'arxiu adjunt a l\'emmagatzematge!
+ - Error al desar els arxius adjunts a l\'emmagatzematge!
+
+ Arxiu desat correctament.
+ No s\'ha pogut escriure a emmagatzematge!
+
+ - Desant arxiu adjunt
+ - Desant %1$d arxius adjunts
+
+
+ - Desant arxiu adjunt a emmagatzematge...
+ - Desant %1$d arxius adjunts a emmagatzematge...
+
+ Ajuntant arxius adjunts...
+ Esperant...
+ Dades (Signal)
+ MMS
+ SMS
+ Esborrant
+ Esborrant missatges...
+
+ Cercar...
+
+
+ - Esborrar la conversa seleccionada?
+ - Esborrar les converses seleccionades?
+
+
+ - S\'esborrarà permanentment la conversa seleccionada.
+ - S\'esborraran permanentment totes les %1$d converses seleccionades.
+
+ Esborrant
+ Esborrant converses seleccionades...
+
+ - Conversa arxivada
+ - %d converses arxivades
+
+ DESFER
+
+ - S\'ha mogut la conversa a la safata d\'entrada
+ - S\'han mogut %d converses a la safat d\'entrada
+
+
+ Missatge d\'intercanvi de clau...
+
+ Converses arxivades (%d)
+
+ Usant personalitzat: %s
+ Usant predeterminat: %s
+ No n\'hi ha
+
+ %d min
+
+ Desenllaçar \'%s\'?
+ Si desenllaces aquest dispositiu, no es podran ni rebre ni enviar missatges.
+ Ha fallat la connexió...
+ Torna a provar
+ Desenllaçant dispositiu...
+ Desenllaçant dispositiu
+ La xarxa ha fallat!
+
+ Dispositiu sense nom
+ Enllaçat %s
+ Darrera activitat %s
+ Avui
+
+ Compartir amb
+
+ Benvingut/da a Signal
+ TextSecure i RedPhone són ara un servei de missatgeria privat, per qualsevol situació: Signal.
+ Benvingut/da a Signal!
+ TextSecure ara és Signal.
+ TextSecure i RedPhone ara són una app: Signal. Prem per més informació.
+
+ Exporta
+ Exportar text pla a emmagatzematge?
+ Alerta, s\'exportarà el contingut del text pla del teus missatges de Signal a emmagatzematge.
+ Cancel·la
+ Exportant
+ Exportant text pla a emmagatzematge...
+ Error, no es pot escriure a emmagatzematge.
+ Error a l\'escriure a emmagatzematge.
+ S\'ha exportat correctament.
+
+ La comunicació de Signal falla contÃnuament!
+ Signal no s\'ha pogut registrar a Google Play Services. Els missatges i trucades Signal han estat desactivats, re-registra\'t a Ajustaments > Avançats.
+
+
+
+ Nou grup
+ Actualitzar grup
+ Nom del grup
+ Nou grup de MMS
+ Has seleccionat un contact que no pot gestionar els grups de Signal, per tant aquest grup serà per MMS.
+ No estàs registrat per fer missatges i trucades Signal, per tant els grups de Signal estan desactivats. Torna a registrar-te a Ajustaments > Avançats.
+ Ha passat un error inesperat que ha fet que la creació del grup hagi fallat.
+ Necessites almenys una persona dins el teu grup!
+ Un dels membres del teu grup té un número que no pot ser llegit correctament. Si us plau corregeix o treu aquest contacte i intenta-ho de nou.
+ Avatar del grup
+ Crear un grup
+ Creant %1$s…
+ Actualitzant %1$s...
+ No s\'ha pogut afegir %1$s perquè no és un usuari de Signal.
+ Carregant informació del grup...
+ Ja estàs dins del grup.
+
+ Jo
+
+ Importa
+ Exporta
+
+ Importar base de dades de SMS del sistema?
+ Això importarÃ
+missatges de la base de dades d\'SMS del sistema a Signal. Si prèviament
+has importat la base de dades d\'SMS del sistema, important-la una altra vegada es duplicaran missatges.
+ Importa
+ Cancel·la
+ Restablir còpia de seguretat encriptada?
+
+Restablint una còpia de seguretat encriptada reemplaçarà totes les claus existents, ajustaments i
+missatges. Perdràs tota la informació que estigui al Signal però no
+a la còpia de seguretat.
+ Restaura
+ Importar còpia de seguretat en text pla?
+ Això importarà els missatges des d\'una còpia de seguretat en text pla. Si has importat prèviament la base de dades SMS del sistema, importar-la de nou provocarà la generació de missatges duplicats.
+ Important
+ Important cópia de seguretat en text pla...
+ No s\'ha trobat la còpia de seguretat en text pla!
+ Error important la còpia de seguretat!
+ Importació completada!
+ Restaurant
+ Restaurant còpia de seguretat encriptada...
+ No s\'ha trobat cap còpia de seguretat encriptada!
+ Restauració completa!
+
+ Prem i manté per gravar un missatge de veu, deixa anar per enviar-lo
+
+ Compartir
+ Cancel·lar
+ Enviant...
+ Cor
+ Invitacions enviades!
+ Convida a Signal
+
+ - Enviar una invitació SMS?
+ - Enviar %d invitacions SMS?
+
+ Canviem a Signal: %1$s
+ Sembla que no tens apps a on compartir-ho.
+ Els amics/gues no deixen que els seus amics/gues xerrin sense xifrar.
+
+ No s\'ha trobat cap clau escanejada!
+ Instal·lar Barcode Scanner?
+ Signal necessita Barcode Scanner pels codis QR.
+
+ No s\'ha pogut enviar
+
+ Error emmagatzemant MMS!
+ Error connectant amb l\'operador de MMS...
+ Error llegint els ajustaments MMS de l\'operador inalà mbric\u2026
+
+ Trucada Signal en procés
+ Trucada perduda de %s
+ Trucada Signal perduda
+ Començant trucada Signal
+ Trucada Signal entrant
+ Rebutjar trucada
+ Respondre trucada
+ Penjar trucada
+ Cancel·lar trucada
+
+ Missatge multimèdia
+
+ Has rebut un missatge encriptat que fa servir una versió vella de Signal, que no està suportada. Diga-li a l\'emissor que l\'actualitzi a la versió més recent i torni a enviar el missatge.
+ Has sortit del grup.
+ Grup actualitzat.
+ %s t\'ha trucat
+ Has trucat a %s
+ Trucada perduda de %s
+ %s és a Signal, diga-li ei!
+
+ Les contrasenyes no coincideixen!
+ Frase contrasenya antiga incorrecta!
+ Escriu la nova contrasenya!
+
+ Enllaçar aquest dispositiu?
+ CANCEL·LAR
+ CONTINUAR
+ Enllaçar aquest dispositiu?
+ Es podrÃ
+
+• Llegeix tots els teus missatges
+\n• Envia missatges al teu nom
+ Enllaçant dispositiu
+ Enllaçant nou dispositiu...
+ Dispositiu autoritzat!
+ No es troba dispositiu.
+ Error de xarxa.
+ Codi QR no và lid.
+ Disculpa, tens masses dispositius enllaçats, prova desenllaçant-ne alguns...
+ Disculpa, això no és un codi QR amb enllaç và lid.
+ Enllaçar a un dispositiu Signal?
+ Sembla que estàs intentant enllaçar un dispositiu Signal usant un escannejador extern, 3rd party. Per la teva protecció, escanneja el codi una altra vegada dins de Signal.
+
+
+ Escriu la contrasenya
+ Icona de Signal
+ Envia contrasenya
+ Contrasenya incorrecta
+
+ La versió de Google Play Services que tens instal·lada no funciona correctament. Reinstal·la Google Play Service i tornar-ho a provar.
+
+ Valora l\'app
+ Si disfrutes usant aquesta app, ens podries ajudar valorant-la.
+ Valora\'m!
+ No, grà cies
+ Després
+
+ Bloquejar aquest contacte?
+ Bloca
+ Voleus desblocar aquest contacte?
+ Desbloca
+ Habilitat
+ Inhabilitat
+
+ Contestant
+ Penjant la trucada
+ Marcant el número
+ Cancel·lant la trucada
+ Trucada rebutjada
+ Sonant
+ Ocupat/da
+ Connectat
+ S\'està connectant
+ L\'encaixada de mans ha fallat!
+ Recipient no disponible
+ Fent una encaixada de mans
+ La xarxa ha fallat!
+ El client ha fallat
+ Error fatal
+ No s\'ha pogut fer login!
+ Missatge del servidor
+ Número no registrat!
+ El número que has marcat no pot fer trucades de veu segures!
+ Entesos
+
+ Connectar amb Signal
+ Selecciona el teu paÃs/estat
+ Has d\'especificar el teu codi de paÃs
+ Has d\'especificar el teu número de telèfon
+ Número invà lid
+ El número que has especificat (%s) és invà lid.
+ No suportat
+ Disculpa,
+aquest dispositiu no suporta missatges de dades. Els dispositius que fan servir versions d\'Android més velles
+que 4.0 han de tenir un compte Google registrat. Els dispositius que fan servir Android 4.0 o superior no
+necessiten un compte Google, però han de tenir l\'app Play Store instal·lada.
+
+Comprova que aquest és el teu número! Anem a verificar-ho amb un SMS.
+ Continua
+ Edita
+
+ Possibles problemes
+
+ Verificant número
+ Edita %s
+ Registre complet!
+ Primer has d\'introduir el codi que has rebut...
+ Connectant
+ Connectant per verificar...
+ La xarxa ha fallat!
+ No s\'ha pogut connectar. Si us plau verifica la teva connexió de xarxa i intenta-ho de nou.
+ La verificació ha fallat!
+ El codi de verificació que has enviat és incorrecte. Si us plau intenta-ho de nou.
+ Massa intents
+ Has enviat un codi de verificació incorrecte massa vegades. Si us plau espera un minut abans d\'intentar-ho de nou.
+ Sol·licitant trucada
+ Demanant una trucada de verificació...
+ Error de servidor
+ El servidor ha trobat un error. Si us plau intenta-ho de nou.
+ Masses peticions!
+ Ja has demanat recentment una trucada de veu. Pots tornar-la a demanar d\'aquà 20 minuts.
+ Conflicte de registre
+ Aquest número està registrat en un servidor de Signal diferent (CyanogenMod?). Has de donar-te de baixa allà abans de registrar-te aquÃ.
+
+ S\'ha completat el registre
+ S\'ha completat el registre de Signal correctament
+ Error de registre
+ Hi ha hagut un problema al registrar Signal.
+
+ Imatge
+ Àudio
+ VÃdeo
+
+ S\'ha rebut un missatge d\'intercanvi de claus corromput!
+ S\'ha rebut un missatge d\'intercanvi de claus per una versió del protocol invà lida.
+ Duplicar missatge.
+
+ Ha deixat el grup...
+ Resseteja la sessió segura.
+ Esborranys:
+ Has trucat
+ T\'han trucat
+ Trucada perduda
+ Missatge multimèdia
+ %s és a Signal, diga-li hola!
+
+ Sembla que no tens apps a on compartir-ho.
+
+ Iniciar encara que hi hagi una petició de tancament?
+ Envia
+
+ Missatge mal encriptat...
+ Desencriptant, si us plau espera...
+ Missatge encriptat per una sessió no existent...
+
+ Error desencriptant el missatge.
+
+ Error desencriptant el missatge.
+
+ Connectant al servidor MMS...
+ Descarregant MMS...
+ No s\'han pogut baixar els MMS!
+ Descarregant...
+ Pica i configura els ajustaments MMS per continuar la descà rrega.
+ Error desencriptant el missatge.
+
+ Desencriptant MMS, si us plau espera...
+ Missatge MMS mal encriptat...
+ Missatge MMS encriptat per una sessió no existent...
+
+ Silencia les notificacions
+
+ Importació en curs
+ Important missatges de text
+ Importació completada
+ L\'importació de la base de dades del sistema s\'ha completat.
+
+ Prem per obrir.
+ Prem per obrir, or prem el candau per tancar.
+ S\'ha desbloquejat Signal
+ Bloqueja amb una frase contrasenya
+
+ %1$d nous missatges a %2$d converses
+ Més recent de: %1$s
+ Missatge bloquejat...
+ Missatge multimèdia: %s
+ (Sense tÃtol)
+ Entrega del missatge fallida.
+ No s\'ha pogut entregar el missatge.
+ Error entregant el missatge.
+ Marca-ho tot com a llegit
+ Marca els llegits
+ Missatge multimèdia
+ Respondre
+
+ Resposta rà pida no disponible quan Signal està bloquejat!
+ Hi ha hagut un problema enviant el missatge!
+
+ Signal
+ Nou missatge
+
+ Imatge
+ Àudio
+ VÃdeo
+ Contacte
+ CÃ mera
+ Lloc
+
+ Antiga contrasenya
+ Nova contrasenya
+ Repeteix la contrasenya
+
+ Introduïu un nom o número
+
+ Sense contactes.
+ S\'estan carregant els contactes...
+
+ Foto del contacte
+
+ Selecciona per
+
+ No teniu cap contacte blocat...
+
+ Sense trucades recents.
+
+ Conversa silenciada
+
+ Envia un missatge del Signal
+ Envia SMS no-segur
+ Envia MMS no-segur
+ Des de %1$s
+ Envia
+ Treu
+ Conversa amb %1$s
+ Cos del missatge
+ Canvia al teclat d\'emojis
+ Miniatura de l\'adjunt
+
+ LLISCA PER CANCEL·LAR
+
+ Baixant missatge multimèdia
+ Missatge multimèdia
+ Missatge segur
+
+ Descà rrega
+ Descarregant
+ Ha fallat l\'enviament
+ Pendent de validació
+ Entregat
+
+ Descà rrega
+ Foto del contacte
+ Descarregant
+
+
+ Mode de selecció per lots
+ %s seleccionats
+
+ Carregant països...
+ Cerca
+
+ Escanneja el codi QR que es mostra al dispositiu a enllaç
+
+ Enllaça un dispositiu
+
+ No hi ha dispositius enllaçats...
+ Enllaça un nou dispositiu
+
+ continua
+
+ Inactiu
+
+
+
+ No es pot llegir el registre del teu dispositiu. Pots fer servir ADB per debugar el registre.
+ Grà cies per la teva ajuda!
+ Enviant
+ Escrivint els registres a gist...
+
+ Vols que importi els missatges de text existents a la base de dades encriptada de Signal?
+ La base de dades predeterminada del sistema no serà modificada o alterada de cap manera.
+ Salta
+ Importa
+ Això pot tardar una mica. Si us plau sigues pacient, et notificarem quan la importació estigui completa.
+ IMPORTANT
+
+ Actualitzant la base de dades...
+ Exporta la còpia de seguretat en text pla
+ Exporta la còpia de seguretat en text pla compatible amb \'Recuperació de la còpia de seguretat& en SMS\' a emmagatzematge
+ Importa base de dades d\'SMS del sistema
+ Importa la base de dades del programa de missatgeria predeterminat del sistema
+ Recupera la còpia de seguretat encriptada
+ Recupera una còpia de seguretat encriptada exportada de Signal prèvia
+ Importa la còpia de seguretat en text pla
+ Importa un arxiu de còpia de seguretat en text pla. Compatible amb \'SMS Backup & Restore.\'
+
+ Veure tota la conversa
+
+ Sense imatges
+
+ VERIFICAR
+ REENVIAR
+
+ En el teu telèfon són necessaris els ajustaments MMS manuals.
+ Habilitat
+ Inhabilitat
+ No configurat
+ El text escrit no és una URl và lida
+ El text escrit no ha estat una host và lid
+
+
+ - %1$s s\'ha afegit al grup.
+ - %1$s s\'ha afegit al grup.
+
+ Grup actualitzat
+ El nom del grup ha canviat a \'%1$s\'.
+
+ Desbloqueja
+
+ Signal requereix ajustaments de MMS per portar mitjans i els missatges dels grups al teu operador telefònic. El teu dispositiu no té aquest informació disponible, ocasional entre dispositius bloquejats o altres configuracions restrictives.
+ Per enviar mitjans i missatges als grups, prem \'OK\' i completa els ajustament demanats. Els ajustament d\'MMS del teu operador telefònic normalment es troben buscant \'el teu operador APN\'. Només ho hauràs de fer una vegada.
+
+ BLOQUEJAT/DA
+
+ Silenciar conversa
+ Desactiva les notificacions per aquesta conversa
+ So de notificació
+ Vibrar
+ Bloca
+ Color
+ Color per aquest contacte
+
+ Trucada Signal
+ penjar la trucada
+ Àudio
+ Silenciar
+ Trucada Signal
+
+
+Verifica el teu número de telèfon per connectar amb Signal.
+ EL TEU PAÃS
+ EL TEU CODI DE PAÃS I NÚMERO DE TELÈFON
+ NÚMERO DE TELÈFON
+ Registra
+ Registrar-se transmet alguna informació dels contactes al servidor. No s\'emmagatzema.
+ Usant tecnologia de twilio
+
+ Alguns possibles problemes inclouen:
+ Interceptors SMS.
+
+Algunes apps de missatgeria externa, com Handcent o GoSMS, interfereixen i
+intercepten tots els SMS que arriben. Comprova si has rebut un missatge de text que comenci
+amb \'Your Signal verification code:\', si és el cas hauràs de configurar la teva
+app de missatgeria externa perquè deixi passar els missatges de text.
+ Número incorrecte.
+ Si us plau verifica per estar segur que has introduït el teu número correctament, i està ajustat correctament per la teva regió.
+ Google Voice.
+
+Signal no funcionarà amb números de Google Voice.
+
+ Verificació per veu
+
+Signal també pot trucar-te per verificar el teu número. Prem \'Truca\'m\' i introdueix els codi de
+sis dÃgits que sentirà s.
+ Verifica
+ Truca\'m
+ Edita número
+ Error de connectivitat.
+ Signal no ha pogut connectar amb el servidor.
+ Alguns possibles problemes inclouen:
+ No hi ha connexió de xarxa.
+ El teu
+dispositiu necessita accés a la xarxa per poder fer servir aquesta caracterÃstica de Signal. Comprova-ho que
+està connectat a dades mòbils o Wi-Fi.
+ Tallafocs restrictiu.
+
+Si estàs connectat/da al Wi-Fi, és possible que hi hagi un tallafocs bloquejant l\'accés al
+servidor de Signal. Prova una altra xarxa o per dades mòbils.
+
+Signal seguidament verificarà el teu número de telèfon amb un SMS de confirmació.
+ Connectant...
+ Esperant la verificació SMS...
+ Registrant-se al servidor...
+ Això portarà una estona. Si us plau sigues pacient, et notificarem quan la verificació estigui completada.
+
+La verificació per SMS ha tardat massa temps, s\'ha superat el temps mà xim d\'espera.
+ La verificació SMS ha fallat.
+ Generant claus...
+ Alerta
+ Telèfon
+ Comprovar
+
+ Introdueix un nom o número
+
+
+
+ Alguns problemes necessiten la teva atenció
+ Enviat
+ Rebut
+ Via
+ A:
+ Des de:
+ Amb:
+
+ Crea contrasenya
+ Escriu la contrassenya
+ Selecciona els contactes
+ Signal detectat
+ Canvia frase contrasenya
+ Envia registre de debug
+ Previsualització multimèdia
+ Totes les imatges
+ Totes les imatges amb %1$s
+ Informació del missatge
+ Dispositiu enllaçats
+ Convida a amics/gues
+ Converses arxivades
+
+ Importar / exportar
+ Fés servir el predeterminat
+ Fés servir personalitzat
+ Silencia-ho una hora
+ Silencia-ho 2 hores
+ Silencia-ho 1 dia
+ Silencia-ho 7 dies
+ Silencia-ho 1 anys
+ Ajustos predeterminats
+ Habilitat
+ Inhabilitat
+ Nom i missatge
+ Nom només
+ Sense nom ni missatge
+ Imatges
+ Àudio
+ VÃdeo
+
+
+ - %d hora
+ - %d hores
+
+
+ General
+ SMS i MMS
+ Rep tots els SMS
+ Rep tot els MMS
+ Fés servir Signal per tots els missatges de text rebuts
+ Fés servir Signal per tots els missatges multimèdia rebuts
+ Ajustos d\'entrada
+ Habilita la tecla Enter
+ Reemplaça la tecla d\'smiley per la tecla Enter
+ Enter fa la funció d\'enviar
+ Prement Enter envia missatges de text
+ Ajustos visuals
+ Escull la identitat a usar
+ Escull el teu contacte de la llista de contactes
+ Canvia frase contrasenya
+ Canvia la teva contrasenya
+ Activa la contrasenya
+ Protegeix Signal i les notificacions del missatge amb una contrasenya
+ Seguretat de pantalla
+ Bloqueja les captures de pantalla a les llistes de recents i dins de l\'app
+ Bloqueja Signal per inactivitat després d\'un interval de temps
+ Paraula de pas per inactivitat
+ Interval per inactivitat
+ Notificacions
+ Activa les notificacions dels missatges
+ Notificacions de nous contactes
+ Mostra una notificacià per a nous contactes a Signal
+ Color del LED
+ Desconegut
+ Patró d\'intermitència del LED
+ Configura un patró lluminós personalitzat pel LED
+ Activat per:
+ Desactivat per:
+ S\'ha fixat un patró de parpalleig del LED personalitzat!
+ So
+ Canvia el so de notificació
+ Silenciós
+ Notificacions en conversa
+ Reprodueix el so de notificació quan estiguis mirant una conversa activa
+ Repeteix alarmes
+ Mai
+ Una vegada
+ 2 vegades
+ 3 vegades
+ 5 vegades
+ 10 vegades
+ Vibra
+ Vibra també en notificar
+ minuts
+ hores
+ Verd
+ Vermell
+ Blau
+ Taronja
+ Cian
+ Magenta
+ Blanc
+ No n\'hi ha
+ RÃ pid
+ Normal
+ Lent
+ Personalitzat
+ Avançat
+ Privacitat
+ Agent usuari de MMS
+ Ajustaments manuals de MMS
+ Fés servir els ajustaments manuals de MMS
+ Sobreescriu els ajustaments MMS del sistema amb la informació següent.
+ URL de MMSC
+ Host Proxy de MMS
+ Port Proxy de MMS
+ Nom d\'usuari de MMSC
+ Contrassenya de MMSC
+ Informes de lliurament de SMS
+ Demana un informe de lliurament en cada missatge SMS que enviïs
+ Esborra automà ticament els missatges vells quan la conversa excedeixi una llargà ria especificada.
+ Esborra missatges antics
+ Xats i multimèdia
+ LÃmit de mida de la conversació
+ Retalla totes les converses
+ Escanneja totes les converses i ajusta els lÃmits de llargà ria de les converses
+ Dispositiu enllaçats
+ Clar
+ Fosc
+ Aparença
+ Tema
+ Predeterminat
+ Idioma
+ Missatges i trucades Signal
+ Missatges i trucades privades gratuïtes pels usuaris de Signal
+ Envia un registre de depuració
+ Mode de compatibilitat \'Trucada WiFi\'
+ Activa si el teu dispositiu fa servir SMS/MMS per WiFi (només activa quan \'Trucada WiFi\' està activat al teu dispositiu)
+ Contactes bloquejats
+ Mostra-ho a notificacions
+ Quan facis servir dades mòbils
+ Quan facis servir Wi-Fi
+ Quan facis servir roaming
+ Baixada automà tica de mitjans
+ Retall de missatges
+ Usa emoji
+ Desactiva els emojis inclosos a Signal
+
+
+
+
+ Seleccionar-ho tot
+ Desseleccionar-ho tot
+ USUARIS DE SIGNAL
+ TOTS ELS CONTACTES
+ Nou missatge a...
+
+ Finalitzat
+
+ Actualitza la llista de contactes
+
+ Truca
+
+ Trucada Signal
+
+ Detalls del missatge
+ Copia el text
+ Esborra el missatge
+ Reenvia el missatge
+ Torna a enviar el missatge
+
+ Guarda l\'adjunt
+
+
+
+ Convida
+
+ Seguretat
+
+ Esborra els seleccionats
+ Seleccionar-ho tot
+ Selecciona arxivades
+ Selecciona no arxivades
+
+ Cerca
+
+ Foto del contacte
+ Alerta d\'error
+ Arxivat
+
+ Nova conversa
+
+ Reseteja la sessió segura
+
+ Dessilencia
+
+ Silencia les notificacions
+
+ Afegeix un adjunt
+ Actualitzar grup
+ Deixa el grup
+ Suprimeix la conversa
+ Totes les imatges
+ Ajustaments de conversa
+
+ Expandeix el popup
+
+ Afegeix als contactes
+
+ Llista de destinataris
+ Lliurament
+ Conversa
+ Difusió
+
+ Compara
+ Mostra el teu codi QR
+ Escanneja el codi QR del contacte
+
+ Nou missatge
+ Nou grup
+ Configuració
+ Bloqueja
+ Marca\'ls tots com a llegits
+ Convida a amics/gues
+ Ajuda
+
+
+ La versió de Signal que tens està obsoleta
+
+ - La teva versió de Signal expirarà en 1 dia. Prem per actualitzar-la a la versió més recent.
+ - La teva versió de Signal expirarà en %d dies. Prem per actualitzar-la a la versió més recent.
+
+ La teva versió de Signal expirarà avui. Prem per actualitzar-la a la versió més recent.
+ La teva versió de Signal ha expirat!
+ El missatges no s\'enviaran correctament. Prem per actualitzar a la versió més recent.
+ ACTUALITZA
+ Fés-ho servir com a app d\'SMS predeterminada
+ Prem per fer Signal l\'app per SMS predeterminada
+ CONFIGURA
+ Sistema d\'importació d\'SMS
+ Prem per copiar els missatges SMS del teu telèfon a la base de dades encriptada de Signal.
+ IMPORTA
+ Activa els missatges i trucades Signal
+ Actualitza la teva experiència comunicativa.
+ ACTIVA
+ Convida a Signal
+ Porta la teva convers amb %1$s a un altre nivell.
+ CONVIDA
+ Convida els teus amics/gues!
+ Com més amics/gues fan servir Signal, millor.
+ COMPARTIR
+ TANCA
+
+ Tu
+ No s\'ha pogut mostrar la imatge
+ Tipus d\'arxiu no suportat
+
+ Desa
+
+ Desa-ho tot
+
+ Previsualització d\'imatges
+
+ Actualitza
+
+ Auricular
+ Auriculars
+ Altaveu
+
+ Esborrant
+ Esborrant missatges vells...
+ S\'han esborrat correctament els missatges vells
+
+ Icona de trà nsit
+
+
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 058605f6c95..1e5ad4fbcca 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -5,6 +5,8 @@
Ne
Smazat
ProsÃm Äekejte...
+
+ Nová zpráva
Aktuálně: %s
Dosud nemáte nastavené heslo!
@@ -21,7 +23,7 @@
Smazat
Zakázat heslo?
- TÃmto trvale odemkenete Signal a upozornÄ›nà na zprávy.
+ TÃmto trvale odemknete Signal a upozornÄ›nà na zprávy.
Deaktivovat
Rušenà registrace
Odregistrace Signal zpráv a volánÃ
@@ -65,10 +67,8 @@
PÅ™Ãchozà hovor
- IdentifikaÄnÃ
- klÃÄ %1$s se zmÄ›nil. To může být způsobeno tÃm že se nÄ›kdo snažà odpolechnout vaÅ¡i komunikaci, nebo %2$s pÅ™einstaloval aplikaci Signal a nynà má nový klÃÄ.
- Možná budete chtÃt ověřit tento
-kontakt
+ VaÅ¡e bezpeÄnostnà kódy pro %1$s se zmÄ›nily. To může znamenat, že se nÄ›kdo pokoušà zachytit vaÅ¡i konverzaci, nebo jen že si %2$s pÅ™einstaloval Signal a má teÄ nový identifikaÄnà klÃÄ.
+ Možná budete chtÃt zkontrolovat vaÅ¡e bezpeÄnostnà kódy pro tento kontakt.
Přijmout
Zpráva %s
@@ -95,7 +95,7 @@ kontakt
Může to pomoct pokud máte problém s Å¡ifrovánÃm této konverzace. VaÅ¡e zprávy zůstanou zachovány.
Reset
Smazat konverzaci?
- TÃmto trvale smažete vÅ¡echy zprávy této konverzace.
+ TÃmto trvale smažete vÅ¡echny zprávy této konverzace.
PÅ™idat pÅ™Ãlohu
Vybrat informace o kontaktu
Napište zprávu
@@ -128,13 +128,14 @@ kontakt
MMS nejsou podporovány
Zpráva nemůže být odeslána, protože váš operátor nepodporuje MMS.
Vyberte prosÃm kontakt
- Odblokovat?
- Opravdu chcete odblokovat tento kontakt?
+ Odblokovat tento kontakt?
+ Budete opÄ›t moci pÅ™ijÃmat zprávy a hovory od tohoto kontaktu.
Odblokovat
Velikost pÅ™Ãlohy pÅ™ekroÄila limit pro typ zprávy kterou posÃláte
Kamera nenà dostupná
Nemohu nahrávat audio!
Chyba pÅ™i posÃlánà hlasové zprávy..
+ Nenà zde žádná aplikace která by dokázala zpracovat tento odkaz.
Podrobnosti zprávy
Přenos: %1$s\nOdesláno/Přijato: %2$s
@@ -156,11 +157,11 @@ kontakt
- UložÃte-li vÅ¡ech %1$d pÅ™Ãloh do úložiÅ¡tÄ›, budou k nim mÃt pÅ™Ãstup vÅ¡echny aplikace ve vaÅ¡em zaÅ™ÃzenÃ.\n\nPokraÄovat?
- - Chyba pÅ™i ukládánà pÅ™Ãloy!
+ - Chyba pÅ™i ukládánà pÅ™Ãlohy!
- Chyba pÅ™i ukládánà pÅ™Ãloh!
- Chyba pÅ™i ukládánà pÅ™Ãloh!
- ÚspěšnÄ› dokonÄeno!
+ Soubor byl úspěšně uložen
Nelze uložit data do paměti.
- Ukládám pÅ™Ãlohu
@@ -181,6 +182,7 @@ kontakt
Mažu zprávy...
Vyhledávám...
+ Nemáte na vaÅ¡em zaÅ™Ãzenà nainstalován žádný prohlÞeÄ.
- Smazat vybranou konverzaci?
@@ -214,12 +216,12 @@ kontakt
PoužÃvá se výchozÃ: %s
Nic
- TeÄ
+ TeÄ
%d minuta
Rozpojit \'%s\'?
RozpojenÃm toho zaÅ™Ãzenà nebude dále možno posÃlat a pÅ™ijÃmat zprávy.
- SÃÅ¥ové spojenà slehalo...
+ SÃÅ¥ové spojenà selhalo...
Zkusit znovu
Rozpojovánà zaÅ™ÃzenÃ...
OddÄ›luji zaÅ™ÃzenÃ
@@ -246,10 +248,15 @@ kontakt
Exportovat nešifrovaný text do úložiště.
Chyba, nelze zapisovat do úložiště.
Chyba během zápisu do úložiště
- ÚspěšnÄ› dokonÄeno!
+ Export byl úspěšný.
Trvalá chyba komunikace Signal!
- Sginal se nemůže registrovat k službÄ› Google Play. Zprávy a volánà jsou proto zakázány: ProsÃm zkuste se znovu registrovat v menu Nastavenà > RozÅ¡ÃÅ™ené.
+ Signal se nemůže registrovat k službÄ› Google Play. Zprávy a volánà jsou proto zakázány: ProsÃm zkuste se znovu registrovat v menu Nastavenà > RozÅ¡ÃÅ™ené.
+
+ Chyba pÅ™i zÃskávánà GIF v pleném rozliÅ¡enà ..
+
+ GIFy
+ Nálepky
Nová skupina
Upravit skupinu
@@ -274,13 +281,13 @@ kontakt
Export
Importovat všechny SMSky v telefonu?
- Toto importuje zprávy ze systémové SMS databáze do apliace Signal. Pokud jste již dÅ™Ãve importovali systémovou SMS databázi, mohou se nÄ›které zprávy objevit vÃcekrát.
+ Toto importuje zprávy ze systémové SMS databáze do aplikace Signal. Pokud jste již dÅ™Ãve importovali systémovou SMS databázi, mohou se nÄ›které zprávy objevit vÃcekrát.
Import
Storno
Obnovit šifrovanou zálohu?
Obnova ze Å¡ifrované zálohy kompletnÄ› nahradà vaÅ¡e aktuálnà klÃÄe, nastavenà a zprávy.
-Přijdete o všechny informace z vašà aktuálnà instalce Signal které nejou v záloze.
+Přijdete o všechny informace z vašà aktuálnà instalace Signal které nejsou zálohovány.
ObnovenÃ
Obnovit nešifrovanou zálohu?
TÃmto importujete zprávy z neÅ¡ifrované zálohy. Pokud jste již nÄ›kdy
@@ -298,16 +305,16 @@ tuto zálohu importovali, mohou se nÄ›které zprávy objevit vÃcekrát.ŤuknÄ›te a držte pro nahránà hlasové zprávy, pusÅ¥te pro odeslánÃ.
SdÃlet
- Poslat SMS
+ Vyberte kontakty
Storno
OdesÃlám...
SrdÃÄko
- Pozvnáka odeslána!
+ Pozvánka odeslána!
Pozvat do Signalu
-
- - POSLAT PŘÃTELI
- - POSLAT %d PŘÃTELÅ®M
- - POSLAT %d PŘÃTELÅ®M
+
+ - POSLAT SMS PŘÃTELI
+ - POSLAT SMS %d PŘÃTELÅ®M
+ - POSLAT SMS %d PŘÃTELÅ®M
- Poslat 1 SMS pozvánku?
@@ -323,7 +330,7 @@ tuto zálohu importovali, mohou se nÄ›které zprávy objevit vÃcekrát.Signal vyžaduje Barcode Scanner pro QR kódy.
Nepodařilo se odeslat
- Nová identita
+ Nové bezpeÄnostnà kódy
Chyba při ukládánà MMS!
Chyba při připojovánà k poskytovateli MMS
@@ -341,13 +348,16 @@ tuto zálohu importovali, mohou se nÄ›které zprávy objevit vÃcekrát.
Multimediálnà zpráva
- PÅ™ijata zpráva Å¡ifrovaná starou a verzà Singal, který již nenà podporována. ProsÃm požádejte odesÃlatele aby si zaktulizoval aplikaci na ne novÄ›jšà verzi a poté poslal zprávu znovu.
+ PÅ™ijata zpráva Å¡ifrovaná starou a verzà Signal, který již nenà podporována. ProsÃm požádejte odesÃlatele, aby si zaktualizoval aplikaci na nejnovÄ›jšà verzi a poté poslal zprávu znovu.
Opustil(a) jste skupinu
Upravena skupina
%s vám volal
Volán %s
Zmeškaný hovor od %s
%s je na Signalu, řekni ahoj!
+ Nastavili jste Äas zmizenà zprávy na %1$s.
+ %1$s nastavil Äas zmizenà zprávy na %2$s.
+ Váš bezpeÄnostnà kód s %s se zmÄ›nil
Hesla nejsou stejná
Chybné staré heslo!
@@ -371,6 +381,10 @@ tuto zálohu importovali, mohou se nÄ›které zprávy objevit vÃcekrát.Omlouváme se, ale toto nenà platný QR kód pro provázánà zaÅ™ÃzenÃ
Provázat zaÅ™Ãzenà Signal?
Zdá se se snažÃte provázat zaÅ™Ãzenà Signal použitÃm jiné skennovacà aplikace. Pro vaÅ¡i ochranu, prosÃm oskenujete kód jeÅ¡tÄ› jednou z aplikace Signal.
+
+ Zmizenà zpráv
+ Platnost zprávy neskonÄÃ.
+ Zprávy odeslané a pÅ™ijaté v této konverzaci zmizà za %s po jejich shlédnutÃ.
Zadat heslo
Ikona Signal
@@ -384,12 +398,13 @@ tuto zálohu importovali, mohou se nÄ›které zprávy objevit vÃcekrát.Ohodnotit teÄ!
Ne dÃky
Později
+ Ajaj, vypadá to, že aplikace Obchod Play nenà nainstalována na vaÅ¡em zaÅ™ÃzenÃ.
Zablokovat tento kontakt?
- Už nebudete pÅ™ijÃmat zprávy nebo volánà od tohoto uživatele
+ Už nebudete pÅ™ijÃmat zprávy nebo hovory od tohoto kontaktu.
Blokovat
Odblokovat tento kontakt?
- Opravdu chcete odblokovat tento kontakt?
+ Budete opÄ›t moci pÅ™ijÃmat zprávy a hovory od tohoto kontaktu.
Odblokovat
Povoleno
Zakázáno
@@ -464,9 +479,9 @@ telefonnà ÄÃslo
Obdržen neplatný požadavek na výmÄ›nu klÃÄů.
Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
- PÅ™ijata zpráva s neznámým identifikaÄnÃm klÃÄem. KliknÄ›te pro jejà zpracovánà a zobrazenÃ.
- Aktualizována přijatá dat od neznámé identity. Klikněte pro ověřenà identity.
- Reset zabezpeÄené komunikace.
+ PÅ™ijata zpráva s novým bezpeÄnostnÃm kódem. KliknÄ›te pro jejà zpracovánà a zobrazenÃ.
+ Resetujete zabezpeÄenou konverzaci
+ %s resetuje zabezpeÄenou konverzaci
Duplicitnà zpráva
Opustil skupinu...
@@ -477,26 +492,16 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
Zmeškaný hovor
Multimediálnà zpráva
%s zapnul Signal, řekni ahoj!
+ Čas zmizenà zprávy nastaven na %s
+ Váš bezpeÄnostnà kód s %s se zmÄ›nil
- Nemáte identifikaÄnà klÃÄ.
- PÅ™Ãjemce nemá identifikaÄnà klÃÄ.
- PÅ™Ãjemce nemá identifikaÄnà klÃÄ!
- Skenovat QR kód kontaktu
- Zobrazit váš QR kód
- VAROVÃNÃ, nasnÃmaný klÃÄ NENà SPRÃVNÃ! Zkontrolujte prosÃm textový otisk.
- NEověřeno!
- KlÃÄ protistrany je správný. Protistrana by mÄ›la jeÅ¡tÄ› ověřit váš vlastnà klÃÄ.
- Ověřeno!
- Nemáte identifikaÄnà klÃÄ!
-
- Nemáte identifikaÄnà klÃÄ.
- Skenovat QR kód kontaktu
- Zobrazit váš QR kód
- UPOZORNÄšNÃ: naskenovaný klÃÄ nesouhlasÃ
- NEověřeno!
- NasnÃmaný klÃÄ souhlasÃ!
- Ověřeno!
- Váš identifikaÄnà otisk
+ Váš kontakt použÃvá starou verzi aplikace Singál. PÅ™ed kontrolou bezpeÄnostnÃch kódů je porÃm požádejte aby si aplikaci aktualizoval.
+ Váš kontakt použÃvá novÄ›jšà verzi Signal s nekompatibilnÃm formátem QR kódu. ProsÃm aktualizujte svou verzi abyste mohli QR kódy porovnat.
+ Naskenovaný QR kód nemá správný formát bezpeÄnostnÃho kódu. ProsÃm naskenujte QR kód znovu.
+ SdÃlet bezpeÄnostnà ḱod prostÅ™ednictvÃm ...
+ VaÅ¡ Signal bezpeÄnostnà kód:
+ Zdá se, že nemáte žádnou aplikaci pro sdÃlenÃ.
+ Ve schránce nebyl nalezen žádný bezpeÄnostnà kód pro porovnánÃ.
Zahájit i pÅ™es probÃhajÃcà požadavek?
Odeslat
@@ -525,7 +530,7 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
ProbÃhá import
Importuji textové zprávy
Import dokonÄen
- Import systémové databáze Signál je dokonÄen.
+ Import systémové databáze je kompletnÃ.
StisknutÃm otevÅ™ete.
Dotykem otevÅ™ete nebo stisknutÃm zámku uzamknÄ›te.
@@ -545,18 +550,27 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
Multimediálnà zpráva
OdpovÄ›Ä
- Rychlá dopovÄ›Ä nenà dostupná pokud je Signal uzamÄen!
+ Rychlá odpovÄ›Ä nenà dostupná pokud je Signal uzamÄen!
Problém pÅ™i odesÃlánà zprávy!
Signal
Nová zpráva
Obrázek
+ Obrázek
Audio
+ Audio
Video
+ Video
Kontakt
+ Kontakt
Kamera
+ Kamera
Poloha
+ Poloha
+ GIF
+ Gif
+ Vybrat úložiÅ¡tÄ› pro pÅ™Ãlohy
Původnà heslo
Nové heslo
@@ -567,7 +581,7 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
Žádný kontakt
NaÄÃtám kontakty...
- Fotografie kotaktu
+ Fotografie kontaktu
Vybrat
@@ -580,13 +594,16 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
Poslat Signal zprávu
Poslat nezabezpeÄenou SMS
Poslat nezabezpeÄenou MMS
+ Od %1$s
Odeslat
Odebrat
Konverzace s %1$s
Sestavenà zprávy
Zapnout klávesnici se smajlÃky
Připojený náhled
- Vybrat úložiÅ¡tÄ› pro pÅ™Ãlohy
+ VytvoÅ™it rychlou pÅ™Ãlohu kamerou
+ Nahrát a poslat zvukovou pÅ™Ãlohu
+ Povolit aplikaci Signál SMS
PŘESUŇTE PRO ZRUÅ ENÃ
@@ -603,6 +620,10 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
StaženÃ
Fotografie kotaktu
Stahuji
+
+ Přehrát
+ Zastavit
+ Stáhnout
Hromadný výběr
Vybráno %s
@@ -610,7 +631,7 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
NaÄÃtám zemÄ›...
Hledat
- Scanovat QR kód zobrazný na zaÅ™Ãzenà pro prováznÃ
+ Scanovat QR kód zobrazený na zaÅ™Ãzenà pro provázánÃ
Provázat zaÅ™ÃzenÃ
@@ -618,13 +639,50 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
Provázat nové zaÅ™ÃzenÃ
pokraÄovat
+
+ Vyp.
+
+ - 1 vteřina
+ - %d vteřiny
+ - %d vteřin
+
+ %ds
+
+ - 1 minuta
+ - %d minuty
+ - %d minut
+
+ %dm
+
+ - 1 hodina
+ - %d hodiny
+ - %d hodin
+
+ %dh
+
+ - 1 den
+ - %d dny
+ - %d dnů
+
+ %dd
+
+ - 1 týden
+ - %d týdny
+ - %d týdnů
+
+ %dw
+
+ Hledat GIFy an nálepky
+
+ Nenalezeno
Na vaÅ¡em zaÅ™Ãzenà nelze ÄÃst log. Můžete mÃsto toho použÃt pro zÃskánà logu ADB.
DÃky za VaÅ¡i pomoc!
OdesÃlánÃ
PosÃlánà logů do gist...
+ Žádný prohlÞeÄ nenà nainstalován
- Chcete importovat vaÅ¡e existujÃcà textové zpávy do zaÅ¡ifrované databáze Signal?
+ Chcete importovat vaÅ¡e existujÃcà textové zprávy do zaÅ¡ifrované databáze Signal?
Původnà systémová databáze tÃm nebude dotÄena, ani žádným způsobem modifikována.
PÅ™eskoÄit
Import
@@ -635,7 +693,7 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
Exportovat nešifrovanou zálohu
Exportovat nešifrovanou zálohu kompatibilnàs \"SMSBackup & Restore\" do úložiště
Import systémové databáze SMS
- Importovat databázi z hlavnà systémové komunikÄanà aplikace.
+ Importovat databázi z hlavnà systémové komunikaÄnà aplikace.
Obnovit šifrovanou zálohu
Obnovit dÅ™Ãve exportovanou zaÅ¡ifrovanou zálohu Signal.
Obnovit nešifrovanou zálohu
@@ -676,8 +734,8 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
Vibrace
Blokovat
Barva
- Brava tohoto kontaktu
- Ověřenà identity
+ Barva tohoto kontaktu
+ Kontrola bezpeÄnostnÃho kódu.
Signal volánÃ
ukonÄit hovor
@@ -686,7 +744,7 @@ Obdržen požadavek na výmÄ›nu klÃÄů pro neplatnou verzi protokolu.
Signal volánÃ
-Ověřenà vaÅ¡eho telefonÃho ÄÃsla pro pÅ™ipojenà k Signal
+Ověřenà vaÅ¡eho telefonnÃho ÄÃsla pro pÅ™ipojenà k Signal
ZemÄ›
Kód země
Telefonnà ÄÃslo
@@ -729,7 +787,7 @@ Jste-li připojeni přes Wifi, je možné, že existuje firewall který blokuje
Signal nynà automaticky ověřà vaÅ¡e telefonnà ÄÃslo pomocà potvrzovacà SMS zprávy.
ProbÃhá pÅ™ipojovánÃ...
- ÄŒekám na ověřovacÃ
+ Čekám na
ověřovacà SMS...
Registruji se na server...
@@ -747,14 +805,17 @@ Signal se nedoÄkal pÅ™ijetà ověřovacà SMS.
Kontrola
Zadejte jméno nebo ÄÃslo
- PÅ™idat Älena
-
- Jejich identita (Ätou)
- VaÅ¡e identita (Ätete):
+ PÅ™idat Äleny
+
+ ZjistÄ›te vÃce o bezpeÄnostnÃch kódech..]]>
+ KlepnutÃm skenovat
+
+ SdÃlet bezpeÄnostnà kód
Některé problémy vyžadujà vaši pozornost
Odesláno
Přijato
+ ZmizÃ
Přes
Komu:
Od:
@@ -764,20 +825,18 @@ Signal se nedoÄkal pÅ™ijetà ověřovacà SMS.
Zadat heslo
Výběr kontaktů
Signal detekován
- VeÅ™ejný identifikaÄnà klÃÄ
Změnit heslo
- Ověřenà identity
- Odeslat ladÃcà log
+ Kontrola bezpeÄnostnÃho kódu.
+ Odeslat ladicà log
Náhled multimediÃ
Všechny obrázky
Všechny obrázky s %1$s
Podrobnosti zprávy
- Spravovat provázaná zaÅ™ÃzenÃ
+ Provázaná zaÅ™ÃzenÃ
Pozvat přátele
Archivované konverzace
Import / export
- Váš identifikaÄnà klÃÄ
PoužÃt výchozÃ
PoužÃt vlastnÃ
Ztišit na 1 hodinu
@@ -882,22 +941,24 @@ Signal se nedoÄkal pÅ™ijetà ověřovacà SMS.
Limit délky konverzacÃ
Zkrátit vÅ¡echny konverzace teÄ
Prohledat všechny konverzace a uplatnit limit délky.
- ZaÅ™ÃzenÃ
+ Provázaná zaÅ™ÃzenÃ
Světlý
Tmavý
ChovánÃ
Vzhled
VýchozÃ
Jazyk
- Signal zpravy a volánÃ
+ Signal zprávy a volánÃ
Svobodné šifrované zprávy a volánà uživatelům Signal
- Odeslat ladÃcà log
+ Odeslat ladicà log
\'Wifi volánÃ\' kompatibilnà mód
Povolit pokud vaÅ¡e zaÅ™Ãzenà použÃvá doruÄovánà SMS/MMS pÅ™es Wifi (povoleno pouze když je na zaÅ™Ãzenà povoleno \'Wifi volánÃ\')
Blokované kontakty
+ Schválenà bezpeÄnostnÃch kódů
+ Vyžadovat schválenà nových bezpeÄnostnÃch kódů pokud se zmÄ›nÃ.
Zobrazit v upozornÄ›nÃ
PÅ™i použità mobilnÃch datových pÅ™enosů
- Při použità Wfi
+ Při použità Wifi
Při roamingu
Automatické stahovánà multimediÃ
Ořezávánà práv
@@ -928,6 +989,10 @@ Signal se nedoÄkal pÅ™ijetà ověřovacà SMS.
Znovu poslat zprávu
Uložit pÅ™Ãlohu
+
+ Zmizenà zpráv
+
+ KonÄà doba platnosti zprávy
Pozvánka
@@ -946,8 +1011,6 @@ Signal se nedoÄkal pÅ™ijetà ověřovacà SMS.
Nová konverzace
- ZabezpeÄenÃ
- Ověřenà identity
Resetovat zabezpeÄenou konverzaci
Nahlas
@@ -981,6 +1044,9 @@ Signal se nedoÄkal pÅ™ijetà ověřovacà SMS.
OznaÄit vÅ¡e jako pÅ™eÄtené
Pozvat přátele
Nápověda
+
+ ZkopÃrovat do schránky
+ Porovnat se schránkou
Vaše verze aplikace Signal je zastaralá
@@ -990,7 +1056,7 @@ Signal se nedoÄkal pÅ™ijetà ověřovacà SMS.
Platnost vašà verze aplikace Signal skonÄà dnes. Dotykem aktualizujte na nejnovÄ›jšà verzi.
Platnost vašà verze aplikace Signal vypršela!
- Zprávy nemohou být úspěšnÄ› odesÃlány. Dotykem aktulizujte na nejnovÄ›jšà verzi.
+ Zprávy nemohou být úspěšnÄ› odesÃlány. Dotykem aktualizujte na nejnovÄ›jšà verzi.
AKTUALIZOVAT
Nastavit jako výchozà aplikaci pro SMS
Dotykem nastavÃte Signal jako výchozà SMS aplikaci
@@ -1014,6 +1080,8 @@ Signal se nedoÄkal pÅ™ijetà ověřovacà SMS.
Nepodporovaný typ dat.
Uložit
+ Přeposlat
+ Všechny obrázky
Uložit vše
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 56a9a24d6c0..f471fe9ff51 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -5,6 +5,8 @@
Nej
Slet
Vent venligst...
+
+ Ny besked
Nu: %s
Du har endnu ikke indtastet et kodeord!
@@ -19,6 +21,7 @@
Slet
Deaktivér kodeord?
+ Dette vil permanent låse op for Signal og besked notifikationer.
Deaktivér
Afregistrerer
Afregistrerer fra Signalbeskeder og -opkald...
@@ -45,6 +48,7 @@
(billede)
(lyd)
(video)
+ (position)
Kan ikke åbne valgte data.
@@ -60,12 +64,6 @@
Indgående opkald
- Identitetsnøglen for %1$s er blevet ændret. Dette kan enten betyde at nogen forsøger at
- opsnappe kommunikationen, eller at %2$s bare har geninstalleret Signal og nu har en ny
- identitetsnøgle.
-
- Du bør verificere
-denne kontakt.
Godkend
Besked %s
@@ -75,7 +73,9 @@ denne kontakt.
Udløber: %s
Ikke sendt
Gennemse sikre data?
+ Denne fil er gemt i en krypteret database. For at se den med et eksternt program, er den nødt til at blive dekrypteret og gemt til disk. Er du sikker på du vil gøre dette?
Fejl! Modtog en gammel udvekslingsnøgle.
+ Udvekslingsnøgle er modtaget. Klik for at fortsætte
%1$s har forladt gruppen.
Tryk for detaljer
Tryk for at godkende ukrypteret besked
@@ -83,6 +83,8 @@ denne kontakt.
Godkend ukrypteret MMS?
Denne besked vil ikke blive krypteret, da modtageren ikke længere er Signal-bruger.\n\nSend ukrypteret besked?
Kan ikke finde en app, der kan åbne denne fil.
+ fra %s
+ til %s
Gendan sikker forbindelse?
Dette vil muligvis hjælpe hvis du oplever krypteringsproblemer med denne samtale. Dine beskeder bevares.
@@ -120,8 +122,7 @@ denne kontakt.
MMS ikke understøttet
Denne besked kan ikke sendes, da din teleudbyder ikke understøtter MMS.
Vælg venligst en kontakt
- Stop blokering?
- Er du sikker på, du vil stoppe blokering af denne kontakt?
+ Stop blokering af denne kontakt?
Stop blokering
Vedhæftet fil overskrider størrelsesbegrænsningen for den type meddelelse, du sender.
Kamera utilgængeligt
@@ -140,8 +141,13 @@ denne kontakt.
- Dette vil slette alle %1$d valgte beskeder permanent.
Gem på lager?
- Fuldført!
+
+ - At gemme denne fil på disk vil tillade alle andre apps at tilgå den.\n\nFortsæt?
+ - At gemme alle %1$d filer på disk vil tillade alle andre apps at tilgå dem.\n\nFortsæt?
+
+ Fil lagring gennemført.
Kunne ikke skrive til lageret!
+ Samler vedhæftninger...
Afventer...
Data (Signal)
MMS
@@ -179,7 +185,6 @@ denne kontakt.
Anvender standard: %s
Ingen
- Nu
%d min
Frakobl \"%s\"?
@@ -211,15 +216,19 @@ denne kontakt.
Eksporterer klartekst til hukommelsen...
Fejl - kunne ikke gemme i hukommelsen.
Fejl under gemning i hukommelsen.
- Fuldført!
+ Eksport gennemført.
Permanent fejl i Signal-kommunikationen!
+ Signal var ude af stand til at registrere med Google Play Services. Signal beskeder og opkald blev deaktiveret, prøv venligst at registrere igen i Indstillinger > Advanceret.
+
+
Ny gruppe
Opdatér gruppe
Gruppenavn
Ny MMS-gruppe
Du har valgt en person der ikke understøtter Signal-grupper. Denne gruppe vil være en MMS-gruppe.
+ Du er ikke sat op til Signal beskeder og opkald, så Signal grupper er deaktiveret. Du bedes registrere dig under Indstillinger > Advanceret.
En ukendt fejl har medført, at oprettelse af gruppen mislykkedes.
Der skal være mindst én person i gruppen!
En kontakt i gruppen har et nummer, der ikke kan læses. Ret nummeret eller fjern kontakten og prøv igen.
@@ -261,16 +270,11 @@ vil det resultere i dupletter.
Tryk og hold nede for at optage en stemmebesked. Slip for at afsende.
Del
- Send SMS
Afbryd
Sender...
Hjerte
Invitationer afsendt!
Invitér til Signal
-
- - SEND TIL 1 VEN
- - SEND TIL %d VENNER
-
- Send 1 SMS-invitation?
- Send %d SMS-invitationer?
@@ -284,7 +288,6 @@ vil det resultere i dupletter.
Signal skal bruge Barcode Scanner til QR-koder.
Kunne ikke sende
- Ny identitet
Fejl ved lagring af MMS!
Fejl! Ingen forbindelse til MMS-tjenesten...
@@ -333,6 +336,7 @@ vil det resultere i dupletter.
Beklager. Dette er ikke en gyldig QR-kode til at forbinde enheder.
Forbind en Signal enhed?
Det ser ud som om du forsøger at forbinde en Signal-enhed vha. en tredjeparts-skanner. Af hensyn til sikkerhed, bør du skanne koden igen fra selve Signal-appen.
+
Indtast kodeord
Signal-ikon
@@ -348,10 +352,8 @@ vil det resultere i dupletter.
Senere
Blokér denne kontakt?
- Du vil ikke længere modtage beskeder eller opkald fra denne bruger.
Blokér
Stop blokering af denne kontakt?
- Er du sikker på, du vil stoppe blokering af denne kontakt?
Stop blokering
Aktiveret
Deaktiveret
@@ -377,6 +379,7 @@ vil det resultere i dupletter.
Det indtastede telefonnummer understøtter ikke secure voice!
Modtaget
+ Forbind med Signal
Vælg land
Du skal vælge din
landekode
@@ -438,8 +441,6 @@ nøgle-besked!
Modtog en nøgle-besked for en ugyldig protokol-version.
- Modtog opdaterede, men ukendte identitetsoplysninger. Klik for at validere identitet.
- Sikker forbindelse gendannet.
Duplikeret besked.
Forlod gruppen...
@@ -451,21 +452,7 @@ Modtog en nøgle-besked for en ugyldig protokol-version.
Mediebesked
%s er på Signal, sig hej!
- Du har ingen identitetsnøgle.
- Modtageren har ingen identitetsnøgle.
- Modtageren har ingen identiitetsnøgle!
- ADVARSEL. Den skannede nøgle matcher IKKE! Tjek fingeraftryksteksten nøje.
- IKKE bekræftet!
- Modpartens nøgle er korrekt. Det er også nødvendigt at bekræfte din nøgle med modparten.
- Bekræftet!
- Du har ingen identitetsnøgle!
-
- Du har ingen identitetsnøgle.
- ADVARSEL. Den skannede nøgle matcher IKKE!
- IKKE bekræftet!
- Den skannede nøgle matcher!
- Bekræftet!
- Dit identitetsfingeraftryk
+ Det lader til at du ikke har nogle apps at dele til.
Initialisér til trods for eksisterende forespørgsel?
Send
@@ -493,6 +480,8 @@ Modtog en nøgle-besked for en ugyldig protokol-version.
I gang med at importere
Importerer tekstbeskeder
+ Import fuldendt
+ Import af systemdatabase er gennemført.
Tryk for at åbne.
Tryk for at åbne, eller tryk på låsen for at lukke.
@@ -547,13 +536,13 @@ Modtog en nøgle-besked for en ugyldig protokol-version.
Send Signalbesked
Send usikker (ukrypteret) SMS
Send usikker (ukrypteret) MMS
+ Fra %1$s
Send
Fjern
Samtale med %1$s
Beskedsammensætning
Slå Emoji-tastatur til/fra
Vedhæftet fil-miniature
- Slå vedhæftet fil-skuffe til/fra
SWIPE FOR AT AFBRYDE
@@ -570,6 +559,7 @@ Modtog en nøgle-besked for en ugyldig protokol-version.
Hent
Kontaktbillede
Henter
+
Valgte mængde
%s valgt
@@ -585,7 +575,12 @@ Modtog en nøgle-besked for en ugyldig protokol-version.
Tilkobel ny enhed
fortsæt
+
+ Slukket
+
+
+ Kunne ikke tilgå loggen på din enhed. Du kan alternativt benytte ADB for at få en debug log.
Tak for hjælpen!
Sender
Sender loggene til gist...
@@ -631,6 +626,7 @@ Modtog en nøgle-besked for en ugyldig protokol-version.
LÃ¥s op
Signal skal bruge MMS-indstillinger for at levere media og gruppebeskeder gennem din teleudbyder. Din enhed gør ikke denne information tilgængelig, hvilket nogle gange er tilfældet for låste enheder og andre begrænsende opsætninger.
+ Klik \"OK\" for at sende multimedie- og gruppebeskeder og udfyld indstillingerne. MMS-indstillingerne for din teleoperatør kan ofte findes ved at søge på \"din operatørs APN\". Du behøver kun gøre dette en gang.
BLOKERET
@@ -641,7 +637,6 @@ Modtog en nøgle-besked for en ugyldig protokol-version.
Blokér
Farve
Denne kontakts farve
- Bekræft identitet
Signalopkald
læg på
@@ -700,10 +695,8 @@ mislykkedes.
Tjek
Indtast navn eller nummer
- Tilføj medlem
-
- Deres identitet (de læser):
- Din identitet (du læser):
+
+
Nogle problemer kræver din opmærsomhed.
Sendt
@@ -717,19 +710,17 @@ mislykkedes.
Indtast kodeord
Vælg kontakter
Signal detekteret
- Offentlig identitetsnøgle
Ændr kodeord
- Verificér identitet
+ Indsend fejlfindingslog
Mediepreview
Alle billeder
Alle billeder med %1$s
Besked-detaljer
- Håndtér tilkoblede enheder
+ Enheder
Invitér venner
Arkiverede samtaler
Importér / eksportér
- Din identitetsnøgle
Anvend standard
Anvend tilpasset
Dæmp 1 time
@@ -773,6 +764,8 @@ mislykkedes.
Skærmsikkerhed
Blokér skærmbillede (screenshots) i listen \\"forrige apps\\" og i Signal
LÃ¥s automatisk Signal efter et valgt tidsinterval med inaktivitet
+ Kodeord for timeout ved inaktivitet.
+ Længde for interval ved inaktivitet
Notifikationer
Aktivér beskednotifikationer
Notifikationer om nye kontakter
@@ -825,12 +818,13 @@ mislykkedes.
MMSC-kodeord
Leveringsrapport for SMS
Bed om en leveringsrapport for hver SMS-besked, du sender
+ Slet automatisk ældre beskeder når samtalen overstiger en specificeret længde
Slet gamle beskeder
Chat og medier
Grænse på samtaler
Trim alle samtaler nu
Løb gennem alle samtaler og gennemfør begrænsninger for samtalelængde
- Enheder
+ Enheder
Lys
Mørk
Udseende
@@ -876,6 +870,8 @@ mislykkedes.
Send besked igen
Gem vedhæftet fil
+
+
Invitér
@@ -894,8 +890,6 @@ mislykkedes.
Ny samtale
- Sikkerhed
- Verificér identitet
Gendan sikker forbindelse
Ophæv dæmpning
@@ -919,6 +913,8 @@ mislykkedes.
Transmission
Sammenlign
+ Vis din QR kode
+ Scan kontakts QR kode
Ny besked
Ny gruppe
@@ -927,6 +923,7 @@ mislykkedes.
Markér alle som læst
Invitér venner
Hjælp
+
Din version af Signal er forældet
@@ -941,6 +938,7 @@ mislykkedes.
Tryk for at gøre Signal til din standard SMS-app.
SET
Importér SMS
+ Klik for at kopiere din telefons SMS beskeder til Signals krypterede database.
IMPORTÈR
Aktivér Signalbeskeder og -opkald
Tryk for øjeblikkelig afsending, stærkere privatlivsbeskyttelse og ingen SMS-afgifter.
@@ -959,6 +957,7 @@ mislykkedes.
Gem
+ Gem alle
Billedpreview
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 1578ee6d164..7cc50ca4ed3 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -5,9 +5,11 @@
Nein
Löschen
Bitte warten …
+
+ Neue Nachricht
Momentan: %s
- Sie haben noch kein Passwort festgelegt!
+ Du hast noch kein Passwort festgelegt!
- 1 Nachricht je Unterhaltung
- %d Nachrichten je Unterhaltung
@@ -24,10 +26,10 @@
Registrierung löschen
Registrierung für Signal-Nachrichten und -Anrufe wird gelöscht …
Signal-Nachrichten und -Anrufe deaktivieren?
- Signal-Nachrichten und -Anrufe durch Löschen Ihrer Registrierung vom Server deaktivieren. Sie werden Ihre Rufnummer erneut registrieren müssen, um zukünftig wieder verschlüsselt zu kommunizieren.
+ Signal-Nachrichten und -Anrufe durch Löschen deiner Registrierung vom Server deaktivieren. Du wirst deine Rufnummer erneut registrieren müssen, um zukünftig wieder verschlüsselt zu kommunizieren.
Fehler beim Verbinden zum Server!
SMS aktiviert
- Standard-SMS-App ändern
+ Antippen, um Standard-SMS-App zu ändern
SMS deaktiviert
Antippen, um Signal als Standard-SMS-App zu verwenden
an
@@ -62,8 +64,8 @@
Eingehender Anruf
- Der Schlüssel von %1$s hat sich geändert. Dies könnte bedeuten, dass jemand versucht, Ihre Kommunikation abzuhören. Vielleicht hat %2$s Signal aber auch nur neu installiert und verwendet nun einen neuen Schlüssel.
- Sie sollten diesen Kontakt ggf. überprüfen.
+ Deine Sicherheitsnummer mit %1$s hat sich geändert. Dies könnte entweder bedeuten, dass jemand versucht, deine Kommunikation abzuhören, oder aber dass %2$s Signal einfach erneut installiert hat.
+ Vielleicht möchtest du deine Sicherheitsnummer mit diesem Kontakt überprüfen.
OK
Nachricht %s
@@ -73,7 +75,7 @@
Läuft ab in: %s
Nicht zugestellt
Sichere Medieninhalte anzeigen?
- Diese Medieninhalte sind in einer verschlüsselten Datenbank gespeichert. Zur Anzeige müssen sie vorübergehend entschlüsselt im Gerätespeicher abgespeichert werden. Möchten Sie dennoch fortfahren?
+ Diese Medieninhalte sind in einer verschlüsselten Datenbank gespeichert. Zum Anzeigen müssen sie vorübergehend entschlüsselt im Gerätespeicher abgespeichert werden. Möchtest du dennoch fortfahren?
Fehler: Abgelaufene Schlüsselaustausch-Nachricht empfangen.
Schlüsselaustausch-Nachricht empfangen. Zum Fortfahren antippen.
%1$s hat die Gruppe verlassen.
@@ -87,7 +89,7 @@
an %s
Verschlüsselung neu starten?
- Hilfreich bei Problemen mit der Verschlüsselung in dieser Unterhaltung. Ihre Nachrichten bleiben erhalten.
+ Hilfreich bei Problemen mit der Verschlüsselung in dieser Unterhaltung. Deine Nachrichten bleiben erhalten.
Neu starten
Unterhaltung löschen?
Alle Nachrichten dieser Unterhaltung unwiderruflich löschen.
@@ -112,7 +114,7 @@
Anrufe nicht unterstützt
Dieses Gerät scheint keine Wahlvorgänge zu unterstützen.
Gruppe verlassen?
- Wollen Sie wirklich diese Gruppe verlassen?
+ Möchtest du wirklich diese Gruppe verlassen?
Unsichere SMS
Unsichere MMS
Signal
@@ -120,15 +122,16 @@
Unterhalten wir uns hiermit: %1$s
Fehler beim Verlassen der Gruppe …
MMS nicht unterstützt
- Diese Nachricht kann nicht gesendet werden, da Ihr Mobilfunkanbieter MMS nicht unterstützt.
+ Diese Nachricht kann nicht gesendet werden, da dein Mobilfunkanbieter MMS nicht unterstützt.
Bitte einen Kontakt auswählen
- Nicht mehr blockieren?
- Diesen Kontakt nicht mehr blockieren.
+ Nicht mehr blockieren?
+ Du wirst wieder Nachrichten und Anrufe von diesem Kontakt erhalten können.
Nicht mehr blockieren
Anhang ist für diese Nachrichtenart zu groß.
Kamera nicht verfügbar
Audioaufnahme nicht möglich!
Fehler beim Senden der Sprachnachricht …
+ Auf deinem Gerät ist derzeit keine App installiert, die mit diesem Link umgehen könnte.
Nachrichtendetails
Übertragung: %1$s\nGesendet/Empfangen: %2$s
@@ -150,7 +153,7 @@
- Fehler beim Speichern des Anhangs im Gerätespeicher!
- Fehler beim Speichern der Anhänge im Gerätespeicher!
- Erfolgreich!
+ Datei erfolgreich gespeichert.
Kein Schreibzugriff auf Gerätespeicher!
- Anhang speichern
@@ -169,6 +172,7 @@
Nachrichten werden gelöscht …
Suchen …
+ Auf deinem Gerät ist derzeit kein Browser installiert.
- Ausgewählte Unterhaltung löschen?
@@ -198,10 +202,10 @@
Standard: %s
Kein Eintrag
- Jetzt
+ Gerade eben
%d min
- „%s“ entfernen?
+ »%s« entfernen?
Nach Entfernen dieses Geräts wird es keine weiteren Nachrichten senden oder empfangen können.
Keine Netzwerkverbindung …
Erneut versuchen
@@ -224,25 +228,30 @@
Exportieren
Klartextsicherung exportieren?
- Achtung: Exportiert die unverschlüsselten Inhalte Ihrer Signal-Nachrichten in den Gerätespeicher.
+ Achtung: Exportiert die unverschlüsselten Inhalte deiner Signal-Nachrichten in den Gerätespeicher.
Abbruch
Exportieren
Klartext wird in Gerätespeicher exportiert …
Kein Schreibzugriff auf Gerätespeicher.
Fehler beim Schreiben auf Gerätespeicher.
- Erfolgreich!
+ Exportieren erfolgreich abgeschlossen.
Dauerhafter Signal-Kommunikationsfehler!
- Signal konnte nicht für die Google Play-Dienste registriert werden. Signal-Nachrichten und -Anrufe wurden daher deaktiviert. Bitte registrieren Sie Signal im Menü „Einstellungen“ > „Weitere Einstellungen“ erneut.
+ Signal konnte nicht für die Google Play-Dienste registriert werden. Signal-Nachrichten und -Anrufe wurden daher deaktiviert. Bitte registriere Signal im Menü »Einstellungen« > »Weitere Einstellungen« erneut.
+
+ Fehler beim Abruf des GIFs in voller Auflösung …
+
+ GIFs
+ Sticker
Neue Gruppe
Gruppe bearbeiten
Gruppenname
Neue MMS-Gruppe
- Sie haben einen Kontakt ausgewählt, der Signal-Gruppen nicht unterstützt. Daher wird dies eine MMS-Gruppe sein.
- Sie sind nicht für Signal-Nachrichten und -Anrufe registriert, daher sind Signal-Gruppen deaktiviert. Bitte registrieren Sie Signal im Menü „Einstellungen“ > „Weitere Einstellungen“.
+ Du hast einen Kontakt ausgewählt, der Signal-Gruppen nicht unterstützt. Daher wird dies eine MMS-Gruppe sein.
+ Du bist nicht für Signal-Nachrichten und -Anrufe registriert, daher sind Signal-Gruppen deaktiviert. Bitte registriere Signal im Menü »Einstellungen« > »Weitere Einstellungen«.
Gruppe konnte aufgrund eines unerwartet aufgetretenen Fehlers nicht erstellt werden.
- Sie brauchen mindestens eine Person in Ihrer Gruppe!
+ Du benötigst mindestens eine Person in deiner Gruppe!
Eines der Gruppenmitglieder hat eine nicht korrekt lesbare Rufnummer. Bitte beheben oder Kontakt entfernen und erneut versuchen.
Gruppenavatar
Gruppe erstellen
@@ -250,7 +259,7 @@
%1$s wird aktualisiert …
%1$s konnte nicht hinzugefügt werden, da kein Signal-Kontakt.
Gruppendetails werden geladen …
- Sie sind bereits in der Gruppe.
+ Du bist bereits in der Gruppe.
Ich
@@ -258,14 +267,15 @@
Exportieren
System-SMS-Datenbank importieren?
- Nachrichten aus der Standard-SMS-Datenbank in Signal importieren. Falls Sie dies schon einmal gemacht haben, wird es zu doppelten Nachrichten kommen.
+ Nachrichten aus der Standard-SMS-Datenbank in Signal importieren. Falls du dies schon einmal gemacht hast, wird es zu doppelten Nachrichten kommen.
Importieren
Abbruch
Verschlüsselte Sicherung wiederherstellen?
- Das Wiederherstellen einer verschlüsselten Datensicherung ersetzt Ihre bestehenden Schlüssel, Einstellungen und Nachrichten. Sie werden jegliche Informationen Ihrer jetzigen Signal-Installation verlieren, die nicht in dieser Datensicherung enthalten sind.
+
+Das Wiederherstellen einer verschlüsselten Datensicherung ersetzt deine bestehenden Schlüssel, Einstellungen und Nachrichten. Du wirst jegliche Informationen deiner jetzigen Signal-Installation verlieren, die nicht in dieser Datensicherung enthalten sind.
Wiederherstellen
Klartextsicherung importieren?
- Nachrichten aus einer Klartext-Datensicherung in Signal importieren. Falls Sie bereits zuvor diese Datensicherung importiert haben, wird es zu doppelten Nachrichten kommen.
+ Nachrichten aus einer Klartext-Datensicherung in Signal importieren. Falls du bereits zuvor diese Datensicherung importiert hast, wird es zu doppelten Nachrichten kommen.
Importieren
Klartextsicherung wird importiert …
Keine Klartextsicherung gefunden!
@@ -279,30 +289,30 @@
Antippen und Halten zur Aufnahme einer Sprachnachricht, Loslassen zum Senden
Teilen
- SMS senden
+ Kontakte auswählen
Abbrechen
- Sendevorgang …
+ Wird gesendet …
Herz
Einladungen versendet!
Zu Signal einladen
-
- - AN 1 FREUND SENDEN
- - AN %d FREUNDE SENDEN
+
+ - SMS AN 1 KONTAKT SENDEN
+ - SMS AN %d FREUNDE SENDEN
- 1 SMS-Einladung senden?
- %d SMS-Einladungen senden?
- Wechseln wir zu Signal: %1$s
- Es sieht so aus, als hätten Sie keine zum Teilen geeignete Apps installiert.
+ Wechseln wir zu »Signal«: %1$s
+ Es sieht so aus, als hättest du keine zum Teilen geeignete Apps installiert.
Freunde lassen Freunde nicht unverschlüsselt kommunizieren.
Keinen scanbaren Schlüssel gefunden!
- App „Barcode Scanner“ installieren?
- Für QR-Codes benötigt Signal die App „Barcode Scanner“.
+ App »Barcode Scanner« installieren?
+ Für QR-Codes benötigt Signal die App »Barcode Scanner«.
- Versand fehlgeschlagen
- Neuer Schlüssel
+ Versand gescheitert
+ Neue Sicherheitsnummer
Fehler beim Speichern der MMS!
Verbindung zum MMS-Anbieter fehlgeschlagen …
@@ -320,13 +330,16 @@
MMS
- Die empfangene Nachricht wurde mit einer veralteten Version von Signal verschlüsselt, die nicht mehr unterstützt wird. Bitten Sie den Kontakt, Signal zu aktualisieren und die Nachricht erneut zu senden.
- Sie haben die Gruppe verlassen.
- Gruppe wurde aktualisiert.
+ Die empfangene Nachricht wurde mit einer veralteten Version von Signal verschlüsselt, die nicht mehr unterstützt wird. Bitte den Absender, Signal zu aktualisieren und die Nachricht erneut zu senden.
+ Du hast die Gruppe verlassen
+ Gruppe wurde aktualisiert
Eingegangener Anruf von %s
Ausgegangener Anruf an %s
Entgangener Anruf von %s
%s ist bei Signal. Zeit, Hallo zu sagen!
+ Du hast die Zeit für verschwindende Nachrichten auf %1$s festgelegt
+ %1$s hat die Zeit für verschwindende Nachrichten auf %2$s festgelegt
+ Deine Sicherheitsnummer mit %s hat sich geändert
Passwörter stimmen nicht überein!
Das eingegebene alte Passwort ist falsch!
@@ -338,36 +351,41 @@
Gerät verbinden?
Folgende Rechte werden vergeben:
-• Alle Ihre Nachrichten lesen\n• Nachrichten in Ihrem Namen versenden
+• Alle deine Nachrichten lesen\n• Nachrichten in deinem Namen versenden
Gerät verknüpfen
Neues Gerät wird verknüpft …
Gerät freigeschaltet!
Kein Gerät gefunden.
Netzwerkfehler.
Ungültiger QR-Code.
- Es sind bereits zu viele Geräte verknüpft. Versuchen Sie, mindestens eines zu entfernen …
+ Es sind bereits zu viele Geräte verknüpft. Versuche, mindestens eines zu entfernen …
Dies ist leider kein gültiger QR-Code zur Geräteverknüpfung.
Signal-Gerät verknüpfen?
- Sie versuchen offenbar, ein Signal-Gerät mithilfe einer Scanner-App eines Drittanbieters zu verknüpfen. Scannen Sie den QR-Code zu Ihrem Schutz noch einmal direkt aus Signal ein.
+ Du versuchst offenbar, ein Signal-Gerät mithilfe einer Scanner-App eines Drittanbieters zu verknüpfen. Scanne den QR-Code zu deinem Schutz noch einmal direkt aus Signal ein.
+
+ Verschwindende Nachrichten
+ Deine Nachrichten werden nicht verfallen.
+ In dieser Unterhaltung gesendete und empfangene Nachrichten werden %s nach dem Lesen verschwinden.
Passwort eingeben
Signal-Symbol
Passwort übermitteln
Passwort ungültig!
- Die derzeit installierte Version der Google Play-Dienste funktioniert nicht korrekt. Bitte installieren Sie die Google Play-Dienste neu und versuchen Sie es noch einmal.
+ Die derzeit installierte Version der Google Play-Dienste funktioniert nicht korrekt. Bitte installiere die Google Play-Dienste neu und versuche es noch einmal.
- Bewerten Sie diese App
- Helfen Sie uns durch Ihre Bewertung, wenn Ihnen die App gefällt.
+ Bewerte diese App
+ Hilf uns durch deine Bewertung, wenn dir die App gefällt.
Jetzt bewerten!
Nein danke
Später
+ Hoppla, die Play Store-App scheint nicht auf deinem Gerät installiert zu sein.
Kontakt blockieren?
- Sie werden keine Nachrichten oder Anrufe mehr von diesem Kontakt erhalten.
+ Du wirst keine Nachrichten und Anrufe mehr von diesem Kontakt erhalten können.
Blockieren
Nicht mehr blockieren?
- Diesen Kontakt nicht mehr blockieren.
+ Du wirst wieder Nachrichten und Anrufe von diesem Kontakt erhalten können.
Nicht mehr blockieren
Aktiviert
Deaktiviert
@@ -381,28 +399,28 @@
Besetzt
Verbunden
Verbindung wird hergestellt
- Aushandeln der Verbindung fehlgeschlagen!
+ Aushandeln der Verbindung gescheitert!
Kontakt nicht erreichbar
Verbindung wird ausgehandelt
Netzwerkfehler!
App-Fehler
Schwerer Fehler
- Anmeldung fehlgeschlagen!
+ Anmeldung gescheitert!
Nachricht vom Server
Rufnummer nicht registriert!
Die gewählte Rufnummer unterstützt keine sicheren Anrufe!
OK
Mit Signal verbinden
- Wählen Sie Ihr Land aus
+ Wähle dein Land aus
Landesvorwahl muss angegeben werden
- Sie müssen Ihre Rufnummer angeben
+ Du must deine Rufnummer angeben
Ungültige Rufnummer
Die angegebene Rufummer (%s) ist ungültig.
Nicht unterstützt
Entschuldigung, dieses Gerät unterstützt keine Übertragung über den Datenkanal. Geräte mit Android vor Version 4.0 müssen ein Google-Konto eingerichtet haben. Geräte mit Android 4.0 und neuer benötigen kein Google-Konto, müssen aber die Google Play Store-App installiert haben.
-Bitte kontrollieren Sie noch einmal Ihre Rufnummer. Diese wird anschließend durch eine SMS überprüft.
+Bitte kontrolliere noch einmal deine Rufnummer. Diese wird anschließend durch eine SMS überprüft.
Weiter
Bearbeiten
@@ -411,23 +429,23 @@ Bitte kontrollieren Sie noch einmal Ihre Rufnummer. Diese wird anschließend dur
Rufnummer wird überprüft
%s bearbeiten
Registrierung abgeschlossen!
- Sie müssen den Code eingeben, den Sie zuvor empfangen haben …
+ Du musst den Code eingeben, den du zuvor empfangen hast …
Verbinden
- Verbindung wird zur Überprüfung hergestellt …
+ Verbindung wird zur Bestätigung hergestellt …
Netzwerkfehler!
- Verbindung konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es dann erneut.
- Überprüfung fehlgeschlagen!
- Der eingegebene Code ist falsch. Bitte versuchen Sie es erneut.
+ Verbindung konnte nicht hergestellt werden. Bitte überprüfe deine Verbindung und versuche es dann erneut.
+ Bestätigung gescheitert!
+ Der eingegebene Bestätigungscode ist falsch. Bitte versuche es erneut.
Zu viele Versuche
- Sie haben zu viele falsche Codes eingegeben. Bitte warten Sie eine Minute und versuchen Sie es dann erneut.
+ Du hast zu viele falsche Bestätigungscodes eingegeben. Bitte warte eine Minute und versuche es dann erneut.
Anruf anfordern
Bestätigungsanruf wird angefordert …
Serverfehler
- Der Server hat einen Fehler festgestellt. Bitte versuchen Sie es erneut.
+ Der Server hat einen Fehler festgestellt. Bitte versuche es erneut.
Zu viele Anfragen!
- Sie haben vor Kurzem schon einen Anruf angefordert. Sie können in 20 Minuten einen weiteren anfordern.
+ Du hast vor Kurzem schon einen Anruf angefordert. Du kannst in 20 Minuten einen weiteren anfordern.
Konflikt bei der Registrierung
- Diese Rufnummer wurde bereits bei einem anderen Signal-Server (CyanogenMod?) registriert. Sie müssen zuerst Ihre Registrierung dort löschen, bevor Sie sich hier registrieren können.
+ Diese Rufnummer wurde bereits bei einem anderen Signal-Server (CyanogenMod?) registriert. Du musst zuerst deine Registrierung dort löschen, bevor du dich hier registrieren kannst.
Registrierung abgeschlossen
Signal-Registrierung erfolgreich abgeschlossen.
@@ -441,39 +459,29 @@ Bitte kontrollieren Sie noch einmal Ihre Rufnummer. Diese wird anschließend dur
Fehlerhafte Schlüsselaustausch-Nachricht empfangen!
Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
- Nachricht mit unbekanntem Schlüssel empfangen. Zum Anzeigen antippen.
- Aktualisierten, aber unbekannten Schlüssel empfangen. Antippen, um Schlüssel zu prüfen.
- Verschlüsselung neu gestartet.
+ Nachricht mit neuer Sicherheitsnummer empfangen. Zum Verarbeiten und Anzeigen antippen.
+ Du hast die Verschlüsselung neu gestartet.
+ %s hat die Verschlüsselung neu gestartet.
Doppelte Nachricht.
Gruppe wurde verlassen …
- Verschlüsselung neu gestartet.
+ Verschlüsselung neu gestartet
Entwurf:
Ausgegangener Anruf
Eingegangener Anruf
Entgangener Anruf
Nachricht mit Medieninhalten
%s ist bei Signal. Zeit, Hallo zu sagen!
+ Zeit für verschwindende Nachrichten auf %s festgelegt
+ Deine Sicherheitsnummer mit %s hat sich geändert
- Sie haben keinen eigenen Schlüssel.
- Kontakt hat keinen Schlüssel.
- Kontakt hat keinen Schlüssel!
- QR-Code einscannen
- Ihren QR-Code anzeigen
- ACHTUNG: Der eingescannte Schlüssel stimmt NICHT überein! Bitte überprüfen Sie den Text des Schlüssels sorgfältig.
- NICHT überprüft!
- Der Schlüssel des Kontakts ist korrekt. Lassen Sie ihn auch Ihren eigenen Schlüssel überprüfen.
- Überprüft!
- Sie haben keinen eigenen Schlüssel!
-
- Sie haben keinen eigenen Schlüssel.
- QR-Code einscannen
- Ihren QR-Code anzeigen
- ACHTUNG: Der eingescannte Schlüssel stimmt NICHT überein!
- NICHT überprüft!
- Der eingescannte Schlüssel stimmt überein!
- Überprüft!
- Ihr Schlüssel
+ Dein Kontakt verwendet eine alte Version von Signal. Bitte ihn Signal zu aktualisieren, bevor ihr eure Sicherheitsnummer überprüft.
+ Dein Kontakt verwendet eine neuere Version von Signal mit einem inkompatiblen QR-Code-Format. Zum Vergleichen bitte aktualisieren.
+ Der eingescannte QR-Code ist kein korrekt formatierter Überprüfungscode für eine Sicherheitsnummer. Bitte versuche es erneut.
+ Sicherheitsnummer teilen über …
+ Unsere Signal-Sicherheitsnummer:
+ Anscheinend hast du keine zum Teilen geeigneten Apps installiert.
+ Keine zu vergleichende Sicherheitsnummer in der Zwischenablage gefunden
Trotz bestehender Anfrage starten?
Senden
@@ -488,8 +496,8 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
Verbindung zum MMS-Server wird aufgebaut …
MMS wird heruntergeladen …
- Herunterladen der MMS fehlgeschlagen!
- Herunterladen …
+ Herunterladen der MMS gescheitert!
+ Wird heruntergeladen …
Antippen und MMS-Einstellungen konfigurieren, um das Herunterladen fortzusetzen.
Fehler beim Entschlüsseln der Nachricht.
@@ -502,7 +510,7 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
Importieren wird durchgeführt
Nachrichten werden importiert
Importieren abgeschlossen
- Importieren der Systemdatenbank abgeschlossen.
+ Importieren der Systemdatenbank abgeschlossen.
Zum Öffnen antippen.
Zum Öffnen antippen oder zum Schließen Schloss antippen.
@@ -514,8 +522,8 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
Gesperrte Nachricht …
Nachricht mit Medieninhalten: %s
(ohne Text)
- Nachrichtenübermittlung fehlgeschlagen.
- Nachrichtenübermittlung fehlgeschlagen.
+ Nachrichtenübermittlung gescheitert.
+ Nachrichtenübermittlung gescheitert.
Nachrichtenübermittlung fehlgeschlagen.
Alle gelesen
Gelesen
@@ -529,11 +537,20 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
Neue Nachricht
Bild
+ Bild
Audio
+ Audio
Video
+ Video
Kontakt
+ Kontakt
Kamera
+ Kamera
Standort
+ Standort
+ GIF
+ Gif
+ Anhänge hinzufügen
Altes Passwort
Neues Passwort
@@ -557,13 +574,16 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
Signal-Nachricht senden
Unsichere SMS senden
Unsichere MMS senden
+ Von %1$s
Senden
Entfernen
Unterhaltung mit %1$s
Nachricht verfassen
Emoji-Tastatur aktivieren
Anhangsvorschaubild
- Direktaufnahme
+ Direktaufnahme
+ Audioanhang aufnehmen und senden
+ Signal für SMS aktivieren
ZUM ABBRECHEN WEGWISCHEN
@@ -573,13 +593,17 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
Download
Herunterladen
- Senden fehlgeschlagen
+ Versand gescheitert
Bestätigung ausstehend
Zugestellt
Herunterladen
Kontaktbild
Herunterladen
+
+ Wiedergeben
+ Pause
+ Herunterladen
Mehrfachauswahl
%s ausgewählt
@@ -587,7 +611,7 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
Länder werden geladen …
Suchen
- Zum Verknüpfen den auf dem Gerät angezeigten QR-Code einscannen
+ Scanne zum Verknüpfen den auf dem Gerät angezeigten QR-Code ein
Gerät verknüpfen
@@ -595,28 +619,60 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
Neues Gerät verknüpfen
Fortsetzen
+
+ Aus
+
+ - 1 Sekunde
+ - %d Sekunden
+
+ %ds
+
+ - 1 Minute
+ - %d Minuten
+
+ %dmin
+
+ - 1 Stunde
+ - %d Stunden
+
+ %dh
+
+ - 1 Tag
+ - %d Tage
+
+ %dd
+
+ - 1 Woche
+ - %d Wochen
+
+ %dw
+
+ GIFs und Sticker suchen
+
+ Nichts gefunden
- Das Diagnoseprotokoll auf Ihrem Gerät konnte nicht gelesen werden. Sie können allerdings immer noch ADB verwenden, um ein Diagnoseprotokoll zu erhalten.
- Danke für Ihre Hilfe!
+ Das Diagnoseprotokoll auf deinem Gerät konnte nicht gelesen werden. Du kannst allerdings immer noch ADB verwenden, um ein Diagnoseprotokoll zu erhalten.
+ Danke für deine Hilfe!
Übermitteln
Diagnoseprotokoll wird übermittelt …
+ Kein Browser installiert
- Möchten Sie Ihre vorhandenen Nachrichten in Signals verschlüsselte Datenbank importieren?
+ Möchtest du deine vorhandenen Nachrichten in Signals verschlüsselte Datenbank importieren?
Die Standard-Systemdatenbank wird in keiner Weise modifiziert oder verändert.
Überspringen
Importieren
- Dies kann eine Weile dauern, bitte haben Sie etwas Geduld. Sie werden benachrichtigt, sobald der Import abgeschlossen ist.
+ Dies kann eine Weile dauern, bitte etwas Geduld. Du wirst benachrichtigt, sobald der Import abgeschlossen ist.
IMPORTIEREN
Datenbank wird aktualisiert …
Klartextsicherung exportieren
- Eine mit „SMS Backup & Restore“ kompatible Klartextsicherung exportieren
+ Eine mit »SMS Backup & Restore« kompatible Klartextsicherung exportieren
System-SMS-Datenbank importieren
Datenbank aus der Standard-SMS-App importieren
Verschlüsselte Sicherung wiederherstellen
Eine zuvor exportierte, verschlüsselte Signal-Datensicherung wiederherstellen
Klartextsicherung importieren
- Eine mit „SMS Backup & Restore“ kompatible Klartextsicherung importieren
+ Eine mit »SMS Backup & Restore« kompatible Klartextsicherung importieren
Gesamte Unterhaltung anzeigen
@@ -625,7 +681,7 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
ÜBERPRÜFEN
ERNEUT SENDEN
- Für Ihr Telefon werden manuelle MMS-Einstellungen benötigt.
+ Für dein Telefon werden manuelle MMS-Einstellungen benötigt.
Aktiviert
Deaktiviert
Nicht gesetzt
@@ -637,12 +693,12 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
- %1$s sind der Gruppe beigetreten.
Gruppe aktualisiert.
- Gruppenname lautet jetzt „%1$s“.
+ Gruppenname lautet jetzt »%1$s«.
Entsperren
- Signal benötigt MMS-Einstellungen, um Nachrichten mit Medieninhalten und Gruppennachrichten über Ihren Mobilfunkanbieter zu versenden. Ihr Gerät stellt diese Informationen nicht zur Verfügung, was gelegentlich bei gesperrten oder anderweitig restriktiv konfigurierten Geräten der Fall ist.
- Zum Versenden von Nachrichten mit Medieninhalten und Gruppennachrichten bitte „OK“ antippen und die geforderten Einstellungen vervollständigen. Die MMS-Einstellungen Ihres Mobilfunkanbieters können normalerweise durch eine Internetsuche nach dem „APN“ des Anbieters gefunden werden.
+ Signal benötigt MMS-Einstellungen, um Nachrichten mit Medieninhalten und Gruppennachrichten über deinen Mobilfunkanbieter zu versenden. Dein Gerät stellt diese Informationen nicht zur Verfügung, was gelegentlich bei gesperrten oder anderweitig restriktiv konfigurierten Geräten der Fall ist.
+ Zum Versenden von Nachrichten mit Medieninhalten und Gruppennachrichten bitte »OK« antippen und die geforderten Einstellungen vervollständigen. Die MMS-Einstellungen deines Mobilfunkanbieters können normalerweise durch eine Internetsuche nach dem »APN« des Anbieters gefunden werden.
BLOCKIERT
@@ -652,8 +708,8 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
Vibration
Kontakt blockieren
Farbe
- Farbe dieses Kontakts
- Kontakt überprüfen
+ Farbe für diesen Kontakt
+ Sicherheitsnummer überprüfen
Signal-Anruf
Anruf beenden
@@ -662,10 +718,9 @@ Schlüsselaustausch-Nachricht für eine ungültige Protokollversion empfangen.
Signal-Anruf
-Überprüfen Sie Ihre Rufnummer zur Registrierung bei Signal.
- IHR LAND
- IHRE LANDESVORWAHL UND
-RUFNUMMER
+Überprüfe deine Rufnummer zur Registrierung bei Signal.
+ DEIN LAND
+ DEINE LANDESVORWAHL UND RUFNUMMER
RUFNUMMER
Registrieren
Während der Registrierung werden einige Kontaktinformationen an den Server übermittelt. Diese werden jedoch nicht gespeichert.
@@ -674,17 +729,17 @@ RUFNUMMER
Einige mögliche Probleme beinhalten:
SMS-abfangende Apps.
-Manche SMS-Apps von Drittanbietern, z. B. Handcent oder GoSMS, fangen fälschlicherweise alle eingehenden SMS ab. Überprüfen Sie, ob Sie eine SMS empfangen haben, die mit „Your Signal verification code:“ beginnt. In diesem Fall müssen Sie Ihre Drittanbieter-App so einstellen, dass diese SMS durchlässt.
+Manche SMS-Apps von Drittanbietern, z. B. Handcent oder GoSMS, fangen fälschlicherweise alle eingehenden SMS ab. Überprüfe, ob du eine SMS empfangen hast, die mit »Your Signal verification code:« beginnt. In diesem Fall musst du deine Drittanbieter-App so einstellen, dass diese SMS durchlässt.
Fehlerhafte Rufnummer.
-Bitte überprüfen Sie die eingegebene Rufnummer auf Richtigkeit und eine Ihrer Region entsprechend korrekte Formatierung.
+Bitte überprüfe die eingegebene Rufnummer auf Richtigkeit und eine deiner Region entsprechend korrekte Formatierung.
Google Voice.
Signal funktioniert nicht mit Google Voice-Rufnummern.
- Überprüfung durch Anruf
+ Bestätigung durch Anruf
-Signal kann Sie zur Überprüfung Ihrer Rufnummer auch anrufen. Tippen Sie auf „Anrufen“ und geben Sie unten den gehörten sechsstelligen Code ein.
+Signal kann dich zum Überprüfen deiner Rufnummer auch anrufen. Tippe auf »Anrufen« und gib unten den gehörten sechsstelligen Code ein.
Überprüfen
Mich anrufen
Rufnummer bearbeiten
@@ -692,33 +747,36 @@ Signal kann Sie zur Überprüfung Ihrer Rufnummer auch anrufen. Tippen Sie auf
Verbindung mit Signal-Server konnte nicht hergestellt werden.
Einige der möglichen Probleme beinhalten:
Keine Netzwerkverbindung.
- Um diese Signal-Funktion nutzen zu können, benötigt Ihr Gerät eine Netzverbindung, Stellen Sie sicher, dass eine mobile Daten- oder WLAN-Verbindung besteht.
+ Um diese Signal-Funktion nutzen zu können, benötigt dein Gerät eine Netzverbindung. Stelle sicher, dass eine mobile Daten- oder WLAN-Verbindung besteht.
Restriktive Firewall.
-Bei Verbindung über WLAN blockiert möglicherweise eine Firewall den Zugang zum Signal-Server. Versuchen Sie ein anderes Netzwerk oder die mobile Datenverbindung.
+Bei Verbindung über WLAN blockiert möglicherweise eine Firewall den Zugang zum Signal-Server. Versuche ein anderes Netzwerk oder die mobile Datenverbindung.
-Signal wird Ihre Rufnummer nun automatisch mit einer SMS überprüfen.
+Signal wird deine Rufnummer nun automatisch mit einer SMS überprüfen.
Verbindung wird hergestellt …
- Warten auf SMS-Überprüfung …
+ Warten auf SMS-Bestätigung …
Registrierung wird durchgeführt …
- Dies kann einen Moment dauern, bitte haben Sie Geduld. Wir benachrichtigen Sie, sobald die Überprüfung abgeschlossen ist.
+ Dies kann einen Moment dauern, bitte etwas Geduld. Wir benachrichtigen dich, sobald die Bestätigung abgeschlossen ist.
-Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.
- SMS-Überprüfung fehlgeschlagen.
+Das Warten auf eine Bestätigungs-SMS hat zu lange gedauert.
+ SMS-Bestätigung gescheitert.
Schlüssel werden erzeugt …
Benachrichtigung
Telefon
Haken
Name/Rufnummer eingeben
- Mitglieder hinzufügen
-
- Schlüssel des Kontakts:
- Ihr Schlüssel:
+ Mitglieder hinzufügen
+
+ Mehr über das Überprüfen von Sicherheitsnummern erfahren]]>
+ Zum Scannen antippen
+
+ Sicherheitsnummer teilen
- Einige Vorgänge benötigen Ihre Aufmerksamkeit.
+ Einige Vorgänge benötigen deine Aufmerksamkeit.
Gesendet
Empfangen
+ Verschwindet
Über
An:
Von:
@@ -728,20 +786,18 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.
Passwort eingeben
Kontakte auswählen
Signal erkannt
- Öffentlicher Schlüssel
Passwort ändern
- Kontakt überprüfen
+ Sicherheitsnummer überprüfen
Diagnoseprotokoll übermitteln
Medieninhaltevorschau
Alle Bilder
Alle Bilder mit %1$s
Nachrichtendetails
- Verknüpfte Geräte verwalten
+ Verknüpfte Geräte
Freunde einladen
Archivierte Unterhaltungen
Datensicherung
- Ihr Schlüssel
Standard verwenden
Benutzerdefiniert verwenden
Für 1 Stunde
@@ -777,9 +833,9 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.
Antippen der Eingabetaste versendet Nachrichten sofort
Darstellung
Kontakt auswählen
- Wählen Sie den Kontakt aus der Kontaktliste.
+ Wähle deinen Kontakt aus der Kontaktliste.
Passwort ändern
- Ihr Passwort ändern
+ Dein Passwort ändern
Passwort aktivieren
Signal und Benachrichtungen mit einem Passwort sperren
Bildschirmschutz
@@ -845,7 +901,7 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.
Höchstzahl an Nachrichten
Alle Unterhaltungen jetzt kürzen
Alle Unterhaltungen prüfen und deren Längenbegrenzung sicherstellen
- Geräte
+ Verknüpfte Geräte
Hell
Dunkel
Darstellung
@@ -858,6 +914,8 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.
Kompatibilität WLAN-Telefonie
Aktivieren, falls das Gerät SMS/MMS über WLAN nutzt (nur bei aktivierter WLAN-Telefonie)
Blockierte Kontakte
+ Sicherheitsnummern zustimmen
+ Zustimmung erfordern für neue bzw. geänderte Sicherheitsnummern
In Benachrichtigungen anzeigen
Bei mobiler Datenverbindung
Bei WLAN-Verbindung
@@ -891,6 +949,10 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.
Nachricht erneut senden
Anhang speichern
+
+ Verschwindende Nachrichten
+
+ Nachrichten verfallend
Einladen
@@ -909,8 +971,6 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.
Neue Unterhaltung
- Sicherheit
- Kontakt überprüfen
Verschlüsselung neu starten
Stummschaltung aufheben
@@ -934,7 +994,7 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.
Übertragen
Vergleichen
- Ihren QR-Code anzeigen
+ Deinen QR-Code anzeigen
QR-Code einscannen
Neue Unterhaltung
@@ -944,38 +1004,43 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.
Alle als gelesen markieren
Freunde einladen
Hilfe
+
+ In Zwischenablage kopieren
+ Mit Zwischenablage vergleichen
- Ihre Version von Signal ist veraltet
+ Deine Version von Signal ist veraltet
- - Ihre Version von Signal wird in 1 Tag ablaufen. Antippen, um auf die neueste Version zu aktualisieren.
- - Ihre Version von Signal wird in %d Tagen ablaufen. Antippen, um auf die neueste Version zu aktualisieren.
+ - Deine Version von Signal wird in 1 Tag ablaufen. Bitte antippen, um auf die neueste Version zu aktualisieren.
+ - Deine Version von Signal wird in %d Tagen ablaufen. Bitte antippen, um auf die neueste Version zu aktualisieren.
- Ihre Version von Signal wird heute ablaufen. Antippen, um auf die neueste Version zu aktualisieren.
- Ihre Version von Signal ist abgelaufen!
- Nachrichten werden nicht mehr erfolgreich versendet werden. Antippen, um auf die neueste Version zu aktualisieren.
+ Deine Version von Signal wird heute ablaufen. Bitte antippen, um auf die neueste Version zu aktualisieren.
+ Deine Version von Signal ist abgelaufen!
+ Nachrichten werden nicht mehr erfolgreich versendet werden. Bitte antippen, um auf die neueste Version zu aktualisieren.
AKTUALISIEREN
Als Standard-SMS-App verwenden
Antippen, um Signal als Standard-SMS-App zu verwenden.
FESTLEGEN
System-SMS importieren
- Antippen, um auf Ihrem Telefon gespeicherte SMS-Nachrichten in die verschlüsselte Datenbank von Signal zu importieren.
+ Antippen, um auf deinem Telefon gespeicherte SMS-Nachrichten in die verschlüsselte Datenbank von Signal zu importieren.
IMPORTIEREN
Signal-Nachrichten und -Anrufe aktivieren
- Verbessern Sie Ihr Kommunikationserlebnis.
+ Verbessere dein Kommunikationserlebnis.
AKTIVIEREN
Zu Signal einladen
- Heben Sie Ihre Kommunikation mit %1$s auf die nächste Stufe.
+ Hebe deine Kommunikation mit %1$s auf die nächste Stufe.
EINLADEN
- Laden Sie Ihre Freunde ein!
+ Lade deine Freunde ein!
Je mehr Freunde Signal nutzen, desto besser wird es.
TEILEN
SCHLIESSEN
- Sie
- Bildvorschau fehlgeschlagen
+ Du
+ Bildvorschau gescheitert
Nicht unterstützter Medieninhaltetyp
Speichern
+ Weiterleiten
+ Alle Bilder
Alle speichern
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 44ff23a487e..694d8627dd9 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -5,6 +5,8 @@
Όχι
ΔιαγÏαφή
ΠαÏακαλώ πεÏίμενε...
+
+ ÎÎο Μήνυμα
Αυτή τη στιγμή: %s
Δεν Îχεις οÏίσει συνθηματικό!
@@ -19,6 +21,7 @@
ΔιαγÏαφή
ΑπενεÏγοποίηση συνθηματικοÏ;
+ Αυτό θα ξεκλειδώσει το Signal και τις ειδοποιήσεις μηνυμάτων μόνιμα.
ΑπενεÏγοποίηση
ΑπεγγÏαφή
ΑπεγγÏαφή από τα μηνÏματα και τις κλήσεις Signal...
@@ -61,13 +64,6 @@
ΕισεÏχόμενη κλήση
- Το
-πεÏιεχόμενο του ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Ï„Î±Ï…Ï„Î¿Ï€Î¿Î¯Î·ÏƒÎ·Ï‚ για τον/την %1$s άλλαξε. Αυτό μποÏεί να σημαίνει
-πως κάποιος Ï€Ïοσπαθεί να υποκλÎψει τις επικοινωνίες σου ή πως απλά ο/η %2$s
-επανεγκατÎστησε το Signal και πλÎον Îχει νÎο κλειδί ταυτοποίησης.
- Î Ïοτείνεται να επιβεβαιώσεις
-αυτήν την επαφή.
-
Αποδοχή
Μήνυμα %s
@@ -77,7 +73,9 @@
Λήγει: %s
Δεν παÏαδόθηκε
Î Ïοβολή ασφαλών πολυμÎσων;
+ Αυτό το πολυμÎσω Îχει αποθηκευτεί σε μια κÏυπτογÏαφημÎνη βάση δεδομÎνων. Δυστυχώς, για να το δεις με Îνα εξωτεÏικό Ï€ÏόγÏαμμα Ï€ÏοϋποθÎτει να αποκÏυπτογÏαφηθεί Ï€ÏοσωÏινά και να γÏαφτεί στην μνήμη. Είσαι σίγουÏος/η πως θÎλεις να το κάνεις αυτό;
Σφάλμα, λάβαμε παλιό μήνυμα ανταλλαγής κλειδιών.
+ Ελήφθη μήνυμα ανταλλαγής κλειδιών. πάτα για να επεξεÏγαστεί.
Ο/Η %1$s Îφυγε απο την ομάδα.
Πάτησε για λεπτομÎÏειες
Πάτησε για απÏοστάτευτη εναλλακτική
@@ -85,6 +83,8 @@
ΧÏήση μη κÏυπτογÏαφημÎνου MMS ως εναλλακτική;
Αυτό το μήνυμα δεν θα κÏυπτογÏαφηθεί, επειδή ο παÏαλήπτης δεν είναι πλÎον χÏήστης του Signal.\n\nÎα σταλεί το μήνυμα μη κÏυπτογÏαφημÎνο;
Δεν μποÏεί να βÏεθεί κατάλληλη εφαÏμογή για το άνοιγμα Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… πολυμÎσου.
+ από %s
+ Ï€Ïος %s
ΕπαναφοÏά ασφαλοÏÏ‚ συνεδÏίας;
Αυτό ίσως βοηθήσει αν Îχεις Ï€Ïόβλημα με την κÏυπτογÏάφηση σε αυτή την συζήτηση. Τα μηνÏματα δεν θα σβηστοÏν.
@@ -122,13 +122,14 @@
Τα MMS δεν υποστηÏίζονται
Αυτό το μήνυμα δεν μποÏεί να αποσταλεί δεδομÎνου ότι φοÏÎας σου δεν υποστηÏίζει MMS.
ΠαÏακαλώ επιλÎξτε μια επαφή
- ΞεμπλοκάÏισμα;
- Είσαι σίγουÏος/η πως θες να ξεμπλοκάÏεις αυτή την επαφή;
+ ΞεμπλοκάÏισμα αυτής της επαφής;
+ Θα μποÏείς και πάλι να λαμβάνεις μηνÏματα και κλήσεις από αυτή την επαφή.
ΞεμπλοκάÏισμα
Το συννημÎνο υπεÏβαίνει τα ÏŒÏια μεγÎους για το είδος μηνÏματος που στÎλνεις.
ΚάμεÏα μη διαθÎσιμη
Η ηχογÏάφηση απÎτυχε!
Σφάλμα κατά την αποστολή μηνÏματος φωνής...
+ Δεν υπάÏχει διαθÎσιμη εφαÏμογή στην συσκευή σου που να μποÏεί να διαχειÏιστεί αυτό τον σÏνδεσμο.
Στοιχεία μηνÏματος
ΜÎσο μεταφοÏάς: %1$s
@@ -146,8 +147,25 @@
- Αυτό θα διαγÏάψει οÏιστικά όλα τα %1$d επιλεγμÎνα μηνÏματα.
Îα αποθηκευτεί στην μνήμη;
- Επιτυχία!
+
+ - ΑποθηκεÏοντας αυτό το πολυμÎσο στην μνήμη θα επιτÏÎψει σε άλλες εφαÏμογÎÏ‚ στην συσκευή σου να Îχουν Ï€Ïόσβαση σε αυτό. \n\nΣυνÎχεια;
+ - ΑποθηκεÏοντας τα %1$d πολυμÎσα στην μνήμη θα επιτÏÎψει σε άλλες εφαÏμογÎÏ‚ στην συσκευή σου να Îχουν Ï€Ïόσβαση σε αυτά. \n\nΣυνÎχεια;
+
+
+ - Σφάλμα κατά την αποθήκευση του συνημμÎνου στην μνήμη!
+ - Σφάλμα κατά την αποθήκευση των συνημμÎνων στην μνήμη!
+
+ Το αÏχείο αποθηκεÏτηκε επιτυχώς.
ΑδÏνατη η εγγÏαφή στην μνήμη!
+
+ - Το συνημμÎνο αποθηκεÏεται
+ - %1$d συνημμÎνα αποθηκεÏονται
+
+
+ - Το συνημμÎνο αποθηκεÏεται στην μνήμη...
+ - %1$d συνημμÎνα αποθηκεÏονται στην μνήμη...
+
+ Τα συνημμÎνα συλλÎγονται...
Εν αναμονή...
ΔεδομÎνα (Signal)
MMS
@@ -156,6 +174,7 @@
ΔιαγÏαφή μηνυμάτων...
Αναζήτηση...
+ Δεν υπάÏχει εγκατεστημÎνος browser στην συσκευή σου.
- ΔιαγÏαφή επιλεγμÎνης συζήτησης;
@@ -185,7 +204,6 @@
ΧÏησιμοποιείται το Ï€ÏοκαθοÏισμÎνο: %s
ΚανÎνα
- ΤώÏα
%d λεπ
ΑποσÏνδεση του \'%s\';
@@ -217,10 +235,14 @@
Εξαγωγή των αποκÏυπτογÏαφημÎνων δεδομÎνων στον αποθηκευτικό χώÏο...
Σφάλμα, δεν μπόÏεσε να γίνει εγγÏαφή στον αποθηκευτικό χώÏο.
Σφάλμα κατά την εγγÏαφή στον αποθηκευτικό χώÏο.
- Επιτυχία!
+ Επιτυχία εξαγωγής.
Μόνιμη αποτυχία επικοινωνίας του Signal!
Το Signal δεν μπόÏεσε να εγγÏαφτεί στις ΥπηÏεσίες Google Play. Τα μηνÏματα και οι κλήσεις του Signal Îχουν απενεÏγοποιηθεί. ΠαÏακαλώ Ï€Ïοσπάθησε να επανεγγÏαφτείς στις Ρυθμίσεις > Î ÏοχωÏημÎνες Ρυθμίσεις.
+
+
+ GIFs
+ Αυτοκόλλητα
ÎÎα ομάδα
ΕνημÎÏωση ομάδας
@@ -274,15 +296,15 @@
Πάτα και κÏάτα πατημÎνο για να ηχογÏαφήσεις Îνα μήνυμα φωνής, άφησε το κουμπί για αποστολή
ΔιαμοιÏασμός
- Αποστολή SMS
+ Επιλογή επαφών
ΑκÏÏωση
Αποστολή...
ΚαÏδιά
Οι Ï€Ïοσκλήσεις στάλθηκαν!
Î Ïόσκληση στο Signal
-
- - ΑΠΟΣΤΟΛΗ ΣΕ 1 ΦΙΛΟ
- - ΑΠΟΣΤΟΛΗ ΣΕ %d ΦΙΛΟΥΣ
+
+ - ΑΠΟΣΤΟΛΗ SMS ΣΕ 1 ΦΙΛΗ/Ο
+ - ΑΠΟΣΤΟΛΗ SMS ΣΕ %d ΦΙΛΕΣ/ΟΥΣ
- Αποστολή 1 Ï€Ïόσκλησης μÎσω SMS;
@@ -297,7 +319,6 @@
Το Signal χÏειάζεται την εφαÏμογή Barcode Scanner για κωδικοÏÏ‚ QR
Αποτυχία αποστολής
- ÎÎα ταυτότητα
Σφάλμα κατά την αποθήκευση MMS!
Σφάλμα κατά στη σÏνδεση με τον πάÏοχο MMS...
@@ -345,6 +366,10 @@
Συγγνώμη, αυτός δεν είναι Îνας ÎγκυÏος κωδικός QR για σÏνδεση συσκευών.
ΣÏνδεση μιας συσκευής Signal;
Φαίνεται πως Ï€Ïοσπαθείς να συνδÎσεις μια συσκευή Signal χÏησιμοποιώντας Îνα Ï„Ïίτο Ï€ÏόγÏαμμα σάÏωσης. Για την Ï€Ïοστασία σου, παÏακαλώ ξανασκάνναÏε τον κωδικό μÎσα από το Signal.
+
+ Μηνήματα που εξαφανίζονται
+ Τα μηνÏματά σου δεν θα λήξουν.
+ ΜηνÏματα που στÎλνονται και λαμβάνονται σε αυτή την συζήτηση θα εξαφανίζονται %s Î±Ï†Î¿Ï Ï„Î± δεις.
Εισαγωγή συνθηματικό
Εικονίδιο Signal
@@ -358,12 +383,13 @@
Βαθμολόγηση τώÏα!
Οχι ευχαÏιστώ
ΑÏγότεÏα
+ Ουπς, δεν φαίνεται να Îχεις εγκατεστημÎνη την εφαÏμογή Play Store στην συσκευή σου.
ΜπλοκάÏισμα αυτής της επαφής;
- Δεν θα λαμβάνεις πλÎον μηνÏματα ή κλήσεις από αυτόν τον χÏήστη.
+ Δεν θα λαμβάνεις μηνÏματα και κλήσεις από αυτή την επαφή πια.
ΜπλοκάÏισμα
ΞεμπλοκάÏισμα αυτής της επαφής;
- Είσαι σίγουÏος/η πως θες να ξεμπλοκάÏεις αυτή την επαφή;
+ Θα μποÏείς και πάλι να λαμβάνεις μηνÏματα και κλήσεις από αυτή την επαφή.
ΞεμπλοκάÏισμα
ΕνεÏγοποιημÎνο
ΑπενεÏγοποιημÎνο
@@ -389,6 +415,7 @@
Ο αÏιθμός που κάλεσες δεν υποστηÏίζει ασφαλή φωνή!
Εντάξει
+ ΣÏνδεση με Signal
ΕπιλÎξτε χώÏα
Î ÏÎπει να καθοÏίσεις τον
κώδικα της χώÏας σου
@@ -442,8 +469,8 @@
Ελήφθη μήνυμα ανταλλαγής κλειδιών για άκυÏη Îκδοση του Ï€Ïωτόκολλου.
- Λήφθηκε ενημεÏωμÎνη αλλά άγνωστη πληÏοφοÏία ταυτότητας. Πάτησε για επιβεβαίωση ταυτότητας.
- ΕπαναφοÏά ασφαλοÏÏ‚ συνεδÏίας.
+ Επανεκκίνησες την ασφαλή συνεδÏία.
+ Ο/Η %s επανεκκίνησε την ασφαλή συνεδÏία.
Διπλότυπο μήνυμα.
Έχεις φÏγει από την ομάδα...
@@ -454,22 +481,9 @@
Αναπάντητη κλήση
Μήνυμα πολυμÎσων
Ο/Η %s είναι στο Signal, Ï€ÎÏ‚ Îνα γεια!
+ Ο χÏόνος εξαφάνισης μηνυμάτων Ïυθμίστηκε σε %s
- Δεν Îχεις κλειδί ταυτότητας.
- Ο παÏαλήπτης δεν Îχει κλειδί ταυτότητας.
- Ο παÏαλήπτης δεν Îχει κλειδί ταυτότητας!
- ΠΡΟΣΟΧΗ, το σαÏωμÎνο κλειδί ΔΕΠταιÏιάζει! Έλεγξε Ï€Ïοσεκτικά το αποτÏπωμα.
- ΔΕΠεπιβεβαιώθηκε!
- Το κλειδί του/της είναι σωστό. Î ÏÎπει επίσης και αυτός/η να επιβεβαιώσει το κλειδί σου.
- Επιβεβαιώθηκε!
- Δεν Îχεις κλειδί ταυτότητας!
-
- Δεν Îχεις κλειδί ταυτότητας.
- ΠΡΟΣΟΧΗ, το σαÏωμÎνο κλειδί ΔΕΠταιÏιάζει!
- ΔΕΠεπιβεβαιώθηκε!
- Το σαÏωμÎνο κλειδί ταιÏιάζει!
- Επιβεβαιώθηκε!
- Το αποτÏπωμα της ταυτότητάς σου
+ Φαινεται πως δεν Îχεις κάποια εφαÏμογή στην οποία μποÏείς να μοιÏαστείς.
Εκκίνηση παÏά το υπάÏχον αίτημα;
Αποστολή
@@ -497,6 +511,8 @@
Εισαγωγή σε εξÎλιξη
Εισαγωγή μηνυμάτων κειμÎνου
+ Η εισαγωγή ολοκληÏώθηκε
+ Η εισαγωγή της βάσης δεδομÎνων του συστήματος ολοκληÏώθηκε.
Πάτησε για άνοιγμα.
Πάτησε για άνοιγμα, ή πάτησε την κλειδαÏιά για κλείσιμο.
@@ -551,13 +567,13 @@
Αποστολή μηνÏματος Signal
Αποστολή μη ασφαλοÏÏ‚ SMS
Αποστολή μη ασφαλοÏÏ‚ MMS
+ Από τον/την %1$s
Αποστολή
ΑφαίÏεση
Συζήτηση με τον/την %1$s
ΣÏνθεση μηνÏματος
Εναλλαγή πληκτÏολογίου emoji
ΜικÏογÏαφία συνημμÎνου
- Εναλλαγή συÏταÏÎ¹Î¿Ï ÏƒÏ…Î½Î½Î·Î¼Îνων
ΣΥΡΕ ΓΙΑ ΑΚΥΡΩΣΗ
@@ -574,6 +590,7 @@
Λήψη
ΦωτογÏαφία επαφής
Γίνεται λήψη
+
ΛειτουÏγία μαζικής επιλογής
%s επιλÎχτηκαν
@@ -589,10 +606,42 @@
ΣÏνδεση νÎας συσκευής
συνÎχεια
+
+ ΑπενεÏγοποίηση
+
+ - 1 δευτεÏόλεπτο
+ - %d δευτεÏόλεπτα
+
+ %dδ
+
+ - 1 λεπτό
+ - %d λεπτά
+
+ %dλ
+
+ - 1 ÏŽÏα
+ - %d ÏŽÏες
+
+ %dÏŽÏ
+
+ - 1 ημÎÏα
+ - %d ημÎÏες
+
+ %dημ
+
+ - 1 εβδομάδα
+ - %d εβδομάδες
+
+ %dεβ
+
+ Αναζήτηση GIFs και αυτοκολλήτων
+
+ Αποτυχία ανάγνωσης αÏχείου συμβάντων για τη συσκευή σου. ΜποÏείς να χÏησιμοποιήσεις το ADB για να πάÏεις Îνα αÏχείο συμβάντων αποσφαλμάτωσης.
ΕυχαÏιστοÏμε για τη βοήθειά σου!
Αποστολή
- Αποστολή των αÏχείων καταγÏαφής στο gist…
+ Αποστολή των αÏχείων συμβάντων στο gist…
+ Δεν υπάÏχει εγκατεστημÎνος φυλλομετÏητής
ΘÎλεις να εισάγεις τα υπάÏχοντα μηνÏματά σου στη κÏυπτογÏαφημÎνη βάση δεδομÎνων του Signal;
Η Ï€ÏοκαθοÏισμÎνη βάση δεδομÎνων του συστήματος δε θα αλλαχθεί καθόλου.
@@ -635,6 +684,7 @@
Ξεκλείδωμα
Το Signal χÏειάζεται τις Ïυθμίσεις MMS για να στείλει μηνÏματα πολυμÎσων και ομαδικών συζητήσεων μÎσω του παÏόχου σου. Η συσκευή σου δεν παÏÎχει αυτÎÏ‚ τις πληÏοφοÏίες, το οποίο μεÏικÎÏ‚ φοÏÎÏ‚ γίνεται σε κλειδωμÎνες συσκευÎÏ‚ ή λόγω άλλων πεÏιοÏιστικών Ïυθμίσεων.
+ Για να στείλεις μηνÏματα πολυμÎσων, πάτησε \'ΟΚ\' και συμπλήÏωσε τις Ïυθμίσεις. Θα βÏείς τις σωστÎÏ‚ Ïυθμίσεις MMS για τον πάÏοχό σου ψάχνοντας στο ίντεÏνετ για \"το όνομα του παÏόχου σου\" + APN. ΑυτÎÏ‚ οι Ïυθμίσεις γίνονται μόνο μια φοÏά.
ΜΠΛΟΚΑΡΙΣΜΕÎΟΣ/Η
@@ -645,7 +695,6 @@
ΜπλοκάÏισμα
ΧÏώμα
ΧÏώμα επαφής
- Επιβεβαίωση ταυτότητας
Κλήση Signal
τεÏματισμός κλήσης
@@ -723,14 +772,15 @@
Έλεγχος
Εισαγωγή ονόματος ή αÏιθμοÏ
- Î Ïοσθήκη μÎλους
-
- Η ταυτότητά του/της (αυτός/η διαβάζει):
- Η ταυτότητά σου (ÎµÏƒÏ Î´Î¹Î±Î²Î¬Î¶ÎµÎ¹Ï‚):
+ Î Ïοσθήκη μελών
+
+ Πάτα για σκανάÏισμα
+
ΟÏισμÎνα ζητήματα χÏειάζονται την Ï€Ïοσοχή σου.
Στάλθηκε στις
Ελήφθη στις
+ Εξαφανίζεται
ΜÎσω
Î Ïος:
Από:
@@ -740,19 +790,17 @@
Εισαγωγή συνθηματικοÏ
Επιλογή επαφών
Το Signal εντοπίστηκε
- Δημόσιο κλειδί ταυτότητας
Αλλαγή συνθηματικοÏ
- Επιβεβαίωση ταυτότητας
+ Αποστολή αÏχείου συμβάντων αποσφαλμάτωσης
Î Ïοεπισκόπιση
Όλες οι εικόνες
Όλες οι εικόνες με τον/την %1$s
ΛεπτομÎÏειες μηνÏματος
- ΔιαχείÏιση συνδεδεμÎνων συσκευών
+ ΣυνδεμÎνες συσκευÎÏ‚
Î Ïόσκληση φίλων
ΑÏχειοθετημÎνες συζητήσεις
Εισαγωγή / εξαγωγή
- Το κλειδί ταυτότητάς σου
ΧÏήση Ï€ÏοκαθοÏισμÎνου
ΧÏήση Ï€ÏοσαÏμοσμÎνου
Σίγαση για 1 ÏŽÏα
@@ -856,7 +904,7 @@
ÎŒÏιο μεγÎθους συζήτησης
ΚοÏÏεμα όλων των συζητήσεων τώÏα
ΣκανάÏισμα όλων των συζητήσεων και επιβολή του οÏίου μήκους των συζητήσεων
- ΣυσκευÎÏ‚
+ ΣυνδεμÎνες συσκευÎÏ‚
Φως
Σκοτάδι
Εμφάνιση
@@ -865,10 +913,12 @@
Γλώσσα
ΜηνÏματα και κλήσεις του Signal
ΔωÏεάν Ï€Ïοσωπικά μηνÏματα και κλήσεις Ï€Ïος τους χÏήστες του Signal
- Αποστολή αÏχείων καταγÏαφής αποσφαλμάτωσης
+ Αποστολή αÏχείου συμβάντων αποσφαλμάτωσης
ΛειτουÏγία συμβατότητας \"WiFi Calling\'
ΕνεÏγοποίηση αν η συσκευή σου χÏησιμοποιεί παÏάδοση SMS/MMS μÎσω WiFi (ενεÏγοποίηση μόνο αν το \'WiFi Calling\' είναι ενεÏγοποιημÎνο στη συσκευή σου)
ΜπλοκαÏισμÎνες επαφÎÏ‚
+ ΈγκÏιση αÏιθμών ασφαλείας
+ Îα απαιτείται ÎγκÏιση των νÎων αÏιθμών ασφαλείας όταν αλλάζουν
Î Ïοβολή στις ειδοποιήσεις
Όταν χÏησιμοποιοÏνται δεδομÎνα
Όταν χÏησιμοποιείται WiFi
@@ -902,6 +952,10 @@
Αποστολή ξανά
Αποθήκευση συνημμÎνου
+
+ Μηνήματα που εξαφανίζονται
+
+ ΜηνÏματα που λήγουν
Î Ïόσκληση
@@ -920,8 +974,6 @@
Îεα Συζήτηση
- Ασφάλεια
- Επιβεβαίωση ταυτότητας
ΕπαναφοÏά ασφαλοÏÏ‚ συνεδÏίας
Αποσίγαση
@@ -945,6 +997,8 @@
Αποστολή σε Όλους
ΣÏγκÏιση
+ Î Ïοβολή του ÎºÏ‰Î´Î¹ÎºÎ¿Ï QR σου
+ ΣκανάÏισμα ÎºÏ‰Î´Î¹ÎºÎ¿Ï QR επαφής
ÎÎο Μήνυμα
ÎÎα ομάδα
@@ -953,6 +1007,7 @@
Σημείωση όλων ως αναγνωσμÎνα
Î Ïόσκληση φίλων
Βοήθεια
+
Η Îκδοση του Signal σου είναι παÏωχημÎνη
@@ -967,6 +1022,7 @@
Πάτα για να κάνεις το Signal την Ï€ÏοκαθοÏισμÎνη εφαÏμογή για τα SMS.
ΟΡΙΣΜΟΣ
Εισαγωγή SMS συστήματος
+ Πάτα για να αντιγÏάψεις τα μηνÏματα SMS του ÎºÎ¹Î½Î·Ï„Î¿Ï ÏƒÎ¿Ï… στην κÏυπτογÏαφημÎνη βάση δεδομÎνων του Signal.
ΕΙΣΑΓΩΓΗ
ΕνεÏγοποίηση των μηνημάτων και κλήσεων Signal
Αναβάθμισε την εμπειÏία επικοινωνίας σου.
@@ -985,6 +1041,7 @@
Αποθήκευση
+ Αποθήκευση όλων
Î Ïοεπισκόπηση εικόνας
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 838a4a0829f..d049b9783a0 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -5,6 +5,8 @@
No
Borrar
Por favor, espere...
+
+ Nuevo mensaje
Actualmente: %s
¡TodavÃa no ha elegido una clave de acceso!
@@ -62,13 +64,8 @@
Llamada entrante
- El
-material de la clave identificadora para %1$s ha cambiado. Esto podrÃa bien significar que alguien está intentando
-interceptar su comunicación, o que %2$s simplemente reinstaló Signal y ahora tiene una nueva
-clave identificadora.
- Puede que dese verificar
-este contacto.
-
+ Su número de seguridad con %1$s ha cambiado. Esto podrÃa significar que o bien alguien está tratando de interceptar su comunicación, o que %2$s simplemente ha reinstalado Signal.
+ Puede que desee verificar su número de seguridad con este contacto.
Aceptar
Mensaje %s
@@ -127,13 +124,14 @@ este contacto.
MMS no admitidos
Este mensaje no se puede enviar debido a que su proveedor no admite MMS.
Por favor, elija un contacto
- ¿Desbloquear?
- ¿Está seguro de que desea desbloquear este contacto?
+ ¿Desbloquear este contacto?
+ Podrá volver a recibir mensajes y llamadas de este contacto.
Desbloquear
El adjunto excede los lÃmites de tamaño para el tipo de mensaje que está enviando.
Cámara no disponible
¡No se ha podido grabar el audio!
Error al enviar mensaje de voz...
+ No hay ninguna aplicación disponible para usar este enlace en su dispositivo.
Detalles del mensaje
Transporte: %1$s
@@ -151,8 +149,25 @@ Recibido:%4$s
- Esto eliminará de forma permanente los %1$d mensajes seleccionados.
¿Guardar en el almacenamiento?
- ¡Completado!
+
+ - Guardar este audiovisual en el almacenamiento permitirá que cualquier otra aplicación en su dispositivo acceda a él.\n\n¿Continuar?
+ - Guardar todos los %1$d audiovisuales en el almacenamiento permitirá que cualquier otra aplicación en su dispositivo acceda a ellos.\n\n¿Continuar?
+
+
+ - ¡Error al guardar adjunto en el almacenamiento!
+ - ¡Error al guardar adjuntos en el almacenamiento!
+
+ Archivo guardado con éxito.
¡No se pudo escribir en el almacenamiento!
+
+ - Guardando adjunto
+ - Guardando %1$d adjuntos
+
+
+ - Guardando adjunto en el almacenamiento...
+ - Guardando %1$d adjuntos en el almacenamiento...
+
+ Recopilando adjuntos...
Pendiente...
Datos (Signal)
MMS
@@ -161,6 +176,7 @@ Recibido:%4$s
Borrando mensajes...
Buscar...
+ No hay ningún navegador instalado en su dispositivo
- ¿Eliminar la conversación seleccionada?
@@ -190,7 +206,7 @@ Recibido:%4$s
Usando predeterminado: %s
Ninguno
- Ahora
+ Ahora mismo
%d mins
¿Desvincular \'%s\'?
@@ -222,10 +238,15 @@ Recibido:%4$s
Exportando texto plano a almacenamiento...
Error, imposible escribir en almacenamiento.
Error al escribir en almacenamiento.
- ¡Éxito!
+ Exportación satisfactoria.
¡Fallo permanente de comunicación de Signal!
Signal fué incapaz de registrarse con Google Play Services. Los mensajes y llamadas de Signal han sido desactivados, por favor, intenta registrarte otra vez en Configuración > Avanzado.
+
+ Error al descargar GIF a resolución completa...
+
+ GIFs
+ Pegatinas (stickers)
Nuevo grupo
Actualizar grupo
@@ -278,15 +299,15 @@ importarla de nuevo dará como resultado mensajes duplicados.
Pulse y mantenga pulsado para grabar un mensaje de voz, suelte para enviar
Compartir
- Enviar SMS
+ Escoja contactos
Cancelar
Enviando...
Corazón
¡Invitaciones enviadas!
Invitar a Signal
-
- - ENVIAR A 1 AMIGO
- - ENVIAR A %d AMIGOS
+
+ - ENVIAR SMS A 1 AMIGO
+ - ENVIAR SMS A %d AMIGOS
- ¿Enviar 1 invitación SMS?
@@ -301,7 +322,7 @@ importarla de nuevo dará como resultado mensajes duplicados.
Signal necesita Barcode Scanner para códigos QR.
Fallo al enviar
- Nueva identidad
+ Nuevo número de seguridad
¡Error guardando MMS!
Error conectando al proveedor MMS...
@@ -326,6 +347,9 @@ importarla de nuevo dará como resultado mensajes duplicados.
Llamó a %s
Llamada perdida de %s
¡%s esta en Signal, salúdele!
+ Ha establecido la hora desaparición del mensaje a las %1$s.
+ %1$s estableció la hora de desaparición del mensaje a las %2$s.
+ Su número de seguridad con %s ha cambiado.
¡Las claves de acceso no coinciden!
¡Clave de acceso antigua incorrecta!
@@ -350,6 +374,10 @@ importarla de nuevo dará como resultado mensajes duplicados.
Lo sentimos , este código QR no es ​​válido .
¿Enlazar un dispositivo Signal?
Parece que estás intentando enlazar un dispositivo Signal usando un escáner de terceros. Para tu protección, por favor, escanea el código otra vez desde Signal.
+
+ Mensajes desvanecentes
+ Sus mensajes no caducarán.
+ Los mensajes enviados y recibidos en esta conversación desaparecerán %s después de que se hayan enviado.
Introduzca clave de acceso
Icono de Signal
@@ -363,12 +391,13 @@ importarla de nuevo dará como resultado mensajes duplicados.
¡Evaluar ahora!
No, gracias
Más tarde
+ Oops, la aplicación de la Play Store no parece estar instalada en su dispositivo.
¿Bloquear este contacto?
- No volverá a recibir mensajes ni llamadas de este usuario.
+ Ya no recibirá mensajes y llamadas de este contacto.
Bloquear
¿Desbloquear este contacto?
- ¿Está seguro de que desea desbloquear este contacto?
+ Podrá volver a recibir mensajes y llamadas de este contacto.
Desbloquear
Habilitado
Deshabilitado
@@ -456,9 +485,9 @@ de intercambio de claves!
Se recibió un mensaje de intercambio de claves para una versión no válida del protocolo.
- Se recibió un mensaje con una clave de identidad desconocida. Pulse para procesar y mostrar.
- Recibà actualizado pero con información de identidad desconocida. Pulse para validar identidad.
- Reinicio de sesión segura.
+ Ha recibido un mensaje con un nuevo número de seguridad. Pulse para procesarlo y mostrarlo.
+ Reiniciaste la sesión segura.
+ %s reinició la sesión segura.
Duplicar mensaje.
Ha dejado el grupo...
@@ -469,22 +498,16 @@ Se recibió un mensaje de intercambio de claves para una versión no válida del
Llamada perdida
Mensaje multimedia
¡%s está en Signal, salúdele!
+ El plazo del mensaje desvanecente se estableció a %s
+ Su número de seguridad con %s ha cambiado.
- No tiene ninguna clave de identidad.
- El destinatario no tiene clave de identidad.
- ¡El destinatario no tiene clave de identidad!
- ADVERTENCIA: la clave escaneada NO coincide. Por favor, verifique el texto de la huella digital cuidadosamente.
- ¡NO verificado!
- La clave de ellos es correcta. También es necesario verificar su clave con ellos.
- ¡Verificado!
- ¡No tiene ninguna clave de identidad!
-
- No tiene ninguna clave de identidad.
- ADVERTENCIA: ¡las claves escaneadas NO coinciden!
- ¡NO verificada!
- ¡La clave escaneada coincide!
- ¡Verificado!
- Su huella digital
+ Su contacto está ejecutando una versión antigua de Signal. Por favor, pÃdale que actualice antes de que verifique el número de seguridad de usted.
+ Su contacto está ejecutando una versión de Signal con un formato de código QR incompatible. Por favor, actualice para comparar.
+ El código QR escaneado no es un código de verificación de número de seguridad con un formato correcto. Por favor, pruebe a escanearlo de nuevo.
+ Compartir número de seguridad vÃa...
+ Nuestro número de seguridad de Signal:
+ Parece que no tiene ninguna aplicación con qué compartir.
+ No se encontró número de seguridad para comparar en el portapapeles
¿Iniciar a pesar de la solicitud existente?
Enviar
@@ -512,6 +535,8 @@ Se recibió un mensaje de intercambio de claves para una versión no válida del
Importación en progreso
Importando mensajes de texto
+ Importación completada
+ La importación de la base de datos al sistema está completa.
Pulse para abrir.
Pulse para abrir, o pulse el candado para cerrar.
@@ -538,11 +563,20 @@ Se recibió un mensaje de intercambio de claves para una versión no válida del
Nuevo mensaje
Imagen
+ Imagen
Audio
+ Audio
VÃdeo
+ VÃdeo
Contacto
+ Contacto
Cámara
+ Cámara
Ubicación
+ Ubicación
+ GIF
+ Gif
+ Accionar el panel de adjuntos
Clave de acceso antigua
Nueva clave de acceso
@@ -566,13 +600,16 @@ Se recibió un mensaje de intercambio de claves para una versión no válida del
Enviar mensaje de Signal
Enviar SMS no seguro
Enviar MMS no seguro
+ De %1$s
Enviar
Eliminar
Conversación con %1$s
Composición de mensaje
Cambiar a teclado emoji
Miniatura del adjunto
- Accionar bandeja desplegable de adjunto
+ Accionar panel rápido de adjuntos de cámara
+ Grabar y enviar adjunto de audio
+ Habilitar Signal para SMS
DESLICE PARA CANCELAR
@@ -589,6 +626,10 @@ Se recibió un mensaje de intercambio de claves para una versión no válida del
Descarga
Foto de contacto
Descargando
+
+ Reproducir
+ Pausar
+ Descargar
Modo de selección por lotes
%s seleccionado
@@ -604,11 +645,43 @@ Se recibió un mensaje de intercambio de claves para una versión no válida del
Vincular nuevo dispositivo
continuar
+
+ Inactivo
+
+ - 1 segundo
+ - %d segundos
+
+ %d s
+
+ - 1 minuto
+ - %d minutos
+
+ %d m
+
+ - 1 hora
+ - %d horas
+
+ %d h
+
+ - 1 dÃa
+ - %d dÃas
+
+ %d d
+
+ - 1 semana
+ - %d semanas
+
+ %d s
+
+ Buscar GIFs y pegatinas (stickers)
+
+ No se encontró nada
No se pudo leer el registro (log) en su dispositivo. Aún puede usar ADB para obtener un registro de depuración en su lugar.
¡Gracias por su ayuda!
Enviando
Publicando registros de actividad en gist...
+ No hay ningún navegador instalado
¿Desea importar sus mensajes de texto existentes a la base de datos cifrada de Signal?
La base de datos de sistema por defecto no será modificada o alterada de ningún modo.
@@ -662,7 +735,7 @@ Se recibió un mensaje de intercambio de claves para una versión no válida del
Bloquear
Color
Color para este contacto
- Verificar identidad
+ Verificar número de seguridad
Llamada de Signal
finalizar llamada
@@ -744,14 +817,17 @@ por SMS.
Verificar
Introduzca un nombre o número
- Añadir miembro
-
- Identidad de ellos (ellos leen):
- Su identidad (usted lee):
+ Añadir miembros
+
+ Conozca más acerca de la verificación de números de seguridad]]>
+ Pulse para escanear
+
+ Compartir número de seguridad
Algunos asuntos necesitan su atención
Enviado
Recibido
+ Desaparece
VÃa
Para:
Desde:
@@ -761,20 +837,18 @@ por SMS.
Introduzca clave de acceso
Seleccionar contactos
Signal detectado
- Clave pública de identidad
Cambiar clave de acceso
- Verificar identidad
+ Verificar número de seguridad
Remitir registro (log) de depuración
Previsualizar multimedia
Todas las imágenes
Todas la imágenes con %1$s
Detalles del mensaje
- Administrar dispositivos vinculados
+ Dispositivos enlazados
Invitar amigos
Conversaciones archivadas
Importar/exportar
- Su clave de identidad
Usar el predeterminado
Usar el personalizado
Silenciar durante 1 hora
@@ -878,7 +952,7 @@ por SMS.
LÃmite de longitud de la conversación
Recortar todas las conversaciones ahora
Escanear todas las conversaciones e imponer los lÃmites de longitud en las conversaciones
- Dispositivos
+ Dispositivos enlazados
Claro
Oscuro
Apariencia
@@ -891,6 +965,8 @@ por SMS.
Modo de compatibilidad \'Llamada por WiFi\'
HabilÃtelo si su dispositivo utiliza entrega de SMS/MMS vÃa WiFi (actÃvelo sólo cuando \'Llamada por WiFi\' esté activada en su dispositivo)
Contactos bloqueados
+ Aprobación de números de seguridad
+ Requerir aprobación de nuevos números de seguridad cuando cambien
Mostrar en notificaciones
Al usar datos móviles
Al usar Wi-Fi
@@ -924,6 +1000,10 @@ por SMS.
Reenviar mensaje
Guardar archivo adjunto
+
+ Mensajes desvanecentes
+
+ Los mensajes caducan
Invitar
@@ -942,8 +1022,6 @@ por SMS.
Nueva conversación
- Seguridad
- Verificar identidad
Reiniciar sesión segura
Quitar silenciado
@@ -967,6 +1045,8 @@ por SMS.
Transmisión
Comparar
+ Mostrar su código QR
+ Escanear códigos QR de los contactos
Nuevo mensaje
Nuevo grupo
@@ -975,6 +1055,9 @@ por SMS.
Marcar todos como leÃdos
Invitar amigos
Ayuda
+
+ Copiar al portapapeles
+ Comparar con el portapapeles
Su versión de Signal está anticuada
@@ -1007,7 +1090,10 @@ por SMS.
Formato de contenido no compatible
Guardar
+ Avanzar
+ Todas las imágenes
+ Guardar todo
Previsualización de imagen
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
new file mode 100644
index 00000000000..65452e30304
--- /dev/null
+++ b/res/values-eu/strings.xml
@@ -0,0 +1,1065 @@
+
+
+ Signal
+ Bai
+ Ez
+ Ezabatu
+ Itxaron, mesedez...
+
+ Mezu berria
+
+ Une honetan: %s
+ Oraindik ez duzu pasahitza ezarri!
+
+ - Mezu 1 solasaldiko
+ - %d mezu solasaldiko
+
+ Mezu zahar guztiak ezabatu orain?
+
+ - Solasaldi hari guztiak berehala azkenengo mezura murriztuko dira
+ - Solasaldi hari guztiak azkenengo %d mezuetara murriztuko dira berehala.
+
+ Ezabatu
+ Desgaitu pasahitza?
+ Signal eta mezu jakinarazpenak iraunkorki desbloketuako dira.
+ Desgaitu
+ Deserregistratzen
+ Deserregistratzen Signal mezu eta deietatik...
+ Desgaitu Signal mezu eta deiak?
+ Desgaitu Signal mezu eta deiak zerbitzaritik deserregistratuz. Zure telefono zenbakia bererregistratu beharko duzu mezu eta deiak berriro erabili ahal izateko.
+ Errorea zerbitzariarekin konektatzerakoan!
+ SMS Gaituta
+ Ukitu zure SMS aplikazio lehenetsia aldatzeko
+ SMS Desgaituta
+ Signal zure SMS aplikazio lehenetsia izan dadin, ukitu.
+ piztuta
+ Aktibatuta
+ desaktibatuta
+ Desaktibatuta
+ SMS %1$s, MMS %2$s
+ Pasahitza %1$s, Pantaila-segurtasuna %2$s
+ Gaia %1$s, Hizkuntza %2$s
+
+
+ - minutu 1
+ - %d minutu
+
+
+ (irudia)
+ (audioa)
+ (bideoa)
+ (kokalekua)
+
+ Ez da euskarria aukeratzeko aplikaziorik aurkitu.
+
+ Kamera
+ Irudia
+ Bideoa
+ Audioa
+ Kontaktuaren informazioa
+
+ Errorea audioa erreproduzitzean!
+
+ Blokeatutako kontaktuak
+
+ Sarrerako dei
+
+ Onartu
+
+ Mezu %s
+ Signal Dei %s
+
+ Mezuaren tamaina: %d KB
+ Iraingutuko da: %s
+ Ez banatua
+ Euskarri segurua ikusi?
+ Baliabide hau datu-base zifratuan gordeta dago. Tamalez, kanpoko eduki-ikustaile batekin ikusteko, beharrezkoa da datuak aldi baterako deszifratzea eta biltegian idaztea. Ziur zaude hau egin nahi duzula?
+ Errorea, jaso da iraungita dagoen datu-trukerako gakoaren mezua.
+ Jaso da gakoaren datu-trukatzearen mezua, tap egin prozesatzeko.
+ %1$s taldea utzi du
+ Tap egin xehetasunak ikusteko
+ Tap egin segurtasunik gabeko alternatibarako
+ Zifratu gabeko SMSaz baliatu?
+ Zifratu gabeko MMSaz baliatu?
+ Mezu hau ez da zifratuko jadanik hartzailea ez delako Signal erabiltzailea.\n\nSegurtasunik gabeko mezua bidali?
+ Ez da euskarri hau irekitzeko gai den aplikaziorik aurkitu.
+ %s-(e)tik
+ %s-(e)ra
+
+ Saio segurua berrabiarazi?
+ Agian honek lagunduko du zifraketa arazorik baldin baduzu. Zure mezuak mantenduko dira.
+ Berrabiarazi
+ Solasaldia ezabatu?
+ Honek solasaldi honen mezu guztiak ezabatuko ditu.
+ Eranskina gehitu
+ Kontaktuaren informazioa aukeratu
+ Mezua idatzi
+ Barkatu, zure eranskina ezartzean errore bat izan da
+ Hautatutako GIF-a handiegia zen!
+ Barkatu, aukeratutako bideoak amainaren mugak gainditzen ditu t(%1$skB).
+ Barkatu, aukeratutako audioak mezuaren tamaina mugak gainditzen ditu (%1$skB).
+ Hartzailea SMS edo email baliogabea da!
+ Mezua hutsik dago!
+ Taldeko partaideak
+ Taldeko solasaldia
+ Izenik gabeko taldea
+
+ - Partaide 1
+ - %d partaide
+
+ Gordetako zirriborroa
+ Hartzaile baliogabea!
+ Deiak ez daude onartuta
+ Badirudi gailu honek ez duela onartzen telefono deiekin lotutako ekintzak.
+ Taldea utzi?
+ Ziur zaude talde hau utzi nahi izateaz?
+ SMS ez segurua
+ MMS ez segurua
+ Signal
+ Signalera aldatu dezagun %1$s
+ Erabili dezagun hau txatarako: %1$s
+ Errorea taldea uzterakoan...
+ MMS ez daude onartuta
+ Mezu hau ezin da bidali zure hornitzaileak MMS onartzen ez duelako.
+ Kontaktu bat aukeratu, mesedez
+ Desblokeatu kontaktu hau?
+ Berriro ahal izango duzu erabiltze honetatik mezu eta deiak jasotzea.
+ Desblokeatu
+ Eranskina handiegia da bidaltzen ari zaren mezu motarako.
+ Kamera ez dago eskuragarri
+ Ezgai audioa grabatzeko!
+ Errorea ahots-mezua bidaltzean...
+ Ez dago erabil daitekeen aplikaziorik lotura hau tratatzeko zure gailuan.
+
+ Mezuaren detaileak
+ Garraioa: %1$s\nBidalita/Jasota: %2$s
+ Bidaltzailea: %1$s\nGarraioa: %2$sIgorrita: %3$s\nJasota: %4$s
+
+ - Ezabatu aukeratutako mezua?
+ - Ezabatu aukeratutako mezuak?
+
+
+ - Honek aukeratutako mezua behin betiko ezabatuko du.
+ - Honek aukeratutako %1$d mezuak behin betiko ezabatuko ditu.
+
+ Biltegian gorde?
+
+ - Multimedia hau biltegian gordetzeak zure telefonoan dagoen beste edozein aplikazioa ahalbidetuko dio euskarrirako sarbidea.\n\nJarraitu?
+ - %1$d media guztiak biltegian gordetzeak zure telefonoan dagoen beste edozein aplikaziori baimena emango dio berauen sarbiderako.\n
+\nJarraitu?
+
+
+ - Errorea eranskina biltegian gordetzerakoan!
+ - Errorea eranskinak biltegian gordetzerakoan!
+
+ Fitxategia ondo gorde da.
+ Ezgai biltegian idazteko!
+
+ - Eranskina gordetzen
+ - Eraskinak (%1$d) gordetzen
+
+
+ - Eranskina biltegian gordetzen...
+ - Eraskinak (%1$d) biltegian gordetzen...
+
+ Eranskinak biltzen...
+ Zain...
+ Datuak (Signal)
+ MMS
+ SMS
+ Ezabatzen
+ Mezuak ezabatzen...
+
+ Bilatu...
+ Ez dago nabigatzaile instalaturik zure gailuan.
+
+
+ - Aukeratutako solasaldia ezabatu?
+ - Aukeratutako solasaldiak ezabatu?
+
+
+ - Honek aukeratutako solasaldia behin betiko ezabatuko du.
+ - Honek aukeratutako %1$d solasaldiak behin betiko ezabatuko ditu.
+
+ Ezabatzen
+ Aukeratutako solasaldiak ezabatzen...
+
+ - Solasaldi artxibatua
+ - %d solasaldi artxibatuak
+
+ DESEGIN
+
+ - Solasaldi bat mugitu da sarrera-ontzira
+ - %d solasaldi mugitu dira sarrera-ontzira
+
+
+ Gakoaren datu-trukerako mezua...
+
+ Artxibatutako elkarrizketak (%d)
+
+ Pertsonalizatua: %s
+ Lehenetsia: %s
+ Bat ere ez
+
+ %d min
+
+ \'%s\'-rekin lotura ezabatu?
+ Gailu hau desparekatu ondoren ezin ditzakezu mezuak bidal eta jaso.
+ Sare-konexioak huts egin du...
+ Saiatu berriro
+ Gailuarekin lotura ezabatzen...
+ Gailuarekin lotura ezabatzen
+ Sareak huts egin du!
+
+ Izen gabeko gailua
+ %s lotuta
+ Azken konexioa: %s
+ Gaur
+
+ Norekin konpartitu
+
+ Ongi etorri Signalera!
+ TextSecure eta RedPhone mezulari pribatua bakar bat dira orain, edozein egoeratako.
+ Ongi etorri Signalera!
+ TextSecure orain Signal da.
+ TextSecure eta RedPhone aplikazio bera da orain: Signal. Ukitu arakatzeko.
+
+ Esportatu
+ Zifratu gabeko testua biltegira esportatu?
+ Kontuz, ekintza honek zure Signal mezuen zifratu gabeko testua biltegira esportatuko du.
+ Utzi
+ Esportatzen
+ Zifratu gabeko testua biltegira esportatzen...
+ Errorea, ezgai memorian idazteko!
+ Errorea memorian idazterakoan.
+ Esportazioa arrakastaz egin da.
+
+ Signal behin betiko komunikazio hutsegitea!
+ Signal ez da gai izan Google Play Zerbitzuekin erregistratzeko. Signal mezu eta deiak desgaitu egin dira, mesedez saiatu bererregistratzen Ezarpenak > Aurreratua menuan.
+
+ Errorea bereizmen handieneko GIFa ekartzen...
+
+ GIFak
+ Eranskailuak
+
+ Talde berria
+ Taldea eguneratu
+ Taldearen izena
+ MMS talde berria
+ Signal taldeak onartzen ez duen kontaktu bat aukeratu duzu; beraz, talde hau MMS izango da.
+ Signal zerbitzuan izena eman ez duzunez, Signal taldeak desaktibatuta daude. Saiatu izena ematen Ezarpenak > Aurreratua menutik mesedez.
+ Ustekabeko errorea gertatu da eta eragin du taldea sortu ezin izatea.
+ Gutxienez pertsona bat behar duzu zure taldean!
+ Zure taldeko partaide batek ondo irakurri ezin daitekeen zenbaki bat dauka. Konpondu edo ezabatu kontaktua eta saiatu berriro mesedez.
+ Taldearen abatarra
+ Taldea sortu
+ Sortzen %1$s...
+ Eguneratzen: %1$s...
+ Ezin izan da %1$s gehitu Signal erabiltzailea ez delako.
+ Taldearen detaileak kargatzen...
+ Dagoeneko zaude taldean.
+
+ Ni
+
+ Inportatu
+ Esportatu
+
+ Inportatu sistemaren SMS datubasea?
+ Sistemaren zifratu gabeko mezuak inportatuko dira.
+Lehenago inportatu badituzu, mezu bikoiztuak sor daitezke.
+ Inportatu
+ Utzi
+ Berrezarri zifratutako babeskopia?
+
+Babeskopia zifratua berrezartzeak zure oraingo gakoak, ezarpenak eta mezuak ordezkatu ditu.
+Babeskopian ez diren oraingo datuak galduko dituzu.
+
+ Leheneratu
+ Inportatu zifratu gabeko babeskopia?
+ Zifratu gabeko babeskopia
+batetik mezuak inportatuko dira.
+Babeskopia hau lehenago inportatu baduzu, mezu bikoiztuak sor daitezke.
+
+ Inportatzen
+ Zifratu gabeko babeskopia inportatzen...
+ Ez da zifratu gabeko babeskopiarik topatu!
+ Errorea babeskopia inportatzerakoan!
+ Inportaketa bukatuta!
+ Leheneratzen
+ Zifratutako babeskopia leheneratzen...
+ Ez da topatu zifratutako babeskopiarik!
+ Leheneratzea osatuta!
+
+ Ukitu eta eutsi ahots mezua grabatzeko, jaregin bidaltzeko.
+
+ Partekatu
+ Kontaktuak hautatu
+ Utzi
+ Bidaltzen...
+ Bihotza
+ Gonbidapenak bidali dira!
+ Gonbidatu Signal erabiltzera
+
+ - BIDALI SMS MEZUA LAGUN BATI
+ - BIDALI SMS MEZUA %d LAGUNI
+
+
+ - Bidali SMS bidezko gonbidapena?
+ - Bidali %d SMS bidezko gonbidapen?
+
+ Signalera alda dezagun: %1$s
+ Dirudienez ez duzu partekatzeko aplikazio bakar bat ere.
+ Lagunek ez dute lagunak zifratu gabeko txatean jardun.
+
+ Ez da topatu eskaneatutako gakorik!
+ Barcode Scanner instalatu?
+ Signalek Barcode Scanner aplikazioa behar du QR kodeak irakurtzeko.
+
+ Bidalketak huts egin du
+
+ Errorea MMS gordetzen!
+ Errorea MMS hornitzailearekin konentatzerakoan...
+ Errorea hari-gabeko hornitzailearen MMS ezarpenak irakurtzen...
+
+ Uneko Signal deia
+ %s-en erantzun gabeko deia
+ Erantzun gabeko Signal deia
+ Signal deia finkatzen
+ Sarrerako Signal deia
+ Ukatu deia
+ Erantzun deia
+ Amaitu deia
+ Deia utzi
+
+ Multimedia mezua
+
+ Signal bertsio zaharregitik jaso da mezu zifratua. Eskatu igorleari birbidaltzeko mesedez bere Signal egiaztatu ondoren.
+ Taldea utzi duzu.
+ Taldea eguneratuta.
+ %s-(e)k deitu dizu
+ %s-(e)ri deitu duzu
+ %s-en erantzun gabeko deia
+ %s-(e)k Signal dauka, agur egin!
+ Desagertzen diren mezuen debora %1$s-tan ezarrita
+ Desagertzen diren mezuen debora %2$s-tan ezarri du %1$s-k
+
+ Pasahitzak ez datoz bat!
+ Pasahitz zahar ez zuzena!
+ Sartu pasahitz berria!
+
+ Lotu gailu hau?
+ UTZI
+ JARRAITU
+ Lotu gailu hau?
+ Hori egiteko gai izango da
+
+ • Irakurri zure mezu guztiak
+ \n• Bidali mezuak zuk gisa
+
+ Gailua lotzen
+ Gailu berria lotzen...
+ Gailua onartuta!
+ Ez da gailurik aurkitu.
+ Sare errorea.
+ Baliogabeko QR kodea.
+ Barkatu, konektatutako gailu gehiegi dauzkazu jadanik, kendu batzuk...
+ Barkatu, hau ez da gailua lotzeko baliozko QR kodea.
+ Lotu Signal gailu bat?
+ Signalez kanpoko eskaner batez parekatzen omen duzu Signal gailu bat. Zure segurtasunerako, eskaneatu kodea Signaletik mesedez.
+
+ Desagertzen diren mezuak
+ Zure mezuak ez dira iraungiko.
+ Solasaldi honetan jaso eta bidalitako mezuak ikusi eta %s gero desagertuko dira.
+
+ Pasahitza sartu
+ Signal ikonoa
+ Bidali pasahitza
+ Pasahitz baliogabea!
+
+ Instalatutako Google Play Services bertsioa ez dabil ongi. Berrinstalatu Google Play Services eta saiatu berriro mesedez.
+
+ Ebaluatu aplikazio hau
+ Aplikazio hau atsegin bazaizu, baloratu guri laguntzeko mesedez.
+ Ebaluatu orain!
+ Ez ezkerrik asko
+ Geroago
+ Epa, Play Store applikazioa zure gailuan instalaturik ez dagoela ematen du.
+
+ Blokeatu kontaktu hau?
+ Ez duzu erabiltzaile honetatik mezu edo dei gehiago jasoko.
+ Blokeatu
+ Desblokeatu kontaktu hau?
+ Berriro ahal izango duzu erabiltze honetatik mezuak eta deiak jasotzea.
+ Desblokeatu
+ Aktibatuta
+ Desaktibatuta
+
+ Deia erantzuten
+ Deia amaitzen
+ Markatzen
+ Deia uzten
+ Deia baztertua
+ Jotzen
+ Lanpetuta
+ Konektatuta
+ Konektatzen
+ Bostekoak huts egin du!
+ Hartzaile eskuraezina
+ Bostekoa ematen
+ Sareak huts egin du!
+ Bezeroak huts egin du
+ Akats larria
+ Saioa hasteak huts egin du!
+ Zerbitzariatik mezua
+ Zenbakia ez da erregistratu!
+ Markatu duzun zenbakiak ez du dei segururik babesten!
+ Jasota
+
+ Konektatu Signalekin
+ Zure herrialdea aukeratu
+ Zure herrialdearen
+kodea zehaztu behar duzu
+
+ Zure telefono zenbakia
+zehaztu behar duzu
+
+ Zenbaki baliogabea
+ Zehaztu duzun
+zenbakia (%s) baliogabea da.
+
+ Ez onartua
+ Sentitzen dugu,
+baina gailu honek ez dago onartuta datuen bidezko mezulararitzarako. Android 4.0 bertsioa baino zaharragoa duten gailuek Google Kontu bat izan behar dute.
+Android 4.0 edo berriagoa badute, ez da beharrezkoa Google Kontu bat izatea, baina Play Store-eko aplikakzioa instalatuta eduki behar da.
+ Egiaztatu hau dela zure zenbakia! SMS bidez egiaztatzear gaude.
+ Jarraitu
+ Editatu
+
+ Aurreikusi daitezkeen arazoak
+
+ Zenbakia egiaztatzen
+ Editatu %s
+ Erregistratzea osatuta!
+ Lehenago jaso duzun kodea sartu behar duzu...
+ Konektatzen
+ Egiaztatzeko konektatzen...
+ Sareko errorea!
+ Konektatzeko ezgai. Mesedez, egiazta ezazu zure konexioa eta saiatu berriro.
+ Egiaztapenak huts egin du!
+ Bidali duzun egiaztapen kodea ez da zuzena. Mesedez, saiatu berriro.
+ Saio gehiegi
+ Zuzena ez den egiaztapen gako bat aldi gehiegi bidali duzu. Mesedez, minutu bat itxaron berriro saitu baino lehenago.
+ Deia eskatzen
+ Sarrera egiaztapen deia eskatzen...
+ Zerbitzariaren errorea
+ Zerbitzariak errore bat topatu du. Mesedez, saiatu berriro.
+ Eskaera gehiegi!
+ Duela gutxi ahotsezko dei bat eskatu duzu. Beste bat eska dezakezu 20 minutu barru.
+ Erregistratze gatazka
+ Zenbaki hori badago beste Signal zerbitzari batean (CyanogenMod?). Hartik bazkidetza kendu behar duzu Signal zerbitzarian izena eman aurretik.
+
+ Erregistratzea osatuta
+ Signalen erregistratzea arrakastaz osatu da.
+ Erregistratze errorea
+ Signalen erregistratzeak arazo bat topatu du.
+
+ Irudia
+ Audioa
+ Bideoa
+
+ Mezuaren elkar-trukerako
+ gakoa hondatuta dago!
+
+
+Gakoaren elkar-trukeraro mezua jaso da protokoloaren bertsio baliogabe baterako.
+
+ Saio segurua berrezarri duzu.
+ %s berrezarri saio segurua.
+ Mezu bikoiztua.
+
+ Taldea utzita...
+ Saio segurua berrezarri da.
+ Zirriborroa:
+ Deitu duzu
+ Deitu dizu
+ Erantzun gabeko deia
+ Multimedia mezua
+ %s-(e)k Signal dauka, agur egin!
+ Desagertzen diren mezuen debora %s-tan ezarrita
+
+ Zure kontaktua Signal aplikazioaren bertsio berriago bat erabiltzen ari da eta horrek QR kode formatua eguneratu du. Eguneratu konparazioa egiteko.
+ Dirudienez ez duzu partekatzeko aplikazio bakar bat ere.
+
+ Hasi nahiz eta beste eskaera bat indarrean egon?
+ Bidali
+
+ Mezua gaizki zifratu da...
+ Deszifratzen, itxaron mesedez ...
+ Existitzen ez den saio baterako zifratutako mezua...
+
+ Mezua deszifratzerakoan errorea.
+
+ Mezua desenkriptatzerakoan errorea.
+
+ MMS zerbitzari batekin konektatzen...
+ MMS behera kargatzen...
+ MMS-aren behera kargatzeak huts egin du!
+ Behera kargatzen...
+ Ukitu eta MMSaren ezarpenak konfiguratu behera kargatzearekin jarraitzeko.
+ Mezua deszifratzerakoan errorea.
+
+ MMSa deszifratzen, itxaron mesedez...
+ MMS mezua gaizki zifratu da...
+ Zifratutako MMS mezu zifratua existitzen ez den saio baterako...
+
+ Desaktibatu jakinarazpenak
+
+ Inportaketa indarrean
+ Testu mezuak inportatzen
+ Inportazioa osatuta
+ Sistemaren datu-basea inportatu da
+
+ Ukitu irekitzeko.
+ Ukitu irekitzeko, edo sarraila ukitu ixteko.
+ Signal desblokeatuta dago
+ Blokeatu pasahitz bat erabiliz
+
+ %1$d mezu berri %2$d solasalditan
+ Berriena %1$s-(e)tik
+ Mezu blokeatuta...
+ Multimedia mezua: %s
+ (Ez dago gairik)
+ Mezuaren banaketak huts egin du.
+ Mezuaren banaketak huts egin du.
+ Errorea mezua banatzen.
+ Denak irrakurritako gisa markatu
+ Markatu irakurritako gisa
+ Multimedia mezua
+ Erantzun
+
+ Erantzun bizkorra eskuraezina Signal blokeatuta badago!
+ Arazoa mezua bidaltzen!
+
+ Signal
+ Mezu berria
+
+ Irudia
+ Audioa
+ Bideoa
+ Kontaktua
+ Kamera
+ Kokalekua
+
+ Aurreko pasahitza
+ Pasahitz berria
+ Errepikatu pasahitz berria
+
+ Idatzi izena edo zenbakia
+
+ Kontakturik ez.
+ Kontaktuak kargatzen...
+
+ Kontaktuaren Argazkia
+
+ Hautatu egiteko...
+
+ Blokeatutako kontaturik ez...
+
+ Ez dago azken deirik.
+
+ Solasaldi isildua
+
+ Bidali Signal mezua
+ SMS ez segurua bidali
+ MMS ez segurua bidali
+ %1$s-(e)tik
+ Bidali
+ Ezabatu
+ %1$s-(r)ekin solasaldia
+ Mezuaren konposizioa
+ Emoji teklatua aktibatu/desaktibatu
+ Eranskinerako koadro txikia
+ Aktibatu Signal SMSetarako
+
+ LERRATU UZTEKO
+
+ Multimedia mezua deskargatzen
+ Media mezua
+ Mezu segurua
+
+ Behera kargatu
+ Behera kargatzen
+ Bidalketak huts egin du
+ Onespenaren Zain
+ Banatua
+
+ Behera kargatu
+ Kontaktuaren argazkia
+ Behera kargatzen
+
+
+ Batch hautatzeko modua
+ %s hautatua
+
+ Herrialdeak kargatzen...
+ Bilatu
+
+ Eskaneatu gailuan erakutsitako QR kodea parekatzeko.
+
+ Lotu gailua
+
+ Ez dago gailurik lotuta.
+ Lotu gailu berria
+
+ jarraitu
+
+ Desaktibatuta
+
+ - segundu bat
+ - %d segundu
+
+ %ds
+
+ - minutu bat
+ - %d minutu
+
+ %dm
+
+ - ordu bat
+ - %d ordu
+
+ %do
+
+ - egun bat
+ - %d egun
+
+ %de
+
+ - aste bat
+ - %d aste
+
+ %da
+
+ GIF eta eranskailuak bilatu
+
+ Ez da ezer aurkitu
+
+ Ezin izan da gailuko erregistroa irakurri. Dena den, ordenagailuko ADB programa erabil dezakezu arazketa-erregistroa eskuratzeko.
+ Eskerrik asko zure laguntzagatik!
+ Bidaltzen
+ Logak gist-era bidaltzen...
+ Nabigatzaile instalaturik ez
+
+ Oraingo telefonoaren zifratu gabeko mezuak Signalen datu-base zifratura inportatzea gustatuko litzaizuke?
+ Sistemaren lehenetsitako datubasea ez da inolako moduan aldatuko.
+ Saltatu
+ Inportatu
+ Honek denbora tarte bat har lezake. Mesedez, pazientzia izan, jakinaraziko dizugu inportatzea osatuta dagoenean.
+ INPORTATZEN
+
+ Datubasea eguneratzen...
+ Esportatu zifratu gabeko babeskopia
+
+Esportatu \'SMSBackup and Restorekin\' bateragarria den zifratu gabeko babeskopia bat biltegira.
+ Inportatu sistemaren SMS datubasea
+ Inportatu sistemako mezulari aplikazio lehenetsiaren datu-basea.
+ Berrezarri zifratutako babeskopia
+ Leheneratu aurrez zifratu eta esportatu den Signal babeskopia.
+ Inportatu zifratu gabeko babeskopia
+
+Inportatu \'SMSBackup and Restorekin\' bateragarria den zifratu gabeko babeskopia bat.
+
+ Ikusi solasaldi osoa
+
+ Irudirik ez
+
+ EGIAZTATU
+ BIRBIDALI
+
+ MMS eskuzko ezarpenak behar dira zure telefonorako.
+ Gaituta
+ Ezgaituta
+ Ez ezarria
+ Sartutako testua URI baliogabea da
+ Sartutako testua host baliogabea da
+
+
+ - %1$s taldean sartu da.
+ - %1$s taldean sartu dira.
+
+ Taldea eguneratuta.
+ Taldeak \'%1$s\' izena du orain.
+
+ Desblokeatu
+
+ Signalek MMS ezarpenak behar ditu media eta taldeko mezuak banatu ahal izateko zure hari-gabeko hornitzailearen bitartez. Zure gailuak ez dauka informazio hau eskuragarri. Hau batzuetan gertatzen da blokeatuta dauden eta beste konfigurazio murrizgarriak dituzten gailuetan.
+ Media eta taldeko mezuak bidaltzeko, ukatu \'Ados\' eta osatu behar diren ezarpenak. Zure hornitzailearentzako ezarpenak normalean topa daitezke zure hornitzailearen APNa bilatuz. Bakarrik behin egin beharko duzu hau.
+
+ BLOKEATUTA
+
+ Isildu solasaldia
+ Desaktibatu jakinarazpenak solasaldi honetarako
+ Jakinarazpenaren soinua
+ Bibratu
+ Blokeatu
+ Kolorea
+ Kontaktu honentzako kolorea
+
+ Signal deia
+ amaitu deia
+ Audioa
+ Isildu
+ Signal deia
+
+
+Egiaztatu zure telefono zenbakia Signalera konektatzeko.
+
+
+ ZURE HERRIALDEA
+ ZURE HERRIALDEA ETA
+TELEFONO ZENBAKIA
+
+ TELEFONO ZENBAKIA
+ Erregistratu
+ Erregistratzeak kontakturako informazioa igortzen du zerbitzarira. Ez da gordetzen.
+ twilio-k bultzatuta
+
+ Aurreikusi daitezkeen arazo
+batzuk ondokoak dira:
+
+ SMSen pase-harrapatzaileak
+ Beste mezulari batzuk, Handcent-ek edo GoSMS-ek bezala, heltzen diren mezu guztiak oztopatzen dituzte. Egiaztatu \"Your Signal verification code\" hasten duen mezu bat jaso duzula. Kasu horretan, modifikatu mezulari horien ezarpenak mezuak ez oztopatzeko.
+ Zenbaki ez zuzena.
+ Mesedez, egiazta ezazu zenbakia ondo sartu duzun, eta zure zonaldeari dagokion formatoan dagoen.
+ Google Voice.
+ Signalek ez du funtzionatzen Google Voice-eko zenbakiekin.
+
+ Ahotsaren bidezko egiaztapena
+
+Signalek, era berean, dei diezazuke zure zenbakia egiaztatzeko. Ukitu \"Dei iezadazu\" eta sartu azpian entzungo duzun sei zenbakiko kodea.
+ Egiaztatu
+ Dei iezadazu
+ Zenbakia editatu
+ Konexioaren errorea
+ Signal ezin izan da zerbitzarira konektatu.
+ Aurreikusi daitezkeen
+arazo batzuk ondokoak dira:
+
+ Ez dago s
+areko konexiorik.
+
+ Zure gailuak sarean egon behar du Signalen ezaugarri hau erabiltzeko. Ziurtatu mugikorraren edo hiririk gabeko sarean dagoela.
+ Firewall murrizgarria.
+
+Wi-Fi sarean bazaude, agian suebaki bat Signal zerbitzariaren atzipena blokeatzen ari da. Saiatu haririk gabeko beste sare batez edo datu mugikorrez konektatzen mesedez.
+
+Orain Signalek zure zenbakia automatikoki egiaztatuko du SMS egiaztapen mezu bat bidaliz.
+ Konektatzen...
+ SMS bidezko
+egiaztapenaren zain...
+
+ Zerbitzariarekin erregistratzen...
+ Honek
+denbora tarte bat har lezake. Mesedez, pazientzia izan, jakinaraziko dizugu egiaztapena osatuta dagoenean.
+
+
+Signal SMS bidez egiaztatzeko mezuaren zain zegoela denbora mugara iritsi da.
+
+ SMS bidezko egiaztapenak
+huts egin du.
+
+ Gakoak sortzen...
+ Alerta
+ Telefonoa
+ Ikustatu
+
+ Izen edo zenbaki bat sartu
+ Partaideak gehitu
+
+ Ukitu eskaneatzeko
+
+
+ Arazo batzuk daude.
+ Bidalita
+ Jasota
+ Desagertzen da
+ Honen bidez
+ Hartzailea:
+ Igorlea:
+ Honekin:
+
+ Pasahitza sortu
+ Pasahitza sartu
+ Kontaktuak hautatu
+ Signal detektatu da
+ Pasahitza aldatu
+ Bidali arazketa-erregistroa
+ Multimediaren aurrebista
+ Irudi guztiak
+ %1$s-(r)ekiko irudi guztiak
+ Mezuaren xehetasunak
+ Lotutako gailuak
+ Gonbidatu lagunak
+ Artxibatutako solasaldiak
+
+ Inportatu / esportatu
+ Erabili lehenetsia
+ Pertsonalizatua
+ Isildu ordu baterako
+ Isildu ordu bitarako
+ Isildu egun baterako
+ Isildu 7 egunetarako
+ Isildu urte baterako
+ Lehenetsia
+ Aktibatuta
+ Desaktibatua
+ Izena eta mezua
+ Izena bakarrik
+ Ez izena eta ez mezua
+ Irudiak
+ Audioa
+ Bideoa
+
+
+ - ordu %d
+ - %d ordu
+
+
+ Orokorra
+ SMS eta MMS
+ Jaso SMS guztiak
+ Jaso MMS guztiak
+ Erabili Signal etorriko diren testu mezu guztiak jasotzeko
+ Erabili Signal etorriko diren multimedia mezu guztiak jasotzeko
+ Sarreraren Ezarpenak
+ Enter tekla gaitu
+ Smiley tekla Enter teklaren bidez ordezkatu
+ Enter teklak bidaltzen duena
+ Enter tekla sakatzeak testu mezuak bidaliko ditu
+ Bistaratze-ezarpenak
+ Aukeratu nortasuna
+ Hautatu zure kontaktua kontaktuen zerrendatik.
+ Pasahitza aldatu
+ Aldatu zure pasahitza
+ Pasahitza gaitu
+ Blokeatu Signal dei eta mezuen jakinarazpenak pasahitza baten bitartez
+ Pantailaren segurtasuna
+ Blokeatu pantailazoak arestikoen zerrendan eta aplikazioaren barruan
+ Blokeatu Signal automatikoki jarduerarik gabe denbora tarte bat pasa eta gero.
+ Jarduerarik gabeko denbora tarte pasahitza
+ Jarduerarik gabeko denbora tartea
+ Jakinarazpenak
+ Aktibatu mezu jakinarazpenak
+ Kontaktu berrien jakinarazpenak
+ Erakutsi jakinarazpen bat Signal kontaktu berrientzat
+ LED kolorea
+ Ezezaguna
+ LEDaren keinuka eredua
+ LEDaren keinuka eredu pertsonalizatu bat ezarri
+ Zenbat denbora piztuta:
+ Zenbat denbora itzalita:
+ Personalizatutako LED keinu eredua ezarrita!
+ Soinua
+ Aldatu jakinarazpenaren soinua
+ Isildu
+ Solasaldi barruko jakinarazpenak
+ Erreproduzitu jakinarazpena solasaldi aktibo bat ikusterakoan.
+ Errepikatu alertak
+ Inoiz ez
+ Behin
+ Bi aldiz
+ Hiru aldiz
+ Bost aldiz
+ Hamar aldiz
+ Bibratu
+ Jakinarazpena denean ere bibratu
+ minutuak
+ orduak
+ Berdea
+ Gorria
+ Urdina
+ Laranja
+ Cyan
+ Magenta
+ Zuria
+ Bat ere ez
+ Arina
+ Normala
+ Motela
+ Pertsonalizatua
+ Aurreratua
+ Pribatutasuna
+ MMS erabiltzaile-agentea
+ MMS eskuzko ezarpenak
+ MMS eskuzko ezarpenak erabili
+ Jaramonik ez sistemaren MMS ezarpenei azpian dagoen informazioa erabiliz.
+ MMSC URLa
+ MMS Proxy Ostalaria
+ MMS Proxy Ataka:
+ MMSC Erabiltzailea
+ MMSC Pasahitza
+ SMS banaketaren txostenak
+ Bidaltzen duzun SMS mezu bakoitzeko banaketa txosten bat eskatu
+ Ezabatu mezu zaharragoak automatikoki solasaldiaren luzera mugak gainditu ondoren.
+ Mezu zaharrak ezabatu
+ Txatak eta mediak
+ Solasaldiaren luzera muga
+ Murriztu solasdi guztiak orain
+ Eskaneatu solasaldi guztiak eta derrigortu luzera mugak.
+ Lotutako gailuak
+ Argia
+ Iluna
+ Itxura
+ Gaia
+ Lehenetsia
+ Hizkuntza
+ Signal mezu eta deiak
+ Mezu eta dei pribatu doanak Signal erabiltzaileri.
+ Arazketaren log-a bidali
+ \'\"WiFi Calling\' modu bateragarria
+ Aktibatu zure gailuak WiFi bidezko SMS/MMS banaketa erabiltzen badu (bakarrik aktibatu \'WiFi Calling\' aktibatuta badago zure gailuan).
+ Blokeatutako kontaktuak
+ Segurtasun zenbakien onarpena
+ Eskatu segurtasun zenbaki berrien onarpena hauek aldatzean
+ Erakutsi jakinarazpenetan
+ Datu mugikorrak erabiltzerakoan
+ Wi-Fia erabiltzerakoan
+ Ibiltaritzako datuak erabiltzerakoan
+ Multimedia edukiak deskargatze automatikoa
+ Mezu murrizketa
+ Erabili sistemako emojiak
+ Desaktibatu Signalen emoji integratuak
+
+
+
+
+ Denak hautatu
+ Denak ez-hautatu
+ SIGNAL ERABILTZAILEAK
+ KONTAKTU GUZTIAK
+ Mezu berria honi...
+
+ Bukatua
+
+ Freskatu kontaktuen zerrenda
+
+ Deitu
+
+ Signal deia
+
+ Mezuaren detaileak
+ Testua kopiatu
+ Mezua ezabatu
+ Birbidali mezua
+ Mezua berbidali
+
+ Eraskina gorde
+
+ Desagertzen diren mezuak
+
+ Mezuak iraungitzen
+
+ Gonbidatu
+
+ Segurtasuna
+
+ Hautatutakoak ezabatu
+ Denak hautatu
+ Artxibatze hautatua
+ Desartxibatze hautatua
+
+ Bilatu
+
+ Kontaktuaren argazkia
+ Akats-abisua
+ Artxibatuta
+
+ Solasaldi berria
+
+ Berrezarri saio segurua
+
+ Aktibatu jakinarazpenak
+
+ Desaktibatu jakinarazpenak
+
+ Eranskina gehitu
+ Taldea eguneratu
+ Taldea utzi
+ Ezabatu solasaldia
+ Irudi guztiak
+ Solasaldiaren ezarpenak
+
+ Zabaldu leihoa
+
+ Kontaktuetara gehitu
+
+ Hartzaileen zerrenda
+ Banatu
+ Solasaldia
+ Difusioa
+
+ Konparatu
+ Erakutsi zure QR kodea.
+ Eskaneatu kontaktuaren QR kodea.
+
+ Mezu berria
+ Talde berria
+ Ezarpenak
+ Blokeatu
+ Irakurritako gisa markatu guztiak
+ Gonbidatu lagunak
+ Laguntza
+
+ Arbelera kopiatu
+ Arbelarekin konparatu
+
+ Zure Signal bertsioa zaharkitua dago
+
+ - Bihar amaituko da zure Signal bertsioa erabiltzeko epea. Tap egin azken bertsioara eguneratzeko.
+ - %d egun barru amaituko da zure Signal bertsioa erabiltzeko epea. Ukitu azken bertsioara eguneratzeko.
+
+ Gaur amaituko da zure Signal bertsioa erabiltzeko epea. Ukitu azken bertsioara eguneratzeko.
+ Amaitu da zure Signal bertsioa erabiltzeko epea!
+ Mezuak ezingo dira bidali. Ukitu azken bertsiora eguneratzeko.
+ EGUNERATU
+ Lehenetsitako SMS aplikazio gisa erabili
+ Ukitu Signal zure SMS aplikazio lehenetsia bihurtzeko
+ EZARRI
+ Importatu sistemaren SMS mezuak
+ Ukitu telefonoaren zifratu gabeko SMS mezuak Signalen datu-base zifratura kopiatzeko.
+ IMPORTATU
+ Aktibatu Signal mezu eta deiak
+ Berritu zure komunikazio-esperientzia.
+ AKTIBATU
+ Signal erabilitzera gonbidatu
+ Hobetu zure %1$s-(e)kiko solasaldia.
+ GONBIDATU
+ Gonbidatu zure lagunak!
+ Zenbat eta Signalen adiskide gehiago izan, hobe.
+ PARTEKATU
+ ITXI
+
+ Zu
+ Ezgai irudi honen aurrebista sortzeko
+ Euskarri mota ez-onartua
+
+ Gorde
+ Birbidali
+
+ Dena gorde
+
+ Irudiaren aurrebista
+
+ Freskatu
+
+ Telefonoa
+ Aurikularra
+ Bozgorailua
+
+ Ezabatzen
+ Mezu zaharrak ezabatzen...
+ Mezu zaharrak ondo ezabatu dira
+
+ Garraio ikonoa
+
+
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 6e84e94d278..f031e775fd8 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -5,6 +5,8 @@
خیر
ØØ°Ù
Ù„Ø·ÙØ§Ù‹ صبر کنید...
+
+ پیام جدید
در ØØ§Ù„ ØØ§Ø¶Ø±: %s
شما هنوز رمزی تعیین نکرده‌اید!
@@ -12,8 +14,12 @@
- %d پیام برای هر Ú¯ÙØªÚ¯Ùˆ
پیام‌های قدیمی ØØ°Ù شوند؟
+
+ - این گزینه ØŒ Ø¨Ù„Ø§ÙØ§ØµÙ„Ù‡ تمامی مکالمات شما را به %d پیام آخر ØŒ کاهش خواهد داد.
+
ØØ°Ù
- عبارت عبور غیر ÙØ¹Ø§Ù„ کنم؟
+ عبارت عبور غیر ÙØ¹Ø§Ù„ شود؟
+ این گزینه ØŒ سیگنال Ùˆ اعلان پیام را بطور دایم از وضعیت Ù‚ÙÙ„ ØŒ خارج میکند.
ØºÛŒØ±ÙØ¹Ø§Ù„ کردن
لغو ثبت نام
لغو ثبت برای پیام ها و تماس های سیگنال ...
@@ -29,6 +35,8 @@
خاموش
خاموش
SMS %1$s, MMS %2$s
+ رمز عبور %1$sØŒ Ù…ØØ§Ùظ ØµÙØÙ‡ نمایش %2$s
+ تم %1$s، زبان %2$s
- %d دقیقه
@@ -37,6 +45,7 @@
(تصویر)
(صوتی)
(ویدئو)
+ (موقعیت)
امکان ÛŒØ§ÙØªÙ† برنامه‌ای برای انتخاب مدیا وجود ندارد.
@@ -52,8 +61,6 @@
تماس های Ø¯Ø±ÛŒØ§ÙØªÛŒ
- شما ممکن است مایل به منظور بررسی
-تماس با ما
Ù¾Ø°ÛŒØ±ÙØªÙ†
ارسال پیام به %s
@@ -63,14 +70,22 @@
انقضا: %s
تØÙˆÛŒÙ„ داده نشد
نمایش رسانه های امن؟
+ این مدیا در یک بانک اطلاعاتی کدگذاری شده رخیره شده است . Ù…ØªØ§Ø³ÙØ§Ù†Ù‡ ØŒ برای مشاهده آن با یک برنامه پخش کننده دیگر ØŒ هم اکنون باید این مدیا موقتا از ØØ§Ù„ت Ù‚ÙÙ„ شده خارج گردد Ùˆ در در ØØ§Ùظه دستگاه ذخیره شود. آیا اطمینان داررید Ú©Ù‡ میخواهید این کار را انجام دهید ØŸ
خطا، یک پیام کهنه تبادل کلید Ø¯Ø±ÛŒØ§ÙØª شد.
+ پیام تبادل کلید رمز Ø¯Ø±ÛŒØ§ÙØª شد ØŒ برای ادامه ØŒ ØµÙØÙ‡ را لمس کنید.
%1$s گروه را ترک کرده است.
برای جزئیات بیشتر ضربه بزنید
+ برای روش غیر امن کلیک کنید
به اس ام اس رمز نشده برگرده؟
- مجدد به تکه تکه کردن MMS؟
+ بازگشت به ØØ§Ù„ت MMS بدون رمز نگاری ØŸ
+ این پیام رمزنگاری نخواهد شد زیرا Ø¯Ø±ÛŒØ§ÙØª کننده یک کاربر سیگنال نیست.\n\n
+پیام غیرامن ارسال شود؟
برنامه ای برای بازکردن این رسانه وجود ندارد.
+ از %s
+ به %s
تنظیم مجدد جلسه امن؟
+ اگر برای کد گذاری در این مکالمه مشکلی دارید ØŒ شاید این به شما Ú©Ù…Ú© کند. پیام شما ØÙظ خواهد شد.
تنظیم مجدد
Ú¯ÙØªÚ¯Ùˆ ØØ°Ù شود؟
این کار تمام پیام ها در این Ú¯ÙØªÚ¯Ùˆ رابه طور دائم ØØ°Ù میکند.
@@ -92,7 +107,7 @@
ذخیره پیش نویس
گیرنده نامعتبر است!
تماس پشتیبانی نمی شود
- این دستگاه به نظر نمی رسد برای ØÙ…ایت از اقدامات شماره گیری.
+ این دستگاه قابلیت شماره‌گیری ندارد!
ترک گروه؟
آیا شما مطمئن هستید که میخواهید این گروه را ترک کنید؟
پیامک نا امن
@@ -104,11 +119,14 @@
MMS پشتیبانی نمی شود
از آنجایی که اپراتور شما MMS را پشتیبانی نمی کند، این پیام قابل ارسال نمی باشد.
Ù„Ø·ÙØ§ یک تماس را انتخاب کنید
- Ø±ÙØ¹ مسدودی؟
- آیا شما مطمئن هستید که میخواهید این مخاطب را از بلاک در بیاورید؟
+ Ø±ÙØ¹ انسداد این تماس؟
+ Ø¯Ø±ÛŒØ§ÙØª پیام Ùˆ تماس از این مخاطب مجددا برای شما ÙØ¹Ø§Ù„ شده است.
Ø±ÙØ¹ انسداد
+ ØØ¬Ù… ÙØ§ÛŒÙ„ ضمیمه شده بیشتر از اندازه مجاز تعیین شده برای این نوع پیام است.
دوربین در دسترس نیست
قادر به ضبط صدا نیست!
+ خطا در ØØ§Ù„ ارسال پیام صوتی
+ هیچ برنامه ای به منظور پشتیبانی از لینک برروی دستگاه شما وجود ندارد.
جزییات پیام
ÙØ±Ø³ØªÙ†Ø¯Ù‡: %1$s\nنوع انتقال: %2$s\nزمان ارسال: %3$s\nزمان Ø¯Ø±ÛŒØ§ÙØª: %4$s
@@ -119,8 +137,21 @@
- این به صورت دائم %1$d پیامهای انتخاب شده را ØØ°Ù میکند.
ذخیره Ø¯Ø±ØØ§Ùظه؟
- موÙقیت!
+
+ - ذخیره همه %1$d مدیا به ØØ§Ùظه دستگاه ØŒ باعث خواهد شد Ú©Ù‡ همه برنامه های دیگر نصب شده در دستگاه شما ØŒ به این اطلاعات دسترسی پیدا کنند. \n\n آیا مایل به ادامه هستید ØŸ
+
+
+ - خطا در هنگام ذخیره سازی ÙØ§ÛŒÙ„ ضمیمه
+
+ ÙØ§ÛŒÙ„ با موÙقیت ذخیره شد.
قادر نیست به ارسال به ذخیره سازی!
+
+ - در ØØ§Ù„ ذخیره‌ی %1$d پیوست
+
+
+ - در ØØ§Ù„ ذخیره‌ی %1$d پیوست در ØØ§Ùظه...
+
+ در ØØ§Ù„ جمع‌آوری پیوست‌ها...
در انتظار ...
داده ها (سیگنال)
MMS
@@ -129,6 +160,7 @@
ØØ°Ù پیام های...
جستجو...
+ برروی دستگاه شما هیچ مرورگری نصب نیست.
- مکالمات انتخاب شده ØØ°Ù شوند؟
@@ -138,7 +170,13 @@
ØØ°Ù
مکالمات انتخاب شده ØØ°Ù شوند؟
+
+ - %d Ú¯ÙØªâ€ŒÙˆâ€ŒÚ¯Ùˆ آرشیو شدند
+
UNDO
+
+ - انتقال %d Ú¯ÙØªâ€ŒÙˆâ€ŒÚ¯Ùˆ به اینباکس
+
پیام تبادل کلید...
@@ -148,42 +186,58 @@
با Ø§Ø³ØªÙØ§Ø¯Ù‡ از پیش ÙØ±Ø¶: %s
هیچ کدام
- اکنون
%d دقیقه
قطع ارتباط \'%s\'؟
+ توسط لغو پیوند کردن این دستگاه،دیگر قادر به ارسال Ùˆ Ø¯Ø±ÛŒØ§ÙØª پیام ها نخواهید بود.
قطع ارتباط شبکه ...
دوباره تلاش کن
- لغو پیوند دستگاه ...
- لغو پیوند دستگاه
+ در ØØ§Ù„ جداسازی دستگاه...
+ در ØØ§Ù„ جداسازی دستگاه
شکست خوردن در شبکه!
- دستگاهی که نامش ذکر نشده
+ دستگاه بی نام
مرتبط از %s
+ آخرین ÙØ¹Ø§Ù„یت %s
امروز
به اشتراک گذاشتن با
به سیگنال خوش آمدید.
+ TextLibre Ùˆ PhoneLibre هم اکنون به هم ملØÙ‚ شده اند ØŒ برای همه کاربردها در : LibreSignal
به سیگنال خوش آمدید!
تکست سکیور ØØ§Ù„ا هست سیگنال.
تکست سکیور Ùˆ ردÙون ادغام شدند: سیگنال. اطلاعات بیشتر
خروجی
+ ذخیره‌ی متن در ØØ§Ùظه
+ اخطار,Ù…ØØªÙˆØ§ÛŒ متن پیام سیگنال شما به ذخیره گاه صادر خواهد شد
لغو
خروجی Ú¯Ø±ÙØªÙ†
- موÙقیت!
+ ذخیره‌ی متن در ØØ§Ùظه
+ خطا! برنامه قادر به ذخیره سازی نیست
+ خطا در هنگام ذخیره سازی
+ ذخیره‌سازی موÙÙ‚ بود.
+ ارتباط سیگنال بطور کل قطع شده است
+ Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø± سیگنال نمی‌تواند از طریق خدمات Google PlayØŒ شما را ثبت‌نام کند. پیام‌ها Ùˆ تماس‌های سیگنال، ØºÛŒØ±ÙØ¹Ø§Ù„ شده‌اند، Ù„Ø·ÙØ§Ù‹ تلاش کنید از طریق تنظیمات مجدداً ثبت‌نام کنید.
+
+
گروه جدید
به روز رسانی گروه
نام گروه
گروه MMS جدید
+ شما مخاطبی را انتخاب کرده‌اید که از قابلیت گروه‌های سیگنال پشتیبانی نمی‌کند، چراکه این گروه‌ها MMS می‌شوند.
+ شما برای Ø§Ø³ØªÙØ§Ø¯Ù‡ از خدمات پیام‌رسانی Ùˆ تماس‌های سیگنال ثبت‌نام نکرده‌اید! به همین خاطر گروه‌ها ØºÛŒØ±ÙØ¹Ø§Ù„ هستند!. Ù„Ø·ÙØ§Ù‹ در تنظیمات اقدام به ثبت‌نام کنید.
+ یک خطای غیرمنتظره در دستگاه شما رخ داده و تشکیل گروه‌ها را با شکست مواجه کرد!
شما ØØ¯Ø§Ù‚Ù„ یک Ù†ÙØ± در گروه خود نیاز دارید!
+ یکی از مخاطبینی Ú©Ù‡ برای گروه خود انتخاب کرده‌اید دارای شماره‌ای است Ú©Ù‡ نمی‌توان آن را به‌درستی خواند. Ù„Ø·ÙØ§Ù‹ آن مخاطب را از گروه ØØ°Ù کرده یا شماره را Ø§ØµÙ„Ø§Ø Ú©Ù†ÛŒØ¯.
آواتار گروه
ایجاد گروه
ایجاد %1$s…
به روز رسانی %1$s...
+ امکان اضاÙÙ‡ کردن %1$s وجود ندارد زیرا از کاربران سیگنال نیستند.
در ØØ§Ù„ بارگذاری جزئیات گروه...
در ØØ§Ù„ ØØ§Ø¶Ø±Ø¯Ø± این گروه هستید
@@ -193,11 +247,15 @@
خروجی
سیستم وارد کردن پایگاه داده SMS؟
+ این کار تمامی پیام های گوشی شمارا به دیتابیس مخصوص سیگنال انتقال خواهد داد،اگر قبلا پیام ها را منتقل کرده اید،انتقال مجدد باعث ایجاد دوگانگی پیام ها می شود.
وارد کردن
لغو
بازگرداندن نسخه پشتیبان رمزگذاری شده؟
بازیابی
+ وارد کردن پشتیبان متنی؟
وارد کردن
+ در ØØ§Ù„ وارد کردن پشتیبان متنی...
+ هبچ پشتیبان متنی ÛŒØ§ÙØª نشد!
خطا در وارد کردن نسخه پشتیبان!
واردکردن کامل شد!
بازیابی
@@ -208,25 +266,27 @@
برای ضبط کردن صدا ØµÙØÙ‡ را تپ کنید Ùˆ Ù†Ú¯Ù‡ دارید - برای ÙØ±Ø³ØªØ§Ø¯Ù† انگشت را بردارید
اشتراک گذاری
- ارسال SMS
+ انتخاب مخاطبین
لغو
در ØØ§Ù„ ارسال
Ùلب
دعوت نامه ارسال شد!
دعوت به سیگنال
-
- - به %d دوست Ø¨ÙØ±Ø³Øª
+
+ - ارسال پیامک به %d Ù†ÙØ± از دوستان
- %d دعوت اس ام اس Ø¨ÙØ±Ø³ØªÙ…ØŸ
بیایید از این برای سیگنال Ø§Ø³ØªÙØ§Ø¯Ù‡ کنیم: %1$s
+ به نظر می رسد شما هیچ برنامه ای برای اشتراک گذاری در آن ندارید.
+ دوستان نمی‌گذارند دوستانشان بدون رمزنگاری چت کنند.
کلید اسکن شده پیدا نشد!
نصب اسکنر بارکد؟
+ سیگنال برای QR Code ها به اسکنر بارکد نیاز دارد.
ارسال نشد
- هویت جدید
خطا در ذخیره MMS!
خطا در اتصال به ارائه دهنده MMS ...
@@ -235,6 +295,7 @@
پاسخ سیگنال در ØØ§Ù„ انجام
تماس از دست Ø±ÙØªÙ‡ از %s
تماس از دست Ø±ÙØªÙ‡ سیگنال
+ در ØØ§Ù„ برقراری ÙŠÚ© تماس سيگنالی
پاسخ تماس سیگنال
رد تماس
پاسخ به تماس
@@ -243,26 +304,38 @@
پیام های چند رسانه ای
+ یک پیام رمزنگاری شده با Ø§Ø³ØªÙØ§Ø¯Ù‡ از نسخه‌ای قدیمی از سیگنال Ú©Ù‡ دیگر پشتیبانی نمی‌شود برایتان ارسال شده است، Ù„Ø·ÙØ§Ù‹ از ÙØ±Ø³ØªÙ†Ø¯Ù‡ بخواهید Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø± سیگنال خود را به آخرین نسخه بروزرسانی کرده Ùˆ مجدداً پیام را برای شما ارسال کند.
شما گروه را ترک کرده اید.
گروه به روز شده.
%s با شما تماس Ú¯Ø±ÙØª
+ %s تماس Ú¯Ø±ÙØªÙ‡
تماس از دست Ø±ÙØªÙ‡ از %s
+ %s در سیگنال است،به او سلام کنید!
رمزها با هم نمی‌خوانند!
رمز قبلی نادرست است!
کلمه عبور جدید را وارد کنید!
- پیوند این دستگاه؟
+ اتصال این دستگاه؟
لغو
ادامه
- پیوند این دستگاه؟
+ اتصال این دستگاه؟
این قادر خواهد بود به
- ارتباط دستگاه
- ارتباط دستگاه جدید...
- دستگاه تاییدشده!
+
+. تمام پیام‌هایتان را بخوانید
+/n. با نام خودتان پیام‌ها را Ø¨ÙØ±Ø³ØªÛŒØ¯
+ در ØØ§Ù„ اتصال دستگاه
+ در ØØ§Ù„ اتصال دستگاه جدید...
+ دستگاه تایید شد!
دستگاه ÛŒØ§ÙØª نشد.
خطای شبکه.
کد QR نامعتبر است.
+ متاسÙیم،شما دستگاه های زیادی را لینک کرده اید،برخی از آنها را ØØ°Ù کنید...
+ Ù…ØªØ§Ø³ÙØ§Ù†Ù‡ این یک کد QR معتبر برای اتصال دستگاه نيست.
+ اتصال يک دستگاه دارای سيگنال؟
+
+ پیامهای نشان داده نشده
+ پیام های شما منقضی نخواهد شد.
رمز را وارد کنید
آیکون سیگنال
@@ -271,14 +344,16 @@
امتیاز به این برنامه
+ اگر شما از این برنامه لذت Ø¨Ø±Ø¯ÛŒØ¯ØŒÙ„Ø·ÙØ§ یک Ù„ØØ¸Ù‡ به ما Ú©Ù…Ú© کنید Ùˆ امتیاز دهید.
اکنون بسنجید!
نه ممنون
بعد
انسداد این تماس؟
+ شما ديگر تماس يا پيامی از این مخاطب Ø¯Ø±ÙŠØ§ÙØª نخواهید کرد.
بلوک
Ø±ÙØ¹ انسداد این تماس؟
- آیا شما مطمئن هستید که میخواهید این مخاطب را از بلوک در بیاورید؟
+ شما مجددا قادر به Ø¯Ø±ÛŒØ§ÙØª پیام ها Ùˆ تماس ها از این مخاطب هستید.
Ø±ÙØ¹ انسداد
ÙØ¹Ø§Ù„
غیر ÙØ¹Ø§Ù„
@@ -294,14 +369,17 @@
اتصال
دست دادن شکست خورده!
گیرنده در دسترس نیست
+ در ØØ§Ù„ برقراری ارتباط
شکست خوردن در شبکه!
مشتری شکست خورده
خطای مهلک
ورود ناموÙÙ‚!
پیام از سرور
شماره ثبت نام نکرده!
+ شماره‌ای Ú©Ù‡ Ú¯Ø±ÙØªÙŠØ¯ØŒ از تماس ايمن پشتيبانی نمی‌کند.
Ùهمیدم
+ اتصال با سیگنال
کشور خود را انتخاب کنید
شما باید کد کشور خود را
مشخص کنید
@@ -312,8 +390,10 @@
شماره‌ای که شما
مشخص کرده‌اید (%s) معتبر نیست.
پشتیبانی نشده
+ متأسÙیم!
+این دستگاه از پیام‌رسانی به وسیله ارتباط داده‌های اینترنتی پشتیبانی نمی‌کند. دستگاه‌های دارای نسخه‌ی اندروید 4.0 به پائین باید لزوماً یک ØØ³Ø§Ø¨ Google وارد شده داشته باشند؛ البته دستگاه‌های مجهز به اندروید 4.0 Ùˆ بالاتر نیازی ندارند!
-مطمئن باشید Ú©Ù‡ این شماره شما هست! الآن، برای تایيد کردن، به این شماره اس ام اس Ù…ÛŒÙØ±Ø³ØªÛŒÙ….
+مطمئن باشید Ú©Ù‡ این شماره شما هست! الآن، برای تایيد کردن، به این شماره اس‌ام‌اس Ù…ÛŒâ€ŒÙØ±Ø³ØªÛŒÙ….
ادامه
ویرایش
@@ -330,11 +410,13 @@
تأیید نشد!
کد تایید ارائه شده شما نادرست است. Ù„Ø·ÙØ§ دوباره تلاش کنید.
تلاش های بیش از ØØ¯
+ شما کد تاییدیه را چندین بار اشتباه ثبت کرده Ø§ÛŒØ¯ØŒÙ„Ø·ÙØ§ قبل از تلاش مجدد 1 دقیقه صبر کنید.
درخواست تماس
درخواست ورودی تأیید تماس ...
خطای سرور
سرور با خطا مواجه شده است. Ù„Ø·ÙØ§ دوباره تلاش کنید.
درخواست های بیش از ØØ¯!
+ شما قبلاً به تازگی درخواست تماس صوتی کرده‌اید. می‌توانید 20 دقیقه بعد، دوباره درخواست کنید.
تضاد در ثبت نام
ثبت نام کامل شد
@@ -350,32 +432,20 @@
تبادل پیام!
یک پیام تبادل کلید برای نسخه اشتباه پروتوکل Ø¯Ø±ÛŒØ§ÙØª شد.
- تنظیم مجدد جلسه امن.
+ شما نشست امن را ریست نموده اید.
+ %s نشست امن را ریست نمود.
تکثیر پیام.
ترک گروه ...
تنظیم مجدد جلسه امن.
پیش نویس:
- تو تلÙÙ† زدی
+ شما تماس Ú¯Ø±ÙØªÛŒØ¯
با شما تماس Ú¯Ø±ÙØª
تماس از دست Ø±ÙØªÙ‡
پیام رسانه
+ %s در سیگنال است،به او سلام کنید!
- شما یک کلید هویت ندارد.
- شما یک کلید هویت ندارید.
- گیرنده هیچ کلید هویتی ندارد!
- هشدار، کلید اسکن شده مطابقت نمی کند! Ù„Ø·ÙØ§ متن اثر انگشت را با دقت بررسی کنید.
- تایید نشده!
- کلید آنها درست است. همچنین لازم است کلید خود را با آنها بررسی کنید.
- تایید شده!
- شما یک کلید هویت ندارد!
-
- شما کلید هویت ندارید.
- هشدار، کلید اسکن مطابقت نمی کند!
- تایید نشده!
- کلید اسکن شده مطابقت می کند!
- تایید شده!
- اثر انگشت هویت شما
+ به نظر می رسد شما هیچ برنامه ای برای اشتراک گذاری در آن ندارید.
آغاز با وجود درخواست های موجود؟
ارسال
@@ -403,6 +473,8 @@
واردکردن در ØØ§Ù„ Ù¾ÛŒØ´Ø±ÙØª
واردکردن پیام های متنی
+ واردکردن کامل شد!
+ وارد کردن دیتابیس سیستم کامل شد.
برای باز کردن لمس کنید.
برای باز کردن لمس کنید، یا لمس کنید Ù‚ÙÙ„ را برای بستن.
@@ -421,6 +493,7 @@
پیام رسانه
پاسخ
+ پاسخگوی سریع هنگامی Ú©Ù‡ Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø± سیگنال Ù‚ÙÙ„ باشد ØºÛŒØ±ÙØ¹Ø§Ù„ می‌شود.
بروز خطا در ارسال پیام!
سیگنال
@@ -431,6 +504,7 @@
ویدئو
مخاطب
دوربین
+ موقعیت
عبارت عبور قدیمی
عبارت عبور جدید
@@ -454,6 +528,7 @@
ارسال پیام سیگنال
ارسال نا امن SMS
ارسال نا امن MMS
+ از %1$s
ارسال
ØØ°Ù
مکالمه با %1$s
@@ -461,6 +536,7 @@
تعویض ØµÙØÙ‡ کلید Ø´Ú©Ù„Ú©
پیوست تصویر کوچک
+ بکشید تا کنسل شود
دانلود پیام رسانه
پیام رسانه
@@ -475,6 +551,7 @@
Ø¯Ø±ÛŒØ§ÙØª
تصویر مخاطب
در ØØ§Ù„ دانلود
+
ØØ§Ù„ت انتخاب دسته ای
%s منتخب
@@ -482,28 +559,61 @@
کشورهای در ØØ§Ù„ بارگذاری ...
جستجو
+ برای پیوند دادن، تصویر QR نمایش داده شده روی دستگاه را اسکن کنید.
- ارتباط دستگاه
+ اتصال دستگاه
- هیچ دستگاه های مرتبط ...
- ارتباط دستگاه جدید
+ هیچ دستگاهی متصل نشده است!
+ اتصال دستگاه جدید
ادامه
+
+ خاموش
+
+ - ثانیه %d
+
+ %d ثانیه
+
+ - دقیقه %d
+
+ %d دقیقه
+
+ - ساعت %d
+
+ %d ساعت
+
+ - روز %d
+
+ %d روز
+
+ - Ù‡ÙØªÙ‡ %d
+
+ %d Ù‡ÙØªÙ‡
+
+
+ نمی توانیم ÙØ§ÛŒÙ„ گزارش را در دستگاه شما بخوانیم.شما Ù…ÛŒ توانید از طریق ADB گزارش دیباگ را Ø¯Ø±ÛŒØ§ÙØª کنید.
تشکر از کمک شما!
ارسال
ارسال سیاهه های مربوط به جان کلام ...
+ هیچ مرورگری نصب نشده است
دوست دارید که پیام های گوشی داخل دیتابیس رمزنگاری شده وارد شوند؟
+ پايگاه داده‌ی Ù¾ÙŠØ´â€ŒÙØ±Ø¶ سيستم، به هيچ وجه دستکاری يا تغيير نخواهد کرد
پرش
وارد کردن
+ ممکن است مدتی طول بکشد. Ù„Ø·ÙØ§ صبر نماييد. پس از پایان ورود اطلاعات، به شما اطلاع می‌دهيم.
وارد کردن
به روز رسانی پایگاه داده ...
خروجی Ú¯Ø±ÙØªÙ† پشتیبان ساده
+ تهيه‌ی ÙŠÚ© نسخه‌ی پشتيبان هماهنگ با \'SMS Backup & Restore\' در ØØ§Ùظه.
واردکردن پایگاه داده سیستم SMS
+ وارد کردن دیتابیس از برنامه پیام رسان Ù¾ÛŒØ´ÙØ±Ø¶ سیستم.
بازگرداندن نسخه پشتیبان رمزگذاری شده
+ بازگرداندن يک نسخه‌ی پشتيبان رمز‌گذاری‌شده‌ی پيشين سيگنال
وارد کردن پشتیبان ساده
+ بارگيری ÙŠÚ© ÙØ§ÙŠÙ„ متنی پشتيبان. دارای هم‌خوانی با \'SMS Backup & Restore.\'
Ú¯ÙØªÚ¯Ùˆ کامل را ببینید
@@ -512,10 +622,16 @@
تأیید کردن
ارسال دوباره
+ تنظیمات دستی MMS برای دستگاه شما نیاز است.
ÙØ¹Ø§Ù„
غیر ÙØ¹Ø§Ù„
تنظیم نشده
+ متن وارد شده یک لینک معتبر نیست
+ متن وارد شده یک ÙØ¶Ø§ÛŒ معتبر نیست
+
+ - %1$s به گروه Ø§ÙØ²ÙˆØ¯Ù‡ شد.
+
گروه به روز شد.
نام گروه در ØØ§Ù„ ØØ§Ø¶Ø± \'%1$s\'.
@@ -531,7 +647,6 @@
بلوک
رنگ
رنگ برای این مخاطب
- تشخیص هویت
تماس سیگنال
پایان تماس
@@ -539,35 +654,52 @@
لال
تماس سیگنال
+
+شماره‌ی خود را تایید کنید تا به سیگنال متصل شوید.
کشور شما
کد کشور شما و
شماره تلÙÙ†
شماره تلÙÙ†
ثبت نام
+ هنگام ثبت‌نام بعضی از اطلاعات مخاطبین به سرور ÙØ±Ø³ØªØ§Ø¯Ù‡ می‌شود. ذخیره نخواهد شد.
طراØÛŒ شده توسط twilio
برخی از مشکلات Ø§ØØªÙ…الی
عبارتند از:
پیامک رهگیر.
تعداد نادرست.
+
+Ù„Ø·ÙØ§ بازبینی کنید Ú©Ù‡ آیا شماره خود را درست وارد کرده اید Ùˆ شماره دارای کد کشور می‌باشد.
Google Voice
+ سیگنال با Google Voice numbers کارنخواهد کرد.
تأیید صدا
+
+
+سیگنال می‌تواند همچنین از طریق تماس تلÙÙ†ÛŒ شماره‌ی شما را تایید کند.
+\'تماس با من\' را انتخاب کنید و کد ۶ رقمی را که می‌شنوید اینجا وارد کنید.
تأیید کردن
تماس با من
ویرایش شماره
خطای اتصال.
+ سیگنال نمی تواند با سرور ارتباط برقرار کند.
برخی ممکن
مشکلات عبارتند از:
بدون شبکه
اتصال.
+ دستگاه شما نیازمند دسترسی به اینترنت برای Ø§Ø³ØªÙØ§Ø¯Ù‡ از امکانات سیگنال می‌باشد. Ù„Ø·ÙØ§ از اتصال دستگاه خود به یک شبکه وای-ÙØ§ÛŒ یا دیتا موبایل اطمینان ØØ§ØµÙ„ کنید.
Ù…ØØ¯ÙˆØ¯ کردن دیواره آتش
+
+اگر به یک شبکه وای-ÙØ§ÛŒ وصل شده اید, Ø§ØØªÙ…ال این وجود دارد Ú©Ù‡ یک ÙØ§ÛŒØ±ÙˆØ§Ù„ مانع ارتباط شما با سرور های سیگنال شده است. به یک شبکه دیگر وصل شوید یا از دیتا موبایل Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید.
-سیگنال الآن به صورت اتوماتک شماره شما را با اس ام اس تايید میکند.
+سیگنال الآن به صورت اتوماتک شماره شما را با اس‌ام‌اس تايید میکند.
اتصال ...
در ØØ§Ù„ انتظار برای اس ام اس
تایید ...
ثبت نام با سرور ...
+ این ممکن است Ù„ØØ¸Ø§ØªÛŒ طول بکشد. Ù„Ø·ÙØ§ صبور باشید،ما هنگامی Ú©Ù‡ اعتبار سنجی کامل شد به شما اطلاع Ù…ÛŒ دهیم.
+
+سیگنال در انتظار پیامک تائید هویت از دسترس خارج شد.
SMS تایید
ناموÙÙ‚.
تولید کلید های ...
@@ -576,14 +708,15 @@
بررسی
نام یا شماره را وارد کنید
- اضاÙÙ‡ کردن کاربر
-
- هویت خود (آنها به عنوان خوانده شده):
- هویت خود (شما بخوانید):
+ Ø§ÙØ²ÙˆØ¯Ù† اعضاء
+
+ برای جستجو ضربه بزنید
+
برخی از مسائل نیاز به توجه شما دارند.
ÙØ±Ø³ØªØ§Ø¯Ù‡
رسیده
+ نشان داده نشده ها
از طریق
به:
از:
@@ -593,19 +726,17 @@
رمز را وارد کنید
انتخاب مخاطب‌ها
شناسایی سیگنال
- کلید هویت عمومی
تغییر رمز
- تشخیص هویت
+ ارسال گزارش اشکال‌زدایی
پیش نمایش رسانه
همه تصاویر
همه عکس ها با %1$s
جزییات پیام
- مدیریت دستگاه های مرتبط
+ دستگاه‌های متصل‌شده
دعوت دوستان
Ú¯ÙØªÚ¯ÙˆÙ‡Ø§ÛŒ آرشیو شده
وارد کردن / خروجی Ú¯Ø±ÙØªÙ†
- کلید هویت شما
Ø§Ø³ØªÙØ§Ø¯Ù‡ از پیش ÙØ±Ø¶
Ø§Ø³ØªÙØ§Ø¯Ù‡ از Ø³ÙØ§Ø±Ø´ÛŒ
بی صدا به مدت 1 ساعت
@@ -644,10 +775,16 @@
تغییر رمز
تغییر رمز شما
ÙØ¹Ø§Ù„‌سازی رمز
- امنیت ØµÙØÙ‡ نمایش
+ Ù‚ÙÙ„ کردن سیگنال Ùˆ اطلاعیه پیام ها با یک Ù‚ÙÙ„ عبور
+ Ù…ØØ§Ùظ ØµÙØÙ‡ نمایش
بلوک کردن عکس Ú¯Ø±ÙØªÙ† از ØµÙØÙ‡ در لیست تازه Ùˆ در داخل برنامه
+ Ù‚ÙÙ„ کردن خودکار سیگنال بعد از یک زمان مشخص عدم ÙØ¹Ø§Ù„یت
+ ÙØ§ØµÙ„Ù‡ عدم ÙØ¹Ø§Ù„یت Ù‚ÙÙ„ خودکار
+ ÙØ§ØµÙ„Ù‡ زمان عدم ÙØ¹Ø§Ù„یت
اطلاعیه‌ها
ÙØ¹Ø§Ù„ کردن اعلان های پیام
+ اطلاعیه های مخاطبین جدید
+ نمایش یک اطلاعیه برای مخاطبین جدید سیگنال
رنگ چراغ ال‌ای‌دی
ناشناخته
الگوی چشمک زدن
@@ -688,16 +825,21 @@
عامل کاربر MMS
تنظیمات MMS دستی
Ø§Ø³ØªÙØ§Ø¯Ù‡ از کتابچه تنظیمات MMS
+ رونویسی کردن تنظیمات MMS سیستم با اطلاعات زیر.
MMSC URL
MMS پروکسی میزبان
MMS پروکسی پورت
MMSC نام کاربری
MMSC رمز عبور
گزارش های تØÙˆÛŒÙ„ پیام کوتاه
+ درخواست گزارش تØÙˆÛŒÙ„ پیام برای هر پیامی Ú©Ù‡ شما ارسال Ù…ÛŒ کنید.
+ وقتی طول یک Ú¯ÙØªÚ¯Ùˆ از ØØ¯ خاصی بیشتر شد، پیام‌های قدیمی آن را را ØØ°Ù Ú©Ù†
ØØ°Ù پیام‌های قدیمی
چت و رسانه
Ù…ØØ¯ÙˆØ¯ÛŒØª طول Ú¯ÙØªÚ¯Ùˆ
- دستگاه ها
+ ØØ°Ù پیام‌های قدیمی، همین ØØ§Ù„ا
+ اسکن از طریق تمام Ú¯ÙØªÚ¯ÙˆÙ‡Ø§ Ùˆ اجرای Ù…ØØ¯ÙˆØ¯ÛŒØª طول Ú¯ÙØªÚ¯ÙˆÙ‡Ø§
+ دستگاه‌های متصل‌شده
روشن
تیره
ظاهر برنامه
@@ -705,15 +847,19 @@
پیش ÙØ±Ø¶
زبان
تماس ها و پیام های سیگنال
+ پیام های خصوصی و تماس رایگان به کاربران سیگنال
ارسال گزارش اشکال‌زدایی
\'وای ÙØ§ÛŒ تلÙÙ†\' ØØ§Ù„ت سازگاری
+ اگر دستگاه شما از تØÙˆÛŒÙ„ SMS/MMS ØªØØª WIFI Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کند آنرا ÙØ¹Ø§Ù„ کنید.(Ùقط زمانی ÙØ¹Ø§Ù„ کنید Ú©Ù‡ \"WIFI Calling\" روی دستگاه شما ÙØ¹Ø§Ù„ شده باشد)
اطلاعات تماس مسدود
نمایش در اعلان ها
هنگام Ø§Ø³ØªÙØ§Ø¯Ù‡ از داده های تلÙÙ† همراه
هنگام Ø§Ø³ØªÙØ§Ø¯Ù‡ از Wi-Fi
در هنگام رومینگ
رسانه دانلودخودکار
+ برش دادن پیام
سیستم Ø§Ø³ØªÙØ§Ø¯Ù‡ از Emoji
+ ØºÛŒØ±ÙØ¹Ø§Ù„ کردن پشتیبانی از Ø´Ú©Ù„Ú© های ساخته شده سیگنال
@@ -739,6 +885,10 @@
پیام ÙØ±Ø³ØªØ§Ø¯Ù† مجدد
ذخیره پیوست
+
+ پیامهای نشان داده نشده
+
+ پیام های در ØØ§Ù„ منقضی شدن
دعوت کردن
@@ -747,6 +897,7 @@
ØØ°Ù انتخاب شده ها
انتخاب همه
بایگانی انتخاب شده ها
+ غیربایگانی کردن انتخاب شده ها
جستجو
@@ -756,8 +907,6 @@
Ú¯ÙØªÚ¯ÙˆÛŒ جدید
- امنیت
- تشخیص هویت
تنظیم مجدد جلسه امن
وصل نمودن صدای مکالمه
@@ -781,6 +930,8 @@
پخش
مقایسه
+ نمایش QR Code شما
+ اسکن QR Code مخاطبین
پیام جدید
گروه جدید
@@ -789,18 +940,30 @@
علامت همه به عنوان خوانده شده
دعوت دوستان
Ú©Ù…Ú©
+
+ نسخه سیگنال شما قدیمی است.
+
+ - نرم Ø§ÙØ²Ø§Ø± سیگنال شما %d روز دیگر منقضی Ù…ÛŒ شود. برای بروزرسانی جدیدترین نسخه ضربه بزنید.
+
+ نرم Ø§ÙØ²Ø§Ø± سیگنال شما امروز منقضی Ù…ÛŒ شود. برای بروزرسانی جدیدترین نسخه ضربه بزنید.
+ نسخه نرم Ø§ÙØ²Ø§Ø± سیگنال شما منقضی شده است.
+ پیام ها دیگر با موÙقیت ارسال نمی‌شوند. لمس کنید برای بروزرسانی به آخرین نسخه موجود.
بروزرسانی
تنظیم به عنوان برنامه Ù¾ÛŒØ´â€ŒÙØ±Ø¶ پیامک
ضربه بزنید تا برنامه پیش ÙØ±Ø¶ SMS را تغییر دهید
تنظیم
وارد کردن SMS سیستم
+ برای کپی کردن پیام های گوشی داخل دیتابیس رمزنگاری شده تپ کنید.
وارد کردن
ÙØ¹Ø§Ù„ کردن تماس ها Ùˆ پیام های سیگنال
+ تجربه ارتباط خود را ارتقا دهید.
ÙØ¹Ø§Ù„ کردن
دعوت به سیگنال
+ مکالمه خود را با %1$s به مرØÙ„Ù‡ بعد ببرید.
دعوت كردن
دوستانت رو دعوت کن
+ بیشتر دوستانتان از سیگنال Ø§Ø³ØªÙØ§Ø¯Ù‡ میکنند, بهتره اون بگیرید
اشتراک گذاری
بستن
@@ -810,6 +973,7 @@
دخیره
+ همه را ذخیره کن
پیش نمایش تصویر
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index b9c0261a84d..ae28bb335f5 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -5,6 +5,8 @@
Ei
Poista
Odota hetki...
+
+ Uusi viesti
Tällä hetkellä: %s
Et ole vielä määritellyt salalausetta!
@@ -62,12 +64,8 @@
Saapuva puhelu
- Yhteystiedon
-%1$s identiteettiavain on vaihtunut. Tämä voi tarkoittaa joko sitä, että joku yrittää kaapata
-viestiliikennettänne, tai sitä, että %2$s on uudelleenasentanut Signalin, ja siksi käyttää nyt
-uutta identiteettiavainta.
- Saatat haluta varmentaa
-tämän yhteystiedon.
+ Turvanumerosi yhteystiedon %1$s kanssa on vaihtunut. Tämä voi tarkoittaa joko sitä, että joku yrittää kaapata viestiliikennettänne, tai sitä, että %2$s on vain yksinkertaisesti asentanut Signalin uudelleen.
+ Saatat haluta varmentaa turvanumerosi tämän yhteystiedon kanssa.
Hyväksy
Viesti %s
@@ -87,7 +85,7 @@ tämän yhteystiedon.
Käytetäänkö salaamattomia MMS-viestejä?
Tätä viestiä ei voida salata, koska vastaanottaja ei enää käytä Signalia.\n\nLähetetäänkö salaamattomana?
Median avaamiseen ei löytynyt sovellusta.
- lähetetty SIM-kortilta %s
+ SIM-kortilta %s
vastaanotettu SIM-kortille %s
Alusta suojattu istunto?
@@ -126,13 +124,14 @@ tämän yhteystiedon.
MMS ei ole tuettu
Tätä viestiä ei voida lähettää, koska operaattorisi ei tue MMS-viestejä.
Valitse yhteystieto
- Poista esto?
- Haluatko varmasti poistaa eston tältä yhteystiedolta?
+ Poista esto tältä yhteystiedolta?
+ Jatkossa voit taas saada viestejä ja puheluita tältä yhteystiedolta.
Poista esto
Liitetiedosto ylittää kyseisen viestityypin kokorajoituikset.
Kamera ei käytettävissä
Äänen nauhoitus ei onnistunut!
Virhe ääniviestin lähettämisessä...
+ Laitteessasi ei ole sovellusta, joka osaa avata tämän linkin.
Viestin tiedot
Tyyppi: %1$s
@@ -150,8 +149,25 @@ Vastaanotettu: %4$s
- Tämä poistaa pysyvästi kaikki %1$d valittua viestiä.
Kopioi tallennustilaan?
- Onnistui!
+
+ - Jos kopioit tämän tiedoston laitteesi tallennustilaan, niin kaikki muutkin sovellukset saavat oikeuden käyttää sitä.\n\nHaluatko jatkaa?
+ - Jos kopioit kaikki %1$d tiedostoa laitteesi tallennustilaan, niin kaikki muutkin sovellukset saavat oikeuden käyttää niitä.\n\nHaluatko jatkaa?
+
+
+ - Virhe tallennettaessa liitetiedostoa laitteesi tallennustilaan!
+ - Virhe tallennettaessa liitetiedostoja laitteesi tallennustilaan!
+
+ Tiedoston tallennus onnistui.
Tallennustilaan kirjoitus epäonnistui!
+
+ - Tallennetaan liitetiedostoa
+ - Tallennetaan %1$d liitetiedostoa
+
+
+ - Tallennetaan liitetiedostoa tallennustilaan...
+ - Tallennetaan %1$d liitetiedostoa tallennustilaan...
+
+ Kerätään liitetiedostoja...
Käsiteltävänä...
Tietoverkko (Signal)
MMS
@@ -160,6 +176,7 @@ Vastaanotettu: %4$s
Viestejä poistetaan...
Hae...
+ Laitteessasi ei ole verkkoselainta asennettuna.
- Poistetaanko valittu keskustelu?
@@ -189,7 +206,7 @@ Vastaanotettu: %4$s
Käytä oletusta: %s
Ei asetettu
- Nyt
+ Juuri äsken
%d min
Poista \'%s\'?
@@ -221,10 +238,15 @@ Vastaanotettu: %4$s
Viedään salaamattomana tallennustilaan...
Virhe: tallennustilaan kirjoitus epäonnistui.
Tallennustilaan kirjoitettaessa sattui virhe.
- Onnistui!
+ Vienti onnistui.
Pysyvä Signal-yhteysvirhe!
Signal ei voinut rekisteröityä Google Play Services -palveluun, minkä vuoksi Signal-viestit ja puhelut ovat otettu pois käytöstä. Kokeile rekisteröityä uudelleen Signalin lisäasetuksista.
+
+ Täysikokoisen GIFin lataaminen epäonnistui...
+
+ GIFit
+ Tarrat
Uusi ryhmä
Päivitä ryhmää
@@ -274,15 +296,15 @@ seuraa niiden uudelleentuonnista viestien kaksoiskappaleita.
Pidä pohjassa nauhoittaaksesi ääniviestin ja päästä irti lähettääksesi sen
Jaa
- Lähetä SMS
+ Valitse yhteystietoja
Peruuta
Lähetetään...
Sydän
Kutsut lähetetty!
Kutsu Signaliin
-
- - LÄHETÄ 1 YSTÄVÄLLE
- - LÄHETÄ %d YSTÄVÄLLE
+
+ - LÄHETÄ SMS 1 YSTÄVÄLLE
+ - LÄHETÄ SMS %d YSTÄVÄLLE
- Lähetä 1 SMS-kutsu?
@@ -290,14 +312,14 @@ seuraa niiden uudelleentuonnista viestien kaksoiskappaleita.
Hei, vaihdetaan Signaliin: %1$s
Näyttää siltä, ettei sinulla ole yhtään sovellusta, johon jakaa.
- Kaveri ei anna kaverin keskustella salaamattomasti.
+ Kaveri ei anna kaverin keskustella ilman salausta.
Ei löytynyt skannattavaa avainta!
Asenna \"Barcode Scanner\" -viivakoodinlukija?
Signal tarvitsee \"Barcode Scanner\" -sovelluksen QR-koodeja varten.
Lähetys epäonnistui
- Uusi identiteetti
+ Uusi turvanumero
Virhe multimediaviestin tallentamisessa!
Virhe yhdistettäessä MMS-palveluntarjoajaan...
@@ -322,6 +344,9 @@ seuraa niiden uudelleentuonnista viestien kaksoiskappaleita.
Soitit puhelun: %s
Vastaamatta jäänyt puhelu: %s
%s käyttää myös Signalia. Sano hei!
+ Sinä asetit viestien katoamisajan: %1$s
+ %1$s asetti viestien katoamisajan: %2$s
+ Sinun ja yhteystiedon %s turvanumero on vaihtunut.
Salalauseet eivät täsmää!
Vanha salalause on väärin!
@@ -345,6 +370,10 @@ seuraa niiden uudelleentuonnista viestien kaksoiskappaleita.
Valitettavasti tämä ei ole laitteen yhdistämiseksi tarkoitettu QR-koodi.
Yhdistetäänkö Signal-laite?
Vaikuttaa siltä, että yrität yhdistää laitetta käyttämällä Signalin ulkopuolista skannaussovellusta. Oman turvallisuutesi vuoksi skannaa QR-koodi uudelleen Signalilla itsellään.
+
+ Katoavat viestit
+ Viestisi eivät vanhene.
+ Lähetetyt ja vastaanotetut viestit katoavat tästä keskustelusta %s siitä, kun ne on nähty.
Syötä salalause
Signal-kuvake
@@ -358,12 +387,13 @@ seuraa niiden uudelleentuonnista viestien kaksoiskappaleita.
Arvostele nyt!
Ei kiitos
Myöhemmin
+ Ups, vaikuttaa siltä, että Play Store -sovellus ei ole asennettuna laitteeseesi.
Estä tämä yhteystieto?
- Jatkossa et enää saa viestejä etkä puheluita tältä yhteystiedolta.
+ Jatkossa et enää saa viestejä etkä puheluita tältä yhteystiedolta.
Estä
Poista esto tältä yhteystiedolta?
- Haluatko varmasti poistaa eston tältä yhteystiedolta?
+ Jatkossa voit taas saada viestejä ja puheluita tältä yhteystiedolta.
Poista esto
Päällä
Poissa päältä
@@ -445,9 +475,9 @@ Tarkista vielä, että tämä on varmasti numerosi! Aiomme seuraavaksi vahvistaa
on viallinen!
Vastaanotetiin avaintenvaihtoviesti, joka kuuluu väärälle protokollaversiolle.
- Vastaanotettiin viesti tuntemattomalla identiteettiavaimella. Aloita käsittely napsauttamalla.
- Vastaanotettiin päivitetty, mutta tuntematon identiteetti. Varmenna identiteetti napsauttamalla.
- Suojattu istunto alustettu
+ Vastaanotettiin viesti uudella turvanumerolla. Aloita käsittely napsauttamalla.
+ Sinä alustit suojatun istunnon.
+ %s alusti suojatun istunnon.
Viestin kaksoiskappale.
Poistui ryhmästä...
@@ -458,22 +488,16 @@ Vastaanotetiin avaintenvaihtoviesti, joka kuuluu väärälle protokollaversiolle
Vastaamatta jäänyt puhelu
Mediaviesti
%s käyttää myös Signalia. Sano hei!
+ Katoavien viestien ajaksi asetettu %s
+ Sinun ja yhteystiedon %s turvanumero on vaihtunut.
- (Sinulla ei ole identiteettiavainta.)
- (Vastapuolella ei ole identiteettiavainta.)
- Vastapuolella ei ole identiteettiavainta!
- VAROITUS: Skannattu avain EI TÄSMÄÄ! Tarkastakaa sormenjälki huolella.
- EI varmennettu!
- Vastapuolen avain on oikea. Huomaa, että hänen on syytä tarkastaa vastaavasti sinun avaimesi.
- Varmennettu!
- Sinulla ei ole identiteettiavainta!
-
- (Sinulla ei ole identiteettiavainta.)
- VAROITUS: Skannattu avain EI TÄSMÄÄ!
- EI vahvistettu!
- Skannattu avain täsmää!
- Varmennettu!
- Identiteettisi sormenjälki
+ Yhteystietosi käyttää vanhaa versiota Signalista. Pyydä häntä päivittämään, jotta voit varmentaa turvanumeron.
+ Yhteystietosi käyttää uudempaa versiota Signalista, jonka QR-koodi ei toimi oman versiosi kanssa. Päivitä Signalisi uusimpaan versioon.
+ Skannaamasi QR-koodi ei ole oikeanmallinen turvanumerokoodi. Yritä skannata uudelleen.
+ Jaa turvanumero...
+ Meidän Signal-turvanumeromme:
+ Näyttää siltä, ettei sinulla ole yhtään sovellusta, johon jakaa.
+ Leikepöydältä ei löytynyt turvanumeroa, johon verrata
Aloita olemassa olevasta pyynnöstä huolimatta?
Lähetä
@@ -501,9 +525,11 @@ Vastaanotetiin avaintenvaihtoviesti, joka kuuluu väärälle protokollaversiolle
Tuonti käynnissä
Tuo tekstiviestejä
+ Tuonti valmis
+ Järjestelmän tekstiviestitietokannan tuonti Signaliin on valmis.
Siirry takaisin sovellukseen koskettamalla tästä.
- Avaa sovellus koskettamalla tästä tai lukitse se koskettamalla lukkoa
+ Lukitse sovellus koskettamalla lukkoa.
Signalin lukitus on auki
Lukitse salalauseella
@@ -527,11 +553,20 @@ Vastaanotetiin avaintenvaihtoviesti, joka kuuluu väärälle protokollaversiolle
Uusi viesti
Kuva
+ Kuva
Äänitallenne
+ Äänitallenne
Video
+ Video
Yhteystieto
+ Yhteystieto
Kamera
+ Kamera
Sijainti
+ Sijainti
+ GIF
+ Gif
+ Avaa tai sulje liitetiedostovalikko
Vanha salalause
Uusi salalause
@@ -553,15 +588,18 @@ Vastaanotetiin avaintenvaihtoviesti, joka kuuluu väärälle protokollaversiolle
Keskustelu mykistetty
Lähetä Signal-viesti
- Lähetä salaamaton tekstiviesti
+ Lähetä salaamaton SMS
Lähetä salaamaton MMS-viesti
+ SIM-kortilta %1$s
Lähetä
Poista
Keskustelu %1$s kanssa
Viestin kirjoitus
- Näytä tai piilota emoji-näppäimistö
+ Avaa tai sulje emoji-näppäimistö
Liitteen esikatselu
- Pikakamera
+ Avaa tai sulje pikakamera
+ Nauhoita ja lähetä ääniviesti
+ Käytä Signalia tekstiviesteille
Pyyhkäise peruuttaaksesi
@@ -578,6 +616,10 @@ Vastaanotetiin avaintenvaihtoviesti, joka kuuluu väärälle protokollaversiolle
Lataa
Yhteystiedon kuva
Ladataan
+
+ Toista
+ Pysäytä
+ Lataa
Valitse useampi
%s valittu
@@ -593,11 +635,43 @@ Vastaanotetiin avaintenvaihtoviesti, joka kuuluu väärälle protokollaversiolle
Yhdistä uusi laite
jatka
+
+ pois päältä
+
+ - 1 sekunti
+ - %d sekuntia
+
+ %ds
+
+ - 1 minuutti
+ - %d minuuttia
+
+ %dm
+
+ - 1 tunti
+ - %d tuntia
+
+ %dt
+
+ - 1 päivä
+ - %d päivää
+
+ %dpv
+
+ - 1 viikko
+ - %d viikkoa
+
+ %dvk
+
+ Etsi GIFejä ja tarroja
+
+ Mitään ei löytynyt
Lokin lukeminen laitteestasi epäonnistui. Voit sen sijaan käyttää ADB-työkalua virheenkorjauslokin noutamiseen.
Kiitos avustasi!
Lähetetään
Lokia lähetetään gistiin...
+ Selainta ei ole asennettu
Napsauta, jos haluat kopioida puhelimesi tekstiviestit Signalin salattuun tietokantaan.
Järjestelmän oletustietokantaa ei tulla muuttamaan millään tavalla.
@@ -651,7 +725,7 @@ Vastaanotetiin avaintenvaihtoviesti, joka kuuluu väärälle protokollaversiolle
Estä
Väri
Tämän yhteystiedon väri
- Varmenna identiteetti
+ Varmenna turvanumero
Signal-puhelu
lopeta puhelu
@@ -693,7 +767,8 @@ sisältyvät:
Ei verkkoyhteyttä.
Laitteesi
tarvitsee verkkoyhteyttä tämän Signalin ominaisuuden käyttämiseksi. Tarkista, että
-laitteesi on yhdistettynä mobiilitiedonsiirto- tai WiFi-verkkoon.
+laitteesi
+on yhdistettynä mobiilitiedonsiirto- tai WiFi-verkkoon.
Rajoittava palomuuri.
Jos olet WiFi-verkossa, on mahdollista että palomuuri estää pääsyn Signalin palvelimelle. Kokeile toista verkkoa tai mobiiliverkkoa.
@@ -712,14 +787,17 @@ Signal ei saanut vahvistustekstiviestiä odotusajan sisällä.
Valitse
Syötä nimi tai numero
- Lisää jäsen
-
- Vastapuolen identiteetti (hän lukee):
- Oma identiteettisi (sinä luet):
+ Lisää jäseniä
+
+ Lue lisää turvanumeron varmentamisesta.]]>
+ Skannaa napsauttamalla
+
+ Jaa turvanumero
Jotkin asiat kaipaavat huomiotasi.
Lähetetty
Vastaanotettu
+ Katoamisaika
Tyyppi
Vastaanottajat:
Lähettäjä:
@@ -729,20 +807,18 @@ Signal ei saanut vahvistustekstiviestiä odotusajan sisällä.
Syötä salalause
Valitse yhteystiedot
Signal havaittu
- Julkinen identiteettiavain
Vaihda salalause
- Varmenna identiteetti
+ Varmenna turvanumero
Lähetä virheenkorjausloki
Liitteen esikatselu
Kaikki kuvat
%1$s: kaikki kuvat
Viestin tiedot
- Hallitse yhdistettyjä laitteita
+ Yhdistetyt laitteet
Kutsu ystäviä
Arkistoidut keskustelut
Varmuuskopiot
- Identiteettiavaimesi
Käytä oletusta
Käytä mukautettua
1 tunniksi
@@ -846,7 +922,7 @@ Signal ei saanut vahvistustekstiviestiä odotusajan sisällä.
Keskustelun pituusraja
Karsi kaikki keskustelut nyt
Käy läpi kaikki keskustelut ja pakota niihin pituusrajat
- Laitteet
+ Yhdistetyt laitteet
Vaalea
Tumma
Ulkonäkö
@@ -859,6 +935,8 @@ Signal ei saanut vahvistustekstiviestiä odotusajan sisällä.
\"WiFi Calling\" -yhteensopiva tila
Ota käyttöön, jos laitteesi lähettää SMS- ja MMS-viestit WiFi-yhteyden kautta. (Ota käyttöön vain, kun \"WiFi Calling\" on käytössä laitteessasi.)
Estetyt yhteystiedot
+ Turvanumeroiden hyväksyntä
+ Vaadi yhteystietojen turvanumeroiden erillistä hyväksymistä, kun ne vaihtuvat.
Ilmoituksissa näytetään
Mobiiliverkossa
Wi-Fi-verkossa
@@ -892,6 +970,10 @@ Signal ei saanut vahvistustekstiviestiä odotusajan sisällä.
Lähetä viesti uudelleen
Tallenna liite
+
+ Katoavat viestit
+
+ Viestit vanhenevat
Kutsu
@@ -910,8 +992,6 @@ Signal ei saanut vahvistustekstiviestiä odotusajan sisällä.
Uusi keskustelu
- Turvallisuus
- Varmenna identiteetti
Alusta suojattu istunto
Poista mykistys
@@ -935,6 +1015,8 @@ Signal ei saanut vahvistustekstiviestiä odotusajan sisällä.
Lähetä
Vertaile
+ Näytä oma QR-koodisi
+ Skannaa vastapuolen QR-koodi
Uusi viesti
Uusi ryhmä
@@ -943,6 +1025,9 @@ Signal ei saanut vahvistustekstiviestiä odotusajan sisällä.
Merkitse kaikki luetuiksi
Kutsu ystäviä
Tuki
+
+ Kopioi leikepöydälle
+ Vertaa leikepöytään
Käyttämäsi Signalin versio on vanhentunut!
@@ -975,7 +1060,10 @@ Signal ei saanut vahvistustekstiviestiä odotusajan sisällä.
Median tyyppiä ei tueta
Tallenna
+ Välitä
+ Kaikki kuvat
+ Tallenna kaikki
Kuvan esikatselu
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index fff366d962a..5a55ae00f74 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -5,6 +5,8 @@
Non
Supprimer
Veuillez patienter...
+
+ Nouveau message
Actuellement : %s
Vous n’avez pas encore défini de phrase de passe !
@@ -15,11 +17,11 @@
Supprimer tous les anciens messages maintenant ?
- Cela va immédiatement réduire toutes les conversations pour qu\'il ne reste que le message le plus récent.
- - Cela va immédiatement réduire toutes les conversations pour qu\'il ne reste que les %d messages les plus récents.
+ - Ceci va immédiatement réduire toutes les conversations en conservant uniquement les %d messages les plus récents.
Supprimer
Désactiver la phrase de passe ?
- Cette opération déverrouillera Signal et ses notifications de manière permanente.
+ Ceci déverrouillera Signal et ses notifications de manière permanente.
Désactiver
Annulation de l\'inscription
Annulation de l\'inscription aux messages et appels Signal...
@@ -62,9 +64,6 @@
Appel entrant
- La signature de %1$s a changée. Cela peut signifier que quelqu’un essaye d\'intercepter vos communications, ou simplement que %2$s a réinstallé Signal et possède maintenant une nouvelle clé.
- Vous devriez
-vérifier ce contact.
Accepter
Message %s
@@ -74,9 +73,9 @@ vérifier ce contact.
Expire : %s
Non délivré
Visualiser le média sécurisé ?
- Ce média a été sauvegardé dans une base de données encryptée. Malheureusement, pour pouvoir l\'afficher avec un visualiseur externe, les données doivent être temporairement décryptées et enregistrées sur ce téléphone. Êtes-vous certain de vouloir continuer ?
+ Ce média est enregistré dans une base de données chiffrée. Pour l\'ouvrir avec une autre application, il doit être temporairement déchiffré et enregistré sur cet appareil ! Êtes-vous certain de vouloir continuer ?
Erreur, un message d’échange de clés périmé a été reçu.
- Message d’échange de clés reçu, cliquez pour le traiter.
+ Un message d’échange de clés a été reçu. Appuyer pour le traiter.
%1$s a quitté le groupe.
Toucher pour les détails
Appuyez pour utiliser la solution de repli non sécurisée
@@ -123,13 +122,14 @@ vérifier ce contact.
MMS non supportés
Ce message ne peut être envoyé car votre opérateur ne supporte pas les MMS
S\'il vous plait, choisissez un contact
- Débloquer ?
- Êtes-vous sur de vouloir débloquer ce contact ?
+ Débloquer ce contact ?
+ Vous recevrez de nouveau les messages et appels de ce contact.
Débloquer
Le fichier dépasse la limite de taille pour le type de message que vous avez sélectionné.
Appareil photo non disponible
Impossible d\'enregistrer l\'audio !
Erreur lors de l\'envoi du message vocal...
+ Il n\'y a pas d\'appli disponible pour ouvrir ce lien sur votre appareil.
Détails du message
Transport: %1$s\nEnvoyé/Reçu: %2$s
@@ -145,13 +145,13 @@ vérifier ce contact.
Enregistrer dans l\'espace de stockage ?
- La sauvegarde du média dans l\'espace de stockage autorisera d\'autres applications à y accéder.\n\nContinuer ?
- - La sauvegarde des %1$d médias dans l\'espace de stockage autorisera d\'autres applications à y accéder.\n\nContinuer ?
+ - L\'enregistrement des %1$d médias dans l\'espace de stockage autorisera d\'autres applications à y accéder.\n\nContinuer ?
- Erreur lors de l\'enregistrement de la pièce jointe sur l\'espace de stockage !
- - Erreur lors de l\'enregistrement des pièces jointes sur l\'espace de stockage !
+ - Erreur lors de l\'enregistrement des pièces jointes dans l\'espace de stockage !
- Réussite !
+ Enregistrement du fichier réussi.
Impossible d’écrire dans l\'espace de stockage !
- Enregistrement de la pièce jointe
@@ -161,7 +161,7 @@ vérifier ce contact.
- Enregistrement de la pièce jointe dans l\'espace de stockage…
- Enregistrement des %1$d pièces jointes dans l\'espace de stockage…
- Collection des pièces jointes...
+ Récupération des pièces jointes...
En attente…
Données (Signal)
MMS
@@ -170,6 +170,7 @@ vérifier ce contact.
Suppression des messages...
Recherche...
+ Il n\'y a pas de navigateur installé sur l\'appareil.
- Supprimer la conversation sélectionnée ?
@@ -199,7 +200,7 @@ vérifier ce contact.
Par défaut : %s
Aucun
- À l\'instant
+ À l\'instant
%d min
Dissocier \'%s\'Â ?
@@ -229,12 +230,17 @@ vérifier ce contact.
Annuler
Exportation
Exportation en clair dans l\'espace de stockage...
- Erreur, écriture sur mémoire impossible.
+ Erreur, impossible d\'écrire dans l\'espace de stockage.
Erreur lors de l\'enregistrement dans l\'espace de stockage.
- Réussite !
+ Exportation réussie.
Échec de communication Signal permanent !
Les appels et messages Signal ont été désactivés car Signal n\'a pas pu s\'enregistrer auprès de Google Play Services. Veuillez essayer de vous enregistrer à nouveau à partir du menu Paramètres > Avancé.
+
+ Erreur lors du téléchargement du GIF en pleine résolution...
+
+ GIFs
+ Autocollants
Nouveau groupe
Mettre à jour le groupe
@@ -279,25 +285,25 @@ l\'importer à nouveau se traduira par des messages dupliqués.
Aucune sauvegarde chiffrée trouvée!
Restauration terminée !
- Appuyez et maintenez pour enregistrer un message vocal, relâchez pour envoyer.
+ Appuyez et maintenez pour enregistrer un message vocal puis relâchez pour l\'envoyer.
Partager
- Envoyer un SMS
+ Choisissez des contacts
Annuler
Envoi...
Cœur
Invitation envoyée !
Inviter sur Signal
-
- - ENVOYER À 1 AMI
- - ENVOYER À %d AMIS
+
+ - Envoyer SMS Ã un ami
+ - Envoyer SMS Ã %d amis
- Envoyer 1 invitation par SMS ?
- Envoyer %d invitations par SMS ?
- Passons à Signal: %1$s
- On dirait que vous n\'avez aucune appli vers laquelle partager.
+ Passons à Signal : %1$s
+ Il semble n\'y avoir aucune application pour partager ce contenu.
Les vrais amis ne laissent pas leur amis chatter sans chiffrement.
Aucune clé scannée n’a été trouvée !
@@ -305,7 +311,6 @@ l\'importer à nouveau se traduira par des messages dupliqués.
Signal a besoin de Barcode Scanner pour les QR codes.
Échec de l’envoi
- Nouvelle identité
Erreur d’enregistrement du MMS !
Erreur de connexion au fournisseur MMS…
@@ -323,13 +328,15 @@ l\'importer à nouveau se traduira par des messages dupliqués.
Message multimédia
- Le message reçu a été chiffré via une ancienne version de Signal, qui n\'est plus prise en charge. Merci de demander à l’expéditeur de mettre à jour Signal dans sa version la plus récente et de renvoyer le message.
+ Le message reçu est chiffré avec une ancienne version de Signal qui n\'est plus prise en charge. Veuillez demander à l’expéditeur de mettre à jour Signal et de renvoyer son message.
Vous avez quitté le groupe.
Groupe mis à jour.
%s vous a appelé
Appelé %s
Appel manqué de %s
%s est sur Signal, dites-lui bonjour !
+ Vous avez choisi %1$s comme heure de disparition du message.
+ %1$s a choisi %2$s comme heure de disparition du message.
Les phrases de passe ne correspondent pas !
Ancienne phrase de passe incorrecte !
@@ -351,7 +358,11 @@ l\'importer à nouveau se traduira par des messages dupliqués.
Désolé, vous avez associé trop d\'appareils, essayez d\'en enlever quelques-uns...
Désolé, ceci n\'est pas un QR code valide pour lier son appareil.
Lier un appareil Signal ?
- Il semble que vous essayez de lier un appareil Signal en utilisant un scanner externe. Pour votre protection, veuillez scanner le code à nouveau depuis Signal.
+ Vous semblez utiliser un scanner tiers pour associer un appareil Signal. Pour votre protection, veuillez scanner de nouveau le code depuis Signal.
+
+ Messages éphémères
+ Vos messages ne vont pas expirer.
+ Les messages envoyés et reçus dans cette conversation disparaîtront %s après avoir été vus.
Entrez la phrase de passe
Icône Signal
@@ -365,12 +376,13 @@ l\'importer à nouveau se traduira par des messages dupliqués.
Noter maintenant!
Non merci
Plus tard
+ Aïe, Play Store n\'est pas installé sur votre appareil.
Bloquer ce contact ?
- Vous ne recevrez plus de messages ou appels de cet utilisateur.
+ Vous ne recevrez plus de messages ou d\'appels de ce contact.
Bloquer
Débloquer ce contact ?
- Êtes-vous sur de vouloir débloquer ce contact ?
+ Vous recevrez de nouveau les messages et appels de ce contact.
Débloquer
Activé
Désactivé
@@ -452,9 +464,8 @@ cet appareil n\'est pas supporté pour la messagerie sur le canal de données. L
Message d\'échange!
Réception d\'un message d\'échange de clés pour une version invalide du protocole.
- Un message avec une clé de chiffrement inconnue a été reçu. Cliquer pour l\'accepter et l\'afficher.
- Nouvelle information d\'identité mise à jour mais inconnue reçue. Appuyez pour valider l\'identité.
- Session sécurisée réinitialisée.
+ Vous avez réinitialisé la session sécurisée.
+ %s a réinitialisé la session sécurisée.
Message doublon.
Groupe quitté…
@@ -465,26 +476,10 @@ Réception d\'un message d\'échange de clés pour une version invalide du proto
Appel manqué
Message média
%s est sur Signal, dites-lui bonjour !
+ Le temps de disparition des messages a été réglé à %s
- Vous n’avez pas de clé d’identité.
- Le destinataire n’a pas de clé d’identité.
- Le destinataire n’a pas de clé d’identité !
- Scanner le QR code du contact
- Afficher votre QR code
- ATTENTION, la clé analysée NE correspond PAS ! Veuillez vérifier scrupuleusement le texte de l\'empreinte.
- NON vérifié !
- Leur clé est valide. Il est aussi nécessaire de vérifier votre clé avec eux.
- Vérifié !
- Vous n’avez pas de clé d’identité.
-
- Vous n’avez pas de clé d’identité.
- Scanner le QR code du contact
- Afficher votre QR code
- ATTENTION, la clé analysée ne correspond PAS !
- NON vérifiée !
- La clé analysée correspond !
- Vérifié !
- Votre empreinte d\'identité
+ Votre contact utilise une version plus récente de Signal, avec un format de QR code incompatible. Mettez votre application à jour pour comparer.
+ Il semble n\'y avoir aucune application pour partager ce contenu.
Initier malgré la demande existante ?
Envoyer
@@ -513,7 +508,7 @@ Réception d\'un message d\'échange de clés pour une version invalide du proto
Importation en cours
Importation des messages textes
Importation terminée
- L\'importation de la base de donnée de Signal est complète.
+ L\'importation de la base de données du système est terminée.
Appuyez pour ouvrir.
Appuyez pour ouvrir, ou appuyez sur le cadenas pour fermer.
@@ -568,13 +563,14 @@ Réception d\'un message d\'échange de clés pour une version invalide du proto
Envoyer un message Signal
Envoyer un SMS non-sécurisé
Envoyer un MMS non-sécurisé
+ De %1$s
Envoyer
Supprimer
Conversation avec %1$s
Composition du message
Activer le clavier emoji
Vignette de pièce jointe
- Afficher/cacher la grille des pièces jointes
+ Activer les SMS dans Signal
GLISSEZ POUR ANNULER
@@ -591,6 +587,7 @@ Réception d\'un message d\'échange de clés pour une version invalide du proto
Télécharger
Photo de contact
Téléchargement
+
Mode de sélection par lot
%s sélectionné
@@ -606,11 +603,43 @@ Réception d\'un message d\'échange de clés pour une version invalide du proto
Lier un nouvel appareil
continuer
+
+ Off
+
+ - Une seconde
+ - %d secondes
+
+ %ds
+
+ - Une minute
+ - %d minutes
+
+ %dm
+
+ - Une heure
+ - %d heures
+
+ %dh
+
+ - Un jour
+ - %d jours
+
+ %dj
+
+ - Une semaine
+ - %d semaines
+
+ %d sem.
+
+ Rechercher GIFs et autocollants
+
+ Pas de résultat
- Impossible d\'accéder au registre de votre appareil. Utilisez ADB pour obtenir un rapport de débogage.
+ Impossible d\'accéder aux journaux de votre appareil. Utilisez ADB pour obtenir un rapport de débogage.
Merci pour votre aide !
Soumission
Envoi des logs sur gist...
+ Aucun navigateur installé
Voulez-vous importer vos messages existant dans la base de données chiffrée de Signal ?
La base de données par défaut du système ne sera en aucune façon modifiée ou altérée.
@@ -621,13 +650,13 @@ Réception d\'un message d\'échange de clés pour une version invalide du proto
Mise à jour de la base de donnée...
Exporter une sauvegarde en clair
- Exporter une sauvegarde en clair compatible avec «SMS Backup & Restore»
+ Exporter une sauvegarde en clair compatible avec "SMS Backup & Restore"
Importer la base de données SMS du système
Importer la base de données depuis l\'application SMS par défaut
- Restaurer sauvegarde chiffrée
+ Restaurer la sauvegarde chiffrée
Restaurer une sauvegarde chiffrée précédemment avec Signal
Importer la sauvegarde en clair
- Importer un fichier de sauvegarde en clair. Compatible avec «SMS Backup & Restore»
+ Importer une sauvegarde en clair compatible avec "SMS Backup & Restore"
Voir la conversation complète
@@ -653,8 +682,8 @@ Réception d\'un message d\'échange de clés pour une version invalide du proto
Déverrouiller
Signal requiert que vos paramètres MMS envoient les contenus média et les messages de groupe à l\'aide de votre opérateur mobile. Votre appareil ne met pas cette information à disposition, ce qui est parfois vrai pour les appareils verrouillés et/ou autres configurations restrictives.
- Pour envoyer du contenu multimédia et des messages de groupe, appuyez sur \'OK\' et complétez les champs requis.
-Les paramètres MMS de votre opérateur peuvent généralement obtenus en recherchant \'APN <nom de l\'opérateur>\'. Vous ne devrez effectuer cette opération qu\'une seule fois.
+ Pour envoyer du contenu multimédia et des messages de groupe, appuyer sur \"OK\" et compléter les champs requis.
+Les paramètres MMS de votre opérateur peuvent généralement être obtenus en recherchant \"l\'APN de votre opérateur\". Cette opération ne doit être effectuée qu\'une seule fois.
BLOQUÉ
@@ -665,7 +694,6 @@ Les paramètres MMS de votre opérateur peuvent généralement obtenus en recher
Bloquer
Couleur
Couleur pour ce contact
- Vérifier l\'identité
Appel Signal
Terminer l\'appel
@@ -711,7 +739,7 @@ Signal peut aussi vous appeler pour vérifier votre numéro. Appuyez sur \'Appel
possibles sont:
Pas de connexion
au réseau.
- Votre appareil a besoin d\'une connectivité réseau pour pouvoir utiliser cette fonctionnalité Signal. Vérifiez qu\'il soit connecté à la 3G ou au Wi-Fi.
+ Votre appareil a besoin d\'une connexion réseau pour pouvoir utiliser cette fonctionnalité de Signal. Vérifiez que la connexion mobile ou le WiFi est activé.
Pare-feu restrictif.
Si vous êtes connectés au Wi-Fi, Il est possible qu\'un pare-feu bloque l\'accès
@@ -734,14 +762,15 @@ par SMS.
Vérification
Entrez un nom ou un numéro
- Ajouter un membre
-
- Leur identité (ce qu\'ils lisent) :
- Votre identité (ce que vous lisez) :
+ Ajouter des membres
+
+ Appuyer pour scanner
+
Des problèmes requièrent votre attention.
Envoyé
Reçu
+ Disparition
Via
Pour :
De :
@@ -751,27 +780,24 @@ par SMS.
Entrez la phrase de passe
Sélectionner des contacts
Signal détecté
- Clé d’identité publique
Modifier la phrase de passe
- Vérifier l’identité
Envoyer un rapport de débogage
Aperçu du média
Toutes les images
Toutes les images avec %1$s
Détails du message
- Gérer les appareils associés
+ Appareils liés
Inviter des amis
Conversations archivées
Importer / exporter
- Votre clé d\'identité
Par défaut
Personnalisé
Pendant 1 heure
Pendant 2 heures
Pendant 1 jour
Pendant 7 jours
- Pendant 1 an
+ Mettre en sourdine pendant 1 an
Paramètres par défaut
Activé
Désactivé
@@ -868,7 +894,7 @@ par SMS.
Limite de taille de la conversation
Réduire toutes les conversations maintenant
Scanner toutes les conversations et imposer les limites de longueur pour les conversations
- Appareils
+ Appareils liés
Clair
Sombre
Apparence
@@ -881,6 +907,8 @@ par SMS.
Compatibilité \'WiFi Calling\'
Activer si votre appareil délivre les SMS/MMS à l\'aide du WiFi (n\'activer que si \"WiFi Calling\" est activé sur votre appareil).
Contacts bloqués
+ Approbation des numéros de sécurité
+ Nécessite d\'approuver les numéros de sécurité lorsqu\'ils changent
Afficher dans les notifications
Avec les données mobiles
Avec le WI-FI
@@ -914,6 +942,10 @@ par SMS.
Renvoyer le message
Enregistrer la pièce jointe
+
+ Disparition des messages
+
+ Les messages expirent
Inviter
@@ -932,8 +964,6 @@ par SMS.
Nouvelle conversation
- Sécurité
- Vérifier l’identité
Réinitialiser la session sécurisée
Réactiver les notifications
@@ -967,13 +997,16 @@ par SMS.
Tout marquer comme lu
Inviter des amis
Aide
+
+ Copier dans le presse-papiers
+ Comparer au presse-papiers
Votre version de Signal est trop ancienne
- Votre version de Signal va expirer dans 1 jour. Appuyer pour mettre à jour vers la version la plus récente.
- - Votre version de Signal va expirer dans %d jours. Appuyer pour mettre à jour vers la version la plus récente.
+ - Cette version de Signal expire dans %d jours. Appuyer pour installer la version la plus récente.
- Votre version de Signal va expirer aujourd\'hui. Appuyer pour mettre à jour vers la version la plus récente.
+ Cette version de Signal expire aujourd\'hui. Appuyer pour installer la version la plus récente.
Votre version de Signal a expirée!
Les messages ne pourront plus être envoyés, veuillez installer la dernière version.
METTRE À JOUR
@@ -981,7 +1014,7 @@ par SMS.
Appuyez pour faire de Signal votre application SMS par défaut.
Modifier
Importer les SMS du système
- Appuyez ici pour copier vos messages SMS dans la base de données de Signal.
+ Appuyez pour importer vos messages SMS dans la base de données chiffrée de Signal.
IMPORTER
Activer les messages et appels Signal
Améliorez votre expérience de communication.
@@ -999,6 +1032,7 @@ par SMS.
Type de média non supporté
Enregistrer
+ Suivant
Tout sauvegarder
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
new file mode 100644
index 00000000000..af7fcc99b93
--- /dev/null
+++ b/res/values-gl/strings.xml
@@ -0,0 +1,872 @@
+
+
+ Signal
+ Si
+ Non
+ Borrar
+ Por favor, agarda...
+
+ Nova mensaxe
+
+ Actualmente: %s
+ AÃnda non tes establecida unha frase de acceso!
+
+ - 1 mensaxe por conversa
+ - %d mensaxes por conversa
+
+ Borrar todas as mensaxes antigas?
+
+ - Isto reducirá todas as conversas á mensaxe máis recente.
+ - Isto reducirá todas as conversas ás %d mensaxes máis recentes.
+
+ Borrar
+ Desactivar frase de acceso?
+ Isto desbloqueará de xeito permanente Signal e as notificacións de mensaxes.
+ Desactivar
+ Anulando o rexistro
+ Anulando o rexistro de mensaxes e chamadas de Signal...
+ Desactivar as mensaxes e chamadas en Signal?
+ Desactiva as mensaxes e chamadas vÃa Signal anulando o rexistro no servidor. Necesitarás volver rexistrar o teu número en caso de querer volver usalo.
+ Erro ao se conectar ao servidor!
+ SMS activadas
+ Toca para cambiar a túa app predefinida de SMS
+ SMS desactivadas
+ Toca para facer de Signal a túa app predefinida de MMS
+ activada
+ On
+ desactivada
+ Off
+ SMS %1$s, MMS %2$s
+ Frase de acceso %1$s, pantalla de seguranza %2$s
+ Tema %1$s, Idioma %2$s
+
+
+ - 1 minuto
+ - %d minutos
+
+
+ (imaxe)
+ (audio)
+ (vÃdeo)
+ (localización)
+
+ Non se atopa unha app para seleccionar contido multimedia.
+
+ Cámara
+ Imaxe
+ VÃdeo
+ Audio
+ Información de contacto
+
+ Erro ao reproducir o audio!
+
+ Contactos bloqueados
+
+ Chamada recibida
+
+ Aceptar
+
+ Mensaxe %s
+ Chamada Signal %s
+
+ Tamaño da mensaxe: %d KB
+ Caduca: %s
+ Sen entregar
+ Este contido multimedia foi almacenado nunha base de datos cifrada. Desafortunadamente, para velo cun visor externo cómpre temporalmente descifrar os datos e poder escribir no almacenamento. Tes a certeza de querer facer isto?
+ Erro; recibida unha mensaxe de intercambio de chaves obsoleta.
+ Recibida a mensaxe de intercambio de chaves; toca para proceder.
+ %1$s abandonou o grupo.
+ Toca para máis detalles
+ Esta mensaxe non será cifrada porque o seu destinatario xa non é usuario de Signal.\n\nEnviar mensaxe insegura?
+ Non se atopa unha aplicación con que abrir este contido multimedia.
+ de %s
+ a %s
+
+ Restablecer sesión segura?
+ Restablecer
+ Borrar conversa?
+ Isto borrará de xeito permanente todas as mensaxes desta conversa.
+ Engadir anexo
+ Seleccionar información de contacto
+ Redactar mensaxe
+ SentÃmolo, hai un erro na configuración do teu anexo.
+ O GIF seleccionado é demasiado grande!
+ SentÃmolo, o vÃdeo seleccionado supera as restricións de tamaño das mensaxes (%1$skB).
+ SentÃmolo, o audio seleccionado supera as restricións de tamaño das mensaxes (%1$skB).
+ A mensaxe está baleira!
+ Membros do grupo
+ Grupo de conversa
+ Grupo sen nome
+
+ - 1 membro
+ - %d membros
+
+ Borrador gardado
+ Destinatario non válido!
+ Chamadas non admitidas
+ Este dispositivo semella non admitir as accións de marcado.
+ Abandonar o grupo?
+ Tes a certeza de querer abandonar este grupo?
+ SMS insegura
+ MMS insegura
+ Signal
+ Imos cambiar a Signal %1$s
+ Erro ao abandonar o grupo...
+ MMS non admitida
+ Esta mensaxe non pode ser enviada porque o teu provedor non admite MMS.
+ Por favor, elixe un contacto
+ Desbloquear este contacto?
+ Desbloquear
+ O anexo excede o lÃmite para o tipo de mensaxe que estás a enviar.
+ Cámara non dispoñible
+ Non é posible gravar audio!
+ Erro ao enviar a mensaxe de voz...
+
+ Detalles da mensaxe
+
+ - Borrar a mensaxe seleccionada?
+ - Borrar as mensaxes seleccionadas?
+
+
+ - Isto borrará de xeito permanente a mensaxe seleccionada.
+ - Isto borrará de xeito permanente as %1$d mensaxes seleccionadas.
+
+ Gardar no almacenamento?
+
+ - Ao gardar este contido multimedia no almacenamento permitirás o acceso a el doutras aplicacións do teu dispositivo. \n\nDesexas continuar?
+ - Ao gardar todos os %1$d elementos multimedia no almacenamento permitirás o acceso a eles doutras aplicacións do teu dispositivo. \n\nDesexas continuar?
+
+
+ - Erro ao gardar o anexo no almacenamento!
+ - Erro ao gardar os anexos no almacenamento!
+
+ Ficheiro gardado satisfactoriamente.
+ Non é posible escribir no almacenamento!
+
+ - Gardando anexo
+ - Gardando %1$d anexos
+
+
+ - Gardando anexo no almacenamento...
+ - Gardando %1$d anexos no almacenamento...
+
+ Recompilando anexos...
+ Pendente...
+ Datos (Signal)
+ MMS
+ SMS
+ Borrando
+ Borrando mensaxes...
+
+ Procurar...
+
+
+ - Borrar a conversa seleccionada?
+ - Borrar as convrersas seleccionadas?
+
+
+ - Isto borrará de xeito permanente a conversa seleccionada.
+ - Isto borrará de xeito permanente as %1$d conversas selecciondas.
+
+ Borrando
+ Borrando as conversas seleccionadas...
+
+ - Conversa arquivada
+ - %d conversas arquivadas
+
+ DESFACER
+
+ - Conversa movida á caixa de entrada
+ - %d conversas movidas á caixa de entrada
+
+
+ Mensaxe de intercambio de chaves...
+
+ Conversas arquivadas (%d)
+
+ Ningunha
+
+ %d min
+
+ Desvincular \'%s\'?
+ Ao desvincular este dispositivo, non volverá estar dispoñible para enviar nin recibir mensaxes.
+ Erro na conexión de rede...
+ Volver tentar
+ Desvinculando dispositivo...
+ Desvinculando dispositivo
+ Erro de rede!
+
+ Dispositivo sen nome
+ Hoxe
+
+ Compartir con
+
+ Benvido/a a Signal.
+ TextSecure e RedPhone son agora unha aplicación de mensaxarÃa privada para calquera situación: Signal.
+ Benvido/a a Signal!
+ TextSecure é agora Signal.
+ TextSecure e RedPhone son agora unha aplicación: Signal. Toca para explorar.
+
+ Exportar
+ Exportar texto simple ao almacenamento?
+ Aviso: isto exportará ao almacenamento os contidos en texto simple das túas mensaxes en Signal.
+ Cancelar
+ Exportando
+ Exportando texto simple ao almacenamento...
+ Erro, non é posible gardar no almacenamento.
+ Erro mentres se gardaba no almacenamento.
+ Exportación satisfactoria.
+
+ Erro de comunicación permanente!
+
+
+
+ Novo grupo
+ Actualizar grupo
+ Nome do grupo
+ Novo grupo MMS
+ Seleccionaches un contacto que non admite grupos en Signal, polo que este grupo será de MMS.
+ Produciuse un erro non esperado que fixo incorrecta a creación do grupo.
+ Necesitas cando menos dunha persoa no teu grupo!
+ Un dos membros do grupo ten un número que non pode ser lido correctamente. Por favor, soluciónao ou elimina este contacto para volver tentalo.
+ Avatar do grupo
+ Crear grupo
+ Creando %1$s…
+ Actualizando %1$s...
+ Non se puido engadir a %1$s porque non é usuario de Signal.
+ Cargando detalles do grupo...
+ Xa estás no grupo.
+
+ Eu
+
+ Importar
+ Exportar
+
+ Importar base de datos de SMS do sistema?
+ Isto importará
+ a Signal a base de datos de mensaxes SMS do sistema. Se xa a importaras
+ previamente, volvelo facer provocará que se dupliquen as mensaxes.
+
+ Importar
+ Cancelar
+ Restaurar copia de seguranza cifrada?
+ Restaurar
+ Importar copia de seguranza en texto simple?
+ Importando
+ Importando copia de seguranza en texto simple...
+ Ningunha copia de seguranza en texto simple atopada!
+ Erro ao importar a copia de seguranza!
+ Importación completada!
+ Restaurando
+ Restaurando copia de seguranza cifrada...
+ Ningunha copia de seguranza cifrada atopada!
+ Restauración completada!
+
+ Toca e mantén premido para gravar unha mensaxe de voz; solta para enviar
+
+ Compartir
+ Cancelar
+ A enviar...
+ Corazón
+ Convites enviados!
+ Convidar a Signal
+
+ - Enviar 1 SMS convite?
+ - Enviar %d SMS convite?
+
+ Imos cambiar a Signal: %1$s
+ Semella que non hai ningunha que permita compartir.
+ Non manteñas coas túas amizades conversas sen cifrar.
+
+ Non se atopou ningunha chave escaneada!
+ Instalar escáner de códigos de barras?
+ Signal precisa un escáner de códigos de barras para os códigos QR.
+
+ Erro ao enviar
+
+ Erro ao almacenar MMS!
+ Erro ao conectar co provedor de MMS...
+
+ Chamada Signal en progreso
+ Chamada perdida de %s
+ Chamada perdida Signal
+ Establecendo chamada Signal
+ Chamada recibida Signal
+ Rexeitar chamada
+ Responder chamada
+ Cancelar chamada
+
+ Mensaxe multimedia
+
+ Recibiuse unha mensaxe cifrada a través dunha versión antiga de Signal que xa non ten soporte. Por favor, pÃdelle ao remitente que actualice a súa versión e volva enviar a mensaxe.
+ Abandonaches o grupo.
+ %s chamoute
+ Chamada perdida de %s
+ %s está en Signal; dille ola!
+
+ As frases de acceso non coinciden!
+ Frase de acceso antiga incorrecta!
+ Inserir nova frase de acceso!
+
+ Vincular este dispositivo?
+ CANCELAR
+ CONTINUAR
+ Vincular este dispositivo?
+
+ • Ler todas as túas mensaxes
+ \n• Enviar mensaxes no teu nome
+
+ Vinculando dispositivo
+ Vinculando novo dispositivo...
+ Dispositivo aprobado!
+ Ningún dispositivo atopado.
+ Erro de rede.
+ Código QR non válido.
+ Desculpa, xa tes bastantes dispositivos vinculados, proba a eliminar algún...
+ Desculpa, este non é un código QR válido para vincular o dispositivo.
+ Vincular un dispositivo a Signal?
+ Semella que estás tentando vincular un dispositivo a Signal usando un escáner de terceiros. Para a túa protección, escanea o código de novo desde Signal.
+
+
+ Inserir frase de acceso
+ Icona de Signal
+ Enviar frase de acceso
+ Frase de acceso non válida!
+
+ A versión de Google Play Services que tes instalada non funciona correctamente. Volve instalala e proba de novo.
+
+ Valorar esta app
+ Se realmente che gusta esta aplicación, dedÃcalle, por favor, un intre a valorala.
+ Valorar agora!
+ Non, grazas
+ Máis tarde
+
+ Bloquear este contacto?
+ Bloquear
+ Desbloquear este contacto?
+ Desbloquear
+
+ Respondendo
+ Marcando
+ Cancelando chamada
+ Chamada rexeitada
+ Soando
+ Ocupado
+ Conectado
+ Conectando
+ Destinatario non dispoñible
+ Erro de rede!
+ Erro do cliente
+ Erro grave
+ Erro ao acceder!
+ Mensaxe do servidor
+ Número non rexistrado!
+
+ Conectar con Signal
+ Elixe o teu paÃs
+ Debes especificar o teu
+ código de paÃs
+
+ Debes especificar o teu
+ número de teléfono
+
+ Número non válido
+ O número
+ especifcado (%s) non é válido.
+
+ Non compatible
+ Desculpa,
+ este dispositivo non admite mensaxarÃa de datos. Os dispositivos con versións de Android
+ anteriores á 4.0 deben ter unha conta rexistrada de Google. Os dispositivos con Android 4.0 ou posterior non precisan
+ a devandita conta, pero deben ter instalada a Play Store.
+
+
+ Comprobación dupla de que este é o teu número! A piques de confirmalo cunha SMS.
+
+ Continuar
+ Editar
+
+ Problemas posibles
+
+ Comprobando número
+ Editar %s
+ Rexistro completo!
+ Primeiro debes inserir o código que recibiches...
+ Conectando
+ Conectando para a comprobación...
+ Erro de rede!
+ Non é posible conectar. Comproba, por favor, a túa conexión á rede e vólveo tentar.
+ Erro na verificación!
+ O código de verificación que enviaches non é correcto. Téntao de novo.
+ Demasiadas tentativas
+ Enviaches un código de verificación incorrecto demasiadas veces. Agarda, por favor, un pouco antes de volvelo tentar.
+ Erro do servidor
+ O servidor atopou un erro. Téntao de novo, por favor.
+ Demasiadas solicitudes!
+ Conflito no rexistro
+ Este número xa está rexistrado nun servidor Signal diferente (CyanogenMod?). Debes dalo de baixa antes de facer o rexistro aquÃ.
+
+ Rexistro completo
+ O rexistro de Signal completouse satisfactoriamente.
+ Erro no rexistro
+ O rexistro de Signal atopouse cun problema.
+
+ Imaxe
+ Audio
+ VÃdeo
+
+ Recibida unha mensaxe de
+ intercambio de chaves danada!
+
+
+ Recibida unha mensaxe de intercambio de chaves para unha versión de protocolo non válida.
+
+ Mensaxe duplicada.
+
+ Abandonou o grupo...
+ Restablecer sesión segura.
+ Borrador:
+ Chamaches a
+ Chamoute
+ Chamada perdida
+ Mensaxe multimedia
+ %s está en Signal; dille ola!
+
+ Semella que non hai ningunha que permita compartir.
+
+ Enviar
+
+ Mensaxe cifrada para unha sesión inexistente...
+
+ Erro ao descifrar a mensaxe.
+
+ Erro ao descifrar a mensaxe.
+
+ Conectando ao servidor MMS...
+ Descargando MMS...
+ Erro ao descargar MMS!
+ Descargando...
+ Toca e configura as MMS para continuar coa descarga.
+ Erro ao descifrar a mensaxe.
+
+ Descifrando MMS, agarda por favor...
+ Mensaxe MMS cifrada para unha sesión inexistente...
+
+ Silenciar notificacións
+
+ Importación en marcha
+ Importando mensaxes de texto
+ Importación completada
+ A importación da base de datos do sistema está completada.
+
+ Tocar para abrir
+ Toca para abrir ou toca o cadeado para pechar.
+ Signal está desbloqueado
+ Bloquear esta frase de acceso
+
+ %1$d novas mensaxes en %2$d conversas
+ Mensaxe bloqueada...
+ Mensaxe multimedia: %s
+ (sen asunto)
+ Erro na entrega da mensaxe.
+ Erro ao entregar a mensaxe.
+ Erro entregando a mensaxe.
+ Marcar todas como lidas
+ Marcar como lida
+ Mensaxe multimedia
+ Responder
+
+ A resposta rápida non está dispoñible cando Signal está bloqueado!
+ Problema ao enviar a mensaxe!
+
+ Signal
+ Nova mensaxe
+
+ Imaxe
+ Audio
+ VÃdeo
+ Contacto
+ Cámara
+ Localización
+
+ Frase de acceso antiga
+ Nova frase de acceso
+ Repetir nova frase de acceso
+
+ Inserir nome ou número
+
+ Sen contactos.
+ Cargando contactos...
+
+ Foto do contacto
+
+
+ Ningún contacto bloqueado...
+
+ Sen chamadas recentes.
+
+ Conversa silenciada
+
+ Enviar mensaxe Signal
+ Enviar SMS insegura
+ Enviar MMS insegura
+ De %1$s
+ Enviar
+ Eliminar
+ Conversa con %1$s
+ Redacción da mensaxe
+ Cambiar a teclado emoji
+ Miniatura do anexo
+
+ PASAR O DEDO PARA CANCELAR
+
+ Descargando mensaxe multimedia
+ Mensaxe multimedia
+ Mensaxe segura
+
+ Descargar
+ Descargando
+ Erro ao enviar
+ Pendente de aprobación
+
+ Descargar
+ Foto do contacto
+ Descargando
+
+
+
+ Cargando paÃses...
+ Procurar
+
+ Escanear o código QR que se mostra no dispositivo para vincular
+
+ Vincular dispositivo
+
+ Ningún dispositivo vinculado...
+ Vincular novo dispositivo
+
+ continuar
+
+ Off
+
+
+
+ Grazas pola túa axuda!
+ Enviando
+
+ GustarÃache importar ás túas mensaxes de texto á base de datos cifrada de Signal?
+ A base de datos predefinida do sistema non se modificará nin alterará de modo ningún.
+ Omitir
+ Importar
+ Isto pode levar un pouco. Ten paciencia, por favor; avisarémoste cando remate a importación.
+ IMPORTANDO
+
+ Actualizando base de datos...
+ Exportar copia de seguranza en texto simple
+ Exporta unha copia en texto simple compatible con \'Copia de SMS & Restaurar\'.
+ Importar base de datos de SMS do sistema
+ Importa a base de datos da aplicación de mensaxarÃa do sistema
+ Restaurar unha copia de seguranza cifrada
+ Restaura unha copia de seguranza de Signal previamente exportada
+ Importar copia de seguranza en texto simple
+ Importa un ficheiro en texto simple. É compatible con \'Copia de SMS & Restaurar\'.
+
+ Ver conversa completa
+
+ Sen imaxes
+
+ COMPROBAR
+ REENVIAR
+
+ Sen definir
+ O texto inserido non é un URI válido
+
+
+ - %1$s uniuse ao grupo.
+ - %1$s unÃronse ao grupo.
+
+ Grupo actualizado.
+ Agora o nome do grupo é \'%1$s\'.
+
+ Desbloquear
+
+
+ BLOQUEADO
+
+ Silenciar conversa
+ Desactivar notificacións para esta conversa
+ Son das notificacións
+ Vibrar
+ Bloquear
+ Cor
+ Cor para este contacto
+
+ Chamada Signal
+ Audio
+ Silenciar
+ Chamada Signal
+
+
+ Comproba o teu número de teléfono para te conectares a Signal.
+
+ O TEU PAÃS
+ O TEU CÓDIGO DE PAÃS E
+ NÚMERO
+
+ NÚMERO DE TELÉFONO
+ Rexistro
+ O rexistro transmite algunha información de contacto ao servidor. Non se almacena.
+
+ Algúns posibles problemas,
+ incluÃdo:
+
+ Número incorrecto.
+
+ Por favor, comproba que inseriches o teu número correctament e cos parámetros correspondentes
+ aos da túa rexión.
+
+ Google Voz.
+
+ Verificación de voz
+
+ Signal tamén pode facer unha chamada para comprobar o teu número. Toca \'Chámame\' e insire os seis dÃxitos
+ que se escoitan a seguir.
+
+ Comprobar
+ Chamarme
+ Editar número
+ Erro de conectividade.
+ Signal non foi quen de se conectar ao servidor.
+ Devasa restritiva.
+
+
+ Signal comprobará automaticamente o teu número cunha SMS de confirmación.
+
+ Conectando...
+ Isto
+ pode durar un pouco. Ten paciencia; avisarémoste cando a comprobación remate.
+
+ Xerando chaves...
+ Alerta
+ Teléfono
+
+ Inserir un nome ou número
+
+
+
+ Algúns problemas requiren a túa atención.
+ VÃa
+ Con:
+
+ Crear frase de acceso
+ Inserir frase de acceso
+ Seleccionar contactos
+ Cambiar frase de acceso
+ Enviar rexistro de depuración
+ Todas as imaxes
+ Todas as imaxes con %1$s
+ Detalles da mensaxe
+ Dispositivos vinculados
+ Convidar amizades
+ Conversas arquivadas
+
+ Importar/exportar
+ Silenciar durante 1 hora
+ Silenciar durante 2 horas
+ Silenciar durante 1 dÃa
+ Silenciar durante 7 dÃas
+ Silenciar durante 1 ano
+ Nome e mensaxe
+ Só o nome
+ Nin o nome nin a mensaxe
+ Imaxes
+ Audio
+ VÃdeo
+
+
+ - %d hora
+ - %d horas
+
+
+ Xeral
+ SMS e MMS
+ Recibir todas as SMS
+ Recibir todas as MMS
+ Utilizar Signal para todas as mensaxes de texto recibidas
+ Utilizar Signal para todas as mensaxes multimedia recibidas
+ Axustes de entrada
+ Activar chave de identidade
+ Axustes da pantalla
+ Elixir identidade
+ Cambiar frase de acceso
+ Cambia a túa frase de acceso
+ Activar frase de acceso
+ Bloquea Signal e as notificacións de mensaxes cunha frase de acceso
+ Seguranza da pantalla
+ Bloquea as capturas na listaxe de recentes e no interior da aplicación.
+ Bloqueo automático de Signal após un perÃodo especificado de inactividade
+ Intervalo de inactividade
+ Notificacións
+ Notificación de novos contactos
+ Mostra unha notificación cando hai novos contactos en Signal
+ Cor LED
+ Descoñecido
+ Intermitencia do LED
+ Son
+ Cambiar o son das notificacións
+ En silencio
+ Notificacións durante a conversa
+ Reproduce un son mentres se está a ver unha conversa activa
+ Repetir alertas
+ Nunca
+ Unha vez
+ Dúas veces
+ Tres veces
+ Cinco veces
+ Dez veces
+ Vibrar
+ Tamén vibra canda a notificación
+ minutos
+ horas
+ Verde
+ Vermello
+ Azul
+ Laranxa
+ Ciano
+ Maxenta
+ Branco
+ Ningunha
+ Rápida
+ Normal
+ Lenta
+ Personalizar
+ Avanzado
+ Privacidade
+ Informes de entrega de SMS
+ Solicita un informe de entrega para cada SMS que envÃas
+ Borra automaticamente as mensaxes máis antigas unha vez que a conversa supera unha determinada lonxitude
+ Borrar as mensaxes antigas
+ Conversas e multimedia
+ Lonxitude máxima das conversas
+ Dispositivos vinculados
+ Claro
+ Escuro
+ Aparencia
+ Tema
+ Predefinido
+ Idioma
+ Mensaxes e chamadas Signal
+ Enviar rexistro de depuración
+ Contactos bloquedos
+ Mostrar nas notificacións
+ Usando datos móbiles
+ Usando conexión wifi
+ En itinerancia
+ Descarga automática multimedia
+ Utilizar sistema emoji
+
+
+
+
+ Seleccionar todo
+ Desmarcar todo
+ USUARIOS DE SIGNAL
+ TODOS OS CONTACTOS
+ Nova mensaxe a...
+
+
+ Actualizar listaxe de contactos
+
+
+
+ Detalles da mensaxe
+ Copiar texto
+ Borrar mensaxe
+ Reenviar mensaxe
+ Reenviar mensaxe
+
+ Gardar anexo
+
+
+
+ Convidar
+
+ Seguranza
+
+ Seleccionar todo
+
+ Procurar
+
+
+ Nova conversa
+
+ Restablecer sesión segura
+
+
+ Silenciar notificacións
+
+ Engadir anexo
+ Actualizar grupo
+ Abandonar grupo
+ Borrar conversa
+ Todas as imaxes
+ Axustes da conversa
+
+
+ Engadir a contactos
+
+ Listaxe de destinatarios
+ Conversa
+
+ Comparar
+ Mostrar o teu código QR
+ Escanear código QR do contacto.
+
+ Nova mensaxe
+ Novo grupo
+ Axustes
+ Bloquear
+ Convidar amizades
+ Axuda
+
+
+ A túa versión de Signal está desactualizada
+
+ - A túa versión de Signal caduca nun dÃa. Toca para actualizar á versión máis recente.
+ - A túa versión de Signal caduca en %d dÃas. Toca para actualizar á versión máis recente.
+
+ A túa versión de Signal caduca hoxe. Toca para actualizar á versión máis recente.
+ A túa versión de Signal caducou!
+ ACTUALIZAR
+ Toca para facer de Signal a túa aplicación predefinida de SMS
+ Importar SMS do sistema
+ Toca para copiar as mensaxes SMS do teu teléfono na base de datos cifrada de Signal.
+ IMPORTAR
+ Mellora a túa experiencia comunicativa.
+ ACTIVAR
+ Convidar a Signal
+ Leva a conversa con %1$s ao seguinte nivel.
+ CONVIDAR
+ Convida as túas amizades!
+ Cantas máis amizades usen Signal, mellor vai ser a cousa.
+ COMPARTIR
+ PECHAR
+
+ Ti
+ Erro na previsualización desta imaxe
+ Tipo multimedia non compatible
+
+ Gardar
+
+ Gardar todo
+
+
+ Actualizar
+
+
+ Borrando
+ Borrando as mensaxes antigas...
+ Mensaxes antigas borradas satisfactoriamente
+
+
+
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 6d4b6b64be1..a9bd0ddca8a 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -5,6 +5,8 @@
Ne
Obriši
SaÄekajte...
+
+ Nova poruka
Trenutno: %s
Još niste postavili lozinku!
@@ -65,11 +67,8 @@
Dolazni poziv
- Identifikacijski
-kljuÄ za %1$s je promijenjen. Ovo može znaÄiti da netko pokuÅ¡ava presresti vaÅ¡u komunikaciju, ili
-da je %2$s jednostavno ponovno instalirao Signal i sada ima novi identifikacijski kljuÄ.
- Možda bi trebali provjeriti
-ovaj kontakt.
+ VaÅ¡ sigurnosni broj za %1$s je izmjenjen. Ovo može znaÄiti da netko pokuÅ¡ava presresti vaÅ¡u komunikaciju ili da je %2$s jednostavno ponovno instalirao Signal.
+ Možda biste trebali provjeriti sigurnosni broj za ovaj kontakt.
Prihvati
Poruka %s
@@ -129,13 +128,14 @@ ovaj kontakt.
MMS nije podržan
Ovu poruku nije moguće poslati jer vaš operater ne podržava MMS.
Odaberite kontakt
- Ukloni blokadu?
- Jeste li sigurni da želite ukloniti blokadu ovog kontakta?
+ Ukloni blokadu ovog kontakta?
+ Ponovno ćete moći primati poruke ili pozive ovog korisnika.
Ukloni blokadu
Privitak prelazi ograniÄenje veliÄine za tip poruke koju Å¡aljete.
Kamera nije dostupna
Nije moguće snimati svuk!
Greška prilikom slanja glasovne poruke...
+ Na vašem uređaju ne postoji aplikacija koja bi rukovala ovom poveznicom.
Detalji poruke
Transport: %1$s\nPoslano/Primljeno: %2$s
@@ -151,8 +151,29 @@ ovaj kontakt.
- Ovo će trajno obrisati svih %1$d odabranih poruka.
Spremi na disk?
- Uspješno!
+
+ - Spremanje svih medija na disk će omogućiti pristup mediju iz drugih aplikacija na vašem uređaju.\n\nNastavi?
+ - Spremanje sva %1$d medija na disk će omogućiti pristup mediju iz drugih aplikacija na vašem uređaju.\n\nNastavi?
+ - Spremanje svih %1$d medija na disk će omogućiti pristup mediju iz drugih aplikacija na vašem uređaju.\n\nNastavi?
+
+
+ - Greška prilikom spremanja privitaka na disk!
+ - Greška prilikom spremanja privitaka na disk!
+ - Greška prilikom spremanja privitaka na disk!
+
+ Datoteka uspješno spremljena.
Nije moguće pisati na disk!
+
+ - Spremanje privitaka
+ - Spremanje %1$d privitka
+ - Spremanje %1$d privitaka
+
+
+ - Spremanje privitaka na disk...
+ - Spremanje %1$d privitka na disk...
+ - Spremanje %1$d privitaka na disk...
+
+ Prikupljanje privitaka...
U toku...
Podaci (Signal)
MMS
@@ -161,6 +182,7 @@ ovaj kontakt.
Brisanje poruka...
Traži...
+ Preglednik nije instaliran na vašem uređaju.
- Obriši odabrane razgovore?
@@ -194,7 +216,7 @@ ovaj kontakt.
Koristeći zadano: %s
Niti jedna
- Sada
+ Upravo sada
%d min
Odspoji \'%s\'?
@@ -226,10 +248,15 @@ ovaj kontakt.
Izvoz u obliku obiÄnog teksta na disk...
Greška, nije moguće pisati na disk.
Greška prilikom pisanja na disk.
- Uspješno!
+ Izvoz uspješan.
Trajna greška u Signal komunikaciji!
Signal se nije uspješno registrirao na Google Play Services. Signal poruke i pozivi su onemogućeni, pokušajte se ponovno registrirati kroz Postavke > Napredno.
+
+ Greška prilikom dohvaćanja GIF slike pune rezolucije...
+
+ GIFovi
+ Naljepnice
Nova grupa
Ažuriraj grupu
@@ -282,16 +309,16 @@ ponovno uvoženje će rezultirati duplim porukama.
Pritisnite i držite kako biste snimili glasovnu poruku, pustite za slanje
Dijeli
- Pošalji SMS
+ Odaberite kontakte
Odustani
Slanje...
Srce
Pozivnice poslane!
Pozovi u Signal
-
- - POÅ ALJI ODABRANIM PRIJATELJIMA
- - POÅ ALJI PRIJATELJIMA: %d
- - POÅ ALJI PRIJATELJIMA: %d
+
+ - POÅ ALJI SMS PRIJATELJIMA: 1
+ - POÅ ALJI SMS PRIJATELJIMA: %d
+ - POÅ ALJI SMS PRIJATELJIMA: %d
- Pošalji SMS pozivnice?
@@ -307,7 +334,7 @@ ponovno uvoženje će rezultirati duplim porukama.
Signal treba Barcode Scanner za QR kodove.
Neuspješno slanje
- Novi identitet
+ Novi sigurnosni broj
Greška prilikom pohrane MMSa!
Greška prilikom povezivanja na MMS pružatelja usluge...
@@ -332,6 +359,9 @@ ponovno uvoženje će rezultirati duplim porukama.
Nazvao %s
Propušteni poziv od %s
%s koristi Signal, reci bok!
+ Postavili ste nestajanje poruka na %1$s.
+ %1$s je postavio/la vrijeme nestajanja poruke na %2$s.
+ Vaš sigurnosni broj s %s je izmjenjen.
Lozinka ne odgovara!
NetoÄna stara lozinka!
@@ -356,6 +386,10 @@ ponovno uvoženje će rezultirati duplim porukama.
Žao nam je, ovo nije važeći QR kôd za povezivanje uređaja.
Poveži Signal uređaj?
Izgleda da pokušavate povezati Signal uređaj pomoću strane aplikacije. Za Vašu vlastitu sigurnost molimo skenirajte kôd ponovno unutar Signal aplikacije.
+
+ Nestajuće poruke
+ Vaše poruke neće isteći.
+ Primljene i poslane poruke u ovom razgovoru će nestati %s nakon što su viđene.
Unesite lozinku
Signal ikona
@@ -369,12 +403,13 @@ ponovno uvoženje će rezultirati duplim porukama.
Ocijenite sada!
Ne hvala
Kasnije
+ Izgleda da Play Store aplikacija nije instalirana na vašem uređaju.
Blokiraj kontakt?
- Nećete više primati poruke ili pozive ovog korisnika.
+ Nećete više primati poruke i pozive ovog korisnika.
Blokiraj
Ukloni blokadu ovog kontakta?
- Jeste li sigurni da želite ukloniti blokadu ovog kontakta?
+ Ponovno ćete moći primati poruke ili pozive ovog korisnika.
Ukloni blokadu
Omogućeno
Onemogućeno
@@ -455,9 +490,9 @@ Provjerite da li je ovo vaš broj telefona! Uskoro ćemo poslati SMS poruku na n
razmjene kljuÄeva!
Primljena poruka razmjene kljuÄeva za pogreÅ¡nu inaÄicu protokola.
- Primljena poruka s nepoznatim kljuÄem identiteta. Pritisnite za obradu i prikaz.
- Primljene ažurirane ali nepoznate infomacije o identitetu. Pritisnite za provjeru identiteta.
+ Primljena je poruka s novim sigurnosnim brojem. Pritisnite za obradu i prikaz.
Resetiranje sigurne sesije.
+ %s resetiranje sigurne sesije.
Dupla poruka.
Napustio grupu...
@@ -468,22 +503,15 @@ Primljena poruka razmjene kljuÄeva za pogreÅ¡nu inaÄicu protokola.
Propušteni poziv
Multimedijalna poruka
%s koristi Signal, reci bok!
+ Vrijeme nestajanja poruke postavljeno na %s
+ Vaš sigurnosni broj s %s je izmjenjen.
- Nemate kljuÄ identiteta.
- Primatelj nema kljuÄ identiteta.
- Primatelj nema kljuÄ identiteta!
- UPOZORENJE, skenirani kljuÄ NE ODGOVARA! Provjerite pažljivo tekst otiska prsta.
- NIJE potvrđeno!
- Njihov kljuÄ je ispravan. TakoÄ‘er je potrebno potvrditi vaÅ¡ kljuÄ sa njima.
- Potvrđeno!
- Nemate kljuÄ identiteta!
-
- Nemate kljuÄ identiteta!
- UPOZORENJE, skenirani kljuÄ NE ODGOVARA!
- NIJE potvrđeno!
- Skenirani kljuÄ odgovara!
- Potvrđeno!
- Vaš otisak prsta identiteta
+ VaÅ¡ kontakt koristi noviju Signal inaÄicu s nekompatibilnim QR kod oblikom. Ažurirajte vaÅ¡u inaÄicu kako biste usporedili.
+ Skenirani QR kod nije ispravno oblikovan sigurnosni broj za provjeru. Pokušajte ponovno skenirati broj.
+ Podijelite sigurnosni broj putem...
+ Naš Signal sigurnosni broj:
+ Izgleda da nemate aplikacije s kojima je moguće dijeljenje.
+ Sigurnosni broj za usporedbu nije pronađen u međuspremniku
Pokreni usprkos postojećem zahtjevu?
Pošalji
@@ -511,6 +539,8 @@ Primljena poruka razmjene kljuÄeva za pogreÅ¡nu inaÄicu protokola.
Uvoz u tijeku
Uvoz tekstualnih poruka
+ Uvoz dovršen
+ Uvoz baze podataka sustava je dovršeno.
Pritisnite za otvaranje.
Pritisnite za otvaranje ili pritisnite lokot za zatvaranje.
@@ -565,13 +595,16 @@ Primljena poruka razmjene kljuÄeva za pogreÅ¡nu inaÄicu protokola.
Pošalji Signal poruku
Pošalji nesigurni SMS
Pošalji nesigurni MMS
+ Od %1$s
Pošalji
Ukloni
Razgovor sa %1$s
Sastavljanje poruke
UkljuÄi/iskljuÄi emoji tipkovnicu
Priložena sliÄica
- UkljuÄi/iskljuÄi ladicu dodataka
+ UkljuÄi/iskljuÄi ladicu brze kamere
+ Snimi i pošalji audio privitak
+ Omogući Signal za SMS
POVUCITE ZA PREKID
@@ -588,6 +621,7 @@ Primljena poruka razmjene kljuÄeva za pogreÅ¡nu inaÄicu protokola.
Preuzmi
Slika kontakta
Preuzimanje
+
NaÄin za viÅ¡estruki odabir
%s odabrano
@@ -603,11 +637,48 @@ Primljena poruka razmjene kljuÄeva za pogreÅ¡nu inaÄicu protokola.
Poveži novi uređaj
nastavi
+
+ IskljuÄeno
+
+ - 1 sekunda
+ - %d sekunde
+ - %d sekundi
+
+ %ds
+
+ - 1 minuta
+ - %d minute
+ - %d minuta
+
+ %dm
+
+ - 1 sat
+ - %d sata
+ - %d sati
+
+ %dh
+
+ - 1 dan
+ - %d dana
+ - %d dana
+
+ %dd
+
+ - 1 tjedan
+ - %d tjedna
+ - %d tjedana
+
+ %dw
+
+ Pretraži GIFove i naljepnice
+
+ Ništa nije pronađeno.
Čitanje zapisa na Vašem uređaju nije moguće. Još uvijek možete koristiti ADB za pristup debug zapisu.
Hvala na pomoći!
Slanje
Slanje zapisa u gist…
+ Preglednik nije instaliran
Želite li uvesti vaše postojeće tekst poruke u kriptiranu Signal bazu podataka?
Zadana sistemska baza podataka neće biti izmjenjena na bilo koji naÄin.
@@ -663,7 +734,7 @@ Uvezi nekriptiranu kopiju. Kompatibilno s \'SMSBackup And Restore\'.
Blokiraj
Boja
Boja za ovaj kontakt
- Provjeri identitet
+ Potvrdi sigurnosni broj
Signal poziv
završi poziv
@@ -733,14 +804,17 @@ neuspješno.
Provjeri
Unesite ime ili broj
- Dodaj Älana
-
- Njihov identitet (oni Äitaju):
- VaÅ¡ identitet (vi Äitate):
+ Dodaj Älanove
+
+ Saznajte više o provjeri sigurnosnih brojeva]]>
+ Pritisnite za skeniranje
+
+ Podijeli sigurnosni broj
Neki problemi zahtjevaju vašu pozornost.
Poslano
Primljeno
+ Nestaje
Putem
Prima:
Å alje:
@@ -750,20 +824,18 @@ neuspješno.
Unesite lozinku
Odaberite kontakte
Signal otkriven
- Javni kljuÄ identiteta
Izmjeni lozinku
- Potvrdite identitet
+ Potvrdi sigurnosni broj
Pošalji debug zapis
Prikaz medija
Sve slike
Sve slike sa %1$s
Detalji poruke
- Upravljanje povezanim uređajima
+ Povezani uređaji
Pozovi prijatelje
Arhivirani razgovori
Uvoz / izvoz
- VaÅ¡ kljuÄ identiteta
Koristi zadano
Koristi prilagođeno
Utišaj na 1 sat
@@ -868,7 +940,7 @@ neuspješno.
Maksimalna duljina razgovora
Skrati sve razgovore odmah
Skeniraj sve razgovore i primijeni ograniÄenje duljine razgovora
- Uređaji
+ Povezani uređaji
Svijetla
Tamna
Izgled
@@ -881,6 +953,8 @@ neuspješno.
\'WiFi Calling\' naÄin kompatibilnosti
Omogućite ukoliko vaš uređaj koristi SMS/MMS isporuku preko WiFi (omogućite jedino kada je \'WiFi pozivanje\' omogućeno na vašem uređaju)
Blokirani kontakti
+ Odobrenje sigurnosnih brojeva
+ Zahtjevaj provjeru novih sigurnosnih brojeva kada se izmjene
Prikaži u obavijestima
Prilikom korištenja mobilnih podataka
Prilikom korištenja Wi-Fi
@@ -914,6 +988,10 @@ neuspješno.
Ponovno pošalji poruku
Spremi privitak
+
+ Nestajuće poruke
+
+ Poruke istiÄu
Pozovi
@@ -932,8 +1010,6 @@ neuspješno.
Novi razgovor
- Sigurnost
- Potvrdite identitet
Resetiraj sigurnu sesiju
Ukloni utišanje
@@ -957,6 +1033,8 @@ neuspješno.
Emitiranje
Usporedi
+ Prikaži vaš QR kod
+ Skenirajte QR kod kontakta
Nova poruka
Nova grupa
@@ -965,6 +1043,9 @@ neuspješno.
OznaÄi sve proÄitano
Pozovi prijatelje
Pomoć
+
+ Kopiraj u međuspremnik
+ Usporedi s međuspremnikom
VaÅ¡a Signal inaÄica je istekla!
@@ -998,7 +1079,10 @@ neuspješno.
Nepodržani tip medija
Spremi
+ Naprijed
+ Sve slike
+ Spremi sve
Prikaz slike
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 6231d3a0a9f..cb3cd466e58 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -5,6 +5,8 @@
Nem
Törlés
Kérlek várj...
+
+ Új üzenet
Jelenleg: %s
Még nem állÃtottál be jelmondatot!
@@ -21,8 +23,8 @@
Jelmondat tiltása?
Ez véglegesen fel fogja oldani a Signal-t és az üzenet értesÃtéseket.
Tiltás
- Leregisztrálás
- Leregisztrálás Signal üzenetekrÅ‘l és hÃvásokról...
+ Regisztráció törlése
+ Regisztráció törlése a Signal üzenetekrÅ‘l és hÃvásokról...
Signal üzenetek és hÃvások letiltása?
Signal üzenetek és hÃvások letiltása a kiszolgálóról történÅ‘ leregisztrálással. Újra kell regisztrálnod a telefonszámod, hogy a jövÅ‘ben újra használhasd Å‘ket.
Hiba a kiszolgálóhoz való kapcsolódáskor!
@@ -48,7 +50,7 @@
(videó)
(hely)
- Nem található alkalmazás a média kiválasztásához.
+ Nem található alkalmazás média kiválasztásához.
Kamera
Kép
@@ -62,18 +64,14 @@
BejövÅ‘ hÃvás
- Az
- azonosÃtó kulcs anyaga megváltozott ehhez: %1$s. Ez jelentheti azt, hogy valaki megpróbálja
- lehallgatni a kommunikációdat, vagy hogy %2$s egyszerűen újratelepÃtette a Signal-t és most új
- azonosÃtó kulcsa van.
+ A biztonsági számod megváltozott vele: %1$s. Ez jelentheti azt, hogy valaki megpróbálja lehallgatni a kommunikációdat, vagy azt, hogy %2$s egyszerűen újratelepÃtette a Signal-t.
+
+ Érdemes lenne ellenőrizned a biztonsági számodat ezzel a névjeggyel.
- Talán érdemes ellenőrizned
-ezt a névjegyet.
-
Elfogad
Üzenet %s
- Signal HÃvás %s
+ Signal hÃvás %s
Üzenet mérete: %d kB
Lejár: %s
@@ -88,7 +86,7 @@ ezt a névjegyet.
Visszaállás védtelen SMS-re?
Visszaállás védtelen MMS-re?
Ez az üzenet nem lesz titkosÃtva, mert a cÃmzett már nem Signal felhasználó.\n\nVédtelen üzenet küldése?
- Nem található alkalmazás ezen médiafájl megnyitásához.
+ Nem található alkalmazás ez a média megnyitásához.
tőle: %s
neki: %s
@@ -98,24 +96,24 @@ ezt a névjegyet.
Beszélgetés törlése?
Ez végelegesen törölni fogja az összes üzenetet ebben a beszélgetésben.
Melléklet hozzáadása
- Válassz névjegy infót!
+ Válassz névjegy infót
ÜzenetÃrás
Sajnáljuk, egy hiba történt a mellékleted beállÃtásában.
Az általad választott gif túl nagy volt!
- Sajnáljuk, a kiválasztott mozgókép mérete meghaladja a maximális üzenetméret határt (%1$skB).
- Sajnáljuk, a kiválasztott hangállomány mérete meghaladja a maximális üzenetméret határt (%1$skB).
+ Sajnáljuk, a kiválasztott videó mérete meghaladja a maximális üzenetméret határt (%1$skB).
+ Sajnáljuk, a kiválasztott hang mérete meghaladja a maximális üzenetméret határt (%1$skB).
A cÃmzett nem egy érvényes SMS vagy email cÃm!
Üres az üzenet!
- Csoport tagok
- Csoportos beszélgetés
- Névtelen csoport
+ Csoporttagok
+ Csoportbeszélgetés
+ Megnevezetlen csoport
- 1 tag
- %d tag
Mentett piszkozat
Érvénytelen cÃmzett!
- A hÃvások nem támogatottak!
+ A hÃvások nem támogatottak
Úgy tűnik, ez a készülék nem támogatja a tárcsázási műveleteket.
Elhagyod a csoportot?
Biztosan el akarod hagyni ezt a csoportot?
@@ -127,14 +125,15 @@ ezt a névjegyet.
Hiba a csoport elhagyásakor...
MMS nem támogatott
Ezt az üzenetet nem lehet elküldeni, mivel a szolgáltatód nem támogatja az MMS-t.
- Válassz egy névjegyet!
- Tiltás feloldása?
- Biztosan feloldod ennek a névjegynek a tiltását?
+ Kérlek válassz egy névjegyet
+ Feloldod ezt a névjegyet?
+ Még egyszer kaphatsz üzeneteket és hÃvásokat ettÅ‘l a névjegytÅ‘l.
Tiltás feloldása
A melléklet meghaladja a mérethatárt ahhoz a tÃpusú üzenethez, amit küldesz.
Kamera nem elérhető
Nem lehet hangot rögzÃteni!
Hiba a hangüzenet küldése közben...
+ A készülékeden nincs elérhető alkalmazás ennek a hivatkozásnak a kezeléséhez.
Üzenet részletek
Ãtviteli mód: %1$s\nKüldött/Fogadott: %2$s
@@ -148,8 +147,25 @@ ezt a névjegyet.
- Ez végelegesen törölni fogja mind a(z) %1$d kiválasztott üzenetet.
Mentés tárolóra?
- Sikerült!
+
+ - Ez a média mentése a tárolóra lehetővé teszi bármelyik másik alkalmazásnak a készülékeden, hogy hozzáférjen.\n\nFolytatod?
+ - Mind a(z) %1$d média mentése a tárolóra lehetővé teszi bármelyik másik alkalmazásnak a készülékeden, hogy hozzájuk férjen.\n\nFolytatod?
+
+
+ - Hiba történt a melléklet tárolóra mentése közben!
+ - Hiba történt a mellékletek tárolóra mentése közben!
+
+ A fájl sikeresen mentve.
Nem lehet Ãrni a tárolóra!
+
+ - Melléklet mentése
+ - %1$d melléklet mentése
+
+
+ - Melléklet mentése a tárolóra...
+ - %1$d melléklet mentése a tárolóra...
+
+ Mellékletek összegyűjtése...
Függőben...
Adat (Signal)
MMS
@@ -158,6 +174,7 @@ ezt a névjegyet.
Üzenetek törlése...
Keresés...
+ Nincs böngészÅ‘ telepÃtve a készülékedre.
- Kiválasztott beszélgetés törlése?
@@ -183,11 +200,11 @@ ezt a névjegyet.
Archivált beszélgetések (%d)
- Egyéni: %s
- Alapértelmezett: %s
+ Egyéni használata: %s
+ Alapértelmezett használata: %s
Egyik sem
- Most
+ Éppen most
%d perc
TársÃtás megszüntetése ezzel: \'%s\'?
@@ -203,7 +220,7 @@ ezt a névjegyet.
Utoljára aktÃv %s
Ma
- Megosztás...
+ Megosztás vele:
Üdvözöl a Signal.
A TextSecure és a RedPhone most egy privát üzenetküldő minden helyzetre: Signal.
@@ -219,24 +236,29 @@ ezt a névjegyet.
NyÃlt szöveg exportálása tárolóra...
Hiba, nem lehet Ãrni a tárolóra.
Hiba a tárolóra Ãrás közben.
- Sikerült!
+ Exportálás sikeres.
Elhúzódó Signal kommunikációs hiba!
A Signal nem tudott regisztrálni a Google Play Szolgáltatásokkal. A Signal üzenetek és hÃvások le vannak tiltva, kérlek próbálj meg újraregisztrálni a BeállÃtások > Haladó-ban.
+
+ Hiba a teljes méretű GIF visszakeresésekor...
+
+ GIFek
+ Matricák
Új csoport
Csoport frissÃtése
- Csoport név
+ Csoportnév
Új MMS csoport
Kiválasztottál egy névjegyet, aki nem támogatja a Signal csoportokat, Ãgy ez a csoport MMS lesz.
Nem vagy regisztrálva Signal üzenetekre és hÃvásokra, Ãgy a Signal csoportok le vannak tiltva. Kérlek próbálj meg újraregisztrálni a BeállÃtások > Haladó-ban.
Egy váratlan hiba történt, ami a csoport létrehozását meghiúsÃtotta.
A csoporthoz legalább egy emberre szükség van!
A csoportod egyik tagjának számát nem lehet megfelelÅ‘en olvasni. Kérlek javÃtsd ki, vagy távolÃtsd el a névjegyet és próbáld újra!
- Csoport maszk
+ Csoport avatar
Csoport létrehozása
- Létrehozás %1$s...
- FrissÃtés %1$s...
+ %1$s létrehozása...
+ %1$s frissÃtése...
%1$s-t nem lehet hozzáadni, mert nem egy Signal felhasználó.
A csoport részleteinek betöltése...
Már a csoportban vagy.
@@ -252,11 +274,11 @@ ezt a névjegyet.
importáltad a rendszer SMS adatbázisát, akkor az újbóli importálás duplikált üzeneteket eredményez.
Importálás
- Mégsem
+ Mégse
TitkosÃtott biztonsági mentés visszaállÃtása?
- Egy titkosÃtott biztonsági mentés visszaállÃtásával minden létezÅ‘ kulcs, beállÃtás és üzenet felülÃródik.
- El fogsz veszÃteni minden információt a jelenlegi Signal telepÃtésedben, de nincs
+ Egy titkosÃtott biztonsági mentés visszaállÃtása teljesen lecseréli a létezÅ‘ kulcsaidat, beállÃtásaidat és üzeneteidet.
+ El fogsz veszÃteni minden információt, ami a jelenlegi Signal telepÃtésedben van, de nincs
a biztonsági mentésben.
VisszaállÃtás
@@ -270,22 +292,22 @@ akkor az újbóli importálás duplikált üzeneteket eredményez.
Hiba a biztonsági mentés importálásakor!
Importálás befejezve!
VisszaállÃtás
- Kódolt biztonsági mentés visszaállÃtása...
+ TitkosÃtott biztonsági mentés visszaállÃtása...
Nem található titkosÃtott biztonsági mentés!
VisszaállÃtás befejezve!
Érintsd meg és tartsd a hangüzenet rögzÃtéséhez, engedd el a küldéshez
Megosztás
- SMS küldése
+ Névjegyek kiválasztása
Mégse
Küldés...
SzÃv
MeghÃvók elküldve!
MeghÃvás Signal-ba
-
- - KÜLDÉS 1 BARÃTNAK
- - KÜLDÉS %d BARÃTNAK
+
+ - SMS KÜLDÉSE 1 BARÃTNAK
+ - SMS KÜLDÉSE %d BARÃTNAK
- 1 SMS meghÃvó küldése?
@@ -296,15 +318,15 @@ akkor az újbóli importálás duplikált üzeneteket eredményez.
A barátok nem hagyják a barátoknak, hogy titkosÃtatlanul csevegjenek.
Nem található szkennelt kulcs!
- TelepÃtsük a Barcode Scanner -vonalkód olvasó- alkalmazást?
- A Signal-nak szüksége van Vonalkód Olvasóra a QR kódokhoz.
+ Barcode Scanner telepÃtése?
+ A Signal-nak szüksége van a Barcode Scanner-re a QR kódokhoz.
Nem sikerült elküldeni
- Új azonosÃtó
+ Új biztonsági szám
- MMS mentés sikertelen!
+ MMS tárolása sikertelen!
A kapcsolódás az MMS szolgáltatóhoz meghiúsult...
- Hiba a vezeték nélküli szolgáltató MMS beállÃtások olvasása közben...
+ Hiba a vezeték nélküli szolgáltató MMS beállÃtásainak olvasása közben...
Signal hÃvás folyamatban
Nem fogadott hÃvás tÅ‘le: %s
@@ -325,12 +347,15 @@ akkor az újbóli importálás duplikált üzeneteket eredményez.
HÃvtad: %s
Nem fogadott hÃvás tÅ‘le: %s
%s fent van a Signal-on, köszönj be!
+ BeállÃtottad az eltűnÅ‘ üzenet idejét erre: %1$s.
+ %1$s beállÃtotta az eltűnÅ‘ üzenet idejét erre: %2$s.
+ Megváltozott a biztonsági számod vele: %s.
A jelmondatok nem egyeznek!
Hibás régi jelmondat!
Adj meg új jelmondatot!
- TársÃtod ezt a Készüléket?
+ TársÃtod ezt a készüléket?
MÉGSE
FOLYTATÃS
TársÃtod ezt a készüléket?
@@ -343,12 +368,16 @@ akkor az újbóli importálás duplikált üzeneteket eredményez.
Új készülék társÃtása...
Készülék jóváhagyva!
Nem található készülék.
- Hálózati hiba
- Érvénytelen QR kód
+ Hálózati hiba.
+ Érvénytelen QR kód.
Sajnáljuk, túl sok készüléked van társÃtva jelenleg, próbálj meg néhányat eltávolÃtani...
Sajnáljuk, ez nem egy érvényes készülék társÃtási QR kód.
Signal készülék társÃtása?
Úgy tűnik, hogy egy harmadik féltÅ‘l származó szkennelÅ‘vel próbálsz társÃtani egy Signal készüléket. A védelmed érdekében kérlek szkenneld újra a kódot Signal-on belül.
+
+ Eltűnő üzenetek
+ Az üzeneteid nem fognak lejárni.
+ Ebben a beszélgetésben küldött és fogadott üzenetek el fognak tűnni a megtekintés után ennyivel: %s
Jelmondat megadása
Signal ikon
@@ -356,19 +385,20 @@ akkor az újbóli importálás duplikált üzeneteket eredményez.
Érvénytelen jelmondat!
Az általad használt Google Play Szolgáltatások nem működnek megfelelően.
-Kérlek telepÃts újra a Google Play Szolgáltatásokat és próbálkozz újra!
+Kérlek telepÃtsd újra a Google Play Szolgáltatásokat és próbálkozz újra!
- Értékeld az alkalmazást!
- Ha tetszik ez az alkalmazás, kélek szánj egy kis időt az értékelésére!
- Értékeld most!
- Nem, köszönöm!
+ Értékeld az alkalmazást
+ Ha tetszik ez az alkalmazás, kélek szánj idÅ‘t a segÃtségünkre azzal, hogy értékeled.
+ Értékelés most!
+ Nem, köszönöm
Később
+ Hoppá! Úgy tűnik, hogy a Play Ãruház alkalmazás nincs telepÃtve a készülékedre.
Letiltod ezt a névjegyet?
- Többé nem kapsz ettÅ‘l a felhasználótól üzeneteket vagy hÃvásokat.
+ Többé nem kapsz üzeneteket és hÃvásokat ettÅ‘l a névjegytÅ‘l.
Letiltás
Feloldod ezt a névjegyet?
- Biztosan fel akarod oldani ezt a névjegyet?
+ Még egyszer kaphatsz üzeneteket és hÃvásokat ettÅ‘l a névjegytÅ‘l.
Feloldás
Engedélyezett
Letiltott
@@ -384,23 +414,23 @@ Kérlek telepÃts újra a Google Play Szolgáltatásokat és próbálkozz újra!
Kapcsolódás
Kézfogás sikertelen!
A cÃmzett nem elérhetÅ‘
- Kézfogás végrhajtása
+ Kézfogás végrehajtása
Hálózati hiba!
Kliens hiba
- Végzetes Hiba
+ Végzetes hiba
Sikertelen bejelentkezés!
Üzenet a kiszolgálótól
- A szám nincs regisztrálva!
+ Szám nincs regisztrálva!
Az általad tárcsázott szám nem támogatja a biztonságos hangot!
Megértettem
Kapcsolódás Signal-lal
- Saját ország kiválasztása
- Add meg a saját
-ország kódot!
+ Válaszd ki az országod
+ Meg kell adnod az
+országkódod!
- Add meg a saját
-telefonszámot!
+ Meg kell adnod a
+telefonszámod!
Érvénytelen szám
Az általad megadott
@@ -424,23 +454,23 @@ Ellenőrizd újra, hogy ez a te számod! Hamarosan egy SMS-ben fogjuk ellenőriz
Regisztráció befejezve!
Először a kapott kódot kell megadnod...
Kapcsolódás
- Kapcsolódás az ellenőrzés elvégzéséhez...
+ Kapcsolódás az ellenőrzéshez...
Hálózati hiba!
A kapcsolódás sikertelen. Kérlek ellenőrizd a hálózati kapcsolatot és próbáld újra!
Az ellenőrzés sikertelen!
- Az általad küldött ellenőrző kód érvénytelen. Próbáld újra!
+ Az általad küldött ellenőrző kód hibás. Kérlek próbáld újra!
Túl sok próbálkozás
- Túl sokszor küldtél érvénytelen ellenőrző kódot. Kérlek várj egy percet mielőtt újra próbálkoznál!
+ Túl sokszor küldtél hibás ellenőrző kódot. Kérlek várj egy percet mielőtt újra próbálkoznál.
HÃvás kezdeményezése
BejövÅ‘ ellenÅ‘rzÅ‘ hÃvás kérése...
Kiszolgáló hiba
A kiszolgáló hibát talált. Kérlek próbáld újra!
Túl sok kérés!
- Nem régiben már kértél egy hanghÃvást. 20 perc múlva kérhetsz másikat.
- Regisztrációs probléma
+ Mostanában már kértél egy hanghÃvást. 20 perc múlva kérhetsz másikat.
+ Regisztráció ütközés
Ez a szám már regisztrálva van egy eltérő Signal kiszolgálón (CyanogenMod?). Le kell regisztrálnod ott mielőtt ide regisztrálsz.
- Regisztráció befejezve!
+ Regisztráció befejezve
A Signal regisztráció sikeresen befejeződött.
Regisztrációs hiba
A Signal regisztráció hibát észlelt.
@@ -453,11 +483,11 @@ Ellenőrizd újra, hogy ez a te számod! Hamarosan egy SMS-ben fogjuk ellenőriz
üzenet érkezett!
-Érvénytelen protokoll verziójú csere kulcs üzenet érkezett.
+Kulcs-csere üzenet érkezett érvénytelen protokoll verzióhoz.
- FrissÃtett, de ismeretlen azonosÃtó kulcs érkezett. Érints a feldolgozáshoz és megjelenÃtéshez.
- FrissÃtett, de ismeretlen azonosÃtó adatok érkeztek. Érints az azonosÃtó érvényesÃtéséhez!
- Biztonságos munkamenet alaphelyzetbe állÃtása.
+ Üzenet érkezett új biztonsági számmal. Érints a feldolgozáshoz és megjelenÃtéshez.
+ Alaphelyzetbe állÃtottad a biztonságos munkamenetet.
+ %s alaphelyzetbe állÃtotta a biztonságos munkamenetet.
Üzenet duplikálása.
Elhagyta a csoportot...
@@ -468,29 +498,23 @@ Ellenőrizd újra, hogy ez a te számod! Hamarosan egy SMS-ben fogjuk ellenőriz
Nem fogadott hÃvás
Média üzenet
%s fent van a Signal-on, köszönj be!
+ EltűnÅ‘ üzenet ideje beállÃtva erre: %s
+ Megváltozott a biztonsági számod vele: %s.
- Nincsen azonosÃtó kulcsod.
- A cÃmzettnek nincs azonosÃtó kulcsa.
- A cÃmzettnek nincs azonosÃtó kulcsa!
- FIGYELEM! A szkennelt kulcs NEM EGYEZIK! Ellenőrizd figyelmesen az ujjlenyomat-szöveget.
- NEM ellenőrzött!
- A kulcsok helyesek. Szükséges továbbá, hogy mások is ellenőrizzék a kulcsodat.
- Ellenőrzött!
- Nincs azonosÃtó kulcsod!
-
- Nincsen azonosÃtó kulcsod.
- FIGYELEM! A szkennelt kulcs NEM EGYEZIK!
- NEM ellenőrzött!
- A szkennelt kulcs egyezik!
- Ellenőrzött!
- AzonosÃtó ujjlenyomatod
+ A kapcsolatod a Signal egy régebbi verzióját futtatja. Kérd meg, hogy frissÃtsen a biztonsági szám ellenÅ‘rzése elÅ‘tt.
+ A kapcsolatod a Signal egy újabb verzióját futtatja egy inkompatibilis QR kód formátummal. Kérlek frissÃts az összehasonlÃtáshoz.
+ A szkennelt QR kód nem egy helyesen formázott biztonság szám megerÅ‘sÃtÅ‘ kód. Kérlek próbáld újra szkennelni.
+ Biztonsági szám megosztása ezzel...
+ Signal biztonsági számunk:
+ Úgy néz ki, hogy nincs egy alkalmazásod se a megosztáshoz.
+ A vágólapon találttal való összehasonlÃtáshoz nincs biztonsági szám
Kezdeményezed a létező kérés ellenére?
Küldés
- Rosszul rejtjelezett üzenet...
- Dekódolás, várj kérlek...
- Az üzenet titkosÃtásra került egy nem létezÅ‘ munkamenethez.
+ Rossz titkosÃtott üzenet...
+ Dekódolás, kérlek várj...
+ Üzenet titkosÃtva egy nem létezÅ‘ munkamenethez...
Hiba az üzenet dekódolása közben.
@@ -504,17 +528,19 @@ Ellenőrizd újra, hogy ez a te számod! Hamarosan egy SMS-ben fogjuk ellenőriz
Hiba az üzenet dekódolása közben.
MMS dekódolása, kérlek várj...
- Hibás titkosÃtott MMS üzenet...
- Az MMS üzenet titkosÃtásra került egy nem létezÅ‘ munkamenethez.
+ Rossz titkosÃtott MMS üzenet...
+ MMS üzenet titkosÃtva egy nem létezÅ‘ munkamenethez...
ÉrtesÃtések némÃtása
- Az importálás folyamatban van.
- SMS üzenetek importálása
+ Importálás folyamatban
+ Szöveges üzenetek importálása
+ Importálás befejezve
+ Rendszer adatbázis importálása befejezve.
Érintsd meg a megnyitáshoz.
Érintsd meg a megnyitáshoz, vagy érintsd meg a zárat a bezáráshoz.
- A Signal feloldva
+ Signal feloldva
Lezárás jelmondattal
%1$d új üzenet %2$d beszélgetésben
@@ -523,38 +549,47 @@ Ellenőrizd újra, hogy ez a te számod! Hamarosan egy SMS-ben fogjuk ellenőriz
Média üzenet: %s
(Nincs tárgy)
Üzenet kézbesÃtése sikertelen!
- Nem sikerült az üzenet kézbesÃtése!
- Hiba az üzenet kézbesÃtése közben!
- Az összes olvasottként való megjelölése
+ Nem sikerült az üzenet kézbesÃtése.
+ Hiba az üzenet kézbesÃtése közben.
+ Összes megjelölése olvasottként
Olvasottnak jelöl
Média üzenet
Válasz
Gyors válasz nem elérhető, amikor a Signal zárolva van!
- Probléma az üzenetküldésben!
+ Probléma az üzenetküldéskor!
Signal
Új üzenet
Kép
+ Kép
Hang
+ Hang
Videó
+ Videó
Névjegy
+ Névjegy
Kamera
+ Kamera
Hely
+ Hely
+ GIF
+ Gif
+ Mellékletfelvétel kapcsoló
Régi jelmondat
Új jelmondat
Új jelmondat megismétlése
- Ãrj be egy nevet vagy egy számot
+ Név vagy szám megadása
- Nincsenek névjegyek.
+ Nincs névjegy.
Névjegyek betöltése...
Névjegy fotó
- Kiválasztás...
+ Kiválasztás erre:
Nincs letiltott névjegy...
@@ -565,15 +600,18 @@ Ellenőrizd újra, hogy ez a te számod! Hamarosan egy SMS-ben fogjuk ellenőriz
Signal üzenet küldése
Védtelen SMS küldése
Védtelen MMS küldése
+ %1$s hálózaton
Küldés
- Törlés
+ EltávolÃtás
Beszélgetés vele: %1$s
- Üzenet létrehozása
- Váltás a hangulatjelek beviteléhez
+ Üzenet összetétel
+ Emoji billentyűzet kapcsoló
Melléklet előnézet
- Közvetlen mellékletfelvétel
+ Gyors kamera mellékletfelvétel kapcsoló
+ Hang melléklet felvétele és küldése
+ Singal engedélyezése SMS-nek
- CSÚSZTASSA EL A MEGSZAKÃTÃSHOZ
+ CSÚSZTASD EL A MEGSZAKÃTÃSHOZ
Média üzenet letöltése
Média üzenet
@@ -581,16 +619,20 @@ Ellenőrizd újra, hogy ez a te számod! Hamarosan egy SMS-ben fogjuk ellenőriz
Letölt
Letöltés
- A küldés sikertelen
+ Küldés sikertelen
Jóváhagyás függőben
KézbesÃtve
Letölt
Névjegy fotó
Letöltés
+
+ Lejátszás
+ Szünet
+ Letöltés
- Kötegelt kijelölési mód
- %s kijelölésre került
+ Tétel kiválasztás mód
+ %s kiválasztva
Országok betöltése...
Keresés
@@ -599,21 +641,53 @@ Ellenőrizd újra, hogy ez a te számod! Hamarosan egy SMS-ben fogjuk ellenőriz
Készülék társÃtása
- Nincsenek társÃtott készülékek...
+ Nincs társÃtott készülék...
Új készülék társÃtása
folytatás
+
+ Ki
+
+ - 1 másodperc
+ - %d másodperc
+
+ %dm
+
+ - 1 perc
+ - %d perc
+
+ %dp
+
+ - 1 óra
+ - %d óra
+
+ %dó
+
+ - 1 nap
+ - %d nap
+
+ %dn
+
+ - 1 hét
+ - %d hét
+
+ %dh
+
+ GIFek és matricák keresése
+
+ Nincs találat
Nem lehet olvasni a naplót a készülékeden. Ehelyett még mindig használhatsz ADB-t, hogy kapj hibakeresési naplót.
Köszönjük a segÃtségedet!
Küldés
Napló küldése gist-hez...
+ Nincs telepÃtve böngészÅ‘
Szeretnéd importálni a létezÅ‘ szöveges üzeneteidet a Signal titkosÃtott adatbázisába?
Az alapértelmezett rendszer adatbázis semmilyen módon nem fog megváltozni vagy módosulni.
Kihagyás
Importálás
- Ez eltarthat egy ideig. Légy türelemmel, értesÃtést fogsz kapni amikor az importálás befejezÅ‘dött.
+ Ez eltarthat egy ideig. Kérlek légy türelemmel, értesÃtünk, amikor az importálás befejezÅ‘dött.
IMPORTÃLÃS
Adatbázis frissÃtés...
@@ -628,29 +702,29 @@ Ellenőrizd újra, hogy ez a te számod! Hamarosan egy SMS-ben fogjuk ellenőriz
Teljes beszélgetés megnézése
- Nincs fénykép
+ Nincs kép
ELLENÅRZÉS
- Küldés újra
+ ÚJRAKÜLDÉS
- Az MMS beállÃtások kézi megadása szükséges a telefonodon.
+ Kézi MMS beállÃtások szükségesek a telefonodhoz.
Engedélyezett
Tiltott
Nincs beállÃtva
- A megadott szöveg nem érvényes -URI- azonosÃtó
- A megadott szöveg nem érvényes kiszolgáló
+ A megadott szöveg nem egy érvényes URI
+ A megadott szöveg nem egy érvényes hoszt
- %1$s csatlakozott a csoporthoz.
- %1$s csatlakozott a csoporthoz.
- A csoport frissÃtése megtörtént.
+ Csoport frissÃtve.
A csoport neve most \'%1$s\'.
Feloldás
A Signal-nak szüksége van az MMS beállÃtásokra, hogy kézbesÃtse a média és csoport üzeneteket a vezeték nélküli szolgáltatódon keresztül. A készüléked nem teszi ezt az információt elérhetÅ‘vé, ami néha igaz a zárolt eszközökre és egyéb korlátozó konfigurációkra.
- Média és csoport üzenetek küldéséhez érintsd meg az \'OK\'-t és hajtsd végre a kért beállÃtásokat. Az MMS beállÃtások a szolgáltatódhoz általában megtalálható a \'szolgáltatód APN-je\'-re kereséssel. Csak egyszer szükséges ezt megtenned.
+ Média és csoport üzenetek küldéséhez érintsd meg az \'OK\'-t és hajtsd végre a kért beállÃtásokat. Az MMS beállÃtások a szolgáltatódhoz általában megtalálhatóak a \'szolgáltatód APN-je\'-re kereséssel. Csak egyszer szükséges ezt megtenned.
LETILTVA
@@ -660,20 +734,20 @@ Ellenőrizd újra, hogy ez a te számod! Hamarosan egy SMS-ben fogjuk ellenőriz
Rezgés
Letiltás
SzÃn
- SzÃn a névjegynek
- AzonosÃtó ellenÅ‘rzése
+ SzÃn ehhez a névjegyhez
+ Biztonsági szám ellenőrzése
- Signal HÃvás
+ Signal hÃvás
hÃvás vége
Hang
NémÃt
- Signal HÃvás
+ Signal hÃvás
- Ellenőrizd a telefonszámod a Signal-hoz csatlakozáshoz.
+ Ellenőrizd a telefonszámod a Signal-lal való csatlakozáshoz.
- SAJÃT ORSZÃGOD
- SAJÃT ORSZÃG HÃVÓSZÃM
+ ORSZÃGOD
+ ORSZÃGKÓDOD ÉS
TELEFONSZÃM
TELEFONSZÃM
@@ -684,7 +758,7 @@ TELEFONSZÃM
Néhány lehetséges probléma
beleértve:
- SMS figyelők
+ SMS begyűjtők.
Néhány harmadik féltől származó üzenetküldő kliens, akárcsak a Handcent vagy GoSMS rosszul viselkedik
és feltartóztat minden bejövő SMS üzenetet. Ellenőrizd, hogy kaptál-e szöveges üzenetet, ami
@@ -693,8 +767,8 @@ beleértve:
Hibás szám.
-Kérlek ellenőrizd, hogy biztosan helyesen adtad-e meg a számodat, és a régiódnak megfelelő
-az alakja!
+Kérlek ellenőrizd, hogy biztosan helyesen adtad-e meg a számodat, és a régiódnak megfelelően
+van formázva!
Google Voice.
@@ -703,7 +777,7 @@ az alakja!
Hang alapú azonosÃtás
- A Signal fel is tud hÃvni, hogy ellenÅ‘rizze a számod. Érintsd meg a \'HÃvj Fel\'-t és Ãrd be a
+ A Signal fel is tud hÃvni, hogy ellenÅ‘rizze a számod. Érintsd meg a \'HÃvj fel\'-t és add meg a
hatjegyű kódot, amit ott hallasz.
Ellenőrzés
@@ -715,7 +789,7 @@ az alakja!
beleértve:
Nincs hálózati
-kapcsolat!
+kapcsolat.
A
készülékednek szüksége van hálózati kapcsolatra annak érdekében, hogy használni tudja ezt a Signal funkciót. Győződj meg róla,
@@ -736,7 +810,7 @@ ellenőrzésre...
Regisztrálás a kiszolgálón...
Ez
-eltarthat egy ideig. Légy türelemmel, értesÃtést fogsz kapni amikor az ellenÅ‘rzés befejezÅ‘dött.
+eltarthat egy ideig. Kérlek légy türelemmel, értesÃtünk, amikor az ellenÅ‘rzés befejezÅ‘dött.
A Signal túllépte az idÅ‘korlátot amÃg megerÅ‘sÃtÅ‘ SMS üzenetre várt.
@@ -744,45 +818,46 @@ eltarthat egy ideig. Légy türelemmel, értesÃtést fogsz kapni amikor az elle
SMS ellenőrzés
sikertelen.
- Kulcsok létrehozása...
+ Kulcsok generálása...
Figyelmeztetés
Telefon
Ellenőrzés
- Ãrj be egy nevet vagy egy számot!
- Tag hozzáadása
-
- Az azonosÃtójuk (Å‘k olvassák):
- Az azonosÃtód (te olvasod):
+ Adj meg egy nevet vagy számot
+ Tagok hozzáadása
+
+ Tudj meg többet a biztonsági szám ellenőrzéséről.]]>
+ Érints a szkenneléshez
+
+ Biztonsági szám megosztása
- Némely probléma tüzetes figyelmet igényel.
+ Néhány probléma a figyelmedet igényli.
Elküldve
Érkezett
- Keresztül
+ Eltűnések
+ Ezen:
CÃmzett:
Feladó:
- Továbbá:
+ Vele:
Jelmondat létrehozása
Jelmondat megadása
Névjegyek kiválasztása
Signal észlelve
- Nyilvános azonosÃtó kulcs
Jelmondat megváltoztatása
- AzonosÃtó ellenÅ‘rzése
+ Biztonsági szám ellenőrzése
Hibakeresési napló küldése
Média előnézet
- Összes fénykép
- Összes fénykép vele: %1$s
+ Összes kép
+ Összes kép vele: %1$s
Üzenet részletek
- TársÃtott készülékek kezelése
+ TársÃtott készülékek
Barátok meghÃvása
Archivált beszélgetések
- Importálás / Exportálás
- AzonosÃtó kulcsod
- Alapértelmezett
- Egyéni
+ Importálás / exportálás
+ Alapértelmezett használata
+ Egyéni használata
NémÃtás 1 órára
NémÃtás 2 órára
NémÃtás 1 napra
@@ -807,22 +882,22 @@ sikertelen.
SMS és MMS
Összes SMS fogadása
Összes MMS fogadása
- A Signal használata minden bejövő szöveges üzenethez
- A Signal használata minden bejövő multimédia üzenethez
+ Signal használata minden bejövő szöveges üzenethez
+ Signal használata minden bejövő multimédia üzenethez
Beviteli beállÃtások
- Enter gomb engedélyezése
- A mosoly emotikon gomb helyettesÃtése egy Enter gombbal
- Küldés az Enter lenyomásával
- Az Enter gomb megnyomásával az üzenet elküldésre kerül
+ Enter billentyű engedélyezése
+ A hangulatjel billentyű lecserélése egy Enter billentyűvel
+ Enter billentyű elküld
+ Az Enter billentyű megnyomása elküldi a szöveges üzeneteket
KijelzÅ‘ beállÃtások
AzonosÃtó választása
- Bejegyzés választása a névjegyzékből.
+ Válaszd ki a névjegy bejegyzésed a névjegyzékből.
Jelmondat megváltoztatása
Változtasd meg a jelmondatod
Jelmondat engedélyezése
Signal és üzenet értesÃtések zárolása jelmondattal
Képernyő biztonság
- A képernyőkép mentés tiltása a korábbi listákban és az alkalmazáson belül
+ Képernyőfelvétel tiltása a legutóbbiak listában és az alkalmazáson belül
Signal automatikus zárolása egy meghatározott inaktivitási időintervallum után
Inaktivitási időtúllépés jelmondat
Inaktivitási időtúllépés intervallum
@@ -834,14 +909,14 @@ sikertelen.
Ismeretlen
LED villogás mintázata
Egyéni LED villogási mintázat beállÃtása
- Jelen a következők számára:
- Távol a következők számára:
- LED villogási mintázat beállÃtásra került!
+ Be ehhez:
+ Ki ehhez:
+ Egyéni LED villogási mintázat beállÃtva!
Hang
ÉrtesÃtési hang megváltoztatása
Csendes
Beszélgetésen belüli értesÃtések
- ÉrtesÃtési hang lejátszása, amikor aktÃv beszélgetést nézel
+ ÉrtesÃtési hang lejátszása aktÃv beszélgetés nézésekor
Figyelmeztetések megismétlése
Soha
Egyszer
@@ -850,7 +925,7 @@ sikertelen.
Ötször
TÃzszer
Rezgés
- ÉrtesÃtéskor meg is rezdül
+ ÉrtesÃtéskor rezeg is
perc
óra
Zöld
@@ -868,12 +943,12 @@ sikertelen.
Haladó
Adatvédelem
MMS felhasználó ügynök
- MMS beállÃtások manuális megadása
+ Manuális MMS beállÃtások
Manuális MMS beállÃtások használata
A rendszer MMS beállÃtások felülÃrása az alábbi információkkal.
MMSC URL
- MMS Proxy kiszolgáló
- MMS Proxy Port
+ MMS proxy hoszt
+ MMS proxy port
MMSC felhasználónév
MMSC jelszó
SMS kézbesÃtési jelentések
@@ -884,7 +959,7 @@ sikertelen.
Beszélgetés hossz korlát
Összes beszélgetés csonkolása most
Összes beszélgetés átvizsgálása és a beszélgetés hossz korlátok érvényesÃtése
- Készülékek
+ TársÃtott készülékek
Világos
Sötét
Megjelenés
@@ -895,8 +970,10 @@ sikertelen.
Ingyenes privát üzenetek és hÃvások Signal felhasználóknak
Hibakeresési napló küldése
\'WiFi hÃvás\' kompatibilitási mód
- Engedélyezd, ha a készüléked az SMS/MMS-t WiFi-n keresztül kézbesÃti (csak akkor engedélyezd, ha a \'WiFi hÃvás\' engedélyezve van az eszközödön)
+ Engedélyezd, ha a készüléked az SMS/MMS-t WiFi-n keresztül kézbesÃti (csak akkor engedélyezd, ha a \'WiFi hÃvás\' engedélyezve van a készülékeden)
Letiltott névjegyek
+ Biztonsági számok jóváhagyása
+ Új biztonsági számok megváltozásakor szükséges a jóváhagyás
MegjelenÃtés értesÃtésekben
Mobil adat használatakor
Wi-Fi használatakor
@@ -909,8 +986,8 @@ sikertelen.
- Összes kijelölése
- Az összes elem kijelölésének megszüntetése
+ Összes kiválasztása
+ Összes kiválasztásának megszüntetése
SIGNAL FELHASZNÃLÓK
ÖSSZES NÉVJEGY
Új üzenet...
@@ -930,26 +1007,28 @@ sikertelen.
Üzenet újraküldése
Melléklet mentése
+
+ Eltűnő üzenetek
+
+ Az üzenetek lejárnak
MeghÃvás
Biztonság
- A kijelölt elemek törlése
- Összes kijelölése
+ Kiválasztottak törlése
+ Összes kiválasztása
Archiválás kiválasztva
Archiválás visszaállÃtása kiválasztva
Keresés
- Névjegyhez tartozó fénykép
+ Névjegy fotó kép
Hiba figyelmeztetés
Archivált
Új beszélgetés
- Biztonság
- AzonosÃtó ellenÅ‘rzése
Biztonságos munkamenet alaphelyzetbe állÃtása
NémÃtás feloldása
@@ -960,7 +1039,7 @@ sikertelen.
Csoport frissÃtése
Csoport elhagyása
Beszélgetés törlése
- Összes fénykép
+ Összes kép
Beszélgetés beállÃtások
Felugró kiterjesztése
@@ -972,7 +1051,9 @@ sikertelen.
Beszélgetés
Adás
- ÖsszehasonlÃtás.
+ ÖsszehasonlÃt
+ QR kódod megjelenÃtése
+ Névjegy QR kódjának szkennelése
Új üzenet
Új csoport
@@ -981,6 +1062,9 @@ sikertelen.
Összes megjelölése olvasottként
Barátok meghÃvása
Súgó
+
+ Másolás vágólapra
+ ÖsszehasonlÃtás vágólappal
A Signal-od verziója elavult
@@ -998,10 +1082,10 @@ sikertelen.
Érints a telefonod SMS üzeneteinek a Signal titkosÃtott adatbázisába másolásához.
IMPORTÃLÃS
Signal üzenetek és hÃvások engedélyezése
- JavÃtsd fel az üzenetküldési élményedet.
+ JavÃtsd fel a kommunikációs élményedet.
ENGEDÉLYEZÉS
MeghÃvás Signal-ba
- Vigye a beszélgetését a következő szintre vele: %1$s.
+ Vidd a beszélgetésed a következő szintre vele: %1$s.
MEGHÃVÃS
HÃvd meg barátaidat!
Minél több barátod használja a Signal-t, annál jobb lesz.
@@ -1009,11 +1093,14 @@ sikertelen.
BEZÃRÃS
Te
- A kép előnézete nem sikerült
+ Nem jelenÃthetÅ‘ meg elÅ‘nézet ehhez a képhez
Nem támogatott média tÃpus
Mentés
+ TovábbÃtás
+ Összes kép
+ Összes mentése
Kép előnézet
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index f7a830a2721..1ef89cee0c9 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -5,6 +5,8 @@
Tidak
Hapus
Mohon tunggu...
+
+ Pesan baru
Sekarang: %s
Anda belum mengatur kata kunci!
@@ -13,18 +15,19 @@
Hapus seluruh pesan lama?
- - Ini akan segera memangkas seluruh percakapan dari %d pesan terbaru.
+ - Ini akan segera memangkas seluruh percakapan menjadi %d pesan terbaru.
Hapus
Nonaktifkan frasa sandi?
- Nonaktif
+ Ini akan secara permanen membuka kunci Signal dan notifikasi pesan.
+ Nonaktifkan
Berhenti registrasi
Berhenti registrasi dari pesan dan panggilan Signal...
Nonaktifkan pesan dan panggilan Signal?
Menonaktifkan pesan dan pangggilan Signal dengan berhenti registrasi dari server. Anda perlu mendaftar ulang nomor telepon Anda untuk menggunakannya lagi di kemudian hari.
- Kesalahan dalam menghubungkan ke server!
+ Terjadi kesalahan koneksi ke server!
SMS Aktif
- Sentuh untuk mengubah aplikasi SMS default
+ Sentuh untuk mengubah aplikasi SMS baku Anda
SMS Nonaktif
Sentuh untuk menetapkan Signal sebagai aplikasi SMS baku Anda
nyala
@@ -32,6 +35,8 @@
mati
Mati
SMS %1$s, MMS %2$s
+ Frasa sandi %1$s, Keamanan layar %2$s
+ Tema %1$s, Bahasa %2$s
- %d menit
@@ -56,14 +61,6 @@
Panggilan masuk
- Kunci
- identifikasi untuk %1$s telah berubah. Hal ini dapat berarti bahwa seseorang sedang mencoba untuk
- menyadap komunikasi Anda, atau %2$s telah memasang ulang Signal dan sekarang memiliki kunci identitas
- yang baru.
-
- Anda mungkin ingin memverifikasi
-kontak ini.
-
Terima
Pesan %s
@@ -73,7 +70,9 @@ kontak ini.
Berakhir: %s
Tidak terkirim
Tampilkan media aman?
+ Media ini telah disimpan di dalam basis data terenkripsi. Sayang sekali, untuk melihatnya dengan penampil eksternal saat ini memerlukan data didekripsi sementara dan ditulis ke penyimpanan. Anda yakin ingin melakukan hal ini?
Gagal, menerima pesan pertukaran kunci terhenti.
+ Menerima pesan pertukaran kunci, ketuk untuk memproses.
si %1$s telah meninggalkan grup.
Tekan untuk detail
Tekan untuk beralih tanpa enkripsi
@@ -81,6 +80,8 @@ kontak ini.
Alihkan ke MMS tanpa enkripsi?
Pesan ini tidak akan dienkripsi karena penerima tidak lagi menjadi pengguna Signal.\n\nTetap kirim pesan tidak aman?
Tidak bisa menemukan aplikasi untuk membuka media ini.
+ dari %s
+ ke %s
Atur kembali sesi aman?
Ini dapat membantu jika Anda mengalami masalah enkripsi dalam percakapan ini. Pesan Anda akan disimpan.
@@ -117,13 +118,13 @@ kontak ini.
MMS tidak didukung
Pesan ini tidak bisa dikirimkan karena penyedia layanan seluler Anda tidak mendukung MMS.
Silahkan pilih kontak
- Buka blokir?
- Apakah Anda yakin ingin membuka blokir kontak ini?
+ Buka blokir kontak ini?
Buka blokir
Lampiran melebihi batas ukuran untuk tipe pesan yang Anda kirimkan.
Kamera tidak tersedia
Tidak bisa merekam audio!
Gagal mengirim pesan suara...
+ Tidak ada aplikasi tersedia untuk menangani tautan ini pada perangkat Anda
Rincian pesan
Transport: %1$s\nKirim/Terima: %2$s
@@ -135,8 +136,21 @@ kontak ini.
- Ini akan secara permanen menghapus semua %1$d pesan terpilih.
Simpan ke penyimpanan?
- Sukses!
+
+ - Menyimpan semua %1$d media ke penyimpanan memungkinkan aplikasi lain pada perangkat Anda mengakses mereka.\n\nLanjutkan?
+
+
+ - Terjadi kesalahan saat menyimpan lampiran ke penyimpanan!
+
+ File berhasil disimpan
Tidak bisa menyimpan ke penyimpanan!
+
+ - Menyimpan %1$d lampiran
+
+
+ - Menyimpan %1$d lampiran ke penyimpanan...
+
+ Mengumpulkan lampiran...
Tertunda...
Data (Signal)
MMS
@@ -154,7 +168,13 @@ kontak ini.
Menghapus
Menghapus percakapan terpilih...
+
+ - %d percakapan diarsipkan
+
ULANG
+
+ - Memindahkan %d percakapan ke kotak masuk
+
Pesan pertukaran kunci...
@@ -164,7 +184,6 @@ kontak ini.
Gunakan bawaan: %s
Kosong
- Sekarang
%d mnt
Buang kaitan \'%s\'?
@@ -196,10 +215,12 @@ kontak ini.
Mengeksport teks ke media penyimpanan...
Gagal, tidak bisa menyimpan ke penyimpanan.
Gagal saat menyimpan ke penyimpanan.
- Sukses!
+ Export berhasil
Kegagalan permanen komunikasi Signal!
Signal tidak dapat melakukan registrasi dengan Layanan Google Play. Fitur Signal seperti pesan dan panggilan di nonaktifkan, mohon registrasi ulang melalui Pengaturan
+
+
Grup baru
Perbarui grup
@@ -254,15 +275,12 @@ telah mengimport basis data sistem SMS, hal ini akan menyebabkan adanya duplikas
Tekan dan tahan untuk merekam pesan suara, lepas untuk mengirim
Berbagi
- Kirim SMS
+ Pilih kontak
Batal
Mengirim...
Hati
Undangan dikirim!
Undang ke Signal!
-
- - KIRIM KE %d TEMAN
-
- Kirim %d SMS undangan?
@@ -275,7 +293,6 @@ telah mengimport basis data sistem SMS, hal ini akan menyebabkan adanya duplikas
Signal membutuhkan Barcode Scanner untuk kode QR.
Gagal mengirim
- Identitas baru
Kesalahan dalam menyimpan MMS!
Kesalahan dalam menghubungi penyedia layanan MMS...
@@ -324,6 +341,8 @@ telah mengimport basis data sistem SMS, hal ini akan menyebabkan adanya duplikas
Maaf, ini bukan tautan perangkat QR code yang benar.
Kaitkan perangkat Signal?
Sepertinya Anda mencoba untuk menghubungkan perangkat Signal menggunakan pemindai pihak ke-3. Untuk perlindungan Anda, mohon memindai kode lagi dari Signal.
+
+ Pesan terkirim dan diterima pada percakapan ini akan lenyap %s setelah dibaca.
Masukkan frasa sandi
Ikon Signal
@@ -339,10 +358,8 @@ telah mengimport basis data sistem SMS, hal ini akan menyebabkan adanya duplikas
Nanti
Blokir kontak ini?
- Anda tidak akan bisa lagi menerima pesan atau penggilan dari pengguna ini.
Blokir
Buka blokir kontak ini?
- Apakah Anda yakin ingin membuka blokir kontak ini?
Buka blokir
Aktif
Nonaktif
@@ -368,6 +385,7 @@ telah mengimport basis data sistem SMS, hal ini akan menyebabkan adanya duplikas
Nomor yang Anda panggil tidak mendukung panggilan aman!
Paham
+ Menyambung dengan Signal
Pilih negara Anda
Anda harus mengisi
kode negara Anda
@@ -428,8 +446,6 @@ memproses pertukaran kunci korupsi.
Diterima pesan pertukaran kunci untuk versi protokol yang tidak valid.
- Menerima pembaharuan atas identitas yang tidak diketahui. Tekan untuk memvalidasi identitas
- Sesi aman disetel ulang.
Pesan Duplikat
Tinggalkan grup...
@@ -441,21 +457,7 @@ Diterima pesan pertukaran kunci untuk versi protokol yang tidak valid.
Pesan media
%s ada di Signal, katakan halo!
- Anda tidak memiliki kunci identitas.
- Penerima tidak memiliki kunci identitas.
- Penerima tidak memiliki kunci identitas!
- PERINGATAN, kunci terpindai TIDAK cocok! Mohon periksa teks sidik jari dengan baik.
- TIDAK diverifikasi!
- Kunci benar. Diperlukan juga untuk memverifikasi kunci anda.
- Terverifikasi!
- Anda tidak memiliki kunci identitas!
-
- Anda tidak memiliki kunci identitas.
- PERINGATAN, kunci terpindai tidak cocok!
- TIDAK terverifikasi!
- Kunci terpindai cocok!
- Terverifikasi!
- Sidik jari identitas Anda
+ Sepertinya Anda tidak memiliki aplikasi untuk berbagi.
Memulai meskipun permintaan sudah ada?
Kirim
@@ -483,6 +485,8 @@ Diterima pesan pertukaran kunci untuk versi protokol yang tidak valid.
Dalam proses mengimport
Mengimpor pesan teks
+ Selesai mengimpor
+ Import sistim database berhasil
Sentuh untuk membuka.
Sentuh untuk membuka, atau sentuh kunci untuk menutup.
@@ -537,13 +541,13 @@ Diterima pesan pertukaran kunci untuk versi protokol yang tidak valid.
Kirim pesan Signal
Kirim SMS tidak aman
Kirim MMS tidak aman
+ Dari %1$s
Kirim
Hapus
Percakapan dengan %1$s
Penulisan pesan
- Jungkit kibor emoji
+ Beralih papan ketik emoji
Gambar Mini Lampiran
- Jungkit laci lampiran
GESER UNTUK MEMBATALKAN
@@ -560,6 +564,7 @@ Diterima pesan pertukaran kunci untuk versi protokol yang tidak valid.
Unduh
Foto kontak
Mengunduh
+
Mode pemilihan banyak
%s terpilih
@@ -575,7 +580,12 @@ Diterima pesan pertukaran kunci untuk versi protokol yang tidak valid.
Kaitkan perangkat baru
lanjutkan
+
+ Mati
+
+
+ Tidak bisa membaca catatan log pada perangkat Anda. Anda masih bisa menggunakan ADB untuk mengambil log awakutu.
Terima kasih atas bantuan Anda!
Mengirimkan
Kirim catatan log gist…
@@ -620,6 +630,7 @@ Diterima pesan pertukaran kunci untuk versi protokol yang tidak valid.
Buka Kunci
Signal membutuhkan pengaturan MMS untuk mengirimkan media dan pesan grup melalui penyedia layanan wireless Anda. Perangkat Anda tidak menyediakan informasi tersebut, dan terkadang benar untuk perangkat terkunci dan konfigurasi terbatas lainnya.
+ Untuk mengirim pesan media dan pesan grup, ketuk \'OK\' dan selesaikan pengaturan yang diminta. Pengaturan MMS untuk operator Anda biasanya dapat ditemukan dengan mencari \'APN operator Anda\'. Anda hanya memerlukan ini sekali saja.
DIBLOKIR
@@ -630,7 +641,6 @@ Diterima pesan pertukaran kunci untuk versi protokol yang tidak valid.
Blokir
Warna
Warna untuk kontak ini
- Verifikasi identitas
Panggilan Signal
akhiri panggilan
@@ -717,10 +727,8 @@ gagal
Periksa
Masukkan nama atau nomor
- Tambah Anggota
-
- Identitas mereka (terbaca):
- Identitas anda (terbaca):
+
+
Beberapa masalah membutuhkan perhatian Anda.
Terkirim
@@ -734,20 +742,17 @@ gagal
Masukkan frasa sandi
Pilih kontak
Signal terdeteksi
- Kunci identitas publik
Ganti Kata Kunci
- Verifikasi identitas
Kirim debug log
Pratinjau media
Semua gambar
Semua gambar dengan %1$s
Rincian pesan
- Kelola perangkat terkait
+ Perangkat terkait
Undang teman
Arsip percakapan
Impor / ekspor
- Kunci identitas Anda
Gunakan bawaan
Gunakan ubahsuai
Bisukan selama 1 jam
@@ -786,10 +791,16 @@ gagal
Ganti Kata Kunci
Ubah frasa sandi Anda
Aktifkan frasa sandi
+ Kunci Signal dan notifikasi pesan dengan frasa sandi
Keamanan Layar
Blokir tangkapan layar di daftar baru-baru saja dan di dalam aplikasi
+ Otomatis kunci Signal setelah tidak aktif selama waktu tertentu
+ Frasa sandi untuk habis waktu karena tiada aktivitas
+ Interval habis waktu karena tiada aktivitas
Pemberitahuan
Aktifkan pemberitahuan pesan
+ Notifikasi kontak baru
+ Tampilkan notifikasi untuk kontak baru Signal
Warna LED
Tidak dikenal
Pola kedip LED
@@ -844,7 +855,7 @@ gagal
Batas panjang percakapan
Pangkas seluruh percakapan
Pindai seluruh rangkaian percakapan dan terapkan batas panjang percakapan
- Perangkat
+ Perangkat terkait
Terang
Gelap
Penampilan
@@ -890,6 +901,8 @@ gagal
Kirim ulang
Simpan lampiran
+
+
Undang
@@ -908,8 +921,6 @@ gagal
Percakapan baru
- Keamanan
- Verifikasi identitas
Setel ulang sesi aman
Bunyikan
@@ -933,6 +944,8 @@ gagal
Siaran
Bandingkan
+ Tampilkan kode QR Anda
+ Pindai kode QR kontak
Pesan baru
Grup baru
@@ -940,7 +953,8 @@ gagal
Kunci
Tandai semua dibaca
Undang teman
- Batuan
+ Bantuan
+
Versi Signal Anda telah usang
@@ -954,6 +968,7 @@ gagal
Tekan untuk membuat Signal menjadi aplikasi SMS utama Anda.
SET
Impor SMS sistem
+ Ketuk untuk menyalin pesan telepon Anda ke dalam basis data Signal yang terenkripsi.
IMPOR
Aktifkan pesan dan panggilan Signal
Tingkatkan pengalaman komunikasi Anda.
@@ -972,6 +987,7 @@ gagal
Simpan
+ Simpan semua
Prantinjau gambar
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 85f258dbc7a..4ae48ee0505 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -5,6 +5,8 @@
No
Cancella
Attendere...
+
+ Nuovo messaggio
In questo momento: %s
Non hai ancora impostato una password!
@@ -15,21 +17,21 @@
Eliminare tutti i messaggi vecchi ora?
- Questo ridurrà immediatamente tutte le conversazioni al messaggio più recente.
- - Questo ridurrà immediatamente tutte le conversazioni ai %d messaggi più recenti.
+ - Saranno ridotte immediatamente tutte le conversazioni ai %d messaggi più recenti.
Elimina
Disabilitare la password?
- Questo sbloccherá Signal e le relative notifiche permanentemente
+ Saranno sbloccati definitivamente Signal e le relative notifiche
Disabilita
Disiscriviti
- Cancellando la registrazione da Signal...
+ Disiscrizione da messaggi e chiamate Signal...
Disattivare i messaggi e le chiamate di Signal?
Disabilita i messaggi di Signal annullando la tua registrazione sul server. Avrai bisogno di registrare di nuovo il tuo numero di telefono per usare di nuovo i messaggi di Signal in futuro.
Errore durante la connessione al server!
SMS Abilitati
Tocca per cambiare l\'applicazione predefinita per gli SMS
SMS Disabilitati
- Tocca per usare Signal come applicazione di default per gli SMS
+ Tocca per usare Signal come applicazione predefinita per gli SMS
on
On
off
@@ -62,9 +64,8 @@
Chiamata in arrivo
- La chiave che identifica %1$s è cambiata. Questo può voler dire che qualcuno sta cercando di intercettare la tua comunicazione, oppure che %2$s ha semplicemente reinstallato Signal e ora ha una nuova chiave.
- Dovresti verificare
-questo contatto.
+ Il numero sicuro con %1$s è cambiato. Questo può voler dire che qualcuno sta cercando d\'intercettare la tua comunicazione, oppure che %2$s ha semplicemente reinstallato Signal.
+ Dovresti verificare il numero sicuro con questo contatto.
Accetta
Messaggio %s
@@ -74,7 +75,7 @@ questo contatto.
Scadenza: %s
Non consegnato
Vuoi vedere il file multimediale?
- Questo media é memorizzato in un database cifrato. Purtroppo, per vederlo con un\'app esterna i dati devono essere temporaneamente decifrato e scritto nella memoria del tuo dispositivo. Sei sicuro di volerlo fare?
+ Questo media è memorizzato in un archivio cifrato. Purtroppo, per visualizzarlo con un\'app esterna i dati devono essere temporaneamente decifrati e scritti nella memoria di archiviazione. Sei sicuro di volerlo fare?
Errore, ricevuto messaggio per la contrattazione della chiave scaduto.
Ricevuto un messaggio con chiave di scambio, tocca per processarlo
%1$s ha lasciato il gruppo.
@@ -82,14 +83,16 @@ questo contatto.
Tocca per tornare alla conversazione non cifrata
Tornare agli SMS non cifrati?
Tornare agli MMS non cifrati?
- Questo messaggio non sarà criptato perchè il destinatario non è più un utente Signal.\n\nInviare un messaggio non sicuro?
+ Questo messaggio non sarà criptato perché il destinatario non è più un utente Signal.\n\nInviare un messaggio non sicuro?
Impossibile trovare un\'app per aprire il file.
+ da %s
+ a %s
- Azzerare la sessione sicura?
+ Reimpostare la sessione sicura?
Questo potrebbe aiutare se stai avendo problemi di crittografia in questa conversazione. I tuoi messaggi verranno conservati.
Reimposta
- Cancellare conversazione?
- Così cancellerai permanentemente tutti i messaggi in questa conversazione.
+ Eliminare la conversazione?
+ Saranno eliminati definitivamente i messaggi in questa conversazione.
Aggiungi allegato
Seleziona informazioni dei contatti
Componi messaggio
@@ -119,30 +122,48 @@ questo contatto.
Chattiamo con questa app: %1$s
Errore nell\'abbandonare il gruppo...
MMS non supportati
- Questo messaggio non può essere inviato perchè il tuo operatore non supporta gli MMS
+ Questo messaggio non può essere inviato poiché il tuo operatore non supporta gli MMS
Scegli un contatto
- Sbloccare?
- Vuoi davvero sbloccare questo contatto?
+ Sbloccare questo contatto?
+ Sarai di nuovo in grado di ricevere messaggi e chiamate da questo contatto.
Sblocca
L\'allegato che stai cercando di inviare supera le dimensioni consentite
Fotocamera non disponibile
Impossibile registrare il messaggio!
Errore nell\'invio del messaggio vocale...
+ Sul tuo dispositivo non sono presenti app per gestire questo link.
Dettagli messaggio
Trasporto: %1$s\nInviato/Ricevuto: %2$s
Mittente: %1$s\nTrasporto: %2$s\nInviato: %3$s\nRicevuto: %4$s
- - Cancellare il messaggio selezionato?
- - Cancellare i messaggi selezionati?
+ - Eliminare il messaggio selezionato?
+ - Eliminare i messaggi selezionati?
- - Così cancellerai per sempre il messaggio selezionato.
- - Così cancellerai per sempre i %1$d messaggi selezionati.
+ - Così eliminerai per sempre il messaggio selezionato.
+ - Saranno eliminati definitivamente i %1$d messaggi selezionati.
Salvare in memoria?
- Completato!
+
+ - Salvare il file sulla memoria consentirà ad altre applicazioni di accedervi.\n\nContinuare?
+ - Salvare il %1$d file sulla memoria consentirà ad altre applicazioni di accedervi.\n\nContinuare?
+
+
+ - Errore nel salvare l\'allegato in memoria!
+ - Errore nel salvare gli allegati in memoria!
+
+ File salvato correttamente.
Impossibile scrivere sulla memoria!
+
+ - Salvataggio allegato
+ - Salvataggio %1$d allegati
+
+
+ - Salvataggio allegato in memoria...
+ - Salvataggio %1$d allegati in memoria...
+
+ Recupero allegati...
In sospeso...
Dati (Signal)
MMS
@@ -151,14 +172,15 @@ questo contatto.
Cancellazione messaggi...
Cerca...
+ Sul tuo dispositivo non ci sono browser installati.
- - Cancellare la conversazione selezionata?
- - Cancellare le conversazioni selezionate?
+ - Eliminare la conversazione selezionata?
+ - Eliminare le conversazioni selezionate?
- Così cancellerai per sempre la conversazione selezionata.
- - Così cancellerai per sempre le %1$d conversazioni selezionate.
+ - Saranno eliminati definitivamente i %1$d messaggi selezionati.
Eliminazione
Eliminazione delle conversazioni selezionate...
@@ -180,11 +202,11 @@ questo contatto.
Utilizzo di predefinito: %s
Nessuna
- Adesso
+ Ora
%d min
Scollegare \'%s\'?
- Scollegando questo dispositivo, esso non sarà più in grado di inviare o ricevere messaggi.
+ Scollegando questo dispositivo non gli sarà più possibile inviare o ricevere messaggi.
Connessione di rete fallita....
Riprova
Scollegamento dispositivo...
@@ -212,18 +234,23 @@ questo contatto.
Esportazione messaggi in memoria...
Errore, impossibile scrivere sulla memoria.
Errore durante la scrittura in memoria.
- Completato!
+ Esportazione completata.
Comunicazione Signal fallita definitivamente!
Signal è stato impossibilitato a registrarsi con i sevizi di Google Play.
-I suoi messagi e le chiamate sono state disabilitate, si prega di provare e ri-registrare in Impostazioni > Avanzate.
+I suoi messaggi e le chiamate sono state disabilitate, si prega di provare e ri-registrare in Impostazioni > Avanzate.
+
+ Errore in ricezione della GIF...
+
+ GIF
+ Adesivi
Nuovo gruppo
Aggiorna gruppo
Nome del gruppo
Nuovo gruppo MMS
Hai selezionato un contatto che non supporta i gruppi di Signal, quindi questo gruppo sarà via MMS.
- Non sei registrato per i messeggi e le chiamate Signal, pertanto i gruppi sono disabilitati. Si prega di ri-registrarsi in Impostazioni > Avanzate.
+ Non sei registrato per i messaggi e le chiamate Signal, pertanto i gruppi sono disabilitati. Si prega di ri-registrarsi in Impostazioni > Avanzate.
Si è verificato un errore inatteso e la creazione del gruppo è fallito.
Il tuo gruppo deve contenere almeno una persona!
Uno dei membri del tuo gruppo ha un numero che non può essere letto correttamente. Sistema o rimuovi quel contatto e prova di nuovo.
@@ -231,8 +258,8 @@ I suoi messagi e le chiamate sono state disabilitate, si prega di provare e ri-r
Crea gruppo
Creo %1$s…
Aggiornamento %1$s...
- Impossibile aggiungere %1$s perchè non è un utente di Signal.
- Caricamennto dettagli del gruppo...
+ Impossibile aggiungere %1$s perché non è un utente di Signal.
+ Caricamento dettagli del gruppo...
Sei già nel gruppo.
Io
@@ -246,7 +273,7 @@ I suoi messagi e le chiamate sono state disabilitate, si prega di provare e ri-r
Annulla
Ripristinare la copia cifrata?
-Il rispristino di un backup criptato sostituirà completamente le chiavi esistenti, le preferenze e i messaggi. Verranno perse tutte le informazioni presenti nell\'installazione attuale di Signal ma non quelle nel backup.
+Il ripristino di un backup criptato sostituirà completamente le chiavi esistenti, le preferenze e i messaggi. Verranno perse tutte le informazioni presenti nell\'installazione attuale di Signal ma non quelle nel backup.
Ripristina
Importare una copia in chiaro?
Questo importerÃ
@@ -254,7 +281,7 @@ messaggi da una copia. Se hai già importato questa copia,
una nuova importazione creerà dei messaggi duplicati.
Importazione
Importazione backup in chiaro...
- Nessuna copia in chiaro trovato!
+ Nessuna copia in chiaro trovata!
Errore durante l\'importazione della copia!
Importazione terminata!
Ripristino
@@ -265,15 +292,15 @@ una nuova importazione creerà dei messaggi duplicati.
Tieni premuto per registrare un messaggio vocale, rilascia per inviare
Condividi
- Invia SMS
+ Scegli contatti.
Annulla
Invio...
Cuore
Inviti mandati!
Invita su Signal
-
- - INVIA A 1 AMICO
- - INVIA A %d AMICI
+
+ - INVIA SMS AD 1 AMICO
+ - INVIA SMS A %d AMICI
- Inviare 1 invito?
@@ -288,7 +315,7 @@ una nuova importazione creerà dei messaggi duplicati.
Signal ha bisogno di uno scanner per i codici QR.
Invio fallito
- Nuova identitÃ
+ Nuovo numero sicuro.
Errore nel salvare l\'MMS!
Errore durante la connessione al provider MMS...
@@ -313,6 +340,9 @@ una nuova importazione creerà dei messaggi duplicati.
Hai chiamato %s
Chiamata persa da %s
%s è su Signal, di\' ciao!
+ Hai settato i messaggi a scomparsa a %1$s.
+ %1$s ha settato i messaggi a scomparsa a %2$s.
+ Il tuo numero sicuro con %s è cambiato.
Le password non corrispondono!
Vecchia password errata!
@@ -336,6 +366,10 @@ una nuova importazione creerà dei messaggi duplicati.
Ci spiace, questo non è un codice QR valido per collegare il dispositivo.
Collegare un dispositivo Signal?
Sembrerebbe che tu stia provando a connettere un dispositivo Signal usando uno scanner di terze parti. Per la tua protezione ti preghiamo di scansionare nuovamente il codice usando Signal.
+
+ Messaggi a scomparsa
+ I tuoi messaggi non scadranno.
+ I messaggi inviati e ricevuti in questa conversazione spariranno %s dopo essere stati visti.
Inserire la password
Icona Signal
@@ -349,12 +383,13 @@ una nuova importazione creerà dei messaggi duplicati.
Vota ora!
No grazie
Più tardi
+ Oops, sembra che l\'app del Play Store non sia installata sul tuo dispositivo.
Bloccare questo contatto?
- Non riceverai più messaggi nè chiamate da questo utente.
+ Non riceverai più messaggi e chiamate da questo contatto.
Blocca
Sbloccare questo contatto?
- Vuoi davvero sbloccare questo contatto?
+ Sarai di nuovo in grado di ricevere messaggi e chiamate da questo contatto.
Sblocca
Attivato
Disattivato
@@ -373,7 +408,7 @@ una nuova importazione creerà dei messaggi duplicati.
Esecuzione dello handshake
Errore di rete!
Fallimento del client
- Fatal Error
+ Errore critico
Login fallito!
Messaggio dal server
Numero non registrato!
@@ -383,7 +418,7 @@ una nuova importazione creerà dei messaggi duplicati.
Connetti con Signal
Seleziona il tuo paese
È necessario specificare il
-codice del propio paese
+codice del proprio paese
È necessario specificare il
proprio numero di telefono
Numero non valido
@@ -411,7 +446,7 @@ Assicurati che questo sia il tuo numero! Stiamo per verificarlo con un SMS.Impossibile connettersi. Controllare la connessione di rete e riprovare.
Verifica fallita!
Il codice di verifica inserito non è corretto. Riprovare.
- Troppi tenativi
+ Troppi tentativi
È stato inserito troppe volte un codice di verifica errato. Attendere un minuto prima di effettuare un nuovo tentativo.
Richiedo la chiamata
Richiesta di telefonata per la verifica...
@@ -436,9 +471,9 @@ scambia un altro messaggio!
Ricevuto un messaggio di scambio chiavi per una versione di protocollo non valida.
- Ricevuto un messaggio con chiave d\'identitá sconosciuta. Tocca per accettarlo e visualizzarlo
- Ricevute informazioni di identità aggiornate ma sconosciute. Clicca per validare l\'identità .
- Sessione sicura azzerata.
+ Ricevuto messaggio con un nuovo numero sicuro. Premere per procedere e visualizzare.
+ Hai resettato la sessione sicura.
+ %s ha resettato la sessione sicura.
Messaggio duplicato.
Gruppo abbandonato...
@@ -449,22 +484,15 @@ Ricevuto un messaggio di scambio chiavi per una versione di protocollo non valid
Chiamata persa
Messaggio multimediale
%s è su Signal, di\' ciao!
+ La scomparsa dei messaggi è settata a %s
+ Il tuo numero sicuro con %s è cambiato.
- Non hai una chiave di identità .
- Il destinatario non ha una chiave di identità .
- Il destinatario non ha una chiave di identità .
- ATTENZIONE, la chiave scansionata non corrisponde! Controlla il testo della chiave con attenzione.
- NON verificata!
- La chiave è corretta. È anche necessario verificare la tua chiave.
- Verificato!
- Non hai una chiave per l\'identità !
-
- Non hai una chiave di identità .
- ATTENZIONE, la chiave scansionata non corrisponde!
- NON verificato!
- La chiave scansionata corrisponde!
- Verificata!
- Impronta della tua identitÃ
+ Il tuo contatto sta eseguendo una versione più aggiornata di Signal con un formato di codice QR non compatibile. Per effettuare il confronto aggiorna la tua versione.
+ Il codice QR letto non è un codice di verifica formalmente valido per un numero sicuro. Si prega di rieseguire la scansione.
+ Condividi numero sicuro tramite...
+ I nostri numeri sicuri Signal:
+ Sembra che tu non abbia alcune applicazioni per condividere.
+ Negli appunti non c\'è un numero sicuro da confrontare.
Iniziare nonostante la richiesta esistente?
Inviata
@@ -481,17 +509,19 @@ Ricevuto un messaggio di scambio chiavi per una versione di protocollo non valid
Download MMS...
Download dell\'MMS fallito!
Scaricamento...
- Tocca e configura le impstazioni MMS per continuare a scaricare.
+ Tocca e configura le impostazioni MMS per continuare a scaricare.
Errore nel decifrare il messaggio.
Decifratura MMS in corso, attendere...
Cifratura MMS invalida..
Messaggio MMS cifrato per una sessione non esistente
- SIlenzia notifiche
+ Silenzia notifiche
Importazione in corso
Importando i messaggi
+ Importazione terminata
+ Importazione database di sistema completa.
Tocca per aprire.
Tocca per aprire, o tocca il lucchetto per chiudere.
@@ -503,8 +533,8 @@ Ricevuto un messaggio di scambio chiavi per una versione di protocollo non valid
Messaggio bloccato...
Messaggio multimediale: %s
(Nessun oggetto)
- Non è riuscito l\'invio del messaggio
- Non è riuscito l\'invio del messaggio
+ L\'invio del messaggio non è riuscito
+ L\'invio del messaggio non è riuscito
C\'è stato un errore durante l\'invio del messaggio
Segna tutto come già letto
Ho letto
@@ -546,13 +576,15 @@ Ricevuto un messaggio di scambio chiavi per una versione di protocollo non valid
Invia messaggio Signal
Invia SMS non cifrato
Invia MMS non cifrato
+ Da %1$s
Invia
Elimina
Conversazione con %1$s
Composizione messaggio
Dis/attiva la tastiera emoji
Anteprima allegato
- Mostra/nascondi pannello degli allegati
+ Registra ed invia allegato audio
+ Abilita Signal per gli SMS
SPOSTA IL DITO PER ANNULLARE
@@ -569,6 +601,7 @@ Ricevuto un messaggio di scambio chiavi per una versione di protocollo non valid
Scarica
Foto del contatto
Caricamento in corso
+
Modalità di selezione di gruppo
%s selezionati
@@ -584,14 +617,46 @@ Ricevuto un messaggio di scambio chiavi per una versione di protocollo non valid
Collega nuovo dispositivo
continua
+
+ Spenti
+
+ - 1 secondo
+ - %d secondi
+
+ %ds
+
+ - 1 minuto
+ - %d minuti
+
+ %dm
+
+ - 1 ora
+ - %d ore
+
+ %dore
+
+ - 1 giorno
+ - %d giorni
+
+ %dgiorni
+
+ - 1 settimana
+ - %d settimane
+
+ %dset.
+
+ Cerca GIF ed adesivi
+
+ Non trovato
- Non é possibile leggere i log dal tuo dispositivo. Puoi provare ad usare ADB per ottenere i log di debug
+ Non è possibile leggere i log dal tuo dispositivo. Puoi provare ad usare ADB per ottenere i log di debug
Grazie dell\'aiuto!
Invio in corso
Salvando i logs su gist...
+ Nessun browser installato
Vuoi importare i tuoi vecchi messaggi nel database criptato di Signal?
- Il database di default non verrà modificat o alterato in nessun modo.
+ Il database di default non verrà modificato o alterato in nessun modo.
Salta
Importa
Potrebbe volerci un po\'. Attendi per favore, verrai notificato quando l\'importazione sarà completata.
@@ -618,7 +683,7 @@ Ricevuto un messaggio di scambio chiavi per una versione di protocollo non valid
Attivato
Disattivato
Non impostato
- Il testo immesso non è un URI valdio
+ Il testo immesso non è un URI valido
Il testo immesso non è un host valido
@@ -642,7 +707,7 @@ Ricevuto un messaggio di scambio chiavi per una versione di protocollo non valid
Blocca
Colore
Colore per questo contatto
- Verifica identitÃ
+ Verifica numero sicuro.
Chiamata Signal
termina chiamata
@@ -717,14 +782,17 @@ non riuscita.
Controllo
Inserisci un nome o un numero
- Aggiungi partecipante
-
- La sua identità ( legge ):
- La tua identità ( leggi ):
+ Aggiungi membri
+
+ Impara di più sulla verifica dei numeri sicuri.]]>
+ Tocca per la scansione
+
+ Condivi numero sicuro.
Alcuni problemi necessitano della tua attenzione.
Inviato
Ricevuto
+ Scomparsi
Tramite
A:
Da:
@@ -734,20 +802,18 @@ non riuscita.
Inserire la password
Seleziona contatti
Signal rilevato
- Chiave pubblica dell\'identitÃ
Cambia password
- Verifica identitÃ
+ Verifica numero sicuro.
Invia log di debug
Anteprima contenuto multimediale
Tutte le immagini
Tutte le immagini con %1$s
Dettagli messaggio
- Gestisci dispositivi collegati
+ Dispositivi collegati
Invita amici
Conversazioni archiviate
Importa / Esporta
- Chiave della tua identitÃ
Usa predefinito
Usa personalizzato
Silenzia per 1 ora
@@ -760,7 +826,7 @@ non riuscita.
Disattivato
Nome e messaggio
Solo nome
- Nè nome nè messaggio
+ Né nome, né messaggio
Immagini
Audio
Video
@@ -774,11 +840,11 @@ non riuscita.
SMS e MMS
Utilizza per tutti gli SMS
Utilizza per tutti gli MMS
- Usa signal per tutti i messaggi in arrivo
+ Usa Signal per tutti i messaggi in arrivo
Usa Signal per tutti i messaggi multimediali in arrivo
Impostazioni di Input
Abilita il tasto Invio
- Sostituisci il tasto smiley con il tasto Inivio
+ Sostituisci il tasto smiley con il tasto Invio
Spedisci premendo Invio
Il tasto Invio manderà il messaggio
Impostazioni display
@@ -787,7 +853,7 @@ non riuscita.
Cambia password
Cambia la tua password
Usa password
- Blocca signal e le notifiche dei messaggi con una password
+ Blocca Signal e le notifiche dei messaggi con una password
Sicurezza schermo
Blocca il fotografare dello schermo nella lista recenti e all\'interno dell\'app
Blocca automaticamente Signal dopo uno specifico intervallo di intattivitÃ
@@ -806,7 +872,7 @@ non riuscita.
Lampeggiamento personalizzato impostato!
Suono
Cambia il suono di notifica
- SIlenzioso
+ Silenzioso
Notifiche nelle conversazioni
Riproduci il suono di notifica anche all\'interno di una conversazione
Ripeti notifiche
@@ -851,7 +917,7 @@ non riuscita.
Limite di lunghezza conversazione
Riduci immediatamente tutte le conversazioni
Analizza tutte le conversazioni e applica il limite di lunghezza.
- Dispositivi
+ Dispositivi collegati
Chiaro
Scuro
Aspetto
@@ -862,8 +928,10 @@ non riuscita.
Messaggi e chiamate private e gratuite verso gli utenti Signal
Invia log di debug
Modalità di compatibilità \'WiFi Calling\'
- Abilitare se il tuo device spedisce gli SMM/MMS via WiFi ( abilita solo quando \"WiFi Calling\" è abilitato per il tuo dispositivo )
+ Abilitare se il tuo device spedisce gli SMM/MMS via WiFi (abilita solo quando \"WiFi Calling\" è abilitato per il tuo dispositivo)
Contatti bloccati
+ Numero sicuro approvato
+ Richiedi l\'approvazione di un numero sicuro in caso di cambiamento.
Visualizza nelle notifiche
Su rete cellulare
Su Wi-Fi
@@ -897,6 +965,10 @@ non riuscita.
Rinvia il messaggio
Salva allegato
+
+ Messaggi a scomparsa
+
+ Messaggi in scadenza
Invita
@@ -915,13 +987,11 @@ non riuscita.
Nuova conversazione
- Sicurezza
- Verifica identitÃ
Azzera la sessione sicura
Annulla silenzioso
- SIlenzia notifiche
+ Silenzia notifiche
Aggiungi allegato
Aggiorna gruppo
@@ -940,6 +1010,8 @@ non riuscita.
Broadcast
Controlla
+ Visualizza il tuo codice QR
+ Scansione codice QR del contatto
Nuovo messaggio
Nuovo gruppo
@@ -948,6 +1020,9 @@ non riuscita.
Segnala tutto come già letto
Invita amici
Aiuto
+
+ Copia negli appunti
+ Confronta con gli appunti
La tua versione di Signal è vecchia
@@ -980,7 +1055,10 @@ non riuscita.
Tipo di media non supportato
Salva
+ Inoltra
+ Tutte le immagini
+ Salva tutti
Anteprima immagine
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 82f2c26246d..9ccc76950d3 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -5,6 +5,8 @@
ל×
מחיקה
× × ×œ×”×ž×ª×™×Ÿ...
+
+ מסר חדש
עכשיו: %s
עדיין ×œ× ×”×’×“×¨×ª משפט סודי!
@@ -27,9 +29,9 @@
לכבות ×ת ×”×ž×¡×¨×™× ×•×ת השיחות הקוליות של ×¡×™×’× ×œ ב×מצעות ביטול ×¨×™×©×•× ×‘×©×¨×ª. ×™×”×™×” צריך ×œ×¨×©×•× ×ž×—×“×© ×ת מספר הטלפון שלך מחדש כדי להשתמש ×‘×”× ×©×•×‘ בעתיד.
×ירעה שגי××” בחיבור לשרת!
SMS מופעלי×
- × × ×œ×’×¢×ª כדי ×œ×©× ×•×ª ×ת ×פליקצית ברירת המחדל שלך ל־SMS
+ × × ×œ×’×¢×ª כדי ×œ×©× ×•×ª ×ת ×פליקציית בררת המחדל שלך ל־SMS
התמיכה ב־SMS כבויה
- × × ×œ×’×¢×ª כדי להפוך ×ת ×¡×™×’× ×œ ל×פליקצית ברירת המחדל שלך ל־SMS
+ × × ×œ×’×¢×ª כדי להפוך ×ת ×¡×™×’× ×œ ל×פליקציית בררת המחדל שלך ל־SMS
מופעל
מופעל
כבוי
@@ -62,12 +64,8 @@
שיחה × ×›× ×¡×ª
- מידע מזהה השייך למפתח עבור %1$s ×”×©×ª× ×”.
-המשמעות ×”×™×: ×ו שמישהו ×ž× ×¡×” ליירט ×ת התקשורת שלך,
-×ו ש-%2$s פשוט התקין ×ת ×¡×™×’× ×œ מחדש ×•×©×™× ×” ×ת מפתח הזהות.
- ייתכן שתרצה ל×מת
-×ת ×יש הקשר ×”×–×”.
-
+ מספר הבטיחות שלך ×¢× %1$s ×”×©×ª× ×”. ייתכן שזה ×ומר שמישהו ×ž× ×¡×” ליירט ×ת התקשורת ×©×œ×›× ×ו ש%2$s פשוט התקין ×ת ×¡×™×’× ×œ מחדש.
+ ×ולי תרצה ×œ×•×•×“× ×ת מספרי הבטיחות שלך ×¢× ×יש הקשר ×”×–×”.
קבל
שליחת מסר ×ל %s
@@ -86,7 +84,7 @@
לעבור ל־SMS ×œ× ×ž×•×¦×¤×Ÿ במידה ×•×”×¦×¤× ×” ××™× ×” ×פשרית?
לעבור ל־MMS ×œ× ×ž×•×¦×¤×Ÿ במידה ×•×”×¦×¤× ×” ××™× ×” ×פשרית?
המסר ×”×–×” ×œ× ×™×•×¦×¤×Ÿ ×›×™ המקבל כבר ××™× ×• משתמש ×‘×¡×™×’× ×œ.\n\n×”×× ×œ×©×œ×•×— מסר ×œ× ×ž×ובטח?
- ×œ× ×”×¦×œ×—×ª×™ ×œ×ž×¦×•× ×פליקציה לפתיחת המדיה הזו.
+ ×œ× ×”×¦×œ×—×ª×™ ×œ×ž×¦×•× ×פליקציה לפתיחת המדיה ×”×–×ת.
מ×ת %s
×ל %s
@@ -126,13 +124,14 @@
×ין תמיכה ב־MMS
××™Ö¾×פשר לשלוח ×ת המסר ×”×–×” ×›×™ הספק שלך ××™× ×• תומך ב־MMS.
× × ×œ×‘×—×•×¨ ×יש קשר
- להסיר חסימה?
- ×”×× ×‘×מת להסיר ×ת החסימה מ×יש הקשר ×”×–×”?
+ לבטל ×ת החסימה של ×יש הקשר ×”×–×”?
+ תוכל שוב לקבל ×ž×¡×¨×™× ×•×©×™×—×•×ª מ×יש הקשר ×”×–×”.
הסרת חסימה
הצרופה עברה ×ת הגודל המותר לסוג המסר ×”× ×©×œ×—.
מצלמה ××™× ×” ×–×ž×™× ×”
×œ× × ×™×ª×Ÿ להקליט קול!
שגי××” בשליחת מסר קולי...
+ ×ין ×פליקציה ×–×ž×™× ×” לטיפול בקישור ×›×–×” במכשיר שלך.
פרטי מסר
תעבורה: %1$s\n× ×©×œ×—/התקבל: %2$s
@@ -146,8 +145,25 @@
- ×–×” ימחק לצמיתות ×ת כל %1$d ×”×ž×¡×¨×™× ×©× ×‘×—×¨×•.
לשמור ל×חסון?
- זה עבד!
+
+ - שמירת המדיה ×”×–×ת ל×חסון ת×פשר לכל ×פליקציה ×חרת לגשת ×ליה×.\n\nלהמשיך?
+ - שמירת כל %1$d פריטי המדיה ל×חסון ת×פשר לכל ×פליקציה ×חרת לגשת ×ליה×.\n\nלהמשיך?
+
+
+ - שגי××” בעת שמירת הצרופה ל×חסון!
+ - שגי××” בעת שמירת הצרופות ל×חסון!
+
+ הקובץ × ×©×ž×¨ בהצלחה.
×œ× × ×™×ª×Ÿ לכתוב ל×חסון!
+
+ - שמירת צרופה
+ - שמירת %1$d צרופות
+
+
+ - שמירת צרופה ל×חסון...
+ - שמירת %1$d צרופות ל×חסון...
+
+ ×יסוף צרופות...
ממתין...
× ×ª×•× ×™× (×¡×™×’× ×œ)
MMS
@@ -156,6 +172,7 @@
מוחק מסרי×...
חיפוש...
+ במכשיר שלך ×œ× ×ž×•×ª×§×Ÿ דפדפן.
- למחוק ×ת השיחה ×©× ×‘×—×¨×”?
@@ -185,7 +202,7 @@
משמש הערך ההתחלתי: %s
×ין
- עכשיו
+ זה עתה
%d דק׳
לבטל ×ת הקישור ×ל \"%s\"?
@@ -204,10 +221,10 @@
לשתף ×¢×
ברוך בו×ך ×œ×¡×™×’× ×œ.
- ×פליקציות TextSecure ו־RedPhone הן עכשיו ×ª×›× ×ª ×ž×¡×¨×™× ×חת לכל מצב: ×¡×™×’× ×œ.
+ ×פליקציות TextLibre ו־PhoneLibre הן עכשיו ×ª×›× ×ª ×ž×¡×¨×™× ×חת לכל מצב: ×¡×™×’× ×œ.
ברוך בו×ך ×œ×¡×™×’× ×œ!
- ×פליקציית TextSecure × ×§×¨×ת עכשיו ×¡×™×’× ×œ.
- ×פליקציות TextSecure ו־RedPhone הן עכשיו ×פליקציה ×חת: ×¡×™×’× ×œ. × × ×œ×”×§×™×© כדי ללמוד עליה.
+ ×פליקציית TextLibre × ×§×¨×ת עכשיו ×¡×™×’× ×œ.
+ ×פליקציות TextLibre ו־PhoneLibre הן עכשיו ×פליקציה ×חת: ×¡×™×’× ×œ. × × ×œ×”×§×™×© כדי ללמוד עליה.
ייצו×
×œ×™×™×¦× ×˜×§×¡×˜ רגיל ל×חסון?
@@ -217,10 +234,15 @@
×ž×™×™×¦× ×˜×§×¡×˜ רגיל ל×חסון...
שגי××”, ×œ× × ×™×ª×Ÿ לכתוב ל×חסון.
שגי××” בעת כתיבה ל×חסון.
- זה עבד!
+ ×”×™×™×¦×•× ×”×¦×œ×™×—.
כישלון קבוע בתקשורת ×¡×™×’× ×œ!
×¡×™×’× ×œ ×œ× ×”×¦×œ×™×— ×œ×”×™×¨×©× ×‘×©×™×¨×•×ª×™ גוגל Play. ×ž×¡×¨×™× ×•×©×™×—×•×ª של ×¡×™×’× ×œ כובו, × × ×œ× ×¡×•×ª ×œ×”×™×¨×©× ×©×•×‘ בהגדרות < מתקד×.
+
+ שגי××” בעת ×חזור GIF ברזולוציה מל××”...
+
+ קובצי GIF
+ מדבקות
קבוצה חדשה
עדכון קבוצה
@@ -274,15 +296,15 @@
כדי להקליט מסר קולי יש להקיש והחזיק ו××– לשחרר לשליחה
שיתוף
- שליחת SMS
+ בחירת ×× ×©×™ קשר
ביטול
שולח..
לב
×”×–×ž× ×•×ª × ×©×œ×—×•!
×”×–×ž× ×” ×œ×¡×™×’× ×œ
-
- - לשלוח לחבר
- - לשלוח ל־%d חברי×
+
+ - שליחת SMS לחבר ×חד
+ - שליחת SMS ל־%d חברי×
- לשלוח ×”×–×ž× ×ª SMS?
@@ -297,7 +319,7 @@
×¡×™×’× ×œ זקוק לסורק ×”×‘×¨×§×•×“×™× ×›×“×™ להשתמש בקודי QR.
השליחה ×œ× ×¢×‘×“×”
- זהות חדשה
+ מספר בטיחות חדש
שגי××” ב×חסון ×”Ö¾MMS!
שגי××” בהתחברות לספק ×”Ö¾MMS...
@@ -322,6 +344,9 @@
התקשרת ×ל %s
שיחה ×©×œ× × ×¢× ×ª×” מ×ת %s
עכשיו %s ×‘×¡×™×’× ×œ, וזה הזמן לש×ול „מה שלומךâ€!
+ הגדרת ×ת זמן העלמת המסר ל־%1$s.
+ %1$s הגדיר ×ת זמן העלמת המסר ל־%2$s.
+ מספר הבטיחות שלך ×¢× %s ×”×©×ª× ×”.
המשפט הסודי ××™× ×• מת××™×!
המשפט הסודי הישן ××™× ×• × ×›×•×Ÿ!
@@ -345,6 +370,10 @@
סליחה, ×–×” ×œ× ×§×•×“ QR תקין לקישור מכשיר.
לקשר מכשיר ×¡×™×’× ×œ?
× ×¨××” ×©× ×™×¡×™×ª לקשר מכשיר ×¡×™×’× ×œ ב×מצעות סורק מצד שלישי. למען בטיחותך, × × ×œ×¡×¨×•×§ ×ת הקוד שוב ב×מצעות ×¡×™×’× ×œ.
+
+ ×ž×¡×¨×™× × ×¢×œ×ž×™×
+ ×”×ž×¡×¨×™× ×©×œ×š ×œ× ×™×¤×•×’×•.
+ ×ž×¡×¨×™× ×©× ×©×œ×—×• והתקבלו בשיחה ×”×–×ת ייעלמו %s ×חרי שייר×ו.
× × ×œ×¨×©×•× ×ž×©×¤×˜ סודי
סמל ×¡×™×’× ×œ
@@ -358,12 +387,13 @@
לדרג עכשיו!
×œ× ×ª×•×“×”
×חר־כך
+ ×וי, × ×¨××” ש×פליקציית ×—× ×•×ª Play ××™× ×” ×ž×•×ª×§× ×ª במכשיר שלך.
×œ×—×¡×•× ×ת ×יש הקשר ×”×–×”?
- ×œ× ×ª×§×‘×œ עוד ×ž×¡×¨×™× ×ו שיחות מהמשתמש ×”×–×”.
+ ×œ× ×ª×§×‘×œ עוד ×ž×¡×¨×™× ×•×©×™×—×•×ª מ×יש הקשר ×”×–×”.
לחסו×
לבטל ×ת החסימה של ×יש הקשר ×”×–×”?
- ×”×× ×‘×מת להסיר ×ת החסימה מ×יש הקשר ×”×–×”?
+ תוכל שוב לקבל ×ž×¡×¨×™× ×•×©×™×—×•×ª מ×יש הקשר ×”×–×”.
הסרת חסימה
מופעל
כבוי
@@ -445,9 +475,9 @@
התקבל מסר החלפת מפתח לגרסה ×‘×œ×ª×™Ö¾×ª×§×™× ×”
של הפרוטוקול.
- התקבל מסר ×¢× ×ž×¤×ª×— זהות בלתי־ידוע. יש ללחוץ להמשך והצגה.
- התקבל מידע זהות מעודכן, ×בל בלתי־ידוע. יש להקיש כדי ל×מת ×ת הזהות.
- התחברות מ×ובטחת ×ותחלה.
+ התקבל מסר ×¢× ×ž×¡×¤×¨ בטיחות חדש. × × ×œ×œ×—×•×¥ כדי לעבד ולהציג.
+ ×תחלת ×ת ההתחברות המ×ובטחת.
+ ההתחברות המ×ובטחת ×ותחלה על־ידי %s.
מסר כפול.
עזר ×ת הקבוצה...
@@ -458,22 +488,14 @@
שיחה ×©×œ× × ×¢× ×ª×”
מסר מדיה
עכשיו %s ×‘×¡×™×’× ×œ, וזה הזמן לש×ול „מה שלומךâ€!
+ זמן העלמת המסר הוגדר ל־%s
+ מספר הבטיחות שלך ×¢× %s ×”×©×ª× ×”.
- ×ין לך מפתח זהות.
- ×œ× ×ž×¢×Ÿ ×ין מפתח זהות.
- ×œ× ×ž×¢×Ÿ ×ין מפתח זהות!
- ×זהרה, המפתח ×©× ×¡×¨×§ ××™× ×• ×–×”×”! × × ×œ×‘×“×•×§ בזהירות ×ת הטקסט של טביעת ×”×צבע.
- ×œ× ×ž×ומת!
- המפתח ×©×œ×”× × ×›×•×Ÿ. הכרחי ×’× ×œ×מת ×ת המפתח שלך ×ת×.
- ×ומת!
- ×ין לך מפתח זהות!
-
- ×ין לך מפתח זהות.
- ×זהרה, המפתח ×©× ×¡×¨×§ ××™× ×• מת××™×!
- ×œ× ×ž×ומת!
- המפתח ×©× ×¡×¨×§ מת××™×!
- ×ומת!
- טביעת ×”×צבע של הזהות שלך
+ ×יש הקשר שלך מריץ גרסה חדשה יותר של ×¡×™×’× ×œ ×¢× ×ª×¡×“×™×¨ בלתי־תו×× ×©×œ קוד QR. × × ×œ×¢×“×›×Ÿ בשביל להשוות.
+ קוד ×”Ö¾QR ×©× ×¡×¨×§ ×”×•× ×ž×¡×¤×¨ ×•×™×“×•× ×‘×ª×¡×“×™×¨ × ×›×•×Ÿ. × × ×œ× ×¡×•×ª לסרוק שוב.
+ לשתך מספר בטיחות דרך...
+ מספר הבטיחות ×©×œ× ×• של ×¡×™×’× ×œ:
+ × ×¨××” ש×ין לך ל×ילו ×פליקציות לשתף.
להתחיל למרות בקשה קיימת?
שלח
@@ -501,6 +523,8 @@
בתהליך ייבו×
×ž×™×™×‘× ×ž×¡×¨×™×
+ ×”×™×™×‘×•× ×”×•×©×œ×
+ ייבו×
× × ×œ×’×¢×ª לפתיחה.
× × ×œ×’×¢×ª לפתיחה, ×ו לגעת ×‘×ž× ×¢×•×œ לסגירה.
@@ -555,13 +579,13 @@
שליחת מסר ×‘×¡×™×’× ×œ
שליחת SMS ×œ× ×ž×ובטח
שליחת MMS ×œ× ×ž×ובטח
+ מ־%1$s
שליחה
הסרה
שיחה ×¢× %1$s
חיבור מסר
הפעלת מקלדת פרצופי×
×ª×ž×•× ×” ממוזערת של צרופה
- הפעלת מגירת צרופות
להחליק לביטול
@@ -578,6 +602,7 @@
הורדה
×¦×™×œ×•× ×יש קשר
מוריד
+
מצב בחירה מרובה
× ×‘×—×¨×• %s
@@ -593,11 +618,43 @@
קישור מכשיר חדש
המשך
+
+ כבוי
+
+ - ×©× ×™×™×” ×חת
+ - %d ×©× ×™×•×ª
+
+ %d×©× ×³
+
+ - דקה ×חת
+ - %d דקות
+
+ %dד׳
+
+ - שעה ×חת
+ - %d שעות
+
+ %dשע׳
+
+ - ×™×•× ×חד
+ - %d ימי×
+
+ %dי׳
+
+ - שבוע ×חד
+ - %d שבועות
+
+ %dשב׳
+
+ חיפוש קובצי GIF ומדבקות
+
+ ×œ× × ×ž×¦× ×“×‘×¨
×œ× × ×™×ª×Ÿ ×œ×§×¨×•× ×ת היומן במכשיר שלך. עדיין ×פשר להשתמש ב־ADB כדי לקבל יומן תיקון שגי×ות.
תודה על העזרה שלך!
שולח
שולח ×™×•×ž× ×™× ×œÖ¾gist...
+ ×œ× ×ž×•×ª×§×Ÿ דפדפן
×”×× ×œ×™×™×‘× ×ת ×”×ž×¡×¨×™× (SMS) ×”×§×™×™×ž×™× ×©×œ×š למסד ×”× ×ª×•× ×™× ×”×ž×•×¦×¤×Ÿ של ×¡×™×’× ×œ?
מסד ×”× ×ª×•× ×™× ×”×¨×’×™×œ של המערכת ×œ× ×™×©×•× ×” ×‘×©×•× ×¦×•×¨×”.
@@ -651,7 +708,6 @@
לחסו×
צבע
צבע ל×יש הקשר ×”×–×”
- ×ימות זהות
שיחת ×¡×™×’× ×œ
×¡×™×•× ×©×™×—×”
@@ -674,7 +730,7 @@
מיירטי SMS
לקוחות צד־שלישי ××—×“×™× ×œ×©×œ×™×—×ª מסרי×, כגון Handcent ×ו GoSMS ×œ× ×ž×ª× ×”×’×™× ×™×¤×”
-×•×ž×™×™×¨×˜×™× ×ת כל ×”Ö¾SMSÖ¾×™× ×”× ×›× ×¡×™×. × × ×œ×‘×“×•×§ שקיבלת SMS שמתחיל ×‘×ž×™×œ×™× â€žYour Signal verification code:â€, ו×ולי כד××™ ×’×
+×•×ž×™×™×¨×˜×™× ×ת כל ×”Ö¾SMSÖ¾×™× ×”× ×›× ×¡×™×. × × ×œ×‘×“×•×§ שקיבלת SMS שמתחיל ×‘×ž×™×œ×™× â€žYour LibreSignal verification code:â€, ו×ולי כד××™ ×’×
שתגדיר ×ת ×פליקציית ×”×ž×¡×¨×™× ×©×œ×š כך שתיתן ×œ×ž×¡×¨×™× ×œ×¢×‘×•×¨.
מספר שגוי.
@@ -720,14 +776,15 @@
סימון
× × ×œ×”×–×™×Ÿ ×©× ×ו מספר
- הוספת חבר
-
- הזהות שלה×:
- הזהות שלך:
+ הוספת חברי×
+
+ יש ללחוץ לסריקה
+
×¢× ×™×™× ×™× ×ž×¡×•×™×ž×™× ×“×•×¨×©×™× ×ת תשומת הלב שלך.
× ×©×œ×—
התקבל
+ × ×¢×œ×
דרך
מ×ת:
×ל:
@@ -737,20 +794,17 @@
× × ×œ×¨×©×•× ×ž×©×¤×˜ סודי
× × ×œ×‘×—×•×¨ ×× ×©×™ קשר
זיהיתי שיש ×¡×™×’× ×œ
- מפתח זהות ציבורי
×©×™× ×•×™ משפט סודי
- ×ימות זהות
שליחת יומן תיקון שגי×ות
תצוגה מקדימה של מדיה
כל ×”×ª×ž×•× ×•×ª
כל ×”×ª×ž×•× ×•×ª ×¢× %1$s
פרטי מסר
- × ×™×”×•×œ ×ž×›×©×™×¨×™× ×ž×§×•×©×¨×™×
+ ×ž×›×©×™×¨×™× ×ž×§×•×©×¨×™×
להזמין חברי×
שיחות ×’× ×•×–×•×ª
×™×™×‘×•× / ייצו×
- מפתח הזהות שלך
להשתמש בבררת המחדל
להשתמש במות×× ×ישית
להשתיק לשעה ×חת
@@ -854,7 +908,7 @@
הגבלת ×ורך שיחה
לקצץ ×ת כל השיחות כעת
לסרוק ×ת כל השיחות ול×כוף ×ת הגבלות ×ורך השיחה
- מכשירי×
+ ×ž×›×©×™×¨×™× ×ž×§×•×©×¨×™×
בהירה
חשוכה
מר××”
@@ -867,6 +921,8 @@
מצב ת×ימות „התקשרות WiFiâ€
יש להפעיל ×ת ×–×” ×× ×”×ž×›×©×™×¨ שלך משתמש במסירת SMS/MMS דרך WiFi (ורק ×× ×ž×¦×‘ „התקשרות Wifi†×ו WiFi Calling מופעל במכשיר שלך)
×× ×©×™ קשר חסומי×
+ ×ישור מספרי בטיחות
+ לדרוש ×ישור מספרי בטיחות ×—×“×©×™× ×›×שר ×”× ×ž×©×ª× ×™×
להציג בהתר×ות
בזמן שימוש ×‘× ×ª×•× ×™× × ×™×™×“×™×
בזמן שימוש ב-WiFi
@@ -900,6 +956,10 @@
שליחת חוזרת של מסר
שמירת צרופה
+
+ ×ž×¡×¨×™× × ×¢×œ×ž×™×
+
+ תפוגת מסרי×
הזמן
@@ -918,8 +978,6 @@
שיחה חדשה
- ×בטחה
- ×ימות זהות
×תחול התחברות מ×ובטחת
ביטול השתקה
@@ -943,6 +1001,8 @@
שידור
השוו××”
+ הצגת קוד ה־QR שלך
+ סריקת קוד QR של ×יש קשר
מסר חדש
קבוצה חדשה
@@ -951,6 +1011,7 @@
לסמן שקר×תי ×ת הכול
להזמין חברי×
עזרה
+
גרסת ×”×¡×™×’× ×œ שלך ××™× ×” ×¢×“×›× ×™×ª
@@ -983,7 +1044,9 @@
סוג מדיה ש××™× ×• × ×ª×ž×š
שמירה
+ העברה
+ לשמור הכול
תצוגה מקדימה של ×ª×ž×•× ×”
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index f460b50154e..4941fc0def7 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -1,33 +1,53 @@
+ Signal
ã¯ã„
ã„ã„ãˆ
削除
ãŠå¾…ã¡ä¸‹ã•ã„…
+
+ æ–°è¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
ç¾åœ¨ï¼š %s
パスワードãŒç™»éŒ²ã•れã¦ã„ã¾ã›ã‚“。
+
+ - 会話内ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸æ•°ã‚’%dã«åˆ¶é™
+
å…¨ã¦ã®å¤ã„メッセージを今ã€å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
+
+ - 最新ã®%d個ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ä»¥å¤–を削除ã—ã¾ã™
+
削除
- パスワードを無効ã«ã™ã‚‹?
+ パスワードを無効ã«ã—ã¾ã™ã‹ï¼Ÿ
+ Signalã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸é€šçŸ¥ã®ãƒãƒƒã‚¯ã‚’無効ã«ã—ã¾ã™
無効
- 未登録
+ 登録å–り消ã—
+ Signalã®ç™»éŒ²ã‚’解除ã—ã¾ã™...
+ Signalã§ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒ»é€šè©±ã‚’無効ã«ã—ã¾ã™ã‹ï¼Ÿ
+ サーãƒãƒ¼ã‹ã‚‰ç™»éŒ²ã‚’å–æ¶ˆã—ã¾ã™ã€‚Signalを使ã£ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ã‚„りå–りや通話ã¯ã§ããªããªã‚Šã¾ã™ã€‚ å†ã³Signalを使ã†ãŸã‚ã«ã¯ã€ã‚ãªãŸã®é›»è©±ç•ªå·ã‚’å†ç™»éŒ²ã‚’ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
サーãƒãƒ¼æŽ¥ç¶šä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸï¼
SMS 有効
- タッãƒã—ã¦ãƒ‡ãƒ•ォルトSMSアプリを変更
+ タッãƒã—ã¦ãƒ‡ãƒ•ォルトã®SMSアプリを変更
SMS 無効
+ タッãƒã—ã¦ã€Signalをデフォルトã®SMSアプリã«ã™ã‚‹
オン
オン
オフ
オフ
SMS %1$s, MMS %2$s
+ パスワード %1$sã€ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚»ã‚ュリティ %2$s
+ テーマ %1$sã€è¨€èªž %2$s
+
+ - %d 分å‰
+
(ç”»åƒ)
(音声)
(å‹•ç”»)
+ (ä½ç½®æƒ…å ±)
- メディアã®é¸æŠžç”¨ã‚¢ãƒ—リãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ ファイルを開ãアプリãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
カメラ
写真
@@ -35,41 +55,57 @@
音声
é€£çµ¡å…ˆæƒ…å ±
+ 音声å†ç”Ÿä¸ã«ã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã—ãŸï¼
ブãƒãƒƒã‚¯ã—ãŸé€£çµ¡å…ˆ
+ ç€ä¿¡
- ã“ã®é€£çµ¡å…ˆã‚’
-ç…§åˆã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¦ã„ã¾ã™ã€‚
- å—ã‘å–り
+ %1$sã¨ã®å®‰å…¨ç•ªå·ãŒå¤‰ã‚りã¾ã—ãŸã€‚ã れã‹ãŒé€šä¿¡ã‚’å‚å—ã—ã¦ã„ã‚‹ã‹ã‚‚知れã¾ã›ã‚“ã—,%2$sãŒSignalã‚’å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸã ã‘ã‹ã‚‚知れã¾ã›ã‚“。
+ ã“ã®é€£çµ¡å…ˆã¨ã®å®‰å…¨ç•ªå·ã‚’確èªã—ã¦ãŠã„ãŸæ–¹ãŒã„ã„ã‹ã‚‚知れã¾ã›ã‚“。
+ 承èª
- メッセージ %s
+ %sã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹
+ Signalコール %s
メッセージã®ã‚µã‚¤ã‚ºï¼š %d KB
有効期é™ï¼š %s
未é€ä¿¡
æš—å·åŒ–ã•れãŸãƒ•ァイルを表示ã—ã¾ã™ã‹ï¼Ÿ
+ ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æš—å·åŒ–ã•れãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ä¿å˜ã•れã¦ã„ã¾ã™ã€‚外部コンテンツã®ãƒ“ューアã§è¦‹ã‚‹ã«ã¯ã€ãƒ‡ãƒ¼ã‚¿ã®æš—å·ã‚’一時的ã«å¾©å·ã—ã€ãƒ‡ã‚£ã‚¹ã‚¯ã«æ›¸ãè¾¼ã¾ãªã‘れã°ãªã‚Šã¾ã›ã‚“。ã“ã®ä½œæ¥ã‚’実行ã—ã¦ã‚‚ã„ã„ã§ã™ã‹ï¼Ÿ
エラーã€å¤ã„éµäº¤æ›ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ä¿¡ã—ã¦ã—ã¾ã„ã¾ã—ãŸã€‚
+ éµäº¤æ›ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ä¿¡ã—ã¾ã—ãŸã€‚タップã—ã¦æ‰‹ç¶šãを行ã£ã¦ãã ã•ã„。
%1$sãŒã‚°ãƒ«ãƒ¼ãƒ—を抜ã‘ã¾ã—ãŸã€‚
- タップã—ã¦è©³ç´°
- タップã—ã¦ã‚»ã‚ュアã§ãªã„通信を行ã†
- 代替ã¨ã—ã¦æš—å·åŒ–ã•れã¦ã„ãªã„SMSã«åˆ‡ã‚Šæ›¿ã‚りã¾ã™ã‹ï¼Ÿ
- 代替ã¨ã—ã¦æš—å·åŒ–ã•れã¦ã„ãªã„MMSã«åˆ‡ã‚Šæ›¿ã‚りã¾ã™ã‹ï¼Ÿ
- ã“ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’é–‹ãã“ã¨ãŒã§ãるアプリãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ タップã—ã¦è©³ç´°ã‚’見る
+ タップã—ã¦å®‰å…¨ã§ãªã„通信を行ã†
+ æš—å·åŒ–ã•れãªã„SMSã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã‹ï¼Ÿ
+ æš—å·åŒ–ã•れãªã„MMSã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã‹ï¼Ÿ
+ 相手ãŒSignalを使用ã—ã¦ã„ãªã„ã®ã§ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯æš—å·åŒ–ã•れã¾ã›ã‚“。 通信安全上ã€å•題ã®ã‚る方法ã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã—ã¾ã™ã‹?
+ ã“ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’é–‹ã‘るアプリãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+ %sã‹ã‚‰
+ %sã¸
+ ã‚»ã‚ュア・セッションをリセットã—ã¾ã™ã‹ï¼Ÿ
+ ã“ã®ä¼šè©±ã®æš—å·åŒ–ã§å•題ãŒã‚ã‚‹å ´åˆã«æ”¹å–„ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚メッセージã¯å‰Šé™¤ã•れã¾ã›ã‚“。
+ リセット
+ 会話を削除ã—ã¾ã™ã‹ï¼Ÿ
+ ã“ã®ä¼šè©±å†…ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ã™ã¹ã¦å®Œå…¨ã«å‰Šé™¤ã—ã¾ã™
添付
é€£çµ¡å…ˆæƒ…å ±ã‚’é¸æŠž
メッセージ作æˆ
添付ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
- ã‚ãªãŸã®é¸æŠžã—ãŸGIFã¯å¤§ãã™ãŽã¾ã™!
- é¸æŠžã•ã‚ŒãŸæ˜ åƒãƒ•ァイルã¯ã‚µã‚¤ã‚ºé™åº¦ã‚’è¶…ãˆã¦ã„ã¾ã™(%1$skB)。
- é¸æŠžã•れãŸéŸ³å£°ãƒ•ァイルã¯ã‚µã‚¤ã‚ºé™åº¦ã‚’è¶…ãˆã¦ã„ã¾ã™(%1$skB)。
+ é¸æŠžã—ãŸGIFã®ã‚µã‚¤ã‚ºãŒå¤§ãã™ãŽã¾ã™ï¼
+ é¸æŠžã•れãŸå‹•画ファイルã¯å®¹é‡ã‚’è¶…ãˆã¦ã„ã¾ã™(%1$skB)。
+ é¸æŠžã•れãŸéŸ³å£°ãƒ•ァイルãŒå®¹é‡ã‚’è¶…ãˆã¦ã„ã¾ã™(%1$skB)。
å—ä¿¡å…ˆã®SMSåˆã¯Eãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæœ‰åйã§ã¯ã‚りã¾ã›ã‚“。
メッセージãŒç©ºã§ã™ã€‚
グループメンãƒãƒ¼
- グループãƒãƒ£ãƒƒãƒˆ
- ç„¡åグループ
- 下書ãã¨ã—ã¦ä¿å˜ã—ã¾ã—ãŸ
+ グループ会話
+ グループ(åç„¡ã—)
+
+ - å‚åŠ è€…ã€€%d人
+
+ 下書ãã‚’ä¿å˜ã—ã¾ã—ãŸ
å—ä¿¡å…ˆãŒç„¡åйã§ã™ã€‚
通話ã«ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“
ãŠä½¿ã„ã®ç«¯æœ«ã¯ã€ãƒ€ã‚¤ãƒ¤ãƒ«æ©Ÿèƒ½ã«å¯¾å¿œã—ã¦ã„ãªã„よã†ã§ã™ã€‚
@@ -77,73 +113,139 @@
ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’æœ¬å½“ã«æŠœã‘ã¾ã™ã‹ï¼Ÿ
æš—å·åŒ–ã•れã¦ã„ãªã„SMS
æš—å·åŒ–ã•れã¦ã„ãªã„MMS
- グループ離脱ã§ã‚¨ãƒ©ãƒ¼...
- MMS ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“
- ã‚ãªãŸã®ã‚ャリアãŒMMSをサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ã®ã§ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯é€ä¿¡ã§ãã¾ã›ã‚“。
+ Signal
+ ãƒãƒ£ãƒƒãƒˆã‚¢ãƒ—リをSignalã«å¤‰ãˆã¾ã—ょã†ã€‚%1$s
+ ãƒãƒ£ãƒƒãƒˆãƒ»ã‚¢ãƒ—リ『Signalã€ã‚’使ã„ã¾ã›ã‚“ã‹ï¼Ÿ %1$s
+ グループ離脱ä¸ã«ã‚¨ãƒ©ãƒ¼...
+ MMSã«ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“
+ ãŠä½¿ã„ã®ç«¯æœ«ãŒMMSã«å¯¾å¿œã—ã¦ã„ãªã„ãŸã‚ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯é€ä¿¡ã§ãã¾ã›ã‚“。
é€£çµ¡å…ˆã‚’é¸æŠžã—ã¦ãã ã•ã„
- ブãƒãƒƒã‚¯ã‚’解除ã™ã‚‹?
- ã“ã®é€£çµ¡å…ˆã®ãƒ–ãƒãƒƒã‚¯ã‚’解除ã—ã¾ã™ã‹?
+ ã“ã®é€£çµ¡å…ˆã®ãƒ–ãƒãƒƒã‚¯ã‚’解除ã—ã¾ã™ã‹ï¼Ÿ
+ ã“ã®é€£çµ¡å…ˆã‹ã‚‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚„電話をå—ä¿¡ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
ブãƒãƒƒã‚¯è§£é™¤
+ 添付ファイルã®ã‚µã‚¤ã‚ºãŒä¸Šé™ã‚’è¶…ãˆã¦ã„ã¾ã™
+ カメラãŒä½¿ãˆã¾ã›ã‚“
+ 録音ã§ãã¾ã›ã‚“ï¼
+ 音声メッセージã®é€ä¿¡ä¸ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ...
+ ã“ã®ãƒªãƒ³ã‚¯ã‚’扱ãˆã‚‹ã‚¢ãƒ—リãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“
メッセージã®è©³ç´°
é€ä¿¡æ–¹æ³•: %1$s\né€ä¿¡/å—ä¿¡: %2$s
é€ä¿¡è€…: %1$s\né€ä¿¡æ–¹æ³•: %2$s\né€ä¿¡: %3$s\nå—ä¿¡: %4$s
- メモリã«ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ
- æˆåŠŸã—ã¾ã—ãŸã€‚
- ãƒ¡ãƒ¢ãƒªã«æ›¸ãè¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚
- ペンディング
+
+ - é¸æŠžä¸ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
+
+
+ - é¸æŠžä¸ã®%1$d個ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå®Œå…¨ã«å‰Šé™¤ã•れã¾ã™
+
+ 外部メモリã«ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ
+
+ - %1$d個ã®ãƒ¡ãƒ‡ã‚£ã‚¢ãƒ»ãƒ•ァイルをã™ã¹ã¦å¤–部メモリã«ä¿å˜ã™ã‚‹ã“ã¨ã§ã€ä»–ã®ã‚¢ãƒ—リã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚\n続行ã—ã¾ã™ã‹ï¼Ÿ
+
+
+ - 添付ファイルを外部メモリã«ä¿å˜ã™ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿï¼
+
+ ファイルã®ä¿å˜å®Œäº†
+ å¤–éƒ¨ãƒ¡ãƒ¢ãƒªã«æ›¸ãè¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ
+
+ - %1$då€‹ã®æ·»ä»˜ãƒ•ァイルをä¿å˜
+
+
+ - %1$då€‹ã®æ·»ä»˜ãƒ•ァイルを外部メモリã«ä¿å˜...
+
+ 添付ファイルを集ã‚ã¦ã„ã¾ã™...
+ ä¿ç•™ä¸...
+ プッシュ
MMS
SMS
削除
- メッセージã®å‰Šé™¤...
+ メッセージを削除...
- 検索...
+ 検索
+ ブラウザãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“
+
+ - é¸æŠžä¸ã®ä¼šè©±ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
+
+
+ - é¸æŠžä¸ã®%1$d個ã®ä¼šè©±ãŒã™ã¹ã¦å®Œå…¨ã«å‰Šé™¤ã•れã¾ã™
+
削除
+ é¸æŠžã—ãŸä¼šè©±ã‚’削除...
+
+ - %d個ã®ä¼šè©±ã‚’アーカイブã¸ç§»å‹•
+
+ やり直ã™
+
+ - %d個ã®ä¼šè©±ã‚’å—信ボックスã«ç§»å‹•
+
éµäº¤æ›ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸â€¦
+ アーカイブ済ã¿ã®ä¼šè©± (%d)
カスタム利用: %s
デフォルト利用: %s
- ç„¡ã—
+ ãªã—
- 今
- %d 分
+ ã¤ã„å…ˆã»ã©
+ %d分
- \'%s\' をリンク解除?
- ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’リンク解除ã™ã‚‹ã¨ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡/å—ä¿¡ã™ã‚‹ã“ã¨ã¯ã§ããªããªã‚Šã¾ã™ã€‚
- ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šãŒå¤±æ•—...
+ 「%sã€ã‚’切り離ã—ã¾ã™ã‹ï¼Ÿ
+ ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’切り離ã™ã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®é€å—ä¿¡ãŒã§ããªããªã‚Šã¾ã™ã€‚
+ ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã«å¤±æ•—...
å†è©¦è¡Œ
- デãƒã‚¤ã‚¹ã®ãƒªãƒ³ã‚¯è§£é™¤...
- デãƒã‚¤ã‚¹ã®ãƒªãƒ³ã‚¯è§£é™¤
- ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒå¤±æ•—!
+ デãƒã‚¤ã‚¹ã‚’切り離ã™...
+ デãƒã‚¤ã‚¹ã‚’切り離ã™
+ ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒå¤±æ•—ï¼
- ç„¡åã®ãƒ‡ãƒã‚¤ã‚¹
- %s ã¨ãƒªãƒ³ã‚¯
- 最後ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ– %s
+ åç„¡ã—ã®ãƒ‡ãƒã‚¤ã‚¹
+ %sã‚’çµã³ä»˜ã‘ã¾ã—ãŸ
+ 最終活動 %s
+ 今日
共有
+ Signalã«ã‚ˆã†ã“ã
+ TextSecureã¨RedPhoneã¯çµ±åˆã•れã¦ã€ŒSignalã€ã«ãªã‚Šã¾ã—ãŸã€‚
+ Signalã«ã‚ˆã†ã“ãï¼
+ TextSecureã¯Signalã«ç”Ÿã¾ã‚Œå¤‰ã‚りã¾ã—ãŸ
+ TextSecureã¨RedPhoneã¯ï¼‘ã¤ã®ã‚¢ãƒ—リ「Signalã€ã«ãªã‚Šã¾ã—ãŸã€‚タップã™ã‚‹ã¨è©³ç´°ãŒåˆ†ã‹ã‚Šã¾ã™ã€‚
エクスãƒãƒ¼ãƒˆ
+ テã‚ストを外部メディアã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
+ 注æ„:メッセージã®ãƒ†ã‚ストãŒå¤–部メモリã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•れã¾ã™ã€‚
䏿¢
エクスãƒãƒ¼ãƒˆä¸â€¦
- æˆåŠŸã—ã¾ã—ãŸã€‚
+ テã‚ストを外部メモリã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ...
+ ã‚¨ãƒ©ãƒ¼ï¼šå¤–éƒ¨ãƒ¡ãƒ¢ãƒªã«æ›¸ãè¾¼ã‚ã¾ã›ã‚“
+ å¤–éƒ¨ãƒ¡ãƒ¢ãƒªã«æ›¸ã込む間ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ
+ エクスãƒãƒ¼ãƒˆæˆåŠŸ
+ 永続的障害ã®ç™ºç”Ÿï¼
+ Google Playã«ç™»éŒ²ã§ããªã„ãŸã‚Signalã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。「詳細è¨å®šã€ã§å†ç™»éŒ²ã—ã¦ãã ã•ã„。
+
+ 高解åƒåº¦GIFファイルã®å–å¾—ä¸ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ
+
+ GIF
+ ステッカー
æ–°è¦ã‚°ãƒ«ãƒ¼ãƒ—
グループを更新ã™ã‚‹
グループå
æ–°è¦MMSグループ
- 予期ã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸãŸã‚ã€ã‚°ãƒ«ãƒ¼ãƒ—作æˆãŒå¤±æ•—ã—ã¾ã—ãŸã€‚
- 最低一人ã§ã‚‚グループã«å‚åŠ ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ï¼
- グループå‚åŠ è€…ä¸€äººã®é›»è©±ç•ªå·ãŒè§£èªã§ãã¾ã›ã‚“。番å·ã‚’訂æ£ã™ã‚‹ã‹ã€ãã®å®›å…ˆã‚’グループã‹ã‚‰å‰Šé™¤ã—ã¦ãã ã•ã„。
+ Signalユーザーã§ãªã„人ãŒã„ã‚‹ãŸã‚ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯MMSã¨ãªã‚Šã¾ã™ã€‚
+ Signalã«æœªç™»éŒ²ãªã®ã§ã‚°ãƒ«ãƒ¼ãƒ—を利用ã§ãã¾ã›ã‚“。「詳細è¨å®šã€ã§ç™»éŒ²ã—ã¦ãã ã•ã„。
+ 予期ã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸãŸã‚ã€ã‚°ãƒ«ãƒ¼ãƒ—作æˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚
+ グループã«ã¯èª°ã‹ï¼‘人ã¯å¿…è¦ã§ã™ï¼
+ グループã®ãƒ¡ãƒ³ãƒãƒ¼ã§é›»è©±ç•ªå·ãŒæ£ã—ããªã„人ãŒã„ã¾ã™ã€‚番å·ã‚’ä¿®æ£ã™ã‚‹ã‹ã€ãã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’削除ã—ã¦ã‹ã‚‰ã‚„り直ã—ã¦ãã ã•ã„。
グループアãƒã‚¿ãƒ¼
グループ作æˆ
%1$sを作æˆä¸...
%1$sã‚’æ›´æ–°...
- グループ詳細をèªã¿å‡ºã—ä¸...
+ Signalユーザーã§ãªã„ã®ã§%1$sã‚’åŠ ãˆã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“
+ グループ詳細をèªã¿è¾¼ã¿...
+ グループã«åŠ å…¥æ¸ˆã¿ã§ã™
ç§
@@ -151,9 +253,11 @@
エクスãƒãƒ¼ãƒˆ
システムã®SMSデータベースをインãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
+ システムã®SMSã‚’Signalã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚以å‰ã«ã‚‚インãƒãƒ¼ãƒˆã—ãŸã“ã¨ãŒã‚れã°ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒé‡è¤‡ã—ã¾ã™ã€‚
インãƒãƒ¼ãƒˆ
䏿¢
æš—å·åŒ–ã•れãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元ã—ã¾ã™ã‹ï¼Ÿ
+ æš—å·åŒ–ã•れãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元ã™ã‚‹ã¨ã€ã‚ー・è¨å®šãƒ»ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå®Œå…¨ã«ç½®ãæ›ã‚りã¾ã™ã€‚ã‚¢ãƒ—ãƒªå†…ã®æƒ…å ±ã§ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã«ãªã„ã‚‚ã®ã¯ã™ã¹ã¦å¤±ã‚れã¾ã™ã€‚
復元
平文ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—をインãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
æš—å·åŒ–ã•れã¦ã„ãªã„テã‚ストã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・ファイルã‹ã‚‰ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’インãƒãƒ¼ãƒˆã—ã¾ã™ã€‚以å‰ã«åŒã˜ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・ファイルをインãƒãƒ¼ãƒˆã—ãŸã“ã¨ãŒã‚ã‚‹å ´åˆã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒé‡è¤‡ã™ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚
@@ -167,75 +271,143 @@
æš—å·åŒ–ã•れãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・ファイルã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
復元完了ï¼
+ 押ã—ç¶šã‘ã¦éŒ²éŸ³ã€é›¢ã—ã¦é€ä¿¡
+ ã‚·ã‚§ã‚¢
+ 連絡先をé¸ã‚“ã§ãã ã•ã„
+ ã‚ャンセル
+ é€ä¿¡ä¸â€¦
+ ãƒãƒ¼ãƒˆ
+ 招待状をé€ã‚Šã¾ã—ãŸ
+ Signalをオススメã™ã‚‹
+
+ - %d人ã®å‹ã ã¡ã«SMSã‚’é€ã‚‹
+
+
+ - %d人ã«SMSã‚’é€ã‚Šã¾ã™ã‹ï¼Ÿ
+
+ 会話アプリをSignalã«å¤‰æ›´ã—ã¾ã—ょã†ã€‚%1$s
+ ã‚·ã‚§ã‚¢ã™ã‚‹ãŸã‚ã®ã‚¢ãƒ—リãŒãªã„よã†ã§ã™ã€‚
+ å‹é”ãªã‚‰ä¼šè©±ã‚’æš—å·åŒ–ã—ã¦ã‚ã’よã†
スã‚ャンã—ãŸéµã¯ã‚りã¾ã›ã‚“。
- ãƒãƒ¼ã‚³ãƒ¼ãƒ‰ã‚¹ã‚ャナをインストールã™ã‚‹?
+ コードリーダーをインストールã—ã¾ã™ã‹ï¼Ÿ
+ QRコードをèªã¿å–ã‚‹ã«ã¯ã‚³ãƒ¼ãƒ‰ãƒªãƒ¼ãƒ€ãƒ¼ãŒå¿…è¦ã§ã™
- é€ä¿¡ã«å¤±æ•—
- æ–°è¦ã®èªè¨¼ã‚ー
+ é€ä¿¡å¤±æ•—
+ æ–°ã—ã„安全番å·
MMSä¿å˜ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã—ãŸã€‚
MMSã®ãƒ—ãƒãƒã‚¤ãƒ€ãƒ¼æŽ¥ç¶šä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸâ€¦
- 無線プãƒãƒã‚¤ãƒ€ãƒ¼ã®MMSè¨å®šãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ æºå¸¯é›»è©±å›žç·šã®MMSè¨å®šãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ 通話準備ä¸
+ %sã‹ã‚‰ã®é€šè©±ã«å¤±æ•—
+ 通話失敗
+ 通話を準備ä¸
+ ç€ä¿¡
+ 通話を拒å¦
+ 応ç”
+ 終了
+ ã‚ャンセル
マルãƒãƒ¡ãƒ‡ã‚£ã‚¢ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
- グループを出ã¾ã—ãŸã€‚
- グループを更新ã—ã¾ã—ãŸã€‚
+ å—ä¿¡ã—ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯å¤ã„Signalã§æš—å·åŒ–ã•れã¦ã„ã‚‹ã®ã§è§£èªä¸èƒ½ã§ã™ã€‚Signalを最新版ã«ã—ã¦å†é€ã™ã‚‹ã‚ˆã†é€ä¿¡è€…ã«ãŠé¡˜ã„ã—ã¦ãã ã•ã„。
+ グループを抜ã‘ã¾ã—ãŸ
+ グループを更新ã—ã¾ã—ãŸ
+ %sã‹ã‚‰ç€ä¿¡
+ %sã«ç™ºä¿¡
+ %sã‹ã‚‰ä¸åœ¨ç€ä¿¡
+ %sãŒSignalã«ã„ã‚‹ã®ã§å£°ã‚’掛ã‘ã‚‹
+ ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æ¶ˆåŽ»æ™‚é–“ã‚’%1$sã«è¨å®šã—ã¾ã—ãŸ
+ %1$sãŒãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æ¶ˆåŽ»æ™‚é–“ã‚’%2$sã«è¨å®šã—ã¾ã—ãŸ
+ %sã¨ã®å®‰å…¨ç•ªå·ãŒå¤‰ã‚りã¾ã—ãŸ
- パスワードãŒä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“ï¼
+ ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæ£ã—ãã‚りã¾ã›ã‚“ï¼
å¤ã„ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæ£ã—ãã‚りã¾ã›ã‚“。
- æ–°ã—ã„パスワードを入力!
+ æ–°ã—ã„パスワードを入力ã™ã‚‹ï¼
- ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã¨ãƒªãƒ³ã‚¯ã™ã‚‹?
+ ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’çµã³ä»˜ã‘ã¾ã™ã‹ï¼Ÿ
ã‚ャンセル
- 継続
- ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã¨ãƒªãƒ³ã‚¯ã™ã‚‹?
- ãれãŒã§ãるよã†ã«ãªã‚Šã¾ã™
- デãƒã‚¤ã‚¹ã®ãƒªãƒ³ã‚¯
- æ–°ã—ã„デãƒã‚¤ã‚¹ã®ãƒªãƒ³ã‚¯...
- デãƒã‚¤ã‚¹ãŒã‚りã¾ã›ã‚“。
- ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ãƒ©ãƒ¼ã€‚
- QRコードãŒç„¡åŠ¹ã€‚
- ã™ã¿ã¾ã›ã‚“ã€ã‚ãªãŸã¯ã™ã§ã«ã¨ã¦ã‚‚多数ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’リンクã—ã¦ã„ã¾ã™ã€ãªã‚“らã‹ã‚’削除ã—ã¦ãã ã•ã„...
+ 続行
+ ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã‚’çµã³ä»˜ã‘ã¾ã™ã‹ï¼Ÿ
+ 次ãŒå¯èƒ½ã«ãªã‚Šã¾ã™:
+ ・自分ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’èªã‚€\n
+・自分ã®åå‰ã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹
+ デãƒã‚¤ã‚¹ã‚’çµã³ä»˜ã‘ã‚‹
+ æ–°ã—ã„デãƒã‚¤ã‚¹ã‚’çµã³ä»˜ã‘ä¸...
+ デãƒã‚¤ã‚¹ã®èªè¨¼å®Œäº†
+ デãƒã‚¤ã‚¹ãŒã‚りã¾ã›ã‚“
+ ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ãƒ©ãƒ¼
+ QRã‚³ãƒ¼ãƒ‰ãŒæ£ã—ãã‚りã¾ã›ã‚“
+ çµã³ä»˜ã‘ã¦ã„るデãƒã‚¤ã‚¹ãŒå¤šã™ãŽã¾ã™ã€‚ã©ã‚Œã‹ã‚’切り離ã—ã¦ãã ã•ã„。
+ ã“ã®QRã‚³ãƒ¼ãƒ‰ã¯æ£ã—ã„リンクã§ã¯ã‚りã¾ã›ã‚“
+ デãƒã‚¤ã‚¹ã‚’çµã³ä»˜ã‘ã¾ã™ã‹ï¼Ÿ
+ アプリ外ã®ã‚¹ã‚ャナーを使ã£ã¦ãƒ‡ãƒã‚¤ã‚¹ã‚’çµã³ä»˜ã‘よã†ã¨ã—ã¦ã„ã¾ã™ãŒã€å®‰å…¨ã®ãŸã‚Signal内ã‹ã‚‰ã‚³ãƒ¼ãƒ‰ã‚’スã‚ャンã—ã¦ãã ã•ã„。
+
+ 消ãˆã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
+ ã‚ãªãŸã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«æ¶ˆåŽ»æœŸé™ã¯ä»˜ãã¾ã›ã‚“
+ ã“ã®ä¼šè©±å†…ã§é€å—ä¿¡ã•れるメッセージã¯é–²è¦§å¾Œ%sã§æ¶ˆãˆã¾ã™
パスワード入力
+ Signalアイコン
パスワードをè¨å®š
- 無効ãªãƒ‘スワード
+ パスワードãŒç„¡åй
ã‚ãªãŸã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ã„ã‚‹Google Play Servicesã®ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯æ©Ÿèƒ½çš„ã«é©åˆ‡ã§ã¯ã‚りã¾ã›ã‚“。Google Play Servicesã‚’å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦å†æŒ‘戦ã—ã¦ã¿ã¦ãã ã•ã„。
アプリを評価
- ã“ã®ã‚¢ãƒ—ãƒªã§æ¥½ã—ã‚ãŸã®ãªã‚‰ã€ç§é”を助ã‘ã‚‹ãŸã‚ã¨ã—ã¦è©•価をãŠé¡˜ã„ã—ã¾ã™ã€‚
- 今評価ã™ã‚‹!
+ ã“ã®ã‚¢ãƒ—リã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ–¹ã«ã¯è©•価アンケートã¸ã®å”力をãŠé¡˜ã„ã„ãŸã—ã¾ã™ã€‚
+ 評価ã™ã‚‹ï¼
ã—ã¾ã›ã‚“
後ã§
+ アプリã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„よã†ã§ã™
- ã“ã®é€£çµ¡å…ˆã‚’ブãƒãƒƒã‚¯ã—ã¾ã™ã‹?
+ ã“ã®é€£çµ¡å…ˆã‚’ブãƒãƒƒã‚¯ã—ã¾ã™ã‹ï¼Ÿ
+ ã“ã®é€£çµ¡å…ˆã‹ã‚‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚„電話をå—ä¿¡ã§ããªããªã‚Šã¾ã™ã€‚
ブãƒãƒƒã‚¯
- ã“ã®é€£çµ¡å…ˆã®ãƒ–ãƒãƒƒã‚¯ã‚’解除ã—ã¾ã™ã‹?
- ã“ã®é€£çµ¡å…ˆã®ãƒ–ãƒãƒƒã‚¯ã‚’解除ã—ã¾ã™ã‹?
+ ã“ã®é€£çµ¡å…ˆã®ãƒ–ãƒãƒƒã‚¯ã‚’解除ã—ã¾ã™ã‹ï¼Ÿ
+ ã“ã®é€£çµ¡å…ˆã‹ã‚‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚„電話をå—ä¿¡ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
ブãƒãƒƒã‚¯è§£é™¤
有効
無効
+ 応ç”ä¸
+ 通話終了
+ 発信
+ å–り消ã™
+ é€šè©±ã¯æ‹’å¦ã•れã¾ã—ãŸ
+ ç€ä¿¡
+ 話ã—ä¸
+ 接続完了
+ 接続試行ä¸
+ ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯å¤±æ•—
+ 応ç”ãªã—
+ ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯ä¸
+ 接続失敗
+ エラー発生
+ é‡å¤§ã‚¨ãƒ©ãƒ¼
+ ãƒã‚°ã‚¤ãƒ³å¤±æ•—
+ サーãƒãƒ¼ã‹ã‚‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
+ 未登録番å·
+ 相手先ãŒSignalユーザーã§ã‚りã¾ã›ã‚“
+ 分ã‹ã‚Šã¾ã—ãŸ
+ Signalã§æŽ¥ç¶š
å›½ã‚’é¸æŠž
国番å·ã‚’入力ã—ã¦ä¸‹ã•ã„
電話番å·ã‚’入力ã—ã¦ä¸‹ã•ã„
無効ãªç•ªå·
指定ã•れãŸç•ªå·(%s)ã¯ãŠä½¿ã„ã§ãã¾ã›ã‚“。
使用ä¸å¯èƒ½
- 申ã—訳ã‚りã¾ã›ã‚“ãŒã€ ãŠä½¿ã„ã®ãƒ‡ãƒã‚¤ã‚¹ã§ã¯ãƒ‡ãƒ¼ã‚¿ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®é€ä¿¡ãŒã§ãã¾ã›ã‚“。4.0よりå¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚¢ãƒ³ãƒ‰ãƒã‚¤ãƒ‰ã‚’ãŠä½¿ã„ã®å ´åˆã€ã‚°ãƒ¼ã‚°ãƒ«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ç™»éŒ²ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚4.0ã¾ãŸã¯4.0より新ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ãŠä½¿ã„ã®å ´åˆã€ã‚°ãƒ¼ã‚°ãƒ«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¸ã®ç™»éŒ²ã¯å¿…è¦ã‚りã¾ã›ã‚“ãŒã€Google Play ストア アプリをインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
-
- ã“ã®è²´æ–¹ã®ãƒŠãƒ³ãƒãƒ¼ã‚’二é‡ãƒã‚§ãƒƒã‚¯! SMSã§åˆã£ã¦ã„ã‚‹ã‹æ¤œè¨¼ã—ã¾ã™ã€‚
+ 申ã—訳ã‚りã¾ã›ã‚“ãŒã€ データメッセージã®é€ä¿¡ã¯ãŠä½¿ã„ã®ãƒ‡ãƒã‚¤ã‚¹ã§ã¯ã§ãã¾ã›ã‚“。アンドãƒã‚¤ãƒ‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ4.0よりå¤ã„å ´åˆã€ã‚°ãƒ¼ã‚°ãƒ«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ç™»éŒ²ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ4.0以é™ã®å ´åˆã¯ã‚°ãƒ¼ã‚°ãƒ«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¸ã®ç™»éŒ²ã¯ä¸è¦ã§ã™ãŒã€Google Playã®ã‚¢ãƒ—リをインストールã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ ã“ã®ç•ªå·ã§æ£ã—ã„ã‹ç¢ºèªã—ã¦ãã ã•ã„。ã“ã®ã‚ã¨SMSを使ã£ã¦ç•ªå·ã®ç¢ºèªã‚’行ã„ã¾ã™ã€‚
続行
編集
- å¯èƒ½ãªåŽŸå›
+ å¯èƒ½æ€§ã®ã‚る原å›
番å·ã‚’確èªä¸...
%sを編集
@@ -245,45 +417,53 @@
確èªã™ã‚‹ãŸã‚ã«æŽ¥ç¶šä¸...
ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ãƒ©ãƒ¼ï¼
接続ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚インターãƒãƒƒãƒˆã«ã¤ãªãŒã£ã¦ã„ã‚‹ã‹ã‚’確ã‹ã‚ã¦ãã ã•ã„。
- 検証失敗ï¼
- 検証コードãŒåˆã£ã¦ã„ã¾ã›ã‚“。もã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
- 多数ã®è©¦è¡Œ
- æ¤œè¨¼ã‚³ãƒ¼ãƒ‰ãŒæ•°å›žé–“é•ãˆã¦å…¥åŠ›ã•れã¾ã—ãŸã€‚一分待ã£ã¦ã¾ãŸãŠè©¦ã—ãã ã•ã„。
+ 確èªå¤±æ•—ï¼
+ 確èªã‚³ãƒ¼ãƒ‰ãŒæ£ã—ãã‚りã¾ã›ã‚“。å†åº¦ãŠè©¦ã—ãã ã•ã„。
+ 試行ãŒå¤šã™ãŽã¾ã™
+ 確èªã‚³ãƒ¼ãƒ‰ã®é–“é•ã„回数ãŒå¤šã™ãŽã¾ã™ã€‚1分ã»ã©å¾…ã£ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—下ã•ã„。
é€šè©±ã‚’è¦æ±‚ä¸
- æ¤œè¨¼ç”¨é€šè©±ã‚’è¦æ±‚ä¸â€¦
+ 確èªç”¨ã®é€šè©±ã‚’申請ä¸...
サーãƒãƒ¼ã‚¨ãƒ©ãƒ¼
サーãƒãƒ¼ãŒã‚¨ãƒ©ãƒ¼ã‚’検出ã—ã¾ã—ãŸã€‚ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
- 多数ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆï¼
- ã‚ãªãŸã¯ã™ã§ã«ç¢ºèªç”¨é€šè©±ã‚’è¦æ±‚ã—ã¾ã—ãŸã€‚二å分待ã£ã¦ã¾ãŸãŠè©¦ã—ãã ã•ã„。
- 登録紛争
+ リクエストãŒå¤šã™ãŽã¾ã™
+ 検証用ã®é€šè©±ã¯ã™ã§ã«ç”³è«‹æ¸ˆã¿ã§ã™ã€‚å†ç”³è«‹ã¯20分待ãŸãªã‘れã°å‡ºæ¥ã¾ã›ã‚“。
+ 登録ä¸ä¸€è‡´
+ ã“ã®ç•ªå·ã¯æ—¢ã«Signalã®åˆ¥ã®ã‚µãƒ¼ãƒãƒ¼ã«ç™»éŒ²ã•れã¦ã„ã¾ã™ã€‚ãã“ã§ã®ç™»éŒ²ã‚’解除ã—ã¦ã‹ã‚‰å†åº¦è©¦ã—ã¦ãã ã•ã„。
登録完了
+ 登録ãŒå®Œäº†ã—ã¾ã—ãŸ
登録エラー
+ 登録ã§å•題ãŒç™ºç”Ÿã—ã¾ã—ãŸ
+ ç”»åƒ
+ 音声
+ å‹•ç”»
- 無効ãªéµäº¤æ›ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ä¿¡ã—ã¾ã—ãŸã€‚
-
-å—ä¿¡ã—ãŸéµäº¤æ›ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ãƒ—ãƒãƒˆã‚³ãƒ«ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒç„¡åйã§ã™ã€‚
- æ–°ãŸãªè˜åˆ¥æƒ…å ±ã‚’å—ä¿¡ã—ã¾ã—ãŸãŒèªè¨¼ãŒä¸æ˜Žã§ã™ã€‚ã‚¿ãƒƒãƒ—ã§æ¤œè¨¼ã—ã¦ãã ã•ã„。
- 多é‡é€ä¿¡ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚
+ 無効ãªéµäº¤æ›ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ä¿¡ã—ã¾ã—ãŸ
+ å—ä¿¡ã—ãŸéµäº¤æ›ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ãƒ—ãƒãƒˆã‚³ãƒ«ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒç„¡åйã§ã™
+ æ–°ã—ã„安全番å·ãŒä»˜ã„ãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ã‘å–りã¾ã—ãŸã€‚処ç†ã‚„表示を行ã†ã«ã¯ã‚¿ãƒƒãƒ—ã—ã¦ãã ã•ã„。
+ å®‰å…¨ãªæŽ¥è§¦ã‚’è¨å®šã—ç›´ã—ã¾ã—ãŸ
+ %sãŒå®‰å…¨ãªæŽ¥è§¦ã‚’è¨å®šã—ç›´ã—ã¾ã—ãŸã€‚
+ é‡è¤‡ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
- グループを出ã¾ã—ãŸâ€¦
- è‰ç¨¿:
+ グループを抜ã‘ã¾ã—ãŸ...
+ 安全ãªã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒãƒªã‚»ãƒƒãƒˆã•れã¾ã—ãŸ
+ 下書ã:
+ 発信ã—ã¾ã—ãŸ
+ ç€ä¿¡ãŒã‚りã¾ã—ãŸ
+ ä¸åœ¨ç€ä¿¡ãŒã‚りã¾ã—ãŸ
+ メディアã§ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
+ %sãŒSignalã«ã„ã‚‹ã®ã§å£°ã‚’掛ã‘ã‚‹
+ ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æ¶ˆåŽ»æ™‚é–“ãŒ%sã«è¨å®šã•れã¾ã—ãŸ
+ %sã¨ã®å®‰å…¨ç•ªå·ãŒå¤‰ã‚りã¾ã—ãŸ
- èªè¨¼ã‚ーãŒã‚りã¾ã›ã‚“。
- å—信者ã¯èªè¨¼ã‚ーãŒã‚りã¾ã›ã‚“。
- å—信者ã¯èªè¨¼ã‚ーãŒã‚りã¾ã›ã‚“ï¼
- è¦å‘Šã€ã‚¹ã‚ャンã—ãŸéµãŒæ£ã—ãã‚りã¾ã›ã‚“ï¼ãƒ•ィンガープリントã®ãƒ†ã‚ストを慎é‡ã«ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。
- ç…§åˆã§ãã¾ã›ã‚“ã§ã—ãŸï¼
- éµãŒä¸€è‡´ã—ã¾ã—ãŸã€‚ã“れらã®éµã¨ä¸€ç·’ã«ã€è‡ªåˆ†ã®éµã‚‚確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
- ç…§åˆã—ã¾ã—ãŸã€‚
- èªè¨¼ã‚ーãŒã‚りã¾ã›ã‚“。
-
- èªè¨¼ã‚ーãŒã‚りã¾ã›ã‚“。
- è¦å‘Šã€ã‚¹ã‚ャンã—ãŸéµãŒæ£ã—ãã‚りã¾ã›ã‚“ï¼
- ç…§åˆã§ãã¾ã›ã‚“ã§ã—ãŸï¼
- スã‚ャンã—ãŸéµãŒä¸€è‡´ã—ã¾ã—ãŸï¼
- ç…§åˆã§ãã¾ã—ãŸã€‚
+ 相手ã¯å¤ã„Signalを使ã£ã¦ã„ã¾ã™ã€‚Signalã‚’æ›´æ–°ã—ã¦ã‹ã‚‰å®‰å…¨ç•ªå·ã®ç¢ºèªã‚’行ã†ã‚ˆã†ãŠé¡˜ã„ã—ã¦ãã ã•ã„。
+ 相手ãŒä½¿ã£ã¦ã„ã‚‹Signalã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒæ–°ã—ã„ãŸã‚,QRコードã®å½¢å¼ãŒç•°ãªã‚Šã¾ã™ã€‚Signalã‚’æ›´æ–°ã—ã¦ã‹ã‚‰æ”¹ã‚ã¦æ¯”較ã—ã¦ãã ã•ã„。
+ èªã¿å–ã£ãŸQRã‚³ãƒ¼ãƒ‰ã¯æ£å½“ãªå®‰å…¨ç•ªå·ã§ã¯ã‚りã¾ã›ã‚“。もã†ä¸€åº¦èªã¿å–ã£ã¦ä¸‹ã•ã„。
+ 安全番å·ã®å…±æœ‰ã‚’ä»¥ä¸‹ã®æ–¹æ³•ã§è¡Œã†
+ ç§ãŸã¡ã®å®‰å…¨ç•ªå·ã¯ï¼š
+ ã‚·ã‚§ã‚¢ã™ã‚‹ãŸã‚ã®ã‚¢ãƒ—リãŒãªã„よã†ã§ã™ã€‚
+ クリップボードã«å®‰å…¨ç•ªå·ãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
æ—¢å˜ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒã‚りã¾ã™ãŒã€éµäº¤æ›ã‚’é–‹å§‹ã—ã¾ã™ã‹ï¼Ÿ
é€ä¿¡
@@ -292,16 +472,16 @@
復å·ã—ã¦ã„ã¾ã™ã€‚ãŠå¾…ã¡ä¸‹ã•ã„…
メッセージã¯å˜åœ¨ã—ãªã„セッションã®ãŸã‚ã«æš—å·åŒ–ã•れã¦ã„ã¾ã™â€¦
- メッセージã®å¾©å·åŒ–エラー。
+ メッセージ復å·åŒ–ã§ã‚¨ãƒ©ãƒ¼
- メッセージã®å¾©å·åŒ–エラー。
+ メッセージ復å·åŒ–ã§ã‚¨ãƒ©ãƒ¼
MMSサーãƒãƒ¼ã«æŽ¥ç¶šä¸â€¦
MMSをダウンãƒãƒ¼ãƒ‰ä¸â€¦
- MMSをダウンãƒãƒ¼ãƒ‰å¤±æ•—ï¼
+ MMSã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰å¤±æ•—ï¼
ダウンãƒãƒ¼ãƒ‰ä¸â€¦
ダウンãƒãƒ¼ãƒ‰ã‚’続行ã™ã‚‹ã®ã«ã€MMSè¨å®šã‚’行ã£ã¦ä¸‹ã•ã„。
- メッセージã®å¾©å·åŒ–エラー。
+ メッセージ復å·åŒ–ã§ã‚¨ãƒ©ãƒ¼
MMSを復å·ã—ã¦ã„ã¾ã™ã€‚ãŠå¾…ã¡ä¸‹ã•ã„…
MMSãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒæ£ã—ãæš—å·åŒ–ã•れã¦ã„ã¾ã›ã‚“…
@@ -311,11 +491,16 @@
インãƒãƒ¼ãƒˆä¸
メッセージをインãƒãƒ¼ãƒˆä¸
+ インãƒãƒ¼ãƒˆå®Œäº†
+ システム・データベースã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆãŒå®Œäº†
+ タッãƒã—ã¦é–‹ã
+ タッãƒã—ã¦é–‹ãã‹ã€éµã‚’タッãƒã—ã¦é–‰ã˜ã‚‹
+ Signalã®ãƒãƒƒã‚¯è§£é™¤
パスワードã§ãƒãƒƒã‚¯ã™ã‚‹
- %2$d 会話内㮠%1$d ã®æ–°è¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
- 最新ã®å—ä¿¡ã¯æ¬¡ã‹ã‚‰: %1$s
+ %2$d個ã®ä¼šè©±ã«%1$då€‹ã®æ–°ç€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
+ 最新ã®å—ä¿¡: %1$s
メッセージをãƒãƒƒã‚¯...
メディアメッセージ: %s
(無題)
@@ -324,14 +509,34 @@
メッセージé…ä¿¡ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã—ãŸã€‚
ã™ã¹ã¦æ—¢èªã«ã™ã‚‹
æ—¢èªã«ã™ã‚‹
- メディアーメッセージ
+ メディアメッセージ
返信
- é€ä¿¡ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã®å•題!
+ Signalã®ãƒãƒƒã‚¯ä¸ã¯ã‚¯ã‚¤ãƒƒã‚¯ãƒ»ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã¯ä½¿ãˆã¾ã›ã‚“
+ メッセージé€ä¿¡ã§å•題発生
+ Signal
æ–°è¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
+ ç”»åƒ
+ ç”»åƒ
+ 音声
+ 音声
+ å‹•ç”»
+ å‹•ç”»
+ 連絡先
+ 連絡先
+ カメラ
+ カメラ
+ å ´æ‰€
+ å ´æ‰€
+ GIF
+ Gif
+ 添付引出ã—を切り替ãˆã‚‹
+ æ—¢å˜ã®ãƒ‘スワード
+ æ–°ã—ã„パスワード
+ æ–°ã—ã„パスワードをå†å…¥åŠ›
åå‰ã‚‚ã—ãã¯ç•ªå·ã‚’入力
@@ -342,52 +547,94 @@
é¸æŠž
- ブãƒãƒƒã‚¯ã—ã¦ã„ãªã„連絡先...
+ ブãƒãƒƒã‚¯ã—ã¦ã„る連絡先ã¯ã‚りã¾ã›ã‚“...
最近ã®é€šè©±ã¯ã‚りã¾ã›ã‚“。
会話を消音
- ã‚»ã‚ュアã§ã¯ãªã„SMSã‚’é€ä¿¡
- ã‚»ã‚ュアã§ã¯ãªã„MMSã‚’é€ä¿¡
+ プッシュé€ä¿¡
+ SMSã‚’é€ä¿¡ï¼ˆé€šä¿¡å®‰å…¨æ€§ã¯ç¢ºä¿ã•れã¾ã›ã‚“)
+ MMSã‚’é€ä¿¡ï¼ˆé€šä¿¡å®‰å…¨æ€§ã¯ç¢ºä¿ã•れã¾ã›ã‚“)
+ %1$sã‹ã‚‰
é€ä¿¡
削除
%1$sã¨ã®ä¼šè©±
メッセージ新è¦ä½œæˆ
- 絵文å—ã‚ーボードを切り替ãˆ
+ 絵文å—ã‚ーボードã®åˆ‡æ›¿
添付ã®ã‚µãƒ ãƒã‚¤ãƒ«
- 添付ドãƒãƒ¯ãƒ¼ã®ãƒˆã‚°ãƒ«
+ カメラ添付ã®å¼•出ã—ã‚’ç´ é€Ÿã切り替ãˆã‚‹
+ 音声を録音ã—ã¦é€ä¿¡ã™ã‚‹
+ Signalã§SMSãŒã§ãるよã†ã«ã™ã‚‹
+ スライドã—ã¦ã‚ャンセル
メディアメッセージダウンãƒãƒ¼ãƒ‰
- メディアーメッセージ
+ メディアメッセージ
æš—å·åŒ–ã•れãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
ダウンãƒãƒ¼ãƒ‰
ダウンãƒãƒ¼ãƒ‰ä¸
é€ä¿¡å¤±æ•—
承èªå¾…ã¡
- å—ä¿¡æˆåŠŸ
+ é…信済ã¿
ダウンãƒãƒ¼ãƒ‰
連絡先ã®å†™çœŸ
ダウンãƒãƒ¼ãƒ‰ä¸
+
+ å†ç”Ÿ
+ ä¸€æ™‚åœæ¢
+ ダウンãƒãƒ¼ãƒ‰
ä¸€æ‹¬é¸æŠžãƒ¢ãƒ¼ãƒ‰
- é¸æŠžæ•°: %s
+ é¸æŠžæ•°ã¯%s
国åã‚’èªã¿è¾¼ã¿ä¸...
検索
+ çµã³ä»˜ã‘るデãƒã‚¤ã‚¹ã«è¡¨ç¤ºã•れã¦ã„ã‚‹QRコードをスã‚ャンã™ã‚‹
+ デãƒã‚¤ã‚¹ã‚’çµã³ä»˜ã‘ã‚‹
- リンクã—ãŸãƒ‡ãƒã‚¤ã‚¹ã¯ã‚りã¾ã›ã‚“...
+ çµã³ä»˜ã„ã¦ã„るデãƒã‚¤ã‚¹ã¯ã‚りã¾ã›ã‚“...
+ çµã³ä»˜ã‘るデãƒã‚¤ã‚¹ã‚’追åŠ
+ ç¶šã‘ã‚‹
+
+ オフ
+
+ - %dç§’
+
+ %dç§’
+
+ - %d分
+
+ %d分
+
+ - %d時間
+
+ %d時間
+
+ - %dæ—¥
+
+ %dæ—¥
+
+ - %d週間
+
+ %d週間
+
+ GIFやステッカーを検索
+
+ 何も見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ デãƒã‚¤ã‚¹ä¸Šã®ãƒã‚°ã‚’èªã‚ã¾ã›ã‚“。ãŸã ã—ADBを使ã£ã¦ãƒ‡ãƒãƒƒã‚°ãƒã‚°ã‚’èªã‚€ã“ã¨ã¯ã§ãã¾ã™ã€‚
æå‡ºã©ã†ã‚‚ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ï¼
æå‡ºä¸
ãƒã‚°ã‚’gistã«æŠ•ç¨¿ä¸â€¦
+ ブラウザãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“
+ Signalã®æš—å·åŒ–ã•れãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’インãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
æºå¸¯ç«¯æœ«ã«ã‚る既定データベースã¯å¤‰æ›´ã•れã¾ã›ã‚“。
スã‚ップã™ã‚‹
インãƒãƒ¼ãƒˆ
@@ -395,120 +642,158 @@
インãƒãƒ¼ãƒˆä¸
データベースを更新ä¸â€¦
- éžæš—å·ãƒ†ã‚ストã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・ファイルをエクスãƒãƒ¼ãƒˆ
+ 平文テã‚ストã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—をエクスãƒãƒ¼ãƒˆ
+ テã‚ストã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を「SMS Backup & Restoreã€ãŒèªã‚ã‚‹å½¢å¼ã§å¤–部メモリã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã™ã‚‹
システムã®SMSデータベースをインãƒãƒ¼ãƒˆ
- éžæš—å·ãƒ†ã‚ストã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・ファイルをインãƒãƒ¼ãƒˆ
+ デフォルトã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚¢ãƒ—リã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’インãƒãƒ¼ãƒˆã™ã‚‹
+ æš—å·åŒ–ã•れãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元ã™ã‚‹
+ 以å‰ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•ã‚ŒãŸæš—å·åŒ–ã•れãŸãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を復元ã™ã‚‹
+ 平文テã‚ストã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—をインãƒãƒ¼ãƒˆ
+ 「SMS Backup & Restoreã€å½¢å¼ã®ãƒ†ã‚スト・ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルをインãƒãƒ¼ãƒˆã™ã‚‹ã€‚
+ 会話全体を見る
ç”»åƒãªã—
- 検証
+ 確èª
å†é€
- ã“ã®ç«¯æœ«ã¯ã€ã”自分ã§MMSè¨å®šã‚’ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ ã“ã®é›»è©±ã§ã¯MMSã®è¨å®šã‚’手動ã§è¡Œã†å¿…è¦ãŒã‚りã¾ã™
有効
無効
- セットã—ã¦ãªã„
- 入力ã•れãŸãƒ†ã‚ストã¯å¦¥å½“ãªURIã§ã¯ã‚りã¾ã›ã‚“
- 入力ã•れãŸãƒ†ã‚ストã¯å¦¥å½“ãªãƒ›ã‚¹ãƒˆã§ã¯ã‚りã¾ã›ã‚“
+ è¨å®šãªã—
+ 入力ã•れãŸURIã¯æ£ã—ãã‚りã¾ã›ã‚“
+ 入力ã•れãŸãƒ›ã‚¹ãƒˆã¯æ£ã—ãã‚りã¾ã›ã‚“
- グループ更新。
+
+ - %1$sãŒã‚°ãƒ«ãƒ¼ãƒ—ã«åŠ ã‚りã¾ã—ãŸ
+
+ グループ更新
+ グループåãŒã€Œ%1$sã€ã«ãªã‚Šã¾ã—ãŸ
ãƒãƒƒã‚¯è§£é™¤
+ グループメッセージや画åƒç‰ã‚’æºå¸¯é›»è©±å›žç·šã‚’使ã£ã¦é€ã‚‹ã‚ˆã†MMSã®è¨å®šã‚’ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ãŒã€ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã®è¨å®šæƒ…å ±ãŒä¸æ˜Žã§ã™ã€‚ã“れã¯ãƒ‡ãƒã‚¤ã‚¹ã«ãƒãƒƒã‚¯ã‚„制é™ãŒæŽ›ã‹ã£ã¦ã„ã‚‹å ´åˆã«èµ·ã“ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚
+ グループメッセージや画åƒç‰ã‚’é€ã‚‹ã«ã¯ã€ŒOKã€ã‚’押ã—ã¦è¨å®šã‚’完了ã—ã¦ãã ã•ã„。MMSã®è¨å®šã¯ä¸€èˆ¬çš„ã«ã¯ã€Œã‚¢ã‚¯ã‚»ã‚¹ãƒã‚¤ãƒ³ãƒˆåã€ã‚’探ã™ã“ã¨ã§è¦‹ã¤ã‹ã‚Šã¾ã™ã€‚ã“れã¯ï¼‘度行ãˆã°å分ã§ã™ã€‚
ブãƒãƒƒã‚¯æ¸ˆã¿
- 消音ã—ã¦ã®ä¼šè©±
- 会話を表示ã—ã¦ã„ã‚‹é–“ã®é€šçŸ¥ç„¡åŠ¹åŒ–
+ 消音会話
+ ã“ã®ä¼šè©±ã®é€šçŸ¥ã‚’無効ã«ã™ã‚‹
通知音
振動
ブãƒãƒƒã‚¯
色
ã“ã®é€£çµ¡å…ˆã®è‰²
+ 安全番å·ã‚’確èªã™ã‚‹
+ Signal通話
+ 通話を終了
+ 音声
+ 消音
+ Signal通話
+ Signalã§ä½¿ã†è‡ªåˆ†ã®é›»è©±ç•ªå·ã‚’確èªã—ã¦ãã ã•ã„。
ã‚ãªãŸã®å›½
ã‚ãªãŸã®å›½ç•ªå·ã¨é›»è©±ç•ªå·
電話番å·
登録
- 登録ã«ã¯ã‚µãƒ¼ãƒãƒ¼ã¸ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆæƒ…å ±ã®é€ä¿¡ãŒå¿…è¦ã§ã™ã€‚ãã®æƒ…å ±ã¯ä¿å˜ã•れã¾ã›ã‚“。
+ 登録ã™ã‚‹ã¨é€£çµ¡å…ˆæƒ…å ±ã®ä¸€éƒ¨ãŒã‚µãƒ¼ãƒãƒ¼ã«é€ã‚‰ã‚Œã¾ã™ãŒã€ä¿å˜ã¯ã—ã¾ã›ã‚“。
Powered by twilio
ã„ãã¤ã‹ã®å•題ã®å¯èƒ½æ€§ãŒã‚りã¾ã™
åŽŸå› :
- SMSインターセプタ
+ SMSã®ã‚¤ãƒ³ã‚¿ãƒ¼ã‚»ãƒ—ト
+ ä»–ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚¢ãƒ—リãŒSMSメッセージをã™ã¹ã¦å–り込んã§ã„ã‚‹ã‹ã‚‚知れã¾ã›ã‚“。「Your Signal verification code:ã€ã§å§‹ã¾ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ä»–ã®ã‚¢ãƒ—リãŒå—ä¿¡ã—ã¦ã„ãªã„ã‹ç¢ºèªã—ã¦ãã ã•ã„。å—ä¿¡ã—ã¦ã„ã‚‹å ´åˆã€ãã®ã‚¢ãƒ—リãŒãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å–り込ã¾ãªã„よã†è¨å®šã—ã¦ãã ã•ã„。
番å·ãŒé–“é•ã£ã¦ã„ã¾ã™ã€‚
-
-番å·ã«é–“é•ã„ãŒãªã„事ã¨å›½ã«å½“ãŸã‚‹å½¢å¼ã§å…¥åŠ›ã•れã¦ã„ã‚‹ã‹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。
+ 入力ã—ãŸç•ªå·ï¼ˆã¨å½¢å¼ï¼‰ãŒæ£ã—ã„ã‹ç¢ºèªã—ã¦ãã ã•ã„。
Google Voice
+ Google Voice 番å·ã¯Signalã§ã¯ä½¿ãˆã¾ã›ã‚“
- é›»è©±ã§æ¤œè¨¼
+ 電話ã§ç¢ºèª
+ 番å·ç¢ºèªã¯é›»è©±ã§ã‚‚å¯èƒ½ã§ã™ã€‚「電話ã§è¡Œã†ã€ã‚’押ã™ã¨ï¼–æ¡ã®ã‚³ãƒ¼ãƒ‰ãŒæµã‚Œã¾ã™ã®ã§ã€ãれを入力ã—ã¦ãã ã•ã„。
確èªã™ã‚‹
- ç§ã«é›»è©±
+ 電話ã§è¡Œã†
番å·ã‚’編集
接続エラー
- å¯èƒ½ãªåŽŸå› :
- ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æŽ¥ç¶šã—ã¦ã„ã¾ã›ã‚“。
- ファイアウォール制é™ã€‚
+ サーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸ
+ å•題ã®å¯èƒ½æ€§ã‚り:
+ ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šãªã—
+ ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æŽ¥ç¶šã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚モãƒã‚¤ãƒ«ãƒ‡ãƒ¼ã‚¿é€šä¿¡ã‚„Wi-Fiã«æŽ¥ç¶šã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
+ å¼·ã™ãŽã‚‹ãƒ•ァイアウォール
+ 接続ãŒWi-Fiã®å ´åˆã€Signalサーãƒãƒ¼ã¨ã®æŽ¥ç¶šã‚’ファイアウォールãŒé®æ–ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚別ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚„モãƒã‚¤ãƒ«ãƒ‡ãƒ¼ã‚¿é€šä¿¡ã«åˆ‡ã‚Šæ›¿ãˆã¦ã¿ã¦ãã ã•ã„。
+ 電話番å·ã‚’確èªã™ã‚‹ãŸã‚ã«SMSã‚’é€ã‚Šã¾ã™ã€‚
接続ä¸...
- 検証用SMSã‚’ãŠå¾…ã¡â€¦
+ SMSã§ç¢ºèªä¸...
サーãƒãƒ¼ã«ç™»éŒ²ä¸...
- 検証ãŒçµ‚ã‚ã‚‹ã¾ã§ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。検証完了後ãŠçŸ¥ã‚‰ã›ã—ã¾ã™ã€‚
- SMSã§ã®æ¤œè¨¼ãŒå¤±æ•—ã—ã¾ã—ãŸã€‚
+ 確èªãŒçµ‚ã‚ã‚‹ã¾ã§ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。終了後ã«é€šçŸ¥ã‚’é€ã‚Šã¾ã™ã€‚
+ SMSã§ã®ç¢ºèªã‚’å¾…ã£ã¦ã„ã‚‹é–“ã«ã‚¿ã‚¤ãƒ アウトã—ã¾ã—ãŸ
+ SMSã§ã®ç¢ºèªã«å¤±æ•—ã—ã¾ã—ãŸ
éµã‚’作æˆä¸...
アラート
電話
ãƒã‚§ãƒƒã‚¯
åå‰ã¾ãŸã¯ç•ªå·ã‚’入力ã—ã¦ä¸‹ã•ã„
- å‚åŠ è€…ã‚’è¿½åŠ ã™ã‚‹
-
- 相手ã®èªè¨¼ã‚ー(通信相手ãŒèªã‚€ï¼‰:
- 自分ã®èªè¨¼ã‚ー(自分ãŒèªã‚€ï¼‰:
+ メンãƒãƒ¼ã‚’追åŠ
+
+ 安全番å·ã®ç¢ºèªã«ã¤ã„ã¦ã®è©³ç´°]]>
+ èªã¿å–ã‚‹
+
+ 安全番å·ã‚’共有ã™ã‚‹
- ã„ãã¤ã‹ã®å•題ã«ç€ç›®ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
+ å•題ãŒã‚りã¾ã™
é€ä¿¡
å—ä¿¡
+ 消ãˆã‚‹
経由
To:
From:
With:
- パスワードã®ä½œæˆ
+ パスワード作æˆ
パスワード入力
é€£çµ¡å…ˆã‚’é¸æŠž
- 公共èªè¨¼ã‚ー
- パスワードã®å¤‰æ›´
- èªè¨¼æ¤œè¨¼
+ SignalãŒæ¤œå‡ºã•れã¾ã—ãŸ
+ パスワード変更
+ 安全番å·ã‚’確èªã™ã‚‹
+ デãƒãƒƒã‚°ãƒã‚°ã‚’æå‡º
+ メディアã®ãƒ—レビュー
ã™ã¹ã¦ã®ç”»åƒ
- %1$s ã¨ã™ã¹ã¦ã®ç”»åƒ
- リンク済ã¿ãƒ‡ãƒã‚¤ã‚¹ã®ç®¡ç†
+ %1$sã¨ã®ç”»åƒ
+ メッセージ詳細
+ çµã³ä»˜ã„ã¦ã„るデãƒã‚¤ã‚¹
+ å‹é”ã«ã‚ªã‚¹ã‚¹ãƒ¡ã™ã‚‹
+ アーカイブ済ã¿ã®ä¼šè©±
インãƒãƒ¼ãƒˆï¼ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ
- デフォルトを利用ã™ã‚‹
- カスタムを利用ã™ã‚‹
- 1時間消音
- 2時間消音
+ デフォルトを使ã†
+ カスタムを使ã†
+ 1時間ミュート
+ 2時間ミュート
1日消音
7日消音
- デフォルトè¨å®š
+ 1年間消音
+ 既定ã®è¨å®š
有効
無効
åå‰ã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
åå‰ã®ã¿
+ åå‰ã‚‚メッセージもéžè¡¨ç¤º
ç”»åƒ
音声
å‹•ç”»
- - %d 時間
+ - %d時間å‰
一般è¨å®š
SMSã¨MMS
å…¨ã¦ã®SMSã‚’å—ä¿¡
å…¨ã¦ã®MMSã‚’å—ä¿¡
+ テã‚スト・メッセージã®å—ä¿¡ã¯ã™ã¹ã¦Signalã§è¡Œã†
+ マルãƒãƒ¡ãƒ‡ã‚£ã‚¢ãƒ»ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å—ä¿¡ã¯ã™ã¹ã¦Signalã§è¡Œã†
è¨å®šå…¥åŠ›
エンターã‚ーを使ãˆã‚‹ã‚ˆã†ã«ã™ã‚‹
顔文å—ã‚ーをエンターã‚ーã«å¤‰ãˆã‚‹
@@ -518,11 +803,18 @@
èªè¨¼ã‚’é¸æŠž
連絡先リストã‹ã‚‰ã‚ãªãŸã®é€£çµ¡å…ˆã‚’é¸ã‚“ã§ãã ã•ã„。
パスワードã®å¤‰æ›´
- ãƒ‘ã‚¹ãƒ•ãƒ¬ãƒ¼ã‚ºãŒæœ‰åй
+ パスワードを変更ã—ã¾ã™
+ パスワードを有効ã«ã™ã‚‹
+ Signalã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸é€šçŸ¥ã‚’パスワードã§ãƒãƒƒã‚¯ã—ã¾ã™
スクリーンセã‚ュリティ
- スクリーンショットをアプリ表示ã®å ´åˆé˜²ã
+ アプリ内や「最近使ã£ãŸã‚¢ãƒ—リã€ã§ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚·ãƒ§ãƒƒãƒˆã‚’表示ã—ãªã„
+ 一定時間後ã«è‡ªå‹•ãƒãƒƒã‚¯
+ パスワードã®ã‚¿ã‚¤ãƒ アウト
+ ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã®æ™‚é–“
通知
メッセージ通知を有効ã«
+ ãƒ¦ãƒ¼ã‚¶ãƒ¼åŠ å…¥ã®é€šçŸ¥
+ SignalユーザーãŒåŠ å…¥ã—ãŸã¨ãã«é€šçŸ¥ã—ã¾ã™
LED色
䏿˜Ž
LED点滅パターン
@@ -532,7 +824,9 @@
オリジナルã®LED点滅パターンãŒè¨å®šã•れã¾ã—ãŸï¼
ç€ä¿¡éŸ³
通知音を変更
- アクティブãªä¼šè©±ã‚’表示ã—ã¦ã„ã‚‹é–“ã§é€šçŸ¥éŸ³ã‚’å†ç”Ÿ
+ 無音
+ ãƒãƒ£ãƒƒãƒˆä¸ã®é€šçŸ¥
+ ãƒãƒ£ãƒƒãƒˆã‚’表示ã—ã¦ã„る間も通知音を出ã™
アラートã®ç¹°ã‚Šè¿”ã—
ãªã—
1回
@@ -569,31 +863,42 @@
MMSCパスワード
SMSé…ä¿¡å ±å‘Š
é€ä¿¡ã™ã‚‹å…¨ã¦ã®SMSã«é…ä¿¡å ±å‘Šã‚’ã¤ã‘ã¾ã™
+ 会話ãŒã‚る程度長ããªã‚‹ã¨å¤ã„メッセージを自動消去ã™ã‚‹
å¤ã„メッセージã®å‰Šé™¤
ãƒãƒ£ãƒƒãƒˆã¨ãƒ¡ãƒ‡ã‚£ã‚¢
ä¼šè©±ã®æœ€å¤§ã®é•·ã•
+ 全会話ã§å¤ã„メッセージを整ç†ã™ã‚‹
+ ã™ã¹ã¦ã®ä¼šè©±ã§é•·ã•ãŒä¸€å®šå€¤ä»¥ä¸‹ã«ãªã‚‹ã‚ˆã†æ•´ç†ã™ã‚‹
+ çµã³ä»˜ã„ã¦ã„るデãƒã‚¤ã‚¹
ライト
ダーク
デザインè¨å®š
テーマ
åˆæœŸè¨å®šã®è¨€èªž
言語
+ Signalã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨é€šè©±
+ Signalユーザーã«ç„¡æ–™ã§å®‰å…¨ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨é€šè©±
デãƒãƒƒã‚°ãƒã‚°ã‚’æå‡º
- \'WiFi Calling\' 互æ›ãƒ¢ãƒ¼ãƒ‰
- ã‚ãªãŸã®ãƒ‡ãƒã‚¤ã‚¹ã§SMS/MMSã®é…é€ã‚’Wi-Fi(Wi-Fi CallingãŒæœ‰åйã«ã§ãるデãƒã‚¤ã‚¹ã§æœ‰åйã«ã—ã‚る時ã®ã¿)上ã§è¡Œã†ã®ã‚’有効ã«ã™ã‚‹
+ Wi-Fi通話
+ SMS/MMSã‚’Wi-Fiã§é€å—ä¿¡ã™ã‚‹ã“ã¨ã‚’許å¯ã™ã‚‹ï¼ˆãŸã ã—Wi-Fiãƒ¢ãƒ¼ãƒ‰ãŒæœ‰åйã®ã¨ãã®ã¿ï¼‰
ブãƒãƒƒã‚¯ã—ãŸé€£çµ¡å…ˆ
+ 安全番å·ã®æ‰¿èª
+ 安全番å·ãŒå¤‰ã‚ã‚‹ã¨ãã¯æ‰¿èªã‚’求ã‚ã‚‹
ç”»é¢ã«é€šçŸ¥ã‚’表示
モãƒã‚¤ãƒ«ãƒ‡ãƒ¼ã‚¿é€šä¿¡åˆ©ç”¨æ™‚
Wi-Fi利用時
ãƒãƒ¼ãƒŸãƒ³ã‚°æ™‚
メディアã®è‡ªå‹•ダウンãƒãƒ¼ãƒ‰
- メッセージã®è¦ç´„
+ ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æ•´ç†
+ システムã®çµµæ–‡å—を使ã†
+ Signal独自ã®çµµæ–‡å—機能を無効ã«ã™ã‚‹
ã™ã¹ã¦é¸æŠž
ã™ã¹ã¦ã®é¸æŠžã‚’解除
+ Signalユーザー
ã™ã¹ã¦ã®é€£çµ¡å…ˆ
æ–°è¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸â€¦
@@ -603,6 +908,7 @@
通話
+ Signalã§ã®é€šè©±
メッセージã®è©³ç´°
テã‚ストをコピー
@@ -610,38 +916,45 @@
メッセージã®è»¢é€
メッセージをå†é€ä¿¡
- 添付をä¿å˜
+ 添付ファイルをä¿å˜
+
+ 消ãˆã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
+
+ 期é™åˆ‡ã‚Œãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
- 招待
+ オススメã™ã‚‹
ã‚»ã‚ュリティ
- é¸æŠžã—ãŸã‚‚ã®ã‚’削除
+ é¸æŠžä¸ã®ã‚‚ã®ã‚’削除
ã™ã¹ã¦é¸æŠž
+ é¸æŠžä¸ã®ä¼šè©±ã‚’アーカイブã«ç§»å‹•
+ é¸æŠžä¸ã®ä¼šè©±ã‚’ä¿ç®¡ã—ãªã„
検索
連絡先ã®ç”»åƒ
エラーアラート
+ アーカイブ済ã¿
æ–°ã—ã„会話
- ã‚»ã‚ュリティ
- èªè¨¼æ¤œè¨¼
+ 安全ãªã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’リセット
消音解除
- 消音通知
+ 無音通知
添付
グループを更新ã™ã‚‹
グループを抜ã‘ã‚‹
+ 会話を削除
ã™ã¹ã¦ã®ç”»åƒ
- 会話è¨å®š
+ 会話ã®è¨å®š
ãƒãƒƒãƒ—アップを拡大
- 連絡帳ã«è¿½åŠ
+ 連絡先ã«è¿½åŠ
å—信者リスト
é…ä¿¡
@@ -649,23 +962,62 @@
一斉é€ä¿¡
比較
+ 自分ã®QRコードを表示ã™ã‚‹
+ 相手ã®QRコードをèªã‚€
æ–°è¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
æ–°è¦ã‚°ãƒ«ãƒ¼ãƒ—
è¨å®š
ãƒãƒƒã‚¯
ã™ã¹ã¦æ—¢èªã«ã™ã‚‹
+ å‹é”ã«ã‚ªã‚¹ã‚¹ãƒ¡ã™ã‚‹
+ ヘルプ
+
+ クリップボードã«ã‚³ãƒ”ーã™ã‚‹
+ ã‚¯ãƒªãƒƒãƒ—ãƒœãƒ¼ãƒ‰ã¨æ¯”較ã™ã‚‹
+ Signalã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå¤ã™ãŽã¾ã™
+
+ - ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®Signalã¯%dæ—¥å¾Œã«æœŸé™åˆ‡ã‚Œã¨ãªã‚Šã¾ã™ã€‚タップã—ã¦æœ€æ–°ç‰ˆã«æ›´æ–°ã—ã¦ãã ã•ã„。
+
+ ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®Signalã¯æœ¬æ—¥ã§æœŸé™åˆ‡ã‚Œã¨ãªã‚Šã¾ã™ã€‚タップã—ã¦æœ€æ–°ç‰ˆã«æ›´æ–°ã—ã¦ãã ã•ã„。
+ ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®Signalã¯æœŸé™åˆ‡ã‚Œã«ãªã‚Šã¾ã—ãŸ
+ メッセージãŒé€ã‚Œãªããªã‚Šã¾ã—ãŸã€‚タップã—ã¦æœ€æ–°ç‰ˆã«æ›´æ–°ã—ã¦ãã ã•ã„。
+ æ›´æ–°
+ 既定ã®SMSアプリã«ã™ã‚‹
+ タップã—ã¦Signalを既定ã®SMSアプリã«è¨å®šã™ã‚‹
+ è¨å®šã™ã‚‹
+ システムã®SMSをインãƒãƒ¼ãƒˆ
+ タップã—ã¦ã“ã®é›»è©±ã®SMSã‚’Signalã®æš—å·åŒ–ã•れãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚³ãƒ”ーã™ã‚‹
+ インãƒãƒ¼ãƒˆ
+ Signalã«ã‚ˆã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨é€šè©±ã‚’有効ã«ã™ã‚‹
+ 通信方å¼ã‚’グレードアップã™ã‚‹
+ 有効ã«ã™ã‚‹
+ Signalã«æ‹›å¾…ã™ã‚‹
+ %1$sã•ã‚“ã¨ã®é€šä¿¡ã‚’ã€é€²åŒ–ã•ã›ã‚ˆã†ï¼
+ 招待ã™ã‚‹
+ å‹é”ã«ã‚ªã‚¹ã‚¹ãƒ¡ã—よã†ï¼
+ SignalãŒå‘¨å›²ã«åºƒã¾ã‚‹ã¨ä¾¿åˆ©ã§ã™ã‚ˆ
+ ã‚·ã‚§ã‚¢
+ é–‰ã˜ã‚‹
ã‚ãªãŸ
ã“ã®ç”»åƒã®ãƒ—レビューã«å¤±æ•—
サãƒãƒ¼ãƒˆã•れãªã„メディア種別
ä¿å˜
+ æ—©é€ã‚Š
+ ã™ã¹ã¦ã®ç”»åƒ
+ ã™ã¹ã¦ä¿å˜
+ ç”»åƒã®ãƒ—レビュー
+ æ›´æ–°
+ 電話機
+ ヘッドセット
+ スピーカー
削除
å¤ã„メッセージを削除...
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 2de82ddd7a4..4db64b23594 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -5,6 +5,8 @@
ಇಲà³à²²
ಅಳಿಸಿಹಾಕà³
ದಯವಿಟà³à²Ÿà³ ಕಾಯಿರಿ...
+
+ ಹೊಸ ಸಂದೇಶ
ಪà³à²°à²¸à³à²¤à³à²¤: %s
ನೀವೠಇನà³à²¨à³‚ ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ಹೊಂದಿಸಿಲà³à²²!
@@ -17,19 +19,24 @@
ಅಳಿಸಿಹಾಕà³
ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ
+ ಇದೠಸಿಗà³à²¨à²²à³ ಮತà³à²¤à³ ಸಂದೇಶವನà³à²¨à³ ಸೂಚನೆಗಳನà³à²¨à³ ಶಾಶà³à²µà²¤à²µà²¾à²—ಿ ಅನà³à²²à²¾à²•ೠಮಾಡà³à²¤à³à²¤à²¦à³†.
ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ
ನೋಂದಣಿಯನà³à²¨à³ ರದà³à²¦à³à²—ೊಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†...
ಸಿಗà³à²¨à²²à³ ಸಂದೇಶಗಳೠಹಾಗೠಕರೆಗಳ ನೋಂದಣಿಯನà³à²¨à³ ರದà³à²¦à³à²—ೊಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†..
ಸಿಗà³à²¨à²²à³ ಸಂದೇಶಗಳೠಹಾಗೠಕರೆಗಳನà³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ?
+ ಪರಿಚಾರಕದಿಂದ ನೋಂದಣಿ ರದà³à²¦à³à²—ೊಳಿಸà³à²µ ಮೂಲಕ ಸಿಗà³à²¨à²²à³ ಸಂದೇಶಗಳನà³à²¨à³ ಮತà³à²¤à³ ಕರೆಗಳನà³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಿ. à²à²µà²¿à²·à³à²¯à²¦à²²à³à²²à²¿ ನೀವೠಮತà³à²¤à³† ಬಳಸಲೠನಿಮà³à²® ಫೋನೠಸಂಖà³à²¯à³†à²¯à²¨à³à²¨à³ ಮರೠನೋಂದಾಯಿಸಬೇಕಾಗà³à²¤à³à²¤à²¦à³†.
ಸರà³à²µà²°à³à²—ೆ ಸಂಪರà³à²•ಿಸà³à²µà²¾à²— ದೋಷ!
ಎಸà³.ಎಮà³.ಎಸನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ
ನಿಮà³à²® ಪೂರà³à²µà²¨à²¿à²¯à³†à³‚ೕಜಿತ ಎಸà³.ಎಮà³.ಎಸೠಅಪà³à²²à²¿à²•ೇಶನà³à²¨à³ ಬದಲಾಯಿಸಲೠಸà³à²ªà²°à³à²¶à²¿à²¸à²¿
ಎಸà³.ಎಮà³.ಎಸನà³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ
+ ಸಿಗà³à²¨à²²à²¨à³à²¨à³ ನಿಮà³à²® ಪೂರà³à²µà²¨à²¿à²¯à³‹à²œà²¿à²¤ ಎಸà³.ಎಮà³.ಎಸೠಅಪà³à²²à²¿à²•ೇಶನೠಮಾಡಲೠಸà³à²ªà²°à³à²¶à²¿à²¸à²¿
ಆನà³
ಆನà³
ಆಫ಼à³
ಆಫ಼à³
ಎಸà³.ಎಮà³.ಎಎಸೠ%1$s, ಎಮà³.ಎಮà³.ಎಸೠ%2$s
+ ಗà³à²Ÿà³à²Ÿà³à²ªà²¦ %1$s, ಪರದೆ ಸà³à²°à²•à³à²·à²¤à³† %2$s
+ ತೀಮà³â€Œ %1$s, à²à²¾à²·à³† %2$s
- %d ನಿಮಿಷಗಳà³
@@ -54,8 +61,6 @@
ಒಳಬರà³à²µ ಕರೆ
- ನೀವೠಪರಿಶೀಲಿಸಲೠಇಚà³à²›à²¿à²¸à²¬à²¹à³à²¦à²¾à²¦ âŽ
-ಸಂಪರà³à²•. âŽ
ಒಪà³à²ªà²¿à²•ೊಌ
ಸಂದೇಶ %s
@@ -66,20 +71,25 @@
ತಲà³à²ªà²¿à²¸à²²à³ ಆಗಲಿಲà³à²²
ಸà³à²°à²•à³à²·à²¿à²¤ ಮಾಧà³à²¯à²®à²µà²¨à³à²¨à³ ವೀಕà³à²·à²¿à²¸à²¬à³‡à²•ೆ?
ದೋಷ, ಹಳತಾದ ಕೀಲಿ ವಿನಿಮಯ ಸಂದೇಶವನà³à²¨à³ ಸà³à²µà²¿à³•ಕರಿಸಲಾಗಿದೆ.
+ ಕೀಲಿ ವಿನಿಮಯ ಸಂದೇಶವನà³à²¨à³ ಸà³à²µà²¿à³•ಕರಿಸಲಾಗಿದೆ, ಪà³à²°à²•à³à²°à²¿à²¯à³†à²—ೊಳಿಸಲೠಟà³à²¯à²¾à²ªà³ ಮಾಡಿ.
%1$s ಸಮೂಹವನà³à²¨à³ ಬಿಟà³à²Ÿà²¿à²¦à³à²¦à²¾à²°à³†
ವಿವರಗಳಿಗೆ ಟà³à²¯à²¾à²ªà³ ಮಾಡಿ
ಅಸà³à²°à²•à³à²·à²¿à²¤ ಸಂವಾದದ ಹಿಮà³à²®à²°à²³à²¿à²•ೆ ಟà³à²¯à²¾à²ªà³ ಮಾಡಿ
ಅಸà³à²°à²•à³à²¶à²¿à²¤ ಎಸà³.ಎಮà³.ಎಸೠಹಿಮà³à²®à²°à²³à²¿ ?
ಅಸà³à²°à²•à³à²¶à²¿à²¤ ಎಮà³.ಎಮà³.ಎಸೠಹಿಮà³à²®à²°à²³à²¿ ?
ಈ ಮೀಡಿಯಾ ತೆರೆಯಲೠಸಾಮರà³à²¥à³à²¯à²µà²¿à²°à³à²µ ಅಪà³à²²à²¿à²•ೇಶನೠಹà³à²¡à³à²•ಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²².
+ ಇಂದ %s
+ ಗೆ %s
ಸà³à²°à²•à³à²·à²¿à²¤ ಸೆಷನೠಮರೠಪà³à²°à²¾à²°à²‚à²à²¿à²¸à²¿?
ಮರà³à²¹à³†à³‚ಂದಿಸಿ
ಸಂವಾದವನà³à²¨à³ ಅಳಿಸಿಹಾಕಲೆ?
+ ಇದೠಆಯà³à²•ೆ ಮಾಡಲಾದ ಎಲà³à²²à²¾ ಸಂದೇಶಗಳನà³à²¨à³ ಶಾಶà³à²µà²¤à²µà²¾à²—ಿ ಅಳಿಸà³à²¤à³à²¤à²¦à³†.
ಲಗತà³à²¤à³ ಸೇರಿಸಿ
ಸಂಪರà³à²•ದ ಮಾಹಿತಿಯನà³à²¨à³ ಆಯà³à²•ೆಮಾಡಿ
ಸಂದೇಶ ರಚಿಸಿ
ಕà³à²·à²®à²¿à²¸à²¿, ನಿಮà³à²® ಲಗತà³à²¤à²¨à³à²¨à³ ಹೊಂದಿಸà³à²µà²²à³à²²à²¿ ದೋಷ ಉಂಟಾಗಿದೆ.
+ ನೀವೠಆಯà³à²•ೆ ಮಾಡಿದ ಜಿಫ಼ೠಬಹಳ ದೊಡà³à²¡à²¦à³!
ಕà³à²·à²®à²¿à²¸à²¿, ಆಯà³à²•ೆ ಮಾಡಿದ ವೀಡಿಯೊ ಸಂದೇಶ ಗಾತà³à²° ನಿರà³à²¬à²‚ಧಗಳನà³à²¨à³ ಮೀರಿದೆ (%1$skB).
ಕà³à²·à²®à²¿à²¸à²¿, ಆಯà³à²•ೆ ಮಾಡಿದ ಶà³à²°à²¾à²µà³à²¯ ಸಂದೇಶ ಗಾತà³à²° ನಿರà³à²¬à²‚ಧಗಳನà³à²¨à³ ಮೀರಿದೆ (%1$skB).
ಸà³à²µà²¿à³•ಕರಿಸà³à²µà²µà²° ಎಸà³.ಎಮà³.ಎಸೠಅಥವಾ ಇಮೇಲೠವಿಳಾಸ ಮಾನà³à²¯à²µà²¾à²¦à³à²¦à²²à³à²²!
@@ -99,20 +109,42 @@
ಅಸà³à²°à²•à³à²·à²¿à²¤ ಎಸà³à²Žà²‚ಎಸà³
ಅಸà³à²°à²•à³à²·à²¿à²¤ ಎಂಎಂಎಸà³
ಸಿಗà³à²¨à²²à³
+ ಸಿಗà³à²¨à²²à³â€Œà²—ೆ ಬದಲಾಗೊಣ %1$s
+ ಇದನà³à²¨à³ ಹರಟಲೠಬಳಸೋಣ: %1$s
ಗà³à²‚ಪೠಬಿಡà³à²µà²¾à²— ದೋಷ ...
ಎಂಎಂಎಸೠಬೆಂಬಲವಿಲà³à²²
ನಿಮà³à²® ವಾಹಕ ಎಂಎಂಎಸೠನà³à²¨à³ ಬೆಂಬಲಿಸà³à²µà³à²¦à²¿à²²à³à²² ಅದà³à²¦à²°à²¿à²‚ದ ಈ ಸಂದೇಶವನà³à²¨à³ ಕಳà³à²¹à²¿à²¸à²²à³ ಸಾಧà³à²¯à²µà²¿à²²à³à²².
ಒಂದೠಸಂಪರà³à²•ವನà³à²¨à³ ಆರಿಸಿಕೊಳà³à²³à²¿
- ನಿರà³à²¬à²‚ಧ ತೆಗೆಯಲೆ?
ನಿರà³à²¬à²‚ಧ ತೆಗೆಯಿರಿ
+ ಕà³à²¯à²¾à²®à³†à²°à²¾ ಲà²à³à²¯à²µà²¿à²²à³à²²
+ ಧà³à²µà²¨à²¿ ಮà³à²¦à³à²°à²£ ಮಾಡಲೠಸಾಧà³à²¯à²µà²¾à²—à³à²¤à³à²¤à²¿à²²à³à²²!
+ ಧà³à²µà²¨à²¿ ಸಂದೇಶ ಕಳà³à²¹à²¿à²¸à³à²µà²²à³à²²à²¿ ದೋಷವಾಗಿದೆ ...
ಸಂದೇಶದ ವಿವರಗಳà³
ರವಾನೆ: %1$s \nಕಳà³à²¹à²¿à²¸à²²à²¾à²—ಿದೆ/ಸà³à²µà²¿à³•ಕರಿಸಲಾಗಿದೆ:%2$s
ಕಳà³à²¹à²¿à²¸à³à²µà²µà²¨à³: %1$s\nರವಾನೆ: %2$s\nಕಳà³à²¹à²¿à²¸à²²à²¾à²—ಿದೆ: %3$s\nಸà³à²µà²¿à³•ಕರಿಸಿದà³à²¦à³†à³•ವೆ:%4$s
+
+ - ಆಯà³à²•ೆ ಮಾಡಲಾದ ಸಂದೇಶಗಳನà³à²¨à³ ಅಳಿಸಬಹà³à²¦à³†à³•?
+
+
+ -
+ಇದೠಆಯà³à²•ೆ ಮಾಡಲಾದ ಎಲà³à²²à²¾ %1$d ಸಂದೇಶಗಳನà³à²¨à³ ಶಾಶà³à²µà²¤à²µà²¾à²—ಿ ಅಳಿಸà³à²¤à³à²¤à²¦à³†.
+
ಸಂಗà³à²°à²¹à²•à³à²•ೆ ಉಳಿಸಲೆ?
- ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿದೆ!
+
+ - ಸಂಗà³à²°à²¹à²•à³à²•ೆ ಲಗತà³à²¤à²¨à³à²¨à³ ಉಳಿಸà³à²µà²¾à²— ತೊಡಕಾಗಿದೆ!
+
+ ಕಡತವನà³à²¨à³ ಉಳಿಸಲಾಗಿದೆ.
ಸಂಗà³à²°à²¹à²•à³à²•ೆ ಬರೆಯಲೠಸಾಧà³à²¯à²µà²¿à²²à³à²²!
+
+ - %1$d ಲಗತà³à²¤à²¨à³à²¨à³ ಉಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†
+
+
+ - ಸಂಗà³à²°à²¹à²•à³à²•ೆ %1$d ಲಗತà³à²¤à²¨à³à²¨à³ ಉಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†...
+
+ ಲಗತà³à²¤à³à²—ಳನà³à²¨à³ ಸಂಗà³à²°à²¹à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† ...
ಬಾಕಿ ಉಳಿದಿರà³à²µà³à²¦à³...
+ ದತà³à²¤à²¾à²‚ಶ (ಸಿಗà³à²¨à²²à³)
ಎಮೠಎಮೠಎಸà³
ಎಸೠಎಮೠಎಸà³
ಅಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†
@@ -120,29 +152,55 @@
ಹà³à²¡à³à²•ಿ...
+
+ - ಆಯà³à²•ೆ ಮಾಡಲಾದ ಸಂà²à²¾à²·à²£à³†à²—ಳನà³à²¨à³ ಅಳಿಸಬಹà³à²¦à³†à³•?
+
+
+ -
+ಇದೠಆಯà³à²•ೆ ಮಾಡಲಾದ ಎಲà³à²²à²¾ %1$d ಸಂà²à²¾à²·à²£à³†à²—ಳನà³à²¨à³ ಶಾಶà³à²µà²¤à²µà²¾à²—ಿ ಅಳಿಸà³à²¤à³à²¤à²¦à³†.
+
ಅಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†
+ ಆಯà³à²¦ ಸಂà²à²¾à²·à²£à³†à²—ಳನà³à²¨à³ ಅಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³† ...
+
+ - %d ಸಂà²à²¾à²·à²£à³†à²—ಳನà³à²¨à³ ಸಂಗà³à²°à²¹à²•à³à²•ೆ ಸೇರಿಸಲಾಗಿದೆ
+
+ ರದà³à²¦à³à²®à²¾à²¡à³
ಕೀಲಿ ವಿನಿಮಯ ಸಂದೇಶ...
+ ಸಂಗà³à²°à²¹à²•à³à²•ೆ ಸೇರಿಸಲಾಗಿದೆ (%d)
ಇಚà³à²›à³†à²¯ ಬಳಕೆ: %s
ಪೂರà³à²µà²¨à²¿à²¯à³†à³‚ೕಜಿತ ಬಳಕೆ: %s
ಯಾವà³à²¦à³‚ ಇಲà³à²²
- ಈಗ
%d ನಿಮಿಷ
+ \'%s\'ನೠಅಗಲಿಸ�
ಮತà³à²¤à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿
+ ಜಾಲಬಂಧದ ದೋಷ!
+ ಅನಾಮಧೇಯ ಸಾಧನ
+ ಕೊನೆಯದಾಗಿ ಸಕà³à²°à²¿à²¯à²µà²¾à²—ಿದದà³à²¦à³ %s
+ ಇಂದà³
ಜೊತೆ ಹಂಚಿಕೊಳà³à²³à²¿
+ ಸಿಗà³à²¨à²²à³â€Œà²—ೆ ಸà³à²µà²¾à²—ತ.
+ ಸಿಗà³à²¨à²²à³â€Œà²—ೆ ಸà³à²µà²¾à²—ತ!
+ ಟೆಕà³à²¸à³à²Ÿà³ ಸೆಕà³à²¯à³‚ರೠಈಗ ಸಿಗà³à²¨à²²à³â€Œ.
ರಫà³à²¤à³ ಮಾಡಿ
+ ಸಂಗà³à²°à²¹à²•à³à²•ೆ ಸರಳಪಠà³à²¯à²µà²¨à³à²¨à³ ರಫà³à²¤à³ ಮಾಡಲೆ?
ರದà³à²¦à³à²®à²¾à²¡à³
ರಫà³à²¤à³ ಮಾಡà³à²¤à³à²¤à²¿à²¦à³à²¦à³‡à²µà³†
- ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿದೆ!
+ ಸಂಗà³à²°à²¹à²•à³à²•ೆ ಸರಳಪಠà³à²¯à²µà²¨à³à²¨à³ ರಫà³à²¤à³ ಮಾಡಲಾಗà³à²¤à³à²¤à²¿à²¦à³†...
+ ಸಂಗà³à²°à²¹à²•à³à²•ೆ ಉಳಿಸà³à²µà²¾à²— ತೊಡಕಾಗಿದೆ!
+ ಎಕà³à²¸à³à²ªà³†à³‚ೕರà³à²Ÿà³ ಯಶಸà³à²µà²¿à²¯à²¾à²—ಿದೆ.
+ ಸಿಗà³à²¨à²²à³â€Œà²—ೆ ಶಾಶà³à²µà²¤à²µà²¾à²¦ ಸಂಪರà³à²• ವೈಫಲà³à²¯!
+
+
ಹೋಸ ಸಮೂಹ
ಸಮೂಹವನà³à²¨à³ ನವೀಕರಿಸಿ
@@ -156,6 +214,7 @@
ಸೃಷà³à²Ÿà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³† %1$s…
%1$s ಆಧà³à²¨à²¿à²•ಗೊಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³† ...
ಗà³à²‚ಪಿನ ವಿವರಗಳನà³à²¨à³ ಲೋಡೠಮಾಡಲಾಗà³à²¤à³à²¤à²¿à²¦à³† ...
+ ನೀವೠಈಗಾಗಲೇ ಈ ಗà³à²‚ಪಿನಲà³à²²à²¿à²¦à³à²¦à³€à²°à²¿.
ನಾನà³
@@ -179,22 +238,42 @@
ಪà³à²¨à²ƒà²¸à³à²¥à²¾à²ªà²¨à³† ಪೂರà³à²£à²—ೊಂಡಿದೆ!
+ ಹಂಚಿಕೊಳà³à²³à²¿
+ ರದà³à²¦à³à²®à²¾à²¡à³
+ ಕಳà³à²¹à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†...
+ ಹೃದಯ
+ ಆಮಂತà³à²°à²£à²—ಳನà³à²¨à³ ಕಳà³à²¹à²¿à²¸à²²à²¾à²—ಿದೆ!
+ ಸಿಗà³à²¨à²²à³â€Œà²—ೆ ಆಮಂತà³à²°à²¿à²¸à²¿
+
+ - %d ಎಸà³.ಎಮà³.ಎಸೠಆಮಂತà³à²°à²£à²—ಳನà³à²¨à³ ಕಳà³à²¹à²¿à²¸à²²à³†?
+
+ ಸಿಗà³à²¨à²²à³â€Œà²—ೆ ಬದಲಾಗೊಣ: %1$s
+ ಹಂಚಿಕೊಳà³à²³à²²à³ ತಾವೠಯಾವà³à²¦à³†à³• ಅಪà³à²²à²¿à²•ೇಶನà³à²—ಳೠಹೊಂದಿಲà³à²² ಎಂದಣಿಸà³à²¤à³à²¤à²¦à³†.
+ ಸà³à²¨à³†à³•ಹಿತರೠಸà³à²¨à³†à³•ಹಿತರನà³à²¨à³ ಗೂಢಲಿಪಿಕರಿಸದೆ ಹರಟಲೠಬೀಡà³à²µà³à²¦à²¿à²²à³à²².
ಸà³à²•à³à²¯à²¾à²¨à³ ಮಾಡಲಾದ ಕೀಲಿ ಕಂಡà³à²¬à²‚ದಿಲà³à²²!
ಬಾರೠಕೋಡೠಸà³à²•à³à²¯à²¾à²¨à²°à³ ಸà³à²¥à²¾à²ªà²¿à²¸à²²à³†?
ಕಳà³à²¹à²¿à²¸à²²à³ ವಿಫಲವಾಗಿದೆ
- ಹೊಸ ಗà³à²°à³à²¤à³
ಎಂ. ಎಂ. ಎಸೠಸಂಗà³à²°à²¹à²¿à²¸à²¿à²¡à³à²µà²¾à²— ದೋಷ ಸಂà²à²µà²¿à²¸à²¿à²¦à³†!
ಎಂ.ಎಂ.ಎಸೠಪೂರೈಕೆದಾರರಿಗೆ ಸಂಪರà³à²•ಿಸà³à²µà²¾à²— ದೋಷ ...
ನಿಸà³à²¤à²‚ತೠಒದಗಿಸà³à²µà²µà²° ಎಂ.ಎಂ.ಎಸೠಸೆಟà³à²Ÿà²¿à²‚ಗà³à²—ಳನà³à²¨à³ ಓದà³à²µà²²à³à²²à²¿ ದೋಷವಾಗಿದೆ...
+ %s ನಿಂದ ತಪà³à²ªà²¿à²¦ ಕರೆ
+ ತಪà³à²ªà²¿à²¦ ಸಿಗà³à²¨à²²à³ ಕರೆ
+ ಸಿಗà³à²¨à²²à³ ಕರೆ ಸà³à²¥à²¾à²ªà²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†
+ ಒಳಬರà³à²µ ಸಿಗà³à²¨à²²à³ ಕರೆ
+ ಕರೆ ನಿರಾಕರಿಸಿ
+ ಕರೆಗೆ ಉತà³à²¤à²°à²¿à²¸à²¿
+ ಕರೆ ಅಂತà³à²¯à²—ೊಳಿಸಿ
+ ಕರೆ ರದà³à²¦à³à²—ೊಳಿಸಿ
ಬಹà³à²®à²¾à²§à³à²¯à²® ಸಂದೇಶ
ನೀವೠಗà³à²‚ಪನà³à²¨à³ ಬಿಟà³à²Ÿà²¿à²¦à³à²¦à³€à²°.
ಸಮೂಹವನà³à²¨à³ ನವೀಕರಿಸಿ
+ %s ನಿಂದ ತಪà³à²ªà²¿à²¦ ಕರೆ
ಗà³à²ªà³à²¤à²ªà²¦à²—ಳೠಹೊಂದಿಕೆಯಾಗà³à²µà³à²¦à²¿à²²à³à²²
ಹಳೆಯ ಗà³à²ªà³à²¤à²ªà²¦ ತಪà³à²ªà²¾à²—ಿದೆ!
@@ -208,6 +287,7 @@
ಯಾವà³à²¦à³†à³• ಸಾಧನವನà³à²¨à³ ಕಂಡà³à²¹à²¿à²¡à²¿à²¯à²²à²¾à²—ಿಲà³à²².
ನೆಟà³à²µà²°à³à²•ೠದೋಷ.
ಮಾನà³à²¯à²µà²²à³à²²à²¦ QR ಕೋಡà³.
+
ಗà³à²ªà³à²¤à²ªà²¦ ನಮೂದಿಸಿ
ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ಸಲà³à²²à²¿à²¸à³
@@ -225,6 +305,7 @@
ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸà³
ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸà³
+ ಜಾಲಬಂಧದ ದೋಷ!
ನಿಮà³à²® ರಾಷà³à²Ÿà³à²°à²µà²¨à³à²¨à³ ಆಯà³à²•ೆಮಾಡಿ
ನಿಮà³à²® ದೇಶದ ಸಂಕೇತವನà³à²¨à³
@@ -273,26 +354,12 @@
ವಿನಿಮಯ ಸಂದೇಶ!
ಅಮಾನà³à²¯à²µà²¾à²¦ ಪà³à²°à³†à³‚ಟೋಕಾಲೠಆವೃತà³à²¤à²¿à²¯ ಕೀಲಿ ವಿನಿಮಯ ಸಂದೇಶವನà³à²¨à³ ಸà³à²µà²¿à³•ಕರಿಸಲಾಗಿದೆ.
- ಇತà³à²¤à³€à²šà³†à²—ೆ ಅಪà³à²¡à³†à³•ಟà³à²—ೊಳಿಸಲಾದ ಆದರೆ ಅಪರಿಚಿತ ಗà³à²°à³à²¤à³ ಮಾಹಿತಿಯನà³à²¨à³ ಸà³à²µà²¿à³•ಕರಿಸಲಾಗಿದೆ. ಈ ಗà³à²°à³à²¤à²¨à³à²¨à³ ಮಾನà³à²¯à²—ೊಳಿಸಲೠಟà³à²¯à²¾à²ªà³ ಮಾಡಿ.
ನಕಲಿ ಸಂದೇಶ.
ಗà³à²‚ಪನà³à²¨à³ ಬಿಟà³à²Ÿà²¿à²¦à³à²¦à²¾à²°à³† ...
ಕರಡà³
- ನೀವೠಗà³à²°à³à²¤à²¿à²¨ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಲà³à²².
- ಸà³à²µà²¿à³•ಕರಿಸà³à²µà²µà²° ಯಾವà³à²¦à³†à³• ಗà³à²°à³à²¤à²¿à²¨ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಲà³à²².
- ಸà³à²µà²¿à³•ಕರಿಸà³à²µà²µà²° ಯಾವà³à²¦à³†à³• ಗà³à²°à³à²¤à²¿à²¨ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಲà³à²²!
- ಎಚà³à²šà²°à²¿à²•ೆ, ಸà³à²•à³à²¯à²¾à²¨à³ ಮಾಡಲಾದ ಕೀಲಿ ಹೊಂದಿಕೆಯಾಗà³à²¤à³à²¤à²¿à²²à³à²²! ಬೆರಳಚà³à²šà³à²—ಳನà³à²¨à³ ಎಚà³à²šà²°à²¿à²•ೆಯಿಂದ ಪರಿಶೀಲಿಸಿ.
- ಪರಿಶೀಲಿಸಿಲà³à²²!
- ಅವರ ಕೀಲಿ ಸರಿಯಾಗಿದೆ. ಅವರೠನಿಮà³à²® ಕೀಲಿಯನà³à²¨à³ ಪರಿಶೀಲಿಸà³à²µà³à²¦à³ ಸಹ ಅವಶà³à²¯à²•.
- ಪರಿಶೀಲಿಸಲಾಗಿದೆ
- ನೀವೠಗà³à²°à³à²¤à²¨à³à²¨à³ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಲà³à²²!
-
- ನೀವೠಗà³à²°à³à²¤à²¿à²¨ ಕೀಲಿಯನà³à²¨à³ ಹೊಂದಿಲà³à²².
- ಎಚà³à²šà²°à²¿à²•ೆ, ಸà³à²•à³à²¯à²¾à²¨à³ ಮಾಡಲಾದ ಕೀಲಿ ಹೊಂದಿಕೆಯಾಗà³à²¤à³à²¤à²¿à²²à³à²²!
- ಪರಿಶೀಲಿಸಿಲà³à²²!
- ಸà³à²•à³à²¯à²¾à²¨à³ ಮಾಡಲಾದ ಕೀಲಿಗಳೠಸಮಾನವಾಗಿವೆ!
- ಪರಿಶೀಲಿಸಲಾಗಿದೆ
+ ಹಂಚಿಕೊಳà³à²³à²²à³ ತಾವೠಯಾವà³à²¦à³†à³• ಅಪà³à²²à²¿à²•ೇಶನà³à²—ಳೠಹೊಂದಿಲà³à²² ಎಂದಣಿಸà³à²¤à³à²¤à²¦à³†.
ಅಸà³à²¤à²¿à²¤à³à²µà²¦à²²à³à²²à²¿à²°à³à²µ ವಿನಂತಿ ಹೊರತಾಗಿಯೂ ಸಹ ಪà³à²¨à²ƒ ಪà³à²°à²¾à²°à²‚à²à²¿à²¸à²¿?
ಕಳà³à²¹à²¿à²¸à³
@@ -373,6 +440,7 @@
ಡೌನà³à²²à³†à³‚ೕಡà³
ಸಂಪರà³à²•ದ ಛಾಯಾಚಿತà³à²°
ಡೌನà³à²²à³†à³‚ೕಡೠಮಾಡಲಾಗà³à²¤à³à²¤à²¿à²¦à³†
+
ಗà³à²‚ಪೠಆಯà³à²•ೆಯ ಕà³à²°à²®
%s ಆಯà³à²•ೆಮಾಡಲಾಗಿದೆ
@@ -383,6 +451,10 @@
+
+ ಆಫ಼à³
+
+
ನಿಮà³à²® ಸಹಾಯಕà³à²•ೆ ಧನà³à²¯à²µà²¾à²¦à²—ಳà³!
ಸಲà³à²²à²¿à²¸à²²à²¾à²—à³à²¤à³à²¤à²¿à²¦à³†
@@ -459,10 +531,8 @@
ಪರಿಶೀಲಿಸà³
ಹೆಸರೠಅಥವಾ ಸಂಖà³à²¯à³†à²¯à²¨à³à²¨à³ ನಮೂದಿಸಿ
- ಸದಸà³à²¯à²°à²¨à³à²¨à³ ಸೇರಿಸಿ
-
- ಅವರ ಗà³à²°à³à²¤à³ (ಅವರೠಓದà³à²µà³à²¦à³):
- ನಿಮà³à²® ಗà³à²°à³à²¤à³ (ನೀವೠಓದà³à²µà³à²¦à³):
+
+
ಈ ಕೆಲವೠವಿಷಯಗಳತà³à²¤ ನಿಮà³à²® ಗಮನದ ಅಗತà³à²¯à²µà²¿à²¦à³†.
ಕಳà³à²¹à²¿à²¸à²²à²¾à²—ಿದೆ
@@ -475,9 +545,7 @@
ಗà³à²ªà³à²¤à²ªà²¦ ರಚಿಸಿ
ಗà³à²ªà³à²¤à²ªà²¦ ನಮೂದಿಸಿ
ಸಂಪರà³à²•ಗಳನà³à²¨à³ ಆಯà³à²•ೆಮಾಡಿ
- ಸಾರà³à²µà²œà²¨à²¿à²• ಗà³à²°à³à²¤à²¿à²¨ ಕೀಲಿ
ಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ಬದಲಾಯಿಸಿ
- ಗà³à²°à³à²¤à²¨à³à²¨à³ ಪರಿಶೀಲಿಸಿ
ಎಲà³à²²à²¾ ಚಿತà³à²°à²—ಳà³
ಎಲà³à²²à²¾ ಚಿತà³à²°à²—ಳೠ%1$s ಜೊತೆ
@@ -578,6 +646,8 @@
ಸಂದೇಶ ಪà³à²¨à²ƒ ಕಳà³à²¹à²¿à²¸à²¿
ಲಗತà³à²¤à³ ಉಳಿಸà³
+
+
ಆಹà³à²µà²¾à²¨
@@ -593,8 +663,6 @@
ಹೋಸ ಸಂà²à²¾à²·à²£à³†
- ಸà³à²°à²•à³à²·à²¤à³†
- ಗà³à²°à³à²¤à²¨à³à²¨à³ ಪರಿಶೀಲಿಸಿ
@@ -618,7 +686,19 @@
ಸೆಟà³à²Ÿà²¿à²‚ಗà³à²—ಳà³
ಬೀಗ ಹಾಕಿ
ಎಲà³à²²à²µà²¨à³à²¨à³ ಓದಿದೆ ಎಂದೠಗà³à²°à³à²¤à³ ಮಾಡಿ
+
+ ಆಮದà³
+ ಸಿಗà³à²¨à²²à³ ಸಂದೇಶಗಳನà³à²¨à³ ಮತà³à²¤à³ ಕರೆಗಳನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಿ
+ ನಿಮà³à²® ಸಂವಹನದ ಅನà³à²à²µà²µà²¨à³à²¨à³ ಉತà³à²¤à²®à²—ೊಳಿಸಿ.
+ ಸಾಧà³à²¯à²—ೊಳಿಸà³
+ ಸಿಗà³à²¨à²²à³â€Œà²—ೆ ಆಮಂತà³à²°à²¿à²¸à²¿
+ %1$s ನೊಂದಿಗೆ ನಿಮà³à²® ಸಂà²à²¾à²·à²£à³†à²¯à²¨à³à²¨à³ ಮà³à²‚ದಿನ ಹಂತಕà³à²•ೆ ತೆಗೆದà³à²•ೊಂಡೠಹೋಗಿ.
+ ಆಹà³à²µà²¾à²¨à²¿à²¸à³
+ ನಿಮà³à²® ಸà³à²¨à³†à³•ಹಿತರನà³à²¨à³ ಆಹà³à²µà²¾à²¨à²¿à²¸à²¿!
+ ಹೆಚà³à²šà³ ಸà³à²¨à³†à³•ಹಿತರೠಸಿಗà³à²¨à²²à³ ಬಳಸಿದಷà³à²Ÿà³, ಸಿಗà³à²¨à²²à³ ಉತà³à²¤à²®à²—ೊಳà³à²³à³à²¤à³à²¤à²¦à³†.
+ ಹಂಚಿಕೊಳà³à²³à²¿
+ ಮà³à²šà³à²šà³
ನೀವà³
ಈ ಚಿತà³à²°à²¦ ಮà³à²¨à³à²¨à³†à³‚ೕಟ ವಿಫಲಗೊಂಡಿದೆ
@@ -626,9 +706,15 @@
ಉಳಿಸಿ
+ ಎಲà³à²²à²¾ ಉಳಿಸà³
+ ಚಿತà³à²° ಮà³à²¨à³à²¨à³†à³‚ೕಟ
+ ಪà³à²¨à²¶à³à²šà³‡à²¤à²¨
+ ಮೊಬೈಲೠಫೋನà³
+ ಶà³à²°à²µà³à²¯ ಸಾಧನ
+ ಮಾತನಾಡà³à²µà²µà²°à³
ಅಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†
ಹಳೆಯ ಸಂದೇಶವನà³à²¨à³ ಅಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†...
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 24c61674599..fbbed96b813 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -5,6 +5,8 @@
아니요
ì‚ì œ
ìž ì‹œë§Œ ê¸°ë‹¤ë ¤ 주세요…
+
+ 새 메시지
현재: %s
암호 ì„¤ì •ë˜ì§€ 않ìŒ
@@ -59,8 +61,6 @@
ìˆ˜ì‹ í†µí™”
- %1$së‹˜ì˜ ì¸ì¦ 키가 변경ë˜ì—ˆìŠµë‹ˆë‹¤. ì´ ê²½ìš° 누군가 í†µì‹ ì„ ê°€ë¡œì±„ë ¤ê³ í•˜ê±°ë‚˜ %2$s님께서 Signalì„ ë‹¤ì‹œ 설치하여 새 ì¸ì¦ 키가 ë˜ì—ˆìŠµë‹ˆë‹¤.
- ì¸ì¦ 키를 확ì¸í• ê²ƒì„ ê¶Œìž¥í•©ë‹ˆë‹¤.
수ë½
%sì— ë©”ì‹œì§€ 보내기
@@ -118,13 +118,13 @@
MMS ì „ì†¡ 안ë¨
ì´ë™í†µì‹ 사는 MMS를 ì§€ì›í•˜ì§€ 않아서 ì´ ë©”ì‹œì§€ë¥¼ 보낼 수 없습니다.
ì—°ë½ì²˜ë¥¼ ì„ íƒí•˜ì„¸ìš”
- 사용ìžë¥¼ 차단 í•´ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?
- ì´ ì‚¬ìš©ìžë¥¼ 차단 í•´ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?
+ 사용ìžë¥¼ 차단 í•´ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?
차단 í•´ì œ
ì²¨ë¶€íŒŒì¼ í¬ê¸° ì œí•œ 초과ë¨
ì¹´ë©”ë¼ ì‚¬ìš©í• ìˆ˜ ì—†ìŒ
오디오 ë…¹ìŒí• 수 ì—†ìŒ
ìŒì„±ë©”시지 보내는 ë™ì•ˆ 오류 ë°œìƒ
+ ìž‘ì—…ì„ ì²˜ë¦¬í• ìˆ˜ 있는 앱 ì—†ìŒ
메시지 ì„¸ë¶€ì •ë³´
ì „ì†¡: %1$s\nì†¡ìˆ˜ì‹ : %2$s
@@ -142,7 +142,7 @@
- ì²¨ë¶€íŒŒì¼ ì €ìž¥ 오류 ë°œìƒ
- 성공
+ ì²¨ë¶€íŒŒì¼ ì €ìž¥ë¨
ì €ìž¥ì†Œì— ì €ìž¥í• ìˆ˜ ì—†ìŒ
- ì²¨ë¶€íŒŒì¼ %1$dê°œ ì €ìž¥
@@ -159,6 +159,7 @@
메시지를 ì‚ì œ 중…
메시지 검색
+ 브ë¼ìš°ì € 앱 ì—†ìŒ
- ì„ íƒëœ 대화를 ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?
@@ -184,7 +185,6 @@
기본값 사용: %s
ì—†ìŒ
- 방금 ì „
%dë¶„ ì „
%sì„(를) ì—°ê²° í•´ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?
@@ -216,10 +216,12 @@
암호화ë˜ì§€ ì•Šì€ ëŒ€í™”ë¥¼ ì €ìž¥ì†Œë¡œ 내보내는 중…
오류: ì €ìž¥ì†Œì— ì €ìž¥í• ìˆ˜ ì—†ìŒ
ì €ìž¥ì†Œì— ì €ìž¥í•˜ëŠ” ë™ì•ˆ 오류 ë°œìƒ
- 성공
+ 대화 내보내기 완료ë¨
ì˜êµ¬ì ì¸ Signal í†µì‹ ì‹¤íŒ¨!
Signalì€ Google Play ì„œë¹„ìŠ¤ì— ë“±ë¡í• 수 없습니다. Signal 메시지와 통화는 사용 중지ë˜ì—ˆìœ¼ë¯€ë¡œ Signal ì„¤ì • 메뉴ì—서 재가입해 주세요.
+
+
그룹 만들기
그룹 ì—…ë°ì´íЏ 하기
@@ -265,13 +267,13 @@
길게 눌러 ìŒì„±ë©”시지 ë…¹ìŒí•˜ê³ ë³´ë‚´ë ¤ë©´ ì† ë–¼ì„¸ìš”.
ê³µìœ
- SMS 보내기
+ ì—°ë½ì²˜ ì„ íƒ
취소
보내는 중…
하트
초대 보냄
Signal로 초대
-
+
- %dë¶„ì—게 SMS 보내기
@@ -286,7 +288,6 @@
QR코드 ìŠ¤ìº”í•˜ë ¤ë©´ Signalì€ ë°”ì½”ë“œ 스ìºë„ˆê°€ 필요합니다.
ì „ì†¡ 실패
- 새 ì¸ì¦ 키
MMS 메시지를 ì €ìž¥ 오류 ë°œìƒ
MMS ì œê³µì—…ì²´ì— ì—°ê²° 오류 ë°œìƒ
@@ -332,6 +333,7 @@
기기 ì—°ê²° QR코드 잘못ë¨
Signal 기기를 ì—°ê²°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?
Signal 기기를 서드파티 스ìºë„ˆë¡œ ì—°ê²°í•´ 보는 것 같습니다. ì•ˆì „í•œ ì‚¬ìš©ì„ ìœ„í•´ Signalì—서 다시 스캔해 주세요.
+
암호 ìž…ë ¥
Signal ì•„ì´ì½˜
@@ -345,12 +347,11 @@
í‰ê°€
취소
나중ì—
+ Play ìŠ¤í† ì–´ 앱 ì—†ìŒ
사용ìžë¥¼ ì°¨ë‹¨í•˜ì‹œê² ìŠµë‹ˆê¹Œ?
- 차단한 사용ìžë¡œ ë¶€í„°ì˜ ë©”ì‹œì§€ì™€ 통화를 ë°›ì„ ìˆ˜ 없습니다.
차단
사용ìžë¥¼ 차단 í•´ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?
- ì´ ì‚¬ìš©ìžë¥¼ 차단 í•´ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?
차단 í•´ì œ
사용
사용 안함
@@ -422,9 +423,6 @@
ë°›ì€ í‚¤ êµí™˜ 메시지가 ì†ìƒë˜ì—ˆìŠµë‹ˆë‹¤.
ë°›ì€ í‚¤ êµí™˜ ë©”ì‹œì§€ì— í”„ë¡œí† ì½œ ë²„ì „ì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤.
- ë°›ì€ ë©”ì‹œì§€ëŠ” 알 수 없는 ì¸ì¦ 키가 있습니다 . 메시지를 ì²˜ë¦¬í•˜ê³ ë³´ë ¤ë©´ 터치하세요.
- ë°›ì€ í‚¤ êµí™˜ 메시지는 ì—…ë°ì´íŠ¸ëœ ì•Œ 수 없는 ì¸ì¦ 키가 있습니다. ì¸ì¦ 키를 확ì¸í•˜ë ¤ë©´ 터치하세요.
- ì•”í˜¸í™”ëœ ì„¸ì…˜ì´ ì´ˆê¸°í™”ë˜ì—ˆìŠµë‹ˆë‹¤.
ì¤‘ë³µëœ ë©”ì‹œì§€
그룹ì—서 나갔습니다.
@@ -436,25 +434,7 @@
미디어 메시지
%së‹˜ì´ Signalì— ì°¸ì—¬í–ˆìŠµë‹ˆë‹¤. ì¸ì‚¬í•˜ì‹¤ëž˜ìš”?
- ë‚´ ì¸ì¦ 키가 없습니다.
- ìˆ˜ì‹ ìžëŠ” ì¸ì¦ 키가 없습니다.
- ìˆ˜ì‹ ìž ì¸ì¦ 키가 ì—†ìŒ
- ìƒëŒ€ë°©ì˜ QR코드 스캔
- 내 QR코드 표시
- ê²½ê³ : ìŠ¤ìº”ëœ í‚¤ê°€ ì¼ì¹˜í•˜ì§€ 않습니다. 키 ì§€ë¬¸ì„ ìžì„¸ížˆ 확ì¸í•˜ì„¸ìš”.
- í™•ì¸ ì‹¤íŒ¨
- ìƒëŒ€ë°©ì˜ 키가 ì¼ì¹˜í•©ë‹ˆë‹¤. ìƒëŒ€ë°©ì´ ë‚´ í‚¤ë„ í™•ì¸í•´ì•¼ 합니다.
- í™•ì¸ ì™„ë£Œ
- ì¸ì¦ 키가 ì—†ìŒ
-
- ì¸ì¦ 키가 없습니다.
- ìƒëŒ€ë°©ì˜ QR코드 스캔
- 내 QR코드 표시
- ê²½ê³ : ìŠ¤ìº”ëœ í‚¤ê°€ ì¼ì¹˜í•˜ì§€ 않습니다.
- í™•ì¸ ì‹¤íŒ¨
- ìŠ¤ìº”ëœ í‚¤ê°€ ì¼ì¹˜í•©ë‹ˆë‹¤.
- í™•ì¸ ì™„ë£Œ
- ë‚´ ì¸ì¦ 키 지문
+ 친구 초대 위해 ê³µìœ í• ìˆ˜ 있는 앱 ì—†ìŒ
ì´ë¯¸ ìš”ì²ì„ ë³´ëƒˆì–´ë„ ë‹¤ì‹œ ë³´ë‚´ì‹œê² ìŠµë‹ˆê¹Œ?
보내기
@@ -483,7 +463,7 @@
ê°€ì ¸ì˜¤ëŠ” 중입니다.
메시지 ê°€ì ¸ì˜¤ê¸°
ê°€ì ¸ì˜¤ê¸° 완료
- Signal ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ê°€ì ¸ì˜¤ê¸°ê°€ 완료ë˜ì—ˆìŠµë‹ˆë‹¤.
+ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ê°€ì ¸ì˜¤ê¸°ê°€ 완료ë˜ì—ˆìŠµë‹ˆë‹¤.
ì—´ë ¤ë©´ 터치하세요.
ì—´ë ¤ë©´ 터치하세요. 그러나 ìž ê·¸ë ¤ë©´ ìžë¬¼ì‡ 를 터치하세요.
@@ -538,13 +518,13 @@
Signal 메시지 보내기
보안 í•´ì œëœ SMS 보내기
보안 í•´ì œëœ MMS 보내기
+ %1$s(으)로
보내기
ì‚ì œ
%1$s님과 대화
메시지 작성
ì´ëª¨í‹°ì½˜ 키보드 ì „í™˜
ì²¨ë¶€íŒŒì¼ ë¯¸ë¦¬ë³´ê¸° ì´ë¯¸ì§€
- 첨부 ì°½ ì „í™˜
ì·¨ì†Œí•˜ë ¤ë©´ 슬ë¼ì´ë“œ
@@ -561,6 +541,7 @@
다운로드
ì—°ë½ì²˜ 사진
다운로드 중
+
여러 대화 ì„ íƒ
%sê°œ ì„ íƒë¨
@@ -576,11 +557,36 @@
새 기기 연결
계ì†
+
+ 사용 안함
+
+ - %dì´ˆ
+
+ %dì´ˆ
+
+ - %dë¶„
+
+ %dë¶„
+
+ - %d시간
+
+ %d시간
+
+ - %dì¼
+
+ %dì¼
+
+ - %d주
+
+ %d주
+
+
기기ì—서 로그 ê°€ì ¸ì˜¬ 수 없지만 ADB로 ìˆ˜ë™ ê°€ì ¸ì˜¬ 수 있ìŒ
ë„와주셔서 ê°ì‚¬í•©ë‹ˆë‹¤.
보내는 중
로그를 gistì— ê²Œì‹œ 중…
+ 브ë¼ìš°ì € 앱 ì—†ìŒ
시스템 SMS 메시지를 Signalì˜ ì•”í˜¸í™”ëœ ë°ì´í„°ë² ì´ìŠ¤ì— ê°€ì ¸ì˜¤ì‹œê² ìŠµë‹ˆê¹Œ?
기본 시스템 SMS ë°ì´í„°ë² ì´ìŠ¤ê°€ 변경ë˜ì§€ 않습니다.
@@ -633,7 +639,6 @@
차단
색ìƒ
ì‚¬ìš©ìž ìƒ‰ìƒ
- ì‹ ë¶„ 확ì¸
Signal 통화
통화 종료
@@ -682,10 +687,8 @@
ì²´í¬ë§ˆí¬
ì´ë¦„ ë˜ëŠ” ì „í™”ë²ˆí˜¸ ìž…ë ¥
- 멤버 추가
-
- ìƒëŒ€ë°©ì˜ ì¸ì¦ 키 지문 (ìƒëŒ€ë°©ì´ ì½ìŒ):
- ë‚´ ì¸ì¦ 키 지문 (ë‚´ê°€ ì½ìŒ):
+
+
ë¬¸ì œê°€ ë°œìƒí•˜ì—¬ 확ì¸ì´ 필요합니다.
보낸 시간:
@@ -699,20 +702,17 @@
암호 ìž…ë ¥
ì—°ë½ì²˜ ì„ íƒ
Signal ê°ì§€ë¨
- 공개 ì¸ì¦ 키
암호 변경
- ì¸ì¦ 키 확ì¸
디버그 로그 보내기
미디어 미리보기
ì „ì²´ ì´ë¯¸ì§€
%1$s님ì´ëž‘ ëŒ€í™”ì˜ ì „ì²´ ì´ë¯¸ì§€
메시지 ì„¸ë¶€ì •ë³´
- ì—°ê²°ëœ ê¸°ê¸° 관리
+ ì—°ê²°ëœ ê¸°ê¸°
친구 초대
ë³´ê´€ëœ ëŒ€í™”
ê°€ì ¸ì˜¤ê¸° / 내보내기
- ë‚´ ì¸ì¦ 키
ê¸°ë³¸ì„¤ì • 사용
ë§žì¶¤ì„¤ì • 사용
1시간 ë™ì•ˆ 알림 ì¼ì‹œ ë„기
@@ -815,7 +815,7 @@
대화 메시지 ì €ìž¥í•œë„
ëª¨ë“ ëŒ€í™” 줄ì´ê¸°
ëª¨ë“ ëŒ€í™”ì— ë©”ì‹œì§€ ì €ìž¥í•œë„ ì ìš©
- 기기
+ ì—°ê²°ëœ ê¸°ê¸°
ë°ê²Œ
어둡게
모양
@@ -861,6 +861,8 @@
메시지 다시 보내기
ì²¨ë¶€íŒŒì¼ ì €ìž¥
+
+
초대
@@ -879,8 +881,6 @@
새 대화
- 보안
- ì‹ ë¶„ 확ì¸
ì•”í˜¸í™”ëœ ì„¸ì…˜ 초기화
알림 켜기
@@ -914,6 +914,7 @@
ëª¨ë‘ ì½ìŒìœ¼ë¡œ 표시
친구 초대
ë„움ë§
+
ì„¤ì¹˜ëœ Signal ë²„ì „ ê³§ 만료
diff --git a/res/values-lg/strings.xml b/res/values-lg/strings.xml
new file mode 100644
index 00000000000..aa42e08aa55
--- /dev/null
+++ b/res/values-lg/strings.xml
@@ -0,0 +1,1032 @@
+
+
+ Signal
+ Yee
+ Nedda
+ Sangula
+ Bambi lindako
+
+ Obubaka obupya
+
+ Kati: %s
+ Tonaba kutondawo passiwaddi y\'ebigambo ne namba
+
+ - message 1 mubuli mbozi
+ - %d bubaka ku buli mbozi
+
+ Obubaka obukadde bwonna busangule kati?
+ Sangula
+ Jako passiwadi nga yabigaambo ne namba?
+ Kino kijja kugulawo Signal n\'okutemezebwako kwobubaka nga bya nkalakalira
+ gyako
+ Okwewandukulula
+ Okwewandukulula okuva mu bubaka bwa Signal n\'amasimu agakubwa
+ Gyako obubaka bwa Signal n\'amasimu agakubwa
+ Gyako obubaka bwa Signal n\'amasimu agakubwa nga oyita mu kwewandukulula ku saava. Oja kwetaga okudamu okuwandisa enamba y\'esimu yo gyebujja mu maaso.
+ Ensobi kukuyungibwa ku Ssava
+ Obubaka bukilizibbwa
+ Kwata okyuse default SMS app yyo
+ Obubaka bugyidwako
+ Kwatako ofule Signal nga yeyokka erina okuwereza obubaka bwamasimu
+ Kweeri
+ Kweeri
+ Teriiko
+ Teriiko
+ SMS %1$s, MMS %2$s
+
+
+ - Eddakika 1
+ - %d ddakika
+
+
+ Ekifananyi
+ (doboozi)
+ olutambi
+ (kifo)
+
+ Tosobodde kufuna app okulonda ku media
+
+ camera
+ Ekifananyi
+ Ekifanayi ekizanya
+ Doboozi
+ Ebikukwatako
+
+ Ensobi mukuzanya edoboozi
+
+ kuziyiza contacts
+
+ Bakubira essimu
+
+ Kiriza
+
+ Obubaka %s
+ Mayengo g\'amasimu %s
+
+ Obunene bwobubaka: %d KB
+ Kigwako: %s
+ Tekifunikidwa
+ Laba omukutu oguli secure?
+ Key exchange message efuniddwa, kwata okugenda mumaso
+ %1$s avudde mu kibinja
+ Nyiga okulaba ebisingawo
+ Nyiga ku lwa ekitesigika okuda emabega
+ Fallback to unencrypted SMS?
+ Fallback to unencrypted MMS?
+ Obubaka buno tebujja kuwerezebwa kubanga gwobuwereza takyali ku siginal
+ tosobodde kufuna app esobola kugulawo kiwandiiko kyo
+ okuvva %s
+ okutuka %s
+
+ Damu ekitundu ekikumibwa?
+ Reset
+ Sangula emboozi?
+ Kino kijja kusangulila ddala obubaka bwona mu mboozi eno
+ Gatako ekigatiddwako
+ Londako obuubaka bwa kontakiti
+ Wandika obubaka
+ Tusonyiwe, wabaddewo ensobi mu kwerobooza kw\'ekigatibwako kyo
+ Kino ekifanayi kyolonze kinene nyo!
+ Tusonyiwe, olutambi olulondeddwa lususe obunene bw\'obubaka obukilizibwa (%1$skB).
+ Tusonyiwe, edoobozi erirondedwa lisuse obunene bw\'obubaka obukilizibwa (%1$skB)
+ Gw\'osindikira yimeyilo ye sintuufu
+ Obubaka bukalu!
+ Ababaka b\'omukibinja
+ Emboozi y\'ekibinja
+ Ekibinja ekitalina linya
+
+ - munaffe 1
+ - %d ababaka
+
+ Obubaka buterekeddwa
+ Afuna mukyamu
+ Amasimu agakubwa tegawagiddwa
+ Kino ekyuma tekirabika kuwanirira ebikubidwa
+a
+ Vva mu kibinja?
+ Okakasa oyagala kuva mu kibija kino?
+ Obubaka obutalina bukuumi
+ MMS terina bukumi
+ Signal
+ Katudde ku Signal %1$s
+ Katukozese emboozi eno: %1$s
+ ensobi mukuva mu kibinja...
+ MMS tewagiddwa
+ Bambi londa contact
+ sumulula contact eno
+ Ojjakudamu okufuna obubaka ne ssimu okuva ew\'omuntu ono
+ sumulula
+ ekigatiddwako kiyissawo ku bunene bwe kikia ky\'obubaka bw\'osindika
+ Kamera teriiko
+ Tesobodde kukwata ddoboozi!
+ Ensobi mu kusindiika obubaka bw\'edoboozi
+ Tewali App kukwasaganya
+
+ obulambulukufu bw\'obubaka
+ Entambula:%1$s/esindikiddwa/etuuse
+
+;%2$s
+ asindise: %1$s\nEntambula: %2$s\nEgenze: %3$s\nEfuniddwa: %4$s
+
+ - siimuula obubaka obulondedwako?
+ - simuula obubaka obulondedwako?
+
+
+ - obubaka obulondedwako bujja kusiimuuka
+ - Kino kijja kusimuula bwona %1$d obubaka obulondeddwa
+
+ tereka mu terekero
+
+ - Ensobi mu kutereka ebigatiddwako mu terekero
+ - Ensobi mu kutereka ebigatiddwako mu terekero
+
+ fayilo eterekedwa bulungi.
+ tesisobose kuwandiikira terekero
+
+ - ekigatibwaako kiterekebwa
+ - ebigattibwako %1$d biterekebwa
+
+
+ - ekigattibwako kiterekebwa mu terekero
+ - ebigattibwako %1$d biterekebwa mu terekero
+
+ ebigatibwako bikunganyizibwa
+ kirindirirwa
+ Data (Signal)
+ MMS
+ Obubaka
+ Kisangulwa
+ Obubabaka busangulwa
+
+ okunoonya
+ Tewali kibanjja kitekedwa kuchuma kyokikalimagezi
+
+
+ - sangula obubaka obulondedwa?
+ - sangula emboozi ezirondedwa?
+
+
+ - kino kijja kusangulira ddala bwona obubaka obulondedwa.
+ - kino kijja kusangulira ddala bwona %1$d obubaka obulondedwa
+
+ Okusangula
+ Obubaka obulondeddwa busangulwa
+
+ - obubaka butelekedwa
+ - %d obubaka butelekedwa
+
+ Ddayo emabega
+
+ - emboozi esengudwa nezibwa mu kabokisi akezifuniddwa
+ - Emboozi %d zisenguliddwa mu kabokisi k\'ezifuniddwa.
+
+
+ Ekisumuluzzo ekikyusa obuubaka
+
+ Emboozi eziterekedwa (%d)
+
+ tewali
+
+ %d dakiika
+
+ Gyayoo \'%s\'?
+ tosobodde kuyungibwa ku mukutu
+ Gezaako neera
+ Omukutu gulemereddwa
+
+ Ekyuma ekitatumiddwa
+ Kigatiddwa %s
+ ebyasembayo okuba ebilamu %s
+ Leero
+
+ Gabana ne
+
+ Tukwaniriza ku Signal
+ Tukwaniriza ku Signal
+ Obubaka obukumidwa buli kati ku signal
+
+ Fulumya
+ Fulumya obubaba obulongosemu kuterekero
+ Sazzamu
+ kufulumya
+ Ensobi mu kuwandika ku terekero
+ Ensobi mu kuwandika ku terekero
+ Okufulumya kuwedde bulungi
+
+ Signal tasobodde kwewandisa ku mpereza ya Google Play store, Obubaka ku Signal n\'amasimu bigyiddwako, bambi gezaako oddemu wewandiise mu kweroboza > Okwawaggulu
+
+ Ensobi mu kukomyaawo ekifananyi ekijuvvu
+
+ Ekifananyi ekizanya
+ Enkwaso
+
+ Ekibinja ekipya
+ Zabugya ekibinja
+ Erinya ly\'ekibinja
+ Akaboondo ka mms akapya
+ Tewewandisa ku bubaka bwa Signal n\'amasimu, era ebibinja bya Signal bijiddwako. Bambi gezaako okwewandisa mu kwerobooza > Okwawaggulu
+ Wazzewo ensobi ettasubirwa ekireese ekibinja okulemwa
+ Wetagaayo ekitono enyo omuntu omu mu kibinja kyo!
+ Omu ku babaka mu kibinja kyo alina enamba etasobola kusomwa bulungi, bambi gyitereze or gyigyeemu oddemu ogezeeko.
+ Ekisikirize ky\'ekibinja
+ Tondawo ekibinja
+ ku tondawo %1$s…
+ ku zabujja %1$s.
+ Tekisobose kugattako %1$s kubanga tebakozesa Signal
+ Loading group details...
+ Ekibinja kino wakyegattako dda.
+
+ Nze
+
+ Okuyingiza
+ Fulumya
+
+ yingizamu database y\'obubaka
+ Okuyingiza
+ Sazzamu
+ komyaawo ebyaterebwa ebisibe
+ Bbulula
+ Okutikula
+ Importing plaintext backup...
+ Okuyingiza ebyaterekerwa kuliko ensobi
+ Okutikula kuwedde!
+ Okuzawo
+ Kudamu okufuna ebibadde bibuzabuzidwa.
+ Tewali bibuzabuzidwa ebizuuse!
+ okuzza obujja kuwedde
+
+ Nyiga olemezeko okukwata obubaka bwedobozi, gyako okuwereza
+
+ Gabanya
+ Lodako kontakiti.
+ Sazzamu
+ Eweereza
+ Omutima
+ Okuyiitibwa kusindikiddwa
+ Muyite ku Signal
+
+ - Wereza obubaka eri mukwano gwo 1
+ - Wereeza obubaka eri %d emikwano
+
+
+ - Wereza obubaka obuyitibwa ku ssimu 1
+ - Wereza obubaka %d obuyitibwa ku massimu
+
+ Katudde ku Signal: %1$s
+ Kirabika toyina app za ku gabanya ne.
+ Emikwaano tejibuzbuza mboozi yamikwaano
+
+ No scanned key found!
+ nstall Barcode Scanner?
+ Signal needs Barcode Scanner for QR codes.
+
+ Eremereddwa okuwerezwa
+
+ Error storing MMS!
+ Error connecting to MMS provider...
+ Error reading wireless provider MMS settings...
+
+ Essimu eya Signal egenda mumaaso
+ wasubiddwa essimu okuva %s
+ Wasubiddwa essimu ya Signal
+ tutekateeka kuba ssimu ya Signal
+ essimu ya Signal eyingirawo
+ Gaana essimu
+ Ddamu essimu
+ komya esimu
+ Sazaamu essimu
+
+ obubaka obwa vidiyo oba amaloboozi
+
+ Ofuny obubaka obubuabuzidwa nga bakozesa vazoni ya signal etakyaakola. wattu saba asindise okuza obujja signal ye era addemu asindike obubaka
+ Ovudemu mu kibinja.
+ Ekibinja kyazidwa kumulembe.
+ %s yakkubiddeko
+ Wakubidde %s
+ Wasubiddwa essimu okuva %s
+ %s ali ku Signal. mugambe hi!
+ Wateseteese obudde bwobubaka okuvaamu ku %1$s.
+ %1$s tekateeka obudde bwobubaka ku %2$s.
+
+ Passiwaddi nga yabigaambo ne namba tefanana
+ Passiwaddi y\'ebigaambo ne namba sintufu
+ Yingizamu passiwaddi empya nga yabigaambo ne namba
+
+ Yungako divayisi?
+ Sazaamu
+ Weyongere maaso
+ Yungako divayisi?
+ Kijjakusoboseza
+
+• Soma obubaka bwo bwona
+ \n.• Sindika obubaka mu manya go
+ Divayisi eyungibwaako
+ Divayisi empya eyungibwaako...
+ Divayisi ekiriziddwa!
+ Tewali divayisi erabiddwa.
+ Omukutu guliko ekizibu.
+ QR code nkyamu.
+ Tusonyiwe, olina divayisi nyingi ezayungiddwa edda, gezaako ogyemu ezimu...
+ Bambi QR koodi eno sintufu
+ Yungako divayisi ya Signal?
+
+ Obubaka bwo bubuzibwaawo
+ Obubaka bwo tebujja kugwako.
+ Obubaka bwowereza ne bwofunye mu mbozi eno %s bujakubula bwomaliriza obulaba
+
+ Yingiza passiwaddi nga yabigaambo ne namba
+ Akabonero ka Signal
+ Waayo passiwaddi nga yabigaambo ne namba
+ passiwaddi y\'ebigambo ne namba sintuufu
+
+ ekika ky\'empereeza ya Google Play kyotaddeko tekikola bulungi, bambi ddamu okiteekeko era oddemu ogezeeko
+
+ Eno App gyiwe obubonero
+ Bwoba nga onyumirwa okukozesa app eno ,wattu twaala akaseera otuwe obubonero
+ Wa obubonero Kati
+ Nedda naye webale
+ Eddako
+ Ohh! Play store elabika sinteekeko ku device yo.
+
+ Zziyiza enamba eno
+ Tojja kudamu kufuna obubaka oba ssimu okuva ew\'omukozesa ono
+ Zziyiiza
+ sumulula contact eno?
+ Ojjakudamu okufuna obubaka ne ssimu okuva ew\'omuntu ono
+ sumulula
+ Etereddwaako
+ Egyiddwaako
+
+ oddibwaamu
+ essimu esalibwaako
+ Okuba
+ Essimu esalibwaako
+ Esimu eganiddwa
+ Evuga
+ Bize
+ eyungiddwako
+ eyungibwa
+ okuyungibwa kuganye
+ gwokubila taliiko
+ oyungibwa
+ Omukutu gulemeddwa
+ kigaanye
+ Ensobi Enkakali
+ okuyingira kugaanye
+ obubaka okuva ku saava
+ Enamba simpandise
+ namba gy\'okubye tekozesa doboozi ly\'ekusifu
+ Nkyifunye
+
+ Yungibwa ne Signal
+ londa ensi yo
+ kakasa koodi y\'ensi yo
+ Londa/tekamu e\'namba y\'essimu yo
+ E\'namba sintuufu
+ Enamba
+gy\'olonze (%s) sintuufu.
+ Tekiwagirwa
+ sorry. device tekola ku signal.
+
+Dammu okebere e namba yo. Tugenda kugikakasa no bubaka ku simu
+ genda maaso
+ Kyuusamu
+
+ obuzibu obusuubirwa
+
+ enamba ekakasibwa
+ Kyusaamu %s
+ okwewandiisa kuwedde!
+ Olina okuyingizamu koodi gyewafunye okusooka
+ oyungiibwa
+ Oyungibwa okusobola okakasibwa
+ obuzibu bw\'omukutu
+ tosobodde kuyungibwa, kebela omukutu gwo oddemu ogezeeko
+ Okukakasa kuganye!
+ Kodi ekukakasa gyotaddemu nkyaamu, ddamu ogezeeko
+ Emirundi gyogezako mingi nyo
+ Ottademu kodi ekukakasa nga nfu emirundi mingi nyo. lindako edakiika odemu ogezeeko.
+ Kusaba simu
+ Okusaba okukakasa esimu ejja
+ Saava erina obuzibu
+ Saava efunyemu ebuzibu. ddamu ogezeeko
+ osabye emirundi mingi!
+ wasabye dda okuba a essimu. lindamu edakiika 20
+ okuwandisa kukontanye
+ enamba eno yawandisiibwa dda ku saava ya Signal endala (cyanogenMOD). sooka ogyisanguleyo nga tonaba gyiwandiisa wano.
+
+ Okwewandiisa kuwedde
+ Okuwandisa ku Signal kuwedde bulungi
+ Okuwandiisa kugaanye
+ okwewandisa kufunyemu obuzibu
+
+ ekifaananyi
+ edoboozi
+ Olutambi
+
+ Received key exchange message for invalid protocol version.
+
+ Resetinga akadde akekusifu
+ %sresettinga akade akekusifu
+ Ddamu message
+
+ yavudde mu group
+ Akadde akekusifu karesetinge nate
+ Ekyakolabwako
+ wakubye
+ yakubidde
+ missed call
+ obubaka bwemikutu
+ %sAli ku Signal. mugambe hi!
+ Message yakusanguka mu dakiika %s
+
+ Contact wo akozesa Signal version empya esinga kuyiyo. Eyiyo kize bugya.
+ Kilabika toyina app za ku gabana na.
+
+
+ Tandika yadde tewali kusaba?
+ Sindika
+
+ Obubaka obubuzabuzidwa bukyamu
+ Okusumululwa kugenda mumaaso, bambi linda ko.
+ Message esibidwa eyakasera akataliiyo
+
+ tekisobosse kutereeza bubaka bwo
+
+
+ tekisobosse kutereeza bubaka bwo
+
+
+ tukuyunga ku muimbagano
+ MMS ewanulwa.
+ Okitikula kumutimbagano kulemye
+ Okuwanulwa kugenda mumaaso.
+ Tap and configure MMS settings to continue download.
+ tekisobosse kutereeza bubaka bwo.
+
+ MMS message esumululwa, bambi lindako.
+ MMS esibidwa bubi
+ MMS message esibidwa eyakaseera akataliyo
+
+ zikiza obude bwemboozi
+
+ kuyingiza kugenda mumaaso
+ text message zili mu kuyingizibwa
+ Okuyingiza kuweddde
+ System database import ewedde
+
+ Kwatako okugulawo
+ Kwatako okugulaaawo, oba kwataku kufulu okugalawo.
+ Signal eggudwa
+ Siba ne passiwadi yebigambo ne namba
+
+ %1$d obubaka obupya mu %2$d mboozi
+ Ebiyiseewo okuva:%1$s
+ obubaka obusibidwa
+ obubaka bwemikutu:%s
+ (Tekuli mutwe)
+ obubaka buganye okugenda
+ biganye okusindika obubaka
+ ensobi mukuwereza obubaka
+ lamba nga esomedwa
+ lamba osome
+ obubaka bwemikutu
+ ddamu
+
+ okudamu okwangu tekubawo nga amayengo gasibidwa
+ obuzibu mukusindika obubaka
+
+ mayengo
+ Obubaka obupya
+
+ kifananyi
+ doboozi
+ Akatambi
+ Contact
+ Camera
+ wosangibwa
+
+ passiwadi yebigambo ne namba enkadde
+ passiwadi yebigambo ne namba empya
+ Ddamu passiwadi yebigambo ne namba empya
+
+ yingiza erinya oba enamba
+
+ tewali contact
+ Loading contacts
+
+ ekifananyi kya contact
+
+ londako kulwa
+
+
+ tewali contacts ziziyizidwa
+
+ tewali masimu gakakubibwa
+
+ emboozi esilisidwa
+
+ welezza obubaka bwamayengo
+ sindika obubaka obwekusifu
+ sindika MMS obutakumidwa
+ kuva %1$s
+ Sindika
+ Gyawo
+ Emboozi ne%1$s
+ Tandika obubaka
+ kyusa yusa keybodi ya emoji
+ Ekikwasidwaako Thumbnail
+
+ Kasindike okusazamu
+
+ Obubaka bwomukutu buwanulwa
+ obubaka bwemikutu
+ Message ekumiidwa
+
+ Tikula
+ Kiwanulwa
+ okusindika kuganye
+ kilindilila kukakasibwa
+ Etuuse
+
+ Wanula
+ Ekifananyi kya kontakiti
+ Kiwanulwa
+
+
+ %s kilondedwako
+
+ Ensi ziwanulwa
+ Noonya
+
+ Scanninga QR code elagidwa ku device
+
+ Gata device
+
+ Tewali device egatidwako
+ Gatako device empya
+
+ Genda mumaso
+
+ Teliko
+
+ - Seconda 1
+ - %d
+
+ %ds
+
+ - Dakiika 1
+ - %d dakiika
+
+ %dm
+
+ - saawa 1
+ - %d sawa
+
+ %dh
+
+ - 1 lunaku
+ - %d nnaku
+
+ %dnnaku
+
+ - 1 wiki
+ - %d wiiki
+
+ %dwiiki
+
+ Noonya GIFs ne sticka
+
+ Tewali kisangidwa
+
+ Tesobodde ku soma kabonero ku kyuma kyo. Okyasobola okukozesa ABD okufuna akaboneero ka debug.
+ Webale obuyambi bwo
+ Kiwerezebwa
+ Tekayo akabonero ku gist
+
+ Teli kibanja kitekedwamu
+
+ Wandiyagade okuyingiza obubakabwo mu terekero ya bwino elibuzabuzidwamu mu Signal?
+ System database eyasangibwawoo tegya kukyusibwa.
+ Buuka
+ Okuyingiza
+ ino kiyinza okumala akaseera.Gumukiriza, ojakutegeezebwa nga okuyingiza kuwedde.
+ Kiyingizibwa
+
+ Database ezibwa bujja
+ Plain text efulumizibwa
+ Fulumya obubaka obukalu obuteleke ne \'SMS Backup &Restore to storage
+ Yingiza system SMS database
+ Yingiza datbase okuva ku apu ya default system messenger
+ Komyawo backup esibidwa.
+ Komyawo Signal backup ensibe eyafulumizibwa
+ Yingiza backup yo bubaka obuwandike
+ mport a plaintext backup file. Compatible with \'SMS Backup & Restore.\'
+
+ Laba emboozi yonna
+
+ Tewali bifananyi
+
+ Kakasa
+ Ddamu owerezze
+
+
+ Essimu yetaaga okusentingibwa omuntu
+ Etereddwaako
+ Egyiddwaako
+ Tesetingiddwa
+ Endagiriro yomukutu nfu
+ Network gyosikako nfu
+
+
+ - %1$s yeegasse mu group
+ - %1$s beegasse mu group!
+
+ Group elikumutindo
+ Group kati eyitibwa \'%1$s\'
+
+ Gulawo
+
+ Signal yeetaga Message settingi okutuusa ebifaanyi, enyimba ne obubaka mu group nga ekozessa empewo. Essimu yo tegaba biwandiiko ebyo. Kino kibaawo kumasimu agasibidwa oba agaganiddwa okukola ebintu ebimu.
+ Okusindika ebifaani, video ne nyimba, nyiga OK ojuze setingi ezwtaagisa. Messegi settingi za Kampuni yamasimu gyokozessa zifunibwa nga onoonyeza APN yo. Kini kikolebwa lumu.
+
+ KIZIBIDDWA
+
+ Jakko Edoboozi
+ Zikika message ezilabula
+ Akayimba akalabula
+ Okuwuluguma
+ Zziyiiza
+ Langi
+ Langi ye Kontakiti
+
+ Ssimu okuva ku Signal
+ Jakko Essimu
+ Doboozi
+ Jakko edoboozi
+ Ssimu okuva ku Signal
+
+
+Kakasa enamba yessimu yo ogigatte ku Signal.
+
+ ENSI YO
+ KODI YE NSI YO NE
+NAMBA YESSIMU
+
+ Enamba yesimu
+ Wewandiise
+ Okwewandiisa kugaba ebikukwatako. Naye tebiterekebwa.
+ Bikutusidwaako twilo
+
+ Ebizibu ebisubirwa
+wamanga:
+ Ebyezinga ku bubaka obuwandiike
+
+Abatambuza message abalala nga Handcent oba GoSMS, zikola bubi
+ze zinga ku messegi ezijja. Kebera olabe oba ofunye messegi etandiika nti
+Kodi ekukakasa ku Signal: bwekibakityo wetaaga okutereeza onkola yaabo abatambuza message osobole okuzifuna.
+
+ Enamba sintuufu
+
+Bambi kebera olabe oba wajjuza enamba entuufu, era oba ojiwandiise nga bwerina okubeera okusinziira nsi yo, nomulirwaano.
+ Google ye doboozi.
+
+Signal tejakukola ne namba eza Google ye doboozi
+
+ Kakasa ne doboozi
+
+Signal esobola okukubira essimu okakase enamba yo. Nyiga \"Nkubira\" oyingizeemu kodi gyonawulira.
+
+ Kakasa
+ Nkubira
+ Tereza enamba
+ Empuliziganya teteredde
+ Signal tesobodde ku tuuka ku mukutu
+ Wayinza okubaawo
+ebizibu nga.
+
+ Network yo
+tefunye mpuliziganya
+
+
+
+Essimu yo yetaaga onkolagana ne network okukozesa Signal. Kebela okakase
+nti otaddeko data wo oba Wi-Fi.
+
+ Ekisenge ekiziyiza kigaanyi
+
+
+Bwoba oyungiddwa ku yintaneeti ya Wi-Fi, kisoboka kuba nti wali ekisenge ekiziyiza ekigaanyi Signal okweyunga. Gezaako omukutu omulala oba gula data bando.
+
+Signal eja kwekebejja enamba yo mu buliwo ngekuwereza obubaka obukakasa mubuwandiike.
+ Tukonekitinga...
+ linda obubaka obukakasa mubuwandiike.
+ wewandiisa ku server...
+
+kijakutwaala akadde.gumikiriza,tujakubulira nga tumaze okukakasa.
+
+Signal evudeko bwebadde erinda obubaka okukakasa.
+ Obubaka bwokukakasa buganye
+ Tukukolera busumuluzo...
+ Kutemyaako
+ Essimu
+ Kebela
+
+ Jjuza mu elinnya oba e namba
+ Gattako ba memba
+
+ Nyiga osikaniinge
+
+
+ Ensonga ezimu zetaaga gwe
+ Esindikiddwa
+ Etuuse
+ Kibula
+ Okuyita
+ Eri:
+ Okuva:
+ Wamu
+
+ Tonda passwadi yebigambo n\'enamba
+ Yingiza passiwaddi nga yabigaambo ne namba
+ Londawo contact
+ waliwo amayengo agakwatagana
+ Kyusa pasiwadi yebigambo n\'enamba
+ Waayo olukalala lwa bili kibaddewo
+ Lozaako ku bifaananyi, vidiyo n\'enyimba
+ Ebifaananyi byona
+ Ebifaananyi byona wamu ne %1$s
+ Ebikwaata ku message
+ Abyampuliziganya ebikwataganye
+ Yita abemikwano
+ Emboozi eziterekeddwa
+
+ Tikula / Wereza
+ Kozesa nga bwebyakolebwa
+ Kozesa bwoyagala
+ Silisa okumala essawa emu
+ Silisa okumala esawa bbiri
+ Silisa okumala olunaku 1
+ Silisa okumala enaku 7
+ Silisa okumala omwaka 1
+ Settingi ngabwezaali
+ Etereddwaako
+ Egyiddwaako
+ Erinya n\'emessage
+ Linnya lyoka
+ Teli linnya oba obubaka
+ Ebifaananyi
+ Doboozi
+ Vidiyo
+
+
+ - %d saawa
+ - %d saawa
+
+
+ Okutwaliza awamu
+ Obubaka mu buwandiike, ebifaananyi,entaambi,n\'amaloboozi
+ Funa obubaka bwonna mubuwandiike
+ Funa obubaka bwonna mu bifaananyi,entambi n\'amaloboozi
+ Kozesa Signal okufuna obubaka bwonna obuwandiike
+ Kozesa Signal okufuna obubaka mu bifaananyi,entaambi n\'enyimba.
+
+
+
+
+ Teekamu Settingi
+ Tekako epeesa eriyingira
+ Jjawo akapeesa ka Smiley oteekewo akayingira.
+ Epeesa eliyingira lyerisindika
+ Bwonyiga epeesa eriyingira ojakusindika obubaka
+ Settingi za endabika yessimu
+ Londa densite
+ Londa gwonoonya okuva mu mabantu mussimu yo.
+ Kyusa pasiwadi yebigambo n\'enamba
+ Kyusa pasiwadi y\'ebigambo n\'enamba
+ Saako pasiwadi y\'ebigambo n\'enyiimba
+ Jjako obujukiza ku Signal ne message
+ Okukuuma Screen yo
+ Bulokinga okukuba screenshots mubyakaberawo ne minda mu app zo
+ Setting Signal yeggale yoka mukaseera koyagala
+ Pasiwadi gyosamu bwoba oyagala kuzako essimu
+ Obudde bwevaako nga telina kyekola
+ Obude
+ Kiriza obude bwobubaka
+ Obude bwa kontakiti empya
+ Laba oba olina contact eyagala okwegattako
+ Langi ya screen eraga
+ Tekimanyikiddwa
+ Screen yo erage etya
+ Setting enkola ya screen yo
+ Paka
+ Okuvako paka:
+ Custom LED blink pattern esetingidwa!
+ Doboozi
+ Kyusa doboozi lyo\' kutemezebwako.
+ Kusirika
+ Mu mboozi zo\'kutemezebwako.
+
+
+Tekako obude nga emboozi egenda maaso
+ ndiganamu okutemezebwako
+ tekirisoboka
+ Mulundi gumu
+ Mirundi ebili
+ Mirundi esatu
+ Emirundi etaano
+ Mirundi kumi
+ Okuwuluguma
+ Wuluguma nga ategezeddwa
+ Dakika
+ Sawa
+ Kilagala
+ kimyuffu
+ Blue
+ Kakyuungwa
+ cyan
+ Magenta
+ Ngyeru
+ tekuli
+ Bwangu
+ Kyabulijjo
+ Kasoobo
+ Kalombolombo
+ Mutindo
+ Byakyaama
+ MMS User Agent
+ Manual MMS settings
+ kozesa manual MMS settings
+ Override system MMS settings with the information below
+ MMSC URL
+ MMS proxy Host
+ MMS proxy port
+ MMSC Username
+ mmsc passiwadi
+ oekiraga mnti obubaka butuuse
+ saba ekiraga nti bulu bubaka bwowereza butuuse
+ buterevu sagula obubaka mu mboozi kasita buyitirira
+ sagula obubaka obukadde
+ emboozi nebifannyi,vidiyo
+ Ekkomo ku mboozi
+ sala ku mboozi zona kati
+ yita mu mboozi zonna otekeko ekkomo ku buwanvu bwazo.
+ Abyampuliziganya ebikwataganye
+
+ Ekitangaala
+ Kizikiza
+ ndabika
+ omulamwa
+ wifi calling compatiblity mode
+ Lulimi
+ Obubaka na massinu ga Signal
+ Obubaka obwekyama na massimu ku bakozesa ba Signal
+ Waayo olukalala bili kibaddewo
+ \'WiFi Calling\' compatibility mode
+ Enable if your device uses SMS/MMS delivery over WiFi (only enable when \'WiFi Calling\' is enabled on your device)
+ Kuziyiza contact
+ Okukirizibwa kwa safety nambaz
+ Wetaagise okukirizibwa safety nambaz empya bwezikyuuka
+ Bilage mu kutemezebwaako
+ Bwoba okozesa dat we ssimu
+ Bwoba okozesa WI-Fi
+ Bwoba ku roaming
+ buterevu ebifananyi ne video bye gyayo
+ Okuyimpaya obubaka
+ Kozesa system emoji
+ Gyako emoji support eyazimbibwa mu Signal
+
+
+
+
+ Londa byonna.
+ Tolanda byona
+ Abakosesa Signal
+ Kontakiti zonna
+ Obubaka obupya eri...
+
+ Kiwedde.
+
+ Za bugya olukalala lwa kontakti
+
+ Essimu
+
+ Essimu ya Signal
+
+ Obulambulukufu bw\'obubaka
+ yozaamu obubaka.
+ Siimula obubaka
+ Sindikirako kumulala obubaka.
+ Ddamu osindike obubaka.
+
+ Tereka ekigattiddwako.
+
+ Obubaka bwo bujakubula
+
+ Obubaka bugwaamu ensa.
+
+ Okuyitibwa
+
+ Obukuumi.
+
+ Sangula ekilondeddwako.
+ Londako byonna.
+ Kweka ekilondeddwako
+ Tolonda kutereka
+
+ Noonya
+
+ Ekifaananyi ekyekuusa ku muntu ono.
+ Kulabula!kigaanye.
+ Ekwekeddwa.
+
+ Mboozi mpya.
+
+ resetinga a kaseera akekusifu
+
+ Saako obude.
+
+ zikiza obude bwemboozi
+
+ Gatako ekigatiddwako
+ Zabugya ekibinja
+ Vva mukibinja
+ Sangula emboozi.
+ Ebifaananyi byona
+ Enteekateeka yemboozi.
+
+ gaziya popup
+
+ Ggatta ku kontakiti zo.
+
+ olukalala lwabafunye obubaka
+ okutuusibwa
+ Emboozi
+ Okusasaanya mubutongole
+
+ Geraageranya.
+ Laga QR CODE yo
+ scanninga QR code ya kontakt
+
+ Obubaka obupya
+ Ekibinja ekipya
+ enteekateeka
+ Siba
+ tikinga byona ebisomedwa
+ Yita abemikwano
+ obuyambi
+
+ copinga ku clipbodi
+ geraageranya ne kilipuboodi
+
+ Version yo eya Signal ya yitako dda
+
+ - Your version of Signal will expire in 1 days. Tap to update to the most recent version.
+ - Your version of Signal will expire in %d days. Tap to update to the most recent version.
+
+ Version yo eya Sgnal ya kugwako leero.Nyiga ode ku version empya kweyo
+ Version ya Signal yo yagwaako!
+ Obubaka tebujjakusobla kwewereza bukungi.konakookufuna vazoni empya
+ tuusa kumutindo
+ gikozese nga app yo gyofunirako obubaka
+ konako okuffula Signal app yo gyofunirako obubaka
+ tegeka
+ Yingiza system SMS
+ koonako okukopa obubaka bwa sms ku kifo kyasigino awaterekebwa bwino
+ Tikula
+ Sobozesa obubaka bwa Signal ne namasimu
+ Linyisa omuindo gwo\'bumanyirivu bwempuliziganya yo
+ kkiriza
+ Muyite ku Signal
+ Twaala embooziyo ku daala edala ku %1$s
+ Bayite
+ Yita mikwano gyo
+ emikwano ghyejikoma okozesa Signal gyekoma okuba enungi
+ Okugaba
+
+ Galawo
+
+ Gwe
+ Olemeddwa okulaba ekifanayi kino
+ ekika kino ekya Tekiwaniriddwa
+
+ Tereka
+ sindikirako omulala
+
+ Tereka byonna
+
+ Okulaba ekifanayi
+
+ Damu bupya
+
+ Esimu
+ Obuwuliriza bwomumatu
+ Omwogezi
+
+ Okusangula
+ Okusangula obubaka obukadde
+ Obubaka obukadde busangulidwa ddala
+
+ akatambuza
+
+
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 769b6469591..4ce4193d8bc 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -5,6 +5,8 @@
Ðе
Избриши
Почекајте...
+
+ Ðова порака
Моментално: %s
Сеуште не Ñте поÑтавиле лозинка!
@@ -44,7 +46,6 @@
Доаѓачки повик
- Овој контакт би требало да го верфивикувате.
Прифати
Порака %s
@@ -86,8 +87,7 @@
MMS не е поддржан
Оваа порака не може да Ñе иÑпрати, бидејќи вашиот провајдер не поддржува MMS.
Изберете контакт
- Одблокирај?
- Дали Ñте Ñигурни дека Ñакате да го одблокирате овој контакт?
+ Одблокирај го контактот?
Одблокирај
Камерата е недоÑтапна
Ðе може да Ñе Ñнима аудио!
@@ -97,7 +97,6 @@
ТранÑфер: %1$s\nИÑпратено/Примено: %2$s
ИÑпраќач: %1$s\nТранÑфер: %2$s\nИÑпратено: %3$s\nПримено: %4$s
Сними на диÑк?
- УÑпешно!
Ðе може да Ñе запишува на диÑкот!
Во тек...
MMS
@@ -116,7 +115,6 @@
КориÑтејќи Ñтандардно: %s
Ðиедна
- Сега
%d минути
@@ -127,8 +125,9 @@
ЕкÑпортирај
Откажи
Се екÑпортира
- УÑпешно!
+
+
Ðова група
Ðжурирај група
@@ -174,7 +173,6 @@
ИнÑталирај баркод Ñкенер?
ÐеуÑпешно праќање
- Ðов идентитет
Грешка при Ñнимањето на MMS!
Грешка при поврзувањето Ñо MMS провајдерот...
@@ -219,6 +217,7 @@
Уредот не е пронајден.
Мрежна грешка.
Погрешен QR код.
+
ВнеÑете лозинка
Пратете лозинка
@@ -235,7 +234,6 @@
Блокирај го контактот?
Блокирај
Одблокирај го контактот?
- Дали Ñте Ñигурни дека Ñакате да го одблокирате овој контакт?
Одблокирај
Овозможено
Оневозможено
@@ -303,27 +301,12 @@
за размена на клучеви!
Примена е порака за размена на клучеви за погрешна верзија на протоколот.
- Примени Ñе ажурирани, но непознати информации за идентификација. ПритиÑнете за проверка на идентитетот.
Дупла порака.
Ја напушти групата...
Скица:
%s има инÑталирано Signal, кажи му здраво!
- Ðемат клуч за идентификација.
- Примателот нема клуч за идентификација.
- Примателот нема клуч за идентификација!
- Ð’ÐИМÐÐИЕ, Ñкенираниот клуч ÐЕ Е ИДЕÐТИЧЕÐ! Проверете го внимателно текÑтот на отиÑокот од прÑтот.
- ÐЕ Е потврдено!
- Ðивниот клуч е иÑправен. ИÑтотака е потребна верификација на вашиот клуч Ñо нив.
- Потврдено!
- Ðемате клуч за идентификација!
-
- Ðемате клуч за идентификација.
- Ð’ÐИМÐÐИЕ, Ñкенираниот клуч ÐЕ одговара!
- ÐЕ Е верификуван!
- Скенираниот клуч е идентичен!
- Потврдено!
Иницирај и покрај поÑтоечкото барање?
ИÑпратено
@@ -408,6 +391,7 @@
Превземање
Слика на контакт
Превземање
+
Повеќекратно Ñелектирање
%s избрано
@@ -418,6 +402,10 @@
+
+ ИÑклучи
+
+
Ви благодариме за вашата помош!
ИÑпраќање
@@ -503,10 +491,8 @@
Проверка
ВнеÑете име или број
- Додадете член
-
- Ðивен идентитет (тие читаат):
- Ваш идентитет (вие читате):
+
+
Ðекои проблеми барааат ваше внимание.
ИÑпратено
@@ -519,9 +505,7 @@
Креирај лозинка
ВнеÑете лозинка
Изберете контакти
- Јавен клуч за идентитификација
Променете лозинка
- Проверете идентитет
Сите Ñлики
Сите Ñлики Ñо %1$s
Покани пријатели
@@ -641,6 +625,8 @@
Препрати порака
Зачувај додаток
+
+
Покани
@@ -656,8 +642,6 @@
Ðов разговор
- СигурноÑÑ‚
- Проверете идентитет
Вклучи звук
@@ -687,6 +671,7 @@
Обележи ги Ñите како прочитани
Покани пријатели
Помош
+
Вашата верзија на Signal е заÑтарена.
КориÑти како Ñтандардна СМС апликација
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
new file mode 100644
index 00000000000..65183698109
--- /dev/null
+++ b/res/values-nb/strings.xml
@@ -0,0 +1,1078 @@
+
+
+ Signal
+ Ja
+ Nei
+ Slett
+ Vent litt
+
+ Ny melding
+
+ Gjeldende: %s
+ Du har ikke valgt en passordfrase enda.
+
+ - 1 melding per samtale
+ - %d meldinger per samtale
+
+ Vil du slette alle gamle meldinger nå?
+
+ - Dette vil umiddelbart trimme alle samtaler til de siste meldingene.
+ - Dette forkorter alle samtaler til de %d siste meldingene.
+
+ Slett
+ Vil du slå av bruk av passordfrase?
+ Dette låser opp Signal og meldingsvarsler.
+ Slå av
+ Avregistrerer
+ Avregistrerer fra Signal-meldinger og -samtaler
+ Vil du slå av Signal-meldinger og -samtaler?
+ Slå av Signal-meldinger og -samtaler ved å avregistrere deg fra tjeneren. Du må registrere telefonnummeret ditt for å kunne finne igjen disse senere.
+ Det oppstod en feil under tilkobling til tjener.
+ SMS slått på
+ Trykk for å bytte forvalgt SMS-program
+ SMS slått av
+ Trykk for å bruke Signal som standard SMS-program
+ på
+ PÃ¥
+ av
+ Av
+ SMS %1$s, MMS %2$s
+ Passordfrase %1$s, Skjermsikkerhet %2$s
+ Tema %1$s, Språk %2$s
+
+
+ - 1 minutt
+ - %d minutter
+
+
+ (bilde)
+ (lyd)
+ (video)
+ (sted)
+
+ Fant ingen programmer for valg medier.
+
+ Kamera
+ Bilde
+ Video
+ Lyd
+ Kontaktinformasjon
+
+ Det oppstod en feil under lydavspilling.
+
+ Blokkerte kontakter
+
+ Inngående samtale
+
+ Du ønsker kanskje å bekrefte din sikkerhets nummer med denne kontakten.
+ Godta
+
+ Melding %s
+ Signal-anrop %s
+
+ Meldingsstørrelse: %d KB
+ Utgår: %s
+ Ikke levert
+ Vil du vise sikkert medium?
+ Dette innholdet er nå lagret i en kryptert database. Dataene må dessverre dekrypteres midlertidig og lagres som vanlig innhold på enheten før du kan se dem i et visningsprogram. Er du sikker på at du vil gjøre dette?
+ Feil: mottok foreldet nøkkelutvekslingsmelding.
+ Melding for nøkkelutveksling mottatt. Trykk for å behandle.
+ %1$s har forlatt gruppa.
+ Trykk for detaljer
+ Trykk for usikker reserveløsning
+ Vil du bruke ukryptert SMS som reserveløsning?
+ Vil du bruke ukryptert MMS som reserveløsning?
+ Denne meldinga blir ikke kryptert, fordi mottakeren ikke bruker Signal lenger.\n\nVil du sende den ukryptert?
+ Fant ingen programmer som kan åpne dette innholdet.
+ fra %s
+ til %s
+
+ Vil du tilbakestille sikker økt?
+ Dette kan hjelpe hvis du har krypteringsproblemer med samtalen. Meldinger blir beholdt.
+ Tilbakestill
+ Vil du slette samtalen?
+ Dette sletter alle meldinger i samtalen.
+ Legg til vedlegg
+ Velg kontaktinformasjon
+ Skriv melding
+ Det oppstod en feil under vedlegg av fil.
+ GIF-bildet du valgte er for stort.
+ Valgt video overstiger maksimal meldingsstørrelse (%1$skB).
+ Valgt lydspor overstiger maksimal meldingsstørrelse (%1$skB).
+ Mottaker er ikke et gyldig nummer eller e-post-adresse.
+ Meldinga er tom.
+ Gruppemedlemmer
+ Gruppesamtale
+ Gruppe uten navn
+
+ - 1 medlem
+ - %d medlemmer
+
+ Lagret utkast
+ Ugyldig mottaker.
+ Samtaler støttes ikke
+ Denne enheten ser ikke ut til å støtte oppringing.
+ Vil du forlate gruppa?
+ Er du sikker på at du vil forlate gruppa?
+ Usikker SMS
+ Usikker MMS
+ Signal
+ La oss bytte til Signal %1$s
+ La oss bruke dette til å prate: %1$s
+ Klarte ikke å forlate gruppa på grunn av programfeil
+ MMS støttes ikke
+ Operatøren din støtter ikke MMS, og meldinga ble derfor ikke sendt.
+ Velg en kontakt
+ Vil du fjerne blokkering av denne kontakten?
+ Du åpner i så fall for mottak av meldinger og anrop fra denne kontakten.
+ Fjern blokkering
+ Vedlegg overskrider maksimal størrelsesgrense for gjeldende meldingstype.
+ Kamera utilgjengelig
+ Klarte ikke å ta opp lyd.
+ Feil under sending av talemelding …
+ Du har ingen programmer på denne enheten som kan håndtere denne lenka.
+
+ Meldingsdetaljer
+ Transport: %1$s\nSendt/mottatt: %2$s
+ Avsender: %1$s\nTransport: %2$s\nSendt: %3$s\nMottatt: %4$s
+
+ - Vil du slette valgt melding?
+ - Vil du slette valgte meldinger?
+
+
+ - Denne handlinga sletter valgt melding for godt.
+ - Denne handlinga sletter alle %1$d valgte meldinger for godt.
+
+ Vil du lagre på enheten?
+
+ - Hvis du lagrer dette mediet på enheten som vanlig fil, kan andre programmer få tilgang til det.\n\nEr du sikker på at du vil fortsette?
+ - Hvis du lagrer disse %1$d mediene på enheten som vanlige filer, kan andre programmer få tilgang til dem.\n\nEr du sikker på at du vil fortsette?
+
+
+ - Det oppstod en feil under lagring av vedlegg som vanlig fil.
+ - Det oppstod en feil under lagring av vedlegg som vanlige filer.
+
+ Fila er lagret.
+ Klarte ikke å skrive til enhetslager.
+
+ - Lagrer vedlegg
+ - Lagrer %1$d vedlegg
+
+
+ - Lagrer vedlegg på enhetslager …
+ - Lagrer %1$d vedlegg på enhetslager …
+
+ Henter vedlegg …
+ Venter
+ Data (Signal)
+ MMS
+ SMS
+ Sletter
+ Sletter meldinger …
+
+ Søk …
+ Denne enheten har ingen nettleser installert.
+
+
+ - Vil du slette valgt samtale?
+ - Vil du slette valgte samtaler?
+
+
+ - Denne handlinga sletter valgt samtale for godt.
+ - Denne handlinga sletter %1$d valgte samtaler for godt.
+
+ Sletter
+ Sletter valgte samtaler …
+
+ - Samtale arkivert
+ - %d samtaler arkivert
+
+ ANGRE
+
+ - Flyttet samtalen til innboks
+ - Flyttet %d samtaler til innboks
+
+
+ Nøkkelutvekslingsmelding …
+
+ Arkiverte samtaler (%d)
+
+ Bruker selvvalgt: %s
+ Bruker forvalgt: %s
+ Ingen
+
+ Akkurat nå
+ %d min
+
+ Vil du koble fra «%s»?
+ Hvis du kobler denne enheten fra tjenesten, kan den ikke lenger sende eller motta meldinger.
+ Nettverkstilkobling mislyktes …
+ Prøv igjen
+ Kobler fra enhet …
+ Kobler fra enhet
+ Nettverk mislyktes.
+
+ Enhet uten navn
+ %s er koblet til
+ Sist aktiv %s
+ I dag
+
+ Del med
+
+ Velkommen til Signal.
+ TextSecure og RedPhone er nå ett program for privat kommunikasjon, til alle formål: Signal.
+ Velkommen til Signal!
+ TextSecure er nå Signal.
+ TextSecure og RedPhone er nå ett program: Signal. Trykk for å utforske.
+
+ Eksporter
+ Vil du eksporter klartekst som vanlig fil?
+ Advarsel: denne handlinga eksporterer innholdet i Signal-meldinger som vanlige filer i klartekst.
+ Avbryt
+ Eksporterer
+ Eksporterer klartekst til enhetslager
+ Feil: klarte ikke å skrive til enhetslager.
+ Feil under skriving til enhetslager.
+ Eksportering er utført.
+
+ Varig Signal-kommunikasjonsfeil.
+ Signal klarte ikke å registrere seg som Google Play-tjeneste. Signal-meldinger og samtaler er derfor slått av. Prøv å registrere programmet på nytt under Innstillinger > Avansert.
+
+ Feil ved henting av full oppløsning GIF...
+
+ GIFs
+ Klistremerker
+
+ Ny gruppe
+ Oppdater gruppe
+ Gruppenavn
+ Ny MMS-gruppe
+ Du har valgt en kontakt som ikke støtter Signal-grupper. Denne gruppa blir derfor en MMS-gruppe.
+ Du er ikke registrert for Signal-meldinger og -samtaler. Signal-grupper er derfor slått av. Prøv å registrere programmet på nytt under Innstillinger > Avansert.
+ Det oppstod en uventet feil, og gruppa ble ikke opprettet.
+ Du må ta med minst én person i gruppa.
+ Et av gruppemedlemmene har et nummer som ikke ble tolket skikkelig. Rett opp eller fjern aktuell kontakt, og prøv igjen.
+ Gruppe-avatar
+ Lag gruppe
+ Lager %1$s …
+ Oppdaterer %1$s …
+ Klarte ikke å legge til %1$s fordi vedkommende ikke bruker Signal.
+ Laster inn gruppedetaljer
+ Du ligger allerede i gruppa.
+
+ Meg
+
+ Importer
+ Eksportr
+
+ Vil du importere SMS-systemdatabase?
+ Denne handlinga importerer
+meldinger fra systemets SMS-database til Signal. Hvis du har
+importert systemets SMS-database tidligere, fører dette til dupliserte meldinger.
+ Importer
+ Avbryt
+ Vi ldu gjenopprette kryptert sikkerhetskopi?
+
+Hvis du gjenopprette kryptert sikkerhetskopi, erstatter du alle gjeldende nøkler, innstillinger og
+meldinger. Du mister all informasjon i gjeldende Signal-oppsett, men ikke
+i sikkerhetskopien.
+ Gjenopprett
+ Vil du importere klartekst-sikkerhetskopi?
+ Denne handlinga importerer
+meldinger fra en klartekst-sikkerhetskopi. Hvis du har importert denne sikkerhetskopien tidligere,
+fører dette til dupliserte meldinger.
+ Importerer
+ Importerer klartekst-sikkerhetskopi
+ Fant ingen klartekst-sikkerhetskopi.
+ Feil under importering av sikkerhetskopi.
+ Importering er utført.
+ Gjenoppretter
+ Gjenoppretter kryptert sikkerhetskopi …
+ Fant ingen kryptert sikkerhetskopi.
+ Gjenoppretting er utført.
+
+ Trykk og hold for å spille inn talemelding , slipp for å sende
+
+ Del
+ Velg kontakter
+ Avbryt
+ Sender …
+ Hjerte
+ Invitasjoner sendt.
+ Inviter til Signal
+
+ - SEND SMS TIL 1 VENN
+ - SEND SMS TIL %d VENNER
+
+
+ - Vil du sende 1 SMS-invitasjon?
+ - Vil du sende %d SMS-invitasjoner?
+
+ La oss bytte til Signal. %1$s
+ Det ser ut som at du ikke har noen programmer å dele denne informasjonen med.
+ Venner bør ikke prate ukryptert over nettet.
+
+ Fant ingen skannet nøkkel.
+ Vil du installere en strekkode-skanner?
+ Signal trenger Barcode Scanner for å kunne tolke QR-koder.
+
+ Sending mislyktes
+ Ny sikkerhets nummer
+
+ Feil under lagring av MMS.
+ Feil under tilkobling til MMS-leverandør …
+ Feil under lesing av MMS-oppsett fra mobiloperatør …
+
+ Signal-samtale pågår
+ Tapt anrop fra %s
+ Tapt Signal-anrop
+ Setter opp Signal-anrop
+ Inngående Signal-anrop
+ Avslå anrop
+ Svar på anrop
+ Avslutt samtale
+ Avbryt samtale
+
+ Multimediemelding
+
+ Mottatt en melding som er kryptert med en gammel versjon av Signal som ikke lenger støttes. Be avsenderen om å oppdatere til nyeste versjon og sende meldinga på nytt.
+ Du har forlatt gruppa.
+ Oppdatert gruppe.
+ %s ringte deg
+ Ringte %s
+ Tapt anrop fra %s
+ %s er på Signal. Si hei!
+ Du angir forsvinner meldingen tid til %1$s.
+ %1$s satt forsvinner meldingen tid til %2$s.
+ Din sikkerhets nummer med %s har endret seg.
+
+ Passordfrasene samsvarer ikke.
+ Du skrev inn feil gammel passordfrase.
+ Skriv inn ny passordfrase.
+
+ Vil du koble denne enheten til tjenesten?
+ AVBRYT
+ FORTSETT
+ Vil du koble denne enheten til tjenesten?
+ Den kan i så fall
+
+• Lese alle meldingener
+\n• Sende meldinger i ditt navn
+
+ Kobler til enhet
+ Kobler til ny enhet …
+ Enhet godkjent.
+ Fant ingen enhet.
+ Nettverksfeil.
+ Ugyldig QR-kode.
+ Du har for mange enheter tilkoblet allerede. Prøv å fjerne noen …
+ Dette er ikke en gyldig QR-kode for enhetstilkobling.
+ Vil du koble til en Signal-enhet?
+ Det ser ut som at du prøver å koble en enhet til Signal ved hjelp av en tredjepartsskanner. For din egen sikkerhet må du skanne koden på nytt via Signal.
+
+ Utløptstid for meldinger
+ Meldinger går ikke ut på tid.
+ Meldinger du sender og mottar i denne samtalen forsvinner %s etter at de er blitt sett.
+
+ Skriv inn passordfrase
+ Signal-ikon
+ Send inn passordfrase
+ Ugyldig passordfrase.
+
+ Versjonen av Google Play Tjenester som er installert på denne enheten fungerer ikke skikkelig. Installer Google Play Tjenester på nytt og prøv igjen.
+
+ Vurder dette programmet
+ Hvis du liker dette programmet, vil vi gjerne at du hjelper oss ved å gi din vurdering.
+ Gi vurdering nå.
+ Nei takk
+ Senere
+ Whoops. Programmet Play Butikk ser ikke ut til å være installert på denne enheten.
+
+ Vil du blokkere denne kontakten?
+ Du kan i så fall ikke lenger motta meldinger og anrop fra vedkommende.
+ Blokker
+ Vil du fjerne blokkering av denne kontakten?
+ Du åpner i så fall for mottak av meldinger og anrop fra denne kontakten.
+ Fjern blokkering
+ Slått på
+ Slått av
+
+ Svarer
+ Avslutter samtale
+ Ringer
+ Avbryter anrop
+ Anrop avvist
+ Ringer
+ Opptatt
+ Tilkoblet
+ Kobler til
+ Hilseprosess mislyktes.
+ Mottaker utilgjengelig
+ Utfører hilseprosess
+ Nettverk mislyktes.
+ Klient mislyktes
+ Kritisk feil
+ Innlogging mislyktes.
+ Melding fra tjener
+ Nummer ikke registrert.
+ Nummeret du ringte støtter ikke sikker stemme.
+ Ã…lreit
+
+ Koble til med Signal
+ Velg land
+ Du må oppgi
+landskode
+ Du må oppgi
+telefonnummer
+ Ugyldig nummer
+ Nummeret du
+skrev inn (%s) er ugyldig.
+ Støttes ikke
+ Denne enheten støtter ikke datameldinger. Enheter som kjører eldre versjoner av Android
+enn 4.0 må knyttes til en Google-konto. Enheter som kjører Android 4.0 eller nyere
+krever ikke Google-konto, men må ha Play Butikk installert.
+
+Dobbeltsjekk at dette er ditt nummer. Vi er i ferd med å bekrefte det ved å sende deg SMS.
+ Fortsett
+ Rediger
+
+ Mulige problemer
+
+ Bekrefter nummer
+ Rediger %s
+ Registrering utført.
+ Du må skrive inn koden du mottok først …
+ Kobler til
+ Kobler til for bekreftelse …
+ Nettverksfeil.
+ Klarte ikke å koble til. Kontroller nettverkstilkobling og prøv på nytt.
+ Bekreftelse mislyktes.
+ Bekreftelseskoden du sendte er feil. Prøv på nytt.
+ For mange forsøk
+ Du har sendt inn feil bekreftelseskode for mange ganger. Vent et minutt før du prøver igjen.
+ Ber om anrop
+ Ber om bekreftelsesanrop …
+ Tjenerfeil
+ Det oppstod et problem med tjeneren. Prøv på nytt.
+ For mange forespørsler.
+ Du har allerede bedt om en samtale. Vent 20 minutter før du ber om en ny.
+ Registreringskonflikt
+ Dette nummeret er allerede registrert på en annen Signal-tjener (CyanogenMod?). Du må avregistrere nummeret der før du kan registrere det her.
+
+ Registrering fullført
+ Signal-registrering utført.
+ Registreringsfeil
+ Det oppstod et problem under signal-registrering
+
+ Bilde
+ Lyd
+ Video
+
+ Mottok ødelagt
+nøkkelutvekslingsmelding.
+
+Mottok nøkkelutvekslingsmelding for ugyldig protokollversion.
+ Mottatt melding med ny sikkerhetsnummer. Trykk for å behandle og vise.
+ Du tilbakestilte sikker økt.
+ %s tilbakestilte sikker økt.
+ Dupliser melding.
+
+ Forlot gruppa
+ Sikker økt tilbakestilt.
+ Utkast:
+ Du ringte
+ Ringte deg
+ Ubesvart anrop
+ Mediemelding
+ %s er på Signal. Si hei!
+ Utløpstid for melding endret til %s
+ Din sikkerhets nummer med %s har endret seg.
+
+ Din kontakt kjører en nyere versjon av Signal med en inkompatibel QR-kode format. Vennligst oppdater for å sammenligne.
+ Det skannede QR-kode er ikke en riktig formatert sikkerhets nummer bekreftelseskode. Vennligst prøv å skanne på nytt.
+ Del sikkerhets nummer via...
+ VÃ¥r Signal sikkerhet nummer:
+ Det ser ut som at du ikke har noen programmer å dele denne informasjonen med.
+ Ingen sikkerhet nummer å sammenligne ble funnet i utklippstavlen
+
+ Vil du fortsette selv om en forespørsel pågår allerede?
+ Send
+
+ Dårlig kryptert melding …
+ Dekrypterer. Vent litt …
+ Melding kryptert for økt som ikke finnes …
+
+ Feil under dekryptering av melding.
+
+ Feil under dekryptering av melding.
+
+ Kobler til MMS-tjener …
+ Laster ned MMS …
+ Nedlasting av MMS mislyktes.
+ Laster ned …
+ Trykk og endre MMS-innstillinger for å fortsette å laste ned.
+ Feil under dekryptering av melding.
+
+ Dekrypterer MMS. Vent litt …
+ Dårlig kryptert MMS-melding …
+ MMS-melding kryptert for økt som ikke finnes …
+
+ Ikke vis varsler
+
+ Importering pågår
+ Importerer tekstmeldinger
+ Importering utført
+ Importering av systemdatabase er utført.
+
+ Trykk for å åpne.
+ Trykk for å åpne, eller trykk på lås for å lukke.
+ Signal er låst opp
+ LÃ¥s med passordfrase
+
+ %1$d nye meldinger i %2$d samtaler
+ Nyeste fra: %1$s
+ Låst melding …
+ Mediemelding: %s
+ (Uten emne)
+ Levering av melding mislyktes.
+ Klarte ikke å levere melding.
+ Feil under levering av melding.
+ Merk alle som lest
+ Merk som lest
+ Mediemelding
+ Svar
+
+ Hurtigsvar er utilgjengelig når Signal er låst.
+ Det oppstod et problem under sending av melding.
+
+ Signal
+ Ny melding
+
+ Bilde
+ Lyd
+ Video
+ Kontakt
+ Kamera
+ Plassering
+
+ Gammel passordfrase
+ Ny passordfrase
+ Gjenta ny passordfrase
+
+ Skriv inn navn eller nummer
+
+ ingen kontakter.
+ Laster inn kontakter …
+
+ Kontaktfoto
+
+ Velg for
+
+ Ingen blokkerte kontakter …
+
+ Ingen nylige samtaler.
+
+ Samtale dempet
+
+ Send Signal-melding
+ Send usikker SMS
+ Send usikker MMS
+ Fra %1$s
+ Send
+ Fjern
+ Samtale med %1$s
+ Meldingsskriving
+ Slå på/av emoji-tastatur
+ Miniatyrbilde av vedlegg
+ Ta opp og sende lyd vedlegg
+ Aktiver Signal for SMS
+
+ SKYV FOR Ã… AVBRYTE
+
+ Laster ned mediemelding
+ Mediemelding
+ Sikker melding
+
+ Last ned
+ Laster ned
+ Sending mislyktes
+ Venter på godkjenning
+ Levert
+
+ Last ned
+ Kontaktfoto
+ Laster ned
+
+
+ Buntvalg-modus
+ %s valgt
+
+ Laster inn land …
+ Søk
+
+ Skann QR-koden på enheten for å koble den til
+
+ Koble til enhet
+
+ Ingen tilkoblede enheter …
+ Koble til ny enhet
+
+ fortsett
+
+ Av
+
+ - 1 sekund
+ - %d sekunder
+
+ %ds
+
+ - 1 minutt
+ - %d minutter
+
+ %dm
+
+ - 1 time
+ - %d timer
+
+ %dt
+
+ - 1 dag
+ - %d dager
+
+ %dd
+
+ - 1 uke
+ - %d uker
+
+ %du
+
+ Søk GIFs og klistremerker
+
+ Ingenting funnet
+
+ Klarte ikke å lese enhetslogg. Du kan fortsatt bruke ADB for å få en feilsøkingslogg i stedet.
+ Takk for hjelpen!
+ Innsending
+ Sender inn logg til gist …
+ Ingen nettleser installert
+
+ Vil du importere tekstmeldinger som ligger på enheten til Signals krypterte database?
+ Standard systemdatabase blir ikke endret på noen måte.
+ Hopp over
+ Importer
+ Dette kan ta litt tid. Vær tålmodig. Vi varsler deg når importering er fullført.
+ IMPORTERER
+
+ Oppdaterer database …
+ Eksporter klartekst-sikkerhetskopi
+ Lag sikkerhetskopi i klartekst som er kan brukes med \"SMS-sikkerhetskopiering & gjenopretting \" til enhetslager
+ Importer systemets SMS-database
+ Importer database fra systemets standard meldingsprogram
+ Gjenopprett kryptert sikkerhetskopi
+ Gjenopprett tidligere eksportert kryptert Signal-sikkerhetskopi
+ Importer klartekst-sikkerhetskopi
+ Importer klartekst-sikkerhetskopi. Dette kan brukes med «SMS-sikkerhetskopi & -gjenoppretting.»
+
+ Vis hele samtalen
+
+ Ingen bilder
+
+ BEKREFT
+ SEND PÃ… NYTT
+
+ Denne telefonen må settes opp for MMS manuelt.
+ Slått på
+ Slått av
+ Ikke valgt
+ Teksten du skrev inn var ikke en gyldig nettadresse
+ Teksten du skrev inn var ikke et gyldig vertsnavn
+
+
+ - %1$s ble med i gruppa.
+ - %1$s ble med i gruppa.
+
+ Gruppe oppdatert.
+ Gruppenavnet er nå «%1$s».
+
+ LÃ¥s opp
+
+ Signal krever MMS-oppsett for å levere medier og gruppemeldinger via mobilnett. Enheten din gjør ikke ikke denne informasjonen tilgjengelig. Dette er vanlig på enheter med restriktive oppsett.
+ Trykk «OK» og følg anvisninger hvis du vil sende medie- og gruppemeldinger. Du finner vanligvis MMS-oppsettet for operatøren din ved å søke etter «din operatør APN». Du trenger bare å gjøre dette én gang.
+
+ BLOKKERT
+
+ Demp samtale
+ Slå av varsler om denne samtalen
+ Varslingslyd
+ Vibrer
+ Blokker
+ Farge
+ Farge for denne kontakten
+ Bekreft sikkerhets nummer
+
+ Signal-samtale
+ avslutt samtale
+ Lyd
+ Demp
+ Signal-anrop
+
+
+Bekreft telefonnummeret ditt for koble til Signal.
+ LAND
+ LANDSKODE OG
+TELEFONNUMMER
+ TELEFONNUMMER
+ Registrer
+ Registrering overfører kontaktinformasjon til tjener. Informasjonen blir ikke lagret der.
+ Drevet av twilio
+
+ Følgende problemer
+er vanlig å møte:
+ SMS-kaprere.
+
+Noen tekstmeldingsklienter, som f.eks. Handcent og GOSMS, oppfører seg dårlig og
+fanger opp all inngående SMS. Sjekk om du har mottatt en tekstmelding som starter
+med «Din Signal bekreftelseskode : ». Hvis du har mottatt denne, må du sette opp tekstmeldingsklienten[e] til å slippe gjennom tekstmeldinger.
+
+ Feil nummer.
+
+Kontroller at du har skrevet inn rikitg nummer, og at det har korrekt format for
+din region.
+ Google Voice.
+
+Signal fungerer ikke med Google Voice-numre.
+
+
+ Stemme bekreftelse
+
+Signal kan også ringe deg for å bekrefte nummeret ditt. Trykk «Ring meg» og skriv inn sekssifret
+kode som du hører nedenfor.
+ Bekreft
+ Ring meg
+ Rediger nummer
+ Tilkoblingsfeil.
+ Signal klarte ikke å koble til tjener.
+ Følgende problemer
+er vanlig:
+ Ingen
+nettverkstilkobling.
+ Enheten
+trenger nettverkstilkobling for å bruke denne funksjonen. Kontroller
+at mobildata eller Wi-Fi er slått på og koblet til.
+ Restriktiv brannmur.
+
+
+Hvis du er tilkoblet via Wi-Fi, er det mulig at en brannmur blokkerer tilgang til
+
+Signal-tjeneren. Prøv i så fall et annet nettverk eller slå på mobildata.
+
+Signal prøver nå å bekrefte nummeret ditt med SMS.
+ Kobler til …
+ Venter på
+SMS-bekreftelse …
+ Registrer på tjener …
+ Dette
+kan ta litt tid. Vi varsler deg når bekreftelse er fullført.
+
+Signal fikk tidsavbrudd under venting på bekreftelsesmelding.
+ SMS-bekreftelse
+ mislyktes.
+
+ Lager nøkler …
+ Varsel
+ Telefon
+ Kryss av
+
+ Skriv inn navn eller nummer
+ Legg til medlemmer
+
+ Trykk for å skanne
+
+ Del sikkerhets nummer
+
+ Problemer venter på manuell løsning.
+ Sendt
+ Mottatt
+ Forsvinner
+ Via
+ Til:
+ Fra:
+ Med:
+
+ Lag passordfrase
+ Skriv inn passordfrase
+ Velg kontakter
+ Signal oppdaget
+ Endre passordfrase
+ Bekreft sikkerhets nummer
+ Send debug logg
+ Forhåndsvisning av medier
+ Alle bilder
+ Alle bilder med %1$s
+ Meldingsdetaljer
+ Koblede enheter
+ Inviter venner
+ Lagrede samtaler
+
+ Importer / eksporter
+ Bruk forvalgt
+ Bruk selvvalgt
+ Demp i 1 time
+ Demp i 2 timer
+ Demp i 1 dag
+ Demp i 7 dager
+ Demp i 1 år
+ Standardoppsett
+ Slått på
+ Slått av
+ Navn og melding
+ Bare navn
+ Ingen navn eller melding
+ Bilder
+ Lyd
+ Video
+
+
+ - %d time
+ - %d timer
+
+
+ Generelt
+ SMS og MMS
+ Ta imot alle SMS
+ Ta imot alle MMS
+ Bruk Signal for alle inngående tekstmeldinger
+ Bruk Signal for alle inngående multimediemeldinger
+ inndatainnstillinger
+ Slå på enter-tast
+ Erstatt smiley-tast med enter-tast
+ Send med enter-tast
+ Bruk enter-tast for å sende tekstmeldinger
+ Skjerminnstillinger
+ Velg identitet
+ Velg kontakt fra kontaktliste.
+ Endre passordfrase
+ Endre passordfrase
+ Slå på passordfrase
+ LÃ¥s Signal og meldingsvarsler med passordfrase
+ Skjermsikkerhet
+ Blokker skjermbilder i sist brukte-liste og i programmet
+ LÃ¥s Signal automatisk etter valgt tid uten aktivitet
+ Passordfrase ved tidsavbrudd
+ Tidsavbrudd ved inaktivitet
+ Varsler
+ Slå på meldingsvarslinger
+ Varslinger om nye kontakter
+ Vis varsel for nye Signal-kontakter
+ LED-farge
+ Ukjent
+ LED-blinkemønster
+ Bruk selvvalgt LED-blinkemønster
+ PÃ¥ for:
+ Av for:
+ LED-blinkemønster er endret.
+ Lyd
+ Endre varslingslyd
+ Stille
+ Varsling under samtaler
+ Spill av varslingslyd når du ser på en aktiv samtale
+ Gjenta varsler
+ Aldri
+ Én gang
+ To ganger
+ Tre ganger
+ Fem ganger
+ Ti ganger
+ Vibrer
+ Vibrer også ved varsling
+ minutter
+ timer
+ Grønn
+ Rød
+ Blå
+ Oransje
+ Cyan
+ Magenta
+ Hvit
+ Ingen
+ Fort
+ Normal
+ Langsom
+ Selvvalgt
+ Avansert
+ Personvern
+ MMS-brukeragent
+ Manuelt MMS-oppsett
+ Bruk manuelt MMS-oppsett
+ Overstyr systemets MMS-oppsett med informasjonen nedenfor.
+ MMSC-adresse
+ MMS-mellomtjenervert
+ MMS-mellomtjenerport
+ MMSC-brukernavn
+ MMSC-passord
+ SMS-leveringsrapporter
+ Be om leveringsrapport når du sender SMS
+ Slette gamle meldinger automatisk når en samtale overskrider valgt lengde
+ Slett gamle meldinger
+ Samtaler og medier
+ Lengdegrense for samtaler
+ Rydd opp i alle samtaler nå
+ Søk gjennom alle samtaler og tving lengdegrenser for samtaler
+ Tilkoblede enheter
+ Lys
+ Mørk
+ Utseende
+ Tema
+ Forvalgt
+ Språk
+ Signal-meldinger og -samtaler
+ Gratis privatmeldinger og -samtaler til Signal-brukere
+ Send feilsøkingslogg
+ «WiFi-anrop»-tilbakefallsmodus
+ Bruk dette hvis enheten leverer SMS / MMS over WiFi og «WiFi-anrop» er slått på)
+ Blokkerte kontakter
+ Godkjenning av sikkerhetsnumre
+ Krev godkjenning av nye sikkerhets nummer når de blir endret
+ Vis varsel
+ Ved bruk av mobildata
+ Ved bruk av WiFi
+ I fremmednett
+ Automatisk nedlasting av medier
+ Meldingsforkortelse
+ Bruk emoji på systemet
+ Slå av innebygd emoji-støtte i Signal
+
+
+
+
+ Velg alle
+ Velg bort alle
+ SIGNAL-BRUKERE
+ ALLE KONTAKTER
+ Ny melding til …
+
+ Ferdig
+
+ Oppdater kontaktliste
+
+ Ring
+
+ Signal-samtale
+
+ Meldingsdetaljer
+ Kopier tekst
+ Slett melding
+ Videresend melding
+ Send melding på nytt
+
+ Lagre vedlegg
+
+ Forsvinnende meldinger
+
+ Utløpende meldinger
+
+ Inviter
+
+ Sikkerhet
+
+ Slett utvalg
+ Velg alle
+ Arkiver utvalg
+ Angre arkivering av utvalg
+
+ Søk
+
+ Kontaktfoto
+ Feilvarsel
+ Arkivert
+
+ Ny samtale
+
+ Tilbakestill sikker økt
+
+ Vis
+
+ Ikke vis varsler
+
+ Legg til vedlegg
+ Oppdater gruppe
+ Forlat gruppe
+ Slett samtale
+ Alle bilder
+ Samtaleinnstillinger
+
+ Utvid sprettoppvindu
+
+ Legg til i kontakter
+
+ Mottakerliste
+ Levering
+ Samtale
+ Kringkast
+
+ Sammenlikn
+ Vis QR-kode
+ Skan QR-kode for kontakt
+
+ Ny melding
+ Ny gruppe
+ Innstillinger
+ LÃ¥s
+ Merk alle som lest
+ Inviter venner
+ Hjelp
+
+ Kopiere til utklippstavle
+ Sammenlign med utklippstavlen
+
+ Denne Signal-installasjonen er utdatert
+
+ - Denne versjonen av Signal utgår om 1 dag. Trykk for å oppdatere til nyeste versjon.
+ - Denne versjonen av Signal utgår om %d dager. Trykk for å oppdatere til nyeste versjon.
+
+ Denne versjonen av Signal utgår i dag. Trykk for å oppdatere til nyeste versjon.
+ Denne versjonen av Signal er utgått.
+ Meldinger blir fra nå av ikke sendt. Trykk for å oppdatere til nyeste versjon.
+ OPPDATERING
+ Bruk som forvalgt SMS-program
+ Trykk for å gjøre Signal til forvalgt SMS-program.
+ VELG
+ Importer system-SMS
+ Trykk for å kopiere telefonens SMS-meldinger til signals krypterte database.
+ IMPORTER
+ Slå på Signal-meldinger og -samtaler
+ Oppgrader kommunikasjonsopplevelsen.
+ SLÃ… PÃ…
+ Inviter til Signal
+ Ta samtalen med %1$s til neste nivå.
+ INVITER
+ Inviter vennene dine!
+ Jo flere venner som bruker Signal, desto bedre blir det.
+ DEL
+ LUKK
+
+ Deg
+ Klarte ikke å forhåndsvise bilde
+ Ustøttet medietype
+
+ Lagre
+ Videresend
+ Alle bilder
+
+ Lagre alle
+
+ Forhåndsvisning av bilde
+
+ Oppdater
+
+ HÃ¥ndsett
+ Hodetelefoner
+ Høyttaler
+
+ Sletter
+ Sletter gamle meldinger …
+ Gamle meldinger ble slettet
+
+ Transport-ikon
+
+
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 21170abed1b..11fa183ec36 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -5,6 +5,8 @@
Nee
Verwijderen
Even geduld...
+
+ Nieuw bericht
Momenteel: %s
Je hebt nog geen wachtwoord ingesteld!
@@ -14,22 +16,22 @@
Nu alle oude berichten verwijderen?
- - Dit zal direct alle gesprekken inkorten tot het laatste bericht.
- - Dit zal direct alle gesprekken inkorten tot de laatste %d berichten.
+ - Dit zal onmiddellijk alle gesprekken inkorten tot het laatste bericht.
+ - Dit zal onmiddellijk alle gesprekken inkorten tot de laatste %d berichten.
Verwijderen
Wachtwoord uitschakelen?
- Dit zal permanent Signal en berichtnotificaties ontgrendelen.
+ Dit zal Signal- en berichtmeldingen voorgoed ontgrendelen.
Uitschakelen
Aan het afmelden
- Aan het afmelden voor Signal berichten en oproepen...
- Signal berichten en oproepen uitschakelen?
- Dit zal Signal berichten en oproepen uitschakelen door je te deregistreren bij de server. Je zal je telefoonnummer opnieuw moeten registreren als je deze functies weer wil gebruiken.
+ Aan het afmelden voor Signal-berichten en -oproepen...
+ Signal-berichten en -oproepen uitschakelen?
+ Dit zal Signal-berichten en -oproepen uitschakelen door je te deregistreren bij de server. Je zal je telefoonnummer opnieuw moeten registreren als je deze functies weer wil gebruiken.
Fout bij verbinden met de server!
SMS ingeschakeld
- Raak aan om je standaard SMS-applicatie te wijzigen
+ Tik om je standaard-SMS-applicatie te wijzigen
SMS uitgeschakeld
- Raak aan om Signal in te stellen als je standaard SMS-applicatie
+ Tik om Signal in te stellen als je standaard-SMS-applicatie
aan
Aan
uit
@@ -62,12 +64,12 @@
Inkomende oproep
- De identiteitssleutel van %1$s is gewijzigd. Dit kan betekenen dat iemand jouw communicatie probeert te onderscheppen, of dat %2$s gewoon Signal opnieuw geïnstalleerd heeft en nu een nieuwe identiteitssleutel heeft.
- Je wilt wellicht dit contact verifiëren.
- Accepteren
+ Je veiligheidsnummer met %1$s is veranderd. Dit kan betekenen dat iemand je communicatie probeert te onderscheppen, of gewoon dat %2$s Signal opnieuw geïnstalleerd heeft.
+ Veiligheidsnummers met deze contactpersoon verifiëren.
+ Aanvaarden
Bericht sturen naar %s
- Signal oproep %s
+ Signal-oproep %s
Berichtgrootte: %d KB
Verloopt: %s
@@ -75,30 +77,30 @@
Bekijk beveiligde media?
Deze media is opgeslagen in een versleutelde database. Om het weer te geven met een externe app, zal het tijdelijk moeten worden ontsleuteld en opgeslagen. Weet je zeker dat je dat wil doen?
Fout, verouderd sleuteluitwisselingsbericht ontvangen.
- Sleuteluitwisselingsbericht ontvangen, klik om te verwerken
+ Sleuteluitwisselingsbericht ontvangen, tik om te verwerken.
%1$s heeft de groep verlaten.
- Aanraken voor details
+ Tik voor details
Tik voor terugvallen naar onbeveiligd
Terugvallen naar onversleutelde SMS?
Terugvallen naar onversleutelde MMS?
- Dit bericht zal niet versleuteld worden om dat ontvanger geen Signal meer gebruikt.\n\nOnbeveiligd bericht verzenden?
+ Dit bericht zal niet versleuteld worden omdat de ontvanger geen Signal meer gebruikt.\n\nOnbeveiligd bericht verzenden?
Geen app gevonden om dit bestand te openen.
van %s
naar %s
- Beveiligde sessie resetten?
+ Beveiligde sessie opnieuw instellen?
Dit kan mogelijk helpen wanneer je versleutelingsproblemen hebt met dit gesprek. Je berichten blijven behouden.
- Resetten
+ Opnieuw instellen
Gesprek verwijderen?
- Dit zal alle berichten in dit gesprek permanent verwijderen.
+ Dit zal alle berichten in dit gesprek voorgoed verwijderen.
Bijlage toevoegen
Selecteer contactinformatie
Bericht opstellen
- Excuses, er trad een fout op bij het instellen van je bijlage.
+ Sorry, er trad een fout op bij het instellen van je bijlage.
De gif die je geselecteerd hebt is te groot!
- Excuses, het videobestand overschrijdt de maximale berichtgrootte (%1$skB).
- Excuses, het audiobestand overschrijdt de maximale berichtgrootte (%1$skB).
- Ontvanger is geen geldig SMS of e-mailadres!
+ Sorry, het videobestand overschrijdt de maximale berichtgrootte (%1$skB).
+ Sorry, het audiobestand overschrijdt de maximale berichtgrootte (%1$skB).
+ Ontvanger is geen geldig SMS- of e-mailadres!
Bericht is leeg!
Groepsleden
Groepsgesprek
@@ -110,56 +112,75 @@
Concept opgeslagen
Ongeldige ontvanger!
Bellen niet ondersteund
- Dit apparaat lijkt dial-acties niet te ondersteunen.
+ Dit apparaat lijkt belacties niet te ondersteunen.
Groep verlaten?
Weet je zeker dat je deze groep wil verlaten?
Onbeveiligde SMS
Onbeveiligde MMS
Signal
Laten we wisselen naar Signal %1$s
- Laten we chatten met: %1$s
+ Laten we chatten met %1$s
Fout bij het verlaten van de groep...
MMS niet ondersteund
Dit bericht kan niet verzonden worden omdat je provider MMS niet ondersteunt.
- Kies alsjeblieft een contact
- Ontblokken?
- Weet je zeker dat je dit contact wil deblokkeren?
+ Kies een contact
+ Contact deblokkeren?
+ Je kan weer berichten en oproepen van dit contact ontvangen.
Ontblokken
- Bijlage overschrijdt de maximale grootte voor het type bericht dat je wil versturen.
+ Bijlage overschrijdt de maximale grootte voor het type bericht dat je wil verzenden.
Camera niet beschikbaar
Fout bij opnemen audio!
- Fout bij versturen audiobericht...
+ Fout bij verzenden van audiobericht...
+ Er is geen app aanwezig op het apparaat om deze link te openen.
Berichtdetails
- Overdracht: %1$s\nVerzonden/Ontvangen: %2$s
- Verzender: %1$s\nTransport: %2$s\nVerstuurd%3$s\n/Ontvangen:%4$s
+ Transport: %1$s\nVerzonden/Ontvangen: %2$s
+ Afzender: %1$s\nTransport: %2$s\nVerzonden: %3$s\n/Ontvangen: %4$s
- Geselecteerd bericht verwijderen?
- Geselecteerde berichten verwijderen?
- - Dit zal het geselecteerde bericht permanent verwijderen.
- - Dit zal alle %1$d geselecteerde berichten permanent verwijderen.
+ - Dit zal het geselecteerde bericht voorgoed verwijderen.
+ - Dit zal alle %1$d geselecteerde berichten voorgoed verwijderen.
Opslaan?
- Succesvol!
+
+ - Als je dit bestand opslaat in de mediaopslag kunnen alle andere apps op je apparaat deze gegevens benaderen.\n\nDoorgaan?
+ - Als je al deze %1$d gegevens opslaat in de mediaopslag kunnen alle andere apps op je apparaat deze gegevens benaderen.\n\nDoorgaan?
+
+
+ - Fout tijdens het opslaan van de bijlage!
+ - Fout tijdens het opslaan van de bijlage!
+
+ Bestand succesvol opgeslagen.
Opslag niet beschrijfbaar!
+
+ - Bijlage opslaan
+ - %1$d bijlagen opslaan
+
+
+ - Bijlage opslaan...
+ - %1$d bijlagen opslaan...
+
+ Bijlagen aan het verzamelen...
In afwachting...
- Data (Signal)
+ Gegevens (Signal)
MMS
SMS
Verwijderen
Berichten verwijderen...
Zoeken...
+ Er is geen browser op het apparaat geïnstalleerd.
- Geselecteerd gesprek verwijderen?
- Geselecteerde gesprekken verwijderen?
- - Dit zal het geselecteerde gesprek permanent verwijderen.
- - Dit zal alle %1$d geselecteerde gesprekken permanent verwijderen.
+ - Dit zal het geselecteerde gesprek voorgoed verwijderen.
+ - Dit zal alle %1$d geselecteerde gesprekken voorgoed verwijderen.
Verwijderen
Geselecteerde gesprekken verwijderen...
@@ -177,15 +198,15 @@
Gesprekken gearchiveerd (%d)
- Handmatig gebruiken: %s
- Standaard gebruiken: %s
+ Aangepast in gebruik: %s
+ Standaard in gebruik: %s
Geen
- Nu
+ Nu
%d min
\'%s\' ontkoppelen?
- Door het ontkoppelen van dit apparaat kan het niet langer berichten verzenden of ontvangen.
+ Door het ontkoppelen van dit apparaat kan het geen berichten meer verzenden of ontvangen.
Netwerkverbinding mislukt...
Opnieuw proberen
Apparaat ontkoppelen...
@@ -213,25 +234,30 @@
Tekst naar opslag exporteren...
Fout, kon niet naar de opslag schrijven.
Fout tijdens het schrijven naar de opslag.
- Succesvol!
+ Export succesvol.
- Permanente Signal communicatiefout!
+ Permanente Signal-communicatiefout!
Signal was niet in staat met Google Play services te registreren. Signal berichten en oproepen zijn nu uitgeschakeld, probeer opnieuw te registreren via Instellingen > Geavanceerd.
+
+ Fout bij ophalen van GIF in volledige resolutie...
+
+ GIFs
+ Stickers
Nieuwe groep
Groep bijwerken
Groepsnaam
Nieuwe MMS-groep
Je hebt een contactpersoon geselecteerd die geen Signal-groepen ondersteunt, dus deze groep zal gebruik maken van MMS.
- Je bent niet geregistreerd voor Signal berichten en oproepen, dus Signal groepen zijn uitgeschakeld. Registreren kan via Instellingen > Geavanceerd.
+ Je bent niet geregistreerd voor Signal-berichten en -oproepen, dus Signal-groepen zijn uitgeschakeld. Registreren kan via Instellingen > Geavanceerd.
Er is een onverwachte fout opgetreden waardoor het aanmaken van een groep is mislukt.
Je groep moet minstens één persoon bevatten.
Het nummer van een van de leden van je groep kan niet goed worden gelezen. Corrigeer dit of verwijder deze persoon, en probeer het opnieuw.
Groepsafbeelding
Groep aanmaken
- %1$s maken...
- Updating %1$s...
- Kon %1$s niet toevoegen omdat het geen Signal gebrikers zijn
+ %1$s aanmaken...
+ %1$s bijwerken...
+ Kon %1$s niet toevoegen omdat het geen Signal-gebruikers zijn
Groepsdetails laden...
Je bent al lid van deze groep.
@@ -241,12 +267,12 @@
Exporteren
SMS-berichten uit de systeemdatabase importeren?
- Dit zal berichten uit de standaard SMS-database van het systeem importeren naar Signal. Als je de SMS-database van het systeem voorheen hebt geïmporteerd, kan opnieuw importeren resulteren in dubbele berichten.
+ Dit zal berichten uit de standaard-SMS-database van het systeem importeren naar Signal. Als je de SMS-database van het systeem voorheen hebt geïmporteerd, kan opnieuw importeren resulteren in dubbele berichten.
Importeren
Annuleren
Versleutelde back-up herstellen?
-Herstellen van een versleutelde back-up zal je bestaande sleutels, voorkeuren en berichten volledig vervangen. Je zult alle informatie verliezen die wel in je huidige Signal-installatie zit, maar niet de back-up.
+Herstellen van een versleutelde back-up zal je bestaande sleutels, voorkeuren en berichten volledig vervangen. Je zult alle informatie verliezen die wel in je huidige Signal-installatie zit, maar niet in de back-up.
Herstellen
Onversleutelde back-up importeren?
Dit zal berichten importeren uit een platte tekstbackup. Als je deze backup eerder al eens hebt geïmporteerd, zal het opnieuw importeren resulteren in dubbele berichten.
@@ -260,22 +286,22 @@ Herstellen van een versleutelde back-up zal je bestaande sleutels, voorkeuren en
Geen versleutelde back-up gevonden!
Herstellen voltooid!
- Tik en hou vast om audio op te nemen, laat los om te versturen.
+ Tik en hou vast om audio op te nemen, laat los om te verzenden
Delen
- SMS versturen
+ Kies contacten
Annuleren
- Versturen...
+ Verzenden...
Hartje
Uitnodigingen verzonden!
Uitnodigen voor Signal
-
- - VERSTUREN NAAR 1 VRIEND
- - VERSTUREN NAAR %d VRIENDEN
+
+ - STUUR SMS NAAR 1 VRIEND
+ - STUUR SMS NAAR %d VRIENDEN
- - 1 SMS uitnodiging versturen?
- - %d SMS uitnodigingen versturen?
+ - 1 SMS-uitnodiging versturen?
+ - %d SMS-uitnodigingen verzenden?
Laten we wisselen naar Signal: %1$s
Het lijkt erop dat je geen apps hebt om naar te delen.
@@ -286,17 +312,17 @@ Herstellen van een versleutelde back-up zal je bestaande sleutels, voorkeuren en
Signal heeft Barcode Scanner nodig voor QR-codes.
Verzenden mislukt
- Nieuwe identiteit
+ Nieuw veiligheidsnummer
MMS opslaan mislukt!
Fout bij verbinden met MMS provider...
Fout bij het lezen van de MMS-instellingen van je provider...
- Signal oproep aan de gang
+ Signal-oproep aan de gang
Gemiste oproep van %s
- Gemiste Signal oproep
- Opzetten van Signal oproep
- Inkomende Signal oproep
+ Gemiste Signal-oproep
+ Opzetten van Signal-oproep
+ Inkomende Signal-oproep
Oproep afwijzen
Oproep beantwoorden
Oproep beëindigen
@@ -304,13 +330,16 @@ Herstellen van een versleutelde back-up zal je bestaande sleutels, voorkeuren en
Multimediabericht
- Dit bericht gebruikt verouderde versleuteling van een Signal versie die niet meer ondersteund wordt. Vraag de afzender om te updaten naar de meest recente versie en het bericht opnieuw te versturen.
+ Dit bericht gebruikt verouderde versleuteling van een Signal-versie die niet meer ondersteund wordt. Vraag de afzender om bij te werken naar de meest recente versie en het bericht opnieuw te verzenden.
Je hebt de groep verlaten.
Groep bijgewerkt.
%s heeft je gebeld
%s gebeld
Gemiste oproep van %s
%s gebruikt nu Signal, zeg hoi!
+ Je hebt de timer voor verdwijnende berichten ingesteld op %1$s.
+ %1$s heeft de timer voor verdwijnende berichten ingesteld op %2$s.
+ Je veiligheidsnummer met %s is veranderd.
Wachtwoorden komen niet overeen
Incorrect oud wachtwoord!
@@ -323,18 +352,22 @@ Herstellen van een versleutelde back-up zal je bestaande sleutels, voorkeuren en
Het kan
• Al je berichten lezen
- \n• Berichten onder jouw naam versturen
+ \n• Berichten onder jouw naam verzenden
- Apparaat koppelen
- Nieuw apparaat koppelen...
+ Apparaat wordt gekoppeld
+ Nieuw apparaat wordt gekoppeld...
Apparaat goedgekeurd!
Geen apparaat gevonden.
Netwerkfout.
Ongeldige QR-code.
Sorry, je hebt te veel gekoppelde apparaten, probeer er enkele te verwijderen...
Sorry, dit is geen geldige QR-code voor koppeling van een apparaat.
- Een Signal apparaat koppelen?
- Het lijkt erop dat je een Signal apparaat wil koppelen met een externe scanner. Scan voor de veiligheid alsjeblieft de code opnieuw vanuit Signal.
+ Een Signal-apparaat koppelen?
+ Het lijkt erop dat je een Signal-apparaat wil koppelen met een externe scanner. Scan voor de veiligheid alsjeblieft de code opnieuw vanuit Signal.
+
+ Verdwijnende berichten
+ De berichten zullen zichzelf niet verwijderen.
+ Berichten die in dit gesprek verzonden en ontvangen worden zullen %s nadat ze gelezen zijn verdwijnen.
Voer wachtwoord in
Signal icoon
@@ -348,12 +381,13 @@ Herstellen van een versleutelde back-up zal je bestaande sleutels, voorkeuren en
Nu beoordelen!
Nee bedankt
Later
+ Oeps, het lijkt er op dat de Play Store-app niet geïnstalleerd is op dit apparaat.
Contact blokkeren?
- Je zal geen berichten of oproepen meer ontvangen van deze gebruiker.
+ Je kan niet langer berichten en oproepen van dit contact ontvangen.
Blokkeren
Contact deblokkeren?
- Weet je zeker dat je dit contact wil deblokkeren?
+ Je kan weer berichten en oproepen van dit contact ontvangen.
Deblokkeren
Ingeschakeld
Uitgeschakeld
@@ -389,7 +423,7 @@ telefoonnummer opgeven
Het nummer dat je hebt
ingevoerd (%s) is ongeldig.
Niet ondersteund
- Sorry, dit apparaat ondersteunt geen databerichten. Apparaten die een Androidversie ouder dan 4.0 draaien moeten aan een Google Account gekoppeld zijn. Apparaten die Android 4.0 of nieuwer draaien hoeven niet gekoppeld te zijn, maar moeten wel de Play Store app geïnstalleerd hebben.
+ Sorry, dit apparaat ondersteunt geen gegevensberichten. Apparaten die een Android-versie ouder dan 4.0 draaien moeten aan een Google-account gekoppeld zijn. Apparaten die Android 4.0 of nieuwer draaien hoeven niet gekoppeld te zijn, maar moeten wel de Play Store-app geïnstalleerd hebben.
Dubbelcheck dat dit je nummer is! We gaan dit verifiëren met een SMS.
@@ -417,7 +451,7 @@ ingevoerd (%s) is ongeldig.
Te veel verzoeken!
Je hebt al een spraakoproep aangevraagd. Je kan dit opnieuw doen binnen 20 minuten.
Registratieconflict
- Dit nummer bestaat al op een andere Signal server (CyanogenMod?). Maak daar eerst je registratie ongedaan voordat je je hier registreert.
+ Dit nummer bestaat al op een andere Signal-server (CyanogenMod?). Maak daar eerst je registratie ongedaan voordat je je hier registreert.
Registratie voltooid
Registratie bij Signal is succesvol afgerond.
@@ -432,38 +466,32 @@ ingevoerd (%s) is ongeldig.
ontvangen!
Sleuteluitwisselingsbericht ontvangen voor een verkeerde protocol-versie.
- Bericht ontvangen met een onbekende identiteitssleutel. Klik om te verwerken en weer te geven.
- Bijgewerkte maar onbekende identiteitsgegevens ontvangen. Raak aan om identiteit te bevestigen.
- Beveiligde sessie gereset.
- Bericht dupliceren.
+ Er is een bericht met een nieuw veiligheidsnummer ontvangen. Tik om te verwerken en te tonen.
+ Je hebt de beveiligde sessie opnieuw ingesteld.
+ %s heeft de beveiligde sessie opnieuw ingesteld.
+ Gedupliceerd bericht.
Je hebt deze groep verlaten...
- Beveiligde sessie gereset.
+ Beveiligde sessie opnieuw ingesteld.
Concept:
Jij hebt gebeld
Heeft je gebeld
Gemiste oproep
Mediabericht
%s gebruikt nu Signal, zeg hallo!
+ Berichten zullen verdwijnen na %s
+ Je veiligheidsnummer met %s is veranderd.
- Je hebt geen identiteitssleutel.
- De ontvanger heeft geen identiteitssleutel.
- De ontvanger heeft geen identiteitssleutel!
- WAARSCHUWING, de gescande sleutel komt NIET overeen! Controleer alsjeblieft de vingerafdruk zorgvuldig.
- NIET geverifieerd!
- Sleutel van partner is correct. Het is ook nodig om je sleutel door de partner te laten verifiëren.
- Geverifieerd
- Je hebt geen identiteitssleutel!
-
- Je hebt geen identiteitssleutel.
- WAARSCHUWING, de gescande sleutel komt NIET overeen!
- NIET geverifieerd!
- De gescande sleutel komt overeen!
- Geverifieerd!
- Jouw identiteitsvingerafdruk
+ Dit contact gebruikt een oude versie van Signal. Vraag hen om Signal bij te werken vooraleer je het veiligheidsnummer verifieert.
+ Je contact gebruikt een nieuwere versie van Signal met een incompatibel QR-codeformaat. Werk Signal bij om te vergelijken.
+ De gescande QR-code is geen goed veiligheidsnummer. Probeer de code opnieuw te scannen.
+ Veiligheidsnummer delen via...
+ Ons Signal-veiligheidsnummer:
+ Het lijkt erop dat je geen apps hebt om naar te delen.
+ Geen veiligheidsnummer gevonden op het klembord
Initiëren ondanks bestaand verzoek?
- Versturen
+ Verzenden
Verkeerd versleuteld bericht...
Ontsleutelen, even geduld...
@@ -482,15 +510,17 @@ Sleuteluitwisselingsbericht ontvangen voor een verkeerde protocol-versie.
MMS ontsleutelen, even geduld...
Verkeerd versleuteld MMS-bericht...
- MMS-bericht versleuteld voor niet bestaande sessie...
+ MMS-bericht versleuteld voor niet-bestaande sessie...
- Demp notificaties
+ Demp meldingen
Importeren
Tekstberichten importeren
+ Importeren voltooid!
+ Het importeren van de systeemdatabase is voltooid.
- Raak aan om te openen.
- Raak aan om te openen of raak om te sluiten het slot aan.
+ Tik om te openen.
+ Tik om te openen of tik op het slot om te sluiten.
Signal is ontgrendeld
Vergrendelen met wachtwoord
@@ -502,23 +532,32 @@ Sleuteluitwisselingsbericht ontvangen voor een verkeerde protocol-versie.Berichtaflevering mislukt.
Het bericht afleveren is mislukt.
Fout bij afleveren bericht.
- Alles als gelezen markeren
- Gelezen
+ Alles markeren als gelezen
+ Markeren als gelezen
Mediabericht
Reageren
- Snel reageren niet beschikbaar als Signal vergrendeld is!
- Fout bij versturen van bericht!
+ Snel reageren niet beschikbaar wanneer Signal vergrendeld is!
+ Fout bij verzenden van bericht!
Signal
Nieuw bericht
Afbeelding
+ Afbeelding
Audio
+ Audio
Video
+ Video
Contactpersoon
+ Contactpersoon
Camera
+ Camera
Locatie
+ Locatie
+ GIF
+ Gif
+ Bijlageoverzicht tonen/verbergen
Oud wachtwoord
Nieuw wachtwoord
@@ -539,16 +578,19 @@ Sleuteluitwisselingsbericht ontvangen voor een verkeerde protocol-versie.
Gesprek gedempt
- Signal bericht versturen
- Onbeveiligde SMS versturen
- Onbeveiligde MMS versturen
- Versturen
+ Verzend een Signal-bericht
+ Verzend een onbeveiligde SMS
+ Verzend een onbeveiligde MMS
+ Van %1$s
+ Verzenden
Verwijderen
Gesprek met %1$s
Berichtsamenstelling
Emojitoetsenbord wisselen
Bijlageminiatuur
- Bijlageoverzicht tonen/verbergen
+ Camera overzicht tonen/verbergen
+ Geluidsopname opnemen en verzenden
+ Gebruik Signal voor SMS
SCHUIF OM TE ANNULEREN
@@ -558,13 +600,17 @@ Sleuteluitwisselingsbericht ontvangen voor een verkeerde protocol-versie.
Download
Downloaden
- Verzenden is mislukt
+ Verzenden mislukt
In afwachting van goedkeuring
Bezorgd
Download
Contactfoto
Downloaden
+
+ Afspelen
+ Pauzeren
+ Downloaden
Meerdere tegelijk selecteren
%s geselecteerd
@@ -572,7 +618,7 @@ Sleuteluitwisselingsbericht ontvangen voor een verkeerde protocol-versie.Landen laden...
Zoeken
- Scan de weergegeven QR code op het te koppelen apparaat
+ Scan de weergegeven QR-code op het te koppelen apparaat
Apparaat koppelen
@@ -580,28 +626,60 @@ Sleuteluitwisselingsbericht ontvangen voor een verkeerde protocol-versie.Nieuw apparaat koppelen
doorgaan
+
+ Uit
+
+ - 1 seconde
+ - %d seconden
+
+ %ds
+
+ - 1 minuut
+ - %d minuten
+
+ %dm
+
+ - 1 uur
+ - %d uur
+
+ %dh
+
+ - 1 dag
+ - %d dagen
+
+ %dd
+
+ - 1 week
+ - %d weken
+
+ %dw
+
+ GIFs en stickers zoeken
+
+ Niets gevonden
- Het is mislukt logs van je apparaat verzamelen. Je kan nog wel ADB gebruiken om debug logs te verzamelen.
+ Kon geen logs van je apparaat verzamelen. Je kan nog wel ADB gebruiken om debuglogs te verzamelen.
Bedankt voor je hulp!
Indienen
- Logs posten naar gist...
+ Logs worden gepost naar gist...
+ Geen browser geïnstalleerd
- Wil je jouw huidige tekstberichtendatabase importeren naar de versleutelde database van Signal?
- De standaard systeemdatabase zal niet gewijzigd of aangepast worden op enige wijze.
+ Wil je je huidige tekstberichtendatabase importeren naar de versleutelde database van Signal?
+ De standaardsysteemdatabase zal niet gewijzigd of aangepast worden op enige wijze.
Overslaan
Importeren
- Dit kan enkele ogenblikken duren. Even geduld, we zullen je melden wanneer het importeren voltooid is.
+ Dit kan even duren. Even geduld, we zullen je melden wanneer het importeren voltooid is.
IMPORTEREN
- Database bijwerken...
+ Database wordt bijgewerkt...
Onversleutelde back-up exporteren
- Exporteer een onversleutelde tekstbackup compatible met \'SMS Backup & Restore\' naar de opslag
+ Exporteer een onversleutelde back-up compatibel met \'SMS Backup & Restore\' naar de opslag
SMS-berichten uit de systeemdatabase importeren?
- Importeer de database van de standaard berichten-app
- Versleutelde back-up herstellen?
- Versleutelde back-up herstellen?
- Onversleutelde back-up importeren...
- Onversleutelde back-up importeren?
+ Importeer de database van de standaardberichtenapp
+ Versleutelde back-up herstellen
+ Herstel een eerder geëxporteerde versleutelde back-up van Signal
+ Onversleutelde back-up importeren
+ Importeer een onversleutelde back-up. Compatibel met \'SMS Back-up & Herstellen\'.
Bekijk volledig gesprek
@@ -624,21 +702,21 @@ Sleuteluitwisselingsbericht ontvangen voor een verkeerde protocol-versie.Groep bijgewerkt.
De groepsnaam is nu \'%1$s\'.
- Ontgrendel
+ Ontgrendelen
- Signal heeft MMS-instellingen nodig om mediaberichten te kunnen versturen via je telefoonprovider. Je toestel maakt deze informatie niet beschikbaar. Dit komt vaker voor bij gelockte toestellen en andere beperkende configuraties.
- Om media- en groepsberichten te versturen, druk je op \'OK\' en voer je de gevraagde gegevens in. De MMS-instellingen voor jouw provider kunnen meestal gevonden worden door online te zoeken naar \"je-providernaam APN\". Dit hoef je maar één keer te doen.
+ Signal heeft MMS-instellingen nodig om mediaberichten te kunnen versturen via je telefoonprovider. Je apparaat maakt deze informatie niet beschikbaar. Dit komt vaker voor bij gelockte apparaten en andere beperkende configuraties.
+ Om media- en groepsberichten te verzenden tik je op Oké en voer je de gevraagde gegevens in. De MMS-instellingen voor je provider kunnen meestal gevonden worden door online te zoeken naar \"naam-van-je-provider APN\". Dit hoef je maar één keer te doen.
GEBLOKKEERD
- Demp gesprek
- Notificaties uitschakelen voor dit gesprek
- Notificatiegeluid
+ Gesprek dempen
+ Meldingen uitschakelen voor dit gesprek
+ Meldingsgeluid
Vibreren
Blokkeren
Kleur
Kleur voor dit contact
- Identiteit verifiëren
+ Veiligheidsnummer verifiëren
Signal oproep
Oproep beëindigen
@@ -673,7 +751,8 @@ Signal werkt niet met nummers van Google Voice.
Spraakverificatie
-Signal kan je ook bellen om je nummer te verifiëren. Raak \'Bel me\' aan en voer hieronder de 6-cijferige code in die wordt voorgelezen.
+Signal kan je ook bellen om je nummer te verifiëren. Tik op \'Bel me\' en voer
+hieronder de 6-cijferige code in die wordt voorgelezen.
Verifiëren
Bel me
Nummer bewerken
@@ -682,7 +761,7 @@ Signal kan je ook bellen om je nummer te verifiëren. Raak \'Bel me\' aan en voe
Mogelijke problemen
zijn:
Geen netwerkverbinding.
- Je apparaat heeft een netwerkverbinding nodig voor deze Signal functie. Controleer of je verbonden bent met mobiel internet of WiFi.
+ Je apparaat heeft een netwerkverbinding nodig voor deze Signal-functie. Controleer of je verbonden bent met mobiel internet of WiFi.
Beperkende firewall.
Als je bent verbonden via WiFi is het mogelijk dat een firewall de verbinding met de Signal-server blokkeert. Probeer een ander- of het mobiele netwerk.
@@ -692,7 +771,7 @@ Signal zal je nummer nu automatisch verifiëren door middel van een SMS-bericht.
Wachten op
SMS-verificatie...
Aanmelden bij de server...
- Dit kan enkele ogenblikken duren. Even geduld, we zullen je melden wanneer de verificatie voltooid is.
+ Dit kan even duren. Even geduld, we zullen je melden wanneer de verificatie voltooid is.
Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
SMS-verificatie mislukt.
@@ -702,14 +781,17 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Check
Typ een naam of nummer
- Voeg groepslid toe
-
- Identiteit partner (partner leest):
- Jouw identiteit (jij leest):
+ Leden toevoegen
+
+ Lees meer over het verifiëren van een veiligheidsnummer.]]>
+ Tik om te scannen
+
+ Veiligheidsnummer delen
Enkele dingen vergen je aandacht.
Verzonden
Ontvangen
+ Verdwijnt
Via
Naar:
Van:
@@ -719,22 +801,20 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Wachtwoord invoeren
Contacten selecteren
Signal gedetecteerd
- Publieke identiteitssleutel
Wachtwoord wijzigen
- Identiteit verifiëren
- Debug log indienen
- Media miniatuur
+ Veiligheidsnummer verifiëren
+ Debuglog indienen
+ Mediaminiatuur
Alle afbeeldingen
Alle afbeeldingen met %1$s
Berichtdetails
- Gekoppelde apparaten beheren
+ Gekoppelde apparaten
Vrienden uitnodigen
Gearchiveerde gesprekken
Importeren / exporteren
- Jouw identiteitssleutel
Gebruik standaard
- Gebruik handmatig
+ Gebruik aangepast
Demp voor 1 uur
Demp voor 2 uur
Demp voor 1 dag
@@ -764,24 +844,24 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Invoerinstellingen
Enter-toets inschakelen
De smiley-toets vervangen door een Enter-toets
- Enter-toets verstuurt
- De Enter-toets gebruiken voor versturen van tekstberichten
+ Enter-toets verzendt
+ Gebruik de Enter-toets voor verzenden van tekstberichten
Beeldscherminstellingen
Identiteit kiezen
- Kies je contactgegevens uit de contactpersonenlijst.
+ Kies je contactgegevens uit de lijst met contactpersonen.
Wachtwoord wijzigen
Wijzig je wachtwoord
Wachtwoord inschakelen
- Signal en berichtnotificaties vergrendelen met een wachtwoord
+ Signal- en berichtmeldingen vergrendelen met een wachtwoord
Schermbeveiliging
- Screenshots onmogelijk maken in deze app en de lijst van recent gebruikte apps
+ Schermafdrukken onmogelijk maken in deze app en de lijst van recent gebruikte apps
Signal automatisch vergrendelen na een bepaalde periode van inactiviteit
Vergrendeling bij inactiviteit
Inactiviteitsduur voor vergrendeling
- Notificaties
- Toon berichtnotificaties
- Notificaties nieuwe contacten
- Toon een notificatie voor nieuwe Signal contacten
+ Meldingen
+ Toon berichtmeldingen
+ Meldingen voor nieuwe contacten
+ Toon een melding voor nieuwe Signal-contacten
LED-kleur
Onbekend
LED-knipperpatroon
@@ -790,19 +870,19 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Uit voor:
Aangepast LED-knipperpatroon ingesteld.
Geluid
- Notificatiegeluid wijzigen
+ Meldingsgeluid wijzigen
Stil
- Notificaties in een gesprek
- Notificatiegeluid afspelen tijdens het bekijken van een actief gesprek
+ Meldingen in een gesprek
+ Meldingsgeluid afspelen tijdens het bekijken van een actief gesprek
Herhaal meldingen
Nooit
- Eén keer
+ Een keer
Twee keer
Drie keer
Vijf keer
Tien keer
Trillen
- Ook trillen bij notificaties
+ Tril bij meldingen
minuten
uren
Groen
@@ -823,47 +903,49 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Handmatige MMS-instellingen
Gebruik handmatige MMS-instellingen
Gebruik onderstaande gegevens in plaats van de MMS-instellingen van het systeem.
- MMSC URL
- MMS proxy server
- MMS proxy poort
- MMSC gebruikersnaam
- MMSC wachtwoord
+ MMSC-URL
+ MMS-proxyserver
+ MMS-proxypoort
+ MMSC-gebruikersnaam
+ MMSC-wachtwoord
SMS-ontvangstbevestigingen
- Verzoek om een ontvangstbevestiging voor ieder verzonden SMS bericht
- Automatisch oudere berichten verwijderen wanneer een gesprek meer dan een bepaald aantal berichten bevat
+ Vraag een ontvangstbevestiging voor ieder verzonden SMS-bericht
+ Verwijder automatisch oudere berichten wanneer een gesprek meer dan een bepaald aantal berichten bevat
Verwijder oude berichten
Gesprekken en media
Gesprekslengtelimiet
Oude berichten nu verwijderen
Alle gesprekken scannen en de maximale gesprekslengte toepassen
- Apparaten
+ Gekoppelde apparaten
Licht
Donker
Uiterlijk
Thema
Standaard
Taal
- Signal berichten en oproepen
- Gratis privéberichten en bellen met Signal gebruikers
- Debug log indienen
- \'Bellen via WiFi\' compatibiliteitsmodus
- Inschakelen als je toestel SMS/MMS over WiFi gebruikt (alleen inschakelen als \'WiFi Bellen\' is ingeschakeld op je toestel)
+ Signal-berichten en -oproepen
+ Gratis privéberichten en bellen met Signal-gebruikers
+ Debuglog indienen
+ \'Bellen via WiFi\'-compatibiliteitsmodus
+ Schakel dit in als je apparaat SMS/MMS over WiFi gebruikt (alleen inschakelen als \'Bellen via WiFi\' is ingeschakeld op je apparaat)
Geblokkeerde contacten
- Toon in notificaties
+ De veiligheidsnummers zijn in orde
+ Vereis dat veranderde veiligheidsnummers eerst goedgekeurd moeten worden
+ Toon in meldingen
Wanneer mobiele gegevensoverdracht gebruikt wordt
Wanneer Wi-Fi gebruikt wordt
Bij roaming
Media automatisch downloaden
Bericht inkorten
- Gebruik systeem emoji
- Signal\'s ingebouwde emoji ondersteuning uitschakelen
+ Gebruik systeem-emoji
+ De ingebouwde emoji-ondersteuning van Signal uitschakelen
Alles selecteren
Alles deselecteren
- SIGNAL GEBRUIKERS
+ SIGNAL-GEBRUIKERS
ALLE CONTACTEN
Nieuw bericht naar...
@@ -871,17 +953,21 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Contactenlijst verversen
- Bel
+ Bellen
- Signal oproep
+ Signal-oproep
Berichtdetails
Tekst kopiëren
Bericht verwijderen
Bericht doorsturen
- Bericht opnieuw versturen
+ Bericht opnieuw verzenden
Bijlage opslaan
+
+ Verdwijnende berichten
+
+ Zichzelf vernietigende berichten
Uitnodigen
@@ -900,13 +986,11 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Nieuw gesprek
- Beveiliging
- Identiteit verifiëren
- Beveiligde sessie resetten
+ Beveiligde sessie opnieuw instellen
Niet meer dempen
- Demp notificaties
+ Demp meldingen
Bijlage toevoegen
Groep bijwerken
@@ -915,7 +999,7 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Alle afbeeldingen
Gespreksinstellingen
- Popup vergroten
+ Pop-up vergroten
Toevoegen aan contacten
@@ -925,32 +1009,37 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Uitzenden
Vergelijk
+ Toon je QR-code
+ Scan de QR-code van het contact
Nieuw bericht
Nieuwe groep
Instellingen
Vergrendelen
- Alles als gelezen markeren
+ Alles markeren als gelezen
Vrienden uitnodigen
Hulp
+
+ Kopiëren naar klembord
+ Vergelijken met klembord
Je versie van Signal is verouderd
- - Je versie van Signal zal binnen één dag verlopen. Raak aan om te updaten naar de meest recente versie.
- - Je versie van Signal zal over %d dagen verlopen. Raak aan om te updaten naar de meest recente versie.
+ - Je versie van Signal zal binnen één dag verlopen. Tik om bij te werken naar de meest recente versie.
+ - Je versie van Signal zal over %d dagen verlopen. Tik om bij te werken naar de meest recente versie.
- Je versie van Signal zal vandaag verlopen. Raak aan om te updaten naar de meest recente versie.
+ Je versie van Signal zal vandaag verlopen. Tik om bij te werken naar de meest recente versie.
Je versie van Signal is verlopen!
- Berichten zullen niet langer verzonden worden. Raak aan om te updaten naar de meest recente versie.
- UPDATEN
+ Berichten zullen niet meer verzonden worden. Tik om bij te werken naar de meest recente versie.
+ BIJWERKEN
Gebruiken als standaard SMS-app
- Aanraken om Signal je standaard SMS-applicatie te maken.
- Instellen
+ Tik om van Signal je standaard-SMS-app te maken.
+ INSTELLEN
SMS uit systeem importeren
- Aanraken om de SMS berichten uit je telefoon te kopiëren naar de versleutelde database van Signal.
+ Tik om de SMS-berichten uit je telefoon te kopiëren naar de versleutelde database van Signal.
IMPORTEREN
- Signal berichten en oproepen inschakelen
- Update je communicatie-ervaring.
+ Signal-berichten en -oproepen inschakelen
+ Verbeter je communicatie-ervaring.
INSCHAKELEN
Uitnodigen voor Signal
Neem je gesprek met %1$s naar een hoger niveau.
@@ -962,10 +1051,13 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Jij
Weergeven van deze afbeelding is mislukt
- Niet ondersteund mediatype
+ Niet-ondersteund mediatype
Opslaan
+ Doorsturen
+ Alle afbeeldingen
+ Alles opslaan
Afbeeldingsminiatuur
@@ -979,6 +1071,6 @@ Signal heeft te lang moeten wachten op het binnenkomen van de verificatie-SMS.
Oude berichten verwijderen...
Oude berichten succesvol verwijderd
- Transportkanaal icoon
+ Transportkanaalpictogram
diff --git a/res/values-no/strings.xml b/res/values-no/strings.xml
index 9e345fb0fb5..cbac0f98848 100644
--- a/res/values-no/strings.xml
+++ b/res/values-no/strings.xml
@@ -5,6 +5,8 @@
Nei
Slett
Vennligst vent...
+
+ Ny melding
NÃ¥: %s
Du har ikke definert et passord ennå!
@@ -63,9 +65,6 @@ Om du vil benytte Signal for meldinger og anrop igjen i fremtiden må du registr
Innkommende anrop
- Det identifiserende nøkkelmaterialet for %1$s har endret seg. Dette kan enten bety at noen forsøker å avlytte kommunikasjonen din, eller at %2$s har installert Signal på nytt og dermed fått en ny identitetsnøkkel.
- Du bør verifisere
-denne kontakten.
Godta
Melding %s
@@ -124,13 +123,14 @@ denne kontakten.
MMS ikke støttet
Denne meldingen kan ikke sendes fordi operatøren din ikke støtter MMS.
Velg kontaktperson
- Opphev blokkering?
- Er du sikker på at du ønsker å oppheve blokkeringen av denne kontakten?
+ Opphev blokkering av denne kontakten?
+ Du kan nå motta meldinger og samtaler fra denne kontakten igjen.
Opphev blokkering
Vedlegget overstiger størrelsesbegrensningen for den typen melding du sender.
Kamera utilgjengelig
Kunne ikke ta opp lyd!
Feil ved sending av talemelding...
+ Det er ingen app tilgjengelig på enheten din for å håndtere denne linken.
Meldingsdetaljer
Transport: %1$s\nSendt/Mottatt: %2$s
@@ -150,13 +150,13 @@ denne kontakten.
- Feil ved lagring av vedlegg!
- - Feil ved lagring av vedlegg!
+ - Feil under lagring av vedlegg!
- Suksess!
+ Fil lagret ok.
Kunne ikke skrive til lagringsenheten!
- Lagrer vedlegg
- - Lagrer %1$d vedlegg.
+ - Lagrer %1$d vedlegg
- Lagrer vedlegg...
@@ -171,6 +171,7 @@ denne kontakten.
Sletter meldinger...
Søk...
+ Det er ingen nettleser installert på enheten din.
- Slett valgt samtale?
@@ -200,7 +201,6 @@ denne kontakten.
Benytter standard: %s
Ingen
- NÃ¥
%d min
Frakoble \'%s\'?
@@ -232,10 +232,12 @@ denne kontakten.
Eksporterer klartekst til enheten sitt minne...
Feil, ute av stand til å skrive til enheten sitt minne.
Feil oppstod under skriving til enheten sitt minne.
- Suksess!
+ Eksport vellykket.
Permanent Signal kommunikasjonsfeil!
Signal kunne ikke registrere seg med Google Play Tjenester. Signal meldinger og anrop er slått av, vennligst prøv å registrere på nytt i Innstillinger > Avansert.
+
+
Ny gruppe
Oppdater gruppe
@@ -282,15 +284,15 @@ Innlasting av en kryptert backup vil erstatte dine eksisterende nøkler, prefera
Trykk og hold for å ta opp en talemelding, slipp for å sende.
Del
- Send SMS
+ Velg kontakter
Avbryt
Sender...
Hjerte
Invitasjoner sendt!
Inviter til Signal
-
- - SEND TIL 1 VENN
- - SEND TIL %d VENNER
+
+ - SEND SMS TIL 1 VENN
+ - SEND SMS TIL %d VENNER
- Send 1 invitasjon på SMS?
@@ -305,7 +307,6 @@ Innlasting av en kryptert backup vil erstatte dine eksisterende nøkler, prefera
Signal trenger Barcode Scanner for QR koder.
Sending feilet
- Ny identitet
Feil ved lagring av MMS!
Feil ved tilkobling til MMS tjeneste...
@@ -353,6 +354,10 @@ Innlasting av en kryptert backup vil erstatte dine eksisterende nøkler, prefera
Beklager, dette er ikke en gyldig QR kode for kobling av enheter.
Koble en Signal enhet?
Det ser ut som om du prøver å koble en Signal enhet ved hjelp av en 3. parts skanner. For å beskytte deg ber vi at du skanner koden igjen fra Signal.
+
+ Tidsbegrensede meldinger
+ Meldingene dine vil ikke utløpe.
+ Meldinger som sendes og mottas i denne samtalen vil utløpe og slettes %s etter de har blitt lest.
Tast inn passord
Signal ikon
@@ -366,12 +371,13 @@ Innlasting av en kryptert backup vil erstatte dine eksisterende nøkler, prefera
Vurder nå!
Nei takk
Senere
+ Ooops, Play Store ser ikke ut til å være installert på enheten din.
Blokker denne kontakten?
- Du vil ikke lenger motta meldinger eller anrop fra denne brukeren.
+ Du vil ikke lenger motta meldinger eller anrop fra denne brukeren.
Blokker
Opphev blokkering av denne kontakten?
- Er du sikker på at du ønsker å oppheve blokkeringen av denne kontakten?
+ Du kan nå motta meldinger og samtaler fra denne kontakten igjen.
Opphev blokkering
Aktivert
Deaktivert
@@ -449,9 +455,8 @@ Dobbelsjekk at dette er nummeret ditt! Vi er i ferd med å verifisere det med en
Mottok korrupt nøkkelutvekslingsmelding!
Mottok nøkkelutvekslingsmelding for ugyldig protokollversjon.
- Mottatt melding med ukjent ID nøkkel. Klikk for å prosessere og vise.
- Mottok oppdatert men ukjent identitetsinformasjon. Trykk for å validere identiteten.
- Sikker sesjon nullstilt.
+ Du nullstilte den sikre sesjonen.
+ %s nullstilte den sikre sesjonen.
Duplisert melding.
Forlot gruppen...
@@ -462,26 +467,9 @@ Mottok nøkkelutvekslingsmelding for ugyldig protokollversjon.
Ubesvart anrop
Media melding
%s er på Signal, si hei!
+ Tiden før meldingene utløper er satt til %s
- Du har ingen ID-nøkkel.
- Mottakeren har ingen ID-nøkkel.
- Mottakeren har ingen ID-nøkkel!
- Scan kontaktens QR kode
- Vis din QR kode
- ADVARSEL. Den skannede nøkkelen er IKKE DEN SAMME! Vær vennlig å sjekke fingeravtrykkets tekst nøye.
- IKKE bekreftet!
- Nøkkelen deres er korrekt. Det er også nødvendig å bekrefte nøkkelen din med dem også.
- Bekreftet!
- Du har ingen ID-nøkkel!
-
- Du har ingen ID-nøkkel.
- Scan kontaktens QR kode
- Vis din QR kode
- ADVARSEL. Den skannede nøkkelen er IKKE DEN SAMME!
- IKKE bekreftet!
- Den skannede nøkkelen stemmer overens!
- Bekreftet!
- Ditt ID-fingeravtrykk
+ Det ser ut som du ikke har noen apper å dele til.
Initiere til tross for eksisterende forespørsel?
Send
@@ -510,7 +498,7 @@ Mottok nøkkelutvekslingsmelding for ugyldig protokollversjon.
Import pågår
Importerer tekstmeldinger
Import fullført
- Import av Signal systemdatabase fullført.
+ Systemdatabasen er ferdig importert.
Berør for å åpne.
Berør for å åpne, eller velg låsen for å lukke.
@@ -565,13 +553,13 @@ Mottok nøkkelutvekslingsmelding for ugyldig protokollversjon.
Send Signal melding
Send usikret SMS
Send usikret MMS
+ Fra %1$s
Send
Slett
Samtale med %1$s
Meldingssammensetning
Emoji tastatur av/på
Vedleggsikon
- Vedleggsskuff av/på
SKYV FOR Ã… AVBRYTE
@@ -588,6 +576,7 @@ Mottok nøkkelutvekslingsmelding for ugyldig protokollversjon.
Last ned
Kontaktbilde
Laster ned
+
Batch valg modus
%s valgte
@@ -603,11 +592,41 @@ Mottok nøkkelutvekslingsmelding for ugyldig protokollversjon.
Koble ny enhet
fortsett
+
+ Av
+
+ - 1 sekund
+ - %d sekunder
+
+ %ds
+
+ - 1 minutt
+ - %d minutter
+
+ %dm
+
+ - 1 time
+ - %d timer
+
+ %dt
+
+ - 1 dag
+ - %d dager
+
+ %dd
+
+ - 1 uke
+ - %d uker
+
+ %du
+
+
Kunne ikke lese loggen fra din enhet. Du kan fremdeles bruke ADB for å hente ut en debug logg.
Takk for hjelpen!
Sender
Poster logger til gist...
+ Ingen nettleser installert
Ønsker du å importere dine eksisterende tekstmeldinger til Signal sin krypterte database?
Den eksisterende systemdatabasen vil ikke på noen måte bli endret.
@@ -661,7 +680,6 @@ Mottok nøkkelutvekslingsmelding for ugyldig protokollversjon.
Blokker
Farge
Farge for denne kontakten
- Bekreft identitet
Signal anrop
Avslutt samtale
@@ -723,14 +741,15 @@ feilet.
Merk
Tast inn et navn eller nummer
- Legg til medlem
-
- Deres identitet (de leser):
- Din identitet (du leser):
+ Legg til medlemmer
+
+ Klikk for å skanne
+
Noen problemer krever din oppmerksomhet.
Sendt
Mottatt
+ Forsvinner
Via
Til:
Fra:
@@ -740,20 +759,17 @@ feilet.
Tast inn passord
Velg kontakter
Signal oppdaget
- Offentlig ID-nøkkel
Passordbytte
- Bekreft identitet
Send debug logg
Forhåndsvisning av media
Alle bilder
Alle bilder med %1$s
Meldingsdetaljer
- Administrer tilkoblede enheter
+ Tilknyttede enheter
Inviter venner
Arkiverte samtaler
Importere / eksportere
- Din ID-nøkkel
Benytt standard
Benytt egendefinert
Mute i 1 time
@@ -857,7 +873,7 @@ feilet.
Grense på samtalelengde
Trimme alle samtaler nå
Skann alle samtaletrådene og håndhev grensen på samtalelengde
- Enheter
+ Tilknyttede enheter
Lys
Mørk
Utseende
@@ -870,6 +886,8 @@ feilet.
\'WiFi anrop\' kompatibilititetsmodus
Aktiver dersom enheten din bruker WiFi for å sende SMS/MMS (brukes bare hvis \'WiFi anrop\' er aktivert på enheten din)
Blokkerte kontakter
+ Bekreftelse av sikkerhetsnummer
+ Krev godkjenning av nye sikkerhetsnummer når de endres
Vis i varslingslisten
Ved bruk av mobil data
Ved bruk av Wi-Fi
@@ -903,6 +921,10 @@ feilet.
Send melding om igjen
Lagre vedlegg
+
+ Tidsbegrensede meldinger
+
+ Meldinger som utløper
Inviter
@@ -921,8 +943,6 @@ feilet.
Ny samtale
- Sikkerhet
- Bekreft identitet
Nullstill sikker sesjon
Lyd av
@@ -947,7 +967,7 @@ feilet.
Sammenlign
Vis din QR kode
- Scan kontaktens QR kode
+ Les av kontaktens QR kode
Ny melding
Ny gruppe
@@ -956,6 +976,7 @@ feilet.
Marker alle som lest
Inviter venner
Hjelp
+
Din versjon av Signal er utdatert
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index fea83048704..22ddbef33ee 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -5,6 +5,8 @@
Nie
Usuń
Proszę czekać...
+
+ Nowa wiadomość
Obecnie: %s
Nie masz jeszcze ustawionego hasła!
@@ -51,7 +53,7 @@
(wideo)
(lokalizacja)
- Nie można znaleźć aplikacji, aby wybrać media.
+ Nie można znaleźć aplikacji, aby otworzyć tę zawartość.
Kamera
Zdjęcie
@@ -65,10 +67,8 @@
Przychodzące połączenie
- Podpis identyfikacyjny dla %1$s zmienił się. Może to oznaczać, że ktoś próbuje przechwycić Twoją komunikację, lub %2$s przeinstalował aplikację Signal i posiada teraz nowy klucz identyfikacyjny.
- Może chcesz zweryfikować
-ten kontakt.
-
+ Numer bezpieczeństwa z %1$s zmienił się. To może oznaczać, że ktoś próbuje przechwycić Twoją komunikację lub że po prostu %2$s przeinstalował Signal.
+ Możesz zweryfikować numer bezpieczeństwa z tym kontaktem.
Akceptuj
Wiadomość %s
@@ -78,7 +78,7 @@ ten kontakt.
Wygasa: %s
Nie dostarczono
Pokazać zabezpieczone media?
- To multimedium jest przechowywane w zaszyfrowanej bazie danych. Niestety, aby wyświetlić je z użyciem zewnętrznej aplikacji, dane muszą zostać tymczasowo odszyfrowane i zapisane w pamięci urządzenia. Czy jesteś pewien, że chcesz kontynuować?
+ Multimedia są przechowywane w zaszyfrowanej bazie danych. Niestety, aby wyświetlić je z użyciem zewnętrznej aplikacji, dane muszą zostać tymczasowo odszyfrowane i zapisane w pamięci urządzenia. Czy na pewno chcesz to zrobić?
Błąd, otrzymano nieprawidłową wiadomość wymiany kluczy.
Otrzymano wiadomość wymiany kluczy, dotknij aby kontynuować.
%1$s opuścił grupę.
@@ -87,7 +87,7 @@ ten kontakt.
Fallback do nieszyfrowanej wiadomości SMS?
Fallback do nieszyfrowanych wiadomości MMS?
Ta wiadomość nie będzie zaszyfrowana, ponieważ odbiorca nie jest już użytkownikiem Signal.\n\nWysłać wiadomość nieszyfrowaną?
- Nie można znaleźć aplikacji, aby otworzyć te media.
+ Nie można znaleźć aplikacji, aby otworzyć tę zawartość.
od %s
do %s
@@ -128,21 +128,22 @@ ten kontakt.
MMS nie sÄ… wspomagane
Wiadomość nie może zostać wysłana, ponieważ Twój operator nie obsługuje usługi MMS.
ProszÄ™ wybierz kontakt
- Odblokować?
- Czy jesteś pewny, że chcesz odblokować ten kontakt?
+ Odblokować ten kontakt?
+ Będziesz mógł znowu odbierać wiadomości i połączenia od tego kontaktu.
Odblokuj
Rozmiar tego załącznika przekracza limit wiadomości.
Kamera jest niedostępna
- Nie udało się nagrać dźwięk!
+ Nie udało się nagrać dźwięku!
Błąd wysyłania wiadomości głosowej...
+ Brak aplikacji do obsługi tego linku na Twoim urządzeniu.
Szczegóły wiadomości
Transport: %1$s\nWysłano/Otrzymano: %2$s
Nadawca: %1$s\nTransport: %2$s\nWysłano: %3$s\nOtrzymano: %4$s
- - Usunąć wygraną rozmowę?
- - Usunąć wygrane rozmowy?
- - Usunąć wygrane rozmowy?
+ - Usunąć wybraną wiadomość?
+ - Usunąć wybrane wiadomości?
+ - Usunąć wybrane wiadomości?
- To spowoduje permanentne usunięcie zaznaczonej wiadomości.
@@ -150,8 +151,29 @@ ten kontakt.
- To spowoduje permanentne usunięcie wszystkich %1$d zaznaczonych wiadomości.
Zapisać na dysk?
- Sukces!
+
+ - Zapisanie tego załącznika na dysku pozwoli na dostęp do nich innym aplikacjom na Twoim urządzeniu.\n\nKontynuuj?
+ - Zapisywanie %1$d załączników na dysku pozwoli na dostęp do nich innym aplikacjom na Twoim urządzeniu.\n\nKontynuuj?
+ - Zapisywanie wszystkich %1$d załączników na dysku pozwoli na dostęp do nich innym aplikacjom na Twoim urządzeniu.\n\nKontynuuj?
+
+
+ - Wystąpił błąd podczas zapisywania załącznika na dysku!
+ - Wystąpił błąd podczas zapisywania załączników na dysku!
+ - Wystąpił błąd podczas zapisywania załączników na dysku!
+
+ Plik pomyślnie został zapisany.
Nie udało zapisać się pliku!
+
+ - Zapisywanie załącznika
+ - Zapisywanie załączników
+ - Zapisywanie załączników
+
+
+ - Zapisywanie załącznika na dysku
+ - Zapisywanie %1$d załączników na dysku
+ - Zapisywanie %1$d załączników na dysku
+
+ Zbieranie załączników...
Oczekiwanie...
Dane (Signal)
MMS
@@ -160,11 +182,12 @@ ten kontakt.
Usuwanie wiadomości...
Szukaj...
+ Twoje urzÄ…dzenie nie ma zainstalowanej przeglÄ…darki.
- - Usunąć wygraną konwersacje?
- - Usunąć wygrane konwersacje?
- - Usunąć wygrane konwersacje?
+ - Usunąć wybraną konwersację?
+ - Usunąć wybrane konwersacje?
+ - Usunąć wybrane konwersacje?
- To spowoduje permanentne usunięcie wybranej konwersacji.
@@ -193,7 +216,7 @@ ten kontakt.
Używa domyślnych: %s
Brak
- Teraz
+ Teraz
%d minuta
Wyrejestrować \'%s\'?
@@ -225,10 +248,15 @@ ten kontakt.
Eksportowanie nieszyfrowanych wiadomości...
Błąd. Nie udało się zapisać na dysku!
Wystąpił błąd w czasie próby zapisu na dysku.
- Sukces!
+ Eksport zakończony pomyślnie.
Permanentny błąd komunikacji Signal!
Signal nie był w stanie zarejestrować się z Google Play Services. Wiadomości i połączenia Signal zostały wyłączone. Proszę spróbuj ponownie zarejestrować się poprzez pójście do Ustawienia > Zaawansowane.
+
+ Błąd podczas pobierania gifa w pełnej rozdzielczości.
+
+ Gify
+ Naklejki
Nowa grupa
Aktualizuj grupÄ™
@@ -277,16 +305,16 @@ Stracisz wszystkie informacje obecnie zawarte w aplikacji Signal z wyjÄ…tkiem ty
Dotknij i trzymaj palec, aby nagrać wiadomość głosową. Aby wysłać zdejmij palec z ekranu.
Podziel siÄ™
- Wyślij SMS
+ Wybierz kontakty
Anuluj
Wysyłanie...
Serce
Zaproszenie zostało wysłane!
Zaproś do używania Signal
-
- - WYÅšLIJ DO 1 ZNAJOMEGO
- - WYÅšLIJ DO %d ZNAJOMYCH
- - WYÅšLIJ DO %d ZNAJOMYCH
+
+ - WYÅšLIJ SMS DO 1 ZNAJOMEGO
+ - WYÅšLIJ SMS DO %d ZNAJOMYCH
+ - WYÅšLIJ SMS DO %d ZNAJOMYCH
- Wysłać 1 zaproszenie SMS?
@@ -302,7 +330,7 @@ Stracisz wszystkie informacje obecnie zawarte w aplikacji Signal z wyjÄ…tkiem ty
Aplikacja Signal potrzebuje skanera kodów QR.
Nie udało się wysłać
- Nowa tożsamość
+ Nowy numer bezpieczeństwa
Błąd przechowywania MMS!
Błąd połączenia z dostawcą usługi MMS...
@@ -327,6 +355,9 @@ Stracisz wszystkie informacje obecnie zawarte w aplikacji Signal z wyjÄ…tkiem ty
Zadzwoniono do %s
Nieodebrane połączenie od %s
%s używa Signal, przywitaj się!
+ Ustawiłeś zniknięcie wiadomości po: %1$s.
+ %1$s ustawił zniknięcie wiadomości po: %2$s.
+ Twój numer bezpieczeństwa z %s zmienił się.
Hasło niezgodne!
Nieprawidłowe stare hasło!
@@ -350,25 +381,30 @@ Stracisz wszystkie informacje obecnie zawarte w aplikacji Signal z wyjÄ…tkiem ty
Przepraszamy, ale to nie jest prawidłowy link QR.
Dodać nowe urządzenie Signal?
Wygląda na to, że próbujesz dodać urządzenie Signal używając nieznanego skanera 3ciej partii. Dla Twojego bezpieczeństwa, prosimy abyś zeskanował kod używając Signal.
+
+ Znikające wiadomości
+ Twoje wiadomości nie wygasają.
+ Wiadomości wysłane i odebrane w tej konwersacji znikną %s po odczytaniu.
Podaj hasło
Ikona Signal
Wprowadź hasło
Nieprawidłowe hasło!
- Wersja Google Play Services którą masz zainstalowaną nie funkcjonuje poprawnie. Proszę przeinstaluj tą aplikację ponownie i spróbuj ponownie.
+ Wersja Google Play Services którą masz zainstalowaną nie funkcjonuje poprawnie. Proszę przeinstaluj tę aplikację ponownie i spróbuj ponownie.
- Oceń tą aplikację
- Jeśli lubisz używać tą aplikację, to prosimy o danie jej oceny.
+ Oceń tę aplikację
+ Jeśli lubisz używać tę aplikację, to prosimy, pomóż nam i oceń ją.
Oceń teraz!
Nie dzięki
Później
+ Ups, prawdopodobnie aplikacja Google Play nie jest zainstalowana na Twoim urzÄ…dzeniu.
Zablokować ten kontakt?
- Już nie będziesz otrzymywać wiadomości i połączeń od tego użytkownika.
+ Nie będziesz mógł już odbierać wiadomości i połączeń od tego kontaktu.
Blokuj
Odblokować ten kontakt?
- Czy jesteś pewny, że chcesz odblokować ten kontakt?
+ Będziesz mógł znowu odbierać wiadomości i połączenia od tego kontaktu.
Odblokuj
Włączone
Wyłączone
@@ -446,9 +482,9 @@ Upewnij się, że to jest Twój numer! Zamierzamy zweryfikować go SMSem.
Otrzymano uszkodzony klucz!
Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.
- Otrzymano wiadomość z nieznanym kluczem tożsamości. Dotknij aby przetworzyć i wyświetlić.
- Otrzymał zaktualizowany, ale z nieznaną informacją tożsamości. Dotknij aby potwierdzić tożsamość.
- Reset bezpiecznej sesji.
+ Dostałeś wiadomość z nowym numerem bezpieczeństwa. Dotknij, aby przetworzyć i wyświetlić.
+ Zresetowałeś bezpieczną sesję.
+ %s zresetował bezpieczną sesję.
Duplikuj wiadomość.
Opuścił grupę...
@@ -459,22 +495,16 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.
Nieodebrane połączenie
Wiadomość multimedialna
%s używa Signal, przywitaj się!
+ Czas znikania wiadomości ustawiony na %s
+ Twój numer bezpieczeństwa z %s zmienił się.
- Nie posiadasz klucza tożsamości.
- Odbiorca nie posiada klucza tożsamości.
- Odbiorca nie posiada klucza tożsamości!
- UWAGA, zeskanowane klucze NIE ZGADZAJĄ się! Proszę sprawdź klucz ostrożnie!
- NIE zweryfikowany!
- Ich klucz jest poprawny. Niezbędna będzie także weryfikacja Twojego klucza z odbiorcami.
- Zweryfikowano!
- Nie posiadasz klucza tożsamości!
-
- Nie posiadasz klucza tożsamości.
- UWAGA, zeskanowane klucze NIE ZGADZAJĄ SIĘ!
- Niezweryfikowany!
- Zeskanowane klucze zgadzajÄ… siÄ™!
- Zweryfikowano!
- Twój klucz tożsamości
+ Twój kontakt używa starej wersji Signal. Poproś go o aktualizację przed weryfikacją twojego bezpiecznego numeru.
+ Twój kontakt używa nowszej wersji Signal z niekompatybilnym formatem kodu QR. Zaktualizuj, by porównać.
+ Zeskanowany kod QR nie jest poprawnie sformatowanym kodem weryfikującym numer bezpieczeństwa. Proszę spróbować ponownie zeskanować .
+ Udostępnij number bezpieczeństwa przez...
+ Nasz numer bezpieczeństwa Signal:
+ Wygląda na to, że nie masz żadnych aplikacji z którymi możesz się podzielić.
+ Brak numerów bezpieczeństwa do porównania w schowku.
Rozpocząć pomimo istniejącego żądania?
Wyślij
@@ -502,6 +532,8 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.
Trwa importowanie
Importowanie wiadomości tekstowych
+ Importowanie zakończone
+ Import systemowej bazy danych został zakończony.
Dotknij, aby otworzyć.
Dotknij, aby otworzyć lub dotknij zamek, aby zamknąć.
@@ -528,11 +560,20 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.
Nowa wiadomość
Obraz
+ Obraz
Audio
+ Dźwięk
Wideo
+ Wideo
Kontakt
+ Kontakt
Kamera
+ Kamera
Lokalizacja
+ Lokalizacja
+ GIF
+ Gif
+ Ukryj ekran załączników
Stare hasło
Nowe hasło
@@ -556,13 +597,16 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.
Wyślij wiadomość Signal
Wyślij nieszyfrowany SMS
Wyślij nieszyfrowany MMS
+ Od %1$s
Wyślij
Usuń
Rozmowa z %1$s
Kompozycja wiadomości
Przełącz do emoji klawiatury
Minaturka załącznika
- Bezpośrednie przechwytywanie
+ Bezpośrednie przechwytywanie
+ Nagraj i wyślij załącznik dźwiękowy
+ Włącz obsługę SMS w Signal
PRZECIĄGNIJ, ABY ANULOWAĆ
@@ -579,6 +623,10 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.
Pobierz
Zdjęcie kontaktu
Pobieranie
+
+ Odtwórz
+ Zatrzymaj
+ Pobierz
Tryb wyboru grupy
%s wybranych
@@ -594,11 +642,48 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.
Dodaj nowe urzÄ…dzenie
kontynuuj
+
+ Wyłączone
+
+ - 1 sekunda
+ - %d sekund
+ - %d sekund
+
+ %ds
+
+ - 1 minuta
+ - %d minut
+ - %d minut
+
+ %dm
+
+ - 1 godzina
+ - %d godzin
+ - %d godzin
+
+ %dg
+
+ - 1 dzień
+ - %d dni
+ - %d dni
+
+ %dd
+
+ - 1 tygodzień
+ - %d tygodni
+ - %d tygodni
+
+ %dt
+
+ Szukaj gifów i naklejek
+
+ Nic nie znaleziono
Nie udało się otworzyć dziennika na tym urządzeniu. Mimo tego, nadal możesz używać ADB aby wyświetlić dziennik debugowania.
Dziękujemy za Twoją pomoc!
Wysyłanie
Wysyłanie logów do gist...
+ Brak zainstalowanej przeglÄ…darki
Czy chcesz zaimportować swoje wiadomości do zaszyfrowanej bazy danych Signal?
Domyślna baza danych nie zostanie zmodyfikowana ani zastąpiona w żaden sposób.
@@ -653,7 +738,7 @@ Otrzymano wiadomość wymiany klucz dla niepoprawnej wersji protokołu.
Blokuj
Kolor
Kolor tego kontaktu
- Weryfikuj tożsamość
+ Zweryfikuj numer bezpieczeństwa
Połączenie Signal
Zakończ
@@ -711,14 +796,17 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.
Sprawdź
Wprowadź nazwę lub numer kontaktu
- Dodaj uczestnika
-
- Ich identyfikacja (oni widzÄ…):
- Twoja identyfikacja (Ty widzisz):
+ Dodaj uczestników
+
+ Dowiedz się więcej o weryfikacji numeru bezpieczeństwa]]>
+ Dotknij aby zeskanować
+
+ Podziel się numerem bezpieczeństwa
Niektóre kwestie wymagają Twojej uwagi.
Wysłano
Otrzymano
+ Wygasa
Przez
Do:
Od:
@@ -728,20 +816,18 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.
Podaj hasło
Wybierz kontakty
Wykryto Signal
- Publiczny klucz tożsamości
Zmień hasło
- Zweryfikuj tożsamość
+ Zweryfikuj numer bezpieczeństwa
Wyślij raport debugowania.
Podgląd plików multimedialnych
Pokaż wszystkie zdjęcia
Wszystkie zdjęcia z %1$s
Szczegóły wiadomości
- ZarzÄ…dzaj zarejestrowanymi urzÄ…dzeniami
+ Połączone urządzenia
ZaproÅ› znajomych
Archiwum
Import / eksport
- Twój klucz tożsamości
Użyj domyślnych
Użyj własnych
Wycisz na 1 godzinÄ™
@@ -846,7 +932,7 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.
Limit długości konwersacji
Przytnij wszystkie konwersacje teraz
Przeskanuj wszystkie konwersacje i przytnij to określonej długości
- UrzÄ…dzenia
+ Połączone urządzenia
Jasny
Ciemny
WyglÄ…d
@@ -859,6 +945,8 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.
Tryb zgodności \'WiFi Calling\'
Włącz jeśli Twoje urządzenie używa dostarczania SMS/MMS przez WiFi (włącz tylko wtedy gdy \'Połączenia WiFi\' jest włączone na Twoim urządzeniu)
Zablokowane kontakty
+ Potwierdzenie bezpiecznych numerów
+ Wymagaj zatwierdzania nowych numerów bezpieczeństwa w razie ich zmiany.
Pokaż w powiadomieniach
Podczas używania Danych Mobilnych
Podczas używania Wi-Fi
@@ -892,6 +980,10 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.
Wyślij ponownie wiadomość
Zapisz załącznik
+
+ Wygasające wiadomości
+
+ Wiadomości wygasają
ZaproÅ›
@@ -910,8 +1002,6 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.
Nowa konwersacja
- Bezpieczeństwo
- Zweryfikuj tożsamość
Reset bezpiecznej sesji
Wyłącz wyciszenie
@@ -935,6 +1025,8 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.
Nadawanie
Porównaj
+ Wyświetl swój kod QR
+ Skanuj kod QR kontaktu
Nowa wiadomość
Nowa grupa
@@ -943,6 +1035,9 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.
Oznacz wszystkie jako przeczytane
ZaproÅ› znajomych
Pomoc
+
+ Skopiuj do schowka
+ Porównaj ze schowkiem
Twoja wersja Signal jest nieaktualna.
@@ -958,7 +1053,7 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.
Dotknij, aby Signal był Twoją domyślną aplikacją SMS.
USTAW
Importuj bazÄ™ SMS
- Dotknij, aby skopiować wiadomości SMS z twojego telefonu do zaszyfrowanej bazy danych Signal.
+ Dotknij, aby skopiować wiadomości SMS z twojego telefonu do szyfrowanej bazy danych Signal.
IMPORT
Włącz wiadomości i połączenia Signal
Polepsz swoje komunikacje.
@@ -976,7 +1071,10 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.
Nieobsługiwany typ media
Zapisz
+ Przekaż dalej
+ Wszystkie obrazy
+ Zapisz wszystko
Podgląd zdjęcia
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 321a0fa446b..04577342a8c 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -5,6 +5,8 @@
Não
Excluir
Aguarde...
+
+ Nova mensagem
Atualmente: %s
Você ainda não definiu uma frase-chave!
@@ -60,16 +62,10 @@
Contatos bloqueados
- Recebimento de chamada
+ Recebendo chamada
- A
- chave de identidade de %1$s mudou. Isto pode significar que alguém está tentando
- interceptar sua comunicação, ou que %2$s simplesmente reinstalou o Signal e agora tem uma nova
- chave de identidade.
-
- Talvez você queira verificar
- este contato.
-
+ Seu número de segurança com %1$s mudou. Isso pode significar que alguém está tentando interceptar a sua comunicação ou que %2$s simplesmente reinstalou o Signal.
+ Talvez você queira verificar seu número de segurança com esse contato.
Aceitar
Mensagem %s
@@ -81,7 +77,7 @@
Ver arquivo seguro?
Este arquivo foi armazenado em uma base de dados criptografada. Infelizmente, para visualizá-lo com um aplicativo externo é preciso que os dados sejam temporariamente descriptografados e escritos no armazenamento. Tem certeza que deseja fazer isso?
Erro, foi recebida uma mensagem desatualizada de troca de chaves.
- Foi recebida uma mensagem de troca de chaves, clique para processá-la.
+ Mensagem para troca de chaves recebida, clique para processá-la.
%1$s saiu do grupo.
Clique para ver detalhes
Clique para usar contingência insegura
@@ -100,7 +96,7 @@
Adicionar anexo
Selecionar informações de contato
Escrever mensagem
- Lamento, ocorreu um erro no envio do seu anexo
+ Desculpe, ocorreu um erro ao anexar o documento.
O gif selecionado é muito grande!
Desculpe, o vÃdeo selecionado excede as restrições de tamanho da mensagem (%1$skB).
Desculpe, o áudio selecionado excede as restrições de tamanho da mensagem (%1$skB).
@@ -116,7 +112,7 @@
Rascunho salvo
Destinatário inválido!
Sem suporte para chamadas
- Este dispositivo parece não suportar ações de chamada.
+ Este dispositivo parece não possuir suporte para chamadas.
Sair do grupo?
Tem certeza que deseja sair deste grupo?
SMS inseguro
@@ -125,16 +121,17 @@
Vamos mudar para o Signal %1$s
Vamos usar isto para conversar: %1$s
Erro ao sair do grupo...
- MMS não suportado
- Esta mensagem não pode ser enviada pois sua operadora não tem suporte a MMS.
+ Sem suporte para MMS
+ Esta mensagem não pode ser enviada pois sua operadora não tem suporte para MMS.
Favor escolher um contato
- Desbloquear?
- Tem certeza que deseja desbloquear este contato?
+ Desbloquear este contato?
+ Você poderá novamente receber mensagens e chamadas deste contato.
Desbloquear
O anexo excede os limites de tamanho para o tipo de mensagem sendo enviada.
Câmera indisponÃvel
Não foi possÃvel gravar o áudio!
Erro ao enviar mensagem de voz...
+ Não há nenhum aplicativo disponÃvel no seu dispositivo para abrir este link.
Detalhes da mensagem
Transporte: %1$s\nEnviadas/Recebidas: %2$s
@@ -156,7 +153,7 @@
- Erro ao gravar anexo no armazenamento!
- Erro ao gravar anexos no armazenamento!
- Sucesso!
+ Arquivo gravado com sucesso.
Não foi possÃvel escrever no cartão SD!
- Gravando anexo
@@ -175,6 +172,7 @@
Excluindo mensagens...
Procurar
+ Não há nenhum navegador instalado no seu dispositivo.
- Excluir conversa selecionada?
@@ -184,7 +182,7 @@
- Isto irá excluir permanentemente a conversa selecionada.
- Isto irá excluir permanentemente todas as %1$d conversas selecionadas.
- Deletando
+ Excluindo
Excluindo conversas selecionadas...
- Conversa arquivada
@@ -204,7 +202,7 @@
Usando padrão: %s
Nenhum
- Agora
+ Agora mesmo
%d min
Desvincular \'%s\'?
@@ -222,9 +220,9 @@
Compartilhar com
- Bem vindo ao Signal.
+ Boas-vindas ao Signal.
TextSecure e RedPhone agora são um mensageiro privado, para todas as situações: Signal.
- Bem vindo ao Signal!
+ Boas-vindas ao Signal!
TextSecure agora é Signal.
TextSecure e RedPhone agora são um aplicativo: Signal. Clique para explorar.
@@ -236,16 +234,21 @@
Exportando o texto para a memória do aparelho...
Erro, não foi possÃvel armazenar na memória do aparelho.
Erro ao gravar na memória do aparelho.
- Sucesso!
+ Exportação realizada com sucesso.
Falha permanente de comunicação do Signal!
- O Signal não conseguiu cadastrar-se com o Google Play Services. Mensagens e chamadas Signal foram desabilitadas; tente recadastrar em Configurações > Avançado.
+ O Signal não pôde cadastrar-se no Google Play Services. Mensagens e chamadas Signal foram desabilitadas; tente recadastrar em Configurações > Avançado.
+
+ Erro ao buscar GIF com resolução total...
+
+ GIFs
+ Stickers
Novo grupo
Atualizar grupo
Nome do grupo
Novo grupo MMS
- Você selecionou um contato que não tem suporte a grupos Signal, então este grupo será de MMS.
+ Você selecionou um contato que não tem suporte para grupos Signal. Então, este grupo será de MMS.
Você não está cadastrado para usar mensagens e chamadas Signal, então grupos Signal estão desabilitados. Tente recadastrar em Configurações > Avançado.
Um erro inesperado ocorreu e fez a criação do grupo falhar.
Você precisa de pelo menos uma pessoa no seu grupo!
@@ -295,15 +298,15 @@
Aperte e segure para gravar uma mensagem de voz e solte para enviá-la
Compartilhar
- Enviar SMS
+ Escolher contatos
Cancelar
Enviando...
Coração
Convites enviados!
Convidar para o Signal
-
- - ENVIAR PARA 1 AMIGO
- - ENVIAR PARA %d AMIGOS
+
+ - ENVIAR SMS PARA 1 AMIGA/O
+ - ENVIAR SMS PARA %d AMIGOS
- Enviar 1 convite SMS?
@@ -311,14 +314,14 @@
Vamos mudar para o Signal: %1$s
Parece que você não tem aplicativos para onde compartilhar.
- Amigos não deixam amigos conversar sem criptografia.
+ Amigos não deixam amigos conversarem sem criptografia.
Não foi encontrada nenhuma chave lida!
Instalar scanner de código de barras?
O Signal precisa do Scanner de Código de Barras para códigos QR.
Falha no envio
- Nova identidade
+ Novo número de segurança
Erro ao armazenar MMS!
Erro na conexão com provedor de MMS...
@@ -343,15 +346,18 @@
Chamou %s
Chamada perdida de %s
%s está no Signal, diga oi!
+ Você definiu a expiração da mensagem temporária para %1$s.
+ %1$s definiu a expiração da mensagem temporária para %2$s.
+ Seu número de segurança com %s mudou.
Frases-chave não coincidem!
Frase-chave anterior incorreta!
Insira uma nova frase-chave!
- Conectar este dispositivo?
+ Vincular este dispositivo?
CANCELAR
CONTINUAR
- Conectar este dispositivo?
+ Vincular este dispositivo?
Ele será capaz de
• Ler todas as suas mensagens
@@ -365,8 +371,12 @@
Código QR inválido.
Desculpe, você já possui muitos dispositivos vinculados. Tente remover alguns...
Desculpe, este não é um código QR de dispositivo válido.
- Conectar um dispositivo Signal?
- Parece que você está tentando conectar um dispositivo Signal usando um outro scanner. Para sua proteção, favor escanear novamente o código usando o Signal.
+ Vincular um dispositivo Signal?
+ Parece que você está tentando vincular um dispositivo Signal usando um outro scanner. Para sua proteção, favor escanear novamente o código usando o Signal.
+
+ Mensagens temporárias
+ Suas mensagens não irão expirar.
+ Mensagens enviadas e recebidas nesta conversa irão desaparecer %s após elas terem sido visualizadas.
Inserir frase-chave
Ãcone do Signal
@@ -380,12 +390,13 @@
Avaliar agora!
Não, obrigado
Mais tarde
+ Ops, o aplicativo Play Store parece não estar instalado no seu dispositivo.
Bloquear esta contato?
- Você não receberá mais mensagens ou chamadas deste usuário.
+ Você não receberá mais mensagens e chamadas deste contato.
Bloquear
Desbloquear este contato?
- Tem certeza que deseja desbloquear este contato?
+ Você poderá novamente receber mensagens e chamadas deste contato.
Desbloquear
Habilitado
Desabilitado
@@ -423,7 +434,7 @@
O número que você
especificou (%s) é inválido.
- Não suportado
+ IncompatÃvel
Desculpe,
este dispositivo não é suportado para mensagens de dados. Dispositivos rodando versões de Android anteriores
à 4.0 devem ter uma Conta Google registrada. Dispositivos rodando Android 4.0 ou superior não
@@ -473,9 +484,9 @@
Mensagem de troca de chaves recebida para uma versão de protocolo inválida.
- Foi recebida uma mensagem com uma chave de identidade desconhecida. Clique para processá-la e exibi-la.
- Foi recebida atualização mas com informação de identidade desconhecida. Clique para validar a identidade.
- Sessão segura reiniciada.
+ Mensagem com novo número de segurança recebida. Toque para processar e exibir.
+ Você reiniciou a sessão segura.
+ %s reiniciou a sessão segura.
Mensagem duplicada.
Saiu do grupo...
@@ -486,32 +497,22 @@
Ligação perdida
MMS
%s está no Signal, diga oi!
+ Expiração da mensagem temporária definida para %s
+ Seu número de segurança com %s mudou.
- Não tem uma chave de identidade.
- O destinatário não tem chave de identidade.
- O destinatário não tem chave de identidade!
- Escanear código QR do contato
- Mostrar seu código QR
- AVISO, a chave lida NÃO coincide. Por favor verifique cuidadosamente o texto da fingerprint.
- NÃO verificado!
- A chave do destinatário está correcta. É igualmente necessário verificar a sua chave perante ele.
- Verificado!
- Não tem uma chave de identidade!
-
- Você não tem uma chave de identidade.
- Escanear código QR do contato
- Mostrar seu código QR
- AVISO, a chave lida NÃO coincide.
- NÃO verificado!
- A chave lida coincide!
- Verificado!
- Sua fingerprint
+ Seu contato está usando uma versão antiga do Signal. Peça a ele para atualizá-la antes de verificar o seu número de segurança.
+ Seu contato está usando uma versão mais nova do Signal com um formato de código QR incompatÃvel. Atualize para poder comparar.
+ O código QR escaneado não é um código de verificação de número de segurança formatado corretamente. Por favor, tente escanear de novo.
+ Compartilhar número de segurança por...
+ Nosso número de segurança Signal:
+ Parece que você não tem aplicativos para onde compartilhar.
+ Nenhum número de segurança a ser comaprado foi encontrado na área de transferência.
Iniciar apesar de pedido existente?
Enviar
Mensagem cifrada corrompida...
- A decifrar, por favor aguarde...
+ Descriptografando, por favor aguarde...
Mensagem cifrada para sessão inexistente...
Erro ao descriptografar mensagem.
@@ -534,7 +535,7 @@
Importação em andamento
Importando mensagens de texto
Importação finalizada
- Importação da base de dados do sistema Signal finalizada.
+ Importação da base de dados do sistema finalizada.
Toque para abrir.
Toque para abrir ou clique no cadeado para fechar.
@@ -561,11 +562,20 @@
Nova mensagem
Imagem
+ Imagem
Ãudio
+ Ãudio
VÃdeo
+ VÃdeo
Contato
+ Contato
Câmera
+ Câmera
Local
+ Local
+ GIF
+ Gif
+ Alternar gaveta de anexos
Frase-chave antiga
Nova frase-chave
@@ -589,13 +599,16 @@
Enviar mensagem via Signal
Enviar SMS inseguro
Enviar MMS inseguro
+ De %1$s
Enviar
Remover
Conversa com %1$s
Composição de mensagem
Alternar teclado emoji
Miniatura do anexo
- Trocar guardador de anexos
+ Alternar gaveta rápida de anexos de câmera
+ Gravar e enviar áudio em anexo
+ Habilitar Signal para SMS
DESLIZE PARA CANCELAR
@@ -612,6 +625,10 @@
Transferir
Foto do contato
A transferir
+
+ Tocar
+ Pausar
+ Baixar
Modo de seleção em grupo
%s selecionadas
@@ -619,19 +636,51 @@
Carregando paÃses...
Procurar
- Escaneie o código QR mostrado no aparelho para conectar
+ Escaneie o código QR mostrado no aparelho para vincular
- Conectar dispositivo
+ Vincular dispositivo
Nenhum dispositivo vinculado...
- Conectar novo dispositivo
+ Vincular novo dispositivo
continuar
+
+ Desligado
+
+ - 1 segundo
+ - %d segundos
+
+ %ds
+
+ - 1 minuto
+ - %d minutos
+
+ %dmin
+
+ - 1 hora
+ - %d horas
+
+ %dh
+
+ - 1 dia
+ - %d dias
+
+ %dd
+
+ - 1 semana
+ - %d semanas
+
+ %dsem
+
+ Procurar GIFs e stickers
+
+ Nada encontrado
Não foi possÃvel ler o log no seu dispositivo. Você pode usar o ADB para obter um log de depuração.
Obrigado por sua ajuda!
Enviando
Postando logs no gist...
+ Nenhum navegador instalado
Gostaria de importar suas mensagens para a base de dados criptografada do Signal?
A base de dados padrão do sistema não será alterada.
@@ -685,7 +734,7 @@
Bloquear
Cor
Cor para este contato
- Verificar identidade
+ Verificar número de segurança
Chamada do Signal
encerrar ligação
@@ -702,7 +751,7 @@
NÚMERO TELEFÔNICO
Cadastrar
- O registro irá transmitir algumas informações de contato para o servidor. Elas não serão gravadas.
+ O registro irá transmitir algumas informações de contato para o servidor. Elas não serão armazenadas.
Fornecido por twilio
Alguns problemas possÃveis
@@ -723,8 +772,7 @@ O Signal não funcionará com números do Google Voice.
Verificação por voz
-O Signal também pode ligar para você para verificar o seu número. Aperte \'Me ligue\' e insira a seguir o código de seis dÃgitos que você ouvir.
-
+O Signal também pode ligar para você para verificar o seu número. Clique em \'Me ligue\' e insira a seguir o código de seis dÃgitos que você ouvir.
Verificar
Me ligar
Editar número
@@ -760,14 +808,17 @@ falhou.
Checar
Digite um nome ou um número
- Adicionar membro
-
- A identidade do destinatário (ele lê):
- A sua identidade (você lê):
+ Adicionar membros
+
+ Saiba mais sobre a verificação de números de segurança]]>
+ Clique para escanear
+
+ Compartilhar número de segurança
Alguns assuntos precisam de sua atenção.
Enviada
Recebida
+ Expira
Via
Para:
De:
@@ -777,20 +828,18 @@ falhou.
Inserir frase-chave
Selecionar contatos
Signal detectado
- Chave de identidade pública
Mudar frase-chave
- Verificar identidade
+ Verificar número de segurança
Enviar log de depuração
Pré-visualização de mÃdia
Todas as imagens
Todas as imagens com %1$s
Detalhes da mensagem
- Gerenciar dispositivos vinculados
+ Dispositivos vinculados
Convidar amigos
Conversas arquivadas
Importar / exportar
- Sua chave de identidade
Usar padrão
Usar personalização
Silenciar por 1 hora
@@ -892,9 +941,9 @@ falhou.
Excluir mensagens antigas
Chats e mÃdia
Tamanho máximo de conversa
- Limpar todas as conversas agora
+ Limitar o tamanho de todas as conversas agora
Escanear todas as conversas e aplicar os limites de comprimento de conversa
- Dispositivos
+ Dispositivos vinculados
Claro
Escuro
Aparência
@@ -907,6 +956,8 @@ falhou.
Modo de compatibilidade \'WiFi Calling\'
Habilite se o seu dispositivo usa entrega de SMS/MMS via WiFi (somente habilite quando \'WiFi Calling\' estiver habilitado no seu dispositivo)
Contatos bloqueados
+ Aprovação de números de segurança
+ Exigir aprovação de novos números de segurança quando houver mudança
Exibir em notificações
Quando usar dados móveis
Quando usar Wi-Fi
@@ -940,6 +991,10 @@ falhou.
Reenviar mensagem
Guardar anexo
+
+ Mensagens temporárias
+
+ Mensagens expirando
Convidar
@@ -958,9 +1013,7 @@ falhou.
Nova conversa
- Segurança
- Verificar identidade
- Restaurar sessão segura
+ Reiniciar sessão segura
Reativar som
@@ -993,6 +1046,9 @@ falhou.
Marcar todas como lidas
Convidar amigos
Ajuda
+
+ Copiar para a área de transferência
+ Comparar com a área de transferência
Sua versão do Signal está desatualizada
@@ -1026,6 +1082,8 @@ falhou.
Tipo de mÃdia não suportado
Salvar
+ Avançar
+ Todas as imagens
Gravar tudo
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index b2b6fc1d92c..d6616f4898f 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -5,6 +5,8 @@
Não
Apagar
Por favor aguarde...
+
+ Mensagem nova
Actualmente: %s
Ainda não definiu uma frase-chave!
@@ -19,13 +21,14 @@
Apagar
Desabilitar frase-chave?
+ Isto irá desbloquear permanentemente Signal e notificações de mensagens.
Desactivar
A eliminar o registo...
A eliminar o registo do serviço de mensagens e chamadas Signal...
Desabilitar mensagens e chamadas Signal?
Desactivar as mensagens Signal, eliminando o seu registo do servidor.
-Vai ser necessário re-registar o seu número de telefone se pretender utilizar esta funcionalidade novamente.
- Erro ao conectar-se com o servidor!
+Vai ser necessário registar novamente o seu número de telefone se pretender utilizar o Signal no futuro.
+ Erro a establecer a ligação com o servidor!
SMS Activos
Definir como aplicação SMS por omissão
SMS Inactivos
@@ -56,18 +59,15 @@ Vai ser necessário re-registar o seu número de telefone se pretender utilizar
Ãudio
Informação de contacto
- Erro a reproduzir áudio!
+ Erro ao reproduzir áudio!
Contactos bloqueados
A receber chamada
- A
-assinatura deste intercâmbio de chaves é diferente da previamente recebida de %1$s.
-Isto pode significar que alguém está a tentar interceptar esta comunicação ou simplesmente
-que %2$s reinstalou o Signal e tem agora uma nova chave de identidade.
-
- Pode ser desejável verificar este contracto.
+ O seu número de segurança com %1$s foi alterado. Isto pode significar que alguém está a tentar interceptar esta comunicação ou implesmente
+que %2$s reinstalou o Signal.
+ Pode ser desejável verificar o seu número de segurança com este contracto.
Aceitar
Mensagem %s
@@ -77,7 +77,9 @@ que %2$s reinstalou o Signal e tem agora uma nova chave de identidade.
Expira: %s
Não entregue
Ver ficheiro seguro?
+ Este ficheiro multimédia está guardadonuma base de dados encriptada. Infelizmente, para o visualizar com uma aplicação externa os dados têm que ser temporariamente decriptados e escritos no dispositivo. Tem a certeza que pretende efetuar esta operação?
Erro, foi recebida uma mensagem de intercâmbio de chaves desactualizada.
+ Foi recebida uma mensagem para troca de chaves cifradas. Por favor carregue aqui para continuar.
%1$s deixou o grupo.
Pressione para ver detalhes
Pressione para enviar de modo inseguro
@@ -85,6 +87,8 @@ que %2$s reinstalou o Signal e tem agora uma nova chave de identidade.
Recorrer a MMS não cifrado?
Esta mensagem não será cifrada porque o destinatário já não é um utilizador Signal.\n\nEnviar mensagem de modo inseguro?
Não foi possÃvel encontrar uma aplicação capaz de abrir este média.
+ de %s
+ para %s
Reiniciar sessão segura?
Isto pode auxiliar caso tenha problemas de cifra nesta conversa. As suas mensagens serão mantidas.
@@ -92,7 +96,7 @@ que %2$s reinstalou o Signal e tem agora uma nova chave de identidade.
Eliminar conversa?
Isto irá eliminar permanentemente todas as mensagens nesta conversa.
Adicionar anexo
- Selecionar informações de contacto
+ Seleccionar informações de contacto
Compor mensagem
Lamento, ocorreu um erro no envio do seu anexo.
O GIF que seleccionou era demasiado grande!
@@ -122,13 +126,14 @@ que %2$s reinstalou o Signal e tem agora uma nova chave de identidade.
MMS não suportadas
Esta mensagem não pode ser enviada pois o seu operador não suporta MMS.
Por favor escolha um contacto
- Desbloquear?
- Tem a certeza que quer desbloquear este contacto?
+ Desbloquear este contacto?
+ Irá voltar a receber mensagens e chamadas deste contacto.
Desbloquear
O anexo tem um tamanho superior ao limite do tipo de mensagem que está a enviar.
Máquina fotográfica indisponÃvel
Não é possÃvel gravar áudio!
Erro no envio de mensagem de voz...
+ Não existe uma aplicação capaz de lidar com este tipo de ligação no seu dispositivo.
Detalhes da mensagem
Transporte: %1$s\nEnviadas/Recebidas: %2$s
@@ -142,8 +147,25 @@ que %2$s reinstalou o Signal e tem agora uma nova chave de identidade.
- Isto irá eliminar permanentemente todas as %1$d mensagens seleccionadas.
Guardar para o armazenamento local?
- Sucesso!
+
+ - Guardar este ficheiro multimédia para o armazenamento local vai permitir que qualquer outra app o possa acceder.\n\nContinuar?
+ - Guardar estes %1$d ficheiros multimédia para o armazenamento local vai permitir que qualquer outra app os possa acceder.\n\nContinuar?
+
+
+ - Erro ao guardar anexo para o armazenamento local!
+ - Erro ao guardar anexos para o armazenamento local!
+
+ Ficheiro guardado com sucesso.
Não é possÃvel escrever para o armazenamento local!
+
+ - A guardar anexo
+ - A guardar %1$d anexos
+
+
+ - A guardar anexo para o armazenamento local...
+ - A guardar %1$d anexos para o armazenamento local...
+
+ A recolher anexos...
Pendente...
Dados (Signal)
MMS
@@ -152,6 +174,7 @@ que %2$s reinstalou o Signal e tem agora uma nova chave de identidade.
A apagar mensagens...
Procurar...
+ Não existe um navegador instalado no seu dispositivo.
- Eliminar a conversa seleccionada?
@@ -181,7 +204,7 @@ que %2$s reinstalou o Signal e tem agora uma nova chave de identidade.
Usar a opção por omissão: %s
Nenhum
- Agora
+ Agora mesmo
%d min
Desinterligar \'%s\'?
@@ -199,7 +222,7 @@ que %2$s reinstalou o Signal e tem agora uma nova chave de identidade.
Partilhar com
- Benvindo ao Signal
+ Bem-vindo/a ao Signal.
TextSecure e RedPhone agora são um programa de mensagens privada para todas as situações: Signal.
Benvindo ao Signal!
TextSecure é agora Signal
@@ -213,10 +236,15 @@ que %2$s reinstalou o Signal e tem agora uma nova chave de identidade.
A exportar em texto simples para o armazenamento local...
Erro, não é possÃvel escrever para o armazenamento local.
Erro ao escrever para o armazenamento local.
- Sucesso!
+ Exportação com sucesso.
Falha de comunicação Signal permanente!
Signal não se conseguiu registar com os Serviços Google Play. As mensagens e chamadas Signal estão desabilitadas. Por favor tente registar-se novamente em Definições > Avançadas.
+
+ Erro a obter o GIF em resolução integral...
+
+ GIFs
+ Autocolantes
Grupo novo
Actualizar grupo
@@ -271,15 +299,15 @@ importá-lo novamente resultará em mensagens duplicadas.
Pressione e mantenha para gravar uma mensagem de voz, liberte para a enviar.
Partilhar
- Enviar SMS
+ Escolher contactos
Cancelar
A enviar...
Coração
Convites enviados!
Convidar para Signal!
-
- - ENVIAR PARA 1 AMIGO
- - ENVIAR PARA %d AMIGOS
+
+ - ENVIAR SMS PARA 1 AMIGO
+ - ENVIAR SMS PARA %d AMIGOS
- Enviar 1 convite SMS?
@@ -287,14 +315,14 @@ importá-lo novamente resultará em mensagens duplicadas.
Vamos mudar para Signal %1$s
Parece que não tem aplicações para as quais partilhar.
- Amigos não deixam amigos conversar em canal não cifrado.
+ Os amigos não deixam que os amigos conversem em canal não cifrado.
Não foi encontrada nenhuma chave lida!
Instalar o Barcode Scanner?
Signal necessita do Barcode Scanner para códigos QR.
O envio falhou
- Nova identidade
+ Novo número de segurança
Erro a armazenar MMS!
Erro na ligação com o servidor MMS...
@@ -319,6 +347,9 @@ importá-lo novamente resultará em mensagens duplicadas.
Ligou para %s
Chamada perdida de %s
%s está a usar Signal, diga olá!
+ Definiu o tempo de mensagens a desaparecer em %1$s
+ %1$s definiu o tempo de mensagens a desaparecer em %2$s
+ O seu número de segurança com %s mudou.
As frases-chave não coincidem.
Frase-chave anterior incorrecta!
@@ -342,6 +373,10 @@ importá-lo novamente resultará em mensagens duplicadas.
Lamento mas este não é um código QR de ligação de dispositivo válido.
Interligar a um dispositivo Signal?
Aparentemente está a tentar interligar-se a um dispositivo Signal através de um scanner externo. Para sua protecção, releia o código através do Signal.
+
+ Mensagens a desaparecer
+ As suas mensagens não expirarão.
+ As mensagens enviadas e recebidas nesta conversa irão desaparecer %s após serem vistas.
Introduza palavra-chave
Icon Signal
@@ -355,12 +390,13 @@ importá-lo novamente resultará em mensagens duplicadas.
Avalie agora!
Não, obrigado
Mais tarde
+ Oops, a Play Store aparenta não estar instalada neste dispositivo.
Bloquear este contacto?
- Não irá receber mensagens ou chamadas adicionais deste utilizador.
+ Não irá receber mensagens ou chamadas adicionais deste contacto.
Bloquear
Desbloquear este contacto?
- Tem a certeza que quer desbloquear este contacto?
+ Irá voltar a receber mensagens e chamadas deste contacto.
Desbloquear
Activo
Desactivado
@@ -386,6 +422,7 @@ importá-lo novamente resultará em mensagens duplicadas.
O número que marcou não suporta chamadas de voz seguras!
Recebido
+ Conectar-se ao Signal
Escolha o seu paÃs
Deve escolher o
indicativo do seu paÃs
@@ -437,12 +474,15 @@ Verifique que este é o seu número! Estamos prestes a confirmá-lo com uma SMS.
Ãudio
VÃdeo
- Foi recebida uma
-chave corrompida.
+ Foi recebida uma mensagem de
+intercâmbio de chaves corrompida!
+
+
+Mensagem de troca de chave inválida para esta versão do protocolo.
- Mensagem de troca de chave inválida para esta versão do protocolo.
- Actualização recebida mas com infomação de identidade desconhecida. Toque para validar identidade.
- Sessão segura reiniciada.
+ Recibida mensagem com número de segurança novo. Pressione para processar e exibir.
+ Reiniciou a sessão segura.
+ %s reiniciou a sessão segura.
Mensagem duplicada.
Deixou o grupo...
@@ -453,22 +493,16 @@ chave corrompida.
Chamada perdida
Mensagem media
%s está a usar Signal, diga olá!
+ Tempo de mensagens a desaparecer definido para %s
+ O seu número de segurança com %s mudou.
- Não tem uma chave de identidade.
- Destinatário não tem chave de identidade.
- Destinatário não tem chave de identidade!
- ATENÇÃO, a chave lida NÃO coincide! Por favor, verifique a impressão digital cuidadosamente.
- NÃO verificado!
- A chave do destinatário está correcta. É igualmente necessário verificar a sua chave perante ele.
- Verificado!
- Não tem uma chave de identidade!
-
- Você não tem uma chave de identidade.
- AVISO, a chave lida NÃO coincide.
- NÃO verificado!
- A chave lida coincide!
- Verificado!
- A sua impressão digital da identidade
+ O seu contacto está a utilizar uma versão anterior de Signal. Por favor peça-lhe para actualizar antes de verificar o seu número de segurança.
+ O seu contacto está a utilizar uma versão mais recente de Signal, com um novo formato de QR-Code. Por favor actualize para comparar.
+ O código QR lido não é um código de número de segurança formatado correctamente. Por favor tente ler novamente.
+ Partilhar número de segurança via...
+ O nosso número de segurança Signal:
+ Parece que não tem aplicações para as quais partilhar.
+ Não foi encontrado um número de segurança com o qual comparar na área de transferência
Iniciar apesar de pedido existente?
Enviar
@@ -496,6 +530,8 @@ chave corrompida.
Importação em progresso
A importar mensages de texto
+ Importação completa
+ Importação da base de dados do sistema está completa.
Toque para abrir.
Toque para abrir, ou toque no cadeado para fechar.
@@ -522,11 +558,20 @@ chave corrompida.
Mensagem nova
Imagem
+ Imagem
Ãudio
+ Ãudio
VÃdeo
+ VÃdeo
Contacto
+ Contacto
Câmara
+ Câmara
Localização
+ Localização
+ GIF
+ Gif
+ Comutar gaveta de anexos
Frase-chave anterior
Frase-chave nova
@@ -550,13 +595,16 @@ chave corrompida.
Enviar mensagem Signal
Enviar SMS insegura
Enviar MMS insegura
+ De %1$s
Enviar
Remover
Conversa com %1$s
Composição da mensagem
Teclado emoji
Antevisão de anexo
- Comutar gaveta de anexos
+ Comutar a câmara rápida da gaveta de anexos
+ Gravar e enviar anexo audio
+ Habilitar SMS via Signal
DESLIZE PARA CANCELAR
@@ -573,6 +621,7 @@ chave corrompida.
Transferir
Foto de Contacto
A transferir
+
Modo de selecção em grupo
Seleccionado %s
@@ -588,10 +637,43 @@ chave corrompida.
Interligar dispositivo novo
continuar
+
+ Desligado
+
+ - 1 segundo
+ - %d segundos
+
+ %ds
+
+ - 1 minuto
+ - %d minutos
+
+ %dm
+
+ - 1 hora
+ - %d horas
+
+ %dh
+
+ - 1 dia
+ - %d dias
+
+ %dd
+
+ - 1 semana
+ - %d semanas
+
+ %dw
+
+ Pesquisar GIFs e autocolantes
+
+ Nada foi encontrado
+ Não foi possivel ler o log no seu dispositivo. Poderá ainda usar ADB para efetuar o debugging do log.
Obrigado pela sua ajuda!
A enviar
A publicar logs no gist...
+ Não existe um navegador instalado
Gostaria de importar as suas mensagens de texto existentes para a base de dados cifrada do Signal?
A base de dados de sistema não será modificada ou alterada de nenhuma forma.
@@ -634,6 +716,7 @@ chave corrompida.
Desbloquear
O Signal requer configurações MMS para transmitir média e mensagens de grupo através da sua operadora. O seu aparelho não disponibiliza essa informação, o que pode ocorrer em aparelhos bloqueados ou com configurações restritivas.
+ Para enviar ficheiros multimédia e mensagens em grupo carregue \"OK\" e complete as definições solicitadas. As definições de MMS para a sua operadora podem ser encontradas ao pesquisar por \"operador APN\". Apenas é necessário efectuar isto uma vez.
BLOQUEADO
@@ -644,7 +727,7 @@ chave corrompida.
Bloquear
Cor
Cor para este contacto
- Verificar identidade
+ Verificar número de segurança
Chamada Signal
terminar chamada
@@ -726,14 +809,17 @@ falhou.
Verificar
Introduza um nome ou número
- Adicionar novo membro
-
- A identidade do destinatário (ele lê):
- A sua identidade (você lê):
+ Adicionar membros
+
+ Aprenda mais sobre como verificar números de segurança]]>
+ Toque para ler
+
+ Partilhar número de segurança
Alguns problemas requerem a sua atenção.
Enviado
Recebido
+ Desaparece
Via
Para:
De:
@@ -743,19 +829,18 @@ falhou.
Introduza palavra-chave
Seleccionar contactos
Signal detectado
- Chave de identidade pública
Alterar frase-chave
- Verificar identidade
+ Verificar número de segurança
+ Submeter registo de depuração
Antevisão de média
Todas as imagens
Todas as imagens com %1$s
Detalhes da mensagem
- Gerir dispositivos interligados
+ Dispositivos interligados
Convidar amigos
Conversas arquivadas
Importar / Exportar
- A sua chave de identidade
Usar a opção por omissão
Usar a opção personalizada
Silenciar por 1 hora
@@ -859,7 +944,7 @@ falhou.
Tamanho máximo de conversa
Aparar todas as conversas agora
Verificar todas as conversas e limitá-las ao tamanho máximo de conversa
- Dispositivos
+ Dispositivos interligados
Claro
Escuro
Aspecto
@@ -872,6 +957,8 @@ falhou.
Modo de compatibilidade \"Chamada WiFi\"
Active se o seu dispositivo utiliza entrega de SMS/MMS sobre WiFi (apenas active se \'WiFi Calling\' está activo neste dispositivo)
Contactos bloqueados
+ Aprovação de números de segurança
+ Requerer aprovação de números de segurança quando estes são alterados
Apresentar nas notificações
Quando utilizar dados móveis
Quando utilizar Wi-Fi
@@ -905,6 +992,10 @@ falhou.
Reenviar mensagem
Guardar anexo
+
+ Mensagens a desaparecer
+
+ Mensagens a expirar
Convidar
@@ -923,8 +1014,6 @@ falhou.
Conversa nova
- Segurança
- Verificar identidade
Reiniciar sessão segura
Não silenciar
@@ -948,6 +1037,8 @@ falhou.
Emissão
Comparar
+ Mostrar o seu código QR
+ Digitalizar o código QR do contacto
Mensagem nova
Grupo novo
@@ -956,6 +1047,9 @@ falhou.
Marcar todas como lidas
Convidar amigos
Ajuda
+
+ Copiar para a área de transferência
+ Comparar com a área de transferência
A sua versão de Signal está desactualizada
@@ -970,6 +1064,7 @@ falhou.
Pressione para tornar Signal a sua applicação SMS por omissão.
DEFINIR
Importar as SMS do sistema
+ Carregue aqui para copiar as SMS do seu telefone para a base de dados encriptada do Signal.
IMPORTAR
Habilitar mensagens e chamadas Signal
Melhore a sua experiência de comunicação.
@@ -987,7 +1082,10 @@ falhou.
Tipo de média não suportado
Gravar
+ Reencaminhar
+ Todas as imagens
+ Guardar todos
Antevisão de imagem
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 7f6341ce85b..7d3f2622b19 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -5,6 +5,8 @@
Nu
Șterge
Te rog așteaptă...
+
+ Mesaj nou
Acum: %s
Nu ai setat înca o parolă!
@@ -13,7 +15,7 @@
- %d mesaje per conversație
- %d mesaje per conversație
- Åžterge toate mesajele vechi acum?
+ Åžterg toate mesajele vechi acum?
- Această acțiune va scurta toate conversațiile până la cel mai recent mesaj.
- Această acțiune va scurta toate conversațiile până la cele mai recente %d mesaje.
@@ -21,16 +23,17 @@
Åžterge
Dezactivez parola?
+ Această acțiune va debloca permanent Signal și notificările pentru mesaje.
Dezactivează
Anulare înregistrare
Se dezabonează de la mesajele și apelurile Signal...
Dezactivez mesajele și apelurile Signal?
Dezactivare mesaje și apeluri Signal prin dezabonarea de la server. Va trebui să re-înregistrezi numărul tău de telefon pentru a putea să le folosești din nou în viitor.
- Eroare de conectare cu serverul!
+ Eroare de conectare la server!
SMS Activat
- Atingeţi pentru a schimba aplicaţia SMS implicită
+ Atinge pentru a schimba aplicaţia implicită de SMS
SMS Dezactivat
- Atingeţi pentru a seta Signal ca şi aplicaţie SMS implicită
+ Atinge pentru a seta Signal ca şi aplicaţie SMS implicită
activat
Activat
dezactivat
@@ -64,11 +67,8 @@
Apel de intrare
- Cheia
-de identitate pentru %1$s s-a schimbat. Asta poate însemna că cineva încearcă să intercepteze
-traficul tău, sau că %2$s și-a re-instalat Signal și acum are o nouă cheie de identitate.
- Probabil că dorești să verifici
-această persoană.
+ Numărul de siguranță pentru %1$s s-a schimbat. Asta poate însemna că cineva încearcă să intercepteze comunicația sau că %2$s a reinstalat Signal.
+ Probabil că dorești să verifici numărul de siguranță pentru acest contact.
Acceptă
Mesaj %s
@@ -78,14 +78,16 @@ această persoană.
Expiră în: %s
Nelivrat
Afișez datele securizate?
+ Acest fișier a fost stocat într-o bază de date criptată. Din păcate pentru a-l vizualiza cu o aplicație externă este necesar ca datele să fie decriptate temporar și salvate pe spațiul de stocare. Ești sigur că vrei să faci asta?
Eroare, mesajul pentru schimbul de chei este vechi.
- %1$s a ieșit din grup.
+ Am primit un mesaj pentru schimbul de chei, apasă pentru a-l procesa.
+ %1$s a părăsit grupul.
Apasă pentru detalii
Apasă pentru revenirea la soluția ne-securizată
Reveniţi la SMS necriptat ca soluţie de rezervă?
Reveniţi la MMS necriptat ca soluţie de rezervă?
Acest mesaj nu o să fie criptat deoarece destinatarul nu mai este un utilizator Signal.\n\nTrimit mesaj nesecurizat?
- Nu a fost găsită o aplicație pentru a deschide acest tip media.
+ Nu a fost găsită nici o aplicație pentru a deschide acest tip media.
de la %s
către %s
@@ -104,7 +106,7 @@ această persoană.
Destinatarul nu este o adresă validă de SMS sau e-mail.
Mesajul este gol!
Membrii grupului
- Grupează conversaţia
+ Conversație grup
Grup fără nume
- 1 membru
@@ -114,7 +116,7 @@ această persoană.
Ciornă salvată
Destinatar invalid!
Nu există suport pentru apeluri
- Acest dispozitiv nu pare să ofere acţiuni pentru formarea numărului de telefon.
+ Acest dispozitiv nu pare să suporte acțiune de apelare.
Vrei să părăsești grupul?
Ești sigur că vrei să părăsești acest grup?
SMS nesecurizat
@@ -126,13 +128,14 @@ această persoană.
MMS-ul nu este suportat
Acest mesaj nu poate fi trimis deoarece operatorul de telefonie mobilă nu suportă MMS.
Te rog alege un contact
- Deblochez?
- Sunteți sigur că doriți deblocarea acestui contact?
+ Deblochez acest contact?
+ O să poți primi din nou mesaje și apeluri de la acest contact.
Deblochează
Atașamentul depășește limita de mărime pentru tipul de mesaj pe care vrei să-l trimiți.
- Camera foto indisponibilă
+ Cameră indisponibilă
Nu se poate înregistra audio!
Eroare la trimiterea mesajului vocal...
+ Nu există nici o aplicație disponibilă pe dispozitivul tău care să poată deschide acest link.
Detalii mesaj
Transport: %1$s\nTrimis/Primit: %2$s
@@ -148,8 +151,29 @@ această persoană.
- Această acțiune va șterge permanent toate cele %1$d mesaje selectate.
Salvez pe spațiul de stocare?
- Succes!
+
+ - Salvarea acestui fişier pe spaţiul de stocare va permite altor aplicaţii de pe dispozitivul tău să le acceseze.\n\nContinui?
+ - Salvarea tututor celor %1$d fişiere pe spaţiul de stocare va permite altor aplicaţii de pe dispozitivul tău să le acceseze.\n\nContinui?
+ - Salvarea tututor celor %1$d fişiere pe spaţiul de stocare va permite altor aplicaţii de pe dispozitivul tău să le acceseze.\n\nContinui?
+
+
+ - A apărut o eroare în timpul salvării atașamentului pe spațiul de stocare!
+ - A apărut o eroare în timpul salvării atașamentelor pe spațiul de stocare!
+ - A apărut o eroare în timpul salvării atașamentelor pe spațiul de stocare!
+
+ Fișierul a fost salvat cu succes.
Nu se poate scrie pe spațiul de stocare!
+
+ - Se salvează atașamentul
+ - Se salvează %1$d atașamente
+ - Se salvează %1$d atașamente
+
+
+ - Se salvează atașamentul pe spațiul de stocare...
+ - Se salvează %1$d atașamente pe spațiul de stocare...
+ - Se salvează %1$d atașamente pe spațiul de stocare...
+
+ Se colectează atașamentele...
ÃŽn curs...
Date (Signal)
MMS
@@ -158,6 +182,7 @@ această persoană.
Se șterg mesajele...
Caută...
+ Nu există nici un browser instalat pe dispozitivul tău.
- Șterg conversația selectată?
@@ -178,9 +203,9 @@ această persoană.
UNDO
- - Conversație mutată în inbox
- - %d conversații mutate în inbox
- - %d conversații mutate în inbox
+ - Conversație a fost mutată în inbox
+ - %d conversații au fost mutate în inbox
+ - %d conversații au fost mutate în inbox
Mesaj pentru schimb de chei...
@@ -191,12 +216,15 @@ această persoană.
Implicit: %s
Niciuna
- Acum
+ Tocmai acum
%d min
Deconectez \'%s\'?
+ Prin deconectarea acestui dispozitiv, nu v-a mai putea trimite și primi mesaje.
Conexiunea la reţea a eşuat...
Încearcă din nou
+ Se deconectează dispozitivul...
+ Se deconectează dispozitivul
Eroare de reţea!
Dispozitiv fără nume
@@ -213,16 +241,22 @@ această persoană.
TextSecure și RedPhone sunt acum o singură aplicație: Signal. Apasă pentru a explora.
Exportă
- Export în format text pe spațiul de stocare?
- Atenție, această acțiune va exporta conținutul mesajelor tale Signal în format text pe spațiul de stocare.
+ Export în format necriptat pe spațiul de stocare?
+ Atenție, această acțiune va exporta conținutul mesajelor tale Signal în format necriptat pe spațiul de stocare.
Anulare
Se exportă
- Se exportă în format text pe spațiul de stocare...
+ Se exportă în format necriptat pe spațiul de stocare...
Eroare, nu se poate scrie pe spațiul de stocare.
Eroare în timpul scrierii pe spațiul de stocare.
- Succes!
+ Exportarea a fost făcută cu succes.
Eroare permanentă de comunicare cu Signal!
+ Signal nu s-a putut înregistra la Google Play Services. Mesajele și apelurile Signal au fost dezactivate, te rog încearcă să te înregistrezi din nou din meniul Setări > Avansat.
+
+ A apărut o eroare la obținerea GIF-ului la rezoluție maximă...
+
+ GIF-uri
+ Autocolante
Grup nou
Actualizează grup
@@ -231,10 +265,10 @@ această persoană.
Ai selectat un contact care nu suportă grupuri Signal, astfel acest grup va fi de tip MMS.
Nu ești înregistrat pentru mesaje și apeluri Signal, astfel grupurile Signal sunt dezactivate. Încearcă înregistrarea de la Setări > Avansat.
A apărut o eroare neprevazută care a dus la imposibilitatea creării grupului.
- Este nevoie de cel puțin o persoană în grupul tău!
- Unul dintre membrii grupului dvs. are un număr de telefon ce nu poate fi citit corect. Vă rugăm să remediaţi problema sau să eliminaţi acel contact şi să încercaţi din nou.
+ Ai nevoie de cel puțin o persoană în grupul tău!
+ Unul dintre membrii grupului tău are un număr de telefon ce nu poate fi citit corect. Te rog să remediezi problema sau să elimini acel contact şi să încerci din nou.
Avatar de grup
- Creare grup
+ Creează grup
Se creează %1$s…
Se actualizează %1$s...
%1$s nu a putut fi adăugat deoarece nu este un utlizator Signal.
@@ -246,22 +280,22 @@ această persoană.
Importă
Exportă
- Importă baza de date cu SMS-uri?
+ Import baza de date cu SMS-uri?
Această acțiune va importa
mesajele din baza de date SMS implicită de sistem în Signal. Dacă ai importat anterior
baza de date cu SMS-uri, importarea repetată va rezulta în mesaje duplicate.
Importă
Anulare
- Restaurează backup criptat?
+ Restaurez backup criptat?
Restaurarea unui backup criptat va înlocui în totalitate cheile, preferințele și mesajele tale existente.
Vei pierde orice informație care se află în instalarea curentă de Signal și care nu se află în backup.
Restaurează
- Importă backup necriptat?
- Această acțiune va importa mesajele din backup-ul necriptat. Dacă ați mai importat acest backup atunci importarea curentă va crea mesaje duplicate.
+ Import backup necriptat?
+ Această acțiune va importa mesajele din backup-ul necriptat. Dacă ai mai importat acest backup atunci importarea curentă va crea mesaje duplicate.
Se importă
Se importă un backup necriptat...
- Nu a fost găsit nici un backup text!
+ Nu a fost găsit nici un backup necriptat!
Eroare la importul backup-ului!
Import complet!
Se restaurează
@@ -269,19 +303,19 @@ Vei pierde orice informație care se află în instalarea curentă de Signal și
Nu a fost găsit nici un backup criptat!
Restaurare completă!
- Ține apăsat pentru a înregistra un mesaj vocal, eliberează pentru a trimite
+ Ține apăsat pentru a înregistra un mesaj vocal, eliberează pentru a-l trimite
Partajează
- Trimite SMS
+ Alege contactele
Anulare
Se trimite...
Inimă
Invitațiile au fost trimise!
Invită la Signal
-
- - TRIMITE LA 1 PRIETEN
- - TRIMITE LA %d PRIETENI
- - TRIMITE LA %d PRIETENI
+
+ - TRIMITE SMS LA 1 PRIETEN
+ - TRIMITE SMS LA %d PRIETENI
+ - TRIMITE SMS LA %d PRIETENI
- Trimit o invitație prin SMS?
@@ -289,14 +323,15 @@ Vei pierde orice informație care se află în instalarea curentă de Signal și
- Trimit %d invitații prin SMS?
Hai să folosim Signal: %1$s
- Prietenii nu-și lasă prietenii să comunice necriptat.
+ Se pare că nu ai aplicații cu care să poți partaja.
+ Prietenii nu-și lasă prietenii să converseze necriptat.
Nu a fost găsită nici o cheie scanată!
- Instalez scannerul de coduri de bare?
+ Instalez scanerul de coduri de bare?
Signal are nevoie de Barcode Scanner pentru coduri QR.
Expediere eşuată
- Identitate nouă
+ Număr nou de siguranță
Eroare la stocarea MMS-ului!
Eroare de conectare la furnizorul MMS...
@@ -307,28 +342,33 @@ Vei pierde orice informație care se află în instalarea curentă de Signal și
Apel Signal ratat
Se realizează un apel Signal
Apel de intrare Signal
- Respinge apel
+ Respinge apelul
Răspunde apelului
ÃŽnchide apelul
- Anulează apel
+ Anulează apelul
Mesaj multimedia
+ Ai primit un mesaj care a fost criptat cu o versiune mai veche de Signal care nu mai este suportată. Roagă-l pe expeditor să-și actualizeze aplicația la ultima versiune și să retrimită mesajul.
Ai parăsit grupul.
Grupul a fost actualizat.
%s te-a apelat
Apel %s
Apel ratat de la %s
%s este pe Signal, salută-l!
+ Tu ai setat timpul pentru dispariția mesajelor la %1$s.
+ %1$s a setat timpul pentru dispariția mesajelor la %2$s.
+ Numărul tău de siguranță pentru %s s-a schimbat.
Parolele nu se potrivesc!
Parola veche este incorectă!
- Introduceţi parola nouă!
+ Introdu parola nouă!
Conectez acest dispozitiv?
ANULARE
CONTINUÄ‚
Conectez acest dispozitiv?
+ Va putea
• Citirea tuturor mesajelor tale
\n• Trimiterea mesajelor în numele tău
@@ -336,15 +376,20 @@ Vei pierde orice informație care se află în instalarea curentă de Signal și
Se conectează dispozitivul
Se conectează noul dispozitiv...
Dispozitiv aprobat!
- Nu a fost gasit niciun dispozitiv.
+ Nu a fost gasit nici un dispozitiv.
Eroare reţea.
Cod QR invalid.
Ne pare rău, ai prea multe dispozitive conectate deja, încearcă să elimini câteva...
Ne pare rău. acest cod QR pentru conectarea dispozitivului nu este valid.
Conectez un dispozitiv Signal?
+ Se pare că încerci să conectezi un dispozitiv Signal folosind un scaner terț. Pentru protecția ta, te rog scanează codul încă o dată din interiorul aplicației Signal.
+
+ Mesaje care dispar
+ Mesajele tale nu vor expira.
+ Mesajele trimise și primite în această conversație vor dispărea după %s după ce au fost vizualizate.
- Introduceţi parola
- Icoană Signal
+ Introdu parola
+ Pictogramă Signal
Trimite parola
Parolă incorectă!
@@ -353,14 +398,15 @@ Vei pierde orice informație care se află în instalarea curentă de Signal și
Evaluează aplicaţia
Dacă îţi place aplicaţia, te rog ajută-ne cu o evaluare.
Evaluează acum!
- Nu mulţumesc
+ Nu, mersi
Mai târziu
+ Uuups, se pare că aplicația Magazinul Play nu este instalată pe dispozitivul tău.
Blochez acest contact?
- Nu o să mai primești mesaje sau apeluri de la acest utilizator.
+ Nu o să mai primești mesaje și apeluri de la acest contact.
Blochează
Deblochez acest contact?
- Sunteți sigur că doriți deblocarea acestui contact?
+ O să poți primi din nou mesaje și apeluri de la acest contact.
Deblochează
Activat
Dezactivat
@@ -407,7 +453,7 @@ Verifică din nou dacă acesta este numărul tău! Suntem pe cale să-l verific
Probleme posibile
- Verificarea numărului
+ Se verifică numărul
Editează %s
Înregistrarea este completă!
Trebuie să introduci codul primit anterior...
@@ -426,11 +472,12 @@ Verifică din nou dacă acesta este numărul tău! Suntem pe cale să-l verific
Prea multe cereri!
Ai solicitat deja un apel vocal. Vei putea solicita altul după 20 de minute.
Conflict înregistrare
+ Acest număr este deja înregistrat pe un alt server Signal (CyanogenMod?). Mai întâi trebuie să te dezabonezi acolo ca să te înregistrezi aici.
Înregistrarea este completă
ÃŽnregistrarea la Signal s-a finalizat cu succes.
Eroare de înregistrare
- Înregistrarea Signal a întampinat o problemă.
+ Înregistrarea la Signal a întampinat o problemă.
Imagine
Audio
@@ -440,9 +487,9 @@ Verifică din nou dacă acesta este numărul tău! Suntem pe cale să-l verific
schimbul de chei este corupt
Am primit mesajul conform căruia schimbul de chei a avut loc pentru o versiune de protocol invalidă.
- Primit mesaj cu o cheie de identitate necunoscută. Click pentru a-l procesa și afișa.
- S-au primit informații de identitate actualizate dar necunoscute. Apăsați pentru a valida identitatea.
- Sesiune securizată resetată.
+ A fost primit un mesaj cu noul număr de siguranță. Apasă pentru a fi procesat și afișat.
+ Ai resetat sesiunea securizată.
+ %s a resetat sesiunea securizată.
Mesaj duplicat.
A ieșit din grup...
@@ -453,22 +500,16 @@ Am primit mesajul conform căruia schimbul de chei a avut loc pentru o versiune
Apel ratat
Mesaj media
%s este pe Signal, spune-i hey!
+ Timpul setat pentru mesajele care dispar este %s
+ Numărul tău de siguranță pentru %s s-a schimbat.
- Nu ai o cheie de identitate.
- Destinatarul nu are o cheie de identitate.
- Destinatarul nu are o cheie de identitate!
- ATENȚIE, cheia scanată NU SE POTRIVEȘTE! Verifică semnătura digitală cu atenție.
- NU E VERIFICAT!
- Cheia partenerului este corectă. Este necesar de asemenea ca și partenerul tău să verifice cheia ta.
- Verificat!
- Nu ai o cheie de identitate!
-
- Nu ai o cheie de identitate!
- ATENȚIE, cheia scanată NU SE POTRIVEȘTE !
- NU E VERIFICAT!
- Cheia scanată se potrivește!
- Verificat!
- Amprenta ta de identitate
+ Contactul tău folosește o versiune mai veche de Signal. Roagă-l să-și actualizeze versiunea înainte de a verifica numărul tău de siguranță.
+ Contactul tău folosește o versiune mai nouă de Signal cu un format de cod QR incompatibil. Te rog actualizează-ți aplicația pentru a putea compara.
+ Codul QR scanat nu este un număr de siguranță formatat corect. Te rog scanează din nou.
+ Partajează numărul de siguranță via...
+ Numărul nostru de siguranță:
+ Se pare că nu ai aplicații cu care să poți partaja.
+ Nu s-a găsit nici un număr de siguranță în clipboard pentru a fi comparat.
Iniţializeaz deşi există o cerere?
Trimite
@@ -495,16 +536,19 @@ Am primit mesajul conform căruia schimbul de chei a avut loc pentru o versiune
Notificări silenţioase
Import în curs
- Mesajele text sunt importate
+ Se importă mesajele text
+ Import complet
+ Importul bazei de date de sistem este complet.
- Atingeți pentru a-l deschide.
+ Atinge pentru a-l deschide.
+ Atinge pentru a deschide sau atinge lacătul pentru a închide.
Signal este deblocat
Blocare acces cu parolă
%1$d mesaje noi în %2$d conversaţii
Cel mai recent de la: %1$s
Mesaj blocat...
- Mesaje media: %s
+ Mesaj media: %s
(Fără subiect)
Trimiterea mesajului a esuat.
Mesajul nu a putut fi trimis.
@@ -521,19 +565,28 @@ Am primit mesajul conform căruia schimbul de chei a avut loc pentru o versiune
Mesaj nou
Imagine
+ Imagine
Audio
+ Audio
Video
+ Video
Contact
- Camera foto
+ Contact
+ Cameră
+ Cameră
Locație
+ Locație
+ GIF
+ Gif
+ Comutare panou atașamente
Parola veche
Parola nouă
Repetă parola nouă
- Introduceţi un nume sau un număr
+ Introdu un nume sau un număr
- Nu exista contacte.
+ Nu există contacte.
Se încarcă contactele...
Poză contact
@@ -548,14 +601,19 @@ Am primit mesajul conform căruia schimbul de chei a avut loc pentru o versiune
Trimite mesaj Signal
Trimite SMS nesecurizat
- Trimite SMS nesecurizat
+ Trimite MMS nesecurizat
+ De la %1$s
Trimite
Șterge
Conversaţie cu %1$s
Compunere mesaj
Comutare tastatură emoji
- Pictogramă atașament
+ Miniatură atașament
+ Comutare panou cu atașamente de la camera rapidă
+ Înregistrează și trimite un atașament audio
+ Activează Signal pentru SMS
+ TRAGE PENTRU A ANULA
Mesajul media se descarcă
Mesaj media
@@ -570,6 +628,10 @@ Am primit mesajul conform căruia schimbul de chei a avut loc pentru o versiune
Descarcă
Poză contact
Se descarcă
+
+ Redare
+ Pauză
+ Descarcă
Mod selecţie multiplă
%s selectate
@@ -585,11 +647,48 @@ Am primit mesajul conform căruia schimbul de chei a avut loc pentru o versiune
Conectează dispozitiv nou
continuă
+
+ Dezactivat
+
+ - 1 secundă
+ - %d secunde
+ - %d secunde
+
+ %ds
+
+ - 1 minut
+ - %d minute
+ - %d minute
+
+ %dm
+
+ - 1 oră
+ - %d ore
+ - %d ore
+
+ %do
+
+ - 1 zi
+ - %d zile
+ - %d zile
+
+ %dz
+
+ - 1 săptămână
+ - %d săptămâni
+ - %d săptămâni
+
+ %ds
+
+ Caută GIF-uri și autocolante
+
+ Nu s-a găsit nimic
- Fișierul log nu a putut fi citit de pe dispozitivul tău. Poţi folosi în schimb ADB pentru a obţine log-ul de depanare.
+ Fișierul jurnal nu a putut fi citit de pe dispozitivul tău. Poţi folosi în schimb ADB pentru a obţine jurnalul de depanare.
Vă mulțumim pentru ajutor!
Se trimite
- Se trimit log-urile către gist...
+ Se trimite jurnalul către gist...
+ Nici un browser instalat
Vrei să imporţi mesajale tale text existente în baza de date criptată Signal?
Baza de date a sistemului nu va fi modificată în nici un fel.
@@ -605,15 +704,15 @@ Am primit mesajul conform căruia schimbul de chei a avut loc pentru o versiune
Importă baza de date din aplicația implicită de mesagerie din sistem
Restaurează backup criptat?
Restaurează un backup criptat exportat anterior cu Signal
- Importă backup text
- Importă un fișier de backup text. Compatibil cu \'SMS Backup & Restore.\'
+ Importă backup necriptat
+ Importă un fișier de backup necriptat. Compatibil cu \'SMS Backup & Restore.\'
Vezi conversația completă.
Nu sunt imagini
VERIFICÄ‚
- RE-TRIMITE
+ RETRIMITE
Pentru telefonul tău sunt necesare setări MMS manuale.
Activat
@@ -633,17 +732,18 @@ Am primit mesajul conform căruia schimbul de chei a avut loc pentru o versiune
Deblochează
Signal are nevoie de setările MMS pentru a trimite media și mesaje pentru grupuri prin operatorul wireless. Acest dispozitiv nu oferă această informație, lucru care se poate întâmpla uneori pentru dispozitive blocate sau alte configurații restrictive.
+ Pentru a putea trimite mesaje multimedia cât și mesaje într-un grup, apasă \'OK\' și completează setările solicitate. Setările MMS pentru operatorul tău pot fi găsite cautând după \'APN operatorul tău\'. Această operațiune este necesară o singură dată.
BLOCAT
Conversaţie silenţioasă
Dezactivează notificările pentru această conversație
- Ton notificare
+ Sunet de notificare
Vibrează
Blochează
Culoare
Culoarea pentru acest contact
- Verifică identitatea
+ Verifică numărul de siguranță
Apel Signal
închide apelul
@@ -665,6 +765,11 @@ NUMĂRUL DE TELEFON
Unele probleme posibile
sunt:
Interceptori SMS.
+
+Unele aplicații terțe de mesagerie text, cum ar fi Handcent sau GoSMS, se comportă sub standard
+și interceptează toate mesajele SMS primite. Verifică dacă ai primit un mesaj text care
+începe cu \"Codul tău de verificare Signal:\", caz în care va trebui să configurezi cealaltă
+aplicație de mesagerie să permită trecerea mesajelor text mai departe.
Număr incorect.
Te rog să te asiguri că ai introdus corect numărul tău de telefon şi că acesta este formatat corect pentru
@@ -717,15 +822,18 @@ SMS a eșuat.
Telefon
Verifică
- Introduceţi un nume sau un număr
- Adăugare membru
-
- Identitatea partenerului (cum apare el):
- Identitatea ta (cum apari tu):
+ Introdu un nume sau un număr
+ Adaugă membri
+
+ Află mai multe despre verificarea numerelor de siguranță.]]>
+ Apasă pentru a scana
+
+ Partajează numărul de siguranță
Anumite probleme au nevoie de atenția ta.
Trimis
Primit
+ Dispar
Via
Către:
De la:
@@ -735,27 +843,25 @@ SMS a eșuat.
Introdu parola
Selectează contacte
Signal detectat
- Cheia de identitate publică
Schimbă parola
- Verifică identitatea
- Trimite log-ul de depanare
+ Verifică numărul de siguranță
+ Trimite jurnalul de depanare
Previzualizare media
Toate imaginile
Toate imaginile cu %1$s
Detalii mesaj
- Administrează dispozitivele conectate
+ Dispozitive conectate
Invită prieteni
Conversații arhivate
Importă / Exportă
- Cheia ta de identitate
Implicit
Specific
Silenţios pentru o oră
Silenţios pentru 2 ore
Silenţios pentru o zi
Silenţios pentru 7 zile
- Silenţios pentru 1 an
+ Silenţios pentru un an
Setări implicite
Activat
Dezactivat
@@ -791,7 +897,7 @@ SMS a eșuat.
Activează parola
Blochează Signal și notificările mesageriei cu o parolă
Securitate ecran
- Blochează screenshot-urile în lista cu aplicaţii recente şi în interiorul applicaţiei
+ Blochează screenshot-urile în lista cu aplicaţii recente şi în interiorul aplicaţiei
Blochează automat Signal după o perioadă specificată de timp de inactivitate
Cere parolă pentru inactivitate
Interval de timp pentru inactivitate
@@ -853,7 +959,7 @@ SMS a eșuat.
Limita mărime conversație
Scurtează acum toate conversaţiile
Verifică toate conversațiile și aplică limite de mărime a conversației
- Dispozitive
+ Dispozitive conectate
Deschisă
Închisă
Aspect
@@ -863,10 +969,12 @@ SMS a eșuat.
Mesaje și apeluri Signal
Mesaje și apeluri, private şi gratuite cu utilizatorii Signal
- Trimite log-urile de depanare
+ Trimite jurnalul de depanare
Mod compatibilitate \"Apelare WiFi\"
Activează dacă dispozitivul tău trimite SMS/MMS prin WiFi (activează atunci când \"Apelare WiFi\" este activat pe dispozitivul tău)
Contacte blocate
+ Aprobare numere de siguranță
+ Cere aprobarea noilor numere de siguranță când acestea se schimbă
Afişează în notificări
Când se utilizează datele mobile
Când se utilizează Wi-Fi
@@ -900,6 +1008,10 @@ SMS a eșuat.
Retrimite mesaj
Salvează ataşamentul
+
+ Mesaje care dispar
+
+ Expirarea mesejelor
Invită
@@ -908,18 +1020,19 @@ SMS a eșuat.
Åžterge ce este selectat
Selectează tot
Arhivă selectată
+ Dezarhivare selectată
Caută
Poză contact
+ Alertă eroare
Arhivat
Conversație nouă
- Securitate
- Verifică identitatea
Resetează sesiunea securizată
+ Activare notificări
Notificări silenţioase
@@ -930,6 +1043,7 @@ SMS a eșuat.
Toate imaginile
Setări conversaţie
+ Extinde popup-ul
Adaugă la contacte
@@ -939,22 +1053,35 @@ SMS a eșuat.
Difuzare
Compară
+ Afișează codul tău QR
+ Scanează codul QR al unui contact
Mesaj nou
Grup nou
Setări
- Blocare
+ Blochează
Marchează tot ca citit
Invită prieteni
- Asistență
+ Ajutor
+
+ Copiază în clipboard
+ Compară cu clipboard-ul
Versiunea ta de Signal este veche
+
+ - Versiunea ta de Signal va expira într-o zi. Apasă pentru a actualiza aplicația la versiunea cea mai recentă.
+ - Versiunea ta de Signal va expira în %d zile. Apasă pentru a actualiza aplicația la versiunea cea mai recentă.
+ - Versiunea ta de Signal va expira în %d zile. Apasă pentru a actualiza aplicația la versiunea cea mai recentă.
+
+ Versiunea ta de Signal va expira azi. Apasă pentru a actualiza aplicația la versiunea cea mai recentă.
Versiunea ta de Signal a expirat!
+ Mesajele nu se vor mai trimite cu succes. Apasă pentru a actualiza aplicația la versiunea cea mai recentă.
ACTUALIZEAZÄ‚
Utilizează ca și aplicație SMS implicită
Atingeți pentru a seta Signal ca și aplicație SMS implicită.
SETEAZÄ‚
Importă SMS de sistem
+ Apasă pentru a copia mesajele SMS din telefon în baza de date criptată Signal.
IMPORTÄ‚
Activează mesaje și apeluri Signal
Actualizează-ți experiența ta de comunicare.
@@ -972,7 +1099,10 @@ SMS a eșuat.
Tip media nesuportat
Salvează
+ Expediază
+ Toate imaginile
+ Salvează tot
Previzualizare imagine
@@ -986,6 +1116,6 @@ SMS a eșuat.
Se șterg mesajele vechi...
Mesajele vechi au fost șterse cu succes
- Icoană transport
+ Pictogramă transport
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index ff9b3185a0c..e4aba96b8e4 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -5,6 +5,8 @@
Ðет
Удалить
ПожалуйÑта, подождите...
+
+ Ðовое Ñообщение
СейчаÑ: %s
Вы ещё не задали парольную фразу!
@@ -23,12 +25,12 @@
Удалить
Отключить парольную фразу?
- Ðто Ñразу разблокирует Signal и ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ ÑообщениÑÑ….
+ ПоÑле Ñтого приложение Signal и его ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð²Ñегда будут видны без ввода паролÑ.
Отключить
Отмена региÑтрации
ОтменÑем региÑтрацию в Signal...
Отключить ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ звонки через Signal?
- Отключить ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ звонки Signal, отменив региÑтрацию на Ñервере. Вам нужно будет заново зарегиÑтрироватьÑÑ Ð¿Ñ€Ð¸ помощи Вашего номера телефона, чтобы вновь иÑпользовать Ñти ÑервиÑÑ‹.
+ Отключить ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ звонки через Signal, отменив региÑтрацию на Ñервере. Вам нужно будет заново зарегиÑтрировать Ñвой телефонный номер, чтобы воÑпользоватьÑÑ Ð¸Ð¼Ð¸ в будущем.
Ошибка при Ñоединении Ñ Ñервером!
SMS включены
Ðажмите Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° SMS-Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию
@@ -39,8 +41,8 @@
выключена
Выключено
SMS %1$s, MMS %2$s
- ÐŸÐ°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° %1$s, Защита Ñкрана %2$s
- Тема %1$s, Язык %2$s
+ ÐŸÐ°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° %1$s, защита Ñкрана %2$s
+ Тема %1$s, Ñзык %2$s
- 1 минута
@@ -52,7 +54,7 @@
(изображение)
(аудио)
(видео)
- (МеÑтоположение)
+ (меÑто)
Ðе найдено приложение Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° медиа-файлов.
@@ -68,19 +70,16 @@
ВходÑщий звонок
- Ключ, идентифицирующий личноÑть %1$s, изменилÑÑ. Ðто может означать, что кто-то пытаетÑÑ Ð¿ÐµÑ€ÐµÑ…Ð²Ð°Ñ‚Ð¸Ñ‚ÑŒ вашу перепиÑку, или что %2$s проÑто переуÑтановил(а) Signal и получил(а) новый личный ключ.
- Возможно, Ñтого ÑобеÑедника
-Ñтоит перепроверить.
ПринÑть
Сообщение %s
- Звонок через Signal от %s
+ Позвонить через Signal на %s
Размер ÑообщениÑ: %d Kб
ИÑтекает: %s
Ðе доÑтавлено
- ПроÑмотреть защищенный медиа-файл?
- Ðтот медиа-файл хранитÑÑ Ð² зашифрованной базе данных. К Ñожалению, Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра файла через Ñтороннее приложение, его необходимо временно раÑшифровать и запиÑать на диÑк. Ð’Ñ‹ уверены, что хотите Ñто Ñделать?
+ Защищенный медиа-файл
+ Ðтот медиа-файл хранитÑÑ Ð² зашифрованной базе данных. К Ñожалению, Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра файла через Ñтороннее приложение его необходимо временно раÑшифровать и запиÑать в памÑть. Ð’Ñ‹ уверены, что хотите Ñто Ñделать?
Ошибка: получено уÑтаревшее Ñообщение обмена ключами.
Получено Ñообщение обмена ключами. Ðажмите, чтобы его обработать.
%1$s покинул группу.
@@ -90,12 +89,14 @@
Отправить как незашифрованное MMS?
Данное Ñообщение не будет зашифровано, поÑкольку получатель больше не иÑпользует Signal.\n\nОтправить незащищённое Ñообщение?
Ðе найдено приложение, которое может открыть Ñтот медиа-файл.
+ от %s
+ Ð´Ð»Ñ %s
СброÑить защищённый ÑеанÑ?
Ðто может помочь, еÑли у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ проблемы Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼ в Ñтом разговоре. Ð’Ñе ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ Ñохранены.
СброÑить
Удалить разговор?
- Ðто удалит вÑе ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² Ñтом разговоре.
+ Ð’Ñе ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² Ñтом разговоре будут безвозвратно удалены.
Добавить вложение
Выбрать контакт
ÐапиÑать Ñообщение
@@ -129,22 +130,23 @@
MMS не поддерживаютÑÑ
Сообщение не может быть отправлено, так как ваш оператор не поддерживает MMS.
Выберите контакт
- Разблокировать?
- Ð’Ñ‹ уверены, что хотите разблокировать Ñтот контакт?
+ Разблокировать контакт?
+ Ð’Ñ‹ Ñможете Ñнова получать ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ звонки от Ñтого контакта.
Разблокировать
- Вложение превышает допуÑтимый размер Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ типа ÑообщениÑ, которое Ð’Ñ‹ отправлÑете.
+ Вложение превышает допуÑтимый размер Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ типа ÑообщениÑ, которое вы отправлÑете.
Камера недоÑтупна
Ðевозможно запиÑать аудио!
Ошибка при отправке голоÑового ÑообщениÑ...
+ Ðа вашем уÑтройÑтве не найдено приложение Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтой ÑÑылки.
ПодробноÑти
ТранÑпорт: %1$s\nОтправлено/Получено: %2$s
Отправитель: %1$s\nТранÑпорт: %2$s\nОтправлено: %3$s\nПолучено: %4$s
- - Удалить выбранное Ñообщение?
- - Удалить выбранные ÑообщениÑ?
- - Удалить выбранные ÑообщениÑ?
- - Удалить выбранные ÑообщениÑ?
+ - Удалить Ñообщение?
+ - Удалить ÑообщениÑ?
+ - Удалить ÑообщениÑ?
+ - Удалить ÑообщениÑ?
- Выбранное Ñообщение будет навÑегда удалено.
@@ -152,23 +154,49 @@
- %1$d выбранных Ñообщений будут навÑегда удалены.
- %1$d выбранных Ñообщений будут навÑегда удалены.
- Сохранить на SD-карту?
- УÑпешно!
- Ðевозможно произвеÑти запиÑÑŒ на SD-карту!
+ Сохранить в памÑть?
+
+ - Сохранение Ñтого медиа-файла в памÑть уÑтройÑтва позволит любому приложению иметь к нему доÑтуп.\n\nПродолжить?
+ - Сохранение Ñтих %1$d медиа-файлов в памÑть уÑтройÑтва позволит любому приложению иметь к ним доÑтуп.\n\nПродолжить?
+ - Сохранение Ñтих %1$d медиа-файлов в памÑть уÑтройÑтва позволит любому приложению иметь к ним доÑтуп.\n\nПродолжить?
+ - Сохранение Ñтих %1$d медиа-файлов в памÑть уÑтройÑтва позволит любому приложению иметь к ним доÑтуп.\n\nПродолжить?
+
+
+ - Ошибка при Ñохранении Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² памÑть!
+ - Ошибка при Ñохранении вложений в памÑть!
+ - Ошибка при Ñохранении вложений в памÑть!
+ - Ошибка при Ñохранении вложений в памÑть!
+
+ Файл уÑпешно Ñохранен.
+ Ðевозможно произвеÑти запиÑÑŒ в памÑть!
+
+ - Сохранение вложениÑ
+ - Сохранение %1$d вложений
+ - Сохранение %1$d вложений
+ - Сохранение %1$d вложений
+
+
+ - СохранÑем вложение в памÑть уÑтройÑтва...
+ - СохранÑем %1$d Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² памÑть уÑтройÑтва...
+ - СохранÑем %1$d вложений в памÑть уÑтройÑтва...
+ - СохранÑем %1$d вложений в памÑть уÑтройÑтва...
+
+ Собираем вложениÑ...
Ожидание...
- Данные (Signal)
+ Интернет (Signal)
MMS
SMS
Удаление
УдалÑем ÑообщениÑ...
ПоиÑк...
+ Ðа вашем уÑтройÑтве не уÑтановлен браузер.
- - Удалить выбранный разговор?
- - Удалить выбранные разговоры?
- - Удалить выбранные разговоры?
- - Удалить выбранные разговоры?
+ - Удалить разговор?
+ - Удалить разговоры?
+ - Удалить разговоры?
+ - Удалить разговоры?
- Выбранный разговор будет навÑегда удалён.
@@ -200,7 +228,7 @@
По умолчанию: %s
Ðет
- Только что
+ Только что
%d мин
ОтвÑзать «%s»?
@@ -225,24 +253,29 @@
TextSecure и RedPhone объединилиÑÑŒ в одно приложение: Signal. Ðажмите, чтобы узнать больше.
ÐкÑпорт
- ÐкÑпортировать открытым текÑтом на SD-карту?
- Внимание, ваши ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² Signal будут ÑкÑпортированы на SD-карту в открытом виде.
+ ÐкÑпортировать открытым текÑтом?
+ Внимание, ваши ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² Signal будут ÑкÑпортированы в памÑть уÑтройÑтва в незашифрованном виде.
Отмена
ÐкÑпорт
- ÐкÑпортируем открытый текÑÑ‚ на SD-карту...
- Ðевозможно произвеÑти запиÑÑŒ на SD-карту.
- Ошибка при запиÑи на SD-карту.
- УÑпешно!
+ ÐкÑпортируем открытый текÑÑ‚ в памÑть...
+ Ðевозможно произвеÑти запиÑÑŒ в памÑть.
+ Ошибка при запиÑи в памÑть.
+ ÐкÑпортировано уÑпешно.
ÐеуÑÑ‚Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° ÑоединениÑ!
- Signal не Ñмог зарегиÑтрироватьÑÑ Ð² Ñлужбах Google Play. Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ звонки в Signal отключены. ПожалуйÑта, попробуйте зарегиÑтрироватьÑÑ Ñнова через меню Ðаcтройки > РаÑширенные.
+ Signal не Ñмог зарегиÑтрироватьÑÑ Ð² Ñлужбах Google Play. Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ звонки через Signal отключены. ПожалуйÑта, попробуйте зарегиÑтрироватьÑÑ Ñнова через меню Ðаcтройки > РаÑширенные.
+
+ Ошибка при получении полноразмерного GIF...
+
+ GIF-анимации
+ Стикеры
ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°
Обновить группу
Ðазвание группы
ÐÐ¾Ð²Ð°Ñ MMS-группа
Выбранный контакт не поддерживает Signal-группы, поÑтому Ñта группа будет преобразована в MMS.
- Ð’Ñ‹ не зарегиÑтрированы Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñообщений и звонков в Signal, поÑтому группы Signal отключены. ПожалуйÑта, зарегиÑтрируйтеÑÑŒ через меню ÐаÑтройки > РаÑширенные.
+ Ð’Ñ‹ не зарегиÑтрированы Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ Ñообщений и звонков через Signal, поÑтому Signal-группы отключены. ПожалуйÑта, зарегиÑтрируйтеÑÑŒ через меню ÐаÑтройки > РаÑширенные.
ÐÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° не позволила Ñоздать группу.
Ðужен как минимум один учаÑтник в группе!
Один из учаÑтников имеет неправильный номер. ПожалуйÑта, иÑправьте или удалите Ñтот контакт и попробуйте Ñнова.
@@ -270,29 +303,29 @@
Импортировать из проÑтой резервной копии?
Ð’Ñ‹ ÑобираетеÑÑŒ импортировать ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð· проÑтой резервной копии. ЕÑли вы ранее уже импортировали ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð· Ñтой копии, повторный импорт приведёт к их дублированию.
Импорт
- Импорт открытой резервной копии...
+ Импортируем из проÑтой резервной копии...
ПроÑÑ‚Ð°Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ Ð½Ðµ найдена!
Ошибка при импорте!
Импорт завершён.
ВоÑÑтановление
- ВоÑÑтановление из зашифрованной резервной копии...
+ ВоÑÑтанавливаем из зашифрованной резервной копии...
Ð—Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ Ð½Ðµ найдена!
ВоÑÑтановление завершено.
- Ðажмите и удерживайте, чтобы запиÑать голоÑовое Ñообщение; отпуÑтите, чтобы отправить
+ Ðажмите и держите, чтобы запиÑать голоÑовое Ñообщение; отпуÑтите, чтобы отправить
ПоделитьÑÑ
- Отправить SMS
+ Выбрать контакты
Отмена
ОтправлÑем...
Сердце
ÐŸÑ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ñ‹!
ПриглаÑить в Signal
-
- - Отправить одному другу
- - Отправить %d друзьÑм
- - Отправить %d друзьÑм
- - Отправить %d друзьÑм
+
+ - ОТПРÐВИТЬ SMS 1-МУ ДРУГУ
+ - ОТПРÐВИТЬ SMS %d-М ДРУЗЬЯМ
+ - ОТПРÐВИТЬ SMS %d ДРУЗЬЯМ
+ - ОТПРÐВИТЬ SMS %d ДРУЗЬЯМ
- Отправить 1 SMS-приглашение?
@@ -309,17 +342,17 @@
Ð”Ð»Ñ Ñ€Ð°ÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ QR-кодов требуетÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ Barcode Scanner.
Ðе удалоÑÑŒ отправить
- ÐÐ¾Ð²Ð°Ñ Ð»Ð¸Ñ‡Ð½Ð¾Ñть
+ Ðовый код безопаÑноÑти
Ошибка при Ñохранении MMS!
Ошибка Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº провайдеру MMS...
Ошибка при чтении наÑтроек MMS...
- ВыполнÑетÑÑ Ð·Ð²Ð¾Ð½Ð¾Ðº через Signal
+ Идёт звонок через Signal
Пропущен звонок от %s
Пропущен звонок в Signal
- Ðачинаем звонок в Signal
- ВходÑщий звонок в Signal
+ Ðачинаем звонок через Signal
+ ВходÑщий звонок через Signal
Отклонить
Ответить
Завершить
@@ -327,13 +360,15 @@
MMS-Ñообщение
- Полученное Ñообщение зашифровано Ñтарой верÑией Signal, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ не поддерживаетÑÑ. ПожалуйÑта, попроÑите Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒÑÑ Ð´Ð¾ поÑледней верÑии и заново отправить Ñообщение.
+ Полученное Ñообщение зашифровано в Ñтарой верÑии Signal, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ не поддерживаетÑÑ. ПожалуйÑта, попроÑите Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒÑÑ Ð´Ð¾ поÑледней верÑии и заново отправить Ñообщение.
Вы покинули группу.
Группа обновлена.
%s звонил(а) вам
Вы звонили %s
Пропущен звонок от %s
%s теперь в Signal — Ñкажите «Привет»!
+ Ð’Ñ‹ уÑтановили Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÑ‡ÐµÐ·Ð½Ð¾Ð²ÐµÐ½Ð¸Ñ Ñообщений в %1$s.
+ %1$s уÑтановил(а) Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÑ‡ÐµÐ·Ð½Ð¾Ð²ÐµÐ½Ð¸Ñ Ñообщений в %2$s.
Парольные фразы не Ñовпадают!
ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÑÑ‚Ð°Ñ€Ð°Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð°!
@@ -354,28 +389,33 @@
Ошибка Ñети.
Ðеверный QR-код.
К Ñожалению, у Ð²Ð°Ñ Ñлишком много привÑзанных уÑтройÑтв. Попробуйте отвÑзать некоторые из них.
- К Ñожалению, Ñтот QR-код недейÑтвителен Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ñзки уÑтройÑтва.
+ К Ñожалению, Ñто неправильный QR-код Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ñзки уÑтройÑтва.
ПривÑзать уÑтройÑтво Signal?
Похоже, вы пытаетеÑÑŒ привÑзать уÑтройÑтво Signal, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñторонний Ñканер. Ð”Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ защиты, пожалуйÑта, проÑканируйте код через Signal.
+
+ ИÑчезающие ÑообщениÑ
+ Срок показа Ñообщений не ограничен.
+ СообщениÑ, отправленные и полученные в Ñтом разговоре, иÑчезнут, когда пройдёт %s поÑле их прочтениÑ.
Введите парольную фразу
Иконка Signal
Подтвердить парольную фразу
ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð°!
- УÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Google Play Services не корректно функционирует. ПожалуйÑта, переуÑтановите Google Play Services и попробуйте Ñнова.
+ УÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¡ÐµÑ€Ð²Ð¸Ñов Google Play работает некорректно. ПожалуйÑта, переуÑтановите СервиÑÑ‹ Google Play и попробуйте Ñнова.
Оцените Ñто приложение
ЕÑли вам понравилоÑÑŒ Ñто приложение, вы можете помочь нам, поÑтавив оценку.
Оценить
Ðет, ÑпаÑибо
Позже
+ Похоже, приложение «Play Маркет» не уÑтановлено на вашем уÑтройÑтве.
Заблокировать Ñтот контакт?
- Ð’Ñ‹ больше не будете получать ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ звонки от Ñтого пользователÑ.
+ Ð’Ñ‹ больше не будете получать ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ звонки от Ñтого контакта.
Заблокировать
Разблокировать Ñтот контакт?
- Ð’Ñ‹ уверены, что хотите разблокировать Ñтот контакт?
+ Ð’Ñ‹ Ñнова Ñможете получать ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ звонки от Ñтого контакта.
Разблокировать
Включено
Выключено
@@ -401,7 +441,7 @@
Вызываемый номер не поддерживает защищённые звонки!
ПонÑтно
- Подключение Ñ Signal
+ Подключение к Signal
Выберите Ñтрану
Ðеобходимо указать код Ñтраны
Ðеобходимо указать номер телефона
@@ -429,7 +469,7 @@
Код подтверждениÑ, введённый вами, неверен. ПожалуйÑта, попробуйте ещё раз.
Слишком много попыток
Ð’Ñ‹ Ñлишком много раз вводили неверный код подтверждениÑ. Подождите минуту перед Ñледующей попыткой.
- Запрашиваем звонок
+ Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð·Ð²Ð¾Ð½ÐºÐ°
Запрашиваем входÑщий звонок Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ...
Ошибка Ñервера
Ðа Ñервере возникла ошибка. ПожалуйÑта, попробуйте ещё раз.
@@ -453,9 +493,9 @@
Получено Ñообщение обмена ключами Ð´Ð»Ñ Ð½ÐµÐ²ÐµÑ€Ð½Ð¾Ð¹ верÑии протокола.
- Получено Ñообщение Ñ Ð½ÐµÐ¸Ð·Ð²ÐµÑтным личным ключом. Ðажмите, чтобы обработать и показать его.
- Получены новые, но неизвеÑтные данные о личноÑти. Ðажмите, чтобы проверить.
- Защищённый ÑÐµÐ°Ð½Ñ Ñброшен.
+ Получено Ñообщение Ñ Ð½Ð¾Ð²Ñ‹Ð¼ кодом безопаÑноÑти. Ðажмите, чтобы обработать и отобразить Ñообщение.
+ Ð’Ñ‹ ÑброÑили защищенный ÑеанÑ.
+ %s ÑброÑил(а) защищенный ÑеанÑ.
Дубликат ÑообщениÑ.
Вы покинули группу...
@@ -466,22 +506,14 @@
Пропущен звонок
Медиа-Ñообщение
%s теперь в Signal — Ñкажите «Привет»!
+ Ð’Ñ€ÐµÐ¼Ñ Ð¸ÑÑ‡ÐµÐ·Ð½Ð¾Ð²ÐµÐ½Ð¸Ñ Ñообщений – %s
- У Ð²Ð°Ñ Ð½ÐµÑ‚ личного ключа.
- У Ð¿Ð¾Ð»ÑƒÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ личного ключа.
- У Ð¿Ð¾Ð»ÑƒÑ‡Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ личного ключа!
- Ð’ÐИМÐÐИЕ, проÑканированный ключ ÐЕ СОВПÐДÐЕТ! Внимательно проверьте текÑÑ‚ отпечатка.
- ÐЕ подтверждено!
- Ключ ÑобеÑедника верен. Также необходимо, чтобы ÑобеÑедник подтвердил ваш ключ.
- Подтверждено!
- У Ð²Ð°Ñ Ð½ÐµÑ‚ личного ключа!
-
- У Ð²Ð°Ñ Ð½ÐµÑ‚ личного ключа.
- Ð’ÐИМÐÐИЕ, проÑканированный ключ ÐЕ СОВПÐДÐЕТ!
- ÐЕ подтверждено!
- ПроÑканированный ключ Ñовпадает.
- Подтверждено!
- Отпечаток вашего личного ключа
+ Ðтот контакт иÑпользует более новую верÑию Signal Ñ Ð½ÐµÑовмеÑтимым форматом QR-кода. ПожалуйÑта, обновите приложение Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти Ñверки.
+ ОтÑканированный QR-код Ñодержит неправильно отформатированный код безопаÑноÑти. ПожалуйÑта, попробуйте отÑканировать QR-код ещё раз.
+ ПоделитьÑÑ ÐºÐ¾Ð´Ð¾Ð¼ безопаÑноÑти Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ...
+ Ðаш код безопаÑноÑти Signal...
+ Похоже, что у Ð²Ð°Ñ Ð½ÐµÑ‚ приложений, через которые можно поделитьÑÑ.
+ Коды безопаÑноÑти в буфере обмена не найдены
Игнорировать предыдущий запроÑ?
Отправить
@@ -509,6 +541,8 @@
Идёт импорт
Импорт текÑтовых Ñообщений
+ Импорт завершён
+ Импорт ÑиÑтемной базы данных завершён.
Ðажмите, чтобы открыть.
Ðажмите, чтобы открыть; нажмите на замок, чтобы закрыть.
@@ -523,8 +557,8 @@
Сбой доÑтавки ÑообщениÑ.
Ðе удалоÑÑŒ доÑтавить Ñообщение.
Ошибка при доÑтавке ÑообщениÑ.
- Отметить вÑе как прочитанные
- Отметить прочитанным
+ Ð’ÑÑ‘ прочитано
+ Прочитано
Медиа-Ñообщение
Ответить
@@ -539,7 +573,7 @@
Видео
Контакт
Камера
- МеÑтоположение
+ МеÑто
Ð¡Ñ‚Ð°Ñ€Ð°Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð°
ÐÐ¾Ð²Ð°Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð°
@@ -550,7 +584,7 @@
Ðет контактов.
Загружаем контакты...
- Фото контактов
+ Фото контакта
Выбрать длÑ
@@ -563,15 +597,15 @@
Отправить через Signal
Отправить незащищённое SMS
Отправить незащищённое MMS
+ Через %1$s
Отправить
Удалить
Разговор Ñ %1$s
ÐапиÑание ÑообщениÑ
Клавиатура Ñмайликов
Миниатюра вложениÑ
- Вкл/выкл Ñщик вложений
- ПРОВЕДИТЕ, ЧТОБЫ ОТМЕÐИТЬ
+ ПРОВЕДИТЕ ДЛЯ ОТМЕÐЫ
MMS-Ñообщение загружаетÑÑ
MMS-Ñообщение
@@ -586,6 +620,7 @@
Скачать
Ð¤Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð°
Скачивание
+
Выбрать неÑколько
%s выбрано
@@ -601,11 +636,53 @@
ПривÑзать новое уÑтройÑтво
продолжить
+
+ Выключено
+
+ - 1 Ñекунда
+ - %d Ñекунды
+ - %d Ñекунд
+ - %d Ñек.
+
+ %dÑ
+
+ - 1 минута
+ - %d минуты
+ - %d минут
+ - %d мин.
+
+ %dм
+
+ - 1 чаÑ
+ - %d чаÑа
+ - %d чаÑов
+ - %d чаÑ.
+
+ %dч
+
+ - 1 день
+ - %d днÑ
+ - %d дней
+ - %d дн.
+
+ %dд
+
+ - 1 неделÑ
+ - %d недели
+ - %d недель
+ - %d нед.
+
+ %dн
+
+ Ðайти GIF-анимации и Ñтикеры
+
+ Ðичего не найдено
- Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ доÑтуп к журналу отладки Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ уÑтройÑтва. ВмеÑто Ñтого вы можете иÑпользовать ADB Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ð°.
+ Ðе удаетÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚ÑŒ журнал отладки вашего уÑтройÑтва. Тем не менее, вы можете получить его при помощи ADB.
СпаÑибо за помощь!
Отправка
ОтправлÑем логи на gist...
+ Браузер не уÑтановлен
Хотите ли вы импортировать имеющиеÑÑ Ñ‚ÐµÐºÑтовые ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² зашифрованную базу данных Signal?
CиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð±Ð°Ð·Ð° данных изменена не будет.
@@ -616,7 +693,7 @@
ОбновлÑем базу данных...
ÐкÑпорт проÑтой резервной копии.
- ÐкÑпортировать на SD-карту незашифрованную резервную копию, ÑовмеÑтимую Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼ «SMS Backup & Restore».
+ ÐкÑпортировать в памÑть телефона незашифрованную резервную копию, ÑовмеÑтимую Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼ «SMS Backup & Restore».
Импорт ÑиÑтемной базы SMS
Импортировать ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð· ÑиÑтемного SMS-приложениÑ.
ВоÑÑтановление зашифрованной резервной копии
@@ -650,7 +727,7 @@
Открыть
Приложению Signal необходимо знать наÑтройки MMS вашего Ñотового оператора, чтобы отправлÑть и получать мультимедийные и групповые ÑообщениÑ. Ваше уÑтройÑтво не даёт доÑтупа к Ñтой информации — так иногда бывает, еÑли в телефоне запрещена Ñмена SIM-карты и в некоторых иных ÑлучаÑÑ….
- Чтобы отправлÑть мультимедийные и групповые ÑообщениÑ, нажмите «ОК» и завершите необходимые наÑтройки. ÐаÑтройки MMS вашего оператора обычно можно найти по запроÑу «ваш оператор APN». Ðто нужно Ñделать только один раз.
+ Чтобы отправлÑть мультимедийные и групповые ÑообщениÑ, нажмите «ОК» и введите необходимые наÑтройки. ÐаÑтройки MMS вашего оператора обычно можно найти по запроÑу «ваш оператор APN». Ðто нужно Ñделать только один раз.
ЗÐБЛОКИРОВÐÐ
@@ -661,7 +738,7 @@
Заблокировать
Цвет
Цвет Ð´Ð»Ñ Ñтого контакта
- Подтвердить личноÑть
+ Сверить код безопаÑноÑти
Звонок через Signal
завершить звонок
@@ -731,44 +808,44 @@ SMS-подтверждениÑ...
Проверка
Введите Ð¸Ð¼Ñ Ð¸Ð»Ð¸ номер
- Добавить учаÑтника
-
- ЛичноÑть ÑобеÑедника (он читает):
- Ваша личноÑть (вы читаете):
+ Добавить учаÑтников
+
+ Сканировать
+
+ ПоделитьÑÑ ÐºÐ¾Ð´Ð¾Ð¼ безопаÑноÑти
ЕÑть проблемы, требующие вашего вниманиÑ.
Отправлено
Получено
+ ИÑчезнет
Через
Кому:
От:
- С:
+ ВмеÑте Ñ:
Создать парольную фразу
Введите парольную фразу
Выбрать контакты
Обнаружен Signal
- Публичный ключ
Изменить парольную фразу
- Подтвердить личноÑть
+ Сверить код безопаÑноÑти
Отправить журнал отладки
- ПредпроÑмотр медиа
+ ПредпроÑмотр
Ð’Ñе изображениÑ
Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ %1$s
ПодробноÑти ÑообщениÑ
- Управление привÑзанными уÑтройÑтвами
+ ПривÑзанные уÑтройÑтва
ПриглаÑить друзей в Signal
Ðрхивированные разговоры
Импорт / ÑкÑпорт
- Ваш личный ключ
ИÑпользовать наÑтройку по умолчанию
ИÑпользовать пользовательÑкую наÑтройку
- Выкл. звук на 1 чаÑ
- Выкл. звук на 2 чаÑа
- Выкл. звук на 1 день
- Выкл. звук на 7 дней
- Выкл. звук на 1 год
+ Отключить звук на 1 чаÑ
+ Отключить звук на 2 чаÑа
+ Отключить звук на 1 день
+ Отключить звук на 7 дней
+ Отключить звук на 1 год
ÐаÑтройки по умолчанию
Включено
Отключено
@@ -803,10 +880,10 @@ SMS-подтверждениÑ...
Изменить парольную фразу
Изменить парольную фразу
Включить парольную фразу
- Блокировать Signal и ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ ÑообщениÑÑ… парольной фразой
+ Требовать ввода парольной фразы Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Signal и уведомлений о ÑообщениÑÑ…
Защита Ñкрана
Блокировать Ñнимки Ñкрана внутри приложениÑ
- ÐвтоматичеÑки блокировать Signal поÑле указанного времени бездейÑтвиÑ
+ Повторно требовать ввода парольной фразы поÑле указанного времени бездейÑтвиÑ
ÐŸÐ°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° при бездейÑтвии
Интервал бездейÑтвиÑ
УведомлениÑ
@@ -818,7 +895,7 @@ SMS-подтверждениÑ...
Мигание Ñветодиода
ÐаÑтроить мигание Ñветодиода
Включить на:
- Выключить на
+ Выключить на:
Мигание Ñветодиода наÑтроено!
МелодиÑ
Изменить мелодию уведомлениÑ
@@ -844,10 +921,10 @@ SMS-подтверждениÑ...
Пурпурный
Белый
Ðет
- БыÑтро
- Средне
- Медленно
- ÐаÑтроить...
+ БыÑтрое
+ Среднее
+ Медленное
+ ÐаÑтраиваемое...
РаÑширенные
КонфиденциальноÑть
Клиент MMS
@@ -867,7 +944,7 @@ SMS-подтверждениÑ...
Ограничение длины разговора
Обрезать вÑе разговоры
ПривеÑти длину вÑех разговоров в ÑоответÑтвие Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹
- УÑтройÑтва
+ ПривÑзанные уÑтройÑтва
СветлаÑ
ТёмнаÑ
Внешний вид
@@ -880,6 +957,8 @@ SMS-подтверждениÑ...
СовмеÑтимоÑть Ñ Wi-Fi звонками
Включите, еÑли ваше уÑтройÑтво отправлÑет и принимает SMS и MMS через Wi-Fi (и еÑли Wi-Fi звонки включены)
Заблокированные контакты
+ ОдобрÑть коды безопаÑноÑти
+ Запрашивать одобрение кодов безопаÑноÑти при их изменении
Отображать в уведомлениÑÑ…
Через мобильную Ñеть
Через Wi-Fi
@@ -902,9 +981,9 @@ SMS-подтверждениÑ...
Обновить контакты
- Звонок
+ Позвонить
- Звонок через Signal
+ Позвонить через Signal
ПодробноÑти
Копировать текÑÑ‚
@@ -913,6 +992,10 @@ SMS-подтверждениÑ...
Отправить заново
Сохранить вложение
+
+ ИÑчезающие ÑообщениÑ
+
+ Срок показа Ñообщений иÑтекает
ПриглаÑить
@@ -920,8 +1003,8 @@ SMS-подтверждениÑ...
Удалить выбранное
Выбрать вÑе
- Ðрхивировать выделенное
- Разархивировать выделенное
+ Ðрхивировать выбранное
+ Разархивировать выбранное
ПоиÑк
@@ -931,8 +1014,6 @@ SMS-подтверждениÑ...
Ðовый разговор
- БезопаÑноÑть
- Подтвердить личноÑть
СброÑить защищённый ÑеанÑ
Вкл. звук
@@ -956,6 +1037,8 @@ SMS-подтверждениÑ...
Вещание
Сравнить
+ Показать ваш QR-код
+ Сканировать QR-код контакта
Ðовое Ñообщение
ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°
@@ -964,6 +1047,9 @@ SMS-подтверждениÑ...
Отметить вÑе как прочитанные
ПриглаÑить друзей в Signal
Помощь
+
+ Копировать в буфер обмена
+ Сравнить Ñ Ð±ÑƒÑ„ÐµÑ€Ð¾Ð¼ обмена
Ваша верÑÐ¸Ñ Signal уÑтарела
@@ -998,7 +1084,10 @@ SMS-подтверждениÑ...
Тип медиа-файла не поддерживаетÑÑ
Сохранить
+ ПереÑлать
+ Ð’Ñе изображениÑ
+ Сохранить вÑÑ‘
ПредпроÑмотр
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 6b7a5da5f11..97602da8fe6 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -1,21 +1,24 @@
- Signal
+ LibreSignal
Ãno
Nie
Zmazať
ÄŒakajte prosÃm...
+
+ Nová správa
Aktuálne: %s
Ešte ste si nenastavili heslo!
Zmazať všetky staré správy?
Zmazať
+ Vypnúť heslo?
Vypnúť
Chyba pripojenia na server!
SMS zapnuté
Dotykom sem môžete zmeniť Vašu predvolenú aplikáciu pre SMS.
SMS vypnuté
- Dotykom nastavte Signal ako Vašu predvolenú aplikáciu
+ Dotykom nastavte LibreSignal ako Vašu predvolenú aplikáciu
zapnuté
Zapnuté
vypnuté
@@ -26,6 +29,7 @@
(obrázok)
(zvuk)
(video)
+ (poloha)
Nepodarilo sa nájsÅ¥ aplikáciu pre výber médiÃ.
@@ -35,13 +39,12 @@
Audio
Kontaktné informácie
+ Chyba prehrávania zvuku!
Blokované kontakty
+ Prichádzajúce volanie
- Možno by ste mali overiť
-identitu tohto kontaktu.
-
Potvrdiť
Správa %s
@@ -57,7 +60,13 @@ identitu tohto kontaktu.
Prepnúť na nezabezpeÄené SMS?
Prepnúť na nezabezpeÄené MMS?
Nepodarilo sa nájst aplikáciu schopnú otvoriť tento typ súboru.
+ od %s
+ pre %s
+ ObnoviÅ¥ zabezpeÄené spojenie
+ Reset
+ Vymazať konverzáciu?
+ Toto zmaže natrvalo všetky správy v tejto konverzácii.
PridaÅ¥ prÃlohu
Vyberte kontaktné informácie
Vytvoriť správu
@@ -70,6 +79,11 @@ identitu tohto kontaktu.
ÄŒlenovia skupiny
Skupinová konverzácia
Nepomenovaná skupina
+
+ - 1 Älen
+ - %d Älenov
+ - %d Älenov
+
Uložený koncept
Neplatný prÃjemca
Hovory nie sú podporované
@@ -78,21 +92,31 @@ identitu tohto kontaktu.
Ste si istà že chcete opustiť túto skupinu?
Nezašifrovaná SMS
Nezašifrovaná MMS
- Signal
+ LibreSignal
Chyba pri opúšťanà skupiny...
MMS nie sú podporované
Táto správa nemohla byÅ¥ odoslaná keÄže váš operátor nepodporuje MMS.
ProsÃm vyberte kontakt
- Odblokovať?
- Naozaj chcete odblokovať tento kontakt?
Odblokovať
Kamera je momentálne neprÃstupná
+ Nemôžem zaznamenať zvuk!
+ Chyba pri posielanà zvukovej správy...
Detaily správy
Prenos: %1$s\nodoslané/prijaté: %2$s
Odosielateľ: %1$s\nPrenos: %2$s\nOdoslané: %3$s\nPrijaté: %4$s
+
+ - Zmazať vybranú správu?
+ - Zmazať vybrané správy?
+ - Zmazať vybrané správy?
+
Vytvoriť súbor?
- Operácia úspeÅ¡ne dokonÄená!
+
+ - Nastala chyba pri ukladanà prÃlohy na dátové úložisko zariadenia!
+ - Nastala chyba pri ukladanà prÃloh na dátové úložisko zariadenia!
+ - Nastala chyba pri ukladanà prÃloh na dátové úložisko zariadenia!
+
+ Súbor úspešne uložený.
Aplikácia nedokázala zapÃsaÅ¥ informácie na dátové úložisko zariadenia!
Čaká na spracovanie...
MMS
@@ -111,7 +135,6 @@ identitu tohto kontaktu.
PoužÃva sa predvolené: %s
Žiadna
- Teraz
%d min
@@ -122,8 +145,9 @@ identitu tohto kontaktu.
Export
Zrušiť
Export
- Úspech!
+
+
Nová skupina
Aktualizuj skupinu
@@ -168,7 +192,6 @@ opätovným importom zduplikujete správy.
NainÅ¡talovaÅ¥ ÄÃtaÄku Äiarových kódov?
Nepodarilo sa odoslať
- Nová identita
Chyba pri ukladanà MMS!
Chyba spojenia s poskytovateľom MMS...
@@ -192,6 +215,7 @@ opätovným importom zduplikujete správy.
Nebolo nájdené žiadne zariadenie!
Chyba siete.
Neplatný QR kód.
+
Zadajte heslo
Odošli heslo
@@ -205,7 +229,6 @@ opätovným importom zduplikujete správy.
Nie Äakujem
Neskôr
- Naozaj chcete odblokovať tento kontakt?
Odblokovať
@@ -261,26 +284,11 @@ vzájomnej výmeny kľúÄov.
Bola prijatá správa vzájomnej výmeny kľúÄov s neplatnou verziou protokolu.
- Bola prijatá aktualizované, ale neznáme identifikaÄné údaje. Dotykom potvrdÃte idenitu.
Zduplikuj správu.
Opustil skupinu...
RozpÃsaná správa:
- Nemáte kÄ¾ÃºÄ totožnosti.
- PrÃjemca nemá kÄ¾ÃºÄ totožnosti.
- PrÃjemca nemá kÄ¾ÃºÄ totožnosti!
- POZOR, scannovaný kÄ¾ÃºÄ sa NEZHODUJE! Dôsledne skontrolujte text odtlaÄku.
- NIE JE verifikované!
- Ich kÄ¾ÃºÄ je v poriadku. Je tiež potrebné daÅ¥ druhej strane verifikovaÅ¥ váš kľúÄ.
- Verifikované!
- Nemáte kÄ¾ÃºÄ totožnosti!
-
- Nemáte kÄ¾ÃºÄ totožnosti.
- POZOR, scannovaný kÄ¾ÃºÄ sa NEZHODUJE!
- NIE JE overené!
- Scannovaný kÄ¾ÃºÄ sa zhoduje!
- Verifikované!
ZaÄaÅ¥ aj napriek existujúcemu požiadavku?
Odošli
@@ -360,6 +368,7 @@ Bola prijatá správa vzájomnej výmeny kľúÄov s neplatnou verziou protokolu
Stiahnuť
Fotografia kontaktu
SÅ¥ahujem
+
Mód hromadného výberu
%s vybraných
@@ -370,6 +379,10 @@ Bola prijatá správa vzájomnej výmeny kľúÄov s neplatnou verziou protokolu
+
+ Vypnuté
+
+
ÄŽakujem za tvoju pomoc!
Posielanie
@@ -453,10 +466,8 @@ zlyhalo.
Kontrola
Vlož meno alebo ÄÃslo
- PridaÅ¥ Älena
-
- Ich totožnosť (oni vidia):
- VaÅ¡a totožnosÅ¥ (vy vidÃte):
+
+
Isté problémy vyžadujú Vašu pozornosť.
Odoslané
@@ -469,9 +480,7 @@ zlyhalo.
Vytvor heslo
Zadaj heslo
Vyber kontakty
- KÄ¾ÃºÄ verejnej totožnosti
Zmeň heslo
- Over totožnosť
Všetky obrázky
Všetky obrázky s %1$s
@@ -581,6 +590,8 @@ zlyhalo.
Prepošli správu
UložiÅ¥ prÃlohu
+
+
Pozvať
@@ -596,8 +607,6 @@ zlyhalo.
Nová konverzácia
- BezpeÄnosÅ¥
- Over totožnosť
ObnoviÅ¥ zabezpeÄené spojenie
Nahlas
@@ -626,8 +635,9 @@ zlyhalo.
Nastavenia
Zamkni
OznaÄ vÅ¡etky preÄÃtané
+
- ŤuknutÃm nastavte Signal ako VaÅ¡u predvolenú SMS aplikáciu.
+ ŤuknutÃm nastavte LibreSignal ako VaÅ¡u predvolenú SMS aplikáciu.
Vy
Nepodarilo sa zobraziť náhľad pre tento obrázok
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 8078f9f97a5..d900957f5e0 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -5,6 +5,8 @@
Ne
Izbriši
PoÄakajte...
+
+ Novo sporoÄilo
Trenutno: %s
Niste še nastavili gesla!
@@ -68,8 +70,8 @@
Dohodni klic
- Identifikacijski podpis osebe %1$s je bil spremenjen. To lahko pomeni, da nekdo prestreza komunikacijo, ali pa, da je oseba %2$s ponovno namestila Signal in ima zdaj nov identifikacijski kljuÄ.
- Morda bi želeli preveriti ta stik.
+ Varnostno število z uporabnikom %1$s je bilo spremenjeno. To lahko pomeni, da poskuša nekdo prestrezati vajino komunikacijo ali pa je %2$s zgolj ponovno namestil aplikacijo Signal.
+ Morda bi želeli preveriti vajino skupno varnostno število.
Sprejmi
SporoÄilo %s
@@ -96,7 +98,7 @@
To lahko pomaga pri težavah s Å¡ifriranjem med pogovorom. VaÅ¡a sporoÄila bodo ohranjena.
Ponastavi
Izbrišem pogovor?
- To bo nepovratno izbrisalo vsa sporoÄila tega pogovora.
+ S tem boste nepovratno izbrisali vsa sporoÄila tega pogovora.
Dodaj priponko
Izberi podatke o stiku
Sestavi sporoÄilo
@@ -130,13 +132,14 @@
SporoÄila MMS niso podprta
To sporoÄilo ne more biti poslano, ker vaÅ¡ mobilni ponudnik ne podpira sporoÄil MMS.
Prosimo, izberite stik
- Odblokiram?
- Ste prepriÄani, da želite odblokirati ta stik?
+ Odblokiram ta stik?
+ Zopet boste lahko prejemali sporoÄila in klice tega uporabnika.
Odblokiraj
Velikost priponke presega omejitev velikosti za ta tip sporoÄil.
Kamera ni na voljo
Snemanje zvoka ni mogoÄe!
Napaka pri poÅ¡iljanju glasovnega sporoÄila...
+ Na vaÅ¡i napravi nimate nameÅ¡Äene aplikacije, ki bi odpirala to povezavo.
Podrobnosti sporoÄila
NaÄin prenosa: %1$s\nPoslano/Prejeto: %2$s
@@ -148,17 +151,17 @@
- IzbriÅ¡em izbrana sporoÄila?
- - To bo nepovratno izbrisalo izbrano sporoÄilo.
- - To bo nepovratno izbrisalo %1$d izbrani sporoÄili.
- - To bo nepovratno izbrisalo vsa %1$d izbrana sporoÄila.
- - To bo nepovratno izbrisalo vseh %1$d izbranih sporoÄil.
+ - S tem boste nepovratno izbrisali izbrano sporoÄilo.
+ - S tem boste nepovratno izbrisali %1$d izbrani sporoÄili.
+ - S tem boste nepovratno izbrisali vsa %1$d izbrana sporoÄila.
+ - S tem boste nepovratno izbrisali vseh %1$d izbranih sporoÄil.
- Spravim v sistemsko shrambo?
+ Shranim v sistemsko shrambo?
- - Shranitev datoteke v sistemsko shrambo bo omogoÄilo vsaki aplikaciji na vaÅ¡i napravi dostop do njih.\n\nNadaljujem?
- - Shranitev datotek (%1$d) v sistemsko shrambo bo omogoÄilo vsaki aplikaciji na vaÅ¡i napravi dostop do njih.\n\nNadaljujem?
- - Shranitev vseh %1$d datotek v sistemsko shrambo bo omogoÄilo vsaki aplikaciji na vaÅ¡i napravi dostop do njih.\n\nNadaljujem?
- - Shranitev vseh %1$d datotek v sistemsko shrambo bo omogoÄilo vsaki aplikaciji na vaÅ¡i napravi dostop do njih.\n\nNadaljujem?
+ - Shranitev datoteke v sistemsko shrambo bo omogoÄila dostop do nje vsaki aplikaciji na vaÅ¡i napravi.\n\nNadaljujem?
+ - Shranitev datotek (%1$d) v sistemsko shrambo bo omogoÄila dostop do njiju vsaki aplikaciji na vaÅ¡i napravi.\n\nNadaljujem?
+ - Shranitev vseh %1$d datotek v sistemsko shrambo bo omogoÄila dostop do njih vsaki aplikaciji na vaÅ¡i napravi.\n\nNadaljujem?
+ - Shranitev vseh %1$d datotek v sistemsko shrambo bo omogoÄila dostop do njih vsaki aplikaciji na vaÅ¡i napravi.\n\nNadaljujem?
- Napaka pri shranjevanju priponke v shrambo!
@@ -166,7 +169,7 @@
- Napaka pri shranjevanju priponk v shrambo!
- Napaka pri shranjevanju priponk v shrambo!
- Uspešno opravljeno!
+ Datoteka je bila uspešno shranjena.
Ne morem shranjevati v sistemsko shrambo!
- Shranjujem priponko
@@ -189,6 +192,7 @@
BriÅ¡em sporoÄila...
Iskanje...
+ Na vaÅ¡i napravi nimate nameÅ¡Äenega spletnega brskalnika.
- Izbrišem izbran pogovor?
@@ -197,10 +201,10 @@
- Izbrišem izbrane pogovore?
- - To bo nepovratno izbrisalo izbrani pogovor.
- - To bo nepovratno izbrisalo %1$d izbrana pogovora.
- - To bo nepovratno izbrisalo vse %1$d izbrane pogovore.
- - To bo nepovratno izbrisalo vseh %1$d izbranih pogovorov.
+ - S tem boste nepovratno izbrisali izbrani pogovor.
+ - S tem boste nepovratno izbrisali %1$d izbrana pogovora.
+ - S tem boste nepovratno izbrisali vse %1$d izbrane pogovore.
+ - S tem boste nepovratno izbrisali vseh %1$d izbranih pogovorov.
Brisanje
Brišem izbrane pogovore...
@@ -226,7 +230,7 @@
Prednastavljeno: %s
Brez
- Ravnokar
+ Pravkar
%d min
Odstranim \'%s\'?
@@ -258,10 +262,15 @@
Izvažam nešifrirano vsebino...
Napaka - ne morem shranjevati v sistemsko shrambo!
Napaka pri zapisovanju.
- Uspešno opravljeno!
+ Izvoz je bil uspešno opravljen.
Trajna okvara pri komunikaciji aplikacije Signal!
Registracija z Google Play Services ni bila uspešna. Podatkovna komunikacija je izklopljena, prosimo poskusite s ponovno registracijo v meniju Nastavive > Napredno.
+
+ Napaka pri iskanju GIF-ov v polni resoluciji...
+
+ GIF-i
+ Nalepke
Nova skupina
Posodobi skupino
@@ -308,17 +317,17 @@ Uvoz iz Å¡ifrirane varnostne kopije bo popolnoma nadomestil obstojeÄe kljuÄe,
Za snemanje glasovnega sporoÄila se dotaknite in držite, za poÅ¡iljanje spustite
Deli
- Pošlji SMS
+ Izberi stike
PrekliÄi
Pošiljam...
Srce
Vabilo je bilo poslano!
Povabi k uporabi
-
- - POÅ LJI PRIJATELJU
- - POÅ LJI %d PRIJATELJEMA
- - POÅ LJI %d PRIJATELJEM
- - POÅ LJI %d PRIJATELJEM
+
+ - POÅ LJI SMS 1 PRIJATELJU
+ - POÅ LJI SMS %d PRIJATELJEMA
+ - POÅ LJI SMS %d PRIJATELJEM
+ - POÅ LJI SMS %d PRIJATELJEM
- Pošljem povabilo SMS?
@@ -335,7 +344,7 @@ Uvoz iz Å¡ifrirane varnostne kopije bo popolnoma nadomestil obstojeÄe kljuÄe,
Signal potrebuje aplikacijo Barcode Scanner za branje kod QR.
Pošiljanje ni uspelo
- Nova identiteta
+ Novo varnostno število
Napaka pri shranjevanju MMS sporoÄila!
Napaka pri povezavi s ponudnikom MMS...
@@ -360,6 +369,9 @@ Uvoz iz Å¡ifrirane varnostne kopije bo popolnoma nadomestil obstojeÄe kljuÄe,
Klicali ste: %s
Neodgovorjen klic: %s
%s uporablja Signal, pozdravite ga!
+ ÄŒas poteka sporoÄila ste nastavili na %1$s.
+ Oseba %1$s je nastavila Äas poteka sporoÄila na %2$s
+ Varnostno število z uporabnikom %s je bilo spremenjeno.
Gesli se ne ujemata
NapaÄno staro geslo!
@@ -383,6 +395,10 @@ Uvoz iz Å¡ifrirane varnostne kopije bo popolnoma nadomestil obstojeÄe kljuÄe,
Koda QR za povezavo naprav ni veljavna.
Povežem z napravo Signal?
Izgleda, da želite za povzavo z napravo Signal uporabiti zunanji optiÄni Äitalnik. Prosimo, da storite to znotraj aplikacije Signal, saj je tako najvarneje.
+
+ IzginjajoÄa sporoÄila
+ VaÅ¡a sporoÄila ne bodo potekla.
+ SporoÄila, poslana ali prejeta v tem pogovoru, bodo izginila %s po ogledu.
Vnesite geslo
Ikona Signal
@@ -396,12 +412,13 @@ Uvoz iz Å¡ifrirane varnostne kopije bo popolnoma nadomestil obstojeÄe kljuÄe,
Oceni zdaj!
Ne, hvala!
Kasneje
+ Opa! Trgovina Google Play ni nameÅ¡Äena na vaÅ¡i napravi.
Blokiram ta stik?
- SporoÄil in klicev tega uporabnika ne boste veÄ prejemali.
+ SporoÄil in klicev tega uporabnika ne boste veÄ prejemali.
Blokiraj
Odblokiram ta stik?
- Ste prepriÄani, da želite odblokirati ta stik?
+ Zopet boste lahko prejemali sporoÄila in klice tega uporabnika.
Odblokiraj
Vklopljeno
Izklopljeno
@@ -436,13 +453,13 @@ Uvoz iz Å¡ifrirane varnostne kopije bo popolnoma nadomestil obstojeÄe kljuÄe,
Nepodprto
VaÅ¡a naprava žal ne podpira podatkovnih sporoÄil. Naprave z Androidom razliÄice starejÅ¡e od 4.0 morajo imeti registriran Googlov raÄun. Naprave z Androidom razliÄice 4.0 ali veÄ ne potrebujejo raÄuna Google, vendar morajo imeti nameÅ¡Äeno aplikacijo Play Store.
-Preverite, Äe je to zares vaÅ¡a telefonska Å¡tevilka! Overili jo bomo s sporoÄilom SMS.
+Preverite, Äe je to zares vaÅ¡a telefonska Å¡tevilka! Potrdili jo bomo s sporoÄilom SMS.
Nadaljuj
Uredi
Možni vzroki
- Preverjam številko
+ Potrjujem številko
Uredi %s
Registracija je konÄana!
Najprej morate vnesti kodo, ki ste jo prejeli...
@@ -476,9 +493,9 @@ Preverite, Äe je to zares vaÅ¡a telefonska Å¡tevilka! Overili jo bomo s sporoÄ
sporoÄilo za izmenjavo kljuÄev!
Prejeto sporoÄilo za izmenjavo kljuÄev za napaÄno razliÄico protokola.
- Prejeto sporoÄilo z neznanim identifikacijskim kljuÄem. Kliknite za obdelavo in prikaz.
- Prejet je bil nadgrajen identifikacijski kljuÄ neznanega stika. Tapnite za potrditev istovetnosti.
- Varna seja ponastavljena.
+ Prejeto je bilo sporoÄilo z novim varnostnim Å¡tevilom. Tapnite za vpogled in potrditev.
+ Ponastavili ste varno sejo.
+ Oseba %s je ponastavila varno sejo.
Podvojeno sporoÄilo.
Zapustili ste skupino...
@@ -489,26 +506,16 @@ Prejeto sporoÄilo za izmenjavo kljuÄev za napaÄno razliÄico protokola.Neodgovorjen klic
VeÄpredstavno sporoÄilo
%s uporablja Signal, pozdravite ga!
+ ÄŒas poteka sporoÄila je nastavljen na %s
+ Varnostno število z uporabnikom %s je bilo spremenjeno.
- Nimate identifikacijskega kljuÄa.
- Prejemnik nima identifikacijskega kljuÄa.
- Prejemnik nima identifikacijskega kljuÄa!
- Skeniraj kodo QR stika
- Prikaži mojo kodo QR
- POZOR, skenirani kljuÄ SE NE UJEMA! Pazljivo preverite tekst prstnega odtisa.
- NEOVERJENO!
- KljuÄ stika je pravilen. Tudi vaÅ¡ kljuÄ mora biti potrjen iz njegove strani.
- Preverjeno!
- Nimate identifikacijskega kljuÄa!
-
- Nimate identifikacijskega kljuÄa.
- Skeniraj kodo QR stika
- Prikaži mojo kodo QR
- POZOR, skeniran kljuÄ se NE UJEMA!
- NI preverjena!
- Skeniran kljuÄ se ujema!
- Preverjen!
- Moja identifikacija
+ VaÅ¡ partner uporablja zastarelo razliÄico aplikacije Signal. Za pregled in potrditev varnostnega Å¡tevila jo bo moral nadgraditi.
+ VaÅ¡ partner uporablja novejÅ¡o razliÄico aplikacije Signal z nekompatibilnimi kodami QR. Prosimo nadgradite svojo aplikacijo.
+ Skenirana koda QR ne vsebuje pravilno formatirane informacije z varnostnim številom. Poskusite znova.
+ Deli varnostno število preko...
+ Skupno varnostno število:
+ Kaže, da nimate nameÅ¡Äene nobene primerne aplikacije.
+ Iz odložiÅ¡Äa ni bilo mogoÄe pridobiti nobenega varnostnega Å¡tevila za primerjavo
ZaÄnem kljub že poslani zahtevi?
Pošlji
@@ -536,8 +543,8 @@ Prejeto sporoÄilo za izmenjavo kljuÄev za napaÄno razliÄico protokola.
Uvoz v teku
Uvažam kratka sporoÄila
- Uvažanje konÄano
- Uvažanje sistemske zbirke v aplikacijo Signal je konÄano.
+ Uvažanje dokonÄano
+ Uvoz iz sistemske zbirke je konÄan.
Kliknite za odprtje.
Kliknite za odprtje, za zaprtje kliknite kljuÄavnico.
@@ -564,11 +571,20 @@ Prejeto sporoÄilo za izmenjavo kljuÄev za napaÄno razliÄico protokola.Novo sporoÄilo
Slika
+ Slika
Zvok
+ Zvok
Video
+ Video
Stik
+ Stik
Kamera
+ Kamera
Lokacija
+ Lokacija
+ GIF
+ Gif
+ Vklopi poteznik za priponke
Staro geslo
Novo geslo
@@ -592,13 +608,16 @@ Prejeto sporoÄilo za izmenjavo kljuÄev za napaÄno razliÄico protokola.PoÅ¡lji sporoÄilo Signal
Pošlji nezavarovan SMS
Pošlji nezavarovan MMS
+ Od %1$s
Pošlji
Odstrani
Pogovor: %1$s
Sestavljanje sporoÄila
Vklop tipkovnice emoji
Predogledna sliÄica priponke
- Vklopi poteznik za priponke
+ Vklopi hitri poteznik za video priponke
+ Posnemi in pošlji glasovno priponko
+ OmogoÄi uporabo sporoÄil SMS
ZA PREKINITEV PODRSAJTE
@@ -615,6 +634,10 @@ Prejeto sporoÄilo za izmenjavo kljuÄev za napaÄno razliÄico protokola.Prenos
Fotografija stika
Prenašam
+
+ Igraj
+ Pavza
+ Prenesi
Skupinski naÄin izbire
Izbranih: %s
@@ -630,11 +653,53 @@ Prejeto sporoÄilo za izmenjavo kljuÄev za napaÄno razliÄico protokola.Poveži z novo napravo
nadaljuj
+
+ Izklopljeno
+
+ - 1 sekunda
+ - %d sekundi
+ - %d sekunde
+ - %d sekund
+
+ %ds
+
+ - 1 minuta
+ - %d minuti
+ - %d minute
+ - %d minut
+
+ %dm
+
+ - 1 ura
+ - %d uri
+ - %d ure
+ - %d ur
+
+ %dh
+
+ - 1 dan
+ - %d dni
+ - %d dneve
+ - %d dni
+
+ %dd
+
+ - 1 teden
+ - %d tedna
+ - %d tedne
+ - %d tednov
+
+ %dt
+
+ Iskanje po GIF-ih in nalepkah
+
+ NiÄ ni bilo najdeno
Sistemski dnevnik vaše naprave ni dostopen. Za oddajo sistemske zabeležbe lahko uporabite ADB.
Hvala za pomoÄ!
Oddajam
Pošiljam sistemske zabeležbe na Gist...
+ Ni nameÅ¡Äenega brskalnika
Želite uvoziti vaÅ¡a obstojeÄa sporoÄila SMS v Å¡ifrirano zbirko aplikacije Signal?
Osnovna SMS podatkovna zbirka bo ostala nespremenjena.
@@ -645,19 +710,19 @@ Prejeto sporoÄilo za izmenjavo kljuÄev za napaÄno razliÄico protokola.
Posodabljam zbirko...
Izvoz nešifrirane varnostne kopije
- Izvozi nešifrirano varnostno kopijo združljivo s sistemskimi varnostnimi kopijami SMS v sistemsko shrambo.
+ Izvoz nešifrirane varnostne kopije, združljive s sistemskimi varnostnimi kopijami SMS, v sistemsko shrambo.
Uvoz iz sistemske zbirke sporoÄil SMS
- Uvozi zbirko sporoÄil iz sistemsko privzete aplikacije SMS.
+ Uvoz zbirke sporoÄil iz sistemsko privzete aplikacije SMS.
Uvoz iz šifrirane varnostne kopije
- Obnovi podatke iz predhodno ustvarjene šifrirane varnostne kopije Signal.
+ Obnova podatkov iz predhodno ustvarjene šifrirane varnostne kopije Signal.
Uvoz iz nešifrirane varnostne kopije
- Uvozi iz datoteke z neÅ¡ifrirano varnostno kopijo. Združljivo s sistemskimi varnostnimi kopijami sporoÄil SMS.
+ Uvoz iz datoteke z neÅ¡ifrirano varnostno kopijo. Združljivo s sistemskimi varnostnimi kopijami sporoÄil SMS.
Celoten pogovor
Brez slik
- OVERI
+ POTRDI
PONOVNO POÅ LJI
Za vaÅ¡ telefon je potreben roÄen vnos nastavitev MMS.
@@ -690,7 +755,7 @@ Prejeto sporoÄilo za izmenjavo kljuÄev za napaÄno razliÄico protokola.Blokiraj
Barva
Barva stika
- Overi identiteto
+ Preverjanje istovetnosti
Klic Signal
zakljuÄi klic
@@ -722,9 +787,9 @@ Aplikacija Signal ne bo delovala s telefonskimi številkami Google Voice.
Glasovna verifikacija
-Za preverbo vaÅ¡e telefonske Å¡tevilke vas Signal lahko tudi pokliÄe. Kliknite \'PokliÄi me\'
+Za potrditev vaÅ¡e telefonske Å¡tevilke vas Signal lahko tudi pokliÄe. Kliknite \'PokliÄi me\'
in spodaj vnesite šetmestno kodo, ki jo boste zaslišali.
- Preveri
+ Potrdi
PokliÄi me
Uredi številko
Napaka v povezavi.
@@ -738,7 +803,7 @@ z omrežjem.
Če ste povezani z Wi-Fi, je možno, da je vašo povazavo blokira požarni zid. Poskusite z drugim Wi-Fi ali mobilnim omrežjem.
-Aplikacija Signal bo avtomatsko preverila vaÅ¡o telefonsko Å¡tevilko s potrditvenim sporoÄilom SMS.
+Aplikacija Signal bo avtomatsko potrdila vaÅ¡o telefonsko Å¡tevilko s sporoÄilom SMS.
Povezujem...
ÄŒakam na SMS
potrditev...
@@ -754,14 +819,17 @@ bila uspešna.
Preveri
Vnesite ime ali številko
- Dodaj Älana
-
- Istovetnost stika (prebere on):
- Moja istovetnost (preberem jaz):
+ Dodaj Älane
+
+ VeÄ o potrjevanju varnostnih Å¡tevil]]>
+ Tapnite za skeniranje
+
+ Deli varnostno število
Prišlo je do težav, ki zahtevajo vašo pozornost.
Poslano:
Prejeto:
+ Izgine
NaÄin:
Za:
Pošiljatelj:
@@ -771,20 +839,18 @@ bila uspešna.
Vnesite geslo
Izberite naslovnike
Signal zaznan
- Javni identifikacijski kljuÄ
Zamenjava gesla
- Overi identiteto
+ Preverjanje istovetnosti
Oddaj sistemsko zabeležbo
Ogled medija
Vse slike
Vse slike z %1$s
Podrobnosti sporoÄila
- Upravljanje povezanih naprav
+ Povezane naprave
Povabi prijatelje
Arhivirani pogovori
Uvoz/izvoz
- Moj identifikacijski kljuÄ
Uporabi prednastavljeno
Uporabi izbirno
Utišaj za 1 uro
@@ -882,15 +948,15 @@ bila uspešna.
Vrata posredniškega strežnika MMS
Uporabniško ime MMSC
Geslo MMSC
- Potrdila o dostavi SMS
- Zahtevaj potrdilo o dostavi za vsako poslano sporoÄilo SMS
+ Potrdila o prejemu SMS
+ Zahteva potrdilo o prejemu za vsako poslano sporoÄilo SMS
Samodejen izbris starih sporoÄil, ko pogovor preseže doloÄeno dolžino
Samodejen izbris
Pogovori in multimedija
Omejitev dolžine pogovorov
Obreži vse pogovore zdaj
PreiÅ¡Äi vse pogovore in uveljavi omejitve njihove dolžine
- Naprave
+ Povezane naprave
Svetla
Temna
Izgled
@@ -903,6 +969,8 @@ bila uspešna.
Združljivostni naÄin \'Klicanje WiFi\'
Aktivirajte, Äe dostava SMS/MMS sporoÄil na vaÅ¡i napravi poteka preko povezave WiFi (samo, Äe imate vklopljeno \'WiFi klicanje/WiFi Calling)
Blokirani stiki
+ Potrditev varnostnih števil
+ Zahteva potrditev varnostnih Å¡tevil, Äe se ta spremenijo
Prikazano v obvestilu
Ob uporabi mobilnega omrežja
Ob uporabi omrežja Wi-Fi
@@ -936,6 +1004,10 @@ bila uspešna.
Ponovno poÅ¡lji sporoÄilo
Shrani priponko
+
+ IzginjajoÄa sporoÄila
+
+ SporoÄila, ki bodo potekla
Povabi
@@ -954,8 +1026,6 @@ bila uspešna.
Nov pogovor
- Varnost
- Overi identiteto
Ponastavi varno sejo
PrekliÄi utiÅ¡anje
@@ -989,6 +1059,9 @@ bila uspešna.
OznaÄi vse kot prebrano
Povabi prijatelje
PomoÄ
+
+ Kopiraj v odložiÅ¡Äe
+ Primerjaj preko odložiÅ¡Äa
VaÅ¡a razliÄica aplikacije Signal je zastarela
@@ -1023,6 +1096,8 @@ bila uspešna.
Nepodprt medij
Shrani
+ Naprej
+ Vse slike
Shrani vse
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
new file mode 100644
index 00000000000..b1f1ec2aacc
--- /dev/null
+++ b/res/values-sq/strings.xml
@@ -0,0 +1,1062 @@
+
+
+ Signal
+ Po
+ Jo
+ Fshije
+ Të lutem prit...
+
+ Mesazh i ri
+
+ Në këtë moment: %s
+ Nuk ke vendosur akoma një fjalëkalim!
+
+ - 1 mesazh për bisedë
+ - %d mesazhe për bisedë
+
+ Fshij të gjitha mesazhet e vjetra tani?
+
+ - Kjo do të shkurtojë të gjitha bisedat deri te mesazhi i fundit i çdo bisede.
+ - Kjo do të shkurtojë të gjitha bisedat në %d mesazhet e fundita.
+
+ Fshije
+ Shkyç fjalëkalimin?
+ Kjo do të hap përherë Signal-in dhe njoftimet e porosive.
+ Çaktivizo
+ Duke u çregjistruar
+ Duke u çregjistruar nga mesazhet dhe thirrjet përmes Signal-it...
+ Çaktivizo mesazhet dhe thirrjet përmes Signal-it?
+ Çaktivizo mesazhet dhe thirrjet përmes Signal-it duke u çregjistruar nga serveri. Për t\'i perdorur ato serish në të ardhmen, do të ju nevojitet që ta ri-regjistroni numrin tuaj të telefonit.
+ Gabim në lidhjen me serverin!
+ SMS është aktivizuar
+ Prek për të ndryshuar epin për SMS të parazgjedhur
+ SMS është çaktivizuar
+ Prek për të bërë Signal-in epin tënd SMS të parazgjedhur
+ aktivizuar
+ Aktivizuar
+ çaktivizuar
+ Çaktivizuar
+ SMS %1$s, MMS %2$s
+ Fjalëkalimi %1$s, Siguria e ekranit %2$s
+ Tema %1$s, Gjuha %2$s
+
+
+ - 1 minut
+ - %d minuta
+
+
+ (imazh)
+ (audio)
+ (video)
+ (lokacioni)
+
+ Nuk mund të gjëndet një ep për të përzgjedhur median.
+
+ Kamera
+ Foto
+ Video
+ Audio
+ Informacion mbi kontaktin
+
+ Gabim në luajtjën e audios!
+
+ Kontaktet e bllokuara
+
+ Thirrje hyrëse
+
+ Prano
+
+ Mesazh %s
+ Thirrje përmes Signal %s
+
+ Madhësia e mesazhit: %d KB
+ Skadon: %s
+ Nuk u dërgua
+ Shiko medium të sigurt?
+ Kjo media është ruajtur në bazë të enkriptuar të të dhënave. Fatkeqësisht, për ta hapur me një aplikacion të jashtëm, duhet që të dhënat të dekriptohen dhe të shkruhen në memorje. A jeni të sigurt se e dëshironi këtë?
+ Gabim, u pranua mesazh me çelës të shkëmbyer të ndenjur.
+ U pranua mesazh për shkëmbim çelsash, shtyp për të procesuar.
+ %1$s e ka lënë grupin.
+ Shtypni për më shumë detaje
+ Shtypni për alternativë të pasigurtë
+ Kthehu në SMS jo të enkriptuar
+ Zbrapsje në MMS të pakritptuar?
+ Ky mesazh nuk do të jetë i enkriptuar pasi që pranuesi nuk është më perdorues i Signal-it.\n\nDërgo mesazh të pasiguruar?
+ Nuk mund të gjëndet një ep që mund ta hapë mediumin.
+ nga %s
+ te %s
+
+ Reseto sesionin e sigurt?
+ Kjo mund të ndihmojë në qoftë se keni probleme me enkriptimin në këtë bisedë. Mesazhet tuaja do të ruhen.
+ Reseto
+ Fshij bisedën?
+ Kjo do të fshijë përgjithmonë të gjitha porositë në këtë bisedë.
+ Shto bashkëngjitje
+ Përzgjedh informacionin e kontaktit
+ Krijo mesazh
+ Na vjen keq, kishte një gabim në vendosjen e shtojcës suaj.
+ Gifin zë përzgjodhët është shumë i madh!
+ Videoja e përzgjedhur i tejkalon limitet për madhesinë e mesazheve (%1$skB)..
+ Audioja e përzgjedhur i tejkalon limitet për madhesinë e mesazheve (%1$skB).
+ Pranuesi nuk është një SMS ose adresë emaili i vlefshëm!
+ Mesazhi është i zbrazët!
+ Anëtarët e grupit
+ Bisedë në grup
+ Grup i paemruar
+
+ - 1 anëtar
+ - %d anëtarë
+
+ U ruajt drafti
+ Marrës jovalid!
+ Thirrjet nuk mbështetën
+ Kjo paisje nuk mbështet thirje.
+ Largohu nga grupi?
+ A jeni të sigurt që dëshironi të largoheni nga grupi?
+ SMS i pasigurët
+ MMS i pasigurtë
+ Signal
+ Të kalojmë në Signal %1$s
+ Ta përdorim këtë për të biseduar: %1$s
+ Gabim në lënjën e grupit...
+ MMS nuk mbështetet
+ Kjo porosi nuk mund të dërgohet pasiqë operatori yt nuk mbështetë MMS.
+ Përzgjedhni një kontakt
+ Zhblloko këtë kontakt?
+ Tani mund sërish të pranoni mesazhe dhe telefonata nga ky kontakt.
+ Zhblloko
+ Shtojca e tejkalon limitin për madhësinë e mesazhit që po e dërgoni.
+ Kamera nuk është në dispozicion
+ E pamundur të regjistrohet zë!
+ Gabim në dërgimin e porosisë zanore...
+ Nuk ekziston aplikacion në celularin tuaj që mund ta procesojë këtë.
+
+ Hollësitë e mesazhit
+ Transportur me: %1$s\nDërguar/Pranuar: %2$s
+ Dërguesi: %1$s\nTransportur me: %2$s\nNisur: %3$s\nMarrë: %4$s
+
+ - Fshij porosinë e zgjedhur?
+ - Fshij porositë e zgjedhura?
+
+
+ - Kjo do të fshijë përgjithmonë mesazhin e përzgjedhur.
+ - Kjo do të fshijë përgjithmonë të gjitha %1$d mesazhe të përzgjedhura.
+
+ Ruaj në memorie?
+
+ - Ruajtja e këtij mediumi në memorje do të lejojë leximin e tij nga aplikacionet tjera në pajisjen tuaj.\n\nVazhdo?
+ - Ruajtja e %1$d mediave në memorje do të lejojë leximin e tyre nga aplikacionet tjera në pajisjen tuaj.\n\nVazhdo?
+
+
+ - Gabim gjatë ruajtjes të shtojcës në memorie!
+ - Gabim gjatë shkruarjes në memorie!
+
+ Skedari u ruaj me sukses.
+ E pamundur të shkruhet në memorie!
+
+ - Duke ruar shtojcën
+ - Duke ruar %1$d shtojca
+
+
+ - Duke ruar shtojcën në memorie
+ - Duke ruar %1$d shtojca në memorie
+
+ Duke mbledhë shtojcat...
+ Po bëhet...
+ Data (Signal)
+ MMS
+ SMS
+ Duke fshirë
+ Duke fshirë porosi...
+
+ Kërko...
+ Nuk keni instaluar shfletues në celularin tuaj.
+
+
+ - Fshij bisedën e zgjedhur?
+ - Fshij bisedat e zgjedhura?
+
+
+ - Kjo do të fshijë përgjithmonë bisedën e përzgjedhur.
+ - Kjo do të fshijë përgjithmonë të gjitha %1$d biseda të përzgjedhura.
+
+ Duke fshirë
+ Po fshihet bisedat e përzgjedhura...
+
+ - Biseda u arkivuar
+ - %d biseda të arkivuara
+
+ ÇBËJE
+
+ - Biseda u zhvendos në inbox
+ - %d biseda u zhvendosën në inbox
+
+
+ Porosi e shkëmbimit të qelësve
+
+ Biseda të arkivuara (%d)
+
+ Po përdorët parazgjedhja: %s
+ Po përdorët parazgjedhja: %s
+ Asnjë
+
+ %d min
+
+ Shkëput \'%s\'?
+ Nëse e shkëputni këtë pajisje, nuk do të mund të dërgojë apo pranojë mesazhe.
+ Dështoi lidhja e rrjetit...
+ Provo prap
+ Po shkëputet pajisja...
+ Po shkëputet pajisja
+ Dështoi rrjeti!
+
+ Pajisje e paemruar
+ U lidh %s
+ Aktiv së ovni %s
+ Sot
+
+ Ndaje me
+
+ Mirësevini në Signal.
+ TextSecure dhe RedPhone tani janë bashkuar në një aplikacion të njëjtë privat për çdo situatë: Signal.
+ Mirësevini në Signal!
+ TextSecure është tash Signal.
+ TestSecure dhe RedPhone janë tash një app i njëjtë: Signal. Shtyp që të shqyrtosh.
+
+ Eksporto
+ Eksporto tekst të pastër në memorie?
+ Paralajmërtim, ky aksion do ta eksportojë përmbajtjen e Signal mesazheve tuaja në memorjen e pajisjes në mënyrë të dukshme.
+ Anulo
+ Duke eksportuar
+ Po eksportohet tekst i thjeshtë në memorie...
+ Gabim, e pamundur të shkruhet në memorie!
+ Gabim gjatë shkruarjes në memorie!
+ Eksporti i suksesshëm.
+
+ Dështim i pëhershëm komunikimi nga Signal!
+ Signal nuk mundi të regjistrohet me servicet e Google Play. Signal mesazhet dhe thirrjet janë të pamundësuara, ju lutemi regjistrohuni në Rregullimet > Të avancuara.
+
+ Gabim gajtë marrjes së rezolucionit të plotë GIF...
+
+ GIFe
+ Afishe
+
+ Grup i ri
+ Fresko grupiin
+ Emri i grupit
+ Grup MMS i ri
+ Keni përzgjedhur kontakt që nuk mbështet Signal grupe, prandaj ky grup do të jetë MMS.Service
+ Ju nuk jeni të regjistruar për Signal mesazhe dhe thirrje, prandaj Signal grupet janë të pamundësuara. Ju lutemi regjistroheni duke shkuar në Rregullimet > Të avancuara.
+ Ndodhi një gabim i paparashikueshëm që e dështoi krijimin e grupit.
+ Duhet të kesh së paku një person në grup!
+ Një pjesëmarrës i grupit tuaj ka numër që nuk mund të lexohet në mënyrë korrekte. Ju lutemi riparoni ose fshini kontaktin dhe provoni sërisht.
+ Avatari i grupit
+ Krijo grup
+ Po krijohet %1$s…
+ Po freskohet %1$s...
+ %1$s nuk mundi të shtohet sepse nuk është përdorues i Signal-it.
+ Po ngarkohen detajet e grupit...
+ Veç jeni në grup.
+
+ Unë
+
+ Importo
+ Eksporto
+
+ Importo databazën SMS të sistemit?
+ Kjo do të importojë
+
+mesazhet nga baza e të dhënave SMS në Signal.
+Nëse më herët
+keni importuar SMS bazën e të dhënave të sistemit, importimi
+i sërishëm do të rezultojë në mesazhe duplikate.
+ Importo
+ Anulo
+ Kthe kopjen rezervë?
+
+Restaurimi i rezervës të enkriptuar do të zëvendësoje plotësisht çelsat, preferencat dhe
+mesazhet tuaja. Do të humbni çdo informatë nga instalimi
+aktual i Signal-it
+por jo ato që i keni në rezervë.
+ Kthe
+ Kthe kopjen rezervë tekstuale?
+ Kjo do të importojë
+mesazhet nga një rezervë të paenkriptuar. Nëse më parë
+keni importuar këtë rezervë
+importimi i sërishëm do të rezultojë ne mesazhe duplikate.
+ Po importohet
+ Duke importuar kopjen rezervë tekst të pastër
+ Nuk u gjetë kopje rezervë tekst i pastër!
+ Gabim në importimin e kopjes rezervë!
+ Importimi u krye!
+ Po kthehet
+ Po kthehet kopje rezervë e enkriptuar...
+ Nuk u gjetë kopje rezervë e shifruar!
+ Kthimi u krye!
+
+ Prek dhe mbaja për të regjistruar një porosi zanore, liroje për ta dërguar
+
+ Ndaje
+ Zgjedh kontakte
+ Anulo
+ Duke dërguar...
+ Zemra
+ Ftesa u dërgua!
+ Fto në Signal
+
+ - DËRGO SMS DERI TE 1 SHOK/SHOQE.
+ - DËRGO SMS DERI TE %d SHOKË/SHOQE.
+
+
+ - Dërgo 1 ftesë SMS?
+ - Dërgo %d ftesa SMS?
+
+ Të kalojmë në Signal %1$s
+ Duket që nuk keni epa me të cilat të ndani.
+ Miqtë nuk lëjnë miqtë të bisedojnë pa shifrim.
+
+ Nuk u gjetë qelësi i skanerit!
+ Instalo Barcode Scanner?
+ Signal-it i duhet Barcode Scanner për kodet QR.
+
+ Dështoj dërgimi
+
+ Gabim në ruajtjën e MMS!
+ Gabim gjatë lidhjes me ofruesin e MMS...
+ Gabim në lexim të MMS rregullimeve të ofruesit të rrjetit.
+
+ Thirrje aktive me Signal
+ Thirrje e humbur nga %s
+ U humb thirrje Signal
+ Po lidhjet thirrja Signal
+ Thirrje ardhëse Signal
+ Refuzo thirrjen
+ Përgjigjiu thirrjes
+ Përfundo thirrjen
+ Anulo thirrjen
+
+ Mesazh multimedial
+
+ Keni pranuar mesazh që është enkriptuar me verzion të vjetër të Signal-it që nuk mirëmbahet më. Ju lutemi që të lusni dërguesin që të instalojë verzionin e ri dhe ta ridërgojë mesazhin.
+ Keni lënë grupin.
+ U freskua grupi.
+ ju thirri %s
+ Thirrët %s
+ Thirrje e humbur nga %s
+ %s është në Signal, thuaj tung!
+ Ju rregulluar kohën për zhduken mesazhit në %1$s.
+ %1$s vendosi kohën e zhdukjes së mesazhit në %2$s.
+
+ Fjalëkalimet nuk përputhen!
+ Fjalëkalim i vjetër i gabuar!
+ Fut fjalëkalim të ri!
+
+ Lidh këtë pajisje?
+ ANULO
+ VAZHDO
+ Lidh këtë pajisje?
+ Do të jetë në gjëndje të
+
+• Lexoni të gjitha mesazhet.
+\n• Dërgoni mesazhe në emrin tuaj.
+ Pajisje lidhëse
+ Lidhje e pajisjes së re...
+ Pajisja u aprovua!
+ Asnjë pajisje nuk u gjetë.
+ Gabim rrjeti.
+ Kod QR i gabuar.
+ Kërkojmë falje, keni lidhur shumë pajisje, provoni të mënjanoni disa...
+ Kërkojmë falje, ky QR kod është i gabuar.
+ Lidh një pajisje Signal?
+ Duket sikur provoni të lidhni Signal paisje duke përdorur skaner të një pale të 3të. Si përmasë mbrojtëse, skanoni kodin sërish nga përbrenda Signal-it.
+
+ Mesazhet zhduken
+ Mesazhet tuaja nuk do të skadojnë.
+ Mesazhet e dërguara dhe të pranuara në këtë bisedë do të zhduken %s pasi se të jenë parë.
+
+ Fut fjalëkalimin
+ Ikona e Signal-it
+ Shkruaj fjalëkalimin
+ Fjalëkalimi i gabuar!
+
+ Verzioni i Google Play serviseve që e keni instaluar nuk funksionon në mënyrë korrekte. Ju lutemi ri-instaloni Google Play serviset dhe provoni sërisht.
+
+ Vlerso këtë aplikacion
+ Nëse jeni të kënaqur me përdorimin e këtij aplikacioni, na ndihmoni duke e vlerësuar atë.
+ Vlerësoje tani!
+ Jo faleminderit
+ Më vonë
+ Oops, Play Store aplikacioni duket se nuk është i instaluar në pajisjen tuaj.
+
+ Blloko këtë kontakt?
+ Nuk do të pranoni mesazhe dhe thirrje nga ky kontakt.
+ Blloko
+ Zhblloko këtë kontakt?
+ Tani mund sërish të pranoni mesazhe dhe thirjje nga ky kontakt.
+ Zhblloko
+ Aktivizuar
+ Çaktivizar
+
+ Duke u përgjigjur
+ Duke përfunduar thirrjen
+ Duke thirrë
+ Duke anuluar thirrjen
+ Thirrja u anuluar
+ Duke cingrruar
+ Zënë
+ Lidhur
+ Po lidhet
+ Dorështrëngimi dështoi!
+ Marrsi s\'është në dispozicion
+ Duke shtrënguar dorën
+ Dështoi rrjeti!
+ Klienti dështoi
+ Gabim fatal
+ Kyçja dështoi!
+ Mesazh nga serveri
+ Numri i pa regjistruar
+ Numri që thirrët nuk mbështetë zërin e sigurtë!
+ U bë
+
+ Lidhu me Signal
+ Përzgjedh shtetin tënd
+ Duhet ta specifikoni
+kodin e shtetit tuaj
+
+ Duhet ta specifikoni
+numrin tuaj të telefonit
+
+ Numër jo-valid
+ Numri që
+e zgjodhët (%s) nuk është korrekt.
+ I papërkrahsur
+ Kjo paisje nuk mbështet biseda që përmbajnë të dhëna. Paisjet me verzione më të vjetra se Android 4.0 duhet të jenë të regjistruara me Google llogari. Paisjet me Android 4.0 apo sisteme më të reja nuk kërkojnë Google llogari, megjithatë Play Store aplikacioni duhet të jetë i instaluar.
+
+Kontrolloni/sigurohuni nëse ky është numri juaj! Do ta verifikojmë me një SMS.
+ Vazhdo
+ Ndrysho
+
+ Probleme të mundshme
+
+ Duke u verifikuar numri
+ Edito %s
+ U përfundua regjistrimi!
+ Duhet ta futni kodin që keni marrë së pari...
+ Po lidhet
+ Duke u lidhur për verifikim...
+ Gabim rrjeti!
+ Lidhja nuk është e mundur. Ju lutemi kontrolloni nëse jeni lidhur në rrjetë dhe provoni sërisht.
+ Dështoi verifkimi!
+ Kodi i verifikimit është i gabuar. Ju lutemi provoni sërisht.
+ Përpjekje të tepruara
+ Keni futur kod të gabuar verifikimi shumë herë. Ju lutemi prisni një minute para se të provoni sërish.
+ Duke kërkuar thirrjen
+ Duke kërkuar thirrje për verifikim...
+ Gabim serveri
+ Serveri hasi në gabim. Të lutem provo prap.
+ Përpjekje të tepruara!
+ Veç më keni kërkuar një thirje. Mund të kërkoni një tjetër pas 20 minutash.
+ Konflikt regjistrimi
+ Ky numër është veç më i regjistruar në një server tjetër të Signal-it (CyanogenMod?). Duhet të çregjistroheni nga ai server para se të regjistroheni këtu.
+
+ U përfundua regjistrimi
+ Signal regjistrimi u kompletua me sukses.
+ Gabim regjistrimi
+ Signal regjistrimi hasi në problem.
+
+ Imazh
+ Audio
+ Video
+
+ U pranua mesazh i korruptuar
+për shkëmbim çelsash!
+
+U pranua mesazh për shkembim çelsash për një verzion të protokolli jo valid.
+ Keni resetuar sesionin e sigurtë.
+ %s resetoi sesionin e sigurtë.
+ Porosi e dyfishuar.
+
+ La grupin...
+ Sesioni i sigurt u rivendos.
+ Draft:
+ Thirrët
+ Të thirri
+ Thirrje e humbur
+ Mesazh medial
+ %s është në Signal, thuaj tung!
+ Koha për zhdukje të mesazheve rregulluar në %s
+
+ Kontakti juaj ka një version më të ri të Siganl-it me një format QR Kodi që nuk përputhet. Ju lutem shkarkoni versionin e ri për të krahasuar.
+ Duket që nuk keni epa me të cilat të ndani.
+
+ Inico përkurndër kërkesës ekzistuese?
+ Dërgo
+
+ Porosi e shifruar keq...
+ Duke deshifruar, të lutëm prit...
+ Porosia e shifruar për sesionin jo-ekzistues...
+
+ Gabim gjatë shkarkimit të mesazhit.
+
+ Gabim gjatë shkarkimit të mesazhit.
+
+ Duke u lidhur me shërbyes MMS...
+ Duke shkarkuar MMS...
+ Shkarkimi i MMS dështoi!
+ Duke shkarkuar...
+ Shtypni dhe konfiguroni MMS rregullimet për të vazhduar shkarkuar.
+ Gabim gjatë shkarkimit të mesazhit.
+
+ Duke dekriptuar MMS, ju lutem prisni...
+ Mesazh MMS i enkriptuar keq...
+ MMS mesazh i enkriptuar për sesion jo-ekzistues.
+
+ Hesht lajmërimet
+
+ Duke ndodhur importimi
+ Duke importuar porositë me tekst
+ U përfunduar importimi
+ Baza e të dhënave e sistemit u përfundua.
+
+ Preke për ta hapur.
+ Prek për të hapur, ose prek qelësin për të mbyllur.
+ Signal u hap
+ Kyçe me fjalëkalim
+
+ %1$d mesazhe të reja në %2$d biseda
+ Më të fundit nga: %1$s
+ Mesazh i mbyllur...
+ Mesazh medial: %s
+ (Pa subjekt)
+ Dështoi dërgimi i porosisë.
+ Dështoi dërgimi i porosisë.
+ Gabim në dërgimin e perosisë.
+ Shëno të gjithë si të lexuar
+ Shëno si të lexuar
+ Mesazh medial
+ Përgjigju
+
+ Përgjigja e shpejtë nuk është në dispozicion kur Signal është i mbyllur!
+ Problem në dërgimin e porosisë!
+
+ Signal
+ Mesazh i ri
+
+ Imazh
+ Audio
+ Video
+ Kontakt
+ Kamera
+ Lokacioni
+
+ Fjalëkalimi i vjetër
+ Fjalëkalimi i ri
+ Përsërite fjalëkalimin e ri
+
+ Fute emrin ose numrin
+
+ S\'ka kontakte.
+ Duke ngarkuar kontaktet...
+
+ Foto e Kontaktit
+
+ Zgjedhë për
+
+ S\'ka kontakte të bllokuara...
+
+ Nuk ka thirrje së voni.
+
+ Biseda u hesht
+
+ Dërgo porosi përmes Signal-it
+ Dërgo SMS të pasigurt
+ Dërgo MMS të pasigurtë
+ Nga %1$s
+ Dërgo
+ Hiç
+ Bisedë me %1$s
+ Shkrimi i porosisë
+ Shfaq tastaturën emoji
+ Foto e shtojcës
+
+ RRQITË PËR TË ANULUAR
+
+ Porosia mediale po shkarkohet
+ Porosi mediale
+ Porosi e sigurtë
+
+ Shkarko
+ Duke u shkarkuar
+ Dërgimi Dështoi
+ Pritet Aprovimi
+ U dërgua
+
+ Shkarko
+ Foto e kontaktit
+ Duke u shkarkuar
+
+
+ Mënyrë përzgjedhje grupi
+ %s të përzgjedhur
+
+ Po ngarkohen vendet...
+ Kërko
+
+ Skano kodin QR të shfaqur në pajisje për të lidhur
+
+ Lidh pajisjen
+
+ S\'ka pajisje të lidhura
+ Lidh pajisje të re
+
+ vazhdo
+
+ Çaktivizuar
+
+ - 1 sekondë
+ - %d sekonda
+
+ %ds
+
+ - 1 minutë
+ - %d minuta
+
+ %dm
+
+ - 1 orë
+ - %d orë
+
+ %dh
+
+ - 1 ditë
+ - %d ditë
+
+ %dd
+
+ - 1 javë
+ - %d javë
+
+ %dw
+
+ Kërko GIFe dhe afishe
+
+ Asgjë nuk u gjetë
+
+ Historia në pajisjen tuaj nuk mund të lexohet. Mund të përdorni ADB për ta lexuar historinë e gabimeve të përmirsuara.
+ Faleminderit për ndihmën!
+ Duke dorëzuar
+ Duke postuar logun në gist...
+ Nuk ka shfletues të instaluar
+
+ A dëshironi ti importoni mesazhet tekstuale në bazen e enkriptuar të të dhënave të Signal-it?
+ Baza e të dhënave e parazgjedhur nuk do të modifikohet në asnjë mënyrë.
+ Kapërce
+ Importo
+ Kjo do të marë pak kohë. Ju lutemi keni durim, do t\'ju njoftojmë kur do të kompletohet importimi.
+ DUKE IMPORTUAR
+
+ Po freskohet databaza...
+ Eksporto rezervë në tekst të pastër
+ Eksporto një rezervë në tekst të thjeshtë që është kompatibil me \'SMS Rezerv & Restauro\' në memorje.
+ Importo databazën SMS të sistemit
+ Importo bazën e të dhënave nga aplikacioni i parazgjedhur i sistemit.
+ Kthe kopjen rezervë
+ Kthe Signal kopjen të enkriptuar rezervë të eksportuar më parë
+ Importo kopjen rezervë me tekst të pastër
+ Importo një kopje rezervë në teks të thjeshtë. Kompatibil me \'SMS Rezervë & Restauro.\'
+
+ Shiko bisedën e plotë
+
+ S\'ka imazhe
+
+ VERIFIKO
+ RIDËRGO
+
+ Për celularin tuaj duhen rregullime manuale MMS.
+ Aktivizuar
+ Çaktivizar
+ Pavendosur
+ Teksti i futur nuk ishte URI i vlefshëm
+ Teksti i futur nuk ishte adresë e vlefshme
+
+
+ - %1$s u bashkangjit në grup.
+ - %1$s u bashkangjitën në grup.
+
+ Grupi i freskua.
+ Emri i grupit tani është \'%1$s\'.
+
+ Zhblloko
+
+ Signal kërkon MMS rregullime për të dorëzuar media dhe mesazhet në grup nëpërmjet të rrejtit tuaj. Pajisja juaj nuk i mundëson këto të dhëna, që ka të bëjë me pajisje të mbyllura dhe rregullime tjera kufizuese.
+ Shtypni \'OK\' për të dërguar media, mesazhe në grup, dhe për të kompletuar rregullimet e kërkuara. MMS rregullimet për ofruesin e rrjetit tuaj mund ti gjeni duke kërkuar \'APNja e ofruesit tuaj\'. Do të duhet ta bëni këtë vetëm një herë.
+
+ BLLOKUAR
+
+ Shurdho bisedën
+ Çaktivizo lajmërimet për këtë bisedë
+ Zëri i lajmrimit
+ Vibro
+ Blloko
+ Ngjyra
+ Ngjyra për këtë kontakt
+
+ Thirrje përmes Signal
+ përfundo thirrjen
+ Audio
+ Hesht
+ Thirrje përmes Signal
+
+
+ Verifiko numrin tënd të telefonit për t\'u lidhur me Signal.
+
+ SHTETI YT
+ PREFIKSI I SHTETIT DHE
+NUMRI I TELEFONIT
+ NUMRI I TELEFONIT
+ Regjistrohu
+ Regjistrimi transmeton të dhëna për kontaktin tuaj serverit. Këto të dhëna nuk ruhen.
+ Fuqizuar nga twilio
+
+ Disa probleme
+ përfshijnë:
+
+ Interceptorët e SMS.
+
+Disa aplikacione të tjera, siç janë Handcent apo GoSMS, i kapin të gjita mesazhet hyrëse. Kontrolloni nëse keni pranuar mesazh tekstual që fillon me
+\'Signal-kodi juaj i verifikimit:\', në të cilin rast ju duhet të konfiguroni
+aplikacionin tjetër që ti lishojë mesazhet tju vijnë në Signal.
+ Numër jo i saktë.
+
+Ju lutemi kontrolloni dhe sigurohuni nëse keni futur numrin tuaj në mënyrë të saktë, dhe nëse e keni formatuar saktësisht për regjionin ku ndodheni.
+ Google Voice.
+
+ Signal nuk do të punoj me numra Google Voice.
+
+
+ Verifikim me zë
+
+Signal mund tju bëjë thirrje për të verifikuar numrin tuaj. Shtypni \'Bëj thirrje\' dhe më poshtë futni kodin gjashtë-shiifror që do ta dëgjoni.
+ Verifiko
+ Më thirr
+ Modifiko numrin
+ Gabim në lidhje.
+ Signal e kishte të pamundur të lidhet me shërbyes.
+ Disa probleme
+ të mundshme përfshijnë:
+
+ Nuk ka lidhje
+ me rrjet.
+
+ Paisja juaj duhet të ketë lidhje në rrjet që të mund ta përdor këtë funksion të Signal-it. Sigurohuni nëse jeni lidhur në lidhje celulari apo Wi-Fi.
+ Murzjarrë kufizues.
+
+
+Nëse jeni lidhur përmes Wi-Fi, është e mundur që qasja te Signal serveri është i bllokuar nga firewall. Provoni një rrjetë tjetër apo lidhuni përmes rrjetit të të dhënave nga celulari.
+
+Signal tani do të verifikojë numrin tuaj automatikisht me një SMS konfirmimi.
+ Duke u lidhur...
+ Duke pritur SMS-in
+verifikues...
+ Regjistrohet me shërbyes...
+ Kjo mund të zgjas pak. Ju lutemi për durim, do tju njoftojmë pas kompletimit të verifikimit.
+
+Signal u ndal derisa pritej SMSi për verifikim.
+ Verifikimi i SMS
+ dështoi.
+
+ Duke krijuar çelësat...
+ Vëmendje
+ Telefon
+ Kontrollo
+
+ Shkruaj një emër ose numër
+ Shto pjesëmarrës
+
+ Shtypni për të skanuar
+
+
+ Disa gjëra kërkojnë vëmendjen tuaj.
+ Dërguar
+ Pranuar
+ Zhdukje
+ Përmes
+ Te:
+ Nga:
+ Me:
+
+ Krijo fjalëkalimin
+ Fut fjalëkalimin
+ Përzgjedh kontaktet
+ Signal u detektua
+ Ndrysho fjalëkalimin
+ Dërgo logun e gabimeve
+ Parapamje e medias
+ Gjitha imazhet
+ Gjitha imazhet me %1$s
+ Hollësitë e mesazhit
+ Pajisjet e lidhura
+ Fto shokët
+ Bisedat e arkivuara
+
+ Importo / eksporto
+ Përdor parazgjedhjen
+ Përdor të rregulluar
+ Hesht për 1 orë
+ Hesht për 2 orë
+ Hesht për 1 ditë
+ Hesht për 7 ditë
+ Hesht për 1 vit
+ Rregullimet e parazgjedhura
+ Aktivizuar
+ Çaktivizar
+ Emri dhe porosia
+ Vetëm emrin
+ Nuk ka emër ose porosi
+ Imazhet
+ Audio
+ Video
+
+
+ - %d orë
+ - %d orë
+
+
+ Përgjithshëm
+ SMS dhe MMS
+ Merr gjithë SMS
+ Merr gjithë MMS
+ Përdor Signal për të gjitha SMS-të
+ Përdor Signal për të gjitha porositë ardhëse multimediale
+ Rregullimet Hyrëse
+ Aktivizo butonin Enter
+ Zëvendëso butonin smiley me Enter
+ Butoni Enter dërgon
+ Prekja e butonin Enter do të dërgoj porosi tekstuale
+ Trego rregullimet
+ Zgjedh identitetin
+ Zgjidhni kontaktin tuaj nga lista e kontakteve.
+ Ndrysho fjalëkalimin
+ Ndrysho fjalëkalimin
+ Aktivizo fjalëkalimin
+ Çaktivizo Signal dhe njoftimet për mesazhe me fjalëkalim.
+ Siguria e ekranit
+ Blloko kopjimin e ekranit në listën e të funditave dhe brenda aplikacionit.
+ Automatikisht mbyll Signal-in me çels pas një kohe pasiviteti.
+ Fjalëkalim pas një kohe mosveprimi
+ Interval kohor kur nuk ka aktivitet
+ Njoftimet
+ Aktivizo njoftimet me porosi
+ Lajmërimet për njoftime të reja
+ Shfaq një njotim për kontakte të reja Signal
+ Ngjyra LED
+ Panjohur
+ Lloji i vezullimit LED
+ Vendos llojin e vezullimit LED
+ Ndezur për.
+ Ndalur për:
+ Lloji i vezullimit lend u vendos!
+ Zë
+ Ndrysho zërin e lajmërimit
+ Heshtur
+ Njoftimet gjatë bisedës
+ Luaj zërin e njoftimit gjatë shikimit të një bisede aktive
+ Lajmërime të përsëritura
+ Kurr
+ Një herë
+ Dy herë
+ Tri herë
+ Pesë herë
+ Dhjetë herë
+ Vibro
+ Poashtu vibro kur të lajmërohet
+ minuta
+ horë
+ Gjelbërt
+ Kuq
+ Kaltër
+ Portokall
+ Cijan
+ Purpurtë
+ Bardh
+ Asnjë
+ Shpejt
+ Normal
+ Ngadal
+ Rregullo
+ Avanuar
+ Privatsi
+ Agjenti i Përdoruesit MMS
+ Rregullimet manuale për MMS
+ Përdor rregullimet manuale për MMS
+ Zëvendësoni rregullimet sistemore për MMS me informatat më poshtë.
+ MMSC URL
+ Host proxy MMS
+ Port Proxy MMS
+ Emri i përdoruesit MMSC
+ Fjalëkalimi MMSC
+ Raporet e dërgimit SMS
+ Kërko raport dorëzimi për çdo SMS mesazh që dërgon.
+ Fshij mesazhet e vjetra automatikisht nëse një bisedë tejkalon një gjatësi specifike.
+ Fshij mesazhet e vjetra
+ Bisedat dhe meiumet
+ Kufiri i gjatësisë së bisedës
+ Shkurtoji të gjithat bisedat tash
+ Skano të gjitha bisedat dhe zbato rregullimet për gjatësinë e bisedave.
+ Pajisjet e lidhura
+ Drita
+ Errër
+ Pamja
+ Tema
+ Parazgjedhje
+ Gjuha
+ Porositë dhe thirrjet nga Signal
+ Porosi dhe thirrje private pa pagesë për përoduesit e Signal
+ Dërgo logun e gabimeve
+ Manyra kompatibile \'Thirrje Wifi\'
+ Mundëso nëse paisja juaj përdor SMS/MMS dorëzim të mesazheve nëpërmjet WiFi (mundëso vetëm kur \' WIFi Thirrje\' është e mundësuar në paisjen).
+ Kontaktet e bllokuara
+ Miratim i numrave për siguri
+ Kërkoni miratim të numrave të rinj të sigurimit në rast se ndryshohen
+ Shfaq në lajmërime
+ Kur përdor rrjetin celular
+ Kur përdor Wi-Fi
+ Në roaming
+ Vetshkarkim i medias
+ Shkurtimi i porosive
+ Përdor emoji të sistemit
+ Çaktivizo mbështetjen emoji të ndërtuar në Signal
+
+
+
+
+ Përzgjedhë të gjitha
+ Mos zgjedhë asnjë
+ PËRDORUESIT E SIGNAL
+ TË GJITHË KONTAKTET
+ Porosi e re për...
+
+ Përfundoi
+
+ Rifresko listën e kontakteve
+
+ Thirre
+
+ Thirrje përmes Signal
+
+ Hollësitë e mesazhit
+ Kopjo tekstin
+ Fshij mesazhin
+ Paso mesazhin
+ Ridërgo mesazhin
+
+ Ruaj bashkëngjitjen
+
+ Mesazhet zhduken
+
+ Mesazhet skadojnë
+
+ Fto
+
+ Siguria
+
+ Fshij të përzgjedhurit
+ Përzgjedhë të gjitha
+ Arkiva u përzgjodh
+ Çarkivimi i zgjedhur
+
+ Kërko
+
+ Photo e kontaktit
+ Lajmrim për gabim
+ Arkivuar
+
+ Lidhje e re
+
+ Reseto sesionin e sigurt
+
+ Çshurdho
+
+ Hesht lajmërimet
+
+ Shto bashkëngjitje
+ Fresko grupit
+ Lëre grupin
+ Fshij bisedën
+ Gjitha imazhet
+ Përzgjedhjet e bisedës
+
+ Zgjero balonën
+
+ Shto në kontakte
+
+ Lista e marrësve
+ Dërgimi
+ Biseda
+ Transmetim
+
+ Krahaso
+ Shfaq kodin tënd QR
+ Skano kodin QR të kontaktit
+
+ Mesazh i ri
+ Grup i ri
+ Rregullimet
+ Kyç
+ Shëno të gjitha si të lexuara
+ Fto shokët
+ ndihmë
+
+ Kopjo në memorie
+ Krahaso me memorie
+
+ Versioni i juaj i Signal-it është i vjetruar
+
+ - Verzioni i juaj i Signal-it do të skadojë pas 1 dite. Shtyp për të mar verzionin më të ri.
+ - Versioni i juaj i Signal-it do të skadojë pas %d ditësh. Shtyp për të mar versionin më të ri.
+
+ Verzioni i juaj i Signal-it do të skadojë sot. Shtyp për të mar versionin më të ri.
+ Versioni yt i Signal-it ka skaduar!
+ Mesazhet no do të dërgohen me sukses. Shtyp për të mar verzionin më të ri.
+ FRESKO
+ Përdor si ep të parazgjedhur për SMS
+ Prek për të bërë Signal-in epin tënd SMS të parazgjedhur.
+ VENDOS
+ Importo SMS-të e sistemit
+ Shtyp për të kopijuar SMS mesazhet në bazën e enkriptuar të të dhënave të Signal-it.
+ IMPORTO
+ Aktivizo porositë dhe thirrjet e Sgnal
+ Ngrit përvojën tënde të komunkimit.
+ AKTIVIZO
+ Fto në Signal
+ Shëndro bisedën me %1$s në një nivel tjetër.
+ FTO
+ Fto miqtë!
+ Sa më shumë shokë që përdorin Signal, aq më i mirë bëhet
+ NDAJ
+ MBYLL
+
+ Ti
+ Dështoi në parashikimin e porosisë.
+ Tip i medias i pambështetur
+
+ Ruaj
+ Përpara
+
+ Ruaj të gjitha
+
+ Parapamje e imazhit
+
+ FRESKO
+
+ Receptor
+ Kufjet
+ Altoparlant
+
+ Duke fshirë
+ Po fshihet porositë e vjetra...
+ Porositë e vjetra u fshinë
+
+ Ikonat e transportit
+
+
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index c1a4d08d82f..c4c61155f90 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -5,6 +5,8 @@
Ðе
Обриши
Сачекајте...
+
+ Ðова порука
Тренутно: %s
Још ниÑте поÑтавили лозинку!
@@ -66,12 +68,7 @@
Долазни позив
- Кључ
-за идентификацију за %1$s је промењен. Ово може да значи или да неко покушава да преÑретне вашу комуникацију
-или једноÑтавно да је кориÑник %2$s поново инÑталирао Сигнал и Ñад има нови кључ
-идентитета.
- Можда желите да оверите
-овај контакт.
+ Ваш безбедноÑни број Ñа %1$s је промењен. Ово може да значи или да неко покушава да преÑретне вашу комуникацију или да је кориÑник %2$s једноÑтавно поново инÑталирао Сигнал.
Прихвати
Порука за %s
@@ -131,13 +128,14 @@
ММС није подржан
Порука није поÑлата јер ваш оператер не подржава ММС.
Одредите примаоца
- Одблокирати?
- Желите ли заиÑта да одблокирате овај контакт?
+ Одлокирати овај контакт?
+ Поново можете да примате поруке и позиве од овог контакта.
Одблокирај
Прилог прекорачује ограничење величине за тип поруке коју шаљете.
Камера није доÑтупна
Ðе могу да Ñнимим звук!
Грешка Ñлања глаÑовне поруке...
+ Ðема апликације за руковање овом везом на вашем уређају.
Детаљи поруке
ПреноÑ: %1$s\nПоÑлата/примљена: %2$s
@@ -153,8 +151,29 @@
- Ово ће трајно да обрише Ñвих %1$d изабраних порука.
Сачувати у Ñкладиште?
- УÑпех!
+
+ - Ð£Ð¿Ð¸Ñ Ð¾Ð²Ð¾Ð³ медијума у Ñкладиште ће омогућити било којој апликацији на вашем уређају да му приÑтупи.\n\nДа наÑтавим?
+ - Ð£Ð¿Ð¸Ñ Ð¾Ð²Ð° %1$d медијума у Ñкладиште ће омогућити било којој апликацији на вашем уређају да му приÑтупи.\n\nДа наÑтавим?
+ - Ð£Ð¿Ð¸Ñ Ð¾Ð²Ð¸Ñ… %1$d медијума у Ñкладиште ће омогућити било којој апликацији на вашем уређају да му приÑтупи.\n\nДа наÑтавим?
+
+
+ - Грешка упиÑа прилога у Ñкладиште!
+ - Грешка упиÑа прилога у Ñкладиште!
+ - Грешка упиÑа прилога у Ñкладиште!
+
+ Фајл уÑпешно Ñачуван.
Ðе могу да упишем у Ñкладиште!
+
+ - УпиÑивање прилога
+ - УпиÑивање %1$d прилога
+ - УпиÑивање %1$d прилога
+
+
+ - УпиÑујем прилог у Ñкладиште...
+ - УпиÑујем %1$d прилога у Ñкладиште...
+ - УпиÑујем %1$d прилога у Ñкладиште...
+
+ Сакупљам прилоге...
Ðа чекању...
интернета (Сигнал)
ММС
@@ -163,6 +182,7 @@
Бришем поруке...
Тражи...
+ Ðема инÑталираног прегледача на вашем уређају.
- ОбриÑати изабрану препиÑку?
@@ -196,7 +216,7 @@
КориÑтим подразумевано: %s
Ðишта
- Сад
+ Управо Ñад
%d минута
Да уклоним „%s“?
@@ -228,10 +248,15 @@
Извозим обични текÑÑ‚ у Ñкладиште...
Грешка, не могу да упиÑујем у Ñкладиште.
Грешка при упиÑу у Ñкладиште.
- УÑпех!
+ Извоз је уÑпео.
Трајни неуÑпех комуникације Сигнала!
Сигнал није уÑпео да Ñе пријави на Гуглов Плеј ÑервиÑ. Комуникација преко канала података је онемогућена, покушајте поново да Ñе пријавите преко ПоÑтавке > Ðапредно.
+
+ Грешка при преузимању ГИФ-а у пуној резолуцији...
+
+ ГИФ Ñличице
+ Ðалепнице
Ðова група
Ðжурирај групу
@@ -284,16 +309,16 @@
Тапните и држите за Ñнимање глаÑовне поруке, пуÑтите за Ñлање
Дели
- Пошаљи СМС
+ Изаберите контакте
ОдуÑтани
Шаљем...
Срце
Позивнице поÑлате!
Слање позивнице за Сигнал
-
- - ПОШÐЉИ 1 ПРИЈÐТЕЉУ
- - ПОШÐЉИ %d ПРИЈÐТЕЉÐ
- - ПОШÐЉИ %d ПРИЈÐТЕЉÐ
+
+ - ПОШÐЉИ СМС 1 ПРИЈÐТЕЉУ
+ - ПОШÐЉИ СМС ЗР%d ПРИЈÐТЕЉÐ
+ - ПОШÐЉИ СМС ЗР%d ПРИЈÐТЕЉÐ
- ПоÑлати 1 СМС позивницу?
@@ -309,7 +334,7 @@
Сигналу је потребан Скенер бар-кôда за читање бар-кôдова.
ÐеуÑпех Ñлања
- Ðови идентитет
+ Ðови безбедноÑни број
Грешка упиÑа ММС-а!
Грешка повезивања Ñа ММС поÑлужиоцем...
@@ -334,6 +359,9 @@
Позвали Ñте %s
Пропуштен позив од %s
%s је на Сигналу, кажите здраво!
+ ПоÑтавили Ñте време неÑтајања поруке на %1$s.
+ %1$s поÑтави време неÑтајања поруке на %2$s.
+ Ваш безбедноÑни број Ñа %s је промењен.
Лозинке Ñе не поклапају!
Ðетачна Ñтара лозинка!
@@ -358,6 +386,10 @@
ÐажалоÑÑ‚, ово није иÑправан бар-кôд везе уређаја.
Повезати Сигнал уређај?
Изгледа да покушавате повезати Сигнал уређај кориÑтећи Ñпољашњи читач бар-кôда. Због ÑопÑтвене заштите, очитајте кôд поново помоћу Сигнала.
+
+ ÐеÑтајуће поруке
+ Ваше поруке неће иÑтећи.
+ Примљене и поÑлате поруке ове препиÑке ће неÑтати %s након што Ñу погледане.
УнеÑите лозинку
Икона Сигнала
@@ -371,12 +403,13 @@
Оцени одмах!
Ðе, хвала
КаÑније
+ УпÑ, изгледа да апликација Плеј продавница није инÑталирана на вашем уређају.
Блокирати овај контакт?
- Више нећете примати поруке или позиве од овог кориÑника.
+ Више нећете примати поруке и позиве од овог контакта.
Блокирај
Одлокирати овај контакт?
- Желите ли заиÑта да одблокирате овај контакт?
+ Поново можете да примате поруке и позиве од овог контакта.
Одблокирај
Укључено
ИÑкључено
@@ -417,26 +450,26 @@
морају имати региÑтрован Гуглов налог. Уређаји на Ðндроидима 4.0 или новијим не захтевају
Гуглов налог, али морају имати инÑталирану Плеј продавницу.
-Проверите да ли је ово ваш број! Оверићемо га помоћу СМС поруке.
+Проверите да ли је ово ваш број! Проверићемо га помоћу СМС поруке.
ÐаÑтави
Уреди
Могући проблеми
- Оверавам број
+ Проверавам број
Уреди %s
Пријава је завршена!
Ðајпре морате да унеÑете кôд који Ñте добили...
Повезујем Ñе
- Повезујем Ñе за оверавање...
+ Повезујем Ñе за проверу...
Грешка мреже!
Ðе могу да Ñе повежем. Проверите вашу везу и покушајте поново.
- Овера није уÑпела!
- Кôд за оверу који Ñте поÑлали није тачан. Покушајте поново.
+ Провера није уÑпела!
+ Кôд за проверу који Ñте поÑлали није тачан. Покушајте поново.
Превише покушаја
- ПоÑлали Ñте кôд за оверу превише пута. Сачекајте мало пре него што поново покушате.
+ ПоÑлали Ñте кôд за проверу превише пута. Сачекајте мало пре него што поново покушате.
Захтевање позива
- Захтевам долазни позив за оверу...
+ Захтевам долазни позив за проверу...
Грешка Ñервера
Сервер је наишао на грешку. Покушајте поново.
Превише захтева!
@@ -457,9 +490,8 @@
порука размене кључа!
Примљена је порука размене кључа за неиÑправно издање протокола.
- Примљена је порука непознатог кључа идентификације. Тапните за обраду и приказ.
- Примљени Ñу ажурирани али непознати подаци идентитета. Додирните за оверу идентитета.
- Безбедна ÑеÑија је реÑетована.
+ РеÑетовали Ñте безбедну ÑеÑију.
+ %s реÑетова безбедну ÑеÑију.
Порука дупликат.
ÐапуÑти групу...
@@ -470,22 +502,15 @@
Пропуштен позив
Мултимедијална порука
%s је на Сигналу, пошаљите поздрав!
+ Време неÑтајања поруке поÑтављено на %s
+ Ваш безбедноÑни број Ñа %s је промењен.
- Ðемате кључ идентитета.
- Прималац нема кључ идентитета.
- Прималац нема кључ идентитета!
- УПОЗОРЕЊЕ, очитани кључ Ñе ÐЕ поклапа! Проверите текÑÑ‚ отиÑка пажљиво.
- ÐИЈЕ оверен!
- Њихов кључ је тачан. Потребно је такође да оверите ваш кључ Ñа њима.
- Оверен!
- Ðемате кључ идентитета!
-
- Ðемате кључ идентитета.
- УПОЗОРЕЊЕ, очитани кључ Ñе ÐЕ поклапа!
- ÐИЈЕ оверен!
- Очитани кључ Ñе поклапа!
- Оверен!
- ОтиÑак вашег идентитета
+ Ваш контакт има Ñтарије издање Сигнала. Замолите их да ажурирају пре потврде ваших безбедноÑних бројева.
+ Ваш контакт има новије издање Сигнала Ñа некомпатибилним форматом бар-кôда. Ðжурирајте Сигнал да биÑте могли да упоређујете.
+ Подели безбедноÑни број преко...
+ Ðаш Сигнал безбедноÑни број:
+ Изгледа да немате ниједну апликацију преко које биÑте могли да делите.
+ У клипборду нема безбедноÑног броја за упоређивање.
Започети унаточ поÑтојећем захтеву?
Пошаљи
@@ -514,6 +539,7 @@
Увоз у току
Увозим текÑтуалне поруке
Увоз завршен
+ Увоз ÑиÑтемÑке базе података је завршен.
Тапните за отварање.
Тапните за отварање или тапните браву да затворите.
@@ -540,11 +566,20 @@
Ðова порука
Слика
+ Слика
Звук
+ Звук
Видео
+ Видео
Контакт
+ Контакт
Камера
+ Камера
Локација
+ Локација
+ ГИФ
+ Гиф
+ Фиока прилога
Стара лозинка
Ðова лозинка
@@ -568,13 +603,16 @@
Пошаљи Сигнал поруку
Пошаљи необезбеђени СМС
Пошаљи необезбеђени ММС
+ Од %1$s
Пошаљи
Уклони
ПрепиÑка Ñа %1$s
СаÑтављање поруке
Емоџи таÑтатура
Сличица прилога
- Фиока прилога
+ Фиока брзог прилога камере
+ Сними и пошаљи звук
+ Укључите Сигнал за СМС
ПРЕВУЦИТЕ ДРОТКÐЖЕТЕ
@@ -591,6 +629,9 @@
Преузми
Фотографија контакта
Преузимам
+
+ Паузирај
+ Преузми
Режим ÑеријÑког избора
Изабрано: %s
@@ -606,11 +647,48 @@
Повежи нови уређај
наÑтави
+
+ ИÑкључено
+
+ - 1 Ñекунда
+ - %d Ñекунде
+ - %d Ñекунди
+
+ %d s
+
+ - 1 минута
+ - %d минуте
+ - %d минута
+
+ %d m
+
+ - 1 Ñат
+ - %d Ñата
+ - %d Ñати
+
+ %d h
+
+ - 1 дан
+ - %d дана
+ - %d дана
+
+ %d д
+
+ - 1 Ñедмица
+ - %d Ñедмице
+ - %d Ñедмица
+
+ %d Ñ
+
+ Тражите ГИФ Ñличице и налепнице
+
+ Ðема резултата
Ðе могу да очитам дневник на вашем уређају. Можете да иÑкориÑтите ÐДБ да биÑте добавили дневник иÑправљања грешака.
Хвала вам на помоћи!
Шаљем
Отпремам дневник на гиÑт…
+ Прегледач није инÑталиран
Желите ли да увезете поÑтојеће текÑтуалне поруке у Сигналову шифровану базу података?
Подразумевана ÑиÑтемÑка база података неће бити измењена или преуређена на било који начин.
@@ -633,7 +711,7 @@
Ðема Ñлика
- ОВЕРИ
+ ПОТВРДИ
ПОШÐЉИ ПОÐОВО
Потребне Ñу ручне ММС поÑтавке за ваш телефон.
@@ -665,7 +743,7 @@
Блокирај
Боја
Боја за контакт
- Потврди идентитет
+ Потврдите безбедноÑни број
Позив на Сигналу
окончај позив
@@ -674,7 +752,7 @@
Позив на Сигналу
-Потврдите ваш број телефона да биÑте Ñе пријавили на Сигнал.
+Проверите ваш број телефона да биÑте Ñе пријавили на Сигнал.
Ð’ÐШРДРЖÐÐ’Ð
КÔД ДРЖÐВЕ И БРОЈ
@@ -690,7 +768,7 @@
Ðеке апликације за поруке, какве Ñу Хандцент или ГоСМС, понашају Ñе лоше и преÑрећу
Ñве долазне СМС поруке. Проверите да ли Ñте добили текÑтуалну поруку која почиње
-Ñа „Your TextSecure verification code:“, и у том Ñлучају мораћете да подеÑите вашу
+Ñа „Your TextLibre verification code:“, и у том Ñлучају мораћете да подеÑите вашу
апликацију за поруке да пропушта текÑтуалне поруке.
Ðетачан број.
@@ -700,11 +778,11 @@
Сигнал не ради Ñа „Google Voice“ бројевима.
- ГлаÑовна овера
+ ГлаÑовна провера
-Сигнал може и да Ð²Ð°Ñ Ð¿Ð¾Ð·Ð¾Ð²Ðµ да биÑте оверили ваш број. Тапните „Позови ме“ и унеÑите
+Сигнал може и да Ð²Ð°Ñ Ð¿Ð¾Ð·Ð¾Ð²Ðµ да би проверио ваш број. Тапните „Позови ме“ и унеÑите
иÑпод шеÑтоцифрени кôд који чујете.
- Овери
+ Потврди
Позови ме
Уреди број
Грешка везе.
@@ -719,29 +797,31 @@
Ðко Ñте повезани Ñа бежичном мрежом, могуће је да вам ватробран блокира
приÑтуп Сигналовом Ñерверу. Покушајте Ñа другом мрежом или мобилним интернетом.
-Сигнал ће Ñада аутоматÑки да овери ваш број помоћу СМС поруке.
+Сигнал ће Ñада аутоматÑки да провери ваш број помоћу СМС поруке.
Повезујем Ñе...
- Чекам СМС оверу...
+ Чекам на СМС проверу...
Пријављујем Ñе на Ñервер...
Ово би
-могло мало да потраје. Будите Ñтрпљиви, обавеÑтићемо Ð²Ð°Ñ ÐºÐ°Ð´Ð° Ñе оверавање заврши.
+могло мало да потраје. Будите Ñтрпљиви, обавеÑтићемо Ð²Ð°Ñ ÐºÐ°Ð´Ð° Ñе провера заврши.
-ИÑтекло прековреме чекајући СМС поруку за оверавање.
- СМС овера није уÑпела.
+ИÑтекло прековреме чекајући СМС поруку за проверавање.
+ Провера СМС-ом није уÑпела.
Генеришем кључеве...
Пажња
Телефон
Провери
УнеÑите име или број
- Додај члана
-
- Њихов идентитет (они читају):
- Ваш идентитет (ви читате):
+ Додај чланове
+
+ Тапните за Ñкенирање
+
+ Подели безбедноÑни број
Ðеки од проблема захтевају вашу пажњу.
ПоÑлата
Примљена
+ ÐеÑтаје
Преко
За:
Од:
@@ -751,20 +831,18 @@
УнеÑите лозинку
Изаберите контакте
Сигнал откривен
- Јавни кључ идентитета
Измена лозинке
- Овера идентитета
+ Потврди безбедноÑни број
Пошаљи дневник иÑправљања грешака
Преглед медијума
Све Ñлике
Све Ñлика Ñа %1$s
Детаљи поруке
- Управљај повезаним уређајима
+ Повезани уређаји
Позивница пријатељима
Ðрхивиране препиÑке
Увоз/извоз
- Ваш кључ идентитета
КориÑти подразумевано
КориÑти поÑебно
Утишај 1 Ñат
@@ -869,7 +947,7 @@
Ограничење дужине препиÑке
Скрати Ñве препиÑке Ñада
Претражи Ñве препиÑке и наметни ограничења дужине
- Уређаји
+ Повезани уређаји
Светла
Тамна
Изглед
@@ -882,6 +960,8 @@
КомпатибилноÑÑ‚ Ñа „бежичним позивањем“
Омогућите ако ваш уређај доÑтавља СМС/ММС преко бежичне мреже (омогућите Ñамо ако је „WiFi Calling“ омогућено на вашем уређају)
Блокирани контакти
+ Одобравање безбедноÑних бројева
+ Тражите одобрење нових безбедноÑних бројева када Ñе промене
Прикажи у обавештењу
Ðа мобилном интернету
Ðа бежичној
@@ -915,6 +995,10 @@
Понови Ñлање
Сачувај прилог
+
+ ÐеÑтајуће поруке
+
+ ИÑтицање порука
Пошаљи позивницу
@@ -933,8 +1017,6 @@
Ðова препиÑка
- БезбедноÑÑ‚
- Овери идентитет
РеÑетуј безбедну ÑеÑију
Укључи обавештења
@@ -958,6 +1040,8 @@
Емитовање
Упореди
+ Прикажи мој бар-кôд
+ Очитај контактов бар-кôд
Ðова порука
Ðова група
@@ -966,6 +1050,9 @@
Означи Ñве прочитаним
Позовите пријатеље
Помоћ
+
+ Копирај на клипборд
+ Упореди Ñа клипбордом
Ваше издање Сигнала је заÑтарело!
@@ -999,6 +1086,8 @@
Ðеподржан тип медијума
Сачувај
+ ПроÑледи
+ Све Ñлике
Сачувај Ñве
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 3b5c070e3fe..b54412894ef 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -5,6 +5,8 @@
Nej
Radera
Var vänlig vänta...
+
+ Nytt meddelande
Nuvarande: %s
Du har inte angivit ett lösenord än!
@@ -19,6 +21,7 @@
Radera
Ta bort lösenordsfras?
+ Detta kommer permanent låsa upp Signal och meddelandeaviseringar.
Inaktivera
Avregistrering
Avregistrerar från Signal-meddelanden och samtal...
@@ -61,10 +64,8 @@
Inkommande samtal
- Signaturen för nyckelutbytet för %1$s har ändrats.
-Detta kan innebära antingen att någon försöker avlyssna din kommunikation, eller att %2$s helt enkelt installerade om Signal och nu har en ny identitetsnyckel.
- Det kan vara en bra idé att
-verifiera denna kontakt.
+ Ditt säkerhetsnummer med %1$s har ändrats. Detta kan antingen betyda att någon försöker avlyssna er kommunikation, eller att %2$s helt enkelt ominstallerat Signal.
+ Du kan vilja verifiera ditt säkerhetsnummer med denna kontakt.
Acceptera
Meddelande %s
@@ -74,14 +75,18 @@ verifiera denna kontakt.
GÃ¥r ut: %s
Inte levererad
Visa skyddad fil?
+ Denna fil har lagrats i en krypterad databas. Dessvärre måste du använda en extern app för att visa denna fil vilket innebär att datan måste avkrypteras och skrivas till lagringen. Är du säker på att du vill göra detta?
Ett fel uppstod. Mottog ett gammalt meddelande för nyckelutbyte.
+ Tog emot meddelande för nyckelutbyte, tryck för att behandla.
%1$s har lämnat gruppen.
Tryck för detaljer
Tryck för oskyddad fallback
Använd okrypterat SMS istället?
Använd okrypterat MMS istället?
- Denna meddelande kommer inte krypterades eftersom mottagaren inte längre är en Signal-användare. \n\nSkicka osäkert meddelande?
- Kan ej hitta app som kan öppna denna media.
+ Detta meddelande kommer inte krypteras eftersom mottagaren inte längre är en Signal-användare. \n\nSkicka osäkert meddelande?
+ Kan ej hitta app som kan öppna denna fil.
+ från %s
+ till %s
Starta om säker session?
Detta kan hjälpa om du har krypteringsproblem i den här konversationen. Dina meddelanden kommer behållas.
@@ -95,7 +100,7 @@ verifiera denna kontakt.
Gifen du valde är för stor!
Tyvärr, den valda videon överskrider gränsen för meddelandestorlek (%1$skB).
Tyvärr, den valda ljudfilen överskrider gränsen för meddelandestorlek (%1$skB).
- Mottagare är inte en giltig SMS eller e-postadress!
+ Mottagaren är inte en giltig SMS eller e-postadress!
Meddelandet är tomt!
Gruppmedlemmar
Gruppkonversation
@@ -107,25 +112,26 @@ verifiera denna kontakt.
Sparade utkast
Ogiltig mottagare!
Samtal stöds ej
- Denna enhet verkar inte stödja ringa upp handlingar.
+ Denna enhet verkar inte stödja ringa upp-handlingar.
Lämna grupp?
Är du säker på att du vill lämna den här gruppen?
- Okrypterat SMS
- Okrypterat MMS
+ Osäkert SMS
+ Osäkert MMS
Signal
Byt till Signal %1$s
Låt oss använda detta för att chatta: %1$s
Fel vid lämnande av grupp...
MMS stöds ej
- Det här meddelandet kan inte skickas eftersom din operatör inte stöder MMS.
+ Det här meddelandet kan inte skickas eftersom din operatör inte stödjer MMS.
Vänligen välj en kontakt
- Avblockera?
- Är du säker på att du vill avblockera denna kontakt?
+ Avblockera denna kontakt?
+ Du kommer nu åter få meddelanden och samtal från denna kontakt.
Avblockera
Den bifogade filen är för stor för den typ av meddelande du försöker skicka.
Kamera otillgänglig
Kunde inte spela in ljud!
Fel när röstmeddelande skulle skickas...
+ Det finns ingen app på din enhet som kan hantera den här länken.
Meddelandedetaljer
Transport: %1$s\nSkickat/Mottagits: %2$s
@@ -139,8 +145,25 @@ verifiera denna kontakt.
- Detta kommer permanent radera %1$d valda meddelanden.
Spara till lagring?
- Klart!
+
+ - Att spara denna media till lagring kommer tillåta andra appar på din telefon att få tillgång.\n\nFortsätt?
+ - Att spara all %1$d media till lagringen kommer tillåta alla andra appar på din enhet att komma åt dem.\n\nFortsätt?
+
+
+ - Det blev ett fel när bifogad fil skulle sparas till lagring!
+ - Det blev ett fel när de bifogade filerna skulle sparas till lagring!
+
+ Sparande av fil lyckades.
Kan inte skriva till lagring!
+
+ - Sparar bifogad fil
+ - Sparar %1$d bifogade filer
+
+
+ - Sparar bifogad fil till lagring...
+ - Sparar %1$d bifogade filer till lagring...
+
+ Samlar bifogade filer...
Väntar...
Data (Signal)
MMS
@@ -149,6 +172,7 @@ verifiera denna kontakt.
Raderar meddelanden...
Sök...
+ Det finns ingen webbläsare installerad på din enhet.
- Radera markerad konversation?
@@ -178,7 +202,7 @@ verifiera denna kontakt.
Använder standard: %s
Inga
- Nu
+ Precis nu
%d min
Koppla bort \'%s\'?
@@ -210,17 +234,22 @@ verifiera denna kontakt.
Exporterar okrypterat till lagring...
Fel, kunde inte skriva till lagringsutrymmet.
Fel vid skrivande till lagringsutrymmet.
- Lyckades!
+ Export lyckades.
Permanent kommunikationsfel med Signal!
- Signal kunde inte registrera med Google Play-tjänster. Meddelanden och samtal med Signal har avaktiverats, vänligen försök återregistrera i inställningar > Avancerade.
+ Signal kunde inte registrera med Google Play-tjänster. Meddelanden och samtal med Signal har avaktiverats, vänligen försök återregistrera i inställningar > Avancerat.
+
+ Fel vid hämtning av GIF i full upplösning...
+
+ GIF:ar
+ Stickers
Ny grupp
Uppdatera grupp
Gruppnamn
Ny MMS-grupp
Du har valt en kontakt som inte har stöd för Signalgrupper, så denna grupp kommer använda MMS.
- Du är inte registrerad för samtal och meddelanden med Signal, så Signalgrupper är inaktiverat. Försök registrera i Inställningar > Avancerade.
+ Du är inte registrerad för samtal och meddelanden med Signal, så Signalgrupper är inaktiverat. Försök registrera i Inställningar > Avancerat.
Ett oförutsett fel inträffade som gjort att gruppen inte kunde skapas.
Du behöver åtminstone en person i din grupp!
En av deltagarna i din grupp har ett nummer som inte kan läsas ordentligt. Vänligen åtgärda eller ta bort kontakten och försök igen.
@@ -264,15 +293,15 @@ som inte finns i säkerhetskopian.
Tryck och håll in för att spela in ett röstmeddelande, släpp för att skicka
Dela
- Skicka SMS
+ Välj kontakter
Avbryt
Skickar...
Hjärta
Inbjudningar skickade!
Bjud in till Signal
-
- - SKICKA TILL 1 VÄN
- - SKICKA TILL %d VÄNNER
+
+ - SKICKA SMS TILL 1 VÄN
+ - SKICKA SMS TILL %d VÄNNER
- Skicka 1 SMS-inbjudan?
@@ -287,7 +316,7 @@ som inte finns i säkerhetskopian.
Signal behöver Barcode Scanner för QR-koder.
Misslyckades att skicka
- Ny identitet
+ Nytt säkerhetsnummer
Fel vid lagring av MMS!
Fel vid anslutning till MMS-leverantör...
@@ -312,6 +341,9 @@ som inte finns i säkerhetskopian.
Ringde %s
Missat samtal från %s
%s finns på Signal, skriv hej!
+ Du satte tiden för försvinnande meddelanden till %1$s.
+ %1$s sätt tiden för försvinnande meddelanden till %2$s.
+ Ditt säkerhetsnummer med %s har ändrats.
Lösenorden matchar inte!
Inkorrekt gammalt lösenord!
@@ -335,6 +367,10 @@ som inte finns i säkerhetskopian.
Tyvärr, det här är ingen giltig QR-kod för enhetslänkning.
Länka en Signal-enhet?
Det verkar som att du försöker länka en Signal-enhet med hjälp av en tredjepartsskanner. För din säkerhet, vänligen skanna koden igen från Signal.
+
+ Självförstörande meddelanden
+ Dina meddelanden kommer inte upphöra.
+ Meddelanden som skickas och tas emot i den här konversationen kommer att försvinna %s efter att de setts.
Ange lösenord
Signalikon
@@ -348,12 +384,13 @@ som inte finns i säkerhetskopian.
Betygsätt nu!
Nej tack
Senare
+ Ojoj, appen Play Store verkar inte finnas installerad på din enhet.
Blockera denna kontakt?
- Du kommer inte längre ta emot meddelanden eller samtal från denna användare.
+ Du kommer inte längre få meddelanden eller samtal från denna kontakt.
Blockera
Avblockera denna kontakt?
- Är du säker på att du vill avblockera denna kontakt?
+ Du kommer nu åter få meddelanden och samtal från denna kontakt.
Avblockera
Aktiverad
Inaktiverad
@@ -379,11 +416,15 @@ som inte finns i säkerhetskopian.
Numret du ringde har inte stöd för säkra röstsamtal!
Uppfattat
+ Anslut med Signal
Välj ditt land
- Du måste ange din landskod
- Du måste ange ditt telefonnummer
+ Du måste ange din
+landskod
+ Du måste ange ditt
+telefonnummer
Ogiltigt nummer
- Numret du angav (%s) är ogiltigt.
+ Numret du
+angav (%s) är ogiltigt.
Stöds ej
Tyvärr stödjer inte den här enheten datameddelanden. Enheter som kör versioner av Android äldre än 4.0 måste ha ett registrerat Google-konto. Enheter som kör Android 4.0 eller nyare behöver inte ett Google-konto, men måste ha appen Play Store installerad.
@@ -427,8 +468,9 @@ Dubbelkolla att det här är ditt nummer! Vi ska nu verifiera det med ett SMS.
för nyckelutbyte!
Tog emot meddelande för nyckelutbyte för ogiltig protokollversion.
- Mottagit uppdaterad men okänd identitetsinformation. Klicka för att bekräfta identitet.
- Säker session nollställd.
+ Tog emot meddelande med nytt säkerhetsnummer. Tryck för att bearbeta och visa.
+ Du startar om den säkra sessionen.
+ %s startar om den säkra sessionen.
Duplicerat meddelande.
Lämnat gruppen...
@@ -439,22 +481,15 @@ Tog emot meddelande för nyckelutbyte för ogiltig protokollversion.
Missat samtal
Mediameddelande
%s finns på Signal, skriv hej!
+ Tiden för självförstörande meddelanden satt till %s
+ Ditt säkerhetsnummer med %s har ändrats.
- Du har ingen identitetsnyckel.
- Mottagaren har ingen identitetsnyckel.
- Mottagaren har ingen identitetsnyckel!
- VARNING, den skannade nyckeln överensstämmer INTE! Var vänlig kontrollera texten för fingeravtrycket noggrant.
- INTE verifierad!
- Deras nyckel är korrekt. Det är också nödvändigt att verifiera din nyckel med dem.
- Verifierad!
- Du har ingen identitetsnyckel!
-
- Du har inte någon identitetsnyckel.
- VARNING, den skannade nyckeln överensstämmer INTE!
- INTE verifierad!
- Den skannade nyckeln överensstämmer!
- Verifierad!
- Ditt identitets-fingeravtryck
+ Din kontakt kör en nyare version av Signal med ett inkompatibelt format på QR koden. Vänligen uppdatera för att jämföra.
+ Den inlästa QR-koden är inte en korrekt formaterad verifikationskod för säkerhetsnummer. Försök att göra om inläsningen.
+ Dela säkerhetsnummer via...
+ Vårt säkerhetsnummer för Signal:
+ Verkar som att du inte har några appar att dela till.
+ Inga säkerhetsnummer att jämföra med hittades i urklipp
Påbörja ny nyckelutbytesförfrågan trots redan existerande?
Skicka
@@ -482,6 +517,8 @@ Tog emot meddelande för nyckelutbyte för ogiltig protokollversion.
Import pågår
Importerar SMS
+ Import färdig
+ Signals import av databasen är klar.
Tryck för att öppna.
Tryck för att öppna, tryck på låset för att stänga.
@@ -536,13 +573,16 @@ Tog emot meddelande för nyckelutbyte för ogiltig protokollversion.
Skicka Signal-meddelande
Skicka okrypterat SMS
Skicka okrypterat MMS
+ Från %1$s
Skicka
Ta bort
Meddelanden med %1$s
Skapa meddelande
Växla till emoji-tangentbord
Bifogad miniatyrbild
- Dölj/visa bilagor
+ Dölj/Visa snabbpanel för kamerabilaga
+ Spela in och skicka ljudbilaga
+ Aktivera Signal för SMS
SVEP FÖR ATT AVBRYTA
@@ -559,6 +599,7 @@ Tog emot meddelande för nyckelutbyte för ogiltig protokollversion.
Ladda ner
Kontaktfoto
Laddar ner
+
Flervalsläge
%s vald
@@ -574,10 +615,43 @@ Tog emot meddelande för nyckelutbyte för ogiltig protokollversion.
Länka ny enhet
fortsätt
+
+ Av
+
+ - 1 sekund
+ - %d sekunder
+
+ %ds
+
+ - 1 minut
+ - %d minuter
+
+ %dm
+
+ - 1 timme
+ - %d timmar
+
+ %dt
+
+ - 1 dag
+ - %d dagar
+
+ %dd
+
+ - 1 vecka
+ - %d veckor
+
+ %dv
+
+ Sök GIF-bilder och stickers
+
+ Inget hittat
+ Kunde inte läsa loggen från din enhet. Du kan fortfarande använda ADB för att få en logg.
Tack för din hjälp!
Skickar
Skickar loggar till gist...
+ Ingen webbläsare installerad
Vill du importera dina existerande SMS-meddelanden till Signals krypterade databas?
Systemets standarddatabas kommer på intet sätt att modifieras eller ändras.
@@ -620,6 +694,7 @@ Tog emot meddelande för nyckelutbyte för ogiltig protokollversion.
LÃ¥s upp
Signal kräver MMS-inställningar för att leverera medie- och gruppmeddelanden via din mobiloperatör. Din enhet gör inte den här informationen tillgänglig, vilket ibland stämmer för låsta enheter och andra restriktiva konfigurationer.
+ För att skicka medie- och gruppmeddelande, tryck \'OK\' och fyll i de begärda inställningarna. MMS-inställningarna för din operatör kan generellt hittas genom att söka efter \'din operatör APN\'. Du behöver bara göra det här en gång.
BLOCKERAD
@@ -630,7 +705,7 @@ Tog emot meddelande för nyckelutbyte för ogiltig protokollversion.
Blockera
Färg
Färg för denna kontakt
- Verifiera identiteten
+ Verifiera säkerhetsnummer
Signalsamtal
avsluta samtal
@@ -694,14 +769,17 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Kontrollera
Fyll i ett namn eller nummer
- Lägg till medlem
-
- Deras identitet (de läser):
- Din identitet (du läser):
+ Lägg till medlemmar
+
+ Lär dig mer om att verifiera säkerhetsnummer]]>
+ Tryck för att skanna
+
+ Dela säkerhetsnummer
Vissa frågor behöver din uppmärksamhet.
Skickat
Mottaget
+ Försvinner
Via
Till:
Från:
@@ -711,19 +789,18 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Ange lösenord
Välj kontakter
Signal hittad
- Publik identitetsnyckel
Ändra lösenord
- Verifiera identiteten
+ Verifiera säkerhetsnummer
+ Skicka in felsökningslogg
Mediaförhandsgranskning
Alla bilder
Alla bilder med %1$s
Meddelandedetaljer
- Hantera länkade enheter
+ Länkade enheter
Bjud in vänner
Arkiverade konversationer
Importera / exportera
- Din identitetsnyckel
Använd standardinställning
Använd anpassad inställning
Tysta i 1 timme
@@ -763,7 +840,7 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Ändra lösenord
Ändra ditt lösenord
Aktivera lösenordsfras
- Lås Signal och meddelandenotifikationer med ett lösenord
+ Lås Signal och meddelandeaviseringar med ett lösenord
Skärmsäkerhet
Blockera skärmdumpar i Senaste-listen samt inuti appen
LÃ¥s Signal automatiskt efter angivet intervall av inaktivitet.
@@ -772,7 +849,7 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Aviseringar
Slå på meddelandeaviseringar
Avisering om nya kontakter
- Visa notifiering för nya kontakter i Signal
+ Visa avisering för nya kontakter i Signal
Färg på ljusindikator
Okänd
Blinkmönster på ljusindikator
@@ -808,7 +885,7 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Normal
LÃ¥ngsam
Skräddarsydd
- Avancerade
+ Avancerat
Integritet
MMS User Agent
Manuella MMS-inställningar
@@ -827,19 +904,21 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Gräns för konversationslängd
Trimma alla konversationer nu
Sök genom alla konversationer och påtvinga längdbegränsningar på konversationer
- Enheter
+ Länkade enheter
Ljust
Mörkt
Utseende
Tema
Standard
Språk
- Signal meddelanden och samtal
+ Signalmeddelanden och -samtal
Gratis privata meddelanden och samtal med andra Signalanvändare
Skicka in loggfilen för felsökning
\'WiFi Calling\' kompatibilitetsläge
Aktivera om din enhet använder SMS/MMS sändning över WiFi (aktivera endast när \'WiFi Calling\' är aktiverat på din enhet)
Blockerade kontakter
+ Godkännande av säkerhetsnummer
+ Kräv godkännande av nya säkerhetsnummer när de ändras
Visa i aviseringar
Vid användande av mobildata
Vid användande av Wi-Fi
@@ -873,6 +952,10 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Skicka meddelande igen
Spara bilaga
+
+ Självförstörande meddelanden
+
+ Meddelanden upphör
Bjud in
@@ -891,8 +974,6 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Ny konversation
- Säkerhet
- Verifiera identiteten
Starta om säker session
Ljud på
@@ -916,6 +997,8 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Sändning
Jämför
+ Visa din QR-kod
+ Skanna kontakts QR-kod
Nytt meddelande
Ny grupp
@@ -924,6 +1007,9 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Markera alla lästa
Bjud in vänner
Hjälp
+
+ Kopiera till urklipp
+ Jämför med urklipp
Din version av Signal är urgammal
@@ -938,6 +1024,7 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Tryck för att göra Signal till din standardapp för SMS.
STÄLL IN
Importera systemets SMS
+ Tryck för att kopiera din telefons SMS-meddelanden till Signals krypterade databas.
IMPORTERA
Aktivera Signalmeddelanden och samtal
Uppgradera din kommunikationsupplevelse.
@@ -955,7 +1042,10 @@ Signal uppnådde tidsgränsen för SMS-verifiering.
Mediatypen stöds ej
Spara
+ Vidarebefodra
+ Alla bilder
+ Spara alla
Bildförhandsgranskning
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index b3fad121849..8b9594d2277 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -5,6 +5,8 @@
இலà¯à®²à¯ˆ
நீகà¯à®•à¯
தயவà¯à®šà¯†à®¯à¯à®¤à¯ காதà¯à®¤à®¿à®°à¯à®™à¯à®•ளà¯...
+
+ பà¯à®¤à®¿à®¯ செயà¯à®¤à®¿
தறà¯à®ªà¯‡à®¾à®¤à¯: %s
நீஙà¯à®•ள௠இனà¯à®©à¯à®®à¯ ஒர௠கடவà¯à®šà¯à®šà¯†à®¾à®²à¯à®²à¯ˆ அமைகà¯à®•விலà¯à®²à¯ˆ!
@@ -37,16 +39,16 @@
(படமà¯)
- (ஆடியோ)
- (வீடியோ)
+ ( கேடà¯à®ªà¯Šà®²à®¿)
+ (காணொளி)
(இடமà¯)
மீடியாவை தேரà¯à®µà¯à®šà¯†à®¯à¯à®¯à¯à®®à¯ ஒர௠பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ.
நிழறà¯à®ªà®Ÿà®•à¯à®•à®°à¯à®µà®¿
- படமà¯
- வீடியோ
- ஆடியோ
+ பà¯à®•ைபà¯à®ªà®Ÿà®®à¯
+ காணொளி
+ கேடà¯à®ªà¯Šà®²à®¿
தொடரà¯à®ªà®¿à®©à¯ தகவலà¯
ஒலி இயகà¯à®•à¯à®µà®¤à®¿à®²à¯ பிழை!
@@ -55,12 +57,10 @@
உளà¯à®µà®°à¯à®®à¯ அழைபà¯à®ªà¯
- நீஙà¯à®•ள௠இநà¯à®¤ தொடரà¯à®ªà¯à®ªà¯ˆ
-உறà¯à®¤à®¿ செயà¯à®¯ விரà¯à®®à¯à®ªà®²à®¾à®®à¯
à®à®±à¯à®•
செயà¯à®¤à®¿ %s
- சமிகà¯à®žà¯ˆ அழைபà¯à®ªà¯ %s
+ சிகà¯à®©à®²à¯ அழைபà¯à®ªà¯ %s
செயà¯à®¤à®¿ அளவ௠: %d KB
காலாவதி நேரமà¯: %s
@@ -72,7 +72,7 @@
பாதà¯à®•ாபà¯à®ªà®±à¯à®± கà¯à®±à¯ˆà®µà®Ÿà¯ˆà®¨à¯à®¤ வழிகà¯à®•௠தொடவà¯à®®à¯
மறையாகà¯à®•படாத SMS-ஆக அனà¯à®ªà¯à®ªà®²à®¾à®®à®¾?
மறையாகà¯à®•படாத MMS-ஆக அனà¯à®ªà¯à®ªà®²à®¾à®®à®¾?
- இநà¯à®¤ ஊடகதà¯à®¤à¯ˆ திறகà¯à®• à®®à¯à®Ÿà®¿à®¯à¯à®®à¯ ஒர௠பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ.
+ இநà¯à®¤ ஊடகதà¯à®¤à¯ˆ திறகà¯à®• பயனà¯à®ªà®Ÿà¯à®®à¯ ஒர௠பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿à®•à¯à®• இயலவிலà¯à®²à¯ˆ
அனà¯à®ªà¯à®ªà®¿à®©à®°à¯ %s
பெறà¯à®©à®°à¯ %s
@@ -108,12 +108,12 @@
%1$s நாம௠சமிகà¯à®žà¯ˆà®•à¯à®•௠மாறà¯à®µà¯‹à®®à¯
நாம௠அரடà¯à®Ÿà¯ˆà®¯à®Ÿà®¿à®•à¯à®• இதை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà¯‹à®®à¯: %1$s
கà¯à®´à¯à®µà¯ˆ விடà¯à®Ÿà¯ விலகà¯à®µà®¤à®¿à®²à¯ பிழை...
+ எமà¯à®Žà®®à¯à®Žà®¸à¯ ஆதரவிலà¯à®²à¯ˆ
+ இச௠செயà¯à®¤à®¿à®¯à¯ˆ அனà¯à®ªà¯à®ª ஆதரவிலà¯à®²à¯ˆ உஙà¯à®•ள௠தொலைதொடரà¯à®ªà¯ சாதனம௠எம௠எம௠எஸ௠ஆதரவிலà¯à®²à¯ˆ
தயவ௠செயà¯à®¤à¯ ஒர௠தொடரà¯à®ªà¯ˆ தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯
- தடà¯à®ªà¯à®ªà¯à®¨à¯€à®•à¯à®•௠?
- உறà¯à®¤à®¿à®¯à®¾à®• இநà¯à®¤ தொடரà¯à®ªà¯ˆ தடை நீகà¯à®•௠?
தடà¯à®ªà¯à®ªà¯à®¨à¯€à®•à¯à®•
பà¯à®•ைபà¯à®ªà®Ÿà®•௠கரà¯à®µà®¿ கிடைபà¯à®ªà®¿à®²à®¿à®²à¯à®²à¯ˆ
- ஒலி பதிவà¯à®šà¯ செயà¯à®¯ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ!
+ ஒலி பதிவà¯à®šà¯ செயà¯à®¯ இயலவிலà¯à®²à¯ˆ!
கà¯à®°à®²à¯ செயà¯à®¤à®¿à®¯à¯ˆ அனà¯à®ªà¯à®ªà¯à®µà®¤à®¿à®²à¯ பிழை ...
செயà¯à®¤à®¿ விவரஙà¯à®•ளà¯
@@ -121,15 +121,16 @@
அனà¯à®ªà¯à®ªà¯à®¨à®°à¯: %1$s\nபோகà¯à®•à¯à®µà®°à®¤à¯à®¤à¯: %2$s\nஅனà¯à®ªà¯à®ªà®¿à®¯à®¤à¯: %3$s\nபெறà¯à®±à®¤à¯: %4$s
- தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ செயà¯à®¤à®¿à®¯à¯ˆ நீகà¯à®• ?
- - தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ செயà¯à®¤à®¿à®¯à¯ˆà®•ளை நீகà¯à®• ?
+ - தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ செயà¯à®¤à®¿à®•ளை நீகà¯à®• வேணà¯à®Ÿà¯à®®à®¾?
- தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ செயà¯à®¤à®¿à®¯à¯ˆà®•ளை நிரநà¯à®¤à®°à®®à®¾à®• நீகà¯à®•ீவிடà¯à®®à¯.
- தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ %1$d செயà¯à®¤à®¿à®¯à¯ˆà®•ளை நிரநà¯à®¤à®°à®®à®¾à®• நீகà¯à®•ீவிடà¯à®®à¯.
சேமிபà¯à®ªà®¿à®²à¯ சேரà¯à®•à¯à®•வேணà¯à®Ÿà¯à®®à®¾?
- வெறà¯à®±à®¿!
+ கோபà¯à®ªà¯ சேமிகà¯à®•படà¯à®Ÿà®¤à¯
சேமிபà¯à®ªà®¿à®²à¯ சேரà¯à®• இயலவிலà¯à®²à¯ˆ!
+ இணைபà¯à®ªà¯ சேமிகà¯à®•படà¯à®•ிறதà¯
நிலà¯à®µà¯ˆà®¯à®¿à®²à¯ உளà¯à®³à®¤à¯...
தரவ௠(சமிகà¯à®žà¯ˆ)
MMS
@@ -141,7 +142,7 @@
- தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ உரையாடலை அழி ?
- - தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ உரையாடலைகளை அழி ?
+ - தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ உரையாடலைகளை நீகà¯à®•à¯à®• ?
நீகà¯à®•பà¯à®ªà®Ÿà¯à®•ிறதà¯
தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ உரையாடலைகள௠நீகà¯à®•பà¯à®ªà®Ÿà¯à®•ிறத௠...
@@ -163,7 +164,6 @@
பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯ இயலà¯à®ªà¯à®¨à®¿à®²à¯ˆ: %s
எதà¯à®µà¯à®®à¯ இலà¯à®²à¯ˆ
- இபà¯à®ªà¯‡à®¾à®¤à¯
%d நிமிடமà¯
\'%s\' தà¯à®£à¯à®Ÿà®¿?
@@ -182,13 +182,15 @@
சமிகà¯à®žà¯ˆà®•à¯à®•௠வரவேறà¯à®•ிறதà¯.
சமிகà¯à®žà¯ˆà®•à¯à®•௠வரவேறà¯à®•ிறதà¯!
- TextSecure தறà¯à®ªà¯à®ªà¯‹à®¤à¯ சமிகà¯à®žà¯ˆ
+ TextLibre தறà¯à®ªà¯à®ªà¯‹à®¤à¯ சமிகà¯à®žà¯ˆ
à®à®±à¯à®±à¯à®®à®¤à®¿ செயà¯
ரதà¯à®¤à¯
à®à®±à¯à®±à¯à®®à®¤à®¿ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®•ிறதà¯
- வெறà¯à®±à®¿!
+ Google Play சேவை உடன௠TextSecure-஠பதிவ௠செயà¯à®¯ இயலவிலà¯à®²à¯ˆ. இணையதளம௠வழியாக தொடரà¯à®ªà¯à®Ÿà¯ˆà®¯à®¾à®Ÿà®²à¯ à®®à¯à®Ÿà®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®¤à¯, TextSecure அமைபà¯à®ªà¯à®•ள௠மெனà¯à®µà®¿à®²à¯ மறà¯à®ªà®¤à®¿à®µà¯à®šà¯à®šà¯†à®¯à¯à®¯ à®®à¯à®¯à®±à¯à®šà®¿à®•à¯à®•வà¯à®®à¯
+
+
பà¯à®¤à®¿à®¯ கà¯à®´à¯
கà¯à®´à¯à®µà¯ˆ மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯
@@ -229,7 +231,6 @@
பகிரà¯
- கà¯à®±à¯à®žà¯à®šà¯†à®¯à¯à®¤à®¿à®¯à¯ˆ அனà¯à®ªà¯à®ªà¯
இரதà¯à®¤à¯
அனà¯à®ªà¯à®ªà®Ÿà¯à®•ிறதà¯...
இதயமà¯
@@ -241,7 +242,6 @@
பாரà¯à®•ோட௠ஸà¯à®•ேனர௠நிறà¯à®µà®²à®¾à®®à®¾?
அனà¯à®ªà¯à®ª à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ
- பà¯à®¤à®¿à®¯ அடையாளமà¯
MMS சேமிபà¯à®ªà®¤à®¿à®²à¯ பிழை!
MMS சேவையà¯à®Ÿà®©à¯ இணைவதில௠பிழை...
@@ -278,20 +278,23 @@
எநà¯à®¤ சாதனமà¯à®®à¯ காணபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ.
இணையதà¯à®¤à®¿à®²à¯ பிழை.
QR கà¯à®±à®¿à®¯à¯€à®Ÿà¯ செலà¯à®²à®¾à®¤à¯.
+
கடவà¯à®šà¯à®šà¯†à®¾à®²à¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯.
கடவà¯à®šà¯à®šà¯†à®¾à®²à¯à®²à¯ˆ சமரà¯à®ªà¯à®ªà®¿à®•à¯à®•
தவறான கடவà¯à®šà¯à®šà¯†à®¾à®²à¯!
+ இச௠செயலியை மதிபà¯à®ªà¯à®°à¯ˆ செயà¯à®•
+ இச௠செயலியின௠பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ விரà¯à®®à¯à®ªà®¿à®©à®¾à®²à¯ தயை கூரà¯à®¨à¯à®¤à¯ எஙà¯à®•ள௠செயலியை மதிபà¯à®ªà¯à®°à¯ˆ செயà¯à®•
பிறகà¯
தடà¯
- உறà¯à®¤à®¿à®¯à®¾à®• இநà¯à®¤ தொடரà¯à®ªà¯ˆ தடை நீகà¯à®•௠?
தடà¯à®ªà¯à®ªà¯à®¨à¯€à®•à¯à®•
செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯
à®®à¯à®Ÿà®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯
+ பதிலளிகà¯à®•படà¯à®•ிறதà¯
அழைதà¯à®¤à®²à¯
அடிகà¯à®•ிறதà¯
à®®à¯à®®à¯à®®à¯à®°à®®à®¾à®•
@@ -343,6 +346,7 @@
மிக அதிக கோரிகà¯à®•ைகளà¯!
நீஙà¯à®•ள௠à®à®±à¯à®•னவே ஒர௠அழைபà¯à®ªà¯ˆ அணà¯à®®à¯ˆà®¯à®¿à®²à¯ கோரிதீரà¯à®•ளà¯. நீஙà¯à®•ள௠20 நிமிடஙà¯à®•ளà¯à®•à¯à®•௠பின௠மறà¯à®±à¯Šà®©à¯à®±à¯ˆ கோரலாமà¯.
பதிசெயà¯à®µà®¤à®¿à®²à¯ à®®à¯à®°à®£à¯à®ªà®¾à®Ÿà¯
+ இநà¯à®¤ எண௠à®à®±à¯à®•னவே வேற௠ஒர௠TextLibre வலைதளதà¯à®¤à®¿à®²à¯ (CyanogenMod?) பதிவாகியà¯à®³à¯à®³à®¤à¯ . நீஙà¯à®•ள௠இஙà¯à®•ே பதிவ௠செயà¯à®¯à¯à®®à¯à®®à¯à®©à¯ à®…à®™à¯à®•ே பதிவà¯à®¨à¯€à®•à¯à®•ம௠செயà¯à®¯à®µà¯‡à®£à¯à®Ÿà¯à®®à¯.
பதிவ௠மà¯à®´à¯à®®à¯ˆà®¯à¯à®±à¯à®±à®¤à¯
பதிவà¯à®šà¯†à®¯à¯à®¤à®²à®¿à®²à¯ பிழை
@@ -355,7 +359,6 @@
செயà¯à®¤à®¿ பெறபà¯à®ªà®Ÿà¯à®Ÿà®¤à¯!
செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•ாத நெறிமà¯à®±à¯ˆà®•à¯à®•௠சாவிபரிமாறà¯à®± செயà¯à®¤à®¿ பெறபà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.
- மேமà¯à®ªà®Ÿà¯à®¤à¯à®¤à®ªà¯à®ªà®Ÿà¯à®Ÿ ஆனால௠தெரியாத அடையாளதà¯à®¤à®•வல௠பெறபà¯à®ªà®Ÿà¯à®Ÿà®¤à¯. அடையாளதà¯à®¤à¯ˆ சரிபாரà¯à®•à¯à®• தொடவà¯à®®à¯.
நகல௠செயà¯à®¤à®¿.
கà¯à®´à¯à®µà¯ˆ விடà¯à®Ÿà¯ விலகினாரà¯...
@@ -365,20 +368,6 @@
தவறிய அழைபà¯à®ªà¯
பலà¯à®²à¯‚டகச௠செயà¯à®¤à®¿
- உஙà¯à®•ளிடம௠ஒர௠அடையாளசà¯à®šà®¾à®µà®¿ இலà¯à®²à¯ˆ.
- பெறà¯à®¨à®°à®¿à®Ÿà®®à¯ ஒர௠அடையாளசà¯à®šà®¾à®µà®¿ இலà¯à®²à¯ˆ.
- பெறà¯à®¨à®°à®¿à®Ÿà®®à¯ ஒர௠அடையாளசà¯à®šà®¾à®µà®¿ இலà¯à®²à¯ˆ!
- எசà¯à®šà®°à®¿à®•à¯à®•ை, ஸà¯à®•ேன௠செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ சாவி பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ! கவனமாக டிஜிடà¯à®Ÿà®²à¯ கைரேகையை சரிபாரà¯à®•à¯à®•வà¯à®®à¯.
- சரிபாரà¯à®•à¯à®•பà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ!
- அவரà¯à®•ளின௠சாவி சரியாக இரà¯à®•à¯à®•ிறதà¯. அதà¯à®ªà¯‡à®¾à®² அவரà¯à®•ளà¯à®®à¯ உஙà¯à®•ள௠சாவியை சரிபாரà¯à®ªà¯à®ªà®¤à¯ அவசியமà¯.
- சரிபாரà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯!
- உஙà¯à®•ளிடம௠ஒர௠அடையாளசà¯à®šà®¾à®µà®¿ இலà¯à®²à¯ˆ!
-
- உஙà¯à®•ளிடம௠ஒர௠அடையாளசà¯à®šà®¾à®µà®¿ இலà¯à®²à¯ˆ.
- எசà¯à®šà®°à®¿à®•à¯à®•ை, ஸà¯à®•ேன௠செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ சாவி பொரà¯à®¨à¯à®¤à®µà®¿à®²à¯à®²à¯ˆ!
- சரிபாரà¯à®•à¯à®•பà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ!
- ஸà¯à®•ேன௠செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ சாவி பொரà¯à®¨à¯à®¤à®¿à®¯à¯à®¤à¯!
- சரிபாரà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯!
பழைய கோரிகà¯à®•ை இரà¯à®ªà¯à®ªà®¿à®©à¯à®®à¯ தொடஙà¯à®•லாமா?
அனà¯à®ªà¯à®ªà¯
@@ -450,6 +439,7 @@
சமீபதà¯à®¤à®¿à®¯ அழைபà¯à®ªà¯à®•ள௠இலà¯à®²à¯ˆ.
+ சிகà¯à®©à®²à¯ தகவல௠அனà¯à®ªà¯à®ªà¯à®•
பாதà¯à®•ாபà¯à®ªà®¿à®²à¯à®²à®¾à®¤ SMS அனà¯à®ªà¯à®ªà¯
பாதà¯à®•ாபà¯à®ªà®¿à®²à¯à®²à®¾à®¤ MMS அனà¯à®ªà¯à®ªà¯
அனà¯à®ªà¯à®ªà¯
@@ -473,6 +463,7 @@
பதிவிறகà¯à®•à®®à¯
தொடரà¯à®ªà®¿à®©à¯ பà¯à®•ைபà¯à®ªà®Ÿà®®à¯
பதிவிறகà¯à®•பà¯à®ªà®Ÿà¯à®•ிறதà¯
+
தொகà¯à®ªà¯à®ªà®¾à®¯à¯ தேரà¯à®µà¯ செயà¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯
%s தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯
@@ -486,6 +477,10 @@
பà¯à®¤à¯à®•௠கரà¯à®µà®¿à®¯à¯ˆ இனைகà¯à®•
தொடரà¯
+
+ அணை
+
+
உஙà¯à®•ள௠உதவிகà¯à®•௠நனà¯à®±à®¿!
சமரà¯à®ªà®¿à®ªà¯à®ªà®¿à®•à¯à®•பà¯à®ªà®Ÿà¯à®•ிறதà¯
@@ -571,13 +566,11 @@
சாவிகள௠உரà¯à®µà®¾à®•à¯à®•பà¯à®ªà®Ÿà¯à®•ிறதà¯...
எசà¯à®šà®°à®¿à®•à¯à®•ை
தொலைபேசி
- பாரà¯à®•à¯à®•
+ சரி பாரà¯à®•à¯à®•
ஒர௠பெயர௠அலà¯à®²à®¤à¯ எணà¯à®£à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯
- கà¯à®´à¯à®‰à®±à¯à®ªà¯à®ªà®¿à®©à®°à¯ சேரà¯à®•à¯
-
- அவரà¯à®•ளின௠அடையாளம௠(அவரà¯à®•ள௠படிகà¯à®•):
- உஙà¯à®•ளின௠அடையாளம௠(நீஙà¯à®•ள௠படிகà¯à®•):
+
+
சில பிரசà¯à®šà®¿à®©à¯ˆà®•ளà¯à®•à¯à®•௠உஙà¯à®•ள௠கவனம௠தேவைபà¯à®ªà®Ÿà¯à®•ிறதà¯.
அனà¯à®ªà¯à®ªà®ªà®Ÿà¯à®Ÿà®¤à¯
@@ -590,9 +583,8 @@
கடவà¯à®šà¯à®šà¯†à®¾à®²à¯à®²à¯ˆ உரà¯à®µà®¾à®•à¯à®•à¯
கடவà¯à®šà¯à®šà¯†à®¾à®²à¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯.
தொடரà¯à®ªà¯à®•ளை தேரà¯à®¨à¯à®¤à¯†à®Ÿà¯
- பொத௠அடையாளச௠சாவி
+ சிகà¯à®©à®²à¯ செயலி உணரபà¯à®ªà®Ÿà¯à®Ÿà®¤à¯
கடவà¯à®šà¯à®šà¯†à®¾à®²à¯à®²à¯ˆ மாறà¯à®±à¯
- அடையாளதà¯à®¤à¯ˆ சரிபாரà¯
அனைதà¯à®¤à¯ படஙà¯à®•ளà¯
%1$s உடன௠உளà¯à®³ அனைதà¯à®¤à¯ படஙà¯à®•ளà¯
செயà¯à®¤à®¿ விவரஙà¯à®•ளà¯
@@ -679,7 +671,6 @@
நீஙà¯à®•ள௠அனà¯à®ªà¯à®ªà¯à®®à¯ அனைதà¯à®¤à¯ SMS-களà¯à®•à¯à®•à¯à®®à¯ விநியோக அறிகà¯à®•ைகளை வேணà¯à®Ÿà®µà¯à®®à¯
பழைய செயà¯à®¤à®¿à®•ளை நீகà¯à®•
உரையாடலின௠நீள அளவà¯
- கரà¯à®µà®¿à®•ளà¯
வெளிசà¯à®šà®®à®¿à®•à¯à®•
இரà¯à®³à¯à®•ொணà¯à®Ÿ
தோறà¯à®±à®®à¯
@@ -713,6 +704,8 @@
செயà¯à®¤à®¿à®¯à¯ˆ மீணà¯à®Ÿà¯à®®à¯ அனà¯à®ªà¯à®ªà¯
இணைபà¯à®ªà¯ˆà®šà¯ சேமி
+
+
அழை
@@ -729,8 +722,6 @@
பà¯à®¤à®¿à®¯ உரையாடலà¯
- பாதà¯à®•ாபà¯à®ªà¯
- அடையாளதà¯à®¤à¯ˆ சரிபாரà¯
ஒலிதà¯à®¤à®Ÿà¯ˆà®¯à¯ˆ நீகà¯à®•à¯
@@ -757,6 +748,7 @@
பூடà¯à®Ÿà¯
அனைதà¯à®¤à¯ˆà®¯à¯à®®à¯ படிதà¯à®¤à®¾à®• கà¯à®±à®¿à®¯à®¿à®Ÿà¯
உதவி
+
பà¯à®¤à¯à®ªà¯à®ªà®¿à®•à¯à®•பà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®¤à®²à¯
பொறà¯à®¤à¯à®¤à¯
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 037146705a4..cdfa2b5c6f3 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -5,13 +5,15 @@
Hayır
Sil
Lütfen bekleyin...
+
+ Yeni mesaj
Åžu anda: %s
- Hala bir parola belirlememiÅŸsiniz!
+ Hâlâ bir parola belirlememişsiniz!
- sohbet başına %d mesaj
- Tüm eski mesajlar silinsin mi?
+ Bütün eski mesajlar silinsin mi?
- Bu işlem tüm sohbetleri en yeni %d mesaja kadar kırpar.
@@ -59,8 +61,8 @@
Gelen arama
- %1$s için tanımlama anahtarı değişti. Bunun anlamı birisi sizin iletişiminizi kesmeye çalışıyor, veya %2$s Signal\'i tekrardan yükledi ve şimdi yeni bir tanımlama anahtarı var.
- Bu kiÅŸiyi doÄŸrulamak isteyebilirsiniz.
+ %1$s ile güvenlik numaranız değişti. Bu, birisinin sizin iletişiminizi engellemeye çalıştığı veya %2$s yalnızca Signal\'i yeniden yüklediği anlamına gelebilir.
+ Bu kişiyle güvenlik numaranızı doğrulamak isteyebilirsiniz.
Kabul et
%s Mesaj
@@ -118,13 +120,14 @@
MMS desteklenmiyor
Taşıyıcınız MMS desteklemediği için bu mesaj gönderilemez.
Lütfen bir kişi seç
- Engeli kaldır?
- Bu kişinin engelini kaldırmak istediğinizden emin misiniz?
+ Bu kişinin engellemesini kaldır?
+ Bu kişiden gelen mesajları ve aramaları almak bir kez daha mümkün olacak.
Engeli kaldır
Dosya ekiniz gönderdiğiniz mesaj türü için olan boyut limitini aşıyor.
Kamera kullanılamıyor
Ses kaydedilemedi!
Sesli mesaj gönderilirken hata...
+ Cihazınızda bu linke ulaşmanız için gereken hiç bir uygulama yüklü değil.
Mesaj ayrıntıları
Aktarım: %1$s\nGönderilen/Alınan: %2$s
@@ -140,15 +143,15 @@
- %1$d medyanın tümünü depolama alanına kaydetmek, telefonunuzda ki diğer uygulamaların erişimine izin verecektir.\n\nDevam edilsin mi?
- - Depolama alanına ek kaydedilirken hata oluştu!
+ - Ekler depolama alanına kaydedilirken hata oluştu!
- Başarılı!
+ Dosya başarıyla kaydedildi.
Depolama alanına yazılamıyor!
- - %1$d kaydediliyor
+ - %1$d ekleri kaydediliyor
- - %1$d depolama alanına kaydediliyor...
+ - %1$d ekleri depolama alanına kaydediliyor...
Ekler toplanıyor...
Bekleyen...
@@ -159,6 +162,7 @@
Mesajlar siliniyor...
Ara...
+ Cihazınıza yüklü tarayıcı bulunmamaktadır.
- Seçilmiş sohbetleri sil?
@@ -184,7 +188,7 @@
Kullanılan varsayılan: %s
Hiçbiri
- Åžimdi
+ Az önce
%d dk.
\'%s\' bağlantısını kaldır?
@@ -216,10 +220,15 @@
Metin dışa aktarılıyor...
Hata, depolama alanına yazılamıyor.
Depolama alanına yazılırken hata.
- Başarılı!
+ Dışa aktarma başarılı.
Kalıcı Signal haberleşme hatası!
Signal Google Play Servislerine kayıt olamadı. Signal mesajları ve aramaları devre dışı bırakıldı, Lütfen Ayarlar > Gelişmiş kısmından tekrardan kayıt olmayı deneyin.
+
+ Tam çözünürlükte GIF alınırken hata oluştu...
+
+ GIFler
+ Çıkartmalar
Yeni grup
Grubu güncelle
@@ -266,14 +275,14 @@
Sesli mesaj kaydetmek için dokun ve basılı tut, göndermek için bırak
PaylaÅŸ
- SMS Gönder
+ Kişileri seç
İptal
Gönderiliyor...
EriÅŸilebilirlik
Davetler gönderildi!
Signal\'e davet et
-
- - Arkadaşlara gönder %d
+
+ - %d ARKADAŞINA SMS GÖNDER
- %d SMS daveti yolla?
@@ -287,7 +296,7 @@
Signal QR kodları için Barkod Tarayıcısına ihtiyaç duyar.
Başarısız gönderme
- Yeni kimlik
+ Yeni güvenlik numarası
MMS depolama hatası!
MMS sağlayıcısına bağlanma hatası...
@@ -312,6 +321,9 @@
%s arandı
%s tarafından cevapsız çağrı
%s Signal\'e katıldı, ona merhaba de!
+ Mesaj yok olma zamanını %1$s olarak belirlediniz.
+ %1$s mesaj yok olma zamanını %2$s olarak belirledi.
+ %s ile güvenlik numaranız değişti.
Parolalar uyuÅŸmuyor!
Yanlış eski parola!
@@ -334,6 +346,10 @@
Maalesef, bu geçerli bir aygıt bağlama QR kodu değil.
Bir Signal cihazına bağlanılsın mı?
3. parti bir tarayıcı kullanarak bir Signal cihazına bağlanmaya çalışıyor gibi görünüyorsunuz. Kendi güvenliğinizi korumak için, Kodu lütfen Signal içinden tarayınız.
+
+ Yok olan mesajlar
+ Mesajlarınız yok olmaz.
+ Bu sohbette gönderilen ve alınan mesajlar görüldükten %s sonra yok olur.
Parola girin
Signal simgesi
@@ -347,12 +363,14 @@
Puan ver!
Hayır
Sonra
+ Hoppala, Play Store uygulaması cihazınıza yüklenmiş görünmüyor.
Bu kiÅŸiyi engelle?
- Artık bu kullanıcıdan mesaj ya da çağrı almayacaksınız.
+ Artık bu kişiden gelen mesajları ve aramaları almayacaksınız.
Engelle
Bu kişinin engellemesini kaldır?
- Bu kişinin engelini kaldırmak istediğinizden emin misiniz?
+ Bu kişiden gelen mesajları ve aramaları almak bir kez daha mümkün olacak.
+
Engeli kaldır
Etkin
Devre dışı
@@ -433,9 +451,9 @@ Numaranızı ikinci kez kontrol ediniz! Numaranızı bir SMS ile doğrulamak üz
mesajı alındı!
Geçersiz protokol sürümünde anahtar değişim mesajı alındı.
- Bilinmeyen kimlik anahtarı içeren mesaj alındı. Anahtarı işlemek ve mesajı görüntülemek için dokunun.
- Güncellenmiş fakat bilinmeyen bir kimlik bilgisi alındı. Kimlik doğrulaması için dokunun.
+ Yeni güvenlik numarası ile mesaj alındı. İşlemek ve görüntülemek için dokunun.
Güvenli oturumu sıfırla.
+ %s güvenli oturumu sıfırla.
Yinelenen ileti.
Gruptan ayrıldı...
@@ -446,26 +464,16 @@ Geçersiz protokol sürümünde anahtar değişim mesajı alındı.
Cevapsız arama
Medya mesajı
%s Signal\'de, ona merhaba de!
+ Mesaj yok olma zamanı %s olarak belirlendi
+ %s ile güvenlik numaranız değişti.
- Kimlik anahtarınız yok.
- Alıcının kimlik anahtarı yok.
- Alıcının kimlik anahtarı yok!
- KiÅŸinin QR kodunu tara
- QR kodunuzu görüntüleyin
- UYARI, taranan anahtar EŞLEŞMİYOR! Parmak izi metnini dikkatlice inceleyin.
- Doğrulanmadı!
- Onların anahtarı doğru. Anahtarınızı onlarla da doğrulamanız gerekiyor.
- Doğrulandı!
- Kimlik anahtarınız yok!
-
- Kimlik anahtarınız yok.
- KiÅŸinin QR kodunu tara
- QR kodunuzu görüntüleyin
- UYARI, taranan anahtar EŞLEŞMİYOR!
- Doğrulanamadı!
- Taranan anahtar eÅŸleÅŸiyor!
- Doğrulandı!
- Parmak izi kimliÄŸiniz
+ Kişi Signal\'in eski bir sürümünü kullanıyor. Güvenlik numaranızı onaylamadan önce güncelleme yapmalarını isteyin.
+ Kişi QR kod biçimi ile uyumlu olmayan Signal\'in daha yeni bir sürümü kullanıyor. Karşılaştırmak için uygulamayı güncelleyin.
+ Taranan QR kodu doğru biçimlendirilmiş bir güvenlik numarası doğrulama kodu değil. Lütfen tekrar taramayı deneyin.
+ Güvenlik numarasını paylaş...
+ Signal güvenlik numaramız:
+ Paylaşmak için herhangi bir uygulamanız yok gibi görünüyor.
+ Karşılaştırmak için panoda hiçbir güvenlik numarası bulunamadı
Varolan isteÄŸe raÄŸmen baÅŸlat?
Gönder
@@ -494,7 +502,7 @@ Geçersiz protokol sürümünde anahtar değişim mesajı alındı.
İçe aktarma sürüyor
Mesajlar içe aktarılıyor
Aktarım tamamlandı
- Signal sistem veri tabanı aktarması tamamlandı.
+ Sistem veritabanı aktarması tamamlandı.
Açmak için dokunun.
Açmak için dokunun, veya kapatmak için kilide dokunun.
@@ -521,11 +529,20 @@ Geçersiz protokol sürümünde anahtar değişim mesajı alındı.
Yeni mesaj
Resim
+ Resim
Ses
+ Ses
Video
+ Video
KiÅŸi
+ KiÅŸi
Kamera
+ Kamera
Konum
+ Konum
+ GIF
+ Gif
+ Ek çekmecesini göster/gizle
Eski parola
Yeni parola
@@ -549,13 +566,16 @@ Geçersiz protokol sürümünde anahtar değişim mesajı alındı.
Signal mesajı gönder
Güvensiz SMS gönder
Güvensiz MMS gönder
+ Gönderen %1$s
Gönder
Kaldır
%1$s ile sohbet
Mesaj yaz
Emoji klavyesini göster/gizle
- Küçük resim ekle
- Geçiş eki çekmecesi
+ Ek küçük resmi
+ Hızlı kamera eki çekmecesini göster/gizle
+ Ses eki kaydet ve gönder
+ SMS için Signal\'i etkinleştir
İPTAL ETMEK İÇİN KAYDIR
@@ -572,6 +592,10 @@ Geçersiz protokol sürümünde anahtar değişim mesajı alındı.
İndir
Kişi fotoğrafı
İndiriliyor
+
+ Oynat
+ Durdur
+ İndir
Toplu seçim modu
%s seçildi
@@ -587,11 +611,38 @@ Geçersiz protokol sürümünde anahtar değişim mesajı alındı.
Yeni cihaz baÄŸla
devam
+
+ Kapalı
+
+ - %d saniye
+
+ %ds
+
+ - %d dakika
+
+ %dd
+
+ - %d saat
+
+ %ds
+
+ - %d gün
+
+ %dg
+
+ - %d hafta
+
+ %dh
+
+ GIFleri ve çıkartmaları ara
+
+ Hiçbir şey bulunamadı
Cihazınızda bulunan log kayıtları okunamadı. ADB kullanarak log kayıtlarına erişim sağlayabilirsiniz.
Yardımınız için teşekkürler!
Gönderiliyor
Loglar gönderiliyor...
+ Yüklü tarayıcı yok
Mevcut metin mesajlarınızı Signal\'in şifreli veritabanına almak ister misiniz?
Varsayılan sistem veritabanı hiçbir şekilde değiştirilemez veya dönüştürülemez.
@@ -644,7 +695,7 @@ Geçersiz protokol sürümünde anahtar değişim mesajı alındı.
Engelle
Renk
Bu kişi için renk
- KimliÄŸi doÄŸrula
+ Güvenlik numarasını doğrulayın
Signal Araması
Aramayı sonlandır
@@ -711,14 +762,17 @@ başarısız.
Kontrol et
Bir isim veya numara girin
- Üye ekle
-
- Onların kimliği (onların okuduğu):
- Sizin kimliÄŸiniz (sizin okuduÄŸunuz):
+ Üye ekle
+
+ Güvenlik numaralarını doğrulama hakkında daha fazla bilgi edinin..]]>
+ Taramak için dokunun
+
+ Güvenlik numarasını paylaş
Bazı sorunlar ilginizi gerektiriyor.
Gönderildi
Alındı
+ Yok olma
Vasıtasıyla
Alıcı:
Gönderen:
@@ -728,20 +782,18 @@ başarısız.
Parolayı girin
Kişileri seç
Signal algılandı
- Kimlik anahtarım
Parolayı değiştir
- KimliÄŸi doÄŸrula
+ Güvenlik numarasını doğrulayın
Hata ayıklama günlüğünü gönder
Medya önizleme
Tüm resimler
%1$s ile tüm resimler
Mesaj ayrıntıları
- Bağlanmış cihazları yönetin
+ Bağlı cihazlar
Arkadaşlarını davet et
ArÅŸivlenmiÅŸ sohbetler
İçe/Dışa Aktar
- Kimlik anahtarınız
Varsayılanı kullan
Özelleştirilmiş kullan
1 saatliÄŸine sustur
@@ -844,7 +896,7 @@ başarısız.
Sohbet uzunluk sınırı
Tüm sohbetleri şimdi kırp
Tüm sohbetleri tara ve sohbet uzunluğu limitlerini uygula
- Cihazlar
+ Bağlı cihazlar
Açık
Koyu
Görünüm
@@ -857,6 +909,8 @@ başarısız.
\'WiFi Calling\' uyumluluk modu
Cihazınızın WiFi üzerinden SMS/MMS gönderimini kullanıyorsa etkinleştirin (yalnızca \'WiFi Araması\' cihazınızda etkin olduğunda etkinleştirin)
EngellenmiÅŸ kiÅŸiler
+ Güvenlik numaraları onayı
+ Değiştirdiklerinde yeni güvenlik numaraları onayını gerektirir
Bildirimlerde göster
Mobil veri kullanırken
Wi-Fi kullanırken
@@ -890,6 +944,10 @@ başarısız.
Mesajı tekrar gönder
Eki kaydet
+
+ Yok olan mesajlar
+
+ Mesajlar yok oluyor
Davet et
@@ -908,8 +966,6 @@ başarısız.
Yeni sohbet
- Güvenlik
- KimliÄŸi doÄŸrula
Güvenli oturumu sıfırla
Sesi aç
@@ -943,6 +999,9 @@ başarısız.
Tümünü okundu olarak işaretle
Arkadaşlarını davet et
Yardım
+
+ Panoya kopyala
+ Pano ile karşılaştır
Signal sürümünüz eski kalmış
@@ -974,6 +1033,8 @@ başarısız.
Desteklenmeyen medya türü
Kaydet
+ İleri
+ Tüm resimler
Tümünü kaydet
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 89437785a81..6f25c426d4a 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -5,35 +5,41 @@
ÐÑ–
Видалити
Будь лаÑка, зачекайте...
+
+ Ðове повідомленнÑ
- Зараз: %s
- Ви ще не вказали фразу-пароль!
+ Поточний: %s
+ Ви ще не вÑтановили фразу-пароль!
- 1 Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° розмову
- %d Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° розмову
- %d повідомлень на розмову
Вилучити вÑÑ– Ñтарі Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ñ€Ð°Ð·?
+
+ - Це одразу Ñкоротить вÑÑ– розмови до оÑтаннього повідомленнÑ.
+ - Це одразу Ñкоротить вÑÑ– розмови до %d оÑтанніх повідомлень.
+ - Це одразу Ñкоротить вÑÑ– розмови до %d оÑтанніх повідомлень.
+
Видалити
- Відключити фразу-пароль?
- Це відразу розблокує Signal та ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ повідомленнÑ.
+ Вимкнути фразу-пароль?
+ Це назавжди розблокує Signal та ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ.
Вимкнути
- ÐŸÑ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð½Ñ Ñ€ÐµÑ”Ñтрації
- ÐŸÑ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð¿Ð¸Ñки на Ð¿Ð¾Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° дзвінки Signal...
- Відключити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° дзвінки Signal?
- Це відключить Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Signal шлÑхом Ð¿Ñ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð½Ñ Ð’Ð°ÑˆÐ¾Ñ— реєÑтрації на Ñервері. Вам знадобитьÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾ зареєÑтрувати Ñвій номер телефону, щоб кориÑтуватиÑÑ Signal Ð´Ð»Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ повідомленнÑми в майбутньому.
-
+ Зупинити реєÑтрацію
+ ÐŸÑ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð½Ñ Ñ€ÐµÑ”Ñтрації на Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° виклики Signal...
+ Вимкнути Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° виклики Signal?
+ ÐŸÑ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð½Ñ Ñ€ÐµÑ”Ñтрації на Ñервері вимкне Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° виклики Signal. Вам знадобитьÑÑ Ð·Ð½Ð¾Ð²Ñƒ зареєÑтрувати ваш номер телефону, щоб кориÑтуватиÑÑ Ð½Ð¸Ð¼Ð¸ в майбутньому.
Помилка Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ Ñервера!
- SMS Вимкнено
+ SMS увімкнено
ТоркнітьÑÑ, щоб змінити типову програму Ð´Ð»Ñ SMS
SMS вимкнено
- ТоркнітьÑÑ, щоб зробити Сигнал заÑтоÑунком Ð´Ð»Ñ SMS за замовчуваннÑм
- увімкнено
- Увімкнено
- вимкнено
- Вимкнено
+ ТоркнітьÑÑ, щоб зробити Signal типовою програмою Ð´Ð»Ñ SMS
+ увімк.
+ Увімк.
+ вимк.
+ Вимк.
SMS %1$s, MMS %2$s
- Пароль %1$s, ЗахиÑÑ‚ єкрану %2$s
+ Пароль %1$s, Безпека екрану %2$s
Тема %1$s, Мова %2$s
@@ -45,27 +51,24 @@
(зображеннÑ)
(звук)
(відео)
- (міÑцезнаходженнÑ)
+ (розташуваннÑ)
- Ðе можу знайти заÑтоÑунку Ð´Ð»Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾ типу даних.
+ Ðеможливо знайти програму Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾ медіа.
Камера
ЗображеннÑ
Відео
Ðудіо
- Контактні дані
+ Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ñƒ
- Помилка при відтворенні аудіо!
+ Помилка Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð°ÑƒÐ´Ñ–Ð¾!
Заблоковані контакти
- Вхідні дхвінки
+ Вхідний виклик
- Ключ ідентифікації Ð´Ð»Ñ %1$s змінивÑÑ. Це має означати, що хтоÑÑŒ намагаєтьÑÑ
- перехопити Вашу розмову, або %2$s проÑто перевÑтановив Signal Ñ– має новий
- ключ ідентифікації.
-
- Можливо, вам потрібно перевірити цей контакт.
+ Ваш номер безпеки із %1$s змінивÑÑ. Це може означати або те, що хтоÑÑŒ намагаєтьÑÑ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð¿Ð¸Ñ‚Ð¸ вашу розмову, або те, що %2$s проÑто перевÑтановив Signal.
+ Можливо, ви хочете перевірити ваш номер безпеки із цим контактом.
ПрийнÑти
ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ %s
@@ -74,33 +77,33 @@
Розмір повідомленÑ: %d KБ
ЗавершуєтьÑÑ: %s
Ðе доÑтавлено
- ПереглÑнути захищений медіа-файл?
- Цей медіафайл зберігаєтьÑÑ Ñƒ зашифрованому виглÑді. Ðажаль, Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб відкрити його у зовнішній програмі, його необхідно розшифрувати та запиÑати на диÑк. Ви впевнені що хочете це зробити?
+ ПереглÑнути захищене медіа?
+ Це медіа зберігалоÑÑ Ñƒ зашифрованій базі даних. Ðа жаль, щоб переглÑнути його за допомогою зовнішнього переглÑдача вміÑту, потрібно тимчаÑово розшифрувати та запиÑати дані на Ñховище. Ви впевнені, що хочете це зробити?
Помилка, отримано заÑтаріле Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ ключами.
- Отримано Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ ключами, доторкнітьÑÑ Ñ‰Ð¾Ð± його обробити
- %1$s більше не в групі.
- ТоркнітьÑÑ Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´ÐµÑ‚Ð°Ð»ÐµÐ¹
+ Отримано Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ ключами, торкнітьÑÑ, щоб продовжити.
+ %1$s покидає групу.
+ ТоркнітьÑÑ Ð´Ð»Ñ Ð´ÐµÑ‚Ð°Ð»ÐµÐ¹
ТоркнітьÑÑ Ð´Ð»Ñ Ð½ÐµÐ·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ запаÑного варіанту
СкориÑтатиÑÑ Ð½ÐµÐ·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ð¼ SMS Ñк запаÑним варіантом?
СкориÑтатиÑÑ Ð½ÐµÐ·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ð¼ MMS Ñк запаÑним варіантом?
- Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ðµ буде зашифровано, оÑкільки отримувач більше не кориÑтуєтьÑÑ Signal.\n\nÐадіÑлати незахищене повідомленнÑ?
- Ðе знайдено заÑтоÑунку Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файлу.
+ Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ðµ буде зашифровано, оÑкільки одержувач більше не кориÑтуєтьÑÑ Signal.\n\nÐадіÑлати незахищене повідомленнÑ?
+ Ðеможливо знайти програму Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ†ÑŒÐ¾Ð³Ð¾ медіа.
від %s
до %s
- Скинути безпечну ÑеÑÑ–ÑŽ?
- Це може допомогти Ñкщо у Ð²Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸ із шифруваннÑм у цій розмові. Ваші Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ збережено.
+ Скинути безпечний ÑеанÑ?
+ Це може допомогти, Ñкщо у Ð²Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸ із шифруваннÑм у цій розмові. Ваші Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ збережено.
Скинути
Видалити розмову?
Це назавжди видалить уÑÑ– Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñƒ цій розмові.
- Додати прикріпленнÑ
- Виберіть контакт
- СклаÑти повідомленнÑ
+ Додати вкладеннÑ
+ Оберіть інформацію контакту
+ ÐапиÑати повідомленнÑ
Вибачте, ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при обробці вкладеннÑ.
- Обраний gif завеликий!
- Пробачте, вибране відео більше за Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð² (%1$skB).
- Вибачте, вибраний Ð·Ð²ÑƒÐºÐ¾Ð·Ð°Ð¿Ð¸Ñ Ð±Ñ–Ð»ÑŒÑˆÐ¸Ð¹ за Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ (%1$skB).
- ÐдреÑа одержувача не Ñ” ні номером телефону, ні адреÑою електронної пошти!
+ Обране gif завелике!
+ Вибачте, обране відео перевищує Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñƒ (%1$skB).
+ Вибачте, обране аудіо перевищує Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñƒ (%1$skB).
+ ÐдреÑа одержувача SMS чи e-mail хибна!
ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ”!
УчаÑники групи
Групова розмова
@@ -113,42 +116,64 @@
Чернетку збережено
ÐеприпуÑтимий отримувач!
Дзвінки не підтримуютьÑÑ
- Ваше приÑтрій мабуть не підтримує голоÑові дзвінки.
+ ЗдаєтьÑÑ, цей приÑтрій не підтримує виклики.
Покинути групу?
Ви дійÑно хочете покинути цю групу?
Ðезахищене SMS
Ðезахищене MMS
Signal
- Давайте перейдемо до Signal %1$s
- Давайте ÑкориÑтаємоÑÑŒ цією перепиÑкою: %1$s
+ Давай перейдемо у Signal %1$s
+ Давай викориÑтовувати це Ð´Ð»Ñ Ñ‡Ð°Ñ‚Ñƒ: %1$s
Помилка виходу з групи...
MMS не підтримуєтьÑÑ
- Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ надіÑлати, оÑкільки Ваш оператор не підтримує MMS.
+ Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ надіÑлати, оÑкільки ваш оператор не підтримує MMS.
Будь лаÑка, виберіть контакт
- Розблокувати?
- Ви впевнені, що бажаєте розблокувати цей контакт?
+ Розблокувати цей контакт?
+ Ви знову зможете одержувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° виклики від цього контакту.
Розблокувати
- Ð’ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° розміром Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ñƒ повідомленнÑ, Ñке Ви намагаєтеÑÑ Ð½Ð°Ð´Ñ–Ñлати
+ Ð’ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° розміром Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ñƒ повідомленнÑ, Ñке ви надÑилаєте.
Камера недоÑтупна
Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати аудіо!
Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²ÐºÐ¸ голоÑовго повідомленнÑ...
+ Ðемає програми на вашому приÑтрої, що може відкрити це поÑиланнÑ.
Деталі повідомленнÑ
- ТранÑпорт: %1$s\nÐадіÑлано/Отримано: %2$s
- Відправник: %1$s\nТранÑпорт: %2$s\nÐадіÑлано: %3$s\nОтримано: %4$s
+ Тип зв\'Ñзку: %1$s\nÐадіÑлано/Одержано: %2$s
+ Відправник: %1$s\nТип зв\'Ñзку: %2$s\nÐадіÑлано: %3$s\nОдержано: %4$s
- Видалити обране повідомленнÑ?
- Видалити обрані повідомленнÑ?
- Видалити обрані повідомленнÑ?
- - Це оÑтаточно видалить обране повідомленнÑ.
- - Це оÑтаточно видалить уÑÑ– %1$d обраних повідомлень.
- - Це оÑтаточно видалить уÑÑ– %1$d обрані повідомленнÑ.
+ - Це назавжди видалить обране повідомленнÑ.
+ - Це назавжди видалить уÑÑ– %1$d обрані повідомленнÑ.
+ - Це назавжди видалить уÑÑ– %1$d обраних повідомлень.
Зберегти на ноÑій?
- УÑпішно!
- Ðе можу запиÑати на ноÑій!
+
+ - Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файлу до пам\'Ñті приÑтрою зробить його доÑтупним іншим програмам на вашому приÑтрої.\n\nПродовжити?
+ - Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… %1$d файлів до пам\'Ñті приÑтрою зробить Ñ—Ñ… доÑтупними Ð´Ð»Ñ Ñ–Ð½ÑˆÐ¸Ñ… програм на вашому приÑтрої.\n\nПродовжити?
+ - Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… %1$d файлів до пам\'Ñті приÑтрою зробить Ñ—Ñ… доÑтупними Ð´Ð»Ñ Ñ–Ð½ÑˆÐ¸Ñ… програм на вашому приÑтрої.\n\nПродовжити?
+
+
+ - Під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ Ð´Ð¾ Ñховища ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°!
+ - Під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²ÐºÐ»Ð°Ð´ÐµÐ½ÑŒ до Ñховища ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°!
+ - Під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²ÐºÐ»Ð°Ð´ÐµÐ½ÑŒ до Ñховища ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°!
+
+ Файл уÑпішно збережено.
+ Ðеможливо запиÑати до Ñховища!
+
+ - Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ
+ - Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ %1$d вкладень
+ - Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ %1$d вкладень
+
+
+ - Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ Ð´Ð¾ Ñховища...
+ - Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ %1$d вкладень до Ñховища...
+ - Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ %1$d вкладень до Ñховища...
+
+ Збираю вкладеннÑ...
ОчікуваннÑ...
Дані (Signal)
MMS
@@ -157,39 +182,45 @@
Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ...
Пошук...
+ Ðа вашому приÑтрої не вÑтановлено браузер.
- - Видалити вибрану беÑіду?
- - Видалити вибрані беÑіди?
- - Видалити вибрані беÑіди?
+ - Видалити обрану беÑіду?
+ - Видалити обрані беÑіди?
+ - Видалити обрані беÑіди?
- Це оÑтаточно видалить обрану беÑіду.
- Це оÑтаточно видалить уÑÑ– %1$d обрані беÑіди.
- Це оÑтаточно видалить уÑÑ– %1$d обрані беÑіди.
- ВилученнÑ
+ ВидаленнÑ
Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð½Ð¸Ñ… розмов...
- Розмову заархівовано
- - %d заархівовані розмови
- - %d заархівовано розмов
+ - %d розмови заархівовано
+ - %d розмов заархівовано
СКÐСУВÐТИ
+
+ - Розмову переміщено до вхідних
+ - %d розмови переміщено до вхідних
+ - %d розмов переміщено до вхідних
+
- ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ ключами\u2026
+ ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ ключами...
Ðрхівовані розмови (%d)
- ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾: %s
- ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð° замовчуваннÑм: %s
+ ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ð»Ð°Ñного: %s
+ ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð³Ð¾: %s
Жодного
- Зараз
+ Щойно
%d хв
Від\'єднати \'%s\'?
- ПіÑÐ»Ñ Ð²Ñ–Ð´\'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ приÑтрою він не зможе більше відправлÑти та отримувати повідомленнÑ.
+ ПіÑÐ»Ñ Ð²Ñ–Ð´\'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ приÑтрою він більше не зможе відправлÑти та одержувати повідомленнÑ.
Помилка мережевого з\'єднаннÑ...
Спробуйте ще
Від\'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ñтрою...
@@ -201,64 +232,72 @@
ОÑтанній активний %s
Сьогодні
- ПоділитиÑÑ Ð·
+ ПоділитиÑÑ Ñ–Ð·
Вітаємо в Signal.
- TextSecure Ñ– RedPhone тепер єдиний заÑтоÑунок Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ð¸Ñ… повідомлень на вÑÑ– випадки: Signal.
+ TextSecure Ñ– RedPhone тепер єдина програма Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ð°Ñ‚Ð½Ð¸Ñ… повідомлень на вÑÑ– випадки: Signal.
Вітаємо в Signal!
TextSecure тепер Signal.
- TextSecure Ñ– RedPhone тепер єдиний заÑтоÑунок: Сигнал. ТоркнітьÑÑ, щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ.
+ TextSecure Ñ– RedPhone тепер єдина програма: Signal. ТоркнітьÑÑ, щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ.
ЕкÑпортувати
ЕкÑпортувати відкритим текÑтом на карту SD?
- Увага, цим Ви екÑпортуєте Ñвої Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° SD-карту у незашифрованому виглÑді.
+ Увага, цим ви екÑпортуєте Ñвої Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð° SD-карту у незашифрованому виглÑді.
СкаÑувати
ЕкÑпортуваннÑ
ЕкÑпорт у незашифрованому виглÑді на карту SD...
Помилка, не вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати на накопичувач.
Помилка при запиÑÑ– на накопичувач.
- УÑпішно!
+ ЕкÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑƒÑпішне.
- ОÑточний збій зв\'Ñзку Signal!
- Signal не зміг зареєÑтруватиÑÑŒ у ÑервіÑах Google Play. Дзвінки та Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Signal наразі відключені, Ñпробуйте перереєÑтруватиÑÑ Ñƒ ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ --> Додатково
+ ПоÑтійний збій зв\'Ñзку Signal!
+ Signal не зміг зареєÑтруватиÑÑŒ у ÑервіÑах Google Play. Виклики та Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Signal наразі вимкнено, Ñпробуйте перереєÑтруватиÑÑ Ñƒ ÐалаштуваннÑÑ… > Додатково.
+
+ Помилка при одержанні GIF у повному розмірі...
+
+ GIF
+ Ðаліпки
Ðова група
Оновити групу
Ðазва групи
- Ðова група Ð´Ð»Ñ MMS
- Ви обрали контакт, Ñкий не підтримує групи Signal, тому Ñ†Ñ Ð³Ñ€ÑƒÐ¿Ð° буде в MMS.
- Ви не зареєÑтровані Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ та викликів Signal тому групи Signal відключено. Спробуйте перереєÑтруватиÑÑ Ñƒ ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ --> Додатково
+ Ðова MMS група
+ Ви обрали контакт, Ñкий не підтримує групи Signal, тому це буде MMS група.
+ Ви не зареєÑтровані Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ та викликів Signal тому групи Signal відключено. Спробуйте перереєÑтруватиÑÑ Ñƒ ÐалаштуваннÑÑ… > Додатково.
СталаÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° помилка, що завадила Ñтворенню групи.
- Ð”Ð»Ñ Ð’Ð°ÑˆÐ¾Ñ— групи потрібна щонайменше одна оÑоба!
- Один із учаÑників групи має номер, що не може бути прочитаний належним чином. Будь лаÑка, виправте або приберіть контакт Ñ– Ñпробуйте ще раз.
+ Ð”Ð»Ñ Ð²Ð°ÑˆÐ¾Ñ— групи потрібна щонайменше одна оÑоба!
+ Один із учаÑників групи має номер, що не може бути прочитаний належним чином. Будь лаÑка, виправте або вилучіть той контакт Ñ– Ñпробуйте ще раз.
Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸
Створити групу
Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %1$s…
ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ %1$s...
Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ %1$s, тому що вони не Ñ” кориÑтувачами Signal.
Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´ÐµÑ‚Ð°Ð»ÐµÐ¹ групи...
- Ви вже у групі
+ Ви вже у групі.
Я
- Імпортувати
- ЕкÑпортувати
+ Імпорт
+ ЕкÑпорт
- Завантажити вÑÑ– SMS з ÑиÑтеми?
+ Імпортувати ÑиÑтемну базу SMS?
Це завантажить
- уÑÑ– Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ñ– Ñховища SMS за замовчуваннÑм до Signal. Якщо Ви раніше
- вже імпортували SMS з ÑиÑтеми, новий імпорт призведе до Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ.
-
- Імпортувати
+уÑÑ– Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ–Ð· типового Ñховища SMS до Signal. Якщо ви раніше
+вже імпортували SMS з ÑиÑтеми, новий імпорт призведе до Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ.
+
+ Імпорт
СкаÑувати
Відновити зашифровану резервну копію?
Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾Ñ— резервної копії повніÑтю замінить поточні ключі, налаштуваннÑ
-та повідомленнÑ. ІÑнуюча Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð±ÑƒÐ´Ðµ замінена інформацією
-з резервної копії.
+та повідомленнÑ. Ви не втратите ані жодної інформації, що наразі Ñ” у Signal, ані у резервній копії.
+
Відновити
Імпортувати незашифровану резервну копію?
- Це імпортує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· текÑтової резервної копії. Якщо ви до цього імпортували SMS з ÑиÑтемної бази даних, повторний імпорт призведе до Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ.
+ Це імпортує
+Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ–Ð· незашифрованої резервної копії. Якщо попередньо імпортували цю резервну копію,
+повторний імпорт призведе до Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ.
+
ІмпортуваннÑ
Імпорт резервної копії...
Ðезашифрована резервна ÐºÐ¾Ð¿Ñ–Ñ Ð½Ðµ знайдена!
@@ -269,43 +308,43 @@
Зашифрована резервна ÐºÐ¾Ð¿Ñ–Ñ Ð½Ðµ знайдена!
Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾!
- ТоркнітьÑÑ Ñ– утримуйте Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу голоÑового повідомленнÑ, відпуÑтіть щоб надіÑлати
+ ТоркнітьÑÑ Ñ– утримуйте Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу голоÑового повідомленнÑ, відпуÑтіть, щоб надіÑлати
ПоділитиÑÑ
- ÐадіÑлати SMS
+ Оберіть контакти
СкаÑувати
ÐадÑиланнÑ...
Серце
Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð½Ð°Ð´Ñ–Ñлано!
ЗапроÑити до Signal
-
- - ВІДПРÐВИТИ 1 ДРУГУ
- - ВІДПРÐВИТИ %d ДРУЗЯМ
- - ВІДПРÐВИТИ %d ДРУЗЯМ
+
+ - ÐÐДІСЛÐТИ SMS 1 ДРУГОВІ
+ - ÐÐДІСЛÐТИ SMS ДО %d ДРУЗІВ
+ - ÐÐДІСЛÐТИ SMS ДО %d ДРУЗІВ
- ÐадіÑлати 1 SMS запрошеннÑ?
- - ÐадіÑлати %d SMS запрошень?
+ - ÐадіÑлати %d SMS запрошеннÑ?
- ÐадіÑлати %d SMS запрошень?
- Давайте перейдемо на Signal! %1$s
- Схоже, що у Ð’Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” додатків, щоб поділитиÑÑ.
- Друзі мають піклуватиÑÑ Ð¿Ñ€Ð¾ приватніÑть Ñвого ÑпілкуваннÑ!
+ Давай перейдемо на Signal: %1$s
+ Схоже, що у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” програм, щоб поділитиÑÑ.
+ Друзі не мають дозволÑти друзÑм незашифровано ÑпілкуватиÑÑ!
- При Ñкануванні ключ не виÑвленo!
- Ð’Ñтановити зчитувач штрих-кодів?
- Signal потрібен зчитувач штрих-кодів Ð´Ð»Ñ QR-кодів.
+ Ðе знайдено Ñканованого ключа!
+ Ð’Ñтановити Ñканер штрих-кодів?
+ Signal потребує Ñканер штрих-кодів Ð´Ð»Ñ QR-кодів.
Ðе вдалоÑÑ Ð½Ð°Ð´Ñ–Ñлати
- Ðова оÑобиÑтіÑть
+ Ðовий номер безпеки
Помилка при збереженні MMS!
Помилка Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ MMS провайдера...
Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½ÑŒ MMS провайдера...
- ВідбуваєтьÑÑ Ð´Ð·Ð²Ñ–Ð½Ð¾Ðº Signal
- Пропущено дзвінок від %s
- Пропущено дзвінок Signal
+ ВідбуваєтьÑÑ Ð²Ð¸ÐºÐ»Ð¸Ðº Signal
+ Пропущено виклик від %s
+ Пропущено виклик Signal
Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ Signal
Вхідний виклик Signal
Відхилити виклик
@@ -313,58 +352,66 @@
Завершити виклик
СкаÑувати виклик
- Мільтимедійне повідомленнÑ
+ Мультимедійне повідомленнÑ
- ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ðµ Ñтарою верÑією Signal, Ñка вже не підтримуєтьÑÑ. ПопроÑіть друга оновити Signal та Ñпробувати ще раз.
- Ви вийшли з групи.
+ Отримано повідомленнÑ, Ñке зашифроване Ñтарою верÑією Signal, Ñка вже не підтримуєтьÑÑ. ПопроÑіть друга оновитиÑÑ Ð´Ð¾ оÑтанньої верÑÑ–Ñ— та надіÑлати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð¾Ð²Ñƒ.
+ Ви покинули групу.
Групу оновлено.
- %s телефонував Вам
+ %s вам телефонував/-ла
Телефонували %s
- Пропущено дзвінок від %s
- %s зараз в Signal, привітайтеÑÑ!
+ Пропущено виклик від %s
+ %s в Signal, привітайтеÑÑ!
+ Ви вÑтановили Ñ‡Ð°Ñ Ð·Ð½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ на %1$s.
+ %1$s вÑтановлює Ñ‡Ð°Ñ Ð·Ð½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ на %2$s.
+ Ваш номер безпеки із %s змінивÑÑ.
- Фраза-пароль не збігаєтьÑÑ!
- Ðевірна Ñтара фраза!
- Уведіть нову фразу-пароль!
+ Фрази-паролі не збігаютьÑÑ!
+ Хибна Ñтара фраза-пароль!
+ Введіть нову фразу-пароль!
Приєднати цей приÑтрій?
- ВІДХИЛИТИ
+ СКÐСУВÐТИ
ПРОДОВЖИТИ
Приєднати цей приÑтрій?
- Воно зможе
+ Він зможе
• Читати уÑÑ– ваші повідомленнÑ
-\n• ПоÑилати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ вашого імені
-
+\n• ÐадÑилати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ вашого імені
+
ÐŸÑ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸Ñтрою
ÐŸÑ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ приÑтрою...
ПриÑтрій затверджено!
ПриÑтрій не знайдено.
Помилка мережі.
- ÐедійÑний QR-код.
- Вибачте, у Ð’Ð°Ñ Ð·Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ прив\'Ñзаних приÑтроїв, Ñпробуйте видалити декілька...
- Вибачте, це недійÑний QR код Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²\'Ñзки приÑтрою.
+ Хибний QR-код.
+ Вибачте, у Ð²Ð°Ñ Ð·Ð°Ð±Ð°Ð³Ð°Ñ‚Ð¾ прив\'Ñзаних приÑтроїв, Ñпробуйте видалити декілька...
+ Вибачте, це хибний QR код Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²\'Ñзки приÑтрою.
Прив\'Ñзати приÑтрій Signal?
- Схоже ви не викориÑтовуєте Signal Ð´Ð»Ñ ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ QR коду. Ð”Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ захиÑту, відÑкануйте код знову, викориÑтовуючи Signal.
+ ЗдаєтьÑÑ, ви намагаєтеÑÑ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ñ‚Ð¸ приÑтрій Signal, викориÑтовуючи Ñканер від 3-Ñ— оÑоби. Ð”Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ захиÑту, відÑкануйте код знову, викориÑтовуючи Signal.
+
+ Ð—Ð½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ
+ Ваші Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ðµ зникатимуть.
+ УÑÑ– Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñƒ цій розмові зникнуть через %s піÑÐ»Ñ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ.
- Уведіть фразу-пароль
- Значок Сигнал
- УвеÑти фразу-пароль
- Ðеправильна фраза-пароль!
+ Введіть фразу-пароль
+ Значок Signal
+ ВвеÑти фразу-пароль
+ Хибна фраза-пароль!
- Ð’Ñтановлена верÑÑ–Ñ Ð¡Ð»ÑƒÐ¶Ð± Google Play працює некоректно. ПеревÑтановіть Служби Google Play та Ñпробуйте знову.
+ Ð’Ñтановлена верÑÑ–Ñ ÑервіÑів Google Play працює некоректно. ПеревÑтановіть ÑервіÑи Google Play та Ñпробуйте знову.
Оцінити Signal
Якщо вам ÑподобавÑÑ Signal, будь-лаÑка, оцініть його.
Оцінити зараз!
ÐÑ–, дÑкую
Пізніше
+ Ой, Ñхоже програму Play Store не вÑтановлено на вашому приÑтрої.
Заблокувати контакт?
- Ви більше не будете отримувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° дзвінки від цього кориÑтувача.
+ Ви більше не одержуватимете Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° виклики від цього контакту.
Заблокувати
Розблокувати контакт?
- Ви впевнені, що бажаєте розблокувати цей контакт?
+ Ви знову зможете одержувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° виклики від цього контакту.
Розблокувати
Увімкнено
Вимкнено
@@ -372,7 +419,7 @@
Відповідаємо
Ð—Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð´Ð·Ð²Ñ–Ð½ÐºÐ°
Ðабір
- Ð—Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð´Ð·Ð²Ñ–Ð½ÐºÐ°
+ СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ
Дзвінок відхилено
Виклик
ЗайнÑто
@@ -380,26 +427,35 @@
ПідключеннÑ
РукоÑтиÑÐºÐ°Ð½Ð½Ñ Ð½Ðµ вдалоÑÑ!
Одержувач недоÑтупний
- Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ€ÑƒÐºÐ¾ÑтиÑканнÑ
+ ТиÑнемо руки
Помилка мережі!
Помилка клієнта
Критична помилка
Помилка входу!
ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ Ñервера
- Ðомер не зареєÑтрований!
+ Ðомер не зареєÑтровано!
Ðабраний номер не підтримує безпечні дзвінки!
ЯÑно
ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ Signal
- Виберіть Вашу країну
- Вкажіть код країни
- Вкажіть Ñвій номер телефону
- Ðевірний номер
- Вказаний вами номер (%s) не Ñ” дійÑним.
+ Оберіть вашу країну
+ Ви повинні вказати
+код вашої країни
+ Ви повинні вказати
+номер вашого телефону
+
+ Хибний номер
+ Ðомер, що ви
+ввели (%s) хибний.
+
Ðе підтримуєтьÑÑ
- Ðажаль на вашому приÑтрої неможливий обмін даними через інтернет. ПриÑтрої з верÑією Android до 4.0 повинні мати зареєÑтрований обліковий Ð·Ð°Ð¿Ð¸Ñ Google. Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñтрої з верÑією Android 4.0 Ñ– вище обліковий Ð·Ð°Ð¿Ð¸Ñ Google необов\'Ñзковий, проте необхідна наÑвніть Play Store.
+ Вибачте,
+на вашому приÑтрої неможливий обмін даними через інтернет. ПриÑтрої з верÑією Android до
+4.0 повинні мати зареєÑтрований акаунт Google. Ð”Ð»Ñ Ð¿Ñ€Ð¸Ñтроїв із верÑією Android 4.0 Ñ– вище
+акаунт Google необов\'Ñзковий, проте необхідна наÑвніÑть Play Store.
+
-УпевнітьÑÑ, що це ваш номер! Ðа цей номер буде відправлено перевірочне SMS.
+ПереконайтеÑÑ, що це ваш номер! Ðа цей номер буде відправлено перевірочне SMS.
Продовжити
Редагувати
@@ -409,21 +465,21 @@
Перевірка номера
Редагувати %s
РеєÑтрацію завершено!
- Ðеобхідно ввеÑти отриманий код\u2026
+ Спершу вам необхідно ввеÑти отриманий код...
ПідключеннÑ
- ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ Ñервера верифікації\u2026
+ ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ...
Помилка мережі!
- Ðеможливо підключитиÑÑ. Перевірте Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі та повторіть Ñпробу.
+ Ðеможливо підключитиÑÑ. Перевірте Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі та Ñпробуйте знову.
Перевірку не пройдено!
- Введений код Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¸Ð¹. Спробуйте ще раз.
+ Введений код Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ñ…Ð¸Ð±Ð½Ð¸Ð¹. Будь лаÑка, Ñпробуйте знову.
Забагато Ñпроб
- Занадто багато Ñпроб Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¸Ñ… кодів підтвердженнÑ. Зачекайте хвилину Ñ– Ñпробуйте знову.
- Запрошую дзвінок
- ВиконуєтьÑÑ Ð·Ð°Ð¿Ð¸Ñ‚ телефонного дзвінка...
+ Занадто багато Ñпроб Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ…Ð¸Ð±Ð½Ð¸Ñ… кодів підтвердженнÑ. Зачекайте хвилину Ñ– Ñпробуйте знову.
+ Запрошуємо виклик
+ Запрошуємо підтверджувальний виклик...
Помилка Ñервера
- Ðа Ñервері ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. Будь лаÑка, Ñпробуйте ще.
+ Ðа Ñервері ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. Будь лаÑка, Ñпробуйте знову.
Забагато запитів!
- Телефонний дзвінок вже був запитаний. ЗапроÑити ще один можна тільки через 20 хвилин.
+ Ви вже запроÑили виклик. ЗапроÑити ще один можна тільки через 20 хвилин.
Конфлікт регіÑтрації
Цей номер вже зареєÑтровано на іншому Ñервері Signal (CyanogenMod?). Перш ніж зареєÑтруватиÑÑ Ð½Ð° новому Ñервері, відмініть реєÑтрацію на попередньому.
@@ -437,42 +493,38 @@
Відео
Отримано пошкоджене Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ ключами!
- Отримано Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ ключами Ð´Ð»Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ñ— верÑÑ–Ñ— протоколу.
- Отримано Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· невідомим оÑобиÑтим ключем. ÐатиÑніть Ð´Ð»Ñ Ð¹Ð¾Ð³Ð¾ відображеннÑ.
- Отримано оновлену проте інформацію про оÑобиÑтіÑть. ТоркнітьÑÑ Ñ‰Ð¾Ð± перевірити.
- Ð¡ÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾Ñ— ÑеÑÑ–Ñ—.
+
+Отримано Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð¼Ñ–Ð½Ñƒ ключами Ð´Ð»Ñ Ñ…Ð¸Ð±Ð½Ð¾Ñ— верÑÑ–Ñ— протоколу.
+
+ Отримано Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ–Ð· новим номером безпеки. ÐатиÑніть Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ.
+ Ви Ñкинули безпечний ÑеанÑ.
+ %s Ñкидає безпечний ÑеанÑ.
Дублікат повідомленнÑ.
- Групу покинуто...
- Ð¡ÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾Ñ— ÑеÑÑ–Ñ—.
+ Покидає групу...
+ Ð¡ÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÑ‡Ð½Ð¾Ð³Ð¾ ÑеанÑу.
Чернетка:
- Ви дзвонили
- Вам дзвонили
- Пропущений дзвінок
+ Ви телефонувал
+ Вам телефонували
+ Пропущений виклик
Медіа повідомленнÑ
%s зараз в Signal, привітайтеÑÑ!
+ Ð§Ð°Ñ Ð·Ð½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ вÑтановлено на %s
+ Ваш номер безпеки із %s змінивÑÑ.
- У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” оÑобиÑтого ключа.
- У одержувача немає оÑобиÑтого ключа.
- У одержувача немає оÑобиÑтого ключа!
- УВÐГÐ, проÑканований ключ ÐЕ СПІВПÐДÐЄ! Уважно перевірте текÑÑ‚ відбитка.
- ÐЕ перевірено!
- Ключ Ñпіврозмовника вірний. Також необхідно, щоб Ñпіврозмовник підтвердив ваш ключ.
- Перевірено!
- У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” оÑобиÑтого ключа!
-
- У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” оÑобиÑтого ключа.
- УВÐГÐ, проÑканований ключ ÐЕ СПІВПÐДÐЄ!
- ÐЕ перевірено!
- ПроÑканований ключ збігаєтьÑÑ!
- Перевірено!
- ОÑоÑбиÑтий відбиток
+ Ваш контакт працює на давнішій верÑÑ–Ñ— Signal. Будь лаÑка, попроÑіть його/Ñ—Ñ— оновитиÑÑ Ð¿ÐµÑ€ÐµÐ´ перевіркою вашого номера безпеки.
+ Ваш контакт працює на новішій верÑÑ–Ñ— Signal із неÑуміÑним форматом QR-коду. Будь лаÑка, оновітьÑÑ, щоб порівнÑти.
+ Сканований QR-код хибно форматований код Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° безпеки. Будь лаÑка, Ñпробуйте Ñканувати знову.
+ ПоділитиÑÑ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ безпеки через...
+ Ðаш номер безпеки Signal:
+ Схоже, що у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” програм, щоб поділитиÑÑ.
+ У буфері обміну не було знайдено номеру безпеки Ð´Ð»Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑннÑ
- Ігнорувати попередній запит?
- Відправити
+ Почати, незважаючи на Ñ–Ñнуючий запит?
+ ÐадіÑлати
- Зашифроване Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ñ–Ð¿Ñоване...
- Триває розшифруваннÑ, зачекайте, будь лаÑка...
+ Хибне зашифроване повідомленнÑ...
+ Розшифровуємо, зачекайте, будь лаÑка...
ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ Ð½ÐµÑ–Ñнуючої ÑеÑÑ–Ñ—...
Помилка Ð´ÐµÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ.
@@ -482,21 +534,23 @@
ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ MMS Ñервера...
Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ MMS...
Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ MMS!
- ЗавантаженнÑ\u2026
- ТоркнітьÑÑ Ð°Ð±Ð¸ підлаштувати параметри MMS та продовжити завантаженнÑ.
+ ЗавантаженнÑ...
+ ТоркнітьÑÑ Ñ‚Ð° налаштуйте MMS, щоб продовжити завантаженнÑ.
Помилка Ð´ÐµÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ.
- Ð Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ MMS, зачекайте, будь лаÑка\u2026
- Зашифроване MMS Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ñ–Ð¿Ñоване\u2026
+ Розшифровуємо MMS, зачекайте, будь лаÑка...
+ Хибне зашифроване MMS повідомленнÑ...
MMS Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¾ Ð´Ð»Ñ Ð½ÐµÑ–Ñнуючої ÑеÑÑ–Ñ—...
- Відключити звук Ñповіщень
+ Вимкнути звук Ñповіщень
- Триває імпортуваннÑ
+ ІмпортуваннÑ
Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÑтових повідомлень
+ Імпорт завершено
+ Імпорт ÑиÑтемної бази даних завершено
- ДоторкнітьÑÑ Ñ‰Ð¾Ð± відкрити.
- ТоркнітьÑÑ Ñ‰Ð¾Ð± відкрити, чи торкнітьÑÑ Ð·Ð°Ð¼ÐºÐ° щоб закрити.
+ ТоркнітьÑÑ, щоб відкрити.
+ ТоркнітьÑÑ, щоб відкрити, чи торкнітьÑÑ Ð·Ð°Ð¼ÐºÐ°, щоб закрити.
Signal розблоковано
Заблокувати фразою-паролем
@@ -514,17 +568,26 @@
ВідповіÑти
Швидка відповідь неможлива коли Signal заблоковано!
- Проблема під Ñ‡Ð°Ñ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ!
+ Проблема під Ñ‡Ð°Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ!
Signal
Ðове повідомленнÑ
ЗображеннÑ
+ ЗображеннÑ
Ðудіо
+ Ðудіо
Відео
+ Відео
Контакт
+ Контакт
Камера
- МіÑцезнаходженнÑ
+ Камера
+ РозташуваннÑ
+ РозташуваннÑ
+ GIF
+ Gif
+ Увімк/вимк Ñкриньку вкладень
Стара фраза-пароль
Ðова фраза-пароль
@@ -537,43 +600,50 @@
Фото контакту
- Вибрати длÑ
+ Обрати длÑ
Ðемає заблокованих контактів...
- ОÑтаннім чаÑом ви нікому не телефонували.
+ Ðемає недавніх викликів.
Звук Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ð¾Ð²Ð¸ вимкнено
ÐадіÑлати Signal повідомленнÑ
ÐадіÑлати незахищене SMS
ÐадіÑлати незахищене MMS
+ Від %1$s
ÐадіÑлати
Вилучити
Розмова з %1$s
ÐапиÑÐ°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ
- Відкрити палітру емоцій
+ Відрити клавіатуру emoji
Мініатюра вкладеннÑ
- Увімк/вимк Ñкриньку вкладень
+ Увімк/вимк Ñкриньку прикріплень камери
+ ЗапиÑати та надіÑлати аудіо-прикріпленнÑ
+ Увімкнути Signal Ð´Ð»Ñ SMS
- ПРОВЕДІТЬ ЩОБ ВІДМІÐИТИ
+ ПРОВЕДІТЬ, ЩОБ ВІДМІÐИТИ
- ÐœÐµÐ´Ñ–Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð°Ñ‚Ð°Ð¶ÑƒÑ”Ñ‚ÑŒÑÑ
+ Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼ÐµÐ´Ñ–Ð°-повідомленнÑ
Медіа повідомленнÑ
Захищене повідомленнÑ
Завантажити
ЗавантаженнÑ
- Ðе вдалоÑÑŒ відправити
+ Ðе вдалоÑÑ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð¸Ñ‚Ð¸
Очікує підтвердженнÑ
ДоÑтавлено
Завантажити
Фото контакту
ЗавантаженнÑ
+
+ Відтворити
+ Пауза
+ Завантажити
Режим групового виділеннÑ
- %s вибрано
+ %s обрано
Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÐºÑ€Ð°Ñ—Ð½...
Пошук
@@ -586,40 +656,77 @@
Прив\'Ñзати новий приÑтрій
продовжити
+
+ Вимкнено
+
+ - 1 Ñекунда
+ - %d Ñекунди
+ - %d Ñекунд
+
+ %dÑ
+
+ - 1 хвилина
+ - %d хвилини
+ - %d хвилин
+
+ %dхв
+
+ - 1 година
+ - %d години
+ - %d годин
+
+ %dг
+
+ - 1 день
+ - %d дні
+ - %d днів
+
+ %dд
+
+ - 1 тиждень
+ - %d тижні
+ - %d тижнів
+
+ %dт
+
+ Пошук GIF та наліпок
+
+ Ðічого не знайдено
Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ Ð²Ñ–Ð´Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð· вашого приÑтрою. Ви також можете викориÑтати ADB Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ.
ДÑкуємо за вашу допомогу!
ÐадÑиланнÑ
ВідправлÑємо логи на gist...
+ Браузер не вÑтановлено
Імпорутвати ваші SMS Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñƒ зашифровану базу даних Signal?
СиÑтемна база даних не буде порушена.
ПропуÑтити
- Імпортувати
- Це може зайнÑти ÑкийÑÑŒ чаÑ. Будь лаÑка, наберітьÑÑ Ñ‚ÐµÑ€Ð¿Ñ–Ð½Ð½Ñ, ми Вам повідомимо, коли Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑŒÑÑ.
+ Імпорт
+ Це може зайнÑти ÑкийÑÑŒ чаÑ. Будь лаÑка, наберітьÑÑ Ñ‚ÐµÑ€Ð¿Ñ–Ð½Ð½Ñ, ми вам повідомимо, коли Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑŒÑÑ.
ІМПОРТУВÐÐÐЯ
ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð±Ð°Ð·Ð¸ даних...
ЕкÑпорт незашифрованої резервної копії
- ЕкÑпортувати до незашифрованої резервної копії. СуміÑно з додатком \'SMSBackup And Restore\'.
+ ЕкÑпортувати незашифровану резервну копію, ÑуміÑну з програмою \'SMSBackup & Restore\'.
Імпортувати ÑиÑтемну базу SMS
- Імпортувати дані з додатку обміну повідомленнÑми за замовчаннÑм
+ Імпортувати дані з типової програми обміну повідомленнÑми
Відновити зашифровану резервну копію
Відновити раніше екÑпортовану зашифровану резервну копію Signal
Імпорт незашифрованої резервної копії
- Імпортувати незашифровану резервну копію, ÑуміÑну з додатком \'SMSBackup And Restore\'.
+ Імпортувати незашифровану резервну копію, ÑуміÑну з програмою \'SMSBackup & Restore\'.
- Побачити вÑÑŽ розмову
+ ПереглÑнути вÑÑŽ розмову
Ðемає зображень
- ЗВІРИТИ
- ВІДПРÐВИТИ ЗÐОВ
+ ПІДТВЕРДИТИ
+ ÐÐДІСЛÐТИ ЗÐОВУ
Параметри MMS Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ телефону потрібно вказати вручну.
- Ввімкнено
+ Увімкнено
Вимкнено
- Ðе задано
+ Ðе вÑтановлено
Введений текÑÑ‚ не Ñ” дійÑним URI
Введений текÑÑ‚ не Ñ” дійÑною адреÑою Ñервера
@@ -633,19 +740,19 @@
Розблокувати
- Ð”Ð»Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ MMS-повідомлень Signal\'у необхідно знати наÑтройки APN вашого оператора. Однак ваш приÑтрій не надає цієї інформації - перевірте Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупу до цих опцій.
+ Ð”Ð»Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ MMS-повідомлень Signal\'у необхідно знати Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ APN вашого оператора. Однак ваш приÑтрій не надає цієї інформації - перевірте Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупу до цих опцій.
Щоб мати можливіÑть відправлÑти MMS-повідомленнÑ, введіть інформацію про APN нижче. Потрібні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ оператора можна знайти в інтернеті за запитом \'оператор APN\' або в його Ñлужбі підтримки. Це потрібно зробити тільки один раз.
ЗÐБЛОКОВÐÐО
Вимкнути звук Ð´Ð»Ñ Ñ€Ð¾Ð·Ð¼Ð¾Ð²Ð¸
- Відключити ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— розмови
+ Вимкнути ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— розмови
Звук ÑповіщеннÑ
ВібраціÑ
Заблокувати
Колір
Колір Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ контакту
- Перевірити оÑобиÑтіÑть
+ Перевірити номер безпеки
Виклик Signal
завершити виклик
@@ -654,8 +761,8 @@
Виклик Signal
-Перевірте ваш телефонний номер щоб підключити Signal.
-
+Перевірте ваш номер телефону, щоб підключити Signal.
+
Ð’ÐШРКРÐЇÐÐ
КОД Ð’ÐШОЇ КРÐЇÐИ ТРÐОМЕРТЕЛЕФОÐУ
@@ -664,84 +771,112 @@
Під Ñ‡Ð°Ñ Ñ€ÐµÑ”Ñтрації на вервер передаєтьÑÑ Ð´ÐµÑка контактна інформаціÑ. Вона не зберігаєтьÑÑ.
За підтримки twilio
- Можливі проблеми:
- Перехоплювачі SMS
- Ðеправильний номер.
- ПереконайтеÑÑ, що номер введений правильно Ñ– має вірний формат.
+ Можливі проблеми
+включно із:
+
+ Перехоплювачі SMS.
+
+ ДеÑкі Ñторонні програми обміну текÑтовими повідомленнÑми, такі Ñк Handcent або GoSMS, чинÑть не Ñк належить
+ перехоплюючи вÑÑ– вхідні SMS повідомленнÑ. Перевірте, чи ви отримали текÑтове повідомленнÑ, Ñке починаєтьÑÑ
+ Ñловами \'Your Signal verification code:\', у такому разі вам потрібно налаштувати вашу
+ Ñторонню програму обміну текÑтовими повідомленнÑми, щоб вона пропуÑкала текÑтові повідомленнÑ.
+
+ Хибний номер.
+
+ПереконайтеÑÑ, що номер введено правильно Ñ– має
+вірний формат
+вашого регіону.
+
Google Voice.
-Signal не буде працювати з номерами Google Voice.
-
+Signal не працюватиме з номерами Google Voice.
+
ГолоÑова перевірка
-Signal може зателефонувати вам, щоб перевірити номер. ТоркнітьÑÑ \'Подзвонити мені\' Ñ– введіть шеÑтизначний код, Ñкий ви почуєте, нижче.
+Signal може зателефонувати вам, щоб перевірити номер. ТоркнітьÑÑ \'Зателефонувати мені\' Ñ– введіть шеÑтизначний код, Ñкий ви почуєте, нижче.
Перевірити
Зателефонувати мені
Редагувати номер
- Помилка взаємозв’Ñку.
+ Помилка з\'єднаннÑ.
Signal не вдалоÑÑ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚Ð¸ÑÑŒ до Ñерверу.
- Можливі проблеми:
- ВідÑÑƒÑ‚Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ–Ñть підключеннÑ.
- Щоб викориÑтовувати Signal необхідне Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ інтернету. УпевнітьÑÑ, що підключений мобільний інтернет чи Wi-Fi.
- ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ñ”Ñ€Ð²Ð¾Ð».
+ Можливі проблеми
+включно із:
+
+ ВідÑÑƒÑ‚Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ–Ñть
+підключеннÑ.
+
+ Ваш
+приÑтрій потребує Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі, щоб викориÑтовувати цю функцію Signal. ПереконайтеÑÑ,
+що він підключений до мобільного інтернету чи Wi-Fi.
+
+ ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ñ”Ñ€Ð²Ð¾Ð»Ñƒ.
+
-Якщо ви підключені через W-Fi, можливо, файрвол блокує доÑтуп до Ñервера Signal. Мпробуйте інше підключеннÑ.
-
+Якщо ви підключені через W-Fi, можливо, файрвол блокує доÑтуп до Ñервера Signal. Спробуйте іншу мережу чи мобільні дані.
+
-Signal зараз перевірить ваш номер за допомогою SMS повідомленнÑ.
+Signal зараз перевірить ваш номер за допомогою SMS повідомленнÑ.
+
ПідключеннÑ...
- ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ SMS Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸...
+ ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ SMS
+Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸...
+
РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð½Ð° Ñервері...
- Це може зайнÑти ÑкийÑÑŒ чаÑ. Будь лаÑка, наберітьÑÑ Ñ‚ÐµÑ€Ð¿Ñ–Ð½Ð½Ñ, ми вам повідомимо, коли перевірка завершитьÑÑ.
+ Це
+може зайнÑти ÑкийÑÑŒ чаÑ. Будь лаÑка, наберітьÑÑ Ñ‚ÐµÑ€Ð¿Ñ–Ð½Ð½Ñ, ми вам повідомимо, коли перевірка завершитьÑÑ.
+
Signal не дочекавÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ SMS.
SMS-перевірка не вдалаÑÑ.
Ð“ÐµÐ½ÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð²...
+ Сигнал
Телефон
Перевірка
Введіть ім\'Ñ Ð°Ð±Ð¾ номер
- Додати учаÑника
-
- Cпіврозмовник (він читає):
- Ви (читаєте):
+ Додати учаÑників
+
+ ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про перевірку номерів безпеки]]>
+ ÐатиÑніть, щоб Ñканувати
+
+ ПоділитиÑÑ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ безпеки
Є деÑкі проблеми, що потребують вашої уваги.
- Відправлено
- Отримано
+ ÐадіÑлано
+ Одержано
+ Зникає
Через
Кому:
Від:
З:
Створити фразу-пароль
- Уведіть фразу-пароль
+ Введіть фразу-пароль
Обрати контакти
Сигнал виÑвлено
- Публічний ключ
Змінити фразу-ключ
- Перевірити оÑобиÑтіÑть
+ Перевірити номер безпеки
ВідіÑлати журнал відлагодженнÑ
Попередній переглÑд медіа
Ð’ÑÑ– зображеннÑ
- УÑÑ– Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð· %1$s
+ УÑÑ– Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ–Ð· %1$s
Деталі повідомленнÑ
- ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²\'Ñзаними приÑтроÑми
+ Прив\'Ñзані приÑтрої
ЗапроÑити друзів
Ðрхівовані розмови
Імпорт / екÑпорт
- Ваш ключ ідентифікації
- ВикориÑтовувати за замовчаннÑм
+ ВикориÑтовувати типово
+ ВикориÑтовувати влаÑні
Вимкнути звук на 1 годину
Вимкнути звук на 2 години
Вимкнути звук на 1 день
Вимкнути звук на 7 днів
Вимкнути звук на 1 рік
- ÐÐ°Ð»Ð°ÑˆÑŒÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° замовчаннÑм
- Ввімкнено
+ Типові налаштуваннÑ
+ Ввімкнено
Вимкнено
Ім\'Ñ Ñ‚Ð° повідомленнÑ
Тільки ім\'Ñ
@@ -760,23 +895,24 @@ Signal не дочекавÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ SMS.
SMS та MMS
Отримати уÑÑ– SMS
Отримати уÑÑ– MMS
- ВикориÑтовувати Signal Ð´Ð»Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… текÑтових повідомлень
- ВикориÑтовувати Signal Ð´Ð»Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… мультимедійних повідомлень
+ ВикориÑтовувати Signal Ð´Ð»Ñ ÑƒÑÑ–Ñ… вхідних текÑтових повідомлень
+ ВикориÑтовувати Signal Ð´Ð»Ñ ÑƒÑÑ–Ñ… вхідних мультимедійних повідомлень
ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð²Ð¾Ð´Ñƒ
Увімкнути клавішу Enter
Замінити кнопку Ñмайликів кнопкою Enter
- Enter відправлÑÑ” повідомленнÑ
+ Enter надÑилає повідомленнÑ
ÐатиÑÐ½ÐµÐ½Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ Enter відправить повідомленнÑ
ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ
Обрати оÑобиÑтіÑть
- Виберіть Ñебе із ÑпиÑку контактів.
+ Виберіть Ñебе зі ÑпиÑку контактів.
Змінити фразу-ключ
Змінити вашу фразу-ключ
Увімкнути фразу-пароль
- Ð’Ñтановити фразу-ключ на Signal
+ Заблокувати Signal та ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ фразою-паролем
Безпека екрану
+ Блокувати знімки екрану в ÑпиÑку недавніх та в програмі
Ðвтоблокувати Signal піÑÐ»Ñ Ð¿ÐµÐ²Ð½Ð¾Ð³Ð¾ чаÑу неактивноÑті
- фраза-ключ піÑÐ»Ñ ÑÐ¿Ð»Ð¸Ð²Ð°Ð½Ð½Ñ Ñ‡Ð°Ñу неактивноÑтіі
+ Фраза-ключ піÑÐ»Ñ ÑÐ¿Ð»Ð¸Ð²Ð°Ð½Ð½Ñ Ñ‡Ð°Ñу неактивноÑті
Інтервал чаÑу неактивноÑті
СповіщеннÑ
Увімкнути ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ нові повідомленнÑ
@@ -786,12 +922,15 @@ Signal не дочекавÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ SMS.
Ðевідомо
Шаблон Ð¼ÐµÑ€ÐµÑ…Ñ‚Ñ–Ð½Ð½Ñ LED
Задати влаÑний шаблон Ð¼ÐµÑ€ÐµÑ…Ñ‚Ñ–Ð½Ð½Ñ LED
+ Включено длÑ:
+ Виключено длÑ:
ВлаÑний шаблон Ð¼ÐµÑ€ÐµÑ…Ñ‚Ñ–Ð½Ð½Ñ LED задано!
Звук
Змінити звук ÑповіщеннÑ
Беззвучно
Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ розмові
Відтворювати звуковий Ñигнал у активній розмові
+ Повторити Ñигнал
Ðіколи
Один раз
Два рази
@@ -806,8 +945,8 @@ Signal не дочекавÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ SMS.
Червоний
Синій
Помаранчевий
- Синьо-зелений
- Пурпуровий
+ Бірюзовий
+ Фіолетовий
Білий
Жодного
Швидко
@@ -828,12 +967,12 @@ Signal не дочекавÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ SMS.
Звіти про доÑтавку SMS
Запитувати звіт про доÑтавку Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ відіÑланого вами SMS
Ðвтоматично видалÑти Ñтарі повідомленнÑ, коли довжина розмови перевищує задану
- Вилучати Ñтарі повідомленнÑ
+ ВидалÑти Ñтарі повідомленнÑ
Чати та медіа
ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸ розмови
Обрізати уÑÑ– розмови зараз
ПереглÑнути вÑÑ– розмови Ñ– привеÑти Ñ—Ñ… довжину у відповідніÑть із заданою
- ПриÑтрої
+ Прив\'Ñзані приÑтрої
Світла
Темна
ВиглÑд
@@ -841,10 +980,13 @@ Signal не дочекавÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ SMS.
Типово
Мова
ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° виклики Signal
- Безкоштовні приватні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° дзвінки Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів Signal
- ВідіÑлати журнал відлагодженнÑ
+ Безкоштовні приватні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° виклики Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів Signal
+ ÐадіÑлати журнал відлагодженнÑ
Режим ÑуміÑноÑті \'WiFi Calling\'
+ Увімкніть, Ñкщо ваш приÑтрій викориÑтовує доÑтавку SMS/MMS через WiFi (вмикайте лише Ñкщо «Виклики по WiFi» увімкнені на вашому приÑтрої)
Заблоковані контакти
+ Ð—Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ð¾Ð¼ÐµÑ€Ñ–Ð² безпеки
+ Потребує Ð·Ð°Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… номерів безпеки, коли вони змінюютьÑÑ
Відображати у ÑповіщеннÑÑ…
При викориÑтанні мобільних даних
При викориÑтанні Wi-Fi
@@ -878,6 +1020,10 @@ Signal не дочекавÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ SMS.
ПереÑлати повідомленнÑ
Зберегти вкладеннÑ
+
+ Ð—Ð½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ
+
+ Ð§Ð°Ñ Ð¶Ð¸Ñ‚Ñ‚Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ Ñпливає
ЗапроÑити
@@ -891,16 +1037,16 @@ Signal не дочекавÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ SMS.
Пошук
Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ñƒ
+ Помилка Ñигналу
Ðрхівовано
Ðова розмова
- Безпека
- Перевірити оÑобиÑтіÑть
- Скинути безпечну ÑеÑÑ–ÑŽ
+ Скинути безпечний ÑеанÑ
+ Увімкнути звук
- Відключити звук Ñповіщень
+ Вимкнути звук Ñповіщень
Додати вкладеннÑ
Оновити групу
@@ -909,6 +1055,7 @@ Signal не дочекавÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ SMS.
Ð’ÑÑ– зображеннÑ
ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ð¾Ð²Ð¸
+ Розгорнути Ñпливаюче вікно
Додати до контактів
@@ -918,50 +1065,69 @@ Signal не дочекавÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ SMS.
ТранÑлÑціÑ
ПорівнÑти
+ Показати ваш QR код
+ Сканувати QR код контакту
Ðове повідомленнÑ
Ðова група
ÐалаштуваннÑ
- ОчиÑтити фразу-ключ
+ Заблокувати
Позначити уÑÑ– Ñк прочитані
ЗапроÑити друзів
Допомога
+
+ Скопіювати до буфера обміну
+ ПорівнÑти із буфером обміну
- Ваша верÑÑ–Ñ Signal заÑтаріла!
+ Ваша верÑÑ–Ñ Signal заÑтаріла
+
+ - Вашу верÑÑ–ÑŽ Сигналу за 1 день переÑтануть підтримувати. ТоркнітьÑÑ, щоб оновити до оÑтанньої верÑÑ–Ñ—.
+ - Вашу верÑÑ–ÑŽ Сигналу переÑтануть підтримувати за %d дні. ТоркнітьÑÑ, щоб оновити до оÑтанньої верÑÑ–Ñ—.
+ - Вашу верÑÑ–ÑŽ Сигналу переÑтануть підтримувати за %d днів. ТоркнітьÑÑ, щоб оновити до оÑтанньої верÑÑ–Ñ—.
+
+ Вашу верÑÑ–ÑŽ Сигналу переÑтануть підтримувати Ñьогодні. ТоркнітьÑÑ, щоб оновити до оÑтанньої верÑÑ–Ñ—.
Ваша верÑÑ–Ñ Signal заÑтаріла!
ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆÐµ не будуть відправлÑтиÑÑ. ТоркнітьÑÑ, щоб оновитиÑÑ Ð´Ð¾ оÑтанньої верÑÑ–Ñ—.
ОÐОВИТИ
- ВикориÑтовувати Ñк додаток Ð´Ð»Ñ SMS за замовчуваннÑм
- ТоркнітьÑÑ, щоб зробити Signal додатком Ð´Ð»Ñ SMS за замовчуваннÑм.
- ЗÐДÐТИ
+ ВикориÑтовувати Ñк типову програму Ð´Ð»Ñ SMS
+ ТоркнітьÑÑ, щоб зробити Signal типовою програмою Ð´Ð»Ñ SMS.
+ ВСТÐÐОВИТИ
Імпортувати ÑиÑтемну базу SMS?
ТоркнітьÑÑ, щоб імпортувати ваші SMS Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñƒ зашифровану базу даних Signal.
ІМПОРТУВÐТИ
Увімкнути Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° виклики Signal
- ВВІМКÐУТИ
+ Оновіть доÑвід вашого ÑпілкуваннÑ.
+ УВІМКÐУТИ
ЗапроÑити до Сигнал
+ СпілкуйтеÑÑ Ñ–Ð· %1$s на ÑкіÑно новому рівні.
ЗÐПРОСИТИ
- ЗапроÑи друзів!
- Чим більше друзів викориÑтовують Signal, тим кращим він Ñтає.
+ ЗапроÑити друзів
+ Що більше друзів викориÑтовують Signal, то кращим він Ñтає.
ПОДІЛИТИСЯ
ЗÐКРИТИ
Ви
+ Ðе вдалоÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚Ð¸ це Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ переглÑду
Ðепідтримуваний тип медіа
Зберегти
+ ПереÑлати
+ Ð’ÑÑ– зображеннÑ
+ Зберегти вÑе
Попередній переглÑд зображеннÑ
Оновити
+ Гарнітура
Гарнітура
Гучномовець
ВидаленнÑ
Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñтарих повідомлень...
- Старі Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¸ уÑпішно видалені
+ Старі Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¾ уÑпішно видалено
+ Логотип транÑпорту
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index c3e3c804207..e3915f0aedd 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -5,6 +5,8 @@
Không
Xóa
Xin chá»
+
+ Tin nhắn mới
Hiện thá»i: %s
Bạn chưa thiết láºp cụm từ máºt khẩu!
@@ -17,6 +19,7 @@
Xóa
Tắt cụm từ máºt khẩu?
+ Thao taÌc naÌ€y sẽ vĩnh viễn mở khoÌa Signal vaÌ€ thông baÌo tin nhăÌn.
Tắt
Tháo gỡ đăng ký
Äang huá»· đăng ký vá»›i tin nhắn và cuá»™c gá»i Signal...
@@ -59,14 +62,8 @@ Bạn sẽ phải đăng ký lại số điện thoại để sỠdụng Signal
Cuá»™c gá»i đến
-
-nguyên liệu xác minh khoá cho %1$s đã thay đổi. Äiá»u nà y có nghÄ©a là ai đó Ä‘ang cố tình
-chặn cuộc hội thoại của bạn hoặc chỉ đơn giản là %2$s đã cà i đặt lại Signal và bây giỠcó một khoá xác minh mới.
-
-
- Bạn có thể muốn kiểm chứng
-địa chỉ liên lạc nà y.
-
+ Mã sÃ´Ì an toaÌ€n vÆ¡Ìi %1$s đã thay đổi. Äiá»u nà y có thể là do ai đó Ä‘ang tìm cách Ä‘aÌnh chặn thông tin cá»§a bạn, hoặc %2$s Ä‘ã chỉ vừa mÆ¡Ìi cà i lại Signal.
+ BaÌ£n coÌ thể sẽ cần xaÌc minh mã sÃ´Ì an toaÌ€n vÆ¡Ìi liên hệ naÌ€y.
Chấp nháºn
Tin nhắn %s
@@ -76,7 +73,9 @@ chặn cuộc hội thoại của bạn hoặc chỉ đơn giản là %2$s đã
Hết hạn: %s
Không đưa tin được
Xem dữ liệu truyá»n thông bảo máºt?
+ Phương tiện naÌ€y Ä‘ã được lưu trữ dươÌi daÌ£ng mã hoaÌ. Tuy nhiên, để xem noÌ vÆ¡Ìi một triÌ€nh xem bên ngoaÌ€i, cần phải taÌ£m thời giải mã noÌ vaÌ€ ghi vaÌ€o bộ nhÆ¡Ì. BaÌ£n coÌ chăÌc laÌ€ muôÌn laÌ€m Ä‘iều naÌ€y không?
Có lá»—i, nháºn thông tin cÅ© vá» trao đổi chìa khóa
+ Äã nhận được yêu cầu trao đổi khoaÌ, chaÌ£m để xử lyÌ.
%1$s đã rá»i khá»i nhóm.
Nhấn để biết chi tiết
Nhấn để trở lại dạng không bảo máºt
@@ -84,6 +83,8 @@ chặn cuộc hội thoại của bạn hoặc chỉ đơn giản là %2$s đã
Trở lại MMS không mã hóa?
Tin nhắn nà y sẽ không được mã khoá bởi vì ngưá»i nháºn không còn sá» dụng Signal.\n\ngSẽ gá»i tin nhắn không bảo máºt chứ?
Không tìm thấy ứng dụng để mở dữ liệu truyá»n thông nà y.
+ từ %s
+ tá»›i %s
Tái thiết láºp phiên bảo máºt?
Thao tác nà y có thể giúp bạn khi đang có vấn đỠvỠmã khoá cuộc hội thoại. Các tin nhắn sẽ được giữ lại.
@@ -120,8 +121,8 @@ chặn cuộc hội thoại của bạn hoặc chỉ đơn giản là %2$s đã
Không hỗ trợ MMS
Tin nhắn không gá»i được vì hãng Ä‘iện thoại không há»— trợ MMS.
Xin chá»n má»™t liên lạc
- Không chặn?
- Bạn có chắc là không chặn liên lạc nà y nữa?
+ Không chặn liên lạc nà y?
+ BaÌ£n sẽ laÌ£i coÌ thể nhận tin nhăÌn vaÌ€ cuộc goÌ£i từ liên hệ naÌ€y.
Không chặn
Văn bản Ä‘Ãnh kèm vượt quá giá»›i hạn kÃch cỡ cho loại tin nhắn mà bạn Ä‘ang gá»i.
Máy ảnh không khả dụng
@@ -138,8 +139,15 @@ chặn cuộc hội thoại của bạn hoặc chỉ đơn giản là %2$s đã
- Thao tác nà y sẽ xóa vÄ©nh viá»…n %1$d tin nhắn đã chá»n?
Lưu và o thẻ nhớ?
- Thà nh công!
+
+ - Có lá»—i trong khi Ä‘ang lưu Ä‘Ãnh kèm và o thẻ nhá»›!
+
+ Äã lưu táºp tin thà nh công.
Không thể viết và o thẻ nhớ!
+
+ - Äang lưu %1$d Ä‘Ãnh kèm
+
+ Äang thu tháºp Ä‘Ãnh kèm...
ChỠgiải quyết...
Dữ liệu (Signal)
MMS
@@ -173,7 +181,6 @@ chặn cuộc hội thoại của bạn hoặc chỉ đơn giản là %2$s đã
Dùng mặc định: %s
Không
- Bây giá»
%d phút
Gỡ liên kết \'%s\'?
@@ -205,10 +212,12 @@ chặn cuộc hội thoại của bạn hoặc chỉ đơn giản là %2$s đã
Äang xuất văn bản không mã hóa ra ổ lưu trữ...
Có lỗi, không thể chép và o ổ lưu trữ!
Lỗi khi chép và o ổ lưu trữ!
- Thà nh công!
+ Xuất thà nh công.
Lá»—i thưá»ng trá»±c khi giao tiếp qua Signal!
Signal không thể đăng ký vá»›i Google Play Services. Cuá»™c gá»i và tin nhắn Signal đã ngừng hoạt động, hãy thỠđăng ký lại từ mục Cà i đặt > Nâng cao.
+
+
Tạo nhóm mới
Cáºp nháºt nhóm
@@ -262,15 +271,11 @@ sao lưu nà y trước đó, nháºp lần nữa sẽ dẫn đến việc có tin
Nhấn và giữ để ghi âm tin nhắn thoại, thả ra để gá»i
Chia sẻ
- Gá»i SMS
Há»§y bá»
Äang gá»i..
ThÃch
Äã gá»i lá»i má»i!
Má»i dùng Signal
-
- - GỬI ÄẾN %d NGƯỜI BẠN
-
- Gá»i %d lá»i má»i qua SMS?
@@ -283,7 +288,6 @@ sao lưu nà y trước đó, nháºp lần nữa sẽ dẫn đến việc có tin
Signal cần Barcode Scanner cho mã QR.
Gá»i Ä‘i không được
- Danh tÃnh má»›i
Có lỗi lưu trữ MMS!
Có lỗi kết nối và o nhà dịch vụ MMS
@@ -332,6 +336,7 @@ sao lưu nà y trước đó, nháºp lần nữa sẽ dẫn đến việc có tin
Xin lá»—i, đây không phải là mã QR liên kết thiết bị chÃnh xác.
Liên kết một thiết bị dùng Signal?
Có vẻ như bạn Ä‘ang cố liên kết má»™t thiết bị dùng Signal bằng phần má»m quét bên thứ 3. Äể bảo vệ mình, hãy quét lại Ä‘oạn mã sá» dụng Signal.
+
Äiá»n và o cụm từ máºt khẩu
Biểu tượng Signal
@@ -347,10 +352,9 @@ sao lưu nà y trước đó, nháºp lần nữa sẽ dẫn đến việc có tin
Sau nà y
Chặn liên lạc nà y?
- Bạn sẽ không còn nháºn được cuá»™c gá»i hay tin nhắn từ ngưá»i dùng nà y nữa.
Chặn
Không chặn liên lạc nà y?
- Bạn có chắc là không chặn liên lạc nà y?
+ BaÌ£n sẽ laÌ£i coÌ thể nhận tin nhăÌn vaÌ€ cuộc goÌ£i từ liên hệ naÌ€y.
Không chặn
Mở
Tắt
@@ -376,6 +380,7 @@ sao lưu nà y trước đó, nháºp lần nữa sẽ dẫn đến việc có tin
Số Ä‘iện thoại vừa rồi không há»— trợ cuá»™c gá»i bảo máºt!
Äã nháºn được
+ Kết nối với Signal
Chá»n quốc gia bạn
Bạn phải cho biết
mã số quốc gia bạn
@@ -431,8 +436,6 @@ mã số quốc gia bạn
trao đổi chìa khóa bị há»ng!
Nháºn thông tin trao đổi chìa khóa vá» phiên bản giao thức không hợp lệ.
- Nháºn được cáºp nháºt nhưng không rõ thông tin danh tÃnh. Nhấn và o để kiểm nháºn danh tÃnh.
- Äã tái thiết láºp phiên bảo máºt.
Tin nhắn trùng láºp.
Rá»i nhóm...
@@ -444,21 +447,7 @@ Nháºn thông tin trao đổi chìa khóa vá» phiên bản giao thức không h
Tin nhắn đa phương tiện
%s Ä‘ang dùng Signal, hãy chà o há»i má»™t tiếng!
- Bạn không có chìa khóa danh tÃnh.
- Ngưá»i nháºn không có chìa khóa danh tÃnh.
- Ngưá»i nháºn không có chìa khóa danh tÃnh!
- CẢNH BÃO, chìa khóa được quét KHÔNG trùng hợp! Xin xem lại cho kỹ cà ng văn bản dấu tay.
- CHƯA Kiểm Chứng!
- Chìa khóa của hỠđúng. Cũng cần phải kiểm chứng chìa khóa của bạn với hỠluôn.
- Äã kiểm chứng!
- Bạn không có chìa khóa danh tÃnh!
-
- Bạn không có chìa khóa danh tÃnh!
- CẢNH BÃO, chìa khóa được quét KHÔNG trùng hợp!
- CHƯA kiểm chứng!
- Chìa khóa được quét trùng hợp!
- Äã kiểm chứng!
- Vân tay nháºn dạng
+ Có vẻ như bạn không có bất kỳ ứng dụng chia sẻ nà o.
Khởi tạo mặc dầu đã có yêu cầu rồi?
Gá»i
@@ -486,6 +475,8 @@ Nháºn thông tin trao đổi chìa khóa vá» phiên bản giao thức không h
Äang tiến hà nh việc nháºp và o
Äang nháºp và o tin nhắn
+ Nháºp thà nh công
+ Hoà n tất nháºp cÆ¡ sở dữ liệu hệ thống.
Chạm và o để mở.
Chạm và o để mở, hoặc chạm và o ổ khóa để đóng lại.
@@ -540,13 +531,13 @@ Nháºn thông tin trao đổi chìa khóa vá» phiên bản giao thức không h
Gá»i thông Ä‘iệp Signal
Gá»i SMS không mã hóa
Gá»i MMS không mã hóa
+ Từ %1$s
Gá»i
Bá»
Chuyện trò với %1$s
Soạn tin nhắn
Chuyển bà n phÃm biểu tượng cảm xúc
Ảnh nhá» táºp tin Ä‘Ãnh kèm
- Chuyển ngăn kéo táºp tin Ä‘Ãnh kèm
TRƯỢT ÄỂ HUá»¶
@@ -563,6 +554,7 @@ Nháºn thông tin trao đổi chìa khóa vá» phiên bản giao thức không h
Tải xuống
Hình liên lạc
Äang tải xuống
+
Dạng chá»n hà ng loạt
%s được chá»n
@@ -578,6 +570,10 @@ Nháºn thông tin trao đổi chìa khóa vá» phiên bản giao thức không h
Liên kết thiết bị mới
tiếp tục
+
+ Tắt
+
+
Cám ơn sự trợ giúp của bạn!
Äang ná»™p
@@ -634,7 +630,6 @@ Phục hồi sao lưu Signal đã mã khóa từng xuất ra trước đóChặn
MÃ u
Mà u cho liên lạc nà y
- Xác minh danh tÃnh
Cuá»™c gá»i Signal
kết thúc cuá»™c gá»i
@@ -714,10 +709,8 @@ SMS thất bại.
Äánh dấu
Äiá»n và o tên hoặc số
- Thêm thà nh viên
-
- Danh tÃnh cá»§a há» (há» Ä‘á»c lên):
- Danh tÃnh cá»§a bạn (bạn Ä‘á»c lên):
+
+
Một số việc cần bạn lưu ý.
Äã gá»i
@@ -731,19 +724,16 @@ SMS thất bại.
Äiá»n và o cụm từ máºt khẩu
Chá»n liên lạc
Äã phát hiện Signal
- Chìa khóa danh tÃnh công cá»™ng
Äổi cụm từ máºt khẩu
- Kiểm chứng danh tÃnh
Xem trước tệp đa phương tiện
Tất cả hình ảnh
Tất cả hình ảnh với %1$s
Chi tiết tin nhắn
- Quản trị các thiết bị liên kết
+ Các thiết bị đã liên kết
Má»i bạn bè
Các cuộc hội thoại đã bảo lưu
Xuất / nháºp
- Khóa danh tÃnh
Dùng mặc định
Dùng tùy chỉnh
Tạm im 1 tiếng
@@ -846,7 +836,7 @@ SMS thất bại.
Giới hạn độ dà i cuộc chuyện trò
Láºp tức rút ngắn tất cả các cuá»™c há»™i thoại
Quét tất cả các cuộc hội thoại và áp dụng giới hạn độ dà i hội thoại
- Các thiết bị
+ Các thiết bị đã liên kết
Lợt
Äáºm
Diện mạo
@@ -894,6 +884,8 @@ Các tin nhắn và cuá»™c gá»i riêng tư miá»…n phà đến ngưá»i dùng Si
Gá»i lại tin nhắn
Lưu Ä‘Ãnh kèm
+
+
Má»i
@@ -912,8 +904,6 @@ Các tin nhắn và cuá»™c gá»i riêng tư miá»…n phà đến ngưá»i dùng Si
Chuyện trò mới
- An Ninh
- Kiểm chứng danh tÃnh
Tái thiết láºp phiên bảo máºt
Tắt tạm im
@@ -937,6 +927,7 @@ Các tin nhắn và cuá»™c gá»i riêng tư miá»…n phà đến ngưá»i dùng Si
Phát rộng
So sánh
+ Hiển thị mã QR của bạn
Tin nhắn mới
Tạo nhóm mới
@@ -945,6 +936,7 @@ Các tin nhắn và cuá»™c gá»i riêng tư miá»…n phà đến ngưá»i dùng Si
Äánh dấu tất cả đã Ä‘á»c
Má»i bạn bè
Trợ giúp
+
Phiên bản Signal của bạn đã quá cũ
@@ -976,6 +968,7 @@ Các tin nhắn và cuá»™c gá»i riêng tư miá»…n phà đến ngưá»i dùng Si
Lưu
+ Lưu lại tất cả
Xem trước hình
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index fb9234e0d9f..84c64a0958b 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -5,6 +5,8 @@
å¦
åˆ é™¤
请ç¨å€™â€¦
+
+ æ–°ä¿¡æ¯
当å‰ï¼š%s
您尚未设置密ç ï¼
@@ -59,11 +61,8 @@
æ¥ç”µå‘¼å«
- å½“å‰ %1$s çš„èº«ä»½å¯†é’¥å·²ç»æ”¹å˜ã€‚
-è¿™å¯èƒ½æ˜¯ç”±äºŽæœ‰äººå°è¯•ç ´è§£æ‚¨å’Œå¯¹æ–¹çš„é€šä¿¡ï¼Œ
-也å¯èƒ½æ˜¯æœ‰ %2$s é‡è£…了暗å·ç„¶åŽç”Ÿæˆäº†æ–°çš„身份密钥。
- 您å¯èƒ½å¸Œæœ›éªŒè¯
-这个è”系人。
+ %1$s 的安全ç å‘生了改å˜ã€‚è¿™å¯èƒ½æ˜¯å› 为有人æ£åœ¨å°è¯•æˆªèŽ·ä½ ä»¬çš„é€šè®¯ï¼Œæˆ–è€… %2$s åªæ˜¯é‡æ–°å®‰è£…了暗å·ã€‚
+ 您å¯èƒ½å¸Œæœ›éªŒè¯è¿™ä¸ªè”系人的安全ç 。
接å—
ä¿¡æ¯ %s
@@ -121,13 +120,14 @@
彩信ä¸è¢«æ”¯æŒ
æ¤ä¿¡æ¯æ— 法å‘é€ï¼Œå› 为您的è¿è¥å•†ä¸æ”¯æŒå½©ä¿¡ã€‚
请选择一个è”系人
- 解除å±è”½ï¼Ÿ
- 您确定想è¦è§£é™¤å¯¹æ¤è”系人的å±è”½ï¼Ÿ
+ 解除对æ¤è”系人的å±è”½ï¼Ÿ
+ 您将å¯ä»¥å†æ¬¡æ”¶åˆ°æ¥è‡ªæ¤è”系人的信æ¯å’Œå‘¼å«ã€‚
解除å±è”½
当å‰ä¿¡æ¯çš„附件类型已ç»å·²ç»è¶…过大å°é™åˆ¶ã€‚
æ‘„åƒå¤´ä¸å¯ç”¨
æ— æ³•å½•éŸ³ï¼
å‘é€è¯éŸ³ä¿¡æ¯æ—¶é‡åˆ°é”™è¯¯â€¦
+ 您的设备上没有应用程åºèƒ½å¤„ç†è¿™ä¸ªé“¾æŽ¥ã€‚
ä¿¡æ¯è¯¦æƒ…
ä¼ è¾“ï¼š%1$s\n å‘é€/接收:%2$s
@@ -139,8 +139,21 @@
- è¿™å°†ä¼šæ°¸ä¹…çš„åˆ é™¤æ‰€æœ‰ %1$d 已选择的信æ¯ã€‚
ä¿å˜åˆ°å˜å‚¨ï¼Ÿ
- æˆåŠŸï¼
+
+ - ä¿å˜æ‰€æœ‰çš„ %1$d 媒体到å˜å‚¨å°†ä¼šå…许您设备上的其他应用访问她们。\n\nç»§ç»å—?
+
+
+ - ä¿å˜é™„件到å˜å‚¨æ—¶é‡åˆ°é”™è¯¯ï¼
+
+ ä¿å˜æ–‡ä»¶æˆåŠŸã€‚
å˜å‚¨æ— 法写入ï¼
+
+ - æ£åœ¨ä¿å˜ %1$d 附件
+
+
+ - æ£åœ¨ä¿å˜ %1$d 附件到å˜å‚¨â€¦
+
+ æ£åœ¨æ”¶é›†é™„件…
待定…
æ•°æ®ï¼ˆæš—å·ï¼‰
彩信
@@ -149,6 +162,7 @@
æ£åœ¨åˆ 除信æ¯â€¦
æœç´¢ä¸...
+ 您的设备上未安装æµè§ˆå™¨
- åˆ é™¤å·²é€‰æ‹©çš„ä¼šè¯ï¼Ÿ
@@ -174,7 +188,7 @@
使用默认:%s
没有
- 现在
+ 刚刚
%d 分钟
æ–å¼€ \'%s\' ?
@@ -193,10 +207,10 @@
共享给
欢迎æ¥åˆ°æš—å·ã€‚
- 从现在起, TextSecure å’Œ RedPhone 将是åŒä¸€ä¸ªä¿¡æ¯å¹³å°ï¼Œæœ€ä½³çš„解决方案:暗å·ã€‚
+ 从现在起, TextLibre å’Œ PhoneLibre 将是åŒä¸€ä¸ªä¿¡æ¯å¹³å°ï¼Œæœ€ä½³çš„解决方案:暗å·ã€‚
欢迎æ¥åˆ°æš—å·ã€‚
- TextSecure 已命å为 æš—å· ã€‚
- 从现在起, TextSecure å’Œ RedPhone 将是åŒä¸€ä¸ªä¿¡æ¯å¹³å°ï¼šæš—å·ã€‚点击以开始探索。
+ TextLibre 已命å为 æš—å· ã€‚
+ 从现在起, TextLibre å’Œ PhoneLibre 将是åŒä¸€ä¸ªä¿¡æ¯å¹³å°ï¼šæš—å·ã€‚点击以开始探索。
导出
导出明文到å˜å‚¨ï¼Ÿ
@@ -206,10 +220,15 @@
æ£åœ¨å¯¼å‡ºæ˜Žæ–‡å˜å‚¨â€¦
错误,å˜å‚¨æ— 法写入。
在写入å˜å‚¨æ—¶é‡åˆ°é”™è¯¯ã€‚
- æˆåŠŸï¼
+ 导出æˆåŠŸã€‚
æš—å·æŒç»è¿žæŽ¥å¤±æ•ˆï¼
æš—å·æ— 法在 Google Play æœåС䏿³¨å†Œã€‚æš—å·æ¶ˆæ¯å’Œå‘¼å«å·²ç»è¢«é‡‘庸。请å°è¯•在设置 > 高级ä¸é‡æ–°æ³¨å†Œã€‚
+
+ 下载完整的 GIF æ—¶å‘生错误…
+
+ GIF
+ 贴纸
新群组
更新群组
@@ -261,14 +280,14 @@
按ä½å¹¶ä¿æŒä»¥å½•制è¯éŸ³ä¿¡æ¯ï¼Œæ¾å¼€å³å‘é€
共享
- å‘é€çŸä¿¡
+ 选择è”系人
å–æ¶ˆ
æ£åœ¨å‘é€â€¦
心
邀请已å‘é€ï¼
邀请至暗å·
-
- - å·²å‘é€è‡³ %d 使œ‹å‹
+
+ - å‘é€çŸä¿¡ç»™ %d 个朋å‹
- å‘é€ %d 个çŸä¿¡é‚€è¯·ï¼Ÿ
@@ -282,7 +301,7 @@
æš—å·éœ€è¦ æ¡ç 扫æå™¨ æ¥æ‰«æäºŒç»´ç 。
å‘é€å¤±è´¥
- 新身份
+ 新的安全ç
å˜å‚¨å½©ä¿¡é”™è¯¯ï¼
连接彩信æœåŠ¡å™¨é”™è¯¯â€¦
@@ -307,6 +326,9 @@
å·²å‘¼å« %s
æ¥è‡ª %s 的未接æ¥ç”µ
%s æ£åœ¨æš—å·ä¸ï¼Œæ‰“个招呼å§ï¼
+ 您将信æ¯é”€æ¯æ—¶é—´è®¾ç½®ä¸º %1$s
+ %1$s 将消æ¯é”€æ¯æ—¶é—´è®¾ç½®ä¸º %2$s
+ 您与 %s 的安全ç å·²ç»æ”¹å˜
å£ä»¤ä¸ç¬¦ï¼
旧密ç 䏿£ç¡®ï¼
@@ -330,6 +352,10 @@
抱æ‰ï¼Œè¿™ä¸æ˜¯æœ‰æ•ˆçš„设备连接二维ç 。
连接一个暗å·è®¾å¤‡ï¼Ÿ
çœ‹èµ·æ¥æ‚¨æ£åœ¨ä½¿ç”¨ç¬¬ä¸‰æ–¹çš„æ‰«æå™¨æ¥è¿žæŽ¥æš—å·è®¾å¤‡ã€‚处于您的安全考虑,请å°è¯•使用暗å·çš„æ‰«æå™¨æ‰«æäºŒç»´ç 。
+
+ 销æ¯ä¿¡æ¯
+ 您的信æ¯å°†ä¸ä¼šè¿‡æœŸ.
+ 在æ¤ä¼šè¯ä¸ï¼Œæ‰€æœ‰è¢«çœ‹åˆ°çš„æ¶ˆæ¯å°†ä¼šåœ¨ %s åŽæ¶ˆå¤±ã€‚
输入密钥
æš—å·å›¾æ ‡
@@ -343,12 +369,13 @@
立刻评价ï¼
ä¸ï¼Œè°¢è°¢ã€‚
ç¨åŽ
+ 糟糕, 您的设备上未安装 Google Play 商店
å±è”½æ¤è”系人?
- 您将ä¸ä¼šå†æ”¶åˆ°æ¥è‡ªæ¤ç”¨æˆ·çš„ä¿¡æ¯å’Œå‘¼å«ã€‚
+ 您将ä¸ä¼šå†æ”¶åˆ°æ¥è‡ªæ¤è”系人的信æ¯å’Œå‘¼å«ã€‚
å±è”½
解除æ¤è”系人的å±è”½ï¼Ÿ
- 您确定想è¦è§£é™¤å¯¹æ¤è”系人的å±è”½ï¼Ÿ
+ 您将å¯ä»¥å†æ¬¡æ”¶åˆ°æ¥è‡ªæ¤è”系人的信æ¯å’Œå‘¼å«ã€‚
解除å±è”½
å¯ç”¨
ç¦ç”¨
@@ -428,9 +455,9 @@
收到æŸå的密钥
äº¤æ¢æ¶ˆæ¯ï¼
接收到的密钥交æ¢ä¿¡æ¯æ¥è‡ªä¸æ£ç¡®çš„å议版本。
- 接收到æ¥è‡ªæœªçŸ¥å¯†é’¥èº«ä»½çš„ä¿¡æ¯ã€‚ç‚¹å‡»ä»¥å¤„ç†æˆ–显示。
- å·²ç»æ”¶åˆ°æ›´æ–°ï¼Œä½†æ˜¯æ— 法确认身份信æ¯ã€‚点击并验è¯èº«ä»½ã€‚
- 安全会è¯å·²é‡è®¾ã€‚
+ 接å—到了使用新的安全ç 的信æ¯ã€‚点击以处ç†å’Œæ˜¾ç¤ºã€‚
+ 您é‡ç½®äº†å®‰å…¨ä¼šè¯ã€‚
+ %s é‡ç½®äº†å®‰å…¨ä¼šè¯
é‡å¤çš„ä¿¡æ¯ã€‚
离开æ¤ç¾¤ç»„...
@@ -441,22 +468,16 @@
未接æ¥ç”µ
多媒体信æ¯
%s æ£åœ¨æš—å·ä¸ï¼Œæ‰“个招呼å§ï¼
+ ä¿¡æ¯é”€æ¯æ—¶é—´è®¾ç½®ä¸º %s
+ 您与 %s 的安全ç å·²ç»æ”¹å˜
- 您没有身份密钥。
- 收件人没有身份密钥。
- 收件人没有身份密钥ï¼
- è¦å‘Šï¼šæ‰«æçš„密钥ä¸åŒ¹é…ï¼ è¯·ä»”ç»†æ£€æŸ¥æŒ‡çº¹æ–‡æœ¬ã€‚
- 未验è¯ï¼
- 他们的密钥æ£ç¡®ã€‚ 还需è¦ä»–ä»¬éªŒè¯æ‚¨çš„密钥。
- 已验è¯ï¼
- 您没有身份密钥ï¼
-
- 您没有身份密钥。
- è¦å‘Šï¼šæ‰«æçš„密钥ä¸åŒ¹é…ï¼
- 没有ç»è¿‡éªŒè¯ï¼
- 扫æçš„密钥匹é…ï¼
- 已验è¯ï¼
- ä½ çš„èº«ä»½æŒ‡çº¹
+ 您的è”系人使用的是新版本的暗å·ï¼Œç¨‹åºæ— 法识别这个è”系人的二维ç 。
+请å‡çº§æ‚¨çš„æš—å·ã€‚
+ 扫æçš„ QR ç æ ¼å¼ä¸æ£ç¡®ã€‚è¯·é‡æ–°æ‰«ä¸€æ¬¡ã€‚
+ 通过……分享安全ç
+ 我方暗å·å®‰å…¨ç :
+ çœ‹èµ·æ¥æ‚¨æ²¡æœ‰ä»»ä½•å¯ä»¥å…±äº«çš„应用。
+ 没有在剪切æ¿ä¸å‘现安全ç ï¼Œå› æ¤æ— 法进行比较
å‘起一个已ç»å˜åœ¨çš„请求?
å‘é€
@@ -484,6 +505,8 @@
æ£åœ¨å¯¼å…¥æ•°æ®
æ£åœ¨å¯¼å…¥æ–‡æœ¬ä¿¡æ¯
+ 导入完æˆ
+ 系统数æ®åº“导入完毕。
轻触以开å¯ã€‚
轻触以开å¯ï¼Œæˆ–点击é”定以关é—。
@@ -538,13 +561,16 @@
å‘逿š—å·ä¿¡æ¯
å‘逿œªåŠ å¯†çš„çŸä¿¡
å‘逿œªåŠ å¯†çš„å½©ä¿¡
+ æ¥è‡ª %1$s
å‘é€
åˆ é™¤
与 %1$s 的对è¯
编写信æ¯
切æ¢è¡¨æƒ…键盘
附件缩略图
- 切æ¢é™„件抽屉
+ 切æ¢å¿«é€Ÿç›¸æœºé™„件抽屉
+ 录制并分享音频文件
+ å¯ç”¨çŸä¿¡æš—å·
æ»‘åŠ¨ä»¥å–æ¶ˆ
@@ -561,6 +587,7 @@
下载
è”系人照片
下载ä¸
+
批é‡é€‰æ‹©æ¨¡å¼
%s 已选择
@@ -576,11 +603,38 @@
连接新的设备
ç»§ç»
+
+ å…³
+
+ - %d ç§’
+
+ %d ç§’
+
+ - %d 分
+
+ %d 分钟
+
+ - %d å°æ—¶
+
+ %d å°æ—¶
+
+ - %d 天
+
+ %d 天
+
+ - %d 周
+
+ %d 周
+
+ æœç´¢ GIF 与贴纸
+
+ 什么也没找到
æ— æ³•åœ¨æ‚¨çš„è®¾å¤‡ä¸Šè¯»å–æ—¥å¿—。您ä»ç„¶å¯ä»¥ä½¿ç”¨ ADB æ¥èŽ·å¾—è°ƒè¯•æ—¥å¿—ã€‚
感谢ï¼
æ£åœ¨æäº¤
æ£åœ¨å°†æ—¥å¿—å‘布到 gist …
+ 未安装æµè§ˆå™¨
您想è¦å¯¼å…¥æ‚¨å·²ç»å˜åœ¨çš„çŸä¿¡åˆ°æš—å·çš„åŠ å¯†æ•°æ®åº“?
默认的系统数æ®åº“å°†ä¸ä¼šè¢«ä¿®æ”¹æˆ–改å˜ã€‚
@@ -633,7 +687,7 @@
å±è”½
颜色
æ¤è”系人的颜色
- 验è¯èº«ä»½
+ 验è¯å®‰å…¨ç
æš—å·å‘¼å«
结æŸå‘¼å«
@@ -656,7 +710,7 @@
çŸä¿¡æ‹¦æˆª
一些第三方的çŸä¿¡å®¢æˆ·ç«¯ï¼Œæ¯”如 Handcent 或 GoSMS ,å¯èƒ½ä¼šå…ˆæ‹¦æˆªè¿›å…¥çš„çŸä¿¡ã€‚如果您收到一个内容
-包å«â€œä½ 的暗å·éªŒè¯ç :â€ï¼ˆYour Signal verification code:),您则需è¦é…置您的
+包å«â€œä½ 的暗å·éªŒè¯ç :â€ï¼ˆYour LibreSignal verification code:),您则需è¦é…置您的
第三方çŸä¿¡åº”用å…许该çŸä¿¡é€šè¿‡ã€‚
䏿£ç¡®çš„å·ç 。
@@ -705,14 +759,17 @@
检查
输入一个åå—æˆ–å·ç
- æ·»åŠ æˆå‘˜
-
- 他们的身份(他们读作):
- 您的身份(您读æˆ):
+ æ·»åŠ æˆå‘˜
+
+ 了解更多有关验è¯å®‰å…¨ç çš„ä¿¡æ¯ ]]>
+ 点击扫æ
+
+ 分享安全ç
ä¸€äº›é—®é¢˜éœ€è¦æ‚¨çš„æ³¨æ„
å‘é€
接收
+ 销æ¯
æ¥è‡ª
到:
æ¥è‡ªï¼š
@@ -722,20 +779,18 @@
输入密钥
选择è”系人
å·²ç»æ£€æµ‹åˆ°æš—å·
- 身份公钥
修改密ç
- 验è¯èº«ä»½
+ 验è¯å®‰å…¨ç
å‘é€è°ƒè¯•日志
媒体预览
所有图片
所有图片和%1$s
ä¿¡æ¯è¯¦æƒ…
- 管ç†å·²è¿žæŽ¥çš„设备
+ 已连接的设备
邀请好å‹
å˜æ¡£ä¼šè¯
导入/导出
- ä½ çš„èº«ä»½å¯†é’¥
使用默认
使用定制
é™éŸ³ 1 å°æ—¶
@@ -838,7 +893,7 @@
å¯¹è¯æ•°é‡é™åˆ¶
ç«‹åˆ»æ•´ç†æ‰€æœ‰çš„会è¯
æŸ¥æ‰¾å¹¶å¤„ç†æ‰€æœ‰è¶…过é™åˆ¶çš„对è¯
- 设备
+ 已连接的设备
明亮
黑暗
外观
@@ -851,6 +906,8 @@
“Wifi呼å«â€å…¼å®¹æ¨¡å¼
如果您的设备使用WiFiå‘é€å½©ä¿¡æˆ–çŸä¿¡ï¼Œè¯·å¯ç”¨æ¤é€‰é¡¹(仅当\"WiFi è¯éŸ³å‘¼å«\"在您的设备上å¯ç”¨æ—¶æ‰å¯ç”¨)
å·²å±è”½çš„è”系人
+ 安全ç 审查
+ 当安全ç å‘ç”Ÿæ”¹å˜æ—¶ï¼Œå°±è¯·æ±‚éªŒè¯æ–°çš„安全ç
åœ¨é€šçŸ¥ä¸æ˜¾ç¤º
å½“ä½¿ç”¨ç§»åŠ¨æ•°æ®æ—¶
当使用 WiFi 时
@@ -884,6 +941,10 @@
釿–°å‘é€ä¿¡æ¯
ä¿å˜é™„ä»¶
+
+ 销æ¯ä¿¡æ¯
+
+ 消æ¯è¿‡æœŸ
邀请
@@ -902,8 +963,6 @@
新会è¯
- 安全性
- 验è¯èº«ä»½
é‡ç½®å®‰å…¨ä¼šè¯
解除é™éŸ³
@@ -927,6 +986,8 @@
广æ’
比较
+ 显示您的二维ç
+ 扫æè”系人二维ç
æ–°ä¿¡æ¯
新群组
@@ -935,6 +996,9 @@
å…¨éƒ¨æ ‡è®°ä¸ºå·²è¯»
邀请好å‹
帮助
+
+ å¤åˆ¶åˆ°å‰ªåˆ‡æ¿
+ 与剪切æ¿ä¸çš„内容进行比较
您的暗å·ç‰ˆæœ¬å·²ç»è¿‡æœŸ
@@ -966,7 +1030,10 @@
䏿”¯æŒçš„媒体类型。
ä¿å˜
+ 转å‘
+ 所有图片
+ ä¿å˜å…¨éƒ¨
图片预览
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 30b285780df..ea1d5ef180f 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -5,6 +5,8 @@
å¦
刪除
è«‹ç¨å€™...
+
+ 新訊æ¯
ç›®å‰: %s
您還沒有建立密碼ï¼
@@ -25,9 +27,9 @@
這將會從伺æœå™¨ä¸Šç™»å‡ºæ‚¨çš„Signal並åœç”¨ã€‚ 未來如果還想使用該功能,則需è¦å†æ¬¡è¨»å†Šã€‚
與伺æœå™¨çš„連線發生錯誤ï¼
簡訊功能已啟動
- 按這裡來變更您é è¨çš„簡訊應用
+ 按æ¤ä»¥è®Šæ›´æ‚¨é è¨çš„簡訊應用
簡訊功能已åœç”¨
- 按這裡將 Signal è¨ç‚ºé è¨çš„簡訊應用
+ 按æ¤ä»¥å°‡ Signal è¨ç½®çˆ²é è¨çš„簡訊應用
é–‹
é–‹
關
@@ -59,9 +61,8 @@
來電
- ç•¶å‰ %1$s çš„è˜åˆ¥é‡‘鑰已經改變。這å¯èƒ½æ˜¯ç”±æ–¼æœ‰äººå˜—è©¦ç ´è§£æ‚¨å’Œå°æ–¹çš„通信,也å¯èƒ½æ˜¯æœ‰ %2$s é‡è£äº†Signal然後產生了新的è˜åˆ¥é‡‘鑰。
- 您想è¦å°é€™åè¯çµ¡äºº
-進行èªè‰å—Žï¼Ÿ
+ %1$s 的安全碼產生變動。這有å¯èƒ½æ˜¯æœ‰ä¸æ˜Žäººå£«è©¦åœ–攔截您的通訊ï¼å°è©±å…§å®¹ï¼Œæˆ–æ˜¯å› ç‚º %2$s 釿–°å®‰è£ Signal。
+ 您å¯èƒ½å¸Œæœ›é©—è‰é€™åè¯çµ¡äººçš„安全碼。
接å—
%s 則訊æ¯
@@ -81,8 +82,10 @@
å›žæ”¶æœªåŠ å¯†çš„å¤šåª’é«”è¨Šæ¯ï¼Ÿ
ç”±æ–¼å°æ–¹å·²ç¶“ä¸å†æ˜¯Signal的使用者,當å‰è¨Šæ¯ä¸æœƒè¢«åŠ å¯†ã€‚\n\n傳é€ä¸åŠ å¯†çš„è¨Šæ¯ï¼Ÿ
找ä¸åˆ°åˆé©çš„æ‡‰ç”¨ç¨‹å¼ä¾†é–‹å•Ÿåª’體檔案。
+ 來自 %s
+ 至 %s
- é‡è¨å®‰å…¨å·¥ä½œéšŽæ®µï¼Ÿ
+ é‡è¨å®‰å…¨å°è©±ï¼Ÿ
該é¸é …將會有助於解決您在å°è©±ä¸é‡åˆ°çš„åŠ å¯†å•題。您的訊æ¯å°‡è¢«ä¿ç•™ã€‚
é‡è¨
刪除å°è©±ï¼Ÿ
@@ -117,13 +120,14 @@
多媒體訊æ¯ä¸è¢«æ”¯æ´
æ¤è¨Šæ¯ç„¡æ³•傳é€ï¼Œå› 為您的æ¥è€…䏿”¯æ´å¤šåª’體訊æ¯ã€‚
è«‹é¸æ“‡è¯çµ¡äºº
- 解除å°éŽ–ï¼Ÿ
- 您確定è¦è§£é™¤å°éŽ–æ¤è¯çµ¡äººå—Žï¼Ÿ
+ 解除å°éŽ–æ¤è¯çµ¡äººï¼Ÿ
+ 您將å¯ä»¥å†æ¬¡æ”¶åˆ°ä¾†è‡ªæ¤è¯çµ¡äººçš„訊æ¯èˆ‡é€šè©±ã€‚
解除å°éŽ–
ç•¶å‰è¨Šæ¯çš„附件類型已經超越大å°é™åˆ¶ã€‚
æ”åƒé ä¸å¯ç”¨
無法錄音ï¼
傳é€èªžéŸ³è¨Šæ¯æ™‚出ç¾éŒ¯èª¤...
+ 您的è¨å‚™ä¸Šæ²’有應用程åºèƒ½è™•ç†é€™å€‹éˆæŽ¥ã€‚
訊æ¯ç´°ç¯€
傳é€ç‹€æ…‹: %1$s\n已傳é€/已接收: %2$s
@@ -135,8 +139,21 @@
- 這將會永久性地刪除所有 %1$d å·²é¸è¨Šæ¯ã€‚
儲å˜è‡³å„²å˜è£ç½®ï¼Ÿ
- æˆåŠŸï¼
+
+ - ä¿å˜æ‰€æœ‰çš„ %1$d 媒體至å˜å„²å°‡æœƒå…許您è¨å‚™ä¸Šçš„其它軟體開啓它們。\n\n繼續嗎?
+
+
+ - ä¿å˜é™„件至å˜å„²æ™‚é‡åˆ°éŒ¯èª¤ï¼
+
+ 檔案已æˆåŠŸå˜å„²ã€‚
無法寫入儲å˜è£ç½®ï¼
+
+ - æ£åœ¨ä¿å˜ %1$d 附件
+
+
+ - æ£åœ¨ä¿å˜ %1$d 附件至å˜å„²...
+
+ æ£åœ¨æ”¶é›†é™„ä»¶...
待定...
資料 (Signal)
多媒體訊æ¯
@@ -145,6 +162,7 @@
æ£åœ¨åˆªé™¤è¨Šæ¯...
æœå°‹...
+ 您的è¨å‚™ä¸Šæœªå®‰è£ç€è¦½å™¨ã€‚
- 刪除已é¸å°è©±ï¼Ÿ
@@ -170,7 +188,7 @@
使用é è¨ï¼š%s
ç„¡
- ç¾åœ¨
+ 剛剛
%d 分é˜
å–æ¶ˆé€£çµ \'%s\'?
@@ -202,10 +220,15 @@
æ£åœ¨åŒ¯å‡ºç´”æ–‡å—æ ¼å¼è‡³å„²å˜è£ç½®...
錯誤,無法寫入儲å˜è£ç½®ã€‚
在寫入儲å˜è£ç½®æ™‚é‡åˆ°éŒ¯èª¤ã€‚
- æˆåŠŸï¼
+ 匯出æˆåŠŸã€‚
Signal æŒçºŒç™¼ç”Ÿå‚³è¼¸ç•°å¸¸ï¼
Signal ç„¡æ³•é †åˆ©è¨»å†Šç‚º Google Play Services。Signal 訊æ¯èˆ‡é€šè©±å·²ç¶“åœç”¨ï¼Œè«‹å˜—試在è¨å®š > 進階ä¸é‡æ–°è¨»å†Šã€‚
+
+ 在下載完整的 GIF 時發生錯誤...
+
+ 動態圖檔
+ 貼圖
新增群組
更新群組
@@ -259,14 +282,14 @@
按ä½ä¸¦ä¿æŒä»¥éŒ„製語音訊æ¯ï¼Œé¬†é–‹å³å‚³é€
分享
- 傳逿‰‹æ©Ÿç°¡è¨Š
+ 鏿“‡è¯çµ¡äºº
å–æ¶ˆ
æ£åœ¨å‚³é€...
心
邀請已傳é€ï¼
邀請至 Signal
-
- - 已傳é€è‡³ %d 使œ‹å‹
+
+ - 已傳é€ç°¡è¨Šè‡³ %d 使œ‹å‹
- å‚³é€ %d 則簡訊邀請?
@@ -280,7 +303,7 @@
Signal éœ€è¦æ¢ç¢¼æŽƒæå™¨ä¾†æŽƒæ QR 碼。
傳é€å¤±æ•—
- 新身分
+ 新的安全碼
儲å˜å¤šåª’é«”è¨Šæ¯æ™‚有誤ï¼
連線至多媒體訊æ¯ä¼ºæœå™¨æ™‚有誤ï¼
@@ -305,6 +328,9 @@
å·²å‘¼å« %s
來自 %s 的未接來電
%s æ£åœ¨ Signal 線上,打個招呼å§ï¼
+ 您將訊æ¯éŠ·æ¯€æ™‚é–“è¨ç½®çˆ² %1$s。
+ %1$s 將訊æ¯éŠ·æ¯€æ™‚é–“è¨ç½®çˆ² %2$s。
+ 您與 %s 的安全碼已改變。
輸入的自訂密碼ä¸ç›¸ç¬¦ï¼
輸入的是舊的自訂密碼ï¼
@@ -328,6 +354,10 @@
抱æ‰ï¼Œé€™ä¸æ˜¯æœ‰äº›çš„è£ç½®é€£çµ QR 碼。
é€£çµ Signal è£ç½®ï¼Ÿ
看起來您æ£åœ¨å˜—試使用第 3 方掃æå™¨é€£çµ Signal è£ç½®ã€‚為了安全著想,請使用 Signal 釿–°æŽƒæä»£ç¢¼ä¸€æ¬¡ã€‚
+
+ æ£åœ¨éŠ·æ¯€è¨Šæ¯
+ 您的訊æ¯å°‡ä¸æœƒéŽæœŸã€‚
+ åœ¨æ¤æœƒè©±ä¸æ‰€å‚³é€èˆ‡æŽ¥æ”¶çš„訊æ¯å°‡æœƒåœ¨é–±è®€ %s 後被銷毀。
輸入自訂密碼
Signal 圖示
@@ -341,12 +371,13 @@
ç«‹å³è©•分ï¼
ä¸ï¼Œè¬è¬ã€‚
ç¨å¾Œ
+ 糟糕,您的è¨å‚™ä¸Šæœªå®‰è£ Google Play 商店。
å°éŽ–æ¤è¯çµ¡äººï¼Ÿ
- æ‚¨å°‡ä¸æœƒå†æ¬¡æ”¶åˆ°ä¾†è‡ªæ¤ä½¿ç”¨è€…的訊æ¯èˆ‡é€šè©±ã€‚
+ æ‚¨å°‡ä¸æœƒå†æ¬¡æ”¶åˆ°ä¾†è‡ªæ¤è¯çµ¡äººçš„訊æ¯èˆ‡é€šè©±ã€‚
å°éŽ–
解除å°éŽ–æ¤è¯çµ¡äººï¼Ÿ
- 您確定è¦è§£é™¤å°éŽ–æ¤è¯çµ¡äººå—Žï¼Ÿ
+ 您將å¯ä»¥å†æ¬¡æ”¶åˆ°ä¾†è‡ªæ¤è¯çµ¡äººçš„訊æ¯èˆ‡é€šè©±ã€‚
解除å°éŽ–
啟用
åœç”¨
@@ -430,35 +461,30 @@
收到的金鑰交æ›è¨Šæ¯æ˜¯æœªçŸ¥çš„å”定ï¼ç‰ˆæœ¬ã€‚
- 收到的金鑰交æ›è¨Šæ¯å¤¾å¸¶æœªçŸ¥çš„身分值,按æ¤é¡¯ç¤ºç´°ç¯€ä¸¦åŸ·è¡Œã€‚
- å·²æŽ¥æ”¶é‡‘é‘°äº¤æ›æ›´æ–°è«‹æ±‚ä½†æœªçŸ¥å°æ–¹èº«åˆ†ã€‚按æ¤é€²è¡Œèº«åˆ†ç¢ºèªã€‚
- 安全工作階段é‡è¨ã€‚
+ 收到使用新安全碼的訊æ¯ã€‚按æ¤é¡¯ç¤ºç´°ç¯€ä¸¦åŸ·è¡Œã€‚
+ 您已é‡è¨å®‰å…¨å°è©±ã€‚
+ %s é‡è¨å®‰å…¨å°è©±ã€‚
複製訊æ¯ã€‚
離開這個群組...
- 安全工作階段é‡è¨ã€‚
+ 安全å°è©±å·²é‡è¨ã€‚
è‰ç¨¿ï¼š
您呼å«
呼嫿‚¨
未接來電
媒體訊æ¯
%s æ£åœ¨ Signal 線上,打個招呼å§ï¼
+ 訊æ¯éŠ·æ¯€æ™‚é–“è¨ç½®çˆ² %s
+ 您與 %s 的安全碼已改變。
- 您ä¸å…·å‚™èº«åˆ†èªè‰é‡‘鑰。
- 收件者ä¸å…·å‚™èº«åˆ†èªè‰é‡‘鑰。
- 收件者ä¸å…·å‚™èº«åˆ†èªè‰é‡‘é‘°ï¼
- è¦å‘Šï¼é©—è‰çµæžœä¸ç¬¦åˆï¼è«‹å†æª¢æŸ¥ä¸¦ä»”細比å°ä¸€æ¬¡æŒ‡ç´‹ç¢¼ã€‚
- 無法驗è‰ï¼
- å°æ–¹æä¾›çš„金鑰是æ£ç¢ºçš„ã€‚ä½†æ‚¨ä¹Ÿå¿…é ˆå°‡æ‚¨çš„é‡‘é‘°èˆ‡å…¶æ¯”å°ã€‚
- 已驗è‰ï¼
- 您ä¸å…·å‚™èº«åˆ†èªè‰é‡‘é‘°ï¼
-
- 您ä¸å…·å‚™èº«åˆ†èªè‰é‡‘鑰。
- è¦å‘Šï¼æŽƒæçš„值並ä¸ç›¸ç¬¦ï¼
- 無法驗è‰ï¼
- 掃æçš„金鑰相符ï¼
- 已驗è‰ï¼
- æ‚¨çš„èº«åˆ†è¾¨è˜æŒ‡ç´‹ç¢¼
+ 您的è¯çµ¡äººä½¿ç”¨çš„æ˜¯èˆŠç‰ˆæœ¬çš„ Signalã€‚åœ¨é©—è‰æ‚¨çš„安全碼å‰è«‹å°‹æ±‚å°æ–¹å…ˆé€²è¡Œæ›´æ–°ã€‚
+ 您的è¯çµ¡äººä½¿ç”¨çš„æ˜¯æ–°ç‰ˆæœ¬çš„ Signal,程å¼ç„¡æ³•è˜åˆ¥é€™å€‹è¯çµ¡äººçš„二ç¶ç¢¼ã€‚
+è«‹å‡ç´šæ‚¨çš„ Signal。
+ 掃æçš„ QR ç¢¼æ ¼å¼ä¸æ£ç¢ºã€‚è«‹é‡æ–°æŽƒä¸€æ¬¡ã€‚
+ 通éŽ...分享安全碼
+ 我方 Signal 安全碼:
+ 看起來您沒有任何å¯ä»¥åˆ†äº«çš„æ‡‰ç”¨ã€‚
+ 沒有在剪貼簿ä¸ç™¼ç¾å®‰å…¨ç¢¼ï¼Œå› æ¤ç„¡æ³•進行比較
忽略既有請求,ä¾ç„¶å•Ÿå‹•?
é€å‡º
@@ -486,6 +512,8 @@
匯入ä¸
匯入文å—簡訊
+ 匯入完æˆ
+ 系統數據庫導入完æˆã€‚
按一下開啟。
按一下開啟,或按一下鎖ä½ä¸¦é—œé–‰ã€‚
@@ -512,11 +540,20 @@
新訊æ¯
圖片
+ 圖片
音訊
+ 音訊
影片
+ 影片
è¯çµ¡äºº
+ è¯çµ¡äºº
相機
+ 相機
ä½ç½®
+ ä½ç½®
+ 動態圖檔
+ 動態圖檔
+ 切æ›é™„件抽屜
舊的自訂密碼
新的自訂密碼
@@ -540,13 +577,16 @@
å‚³é€ Signal åŠ å¯†è¨Šæ¯
傳逿œªåŠ å¯†çš„æ‰‹æ©Ÿç°¡è¨Š
傳逿œªåŠ å¯†çš„å¤šåª’é«”è¨Šæ¯
+ 來自 %1$s
é€å‡º
移除
與 %1$s å°è©±
編輯簡訊
切æ›è¡¨æƒ…符號éµç›¤
附件縮圖
- 切æ›é™„件抽屜
+ 切æ›å¿«é€Ÿç›¸æ©Ÿé™„件抽屜
+ éŒ„åˆ¶ä¸¦åˆ†äº«éŸ³é »æ–‡ä»¶
+ 啟動 Signal 簡訊功能
æ»‘å‹•ä»¥å–æ¶ˆ
@@ -563,6 +603,10 @@
下載
è¯çµ¡äººçš„相片
下載ä¸...
+
+ æ’æ”¾
+ æš«åœ
+ 下載
æ‰¹æ¬¡é¸æ“‡æ¨¡å¼
%s å·²é¸
@@ -578,11 +622,38 @@
é€£çµæ–°çš„è£ç½®
繼續
+
+ 關
+
+ - %d ç§’
+
+ %ds
+
+ - %d 分é¾
+
+ %dm
+
+ - %d å°æ™‚
+
+ %dh
+
+ - %d 天
+
+ %dd
+
+ - %d 星期
+
+ %dw
+
+ æœå°‹å‹•態圖檔與貼圖
+
+ 未找到任何æ±è¥¿
無法在您的è¨å‚™ä¸Šè®€å–日誌。您ä»ç„¶å¯ä»¥ä½¿ç”¨ ADB 來ç²å¾—åµéŒ¯ç´€éŒ„。
æ„Ÿè¬æ‚¨çš„å”助ï¼
上傳ä¸
æ£åœ¨æŠŠè¨˜éŒ„轉貼至gist上...
+ 未安è£ç€è¦½å™¨
æ‚¨æƒ³è¦æŠŠå·²å˜åœ¨çš„訊æ¯åŒ¯å…¥ Signal çš„åŠ å¯†è³‡æ–™åº«å—Žï¼Ÿ
è£ç½®ä¸Šé è¨çš„è³‡æ–™åº«å°‡ä¸æœƒè¢«åšä»»ä½•修改或變更。
@@ -635,7 +706,7 @@
å°éŽ–
é¡è‰²
æ¤è¯çµ¡äººçš„é¡è‰²
- é©—è‰èº«åˆ†
+ é©—è‰å®‰å…¨ç¢¼
Signal 通話
çµæŸé€šè©±
@@ -706,14 +777,17 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
檢查
輸入å稱或手機號碼
- 新增æˆå“¡
-
- 他們的身分 (請他們唸出)
- ä½ çš„é©—è‰ç¢¼ (ä½ è‡ªå·±å”¸å‡º)
+ 新增æˆå“¡
+
+ 了解更多有關驗è‰å®‰å…¨ç¢¼çš„è¨Šæ¯ ]]>
+ 點擊掃æ
+
+ 分享安全碼
一些å•é¡Œéœ€è¦æ‚¨çš„æ³¨æ„。
傳é€
接å—
+ 銷毀
來自
至:
來自:
@@ -723,20 +797,18 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
輸入自訂密碼
鏿“‡å¤šä½è¯çµ¡äºº
已嵿¸¬å‡º Signal
- 公鑰ï¼å…¬é–‹é‡‘é‘°
變更自訂密碼
- é©—è‰èº«åˆ†
+ é©—è‰å®‰å…¨ç¢¼
é€å‡ºåµéŒ¯ç´€éŒ„
媒體é 覽
所有圖片
所有圖片與 %1$s
訊æ¯ç´°ç¯€
- 管ç†å·²é€£æŽ¥è¨å‚™
+ 已連çµè£ç½®
邀請好å‹
å˜æª”å°è©±
匯入ï¼åŒ¯å‡º
- 您的身分金鑰
使用é è¨
使用定製
éœéŸ³ 1 å°æ™‚
@@ -749,7 +821,7 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
åœç”¨
åå—與訊æ¯
僅åå—
- 沒有åå—æˆ–訊æ¯
+ ä¸é¡¯ç¤ºåå—æˆ–訊æ¯
圖片
音訊
影片
@@ -777,7 +849,7 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
啟用自訂密碼
使用密碼鎖定 Signal 與訊æ¯é€šçŸ¥
螢幕安全è¨å®š
- åœç”¨ç•«é¢æ“·å–功能,在å°è©±æ¸…單或APPå…§
+ 在å°è©±æ¸…單或應用內åœç”¨ç•«é¢æ“·å–功能
åœ¨ç‰¹å®šæ™‚é–“å…§ä¸æ´»èºæœƒè‡ªå‹•鎖定 Signal
䏿´»èºéŽ–å®šå¯†ç¢¼
䏿´»èºæ™‚é–“é–“éš”
@@ -839,7 +911,7 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
å°è©±ç¾¤çµ„長度上é™
ç¾åœ¨é–‹å§‹ç²¾ç°¡æ‰€æœ‰çš„å°è©±ç¾¤çµ„
這會掃æç›®å‰æ‰€æœ‰çš„å°è©±ç¾¤çµ„,並且強制刪除超éŽé•·åº¦ä¸Šé™çš„部分。
- è£ç½®
+ 已連çµè£ç½®
明亮
黑暗
介é¢è¨å®š
@@ -852,6 +924,8 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
\"WiFi 呼å«\"相容模å¼
如果您的è£ç½®ä½¿ç”¨ WiFi 傳é€ç°¡è¨Šæˆ–多媒體訊æ¯ï¼Œè«‹å•Ÿç”¨æ¤é¸é … (僅當\"WiFi 語音呼å«\"在您的è£ç½®ä¸Šå•Ÿç”¨çš„æ™‚候æ‰å¯ç”¨)
å°éŽ–è¯çµ¡äºº
+ é©—è‰å®‰å…¨ç¢¼
+ ç•¶å®‰å…¨ç¢¼ç”¢ç”Ÿè®Šå¾—æ™‚ï¼Œè«‹æ±‚é©—è‰æ–°çš„安全碼
在通知列ä¸é¡¯ç¤º
當使用行動數據時
當使用 Wi-Fi 時
@@ -885,6 +959,10 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
é‡é€è¨Šæ¯
å¦å˜é™„件檔案
+
+ 自動銷毀訊æ¯
+
+ 訊æ¯éŽæœŸ
邀請
@@ -903,9 +981,7 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
æ–°å°è©±
- 安全è¨å®š
- é©—è‰èº«åˆ†
- é‡è¨å®‰å…¨å·¥ä½œéšŽæ®µ
+ é‡è¨å®‰å…¨å°è©±
接觸éœéŸ³
@@ -928,6 +1004,8 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
訊æ¯å»£æ’
比å°
+ 顯示您的二ç¶ç¢¼
+ 掃æè¯çµ¡äººäºŒç¶ç¢¼
新訊æ¯
新增群組
@@ -936,6 +1014,9 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
全部標示為已讀
邀請好å‹
說明
+
+ 複製到剪貼簿
+ 與剪貼簿ä¸çš„內容進行比較
您的 Signal ç‰ˆæœ¬å·²éŽæœŸ
@@ -967,7 +1048,10 @@ Signal 在ç‰å¾…ç°¡è¨Šé©—è‰æ™‚超時。
䏿”¯æ´çš„媒體類型
儲å˜
+ 轉寄
+ 所有圖片
+ å„²å˜æ‰€æœ‰
圖片é 覽
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 0b009972205..dfa47c9b9d5 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -238,4 +238,27 @@
- @null
+
+ - 0
+ - 5
+ - 10
+ - 30
+ - 60
+ - 300
+ - 1800
+ - 3600
+ - 21600
+ - 43200
+ - 86400
+ - 604800
+
+
+
+ - #000000
+ - #ff0000
+ - #ffff00
+ - #00ffff
+ - #ff00ff
+
+
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 8fcaeb14e50..be6834af3da 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -40,6 +40,8 @@
+
+
@@ -50,10 +52,13 @@
-
+
+
+
+
@@ -127,6 +132,8 @@
+
+
@@ -150,7 +157,9 @@
-
+
+
+
@@ -166,4 +175,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 60011e75cdf..bd380c8220f 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -3,6 +3,7 @@
#ff2090ea
#ff1c7ac5
#552090ea
+ #882090ea
@color/signal_primary
@color/signal_primary_dark
@@ -24,6 +25,8 @@
#7F111111
+ #32000000
+
@color/gray5
#ffffffff
#ff000000
@@ -49,4 +52,7 @@
#ff222222
#400099cc
#40ffffff
-
\ No newline at end of file
+
+ #8cf437
+ #00FFFFFF
+
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 100d0c4a75b..72b4318cdd0 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -25,6 +25,7 @@
210dp
3dp
24dp
+ 24dp
3
10dp
@@ -63,4 +64,6 @@
140dp
34sp
20sp
+
+ 3dp
diff --git a/res/values/integers.xml b/res/values/integers.xml
new file mode 100644
index 00000000000..bb4c483c999
--- /dev/null
+++ b/res/values/integers.xml
@@ -0,0 +1,4 @@
+
+
+ 300
+
\ No newline at end of file
diff --git a/res/values/material_colors.xml b/res/values/material_colors.xml
index 28155109850..9f02548771b 100644
--- a/res/values/material_colors.xml
+++ b/res/values/material_colors.xml
@@ -273,4 +273,6 @@
#424242
#212121
+ #44BDBDBD
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2d74297c884..f6492b8267b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1,11 +1,14 @@
- Signal
+ LibreSignal
Yes
No
Delete
Please wait...
+
+ New message
+
Currently: %s
You haven\'t set a passphrase yet!
@@ -20,17 +23,17 @@
Delete
Disable passphrase?
- This will permanently unlock Signal and message notifications.
+ This will permanently unlock LibreSignal and message notifications.
Disable
Unregistering
- Unregistering from Signal messages and calls...
- Disable Signal messages and calls?
- Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future.
+ Unregistering from LibreSignal messages and calls...
+ Disable LibreSignal messages and calls?
+ Disable LibreSignal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future.
Error connecting to server!
SMS Enabled
Touch to change your default SMS app
SMS Disabled
- Touch to make Signal your default SMS app
+ Touch to make LibreSignal your default SMS app
on
On
off
@@ -71,19 +74,13 @@
Incoming call
- The
- identifying key material for %1$s has changed. This could either mean that someone is trying to
- intercept your communication, or that %2$s simply re-installed Signal and now has a new
- identity key.
-
- You may wish to verify
- this contact.
-
+ Your safety number with %1$s has changed. This could either mean that someone is trying to intercept your communication, or that %2$s simply reinstalled Signal.
+ You may wish to verify your safety number with this contact.
Accept
Message %s
- Signal Call %s
+ LibreSignal Call %s
Message size: %d KB
@@ -98,7 +95,7 @@
Tap for unsecured fallback
Fallback to unencrypted SMS?
Fallback to unencrypted MMS?
- This message will not be encrypted because the recipient is no longer a Signal user.\n\nSend unsecured message?
+ This message will not be encrypted because the recipient is no longer a LibreSignal user.\n\nSend unsecured message?
Can\'t find an app able to open this media.
from %s
to %s
@@ -133,20 +130,22 @@
Are you sure you want to leave this group?
Insecure SMS
Insecure MMS
- Signal
- Let\'s switch to Signal %1$s
+ LibreSignal
+ Let\'s switch to LibreSignal %1$s
Let\'s use this to chat: %1$s
Error leaving group...
MMS not supported
This message cannot be sent since your carrier doesn\'t support MMS.
Please choose a contact
- Unblock?
- Are you sure you want to unblock this contact?
+ Unblock this contact?
+ You will once again be able to receive messages and calls from this contact.
Unblock
Attachment exceeds size limits for the type of message you\'re sending.
Camera unavailable
Unable to record audio!
Error sending voice message...
+ There is no app available to handle this link on your device.
+ Vybrat úložiÅ¡tÄ› pro pÅ™Ãlohy
Message details
@@ -169,7 +168,7 @@
- Error while saving attachment to storage!
- Error while saving attachments to storage!
- Success!
+ File saved successfully.
Unable to write to storage!
- Saving attachment
@@ -181,7 +180,7 @@
Collecting attachments...
Pending...
- Data (Signal)
+ Data (LibreSignal)
MMS
SMS
Deleting
@@ -189,6 +188,7 @@
Search...
+ There is no browser installed on your device.
@@ -223,7 +223,7 @@
None
- Now
+ Just now
%d min
@@ -245,33 +245,41 @@
Share with
- Welcome to Signal.
- TextSecure and RedPhone are now one private messenger, for every situation: Signal.
- Welcome to Signal!
- TextSecure is now Signal.
- TextSecure and RedPhone are now one app: Signal. Tap to explore.
+ Welcome to LibreSignal.
+ TextLibre and PhoneLibre are now one private messenger, for every situation: LibreSignal.
+ Welcome to LibreSignal!
+ TextLibre is now LibreSignal.
+ TextLibre and PhoneLibre are now one app: LibreSignal. Tap to explore.
Export
Export plaintext to storage?
- Warning, this will export the plaintext contents of your Signal messages to storage.
+ Warning, this will export the plaintext contents of your LibreSignal messages to storage.
Cancel
Exporting
Exporting plaintext to storage...
Error, unable to write to storage.
Error while writing to storage.
- Success!
+ Export successful.
- Permanent Signal communication failure!
- Signal was unable to register with Google Play Services. Signal messages and calls have been disabled, please try re-registering in Settings > Advanced.
+ Permanent LibreSignal communication failure!
+ LibreSignal was unable to register with Google Play Services. LibreSignal messages and calls have been disabled, please try re-registering in Settings > Advanced.
+
+
+
+ Error while retrieving full resolution GIF...
+
+ GIFs
+ Stickers
+
New group
Update group
Group name
New MMS group
- You have selected a contact that doesn\'t support Signal groups, so this group will be MMS.
- You\'re not registered for Signal messages and calls, so Signal groups are disabled. Please try registering in Settings > Advanced.
+ You have selected a contact that doesn\'t support LibreSignal groups, so this group will be MMS.
+ You\'re not registered for LibreSignal messages and calls, so LibreSignal groups are disabled. Please try registering in Settings > Advanced.
An unexpected error happened that has made group creation fail.
You need at least one person in your group!
One of the members of your group has a number that can\'t be read correctly. Please fix or remove that contact and try again.
@@ -279,7 +287,7 @@
Create group
Creating %1$s…
Updating %1$s...
- Couldn\'t add %1$s because they\'re not a Signal user.
+ Couldn\'t add %1$s because they\'re not a LibreSignal user.
Loading group details...
You\'re already in the group.
@@ -293,7 +301,7 @@
Import system SMS database?
This will import
- messages from the system\'s default SMS database to Signal. If you\'ve previously
+ messages from the system\'s default SMS database to LibreSignal. If you\'ve previously
imported the system\'s SMS database, importing again will result in duplicated messages.
Import
@@ -301,7 +309,7 @@
Restore encrypted backup?
Restoring an encrypted backup will completely replace your existing keys, preferences, and
- messages. You will lose any information that\'s in your current Signal install but not
+ messages. You will lose any information that\'s in your current LibreSignal install but not
in the backup.
Restore
@@ -325,32 +333,32 @@
Share
- Send SMS
+ Choose contacts
Cancel
Sending...
Heart
Invitations sent!
- Invite to Signal
-
- - SEND TO 1 FRIEND
- - SEND TO %d FRIENDS
+ Invite to LibreSignal
+
+ - SEND SMS TO 1 FRIEND
+ - SEND SMS TO %d FRIENDS
- Send 1 SMS invite?
- Send %d SMS invites?
- Let\'s switch to Signal: %1$s
+ Let\'s switch to LibreSignal: %1$s
It looks like you don\'t have any apps to share to.
Friends don\'t let friends chat unencrypted.
No scanned key found!
Install Barcode Scanner?
- Signal needs Barcode Scanner for QR codes.
+ LibreSignal needs Barcode Scanner for QR codes.
Failed to send
- New identity
+ New safety number
Error storing MMS!
@@ -358,11 +366,11 @@
Error reading wireless provider MMS settings...
- Signal call in progress
+ LibreSignal call in progress
Missed call from %s
- Missed Signal call
- Establishing Signal call
- Incoming Signal call
+ Missed LibreSignal call
+ Establishing LibreSignal call
+ Incoming LibreSignal call
Deny call
Answer call
End call
@@ -372,13 +380,18 @@
Multimedia message
- Received a message encrypted using an old version of Signal that is no longer supported. Please ask the sender to update to the most recent version and resend the message.
+ Received a message encrypted using an old version of LibreSignal that is no longer supported. Please ask the sender to update to the most recent version and resend the message.
You have left the group.
Updated the group.
%s called you
Called %s
Missed call from %s
- %s is on Signal, say hey!
+ %s is on LibreSignal, say hey!
+
+ You
+ You set disappearing message time to %1$s.
+ %1$s set disappearing message time to %2$s.
+ Your safety number with %s has changed.
@@ -404,12 +417,17 @@
Invalid QR code.
Sorry, you have too many devices linked already, try removing some...
Sorry, this is not a valid device link QR code.
- Link a Signal device?
- It looks like you\'re trying to link a Signal device using a 3rd party scanner. For your protection, please scan the code again from within Signal.
+ Link a LibreSignal device?
+ It looks like you\'re trying to link a LibreSignal device using a 3rd party scanner. For your protection, please scan the code again from within LibreSignal.
+
+
+ Disappearing messages
+ Your messages will not expire.
+ Messages sent and received in this conversation will disappear %s after they have been seen.
Enter passphrase
- Signal icon
+ LibreSignal icon
Submit passphrase
Invalid passphrase!
@@ -422,13 +440,14 @@
Rate now!
No thanks
Later
+ Whoops, the Play Store app does not appear to be installed on your device.
Block this contact?
- You will no longer receive messages or calls from this user.
+ You will no longer receive messages and calls from this contact.
Block
Unblock this contact?
- Are you sure you want to unblock this contact?
+ You will once again be able to receive messages and calls from this contact.
Unblock
Enabled
Disabled
@@ -456,7 +475,7 @@
Got it
- Connect with Signal
+ Connect with LibreSignal
Select your country
You must specify your
country code
@@ -474,14 +493,11 @@
than 4.0 must have a registered Google Account. Devices running Android 4.0 or newer do not
require a Google account, but must have the Play Store app installed.
- "This device setup is not officially supported, and if you experience bugs you will have to resolve them yourself."
-
Double-check that this is your number! We\'re about to verify it with an SMS.
Continue
Edit
- I Understand
Possible problems
@@ -506,13 +522,13 @@
Too many requests!
You\'ve already recently requested a voice call. You can request another in 20 minutes.
Registration conflict
- This number is already registered on a different Signal server (CyanogenMod?). You must unregister there before registering here.
+ This number is already registered on a different LibreSignal server (CyanogenMod?). You must unregister there before registering here.
Registration complete
- Signal registration has successfully completed.
+ LibreSignal registration has successfully completed.
Registration error
- Signal registration has encountered a problem.
+ LibreSignal registration has encountered a problem.
Image
@@ -526,9 +542,9 @@
Received key exchange message for invalid protocol version.
- Received message with unknown identity key. Tap to process and display.
- Received updated but unknown identity information. Tap to validate identity.
- Secure session reset.
+ Received message with new safety number. Tap to process and display.
+ You reset the secure session.
+ %s reset the secure session.
Duplicate message.
@@ -539,29 +555,18 @@
Called you
Missed call
Media message
- %s is on Signal, say hey!
+ %s is on LibreSignal, say hey!
+ Disappearing message time set to %s
+ Your safety number with %s has changed.
- You do not have an identity key.
- Recipient has no identity key.
- Recipient has no identity key!
- Scan contact\'s QR code
- Display your QR code
- WARNING, the scanned key DOES NOT match! Please check the fingerprint text carefully.
- NOT Verified!
- Their key is correct. It is also necessary to verify your key with them as well.
- Verified!
- You don\'t have an identity key!
-
-
- You do not have an identity key.
- Scan contact\'s QR code
- Display your QR code
- WARNING, the scanned key DOES NOT match!
- NOT verified!
- The scanned key matches!
- Verified!
- Your identity fingerprint
+ Your contact is running an old version of Signal. Please ask them to update before verifying your safety number.
+ Your contact is running a newer version of Signal with an incompatible QR code format. Please update to compare.
+ The scanned QR code is not a correctly formatted safety number verification code. Please try scanning again.
+ Share safety number via...
+ Our Signal safety number:
+ It looks like you don\'t have any apps to share to.
+ No safety number to compare was found in the clipboard
Initiate despite existing request?
@@ -598,12 +603,12 @@
Import in progress
Importing text messages
Import complete
- Signal system database import is complete.
+ System database import is complete.
Touch to open.
Touch to open, or touch the lock to close.
- Signal is unlocked
+ LibreSignal is unlocked
Lock with passphrase
@@ -621,20 +626,29 @@
Reply
- Quick response unavailable when Signal is locked!
+ Quick response unavailable when LibreSignal is locked!
Problem sending message!
- Signal
+ LibreSignal
New message
Image
+ Image
Audio
+ Audio
Video
+ Video
Contact
+ Contact
Camera
+ Camera
Location
+ Location
+ GIF
+ Gif
+ Toggle attachment drawer
Old passphrase
@@ -664,16 +678,19 @@
Conversation muted
- Send Signal message
+ Send LibreSignal message
Send unsecured SMS
Send unsecured MMS
+ From %1$s
Send
Remove
Conversation with %1$s
Message composition
Toggle emoji keyboard
Attachment Thumbnail
- Toggle attachment drawer
+ Toggle quick camera attachment drawer
+ Record and send audio attachment
+ Enable Signal for SMS
SLIDE TO CANCEL
@@ -695,6 +712,11 @@
Contact photo
Downloading
+
+ Play
+ Pause
+ Download
+
Batch selection mode
%s selected
@@ -705,6 +727,8 @@
Scan the QR code displayed on the device to link
+ Not working? Enter QR text...
+ Done
Link device
@@ -713,18 +737,64 @@
No devices linked...
Link new device
-
continue
+
+
+ Off
+
+
+ - 1 second
+ - %d seconds
+
+
+ %ds
+
+
+ - 1 minute
+ - %d minutes
+
+
+ %dm
+
+
+ - 1 hour
+ - %d hours
+
+
+ %dh
+
+
+ - 1 day
+ - %d days
+
+
+ %dd
+
+
+ - 1 week
+ - %d weeks
+
+
+ %dw
+
+
+ Search GIFs and stickers
+
+
+ Nothing found
+
+
Could not read the log on your device. You can still use ADB to get a debug log instead.
Thanks for your help!
Submitting
Posting logs to gist…
+ No browser installed
- Would you like to import your existing text messages into Signal\'s encrypted database?
+ Would you like to import your existing text messages into LibreSignal\'s encrypted database?
The default system database will not be modified or altered in any way.
Skip
Import
@@ -739,7 +809,7 @@
Import system SMS database
Import the database from the default system messenger app
Restore encrypted backup
- Restore a previously exported encrypted Signal backup
+ Restore a previously exported encrypted LibreSignal backup
Import plaintext backup
Import a plaintext backup file. Compatible with \'SMS Backup & Restore.\'
@@ -773,7 +843,7 @@
Unlock
- Signal requires MMS settings to deliver media and group messages through your wireless carrier. Your device does not make this information available, which is occasionally true for locked devices and other restrictive configurations.
+ LibreSignal requires MMS settings to deliver media and group messages through your wireless carrier. Your device does not make this information available, which is occasionally true for locked devices and other restrictive configurations.
To send media and group messages, tap \'OK\' and complete the requested settings. The MMS settings for your carrier can generally be located by searching for \'your carrier APN\'. You will only need to do this once.
@@ -787,18 +857,18 @@
Block
Color
Color for this contact
- Verify identity
+ Verify safety number
- Signal Call
+ LibreSignal Call
end call
Audio
Mute
- Signal Call
+ LibreSignal Call
- Verify your phone number to connect with Signal.
+ Verify your phone number to connect with LibreSignal.
YOUR COUNTRY
YOUR COUNTRY CODE AND
@@ -817,7 +887,7 @@
Some third party text messaging clients, such as Handcent or GoSMS, behave poorly and
intercept all incoming SMS messages. Check to see if you received a text message that starts
- with \'Your Signal verification code:\', in which case you\'ll need to configure your
+ with \'Your LibreSignal verification code:\', in which case you\'ll need to configure your
third party text messaging app to let text messages through.
Incorrect number.
@@ -827,20 +897,20 @@
Google Voice.
- Signal will not work with Google Voice numbers.
+ LibreSignal will not work with Google Voice numbers.
Voice verification
- Signal can also call you to verify your number. Tap \'Call Me\' and enter the six digit
+ LibreSignal can also call you to verify your number. Tap \'Call Me\' and enter the six digit
code that you hear below.
Verify
Call me
Edit number
Connectivity error.
- Signal was unable to connect to the server.
+ LibreSignal was unable to connect to the server.
Some possible
problems include:
@@ -848,17 +918,17 @@
connectivity.
Your
- device needs network connectivity in order to use this Signal feature. Check to ensure
+ device needs network connectivity in order to use this LibreSignal feature. Check to ensure
that it is connected to mobile data or Wi-Fi.
Restrictive firewall.
If you are connected via Wi-Fi, it\'s possible that there is a firewall blocking access to
- the Signal server. Try another network or mobile data.
+ the LibreSignal server. Try another network or mobile data.
- Signal will now automatically verify your number with a confirmation SMS message.
+ LibreSignal will now automatically verify your number with a confirmation SMS message.
Connecting...
Waiting for SMS
@@ -869,7 +939,7 @@
could take a moment. Please be patient, we\'ll notify you when verification is complete.
- Signal timed out while waiting for a verification SMS message.
+ LibreSignal timed out while waiting for a verification SMS message.
SMS verification
failed.
@@ -881,16 +951,20 @@
Enter a name or number
- Add member
+ Add members
-
- Their identity (they read):
- Your identity (you read):
+
+ Learn more about verifying safety numbers]]>
+ Tap to scan
+
+
+ Share safety number
Some issues need your attention.
Sent
Received
+ Disappears
Via
To:
From:
@@ -900,22 +974,21 @@
Create passphrase
Enter passphrase
Select contacts
- Signal detected
- Public identity key
+
+ LibreSignal detected
Change passphrase
- Verify identity
+ Verify safety number
Submit debug log
Media preview
All images
All images with %1$s
Message details
- Manage linked devices
+ Linked devices
Invite friends
Archived conversations
Import / export
- Your identity key
Use default
Use custom
@@ -948,8 +1021,8 @@
SMS and MMS
Receive all SMS
Receive all MMS
- Use Signal for all incoming text messages
- Use Signal for all incoming multimedia messages
+ Use LibreSignal for all incoming text messages
+ Use LibreSignal for all incoming multimedia messages
Input Settings
Enable Enter key
Replace the smiley key with an Enter key
@@ -961,16 +1034,16 @@
Change passphrase
Change your passphrase
Enable passphrase
- Lock Signal and message notifications with a passphrase
+ Lock LibreSignal and message notifications with a passphrase
Screen security
Block screenshots in the recents list and inside the app
- Auto-lock Signal after a specified time interval of inactivity
+ Auto-lock LibreSignal after a specified time interval of inactivity
Inactivity timeout passphrase
Inactivity timeout interval
Notifications
Enable message notifications
New contacts notifications
- Show a notification for new Signal contacts
+ Show a notification for new LibreSignal contacts
LED color
Unknown
LED blink pattern
@@ -1025,19 +1098,21 @@
Conversation length limit
Trim all conversations now
Scan through all conversations and enforce conversation length limits
- Devices
+ Linked devices
Light
Dark
Appearance
Theme
Default
Language
- Signal messages and calls
- Free private messages and calls to Signal users
+ LibreSignal messages and calls
+ Free private messages and calls to LibreSignal users
Submit debug log
\'WiFi Calling\' compatibility mode
Enable if your device uses SMS/MMS delivery over WiFi (only enable when \'WiFi Calling\' is enabled on your device)
Blocked contacts
+ Safety numbers approval
+ Require approval of new safety numbers when they change
Display in notifications
When using mobile data
When using Wi-Fi
@@ -1045,7 +1120,11 @@
Media auto-download
Message trimming
Use system emoji
- Disable Signal\'s built-in emoji support
+ Disable LibreSignal\'s built-in emoji support
+ Send a custom contact list
+ This increases privacy because the server will not know your contacts
+ Edit custom contact list
+ Choose the contacts sent to the server
@@ -1068,7 +1147,7 @@
Call
- Signal call
+ LibreSignal call
Message details
@@ -1080,6 +1159,12 @@
Save attachment
+
+ Disappearing messages
+
+
+ Messages expiring
+
Invite
@@ -1104,8 +1189,6 @@
New conversation
- Security
- Verify identity
Reset secure session
@@ -1148,30 +1231,34 @@
Invite friends
Help
+
+ Copy to clipboard
+ Compare with clipboard
+
- Your version of Signal is outdated
+ Your version of LibreSignal is outdated
- Your version of Signal will expire in 1 day. Tap to update to the most recent version.
- Your version of Signal will expire in %d days. Tap to update to the most recent version.
- Your version of Signal will expire today. Tap to update to the most recent version.
- Your version of Signal has expired!
+ Your version of LibreSignal will expire today. Tap to update to the most recent version.
+ Your version of LibreSignal has expired!
Messages will no longer send successfully. Tap to update to the most recent version.
UPDATE
Use as default SMS app
- Tap to make Signal your default SMS app.
+ Tap to make LibreSignal your default SMS app.
SET
Import system SMS
- Tap to copy your phone\'s SMS messages into Signal\'s encrypted database.
+ Tap to copy your phone\'s SMS messages into LibreSignal\'s encrypted database.
IMPORT
- Enable Signal messages and calls
+ Enable LibreSignal messages and calls
Upgrade your communication experience.
ENABLE
- Invite to Signal
+ Invite to LibreSignal
Take your conversation with %1$s to the next level.
INVITE
Invite your friends!
- The more friends use Signal, the better it gets.
+ The more friends use LibreSignal, the better it gets.
SHARE
CLOSE
@@ -1182,6 +1269,8 @@
Save
+ Forward
+ All images
Save all
@@ -1204,6 +1293,14 @@
Transport icon
+
+
+ Send a custom contact list to the server?
+
+ This increases privacy because the server will not know your contacts. You can
+ edit the custom contact list or disable it at the settings.
+ Yes
+ No
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 029e17535a5..b29d1d6923e 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -227,5 +227,12 @@
- @null
+
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 8fb41c35561..10978b394a9 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -124,6 +124,10 @@
- @drawable/ic_volume_up_light
- @drawable/ic_account_box_light
- @drawable/ic_attach_grey600_24dp
+ - @color/gray65
+ - @color/black
+
+ - @color/gray5
- @color/gray12
- #66555555
@@ -133,10 +137,13 @@
- @drawable/emoji_category_recent_light
- @drawable/emoji_category_people_light
- - @drawable/emoji_category_objects_light
- @drawable/emoji_category_nature_light
+ - @drawable/emoji_category_foods_light
+ - @drawable/emoji_category_activity_light
- @drawable/emoji_category_places_light
+ - @drawable/emoji_category_objects_light
- @drawable/emoji_category_symbol_light
+ - @drawable/emoji_category_flags_light
- @drawable/emoji_category_emoticons_light
@@ -233,6 +240,8 @@
- #BFffffff
- @drawable/conversation_item_sent_indicator_text_shape_dark
+ - #ff333333
+
- @drawable/ic_info_outline_dark
- @drawable/ic_warning_dark
@@ -262,6 +271,8 @@
- @drawable/ic_volume_up_dark
- @drawable/ic_account_box_dark
- @drawable/ic_attach_white_24dp
+ - @color/gray13
+ - @color/white
- @color/gray95
- @color/gray65
@@ -272,10 +283,13 @@
- @drawable/emoji_category_recent_dark
- @drawable/emoji_category_people_dark
- - @drawable/emoji_category_objects_dark
- @drawable/emoji_category_nature_dark
+ - @drawable/emoji_category_foods_dark
+ - @drawable/emoji_category_activity_dark
- @drawable/emoji_category_places_dark
+ - @drawable/emoji_category_objects_dark
- @drawable/emoji_category_symbol_dark
+ - @drawable/emoji_category_flags_dark
- @drawable/emoji_category_emoticons_dark
- @drawable/quick_camera_dark
diff --git a/res/values/vector_paths.xml b/res/values/vector_paths.xml
new file mode 100644
index 00000000000..d4f9bb2ecb4
--- /dev/null
+++ b/res/values/vector_paths.xml
@@ -0,0 +1,20 @@
+
+
+
+ M 44 32 L 44 64 L 100 64 L 100 64 Z
+ M 44 96 L 44 64 L 100 64 L 100 64 Z
+
+
+ M 32 40 L 32 56 L 96 56 L 96 40 Z
+ M 32 88 L 32 72 L 96 72 L 96 88 Z
+
+
+ upperpart
+ bottompart
+ parts
+
+
+ upper
+ bottom
+
+
\ No newline at end of file
diff --git a/res/xml/automotive_app_desc.xml b/res/xml/automotive_app_desc.xml
new file mode 100644
index 00000000000..2603bffcbc2
--- /dev/null
+++ b/res/xml/automotive_app_desc.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index 90f5277a2dc..ebb5936e23a 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -22,7 +22,7 @@
android:icon="?pref_ic_chats"/>
-
diff --git a/res/xml/preferences_app_protection.xml b/res/xml/preferences_app_protection.xml
index 908e70ab7dc..e8fabfc66e3 100644
--- a/res/xml/preferences_app_protection.xml
+++ b/res/xml/preferences_app_protection.xml
@@ -1,6 +1,18 @@
+
+
+
+
+
+
diff --git a/res/xml/recipient_preferences.xml b/res/xml/recipient_preferences.xml
index ee9e38ff14a..3c5beb89cf1 100644
--- a/res/xml/recipient_preferences.xml
+++ b/res/xml/recipient_preferences.xml
@@ -37,8 +37,9 @@
app:numColumns="5" />
+ android:title="@string/recipient_preferences__verify_safety_number"
+ android:persistent="false"
+ android:enabled="false"/>
messageAndThreadId = DatabaseFactory.getSmsDatabase(this).insertMissedCall(remoteNumber);
+ MessageNotifier.updateNotification(this, KeyCachingService.getMasterSecret(this),
+ false, messageAndThreadId.second, signal);
}
private void handleAnswerCall(Intent intent) {
@@ -381,7 +383,7 @@ private synchronized void terminate() {
public void notifyCallStale() {
Log.w(TAG, "Got a stale call, probably an old SMS...");
- handleMissedCall(remoteNumber);
+ handleMissedCall(remoteNumber, true);
this.terminate();
}
@@ -431,7 +433,7 @@ public void notifyConnectingtoInitiator() {
public void notifyCallDisconnected() {
if (state == STATE_RINGING)
- handleMissedCall(remoteNumber);
+ handleMissedCall(remoteNumber, false);
sendMessage(Type.CALL_DISCONNECTED, getRecipient(), null);
this.terminate();
@@ -458,7 +460,7 @@ public void notifyPerformingHandshake() {
public void notifyServerFailure() {
if (state == STATE_RINGING)
- handleMissedCall(remoteNumber);
+ handleMissedCall(remoteNumber, true);
state = STATE_IDLE;
outgoingRinger.playFailure();
@@ -468,7 +470,7 @@ public void notifyServerFailure() {
public void notifyClientFailure() {
if (state == STATE_RINGING)
- handleMissedCall(remoteNumber);
+ handleMissedCall(remoteNumber, false);
state = STATE_IDLE;
outgoingRinger.playFailure();
@@ -478,7 +480,7 @@ public void notifyClientFailure() {
public void notifyLoginFailed() {
if (state == STATE_RINGING)
- handleMissedCall(remoteNumber);
+ handleMissedCall(remoteNumber, true);
state = STATE_IDLE;
outgoingRinger.playFailure();
diff --git a/src/org/thoughtcrime/redphone/audio/IncomingRinger.java b/src/org/thoughtcrime/redphone/audio/IncomingRinger.java
index 57ab97d78da..d7d9412c32a 100644
--- a/src/org/thoughtcrime/redphone/audio/IncomingRinger.java
+++ b/src/org/thoughtcrime/redphone/audio/IncomingRinger.java
@@ -109,7 +109,6 @@ public void start() {
public void stop() {
if (player != null) {
Log.d(TAG, "Stopping ringer");
- player.stop();
player.release();
player = null;
}
diff --git a/src/org/thoughtcrime/redphone/audio/OutgoingRinger.java b/src/org/thoughtcrime/redphone/audio/OutgoingRinger.java
index de85a752633..ac6e23469dd 100644
--- a/src/org/thoughtcrime/redphone/audio/OutgoingRinger.java
+++ b/src/org/thoughtcrime/redphone/audio/OutgoingRinger.java
@@ -91,34 +91,26 @@ private void start() {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnPreparedListener(this);
+ mediaPlayer.setLooping(loopEnabled);
String packageName = context.getPackageName();
Uri dataUri = Uri.parse("android.resource://" + packageName + "/" + currentSoundID);
try {
mediaPlayer.setDataSource(context, dataUri);
+ mediaPlayer.prepareAsync();
} catch (IllegalArgumentException | SecurityException | IllegalStateException | IOException e) {
Log.w(TAG, e);
// TODO Auto-generated catch block
return;
}
- try {
- mediaPlayer.prepareAsync();
- } catch (IllegalStateException e) {
- // TODO Auto-generated catch block
- Log.w(TAG, e);
- return;
- }
}
public void stop() {
- if( mediaPlayer == null ) return;
- try {
- mediaPlayer.stop();
- mediaPlayer.release();
- mediaPlayer = null;
- } catch( IllegalStateException e ) {
- }
+ if (mediaPlayer == null) return;
+ mediaPlayer.release();
+ mediaPlayer = null;
+
currentSoundID = -1;
}
@@ -134,8 +126,6 @@ public void onCompletion(MediaPlayer mp) {
}
public void onPrepared(MediaPlayer mp) {
- mediaPlayer.setLooping(loopEnabled);
-
AudioManager am = ServiceUtil.getAudioManager(context);
if (am.isBluetoothScoAvailableOffCall()) {
@@ -147,6 +137,10 @@ public void onPrepared(MediaPlayer mp) {
}
}
- mediaPlayer.start();
+ try {
+ mp.start();
+ } catch (IllegalStateException e) {
+ Log.w(TAG, e);
+ }
}
}
diff --git a/src/org/thoughtcrime/redphone/call/ProximityLock.java b/src/org/thoughtcrime/redphone/call/ProximityLock.java
index 92a05461a08..0c2ba41eef6 100644
--- a/src/org/thoughtcrime/redphone/call/ProximityLock.java
+++ b/src/org/thoughtcrime/redphone/call/ProximityLock.java
@@ -4,7 +4,7 @@
import android.os.PowerManager;
import android.util.Log;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
diff --git a/src/org/thoughtcrime/redphone/signaling/RedPhoneAccountManager.java b/src/org/thoughtcrime/redphone/signaling/RedPhoneAccountManager.java
index f835d0acf29..cb43574dd6b 100644
--- a/src/org/thoughtcrime/redphone/signaling/RedPhoneAccountManager.java
+++ b/src/org/thoughtcrime/redphone/signaling/RedPhoneAccountManager.java
@@ -8,8 +8,8 @@
import org.thoughtcrime.securesms.util.Base64;
import org.thoughtcrime.securesms.util.JsonUtils;
-import org.whispersystems.libaxolotl.util.guava.Optional;
-import org.whispersystems.textsecure.api.push.TrustStore;
+import org.whispersystems.libsignal.util.guava.Optional;
+import org.whispersystems.signalservice.api.push.TrustStore;
import java.io.IOException;
import java.io.InputStream;
diff --git a/src/org/thoughtcrime/redphone/signaling/RedPhoneTrustStore.java b/src/org/thoughtcrime/redphone/signaling/RedPhoneTrustStore.java
index b3b1066ae4f..61baf5cc304 100644
--- a/src/org/thoughtcrime/redphone/signaling/RedPhoneTrustStore.java
+++ b/src/org/thoughtcrime/redphone/signaling/RedPhoneTrustStore.java
@@ -3,7 +3,7 @@
import android.content.Context;
import org.thoughtcrime.securesms.R;
-import org.whispersystems.textsecure.api.push.TrustStore;
+import org.whispersystems.signalservice.api.push.TrustStore;
import java.io.InputStream;
diff --git a/src/org/thoughtcrime/redphone/signaling/SignalingSocket.java b/src/org/thoughtcrime/redphone/signaling/SignalingSocket.java
index d3b954da752..2ffb140361c 100644
--- a/src/org/thoughtcrime/redphone/signaling/SignalingSocket.java
+++ b/src/org/thoughtcrime/redphone/signaling/SignalingSocket.java
@@ -31,7 +31,7 @@
import org.thoughtcrime.redphone.signaling.signals.Signal;
import org.thoughtcrime.redphone.util.LineReader;
import org.thoughtcrime.securesms.util.JsonUtils;
-import org.whispersystems.textsecure.api.push.TrustStore;
+import org.whispersystems.signalservice.api.push.TrustStore;
import java.io.IOException;
import java.io.InputStream;
diff --git a/src/org/thoughtcrime/redphone/signaling/signals/InitiateSignal.java b/src/org/thoughtcrime/redphone/signaling/signals/InitiateSignal.java
index a01693d747e..65da5f0cdfd 100644
--- a/src/org/thoughtcrime/redphone/signaling/signals/InitiateSignal.java
+++ b/src/org/thoughtcrime/redphone/signaling/signals/InitiateSignal.java
@@ -19,8 +19,8 @@
//import org.thoughtcrime.redphone.util.PhoneNumberFormatter;
-import org.whispersystems.textsecure.api.util.InvalidNumberException;
-import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
+import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
/**
* A signal which initiates a call with the specified remote number.
diff --git a/src/org/thoughtcrime/redphone/ui/InCallAudioButton.java b/src/org/thoughtcrime/redphone/ui/InCallAudioButton.java
index c30b4b5edf3..44498c0dcaa 100644
--- a/src/org/thoughtcrime/redphone/ui/InCallAudioButton.java
+++ b/src/org/thoughtcrime/redphone/ui/InCallAudioButton.java
@@ -2,11 +2,9 @@
import android.content.Context;
import android.graphics.drawable.LayerDrawable;
-import android.support.v7.internal.view.menu.MenuBuilder;
import android.support.v7.widget.PopupMenu;
import android.util.Log;
import android.view.MenuItem;
-import android.view.View;
import android.widget.CompoundButton;
import org.thoughtcrime.redphone.util.AudioUtils;
diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/org/thoughtcrime/securesms/ApplicationContext.java
index e6eea5f30cb..530fc7d7941 100644
--- a/src/org/thoughtcrime/securesms/ApplicationContext.java
+++ b/src/org/thoughtcrime/securesms/ApplicationContext.java
@@ -27,19 +27,20 @@
import org.thoughtcrime.securesms.dependencies.AxolotlStorageModule;
import org.thoughtcrime.securesms.dependencies.InjectableType;
import org.thoughtcrime.securesms.dependencies.RedPhoneCommunicationModule;
-import org.thoughtcrime.securesms.dependencies.TextSecureCommunicationModule;
+import org.thoughtcrime.securesms.dependencies.SignalCommunicationModule;
+import org.thoughtcrime.securesms.jobs.CreateSignedPreKeyJob;
import org.thoughtcrime.securesms.jobs.GcmRefreshJob;
-import org.thoughtcrime.securesms.jobs.RefreshAttributesJob;
import org.thoughtcrime.securesms.jobs.persistence.EncryptingJobSerializer;
import org.thoughtcrime.securesms.jobs.requirements.MasterSecretRequirementProvider;
import org.thoughtcrime.securesms.jobs.requirements.MediaNetworkRequirementProvider;
import org.thoughtcrime.securesms.jobs.requirements.ServiceRequirementProvider;
+import org.thoughtcrime.securesms.service.ExpiringMessageManager;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.whispersystems.jobqueue.JobManager;
import org.whispersystems.jobqueue.dependencies.DependencyInjector;
import org.whispersystems.jobqueue.requirements.NetworkRequirementProvider;
-import org.whispersystems.libaxolotl.logging.AxolotlLoggerProvider;
-import org.whispersystems.libaxolotl.util.AndroidAxolotlLogger;
+import org.whispersystems.libsignal.logging.SignalProtocolLoggerProvider;
+import org.whispersystems.libsignal.util.AndroidSignalProtocolLogger;
import org.thoughtcrime.securesms.service.MessageRetrievalService;
import dagger.ObjectGraph;
@@ -54,8 +55,9 @@
*/
public class ApplicationContext extends Application implements DependencyInjector {
- private JobManager jobManager;
- private ObjectGraph objectGraph;
+ private ExpiringMessageManager expiringMessageManager;
+ private JobManager jobManager;
+ private ObjectGraph objectGraph;
private MediaNetworkRequirementProvider mediaNetworkRequirementProvider = new MediaNetworkRequirementProvider();
@@ -71,7 +73,9 @@ public void onCreate() {
initializeLogging();
initializeDependencyInjection();
initializeJobManager();
+ initializeExpiringMessageManager();
initializeGcmCheck();
+ initializeSignedPreKeyCheck();
}
@Override
@@ -85,9 +89,12 @@ public JobManager getJobManager() {
return jobManager;
}
+ public ExpiringMessageManager getExpiringMessageManager() {
+ return expiringMessageManager;
+ }
+
private void initializeDeveloperBuild() {
if (BuildConfig.DEV_BUILD) {
-// LeakCanary.install(this);
StrictMode.setThreadPolicy(new ThreadPolicy.Builder().detectAll()
.penaltyLog()
.build());
@@ -100,7 +107,7 @@ private void initializeRandomNumberFix() {
}
private void initializeLogging() {
- AxolotlLoggerProvider.setProvider(new AndroidAxolotlLogger());
+ SignalProtocolLoggerProvider.setProvider(new AndroidSignalProtocolLogger());
}
private void initializeJobManager() {
@@ -121,7 +128,7 @@ public void notifyMediaControlEvent() {
}
private void initializeDependencyInjection() {
- this.objectGraph = ObjectGraph.create(new TextSecureCommunicationModule(this),
+ this.objectGraph = ObjectGraph.create(new SignalCommunicationModule(this),
new RedPhoneCommunicationModule(this),
new AxolotlStorageModule(this));
}
@@ -138,4 +145,14 @@ private void initializeGcmCheck() {
}
}
+ private void initializeSignedPreKeyCheck() {
+ if (!TextSecurePreferences.isSignedPreKeyRegistered(this)) {
+ jobManager.add(new CreateSignedPreKeyJob(this));
+ }
+ }
+
+ private void initializeExpiringMessageManager() {
+ this.expiringMessageManager = new ExpiringMessageManager(this);
+ }
+
}
diff --git a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java
index 810ed4b65d6..8cb41ced6ea 100644
--- a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java
+++ b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java
@@ -149,6 +149,7 @@ public void onResume() {
super.onResume();
((ApplicationPreferencesActivity) getActivity()).getSupportActionBar().setTitle(R.string.text_secure_normal__menu_settings);
setCategorySummaries();
+ setCategoryVisibility();
}
private void setCategorySummaries() {
@@ -164,6 +165,13 @@ private void setCategorySummaries() {
.setSummary(ChatsPreferenceFragment.getSummary(getActivity()));
}
+ private void setCategoryVisibility() {
+ Preference devicePreference = this.findPreference(PREFERENCE_CATEGORY_DEVICES);
+ if (devicePreference != null && !TextSecurePreferences.isPushRegistered(getActivity())) {
+ getPreferenceScreen().removePreference(devicePreference);
+ }
+ }
+
private class CategoryClickListener implements Preference.OnPreferenceClickListener {
private MasterSecret masterSecret;
private String category;
diff --git a/src/org/thoughtcrime/securesms/BindableConversationItem.java b/src/org/thoughtcrime/securesms/BindableConversationItem.java
index c6fd33cfd9a..2be2e707164 100644
--- a/src/org/thoughtcrime/securesms/BindableConversationItem.java
+++ b/src/org/thoughtcrime/securesms/BindableConversationItem.java
@@ -15,4 +15,6 @@ void bind(@NonNull MasterSecret masterSecret,
@NonNull Locale locale,
@NonNull Set batchSelected,
@NonNull Recipients recipients);
+
+ MessageRecord getMessageRecord();
}
diff --git a/src/org/thoughtcrime/securesms/ConfirmIdentityDialog.java b/src/org/thoughtcrime/securesms/ConfirmIdentityDialog.java
index 4e32c1b1328..cbc113a39f0 100644
--- a/src/org/thoughtcrime/securesms/ConfirmIdentityDialog.java
+++ b/src/org/thoughtcrime/securesms/ConfirmIdentityDialog.java
@@ -24,14 +24,15 @@
import org.thoughtcrime.securesms.database.SmsDatabase;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.model.MessageRecord;
+import org.thoughtcrime.securesms.jobs.IdentityUpdateJob;
import org.thoughtcrime.securesms.jobs.PushDecryptJob;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.util.Base64;
-import org.whispersystems.textsecure.api.messages.TextSecureEnvelope;
-import org.whispersystems.textsecure.internal.push.TextSecureProtos;
+import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
+import org.whispersystems.signalservice.internal.push.SignalServiceProtos;
import java.io.IOException;
@@ -49,9 +50,9 @@ public ConfirmIdentityDialog(Context context,
super(context);
Recipient recipient = RecipientFactory.getRecipientForId(context, mismatch.getRecipientId(), false);
String name = recipient.toShortString();
- String introduction = String.format(context.getString(R.string.ConfirmIdentityDialog_the_signature_on_this_key_exchange_is_different), name, name);
+ String introduction = String.format(context.getString(R.string.ConfirmIdentityDialog_your_safety_number_with_s_has_changed), name, name);
SpannableString spannableString = new SpannableString(introduction + " " +
- context.getString(R.string.ConfirmIdentityDialog_you_may_wish_to_verify_this_contact));
+ context.getString(R.string.ConfirmIdentityDialog_you_may_wish_to_verify_your_safety_number_with_this_contact));
spannableString.setSpan(new VerifySpan(context, mismatch),
introduction.length()+1, spannableString.length(),
@@ -101,6 +102,10 @@ protected Void doInBackground(Void... params) {
processMessageRecord(messageRecord);
processPendingMessageRecords(messageRecord.getThreadId(), mismatch);
+ ApplicationContext.getInstance(getContext())
+ .getJobManager()
+ .add(new IdentityUpdateJob(getContext(), mismatch.getRecipientId()));
+
return null;
}
@@ -161,12 +166,12 @@ private void processIncomingMessageRecord(MessageRecord messageRecord) {
mismatch.getRecipientId(),
mismatch.getIdentityKey());
- TextSecureEnvelope envelope = new TextSecureEnvelope(TextSecureProtos.Envelope.Type.PREKEY_BUNDLE_VALUE,
- messageRecord.getIndividualRecipient().getNumber(),
- messageRecord.getRecipientDeviceId(), "",
- messageRecord.getDateSent(),
- Base64.decode(messageRecord.getBody().getBody()),
- null);
+ SignalServiceEnvelope envelope = new SignalServiceEnvelope(SignalServiceProtos.Envelope.Type.PREKEY_BUNDLE_VALUE,
+ messageRecord.getIndividualRecipient().getNumber(),
+ messageRecord.getRecipientDeviceId(), "",
+ messageRecord.getDateSent(),
+ Base64.decode(messageRecord.getBody().getBody()),
+ null);
long pushId = pushDatabase.insert(envelope);
@@ -204,8 +209,8 @@ private VerifySpan(Context context, IdentityKeyMismatch mismatch) {
@Override
public void onClick(View widget) {
Intent intent = new Intent(context, VerifyIdentityActivity.class);
- intent.putExtra("recipient", mismatch.getRecipientId());
- intent.putExtra("remote_identity", new IdentityKeyParcelable(mismatch.getIdentityKey()));
+ intent.putExtra(VerifyIdentityActivity.RECIPIENT_ID, mismatch.getRecipientId());
+ intent.putExtra(VerifyIdentityActivity.RECIPIENT_IDENTITY, new IdentityKeyParcelable(mismatch.getIdentityKey()));
context.startActivity(intent);
}
}
diff --git a/src/org/thoughtcrime/securesms/ContactSelectionActivity.java b/src/org/thoughtcrime/securesms/ContactSelectionActivity.java
index 4b4342cb284..8d5a7313163 100644
--- a/src/org/thoughtcrime/securesms/ContactSelectionActivity.java
+++ b/src/org/thoughtcrime/securesms/ContactSelectionActivity.java
@@ -96,6 +96,8 @@ private void initializeToolbar() {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
+ getSupportActionBar().setIcon(null);
+ getSupportActionBar().setLogo(null);
}
private void initializeResources() {
diff --git a/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java
index d89895e0fd6..91a349d7afc 100644
--- a/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java
+++ b/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java
@@ -47,6 +47,7 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* Fragment for selecting a one or more contacts from a list.
@@ -62,6 +63,7 @@ public class ContactSelectionListFragment extends Fragment
public final static String DISPLAY_MODE = "display_mode";
public final static String MULTI_SELECT = "multi_select";
public final static String REFRESHABLE = "refreshable";
+ public final static String PRESELECTION = "preselection"; // array list of phone numbers
public final static int DISPLAY_MODE_ALL = ContactsCursorLoader.MODE_ALL;
public final static int DISPLAY_MODE_PUSH_ONLY = ContactsCursorLoader.MODE_PUSH_ONLY;
@@ -69,7 +71,7 @@ public class ContactSelectionListFragment extends Fragment
private TextView emptyText;
- private Map selectedContacts;
+ private Set selectedContacts;
private OnContactSelectedListener onContactSelectedListener;
private SwipeRefreshLayout swipeRefresh;
private String cursorFilter;
@@ -111,7 +113,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
public @NonNull List getSelectedContacts() {
List selected = new LinkedList<>();
if (selectedContacts != null) {
- selected.addAll(selectedContacts.values());
+ selected.addAll(selectedContacts);
}
return selected;
@@ -127,6 +129,11 @@ private void initializeCursor() {
new ListClickListener(),
isMulti());
selectedContacts = adapter.getSelectedContacts();
+
+ if(getActivity().getIntent().hasExtra(PRESELECTION)) {
+ selectedContacts.addAll(getActivity().getIntent().getStringArrayListExtra(PRESELECTION));
+ }
+
recyclerView.setAdapter(adapter);
recyclerView.addItemDecoration(new StickyHeaderDecoration(adapter, true));
this.getLoaderManager().initLoader(0, null, this);
@@ -162,7 +169,9 @@ public Loader onCreateLoader(int id, Bundle args) {
public void onLoadFinished(Loader loader, Cursor data) {
((CursorRecyclerViewAdapter) recyclerView.getAdapter()).changeCursor(data);
emptyText.setText(R.string.contact_selection_group_activity__no_contacts);
- if (recyclerView.getAdapter().getItemCount() > 20) {
+ boolean useFastScroller = (recyclerView.getAdapter().getItemCount() > 20);
+ recyclerView.setVerticalScrollBarEnabled(!useFastScroller);
+ if (useFastScroller) {
fastScroller.setVisibility(View.VISIBLE);
fastScroller.setRecyclerView(recyclerView);
}
@@ -178,12 +187,12 @@ private class ListClickListener implements ContactSelectionListAdapter.ItemClick
@Override
public void onItemClick(ContactSelectionListItem contact) {
- if (!isMulti() || !selectedContacts.containsKey(contact.getContactId())) {
- selectedContacts.put(contact.getContactId(), contact.getNumber());
+ if (!isMulti() || !selectedContacts.contains(contact.getNumber())) {
+ selectedContacts.add(contact.getNumber());
contact.setChecked(true);
if (onContactSelectedListener != null) onContactSelectedListener.onContactSelected(contact.getNumber());
} else {
- selectedContacts.remove(contact.getContactId());
+ selectedContacts.remove(contact.getNumber());
contact.setChecked(false);
if (onContactSelectedListener != null) onContactSelectedListener.onContactDeselected(contact.getNumber());
}
diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java
index 5f60da222b5..335e742d741 100644
--- a/src/org/thoughtcrime/securesms/ConversationActivity.java
+++ b/src/org/thoughtcrime/securesms/ConversationActivity.java
@@ -16,6 +16,7 @@
*/
package org.thoughtcrime.securesms;
+import android.annotation.TargetApi;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -33,8 +34,11 @@
import android.os.Build;
import android.os.Bundle;
import android.os.Vibrator;
+import android.provider.Browser;
import android.provider.ContactsContract;
+import android.provider.Telephony;
import android.support.annotation.NonNull;
+import android.support.v4.view.MenuItemCompat;
import android.support.v4.view.WindowCompat;
import android.support.v7.app.AlertDialog;
import android.text.Editable;
@@ -56,7 +60,6 @@
import android.widget.TextView;
import android.widget.Toast;
-import com.google.android.gms.location.places.ui.PlacePicker;
import com.google.protobuf.ByteString;
import org.thoughtcrime.redphone.RedPhone;
@@ -77,7 +80,6 @@
import org.thoughtcrime.securesms.components.camera.QuickAttachmentDrawer.AttachmentDrawerListener;
import org.thoughtcrime.securesms.components.camera.QuickAttachmentDrawer.DrawerState;
import org.thoughtcrime.securesms.components.emoji.EmojiDrawer;
-import org.thoughtcrime.securesms.components.location.SignalPlace;
import org.thoughtcrime.securesms.components.reminder.InviteReminder;
import org.thoughtcrime.securesms.components.reminder.ReminderView;
import org.thoughtcrime.securesms.contacts.ContactAccessor;
@@ -90,20 +92,23 @@
import org.thoughtcrime.securesms.database.DraftDatabase.Draft;
import org.thoughtcrime.securesms.database.DraftDatabase.Drafts;
import org.thoughtcrime.securesms.database.GroupDatabase;
+import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
import org.thoughtcrime.securesms.database.MmsSmsColumns.Types;
import org.thoughtcrime.securesms.database.RecipientPreferenceDatabase.RecipientsPreferences;
import org.thoughtcrime.securesms.database.ThreadDatabase;
+import org.thoughtcrime.securesms.jobs.MultiDeviceBlockedUpdateJob;
import org.thoughtcrime.securesms.mms.AttachmentManager;
import org.thoughtcrime.securesms.mms.AttachmentManager.MediaType;
import org.thoughtcrime.securesms.mms.AttachmentTypeSelectorAdapter;
import org.thoughtcrime.securesms.mms.AudioSlide;
-import org.thoughtcrime.securesms.mms.LocationSlide;
import org.thoughtcrime.securesms.mms.MediaConstraints;
+import org.thoughtcrime.securesms.mms.OutgoingExpirationUpdateMessage;
import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage;
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
import org.thoughtcrime.securesms.mms.OutgoingSecureMediaMessage;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck;
+import org.thoughtcrime.securesms.notifications.MarkReadReceiver;
import org.thoughtcrime.securesms.notifications.MessageNotifier;
import org.thoughtcrime.securesms.providers.PersistentBlobProvider;
import org.thoughtcrime.securesms.recipients.Recipient;
@@ -111,6 +116,7 @@
import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.recipients.Recipients.RecipientsModifiedListener;
+import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.sms.OutgoingEncryptedMessage;
@@ -123,6 +129,7 @@
import org.thoughtcrime.securesms.util.DirectoryHelper.UserCapabilities.Capability;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme;
+import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
@@ -131,9 +138,8 @@
import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener;
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
import org.thoughtcrime.securesms.util.concurrent.SettableFuture;
-import org.whispersystems.libaxolotl.InvalidMessageException;
-import org.whispersystems.libaxolotl.util.guava.Optional;
-import org.whispersystems.textsecure.api.util.InvalidNumberException;
+import org.whispersystems.libsignal.InvalidMessageException;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
@@ -145,7 +151,7 @@
import static org.thoughtcrime.securesms.TransportOption.Type;
import static org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord;
-import static org.whispersystems.textsecure.internal.push.TextSecureProtos.GroupContext;
+import static org.whispersystems.signalservice.internal.push.SignalServiceProtos.GroupContext;
/**
* Activity for displaying a message thread, as well as
@@ -178,6 +184,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private static final int TAKE_PHOTO = 6;
private static final int ADD_CONTACT = 7;
private static final int PICK_LOCATION = 8;
+ private static final int PICK_GIF = 9;
private MasterSecret masterSecret;
protected ComposeText composeText;
@@ -188,6 +195,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private TextView charactersLeft;
private ConversationFragment fragment;
private Button unblockButton;
+ private Button makeDefaultSmsButton;
private InputAwareLayout container;
private View composePanel;
protected ReminderView reminderView;
@@ -196,7 +204,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private AttachmentManager attachmentManager;
private AudioRecorder audioRecorder;
private BroadcastReceiver securityUpdateReceiver;
- private BroadcastReceiver groupUpdateReceiver;
+ private BroadcastReceiver recipientsStaleReceiver;
private EmojiDrawer emojiDrawer;
protected HidingLinearLayout quickAttachmentToggle;
private QuickAttachmentDrawer quickAttachmentDrawer;
@@ -284,7 +292,7 @@ protected void onResume() {
titleView.setTitle(recipients);
setActionBarColor(recipients.getColor());
- setBlockedUserState(recipients);
+ setBlockedUserState(recipients, isSecureText);
calculateCharactersRemaining();
MessageNotifier.setVisibleThread(threadId);
@@ -314,9 +322,9 @@ public void onConfigurationChanged(Configuration newConfig) {
@Override
protected void onDestroy() {
saveDraft();
- if (recipients != null) recipients.removeListener(this);
- if (securityUpdateReceiver != null) unregisterReceiver(securityUpdateReceiver);
- if (groupUpdateReceiver != null) unregisterReceiver(groupUpdateReceiver);
+ if (recipients != null) recipients.removeListener(this);
+ if (securityUpdateReceiver != null) unregisterReceiver(securityUpdateReceiver);
+ if (recipientsStaleReceiver != null) unregisterReceiver(recipientsStaleReceiver);
super.onDestroy();
}
@@ -345,7 +353,7 @@ public void onActivityResult(final int reqCode, int resultCode, Intent data) {
recipients = RecipientFactory.getRecipientsForIds(this, data.getLongArrayExtra(GroupCreateActivity.GROUP_RECIPIENT_EXTRA), true);
recipients.addListener(this);
titleView.setTitle(recipients);
- setBlockedUserState(recipients);
+ setBlockedUserState(recipients, isSecureText);
supportInvalidateOptionsMenu();
break;
case TAKE_PHOTO:
@@ -359,17 +367,57 @@ public void onActivityResult(final int reqCode, int resultCode, Intent data) {
fragment.reloadList();
break;
case PICK_LOCATION:
- SignalPlace place = new SignalPlace(PlacePicker.getPlace(data, this));
- attachmentManager.setLocation(masterSecret, place, getCurrentMediaConstraints());
+ //SignalPlace place = new SignalPlace(PlacePicker.getPlace(data, this)); //fts i dont want places
+ //attachmentManager.setLocation(masterSecret, place, getCurrentMediaConstraints());
+ break;
+ case PICK_GIF:
+ setMedia(data.getData(), MediaType.GIF);
+ break;
+ case ScribbleActivity.SCRIBBLE_REQUEST_CODE:
+ setMedia(data.getData(), MediaType.IMAGE);
break;
}
}
+ @Override
+ public void startActivity(Intent intent) {
+ if (intent.getStringExtra(Browser.EXTRA_APPLICATION_ID) != null) {
+ intent.removeExtra(Browser.EXTRA_APPLICATION_ID);
+ }
+
+ try {
+ super.startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ Log.w(TAG, e);
+ Toast.makeText(this, R.string.ConversationActivity_there_is_no_app_available_to_handle_this_link_on_your_device, Toast.LENGTH_LONG).show();
+ }
+ }
+
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = this.getMenuInflater();
menu.clear();
+ if (isSecureText) {
+ if (recipients.getExpireMessages() > 0) {
+ inflater.inflate(R.menu.conversation_expiring_on, menu);
+
+ final MenuItem item = menu.findItem(R.id.menu_expiring_messages);
+ final View actionView = MenuItemCompat.getActionView(item);
+ final TextView badgeView = (TextView)actionView.findViewById(R.id.expiration_badge);
+
+ badgeView.setText(ExpirationUtil.getExpirationAbbreviatedDisplayValue(this, recipients.getExpireMessages()));
+ actionView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onOptionsItemSelected(item);
+ }
+ });
+ } else {
+ inflater.inflate(R.menu.conversation_expiring_off, menu);
+ }
+ }
+
if (isSingleConversation()) {
if (isSecureVoice) inflater.inflate(R.menu.conversation_callable_secure, menu);
else inflater.inflate(R.menu.conversation_callable_insecure, menu);
@@ -426,6 +474,8 @@ public boolean onOptionsItemSelected(MenuItem item) {
case R.id.menu_mute_notifications: handleMuteNotifications(); return true;
case R.id.menu_unmute_notifications: handleUnmuteNotifications(); return true;
case R.id.menu_conversation_settings: handleConversationSettings(); return true;
+ case R.id.menu_expiring_messages_off:
+ case R.id.menu_expiring_messages: handleSelectMessageExpiration(); return true;
case android.R.id.home: handleReturnToConversationList(); return true;
}
@@ -453,6 +503,28 @@ private void handleReturnToConversationList() {
finish();
}
+ private void handleSelectMessageExpiration() {
+ ExpirationDialog.show(this, recipients.getExpireMessages(), new ExpirationDialog.OnClickListener() {
+ @Override
+ public void onClick(final int expirationTime) {
+ new AsyncTask() {
+ @Override
+ protected Void doInBackground(Void... params) {
+ DatabaseFactory.getRecipientPreferenceDatabase(ConversationActivity.this)
+ .setExpireMessages(recipients, expirationTime);
+ recipients.setExpireMessages(expirationTime);
+
+ OutgoingExpirationUpdateMessage outgoingMessage = new OutgoingExpirationUpdateMessage(getRecipients(), System.currentTimeMillis(), expirationTime * 1000);
+ MessageSender.send(ConversationActivity.this, masterSecret, outgoingMessage, threadId, false);
+
+ invalidateOptionsMenu();
+ return null;
+ }
+ }.execute();
+ }
+ });
+ }
+
private void handleMuteNotifications() {
MuteDialog.show(this, new MuteDialog.MuteSelectionListener() {
@Override
@@ -492,8 +564,8 @@ protected Void doInBackground(Void... params) {
private void handleUnblock() {
new AlertDialog.Builder(this)
- .setTitle(R.string.ConversationActivity_unblock_question)
- .setMessage(R.string.ConversationActivity_are_you_sure_you_want_to_unblock_this_contact)
+ .setTitle(R.string.ConversationActivity_unblock_this_contact_question)
+ .setMessage(R.string.ConversationActivity_you_will_once_again_be_able_to_receive_messages_and_calls_from_this_contact)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(R.string.ConversationActivity_unblock, new DialogInterface.OnClickListener() {
@Override
@@ -505,6 +577,11 @@ public void onClick(DialogInterface dialog, int which) {
protected Void doInBackground(Void... params) {
DatabaseFactory.getRecipientPreferenceDatabase(ConversationActivity.this)
.setBlocked(recipients, false);
+
+ ApplicationContext.getInstance(ConversationActivity.this)
+ .getJobManager()
+ .add(new MultiDeviceBlockedUpdateJob(ConversationActivity.this));
+
return null;
}
}.execute();
@@ -512,11 +589,18 @@ protected Void doInBackground(Void... params) {
}).show();
}
+ @TargetApi(Build.VERSION_CODES.KITKAT)
+ private void handleMakeDefaultSms() {
+ Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
+ intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName());
+ startActivity(intent);
+ }
+
private void handleInviteLink() {
try {
boolean a = SecureRandom.getInstance("SHA1PRNG").nextBoolean();
- if (a) composeText.appendInvite(getString(R.string.ConversationActivity_lets_switch_to_signal, "http://sgnl.link/1LoIMUl"));
- else composeText.appendInvite(getString(R.string.ConversationActivity_lets_use_this_to_chat, "http://sgnl.link/1MF56H1"));
+ if (a) composeText.appendInvite(getString(R.string.ConversationActivity_lets_switch_to_signal, "https://sgnl.link/1LoIMUl"));
+ else composeText.appendInvite(getString(R.string.ConversationActivity_lets_use_this_to_chat, "https://sgnl.link/1MF56H1"));
} catch (NoSuchAlgorithmException e) {
throw new AssertionError(e);
}
@@ -535,7 +619,7 @@ public void onClick(DialogInterface dialog, int which) {
final Context context = getApplicationContext();
OutgoingEndSessionMessage endSessionMessage =
- new OutgoingEndSessionMessage(new OutgoingTextMessage(getRecipients(), "TERMINATE", -1));
+ new OutgoingEndSessionMessage(new OutgoingTextMessage(getRecipients(), "TERMINATE", 0, -1));
new AsyncTask() {
@Override
@@ -587,7 +671,7 @@ public void onClick(DialogInterface dialog, int which) {
.setType(GroupContext.Type.QUIT)
.build();
- OutgoingGroupMediaMessage outgoingMessage = new OutgoingGroupMediaMessage(getRecipients(), context, null, System.currentTimeMillis());
+ OutgoingGroupMediaMessage outgoingMessage = new OutgoingGroupMediaMessage(getRecipients(), context, null, System.currentTimeMillis(), 0);
MessageSender.send(self, masterSecret, outgoingMessage, threadId, false);
DatabaseFactory.getGroupDatabase(self).remove(groupId, TextSecurePreferences.getLocalNumber(self));
initializeEnabledCheck();
@@ -713,6 +797,7 @@ private void handleSecurityChange(boolean isSecureText, boolean isSecureVoice) {
calculateCharactersRemaining();
supportInvalidateOptionsMenu();
+ setBlockedUserState(recipients, isSecureText);
}
///// Initializers
@@ -755,20 +840,14 @@ protected List doInBackground(Void... params) {
@Override
protected void onPostExecute(List drafts) {
for (Draft draft : drafts) {
- try {
- if (draft.getType().equals(Draft.TEXT)) {
- composeText.setText(draft.getValue());
- } else if (draft.getType().equals(Draft.LOCATION)) {
- attachmentManager.setLocation(masterSecret, SignalPlace.deserialize(draft.getValue()), getCurrentMediaConstraints());
- } else if (draft.getType().equals(Draft.IMAGE)) {
- setMedia(Uri.parse(draft.getValue()), MediaType.IMAGE);
- } else if (draft.getType().equals(Draft.AUDIO)) {
- setMedia(Uri.parse(draft.getValue()), MediaType.AUDIO);
- } else if (draft.getType().equals(Draft.VIDEO)) {
- setMedia(Uri.parse(draft.getValue()), MediaType.VIDEO);
- }
- } catch (IOException e) {
- Log.w(TAG, e);
+ if (draft.getType().equals(Draft.TEXT)) {
+ composeText.setText(draft.getValue());
+ } else if (draft.getType().equals(Draft.IMAGE)) {
+ setMedia(Uri.parse(draft.getValue()), MediaType.IMAGE);
+ } else if (draft.getType().equals(Draft.AUDIO)) {
+ setMedia(Uri.parse(draft.getValue()), MediaType.AUDIO);
+ } else if (draft.getType().equals(Draft.VIDEO)) {
+ setMedia(Uri.parse(draft.getValue()), MediaType.VIDEO);
}
}
@@ -827,11 +906,7 @@ private void onSecurityUpdated() {
}
private void updateRecipientPreferences() {
- if (recipients.getPrimaryRecipient() != null &&
- recipients.getPrimaryRecipient().getContactUri() != null)
- {
- new RecipientPreferencesTask().execute(recipients);
- }
+ new RecipientPreferencesTask().execute(recipients);
}
protected void updateInviteReminder(boolean seenInvite) {
@@ -839,7 +914,9 @@ protected void updateInviteReminder(boolean seenInvite) {
if (TextSecurePreferences.isPushRegistered(this) &&
!isSecureText &&
!seenInvite &&
- recipients.isSingleRecipient())
+ recipients.isSingleRecipient() &&
+ recipients.getPrimaryRecipient() != null &&
+ recipients.getPrimaryRecipient().getContactUri() != null)
{
InviteReminder reminder = new InviteReminder(this, recipients);
reminder.setOkListener(new OnClickListener() {
@@ -883,6 +960,7 @@ private void initializeViews() {
charactersLeft = ViewUtil.findById(this, R.id.space_left);
emojiDrawer = ViewUtil.findById(this, R.id.emoji_drawer);
unblockButton = ViewUtil.findById(this, R.id.unblock_button);
+ makeDefaultSmsButton = ViewUtil.findById(this, R.id.make_default_sms_button);
composePanel = ViewUtil.findById(this, R.id.bottom_panel);
container = ViewUtil.findById(this, R.id.layout_container);
reminderView = ViewUtil.findById(this, R.id.reminder);
@@ -902,7 +980,7 @@ private void initializeViews() {
composeBubble.getBackground().setColorFilter(defaultColor, PorterDuff.Mode.MULTIPLY);
colors.recycle();
- attachmentTypeSelector = new AttachmentTypeSelector(this, new AttachmentTypeListener());
+ attachmentTypeSelector = new AttachmentTypeSelector(this, getSupportLoaderManager(), new AttachmentTypeListener());
attachmentManager = new AttachmentManager(this, this);
audioRecorder = new AudioRecorder(this, masterSecret);
@@ -943,6 +1021,13 @@ public void onClick(View v) {
}
});
+ makeDefaultSmsButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ handleMakeDefaultSms();
+ }
+ });
+
composeText.setOnKeyListener(composeKeyPressedListener);
composeText.addTextChangedListener(composeKeyPressedListener);
composeText.setOnEditorActionListener(sendButtonListener);
@@ -967,7 +1052,7 @@ protected void initializeActionBar() {
private void initializeResources() {
if (recipients != null) recipients.removeListener(this);
-
+
recipients = RecipientFactory.getRecipientsForIds(this, getIntent().getLongArrayExtra(RECIPIENTS_EXTRA), true);
threadId = getIntent().getLongExtra(THREAD_ID_EXTRA, -1);
archived = getIntent().getBooleanExtra(IS_ARCHIVED_EXTRA, false);
@@ -988,8 +1073,9 @@ public void onModified(final Recipients recipients) {
@Override
public void run() {
titleView.setTitle(recipients);
- setBlockedUserState(recipients);
+ setBlockedUserState(recipients, isSecureText);
setActionBarColor(recipients.getColor());
+ invalidateOptionsMenu();
updateRecipientPreferences();
}
});
@@ -1004,26 +1090,30 @@ public void onReceive(Context context, Intent intent) {
}
};
- groupUpdateReceiver = new BroadcastReceiver() {
+ recipientsStaleReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- Log.w("ConversationActivity", "Group update received...");
+ Log.w(TAG, "Group update received...");
if (recipients != null) {
long[] ids = recipients.getIds();
- Log.w("ConversationActivity", "Looking up new recipients...");
+ Log.w(TAG, "Looking up new recipients...");
recipients = RecipientFactory.getRecipientsForIds(context, ids, true);
recipients.addListener(ConversationActivity.this);
- titleView.setTitle(recipients);
+ onModified(recipients);
+ fragment.reloadList();
}
}
};
+ IntentFilter staleFilter = new IntentFilter();
+ staleFilter.addAction(GroupDatabase.DATABASE_UPDATE_ACTION);
+ staleFilter.addAction(RecipientFactory.RECIPIENT_CLEAR_ACTION);
+
registerReceiver(securityUpdateReceiver,
new IntentFilter(SecurityEvent.SECURITY_UPDATE_EVENT),
KeyCachingService.KEY_PERMISSION, null);
- registerReceiver(groupUpdateReceiver,
- new IntentFilter(GroupDatabase.DATABASE_UPDATE_ACTION));
+ registerReceiver(recipientsStaleReceiver, staleFilter);
}
//////// Helper Methods
@@ -1039,14 +1129,15 @@ private void addAttachment(int type) {
AttachmentManager.selectAudio(this, PICK_AUDIO); break;
case AttachmentTypeSelectorAdapter.ADD_CONTACT_INFO:
AttachmentManager.selectContactInfo(this, PICK_CONTACT_INFO); break;
- case AttachmentTypeSelector.ADD_LOCATION:
- AttachmentManager.selectLocation(this, PICK_LOCATION); break;
case AttachmentTypeSelectorAdapter.TAKE_PHOTO:
attachmentManager.capturePhoto(this, TAKE_PHOTO); break;
+ case AttachmentTypeSelector.ADD_GIF:
+ AttachmentManager.selectGif(this, PICK_GIF, !isSecureText); break;
}
}
private void setMedia(Uri uri, MediaType mediaType) {
+ if (uri == null) return;
attachmentManager.setMedia(masterSecret, uri, mediaType, getCurrentMediaConstraints());
}
@@ -1088,10 +1179,10 @@ private Drafts getDraftsForCurrentState() {
}
for (Slide slide : attachmentManager.buildSlideDeck().getSlides()) {
- if (slide.hasAudio()) drafts.add(new Draft(Draft.AUDIO, slide.getUri().toString()));
- else if (slide.hasVideo()) drafts.add(new Draft(Draft.VIDEO, slide.getUri().toString()));
- else if (slide.hasLocation()) drafts.add(new Draft(Draft.LOCATION, ((LocationSlide)slide).getPlace().serialize()));
- else if (slide.hasImage()) drafts.add(new Draft(Draft.IMAGE, slide.getUri().toString()));
+
+ if (slide.hasAudio() && slide.getUri() != null) drafts.add(new Draft(Draft.AUDIO, slide.getUri().toString()));
+ else if (slide.hasVideo() && slide.getUri() != null) drafts.add(new Draft(Draft.VIDEO, slide.getUri().toString()));
+ else if (slide.hasImage() && slide.getUri() != null) drafts.add(new Draft(Draft.IMAGE, slide.getUri().toString()));
}
return drafts;
@@ -1146,20 +1237,26 @@ private void setActionBarColor(MaterialColor color) {
setStatusBarColor(color.toStatusBarColor(this));
}
- private void setBlockedUserState(Recipients recipients) {
+ private void setBlockedUserState(Recipients recipients, boolean isSecureText) {
if (recipients.isBlocked()) {
unblockButton.setVisibility(View.VISIBLE);
composePanel.setVisibility(View.GONE);
+ makeDefaultSmsButton.setVisibility(View.GONE);
+ } else if (!isSecureText && !Util.isDefaultSmsProvider(this)) {
+ unblockButton.setVisibility(View.GONE);
+ composePanel.setVisibility(View.GONE);
+ makeDefaultSmsButton.setVisibility(View.VISIBLE);
} else {
composePanel.setVisibility(View.VISIBLE);
unblockButton.setVisibility(View.GONE);
+ makeDefaultSmsButton.setVisibility(View.GONE);
}
}
private void calculateCharactersRemaining() {
- int charactersSpent = composeText.getText().toString().length();
+ String messageBody = composeText.getText().toString();
TransportOption transportOption = sendButton.getSelectedTransport();
- CharacterState characterState = transportOption.calculateCharacters(charactersSpent);
+ CharacterState characterState = transportOption.calculateCharacters(messageBody);
if (characterState.charactersRemaining <= 15 || characterState.messagesSpent > 1) {
charactersLeft.setText(characterState.charactersRemaining + "/" + characterState.maxMessageSize
@@ -1232,8 +1329,12 @@ private void markThreadAsRead() {
new AsyncTask() {
@Override
protected Void doInBackground(Long... params) {
- DatabaseFactory.getThreadDatabase(ConversationActivity.this).setRead(params[0]);
- MessageNotifier.updateNotification(ConversationActivity.this, masterSecret);
+ Context context = ConversationActivity.this;
+ List messageIds = DatabaseFactory.getThreadDatabase(context).setRead(params[0]);
+
+ MessageNotifier.updateNotification(context, masterSecret);
+ MarkReadReceiver.process(context, messageIds);
+
return null;
}
}.execute(threadId);
@@ -1258,23 +1359,25 @@ protected void sendComplete(long threadId) {
private void sendMessage() {
try {
- Recipients recipients = getRecipients();
+ Recipients recipients = getRecipients();
+
+ if (recipients == null) {
+ throw new RecipientFormattingException("Badly formatted");
+ }
+
boolean forceSms = sendButton.isManualSelection() && sendButton.getSelectedTransport().isSms();
int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().or(-1);
+ long expiresIn = recipients.getExpireMessages() * 1000;
Log.w(TAG, "isManual Selection: " + sendButton.isManualSelection());
Log.w(TAG, "forceSms: " + forceSms);
- if (recipients == null) {
- throw new RecipientFormattingException("Badly formatted");
- }
-
if ((!recipients.isSingleRecipient() || recipients.isEmailRecipient()) && !isMmsEnabled) {
handleManualMmsRequired();
} else if (attachmentManager.isAttachmentPresent() || !recipients.isSingleRecipient() || recipients.isGroupRecipient() || recipients.isEmailRecipient()) {
- sendMediaMessage(forceSms, subscriptionId);
+ sendMediaMessage(forceSms, expiresIn, subscriptionId);
} else {
- sendTextMessage(forceSms, subscriptionId);
+ sendTextMessage(forceSms, expiresIn, subscriptionId);
}
} catch (RecipientFormattingException ex) {
Toast.makeText(ConversationActivity.this,
@@ -1288,13 +1391,13 @@ private void sendMessage() {
}
}
- private void sendMediaMessage(final boolean forceSms, final int subscriptionId)
+ private void sendMediaMessage(final boolean forceSms, final long expiresIn, final int subscriptionId)
throws InvalidMessageException
{
- sendMediaMessage(forceSms, getMessage(), attachmentManager.buildSlideDeck(), subscriptionId);
+ sendMediaMessage(forceSms, getMessage(), attachmentManager.buildSlideDeck(), expiresIn, subscriptionId);
}
- private ListenableFuture sendMediaMessage(final boolean forceSms, String body, SlideDeck slideDeck, final int subscriptionId)
+ private ListenableFuture sendMediaMessage(final boolean forceSms, String body, SlideDeck slideDeck, final long expiresIn, final int subscriptionId)
throws InvalidMessageException
{
final SettableFuture future = new SettableFuture<>();
@@ -1304,6 +1407,7 @@ private ListenableFuture sendMediaMessage(final boolean forceSms, String b
body,
System.currentTimeMillis(),
subscriptionId,
+ expiresIn,
distributionType);
if (isSecureText && !forceSms) {
@@ -1329,16 +1433,16 @@ protected void onPostExecute(Long result) {
return future;
}
- private void sendTextMessage(final boolean forceSms, final int subscriptionId)
+ private void sendTextMessage(final boolean forceSms, final long expiresIn, final int subscriptionId)
throws InvalidMessageException
{
final Context context = getApplicationContext();
OutgoingTextMessage message;
if (isSecureText && !forceSms) {
- message = new OutgoingEncryptedMessage(recipients, getMessage());
+ message = new OutgoingEncryptedMessage(recipients, getMessage(), expiresIn);
} else {
- message = new OutgoingTextMessage(recipients, getMessage(), subscriptionId);
+ message = new OutgoingTextMessage(recipients, getMessage(), expiresIn, subscriptionId);
}
this.composeText.setText("");
@@ -1392,7 +1496,9 @@ public void onAttachmentDrawerStateChanged(DrawerState drawerState) {
@Override
public void onImageCapture(@NonNull final byte[] imageBytes) {
- setMedia(PersistentBlobProvider.getInstance(this).create(masterSecret, imageBytes), MediaType.IMAGE);
+ setMedia(PersistentBlobProvider.getInstance(this)
+ .create(masterSecret, imageBytes, ContentType.IMAGE_JPEG),
+ MediaType.IMAGE);
quickAttachmentDrawer.hide(false);
}
@@ -1429,11 +1535,12 @@ public void onSuccess(final @NonNull Pair result) {
try {
boolean forceSms = sendButton.isManualSelection() && sendButton.getSelectedTransport().isSms();
int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().or(-1);
+ long expiresIn = recipients.getExpireMessages() * 1000;
AudioSlide audioSlide = new AudioSlide(ConversationActivity.this, result.first, result.second, ContentType.AUDIO_AAC);
SlideDeck slideDeck = new SlideDeck();
slideDeck.addSlide(audioSlide);
- sendMediaMessage(forceSms, "", slideDeck, subscriptionId).addListener(new AssertedSuccessListener() {
+ sendMediaMessage(forceSms, "", slideDeck, expiresIn, subscriptionId).addListener(new AssertedSuccessListener() {
@Override
public void onSuccess(Void nothing) {
new AsyncTask() {
@@ -1494,6 +1601,14 @@ private class AttachmentTypeListener implements AttachmentTypeSelector.Attachmen
public void onClick(int type) {
addAttachment(type);
}
+
+ @Override
+ public void onQuickAttachment(Uri uri) {
+ Intent intent = new Intent();
+ intent.setData(uri);
+
+ onActivityResult(PICK_IMAGE, RESULT_OK, intent);
+ }
}
private class QuickCameraToggleListener implements OnClickListener {
diff --git a/src/org/thoughtcrime/securesms/ConversationAdapter.java b/src/org/thoughtcrime/securesms/ConversationAdapter.java
index 3befd8afc20..523e03b8830 100644
--- a/src/org/thoughtcrime/securesms/ConversationAdapter.java
+++ b/src/org/thoughtcrime/securesms/ConversationAdapter.java
@@ -21,8 +21,8 @@
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
import android.support.v7.widget.RecyclerView;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -39,6 +39,7 @@
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.LRUCache;
+import org.thoughtcrime.securesms.util.ViewUtil;
import java.lang.ref.SoftReference;
import java.security.MessageDigest;
@@ -49,9 +50,6 @@
import java.util.Map;
import java.util.Set;
-import org.thoughtcrime.securesms.util.ViewUtil;
-import org.thoughtcrime.securesms.util.VisibleForTesting;
-
/**
* A cursor adapter for a conversation thread. Ultimately
* used by ComposeMessageActivity to display a conversation
@@ -94,8 +92,8 @@ public V getView() {
}
public interface ItemClickListener {
- void onItemClick(ConversationItem item);
- void onItemLongClick(ConversationItem item);
+ void onItemClick(MessageRecord item);
+ void onItemLongClick(MessageRecord item);
}
@SuppressWarnings("ConstantConditions")
@@ -156,21 +154,23 @@ public void onBindItemViewHolder(ViewHolder viewHolder, @NonNull Cursor cursor)
@Override
public ViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
final V itemView = ViewUtil.inflate(inflater, parent, getLayoutForViewType(viewType));
- if (viewType == MESSAGE_TYPE_INCOMING || viewType == MESSAGE_TYPE_OUTGOING) {
- itemView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- if (clickListener != null) clickListener.onItemClick((ConversationItem)itemView);
+ itemView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (clickListener != null) {
+ clickListener.onItemClick(itemView.getMessageRecord());
}
- });
- itemView.setOnLongClickListener(new OnLongClickListener() {
- @Override
- public boolean onLongClick(View view) {
- if (clickListener != null) clickListener.onItemLongClick((ConversationItem)itemView);
- return true;
+ }
+ });
+ itemView.setOnLongClickListener(new OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View view) {
+ if (clickListener != null) {
+ clickListener.onItemLongClick(itemView.getMessageRecord());
}
- });
- }
+ return true;
+ }
+ });
return new ViewHolder(itemView);
}
@@ -195,7 +195,9 @@ public int getItemViewType(@NonNull Cursor cursor) {
String type = cursor.getString(cursor.getColumnIndexOrThrow(MmsSmsDatabase.TRANSPORT));
MessageRecord messageRecord = getMessageRecord(id, cursor, type);
- if (messageRecord.isGroupAction() || messageRecord.isCallLog() || messageRecord.isJoined()) {
+ if (messageRecord.isGroupAction() || messageRecord.isCallLog() || messageRecord.isJoined() ||
+ messageRecord.isExpirationTimerUpdate() || messageRecord.isEndSession() || messageRecord.isIdentityUpdate())
+ {
return MESSAGE_TYPE_UPDATE;
} else if (messageRecord.isOutgoing()) {
return MESSAGE_TYPE_OUTGOING;
diff --git a/src/org/thoughtcrime/securesms/ConversationFragment.java b/src/org/thoughtcrime/securesms/ConversationFragment.java
index 7811cfac23c..8454319a299 100644
--- a/src/org/thoughtcrime/securesms/ConversationFragment.java
+++ b/src/org/thoughtcrime/securesms/ConversationFragment.java
@@ -27,12 +27,13 @@
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
-import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener;
+import android.support.v7.widget.RecyclerView.OnScrollListener;
import android.text.ClipboardManager;
import android.text.TextUtils;
import android.util.Log;
@@ -57,10 +58,10 @@
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.sms.MessageSender;
-import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask;
import org.thoughtcrime.securesms.util.SaveAttachmentTask;
import org.thoughtcrime.securesms.util.SaveAttachmentTask.Attachment;
import org.thoughtcrime.securesms.util.ViewUtil;
+import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask;
import java.util.Collections;
import java.util.Comparator;
@@ -78,6 +79,7 @@ public class ConversationFragment extends Fragment
private final ActionModeCallback actionModeCallback = new ActionModeCallback();
private final ItemClickListener selectionClickListener = new ConversationFragmentItemClickListener();
+ private final OnScrollListener scrollListener = new ConversationScrollListener();
private ConversationFragmentListener listener;
@@ -88,6 +90,7 @@ public class ConversationFragment extends Fragment
private Locale locale;
private RecyclerView list;
private View loadMoreView;
+ private View composeDivider;
@Override
public void onCreate(Bundle icicle) {
@@ -99,10 +102,13 @@ public void onCreate(Bundle icicle) {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
final View view = inflater.inflate(R.layout.conversation_fragment, container, false);
- list = ViewUtil.findById(view, android.R.id.list);
+ list = ViewUtil.findById(view, android.R.id.list);
+ composeDivider = ViewUtil.findById(view, R.id.compose_divider);
+
final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, true);
list.setHasFixedSize(false);
list.setLayoutManager(layoutManager);
+ list.addOnScrollListener(scrollListener);
loadMoreView = inflater.inflate(R.layout.load_more_header, container, false);
loadMoreView.setOnClickListener(new OnClickListener() {
@@ -165,35 +171,47 @@ private void initializeListAdapter() {
if (this.recipients != null && this.threadId != -1) {
list.setAdapter(new ConversationAdapter(getActivity(), masterSecret, locale, selectionClickListener, null, this.recipients));
getLoaderManager().restartLoader(0, Bundle.EMPTY, this);
- list.getItemAnimator().setSupportsChangeAnimations(false);
list.getItemAnimator().setMoveDuration(120);
}
}
private void setCorrectMenuVisibility(Menu menu) {
Set messageRecords = getListAdapter().getSelectedItems();
+ boolean actionMessage = false;
if (actionMode != null && messageRecords.size() == 0) {
actionMode.finish();
return;
}
+ for (MessageRecord messageRecord : messageRecords) {
+ if (messageRecord.isGroupAction() || messageRecord.isCallLog() ||
+ messageRecord.isJoined() || messageRecord.isExpirationTimerUpdate() ||
+ messageRecord.isEndSession() || messageRecord.isIdentityUpdate())
+ {
+ actionMessage = true;
+ break;
+ }
+ }
+
if (messageRecords.size() > 1) {
menu.findItem(R.id.menu_context_forward).setVisible(false);
menu.findItem(R.id.menu_context_details).setVisible(false);
menu.findItem(R.id.menu_context_save_attachment).setVisible(false);
menu.findItem(R.id.menu_context_resend).setVisible(false);
+ menu.findItem(R.id.menu_context_copy).setVisible(!actionMessage);
} else {
MessageRecord messageRecord = messageRecords.iterator().next();
menu.findItem(R.id.menu_context_resend).setVisible(messageRecord.isFailed());
- menu.findItem(R.id.menu_context_save_attachment).setVisible(messageRecord.isMms() &&
+ menu.findItem(R.id.menu_context_save_attachment).setVisible(!actionMessage &&
+ messageRecord.isMms() &&
!messageRecord.isMmsNotification() &&
((MediaMmsMessageRecord)messageRecord).containsMediaSlide());
- menu.findItem(R.id.menu_context_forward).setVisible(true);
- menu.findItem(R.id.menu_context_details).setVisible(true);
- menu.findItem(R.id.menu_context_copy).setVisible(true);
+ menu.findItem(R.id.menu_context_forward).setVisible(!actionMessage);
+ menu.findItem(R.id.menu_context_details).setVisible(!actionMessage);
+ menu.findItem(R.id.menu_context_copy).setVisible(!actionMessage);
}
}
@@ -340,7 +358,7 @@ private void handleSaveAttachment(final MediaMmsMessageRecord message) {
SaveAttachmentTask.showWarningDialog(getActivity(), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
for (Slide slide : message.getSlideDeck().getSlides()) {
- if (slide.hasImage() || slide.hasVideo() || slide.hasAudio()) {
+ if ((slide.hasImage() || slide.hasVideo() || slide.hasAudio()) && slide.getUri() != null) {
SaveAttachmentTask saveTask = new SaveAttachmentTask(getActivity(), masterSecret);
saveTask.execute(new Attachment(slide.getUri(), slide.getContentType(), message.getDateReceived()));
return;
@@ -383,12 +401,42 @@ public interface ConversationFragmentListener {
void setThreadId(long threadId);
}
+ private class ConversationScrollListener extends OnScrollListener {
+ private boolean wasAtBottom = true;
+
+ @Override
+ public void onScrolled(final RecyclerView rv, final int dx, final int dy) {
+ boolean currentlyAtBottom = isAtBottom();
+
+ if (wasAtBottom != currentlyAtBottom) {
+ composeDivider.setVisibility(currentlyAtBottom ? View.INVISIBLE : View.VISIBLE);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
+ composeDivider.animate().alpha(currentlyAtBottom ? 0 : 1);
+ } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
+ composeDivider.setAlpha(currentlyAtBottom ? 0 : 1);
+ }
+
+ wasAtBottom = currentlyAtBottom;
+ }
+ }
+
+ private boolean isAtBottom() {
+ if (list.getChildCount() == 0) return true;
+
+ View bottomView = list.getChildAt(0);
+ int firstVisibleItem = ((LinearLayoutManager) list.getLayoutManager()).findFirstVisibleItemPosition();
+ boolean isAtBottom = (firstVisibleItem == 0);
+
+ return isAtBottom && bottomView.getBottom() <= list.getHeight();
+ }
+ }
+
private class ConversationFragmentItemClickListener implements ItemClickListener {
@Override
- public void onItemClick(ConversationItem item) {
+ public void onItemClick(MessageRecord messageRecord) {
if (actionMode != null) {
- MessageRecord messageRecord = item.getMessageRecord();
((ConversationAdapter) list.getAdapter()).toggleSelection(messageRecord);
list.getAdapter().notifyDataSetChanged();
@@ -397,9 +445,9 @@ public void onItemClick(ConversationItem item) {
}
@Override
- public void onItemLongClick(ConversationItem item) {
+ public void onItemLongClick(MessageRecord messageRecord) {
if (actionMode == null) {
- ((ConversationAdapter) list.getAdapter()).toggleSelection(item.getMessageRecord());
+ ((ConversationAdapter) list.getAdapter()).toggleSelection(messageRecord);
list.getAdapter().notifyDataSetChanged();
actionMode = ((AppCompatActivity)getActivity()).startSupportActionMode(actionModeCallback);
diff --git a/src/org/thoughtcrime/securesms/ConversationItem.java b/src/org/thoughtcrime/securesms/ConversationItem.java
index c2bbfa9121e..ebf97f25469 100644
--- a/src/org/thoughtcrime/securesms/ConversationItem.java
+++ b/src/org/thoughtcrime/securesms/ConversationItem.java
@@ -23,6 +23,7 @@
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.PorterDuff;
+import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
@@ -38,10 +39,11 @@
import android.widget.TextView;
import android.widget.Toast;
+import org.thoughtcrime.securesms.components.AlertView;
import org.thoughtcrime.securesms.components.AudioView;
import org.thoughtcrime.securesms.components.AvatarImageView;
import org.thoughtcrime.securesms.components.DeliveryStatusView;
-import org.thoughtcrime.securesms.components.AlertView;
+import org.thoughtcrime.securesms.components.ExpirationTimerView;
import org.thoughtcrime.securesms.components.ThumbnailView;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.database.AttachmentDatabase;
@@ -61,13 +63,14 @@
import org.thoughtcrime.securesms.mms.SlideClickListener;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.Recipients;
+import org.thoughtcrime.securesms.service.ExpiringMessageManager;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.dualsim.SubscriptionInfoCompat;
import org.thoughtcrime.securesms.util.dualsim.SubscriptionManagerCompat;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.util.HashSet;
import java.util.List;
@@ -110,6 +113,7 @@ public class ConversationItem extends LinearLayout
private @NonNull AudioView audioView;
private @NonNull Button mmsDownloadButton;
private @NonNull TextView mmsDownloadingLabel;
+ private @NonNull ExpirationTimerView expirationTimer;
private int defaultBubbleColor;
@@ -151,6 +155,7 @@ protected void onFinishInflate() {
this.bodyBubble = findViewById(R.id.body_bubble);
this.mediaThumbnail = (ThumbnailView) findViewById(R.id.image_view);
this.audioView = (AudioView) findViewById(R.id.audio_view);
+ this.expirationTimer = (ExpirationTimerView) findViewById(R.id.expiration_indicator);
setOnClickListener(new ClickListener(null));
PassthroughClickListener passthroughClickListener = new PassthroughClickListener();
@@ -194,6 +199,7 @@ public void bind(@NonNull MasterSecret masterSecret,
setMinimumWidth();
setMediaAttributes(messageRecord);
setSimInfo(messageRecord);
+ setExpiration(messageRecord);
}
private void initializeAttributes() {
@@ -211,6 +217,8 @@ public void unbind() {
if (recipient != null) {
recipient.removeListener(this);
}
+
+ this.expirationTimer.stopAnimation();
}
public MessageRecord getMessageRecord() {
@@ -223,16 +231,24 @@ private void setBubbleState(MessageRecord messageRecord, Recipient recipient) {
if (messageRecord.isOutgoing()) {
bodyBubble.getBackground().setColorFilter(defaultBubbleColor, PorterDuff.Mode.MULTIPLY);
mediaThumbnail.setBackgroundColorHint(defaultBubbleColor);
+ } else {
+ int color = recipient.getColor().toConversationColor(context);
+ bodyBubble.getBackground().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
+ mediaThumbnail.setBackgroundColorHint(color);
+ }
+
+ setAudioViewTint(messageRecord, conversationRecipients);
+ }
+ private void setAudioViewTint(MessageRecord messageRecord, Recipients recipients) {
+ if (messageRecord.isOutgoing()) {
if (DynamicTheme.LIGHT.equals(TextSecurePreferences.getTheme(context))) {
- audioView.setTint(conversationRecipients.getColor().toConversationColor(context));
+ audioView.setTint(recipients.getColor().toConversationColor(context), defaultBubbleColor);
} else {
- audioView.setTint(Color.WHITE);
+ audioView.setTint(Color.WHITE, defaultBubbleColor);
}
} else {
- int color = recipient.getColor().toConversationColor(context);
- bodyBubble.getBackground().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
- mediaThumbnail.setBackgroundColorHint(color);
+ audioView.setTint(Color.WHITE, recipients.getColor().toConversationColor(context));
}
}
@@ -353,6 +369,36 @@ private void setSimInfo(MessageRecord messageRecord) {
}
}
+ private void setExpiration(final MessageRecord messageRecord) {
+ if (messageRecord.getExpiresIn() > 0) {
+ this.expirationTimer.setVisibility(View.VISIBLE);
+ this.expirationTimer.setPercentage(0);
+
+ if (messageRecord.getExpireStarted() > 0) {
+ this.expirationTimer.setExpirationTime(messageRecord.getExpireStarted(),
+ messageRecord.getExpiresIn());
+ this.expirationTimer.startAnimation();
+ } else if (!messageRecord.isOutgoing() && !messageRecord.isMediaPending()) {
+ new AsyncTask() {
+ @Override
+ protected Void doInBackground(Void... params) {
+ ExpiringMessageManager expirationManager = ApplicationContext.getInstance(context).getExpiringMessageManager();
+ long id = messageRecord.getId();
+ boolean mms = messageRecord.isMms();
+
+ if (mms) DatabaseFactory.getMmsDatabase(context).markExpireStarted(id);
+ else DatabaseFactory.getSmsDatabase(context).markExpireStarted(id);
+
+ expirationManager.scheduleDeletion(id, mms, messageRecord.getExpiresIn());
+ return null;
+ }
+ }.execute();
+ }
+ } else {
+ this.expirationTimer.setVisibility(View.GONE);
+ }
+ }
+
private void setFailedStatusIcons() {
alertView.setFailed();
deliveryStatusIndicator.setNone();
@@ -455,8 +501,13 @@ public void run() {
}
@Override
- public void onModified(Recipients recipient) {
- onModified(recipient.getPrimaryRecipient());
+ public void onModified(final Recipients recipients) {
+ Util.runOnMain(new Runnable() {
+ @Override
+ public void run() {
+ setAudioViewTint(messageRecord, recipients);
+ }
+ });
}
private class AttachmentDownloadClickListener implements SlideClickListener {
@@ -484,17 +535,17 @@ private void fireIntent(Slide slide) {
public void onClick(final View v, final Slide slide) {
if (shouldInterceptClicks(messageRecord) || !batchSelected.isEmpty()) {
performClick();
- } else if (MediaPreviewActivity.isContentTypeSupported(slide.getContentType()) &&
- slide.getThumbnailUri() != null)
- {
+ } else if (MediaPreviewActivity.isContentTypeSupported(slide.getContentType()) && slide.getUri() != null) {
Intent intent = new Intent(context, MediaPreviewActivity.class);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(slide.getUri(), slide.getContentType());
if (!messageRecord.isOutgoing()) intent.putExtra(MediaPreviewActivity.RECIPIENT_EXTRA, recipient.getRecipientId());
intent.putExtra(MediaPreviewActivity.DATE_EXTRA, messageRecord.getTimestamp());
+ intent.putExtra(MediaPreviewActivity.SIZE_EXTRA, slide.asAttachment().getSize());
+ intent.putExtra(MediaPreviewActivity.THREAD_ID_EXTRA, messageRecord.getThreadId());
context.startActivity(intent);
- } else {
+ } else if (slide.getUri() != null) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.ConversationItem_view_secure_media_question);
builder.setIconAttribute(R.attr.dialog_alert_icon);
diff --git a/src/org/thoughtcrime/securesms/ConversationListActivity.java b/src/org/thoughtcrime/securesms/ConversationListActivity.java
index cff90af5316..af4160562ca 100644
--- a/src/org/thoughtcrime/securesms/ConversationListActivity.java
+++ b/src/org/thoughtcrime/securesms/ConversationListActivity.java
@@ -16,6 +16,7 @@
*/
package org.thoughtcrime.securesms;
+import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.database.ContentObserver;
import android.net.Uri;
@@ -30,8 +31,10 @@
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.widget.Toast;
import org.thoughtcrime.securesms.components.RatingManager;
+import org.thoughtcrime.securesms.contacts.SetupCustomContactDirectoryMessage;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.notifications.MessageNotifier;
@@ -73,6 +76,8 @@ protected void onCreate(Bundle icicle, @NonNull MasterSecret masterSecret) {
DirectoryRefreshListener.schedule(this);
RatingManager.showRatingDialogIfNecessary(this);
+
+ SetupCustomContactDirectoryMessage.showIfNecessary(this);
}
@Override
@@ -212,7 +217,11 @@ private void handleInvite() {
}
private void handleHelp() {
- startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://support.whispersystems.org")));
+ try {
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://support.whispersystems.org")));
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(this, R.string.ConversationListActivity_there_is_no_browser_installed_on_your_device, Toast.LENGTH_LONG).show();
+ }
}
private void initializeContactUpdatesReceiver() {
@@ -221,7 +230,7 @@ private void initializeContactUpdatesReceiver() {
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.w(TAG, "Detected android contact data changed, refreshing cache");
- RecipientFactory.clearCache();
+ RecipientFactory.clearCache(ConversationListActivity.this);
ConversationListActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
diff --git a/src/org/thoughtcrime/securesms/ConversationListFragment.java b/src/org/thoughtcrime/securesms/ConversationListFragment.java
index 187c031b570..d39bb88a2ff 100644
--- a/src/org/thoughtcrime/securesms/ConversationListFragment.java
+++ b/src/org/thoughtcrime/securesms/ConversationListFragment.java
@@ -63,15 +63,21 @@
import org.thoughtcrime.securesms.components.reminder.SystemSmsImportReminder;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.database.DatabaseFactory;
+import org.thoughtcrime.securesms.database.MessagingDatabase;
+import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
+import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
import org.thoughtcrime.securesms.database.loaders.ConversationListLoader;
+import org.thoughtcrime.securesms.jobs.MultiDeviceReadUpdateJob;
+import org.thoughtcrime.securesms.notifications.MarkReadReceiver;
import org.thoughtcrime.securesms.notifications.MessageNotifier;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.task.SnackbarAsyncTask;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.util.HashSet;
+import java.util.List;
import java.util.Locale;
import java.util.Set;
@@ -468,8 +474,9 @@ protected void executeAction(@Nullable Long parameter) {
DatabaseFactory.getThreadDatabase(getActivity()).archiveConversation(threadId);
if (!read) {
- DatabaseFactory.getThreadDatabase(getActivity()).setRead(threadId);
+ List messageIds = DatabaseFactory.getThreadDatabase(getActivity()).setRead(threadId);
MessageNotifier.updateNotification(getActivity(), masterSecret);
+ MarkReadReceiver.process(getActivity(), messageIds);
}
}
diff --git a/src/org/thoughtcrime/securesms/ConversationUpdateItem.java b/src/org/thoughtcrime/securesms/ConversationUpdateItem.java
index de9e51ebf4e..a7232f3d084 100644
--- a/src/org/thoughtcrime/securesms/ConversationUpdateItem.java
+++ b/src/org/thoughtcrime/securesms/ConversationUpdateItem.java
@@ -2,29 +2,43 @@
import android.content.Context;
import android.content.Intent;
+import android.graphics.Color;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import org.thoughtcrime.securesms.crypto.IdentityKeyParcelable;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.GroupUtil;
+import org.thoughtcrime.securesms.util.IdentityUtil;
import org.thoughtcrime.securesms.util.Util;
+import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
+import org.whispersystems.libsignal.IdentityKey;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.util.Locale;
import java.util.Set;
+import java.util.concurrent.ExecutionException;
public class ConversationUpdateItem extends LinearLayout
- implements Recipients.RecipientsModifiedListener, Recipient.RecipientModifiedListener, BindableConversationItem, View.OnClickListener
+ implements Recipients.RecipientsModifiedListener, Recipient.RecipientModifiedListener, BindableConversationItem
{
private static final String TAG = ConversationUpdateItem.class.getSimpleName();
+ private MasterSecret masterSecret;
+ private Set batchSelected;
+
private ImageView icon;
private TextView body;
private TextView date;
@@ -48,7 +62,7 @@ public void onFinishInflate() {
this.body = (TextView)findViewById(R.id.conversation_update_body);
this.date = (TextView)findViewById(R.id.conversation_update_date);
- setOnClickListener(this);
+ this.setOnClickListener(new InternalClickListener(null));
}
@Override
@@ -58,9 +72,17 @@ public void bind(@NonNull MasterSecret masterSecret,
@NonNull Set batchSelected,
@NonNull Recipients conversationRecipients)
{
+ this.masterSecret = masterSecret;
+ this.batchSelected = batchSelected;
+
bind(messageRecord, locale);
}
+ @Override
+ public MessageRecord getMessageRecord() {
+ return messageRecord;
+ }
+
private void bind(@NonNull MessageRecord messageRecord, @NonNull Locale locale) {
this.messageRecord = messageRecord;
this.sender = messageRecord.getIndividualRecipient();
@@ -68,10 +90,16 @@ private void bind(@NonNull MessageRecord messageRecord, @NonNull Locale locale)
this.sender.addListener(this);
- if (messageRecord.isGroupAction()) setGroupRecord(messageRecord);
- else if (messageRecord.isCallLog()) setCallRecord(messageRecord);
- else if (messageRecord.isJoined()) setJoinedRecord(messageRecord);
- else throw new AssertionError("Neither group nor log nor joined.");
+ if (messageRecord.isGroupAction()) setGroupRecord(messageRecord);
+ else if (messageRecord.isCallLog()) setCallRecord(messageRecord);
+ else if (messageRecord.isJoined()) setJoinedRecord(messageRecord);
+ else if (messageRecord.isExpirationTimerUpdate()) setTimerRecord(messageRecord);
+ else if (messageRecord.isEndSession()) setEndSessionRecord(messageRecord);
+ else if (messageRecord.isIdentityUpdate()) setIdentityRecord(messageRecord);
+ else throw new AssertionError("Neither group nor log nor joined.");
+
+ if (batchSelected.contains(messageRecord)) setSelected(true);
+ else setSelected(false);
}
private void setCallRecord(MessageRecord messageRecord) {
@@ -84,8 +112,29 @@ private void setCallRecord(MessageRecord messageRecord) {
date.setVisibility(View.VISIBLE);
}
+ private void setTimerRecord(final MessageRecord messageRecord) {
+ if (messageRecord.getExpiresIn() > 0) {
+ icon.setImageResource(R.drawable.ic_timer_white_24dp);
+ icon.setColorFilter(new PorterDuffColorFilter(Color.parseColor("#757575"), PorterDuff.Mode.MULTIPLY));
+ } else {
+ icon.setImageResource(R.drawable.ic_timer_off_white_24dp);
+ icon.setColorFilter(new PorterDuffColorFilter(Color.parseColor("#757575"), PorterDuff.Mode.MULTIPLY));
+ }
+
+ body.setText(messageRecord.getDisplayBody());
+ date.setVisibility(View.GONE);
+ }
+
+ private void setIdentityRecord(final MessageRecord messageRecord) {
+ icon.setImageResource(R.drawable.ic_security_white_24dp);
+ icon.setColorFilter(new PorterDuffColorFilter(Color.parseColor("#757575"), PorterDuff.Mode.MULTIPLY));
+ body.setText(messageRecord.getDisplayBody());
+ date.setVisibility(View.GONE);
+ }
+
private void setGroupRecord(MessageRecord messageRecord) {
icon.setImageResource(R.drawable.ic_group_grey600_24dp);
+ icon.clearColorFilter();
GroupUtil.getDescription(getContext(), messageRecord.getBody().getBody()).addListener(this);
body.setText(messageRecord.getDisplayBody());
@@ -95,6 +144,14 @@ private void setGroupRecord(MessageRecord messageRecord) {
private void setJoinedRecord(MessageRecord messageRecord) {
icon.setImageResource(R.drawable.ic_favorite_grey600_24dp);
+ icon.clearColorFilter();
+ body.setText(messageRecord.getDisplayBody());
+ date.setVisibility(View.GONE);
+ }
+
+ private void setEndSessionRecord(MessageRecord messageRecord) {
+ icon.setImageResource(R.drawable.ic_refresh_white_24dp);
+ icon.setColorFilter(new PorterDuffColorFilter(Color.parseColor("#757575"), PorterDuff.Mode.MULTIPLY));
body.setText(messageRecord.getDisplayBody());
date.setVisibility(View.GONE);
}
@@ -115,14 +172,8 @@ public void run() {
}
@Override
- public void onClick(View v) {
- if (messageRecord.isIdentityUpdate()) {
- Intent intent = new Intent(getContext(), RecipientPreferenceActivity.class);
- intent.putExtra(RecipientPreferenceActivity.RECIPIENTS_EXTRA,
- new long[] {messageRecord.getIndividualRecipient().getRecipientId()});
-
- getContext().startActivity(intent);
- }
+ public void setOnClickListener(View.OnClickListener l) {
+ super.setOnClickListener(new InternalClickListener(l));
}
@Override
@@ -131,4 +182,42 @@ public void unbind() {
sender.removeListener(this);
}
}
+
+ private class InternalClickListener implements View.OnClickListener {
+
+ @Nullable private final View.OnClickListener parent;
+
+ public InternalClickListener(@Nullable View.OnClickListener parent) {
+ this.parent = parent;
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (!messageRecord.isIdentityUpdate() || !batchSelected.isEmpty()) {
+ if (parent != null) parent.onClick(v);
+ return;
+ }
+
+ final Recipient sender = ConversationUpdateItem.this.sender;
+
+ IdentityUtil.getRemoteIdentityKey(getContext(), masterSecret, sender).addListener(new ListenableFuture.Listener>() {
+ @Override
+ public void onSuccess(Optional result) {
+ if (result.isPresent()) {
+ Intent intent = new Intent(getContext(), VerifyIdentityActivity.class);
+ intent.putExtra(VerifyIdentityActivity.RECIPIENT_ID, sender.getRecipientId());
+ intent.putExtra(VerifyIdentityActivity.RECIPIENT_IDENTITY, new IdentityKeyParcelable(result.get()));
+
+ getContext().startActivity(intent);
+ }
+ }
+
+ @Override
+ public void onFailure(ExecutionException e) {
+ Log.w(TAG, e);
+ }
+ });
+ }
+ }
+
}
diff --git a/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java b/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java
index 9f4f30baf5f..f424f2f10c8 100644
--- a/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java
+++ b/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java
@@ -44,6 +44,7 @@
import org.thoughtcrime.securesms.jobs.PushDecryptJob;
import org.thoughtcrime.securesms.jobs.RefreshAttributesJob;
import org.thoughtcrime.securesms.notifications.MessageNotifier;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.VersionTracker;
@@ -68,6 +69,7 @@ public class DatabaseUpgradeActivity extends BaseActivity {
public static final int CONTACTS_ACCOUNT_VERSION = 136;
public static final int MEDIA_DOWNLOAD_CONTROLS_VERSION = 151;
public static final int REDPHONE_SUPPORT_VERSION = 157;
+// public static final int FINGERPRINTS_NON_BLOCKING_VESRION = 212;
private static final SortedSet UPGRADE_VERSIONS = new TreeSet() {{
add(NO_MORE_KEY_EXCHANGE_PREFIX_VERSION);
@@ -81,6 +83,7 @@ public class DatabaseUpgradeActivity extends BaseActivity {
add(MIGRATE_SESSION_PLAINTEXT);
add(MEDIA_DOWNLOAD_CONTROLS_VERSION);
add(REDPHONE_SUPPORT_VERSION);
+// add(FINGERPRINTS_NON_BLOCKING_VESRION);
}};
private MasterSecret masterSecret;
@@ -231,6 +234,10 @@ protected Void doInBackground(Integer... params) {
.add(new DirectoryRefreshJob(getApplicationContext()));
}
+// if (params[0] < FINGERPRINTS_NON_BLOCKING_VESRION) {
+// TextSecurePreferences.setBlockingIdentityUpdates(getApplicationContext(), true);
+// }
+
return null;
}
diff --git a/src/org/thoughtcrime/securesms/DeviceActivity.java b/src/org/thoughtcrime/securesms/DeviceActivity.java
index b9b10aa6a92..2cea6f5f3dd 100644
--- a/src/org/thoughtcrime/securesms/DeviceActivity.java
+++ b/src/org/thoughtcrime/securesms/DeviceActivity.java
@@ -16,25 +16,26 @@
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
import org.thoughtcrime.securesms.crypto.MasterSecret;
-import org.thoughtcrime.securesms.push.TextSecureCommunicationFactory;
+import org.thoughtcrime.securesms.push.AccountManagerFactory;
+import org.thoughtcrime.securesms.qr.ScanListener;
import org.thoughtcrime.securesms.util.Base64;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.libaxolotl.IdentityKeyPair;
-import org.whispersystems.libaxolotl.InvalidKeyException;
-import org.whispersystems.libaxolotl.ecc.Curve;
-import org.whispersystems.libaxolotl.ecc.ECPublicKey;
-import org.whispersystems.textsecure.api.TextSecureAccountManager;
-import org.whispersystems.textsecure.api.push.exceptions.NotFoundException;
-import org.whispersystems.textsecure.internal.push.DeviceLimitExceededException;
+import org.whispersystems.libsignal.IdentityKeyPair;
+import org.whispersystems.libsignal.InvalidKeyException;
+import org.whispersystems.libsignal.ecc.Curve;
+import org.whispersystems.libsignal.ecc.ECPublicKey;
+import org.whispersystems.signalservice.api.SignalServiceAccountManager;
+import org.whispersystems.signalservice.api.push.exceptions.NotFoundException;
+import org.whispersystems.signalservice.internal.push.DeviceLimitExceededException;
import java.io.IOException;
public class DeviceActivity extends PassphraseRequiredActionBarActivity
- implements Button.OnClickListener, DeviceAddFragment.ScanListener, DeviceLinkFragment.LinkClickedListener
+ implements Button.OnClickListener, ScanListener, DeviceLinkFragment.LinkClickedListener
{
private static final String TAG = DeviceActivity.class.getSimpleName();
@@ -55,7 +56,7 @@ public void onPreCreate() {
@Override
public void onCreate(Bundle bundle, @NonNull MasterSecret masterSecret) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getSupportActionBar().setTitle(R.string.AndroidManifest_manage_linked_devices);
+ getSupportActionBar().setTitle(R.string.AndroidManifest__linked_devices);
this.deviceAddFragment = new DeviceAddFragment();
this.deviceListFragment = new DeviceListFragment();
this.deviceLinkFragment = new DeviceLinkFragment();
@@ -95,11 +96,12 @@ public void onClick(View v) {
}
@Override
- public void onUrlFound(final Uri uri) {
+ public void onQrDataFound(final String data) {
Util.runOnMain(new Runnable() {
@Override
public void run() {
((Vibrator)getSystemService(Context.VIBRATOR_SERVICE)).vibrate(50);
+ Uri uri = Uri.parse(data);
deviceLinkFragment.setLinkClickedListener(uri, DeviceActivity.this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
@@ -143,11 +145,11 @@ public void onLink(final Uri uri) {
@Override
protected Integer doInBackground(Void... params) {
try {
- Context context = DeviceActivity.this;
- TextSecureAccountManager accountManager = TextSecureCommunicationFactory.createManager(context);
- String verificationCode = accountManager.getNewDeviceVerificationCode();
- String ephemeralId = uri.getQueryParameter("uuid");
- String publicKeyEncoded = uri.getQueryParameter("pub_key");
+ Context context = DeviceActivity.this;
+ SignalServiceAccountManager accountManager = AccountManagerFactory.createManager(context);
+ String verificationCode = accountManager.getNewDeviceVerificationCode();
+ String ephemeralId = uri.getQueryParameter("uuid");
+ String publicKeyEncoded = uri.getQueryParameter("pub_key");
if (TextUtils.isEmpty(ephemeralId) || TextUtils.isEmpty(publicKeyEncoded)) {
Log.w(TAG, "UUID or Key is empty!");
diff --git a/src/org/thoughtcrime/securesms/DeviceAddFragment.java b/src/org/thoughtcrime/securesms/DeviceAddFragment.java
index a4de3916b2e..14e7040b9a5 100644
--- a/src/org/thoughtcrime/securesms/DeviceAddFragment.java
+++ b/src/org/thoughtcrime/securesms/DeviceAddFragment.java
@@ -10,12 +10,15 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
+import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
+import android.widget.Button;
+import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -28,25 +31,26 @@
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;
+import org.thoughtcrime.securesms.components.ShapeScrim;
import org.thoughtcrime.securesms.components.camera.CameraView;
import org.thoughtcrime.securesms.components.camera.CameraView.PreviewCallback;
import org.thoughtcrime.securesms.components.camera.CameraView.PreviewFrame;
+import org.thoughtcrime.securesms.qr.ScanListener;
+import org.thoughtcrime.securesms.qr.ScanningThread;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
-public class DeviceAddFragment extends Fragment implements PreviewCallback {
-
- private static final String TAG = DeviceAddFragment.class.getSimpleName();
-
- private final QRCodeReader reader = new QRCodeReader();
+public class DeviceAddFragment extends Fragment {
private ViewGroup container;
private LinearLayout overlay;
private ImageView devicesImage;
private CameraView scannerView;
- private PreviewFrame previewFrame;
private ScanningThread scanningThread;
private ScanListener scanListener;
+ private EditText qrcodeEditText;
+ private Button qrcodeTextButton;
+ private ShapeScrim cameraFrame;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) {
@@ -54,8 +58,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle bu
this.overlay = ViewUtil.findById(this.container, R.id.overlay);
this.scannerView = ViewUtil.findById(this.container, R.id.scanner);
this.devicesImage = ViewUtil.findById(this.container, R.id.devices);
- this.scannerView.onResume();
- this.scannerView.setPreviewCallback(this);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
this.overlay.setOrientation(LinearLayout.HORIZONTAL);
@@ -80,17 +82,45 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom,
});
}
+ qrcodeTextButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ String url = qrcodeEditText.getText().toString();
+ if (TextUtils.isEmpty(url)) {
+ qrcodeEditText.setError("The QR Code Field should not be empty.");
+ }
+ //TODO check for correctly formed input here before spamming the server with garbage
+
+ Uri uri = Uri.parse(url);
+ scanListener.onQrDataFound(uri.toString());
+ }
+ });
+
+ qrcodeEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
+ @Override
+ public void onFocusChange(View v, boolean hasFocus) {
+ if(hasFocus){
+ scannerView.setVisibility(View.GONE);
+ cameraFrame.setVisibility(View.GONE);
+ scannerView.onPause();
+ scanningThread.stopScanning();
+ }
+ }
+ });
+
return this.container;
}
@Override
public void onResume() {
super.onResume();
- this.scannerView.onResume();
- this.scannerView.setPreviewCallback(this);
- this.previewFrame = null;
this.scanningThread = new ScanningThread();
+ this.scanningThread.setScanListener(scanListener);
+ this.scannerView.onResume();
+ this.scannerView.setPreviewCallback(scanningThread);
this.scanningThread.start();
+ scannerView.setVisibility(View.VISIBLE);
+ cameraFrame.setVisibility(View.VISIBLE);
}
@Override
@@ -113,24 +143,9 @@ public void onConfigurationChanged(Configuration newConfiguration) {
}
this.scannerView.onResume();
- this.scannerView.setPreviewCallback(this);
+ this.scannerView.setPreviewCallback(scanningThread);
}
- @Override
- public void onPreviewFrame(@NonNull PreviewFrame previewFrame) {
- Context context = getActivity();
-
- try {
- if (context != null) {
- synchronized (this) {
- this.previewFrame = previewFrame;
- this.notify();
- }
- }
- } catch (RuntimeException e) {
- Log.w(TAG, e);
- }
- }
public ImageView getDevicesImage() {
return devicesImage;
@@ -138,83 +153,11 @@ public ImageView getDevicesImage() {
public void setScanListener(ScanListener scanListener) {
this.scanListener = scanListener;
- }
-
- private class ScanningThread extends Thread {
-
- private boolean scanning = true;
-
- @Override
- public void run() {
- while (true) {
- PreviewFrame ourFrame;
-
- synchronized (DeviceAddFragment.this) {
- while (scanning && previewFrame == null) {
- Util.wait(DeviceAddFragment.this, 0);
- }
- if (!scanning) return;
- else ourFrame = previewFrame;
-
- previewFrame = null;
- }
-
- String url = getUrl(ourFrame.getData(), ourFrame.getWidth(), ourFrame.getHeight(), ourFrame.getOrientation());
-
- if (url != null && scanListener != null) {
- Uri uri = Uri.parse(url);
- scanListener.onUrlFound(uri);
- return;
- }
- }
- }
-
- public void stopScanning() {
- synchronized (DeviceAddFragment.this) {
- scanning = false;
- DeviceAddFragment.this.notify();
- }
- }
-
- private @Nullable String getUrl(byte[] data, int width, int height, int orientation) {
- try {
- if (orientation == Configuration.ORIENTATION_PORTRAIT) {
- byte[] rotatedData = new byte[data.length];
-
- for (int y = 0; y < height; y++) {
- for (int x = 0; x < width; x++) {
- rotatedData[x * height + height - y - 1] = data[x + y * width];
- }
- }
-
- int tmp = width;
- width = height;
- height = tmp;
- data = rotatedData;
- }
-
- PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(data, width, height,
- 0, 0, width, height,
- false);
-
- BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
-
- Result result = reader.decode(bitmap);
-
- if (result != null) return result.getText();
-
- } catch (NullPointerException | ChecksumException | FormatException e) {
- Log.w(TAG, e);
- } catch (NotFoundException e) {
- // Thanks ZXing...
- }
-
- return null;
+ if (this.scanningThread != null) {
+ this.scanningThread.setScanListener(scanListener);
}
}
- public interface ScanListener {
- public void onUrlFound(Uri uri);
- }
+
}
diff --git a/src/org/thoughtcrime/securesms/DeviceListFragment.java b/src/org/thoughtcrime/securesms/DeviceListFragment.java
index 5907f9ec1f9..c1230370664 100644
--- a/src/org/thoughtcrime/securesms/DeviceListFragment.java
+++ b/src/org/thoughtcrime/securesms/DeviceListFragment.java
@@ -25,8 +25,8 @@
import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.ViewUtil;
-import org.whispersystems.textsecure.api.TextSecureAccountManager;
-import org.whispersystems.textsecure.api.messages.multidevice.DeviceInfo;
+import org.whispersystems.signalservice.api.SignalServiceAccountManager;
+import org.whispersystems.signalservice.api.messages.multidevice.DeviceInfo;
import java.io.IOException;
import java.util.List;
@@ -42,7 +42,7 @@ public class DeviceListFragment extends ListFragment
private static final String TAG = DeviceListFragment.class.getSimpleName();
@Inject
- TextSecureAccountManager accountManager;
+ SignalServiceAccountManager accountManager;
private Locale locale;
private View empty;
@@ -77,7 +77,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bu
@Override
public void onActivityCreated(Bundle bundle) {
super.onActivityCreated(bundle);
- getLoaderManager().initLoader(0, null, this).forceLoad();
+ getLoaderManager().initLoader(0, null, this);
getListView().setOnItemClickListener(this);
}
@@ -142,10 +142,23 @@ private void handleLoaderFailed() {
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- getLoaderManager().getLoader(0).forceLoad();
- getLoaderManager().initLoader(0, null, DeviceListFragment.this);
+ getLoaderManager().restartLoader(0, null, DeviceListFragment.this);
+ }
+ });
+
+ builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ DeviceListFragment.this.getActivity().onBackPressed();
}
});
+ builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ DeviceListFragment.this.getActivity().onBackPressed();
+ }
+ });
+
builder.show();
}
diff --git a/src/org/thoughtcrime/securesms/DeviceListItem.java b/src/org/thoughtcrime/securesms/DeviceListItem.java
index bd6ba2b6e44..70bc5931793 100644
--- a/src/org/thoughtcrime/securesms/DeviceListItem.java
+++ b/src/org/thoughtcrime/securesms/DeviceListItem.java
@@ -7,7 +7,7 @@
import android.widget.TextView;
import org.thoughtcrime.securesms.util.DateUtils;
-import org.whispersystems.textsecure.api.messages.multidevice.DeviceInfo;
+import org.whispersystems.signalservice.api.messages.multidevice.DeviceInfo;
import java.util.Locale;
diff --git a/src/org/thoughtcrime/securesms/ExperienceUpgradeActivity.java b/src/org/thoughtcrime/securesms/ExperienceUpgradeActivity.java
index ffb9a88ecb8..caf9809fbc4 100644
--- a/src/org/thoughtcrime/securesms/ExperienceUpgradeActivity.java
+++ b/src/org/thoughtcrime/securesms/ExperienceUpgradeActivity.java
@@ -26,7 +26,7 @@
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.util.Collections;
import java.util.List;
diff --git a/src/org/thoughtcrime/securesms/ExpirationDialog.java b/src/org/thoughtcrime/securesms/ExpirationDialog.java
new file mode 100644
index 00000000000..7a8a74df476
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/ExpirationDialog.java
@@ -0,0 +1,94 @@
+package org.thoughtcrime.securesms;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.support.annotation.NonNull;
+import android.support.v7.app.AlertDialog;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import org.thoughtcrime.securesms.util.ExpirationUtil;
+
+import cn.carbswang.android.numberpickerview.library.NumberPickerView;
+
+public class ExpirationDialog extends AlertDialog {
+
+ protected ExpirationDialog(Context context) {
+ super(context);
+ }
+
+ protected ExpirationDialog(Context context, int theme) {
+ super(context, theme);
+ }
+
+ protected ExpirationDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
+ super(context, cancelable, cancelListener);
+ }
+
+ public static void show(final Context context,
+ final int currentExpiration,
+ final @NonNull OnClickListener listener)
+ {
+ final View view = createNumberPickerView(context, currentExpiration);
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ builder.setTitle(context.getString(R.string.ExpirationDialog_disappearing_messages));
+ builder.setView(view);
+ builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ int selected = ((NumberPickerView)view.findViewById(R.id.expiration_number_picker)).getValue();
+ listener.onClick(context.getResources().getIntArray(R.array.expiration_times)[selected]);
+ }
+ });
+ builder.setNegativeButton(android.R.string.cancel, null);
+ builder.show();
+ }
+
+ private static View createNumberPickerView(final Context context, final int currentExpiration) {
+ final LayoutInflater inflater = LayoutInflater.from(context);
+ final View view = inflater.inflate(R.layout.expiration_dialog, null);
+ final NumberPickerView numberPickerView = (NumberPickerView)view.findViewById(R.id.expiration_number_picker);
+ final TextView textView = (TextView)view.findViewById(R.id.expiration_details);
+ final int[] expirationTimes = context.getResources().getIntArray(R.array.expiration_times);
+ final String[] expirationDisplayValues = new String[expirationTimes.length];
+
+ int selectedIndex = expirationTimes.length - 1;
+
+ for (int i=0;i= expirationTimes[i]) &&
+ (i == expirationTimes.length -1 || currentExpiration < expirationTimes[i+1])) {
+ selectedIndex = i;
+ }
+ }
+
+ numberPickerView.setDisplayedValues(expirationDisplayValues);
+ numberPickerView.setMinValue(0);
+ numberPickerView.setMaxValue(expirationTimes.length-1);
+
+ NumberPickerView.OnValueChangeListener listener = new NumberPickerView.OnValueChangeListener() {
+ @Override
+ public void onValueChange(NumberPickerView picker, int oldVal, int newVal) {
+ if (newVal == 0) {
+ textView.setText(R.string.ExpirationDialog_your_messages_will_not_expire);
+ } else {
+ textView.setText(context.getString(R.string.ExpirationDialog_your_messages_will_disappear_s_after_they_have_been_seen, picker.getDisplayedValues()[newVal]));
+ }
+ }
+ };
+
+ numberPickerView.setOnValueChangedListener(listener);
+ numberPickerView.setValue(selectedIndex);
+ listener.onValueChange(numberPickerView, selectedIndex, selectedIndex);
+
+ return view;
+ }
+
+ public interface OnClickListener {
+ public void onClick(int expirationTime);
+ }
+
+}
diff --git a/src/org/thoughtcrime/securesms/ExportFragment.java b/src/org/thoughtcrime/securesms/ExportFragment.java
index 9eca61fdc2a..bf6202cf794 100644
--- a/src/org/thoughtcrime/securesms/ExportFragment.java
+++ b/src/org/thoughtcrime/securesms/ExportFragment.java
@@ -134,7 +134,7 @@ protected void onPostExecute(Integer result) {
break;
case SUCCESS:
Toast.makeText(context,
- context.getString(R.string.ExportFragment_success),
+ context.getString(R.string.ExportFragment_export_successful),
Toast.LENGTH_LONG).show();
break;
}
diff --git a/src/org/thoughtcrime/securesms/GroupCreateActivity.java b/src/org/thoughtcrime/securesms/GroupCreateActivity.java
index dc1a33cc708..efde6bf7f51 100644
--- a/src/org/thoughtcrime/securesms/GroupCreateActivity.java
+++ b/src/org/thoughtcrime/securesms/GroupCreateActivity.java
@@ -39,6 +39,7 @@
import android.widget.Toast;
import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.soundcloud.android.crop.Crop;
@@ -71,8 +72,8 @@
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
-import org.whispersystems.libaxolotl.util.guava.Optional;
-import org.whispersystems.textsecure.api.util.InvalidNumberException;
+import org.whispersystems.libsignal.util.guava.Optional;
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
import java.io.File;
import java.io.IOException;
@@ -198,7 +199,7 @@ private void initializeResources() {
SelectedRecipientsAdapter adapter = new SelectedRecipientsAdapter(this);
adapter.setOnRecipientDeletedListener(this);
lv.setAdapter(adapter);
- recipientsEditor.setHint(R.string.recipients_panel__add_member);
+ recipientsEditor.setHint(R.string.recipients_panel__add_members);
recipientsPanel.setPanelChangeListener(this);
findViewById(R.id.contacts_button).setOnClickListener(new AddRecipientButtonListener());
avatar.setImageDrawable(ContactPhotoFactory.getDefaultGroupPhoto()
@@ -319,7 +320,9 @@ public void onActivityResult(int reqCode, int resultCode, final Intent data) {
new Crop(data.getData()).output(outputFile).asSquare().start(this);
break;
case Crop.REQUEST_CROP:
- Glide.with(this).load(Crop.getOutput(data)).asBitmap().skipMemoryCache(true)
+ Glide.with(this).load(Crop.getOutput(data)).asBitmap()
+ .skipMemoryCache(true)
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
.centerCrop().override(AVATAR_SIZE, AVATAR_SIZE)
.into(new SimpleTarget() {
@Override
@@ -591,6 +594,7 @@ private void setAvatar(T model, Bitmap bitmap) {
Glide.with(this)
.load(model)
.skipMemoryCache(true)
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
.transform(new RoundedCorners(this, avatar.getWidth() / 2))
.into(avatar);
}
diff --git a/src/org/thoughtcrime/securesms/GroupMembersDialog.java b/src/org/thoughtcrime/securesms/GroupMembersDialog.java
index cfca22f04db..be6859d617f 100644
--- a/src/org/thoughtcrime/securesms/GroupMembersDialog.java
+++ b/src/org/thoughtcrime/securesms/GroupMembersDialog.java
@@ -16,7 +16,7 @@
import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.textsecure.api.util.InvalidNumberException;
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
import java.io.IOException;
import java.util.LinkedList;
diff --git a/src/org/thoughtcrime/securesms/ImageMediaAdapter.java b/src/org/thoughtcrime/securesms/ImageMediaAdapter.java
index 3d51d6bf518..aa3f323819a 100644
--- a/src/org/thoughtcrime/securesms/ImageMediaAdapter.java
+++ b/src/org/thoughtcrime/securesms/ImageMediaAdapter.java
@@ -41,6 +41,7 @@ public class ImageMediaAdapter extends CursorRecyclerViewAdapter {
private static final String TAG = ImageMediaAdapter.class.getSimpleName();
private final MasterSecret masterSecret;
+ private final long threadId;
public static class ViewHolder extends RecyclerView.ViewHolder {
public ThumbnailView imageView;
@@ -51,9 +52,10 @@ public ViewHolder(View v) {
}
}
- public ImageMediaAdapter(Context context, MasterSecret masterSecret, Cursor c) {
+ public ImageMediaAdapter(Context context, MasterSecret masterSecret, Cursor c, long threadId) {
super(context, c);
this.masterSecret = masterSecret;
+ this.threadId = threadId;
}
@Override
@@ -85,20 +87,22 @@ private OnMediaClickListener(ImageRecord imageRecord) {
@Override
public void onClick(View v) {
- Intent intent = new Intent(getContext(), MediaPreviewActivity.class);
- intent.putExtra(MediaPreviewActivity.DATE_EXTRA, imageRecord.getDate());
-
- if (!TextUtils.isEmpty(imageRecord.getAddress())) {
- Recipients recipients = RecipientFactory.getRecipientsFromString(getContext(),
- imageRecord.getAddress(),
- true);
- if (recipients != null && recipients.getPrimaryRecipient() != null) {
- intent.putExtra(MediaPreviewActivity.RECIPIENT_EXTRA, recipients.getPrimaryRecipient().getRecipientId());
+ if (imageRecord.getAttachment().getDataUri() != null) {
+ Intent intent = new Intent(getContext(), MediaPreviewActivity.class);
+ intent.putExtra(MediaPreviewActivity.DATE_EXTRA, imageRecord.getDate());
+ intent.putExtra(MediaPreviewActivity.THREAD_ID_EXTRA, threadId);
+
+ if (!TextUtils.isEmpty(imageRecord.getAddress())) {
+ Recipients recipients = RecipientFactory.getRecipientsFromString(getContext(),
+ imageRecord.getAddress(),
+ true);
+ if (recipients != null && recipients.getPrimaryRecipient() != null) {
+ intent.putExtra(MediaPreviewActivity.RECIPIENT_EXTRA, recipients.getPrimaryRecipient().getRecipientId());
+ }
}
+ intent.setDataAndType(imageRecord.getAttachment().getDataUri(), imageRecord.getContentType());
+ getContext().startActivity(intent);
}
- intent.setDataAndType(imageRecord.getAttachment().getDataUri(), imageRecord.getContentType());
- getContext().startActivity(intent);
-
}
}
}
diff --git a/src/org/thoughtcrime/securesms/InviteActivity.java b/src/org/thoughtcrime/securesms/InviteActivity.java
index b16c73c7490..d8e3b46b7f8 100644
--- a/src/org/thoughtcrime/securesms/InviteActivity.java
+++ b/src/org/thoughtcrime/securesms/InviteActivity.java
@@ -36,7 +36,7 @@
import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture.Listener;
import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.util.concurrent.ExecutionException;
@@ -83,7 +83,7 @@ private void initializeResources() {
heart = ViewUtil.findById(this, R.id.heart);
contactsFragment = (ContactSelectionListFragment)getSupportFragmentManager().findFragmentById(R.id.contact_selection_list_fragment);
- inviteText.setText(getString(R.string.InviteActivity_lets_switch_to_signal, "http://sgnl.link/1KpeYmF"));
+ inviteText.setText(getString(R.string.InviteActivity_lets_switch_to_signal, "https://sgnl.link/1KpeYmF"));
updateSmsButtonText();
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
@@ -95,6 +95,7 @@ private void initializeResources() {
smsCancelButton.setOnClickListener(new SmsCancelClickListener());
smsSendButton.setOnClickListener(new SmsSendClickListener());
contactFilter.setOnFilterChangedListener(new ContactFilterChangedListener());
+ contactFilter.setNavigationIcon(R.drawable.ic_search_white_24dp);
}
private Animation loadAnimation(@AnimRes int animResId) {
@@ -120,7 +121,7 @@ private void sendSmsInvites() {
}
private void updateSmsButtonText() {
- smsSendButton.setText(getResources().getQuantityString(R.plurals.InviteActivity_send_to_friends,
+ smsSendButton.setText(getResources().getQuantityString(R.plurals.InviteActivity_send_sms_to_friends,
contactsFragment.getSelectedContacts().size(),
contactsFragment.getSelectedContacts().size()));
smsSendButton.setEnabled(!contactsFragment.getSelectedContacts().isEmpty());
diff --git a/src/org/thoughtcrime/securesms/KeyScanningActivity.java b/src/org/thoughtcrime/securesms/KeyScanningActivity.java
deleted file mode 100644
index 8e745b8fe28..00000000000
--- a/src/org/thoughtcrime/securesms/KeyScanningActivity.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * Copyright (C) 2011 Whisper Systems
- *
- * 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 .
- */
-package org.thoughtcrime.securesms;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.widget.Toast;
-
-import com.google.zxing.integration.android.IntentIntegrator;
-import com.google.zxing.integration.android.IntentResult;
-
-import org.thoughtcrime.securesms.crypto.MasterSecret;
-import org.thoughtcrime.securesms.util.Base64;
-import org.thoughtcrime.securesms.util.Dialogs;
-import org.thoughtcrime.securesms.util.DynamicLanguage;
-import org.thoughtcrime.securesms.util.DynamicTheme;
-import org.whispersystems.libaxolotl.IdentityKey;
-
-/**
- * Activity for initiating/receiving key QR code scans.
- *
- * @author Moxie Marlinspike
- */
-public abstract class KeyScanningActivity extends PassphraseRequiredActionBarActivity {
-
- private final DynamicTheme dynamicTheme = new DynamicTheme();
- private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
-
- @Override
- protected void onPreCreate() {
- dynamicTheme.onCreate(this);
- dynamicLanguage.onCreate(this);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- dynamicTheme.onResume(this);
- dynamicLanguage.onResume(this);
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
-
- MenuInflater inflater = this.getMenuInflater();
- menu.clear();
-
- inflater.inflate(R.menu.key_scanning, menu);
-
- menu.findItem(R.id.menu_scan).setTitle(getScanString());
- menu.findItem(R.id.menu_get_scanned).setTitle(getDisplayString());
-
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- super.onOptionsItemSelected(item);
-
- switch (item.getItemId()) {
- case R.id.menu_scan: initiateScan(); return true;
- case R.id.menu_get_scanned: initiateDisplay(); return true;
- case android.R.id.home: finish(); return true;
- }
-
- return false;
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent intent) {
- IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
-
- if ((scanResult != null) && (scanResult.getContents() != null)) {
- String data = scanResult.getContents();
-
- if (data.equals(Base64.encodeBytes(getIdentityKeyToCompare().serialize()))) {
- Dialogs.showInfoDialog(this, getVerifiedTitle(), getVerifiedMessage());
- } else {
- Dialogs.showAlertDialog(this, getNotVerifiedTitle(), getNotVerifiedMessage());
- }
- } else {
- Toast.makeText(this, R.string.KeyScanningActivity_no_scanned_key_found_exclamation,
- Toast.LENGTH_LONG).show();
- }
- }
-
- private IntentIntegrator getIntentIntegrator() {
- IntentIntegrator intentIntegrator = new IntentIntegrator(this);
- intentIntegrator.setButtonYesByID(R.string.yes);
- intentIntegrator.setButtonNoByID(R.string.no);
- intentIntegrator.setTitleByID(R.string.KeyScanningActivity_install_barcode_Scanner);
- intentIntegrator.setMessageByID(R.string.KeyScanningActivity_this_application_requires_barcode_scanner_would_you_like_to_install_it);
- return intentIntegrator;
- }
-
- protected void initiateScan() {
- IntentIntegrator intentIntegrator = getIntentIntegrator();
- intentIntegrator.initiateScan();
- }
-
- protected void initiateDisplay() {
- IntentIntegrator intentIntegrator = getIntentIntegrator();
- intentIntegrator.shareText(Base64.encodeBytes(getIdentityKeyToDisplay().serialize()));
- }
-
- protected abstract String getScanString();
- protected abstract String getDisplayString();
-
- protected abstract String getNotVerifiedTitle();
- protected abstract String getNotVerifiedMessage();
-
- protected abstract IdentityKey getIdentityKeyToCompare();
- protected abstract IdentityKey getIdentityKeyToDisplay();
-
- protected abstract String getVerifiedTitle();
- protected abstract String getVerifiedMessage();
-
-}
diff --git a/src/org/thoughtcrime/securesms/LogSubmitActivity.java b/src/org/thoughtcrime/securesms/LogSubmitActivity.java
index ffb9ecf010f..1455a274d03 100644
--- a/src/org/thoughtcrime/securesms/LogSubmitActivity.java
+++ b/src/org/thoughtcrime/securesms/LogSubmitActivity.java
@@ -1,21 +1,28 @@
package org.thoughtcrime.securesms;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBarActivity;
+import android.util.Log;
import android.view.MenuItem;
import android.widget.Toast;
+import org.thoughtcrime.securesms.util.DynamicTheme;
import org.whispersystems.libpastelog.SubmitLogFragment;
/**
* Activity for submitting logcat logs to a pastebin service.
*/
public class LogSubmitActivity extends BaseActionBarActivity implements SubmitLogFragment.OnLogSubmittedListener {
+
private static final String TAG = LogSubmitActivity.class.getSimpleName();
+ private DynamicTheme dynamicTheme = new DynamicTheme();
@Override
protected void onCreate(Bundle icicle) {
+ dynamicTheme.onCreate(this);
super.onCreate(icicle);
setContentView(R.layout.log_submit_activity);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -27,6 +34,7 @@ protected void onCreate(Bundle icicle) {
@Override
protected void onResume() {
+ dynamicTheme.onResume(this);
super.onResume();
}
@@ -58,4 +66,14 @@ public void onFailure() {
public void onCancel() {
finish();
}
+
+ @Override
+ public void startActivity(Intent intent) {
+ try {
+ super.startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ Log.w(TAG, e);
+ Toast.makeText(this, R.string.log_submit_activity__no_browser_installed, Toast.LENGTH_LONG).show();
+ }
+ }
}
diff --git a/src/org/thoughtcrime/securesms/MediaOverviewActivity.java b/src/org/thoughtcrime/securesms/MediaOverviewActivity.java
index 35c0f874fcf..a831ca683c9 100644
--- a/src/org/thoughtcrime/securesms/MediaOverviewActivity.java
+++ b/src/org/thoughtcrime/securesms/MediaOverviewActivity.java
@@ -135,14 +135,19 @@ private void initializeResources() {
final long recipientId = getIntent().getLongExtra(RECIPIENT_EXTRA, -1);
if (recipientId > -1) {
recipient = RecipientFactory.getRecipientForId(this, recipientId, true);
+ } else if (threadId > -1){
+ recipient = DatabaseFactory.getThreadDatabase(this).getRecipientsForThreadId(threadId).getPrimaryRecipient();
+ } else {
+ recipient = null;
+ }
+
+ if (recipient != null) {
recipient.addListener(new RecipientModifiedListener() {
@Override
public void onModified(Recipient recipient) {
initializeActionBar();
}
});
- } else {
- recipient = null;
}
}
@@ -215,7 +220,7 @@ public Loader onCreateLoader(int i, Bundle bundle) {
@Override
public void onLoadFinished(Loader cursorLoader, Cursor cursor) {
Log.w(TAG, "onLoadFinished()");
- gridView.setAdapter(new ImageMediaAdapter(this, masterSecret, cursor));
+ gridView.setAdapter(new ImageMediaAdapter(this, masterSecret, cursor, threadId));
noImages.setVisibility(gridView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE);
invalidateOptionsMenu();
}
diff --git a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java b/src/org/thoughtcrime/securesms/MediaPreviewActivity.java
index d0f8d11da5f..9036d4a6734 100644
--- a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java
+++ b/src/org/thoughtcrime/securesms/MediaPreviewActivity.java
@@ -34,6 +34,7 @@
import org.thoughtcrime.securesms.components.ZoomingImageView;
import org.thoughtcrime.securesms.crypto.MasterSecret;
+import org.thoughtcrime.securesms.mms.VideoSlide;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.Recipient.RecipientModifiedListener;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
@@ -41,6 +42,9 @@
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.SaveAttachmentTask;
import org.thoughtcrime.securesms.util.SaveAttachmentTask.Attachment;
+import org.thoughtcrime.securesms.video.VideoPlayer;
+
+import java.io.IOException;
/**
* Activity for displaying media attachments in-app
@@ -49,17 +53,22 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity im
private final static String TAG = MediaPreviewActivity.class.getSimpleName();
public static final String RECIPIENT_EXTRA = "recipient";
+ public static final String THREAD_ID_EXTRA = "thread_id";
public static final String DATE_EXTRA = "date";
+ public static final String SIZE_EXTRA = "size";
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
private MasterSecret masterSecret;
private ZoomingImageView image;
+ private VideoPlayer video;
private Uri mediaUri;
private String mediaType;
private Recipient recipient;
+ private long threadId;
private long date;
+ private long size;
@Override
protected void onCreate(Bundle bundle, @NonNull MasterSecret masterSecret) {
@@ -94,9 +103,7 @@ public void onModified(Recipient recipient) {
private void initializeActionBar() {
final CharSequence relativeTimeSpan;
if (date > 0) {
- relativeTimeSpan = DateUtils.getRelativeTimeSpanString(date,
- System.currentTimeMillis(),
- DateUtils.MINUTE_IN_MILLIS);
+ relativeTimeSpan = DateUtils.getExtendedRelativeTimeSpanString(this,dynamicLanguage.getCurrentLocale(),date);
} else {
relativeTimeSpan = null;
}
@@ -131,6 +138,7 @@ protected void onNewIntent(Intent intent) {
private void initializeViews() {
image = (ZoomingImageView)findViewById(R.id.image);
+ video = (VideoPlayer)findViewById(R.id.video_player);
}
private void initializeResources() {
@@ -139,6 +147,8 @@ private void initializeResources() {
mediaUri = getIntent().getData();
mediaType = getIntent().getType();
date = getIntent().getLongExtra(DATE_EXTRA, System.currentTimeMillis());
+ size = getIntent().getLongExtra(SIZE_EXTRA, 0);
+ threadId = getIntent().getLongExtra(THREAD_ID_EXTRA, -1);
if (recipientId > -1) {
recipient = RecipientFactory.getRecipientForId(this, recipientId, true);
@@ -157,13 +167,39 @@ private void initializeMedia() {
Log.w(TAG, "Loading Part URI: " + mediaUri);
- if (mediaType != null && mediaType.startsWith("image/")) {
- image.setImageUri(masterSecret, mediaUri);
+ try {
+ if (mediaType != null && mediaType.startsWith("image/")) {
+ image.setVisibility(View.VISIBLE);
+ video.setVisibility(View.GONE);
+ image.setImageUri(masterSecret, mediaUri);
+ } else if (mediaType != null && mediaType.startsWith("video/")) {
+ image.setVisibility(View.GONE);
+ video.setVisibility(View.VISIBLE);
+ video.setVideoSource(masterSecret, new VideoSlide(this, mediaUri, size));
+ }
+ } catch (IOException e) {
+ Log.w(TAG, e);
+ Toast.makeText(getApplicationContext(), R.string.MediaPreviewActivity_unssuported_media_type, Toast.LENGTH_LONG).show();
+ finish();
}
}
private void cleanupMedia() {
image.setImageDrawable(null);
+ video.cleanup();
+ }
+
+ private void showOverview() {
+ Intent intent = new Intent(this, MediaOverviewActivity.class);
+ intent.putExtra(MediaOverviewActivity.THREAD_ID_EXTRA, threadId);
+ startActivity(intent);
+ }
+
+ private void forward() {
+ Intent composeIntent = new Intent(this, ShareActivity.class);
+ composeIntent.putExtra(Intent.EXTRA_STREAM, mediaUri);
+ composeIntent.setType(mediaType);
+ startActivity(composeIntent);
}
private void saveToDisk() {
@@ -183,6 +219,7 @@ public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
MenuInflater inflater = this.getMenuInflater();
inflater.inflate(R.menu.media_preview, menu);
+ if (threadId == -1) menu.findItem(R.id.media_preview__overview).setVisible(false);
return true;
}
@@ -192,14 +229,16 @@ public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
- case R.id.save: saveToDisk(); return true;
- case android.R.id.home: finish(); return true;
+ case R.id.media_preview__overview: showOverview(); return true;
+ case R.id.media_preview__forward: forward(); return true;
+ case R.id.save: saveToDisk(); return true;
+ case android.R.id.home: finish(); return true;
}
return false;
}
public static boolean isContentTypeSupported(final String contentType) {
- return contentType != null && contentType.startsWith("image/");
+ return contentType != null && (contentType.startsWith("image/") || contentType.startsWith("video/"));
}
}
diff --git a/src/org/thoughtcrime/securesms/MessageDetailsActivity.java b/src/org/thoughtcrime/securesms/MessageDetailsActivity.java
index d5cd6492aad..8e96c424633 100644
--- a/src/org/thoughtcrime/securesms/MessageDetailsActivity.java
+++ b/src/org/thoughtcrime/securesms/MessageDetailsActivity.java
@@ -23,6 +23,7 @@
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.util.Log;
@@ -49,6 +50,7 @@
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme;
+import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.Util;
@@ -79,9 +81,11 @@ public class MessageDetailsActivity extends PassphraseRequiredActionBarActivity
private ConversationItem conversationItem;
private ViewGroup itemParent;
private View metadataContainer;
+ private View expiresContainer;
private TextView errorText;
private TextView sentDate;
private TextView receivedDate;
+ private TextView expiresInText;
private View receivedContainer;
private TextView transport;
private TextView toFrom;
@@ -91,6 +95,8 @@ public class MessageDetailsActivity extends PassphraseRequiredActionBarActivity
private DynamicTheme dynamicTheme = new DynamicTheme();
private DynamicLanguage dynamicLanguage = new DynamicLanguage();
+ private boolean running;
+
@Override
protected void onPreCreate() {
dynamicTheme.onCreate(this);
@@ -100,6 +106,7 @@ protected void onPreCreate() {
@Override
public void onCreate(Bundle bundle, @NonNull MasterSecret masterSecret) {
setContentView(R.layout.message_details_activity);
+ running = true;
initializeResources();
initializeActionBar();
@@ -122,6 +129,12 @@ protected void onPause() {
MessageNotifier.setVisibleThread(-1L);
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ running = false;
+ }
+
private void initializeActionBar() {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -165,6 +178,8 @@ private void initializeResources() {
receivedDate = (TextView ) header.findViewById(R.id.received_time);
transport = (TextView ) header.findViewById(R.id.transport);
toFrom = (TextView ) header.findViewById(R.id.tofrom);
+ expiresContainer = header.findViewById(R.id.expires_container);
+ expiresInText = (TextView) header.findViewById(R.id.expires_in);
recipientsList.setHeaderDividersEnabled(false);
recipientsList.addHeaderView(header, null, false);
}
@@ -204,6 +219,29 @@ private void updateTime(MessageRecord messageRecord) {
}
}
+ private void updateExpirationTime(final MessageRecord messageRecord) {
+ if (messageRecord.getExpiresIn() <= 0 || messageRecord.getExpireStarted() <= 0) {
+ expiresContainer.setVisibility(View.GONE);
+ return;
+ }
+
+ expiresContainer.setVisibility(View.VISIBLE);
+ expiresInText.post(new Runnable() {
+ @Override
+ public void run() {
+ long elapsed = System.currentTimeMillis() - messageRecord.getExpireStarted();
+ long remaining = messageRecord.getExpiresIn() - elapsed;
+
+ String duration = ExpirationUtil.getExpirationDisplayValue(MessageDetailsActivity.this, Math.max((int)(remaining / 1000), 1));
+ expiresInText.setText(duration);
+
+ if (running) {
+ expiresInText.postDelayed(this, 500);
+ }
+ }
+ });
+ }
+
private void updateRecipients(MessageRecord messageRecord, Recipients recipients) {
final int toFromRes;
if (messageRecord.isMms() && !messageRecord.isPush() && !messageRecord.isOutgoing()) {
@@ -233,7 +271,7 @@ private void inflateMessageViewIfAbsent(MessageRecord messageRecord) {
}
}
- private MessageRecord getMessageRecord(Context context, Cursor cursor, String type) {
+ private @Nullable MessageRecord getMessageRecord(Context context, Cursor cursor, String type) {
switch (type) {
case MmsSmsDatabase.SMS_TRANSPORT:
EncryptingSmsDatabase smsDatabase = DatabaseFactory.getEncryptingSmsDatabase(context);
@@ -257,8 +295,13 @@ public Loader onCreateLoader(int id, Bundle args) {
@Override
public void onLoadFinished(Loader loader, Cursor cursor) {
- final MessageRecord messageRecord = getMessageRecord(this, cursor, getIntent().getStringExtra(TYPE_EXTRA));
- new MessageRecipientAsyncTask(this, messageRecord).execute();
+ MessageRecord messageRecord = getMessageRecord(this, cursor, getIntent().getStringExtra(TYPE_EXTRA));
+
+ if (messageRecord == null) {
+ finish();
+ } else {
+ new MessageRecipientAsyncTask(this, messageRecord).execute();
+ }
}
@Override
@@ -281,7 +324,7 @@ private class MessageRecipientAsyncTask extends AsyncTask
private WeakReference weakContext;
private MessageRecord messageRecord;
- public MessageRecipientAsyncTask(Context context, MessageRecord messageRecord) {
+ public MessageRecipientAsyncTask(@NonNull Context context, @NonNull MessageRecord messageRecord) {
this.weakContext = new WeakReference<>(context);
this.messageRecord = messageRecord;
}
@@ -340,6 +383,7 @@ public void onPostExecute(Recipients recipients) {
} else {
updateTransport(messageRecord);
updateTime(messageRecord);
+ updateExpirationTime(messageRecord);
errorText.setVisibility(View.GONE);
metadataContainer.setVisibility(View.VISIBLE);
}
diff --git a/src/org/thoughtcrime/securesms/MessageRecipientListItem.java b/src/org/thoughtcrime/securesms/MessageRecipientListItem.java
index c3c81741f2a..842d7b0c542 100644
--- a/src/org/thoughtcrime/securesms/MessageRecipientListItem.java
+++ b/src/org/thoughtcrime/securesms/MessageRecipientListItem.java
@@ -99,7 +99,7 @@ private void setIssueIndicators(final MasterSecret masterSecret,
resendButton.setVisibility(View.GONE);
conflictButton.setVisibility(View.VISIBLE);
- errorText = getContext().getString(R.string.MessageDetailsRecipient_new_identity);
+ errorText = getContext().getString(R.string.MessageDetailsRecipient_new_safety_number);
conflictButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@@ -109,6 +109,7 @@ public void onClick(View v) {
} else if (networkFailure != null || (!isPushGroup && record.isFailed())) {
resendButton.setVisibility(View.VISIBLE);
resendButton.setEnabled(true);
+ resendButton.requestFocus();
conflictButton.setVisibility(View.GONE);
errorText = getContext().getString(R.string.MessageDetailsRecipient_failed_to_send);
diff --git a/src/org/thoughtcrime/securesms/NewConversationActivity.java b/src/org/thoughtcrime/securesms/NewConversationActivity.java
index 486eac112df..f9c72c615f4 100644
--- a/src/org/thoughtcrime/securesms/NewConversationActivity.java
+++ b/src/org/thoughtcrime/securesms/NewConversationActivity.java
@@ -44,7 +44,6 @@ public class NewConversationActivity extends ContactSelectionActivity {
public void onCreate(Bundle bundle, @NonNull MasterSecret masterSecret) {
super.onCreate(bundle, masterSecret);
- getToolbar().setShowCustomNavigationButton(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@@ -70,8 +69,10 @@ public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
- case android.R.id.home: super.onBackPressed(); return true;
- case R.id.menu_refresh: handleManualRefresh(); return true;
+ case android.R.id.home: super.onBackPressed(); return true;
+ case R.id.menu_refresh: handleManualRefresh(); return true;
+ case R.id.menu_new_group: handleCreateGroup(); return true;
+ case R.id.menu_invite: handleInvite(); return true;
}
return false;
@@ -82,6 +83,14 @@ private void handleManualRefresh() {
onRefresh();
}
+ private void handleCreateGroup() {
+ startActivity(new Intent(this, GroupCreateActivity.class));
+ }
+
+ private void handleInvite() {
+ startActivity(new Intent(this, InviteActivity.class));
+ }
+
@Override
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
MenuInflater inflater = this.getMenuInflater();
diff --git a/src/org/thoughtcrime/securesms/PassphraseActivity.java b/src/org/thoughtcrime/securesms/PassphraseActivity.java
index 11935f8fe0a..71bbc2cc3e5 100644
--- a/src/org/thoughtcrime/securesms/PassphraseActivity.java
+++ b/src/org/thoughtcrime/securesms/PassphraseActivity.java
@@ -21,6 +21,7 @@
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
+import android.util.Log;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.service.KeyCachingService;
@@ -57,10 +58,16 @@ public void onServiceConnected(ComponentName className, IBinder service) {
cleanup();
Intent nextIntent = getIntent().getParcelableExtra("next_intent");
- if (nextIntent != null) startActivity(nextIntent);
+ if (nextIntent != null) {
+ try {
+ startActivity(nextIntent);
+ } catch (java.lang.SecurityException e) {
+ Log.w("PassphraseActivity",
+ "Access permission not passed from PassphraseActivity, retry sharing.");
+ }
+ }
finish();
}
-
@Override
public void onServiceDisconnected(ComponentName name) {
keyCachingService = null;
diff --git a/src/org/thoughtcrime/securesms/PassphraseChangeActivity.java b/src/org/thoughtcrime/securesms/PassphraseChangeActivity.java
index eec279fda67..980baabce60 100644
--- a/src/org/thoughtcrime/securesms/PassphraseChangeActivity.java
+++ b/src/org/thoughtcrime/securesms/PassphraseChangeActivity.java
@@ -16,16 +16,15 @@
*/
package org.thoughtcrime.securesms;
-import android.os.AsyncTask;
import android.content.Context;
-import android.util.Log;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
+import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
-import android.widget.Toast;
import org.thoughtcrime.securesms.crypto.InvalidPassphraseException;
import org.thoughtcrime.securesms.crypto.MasterSecret;
@@ -101,15 +100,13 @@ private void verifyAndSavePassphrases() {
}
if (!passphrase.equals(passphraseRepeat)) {
- Toast.makeText(getApplicationContext(),
- R.string.PassphraseChangeActivity_passphrases_dont_match_exclamation,
- Toast.LENGTH_SHORT).show();
this.newPassphrase.setText("");
this.repeatPassphrase.setText("");
+ this.newPassphrase.setError(getString(R.string.PassphraseChangeActivity_passphrases_dont_match_exclamation));
+ this.newPassphrase.requestFocus();
} else if (passphrase.equals("")) {
- Toast.makeText(getApplicationContext(),
- R.string.PassphraseChangeActivity_enter_new_passphrase_exclamation,
- Toast.LENGTH_SHORT).show();
+ this.newPassphrase.setError(getString(R.string.PassphraseChangeActivity_enter_new_passphrase_exclamation));
+ this.newPassphrase.requestFocus();
} else {
new ChangePassphraseTask(this).execute(original, passphrase);
}
@@ -160,9 +157,9 @@ protected void onPostExecute(MasterSecret masterSecret) {
if (masterSecret != null) {
setMasterSecret(masterSecret);
} else {
- Toast.makeText(context, R.string.PassphraseChangeActivity_incorrect_old_passphrase_exclamation,
- Toast.LENGTH_LONG).show();
originalPassphrase.setText("");
+ originalPassphrase.setError(getString(R.string.PassphraseChangeActivity_incorrect_old_passphrase_exclamation));
+ originalPassphrase.requestFocus();
}
}
}
diff --git a/src/org/thoughtcrime/securesms/PassphrasePromptActivity.java b/src/org/thoughtcrime/securesms/PassphrasePromptActivity.java
index e27400f80f6..dc652309c91 100644
--- a/src/org/thoughtcrime/securesms/PassphrasePromptActivity.java
+++ b/src/org/thoughtcrime/securesms/PassphrasePromptActivity.java
@@ -35,7 +35,6 @@
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
-import android.widget.Toast;
import org.thoughtcrime.securesms.components.AnimatingToggle;
import org.thoughtcrime.securesms.crypto.InvalidPassphraseException;
@@ -116,8 +115,8 @@ private void handlePassphrase() {
setMasterSecret(masterSecret);
} catch (InvalidPassphraseException ipe) {
passphraseText.setText("");
- Toast.makeText(this, R.string.PassphrasePromptActivity_invalid_passphrase_exclamation,
- Toast.LENGTH_SHORT).show();
+ passphraseText.setError(
+ getString(R.string.PassphrasePromptActivity_invalid_passphrase_exclamation));
}
}
diff --git a/src/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java b/src/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java
index c54d29e263d..087855cd5e0 100644
--- a/src/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java
+++ b/src/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java
@@ -4,17 +4,17 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.os.Build;
import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
-import android.view.WindowManager;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
+import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob;
+import org.thoughtcrime.securesms.push.Censorship;
import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.service.MessageRetrievalService;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
@@ -57,7 +57,9 @@ protected void onResume() {
Log.w(TAG, "onResume()");
super.onResume();
KeyCachingService.registerPassphraseActivityStarted(this);
- MessageRetrievalService.registerActivityStarted(this);
+
+ if (!Censorship.isCensored(this)) MessageRetrievalService.registerActivityStarted(this);
+ else ApplicationContext.getInstance(this).getJobManager().add(new PushNotificationReceiveJob(this));
isVisible = true;
}
@@ -66,7 +68,8 @@ protected void onPause() {
Log.w(TAG, "onPause()");
super.onPause();
KeyCachingService.registerPassphraseActivityStopped(this);
- MessageRetrievalService.registerActivityStopped(this);
+
+ if (!Censorship.isCensored(this)) MessageRetrievalService.registerActivityStopped(this);
isVisible = false;
}
diff --git a/src/org/thoughtcrime/securesms/PlayServicesProblemActivity.java b/src/org/thoughtcrime/securesms/PlayServicesProblemActivity.java
deleted file mode 100644
index 216fab99f3c..00000000000
--- a/src/org/thoughtcrime/securesms/PlayServicesProblemActivity.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (C) 2014 Open Whisper Systems
- *
- * 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 .
- */
-package org.thoughtcrime.securesms;
-
-import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
-
-public class PlayServicesProblemActivity extends FragmentActivity {
-
- @Override
- public void onCreate(Bundle bundle) {
- super.onCreate(bundle);
- PlayServicesProblemFragment fragment = new PlayServicesProblemFragment();
- fragment.show(getSupportFragmentManager(), "dialog");
- }
-}
diff --git a/src/org/thoughtcrime/securesms/PlayServicesProblemFragment.java b/src/org/thoughtcrime/securesms/PlayServicesProblemFragment.java
deleted file mode 100644
index 898b881a9ba..00000000000
--- a/src/org/thoughtcrime/securesms/PlayServicesProblemFragment.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Copyright (C) 2014 Open Whisper Systems
- *
- * 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 .
- */
-
-package org.thoughtcrime.securesms;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.v4.app.DialogFragment;
-import android.support.v7.app.AlertDialog;
-
-import com.google.android.gms.common.GooglePlayServicesUtil;
-
-public class PlayServicesProblemFragment extends DialogFragment {
-
- @Override
- public @NonNull Dialog onCreateDialog(@NonNull Bundle bundle) {
- int code = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity());
- Dialog dialog = GooglePlayServicesUtil.getErrorDialog(code, getActivity(), 9111);
-
- if (dialog == null) {
- return new AlertDialog.Builder(getActivity())
- .setNegativeButton(android.R.string.ok, null)
- .setMessage(R.string.PlayServicesProblemFragment_the_version_of_google_play_services_you_have_installed_is_not_functioning)
- .create();
- } else {
- return dialog;
- }
- }
-
- @Override
- public void onCancel(DialogInterface dialog) {
- super.onCancel(dialog);
- finish();
- }
-
- @Override
- public void onDismiss(DialogInterface dialog) {
- super.onDismiss(dialog);
- finish();
- }
-
- private void finish() {
- Activity activity = getActivity();
- if (activity != null) activity.finish();
- }
-
-}
diff --git a/src/org/thoughtcrime/securesms/RecipientPreferenceActivity.java b/src/org/thoughtcrime/securesms/RecipientPreferenceActivity.java
index f8bf4b923f4..bbd41099197 100644
--- a/src/org/thoughtcrime/securesms/RecipientPreferenceActivity.java
+++ b/src/org/thoughtcrime/securesms/RecipientPreferenceActivity.java
@@ -1,7 +1,10 @@
package org.thoughtcrime.securesms;
+import android.content.BroadcastReceiver;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.IntentFilter;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
@@ -26,16 +29,27 @@
import org.thoughtcrime.securesms.color.MaterialColor;
import org.thoughtcrime.securesms.color.MaterialColors;
import org.thoughtcrime.securesms.components.AvatarImageView;
+import org.thoughtcrime.securesms.crypto.IdentityKeyParcelable;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.database.DatabaseFactory;
+import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.RecipientPreferenceDatabase.VibrateState;
+import org.thoughtcrime.securesms.jobs.MultiDeviceBlockedUpdateJob;
+import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob;
import org.thoughtcrime.securesms.preferences.AdvancedRingtonePreference;
import org.thoughtcrime.securesms.preferences.ColorPreference;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.Recipients;
+import org.thoughtcrime.securesms.util.DirectoryHelper;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.DynamicTheme;
+import org.thoughtcrime.securesms.util.IdentityUtil;
+import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
+import org.whispersystems.libsignal.IdentityKey;
+import org.whispersystems.libsignal.util.guava.Optional;
+
+import java.util.concurrent.ExecutionException;
public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActivity implements Recipients.RecipientsModifiedListener
{
@@ -53,10 +67,11 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
- private AvatarImageView avatar;
- private Toolbar toolbar;
- private TextView title;
- private TextView blockedIndicator;
+ private AvatarImageView avatar;
+ private Toolbar toolbar;
+ private TextView title;
+ private TextView blockedIndicator;
+ private BroadcastReceiver staleReceiver;
@Override
public void onPreCreate() {
@@ -72,6 +87,7 @@ public void onCreate(Bundle instanceState, @NonNull MasterSecret masterSecret) {
Recipients recipients = RecipientFactory.getRecipientsForIds(this, recipientIds, true);
initializeToolbar();
+ initializeReceivers();
setHeader(recipients);
recipients.addListener(this);
@@ -87,6 +103,12 @@ public void onResume() {
dynamicLanguage.onResume(this);
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ unregisterReceiver(staleReceiver);
+ }
+
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
@@ -108,6 +130,8 @@ public boolean onOptionsItemSelected(MenuItem item) {
private void initializeToolbar() {
this.toolbar = (Toolbar) findViewById(R.id.toolbar);
+ this.toolbar.setLogo(null);
+
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -118,6 +142,23 @@ private void initializeToolbar() {
this.blockedIndicator = (TextView) toolbar.findViewById(R.id.blocked_indicator);
}
+ private void initializeReceivers() {
+ this.staleReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ Recipients recipients = RecipientFactory.getRecipientsForIds(context, getIntent().getLongArrayExtra(RECIPIENTS_EXTRA), true);
+ recipients.addListener(RecipientPreferenceActivity.this);
+ onModified(recipients);
+ }
+ };
+
+ IntentFilter staleFilter = new IntentFilter();
+ staleFilter.addAction(GroupDatabase.DATABASE_UPDATE_ACTION);
+ staleFilter.addAction(RecipientFactory.RECIPIENT_CLEAR_ACTION);
+
+ registerReceiver(staleReceiver, staleFilter);
+ }
+
private void setHeader(Recipients recipients) {
this.avatar.setAvatar(recipients, true);
this.title.setText(recipients.toShortString());
@@ -148,19 +189,19 @@ public static class RecipientPreferenceFragment
private final Handler handler = new Handler();
- private Recipients recipients;
+ private Recipients recipients;
+ private BroadcastReceiver staleReceiver;
+ private MasterSecret masterSecret;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.recipient_preferences);
+ initializeRecipients();
- this.recipients = RecipientFactory.getRecipientsForIds(getActivity(),
- getArguments().getLongArray(RECIPIENTS_EXTRA),
- true);
+ this.masterSecret = getArguments().getParcelable("master_secret");
- this.recipients.addListener(this);
this.findPreference(PREFERENCE_TONE)
.setOnPreferenceChangeListener(new RingtoneChangeListener());
this.findPreference(PREFERENCE_VIBRATE)
@@ -171,8 +212,6 @@ public void onCreate(Bundle icicle) {
.setOnPreferenceClickListener(new BlockClickedListener());
this.findPreference(PREFERENCE_COLOR)
.setOnPreferenceChangeListener(new ColorChangeListener());
- this.findPreference(PREFERENCE_IDENTITY)
- .setOnPreferenceClickListener(new IdentityClickedListener());
}
@Override
@@ -185,6 +224,30 @@ public void onResume() {
public void onDestroy() {
super.onDestroy();
this.recipients.removeListener(this);
+ getActivity().unregisterReceiver(staleReceiver);
+ }
+
+ private void initializeRecipients() {
+ this.recipients = RecipientFactory.getRecipientsForIds(getActivity(),
+ getArguments().getLongArray(RECIPIENTS_EXTRA),
+ true);
+
+ this.recipients.addListener(this);
+
+ this.staleReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ recipients.removeListener(RecipientPreferenceFragment.this);
+ recipients = RecipientFactory.getRecipientsForIds(getActivity(), getArguments().getLongArray(RECIPIENTS_EXTRA), true);
+ onModified(recipients);
+ }
+ };
+
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(GroupDatabase.DATABASE_UPDATE_ACTION);
+ intentFilter.addAction(RecipientFactory.RECIPIENT_CLEAR_ACTION);
+
+ getActivity().registerReceiver(staleReceiver, intentFilter);
}
private void setSummaries(Recipients recipients) {
@@ -193,7 +256,7 @@ private void setSummaries(Recipients recipients) {
ListPreference vibratePreference = (ListPreference) this.findPreference(PREFERENCE_VIBRATE);
ColorPreference colorPreference = (ColorPreference) this.findPreference(PREFERENCE_COLOR);
Preference blockPreference = this.findPreference(PREFERENCE_BLOCK);
- Preference identityPreference = this.findPreference(PREFERENCE_IDENTITY);
+ final Preference identityPreference = this.findPreference(PREFERENCE_IDENTITY);
mutePreference.setChecked(recipients.isMuted());
@@ -229,6 +292,23 @@ private void setSummaries(Recipients recipients) {
if (recipients.isBlocked()) blockPreference.setTitle(R.string.RecipientPreferenceActivity_unblock);
else blockPreference.setTitle(R.string.RecipientPreferenceActivity_block);
+
+ IdentityUtil.getRemoteIdentityKey(getActivity(), masterSecret, recipients.getPrimaryRecipient()).addListener(new ListenableFuture.Listener>() {
+ @Override
+ public void onSuccess(Optional result) {
+ if (result.isPresent()) {
+ if (identityPreference != null) identityPreference.setOnPreferenceClickListener(new IdentityClickedListener(result.get()));
+ if (identityPreference != null) identityPreference.setEnabled(true);
+ } else {
+ if (identityPreference != null) getPreferenceScreen().removePreference(identityPreference);
+ }
+ }
+
+ @Override
+ public void onFailure(ExecutionException e) {
+ if (identityPreference != null) getPreferenceScreen().removePreference(identityPreference);
+ }
+ });
}
}
@@ -307,8 +387,17 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
new AsyncTask() {
@Override
protected Void doInBackground(Void... params) {
- DatabaseFactory.getRecipientPreferenceDatabase(getActivity())
+ Context context = getActivity();
+ DatabaseFactory.getRecipientPreferenceDatabase(context)
.setColor(recipients, selectedColor);
+
+ if (DirectoryHelper.getUserCapabilities(context, recipients)
+ .getTextCapability() == DirectoryHelper.UserCapabilities.Capability.SUPPORTED)
+ {
+ ApplicationContext.getInstance(context)
+ .getJobManager()
+ .add(new MultiDeviceContactUpdateJob(context, recipients.getPrimaryRecipient().getRecipientId()));
+ }
return null;
}
}.execute();
@@ -356,10 +445,18 @@ protected Void doInBackground(Void... params) {
}
private class IdentityClickedListener implements Preference.OnPreferenceClickListener {
+
+ private final IdentityKey identityKey;
+
+ private IdentityClickedListener(IdentityKey identityKey) {
+ this.identityKey = identityKey;
+ }
+
@Override
public boolean onPreferenceClick(Preference preference) {
Intent verifyIdentityIntent = new Intent(getActivity(), VerifyIdentityActivity.class);
- verifyIdentityIntent.putExtra("recipient", recipients.getPrimaryRecipient().getRecipientId());
+ verifyIdentityIntent.putExtra(VerifyIdentityActivity.RECIPIENT_ID, recipients.getPrimaryRecipient().getRecipientId());
+ verifyIdentityIntent.putExtra(VerifyIdentityActivity.RECIPIENT_IDENTITY, new IdentityKeyParcelable(identityKey));
startActivity(verifyIdentityIntent);
return true;
@@ -378,7 +475,7 @@ public boolean onPreferenceClick(Preference preference) {
private void handleBlock() {
new AlertDialog.Builder(getActivity())
.setTitle(R.string.RecipientPreferenceActivity_block_this_contact_question)
- .setMessage(R.string.RecipientPreferenceActivity_you_will_no_longer_receive_messages_or_calls_from_this_user)
+ .setMessage(R.string.RecipientPreferenceActivity_you_will_no_longer_receive_messages_and_calls_from_this_contact)
.setCancelable(true)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(R.string.RecipientPreferenceActivity_block, new DialogInterface.OnClickListener() {
@@ -392,7 +489,7 @@ public void onClick(DialogInterface dialog, int which) {
private void handleUnblock() {
new AlertDialog.Builder(getActivity())
.setTitle(R.string.RecipientPreferenceActivity_unblock_this_contact_question)
- .setMessage(R.string.RecipientPreferenceActivity_are_you_sure_you_want_to_unblock_this_contact)
+ .setMessage(R.string.RecipientPreferenceActivity_you_will_once_again_be_able_to_receive_messages_and_calls_from_this_contact)
.setCancelable(true)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(R.string.RecipientPreferenceActivity_unblock, new DialogInterface.OnClickListener() {
@@ -409,8 +506,14 @@ private void setBlocked(final Recipients recipients, final boolean blocked) {
new AsyncTask() {
@Override
protected Void doInBackground(Void... params) {
- DatabaseFactory.getRecipientPreferenceDatabase(getActivity())
+ Context context = getActivity();
+
+ DatabaseFactory.getRecipientPreferenceDatabase(context)
.setBlocked(recipients, blocked);
+
+ ApplicationContext.getInstance(context)
+ .getJobManager()
+ .add(new MultiDeviceBlockedUpdateJob(context));
return null;
}
}.execute();
diff --git a/src/org/thoughtcrime/securesms/RegistrationActivity.java b/src/org/thoughtcrime/securesms/RegistrationActivity.java
index 45261ac6f1c..df909d2cea8 100644
--- a/src/org/thoughtcrime/securesms/RegistrationActivity.java
+++ b/src/org/thoughtcrime/securesms/RegistrationActivity.java
@@ -1,5 +1,6 @@
package org.thoughtcrime.securesms;
+import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
@@ -9,6 +10,7 @@
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
+import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
@@ -17,19 +19,16 @@
import android.widget.TextView;
import android.widget.Toast;
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.i18n.phonenumbers.AsYouTypeFormatter;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
-import org.thoughtcrime.securesms.BuildConfig;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.util.Dialogs;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
+import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
/**
* The register account activity. Prompts ths user for their registration information
@@ -41,6 +40,7 @@
public class RegistrationActivity extends BaseActionBarActivity {
private static final int PICK_COUNTRY = 1;
+ private static final String TAG = RegistrationActivity.class.getSimpleName();
private AsYouTypeFormatter countryFormatter;
private ArrayAdapter countrySpinnerAdapter;
@@ -99,7 +99,11 @@ public void onClick(View v) {
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse("https://twilio.com"));
- startActivity(intent);
+ try {
+ startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ Log.w(TAG,e);
+ }
}
});
}
@@ -121,6 +125,17 @@ public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
+ this.countrySpinner.setOnKeyListener(new View.OnKeyListener() {
+ @Override
+ public boolean onKey(View v, int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER && event.getAction() == KeyEvent.ACTION_UP) {
+ Intent intent = new Intent(RegistrationActivity.this, CountrySelectionActivity.class);
+ startActivityForResult(intent, PICK_COUNTRY);
+ return true;
+ }
+ return false;
+ }
+ });
}
private void initializeNumber() {
@@ -143,7 +158,7 @@ private void initializeNumber() {
}
}
} catch (NumberParseException npe) {
- Log.w("CreateAccountActivity", npe);
+ Log.w(TAG, npe);
}
}
@@ -194,36 +209,6 @@ public void onClick(View v) {
return;
}
- int gcmStatus = GooglePlayServicesUtil.isGooglePlayServicesAvailable(self);
-
- if (gcmStatus != ConnectionResult.SUCCESS) {
- if(BuildConfig.FORCE_WEBSOCKETS) {
- AlertDialog.Builder unsupportedDialog = new AlertDialog.Builder(self);
- unsupportedDialog.setTitle(getString(R.string.RegistrationActivity_unsupported));
- unsupportedDialog.setMessage(getString(R.string.RegistrationActivity_websockets_only_unsupported));
- unsupportedDialog.setPositiveButton(getString(R.string.RegistrationActivity_I_understand),
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- showDoubleCheckDialog(self,e164number);
- }
- });
- unsupportedDialog.show();
- } else if (GooglePlayServicesUtil.isUserRecoverableError(gcmStatus)) {
- GooglePlayServicesUtil.getErrorDialog(gcmStatus, self, 9000).show();
- return;
- } else {
- Dialogs.showAlertDialog(self, getString(R.string.RegistrationActivity_unsupported),
- getString(R.string.RegistrationActivity_sorry_this_device_is_not_supported_for_data_messaging));
- return;
- }
- } else {
- showDoubleCheckDialog(self,e164number);
- }
- }
- }
-
- private void showDoubleCheckDialog(final RegistrationActivity self, final String e164number){
AlertDialog.Builder dialog = new AlertDialog.Builder(self);
dialog.setTitle(PhoneNumberFormatter.getInternationalFormatFromE164(e164number));
dialog.setMessage(R.string.RegistrationActivity_we_will_now_verify_that_the_following_number_is_associated_with_your_device_s);
@@ -240,6 +225,7 @@ public void onClick(DialogInterface dialog, int which) {
});
dialog.setNegativeButton(getString(R.string.RegistrationActivity_edit), null);
dialog.show();
+ }
}
private class CountryCodeChangedListener implements TextWatcher {
diff --git a/src/org/thoughtcrime/securesms/RegistrationProgressActivity.java b/src/org/thoughtcrime/securesms/RegistrationProgressActivity.java
index f5cab96f01b..5c14bf4043c 100644
--- a/src/org/thoughtcrime/securesms/RegistrationProgressActivity.java
+++ b/src/org/thoughtcrime/securesms/RegistrationProgressActivity.java
@@ -32,15 +32,15 @@
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob;
-import org.thoughtcrime.securesms.push.TextSecureCommunicationFactory;
+import org.thoughtcrime.securesms.push.AccountManagerFactory;
import org.thoughtcrime.securesms.service.RegistrationService;
import org.thoughtcrime.securesms.util.Dialogs;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.textsecure.api.TextSecureAccountManager;
-import org.whispersystems.textsecure.api.push.exceptions.ExpectationFailedException;
-import org.whispersystems.textsecure.api.push.exceptions.RateLimitException;
-import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
+import org.whispersystems.signalservice.api.SignalServiceAccountManager;
+import org.whispersystems.signalservice.api.push.exceptions.ExpectationFailedException;
+import org.whispersystems.signalservice.api.push.exceptions.RateLimitException;
+import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
import java.io.IOException;
@@ -521,8 +521,8 @@ protected void onPostExecute(Integer result) {
@Override
protected Integer doInBackground(Void... params) {
try {
- TextSecureAccountManager accountManager = TextSecureCommunicationFactory.createManager(context, e164number, password);
- int registrationId = TextSecurePreferences.getLocalRegistrationId(context);
+ SignalServiceAccountManager accountManager = AccountManagerFactory.createManager(context, e164number, password);
+ int registrationId = TextSecurePreferences.getLocalRegistrationId(context);
accountManager.verifyAccountWithCode(code, signalingKey, true, registrationId, true);
return SUCCESS;
@@ -613,15 +613,15 @@ public void run() {
@Override
protected Integer doInBackground(Void... params) {
try {
- TextSecureAccountManager accountManager = TextSecureCommunicationFactory.createManager(context, e164number, password);
+ SignalServiceAccountManager accountManager = AccountManagerFactory.createManager(context, e164number, password);
accountManager.requestVoiceVerificationCode();
return SUCCESS;
} catch (RateLimitException e) {
- Log.w("RegistrationProgressActivity", e);
+ Log.w("RegProgressActivity", e);
return RATE_LIMIT_EXCEEDED;
} catch (IOException e) {
- Log.w("RegistrationProgressActivity", e);
+ Log.w("RegProgressActivity", e);
return NETWORK_ERROR;
}
}
diff --git a/src/org/thoughtcrime/securesms/ShareActivity.java b/src/org/thoughtcrime/securesms/ShareActivity.java
index 367c15c4890..c9dfbfa7660 100644
--- a/src/org/thoughtcrime/securesms/ShareActivity.java
+++ b/src/org/thoughtcrime/securesms/ShareActivity.java
@@ -21,8 +21,15 @@
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
+import android.os.Build;
import android.os.Bundle;
+import android.os.ParcelFileDescriptor;
+import android.os.Process;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.system.StructStat;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
@@ -36,9 +43,13 @@
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme;
+import org.thoughtcrime.securesms.util.FileUtils;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.ViewUtil;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
@@ -59,6 +70,7 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity
private ViewGroup fragmentContainer;
private View progressWheel;
private Uri resolvedExtra;
+ private String mimeType;
private boolean isPassingAlongMedia;
@Override
@@ -110,6 +122,7 @@ private void initializeMedia() {
isPassingAlongMedia = false;
Uri streamExtra = getIntent().getParcelableExtra(Intent.EXTRA_STREAM);
+ mimeType = getMimeType(streamExtra);
if (streamExtra != null && PartAuthority.isLocalUri(streamExtra)) {
isPassingAlongMedia = true;
resolvedExtra = streamExtra;
@@ -166,19 +179,18 @@ private void createConversation(long threadId, Recipients recipients, int distri
private Intent getBaseShareIntent(final @NonNull Class> target) {
final Intent intent = new Intent(this, target);
final String textExtra = getIntent().getStringExtra(Intent.EXTRA_TEXT);
- final Uri streamExtra = getIntent().getParcelableExtra(Intent.EXTRA_STREAM);
- final String type = streamExtra != null ? getMimeType(streamExtra)
- : MediaUtil.getCorrectedMimeType(getIntent().getType());
intent.putExtra(ConversationActivity.TEXT_EXTRA, textExtra);
- if (resolvedExtra != null) intent.setDataAndType(resolvedExtra, type);
+ if (resolvedExtra != null) intent.setDataAndType(resolvedExtra, mimeType);
return intent;
}
- private String getMimeType(Uri uri) {
- final String type = MediaUtil.getMimeType(getApplicationContext(), uri);
- return type == null ? MediaUtil.getCorrectedMimeType(getIntent().getType())
- : type;
+ private String getMimeType(@Nullable Uri uri) {
+ if (uri != null) {
+ final String mimeType = MediaUtil.getMimeType(getApplicationContext(), uri);
+ if (mimeType != null) return mimeType;
+ }
+ return MediaUtil.getCorrectedMimeType(getIntent().getType());
}
private class ResolveMediaTask extends AsyncTask {
@@ -195,12 +207,19 @@ protected Uri doInBackground(Uri... uris) {
return null;
}
- InputStream input = context.getContentResolver().openInputStream(uris[0]);
- if (input == null) {
+ InputStream inputStream;
+
+ if ("file".equals(uris[0].getScheme())) {
+ inputStream = openFileUri(uris[0]);
+ } else {
+ inputStream = context.getContentResolver().openInputStream(uris[0]);
+ }
+
+ if (inputStream == null) {
return null;
}
- return PersistentBlobProvider.getInstance(context).create(masterSecret, input);
+ return PersistentBlobProvider.getInstance(context).create(masterSecret, inputStream, mimeType);
} catch (IOException ioe) {
Log.w(TAG, ioe);
return null;
@@ -213,5 +232,17 @@ protected void onPostExecute(Uri uri) {
ViewUtil.fadeIn(fragmentContainer, 300);
ViewUtil.fadeOut(progressWheel, 300);
}
+
+ private InputStream openFileUri(Uri uri) throws IOException {
+ FileInputStream fin = new FileInputStream(uri.getPath());
+ int owner = FileUtils.getFileDescriptorOwner(fin.getFD());
+
+ if (owner == -1 || owner == Process.myUid()) {
+ fin.close();
+ throw new IOException("File owned by application");
+ }
+
+ return fin;
+ }
}
}
\ No newline at end of file
diff --git a/src/org/thoughtcrime/securesms/TransportOption.java b/src/org/thoughtcrime/securesms/TransportOption.java
index 7d91d1c04ad..22ba41d62ca 100644
--- a/src/org/thoughtcrime/securesms/TransportOption.java
+++ b/src/org/thoughtcrime/securesms/TransportOption.java
@@ -5,7 +5,7 @@
import org.thoughtcrime.securesms.util.CharacterCalculator;
import org.thoughtcrime.securesms.util.CharacterCalculator.CharacterState;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
public class TransportOption {
@@ -66,8 +66,8 @@ public boolean isSms() {
return type == Type.SMS;
}
- public CharacterState calculateCharacters(int charactersSpent) {
- return characterCalculator.calculateCharacters(charactersSpent);
+ public CharacterState calculateCharacters(String messageBody) {
+ return characterCalculator.calculateCharacters(messageBody);
}
public @DrawableRes int getDrawable() {
diff --git a/src/org/thoughtcrime/securesms/TransportOptions.java b/src/org/thoughtcrime/securesms/TransportOptions.java
index ccbc66143cf..a8aca89b3ee 100644
--- a/src/org/thoughtcrime/securesms/TransportOptions.java
+++ b/src/org/thoughtcrime/securesms/TransportOptions.java
@@ -10,7 +10,7 @@
import org.thoughtcrime.securesms.util.SmsCharacterCalculator;
import org.thoughtcrime.securesms.util.dualsim.SubscriptionInfoCompat;
import org.thoughtcrime.securesms.util.dualsim.SubscriptionManagerCompat;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.util.LinkedList;
import java.util.List;
diff --git a/src/org/thoughtcrime/securesms/VerifyIdentityActivity.java b/src/org/thoughtcrime/securesms/VerifyIdentityActivity.java
index a212fd6329d..4e81321cabc 100644
--- a/src/org/thoughtcrime/securesms/VerifyIdentityActivity.java
+++ b/src/org/thoughtcrime/securesms/VerifyIdentityActivity.java
@@ -1,6 +1,5 @@
/**
- * Copyright (C) 2011 Whisper Systems
- * Copyright (C) 2013 Open Whisper Systems
+ * Copyright (C) 2016 Open Whisper Systems
*
* 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
@@ -17,154 +16,517 @@
*/
package org.thoughtcrime.securesms;
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Build;
import android.os.Bundle;
+import android.os.Vibrator;
+import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentTransaction;
+import android.text.Html;
+import android.text.TextUtils;
+import android.text.method.LinkMovementMethod;
+import android.util.Log;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.AnticipateInterpolator;
+import android.view.animation.OvershootInterpolator;
+import android.view.animation.ScaleAnimation;
+import android.widget.AdapterView;
+import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
+import org.thoughtcrime.securesms.color.MaterialColor;
+import org.thoughtcrime.securesms.components.camera.CameraView;
import org.thoughtcrime.securesms.crypto.IdentityKeyParcelable;
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
import org.thoughtcrime.securesms.crypto.MasterSecret;
-import org.thoughtcrime.securesms.crypto.storage.TextSecureSessionStore;
+import org.thoughtcrime.securesms.qr.QrCode;
+import org.thoughtcrime.securesms.qr.ScanListener;
+import org.thoughtcrime.securesms.qr.ScanningThread;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
-import org.whispersystems.libaxolotl.AxolotlAddress;
-import org.whispersystems.libaxolotl.IdentityKey;
-import org.whispersystems.libaxolotl.state.SessionRecord;
-import org.whispersystems.libaxolotl.state.SessionStore;
-import org.whispersystems.textsecure.api.push.TextSecureAddress;
+import org.thoughtcrime.securesms.recipients.Recipients;
+import org.thoughtcrime.securesms.util.DynamicLanguage;
+import org.thoughtcrime.securesms.util.DynamicTheme;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
+import org.thoughtcrime.securesms.util.Util;
+import org.thoughtcrime.securesms.util.ViewUtil;
+import org.whispersystems.libsignal.IdentityKey;
+import org.whispersystems.libsignal.fingerprint.Fingerprint;
+import org.whispersystems.libsignal.fingerprint.FingerprintIdentifierMismatchException;
+import org.whispersystems.libsignal.fingerprint.FingerprintParsingException;
+import org.whispersystems.libsignal.fingerprint.FingerprintVersionMismatchException;
+import org.whispersystems.libsignal.fingerprint.NumericFingerprintGenerator;
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
/**
* Activity for verifying identity keys.
*
* @author Moxie Marlinspike
*/
-public class VerifyIdentityActivity extends KeyScanningActivity {
+public class VerifyIdentityActivity extends PassphraseRequiredActionBarActivity implements Recipient.RecipientModifiedListener, ScanListener, View.OnClickListener {
- private Recipient recipient;
- private MasterSecret masterSecret;
+ private static final String TAG = VerifyIdentityActivity.class.getSimpleName();
- private TextView localIdentityFingerprint;
- private TextView remoteIdentityFingerprint;
+ public static final String RECIPIENT_ID = "recipient_id";
+ public static final String RECIPIENT_IDENTITY = "recipient_identity";
- @Override
- protected void onCreate(Bundle state, @NonNull MasterSecret masterSecret) {
- this.masterSecret = masterSecret;
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getSupportActionBar().setTitle(R.string.AndroidManifest__verify_identity);
+ private final DynamicTheme dynamicTheme = new DynamicTheme();
+ private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
- setContentView(R.layout.verify_identity_activity);
+ private VerifyDisplayFragment displayFragment = new VerifyDisplayFragment();
+ private VerifyScanFragment scanFragment = new VerifyScanFragment();
- this.localIdentityFingerprint = (TextView)findViewById(R.id.you_read);
- this.remoteIdentityFingerprint = (TextView)findViewById(R.id.friend_reads);
+ @Override
+ public void onPreCreate() {
+ dynamicTheme.onCreate(this);
+ dynamicLanguage.onCreate(this);
}
@Override
- public void onResume() {
- super.onResume();
+ protected void onCreate(Bundle state, @NonNull MasterSecret masterSecret) {
+ try {
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setTitle(R.string.AndroidManifest__verify_safety_number);
- this.recipient = RecipientFactory.getRecipientForId(this, this.getIntent().getLongExtra("recipient", -1), true);
+ Recipient recipient = RecipientFactory.getRecipientForId(this, getIntent().getLongExtra(RECIPIENT_ID, -1), true);
+ recipient.addListener(this);
- initializeFingerprints();
- }
+ setActionBarNotificationBarColor(recipient.getColor());
- private void initializeFingerprints() {
- if (!IdentityKeyUtil.hasIdentityKey(this)) {
- localIdentityFingerprint.setText(R.string.VerifyIdentityActivity_you_do_not_have_an_identity_key);
- return;
- }
+ Bundle extras = new Bundle();
+ extras.putParcelable(VerifyDisplayFragment.REMOTE_IDENTITY, getIntent().getParcelableExtra(RECIPIENT_IDENTITY));
+ extras.putString(VerifyDisplayFragment.REMOTE_NUMBER, Util.canonicalizeNumber(this, recipient.getNumber()));
+ extras.putParcelable(VerifyDisplayFragment.LOCAL_IDENTITY, new IdentityKeyParcelable(IdentityKeyUtil.getIdentityKey(this)));
+ extras.putString(VerifyDisplayFragment.LOCAL_NUMBER, TextSecurePreferences.getLocalNumber(this));
- localIdentityFingerprint.setText(IdentityKeyUtil.getIdentityKey(this).getFingerprint());
+ scanFragment.setScanListener(this);
+ displayFragment.setClickListener(this);
- IdentityKey identityKey = getRemoteIdentityKey(masterSecret, recipient);
-
- if (identityKey == null) {
- remoteIdentityFingerprint.setText(R.string.VerifyIdentityActivity_recipient_has_no_identity_key);
- } else {
- remoteIdentityFingerprint.setText(identityKey.getFingerprint());
+ initFragment(android.R.id.content, displayFragment, masterSecret, dynamicLanguage.getCurrentLocale(), extras);
+ } catch (InvalidNumberException e) {
+ Log.w(TAG, e);
+ finish();
}
}
@Override
- protected void initiateDisplay() {
- if (!IdentityKeyUtil.hasIdentityKey(this)) {
- Toast.makeText(this,
- R.string.VerifyIdentityActivity_you_don_t_have_an_identity_key_exclamation,
- Toast.LENGTH_LONG).show();
- return;
- }
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ super.onPrepareOptionsMenu(menu);
+
+ menu.clear();
+ MenuInflater inflater = this.getMenuInflater();
+ inflater.inflate(R.menu.verify_identity, menu);
- super.initiateDisplay();
+ return true;
}
@Override
- protected void initiateScan() {
- IdentityKey identityKey = getRemoteIdentityKey(masterSecret, recipient);
-
- if (identityKey == null) {
- Toast.makeText(this, R.string.VerifyIdentityActivity_recipient_has_no_identity_key_exclamation,
- Toast.LENGTH_LONG).show();
- } else {
- super.initiateScan();
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.verify_identity__share: handleShare(); return true;
+ case android.R.id.home: finish(); return true;
}
- }
- @Override
- protected String getScanString() {
- return getString(R.string.VerifyIdentityActivity_scan_contacts_qr_code);
+ return false;
}
@Override
- protected String getDisplayString() {
- return getString(R.string.VerifyIdentityActivity_display_your_qr_code);
+ public void onModified(final Recipient recipient) {
+ Util.runOnMain(new Runnable() {
+ @Override
+ public void run() {
+ setActionBarNotificationBarColor(recipient.getColor());
+ }
+ });
}
@Override
- protected IdentityKey getIdentityKeyToCompare() {
- return getRemoteIdentityKey(masterSecret, recipient);
+ public void onQrDataFound(final String data) {
+ Util.runOnMain(new Runnable() {
+ @Override
+ public void run() {
+ ((Vibrator)getSystemService(Context.VIBRATOR_SERVICE)).vibrate(50);
+
+ getSupportFragmentManager().popBackStack();
+ displayFragment.setScannedFingerprint(data);
+ }
+ });
}
@Override
- protected IdentityKey getIdentityKeyToDisplay() {
- return IdentityKeyUtil.getIdentityKey(this);
+ public void onClick(View v) {
+ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+ transaction.setCustomAnimations(R.anim.slide_from_top, R.anim.slide_to_bottom,
+ R.anim.slide_from_bottom, R.anim.slide_to_top);
+
+ transaction.replace(android.R.id.content, scanFragment)
+ .addToBackStack(null)
+ .commit();
}
- @Override
- protected String getNotVerifiedMessage() {
- return getString(R.string.VerifyIdentityActivity_warning_the_scanned_key_does_not_match_please_check_the_fingerprint_text_carefully);
- }
+ private void setActionBarNotificationBarColor(MaterialColor color) {
+ getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color.toActionBarColor(this)));
- @Override
- protected String getNotVerifiedTitle() {
- return getString(R.string.VerifyIdentityActivity_not_verified_exclamation);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ getWindow().setStatusBarColor(color.toStatusBarColor(this));
+ }
}
- @Override
- protected String getVerifiedMessage() {
- return getString(R.string.VerifyIdentityActivity_their_key_is_correct_it_is_also_necessary_to_verify_your_key_with_them_as_well);
+ private void handleShare() {
+ String shareString =
+ getString(R.string.VerifyIdentityActivity_our_signal_safety_number) + "\n" +
+ displayFragment.getFormattedSafetyNumbers() + "\n";
+
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_SEND);
+ intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.VerifyIdentityActivity_our_signal_safety_number));
+ intent.putExtra(Intent.EXTRA_TEXT, shareString);
+ intent.setType("text/plain");
+
+ try {
+ startActivity(Intent.createChooser(intent, getString(R.string.VerifyIdentityActivity_share_safety_number_via)));
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(VerifyIdentityActivity.this, R.string.VerifyIdentityActivity_no_app_to_share_to, Toast.LENGTH_LONG).show();
+ }
}
- @Override
- protected String getVerifiedTitle() {
- return getString(R.string.VerifyIdentityActivity_verified_exclamation);
+
+ public static class VerifyDisplayFragment extends Fragment implements Recipients.RecipientsModifiedListener {
+
+ public static final String REMOTE_NUMBER = "remote_number";
+ public static final String REMOTE_IDENTITY = "remote_identity";
+ public static final String LOCAL_IDENTITY = "local_identity";
+ public static final String LOCAL_NUMBER = "local_number";
+
+ private Recipients recipient;
+ private String localNumber;
+ private String remoteNumber;
+
+ private IdentityKey localIdentity;
+ private IdentityKey remoteIdentity;
+
+ private Fingerprint fingerprint;
+
+ private View container;
+ private View numbersContainer;
+ private ImageView qrCode;
+ private ImageView qrVerified;
+ private TextView description;
+ private View.OnClickListener clickListener;
+
+ private TextView[] codes = new TextView[12];
+ private boolean animateSuccessOnDraw = false;
+ private boolean animateFailureOnDraw = false;
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) {
+ this.container = ViewUtil.inflate(inflater, viewGroup, R.layout.verify_display_fragment);
+ this.numbersContainer = ViewUtil.findById(container, R.id.number_table);
+ this.qrCode = ViewUtil.findById(container, R.id.qr_code);
+ this.qrVerified = ViewUtil.findById(container, R.id.qr_verified);
+ this.description = ViewUtil.findById(container, R.id.description);
+ this.codes[0] = ViewUtil.findById(container, R.id.code_first);
+ this.codes[1] = ViewUtil.findById(container, R.id.code_second);
+ this.codes[2] = ViewUtil.findById(container, R.id.code_third);
+ this.codes[3] = ViewUtil.findById(container, R.id.code_fourth);
+ this.codes[4] = ViewUtil.findById(container, R.id.code_fifth);
+ this.codes[5] = ViewUtil.findById(container, R.id.code_sixth);
+ this.codes[6] = ViewUtil.findById(container, R.id.code_seventh);
+ this.codes[7] = ViewUtil.findById(container, R.id.code_eighth);
+ this.codes[8] = ViewUtil.findById(container, R.id.code_ninth);
+ this.codes[9] = ViewUtil.findById(container, R.id.code_tenth);
+ this.codes[10] = ViewUtil.findById(container, R.id.code_eleventh);
+ this.codes[11] = ViewUtil.findById(container, R.id.code_twelth);
+
+ this.qrCode.setOnClickListener(clickListener);
+ this.registerForContextMenu(numbersContainer);
+
+ return container;
+ }
+
+ @Override
+ public void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
+
+ this.localNumber = getArguments().getString(LOCAL_NUMBER);
+ this.localIdentity = ((IdentityKeyParcelable)getArguments().getParcelable(LOCAL_IDENTITY)).get();
+ this.remoteNumber = getArguments().getString(REMOTE_NUMBER);
+ this.recipient = RecipientFactory.getRecipientsFromString(getActivity(), this.remoteNumber, true);
+ this.remoteIdentity = ((IdentityKeyParcelable)getArguments().getParcelable(REMOTE_IDENTITY)).get();
+ this.fingerprint = new NumericFingerprintGenerator(5200).createFor(localNumber, localIdentity,
+ remoteNumber, remoteIdentity);
+
+ this.recipient.addListener(this);
+ }
+
+ @Override
+ public void onModified(Recipients recipients) {
+ Util.runOnMain(new Runnable() {
+ @Override
+ public void run() {
+ setFingerprintViews(fingerprint);
+ }
+ });
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ setFingerprintViews(fingerprint);
+
+ if (animateSuccessOnDraw) {
+ animateSuccessOnDraw = false;
+ animateVerifiedSuccess();
+ } else if (animateFailureOnDraw) {
+ animateFailureOnDraw = false;
+ animateVerifiedFailure();;
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ recipient.removeListener(this);
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View view,
+ ContextMenuInfo menuInfo)
+ {
+ super.onCreateContextMenu(menu, view, menuInfo);
+
+ MenuInflater inflater = getActivity().getMenuInflater();
+ inflater.inflate(R.menu.verify_display_fragment_context_menu, menu);
+
+ }
+
+ @Override
+ public boolean onContextItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_copy: handleCopyToClipboard(); return true;
+ case R.id.menu_compare: handleCompareWithClipboard(); return true;
+ default: return super.onContextItemSelected(item);
+ }
+ }
+
+ public void setScannedFingerprint(String scanned) {
+ try {
+ if (fingerprint.getScannableFingerprint().compareTo(scanned.getBytes("ISO-8859-1"))) {
+ this.animateSuccessOnDraw = true;
+ } else {
+ this.animateFailureOnDraw = true;
+ }
+ } catch (FingerprintVersionMismatchException e) {
+ Log.w(TAG, e);
+ //if (e.getOurVersion() < e.getTheirVersion()) {
+ // Toast.makeText(getActivity(), R.string.VerifyIdentityActivity_your_contact_is_running_a_newer_version_of_Signal, Toast.LENGTH_LONG).show();
+ //} else {
+ Toast.makeText(getActivity(), R.string.VerifyIdentityActivity_your_contact_is_running_an_old_version_of_signal, Toast.LENGTH_LONG).show();
+ //}
+ } catch (FingerprintParsingException e) {
+ Log.w(TAG, e);
+ Toast.makeText(getActivity(), R.string.VerifyIdentityActivity_the_scanned_qr_code_is_not_a_correctly_formatted_safety_number, Toast.LENGTH_LONG).show();
+ } catch (UnsupportedEncodingException e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ public void setClickListener(View.OnClickListener listener) {
+ this.clickListener = listener;
+ }
+
+ public String getFormattedSafetyNumbers() {
+ StringBuilder result = new StringBuilder();
+
+ for (int i = 0; i < codes.length; i++) {
+ result.append(codes[i].getText());
+
+ if (i != codes.length - 1) {
+ if (((i+1) % 4) == 0) result.append('\n');
+ else result.append(' ');
+ }
+ }
+
+ return result.toString();
+ }
+
+ private void handleCopyToClipboard() {
+ Util.writeTextToClipboard(getActivity(), getFormattedSafetyNumbers());
+ }
+
+ private void handleCompareWithClipboard() {
+ String clipboardData = Util.readTextFromClipboard(getActivity());
+
+ if (clipboardData == null) {
+ Toast.makeText(getActivity(), R.string.VerifyIdentityActivity_no_safety_number_to_compare_was_found_in_the_clipboard, Toast.LENGTH_LONG).show();
+ return;
+ }
+
+ String numericClipboardData = clipboardData.replaceAll("\\D", "");
+
+ if (TextUtils.isEmpty(numericClipboardData) || numericClipboardData.length() != 60) {
+ Toast.makeText(getActivity(), R.string.VerifyIdentityActivity_no_safety_number_to_compare_was_found_in_the_clipboard, Toast.LENGTH_LONG).show();
+ return;
+ }
+
+ if (fingerprint.getDisplayableFingerprint().getDisplayText().equals(numericClipboardData)) {
+ animateVerifiedSuccess();
+ } else {
+ animateVerifiedFailure();
+ }
+ }
+
+ private void setFingerprintViews(Fingerprint fingerprint) {
+ String digits = fingerprint.getDisplayableFingerprint().getDisplayText();
+ int partSize = digits.length() / codes.length;
+
+ for (int i=0;i.
- */
-package org.thoughtcrime.securesms;
-
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.widget.TextView;
-
-import org.thoughtcrime.securesms.crypto.MasterSecret;
-import org.whispersystems.libaxolotl.IdentityKey;
-import org.thoughtcrime.securesms.crypto.IdentityKeyParcelable;
-
-/**
- * Activity for displaying an identity key.
- *
- * @author Moxie Marlinspike
- */
-public class ViewIdentityActivity extends KeyScanningActivity {
-
- public static final String IDENTITY_KEY = "identity_key";
- public static final String TITLE = "title";
-
- private TextView identityFingerprint;
- private IdentityKey identityKey;
-
- @Override
- protected void onCreate(Bundle state, @NonNull MasterSecret masterSecret) {
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- setContentView(R.layout.view_identity_activity);
-
- initialize();
- }
-
- protected void initialize() {
- initializeResources();
- initializeFingerprint();
- }
-
- private void initializeFingerprint() {
- if (identityKey == null) {
- identityFingerprint.setText(R.string.ViewIdentityActivity_you_do_not_have_an_identity_key);
- } else {
- identityFingerprint.setText(identityKey.getFingerprint());
- }
- }
-
- private void initializeResources() {
- IdentityKeyParcelable identityKeyParcelable = getIntent().getParcelableExtra(IDENTITY_KEY);
-
- if (identityKeyParcelable == null) {
- throw new AssertionError("No identity key!");
- }
-
- this.identityKey = identityKeyParcelable.get();
- this.identityFingerprint = (TextView)findViewById(R.id.identity_fingerprint);
- String title = getIntent().getStringExtra(TITLE);
-
- if (title != null) {
- getSupportActionBar().setTitle(getIntent().getStringExtra(TITLE));
- }
- }
-
- @Override
- protected String getScanString() {
- return getString(R.string.ViewIdentityActivity_scan_contacts_qr_code);
- }
-
- @Override
- protected String getDisplayString() {
- return getString(R.string.ViewIdentityActivity_display_your_qr_code);
- }
-
- @Override
- protected IdentityKey getIdentityKeyToCompare() {
- return identityKey;
- }
-
- @Override
- protected IdentityKey getIdentityKeyToDisplay() {
- return identityKey;
- }
-
- @Override
- protected String getNotVerifiedMessage() {
- return getString(R.string.ViewIdentityActivity_warning_the_scanned_key_does_not_match_exclamation);
- }
-
- @Override
- protected String getNotVerifiedTitle() {
- return getString(R.string.ViewIdentityActivity_not_verified_exclamation);
- }
-
- @Override
- protected String getVerifiedMessage() {
- return getString(R.string.ViewIdentityActivity_the_scanned_key_matches_exclamation);
- }
-
- @Override
- protected String getVerifiedTitle() {
- return getString(R.string.ViewIdentityActivity_verified_exclamation);
- }
-}
diff --git a/src/org/thoughtcrime/securesms/ViewLocalIdentityActivity.java b/src/org/thoughtcrime/securesms/ViewLocalIdentityActivity.java
deleted file mode 100644
index 676f56124d0..00000000000
--- a/src/org/thoughtcrime/securesms/ViewLocalIdentityActivity.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2011 Whisper Systems
- * Copyright (C) 2013 Open Whisper Systems
- *
- * 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 .
- */
-package org.thoughtcrime.securesms;
-
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-
-import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
-import org.thoughtcrime.securesms.crypto.IdentityKeyParcelable;
-import org.thoughtcrime.securesms.crypto.MasterSecret;
-
-/**
- * Activity that displays the local identity key and offers the option to regenerate it.
- *
- * @author Moxie Marlinspike
- */
-public class ViewLocalIdentityActivity extends ViewIdentityActivity {
-
- @Override
- protected void onCreate(Bundle icicle, @NonNull MasterSecret masterSecret) {
- getIntent().putExtra(ViewIdentityActivity.IDENTITY_KEY,
- new IdentityKeyParcelable(IdentityKeyUtil.getIdentityKey(this)));
- getIntent().putExtra(ViewIdentityActivity.TITLE,
- getString(R.string.ViewIdentityActivity_your_identity_fingerprint));
- super.onCreate(icicle, masterSecret);
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
-
- MenuInflater inflater = this.getMenuInflater();
- inflater.inflate(R.menu.local_identity, menu);
-
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- super.onOptionsItemSelected(item);
-
- switch (item.getItemId()) {
- case android.R.id.home:finish(); return true;
- }
-
- return false;
- }
-}
diff --git a/src/org/thoughtcrime/securesms/attachments/Attachment.java b/src/org/thoughtcrime/securesms/attachments/Attachment.java
index ce579d81e82..c872cc1b257 100644
--- a/src/org/thoughtcrime/securesms/attachments/Attachment.java
+++ b/src/org/thoughtcrime/securesms/attachments/Attachment.java
@@ -1,6 +1,5 @@
package org.thoughtcrime.securesms.attachments;
-import android.graphics.Bitmap;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@@ -23,10 +22,6 @@ public abstract class Attachment {
@Nullable
private final String relay;
- // XXX - This shouldn't be here.
- @Nullable
- private Bitmap thumbnail;
-
public Attachment(@NonNull String contentType, int transferState, long size,
@Nullable String location, @Nullable String key, @Nullable String relay)
{
@@ -76,13 +71,4 @@ public String getKey() {
public String getRelay() {
return relay;
}
-
- public void setThumbnail(@Nullable Bitmap thumbnail) {
- this.thumbnail = thumbnail;
- }
-
- @Nullable
- public Bitmap getThumbnail() {
- return thumbnail;
- }
}
diff --git a/src/org/thoughtcrime/securesms/audio/AudioAttachmentServer.java b/src/org/thoughtcrime/securesms/attachments/AttachmentServer.java
similarity index 97%
rename from src/org/thoughtcrime/securesms/audio/AudioAttachmentServer.java
rename to src/org/thoughtcrime/securesms/attachments/AttachmentServer.java
index dd96d919336..39c0d4e8fdc 100644
--- a/src/org/thoughtcrime/securesms/audio/AudioAttachmentServer.java
+++ b/src/org/thoughtcrime/securesms/attachments/AttachmentServer.java
@@ -1,4 +1,4 @@
-package org.thoughtcrime.securesms.audio;
+package org.thoughtcrime.securesms.attachments;
import android.content.Context;
@@ -7,7 +7,6 @@
import android.util.Log;
import org.spongycastle.util.encoders.Hex;
-import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.util.Util;
@@ -33,9 +32,9 @@
/**
* @author Stefan "frostymarvelous" Froelich
*/
-public class AudioAttachmentServer implements Runnable {
+public class AttachmentServer implements Runnable {
- private static final String TAG = AudioAttachmentServer.class.getSimpleName();
+ private static final String TAG = AttachmentServer.class.getSimpleName();
private final Context context;
private final MasterSecret masterSecret;
@@ -46,7 +45,7 @@ public class AudioAttachmentServer implements Runnable {
private volatile boolean isRunning;
- public AudioAttachmentServer(Context context, MasterSecret masterSecret, Attachment attachment)
+ public AttachmentServer(Context context, MasterSecret masterSecret, Attachment attachment)
throws IOException
{
try {
diff --git a/src/org/thoughtcrime/securesms/attachments/DatabaseAttachment.java b/src/org/thoughtcrime/securesms/attachments/DatabaseAttachment.java
index a8f47be164b..84412c66b57 100644
--- a/src/org/thoughtcrime/securesms/attachments/DatabaseAttachment.java
+++ b/src/org/thoughtcrime/securesms/attachments/DatabaseAttachment.java
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.attachments;
import android.net.Uri;
-import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import org.thoughtcrime.securesms.mms.PartAuthority;
@@ -10,27 +10,38 @@ public class DatabaseAttachment extends Attachment {
private final AttachmentId attachmentId;
private final long mmsId;
private final boolean hasData;
+ private final boolean hasThumbnail;
- public DatabaseAttachment(AttachmentId attachmentId, long mmsId, boolean hasData,
+ public DatabaseAttachment(AttachmentId attachmentId, long mmsId,
+ boolean hasData, boolean hasThumbnail,
String contentType, int transferProgress, long size,
String location, String key, String relay)
{
super(contentType, transferProgress, size, location, key, relay);
this.attachmentId = attachmentId;
this.hasData = hasData;
+ this.hasThumbnail = hasThumbnail;
this.mmsId = mmsId;
}
@Override
- @NonNull
+ @Nullable
public Uri getDataUri() {
- return PartAuthority.getAttachmentDataUri(attachmentId);
+ if (hasData) {
+ return PartAuthority.getAttachmentDataUri(attachmentId);
+ } else {
+ return null;
+ }
}
@Override
- @NonNull
+ @Nullable
public Uri getThumbnailUri() {
- return PartAuthority.getAttachmentThumbnailUri(attachmentId);
+ if (hasThumbnail) {
+ return PartAuthority.getAttachmentThumbnailUri(attachmentId);
+ } else {
+ return null;
+ }
}
public AttachmentId getAttachmentId() {
@@ -56,4 +67,8 @@ public long getMmsId() {
public boolean hasData() {
return hasData;
}
+
+ public boolean hasThumbnail() {
+ return hasThumbnail;
+ }
}
diff --git a/src/org/thoughtcrime/securesms/attachments/PointerAttachment.java b/src/org/thoughtcrime/securesms/attachments/PointerAttachment.java
index 7f666db1099..cf03ee882e2 100644
--- a/src/org/thoughtcrime/securesms/attachments/PointerAttachment.java
+++ b/src/org/thoughtcrime/securesms/attachments/PointerAttachment.java
@@ -7,8 +7,8 @@
import org.thoughtcrime.securesms.crypto.MasterSecretUnion;
import org.thoughtcrime.securesms.crypto.MediaKey;
import org.thoughtcrime.securesms.database.AttachmentDatabase;
-import org.whispersystems.libaxolotl.util.guava.Optional;
-import org.whispersystems.textsecure.api.messages.TextSecureAttachment;
+import org.whispersystems.libsignal.util.guava.Optional;
+import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
import java.util.LinkedList;
import java.util.List;
@@ -34,11 +34,11 @@ public Uri getThumbnailUri() {
}
- public static List forPointers(@NonNull MasterSecretUnion masterSecret, Optional> pointers) {
+ public static List forPointers(@NonNull MasterSecretUnion masterSecret, Optional> pointers) {
List results = new LinkedList<>();
if (pointers.isPresent()) {
- for (TextSecureAttachment pointer : pointers.get()) {
+ for (SignalServiceAttachment pointer : pointers.get()) {
if (pointer.isPointer()) {
String encryptedKey = MediaKey.getEncrypted(masterSecret, pointer.asPointer().getKey());
results.add(new PointerAttachment(pointer.getContentType(),
diff --git a/src/org/thoughtcrime/securesms/attachments/UriAttachment.java b/src/org/thoughtcrime/securesms/attachments/UriAttachment.java
index c7b73bd5287..fdef4178b14 100644
--- a/src/org/thoughtcrime/securesms/attachments/UriAttachment.java
+++ b/src/org/thoughtcrime/securesms/attachments/UriAttachment.java
@@ -1,26 +1,19 @@
package org.thoughtcrime.securesms.attachments;
-import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
-
-import org.thoughtcrime.securesms.crypto.MasterSecret;
-import org.thoughtcrime.securesms.util.MediaUtil;
-import org.whispersystems.libaxolotl.util.guava.Optional;
-
-import java.io.IOException;
-import java.io.InputStream;
+import android.support.annotation.Nullable;
public class UriAttachment extends Attachment {
- private final @NonNull Uri dataUri;
- private final @NonNull Uri thumbnailUri;
+ private final @NonNull Uri dataUri;
+ private final @Nullable Uri thumbnailUri;
public UriAttachment(@NonNull Uri uri, @NonNull String contentType, int transferState, long size) {
this(uri, uri, contentType, transferState, size);
}
- public UriAttachment(@NonNull Uri dataUri, @NonNull Uri thumbnailUri,
+ public UriAttachment(@NonNull Uri dataUri, @Nullable Uri thumbnailUri,
@NonNull String contentType, int transferState, long size)
{
super(contentType, transferState, size, null, null, null);
@@ -35,7 +28,7 @@ public Uri getDataUri() {
}
@Override
- @NonNull
+ @Nullable
public Uri getThumbnailUri() {
return thumbnailUri;
}
diff --git a/src/org/thoughtcrime/securesms/audio/AudioRecorder.java b/src/org/thoughtcrime/securesms/audio/AudioRecorder.java
index 9c1060b5465..d110d8a6144 100644
--- a/src/org/thoughtcrime/securesms/audio/AudioRecorder.java
+++ b/src/org/thoughtcrime/securesms/audio/AudioRecorder.java
@@ -20,6 +20,8 @@
import java.io.IOException;
import java.util.concurrent.ExecutorService;
+import ws.com.google.android.mms.ContentType;
+
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public class AudioRecorder {
@@ -54,7 +56,9 @@ public void run() {
ParcelFileDescriptor fds[] = ParcelFileDescriptor.createPipe();
- captureUri = blobProvider.create(masterSecret, new ParcelFileDescriptor.AutoCloseInputStream(fds[0]));
+ captureUri = blobProvider.create(masterSecret,
+ new ParcelFileDescriptor.AutoCloseInputStream(fds[0]),
+ ContentType.AUDIO_AAC);
audioCodec = new AudioCodec();
audioCodec.start(new ParcelFileDescriptor.AutoCloseOutputStream(fds[1]));
diff --git a/src/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java b/src/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java
index 13f62835d93..03b2dc01a39 100644
--- a/src/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java
+++ b/src/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java
@@ -12,10 +12,11 @@
import android.widget.Toast;
import org.thoughtcrime.securesms.R;
+import org.thoughtcrime.securesms.attachments.AttachmentServer;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.mms.AudioSlide;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.io.IOException;
import java.lang.ref.WeakReference;
@@ -33,7 +34,7 @@ public class AudioSlidePlayer {
private @NonNull WeakReference listener;
private @Nullable MediaPlayer mediaPlayer;
- private @Nullable AudioAttachmentServer audioAttachmentServer;
+ private @Nullable AttachmentServer audioAttachmentServer;
public synchronized static AudioSlidePlayer createFor(@NonNull Context context,
@NonNull MasterSecret masterSecret,
@@ -64,7 +65,7 @@ public void play(final double progress) throws IOException {
if (this.mediaPlayer != null) return;
this.mediaPlayer = new MediaPlayer();
- this.audioAttachmentServer = new AudioAttachmentServer(context, masterSecret, slide.asAttachment());
+ this.audioAttachmentServer = new AttachmentServer(context, masterSecret, slide.asAttachment());
audioAttachmentServer.start();
diff --git a/src/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java b/src/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java
index 43cca287f9e..42902352ab9 100644
--- a/src/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java
+++ b/src/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java
@@ -5,9 +5,11 @@
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
+import android.net.Uri;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.v4.app.LoaderManager;
import android.util.Pair;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -34,6 +36,7 @@ public class AttachmentTypeSelector extends PopupWindow {
public static final int ADD_CONTACT_INFO = 4;
public static final int TAKE_PHOTO = 5;
public static final int ADD_LOCATION = 6;
+ public static final int ADD_GIF = 7;
private static final int ANIMATION_DURATION = 300;
@@ -44,17 +47,19 @@ public class AttachmentTypeSelector extends PopupWindow {
private final @NonNull ImageView videoButton;
private final @NonNull ImageView contactButton;
private final @NonNull ImageView cameraButton;
- private final @NonNull ImageView locationButton;
+ //private final @NonNull ImageView locationButton;
+ private final @NonNull ImageView gifButton;
private final @NonNull ImageView closeButton;
private @Nullable View currentAnchor;
private @Nullable AttachmentClickedListener listener;
- public AttachmentTypeSelector(@NonNull Context context, @Nullable AttachmentClickedListener listener) {
+ public AttachmentTypeSelector(@NonNull Context context, @NonNull LoaderManager loaderManager, @Nullable AttachmentClickedListener listener) {
super(context);
- LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.attachment_type_selector, null, true);
+ LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.attachment_type_selector, null, true);
+ RecentPhotoViewRail recentPhotos = ViewUtil.findById(layout, R.id.recent_photos);
this.listener = listener;
this.imageButton = ViewUtil.findById(layout, R.id.gallery_button);
@@ -62,20 +67,19 @@ public AttachmentTypeSelector(@NonNull Context context, @Nullable AttachmentClic
this.videoButton = ViewUtil.findById(layout, R.id.video_button);
this.contactButton = ViewUtil.findById(layout, R.id.contact_button);
this.cameraButton = ViewUtil.findById(layout, R.id.camera_button);
+ //this.locationButton = ViewUtil.findById(layout, R.id.location_button);
+ this.gifButton = ViewUtil.findById(layout, R.id.giphy_button);
this.closeButton = ViewUtil.findById(layout, R.id.close_button);
- this.locationButton = ViewUtil.findById(layout, R.id.location_button);
this.imageButton.setOnClickListener(new PropagatingClickListener(ADD_IMAGE));
this.audioButton.setOnClickListener(new PropagatingClickListener(ADD_SOUND));
this.videoButton.setOnClickListener(new PropagatingClickListener(ADD_VIDEO));
this.contactButton.setOnClickListener(new PropagatingClickListener(ADD_CONTACT_INFO));
this.cameraButton.setOnClickListener(new PropagatingClickListener(TAKE_PHOTO));
- this.locationButton.setOnClickListener(new PropagatingClickListener(ADD_LOCATION));
+ //this.locationButton.setOnClickListener(new PropagatingClickListener(ADD_LOCATION));
+ this.gifButton.setOnClickListener(new PropagatingClickListener(ADD_GIF));
this.closeButton.setOnClickListener(new CloseClickListener());
-
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
- ViewUtil.findById(layout, R.id.location_linear_layout).setVisibility(View.INVISIBLE);
- }
+ recentPhotos.setListener(new RecentPhotoSelectedListener());
setContentView(layout);
setWidth(LinearLayout.LayoutParams.MATCH_PARENT);
@@ -85,13 +89,14 @@ public AttachmentTypeSelector(@NonNull Context context, @Nullable AttachmentClic
setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
setFocusable(true);
setTouchable(true);
+
+ loaderManager.initLoader(1, null, recentPhotos);
}
public void show(@NonNull Activity activity, final @NonNull View anchor) {
this.currentAnchor = anchor;
- int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
- showAtLocation(anchor, Gravity.NO_GRAVITY, 0, screenHeight - getHeight());
+ showAtLocation(anchor, Gravity.BOTTOM, 0, 0);
getContentView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
@@ -111,8 +116,8 @@ public void onGlobalLayout() {
animateButtonIn(cameraButton, ANIMATION_DURATION / 2);
animateButtonIn(audioButton, ANIMATION_DURATION / 3);
- animateButtonIn(locationButton, ANIMATION_DURATION / 3);
animateButtonIn(videoButton, ANIMATION_DURATION / 4);
+ animateButtonIn(gifButton, ANIMATION_DURATION / 4);
animateButtonIn(contactButton, 0);
animateButtonIn(closeButton, 0);
}
@@ -232,6 +237,15 @@ private Pair getClickOrigin(@Nullable View anchor, @NonNull Vi
return new Pair<>(x, y);
}
+ private class RecentPhotoSelectedListener implements RecentPhotoViewRail.OnItemClickedListener {
+ @Override
+ public void onItemClicked(Uri uri) {
+ animateWindowOutTranslate(getContentView());
+
+ if (listener != null) listener.onQuickAttachment(uri);
+ }
+ }
+
private class PropagatingClickListener implements View.OnClickListener {
private final int type;
@@ -258,6 +272,7 @@ public void onClick(View v) {
public interface AttachmentClickedListener {
public void onClick(int type);
+ public void onQuickAttachment(Uri uri);
}
}
diff --git a/src/org/thoughtcrime/securesms/components/AudioView.java b/src/org/thoughtcrime/securesms/components/AudioView.java
index 041cd15c993..9616f045f10 100644
--- a/src/org/thoughtcrime/securesms/components/AudioView.java
+++ b/src/org/thoughtcrime/securesms/components/AudioView.java
@@ -1,15 +1,19 @@
package org.thoughtcrime.securesms.components;
+import android.annotation.TargetApi;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.PorterDuff;
+import android.graphics.drawable.AnimatedVectorDrawable;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.SeekBar;
@@ -36,6 +40,7 @@ public class AudioView extends FrameLayout implements AudioSlidePlayer.Listener
private static final String TAG = AudioView.class.getSimpleName();
private final @NonNull AnimatingToggle controlToggle;
+ private final @NonNull ViewGroup container;
private final @NonNull ImageView playButton;
private final @NonNull ImageView pauseButton;
private final @NonNull ImageView downloadButton;
@@ -59,6 +64,7 @@ public AudioView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
inflate(context, R.layout.audio_view, this);
+ this.container = (ViewGroup) findViewById(R.id.audio_widget_container);
this.controlToggle = (AnimatingToggle) findViewById(R.id.control_toggle);
this.playButton = (ImageView) findViewById(R.id.play);
this.pauseButton = (ImageView) findViewById(R.id.pause);
@@ -71,9 +77,18 @@ public AudioView(Context context, AttributeSet attrs, int defStyleAttr) {
this.pauseButton.setOnClickListener(new PauseClickedListener());
this.seekBar.setOnSeekBarChangeListener(new SeekBarModifiedListener());
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ this.playButton.setImageDrawable(context.getDrawable(R.drawable.play_icon));
+ this.pauseButton.setImageDrawable(context.getDrawable(R.drawable.pause_icon));
+ this.playButton.setBackground(context.getDrawable(R.drawable.ic_circle_fill_white_48dp));
+ this.pauseButton.setBackground(context.getDrawable(R.drawable.ic_circle_fill_white_48dp));
+ }
+
if (attrs != null) {
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.AudioView, 0, 0);
- setTint(typedArray.getColor(R.styleable.AudioView_tintColor, Color.WHITE));
+ setTint(typedArray.getColor(R.styleable.AudioView_foregroundTintColor, Color.WHITE),
+ typedArray.getColor(R.styleable.AudioView_backgroundTintColor, Color.WHITE));
+ container.setBackgroundColor(typedArray.getColor(R.styleable.AudioView_widgetBackground, Color.TRANSPARENT));
typedArray.recycle();
}
}
@@ -125,12 +140,16 @@ public void setDownloadClickListener(@Nullable SlideClickListener listener) {
@Override
public void onStart() {
- this.controlToggle.display(this.pauseButton);
+ if (this.pauseButton.getVisibility() != View.VISIBLE) {
+ togglePlayToPause();
+ }
}
@Override
public void onStop() {
- this.controlToggle.display(this.playButton);
+ if (this.playButton.getVisibility() != View.VISIBLE) {
+ togglePauseToPlay();
+ }
if (seekBar.getProgress() + 5 >= seekBar.getMax()) {
backwardsCounter = 4;
@@ -153,17 +172,25 @@ public void onProgress(double progress, long millis) {
}
}
- public void setTint(int tint) {
- this.playButton.setColorFilter(tint, PorterDuff.Mode.SRC_IN);
- this.pauseButton.setColorFilter(tint, PorterDuff.Mode.SRC_IN);
- this.downloadButton.setColorFilter(tint, PorterDuff.Mode.SRC_IN);
- this.downloadProgress.setBarColor(tint);
+ public void setTint(int foregroundTint, int backgroundTint) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ this.playButton.setBackgroundTintList(ColorStateList.valueOf(foregroundTint));
+ this.playButton.setImageTintList(ColorStateList.valueOf(backgroundTint));
+ this.pauseButton.setBackgroundTintList(ColorStateList.valueOf(foregroundTint));
+ this.pauseButton.setImageTintList(ColorStateList.valueOf(backgroundTint));
+ } else {
+ this.playButton.setColorFilter(foregroundTint, PorterDuff.Mode.SRC_IN);
+ this.pauseButton.setColorFilter(foregroundTint, PorterDuff.Mode.SRC_IN);
+ }
- this.timestamp.setTextColor(tint);
- this.seekBar.getProgressDrawable().setColorFilter(tint, PorterDuff.Mode.SRC_IN);
+ this.downloadButton.setColorFilter(foregroundTint, PorterDuff.Mode.SRC_IN);
+ this.downloadProgress.setBarColor(foregroundTint);
+
+ this.timestamp.setTextColor(foregroundTint);
+ this.seekBar.getProgressDrawable().setColorFilter(foregroundTint, PorterDuff.Mode.SRC_IN);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- this.seekBar.getThumb().setColorFilter(tint, PorterDuff.Mode.SRC_IN);
+ this.seekBar.getThumb().setColorFilter(foregroundTint, PorterDuff.Mode.SRC_IN);
}
}
@@ -175,13 +202,34 @@ private double getProgress() {
}
}
+ private void togglePlayToPause() {
+ controlToggle.displayQuick(pauseButton);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ AnimatedVectorDrawable playToPauseDrawable = (AnimatedVectorDrawable)getContext().getDrawable(R.drawable.play_to_pause_animation);
+ pauseButton.setImageDrawable(playToPauseDrawable);
+ playToPauseDrawable.start();
+ }
+ }
+
+ private void togglePauseToPlay() {
+ controlToggle.displayQuick(playButton);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ AnimatedVectorDrawable pauseToPlayDrawable = (AnimatedVectorDrawable)getContext().getDrawable(R.drawable.pause_to_play_animation);
+ playButton.setImageDrawable(pauseToPlayDrawable);
+ pauseToPlayDrawable.start();
+ }
+ }
+
private class PlayClickedListener implements View.OnClickListener {
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onClick(View v) {
try {
Log.w(TAG, "playbutton onClick");
if (audioSlidePlayer != null) {
- controlToggle.display(pauseButton);
+ togglePlayToPause();
audioSlidePlayer.play(getProgress());
}
} catch (IOException e) {
@@ -191,11 +239,12 @@ public void onClick(View v) {
}
private class PauseClickedListener implements View.OnClickListener {
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onClick(View v) {
Log.w(TAG, "pausebutton onClick");
if (audioSlidePlayer != null) {
- controlToggle.display(playButton);
+ togglePauseToPlay();
audioSlidePlayer.stop();
}
}
diff --git a/src/org/thoughtcrime/securesms/components/ComposeText.java b/src/org/thoughtcrime/securesms/components/ComposeText.java
index 4ae48d64d99..df96e179e17 100644
--- a/src/org/thoughtcrime/securesms/components/ComposeText.java
+++ b/src/org/thoughtcrime/securesms/components/ComposeText.java
@@ -13,7 +13,9 @@
import android.text.style.RelativeSizeSpan;
import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
+import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.TransportOption;
import org.thoughtcrime.securesms.components.emoji.EmojiEditText;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
@@ -91,7 +93,6 @@ private boolean isLandscape() {
}
public void setTransport(TransportOption transport) {
- final boolean enterSends = TextSecurePreferences.isEnterSendsEnabled(getContext());
final boolean useSystemEmoji = TextSecurePreferences.isSystemEmojiPreferred(getContext());
int imeOptions = (getImeOptions() & ~EditorInfo.IME_MASK_ACTION) | EditorInfo.IME_ACTION_SEND;
@@ -104,16 +105,20 @@ public void setTransport(TransportOption transport) {
inputType = (inputType & ~InputType.TYPE_MASK_VARIATION) | InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE;
}
- inputType = !isLandscape() && enterSends
- ? inputType & ~InputType.TYPE_TEXT_FLAG_MULTI_LINE
- : inputType | InputType.TYPE_TEXT_FLAG_MULTI_LINE;
-
- imeOptions = enterSends
- ? imeOptions & ~EditorInfo.IME_FLAG_NO_ENTER_ACTION
- : imeOptions | EditorInfo.IME_FLAG_NO_ENTER_ACTION;
-
setInputType(inputType);
setImeOptions(imeOptions);
- setHint(transport.getComposeHint(), transport.getSimName().isPresent() ? "From " + transport.getSimName().get() : null);
+ setHint(transport.getComposeHint(),
+ transport.getSimName().isPresent()
+ ? getContext().getString(R.string.conversation_activity__from_sim_name, transport.getSimName().get())
+ : null);
+ }
+
+ @Override
+ public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
+ InputConnection conn = super.onCreateInputConnection(outAttrs);
+ if(TextSecurePreferences.isEnterSendsEnabled(getContext())) {
+ outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
+ }
+ return conn;
}
}
diff --git a/src/org/thoughtcrime/securesms/components/ContactFilterToolbar.java b/src/org/thoughtcrime/securesms/components/ContactFilterToolbar.java
index f26e21ba5e3..48894602d16 100644
--- a/src/org/thoughtcrime/securesms/components/ContactFilterToolbar.java
+++ b/src/org/thoughtcrime/securesms/components/ContactFilterToolbar.java
@@ -22,7 +22,6 @@ public class ContactFilterToolbar extends Toolbar {
private EditText searchText;
private AnimatingToggle toggle;
- private ImageView action;
private ImageView keyboardToggle;
private ImageView dialpadToggle;
private ImageView clearToggle;
@@ -40,8 +39,6 @@ public ContactFilterToolbar(Context context, AttributeSet attrs, int defStyleAtt
super(context, attrs, defStyleAttr);
inflate(context, R.layout.contact_filter_toolbar, this);
-
- this.action = ViewUtil.findById(this, R.id.action_icon);
this.searchText = ViewUtil.findById(this, R.id.search_view);
this.toggle = ViewUtil.findById(this, R.id.button_toggle);
this.keyboardToggle = ViewUtil.findById(this, R.id.search_keyboard);
@@ -97,23 +94,9 @@ public void afterTextChanged(Editable s) {
}
});
- expandTapArea(this, action);
- expandTapArea(toggleContainer, dialpadToggle);
- }
-
- @Override
- public void setNavigationIcon(int resId) {
- action.setImageResource(resId);
- }
-
- @Override
- public void setNavigationOnClickListener(OnClickListener listener) {
- super.setNavigationOnClickListener(listener);
- action.setOnClickListener(listener);
- }
+ setLogo(null);
- public void setShowCustomNavigationButton(boolean show) {
- action.setVisibility(show ? VISIBLE : GONE);
+ expandTapArea(toggleContainer, dialpadToggle);
}
public void clear() {
@@ -154,11 +137,11 @@ public void run() {
}
private static class SearchUtil {
- public static boolean isTextInput(EditText editText) {
+ static boolean isTextInput(EditText editText) {
return (editText.getInputType() & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_TEXT;
}
- public static boolean isPhoneInput(EditText editText) {
+ static boolean isPhoneInput(EditText editText) {
return (editText.getInputType() & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_PHONE;
}
diff --git a/src/org/thoughtcrime/securesms/components/ExpirationTimerView.java b/src/org/thoughtcrime/securesms/components/ExpirationTimerView.java
new file mode 100644
index 00000000000..5e9deac6b07
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/components/ExpirationTimerView.java
@@ -0,0 +1,88 @@
+package org.thoughtcrime.securesms.components;
+
+import android.content.Context;
+import android.os.Handler;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+
+import java.util.concurrent.TimeUnit;
+
+public class ExpirationTimerView extends HourglassView {
+
+ private final Handler handler = new Handler();
+
+ private long startedAt;
+ private long expiresIn;
+
+ private boolean visible = false;
+ private boolean stopped = true;
+
+ public ExpirationTimerView(Context context) {
+ super(context);
+ }
+
+ public ExpirationTimerView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public ExpirationTimerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public void setExpirationTime(long startedAt, long expiresIn) {
+ this.startedAt = startedAt;
+ this.expiresIn = expiresIn;
+
+ setPercentage(calculateProgress(this.startedAt, this.expiresIn));
+ }
+
+ public void startAnimation() {
+ synchronized (this) {
+ visible = true;
+ if (stopped == false) return;
+ else stopped = false;
+ }
+
+ handler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ setPercentage(calculateProgress(startedAt, expiresIn));
+
+
+ synchronized (ExpirationTimerView.this) {
+ if (!visible) {
+ stopped = true;
+ return;
+ }
+ }
+
+ handler.postDelayed(this, calculateAnimationDelay(startedAt, expiresIn));
+ }
+ }, calculateAnimationDelay(this.startedAt, this.expiresIn));
+ }
+
+ public void stopAnimation() {
+ synchronized (this) {
+ visible = false;
+ }
+ }
+
+ private float calculateProgress(long startedAt, long expiresIn) {
+ long progressed = System.currentTimeMillis() - startedAt;
+ float percentComplete = (float)progressed / (float)expiresIn;
+
+ return percentComplete * 100;
+ }
+
+ private long calculateAnimationDelay(long startedAt, long expiresIn) {
+ long progressed = System.currentTimeMillis() - startedAt;
+ long remaining = expiresIn - progressed;
+
+ if (remaining < TimeUnit.SECONDS.toMillis(30)) {
+ return 50;
+ } else {
+ return 1000;
+ }
+ }
+
+}
diff --git a/src/org/thoughtcrime/securesms/components/HourglassView.java b/src/org/thoughtcrime/securesms/components/HourglassView.java
new file mode 100644
index 00000000000..7ca4d950e9b
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/components/HourglassView.java
@@ -0,0 +1,85 @@
+package org.thoughtcrime.securesms.components;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.View;
+
+import org.thoughtcrime.securesms.R;
+
+public class HourglassView extends View {
+
+ private final Paint foregroundPaint;
+ private final Paint backgroundPaint;
+ private final Paint progressPaint;
+
+ private Bitmap empty;
+ private Bitmap full;
+ private int tint;
+
+ private float percentage;
+ private int offset;
+
+ public HourglassView(Context context) {
+ this(context, null);
+ }
+
+ public HourglassView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public HourglassView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+
+ if (attrs != null) {
+ TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.HourglassView, 0, 0);
+ this.empty = BitmapFactory.decodeResource(getResources(), typedArray.getResourceId(R.styleable.HourglassView_empty, 0));
+ this.full = BitmapFactory.decodeResource(getResources(), typedArray.getResourceId(R.styleable.HourglassView_full, 0));
+ this.tint = typedArray.getColor(R.styleable.HourglassView_tint, 0);
+ this.percentage = typedArray.getInt(R.styleable.HourglassView_percentage, 50);
+ this.offset = typedArray.getInt(R.styleable.HourglassView_offset, 0);
+ typedArray.recycle();
+ }
+
+ this.backgroundPaint = new Paint();
+ this.foregroundPaint = new Paint();
+ this.progressPaint = new Paint();
+
+ this.backgroundPaint.setColorFilter(new PorterDuffColorFilter(tint, PorterDuff.Mode.MULTIPLY));
+ this.foregroundPaint.setColorFilter(new PorterDuffColorFilter(tint, PorterDuff.Mode.MULTIPLY));
+
+ this.progressPaint.setColor(getResources().getColor(R.color.black));
+ this.progressPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
+
+ if (android.os.Build.VERSION.SDK_INT >= 11)
+ {
+ setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+ }
+ }
+
+ @Override
+ public void onDraw(Canvas canvas) {
+ float progressHeight = (full.getHeight() - (offset*2)) * (percentage / 100);
+
+ canvas.drawBitmap(full, 0, 0, backgroundPaint);
+ canvas.drawRect(0, 0, full.getWidth(), offset + progressHeight, progressPaint);
+ canvas.drawBitmap(empty, 0, 0, foregroundPaint);
+ }
+
+ public void setPercentage(float percentage) {
+ this.percentage = percentage;
+ invalidate();
+ }
+
+
+
+}
diff --git a/src/org/thoughtcrime/securesms/components/InputPanel.java b/src/org/thoughtcrime/securesms/components/InputPanel.java
index 9e8e98ca91d..1067a05089a 100644
--- a/src/org/thoughtcrime/securesms/components/InputPanel.java
+++ b/src/org/thoughtcrime/securesms/components/InputPanel.java
@@ -80,10 +80,10 @@ public void onFinishInflate() {
this.microphoneRecorderView = ViewUtil.findById(this, R.id.recorder_view);
this.microphoneRecorderView.setListener(this);
-// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
this.microphoneRecorderView.setVisibility(View.GONE);
this.microphoneRecorderView.setClickable(false);
-// }
+ }
if (TextSecurePreferences.isSystemEmojiPreferred(getContext())) {
emojiToggle.setVisibility(View.GONE);
diff --git a/src/org/thoughtcrime/securesms/components/RatingManager.java b/src/org/thoughtcrime/securesms/components/RatingManager.java
index 30505d9154f..e06cbb98a02 100644
--- a/src/org/thoughtcrime/securesms/components/RatingManager.java
+++ b/src/org/thoughtcrime/securesms/components/RatingManager.java
@@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.components;
+import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -7,6 +8,7 @@
import android.net.Uri;
import android.support.v7.app.AlertDialog;
import android.util.Log;
+import android.widget.Toast;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
@@ -62,7 +64,12 @@ public void onClick(DialogInterface dialog, int which) {
private static void startPlayStore(Context context) {
Uri uri = Uri.parse("market://details?id=" + context.getPackageName());
- context.startActivity(new Intent(Intent.ACTION_VIEW, uri));
+ try {
+ context.startActivity(new Intent(Intent.ACTION_VIEW, uri));
+ } catch (ActivityNotFoundException e) {
+ Log.w(TAG, e);
+ Toast.makeText(context, R.string.RatingManager_whoops_the_play_store_app_does_not_appear_to_be_installed, Toast.LENGTH_LONG).show();
+ }
}
private static long getDaysSinceInstalled(Context context) {
diff --git a/src/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java b/src/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java
new file mode 100644
index 00000000000..71617436fe9
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java
@@ -0,0 +1,146 @@
+package org.thoughtcrime.securesms.components;
+
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.MediaStore;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.LoaderManager;
+import android.support.v4.content.Loader;
+import android.support.v7.widget.DefaultItemAnimator;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.Key;
+import com.bumptech.glide.signature.MediaStoreSignature;
+
+import org.thoughtcrime.securesms.R;
+import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter;
+import org.thoughtcrime.securesms.database.loaders.RecentPhotosLoader;
+import org.thoughtcrime.securesms.util.ViewUtil;
+
+public class RecentPhotoViewRail extends FrameLayout implements LoaderManager.LoaderCallbacks {
+
+ @NonNull private final RecyclerView recyclerView;
+ @Nullable private OnItemClickedListener listener;
+
+ public RecentPhotoViewRail(Context context) {
+ this(context, null);
+ }
+
+ public RecentPhotoViewRail(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public RecentPhotoViewRail(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+
+ inflate(context, R.layout.recent_photo_view, this);
+
+ this.recyclerView = ViewUtil.findById(this, R.id.photo_list);
+ this.recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
+ this.recyclerView.setItemAnimator(new DefaultItemAnimator());
+ }
+
+ public void setListener(@Nullable OnItemClickedListener listener) {
+ this.listener = listener;
+
+ if (this.recyclerView.getAdapter() != null) {
+ ((RecentPhotoAdapter)this.recyclerView.getAdapter()).setListener(listener);
+ }
+ }
+
+ @Override
+ public Loader onCreateLoader(int id, Bundle args) {
+ return new RecentPhotosLoader(getContext());
+ }
+
+ @Override
+ public void onLoadFinished(Loader loader, Cursor data) {
+ this.recyclerView.setAdapter(new RecentPhotoAdapter(getContext(), data, RecentPhotosLoader.BASE_URL, listener));
+ }
+
+ @Override
+ public void onLoaderReset(Loader loader) {
+ ((CursorRecyclerViewAdapter)this.recyclerView.getAdapter()).changeCursor(null);
+ }
+
+ private static class RecentPhotoAdapter extends CursorRecyclerViewAdapter {
+
+ @NonNull private final Uri baseUri;
+ @Nullable private OnItemClickedListener clickedListener;
+
+ private RecentPhotoAdapter(@NonNull Context context, @NonNull Cursor cursor, @NonNull Uri baseUri, @Nullable OnItemClickedListener listener) {
+ super(context, cursor);
+ this.baseUri = baseUri;
+ this.clickedListener = listener;
+ }
+
+ @Override
+ public RecentPhotoViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
+ View itemView = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.recent_photo_view_item, parent, false);
+
+ return new RecentPhotoViewHolder(itemView);
+ }
+
+ @Override
+ public void onBindItemViewHolder(RecentPhotoViewHolder viewHolder, @NonNull Cursor cursor) {
+ viewHolder.imageView.setImageDrawable(null);
+
+ long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns._ID));
+ long dateTaken = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATE_TAKEN));
+ long dateModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATE_MODIFIED));
+ String mimeType = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.MIME_TYPE));
+ int orientation = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.ORIENTATION));
+
+ final Uri uri = Uri.withAppendedPath(baseUri, Long.toString(id));
+
+ Key signature = new MediaStoreSignature(mimeType, dateModified, orientation);
+
+ Glide.with(getContext())
+ .fromMediaStore()
+ .load(uri)
+ .signature(signature)
+ .centerCrop()
+ .into(viewHolder.imageView);
+
+ viewHolder.imageView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (clickedListener != null) clickedListener.onItemClicked(uri);
+ }
+ });
+
+ }
+
+ public void setListener(@Nullable OnItemClickedListener listener) {
+ this.clickedListener = listener;
+ }
+
+ static class RecentPhotoViewHolder extends RecyclerView.ViewHolder {
+
+ ImageView imageView;
+
+ RecentPhotoViewHolder(View itemView) {
+ super(itemView);
+
+ this.imageView = ViewUtil.findById(itemView, R.id.thumbnail);
+ }
+ }
+ }
+
+ public interface OnItemClickedListener {
+ public void onItemClicked(Uri uri);
+ }
+}
diff --git a/src/org/thoughtcrime/securesms/components/RecyclerViewFastScroller.java b/src/org/thoughtcrime/securesms/components/RecyclerViewFastScroller.java
index f10f08bce62..91f0b368de9 100644
--- a/src/org/thoughtcrime/securesms/components/RecyclerViewFastScroller.java
+++ b/src/org/thoughtcrime/securesms/components/RecyclerViewFastScroller.java
@@ -74,6 +74,7 @@ public RecyclerViewFastScroller(final Context context, final AttributeSet attrs)
super(context, attrs);
setOrientation(HORIZONTAL);
setClipChildren(false);
+ setScrollContainer(true);
inflate(context, R.layout.recycler_view_fast_scroller, this);
bubble = ViewUtil.findById(this, R.id.fastscroller_bubble);
handle = ViewUtil.findById(this, R.id.fastscroller_handle);
diff --git a/src/org/thoughtcrime/securesms/components/RemovableMediaView.java b/src/org/thoughtcrime/securesms/components/RemovableEditableMediaView.java
similarity index 57%
rename from src/org/thoughtcrime/securesms/components/RemovableMediaView.java
rename to src/org/thoughtcrime/securesms/components/RemovableEditableMediaView.java
index 44ef5ef0674..edf3022360b 100644
--- a/src/org/thoughtcrime/securesms/components/RemovableMediaView.java
+++ b/src/org/thoughtcrime/securesms/components/RemovableEditableMediaView.java
@@ -11,49 +11,59 @@
import org.thoughtcrime.securesms.R;
-public class RemovableMediaView extends FrameLayout {
+public class RemovableEditableMediaView extends FrameLayout {
private final @NonNull ImageView remove;
+ private final @NonNull ImageView edit;
+
private final int removeSize;
+ private final int editSize;
private @Nullable View current;
- public RemovableMediaView(Context context) {
+ public RemovableEditableMediaView(Context context) {
this(context, null);
}
- public RemovableMediaView(Context context, AttributeSet attrs) {
+ public RemovableEditableMediaView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
- public RemovableMediaView(Context context, AttributeSet attrs, int defStyleAttr) {
+ public RemovableEditableMediaView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.remove = (ImageView)LayoutInflater.from(context).inflate(R.layout.media_view_remove_button, this, false);
+ this.edit = (ImageView)LayoutInflater.from(context).inflate(R.layout.media_view_edit_button, this, false);
+
this.removeSize = getResources().getDimensionPixelSize(R.dimen.media_bubble_remove_button_size);
+ this.editSize = getResources().getDimensionPixelSize(R.dimen.media_bubble_edit_button_size);
this.remove.setVisibility(View.GONE);
+ this.edit.setVisibility(View.GONE);
}
@Override
public void onFinishInflate() {
super.onFinishInflate();
this.addView(remove);
+ this.addView(edit);
}
- public void display(@Nullable View view) {
+ public void display(@Nullable View view, boolean editable) {
+ edit.setVisibility(editable ? View.VISIBLE : View.GONE);
+
if (view == current) return;
if (current != null) current.setVisibility(View.GONE);
if (view != null) {
- MarginLayoutParams params = (MarginLayoutParams)view.getLayoutParams();
- params.setMargins(0, removeSize / 2, removeSize / 2, 0);
- view.setLayoutParams(params);
+ view.setPadding(0, removeSize / 2, removeSize / 2, 0);
+ edit.setPadding(0, 0, removeSize / 2, 0);
view.setVisibility(View.VISIBLE);
remove.setVisibility(View.VISIBLE);
} else {
remove.setVisibility(View.GONE);
+ edit.setVisibility(View.GONE);
}
current = view;
@@ -62,4 +72,8 @@ public void display(@Nullable View view) {
public void setRemoveClickListener(View.OnClickListener listener) {
this.remove.setOnClickListener(listener);
}
+
+ public void setEditClickListener(View.OnClickListener listener) {
+ this.edit.setOnClickListener(listener);
+ }
}
diff --git a/src/org/thoughtcrime/securesms/components/SendButton.java b/src/org/thoughtcrime/securesms/components/SendButton.java
index f0e6d4e72e8..9ef421d2b14 100644
--- a/src/org/thoughtcrime/securesms/components/SendButton.java
+++ b/src/org/thoughtcrime/securesms/components/SendButton.java
@@ -10,7 +10,7 @@
import org.thoughtcrime.securesms.TransportOptions.OnTransportChangedListener;
import org.thoughtcrime.securesms.TransportOptionsPopup;
import org.thoughtcrime.securesms.util.ViewUtil;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
public class SendButton extends ImageButton
implements TransportOptions.OnTransportChangedListener,
diff --git a/src/org/thoughtcrime/securesms/components/SquareFrameLayout.java b/src/org/thoughtcrime/securesms/components/SquareFrameLayout.java
index b4028febf12..5ee89035893 100644
--- a/src/org/thoughtcrime/securesms/components/SquareFrameLayout.java
+++ b/src/org/thoughtcrime/securesms/components/SquareFrameLayout.java
@@ -2,34 +2,45 @@
import android.annotation.TargetApi;
import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.BitmapFactory;
import android.os.Build.VERSION_CODES;
import android.util.AttributeSet;
import android.widget.FrameLayout;
+import org.thoughtcrime.securesms.R;
+
public class SquareFrameLayout extends FrameLayout {
+
+ private final boolean squareHeight;
+
@SuppressWarnings("unused")
public SquareFrameLayout(Context context) {
- super(context);
+ this(context, null);
}
@SuppressWarnings("unused")
public SquareFrameLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
+ this(context, attrs, 0);
}
@TargetApi(VERSION_CODES.HONEYCOMB) @SuppressWarnings("unused")
public SquareFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- }
- @TargetApi(VERSION_CODES.LOLLIPOP) @SuppressWarnings("unused")
- public SquareFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
+ if (attrs != null) {
+ TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SquareFrameLayout, 0, 0);
+ this.squareHeight = typedArray.getBoolean(R.styleable.SquareFrameLayout_square_height, false);
+ typedArray.recycle();
+ } else {
+ this.squareHeight = false;
+ }
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//noinspection SuspiciousNameCombination
- super.onMeasure(widthMeasureSpec, widthMeasureSpec);
+ if (squareHeight) super.onMeasure(heightMeasureSpec, heightMeasureSpec);
+ else super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
}
diff --git a/src/org/thoughtcrime/securesms/components/SquareImageView.java b/src/org/thoughtcrime/securesms/components/SquareImageView.java
new file mode 100644
index 00000000000..57ba997203b
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/components/SquareImageView.java
@@ -0,0 +1,31 @@
+package org.thoughtcrime.securesms.components;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+
+public class SquareImageView extends ImageView {
+ public SquareImageView(Context context) {
+ super(context);
+ }
+
+ public SquareImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public SquareImageView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public SquareImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ @Override
+ public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, widthMeasureSpec);
+ }
+}
diff --git a/src/org/thoughtcrime/securesms/components/ThumbnailView.java b/src/org/thoughtcrime/securesms/components/ThumbnailView.java
index be2faf1971c..ec30896f0ca 100644
--- a/src/org/thoughtcrime/securesms/components/ThumbnailView.java
+++ b/src/org/thoughtcrime/securesms/components/ThumbnailView.java
@@ -18,6 +18,7 @@
import com.bumptech.glide.DrawableRequestBuilder;
import com.bumptech.glide.GenericRequestBuilder;
import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.crypto.MasterSecret;
@@ -28,13 +29,14 @@
import org.thoughtcrime.securesms.mms.SlideClickListener;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
public class ThumbnailView extends FrameLayout {
private static final String TAG = ThumbnailView.class.getSimpleName();
private ImageView image;
+ private ImageView playOverlay;
private int backgroundColorHint;
private int radius;
private OnClickListener parentClickListener;
@@ -57,8 +59,9 @@ public ThumbnailView(final Context context, AttributeSet attrs, int defStyle) {
inflate(context, R.layout.thumbnail_view, this);
- this.radius = getResources().getDimensionPixelSize(R.dimen.message_bubble_corner_radius);
- this.image = (ImageView) findViewById(R.id.thumbnail_image);
+ this.radius = getResources().getDimensionPixelSize(R.dimen.message_bubble_corner_radius);
+ this.image = (ImageView) findViewById(R.id.thumbnail_image);
+ this.playOverlay = (ImageView) findViewById(R.id.play_overlay);
super.setOnClickListener(new ThumbnailClickDispatcher());
if (attrs != null) {
@@ -104,6 +107,12 @@ public void setImageResource(@NonNull MasterSecret masterSecret, @NonNull Slide
getTransferControls().setVisibility(View.GONE);
}
+ if (slide.getThumbnailUri() != null && slide.hasPlayOverlay() && slide.getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_DONE) {
+ this.playOverlay.setVisibility(View.VISIBLE);
+ } else {
+ this.playOverlay.setVisibility(View.GONE);
+ }
+
if (Util.equals(slide, this.slide)) {
Log.w(TAG, "Not re-loading slide " + slide.asAttachment().getDataUri());
return;
@@ -127,7 +136,9 @@ public void setImageResource(@NonNull MasterSecret masterSecret, @NonNull Slide
public void setImageResource(@NonNull MasterSecret masterSecret, @NonNull Uri uri) {
if (transferControls.isPresent()) getTransferControls().setVisibility(View.GONE);
- Glide.with(getContext()).load(new DecryptableUri(masterSecret, uri))
+ Glide.with(getContext())
+ .load(new DecryptableUri(masterSecret, uri))
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
.crossFade()
.transform(new RoundedCorners(getContext(), true, radius, backgroundColorHint))
.into(image);
@@ -161,18 +172,22 @@ private boolean isContextValid() {
private GenericRequestBuilder buildThumbnailGlideRequest(@NonNull Slide slide, @NonNull MasterSecret masterSecret) {
@SuppressWarnings("ConstantConditions")
- DrawableRequestBuilder builder = Glide.with(getContext()).load(new DecryptableUri(masterSecret, slide.getThumbnailUri()))
- .crossFade()
- .transform(new RoundedCorners(getContext(), true, radius, backgroundColorHint));
+ DrawableRequestBuilder builder = Glide.with(getContext())
+ .load(new DecryptableUri(masterSecret, slide.getThumbnailUri()))
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .crossFade()
+ .transform(new RoundedCorners(getContext(), true, radius, backgroundColorHint));
if (slide.isInProgress()) return builder;
else return builder.error(R.drawable.ic_missing_thumbnail_picture);
}
private GenericRequestBuilder buildPlaceholderGlideRequest(Slide slide) {
- return Glide.with(getContext()).load(slide.getPlaceholderRes(getContext().getTheme()))
- .asBitmap()
- .fitCenter();
+ return Glide.with(getContext())
+ .load(slide.getPlaceholderRes(getContext().getTheme()))
+ .asBitmap()
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .fitCenter();
}
private class ThumbnailClickDispatcher implements View.OnClickListener {
diff --git a/src/org/thoughtcrime/securesms/components/ZoomingImageView.java b/src/org/thoughtcrime/securesms/components/ZoomingImageView.java
index 1caf6d4bf34..03947b42e0b 100644
--- a/src/org/thoughtcrime/securesms/components/ZoomingImageView.java
+++ b/src/org/thoughtcrime/securesms/components/ZoomingImageView.java
@@ -7,6 +7,7 @@
import android.widget.ImageView;
import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.target.BitmapImageViewTarget;
import com.bumptech.glide.request.target.GlideDrawableImageViewTarget;
@@ -34,6 +35,7 @@ public ZoomingImageView(Context context, AttributeSet attrs, int defStyleAttr) {
public void setImageUri(MasterSecret masterSecret, Uri uri) {
Glide.with(getContext())
.load(new DecryptableUri(masterSecret, uri))
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
.dontTransform()
.dontAnimate()
.into(new GlideDrawableImageViewTarget(this) {
diff --git a/src/org/thoughtcrime/securesms/components/camera/CameraView.java b/src/org/thoughtcrime/securesms/components/camera/CameraView.java
index c00d264b2e3..ce771fe2c3c 100644
--- a/src/org/thoughtcrime/securesms/components/camera/CameraView.java
+++ b/src/org/thoughtcrime/securesms/components/camera/CameraView.java
@@ -48,7 +48,7 @@ Portions Copyright (C) 2007 The Android Open Source Project
import org.thoughtcrime.securesms.util.Util;
import org.whispersystems.jobqueue.Job;
import org.whispersystems.jobqueue.JobParameters;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
@SuppressWarnings("deprecation")
public class CameraView extends ViewGroup {
diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
index 66bc7b3cfc3..3bf0f5a40bc 100644
--- a/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
+++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
@@ -68,7 +68,8 @@ private void initializeResources(View v) {
RepeatableImageKey backspace = (RepeatableImageKey)v.findViewById(R.id.backspace);
backspace.setOnKeyEventListener(new KeyEventListener() {
- @Override public void onKeyEvent() {
+ @Override
+ public void onKeyEvent() {
if (listener != null) listener.onKeyEvent(DELETE_KEY_EVENT);
}
});
@@ -101,7 +102,8 @@ private void initializeEmojiGrid() {
pager.setAdapter(new EmojiPagerAdapter(getContext(),
models,
new EmojiSelectionListener() {
- @Override public void onEmojiSelected(String emoji) {
+ @Override
+ public void onEmojiSelected(String emoji) {
Log.w("EmojiDrawer", "onEmojiSelected()");
recentModel.onCodePointSelected(emoji);
if (listener != null) listener.onEmojiSelected(emoji);
@@ -143,7 +145,8 @@ public int getCount() {
return pages.size();
}
- @Override public Object instantiateItem(ViewGroup container, int position) {
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) {
EmojiPageView page = new EmojiPageView(context);
page.setModel(pages.get(position));
page.setEmojiSelectedListener(listener);
@@ -151,22 +154,26 @@ public int getCount() {
return page;
}
- @Override public void destroyItem(ViewGroup container, int position, Object object) {
+ @Override
+ public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
- @Override public void setPrimaryItem(ViewGroup container, int position, Object object) {
+ @Override
+ public void setPrimaryItem(ViewGroup container, int position, Object object) {
EmojiPageView current = (EmojiPageView) object;
current.onSelected();
super.setPrimaryItem(container, position, object);
}
- @Override public boolean isViewFromObject(View view, Object object) {
+ @Override
+ public boolean isViewFromObject(View view, Object object) {
return view == object;
}
- @Override public View getCustomTabView(ViewGroup viewGroup, int i) {
- ImageView image = new ImageView(context);
+ @Override
+ public View getCustomTabView(ViewGroup viewGroup, int i) {
+ ImageView image = new ImageView(context);
image.setScaleType(ScaleType.CENTER_INSIDE);
image.setImageResource(ResUtil.getDrawableRes(context, pages.get(i).getIconAttr()));
return image;
diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
index e9f032b9ad2..9b513da5659 100644
--- a/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
+++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
@@ -3,6 +3,7 @@
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v7.widget.AppCompatEditText;
import android.text.InputFilter;
import android.util.AttributeSet;
@@ -26,7 +27,7 @@ public EmojiEditText(Context context, AttributeSet attrs) {
public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
if (!TextSecurePreferences.isSystemEmojiPreferred(getContext())) {
- setFilters(new InputFilter[]{ new EmojiFilter(this) });
+ setFilters(appendEmojiFilter(this.getFilters()));
}
}
@@ -38,8 +39,24 @@ public void insertEmoji(String emoji) {
setSelection(start + emoji.length());
}
- @Override public void invalidateDrawable(@NonNull Drawable drawable) {
+ @Override
+ public void invalidateDrawable(@NonNull Drawable drawable) {
if (drawable instanceof EmojiDrawable) invalidate();
else super.invalidateDrawable(drawable);
}
+
+ private InputFilter[] appendEmojiFilter(@Nullable InputFilter[] originalFilters) {
+ InputFilter[] result;
+
+ if (originalFilters != null) {
+ result = new InputFilter[originalFilters.length + 1];
+ System.arraycopy(originalFilters, 0, result, 1, originalFilters.length);
+ } else {
+ result = new InputFilter[1];
+ }
+
+ result[0] = new EmojiFilter(this);
+
+ return result;
+ }
}
diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java
index fbb9c267cd3..2b32d5e4d9a 100644
--- a/src/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java
+++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java
@@ -13,15 +13,18 @@ public EmojiFilter(TextView view) {
this.view = view;
}
- @Override public CharSequence filter(CharSequence source, int start, int end,
- Spanned dest, int dstart, int dend)
+ @Override
+ public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
{
char[] v = new char[end - start];
TextUtils.getChars(source, start, end, v, 0);
+
Spannable emojified = EmojiProvider.getInstance(view.getContext()).emojify(new String(v), view);
+
if (source instanceof Spanned && emojified != null) {
TextUtils.copySpansFrom((Spanned) source, start, end, null, emojified, 0);
}
+
return emojified;
}
}
diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiPages.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiPages.java
index d00ea198360..487d1b53a0d 100644
--- a/src/org/thoughtcrime/securesms/components/emoji/EmojiPages.java
+++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiPages.java
@@ -8,177 +8,43 @@
public class EmojiPages {
public static final List PAGES = Arrays.asList(
new StaticEmojiPageModel(R.attr.emoji_category_people, new String[] {
- "\u263a", "\ud83d\ude0a", "\ud83d\ude00", "\ud83d\ude01", "\ud83d\ude02", "\ud83d\ude03",
- "\ud83d\ude04", "\ud83d\ude05", "\ud83d\ude06", "\ud83d\ude07", "\ud83d\ude08", "\ud83d\ude09",
- "\ud83d\ude2f", "\ud83d\ude10", "\ud83d\ude11", "\ud83d\ude15", "\ud83d\ude20", "\ud83d\ude2c",
- "\ud83d\ude21", "\ud83d\ude22", "\ud83d\ude34", "\ud83d\ude2e", "\ud83d\ude23", "\ud83d\ude24",
- "\ud83d\ude25", "\ud83d\ude26", "\ud83d\ude27", "\ud83d\ude28", "\ud83d\ude29", "\ud83d\ude30",
- "\ud83d\ude1f", "\ud83d\ude31", "\ud83d\ude32", "\ud83d\ude33", "\ud83d\ude35", "\ud83d\ude36",
- "\ud83d\ude37", "\ud83d\ude1e", "\ud83d\ude12", "\ud83d\ude0d", "\ud83d\ude1b", "\ud83d\ude1c",
- "\ud83d\ude1d", "\ud83d\ude0b", "\ud83d\ude17", "\ud83d\ude19", "\ud83d\ude18", "\ud83d\ude1a",
- "\ud83d\ude0e", "\ud83d\ude2d", "\ud83d\ude0c", "\ud83d\ude16", "\ud83d\ude14", "\ud83d\ude2a",
- "\ud83d\ude0f", "\ud83d\ude13", "\ud83d\ude2b", "\ud83d\ude4b", "\ud83d\ude4c", "\ud83d\ude4d",
- "\ud83d\ude45", "\ud83d\ude46", "\ud83d\ude47", "\ud83d\ude4e", "\ud83d\ude4f", "\ud83d\ude3a",
- "\ud83d\ude3c", "\ud83d\ude38", "\ud83d\ude39", "\ud83d\ude3b", "\ud83d\ude3d", "\ud83d\ude3f",
- "\ud83d\ude3e", "\ud83d\ude40", "\ud83d\ude48", "\ud83d\ude49", "\ud83d\ude4a", "\ud83d\udca9",
- "\ud83d\udc76", "\ud83d\udc66", "\ud83d\udc67", "\ud83d\udc68", "\ud83d\udc69", "\ud83d\udc74",
- "\ud83d\udc75", "\ud83d\udc8f", "\ud83d\udc91", "\ud83d\udc6a", "\ud83d\udc6b", "\ud83d\udc6c",
- "\ud83d\udc6d", "\ud83d\udc64", "\ud83d\udc65", "\ud83d\udc6e", "\ud83d\udc77", "\ud83d\udc81",
- "\ud83d\udc82", "\ud83d\udc6f", "\ud83d\udc70", "\ud83d\udc78", "\ud83c\udf85", "\ud83d\udc7c",
- "\ud83d\udc71", "\ud83d\udc72", "\ud83d\udc73", "\ud83d\udc83", "\ud83d\udc86", "\ud83d\udc87",
- "\ud83d\udc85", "\ud83d\udc7b", "\ud83d\udc79", "\ud83d\udc7a", "\ud83d\udc7d", "\ud83d\udc7e",
- "\ud83d\udc7f", "\ud83d\udc80", "\ud83d\udcaa", "\ud83d\udc40", "\ud83d\udc42", "\ud83d\udc43",
- "\ud83d\udc63", "\ud83d\udc44", "\ud83d\udc45", "\ud83d\udc8b", "\u2764", "\ud83d\udc99",
- "\ud83d\udc9a", "\ud83d\udc9b", "\ud83d\udc9c", "\ud83d\udc93", "\ud83d\udc94", "\ud83d\udc95",
- "\ud83d\udc96", "\ud83d\udc97", "\ud83d\udc98", "\ud83d\udc9d", "\ud83d\udc9e", "\ud83d\udc9f",
- "\ud83d\udc4d", "\ud83d\udc4e", "\ud83d\udc4c", "\u270a", "\u270c", "\u270b",
- "\ud83d\udc4a", "\u261d", "\ud83d\udc46", "\ud83d\udc47", "\ud83d\udc48", "\ud83d\udc49",
- "\ud83d\udc4b", "\ud83d\udc4f", "\ud83d\udc50",
- }, "emoji-people.png"),
- new StaticEmojiPageModel(R.attr.emoji_category_objects, new String[] {
- "\ud83d\udd30", "\ud83d\udc84", "\ud83d\udc5e", "\ud83d\udc5f", "\ud83d\udc51", "\ud83d\udc52",
- "\ud83c\udfa9", "\ud83c\udf93", "\ud83d\udc53", "\u231a", "\ud83d\udc54", "\ud83d\udc55",
- "\ud83d\udc56", "\ud83d\udc57", "\ud83d\udc58", "\ud83d\udc59", "\ud83d\udc60", "\ud83d\udc61",
- "\ud83d\udc62", "\ud83d\udc5a", "\ud83d\udc5c", "\ud83d\udcbc", "\ud83c\udf92", "\ud83d\udc5d",
- "\ud83d\udc5b", "\ud83d\udcb0", "\ud83d\udcb3", "\ud83d\udcb2", "\ud83d\udcb5", "\ud83d\udcb4",
- "\ud83d\udcb6", "\ud83d\udcb7", "\ud83d\udcb8", "\ud83d\udcb1", "\ud83d\udcb9", "\ud83d\udd2b",
- "\ud83d\udd2a", "\ud83d\udca3", "\ud83d\udc89", "\ud83d\udc8a", "\ud83d\udeac", "\ud83d\udd14",
- "\ud83d\udd15", "\ud83d\udeaa", "\ud83d\udd2c", "\ud83d\udd2d", "\ud83d\udd2e", "\ud83d\udd26",
- "\ud83d\udd0b", "\ud83d\udd0c", "\ud83d\udcdc", "\ud83d\udcd7", "\ud83d\udcd8", "\ud83d\udcd9",
- "\ud83d\udcda", "\ud83d\udcd4", "\ud83d\udcd2", "\ud83d\udcd1", "\ud83d\udcd3", "\ud83d\udcd5",
- "\ud83d\udcd6", "\ud83d\udcf0", "\ud83d\udcdb", "\ud83c\udf83", "\ud83c\udf84", "\ud83c\udf80",
- "\ud83c\udf81", "\ud83c\udf82", "\ud83c\udf88", "\ud83c\udf86", "\ud83c\udf87", "\ud83c\udf89",
- "\ud83c\udf8a", "\ud83c\udf8d", "\ud83c\udf8f", "\ud83c\udf8c", "\ud83c\udf90", "\ud83c\udf8b",
- "\ud83c\udf8e", "\ud83d\udcf1", "\ud83d\udcf2", "\ud83d\udcdf", "\u260e", "\ud83d\udcde",
- "\ud83d\udce0", "\ud83d\udce6", "\u2709", "\ud83d\udce8", "\ud83d\udce9", "\ud83d\udcea",
- "\ud83d\udceb", "\ud83d\udced", "\ud83d\udcec", "\ud83d\udcee", "\ud83d\udce4", "\ud83d\udce5",
- "\ud83d\udcef", "\ud83d\udce2", "\ud83d\udce3", "\ud83d\udce1", "\ud83d\udcac", "\ud83d\udcad",
- "\u2712", "\u270f", "\ud83d\udcdd", "\ud83d\udccf", "\ud83d\udcd0", "\ud83d\udccd",
- "\ud83d\udccc", "\ud83d\udcce", "\u2702", "\ud83d\udcba", "\ud83d\udcbb", "\ud83d\udcbd",
- "\ud83d\udcbe", "\ud83d\udcbf", "\ud83d\udcc6", "\ud83d\udcc5", "\ud83d\udcc7", "\ud83d\udccb",
- "\ud83d\udcc1", "\ud83d\udcc2", "\ud83d\udcc3", "\ud83d\udcc4", "\ud83d\udcca", "\ud83d\udcc8",
- "\ud83d\udcc9", "\u26fa", "\ud83c\udfa1", "\ud83c\udfa2", "\ud83c\udfa0", "\ud83c\udfaa",
- "\ud83c\udfa8", "\ud83c\udfac", "\ud83c\udfa5", "\ud83d\udcf7", "\ud83d\udcf9", "\ud83c\udfa6",
- "\ud83c\udfad", "\ud83c\udfab", "\ud83c\udfae", "\ud83c\udfb2", "\ud83c\udfb0", "\ud83c\udccf",
- "\ud83c\udfb4", "\ud83c\udc04", "\ud83c\udfaf", "\ud83d\udcfa", "\ud83d\udcfb", "\ud83d\udcc0",
- "\ud83d\udcfc", "\ud83c\udfa7", "\ud83c\udfa4", "\ud83c\udfb5", "\ud83c\udfb6", "\ud83c\udfbc",
- "\ud83c\udfbb", "\ud83c\udfb9", "\ud83c\udfb7", "\ud83c\udfba", "\ud83c\udfb8", "\u303d",
- }, "emoji-objects.png"),
+ "\ud83d\ude00", "\ud83d\ude2c", "\ud83d\ude01","\ud83d\ude02","\ud83d\ude03","\ud83d\ude04","\ud83d\ude05","\ud83d\ude06","\ud83d\ude07","\ud83d\ude09","\ud83d\ude0a","\ud83d\ude42","\ud83d\ude43","\u263a","\ud83d\ude0b","\ud83d\ude0c","\ud83d\ude0d","\ud83d\ude18","\ud83d\ude17","\ud83d\ude19","\ud83d\ude1a","\ud83d\ude1c","\ud83d\ude1d","\ud83d\ude1b","\ud83e\udd11","\ud83e\udd13","\ud83d\ude0e","\ud83e\udd17","\ud83d\ude0f","\ud83d\ude36","\ud83d\ude10","\ud83d\ude11","\ud83d\ude12","\ud83d\ude44","\ud83e\udd14","\ud83d\ude33","\ud83d\ude1e","\ud83d\ude1f","\ud83d\ude20","\ud83d\ude21","\ud83d\ude14","\ud83d\ude15","\ud83d\ude41","\u2639","\ud83d\ude23","\ud83d\ude16","\ud83d\ude2b","\ud83d\ude29","\ud83d\ude24","\ud83d\ude2e","\ud83d\ude31","\ud83d\ude28","\ud83d\ude30","\ud83d\ude2f","\ud83d\ude26","\ud83d\ude27","\ud83d\ude22","\ud83d\ude25","\ud83d\ude2a","\ud83d\ude13","\ud83d\ude2d","\ud83d\ude35","\ud83d\ude32","\ud83e\udd10","\ud83d\ude37","\ud83e\udd12","\ud83e\udd15","\ud83d\ude34","\ud83d\udca4","\ud83d\udca9","\ud83d\ude08","\ud83d\udc7f","\ud83d\udc79","\ud83d\udc7a","\ud83d\udc80","\ud83d\udc7b","\ud83d\udc7d","\ud83e\udd16","\ud83d\ude3a","\ud83d\ude38","\ud83d\ude39","\ud83d\ude3b","\ud83d\ude3c","\ud83d\ude3d","\ud83d\ude40","\ud83d\ude3f","\ud83d\ude3e","\ud83d\ude4c","\ud83d\udc4f","\ud83d\udc4b","\ud83d\udc4d","\ud83d\udc4e","\ud83d\udc4a","\u270a","\u270c","\ud83d\udc4c","\u270b","\ud83d\udc50","\ud83d\udcaa","\ud83d\ude4f","\u261d","\ud83d\udc46","\ud83d\udc47","\ud83d\udc48","\ud83d\udc49","\ud83d\udd95","\ud83d\udd90","\ud83e\udd18","\ud83d\udd96","\u270d","\ud83d\udc85","\ud83d\udc44","\ud83d\udc45","\ud83d\udc42","\ud83d\udc43","\ud83d\udc41","\ud83d\udc40","\ud83d\udc64","\ud83d\udc65","\ud83d\udde3","\ud83d\udc76","\ud83d\udc66","\ud83d\udc67","\ud83d\udc68","\ud83d\udc69","\ud83d\udc71","\ud83d\udc74","\ud83d\udc75","\ud83d\udc72","\ud83d\udc73","\ud83d\udc6e","\ud83d\udc77","\ud83d\udc82","\ud83d\udd75","\ud83c\udf85","\ud83d\udc7c","\ud83d\udc78","\ud83d\udc70","\ud83d\udeb6","\ud83c\udfc3","\ud83d\udc83","\ud83d\udc6f","\ud83d\udc6b","\ud83d\udc6c","\ud83d\udc6d","\ud83d\ude47","\ud83d\udc81","\ud83d\ude45","\ud83d\ude46","\ud83d\ude4b","\ud83d\ude4e","\ud83d\ude4d","\ud83d\udc87","\ud83d\udc86","\ud83d\udc91","\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69","\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68","\ud83d\udc8f","\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69","\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68","\ud83d\udc6a","\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67","\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66","\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66","\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67","\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66","\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67","\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66","\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66","\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67","\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66","\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67","\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66","\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66","\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67","\ud83d\udc5a","\ud83d\udc55","\ud83d\udc56","\ud83d\udc54","\ud83d\udc57","\ud83d\udc59","\ud83d\udc58","\ud83d\udc84","\ud83d\udc8b","\ud83d\udc63","\ud83d\udc60","\ud83d\udc61","\ud83d\udc62","\ud83d\udc5e","\ud83d\udc5f","\ud83d\udc52","\ud83c\udfa9","\u26d1","\ud83c\udf93","\ud83d\udc51","\ud83c\udf92","\ud83d\udc5d","\ud83d\udc5b","\ud83d\udc5c","\ud83d\udcbc","\ud83d\udc53","\ud83d\udd76","\ud83d\udc8d","\ud83c\udf02"
+ }, "emoji/People.png"),
new StaticEmojiPageModel(R.attr.emoji_category_nature, new String[] {
- "\ud83d\udc15", "\ud83d\udc36", "\ud83d\udc29", "\ud83d\udc08", "\ud83d\udc31", "\ud83d\udc00",
- "\ud83d\udc01", "\ud83d\udc2d", "\ud83d\udc39", "\ud83d\udc22", "\ud83d\udc07", "\ud83d\udc30",
- "\ud83d\udc13", "\ud83d\udc14", "\ud83d\udc23", "\ud83d\udc24", "\ud83d\udc25", "\ud83d\udc26",
- "\ud83d\udc0f", "\ud83d\udc11", "\ud83d\udc10", "\ud83d\udc3a", "\ud83d\udc03", "\ud83d\udc02",
- "\ud83d\udc04", "\ud83d\udc2e", "\ud83d\udc34", "\ud83d\udc17", "\ud83d\udc16", "\ud83d\udc37",
- "\ud83d\udc3d", "\ud83d\udc38", "\ud83d\udc0d", "\ud83d\udc3c", "\ud83d\udc27", "\ud83d\udc18",
- "\ud83d\udc28", "\ud83d\udc12", "\ud83d\udc35", "\ud83d\udc06", "\ud83d\udc2f", "\ud83d\udc3b",
- "\ud83d\udc2b", "\ud83d\udc2a", "\ud83d\udc0a", "\ud83d\udc33", "\ud83d\udc0b", "\ud83d\udc1f",
- "\ud83d\udc20", "\ud83d\udc21", "\ud83d\udc19", "\ud83d\udc1a", "\ud83d\udc2c", "\ud83d\udc0c",
- "\ud83d\udc1b", "\ud83d\udc1c", "\ud83d\udc1d", "\ud83d\udc1e", "\ud83d\udc32", "\ud83d\udc09",
- "\ud83d\udc3e", "\ud83c\udf78", "\ud83c\udf7a", "\ud83c\udf7b", "\ud83c\udf77", "\ud83c\udf79",
- "\ud83c\udf76", "\u2615", "\ud83c\udf75", "\ud83c\udf7c", "\ud83c\udf74", "\ud83c\udf68",
- "\ud83c\udf67", "\ud83c\udf66", "\ud83c\udf69", "\ud83c\udf70", "\ud83c\udf6a", "\ud83c\udf6b",
- "\ud83c\udf6c", "\ud83c\udf6d", "\ud83c\udf6e", "\ud83c\udf6f", "\ud83c\udf73", "\ud83c\udf54",
- "\ud83c\udf5f", "\ud83c\udf5d", "\ud83c\udf55", "\ud83c\udf56", "\ud83c\udf57", "\ud83c\udf64",
- "\ud83c\udf63", "\ud83c\udf71", "\ud83c\udf5e", "\ud83c\udf5c", "\ud83c\udf59", "\ud83c\udf5a",
- "\ud83c\udf5b", "\ud83c\udf72", "\ud83c\udf65", "\ud83c\udf62", "\ud83c\udf61", "\ud83c\udf58",
- "\ud83c\udf60", "\ud83c\udf4c", "\ud83c\udf4e", "\ud83c\udf4f", "\ud83c\udf4a", "\ud83c\udf4b",
- "\ud83c\udf44", "\ud83c\udf45", "\ud83c\udf46", "\ud83c\udf47", "\ud83c\udf48", "\ud83c\udf49",
- "\ud83c\udf50", "\ud83c\udf51", "\ud83c\udf52", "\ud83c\udf53", "\ud83c\udf4d", "\ud83c\udf30",
- "\ud83c\udf31", "\ud83c\udf32", "\ud83c\udf33", "\ud83c\udf34", "\ud83c\udf35", "\ud83c\udf37",
- "\ud83c\udf38", "\ud83c\udf39", "\ud83c\udf40", "\ud83c\udf41", "\ud83c\udf42", "\ud83c\udf43",
- "\ud83c\udf3a", "\ud83c\udf3b", "\ud83c\udf3c", "\ud83c\udf3d", "\ud83c\udf3e", "\ud83c\udf3f",
- "\u2600", "\ud83c\udf08", "\u26c5", "\u2601", "\ud83c\udf01", "\ud83c\udf02",
- "\u2614", "\ud83d\udca7", "\u26a1", "\ud83c\udf00", "\u2744", "\u26c4",
- "\ud83c\udf19", "\ud83c\udf1e", "\ud83c\udf1d", "\ud83c\udf1a", "\ud83c\udf1b", "\ud83c\udf1c",
- "\ud83c\udf11", "\ud83c\udf12", "\ud83c\udf13", "\ud83c\udf14", "\ud83c\udf15", "\ud83c\udf16",
- "\ud83c\udf17", "\ud83c\udf18", "\ud83c\udf91", "\ud83c\udf04", "\ud83c\udf05", "\ud83c\udf07",
- "\ud83c\udf06", "\ud83c\udf03", "\ud83c\udf0c", "\ud83c\udf09", "\ud83c\udf0a", "\ud83c\udf0b",
- "\ud83c\udf0e", "\ud83c\udf0f", "\ud83c\udf0d", "\ud83c\udf10",
- }, "emoji-nature.png"),
+ "\ud83d\udc36","\ud83d\udc31","\ud83d\udc2d","\ud83d\udc39","\ud83d\udc30","\ud83d\udc3b","\ud83d\udc3c","\ud83d\udc28","\ud83d\udc2f","\ud83e\udd81","\ud83d\udc2e","\ud83d\udc37","\ud83d\udc3d","\ud83d\udc38","\ud83d\udc19","\ud83d\udc35","\ud83d\ude48","\ud83d\ude49","\ud83d\ude4a","\ud83d\udc12","\ud83d\udc14","\ud83d\udc27","\ud83d\udc26","\ud83d\udc24","\ud83d\udc23","\ud83d\udc25","\ud83d\udc3a","\ud83d\udc17","\ud83d\udc34","\ud83e\udd84","\ud83d\udc1d","\ud83d\udc1b","\ud83d\udc0c","\ud83d\udc1e","\ud83d\udc1c","\ud83d\udd77","\ud83e\udd82","\ud83e\udd80","\ud83d\udc0d","\ud83d\udc22","\ud83d\udc20","\ud83d\udc1f","\ud83d\udc21","\ud83d\udc2c","\ud83d\udc33","\ud83d\udc0b","\ud83d\udc0a","\ud83d\udc06","\ud83d\udc05","\ud83d\udc03","\ud83d\udc02","\ud83d\udc04","\ud83d\udc2a","\ud83d\udc2b","\ud83d\udc18","\ud83d\udc10","\ud83d\udc0f","\ud83d\udc11","\ud83d\udc0e","\ud83d\udc16","\ud83d\udc00","\ud83d\udc01","\ud83d\udc13","\ud83e\udd83","\ud83d\udd4a","\ud83d\udc15","\ud83d\udc29","\ud83d\udc08","\ud83d\udc07","\ud83d\udc3f","\ud83d\udc3e","\ud83d\udc09","\ud83d\udc32","\ud83c\udf35","\ud83c\udf84","\ud83c\udf32","\ud83c\udf33","\ud83c\udf34","\ud83c\udf31","\ud83c\udf3f","\u2618","\ud83c\udf40","\ud83c\udf8d","\ud83c\udf8b","\ud83c\udf43","\ud83c\udf42","\ud83c\udf41","\ud83c\udf3e","\ud83c\udf3a","\ud83c\udf3b","\ud83c\udf39","\ud83c\udf37","\ud83c\udf3c","\ud83c\udf38","\ud83d\udc90","\ud83c\udf44","\ud83c\udf30","\ud83c\udf83","\ud83d\udc1a","\ud83d\udd78","\ud83c\udf0e","\ud83c\udf0d","\ud83c\udf0f","\ud83c\udf15","\ud83c\udf16","\ud83c\udf17","\ud83c\udf18","\ud83c\udf11","\ud83c\udf12","\ud83c\udf13","\ud83c\udf14","\ud83c\udf1a","\ud83c\udf1d","\ud83c\udf1b","\ud83c\udf1c","\ud83c\udf1e","\ud83c\udf19","\u2b50","\ud83c\udf1f","\ud83d\udcab","\u2728","\u2604","\u2600","\ud83c\udf24","\u26c5","\ud83c\udf25","\ud83c\udf26","\u2601","\ud83c\udf27","\u26c8","\ud83c\udf29","\u26a1","\ud83d\udd25","\ud83d\udca5","\u2744","\ud83c\udf28","\u2603","\u26c4","\ud83c\udf2c","\ud83d\udca8","\ud83c\udf2a","\ud83c\udf2b","\u2602","\u2614","\ud83d\udca7","\ud83d\udca6","\ud83c\udf0a"
+ }, "emoji/Nature.png"),
+ new StaticEmojiPageModel(R.attr.emoji_category_foods, new String[] {
+ "\ud83c\udf4f","\ud83c\udf4e","\ud83c\udf50","\ud83c\udf4a","\ud83c\udf4b","\ud83c\udf4c","\ud83c\udf49","\ud83c\udf47","\ud83c\udf53","\ud83c\udf48","\ud83c\udf52","\ud83c\udf51","\ud83c\udf4d","\ud83c\udf45","\ud83c\udf46","\ud83c\udf36","\ud83c\udf3d","\ud83c\udf60","\ud83c\udf6f","\ud83c\udf5e","\ud83e\uddc0","\ud83c\udf57","\ud83c\udf56","\ud83c\udf64","\ud83c\udf73","\ud83c\udf54","\ud83c\udf5f","\ud83c\udf2d","\ud83c\udf55","\ud83c\udf5d","\ud83c\udf2e","\ud83c\udf2f","\ud83c\udf5c","\ud83c\udf72","\ud83c\udf65","\ud83c\udf63","\ud83c\udf71","\ud83c\udf5b","\ud83c\udf59","\ud83c\udf5a","\ud83c\udf58","\ud83c\udf62","\ud83c\udf61","\ud83c\udf67","\ud83c\udf68","\ud83c\udf66","\ud83c\udf70","\ud83c\udf82","\ud83c\udf6e","\ud83c\udf6c","\ud83c\udf6d","\ud83c\udf6b","\ud83c\udf7f","\ud83c\udf69","\ud83c\udf6a","\ud83c\udf7a","\ud83c\udf7b","\ud83c\udf77","\ud83c\udf78","\ud83c\udf79","\ud83c\udf7e","\ud83c\udf76","\ud83c\udf75","\u2615","\ud83c\udf7c","\ud83c\udf74","\ud83c\udf7d"
+ }, "emoji/Foods.png"),
+ new StaticEmojiPageModel(R.attr.emoji_category_activity, new String[] {
+ "\u26bd","\ud83c\udfc0","\ud83c\udfc8","\u26be","\ud83c\udfbe","\ud83c\udfd0","\ud83c\udfc9","\ud83c\udfb1","\u26f3","\ud83c\udfcc","\ud83c\udfd3","\ud83c\udff8","\ud83c\udfd2","\ud83c\udfd1","\ud83c\udfcf","\ud83c\udfbf","\u26f7","\ud83c\udfc2","\u26f8","\ud83c\udff9","\ud83c\udfa3","\ud83d\udea3","\ud83c\udfca","\ud83c\udfc4","\ud83d\udec0","\u26f9","\ud83c\udfcb","\ud83d\udeb4","\ud83d\udeb5","\ud83c\udfc7","\ud83d\udd74","\ud83c\udfc6","\ud83c\udfbd","\ud83c\udfc5","\ud83c\udf96","\ud83c\udf97","\ud83c\udff5","\ud83c\udfab","\ud83c\udf9f","\ud83c\udfad","\ud83c\udfa8","\ud83c\udfaa","\ud83c\udfa4","\ud83c\udfa7","\ud83c\udfbc","\ud83c\udfb9","\ud83c\udfb7","\ud83c\udfba","\ud83c\udfb8","\ud83c\udfbb","\ud83c\udfac","\ud83c\udfae","\ud83d\udc7e","\ud83c\udfaf","\ud83c\udfb2","\ud83c\udfb0","\ud83c\udfb3"
+ }, "emoji/Activity.png"),
new StaticEmojiPageModel(R.attr.emoji_category_places, new String[] {
- "\ud83c\udfe0", "\ud83c\udfe1", "\ud83c\udfe2", "\ud83c\udfe3", "\ud83c\udfe4", "\ud83c\udfe5",
- "\ud83c\udfe6", "\ud83c\udfe7", "\ud83c\udfe8", "\ud83c\udfe9", "\ud83c\udfea", "\ud83c\udfeb",
- "\u26ea", "\u26f2", "\ud83c\udfec", "\ud83c\udfef", "\ud83c\udff0", "\ud83c\udfed",
- "\ud83d\uddfb", "\ud83d\uddfc", "\ud83d\uddfd", "\ud83d\uddfe", "\ud83d\uddff", "\u2693",
- "\ud83c\udfee", "\ud83d\udc88", "\ud83d\udd27", "\ud83d\udd28", "\ud83d\udd29", "\ud83d\udebf",
- "\ud83d\udec1", "\ud83d\udec0", "\ud83d\udebd", "\ud83d\udebe", "\ud83c\udfbd", "\ud83c\udfa3",
- "\ud83c\udfb1", "\ud83c\udfb3", "\u26be", "\u26f3", "\ud83c\udfbe", "\u26bd",
- "\ud83c\udfbf", "\ud83c\udfc0", "\ud83c\udfc1", "\ud83c\udfc2", "\ud83c\udfc3", "\ud83c\udfc4",
- "\ud83c\udfc6", "\ud83c\udfc7", "\ud83d\udc0e", "\ud83c\udfc8", "\ud83c\udfc9", "\ud83c\udfca",
- "\ud83d\ude82", "\ud83d\ude83", "\ud83d\ude84", "\ud83d\ude85", "\ud83d\ude86", "\ud83d\ude87",
- "\u24c2", "\ud83d\ude88", "\ud83d\ude8a", "\ud83d\ude8b", "\ud83d\ude8c", "\ud83d\ude8d",
- "\ud83d\ude8e", "\ud83d\ude8f", "\ud83d\ude90", "\ud83d\ude91", "\ud83d\ude92", "\ud83d\ude93",
- "\ud83d\ude94", "\ud83d\ude95", "\ud83d\ude96", "\ud83d\ude97", "\ud83d\ude98", "\ud83d\ude99",
- "\ud83d\ude9a", "\ud83d\ude9b", "\ud83d\ude9c", "\ud83d\ude9d", "\ud83d\ude9e", "\ud83d\ude9f",
- "\ud83d\udea0", "\ud83d\udea1", "\ud83d\udea2", "\ud83d\udea3", "\ud83d\ude81", "\u2708",
- "\ud83d\udec2", "\ud83d\udec3", "\ud83d\udec4", "\ud83d\udec5", "\u26f5", "\ud83d\udeb2",
- "\ud83d\udeb3", "\ud83d\udeb4", "\ud83d\udeb5", "\ud83d\udeb7", "\ud83d\udeb8", "\ud83d\ude89",
- "\ud83d\ude80", "\ud83d\udea4", "\ud83d\udeb6", "\u26fd", "\ud83c\udd7f", "\ud83d\udea5",
- "\ud83d\udea6", "\ud83d\udea7", "\ud83d\udea8", "\u2668", "\ud83d\udc8c", "\ud83d\udc8d",
- "\ud83d\udc8e", "\ud83d\udc90", "\ud83d\udc92",
- }, "emoji-places.png"),
+ "\ud83d\ude97","\ud83d\ude95","\ud83d\ude99","\ud83d\ude8c","\ud83d\ude8e","\ud83c\udfce","\ud83d\ude93","\ud83d\ude91","\ud83d\ude92","\ud83d\ude90","\ud83d\ude9a","\ud83d\ude9b","\ud83d\ude9c","\ud83c\udfcd","\ud83d\udeb2","\ud83d\udea8","\ud83d\ude94","\ud83d\ude8d","\ud83d\ude98","\ud83d\ude96","\ud83d\udea1","\ud83d\udea0","\ud83d\ude9f","\ud83d\ude83","\ud83d\ude8b","\ud83d\ude9d","\ud83d\ude84","\ud83d\ude85","\ud83d\ude88","\ud83d\ude9e","\ud83d\ude82","\ud83d\ude86","\ud83d\ude87","\ud83d\ude8a","\ud83d\ude89","\ud83d\ude81","\ud83d\udee9","\u2708","\ud83d\udeeb","\ud83d\udeec","\u26f5","\ud83d\udee5","\ud83d\udea4","\u26f4","\ud83d\udef3","\ud83d\ude80","\ud83d\udef0","\ud83d\udcba","\u2693","\ud83d\udea7","\u26fd","\ud83d\ude8f","\ud83d\udea6","\ud83d\udea5","\ud83c\udfc1","\ud83d\udea2","\ud83c\udfa1","\ud83c\udfa2","\ud83c\udfa0","\ud83c\udfd7","\ud83c\udf01","\ud83d\uddfc","\ud83c\udfed","\u26f2","\ud83c\udf91","\u26f0","\ud83c\udfd4","\ud83d\uddfb","\ud83c\udf0b","\ud83d\uddfe","\ud83c\udfd5","\u26fa","\ud83c\udfde","\ud83d\udee3","\ud83d\udee4","\ud83c\udf05","\ud83c\udf04","\ud83c\udfdc","\ud83c\udfd6","\ud83c\udfdd","\ud83c\udf07","\ud83c\udf06","\ud83c\udfd9","\ud83c\udf03","\ud83c\udf09","\ud83c\udf0c","\ud83c\udf20","\ud83c\udf87","\ud83c\udf86","\ud83c\udf08","\ud83c\udfd8","\ud83c\udff0","\ud83c\udfef","\ud83c\udfdf","\ud83d\uddfd","\ud83c\udfe0","\ud83c\udfe1","\ud83c\udfda","\ud83c\udfe2","\ud83c\udfec","\ud83c\udfe3","\ud83c\udfe4","\ud83c\udfe5","\ud83c\udfe6","\ud83c\udfe8","\ud83c\udfea","\ud83c\udfeb","\ud83c\udfe9","\ud83d\udc92","\ud83c\udfdb","\u26ea","\ud83d\udd4c","\ud83d\udd4d","\ud83d\udd4b","\u26e9"
+ }, "emoji/Places.png"),
+ new StaticEmojiPageModel(R.attr.emoji_category_objects, new String[] {
+ "\u231a","\ud83d\udcf1","\ud83d\udcf2","\ud83d\udcbb","\u2328","\ud83d\udda5","\ud83d\udda8","\ud83d\uddb1","\ud83d\uddb2","\ud83d\udd79","\ud83d\udddc","\ud83d\udcbd","\ud83d\udcbe","\ud83d\udcbf","\ud83d\udcc0","\ud83d\udcfc","\ud83d\udcf7","\ud83d\udcf8","\ud83d\udcf9","\ud83c\udfa5","\ud83d\udcfd","\ud83c\udf9e","\ud83d\udcde","\u260e","\ud83d\udcdf","\ud83d\udce0","\ud83d\udcfa","\ud83d\udcfb","\ud83c\udf99","\ud83c\udf9a","\ud83c\udf9b","\u23f1","\u23f2","\u23f0","\ud83d\udd70","\u23f3","\u231b","\ud83d\udce1","\ud83d\udd0b","\ud83d\udd0c","\ud83d\udca1","\ud83d\udd26","\ud83d\udd6f","\ud83d\uddd1","\ud83d\udee2","\ud83d\udcb8","\ud83d\udcb5","\ud83d\udcb4","\ud83d\udcb6","\ud83d\udcb7","\ud83d\udcb0","\ud83d\udcb3","\ud83d\udc8e","\u2696","\ud83d\udd27","\ud83d\udd28","\u2692","\ud83d\udee0","\u26cf","\ud83d\udd29","\u2699","\u26d3","\ud83d\udd2b","\ud83d\udca3","\ud83d\udd2a","\ud83d\udde1","\u2694","\ud83d\udee1","\ud83d\udeac","\u2620","\u26b0","\u26b1","\ud83c\udffa","\ud83d\udd2e","\ud83d\udcff","\ud83d\udc88","\u2697","\ud83d\udd2d","\ud83d\udd2c","\ud83d\udd73","\ud83d\udc8a","\ud83d\udc89","\ud83c\udf21","\ud83c\udff7","\ud83d\udd16","\ud83d\udebd","\ud83d\udebf","\ud83d\udec1","\ud83d\udd11","\ud83d\udddd","\ud83d\udecb","\ud83d\udecc","\ud83d\udecf","\ud83d\udeaa","\ud83d\udece","\ud83d\uddbc","\ud83d\uddfa","\u26f1","\ud83d\uddff","\ud83d\udecd","\ud83c\udf88","\ud83c\udf8f","\ud83c\udf80","\ud83c\udf81","\ud83c\udf8a","\ud83c\udf89","\ud83c\udf8e","\ud83c\udf90","\ud83c\udf8c","\ud83c\udfee","\u2709","\ud83d\udce9","\ud83d\udce8","\ud83d\udce7","\ud83d\udc8c","\ud83d\udcee","\ud83d\udcea","\ud83d\udceb","\ud83d\udcec","\ud83d\udced","\ud83d\udce6","\ud83d\udcef","\ud83d\udce5","\ud83d\udce4","\ud83d\udcdc","\ud83d\udcc3","\ud83d\udcd1","\ud83d\udcca","\ud83d\udcc8","\ud83d\udcc9","\ud83d\udcc4","\ud83d\udcc5","\ud83d\udcc6","\ud83d\uddd3","\ud83d\udcc7","\ud83d\uddc3","\ud83d\uddf3","\ud83d\uddc4","\ud83d\udccb","\ud83d\uddd2","\ud83d\udcc1","\ud83d\udcc2","\ud83d\uddc2","\ud83d\uddde","\ud83d\udcf0","\ud83d\udcd3","\ud83d\udcd5","\ud83d\udcd7","\ud83d\udcd8","\ud83d\udcd9","\ud83d\udcd4","\ud83d\udcd2","\ud83d\udcda","\ud83d\udcd6","\ud83d\udd17","\ud83d\udcce","\ud83d\udd87","\u2702","\ud83d\udcd0","\ud83d\udccf","\ud83d\udccc","\ud83d\udccd","\ud83d\udea9","\ud83c\udff3","\ud83c\udff4","\ud83d\udd10","\ud83d\udd12","\ud83d\udd13","\ud83d\udd0f","\ud83d\udd8a","\ud83d\udd8b","\u2712","\ud83d\udcdd","\u270f","\ud83d\udd8d","\ud83d\udd8c","\ud83d\udd0d","\ud83d\udd0e"
+ }, "emoji/Objects.png"),
new StaticEmojiPageModel(R.attr.emoji_category_symbol, new String[] {
- "\ud83d\udd1d", "\ud83d\udd19", "\ud83d\udd1b", "\ud83d\udd1c", "\ud83d\udd1a", "\u23f3",
- "\u231b", "\u23f0", "\u2648", "\u2649", "\u264a", "\u264b",
- "\u264c", "\u264d", "\u264e", "\u264f", "\u2650", "\u2651",
- "\u2652", "\u2653", "\u26ce", "\ud83d\udd31", "\ud83d\udd2f", "\ud83d\udebb",
- "\ud83d\udeae", "\ud83d\udeaf", "\ud83d\udeb0", "\ud83d\udeb1", "\ud83c\udd70", "\ud83c\udd71",
- "\ud83c\udd8e", "\ud83c\udd7e", "\ud83d\udcae", "\ud83d\udcaf", "\ud83d\udd20", "\ud83d\udd21",
- "\ud83d\udd22", "\ud83d\udd23", "\ud83d\udd24", "\u27bf", "\ud83d\udcf6", "\ud83d\udcf3",
- "\ud83d\udcf4", "\ud83d\udcf5", "\ud83d\udeb9", "\ud83d\udeba", "\ud83d\udebc", "\u267f",
- "\u267b", "\ud83d\udead", "\ud83d\udea9", "\u26a0", "\ud83c\ude01", "\ud83d\udd1e",
- "\u26d4", "\ud83c\udd92", "\ud83c\udd97", "\ud83c\udd95", "\ud83c\udd98", "\ud83c\udd99",
- "\ud83c\udd93", "\ud83c\udd96", "\ud83c\udd9a", "\ud83c\ude32", "\ud83c\ude33", "\ud83c\ude34",
- "\ud83c\ude35", "\ud83c\ude36", "\ud83c\ude37", "\ud83c\ude38", "\ud83c\ude39", "\ud83c\ude02",
- "\ud83c\ude3a", "\ud83c\ude50", "\ud83c\ude51", "\u3299", "\u00ae", "\u00a9",
- "\u2122", "\ud83c\ude1a", "\ud83c\ude2f", "\u3297", "\u2b55", "\u274c",
- "\u274e", "\u2139", "\ud83d\udeab", "\u2705", "\u2714", "\ud83d\udd17",
- "\u2734", "\u2733", "\u2795", "\u2796", "\u2716", "\u2797",
- "\ud83d\udca0", "\ud83d\udca1", "\ud83d\udca4", "\ud83d\udca2", "\ud83d\udd25", "\ud83d\udca5",
- "\ud83d\udca8", "\ud83d\udca6", "\ud83d\udcab", "\ud83d\udd5b", "\ud83d\udd67", "\ud83d\udd50",
- "\ud83d\udd5c", "\ud83d\udd51", "\ud83d\udd5d", "\ud83d\udd52", "\ud83d\udd5e", "\ud83d\udd53",
- "\ud83d\udd5f", "\ud83d\udd54", "\ud83d\udd60", "\ud83d\udd55", "\ud83d\udd61", "\ud83d\udd56",
- "\ud83d\udd62", "\ud83d\udd57", "\ud83d\udd63", "\ud83d\udd58", "\ud83d\udd64", "\ud83d\udd59",
- "\ud83d\udd65", "\ud83d\udd5a", "\ud83d\udd66", "\u2195", "\u2b06", "\u2197",
- "\u27a1", "\u2198", "\u2b07", "\u2199", "\u2b05", "\u2196",
- "\u2194", "\u2934", "\u2935", "\u23ea", "\u23eb", "\u23ec",
- "\u23e9", "\u25c0", "\u25b6", "\ud83d\udd3d", "\ud83d\udd3c", "\u2747",
- "\u2728", "\ud83d\udd34", "\ud83d\udd35", "\u26aa", "\u26ab", "\ud83d\udd33",
- "\ud83d\udd32", "\u2b50", "\ud83c\udf1f", "\ud83c\udf20", "\u25ab", "\u25aa",
- "\u25fd", "\u25fe", "\u25fb", "\u25fc", "\u2b1c", "\u2b1b",
- "\ud83d\udd38", "\ud83d\udd39", "\ud83d\udd36", "\ud83d\udd37", "\ud83d\udd3a", "\ud83d\udd3b",
- "\u2754", "\u2753", "\u2755", "\u2757", "\u203c", "\u2049",
- "\u3030", "\u27b0", "\u2660", "\u2665", "\u2663", "\u2666",
- "\ud83c\udd94", "\ud83d\udd11", "\u21a9", "\ud83c\udd91", "\ud83d\udd0d", "\ud83d\udd12",
- "\ud83d\udd13", "\u21aa", "\ud83d\udd10", "\u2611", "\ud83d\udd18", "\ud83d\udd0e",
- "\ud83d\udd16", "\ud83d\udd0f", "\ud83d\udd03", "\ud83d\udd00", "\ud83d\udd01", "\ud83d\udd02",
- "\ud83d\udd04", "\ud83d\udce7", "\ud83d\udd05", "\ud83d\udd06", "\ud83d\udd07", "\ud83d\udd08",
- "\ud83d\udd09", "\ud83d\udd0a",
- }, "emoji-symbol.png"),
+ "\u2764","\ud83d\udc9b","\ud83d\udc9a","\ud83d\udc99","\ud83d\udc9c","\ud83d\udc94","\u2763","\ud83d\udc95","\ud83d\udc9e","\ud83d\udc93","\ud83d\udc97","\ud83d\udc96","\ud83d\udc98","\ud83d\udc9d","\ud83d\udc9f","\u262e","\u271d","\u262a","\ud83d\udd49","\u2638","\u2721","\ud83d\udd2f","\ud83d\udd4e","\u262f","\u2626","\ud83d\uded0","\u26ce","\u2648","\u2649","\u264a","\u264b","\u264c","\u264d","\u264e","\u264f","\u2650","\u2651","\u2652","\u2653","\ud83c\udd94","\u269b","\ud83c\ude33","\ud83c\ude39","\u2622","\u2623","\ud83d\udcf4","\ud83d\udcf3","\ud83c\ude36","\ud83c\ude1a","\ud83c\ude38","\ud83c\ude3a","\ud83c\ude37","\u2734","\ud83c\udd9a","\ud83c\ude51","\ud83d\udcae","\ud83c\ude50","\u3299","\u3297","\ud83c\ude34","\ud83c\ude35","\ud83c\ude32","\ud83c\udd70","\ud83c\udd71","\ud83c\udd8e","\ud83c\udd91","\ud83c\udd7e","\ud83c\udd98","\u26d4","\ud83d\udcdb","\ud83d\udeab","\u274c","\u2b55","\ud83d\udca2","\u2668","\ud83d\udeb7","\ud83d\udeaf","\ud83d\udeb3","\ud83d\udeb1","\ud83d\udd1e","\ud83d\udcf5","\u2757","\u2755","\u2753","\u2754","\u203c","\u2049","\ud83d\udcaf","\ud83d\udd05","\ud83d\udd06","\ud83d\udd31","\u269c","\u303d","\u26a0","\ud83d\udeb8","\ud83d\udd30","\u267b","\ud83c\ude2f","\ud83d\udcb9","\u2747","\u2733","\u274e","\u2705","\ud83d\udca0","\ud83c\udf00","\u27bf","\ud83c\udf10","\u24c2","\ud83c\udfe7","\ud83c\ude02","\ud83d\udec2","\ud83d\udec3","\ud83d\udec4","\ud83d\udec5","\u267f","\ud83d\udead","\ud83d\udebe","\ud83c\udd7f","\ud83d\udeb0","\ud83d\udeb9","\ud83d\udeba","\ud83d\udebc","\ud83d\udebb","\ud83d\udeae","\ud83c\udfa6","\ud83d\udcf6","\ud83c\ude01","\ud83c\udd96","\ud83c\udd97","\ud83c\udd99","\ud83c\udd92","\ud83c\udd95","\ud83c\udd93","\u0030\u20e3","\u0031\u20e3","\u0032\u20e3","\u0033\u20e3","\u0034\u20e3","\u0035\u20e3","\u0036\u20e3","\u0037\u20e3","\u0038\u20e3","\u0039\u20e3","\ud83d\udd1f","\u002a\u20e3","\ud83d\udd22","\u25b6","\u23f8","\u23ef","\u23f9","\u23fa","\u23ed","\u23ee","\u23e9","\u23ea","\ud83d\udd00","\ud83d\udd01","\ud83d\udd02","\u25c0","\ud83d\udd3c","\ud83d\udd3d","\u23eb","\u23ec","\u27a1","\u2b05","\u2b06","\u2b07","\u2197","\u2198","\u2199","\u2196","\u2195","\u2194","\ud83d\udd04","\u21aa","\u21a9","\u2934","\u2935","\u0023\u20e3","\u2139","\ud83d\udd24","\ud83d\udd21","\ud83d\udd20","\ud83d\udd23","\ud83c\udfb5","\ud83c\udfb6","\u3030","\u27b0","\u2714","\ud83d\udd03","\u2795","\u2796","\u2797","\u2716","\ud83d\udcb2","\ud83d\udcb1","\u00a9","\u00ae","\u2122","\ud83d\udd1a","\ud83d\udd19","\ud83d\udd1b","\ud83d\udd1d","\ud83d\udd1c","\u2611","\ud83d\udd18","\u26aa","\u26ab","\ud83d\udd34","\ud83d\udd35","\ud83d\udd38","\ud83d\udd39","\ud83d\udd36","\ud83d\udd37","\ud83d\udd3a","\u25aa","\u25ab","\u2b1b","\u2b1c","\ud83d\udd3b","\u25fc","\u25fb","\u25fe","\u25fd","\ud83d\udd32","\ud83d\udd33","\ud83d\udd08","\ud83d\udd09","\ud83d\udd0a","\ud83d\udd07","\ud83d\udce3","\ud83d\udce2","\ud83d\udd14","\ud83d\udd15","\ud83c\udccf","\ud83c\udc04","\u2660","\u2663","\u2665","\u2666","\ud83c\udfb4","\ud83d\udcad","\ud83d\uddef","\ud83d\udcac","\ud83d\udde8","\ud83d\udd50","\ud83d\udd51","\ud83d\udd52","\ud83d\udd53","\ud83d\udd54","\ud83d\udd55","\ud83d\udd56","\ud83d\udd57","\ud83d\udd58","\ud83d\udd59","\ud83d\udd5a","\ud83d\udd5b","\ud83d\udd5c","\ud83d\udd5d","\ud83d\udd5e","\ud83d\udd5f","\ud83d\udd60","\ud83d\udd61","\ud83d\udd62","\ud83d\udd63","\ud83d\udd64","\ud83d\udd65","\ud83d\udd66","\ud83d\udd67"
+ }, "emoji/Symbols.png"),
+ new StaticEmojiPageModel(R.attr.emoji_category_flags, new String[] {
+ "\ud83c\udde6\ud83c\uddeb","\ud83c\udde6\ud83c\uddfd","\ud83c\udde6\ud83c\uddf1","\ud83c\udde9\ud83c\uddff","\ud83c\udde6\ud83c\uddf8","\ud83c\udde6\ud83c\udde9","\ud83c\udde6\ud83c\uddf4","\ud83c\udde6\ud83c\uddee","\ud83c\udde6\ud83c\uddf6","\ud83c\udde6\ud83c\uddec","\ud83c\udde6\ud83c\uddf7","\ud83c\udde6\ud83c\uddf2","\ud83c\udde6\ud83c\uddfc","\ud83c\udde6\ud83c\uddfa","\ud83c\udde6\ud83c\uddf9","\ud83c\udde6\ud83c\uddff","\ud83c\udde7\ud83c\uddf8","\ud83c\udde7\ud83c\udded","\ud83c\udde7\ud83c\udde9","\ud83c\udde7\ud83c\udde7","\ud83c\udde7\ud83c\uddfe","\ud83c\udde7\ud83c\uddea","\ud83c\udde7\ud83c\uddff","\ud83c\udde7\ud83c\uddef","\ud83c\udde7\ud83c\uddf2","\ud83c\udde7\ud83c\uddf9","\ud83c\udde7\ud83c\uddf4","\ud83c\udde7\ud83c\uddf6","\ud83c\udde7\ud83c\udde6","\ud83c\udde7\ud83c\uddfc","\ud83c\udde7\ud83c\uddf7","\ud83c\uddee\ud83c\uddf4","\ud83c\uddfb\ud83c\uddec","\ud83c\udde7\ud83c\uddf3","\ud83c\udde7\ud83c\uddec","\ud83c\udde7\ud83c\uddeb","\ud83c\udde7\ud83c\uddee","\ud83c\udde8\ud83c\uddfb","\ud83c\uddf0\ud83c\udded","\ud83c\udde8\ud83c\uddf2","\ud83c\udde8\ud83c\udde6","\ud83c\uddee\ud83c\udde8","\ud83c\uddf0\ud83c\uddfe","\ud83c\udde8\ud83c\uddeb","\ud83c\uddf9\ud83c\udde9","\ud83c\udde8\ud83c\uddf1","\ud83c\udde8\ud83c\uddf3","\ud83c\udde8\ud83c\uddfd","\ud83c\udde8\ud83c\udde8","\ud83c\udde8\ud83c\uddf4","\ud83c\uddf0\ud83c\uddf2","\ud83c\udde8\ud83c\uddec","\ud83c\udde8\ud83c\udde9","\ud83c\udde8\ud83c\uddf0","\ud83c\udde8\ud83c\uddf7","\ud83c\udded\ud83c\uddf7","\ud83c\udde8\ud83c\uddfa","\ud83c\udde8\ud83c\uddfc","\ud83c\udde8\ud83c\uddfe","\ud83c\udde8\ud83c\uddff","\ud83c\udde9\ud83c\uddf0","\ud83c\udde9\ud83c\uddef","\ud83c\udde9\ud83c\uddf2","\ud83c\udde9\ud83c\uddf4","\ud83c\uddea\ud83c\udde8","\ud83c\uddea\ud83c\uddec","\ud83c\uddf8\ud83c\uddfb","\ud83c\uddec\ud83c\uddf6","\ud83c\uddea\ud83c\uddf7","\ud83c\uddea\ud83c\uddea","\ud83c\uddea\ud83c\uddf9","\ud83c\uddea\ud83c\uddfa","\ud83c\uddeb\ud83c\uddf0","\ud83c\uddeb\ud83c\uddf4","\ud83c\uddeb\ud83c\uddef","\ud83c\uddeb\ud83c\uddee","\ud83c\uddeb\ud83c\uddf7","\ud83c\uddec\ud83c\uddeb","\ud83c\uddf5\ud83c\uddeb","\ud83c\uddf9\ud83c\uddeb","\ud83c\uddec\ud83c\udde6","\ud83c\uddec\ud83c\uddf2","\ud83c\uddec\ud83c\uddea","\ud83c\udde9\ud83c\uddea","\ud83c\uddec\ud83c\udded","\ud83c\uddec\ud83c\uddee","\ud83c\uddec\ud83c\uddf7","\ud83c\uddec\ud83c\uddf1","\ud83c\uddec\ud83c\udde9","\ud83c\uddec\ud83c\uddf5","\ud83c\uddec\ud83c\uddfa","\ud83c\uddec\ud83c\uddf9","\ud83c\uddec\ud83c\uddec","\ud83c\uddec\ud83c\uddf3","\ud83c\uddec\ud83c\uddfc","\ud83c\uddec\ud83c\uddfe","\ud83c\udded\ud83c\uddf9","\ud83c\udded\ud83c\uddf3","\ud83c\udded\ud83c\uddf0","\ud83c\udded\ud83c\uddfa","\ud83c\uddee\ud83c\uddf8","\ud83c\uddee\ud83c\uddf3","\ud83c\uddee\ud83c\udde9","\ud83c\uddee\ud83c\uddf7","\ud83c\uddee\ud83c\uddf6","\ud83c\uddee\ud83c\uddea","\ud83c\uddee\ud83c\uddf2","\ud83c\uddee\ud83c\uddf1","\ud83c\uddee\ud83c\uddf9","\ud83c\udde8\ud83c\uddee","\ud83c\uddef\ud83c\uddf2","\ud83c\uddef\ud83c\uddf5","\ud83c\uddef\ud83c\uddea","\ud83c\uddef\ud83c\uddf4","\ud83c\uddf0\ud83c\uddff","\ud83c\uddf0\ud83c\uddea","\ud83c\uddf0\ud83c\uddee","\ud83c\uddfd\ud83c\uddf0","\ud83c\uddf0\ud83c\uddfc","\ud83c\uddf0\ud83c\uddec","\ud83c\uddf1\ud83c\udde6","\ud83c\uddf1\ud83c\uddfb","\ud83c\uddf1\ud83c\udde7","\ud83c\uddf1\ud83c\uddf8","\ud83c\uddf1\ud83c\uddf7","\ud83c\uddf1\ud83c\uddfe","\ud83c\uddf1\ud83c\uddee","\ud83c\uddf1\ud83c\uddf9","\ud83c\uddf1\ud83c\uddfa","\ud83c\uddf2\ud83c\uddf4","\ud83c\uddf2\ud83c\uddf0","\ud83c\uddf2\ud83c\uddec","\ud83c\uddf2\ud83c\uddfc","\ud83c\uddf2\ud83c\uddfe","\ud83c\uddf2\ud83c\uddfb","\ud83c\uddf2\ud83c\uddf1","\ud83c\uddf2\ud83c\uddf9","\ud83c\uddf2\ud83c\udded","\ud83c\uddf2\ud83c\uddf6","\ud83c\uddf2\ud83c\uddf7","\ud83c\uddf2\ud83c\uddfa","\ud83c\uddfe\ud83c\uddf9","\ud83c\uddf2\ud83c\uddfd","\ud83c\uddeb\ud83c\uddf2","\ud83c\uddf2\ud83c\udde9","\ud83c\uddf2\ud83c\udde8","\ud83c\uddf2\ud83c\uddf3","\ud83c\uddf2\ud83c\uddea","\ud83c\uddf2\ud83c\uddf8","\ud83c\uddf2\ud83c\udde6","\ud83c\uddf2\ud83c\uddff","\ud83c\uddf2\ud83c\uddf2","\ud83c\uddf3\ud83c\udde6","\ud83c\uddf3\ud83c\uddf7","\ud83c\uddf3\ud83c\uddf5","\ud83c\uddf3\ud83c\uddf1","\ud83c\uddf3\ud83c\udde8","\ud83c\uddf3\ud83c\uddff","\ud83c\uddf3\ud83c\uddee","\ud83c\uddf3\ud83c\uddea","\ud83c\uddf3\ud83c\uddec","\ud83c\uddf3\ud83c\uddfa","\ud83c\uddf3\ud83c\uddeb","\ud83c\uddf2\ud83c\uddf5","\ud83c\uddf0\ud83c\uddf5","\ud83c\uddf3\ud83c\uddf4","\ud83c\uddf4\ud83c\uddf2","\ud83c\uddf5\ud83c\uddf0","\ud83c\uddf5\ud83c\uddfc","\ud83c\uddf5\ud83c\uddf8","\ud83c\uddf5\ud83c\udde6","\ud83c\uddf5\ud83c\uddec","\ud83c\uddf5\ud83c\uddfe","\ud83c\uddf5\ud83c\uddea","\ud83c\uddf5\ud83c\udded","\ud83c\uddf5\ud83c\uddf3","\ud83c\uddf5\ud83c\uddf1","\ud83c\uddf5\ud83c\uddf9","\ud83c\uddf5\ud83c\uddf7","\ud83c\uddf6\ud83c\udde6","\ud83c\uddf7\ud83c\uddea","\ud83c\uddf7\ud83c\uddf4","\ud83c\uddf7\ud83c\uddfa","\ud83c\uddf7\ud83c\uddfc","\ud83c\udde7\ud83c\uddf1","\ud83c\uddf8\ud83c\udded","\ud83c\uddf0\ud83c\uddf3","\ud83c\uddf1\ud83c\udde8","\ud83c\uddf5\ud83c\uddf2","\ud83c\uddfb\ud83c\udde8","\ud83c\uddfc\ud83c\uddf8","\ud83c\uddf8\ud83c\uddf2","\ud83c\uddf8\ud83c\uddf9","\ud83c\uddf8\ud83c\udde6","\ud83c\uddf8\ud83c\uddf3","\ud83c\uddf7\ud83c\uddf8","\ud83c\uddf8\ud83c\udde8","\ud83c\uddf8\ud83c\uddf1","\ud83c\uddf8\ud83c\uddec","\ud83c\uddf8\ud83c\uddfd","\ud83c\uddf8\ud83c\uddf0","\ud83c\uddf8\ud83c\uddee","\ud83c\uddf8\ud83c\udde7","\ud83c\uddf8\ud83c\uddf4","\ud83c\uddff\ud83c\udde6","\ud83c\uddec\ud83c\uddf8","\ud83c\uddf0\ud83c\uddf7","\ud83c\uddf8\ud83c\uddf8","\ud83c\uddea\ud83c\uddf8","\ud83c\uddf1\ud83c\uddf0","\ud83c\uddf8\ud83c\udde9","\ud83c\uddf8\ud83c\uddf7","\ud83c\uddf8\ud83c\uddff","\ud83c\uddf8\ud83c\uddea","\ud83c\udde8\ud83c\udded","\ud83c\uddf8\ud83c\uddfe","\ud83c\uddf9\ud83c\uddfc","\ud83c\uddf9\ud83c\uddef","\ud83c\uddf9\ud83c\uddff","\ud83c\uddf9\ud83c\udded","\ud83c\uddf9\ud83c\uddf1","\ud83c\uddf9\ud83c\uddec","\ud83c\uddf9\ud83c\uddf0","\ud83c\uddf9\ud83c\uddf4","\ud83c\uddf9\ud83c\uddf9","\ud83c\uddf9\ud83c\uddf3","\ud83c\uddf9\ud83c\uddf7","\ud83c\uddf9\ud83c\uddf2","\ud83c\uddf9\ud83c\udde8","\ud83c\uddf9\ud83c\uddfb","\ud83c\uddfa\ud83c\uddec","\ud83c\uddfa\ud83c\udde6","\ud83c\udde6\ud83c\uddea","\ud83c\uddec\ud83c\udde7","\ud83c\uddfa\ud83c\uddf8","\ud83c\uddfb\ud83c\uddee","\ud83c\uddfa\ud83c\uddfe","\ud83c\uddfa\ud83c\uddff","\ud83c\uddfb\ud83c\uddfa","\ud83c\uddfb\ud83c\udde6","\ud83c\uddfb\ud83c\uddea","\ud83c\uddfb\ud83c\uddf3","\ud83c\uddfc\ud83c\uddeb","\ud83c\uddea\ud83c\udded","\ud83c\uddfe\ud83c\uddea","\ud83c\uddff\ud83c\uddf2","\ud83c\uddff\ud83c\uddfc","\ud83c\udde6\ud83c\udde8","\ud83c\udde7\ud83c\uddfb","\ud83c\udde8\ud83c\uddf5","\ud83c\udde9\ud83c\uddec","\ud83c\uddea\ud83c\udde6","\ud83c\udded\ud83c\uddf2","\ud83c\uddf2\ud83c\uddeb","\ud83c\uddf8\ud83c\uddef","\ud83c\uddf9\ud83c\udde6","\ud83c\uddfa\ud83c\uddf2"
+ }, "emoji/Flags.png"),
new StaticEmojiPageModel(R.attr.emoji_category_emoticons, new String[] {
":-)", ";-)", "(-:", ":->", ":-D", "\\o/",
":-P", "B-)", ":-$", ":-*", "O:-)", "=-O",
"O_O", "O_o", "o_O", ":O", ":-!", ":-x",
":-|", ":-\\", ":-(", ":'(", ":-[", ">:-(",
- "(\u0361\u2022 \u035c\u0296 \u0361\u2022)", "(\u0361\u00b0 \u035c\u0296 \u0361\u00b0)",
- "^.^", "^_^", "\u2022\u1d17\u2022",
- "\u01aa(\u02d8\u2323\u02d8)\u0283", "\\(\u02c6\u02da\u02c6)/",
- "\\(\u2022\u25e1\u2022)/", "(\u273f\u25e0\u203f\u25e0)",
- "(\u3063\u2312\u203f\u2312)\u3063", "(\u3063'\u0437')\u3063",
- "(\u10e6\u02d8\u2323\u02d8\u10e6)", "~(\u02d8\u25be\u02d8~)",
- "\u1555( \u141b )\u1557", "\u00af\\(\u00b0_o)/\u00af",
- "\u00af\\_(\u30c4)_/\u00af", "(\u2500\u203f\u203f\u2500)",
- "(\u00ac_\u00ac)", "(>_<)",
- "(\u0360\u25c9_\u25c9\u1dc5 )", "(\u2565\ufe4f\u2565)",
- "\u0ca5_\u0ca5", "\u0ca0_\u0ca0",
- "\u1566(\u00f2_\u00f3\u02c7)\u1564", "(\u0e07\ufe21'-'\ufe20)\u0e07",
- "(\u261e\uff9f\u30ee\uff9f)\u261e", "\u261c(\uff9f\u30ee\uff9f\u261c)",
- "\u261c(\u2312\u25bd\u2312)\u261e", "(\u256f\u00b0\u25a1\u00b0)\u256f\ufe35",
- "\u253b\u2501\u253b", "\u252c\u2500\u252c",
- "\u25e1\u30ce(\u00b0\u2013\u00b0\u30ce)", "\u30fd(\u00b0\u25c7\u00b0 )\u30ce",
- "(\u2609\u0303\u2092\u2609)", "(^._.^)\uff89",
- "\u0e05^\u2022\ufecc\u2022^\u0e05", "(\u2022_\u2022) ",
- "(\u2022_\u2022)>\u2310\u25a0-\u25a0", " (\u2310\u25a0_\u25a0)",
+ "^.^", "^_^", "\\(\u02c6\u02da\u02c6)/",
+ "\u30fd(\u00b0\u25c7\u00b0 )\u30ce", "\u00af\\(\u00b0_o)/\u00af",
+ "\u00af\\_(\u30c4)_/\u00af", "(\u00ac_\u00ac)",
+ "(>_<)", "(\u2565\ufe4f\u2565)", "(\u261e\uff9f\u30ee\uff9f)\u261e",
+ "\u261c(\uff9f\u30ee\uff9f\u261c)", "\u261c(\u2312\u25bd\u2312)\u261e",
+ "(\u256f\u00b0\u25a1\u00b0)\u256f\ufe35", "\u253b\u2501\u253b",
+ "\u252c\u2500\u252c", "\u30ce(\u00b0\u2013\u00b0\u30ce)",
+ "(^._.^)\uff89", "\u0e05^\u2022\ufecc\u2022^\u0e05",
+ "(\u2022_\u2022)", " \u25a0-\u25a0\u00ac <(\u2022_\u2022) ",
+ "(\u25a0_\u25a0\u00ac)"
}, null));
}
diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
index 295d988aead..eab1a0597dd 100644
--- a/src/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
+++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
@@ -9,7 +9,6 @@
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
-import android.os.AsyncTask;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.support.annotation.NonNull;
@@ -17,42 +16,33 @@
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.util.Log;
-import android.util.SparseArray;
import android.widget.TextView;
import org.thoughtcrime.securesms.R;
-import org.thoughtcrime.securesms.util.BitmapDecodingException;
-import org.thoughtcrime.securesms.util.BitmapUtil;
+import org.thoughtcrime.securesms.components.emoji.parsing.EmojiDrawInfo;
+import org.thoughtcrime.securesms.components.emoji.parsing.EmojiPageBitmap;
+import org.thoughtcrime.securesms.components.emoji.parsing.EmojiParser;
+import org.thoughtcrime.securesms.components.emoji.parsing.EmojiTree;
import org.thoughtcrime.securesms.util.FutureTaskListener;
-import org.thoughtcrime.securesms.util.ListenableFutureTask;
import org.thoughtcrime.securesms.util.Util;
-import java.io.IOException;
-import java.lang.ref.SoftReference;
-import java.util.concurrent.Callable;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.util.List;
+
+class EmojiProvider {
-public class EmojiProvider {
private static final String TAG = EmojiProvider.class.getSimpleName();
private static volatile EmojiProvider instance = null;
private static final Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.ANTI_ALIAS_FLAG);
- private final SparseArray offsets = new SparseArray<>();
-
- @SuppressWarnings("MalformedRegex")
- // 0x203c,0x2049 0x20a0-0x32ff 0x1f00-0x1fff 0xfe4e5-0xfe4ee
- // |== !!, ?! ==||==== misc ====||======== emoticons ========||========= flags ==========|
- private static final Pattern EMOJI_RANGE = Pattern.compile("[\\u203c\\u2049\\u20a0-\\u32ff\\ud83c\\udc00-\\ud83d\\udeff\\udbb9\\udce5-\\udbb9\\udcee]");
+ private final EmojiTree emojiTree = new EmojiTree();
- public static final int EMOJI_RAW_HEIGHT = 64;
- public static final int EMOJI_RAW_WIDTH = 64;
- public static final int EMOJI_VERT_PAD = 0;
- public static final int EMOJI_PER_ROW = 32;
+ private static final int EMOJI_RAW_HEIGHT = 64;
+ private static final int EMOJI_RAW_WIDTH = 64;
+ private static final int EMOJI_VERT_PAD = 0;
+ private static final int EMOJI_PER_ROW = 32;
- private final Context context;
- private final float decodeScale;
- private final float verticalPad;
+ private final float decodeScale;
+ private final float verticalPad;
public static EmojiProvider getInstance(Context context) {
if (instance == null) {
@@ -66,29 +56,31 @@ public static EmojiProvider getInstance(Context context) {
}
private EmojiProvider(Context context) {
- this.context = context.getApplicationContext();
this.decodeScale = Math.min(1f, context.getResources().getDimension(R.dimen.emoji_drawer_size) / EMOJI_RAW_HEIGHT);
this.verticalPad = EMOJI_VERT_PAD * this.decodeScale;
+
for (EmojiPageModel page : EmojiPages.PAGES) {
if (page.hasSpriteMap()) {
- final EmojiPageBitmap pageBitmap = new EmojiPageBitmap(page);
- for (int i=0; i < page.getEmoji().length; i++) {
- offsets.put(Character.codePointAt(page.getEmoji()[i], 0), new DrawInfo(pageBitmap, i));
+ EmojiPageBitmap pageBitmap = new EmojiPageBitmap(context, page, decodeScale);
+
+ for (int i=0;i matches = new EmojiParser(emojiTree).findCandidates(text);
+ SpannableStringBuilder builder = new SpannableStringBuilder(text);
+
+ for (EmojiParser.Candidate candidate : matches) {
+ Drawable drawable = getEmojiDrawable(candidate.getDrawInfo());
+
if (drawable != null) {
- builder.setSpan(new EmojiSpan(drawable, tv), matches.start(), matches.end(),
+ builder.setSpan(new EmojiSpan(drawable, tv), candidate.getStartIndex(), candidate.getEndIndex(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
@@ -96,17 +88,18 @@ private EmojiProvider(Context context) {
return builder;
}
- public Drawable getEmojiDrawable(int emojiCode) {
- return getEmojiDrawable(offsets.get(emojiCode));
+ @Nullable Drawable getEmojiDrawable(CharSequence emoji) {
+ EmojiDrawInfo drawInfo = emojiTree.getEmoji(emoji, 0, emoji.length());
+ return getEmojiDrawable(drawInfo);
}
- private Drawable getEmojiDrawable(DrawInfo drawInfo) {
+ private @Nullable Drawable getEmojiDrawable(@Nullable EmojiDrawInfo drawInfo) {
if (drawInfo == null) {
return null;
}
final EmojiDrawable drawable = new EmojiDrawable(drawInfo, decodeScale);
- drawInfo.page.get().addListener(new FutureTaskListener() {
+ drawInfo.getPage().get().addListener(new FutureTaskListener() {
@Override public void onSuccess(final Bitmap result) {
Util.runOnMain(new Runnable() {
@Override public void run() {
@@ -122,34 +115,36 @@ private Drawable getEmojiDrawable(DrawInfo drawInfo) {
return drawable;
}
- public class EmojiDrawable extends Drawable {
- private final DrawInfo info;
- private Bitmap bmp;
- private float intrinsicWidth;
- private float intrinsicHeight;
+ class EmojiDrawable extends Drawable {
+ private final EmojiDrawInfo info;
+ private Bitmap bmp;
+ private float intrinsicWidth;
+ private float intrinsicHeight;
- @Override public int getIntrinsicWidth() {
+ @Override
+ public int getIntrinsicWidth() {
return (int)intrinsicWidth;
}
- @Override public int getIntrinsicHeight() {
+ @Override
+ public int getIntrinsicHeight() {
return (int)intrinsicHeight;
}
- public EmojiDrawable(DrawInfo info, float decodeScale) {
+ EmojiDrawable(EmojiDrawInfo info, float decodeScale) {
this.info = info;
this.intrinsicWidth = EMOJI_RAW_WIDTH * decodeScale;
this.intrinsicHeight = EMOJI_RAW_HEIGHT * decodeScale;
}
@Override
- public void draw(Canvas canvas) {
+ public void draw(@NonNull Canvas canvas) {
if (bmp == null) {
return;
}
- final int row = info.index / EMOJI_PER_ROW;
- final int row_index = info.index % EMOJI_PER_ROW;
+ final int row = info.getIndex() / EMOJI_PER_ROW;
+ final int row_index = info.getIndex() % EMOJI_PER_ROW;
canvas.drawBitmap(bmp,
new Rect((int)(row_index * intrinsicWidth),
@@ -181,85 +176,4 @@ public void setAlpha(int alpha) { }
public void setColorFilter(ColorFilter cf) { }
}
- private static class DrawInfo {
- EmojiPageBitmap page;
- int index;
-
- public DrawInfo(final EmojiPageBitmap page, final int index) {
- this.page = page;
- this.index = index;
- }
-
- @Override
- public String toString() {
- return "DrawInfo{" +
- "page=" + page +
- ", index=" + index +
- '}';
- }
- }
-
- private class EmojiPageBitmap {
- private EmojiPageModel model;
- private SoftReference bitmapReference;
- private ListenableFutureTask task;
-
- public EmojiPageBitmap(EmojiPageModel model) {
- this.model = model;
- }
-
- private ListenableFutureTask get() {
- Util.assertMainThread();
-
- if (bitmapReference != null && bitmapReference.get() != null) {
- return new ListenableFutureTask<>(bitmapReference.get());
- } else if (task != null) {
- return task;
- } else {
- Callable callable = new Callable() {
- @Override public Bitmap call() throws Exception {
- try {
- Log.w(TAG, "loading page " + model.getSprite());
- return loadPage();
- } catch (IOException ioe) {
- Log.w(TAG, ioe);
- }
- return null;
- }
- };
- task = new ListenableFutureTask<>(callable);
- new AsyncTask() {
- @Override protected Void doInBackground(Void... params) {
- task.run();
- return null;
- }
-
- @Override protected void onPostExecute(Void aVoid) {
- task = null;
- }
- }.execute();
- }
- return task;
- }
-
- private Bitmap loadPage() throws IOException {
- if (bitmapReference != null && bitmapReference.get() != null) return bitmapReference.get();
-
- try {
- final Bitmap bitmap = BitmapUtil.createScaledBitmap(context,
- "file:///android_asset/" + model.getSprite(),
- decodeScale);
- bitmapReference = new SoftReference<>(bitmap);
- Log.w(TAG, "onPageLoaded(" + model.getSprite() + ")");
- return bitmap;
- } catch (BitmapDecodingException e) {
- Log.w(TAG, e);
- throw new IOException(e);
- }
- }
-
- @Override public String toString() {
- return model.getSprite();
- }
- }
}
diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiView.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiView.java
index 63b52213d6f..720f0c53dd1 100644
--- a/src/org/thoughtcrime/securesms/components/emoji/EmojiView.java
+++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiView.java
@@ -32,7 +32,7 @@ public EmojiView(Context context, AttributeSet attrs, int defStyleAttr) {
public void setEmoji(String emoji) {
this.emoji = emoji;
this.drawable = EmojiProvider.getInstance(getContext())
- .getEmojiDrawable(Character.codePointAt(emoji, 0));
+ .getEmojiDrawable(emoji);
postInvalidate();
}
diff --git a/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiDrawInfo.java b/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiDrawInfo.java
new file mode 100644
index 00000000000..142b2b2549e
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiDrawInfo.java
@@ -0,0 +1,31 @@
+package org.thoughtcrime.securesms.components.emoji.parsing;
+
+
+import android.support.annotation.NonNull;
+
+public class EmojiDrawInfo {
+
+ private final EmojiPageBitmap page;
+ private final int index;
+
+ public EmojiDrawInfo(final @NonNull EmojiPageBitmap page, final int index) {
+ this.page = page;
+ this.index = index;
+ }
+
+ public @NonNull EmojiPageBitmap getPage() {
+ return page;
+ }
+
+ public int getIndex() {
+ return index;
+ }
+
+ @Override
+ public String toString() {
+ return "DrawInfo{" +
+ "page=" + page +
+ ", index=" + index +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java b/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java
new file mode 100644
index 00000000000..da90721eab7
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java
@@ -0,0 +1,90 @@
+package org.thoughtcrime.securesms.components.emoji.parsing;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.os.AsyncTask;
+import android.support.annotation.NonNull;
+import android.util.Log;
+
+import org.thoughtcrime.securesms.components.emoji.EmojiPageModel;
+import org.thoughtcrime.securesms.util.BitmapDecodingException;
+import org.thoughtcrime.securesms.util.BitmapUtil;
+import org.thoughtcrime.securesms.util.ListenableFutureTask;
+import org.thoughtcrime.securesms.util.Util;
+
+import java.io.IOException;
+import java.lang.ref.SoftReference;
+import java.util.concurrent.Callable;
+
+public class EmojiPageBitmap {
+
+ private static final String TAG = EmojiPageBitmap.class.getName();
+
+ private final Context context;
+ private final EmojiPageModel model;
+ private final float decodeScale;
+
+ private SoftReference bitmapReference;
+ private ListenableFutureTask task;
+
+ public EmojiPageBitmap(@NonNull Context context, @NonNull EmojiPageModel model, float decodeScale) {
+ this.context = context.getApplicationContext();
+ this.model = model;
+ this.decodeScale = decodeScale;
+ }
+
+ public ListenableFutureTask get() {
+ Util.assertMainThread();
+
+ if (bitmapReference != null && bitmapReference.get() != null) {
+ return new ListenableFutureTask<>(bitmapReference.get());
+ } else if (task != null) {
+ return task;
+ } else {
+ Callable callable = new Callable() {
+ @Override public Bitmap call() throws Exception {
+ try {
+ Log.w(TAG, "loading page " + model.getSprite());
+ return loadPage();
+ } catch (IOException ioe) {
+ Log.w(TAG, ioe);
+ }
+ return null;
+ }
+ };
+ task = new ListenableFutureTask<>(callable);
+ new AsyncTask() {
+ @Override protected Void doInBackground(Void... params) {
+ task.run();
+ return null;
+ }
+
+ @Override protected void onPostExecute(Void aVoid) {
+ task = null;
+ }
+ }.execute();
+ }
+ return task;
+ }
+
+ private Bitmap loadPage() throws IOException {
+ if (bitmapReference != null && bitmapReference.get() != null) return bitmapReference.get();
+
+ try {
+ final Bitmap bitmap = BitmapUtil.createScaledBitmap(context,
+ "file:///android_asset/" + model.getSprite(),
+ decodeScale);
+ bitmapReference = new SoftReference<>(bitmap);
+ Log.w(TAG, "onPageLoaded(" + model.getSprite() + ")");
+ return bitmap;
+ } catch (BitmapDecodingException e) {
+ Log.w(TAG, e);
+ throw new IOException(e);
+ }
+ }
+
+ @Override
+ public String toString() {
+ return model.getSprite();
+ }
+}
diff --git a/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiParser.java b/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiParser.java
new file mode 100644
index 00000000000..95a92b0b2d2
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiParser.java
@@ -0,0 +1,108 @@
+/**
+ * Copyright (c) 2014-present Vincent DURMONT vdurmont@gmail.com
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+package org.thoughtcrime.securesms.components.emoji.parsing;
+
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Based in part on code from emoji-java
+ */
+public class EmojiParser {
+
+ private final EmojiTree emojiTree;
+
+ public EmojiParser(EmojiTree emojiTree) {
+ this.emojiTree = emojiTree;
+ }
+
+ public @NonNull List findCandidates(@Nullable CharSequence text) {
+ List results = new LinkedList<>();
+
+ if (text == null) return results;
+
+ for (int i = 0; i < text.length(); i++) {
+ int emojiEnd = getEmojiEndPos(text, i);
+
+ if (emojiEnd != -1) {
+ EmojiDrawInfo drawInfo = emojiTree.getEmoji(text, i, emojiEnd);
+
+ if (emojiEnd + 2 <= text.length()) {
+ if (Fitzpatrick.fitzpatrickFromUnicode(text, emojiEnd) != null) {
+ emojiEnd += 2;
+ }
+ }
+
+ results.add(new Candidate(i, emojiEnd, drawInfo));
+
+ i = emojiEnd - 1;
+ }
+ }
+
+ return results;
+ }
+
+ private int getEmojiEndPos(CharSequence text, int startPos) {
+ int best = -1;
+
+ for (int j = startPos + 1; j <= text.length(); j++) {
+ EmojiTree.Matches status = emojiTree.isEmoji(text, startPos, j);
+
+ if (status.exactMatch()) {
+ best = j;
+ } else if (status.impossibleMatch()) {
+ return best;
+ }
+ }
+
+ return best;
+ }
+
+ public class Candidate {
+
+ private final int startIndex;
+ private final int endIndex;
+ private final EmojiDrawInfo drawInfo;
+
+ Candidate(int startIndex, int endIndex, EmojiDrawInfo drawInfo) {
+ this.startIndex = startIndex;
+ this.endIndex = endIndex;
+ this.drawInfo = drawInfo;
+ }
+
+ public EmojiDrawInfo getDrawInfo() {
+ return drawInfo;
+ }
+
+ public int getEndIndex() {
+ return endIndex;
+ }
+
+ public int getStartIndex() {
+ return startIndex;
+ }
+ }
+
+}
diff --git a/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiTree.java b/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiTree.java
new file mode 100644
index 00000000000..dc8ea7c5d81
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiTree.java
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2014-present Vincent DURMONT vdurmont@gmail.com
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+package org.thoughtcrime.securesms.components.emoji.parsing;
+
+import android.support.annotation.Nullable;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Based in part on code from emoji-java
+ */
+public class EmojiTree {
+
+ private final EmojiTreeNode root = new EmojiTreeNode();
+
+ public void add(String emojiEncoding, EmojiDrawInfo emoji) {
+ EmojiTreeNode tree = root;
+
+ for (char c: emojiEncoding.toCharArray()) {
+ if (!tree.hasChild(c)) {
+ tree.addChild(c);
+ }
+
+ tree = tree.getChild(c);
+ }
+
+ tree.setEmoji(emoji);
+ }
+
+ public Matches isEmoji(CharSequence sequence, int startPosition, int endPosition) {
+ if (sequence == null) {
+ return Matches.POSSIBLY;
+ }
+
+ EmojiTreeNode tree = root;
+
+ for (int i=startPosition; i children = new HashMap<>();
+ private EmojiDrawInfo emoji;
+
+ public void setEmoji(EmojiDrawInfo emoji) {
+ this.emoji = emoji;
+ }
+
+ public @Nullable EmojiDrawInfo getEmoji() {
+ return emoji;
+ }
+
+ boolean hasChild(char child) {
+ return children.containsKey(child);
+ }
+
+ void addChild(char child) {
+ children.put(child, new EmojiTreeNode());
+ }
+
+ EmojiTreeNode getChild(char child) {
+ return children.get(child);
+ }
+
+ boolean isEndOfEmoji() {
+ return emoji != null;
+ }
+ }
+
+ public enum Matches {
+ EXACTLY, POSSIBLY, IMPOSSIBLE;
+
+ public boolean exactMatch() {
+ return this == EXACTLY;
+ }
+
+ public boolean impossibleMatch() {
+ return this == IMPOSSIBLE;
+ }
+ }
+
+}
diff --git a/src/org/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick.java b/src/org/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick.java
new file mode 100644
index 00000000000..68315a6eb68
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick.java
@@ -0,0 +1,64 @@
+package org.thoughtcrime.securesms.components.emoji.parsing;
+
+
+public enum Fitzpatrick {
+ /**
+ * Fitzpatrick modifier of type 1/2 (pale white/white)
+ */
+ TYPE_1_2("\uD83C\uDFFB"),
+
+ /**
+ * Fitzpatrick modifier of type 3 (cream white)
+ */
+ TYPE_3("\uD83C\uDFFC"),
+
+ /**
+ * Fitzpatrick modifier of type 4 (moderate brown)
+ */
+ TYPE_4("\uD83C\uDFFD"),
+
+ /**
+ * Fitzpatrick modifier of type 5 (dark brown)
+ */
+ TYPE_5("\uD83C\uDFFE"),
+
+ /**
+ * Fitzpatrick modifier of type 6 (black)
+ */
+ TYPE_6("\uD83C\uDFFF");
+
+ /**
+ * The unicode representation of the Fitzpatrick modifier
+ */
+ public final String unicode;
+
+ Fitzpatrick(String unicode) {
+ this.unicode = unicode;
+ }
+
+
+ public static Fitzpatrick fitzpatrickFromUnicode(CharSequence unicode, int index) {
+ for (Fitzpatrick v : values()) {
+ boolean match = true;
+
+ for (int i=0;i display(final SignalPlace place) {
- final SettableFuture future = new SettableFuture<>();
-
- this.mapView.onCreate(null);
- this.mapView.onResume();
-
- this.mapView.setVisibility(View.VISIBLE);
- this.imageView.setVisibility(View.GONE);
-
- this.mapView.getMapAsync(new OnMapReadyCallback() {
- @Override
- public void onMapReady(final GoogleMap googleMap) {
- googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(place.getLatLong(), 13));
- googleMap.addMarker(new MarkerOptions().position(place.getLatLong()));
- googleMap.setBuildingsEnabled(true);
- googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
- googleMap.getUiSettings().setAllGesturesEnabled(false);
- googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
- @Override
- public void onMapLoaded() {
- googleMap.snapshot(new GoogleMap.SnapshotReadyCallback() {
- @Override
- public void onSnapshotReady(Bitmap bitmap) {
- future.set(bitmap);
- imageView.setImageBitmap(bitmap);
- imageView.setVisibility(View.VISIBLE);
- mapView.setVisibility(View.GONE);
- mapView.onPause();
- mapView.onDestroy();
- }
- });
- }
- });
- }
- });
-
- this.textView.setText(place.getDescription());
-
- return future;
- }
-
-}
diff --git a/src/org/thoughtcrime/securesms/components/location/SignalPlace.java b/src/org/thoughtcrime/securesms/components/location/SignalPlace.java
deleted file mode 100644
index 64dcc487022..00000000000
--- a/src/org/thoughtcrime/securesms/components/location/SignalPlace.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.thoughtcrime.securesms.components.location;
-
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.android.gms.location.places.Place;
-import com.google.android.gms.maps.model.LatLng;
-
-import org.thoughtcrime.securesms.util.JsonUtils;
-
-import java.io.IOException;
-
-public class SignalPlace {
-
- private static final String URL = "https://maps.google.com/maps?q=%s,%s";
- private static final String TAG = SignalPlace.class.getSimpleName();
-
- @JsonProperty
- private String name;
-
- @JsonProperty
- private String address;
-
- @JsonProperty
- private double latitude;
-
- @JsonProperty
- private double longitude;
-
- public SignalPlace(Place place) {
- this.name = place.getName().toString();
- this.address = place.getAddress().toString();
- this.latitude = place.getLatLng().latitude;
- this.longitude = place.getLatLng().longitude;
- }
-
- public SignalPlace() {}
-
- @JsonIgnore
- public LatLng getLatLong() {
- return new LatLng(latitude, longitude);
- }
-
- @JsonIgnore
- public String getDescription() {
- String description = "";
-
- if (!TextUtils.isEmpty(name)) {
- description += (name + "\n");
- }
-
- if (!TextUtils.isEmpty(address)) {
- description += (address + "\n");
- }
-
- description += String.format(URL, latitude, longitude);
-
- return description;
- }
-
- public @Nullable String serialize() {
- try {
- return JsonUtils.toJson(this);
- } catch (IOException e) {
- Log.w(TAG, e);
- return null;
- }
- }
-
- public static SignalPlace deserialize(@NonNull String serialized) throws IOException {
- return JsonUtils.fromJson(serialized, SignalPlace.class);
- }
-}
diff --git a/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java b/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java
index 99a3c071124..222b1e83b5c 100644
--- a/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java
+++ b/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java
@@ -66,7 +66,7 @@ public Collection getContactsWithPush(Context context) {
final String[] inProjection = new String[]{PhoneLookup._ID, PhoneLookup.DISPLAY_NAME};
List pushNumbers = TextSecureDirectory.getInstance(context).getActiveNumbers();
- final Collection lookupData = new ArrayList(pushNumbers.size());
+ final Collection lookupData = new ArrayList<>(pushNumbers.size());
for (String pushNumber : pushNumbers) {
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(pushNumber));
diff --git a/src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java b/src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java
index c889fde7b3d..c98c97c721f 100644
--- a/src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java
+++ b/src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java
@@ -42,7 +42,9 @@
import org.thoughtcrime.securesms.util.Util;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
/**
* List adapter to display all contacts and their related information
@@ -63,7 +65,7 @@ public class ContactSelectionListAdapter extends CursorRecyclerViewAdapter selectedContacts = new HashMap<>();
+ private final Set selectedContacts = new HashSet<>();
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(@NonNull final View itemView,
@@ -122,12 +124,15 @@ public void onBindItemViewHolder(ViewHolder viewHolder, @NonNull Cursor cursor)
String labelText = ContactsContract.CommonDataKinds.Phone.getTypeLabel(getContext().getResources(),
numberType, label).toString();
+
+
+ @SuppressWarnings("ResourceType")
int color = (contactType == ContactsDatabase.PUSH_TYPE) ? drawables.getColor(0, 0xa0000000) :
drawables.getColor(1, 0xff000000);
viewHolder.getView().unbind();
viewHolder.getView().set(id, contactType, name, number, labelText, color, multiSelect);
- viewHolder.getView().setChecked(selectedContacts.containsKey(id));
+ viewHolder.getView().setChecked(selectedContacts.contains(number));
}
@Override
@@ -145,7 +150,7 @@ public CharSequence getBubbleText(int position) {
return getHeaderString(position);
}
- public Map getSelectedContacts() {
+ public Set getSelectedContacts() {
return selectedContacts;
}
diff --git a/src/org/thoughtcrime/securesms/contacts/ContactsDatabase.java b/src/org/thoughtcrime/securesms/contacts/ContactsDatabase.java
index 35ccba3f632..a55c1d9e311 100644
--- a/src/org/thoughtcrime/securesms/contacts/ContactsDatabase.java
+++ b/src/org/thoughtcrime/securesms/contacts/ContactsDatabase.java
@@ -35,10 +35,10 @@
import android.util.Pair;
import org.thoughtcrime.securesms.R;
-import org.whispersystems.libaxolotl.util.guava.Optional;
-import org.whispersystems.textsecure.api.push.ContactTokenDetails;
-import org.whispersystems.textsecure.api.util.InvalidNumberException;
-import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
+import org.whispersystems.libsignal.util.guava.Optional;
+import org.whispersystems.signalservice.api.push.ContactTokenDetails;
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
+import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/src/org/thoughtcrime/securesms/contacts/CustomContactDirectory.java b/src/org/thoughtcrime/securesms/contacts/CustomContactDirectory.java
new file mode 100644
index 00000000000..9e0463065f1
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/contacts/CustomContactDirectory.java
@@ -0,0 +1,133 @@
+package org.thoughtcrime.securesms.contacts;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
+
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
+import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * This class contains the contact phone numbers which should be sent to the server
+ */
+public class CustomContactDirectory {
+
+ private static final String DATABASE_NAME = "whitelist_directory.db";
+ private static final int DATABASE_VERSION = 1;
+
+ private static final String TABLE_NAME = "directory";
+ private static final String ID = "_id";
+ private static final String NUMBER = "number";
+
+ private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + ID + " INTEGER PRIMARY KEY, " +
+ NUMBER + " TEXT UNIQUE);";
+
+ private static final Object instanceLock = new Object();
+ private static volatile CustomContactDirectory instance;
+
+ public static CustomContactDirectory getInstance(Context context) {
+ if (instance == null) {
+ synchronized (instanceLock) {
+ if (instance == null) {
+ instance = new CustomContactDirectory(context.getApplicationContext());
+ }
+ }
+ }
+
+ return instance;
+ }
+
+ private final DatabaseHelper databaseHelper;
+ private final Context context;
+
+ private CustomContactDirectory(Context context) {
+ this.context = context;
+ this.databaseHelper = new DatabaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
+ }
+
+ /**
+ * Use this function to get the selected phone numbers
+ * @return set of phone numbers
+ */
+ public Set getAllNumbers() {
+ Set result = new HashSet<>();
+
+ Cursor cursor = databaseHelper.getReadableDatabase().query(
+ TABLE_NAME, new String[]{NUMBER}, null, null, null, null, null
+ );
+
+ try {
+ if(cursor != null && cursor.moveToFirst()) {
+ do {
+ result.add(cursor.getString(0));
+ } while (cursor.moveToNext());
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return Collections.unmodifiableSet(result);
+ }
+
+ public Set getAllNumbersAsE164(String localNumber) {
+ return getE164Numbers(getAllNumbers(), localNumber);
+ }
+
+ private static Set getE164Numbers(Set numbers, String localNumber) {
+ Set result = new HashSet<>();
+
+ for(String rawNumber : numbers) {
+ try {
+ final String e164Number = PhoneNumberFormatter.formatNumber(rawNumber, localNumber);
+ result.add(e164Number);
+ } catch (InvalidNumberException e) {
+ Log.w("Directory", "Invalid number: " + rawNumber);
+ }
+ }
+
+ return result;
+ }
+
+ public void removeAllNumbers() {
+ databaseHelper.getWritableDatabase().delete(TABLE_NAME, "1 = 1", null);
+ }
+
+ public void addNumbers(Set numbers) {
+ for(String number : numbers) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(NUMBER, number);
+
+ databaseHelper.getWritableDatabase().insert(
+ TABLE_NAME, null, contentValues
+ );
+ }
+ }
+
+ private static class DatabaseHelper extends SQLiteOpenHelper {
+
+ public DatabaseHelper(Context context, String name,
+ SQLiteDatabase.CursorFactory factory,
+ int version)
+ {
+ super(context, name, factory, version);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ db.execSQL(CREATE_TABLE);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ }
+ }
+}
diff --git a/src/org/thoughtcrime/securesms/contacts/RefreshContactDirectoryTask.java b/src/org/thoughtcrime/securesms/contacts/RefreshContactDirectoryTask.java
new file mode 100644
index 00000000000..1d3bcdec35c
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/contacts/RefreshContactDirectoryTask.java
@@ -0,0 +1,33 @@
+package org.thoughtcrime.securesms.contacts;
+
+import android.content.Context;
+import android.os.AsyncTask;
+import android.util.Log;
+
+import org.thoughtcrime.securesms.crypto.MasterSecret;
+import org.thoughtcrime.securesms.util.DirectoryHelper;
+
+import java.io.IOException;
+
+public class RefreshContactDirectoryTask extends AsyncTask {
+ private static final String TAG = "RefreshDirectoryTask";
+
+ private final Context context;
+ private final MasterSecret masterSecret;
+
+ public RefreshContactDirectoryTask(Context context, MasterSecret masterSecret) {
+ this.context = context;
+ this.masterSecret = masterSecret;
+ }
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ try {
+ DirectoryHelper.refreshDirectory(context, masterSecret);
+ } catch (IOException e) {
+ Log.w(TAG, e);
+ }
+
+ return null;
+ }
+}
diff --git a/src/org/thoughtcrime/securesms/contacts/SetupCustomContactDirectoryMessage.java b/src/org/thoughtcrime/securesms/contacts/SetupCustomContactDirectoryMessage.java
new file mode 100644
index 00000000000..fec94e1501e
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/contacts/SetupCustomContactDirectoryMessage.java
@@ -0,0 +1,58 @@
+package org.thoughtcrime.securesms.contacts;
+
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v7.app.AlertDialog;
+
+import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity;
+import org.thoughtcrime.securesms.R;
+import org.thoughtcrime.securesms.service.KeyCachingService;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
+
+public class SetupCustomContactDirectoryMessage extends DialogFragment {
+ private static final String TAG = "SetupCustomContactDirectoryMessage";
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.setup_dialog_custom_contact_directory_title)
+ .setMessage(R.string.setup_dialog_custom_contact_directory_message)
+ .setPositiveButton(R.string.setup_dialog_custom_contact_directory_yes, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ TextSecurePreferences.setCustomContactDirectoryEnabled(getActivity(), true);
+ saveShownAndSyncContacts();
+ }
+ })
+ .setNegativeButton(R.string.setup_dialog_custom_contact_directory_no, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ TextSecurePreferences.setCustomContactDirectoryEnabled(getActivity(), false);
+ saveShownAndSyncContacts();
+ }
+ })
+ .create();
+ }
+
+ private void saveShownAndSyncContacts() {
+ TextSecurePreferences.setHasAskedCustomContactDirectory(getActivity(), true);
+ new RefreshContactDirectoryTask(getActivity(), KeyCachingService.getMasterSecret(getActivity())).execute();
+ }
+
+ public void show(FragmentManager fragmentManager) {
+ if(fragmentManager.findFragmentByTag(TAG) == null) {
+ show(fragmentManager, TAG);
+ }
+ }
+
+ public static void showIfNecessary(PassphraseRequiredActionBarActivity activity) {
+ if(!TextSecurePreferences.hasAskedCustomContactDirectory(activity)) {
+ new SetupCustomContactDirectoryMessage().show(activity.getSupportFragmentManager());
+ }
+ }
+}
diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFactory.java b/src/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFactory.java
index 833fa4ed0f6..ccb54d433e4 100644
--- a/src/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFactory.java
+++ b/src/org/thoughtcrime/securesms/contacts/avatars/ContactPhotoFactory.java
@@ -10,6 +10,7 @@
import android.text.TextUtils;
import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.ContactPhotoUriLoader.ContactPhotoUri;
@@ -52,6 +53,7 @@ public static ContactPhoto getContactPhoto(@NonNull Context context,
try {
Bitmap bitmap = Glide.with(context)
.load(new ContactPhotoUri(uri)).asBitmap()
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
.centerCrop().into(targetSize, targetSize).get();
return new BitmapContactPhoto(bitmap);
} catch (ExecutionException e) {
diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/TransparentContactPhoto.java b/src/org/thoughtcrime/securesms/contacts/avatars/TransparentContactPhoto.java
index d5c408528ef..7fa499ea61a 100644
--- a/src/org/thoughtcrime/securesms/contacts/avatars/TransparentContactPhoto.java
+++ b/src/org/thoughtcrime/securesms/contacts/avatars/TransparentContactPhoto.java
@@ -2,6 +2,7 @@
import android.content.Context;
import android.graphics.drawable.Drawable;
+import android.support.v4.content.ContextCompat;
import com.makeramen.roundedimageview.RoundedDrawable;
@@ -23,6 +24,6 @@ public Drawable asDrawable(Context context, int color, boolean inverted) {
@Override
public Drawable asCallCard(Context context) {
- return context.getResources().getDrawable(R.drawable.ic_contact_picture);
+ return ContextCompat.getDrawable(context, R.drawable.ic_contact_picture_large);
}
}
diff --git a/src/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java b/src/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java
index 23255c5206c..c38c5d08ca5 100644
--- a/src/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java
+++ b/src/org/thoughtcrime/securesms/crypto/AsymmetricMasterCipher.java
@@ -19,12 +19,12 @@
import org.thoughtcrime.securesms.util.Base64;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.libaxolotl.InvalidKeyException;
-import org.whispersystems.libaxolotl.InvalidMessageException;
-import org.whispersystems.libaxolotl.ecc.Curve;
-import org.whispersystems.libaxolotl.ecc.ECKeyPair;
-import org.whispersystems.libaxolotl.ecc.ECPrivateKey;
-import org.whispersystems.libaxolotl.ecc.ECPublicKey;
+import org.whispersystems.libsignal.InvalidKeyException;
+import org.whispersystems.libsignal.InvalidMessageException;
+import org.whispersystems.libsignal.ecc.Curve;
+import org.whispersystems.libsignal.ecc.ECKeyPair;
+import org.whispersystems.libsignal.ecc.ECPrivateKey;
+import org.whispersystems.libsignal.ecc.ECPublicKey;
import org.thoughtcrime.securesms.util.Conversions;
import java.io.IOException;
diff --git a/src/org/thoughtcrime/securesms/crypto/AsymmetricMasterSecret.java b/src/org/thoughtcrime/securesms/crypto/AsymmetricMasterSecret.java
index bc82032e34f..36dfe4b1d8b 100644
--- a/src/org/thoughtcrime/securesms/crypto/AsymmetricMasterSecret.java
+++ b/src/org/thoughtcrime/securesms/crypto/AsymmetricMasterSecret.java
@@ -17,8 +17,8 @@
*/
package org.thoughtcrime.securesms.crypto;
-import org.whispersystems.libaxolotl.ecc.ECPrivateKey;
-import org.whispersystems.libaxolotl.ecc.ECPublicKey;
+import org.whispersystems.libsignal.ecc.ECPrivateKey;
+import org.whispersystems.libsignal.ecc.ECPublicKey;
/**
* When a user first initializes TextSecure, a few secrets
diff --git a/src/org/thoughtcrime/securesms/crypto/IdentityKeyParcelable.java b/src/org/thoughtcrime/securesms/crypto/IdentityKeyParcelable.java
index 4969e8f3e82..d03ec492cd5 100644
--- a/src/org/thoughtcrime/securesms/crypto/IdentityKeyParcelable.java
+++ b/src/org/thoughtcrime/securesms/crypto/IdentityKeyParcelable.java
@@ -19,8 +19,8 @@
import android.os.Parcel;
import android.os.Parcelable;
-import org.whispersystems.libaxolotl.IdentityKey;
-import org.whispersystems.libaxolotl.InvalidKeyException;
+import org.whispersystems.libsignal.IdentityKey;
+import org.whispersystems.libsignal.InvalidKeyException;
public class IdentityKeyParcelable implements Parcelable {
diff --git a/src/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java b/src/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java
index 6b1168e8b28..f7a9bb6d81d 100644
--- a/src/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java
+++ b/src/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java
@@ -23,12 +23,12 @@
import android.support.annotation.NonNull;
import org.thoughtcrime.securesms.util.Base64;
-import org.whispersystems.libaxolotl.IdentityKey;
-import org.whispersystems.libaxolotl.IdentityKeyPair;
-import org.whispersystems.libaxolotl.InvalidKeyException;
-import org.whispersystems.libaxolotl.ecc.Curve;
-import org.whispersystems.libaxolotl.ecc.ECKeyPair;
-import org.whispersystems.libaxolotl.ecc.ECPrivateKey;
+import org.whispersystems.libsignal.IdentityKey;
+import org.whispersystems.libsignal.IdentityKeyPair;
+import org.whispersystems.libsignal.InvalidKeyException;
+import org.whispersystems.libsignal.ecc.Curve;
+import org.whispersystems.libsignal.ecc.ECKeyPair;
+import org.whispersystems.libsignal.ecc.ECPrivateKey;
import java.io.IOException;
diff --git a/src/org/thoughtcrime/securesms/crypto/MasterCipher.java b/src/org/thoughtcrime/securesms/crypto/MasterCipher.java
index 969320391ce..701f5c2b34c 100644
--- a/src/org/thoughtcrime/securesms/crypto/MasterCipher.java
+++ b/src/org/thoughtcrime/securesms/crypto/MasterCipher.java
@@ -22,9 +22,9 @@
import org.thoughtcrime.securesms.util.Base64;
import org.thoughtcrime.securesms.util.Hex;
-import org.whispersystems.libaxolotl.InvalidMessageException;
-import org.whispersystems.libaxolotl.ecc.Curve;
-import org.whispersystems.libaxolotl.ecc.ECPrivateKey;
+import org.whispersystems.libsignal.InvalidMessageException;
+import org.whispersystems.libsignal.ecc.Curve;
+import org.whispersystems.libsignal.ecc.ECPrivateKey;
import java.io.IOException;
import java.security.GeneralSecurityException;
@@ -84,12 +84,12 @@ public String decryptBody(String body) throws InvalidMessageException {
}
public ECPrivateKey decryptKey(byte[] key)
- throws org.whispersystems.libaxolotl.InvalidKeyException
+ throws org.whispersystems.libsignal.InvalidKeyException
{
try {
return Curve.decodePrivatePoint(decryptBytes(key));
} catch (InvalidMessageException ime) {
- throw new org.whispersystems.libaxolotl.InvalidKeyException(ime);
+ throw new org.whispersystems.libsignal.InvalidKeyException(ime);
}
}
diff --git a/src/org/thoughtcrime/securesms/crypto/MasterSecretUnion.java b/src/org/thoughtcrime/securesms/crypto/MasterSecretUnion.java
index 121562630f7..26b8ad1edc5 100644
--- a/src/org/thoughtcrime/securesms/crypto/MasterSecretUnion.java
+++ b/src/org/thoughtcrime/securesms/crypto/MasterSecretUnion.java
@@ -2,7 +2,7 @@
import android.support.annotation.NonNull;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
public class MasterSecretUnion {
diff --git a/src/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java b/src/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java
index 598fdfc28a7..a0f2cd45076 100644
--- a/src/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java
+++ b/src/org/thoughtcrime/securesms/crypto/MasterSecretUtil.java
@@ -26,11 +26,11 @@
import org.thoughtcrime.securesms.util.Base64;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.libaxolotl.InvalidKeyException;
-import org.whispersystems.libaxolotl.ecc.Curve;
-import org.whispersystems.libaxolotl.ecc.ECKeyPair;
-import org.whispersystems.libaxolotl.ecc.ECPrivateKey;
-import org.whispersystems.libaxolotl.ecc.ECPublicKey;
+import org.whispersystems.libsignal.InvalidKeyException;
+import org.whispersystems.libsignal.ecc.Curve;
+import org.whispersystems.libsignal.ecc.ECKeyPair;
+import org.whispersystems.libsignal.ecc.ECPrivateKey;
+import org.whispersystems.libsignal.ecc.ECPublicKey;
import java.io.IOException;
import java.security.GeneralSecurityException;
diff --git a/src/org/thoughtcrime/securesms/crypto/MediaKey.java b/src/org/thoughtcrime/securesms/crypto/MediaKey.java
index 058b5448fec..1c25b5ac5ff 100644
--- a/src/org/thoughtcrime/securesms/crypto/MediaKey.java
+++ b/src/org/thoughtcrime/securesms/crypto/MediaKey.java
@@ -3,7 +3,7 @@
import android.support.annotation.NonNull;
import org.thoughtcrime.securesms.util.Base64;
-import org.whispersystems.libaxolotl.InvalidMessageException;
+import org.whispersystems.libsignal.InvalidMessageException;
import java.io.IOException;
diff --git a/src/org/thoughtcrime/securesms/crypto/PreKeyUtil.java b/src/org/thoughtcrime/securesms/crypto/PreKeyUtil.java
index b8579468867..7333bfbfa9b 100644
--- a/src/org/thoughtcrime/securesms/crypto/PreKeyUtil.java
+++ b/src/org/thoughtcrime/securesms/crypto/PreKeyUtil.java
@@ -25,16 +25,16 @@
import org.thoughtcrime.securesms.crypto.storage.TextSecurePreKeyStore;
import org.thoughtcrime.securesms.util.JsonUtils;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.libaxolotl.IdentityKeyPair;
-import org.whispersystems.libaxolotl.InvalidKeyException;
-import org.whispersystems.libaxolotl.InvalidKeyIdException;
-import org.whispersystems.libaxolotl.ecc.Curve;
-import org.whispersystems.libaxolotl.ecc.ECKeyPair;
-import org.whispersystems.libaxolotl.state.PreKeyRecord;
-import org.whispersystems.libaxolotl.state.PreKeyStore;
-import org.whispersystems.libaxolotl.state.SignedPreKeyRecord;
-import org.whispersystems.libaxolotl.state.SignedPreKeyStore;
-import org.whispersystems.libaxolotl.util.Medium;
+import org.whispersystems.libsignal.IdentityKeyPair;
+import org.whispersystems.libsignal.InvalidKeyException;
+import org.whispersystems.libsignal.InvalidKeyIdException;
+import org.whispersystems.libsignal.ecc.Curve;
+import org.whispersystems.libsignal.ecc.ECKeyPair;
+import org.whispersystems.libsignal.state.PreKeyRecord;
+import org.whispersystems.libsignal.state.PreKeyStore;
+import org.whispersystems.libsignal.state.SignedPreKeyRecord;
+import org.whispersystems.libsignal.state.SignedPreKeyStore;
+import org.whispersystems.libsignal.util.Medium;
import java.io.File;
import java.io.FileInputStream;
diff --git a/src/org/thoughtcrime/securesms/crypto/PublicKey.java b/src/org/thoughtcrime/securesms/crypto/PublicKey.java
index 58f97955184..c94ca3cf7f6 100644
--- a/src/org/thoughtcrime/securesms/crypto/PublicKey.java
+++ b/src/org/thoughtcrime/securesms/crypto/PublicKey.java
@@ -21,9 +21,9 @@
import org.thoughtcrime.securesms.util.Hex;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.libaxolotl.InvalidKeyException;
-import org.whispersystems.libaxolotl.ecc.Curve;
-import org.whispersystems.libaxolotl.ecc.ECPublicKey;
+import org.whispersystems.libsignal.InvalidKeyException;
+import org.whispersystems.libsignal.ecc.Curve;
+import org.whispersystems.libsignal.ecc.ECPublicKey;
import org.thoughtcrime.securesms.util.Conversions;
import java.security.MessageDigest;
diff --git a/src/org/thoughtcrime/securesms/crypto/SessionUtil.java b/src/org/thoughtcrime/securesms/crypto/SessionUtil.java
index 3953643dbb6..d1974face3a 100644
--- a/src/org/thoughtcrime/securesms/crypto/SessionUtil.java
+++ b/src/org/thoughtcrime/securesms/crypto/SessionUtil.java
@@ -5,9 +5,9 @@
import org.thoughtcrime.securesms.crypto.storage.TextSecureSessionStore;
import org.thoughtcrime.securesms.recipients.Recipient;
-import org.whispersystems.libaxolotl.AxolotlAddress;
-import org.whispersystems.libaxolotl.state.SessionStore;
-import org.whispersystems.textsecure.api.push.TextSecureAddress;
+import org.whispersystems.libsignal.SignalProtocolAddress;
+import org.whispersystems.libsignal.state.SessionStore;
+import org.whispersystems.signalservice.api.push.SignalServiceAddress;
public class SessionUtil {
@@ -16,8 +16,8 @@ public static boolean hasSession(Context context, MasterSecret masterSecret, Rec
}
public static boolean hasSession(Context context, MasterSecret masterSecret, @NonNull String number) {
- SessionStore sessionStore = new TextSecureSessionStore(context, masterSecret);
- AxolotlAddress axolotlAddress = new AxolotlAddress(number, TextSecureAddress.DEFAULT_DEVICE_ID);
+ SessionStore sessionStore = new TextSecureSessionStore(context, masterSecret);
+ SignalProtocolAddress axolotlAddress = new SignalProtocolAddress(number, SignalServiceAddress.DEFAULT_DEVICE_ID);
return sessionStore.containsSession(axolotlAddress);
}
diff --git a/src/org/thoughtcrime/securesms/crypto/storage/TextSecureAxolotlStore.java b/src/org/thoughtcrime/securesms/crypto/storage/SignalProtocolStoreImpl.java
similarity index 64%
rename from src/org/thoughtcrime/securesms/crypto/storage/TextSecureAxolotlStore.java
rename to src/org/thoughtcrime/securesms/crypto/storage/SignalProtocolStoreImpl.java
index 51d35aeed29..b4b65c790f1 100644
--- a/src/org/thoughtcrime/securesms/crypto/storage/TextSecureAxolotlStore.java
+++ b/src/org/thoughtcrime/securesms/crypto/storage/SignalProtocolStoreImpl.java
@@ -2,29 +2,29 @@
import android.content.Context;
-import org.whispersystems.libaxolotl.AxolotlAddress;
-import org.whispersystems.libaxolotl.IdentityKey;
-import org.whispersystems.libaxolotl.IdentityKeyPair;
-import org.whispersystems.libaxolotl.InvalidKeyIdException;
-import org.whispersystems.libaxolotl.state.AxolotlStore;
-import org.whispersystems.libaxolotl.state.IdentityKeyStore;
-import org.whispersystems.libaxolotl.state.PreKeyRecord;
-import org.whispersystems.libaxolotl.state.PreKeyStore;
-import org.whispersystems.libaxolotl.state.SessionRecord;
-import org.whispersystems.libaxolotl.state.SessionStore;
-import org.whispersystems.libaxolotl.state.SignedPreKeyRecord;
-import org.whispersystems.libaxolotl.state.SignedPreKeyStore;
+import org.whispersystems.libsignal.IdentityKey;
+import org.whispersystems.libsignal.IdentityKeyPair;
+import org.whispersystems.libsignal.InvalidKeyIdException;
+import org.whispersystems.libsignal.SignalProtocolAddress;
+import org.whispersystems.libsignal.state.IdentityKeyStore;
+import org.whispersystems.libsignal.state.PreKeyRecord;
+import org.whispersystems.libsignal.state.PreKeyStore;
+import org.whispersystems.libsignal.state.SessionRecord;
+import org.whispersystems.libsignal.state.SessionStore;
+import org.whispersystems.libsignal.state.SignalProtocolStore;
+import org.whispersystems.libsignal.state.SignedPreKeyRecord;
+import org.whispersystems.libsignal.state.SignedPreKeyStore;
import java.util.List;
-public class TextSecureAxolotlStore implements AxolotlStore {
+public class SignalProtocolStoreImpl implements SignalProtocolStore {
private final PreKeyStore preKeyStore;
private final SignedPreKeyStore signedPreKeyStore;
private final IdentityKeyStore identityKeyStore;
private final SessionStore sessionStore;
- public TextSecureAxolotlStore(Context context) {
+ public SignalProtocolStoreImpl(Context context) {
this.preKeyStore = new TextSecurePreKeyStore(context);
this.signedPreKeyStore = new TextSecurePreKeyStore(context);
this.identityKeyStore = new TextSecureIdentityKeyStore(context);
@@ -42,13 +42,13 @@ public int getLocalRegistrationId() {
}
@Override
- public void saveIdentity(String number, IdentityKey identityKey) {
- identityKeyStore.saveIdentity(number, identityKey);
+ public void saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
+ identityKeyStore.saveIdentity(address, identityKey);
}
@Override
- public boolean isTrustedIdentity(String number, IdentityKey identityKey) {
- return identityKeyStore.isTrustedIdentity(number, identityKey);
+ public boolean isTrustedIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
+ return identityKeyStore.isTrustedIdentity(address, identityKey);
}
@Override
@@ -72,7 +72,7 @@ public void removePreKey(int preKeyId) {
}
@Override
- public SessionRecord loadSession(AxolotlAddress axolotlAddress) {
+ public SessionRecord loadSession(SignalProtocolAddress axolotlAddress) {
return sessionStore.loadSession(axolotlAddress);
}
@@ -82,17 +82,17 @@ public List getSubDeviceSessions(String number) {
}
@Override
- public void storeSession(AxolotlAddress axolotlAddress, SessionRecord record) {
+ public void storeSession(SignalProtocolAddress axolotlAddress, SessionRecord record) {
sessionStore.storeSession(axolotlAddress, record);
}
@Override
- public boolean containsSession(AxolotlAddress axolotlAddress) {
+ public boolean containsSession(SignalProtocolAddress axolotlAddress) {
return sessionStore.containsSession(axolotlAddress);
}
@Override
- public void deleteSession(AxolotlAddress axolotlAddress) {
+ public void deleteSession(SignalProtocolAddress axolotlAddress) {
sessionStore.deleteSession(axolotlAddress);
}
diff --git a/src/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java b/src/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java
index f3a6de3d7c7..2c12347c7d7 100644
--- a/src/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java
+++ b/src/org/thoughtcrime/securesms/crypto/storage/TextSecureIdentityKeyStore.java
@@ -2,13 +2,16 @@
import android.content.Context;
+import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
import org.thoughtcrime.securesms.database.DatabaseFactory;
+import org.thoughtcrime.securesms.jobs.IdentityUpdateJob;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
-import org.whispersystems.libaxolotl.IdentityKey;
-import org.whispersystems.libaxolotl.IdentityKeyPair;
-import org.whispersystems.libaxolotl.state.IdentityKeyStore;
+import org.whispersystems.libsignal.IdentityKey;
+import org.whispersystems.libsignal.IdentityKeyPair;
+import org.whispersystems.libsignal.SignalProtocolAddress;
+import org.whispersystems.libsignal.state.IdentityKeyStore;
public class TextSecureIdentityKeyStore implements IdentityKeyStore {
@@ -29,15 +32,29 @@ public int getLocalRegistrationId() {
}
@Override
- public void saveIdentity(String name, IdentityKey identityKey) {
- long recipientId = RecipientFactory.getRecipientsFromString(context, name, true).getPrimaryRecipient().getRecipientId();
+ public void saveIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
+ long recipientId = RecipientFactory.getRecipientsFromString(context, address.getName(), true).getPrimaryRecipient().getRecipientId();
DatabaseFactory.getIdentityDatabase(context).saveIdentity(recipientId, identityKey);
}
@Override
- public boolean isTrustedIdentity(String name, IdentityKey identityKey) {
- long recipientId = RecipientFactory.getRecipientsFromString(context, name, true).getPrimaryRecipient().getRecipientId();
- return DatabaseFactory.getIdentityDatabase(context)
- .isValidIdentity(recipientId, identityKey);
+ public boolean isTrustedIdentity(SignalProtocolAddress address, IdentityKey identityKey) {
+ long recipientId = RecipientFactory.getRecipientsFromString(context, address.getName(), true).getPrimaryRecipient().getRecipientId();
+ boolean trusted = DatabaseFactory.getIdentityDatabase(context)
+ .isValidIdentity(recipientId, identityKey);
+
+ if (trusted) {
+ return true;
+ } else if (!TextSecurePreferences.isBlockingIdentityUpdates(context)) {
+ saveIdentity(address, identityKey);
+
+ ApplicationContext.getInstance(context)
+ .getJobManager()
+ .add(new IdentityUpdateJob(context, recipientId));
+
+ return true;
+ } else {
+ return false;
+ }
}
}
diff --git a/src/org/thoughtcrime/securesms/crypto/storage/TextSecurePreKeyStore.java b/src/org/thoughtcrime/securesms/crypto/storage/TextSecurePreKeyStore.java
index 31bd1c49d5a..68c727caa5f 100644
--- a/src/org/thoughtcrime/securesms/crypto/storage/TextSecurePreKeyStore.java
+++ b/src/org/thoughtcrime/securesms/crypto/storage/TextSecurePreKeyStore.java
@@ -7,12 +7,12 @@
import org.thoughtcrime.securesms.crypto.MasterCipher;
import org.thoughtcrime.securesms.crypto.MasterSecret;
-import org.whispersystems.libaxolotl.InvalidKeyIdException;
-import org.whispersystems.libaxolotl.InvalidMessageException;
-import org.whispersystems.libaxolotl.state.SignedPreKeyRecord;
-import org.whispersystems.libaxolotl.state.SignedPreKeyStore;
-import org.whispersystems.libaxolotl.state.PreKeyRecord;
-import org.whispersystems.libaxolotl.state.PreKeyStore;
+import org.whispersystems.libsignal.InvalidKeyIdException;
+import org.whispersystems.libsignal.InvalidMessageException;
+import org.whispersystems.libsignal.state.SignedPreKeyRecord;
+import org.whispersystems.libsignal.state.SignedPreKeyStore;
+import org.whispersystems.libsignal.state.PreKeyRecord;
+import org.whispersystems.libsignal.state.PreKeyStore;
import org.thoughtcrime.securesms.util.Conversions;
import java.io.File;
diff --git a/src/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java b/src/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java
index 05b36c65d00..fcab61ba478 100644
--- a/src/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java
+++ b/src/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java
@@ -10,12 +10,12 @@
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.util.Conversions;
-import org.whispersystems.libaxolotl.AxolotlAddress;
-import org.whispersystems.libaxolotl.InvalidMessageException;
-import org.whispersystems.libaxolotl.state.SessionRecord;
-import org.whispersystems.libaxolotl.state.SessionState;
-import org.whispersystems.libaxolotl.state.SessionStore;
-import org.whispersystems.textsecure.api.push.TextSecureAddress;
+import org.whispersystems.libsignal.SignalProtocolAddress;
+import org.whispersystems.libsignal.InvalidMessageException;
+import org.whispersystems.libsignal.state.SessionRecord;
+import org.whispersystems.libsignal.state.SessionState;
+import org.whispersystems.libsignal.state.SessionStore;
+import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import java.io.File;
import java.io.FileInputStream;
@@ -26,7 +26,7 @@
import java.util.LinkedList;
import java.util.List;
-import static org.whispersystems.libaxolotl.state.StorageProtos.SessionStructure;
+import static org.whispersystems.libsignal.state.StorageProtos.SessionStructure;
public class TextSecureSessionStore implements SessionStore {
@@ -52,7 +52,7 @@ public TextSecureSessionStore(@NonNull Context context, @Nullable MasterSecret m
}
@Override
- public SessionRecord loadSession(@NonNull AxolotlAddress address) {
+ public SessionRecord loadSession(@NonNull SignalProtocolAddress address) {
synchronized (FILE_LOCK) {
try {
FileInputStream in = new FileInputStream(getSessionFile(address));
@@ -88,7 +88,7 @@ public SessionRecord loadSession(@NonNull AxolotlAddress address) {
}
@Override
- public void storeSession(@NonNull AxolotlAddress address, @NonNull SessionRecord record) {
+ public void storeSession(@NonNull SignalProtocolAddress address, @NonNull SessionRecord record) {
synchronized (FILE_LOCK) {
try {
RandomAccessFile sessionFile = new RandomAccessFile(getSessionFile(address), "rw");
@@ -107,13 +107,13 @@ public void storeSession(@NonNull AxolotlAddress address, @NonNull SessionRecord
}
@Override
- public boolean containsSession(AxolotlAddress address) {
+ public boolean containsSession(SignalProtocolAddress address) {
return getSessionFile(address).exists() &&
loadSession(address).getSessionState().hasSenderChain();
}
@Override
- public void deleteSession(AxolotlAddress address) {
+ public void deleteSession(SignalProtocolAddress address) {
getSessionFile(address).delete();
}
@@ -121,10 +121,10 @@ public void deleteSession(AxolotlAddress address) {
public void deleteAllSessions(String name) {
List devices = getSubDeviceSessions(name);
- deleteSession(new AxolotlAddress(name, TextSecureAddress.DEFAULT_DEVICE_ID));
+ deleteSession(new SignalProtocolAddress(name, SignalServiceAddress.DEFAULT_DEVICE_ID));
for (int device : devices) {
- deleteSession(new AxolotlAddress(name, device));
+ deleteSession(new SignalProtocolAddress(name, device));
}
}
@@ -159,7 +159,7 @@ public void migrateSessions() {
for (File session : directory.listFiles()) {
if (session.isFile()) {
- AxolotlAddress address = getAddressName(session);
+ SignalProtocolAddress address = getAddressName(session);
if (address != null) {
SessionRecord sessionRecord = loadSession(address);
@@ -170,7 +170,7 @@ public void migrateSessions() {
}
}
- private File getSessionFile(AxolotlAddress address) {
+ private File getSessionFile(SignalProtocolAddress address) {
return new File(getSessionDirectory(), getSessionName(address));
}
@@ -186,16 +186,16 @@ private File getSessionDirectory() {
return directory;
}
- private String getSessionName(AxolotlAddress axolotlAddress) {
+ private String getSessionName(SignalProtocolAddress axolotlAddress) {
Recipient recipient = RecipientFactory.getRecipientsFromString(context, axolotlAddress.getName(), true)
.getPrimaryRecipient();
long recipientId = recipient.getRecipientId();
int deviceId = axolotlAddress.getDeviceId();
- return recipientId + (deviceId == TextSecureAddress.DEFAULT_DEVICE_ID ? "" : "." + deviceId);
+ return recipientId + (deviceId == SignalServiceAddress.DEFAULT_DEVICE_ID ? "" : "." + deviceId);
}
- private @Nullable AxolotlAddress getAddressName(File sessionFile) {
+ private @Nullable SignalProtocolAddress getAddressName(File sessionFile) {
try {
String[] parts = sessionFile.getName().split("[.]");
Recipient recipient = RecipientFactory.getRecipientForId(context, Integer.valueOf(parts[0]), true);
@@ -203,9 +203,9 @@ private String getSessionName(AxolotlAddress axolotlAddress) {
int deviceId;
if (parts.length > 1) deviceId = Integer.parseInt(parts[1]);
- else deviceId = TextSecureAddress.DEFAULT_DEVICE_ID;
+ else deviceId = SignalServiceAddress.DEFAULT_DEVICE_ID;
- return new AxolotlAddress(recipient.getNumber(), deviceId);
+ return new SignalProtocolAddress(recipient.getNumber(), deviceId);
} catch (NumberFormatException e) {
Log.w(TAG, e);
return null;
diff --git a/src/org/thoughtcrime/securesms/database/ApnDatabase.java b/src/org/thoughtcrime/securesms/database/ApnDatabase.java
index ea3d872c8da..ad069ea6b0d 100644
--- a/src/org/thoughtcrime/securesms/database/ApnDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/ApnDatabase.java
@@ -27,7 +27,7 @@
import org.thoughtcrime.securesms.mms.LegacyMmsConnection.Apn;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.io.File;
import java.io.FileOutputStream;
diff --git a/src/org/thoughtcrime/securesms/database/AttachmentDatabase.java b/src/org/thoughtcrime/securesms/database/AttachmentDatabase.java
index ddb10170ed0..b78abc6031b 100644
--- a/src/org/thoughtcrime/securesms/database/AttachmentDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/AttachmentDatabase.java
@@ -21,9 +21,13 @@
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
+import android.graphics.Bitmap;
+import android.media.MediaMetadataRetriever;
import android.net.Uri;
+import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
@@ -41,7 +45,7 @@
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.MediaUtil.ThumbnailData;
import org.thoughtcrime.securesms.util.Util;
-import org.thoughtcrime.securesms.util.VisibleForTesting;
+import org.thoughtcrime.securesms.video.EncryptedMediaDataSource;
import java.io.File;
import java.io.FileNotFoundException;
@@ -54,6 +58,7 @@
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
+import ws.com.google.android.mms.ContentType;
import ws.com.google.android.mms.MmsException;
public class AttachmentDatabase extends Database {
@@ -71,7 +76,7 @@ public class AttachmentDatabase extends Database {
static final String DATA = "_data";
static final String TRANSFER_STATE = "pending_push";
static final String SIZE = "data_size";
- private static final String THUMBNAIL = "thumbnail";
+ static final String THUMBNAIL = "thumbnail";
static final String THUMBNAIL_ASPECT_RATIO = "aspect_ratio";
static final String UNIQUE_ID = "unique_id";
@@ -84,7 +89,7 @@ public class AttachmentDatabase extends Database {
private static final String[] PROJECTION = new String[] {ROW_ID + " AS " + ATTACHMENT_ID_ALIAS,
MMS_ID, CONTENT_TYPE, NAME, CONTENT_DISPOSITION,
- CONTENT_LOCATION, DATA, TRANSFER_STATE,
+ CONTENT_LOCATION, DATA, THUMBNAIL, TRANSFER_STATE,
SIZE, THUMBNAIL, THUMBNAIL_ASPECT_RATIO,
UNIQUE_ID};
@@ -151,6 +156,7 @@ public void setTransferProgressFailed(AttachmentId attachmentId, long mmsId)
notifyConversationListeners(DatabaseFactory.getMmsDatabase(context).getThreadIdForMessage(mmsId));
}
+ @VisibleForTesting
public @Nullable DatabaseAttachment getAttachment(AttachmentId attachmentId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
Cursor cursor = null;
@@ -312,6 +318,7 @@ void insertAttachmentsForMessage(@NonNull MasterSecretUnion masterSecret,
return new DatabaseAttachment(databaseAttachment.getAttachmentId(),
databaseAttachment.getMmsId(),
databaseAttachment.hasData(),
+ databaseAttachment.hasThumbnail(),
mediaStream.getMimeType(),
databaseAttachment.getTransferState(),
dataSize,
@@ -433,6 +440,7 @@ DatabaseAttachment getAttachment(Cursor cursor) {
cursor.getLong(cursor.getColumnIndexOrThrow(UNIQUE_ID))),
cursor.getLong(cursor.getColumnIndexOrThrow(MMS_ID)),
!cursor.isNull(cursor.getColumnIndexOrThrow(DATA)),
+ !cursor.isNull(cursor.getColumnIndexOrThrow(THUMBNAIL)),
cursor.getString(cursor.getColumnIndexOrThrow(CONTENT_TYPE)),
cursor.getInt(cursor.getColumnIndexOrThrow(TRANSFER_STATE)),
cursor.getLong(cursor.getColumnIndexOrThrow(SIZE)),
@@ -473,11 +481,8 @@ private AttachmentId insertAttachment(MasterSecretUnion masterSecret, long mmsId
long rowId = database.insert(TABLE_NAME, null, contentValues);
AttachmentId attachmentId = new AttachmentId(rowId, uniqueId);
- if (attachment.getThumbnail() != null && masterSecret.getMasterSecret().isPresent()) {
- Log.w(TAG, "inserting pre-generated thumbnail");
- ThumbnailData data = new ThumbnailData(attachment.getThumbnail());
- updateAttachmentThumbnail(masterSecret.getMasterSecret().get(), attachmentId, data.toDataStream(), data.getAspectRatio());
- } else if (!attachment.isInProgress()) {
+ if (partData != null) {
+ Log.w(TAG, "Submitting thumbnail generation job...");
thumbnailExecutor.submit(new ThumbnailFetchCallable(masterSecret.getMasterSecret().get(), attachmentId));
}
@@ -500,21 +505,33 @@ void updateAttachmentThumbnail(MasterSecret masterSecret, AttachmentId attachmen
values.put(THUMBNAIL_ASPECT_RATIO, aspectRatio);
database.update(TABLE_NAME, values, PART_ID_WHERE, attachmentId.toStrings());
+
+ Cursor cursor = database.query(TABLE_NAME, new String[] {MMS_ID}, PART_ID_WHERE, attachmentId.toStrings(), null, null, null);
+
+ try {
+ if (cursor != null && cursor.moveToFirst()) {
+ notifyConversationListeners(DatabaseFactory.getMmsDatabase(context).getThreadIdForMessage(cursor.getLong(cursor.getColumnIndexOrThrow(MMS_ID))));
+ }
+ } finally {
+ if (cursor != null) cursor.close();
+ }
}
@VisibleForTesting
class ThumbnailFetchCallable implements Callable {
+
private final MasterSecret masterSecret;
private final AttachmentId attachmentId;
- public ThumbnailFetchCallable(MasterSecret masterSecret, AttachmentId attachmentId) {
+ ThumbnailFetchCallable(MasterSecret masterSecret, AttachmentId attachmentId) {
this.masterSecret = masterSecret;
this.attachmentId = attachmentId;
}
@Override
public @Nullable InputStream call() throws Exception {
+ Log.w(TAG, "Executing thumbnail job...");
final InputStream stream = getDataStream(masterSecret, attachmentId, THUMBNAIL);
if (stream != null) {
@@ -527,7 +544,13 @@ public ThumbnailFetchCallable(MasterSecret masterSecret, AttachmentId attachment
return null;
}
- ThumbnailData data = MediaUtil.generateThumbnail(context, masterSecret, attachment.getContentType(), attachment.getDataUri());
+ ThumbnailData data;
+
+ if (ContentType.isVideoType(attachment.getContentType())) {
+ data = generateVideoThumbnail(masterSecret, attachmentId);
+ } else{
+ data = MediaUtil.generateThumbnail(context, masterSecret, attachment.getContentType(), attachment.getDataUri());
+ }
if (data == null) {
return null;
@@ -537,5 +560,28 @@ public ThumbnailFetchCallable(MasterSecret masterSecret, AttachmentId attachment
return getDataStream(masterSecret, attachmentId, THUMBNAIL);
}
+
+ private ThumbnailData generateVideoThumbnail(MasterSecret masterSecret, AttachmentId attachmentId) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+ Log.w(TAG, "Video thumbnails not supported...");
+ return null;
+ }
+
+ File mediaFile = getAttachmentDataFile(attachmentId, DATA);
+
+ if (mediaFile == null) {
+ Log.w(TAG, "No data file found for video thumbnail...");
+ return null;
+ }
+
+ EncryptedMediaDataSource dataSource = new EncryptedMediaDataSource(masterSecret, mediaFile);
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(dataSource);
+
+ Bitmap bitmap = retriever.getFrameAtTime(1000);
+
+ Log.w(TAG, "Generated video thumbnail...");
+ return new ThumbnailData(bitmap);
+ }
}
}
diff --git a/src/org/thoughtcrime/securesms/database/CanonicalAddressDatabase.java b/src/org/thoughtcrime/securesms/database/CanonicalAddressDatabase.java
index 934795c549a..c1c85c3ec1b 100644
--- a/src/org/thoughtcrime/securesms/database/CanonicalAddressDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/CanonicalAddressDatabase.java
@@ -23,6 +23,7 @@
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.util.Log;
@@ -35,9 +36,8 @@
import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.ShortCodeUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
-import org.thoughtcrime.securesms.util.VisibleForTesting;
-import org.whispersystems.textsecure.api.util.InvalidNumberException;
-import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
+import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
import java.util.LinkedList;
import java.util.List;
diff --git a/src/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java b/src/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java
index b68da35a914..174ba25a0fc 100644
--- a/src/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java
+++ b/src/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java
@@ -21,13 +21,12 @@
import android.database.DataSetObserver;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.View;
import android.view.ViewGroup;
-import org.thoughtcrime.securesms.util.VisibleForTesting;
-
/**
* RecyclerView.Adapter that manages a Cursor, comparable to the CursorAdapter usable in ListView/GridView.
*/
diff --git a/src/org/thoughtcrime/securesms/database/DatabaseFactory.java b/src/org/thoughtcrime/securesms/database/DatabaseFactory.java
index 8329150e4e0..42c9a7f26d7 100644
--- a/src/org/thoughtcrime/securesms/database/DatabaseFactory.java
+++ b/src/org/thoughtcrime/securesms/database/DatabaseFactory.java
@@ -34,8 +34,8 @@
import org.thoughtcrime.securesms.notifications.MessageNotifier;
import org.thoughtcrime.securesms.util.Base64;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.libaxolotl.IdentityKey;
-import org.whispersystems.libaxolotl.InvalidMessageException;
+import org.whispersystems.libsignal.IdentityKey;
+import org.whispersystems.libsignal.InvalidMessageException;
import java.io.File;
import java.io.FileInputStream;
@@ -72,7 +72,8 @@ public class DatabaseFactory {
private static final int INTRODUCED_CONVERSATION_LIST_STATUS_VERSION = 25;
private static final int MIGRATED_CONVERSATION_LIST_STATUS_VERSION = 26;
private static final int INTRODUCED_SUBSCRIPTION_ID_VERSION = 27;
- private static final int DATABASE_VERSION = 27;
+ private static final int INTRODUCED_EXPIRE_MESSAGES_VERSION = 28;
+ private static final int DATABASE_VERSION = 28;
private static final String DATABASE_NAME = "messages.db";
private static final Object lock = new Object();
@@ -820,6 +821,15 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE mms ADD COLUMN subscription_id INTEGER DEFAULT -1");
}
+ if (oldVersion < INTRODUCED_EXPIRE_MESSAGES_VERSION) {
+ db.execSQL("ALTER TABLE recipient_preferences ADD COLUMN expire_messages INTEGER DEFAULT 0");
+ db.execSQL("ALTER TABLE sms ADD COLUMN expires_in INTEGER DEFAULT 0");
+ db.execSQL("ALTER TABLE mms ADD COLUMN expires_in INTEGER DEFAULT 0");
+ db.execSQL("ALTER TABLE sms ADD COLUMN expire_started INTEGER DEFAULT 0");
+ db.execSQL("ALTER TABLE mms ADD COLUMN expire_started INTEGER DEFAULT 0");
+ db.execSQL("ALTER TABLE thread ADD COLUMN expires_in INTEGER DEFAULT 0");
+ }
+
db.setTransactionSuccessful();
db.endTransaction();
}
diff --git a/src/org/thoughtcrime/securesms/database/DraftDatabase.java b/src/org/thoughtcrime/securesms/database/DraftDatabase.java
index 30470de9ba5..f5df5397149 100644
--- a/src/org/thoughtcrime/securesms/database/DraftDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/DraftDatabase.java
@@ -10,7 +10,7 @@
import android.util.Log;
import org.thoughtcrime.securesms.R;
-import org.whispersystems.libaxolotl.InvalidMessageException;
+import org.whispersystems.libsignal.InvalidMessageException;
import org.thoughtcrime.securesms.crypto.MasterCipher;
import java.util.LinkedList;
@@ -103,11 +103,10 @@ public List getDrafts(MasterCipher masterCipher, long threadId) {
}
public static class Draft {
- public static final String TEXT = "text";
- public static final String IMAGE = "image";
- public static final String VIDEO = "video";
- public static final String AUDIO = "audio";
- public static final String LOCATION = "location";
+ public static final String TEXT = "text";
+ public static final String IMAGE = "image";
+ public static final String VIDEO = "video";
+ public static final String AUDIO = "audio";
private final String type;
private final String value;
@@ -127,12 +126,11 @@ public String getValue() {
public String getSnippet(Context context) {
switch (type) {
- case TEXT: return value;
- case IMAGE: return context.getString(R.string.DraftDatabase_Draft_image_snippet);
- case VIDEO: return context.getString(R.string.DraftDatabase_Draft_video_snippet);
- case AUDIO: return context.getString(R.string.DraftDatabase_Draft_audio_snippet);
- case LOCATION: return context.getString(R.string.DraftDatabase_Draft_location_snippet);
- default: return null;
+ case TEXT: return value;
+ case IMAGE: return context.getString(R.string.DraftDatabase_Draft_image_snippet);
+ case VIDEO: return context.getString(R.string.DraftDatabase_Draft_video_snippet);
+ case AUDIO: return context.getString(R.string.DraftDatabase_Draft_audio_snippet);
+ default: return null;
}
}
}
diff --git a/src/org/thoughtcrime/securesms/database/EncryptingSmsDatabase.java b/src/org/thoughtcrime/securesms/database/EncryptingSmsDatabase.java
index 9109db04fa5..d8d2ad39e9e 100644
--- a/src/org/thoughtcrime/securesms/database/EncryptingSmsDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/EncryptingSmsDatabase.java
@@ -34,7 +34,7 @@
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
import org.thoughtcrime.securesms.util.LRUCache;
-import org.whispersystems.libaxolotl.InvalidMessageException;
+import org.whispersystems.libsignal.InvalidMessageException;
import java.lang.ref.SoftReference;
import java.util.Collections;
@@ -109,7 +109,7 @@ private Pair insertMessageInbox(@NonNull AsymmetricMasterSecret mast
}
public Pair updateBundleMessageBody(MasterSecretUnion masterSecret, long messageId, String body) {
- long type = Types.BASE_INBOX_TYPE | Types.SECURE_MESSAGE_BIT;
+ long type = Types.BASE_INBOX_TYPE | Types.SECURE_MESSAGE_BIT | Types.PUSH_MESSAGE_BIT;
String encryptedBody;
if (masterSecret.getMasterSecret().isPresent()) {
diff --git a/src/org/thoughtcrime/securesms/database/GroupDatabase.java b/src/org/thoughtcrime/securesms/database/GroupDatabase.java
index d11fbfa56bc..5eedd027e06 100644
--- a/src/org/thoughtcrime/securesms/database/GroupDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/GroupDatabase.java
@@ -11,17 +11,15 @@
import android.graphics.Bitmap;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.util.Log;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
-import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.BitmapUtil;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.textsecure.api.messages.TextSecureAttachmentPointer;
+import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
@@ -83,6 +81,10 @@ public GroupDatabase(Context context, SQLiteOpenHelper databaseHelper) {
return record;
}
+ public boolean isUnknownGroup(byte[] groupId) {
+ return getGroup(groupId) == null;
+ }
+
public Reader getGroupsFilteredByTitle(String constraint) {
Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, TITLE + " LIKE ?",
new String[]{"%" + constraint + "%"},
@@ -113,7 +115,7 @@ public Reader getGroups() {
}
public void create(byte[] groupId, String title, List members,
- TextSecureAttachmentPointer avatar, String relay)
+ SignalServiceAttachmentPointer avatar, String relay)
{
ContentValues contentValues = new ContentValues();
contentValues.put(GROUP_ID, GroupUtil.getEncodedId(groupId));
@@ -131,9 +133,10 @@ public void create(byte[] groupId, String title, List members,
contentValues.put(ACTIVE, 1);
databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, contentValues);
+ notifyConversationListListeners();
}
- public void update(byte[] groupId, String title, TextSecureAttachmentPointer avatar) {
+ public void update(byte[] groupId, String title, SignalServiceAttachmentPointer avatar) {
ContentValues contentValues = new ContentValues();
if (title != null) contentValues.put(TITLE, title);
@@ -147,8 +150,9 @@ public void update(byte[] groupId, String title, TextSecureAttachmentPointer ava
GROUP_ID + " = ?",
new String[] {GroupUtil.getEncodedId(groupId)});
- RecipientFactory.clearCache();
+ RecipientFactory.clearCache(context);
notifyDatabaseListeners();
+ notifyConversationListListeners();
}
public void updateTitle(byte[] groupId, String title) {
@@ -157,7 +161,7 @@ public void updateTitle(byte[] groupId, String title) {
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?",
new String[] {GroupUtil.getEncodedId(groupId)});
- RecipientFactory.clearCache();
+ RecipientFactory.clearCache(context);
notifyDatabaseListeners();
}
@@ -172,7 +176,7 @@ public void updateAvatar(byte[] groupId, byte[] avatar) {
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?",
new String[] {GroupUtil.getEncodedId(groupId)});
- RecipientFactory.clearCache();
+ RecipientFactory.clearCache(context);
notifyDatabaseListeners();
}
diff --git a/src/org/thoughtcrime/securesms/database/IdentityDatabase.java b/src/org/thoughtcrime/securesms/database/IdentityDatabase.java
index 5868bdcc40f..571f0f65b75 100644
--- a/src/org/thoughtcrime/securesms/database/IdentityDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/IdentityDatabase.java
@@ -27,8 +27,8 @@
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.Base64;
-import org.whispersystems.libaxolotl.IdentityKey;
-import org.whispersystems.libaxolotl.InvalidKeyException;
+import org.whispersystems.libsignal.IdentityKey;
+import org.whispersystems.libsignal.InvalidKeyException;
import java.io.IOException;
diff --git a/src/org/thoughtcrime/securesms/database/ImageDatabase.java b/src/org/thoughtcrime/securesms/database/ImageDatabase.java
index 5e7bb251793..6532501a8d4 100644
--- a/src/org/thoughtcrime/securesms/database/ImageDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/ImageDatabase.java
@@ -19,6 +19,7 @@ public class ImageDatabase extends Database {
+ AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.TRANSFER_STATE + ", "
+ AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.SIZE + ", "
+ AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DATA + ", "
+ + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.THUMBNAIL + ", "
+ MmsDatabase.TABLE_NAME + "." + MmsDatabase.MESSAGE_BOX + ", "
+ MmsDatabase.TABLE_NAME + "." + MmsDatabase.DATE_SENT + ", "
+ MmsDatabase.TABLE_NAME + "." + MmsDatabase.DATE_RECEIVED + ", "
@@ -47,19 +48,22 @@ public static class ImageRecord {
private final AttachmentId attachmentId;
private final long mmsId;
private final boolean hasData;
+ private final boolean hasThumbnail;
private final String contentType;
private final String address;
private final long date;
private final int transferState;
private final long size;
- private ImageRecord(AttachmentId attachmentId, long mmsId, boolean hasData,
+ private ImageRecord(AttachmentId attachmentId, long mmsId,
+ boolean hasData, boolean hasThumbnail,
String contentType, String address, long date,
int transferState, long size)
{
this.attachmentId = attachmentId;
this.mmsId = mmsId;
this.hasData = hasData;
+ this.hasThumbnail = hasThumbnail;
this.contentType = contentType;
this.address = address;
this.date = date;
@@ -82,6 +86,7 @@ public static ImageRecord from(Cursor cursor) {
return new ImageRecord(attachmentId,
cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentDatabase.MMS_ID)),
!cursor.isNull(cursor.getColumnIndexOrThrow(AttachmentDatabase.DATA)),
+ !cursor.isNull(cursor.getColumnIndexOrThrow(AttachmentDatabase.THUMBNAIL)),
cursor.getString(cursor.getColumnIndexOrThrow(AttachmentDatabase.CONTENT_TYPE)),
cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.ADDRESS)),
date,
@@ -90,7 +95,7 @@ public static ImageRecord from(Cursor cursor) {
}
public Attachment getAttachment() {
- return new DatabaseAttachment(attachmentId, mmsId, hasData, contentType, transferState, size, null, null, null);
+ return new DatabaseAttachment(attachmentId, mmsId, hasData, hasThumbnail, contentType, transferState, size, null, null, null);
}
public String getContentType() {
diff --git a/src/org/thoughtcrime/securesms/database/MessagingDatabase.java b/src/org/thoughtcrime/securesms/database/MessagingDatabase.java
index 494e981224b..114eff3c69e 100644
--- a/src/org/thoughtcrime/securesms/database/MessagingDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/MessagingDatabase.java
@@ -12,7 +12,7 @@
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatchList;
import org.thoughtcrime.securesms.util.JsonUtils;
-import org.whispersystems.libaxolotl.IdentityKey;
+import org.whispersystems.libsignal.IdentityKey;
import java.io.IOException;
import java.util.ArrayList;
@@ -165,4 +165,74 @@ private D getDocument(SQLiteDatabase database, long message
cursor.close();
}
}
+
+ public static class SyncMessageId {
+
+ private final String address;
+ private final long timetamp;
+
+ public SyncMessageId(String address, long timetamp) {
+ this.address = address;
+ this.timetamp = timetamp;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public long getTimetamp() {
+ return timetamp;
+ }
+ }
+
+ public static class ExpirationInfo {
+
+ private final long id;
+ private final long expiresIn;
+ private final long expireStarted;
+ private final boolean mms;
+
+ public ExpirationInfo(long id, long expiresIn, long expireStarted, boolean mms) {
+ this.id = id;
+ this.expiresIn = expiresIn;
+ this.expireStarted = expireStarted;
+ this.mms = mms;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public long getExpiresIn() {
+ return expiresIn;
+ }
+
+ public long getExpireStarted() {
+ return expireStarted;
+ }
+
+ public boolean isMms() {
+ return mms;
+ }
+ }
+
+ public static class MarkedMessageInfo {
+
+ private final SyncMessageId syncMessageId;
+ private final ExpirationInfo expirationInfo;
+
+ public MarkedMessageInfo(SyncMessageId syncMessageId, ExpirationInfo expirationInfo) {
+ this.syncMessageId = syncMessageId;
+ this.expirationInfo = expirationInfo;
+ }
+
+ public SyncMessageId getSyncMessageId() {
+ return syncMessageId;
+ }
+
+ public ExpirationInfo getExpirationInfo() {
+ return expirationInfo;
+ }
+ }
+
}
diff --git a/src/org/thoughtcrime/securesms/database/MmsDatabase.java b/src/org/thoughtcrime/securesms/database/MmsDatabase.java
index fd97a8f5040..fdb5e5bb672 100644
--- a/src/org/thoughtcrime/securesms/database/MmsDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/MmsDatabase.java
@@ -48,6 +48,7 @@
import org.thoughtcrime.securesms.database.model.NotificationMmsMessageRecord;
import org.thoughtcrime.securesms.jobs.TrimThreadJob;
import org.thoughtcrime.securesms.mms.IncomingMediaMessage;
+import org.thoughtcrime.securesms.mms.OutgoingExpirationUpdateMessage;
import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage;
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
import org.thoughtcrime.securesms.mms.OutgoingSecureMediaMessage;
@@ -62,9 +63,9 @@
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.whispersystems.jobqueue.JobManager;
-import org.whispersystems.libaxolotl.InvalidMessageException;
-import org.whispersystems.libaxolotl.util.guava.Optional;
-import org.whispersystems.textsecure.api.util.InvalidNumberException;
+import org.whispersystems.libsignal.InvalidMessageException;
+import org.whispersystems.libsignal.util.guava.Optional;
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
import java.io.IOException;
import java.util.HashSet;
@@ -110,7 +111,8 @@ public class MmsDatabase extends MessagingDatabase {
"ct_cls" + " INTEGER, " + "resp_txt" + " TEXT, " + "d_tm" + " INTEGER, " +
RECEIPT_COUNT + " INTEGER DEFAULT 0, " + MISMATCHED_IDENTITIES + " TEXT DEFAULT NULL, " +
NETWORK_FAILURE + " TEXT DEFAULT NULL," + "d_rpt" + " INTEGER, " +
- SUBSCRIPTION_ID + " INTEGER DEFAULT -1);";
+ SUBSCRIPTION_ID + " INTEGER DEFAULT -1, " + EXPIRES_IN + " INTEGER DEFAULT 0, " +
+ EXPIRE_STARTED + " INTEGER DEFAULT 0);";
public static final String[] CREATE_INDEXS = {
"CREATE INDEX IF NOT EXISTS mms_thread_id_index ON " + TABLE_NAME + " (" + THREAD_ID + ");",
@@ -130,11 +132,13 @@ public class MmsDatabase extends MessagingDatabase {
MESSAGE_SIZE, STATUS, TRANSACTION_ID,
BODY, PART_COUNT, ADDRESS, ADDRESS_DEVICE_ID,
RECEIPT_COUNT, MISMATCHED_IDENTITIES, NETWORK_FAILURE, SUBSCRIPTION_ID,
+ EXPIRES_IN, EXPIRE_STARTED,
AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.ROW_ID + " AS " + AttachmentDatabase.ATTACHMENT_ID_ALIAS,
AttachmentDatabase.UNIQUE_ID,
AttachmentDatabase.MMS_ID,
AttachmentDatabase.SIZE,
AttachmentDatabase.DATA,
+ AttachmentDatabase.THUMBNAIL,
AttachmentDatabase.CONTENT_TYPE,
AttachmentDatabase.CONTENT_LOCATION,
AttachmentDatabase.CONTENT_DISPOSITION,
@@ -190,14 +194,14 @@ public void removeFailure(long messageId, NetworkFailure failure) {
}
}
- public void incrementDeliveryReceiptCount(String address, long timestamp) {
+ public void incrementDeliveryReceiptCount(SyncMessageId messageId) {
MmsAddressDatabase addressDatabase = DatabaseFactory.getMmsAddressDatabase(context);
SQLiteDatabase database = databaseHelper.getWritableDatabase();
Cursor cursor = null;
boolean found = false;
try {
- cursor = database.query(TABLE_NAME, new String[] {ID, THREAD_ID, MESSAGE_BOX}, DATE_SENT + " = ?", new String[] {String.valueOf(timestamp)}, null, null, null, null);
+ cursor = database.query(TABLE_NAME, new String[] {ID, THREAD_ID, MESSAGE_BOX}, DATE_SENT + " = ?", new String[] {String.valueOf(messageId.getTimetamp())}, null, null, null, null);
while (cursor.moveToNext()) {
if (Types.isOutgoingMessageType(cursor.getLong(cursor.getColumnIndexOrThrow(MESSAGE_BOX)))) {
@@ -205,7 +209,7 @@ public void incrementDeliveryReceiptCount(String address, long timestamp) {
for (String storedAddress : addresses) {
try {
- String ourAddress = canonicalizeNumber(context, address);
+ String ourAddress = canonicalizeNumber(context, messageId.getAddress());
String theirAddress = canonicalizeNumberOrGroup(context, storedAddress);
if (ourAddress.equals(theirAddress) || GroupUtil.isEncodedGroup(theirAddress)) {
@@ -230,7 +234,7 @@ public void incrementDeliveryReceiptCount(String address, long timestamp) {
if (!found) {
try {
- earlyReceiptCache.increment(timestamp, canonicalizeNumber(context, address));
+ earlyReceiptCache.increment(messageId.getTimetamp(), canonicalizeNumber(context, messageId.getAddress()));
} catch (InvalidNumberException e) {
Log.w(TAG, e);
}
@@ -340,6 +344,11 @@ public Cursor getMessage(long messageId) {
return cursor;
}
+ public Reader getExpireStartedMessages(@Nullable MasterSecret masterSecret) {
+ String where = EXPIRE_STARTED + " > 0";
+ return readerFor(masterSecret, rawQuery(where, null));
+ }
+
public Reader getDecryptInProgressMessages(MasterSecret masterSecret) {
String where = MESSAGE_BOX + " & " + (Types.ENCRYPTION_ASYMMETRIC_BIT) + " != 0";
return readerFor(masterSecret, rawQuery(where, null));
@@ -432,12 +441,101 @@ public void markAsLegacyVersion(long messageId, long threadId) {
notifyConversationListeners(threadId);
}
- public void setMessagesRead(long threadId) {
- SQLiteDatabase database = databaseHelper.getWritableDatabase();
+ public void markExpireStarted(long messageId) {
+ markExpireStarted(messageId, System.currentTimeMillis());
+ }
+
+ public void markExpireStarted(long messageId, long startedTimestamp) {
ContentValues contentValues = new ContentValues();
- contentValues.put(READ, 1);
+ contentValues.put(EXPIRE_STARTED, startedTimestamp);
+
+ SQLiteDatabase db = databaseHelper.getWritableDatabase();
+ db.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {String.valueOf(messageId)});
+
+ long threadId = getThreadIdForMessage(messageId);
+ notifyConversationListeners(threadId);
+ }
+
+ public List setMessagesRead(long threadId) {
+ SQLiteDatabase database = databaseHelper.getWritableDatabase();
+ String where = THREAD_ID + " = ? AND " + READ + " = 0";
+ String[] selection = new String[]{String.valueOf(threadId)};
+ List result = new LinkedList<>();
+ Cursor cursor = null;
+
+ database.beginTransaction();
- database.update(TABLE_NAME, contentValues, THREAD_ID + " = ?", new String[] {threadId + ""});
+ try {
+ cursor = database.query(TABLE_NAME, new String[] {ID, ADDRESS, DATE_SENT, MESSAGE_BOX, EXPIRES_IN, EXPIRE_STARTED}, where, selection, null, null, null);
+
+ while(cursor != null && cursor.moveToNext()) {
+ if (Types.isSecureType(cursor.getLong(3))) {
+ SyncMessageId syncMessageId = new SyncMessageId(cursor.getString(1), cursor.getLong(2));
+ ExpirationInfo expirationInfo = new ExpirationInfo(cursor.getLong(0), cursor.getLong(4), cursor.getLong(5), true);
+
+ result.add(new MarkedMessageInfo(syncMessageId, expirationInfo));
+ }
+ }
+
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(READ, 1);
+
+ database.update(TABLE_NAME, contentValues, where, selection);
+ database.setTransactionSuccessful();
+ } finally {
+ if (cursor != null) cursor.close();
+ database.endTransaction();
+ }
+
+ return result;
+ }
+
+ public List> setTimestampRead(SyncMessageId messageId, long expireStarted) {
+ MmsAddressDatabase addressDatabase = DatabaseFactory.getMmsAddressDatabase(context);
+ SQLiteDatabase database = databaseHelper.getWritableDatabase();
+ List> expiring = new LinkedList<>();
+ Cursor cursor = null;
+
+ try {
+ cursor = database.query(TABLE_NAME, new String[] {ID, THREAD_ID, MESSAGE_BOX, EXPIRES_IN}, DATE_SENT + " = ?", new String[] {String.valueOf(messageId.getTimetamp())}, null, null, null, null);
+
+ while (cursor.moveToNext()) {
+ List addresses = addressDatabase.getAddressesListForId(cursor.getLong(cursor.getColumnIndexOrThrow(ID)));
+
+ for (String storedAddress : addresses) {
+ try {
+ String ourAddress = canonicalizeNumber(context, messageId.getAddress());
+ String theirAddress = canonicalizeNumberOrGroup(context, storedAddress);
+
+ if (ourAddress.equals(theirAddress) || GroupUtil.isEncodedGroup(theirAddress)) {
+ long id = cursor.getLong(cursor.getColumnIndexOrThrow(ID));
+ long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID));
+ long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRES_IN));
+
+ ContentValues values = new ContentValues();
+ values.put(READ, 1);
+
+ if (expiresIn > 0) {
+ values.put(EXPIRE_STARTED, expireStarted);
+ expiring.add(new Pair<>(id, expiresIn));
+ }
+
+ database.update(TABLE_NAME, values, ID_WHERE, new String[]{String.valueOf(id)});
+
+ DatabaseFactory.getThreadDatabase(context).updateReadState(threadId);
+ notifyConversationListeners(threadId);
+ }
+ } catch (InvalidNumberException e) {
+ Log.w("MmsDatabase", e);
+ }
+ }
+ }
+ } finally {
+ if (cursor != null)
+ cursor.close();
+ }
+
+ return expiring;
}
public void setAllMessagesRead() {
@@ -519,6 +617,7 @@ public OutgoingMediaMessage getOutgoingMessage(MasterSecret masterSecret, long m
String messageText = cursor.getString(cursor.getColumnIndexOrThrow(BODY));
long timestamp = cursor.getLong(cursor.getColumnIndexOrThrow(NORMALIZED_DATE_SENT));
int subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(SUBSCRIPTION_ID));
+ long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRES_IN));
List attachments = new LinkedList(attachmentDatabase.getAttachmentsForMessage(messageId));
MmsAddresses addresses = addr.getAddressesForId(messageId);
List destinations = new LinkedList<>();
@@ -531,10 +630,12 @@ public OutgoingMediaMessage getOutgoingMessage(MasterSecret masterSecret, long m
Recipients recipients = RecipientFactory.getRecipientsFromStrings(context, destinations, false);
if (body != null && (Types.isGroupQuit(outboxType) || Types.isGroupUpdate(outboxType))) {
- return new OutgoingGroupMediaMessage(recipients, body, attachments, timestamp);
+ return new OutgoingGroupMediaMessage(recipients, body, attachments, timestamp, 0);
+ } else if (Types.isExpirationTimerUpdate(outboxType)) {
+ return new OutgoingExpirationUpdateMessage(recipients, timestamp, expiresIn);
}
- OutgoingMediaMessage message = new OutgoingMediaMessage(recipients, body, attachments, timestamp, subscriptionId,
+ OutgoingMediaMessage message = new OutgoingMediaMessage(recipients, body, attachments, timestamp, subscriptionId, expiresIn,
!addresses.getBcc().isEmpty() ? ThreadDatabase.DistributionTypes.BROADCAST :
ThreadDatabase.DistributionTypes.DEFAULT);
if (Types.isSecureType(outboxType)) {
@@ -563,6 +664,7 @@ public long copyMessageInbox(MasterSecret masterSecret, long messageId) throws M
contentValues.put(THREAD_ID, getThreadIdForMessage(messageId));
contentValues.put(READ, 1);
contentValues.put(DATE_RECEIVED, contentValues.getAsLong(DATE_SENT));
+ contentValues.put(EXPIRES_IN, request.getExpiresIn());
List attachments = new LinkedList<>();
@@ -571,6 +673,7 @@ public long copyMessageInbox(MasterSecret masterSecret, long messageId) throws M
attachments.add(new DatabaseAttachment(databaseAttachment.getAttachmentId(),
databaseAttachment.getMmsId(),
databaseAttachment.hasData(),
+ databaseAttachment.hasThumbnail(),
databaseAttachment.getContentType(),
AttachmentDatabase.TRANSFER_PROGRESS_DONE,
databaseAttachment.getSize(),
@@ -618,7 +721,8 @@ private Pair insertMessageInbox(MasterSecretUnion masterSecret,
contentValues.put(DATE_RECEIVED, generatePduCompatTimestamp());
contentValues.put(PART_COUNT, retrieved.getAttachments().size());
contentValues.put(SUBSCRIPTION_ID, retrieved.getSubscriptionId());
- contentValues.put(READ, 0);
+ contentValues.put(EXPIRES_IN, retrieved.getExpiresIn());
+ contentValues.put(READ, retrieved.isExpirationUpdate() ? 1 : 0);
if (!contentValues.containsKey(DATE_SENT)) {
contentValues.put(DATE_SENT, contentValues.getAsLong(DATE_RECEIVED));
@@ -628,8 +732,11 @@ private Pair insertMessageInbox(MasterSecretUnion masterSecret,
retrieved.getBody(), retrieved.getAttachments(),
contentValues);
- DatabaseFactory.getThreadDatabase(context).setUnread(threadId);
- DatabaseFactory.getThreadDatabase(context).update(threadId, true);
+ if (!Types.isExpirationTimerUpdate(mailbox)) {
+ DatabaseFactory.getThreadDatabase(context).setUnread(threadId);
+ DatabaseFactory.getThreadDatabase(context).update(threadId, true);
+ }
+
notifyConversationListeners(threadId);
jobManager.add(new TrimThreadJob(context, threadId));
@@ -653,6 +760,10 @@ public Pair insertMessageInbox(MasterSecretUnion masterSecret,
type |= Types.PUSH_MESSAGE_BIT;
}
+ if (retrieved.isExpirationUpdate()) {
+ type |= Types.EXPIRATION_TIMER_UPDATE_BIT;
+ }
+
return insertMessageInbox(masterSecret, retrieved, contentLocation, threadId, type);
}
@@ -673,6 +784,10 @@ public Pair insertSecureDecryptedMessageInbox(MasterSecretUnion mast
type |= Types.PUSH_MESSAGE_BIT;
}
+ if (retrieved.isExpirationUpdate()) {
+ type |= Types.EXPIRATION_TIMER_UPDATE_BIT;
+ }
+
return insertMessageInbox(masterSecret, retrieved, "", threadId, type);
}
@@ -745,6 +860,10 @@ public long insertMessageOutbox(@NonNull MasterSecretUnion masterSecret,
else if (((OutgoingGroupMediaMessage)message).isGroupQuit()) type |= Types.GROUP_QUIT_BIT;
}
+ if (message.isExpirationUpdate()) {
+ type |= Types.EXPIRATION_TIMER_UPDATE_BIT;
+ }
+
List recipientNumbers = message.getRecipients().toNumberStringList(true);
MmsAddresses addresses;
@@ -766,6 +885,7 @@ public long insertMessageOutbox(@NonNull MasterSecretUnion masterSecret,
contentValues.put(READ, 1);
contentValues.put(DATE_RECEIVED, System.currentTimeMillis());
contentValues.put(SUBSCRIPTION_ID, message.getSubscriptionId());
+ contentValues.put(EXPIRES_IN, message.getExpiresIn());
if (message.getRecipients().isSingleRecipient()) {
try {
@@ -1058,6 +1178,8 @@ private MediaMmsMessageRecord getMediaMmsMessageRecord(Cursor cursor) {
String mismatchDocument = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.MISMATCHED_IDENTITIES));
String networkDocument = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.NETWORK_FAILURE));
int subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.SUBSCRIPTION_ID));
+ long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.EXPIRES_IN));
+ long expireStarted = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.EXPIRE_STARTED));
Recipients recipients = getRecipientsFor(address);
List mismatches = getMismatchedIdentities(mismatchDocument);
@@ -1067,7 +1189,7 @@ private MediaMmsMessageRecord getMediaMmsMessageRecord(Cursor cursor) {
return new MediaMmsMessageRecord(context, id, recipients, recipients.getPrimaryRecipient(),
addressDeviceId, dateSent, dateReceived, receiptCount,
threadId, body, slideDeck, partCount, box, mismatches,
- networkFailures, subscriptionId);
+ networkFailures, subscriptionId, expiresIn, expireStarted);
}
private Recipients getRecipientsFor(String address) {
diff --git a/src/org/thoughtcrime/securesms/database/MmsSmsColumns.java b/src/org/thoughtcrime/securesms/database/MmsSmsColumns.java
index 0044948a933..b024a3aebb1 100644
--- a/src/org/thoughtcrime/securesms/database/MmsSmsColumns.java
+++ b/src/org/thoughtcrime/securesms/database/MmsSmsColumns.java
@@ -14,7 +14,9 @@ public interface MmsSmsColumns {
public static final String RECEIPT_COUNT = "delivery_receipt_count";
public static final String MISMATCHED_IDENTITIES = "mismatched_identities";
public static final String UNIQUE_ROW_ID = "unique_row_id";
- public static final String SUBSCRIPTION_ID = "subscription_id";
+ public static final String SUBSCRIPTION_ID = "subscription_id";
+ public static final String EXPIRES_IN = "expires_in";
+ public static final String EXPIRE_STARTED = "expire_started";
public static class Types {
protected static final long TOTAL_MASK = 0xFFFFFFFF;
@@ -61,8 +63,9 @@ public static class Types {
protected static final long PUSH_MESSAGE_BIT = 0x200000;
// Group Message Information
- protected static final long GROUP_UPDATE_BIT = 0x10000;
- protected static final long GROUP_QUIT_BIT = 0x20000;
+ protected static final long GROUP_UPDATE_BIT = 0x10000;
+ protected static final long GROUP_QUIT_BIT = 0x20000;
+ protected static final long EXPIRATION_TIMER_UPDATE_BIT = 0x40000;
// Encrypted Storage Information
protected static final long ENCRYPTION_MASK = 0xFF000000;
@@ -166,6 +169,10 @@ public static boolean isCallLog(long type) {
return type == INCOMING_CALL_TYPE || type == OUTGOING_CALL_TYPE || type == MISSED_CALL_TYPE;
}
+ public static boolean isExpirationTimerUpdate(long type) {
+ return (type & EXPIRATION_TIMER_UPDATE_BIT) != 0;
+ }
+
public static boolean isIncomingCall(long type) {
return type == INCOMING_CALL_TYPE;
}
diff --git a/src/org/thoughtcrime/securesms/database/MmsSmsDatabase.java b/src/org/thoughtcrime/securesms/database/MmsSmsDatabase.java
index 2358e7a1789..106fd940930 100644
--- a/src/org/thoughtcrime/securesms/database/MmsSmsDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/MmsSmsDatabase.java
@@ -26,8 +26,9 @@
import android.util.Log;
import org.thoughtcrime.securesms.crypto.MasterSecret;
+import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
import org.thoughtcrime.securesms.database.model.MessageRecord;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.util.HashSet;
import java.util.Set;
@@ -53,12 +54,15 @@ public class MmsSmsDatabase extends Database {
MmsDatabase.STATUS, MmsSmsColumns.RECEIPT_COUNT,
MmsSmsColumns.MISMATCHED_IDENTITIES,
MmsDatabase.NETWORK_FAILURE,
- MmsSmsColumns.SUBSCRIPTION_ID, TRANSPORT,
+ MmsSmsColumns.SUBSCRIPTION_ID,
+ MmsSmsColumns.EXPIRES_IN,
+ MmsSmsColumns.EXPIRE_STARTED, TRANSPORT,
AttachmentDatabase.ATTACHMENT_ID_ALIAS,
AttachmentDatabase.UNIQUE_ID,
AttachmentDatabase.MMS_ID,
AttachmentDatabase.SIZE,
AttachmentDatabase.DATA,
+ AttachmentDatabase.THUMBNAIL,
AttachmentDatabase.CONTENT_TYPE,
AttachmentDatabase.CONTENT_LOCATION,
AttachmentDatabase.CONTENT_DISPOSITION,
@@ -107,6 +111,17 @@ public Cursor getUnread() {
return queryTables(PROJECTION, selection, order, null);
}
+ public int getUnreadCount(long threadId) {
+ String selection = MmsSmsColumns.READ + " = 0 AND " + MmsSmsColumns.THREAD_ID + " = " + threadId;
+ Cursor cursor = queryTables(PROJECTION, selection, null, null);
+
+ try {
+ return cursor != null ? cursor.getCount() : 0;
+ } finally {
+ if (cursor != null) cursor.close();;
+ }
+ }
+
public int getConversationCount(long threadId) {
int count = DatabaseFactory.getSmsDatabase(context).getMessageCountForThread(threadId);
count += DatabaseFactory.getMmsDatabase(context).getMessageCountForThread(threadId);
@@ -114,9 +129,9 @@ public int getConversationCount(long threadId) {
return count;
}
- public void incrementDeliveryReceiptCount(String address, long timestamp) {
- DatabaseFactory.getSmsDatabase(context).incrementDeliveryReceiptCount(address, timestamp);
- DatabaseFactory.getMmsDatabase(context).incrementDeliveryReceiptCount(address, timestamp);
+ public void incrementDeliveryReceiptCount(SyncMessageId syncMessageId) {
+ DatabaseFactory.getSmsDatabase(context).incrementDeliveryReceiptCount(syncMessageId);
+ DatabaseFactory.getMmsDatabase(context).incrementDeliveryReceiptCount(syncMessageId);
}
private Cursor queryTables(String[] projection, String selection, String order, String limit) {
@@ -133,11 +148,13 @@ private Cursor queryTables(String[] projection, String selection, String order,
MmsDatabase.CONTENT_LOCATION, MmsDatabase.TRANSACTION_ID,
MmsDatabase.MESSAGE_SIZE, MmsDatabase.EXPIRY, MmsDatabase.STATUS,
MmsSmsColumns.RECEIPT_COUNT, MmsSmsColumns.MISMATCHED_IDENTITIES,
- MmsSmsColumns.SUBSCRIPTION_ID, MmsDatabase.NETWORK_FAILURE, TRANSPORT,
+ MmsSmsColumns.SUBSCRIPTION_ID, MmsSmsColumns.EXPIRES_IN, MmsSmsColumns.EXPIRE_STARTED,
+ MmsDatabase.NETWORK_FAILURE, TRANSPORT,
AttachmentDatabase.UNIQUE_ID,
AttachmentDatabase.MMS_ID,
AttachmentDatabase.SIZE,
AttachmentDatabase.DATA,
+ AttachmentDatabase.THUMBNAIL,
AttachmentDatabase.CONTENT_TYPE,
AttachmentDatabase.CONTENT_LOCATION,
AttachmentDatabase.CONTENT_DISPOSITION,
@@ -157,12 +174,13 @@ private Cursor queryTables(String[] projection, String selection, String order,
MmsDatabase.CONTENT_LOCATION, MmsDatabase.TRANSACTION_ID,
MmsDatabase.MESSAGE_SIZE, MmsDatabase.EXPIRY, MmsDatabase.STATUS,
MmsSmsColumns.RECEIPT_COUNT, MmsSmsColumns.MISMATCHED_IDENTITIES,
- MmsSmsColumns.SUBSCRIPTION_ID,
+ MmsSmsColumns.SUBSCRIPTION_ID, MmsSmsColumns.EXPIRES_IN, MmsSmsColumns.EXPIRE_STARTED,
MmsDatabase.NETWORK_FAILURE, TRANSPORT,
AttachmentDatabase.UNIQUE_ID,
AttachmentDatabase.MMS_ID,
AttachmentDatabase.SIZE,
AttachmentDatabase.DATA,
+ AttachmentDatabase.THUMBNAIL,
AttachmentDatabase.CONTENT_TYPE,
AttachmentDatabase.CONTENT_LOCATION,
AttachmentDatabase.CONTENT_DISPOSITION,
@@ -195,6 +213,8 @@ private Cursor queryTables(String[] projection, String selection, String order,
mmsColumnsPresent.add(MmsSmsColumns.RECEIPT_COUNT);
mmsColumnsPresent.add(MmsSmsColumns.MISMATCHED_IDENTITIES);
mmsColumnsPresent.add(MmsSmsColumns.SUBSCRIPTION_ID);
+ mmsColumnsPresent.add(MmsSmsColumns.EXPIRES_IN);
+ mmsColumnsPresent.add(MmsSmsColumns.EXPIRE_STARTED);
mmsColumnsPresent.add(MmsDatabase.MESSAGE_TYPE);
mmsColumnsPresent.add(MmsDatabase.MESSAGE_BOX);
mmsColumnsPresent.add(MmsDatabase.DATE_SENT);
@@ -209,7 +229,10 @@ private Cursor queryTables(String[] projection, String selection, String order,
mmsColumnsPresent.add(AttachmentDatabase.ROW_ID);
mmsColumnsPresent.add(AttachmentDatabase.UNIQUE_ID);
+ mmsColumnsPresent.add(AttachmentDatabase.MMS_ID);
mmsColumnsPresent.add(AttachmentDatabase.SIZE);
+ mmsColumnsPresent.add(AttachmentDatabase.DATA);
+ mmsColumnsPresent.add(AttachmentDatabase.THUMBNAIL);
mmsColumnsPresent.add(AttachmentDatabase.CONTENT_TYPE);
mmsColumnsPresent.add(AttachmentDatabase.CONTENT_LOCATION);
mmsColumnsPresent.add(AttachmentDatabase.CONTENT_DISPOSITION);
@@ -226,6 +249,8 @@ private Cursor queryTables(String[] projection, String selection, String order,
smsColumnsPresent.add(MmsSmsColumns.RECEIPT_COUNT);
smsColumnsPresent.add(MmsSmsColumns.MISMATCHED_IDENTITIES);
smsColumnsPresent.add(MmsSmsColumns.SUBSCRIPTION_ID);
+ smsColumnsPresent.add(MmsSmsColumns.EXPIRES_IN);
+ smsColumnsPresent.add(MmsSmsColumns.EXPIRE_STARTED);
smsColumnsPresent.add(SmsDatabase.TYPE);
smsColumnsPresent.add(SmsDatabase.SUBJECT);
smsColumnsPresent.add(SmsDatabase.DATE_SENT);
diff --git a/src/org/thoughtcrime/securesms/database/PushDatabase.java b/src/org/thoughtcrime/securesms/database/PushDatabase.java
index 1328290b75f..c0cf991f534 100644
--- a/src/org/thoughtcrime/securesms/database/PushDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/PushDatabase.java
@@ -9,9 +9,9 @@
import android.util.Log;
import org.thoughtcrime.securesms.util.Base64;
-import org.whispersystems.libaxolotl.util.guava.Optional;
-import org.whispersystems.textsecure.api.messages.TextSecureEnvelope;
-import org.whispersystems.textsecure.internal.util.Util;
+import org.whispersystems.libsignal.util.guava.Optional;
+import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
+import org.whispersystems.signalservice.internal.util.Util;
import java.io.IOException;
@@ -35,7 +35,7 @@ public PushDatabase(Context context, SQLiteOpenHelper databaseHelper) {
super(context, databaseHelper);
}
- public long insert(@NonNull TextSecureEnvelope envelope) {
+ public long insert(@NonNull SignalServiceEnvelope envelope) {
Optional messageId = find(envelope);
if (messageId.isPresent()) {
@@ -53,7 +53,7 @@ public long insert(@NonNull TextSecureEnvelope envelope) {
}
}
- public TextSecureEnvelope get(long id) throws NoSuchMessageException {
+ public SignalServiceEnvelope get(long id) throws NoSuchMessageException {
Cursor cursor = null;
try {
@@ -65,13 +65,13 @@ public TextSecureEnvelope get(long id) throws NoSuchMessageException {
String legacyMessage = cursor.getString(cursor.getColumnIndexOrThrow(LEGACY_MSG));
String content = cursor.getString(cursor.getColumnIndexOrThrow(CONTENT));
- return new TextSecureEnvelope(cursor.getInt(cursor.getColumnIndexOrThrow(TYPE)),
- cursor.getString(cursor.getColumnIndexOrThrow(SOURCE)),
- cursor.getInt(cursor.getColumnIndexOrThrow(DEVICE_ID)),
- "",
- cursor.getLong(cursor.getColumnIndexOrThrow(TIMESTAMP)),
- Util.isEmpty(legacyMessage) ? null : Base64.decode(legacyMessage),
- Util.isEmpty(content) ? null : Base64.decode(content));
+ return new SignalServiceEnvelope(cursor.getInt(cursor.getColumnIndexOrThrow(TYPE)),
+ cursor.getString(cursor.getColumnIndexOrThrow(SOURCE)),
+ cursor.getInt(cursor.getColumnIndexOrThrow(DEVICE_ID)),
+ "",
+ cursor.getLong(cursor.getColumnIndexOrThrow(TIMESTAMP)),
+ Util.isEmpty(legacyMessage) ? null : Base64.decode(legacyMessage),
+ Util.isEmpty(content) ? null : Base64.decode(content));
}
} catch (IOException e) {
Log.w(TAG, e);
@@ -96,7 +96,7 @@ public Reader readerFor(Cursor cursor) {
return new Reader(cursor);
}
- private Optional find(TextSecureEnvelope envelope) {
+ private Optional find(SignalServiceEnvelope envelope) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
Cursor cursor = null;
@@ -129,7 +129,7 @@ public Reader(Cursor cursor) {
this.cursor = cursor;
}
- public TextSecureEnvelope getNext() {
+ public SignalServiceEnvelope getNext() {
try {
if (cursor == null || !cursor.moveToNext())
return null;
@@ -141,9 +141,9 @@ public TextSecureEnvelope getNext() {
String content = cursor.getString(cursor.getColumnIndexOrThrow(CONTENT));
long timestamp = cursor.getLong(cursor.getColumnIndexOrThrow(TIMESTAMP));
- return new TextSecureEnvelope(type, source, deviceId, "", timestamp,
- legacyMessage != null ? Base64.decode(legacyMessage) : null,
- content != null ? Base64.decode(content) : null);
+ return new SignalServiceEnvelope(type, source, deviceId, "", timestamp,
+ legacyMessage != null ? Base64.decode(legacyMessage) : null,
+ content != null ? Base64.decode(content) : null);
} catch (IOException e) {
throw new AssertionError(e);
}
diff --git a/src/org/thoughtcrime/securesms/database/RecipientPreferenceDatabase.java b/src/org/thoughtcrime/securesms/database/RecipientPreferenceDatabase.java
index 7d1271acb60..c20c3f7650f 100644
--- a/src/org/thoughtcrime/securesms/database/RecipientPreferenceDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/RecipientPreferenceDatabase.java
@@ -11,9 +11,10 @@
import android.util.Log;
import org.thoughtcrime.securesms.color.MaterialColor;
+import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.libaxolotl.util.guava.Optional;
+import org.whispersystems.libsignal.util.guava.Optional;
import java.util.Arrays;
@@ -33,6 +34,7 @@ public class RecipientPreferenceDatabase extends Database {
private static final String COLOR = "color";
private static final String SEEN_INVITE_REMINDER = "seen_invite_reminder";
private static final String DEFAULT_SUBSCRIPTION_ID = "default_subscription_id";
+ private static final String EXPIRE_MESSAGES = "expire_messages";
public enum VibrateState {
DEFAULT(0), ENABLED(1), DISABLED(2);
@@ -62,7 +64,8 @@ public static VibrateState fromId(int id) {
MUTE_UNTIL + " INTEGER DEFAULT 0, " +
COLOR + " TEXT DEFAULT NULL, " +
SEEN_INVITE_REMINDER + " INTEGER DEFAULT 0, " +
- DEFAULT_SUBSCRIPTION_ID + " INTEGER DEFAULT -1);";
+ DEFAULT_SUBSCRIPTION_ID + " INTEGER DEFAULT -1, " +
+ EXPIRE_MESSAGES + " INTEGER DEFAULT 0);";
public RecipientPreferenceDatabase(Context context, SQLiteOpenHelper databaseHelper) {
super(context, databaseHelper);
@@ -78,6 +81,10 @@ public Cursor getBlocked() {
return cursor;
}
+ public BlockedReader readerForBlocked(Cursor cursor) {
+ return new BlockedReader(context, cursor);
+ }
+
public Optional getRecipientsPreferences(@NonNull long[] recipients) {
Arrays.sort(recipients);
@@ -98,6 +105,7 @@ public Optional getRecipientsPreferences(@NonNull long[]
Uri notificationUri = notification == null ? null : Uri.parse(notification);
boolean seenInviteReminder = cursor.getInt(cursor.getColumnIndexOrThrow(SEEN_INVITE_REMINDER)) == 1;
int defaultSubscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(DEFAULT_SUBSCRIPTION_ID));
+ int expireMessages = cursor.getInt(cursor.getColumnIndexOrThrow(EXPIRE_MESSAGES));
MaterialColor color;
@@ -113,7 +121,7 @@ public Optional getRecipientsPreferences(@NonNull long[]
return Optional.of(new RecipientsPreferences(blocked, muteUntil,
VibrateState.fromId(vibrateState),
notificationUri, color, seenInviteReminder,
- defaultSubscriptionId));
+ defaultSubscriptionId, expireMessages));
}
return Optional.absent();
@@ -134,7 +142,6 @@ public void setDefaultSubscriptionId(@NonNull Recipients recipients, int defaul
updateOrInsert(recipients, values);
}
-
public void setBlocked(Recipients recipients, boolean blocked) {
ContentValues values = new ContentValues();
values.put(BLOCK, blocked ? 1 : 0);
@@ -166,6 +173,14 @@ public void setSeenInviteReminder(Recipients recipients, boolean seen) {
updateOrInsert(recipients, values);
}
+ public void setExpireMessages(Recipients recipients, int expiration) {
+ recipients.setExpireMessages(expiration);
+
+ ContentValues values = new ContentValues(1);
+ values.put(EXPIRE_MESSAGES, expiration);
+ updateOrInsert(recipients, values);
+ }
+
private void updateOrInsert(Recipients recipients, ContentValues contentValues) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
@@ -193,13 +208,15 @@ public static class RecipientsPreferences {
private final MaterialColor color;
private final boolean seenInviteReminder;
private final int defaultSubscriptionId;
+ private final int expireMessages;
public RecipientsPreferences(boolean blocked, long muteUntil,
@NonNull VibrateState vibrateState,
@Nullable Uri notification,
@Nullable MaterialColor color,
boolean seenInviteReminder,
- int defaultSubscriptionId)
+ int defaultSubscriptionId,
+ int expireMessages)
{
this.blocked = blocked;
this.muteUntil = muteUntil;
@@ -208,6 +225,7 @@ public RecipientsPreferences(boolean blocked, long muteUntil,
this.color = color;
this.seenInviteReminder = seenInviteReminder;
this.defaultSubscriptionId = defaultSubscriptionId;
+ this.expireMessages = expireMessages;
}
public @Nullable MaterialColor getColor() {
@@ -237,5 +255,33 @@ public boolean hasSeenInviteReminder() {
public Optional getDefaultSubscriptionId() {
return defaultSubscriptionId != -1 ? Optional.of(defaultSubscriptionId) : Optional.absent();
}
+
+ public int getExpireMessages() {
+ return expireMessages;
+ }
+ }
+
+ public static class BlockedReader {
+
+ private final Context context;
+ private final Cursor cursor;
+
+ public BlockedReader(Context context, Cursor cursor) {
+ this.context = context;
+ this.cursor = cursor;
+ }
+
+ public @NonNull Recipients getCurrent() {
+ String recipientIds = cursor.getString(cursor.getColumnIndexOrThrow(RECIPIENT_IDS));
+ return RecipientFactory.getRecipientsForIds(context, recipientIds, false);
+ }
+
+ public @Nullable Recipients getNext() {
+ if (!cursor.moveToNext()) {
+ return null;
+ }
+
+ return getCurrent();
+ }
}
}
diff --git a/src/org/thoughtcrime/securesms/database/SmsDatabase.java b/src/org/thoughtcrime/securesms/database/SmsDatabase.java
index 771ca396207..4188db15622 100644
--- a/src/org/thoughtcrime/securesms/database/SmsDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/SmsDatabase.java
@@ -42,7 +42,7 @@
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
import org.thoughtcrime.securesms.util.JsonUtils;
import org.whispersystems.jobqueue.JobManager;
-import org.whispersystems.textsecure.api.util.InvalidNumberException;
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
import java.io.IOException;
import java.util.LinkedList;
@@ -77,7 +77,8 @@ public class SmsDatabase extends MessagingDatabase {
DATE_RECEIVED + " INTEGER, " + DATE_SENT + " INTEGER, " + PROTOCOL + " INTEGER, " + READ + " INTEGER DEFAULT 0, " +
STATUS + " INTEGER DEFAULT -1," + TYPE + " INTEGER, " + REPLY_PATH_PRESENT + " INTEGER, " +
RECEIPT_COUNT + " INTEGER DEFAULT 0," + SUBJECT + " TEXT, " + BODY + " TEXT, " +
- MISMATCHED_IDENTITIES + " TEXT DEFAULT NULL, " + SERVICE_CENTER + " TEXT, " + SUBSCRIPTION_ID + " INTEGER DEFAULT -1);";
+ MISMATCHED_IDENTITIES + " TEXT DEFAULT NULL, " + SERVICE_CENTER + " TEXT, " + SUBSCRIPTION_ID + " INTEGER DEFAULT -1, " +
+ EXPIRES_IN + " INTEGER DEFAULT 0, " + EXPIRE_STARTED + " INTEGER DEFAULT 0);";
public static final String[] CREATE_INDEXS = {
"CREATE INDEX IF NOT EXISTS sms_thread_id_index ON " + TABLE_NAME + " (" + THREAD_ID + ");",
@@ -94,7 +95,7 @@ public class SmsDatabase extends MessagingDatabase {
DATE_SENT + " AS " + NORMALIZED_DATE_SENT,
PROTOCOL, READ, STATUS, TYPE,
REPLY_PATH_PRESENT, SUBJECT, BODY, SERVICE_CENTER, RECEIPT_COUNT,
- MISMATCHED_IDENTITIES, SUBSCRIPTION_ID
+ MISMATCHED_IDENTITIES, SUBSCRIPTION_ID, EXPIRES_IN, EXPIRE_STARTED
};
private static final EarlyReceiptCache earlyReceiptCache = new EarlyReceiptCache();
@@ -235,6 +236,23 @@ public void markAsSent(long id) {
updateTypeBitmask(id, Types.BASE_TYPE_MASK, Types.BASE_SENT_TYPE);
}
+ public void markExpireStarted(long id) {
+ markExpireStarted(id, System.currentTimeMillis());
+ }
+
+ public void markExpireStarted(long id, long startedAtTimestamp) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(EXPIRE_STARTED, startedAtTimestamp);
+
+ SQLiteDatabase db = databaseHelper.getWritableDatabase();
+ db.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {String.valueOf(id)});
+
+ long threadId = getThreadIdForMessage(id);
+
+ DatabaseFactory.getThreadDatabase(context).update(threadId, false);
+ notifyConversationListeners(threadId);
+ }
+
public void markStatus(long id, int status) {
Log.w("MessageDatabase", "Updating ID: " + id + " to status: " + status);
ContentValues contentValues = new ContentValues();
@@ -252,20 +270,20 @@ public void markAsSentFailed(long id) {
updateTypeBitmask(id, Types.BASE_TYPE_MASK, Types.BASE_SENT_FAILED_TYPE);
}
- public void incrementDeliveryReceiptCount(String address, long timestamp) {
+ public void incrementDeliveryReceiptCount(SyncMessageId messageId) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
Cursor cursor = null;
boolean foundMessage = false;
try {
cursor = database.query(TABLE_NAME, new String[] {ID, THREAD_ID, ADDRESS, TYPE},
- DATE_SENT + " = ?", new String[] {String.valueOf(timestamp)},
+ DATE_SENT + " = ?", new String[] {String.valueOf(messageId.getTimetamp())},
null, null, null, null);
while (cursor.moveToNext()) {
if (Types.isOutgoingMessageType(cursor.getLong(cursor.getColumnIndexOrThrow(TYPE)))) {
try {
- String theirAddress = canonicalizeNumber(context, address);
+ String theirAddress = canonicalizeNumber(context, messageId.getAddress());
String ourAddress = canonicalizeNumber(context, cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)));
if (ourAddress.equals(theirAddress)) {
@@ -288,7 +306,7 @@ public void incrementDeliveryReceiptCount(String address, long timestamp) {
if (!foundMessage) {
try {
- earlyReceiptCache.increment(timestamp, canonicalizeNumber(context, address));
+ earlyReceiptCache.increment(messageId.getTimetamp(), canonicalizeNumber(context, messageId.getAddress()));
} catch (InvalidNumberException e) {
Log.w(TAG, e);
}
@@ -300,14 +318,81 @@ public void incrementDeliveryReceiptCount(String address, long timestamp) {
}
}
- public void setMessagesRead(long threadId) {
- SQLiteDatabase database = databaseHelper.getWritableDatabase();
- ContentValues contentValues = new ContentValues();
- contentValues.put(READ, 1);
+ public List setMessagesRead(long threadId) {
+ SQLiteDatabase database = databaseHelper.getWritableDatabase();
+ String where = THREAD_ID + " = ? AND " + READ + " = 0";
+ String[] selection = new String[]{String.valueOf(threadId)};
+ List results = new LinkedList<>();
+ Cursor cursor = null;
+
+ database.beginTransaction();
+ try {
+ cursor = database.query(TABLE_NAME, new String[] {ID, ADDRESS, DATE_SENT, TYPE, EXPIRES_IN, EXPIRE_STARTED}, where, selection, null, null, null);
+
+ while (cursor != null && cursor.moveToNext()) {
+ if (Types.isSecureType(cursor.getLong(3))) {
+ SyncMessageId syncMessageId = new SyncMessageId(cursor.getString(1), cursor.getLong(2));
+ ExpirationInfo expirationInfo = new ExpirationInfo(cursor.getLong(0), cursor.getLong(4), cursor.getLong(5), false);
+
+ results.add(new MarkedMessageInfo(syncMessageId, expirationInfo));
+ }
+ }
+
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(READ, 1);
+
+ database.update(TABLE_NAME, contentValues, where, selection);
+ database.setTransactionSuccessful();
+ } finally {
+ if (cursor != null) cursor.close();
+ database.endTransaction();
+ }
+
+ return results;
+ }
+
+ public List> setTimestampRead(SyncMessageId messageId, long expireStarted) {
+ SQLiteDatabase database = databaseHelper.getWritableDatabase();
+ List> expiring = new LinkedList<>();
+ Cursor cursor = null;
+
+ try {
+ cursor = database.query(TABLE_NAME, new String[] {ID, THREAD_ID, ADDRESS, TYPE, EXPIRES_IN},
+ DATE_SENT + " = ?", new String[] {String.valueOf(messageId.getTimetamp())},
+ null, null, null, null);
+
+ while (cursor.moveToNext()) {
+ try {
+ String theirAddress = canonicalizeNumber(context, messageId.getAddress());
+ String ourAddress = canonicalizeNumber(context, cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)));
+
+ if (ourAddress.equals(theirAddress)) {
+ long id = cursor.getLong(cursor.getColumnIndexOrThrow(ID));
+ long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID));
+ long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRES_IN));
- database.update(TABLE_NAME, contentValues,
- THREAD_ID + " = ? AND " + READ + " = 0",
- new String[] {threadId+""});
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(READ, 1);
+
+ if (expiresIn > 0) {
+ contentValues.put(EXPIRE_STARTED, expireStarted);
+ expiring.add(new Pair<>(id, expiresIn));
+ }
+
+ database.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {cursor.getLong(cursor.getColumnIndexOrThrow(ID)) + ""});
+
+ DatabaseFactory.getThreadDatabase(context).updateReadState(threadId);
+ notifyConversationListeners(threadId);
+ }
+ } catch (InvalidNumberException e) {
+ Log.w(TAG, e);
+ }
+ }
+ } finally {
+ if (cursor != null) cursor.close();
+ }
+
+ return expiring;
}
public void setAllMessagesRead() {
@@ -348,6 +433,7 @@ public Pair copyMessageInbox(long messageId) {
contentValues.put(READ, 0);
contentValues.put(BODY, record.getBody().getBody());
contentValues.put(THREAD_ID, record.getThreadId());
+ contentValues.put(EXPIRES_IN, record.getExpiresIn());
SQLiteDatabase db = databaseHelper.getWritableDatabase();
long newMessageId = db.insert(TABLE_NAME, null, contentValues);
@@ -416,7 +502,8 @@ protected Pair insertMessageInbox(IncomingTextMessage message, long
type |= Types.END_SESSION_BIT;
}
- if (message.isPush()) type |= Types.PUSH_MESSAGE_BIT;
+ if (message.isPush()) type |= Types.PUSH_MESSAGE_BIT;
+ if (message.isIdentityUpdate()) type |= Types.KEY_EXCHANGE_IDENTITY_UPDATE_BIT;
Recipients recipients;
@@ -435,8 +522,9 @@ protected Pair insertMessageInbox(IncomingTextMessage message, long
groupRecipients = RecipientFactory.getRecipientsFromString(context, message.getGroupId(), true);
}
- boolean unread = org.thoughtcrime.securesms.util.Util.isDefaultSmsProvider(context) ||
- message.isSecureMessage() || message.isPreKeyBundle();
+ boolean unread = (org.thoughtcrime.securesms.util.Util.isDefaultSmsProvider(context) ||
+ message.isSecureMessage() || message.isGroup() || message.isPreKeyBundle()) &&
+ !message.isIdentityUpdate();
long threadId;
@@ -451,6 +539,7 @@ protected Pair insertMessageInbox(IncomingTextMessage message, long
values.put(PROTOCOL, message.getProtocol());
values.put(READ, unread ? 0 : 1);
values.put(SUBSCRIPTION_ID, message.getSubscriptionId());
+ values.put(EXPIRES_IN, message.getExpiresIn());
if (!TextUtils.isEmpty(message.getPseudoSubject()))
values.put(SUBJECT, message.getPseudoSubject());
@@ -468,7 +557,10 @@ protected Pair insertMessageInbox(IncomingTextMessage message, long
DatabaseFactory.getThreadDatabase(context).setUnread(threadId);
}
- DatabaseFactory.getThreadDatabase(context).update(threadId, true);
+ if (!message.isIdentityUpdate()) {
+ DatabaseFactory.getThreadDatabase(context).update(threadId, true);
+ }
+
notifyConversationListeners(threadId);
jobManager.add(new TrimThreadJob(context, threadId));
@@ -498,6 +590,7 @@ protected long insertMessageOutbox(long threadId, OutgoingTextMessage message,
contentValues.put(READ, 1);
contentValues.put(TYPE, type);
contentValues.put(SUBSCRIPTION_ID, message.getSubscriptionId());
+ contentValues.put(EXPIRES_IN, message.getExpiresIn());
try {
contentValues.put(RECEIPT_COUNT, earlyReceiptCache.remove(date, canonicalizeNumber(context, address)));
@@ -540,6 +633,12 @@ public Cursor getEncryptedRogueMessages(Recipient recipient) {
return db.query(TABLE_NAME, MESSAGE_PROJECTION, selection, args, null, null, null);
}
+ public Cursor getExpirationStartedMessages() {
+ String where = EXPIRE_STARTED + " > 0";
+ SQLiteDatabase db = databaseHelper.getReadableDatabase();
+ return db.query(TABLE_NAME, MESSAGE_PROJECTION, where, null, null, null, null);
+ }
+
public Cursor getMessage(long messageId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, MESSAGE_PROJECTION, ID_WHERE, new String[]{messageId + ""},
@@ -665,6 +764,8 @@ public SmsMessageRecord getCurrent() {
int receiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(SmsDatabase.RECEIPT_COUNT));
String mismatchDocument = cursor.getString(cursor.getColumnIndexOrThrow(SmsDatabase.MISMATCHED_IDENTITIES));
int subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(SmsDatabase.SUBSCRIPTION_ID));
+ long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.EXPIRES_IN));
+ long expireStarted = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.EXPIRE_STARTED));
List mismatches = getMismatches(mismatchDocument);
Recipients recipients = getRecipientsFor(address);
@@ -674,7 +775,8 @@ public SmsMessageRecord getCurrent() {
recipients.getPrimaryRecipient(),
addressDeviceId,
dateSent, dateReceived, receiptCount, type,
- threadId, status, mismatches, subscriptionId);
+ threadId, status, mismatches, subscriptionId,
+ expiresIn, expireStarted);
}
private Recipients getRecipientsFor(String address) {
diff --git a/src/org/thoughtcrime/securesms/database/TextSecureDirectory.java b/src/org/thoughtcrime/securesms/database/TextSecureDirectory.java
index 5370fc0bd7f..ff5a90c5c6d 100644
--- a/src/org/thoughtcrime/securesms/database/TextSecureDirectory.java
+++ b/src/org/thoughtcrime/securesms/database/TextSecureDirectory.java
@@ -10,9 +10,9 @@
import android.text.TextUtils;
import android.util.Log;
-import org.whispersystems.textsecure.api.push.ContactTokenDetails;
-import org.whispersystems.textsecure.api.util.InvalidNumberException;
-import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
+import org.whispersystems.signalservice.api.push.ContactTokenDetails;
+import org.whispersystems.signalservice.api.util.InvalidNumberException;
+import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
import java.util.ArrayList;
import java.util.Collection;
@@ -198,15 +198,7 @@ public Set getPushEligibleContactNumbers(String localNumber) {
if (cursor != null)
cursor.close();
- final SQLiteDatabase readableDb = databaseHelper.getReadableDatabase();
- if (readableDb != null) {
- cursor = readableDb.query(TABLE_NAME, new String[]{NUMBER},
- null, null, null, null, null);
-
- while (cursor != null && cursor.moveToNext()) {
- results.add(cursor.getString(0));
- }
- }
+ results.addAll(getActiveNumbers());
return results;
} finally {
diff --git a/src/org/thoughtcrime/securesms/database/ThreadDatabase.java b/src/org/thoughtcrime/securesms/database/ThreadDatabase.java
index 628cd74f043..e0021711b2d 100644
--- a/src/org/thoughtcrime/securesms/database/ThreadDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/ThreadDatabase.java
@@ -29,6 +29,8 @@
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.crypto.MasterCipher;
+import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
+import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
import org.thoughtcrime.securesms.database.model.DisplayRecord;
import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord;
import org.thoughtcrime.securesms.database.model.MessageRecord;
@@ -39,7 +41,7 @@
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.Util;
-import org.whispersystems.libaxolotl.InvalidMessageException;
+import org.whispersystems.libsignal.InvalidMessageException;
import java.util.Arrays;
import java.util.HashSet;
@@ -66,6 +68,7 @@ public class ThreadDatabase extends Database {
public static final String ARCHIVED = "archived";
public static final String STATUS = "status";
public static final String RECEIPT_COUNT = "delivery_receipt_count";
+ public static final String EXPIRES_IN = "expires_in";
public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +
ID + " INTEGER PRIMARY KEY, " + DATE + " INTEGER DEFAULT 0, " +
@@ -74,7 +77,7 @@ public class ThreadDatabase extends Database {
TYPE + " INTEGER DEFAULT 0, " + ERROR + " INTEGER DEFAULT 0, " +
SNIPPET_TYPE + " INTEGER DEFAULT 0, " + SNIPPET_URI + " TEXT DEFAULT NULL, " +
ARCHIVED + " INTEGER DEFAULT 0, " + STATUS + " INTEGER DEFAULT 0, " +
- RECEIPT_COUNT + " INTEGER DEFAULT 0);";
+ RECEIPT_COUNT + " INTEGER DEFAULT 0, " + EXPIRES_IN + " INTEGER DEFAULT 0);";
public static final String[] CREATE_INDEXS = {
"CREATE INDEX IF NOT EXISTS thread_recipient_ids_index ON " + TABLE_NAME + " (" + RECIPIENT_IDS + ");",
@@ -132,7 +135,8 @@ private long createThreadForRecipients(String recipients, int recipientCount, in
}
private void updateThread(long threadId, long count, String body, @Nullable Uri attachment,
- long date, int status, int receiptCount, long type, boolean unarchive)
+ long date, int status, int receiptCount, long type, boolean unarchive,
+ long expiresIn)
{
ContentValues contentValues = new ContentValues(7);
contentValues.put(DATE, date - date % 1000);
@@ -142,6 +146,7 @@ private void updateThread(long threadId, long count, String body, @Nullable Uri
contentValues.put(SNIPPET_TYPE, type);
contentValues.put(STATUS, status);
contentValues.put(RECEIPT_COUNT, receiptCount);
+ contentValues.put(EXPIRES_IN, expiresIn);
if (unarchive) {
contentValues.put(ARCHIVED, 0);
@@ -257,16 +262,22 @@ public void setAllThreadsRead() {
notifyConversationListListeners();
}
- public void setRead(long threadId) {
+ public List setRead(long threadId) {
ContentValues contentValues = new ContentValues(1);
contentValues.put(READ, 1);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {threadId+""});
- DatabaseFactory.getSmsDatabase(context).setMessagesRead(threadId);
- DatabaseFactory.getMmsDatabase(context).setMessagesRead(threadId);
+ final List smsRecords = DatabaseFactory.getSmsDatabase(context).setMessagesRead(threadId);
+ final List mmsRecords = DatabaseFactory.getMmsDatabase(context).setMessagesRead(threadId);
+
notifyConversationListListeners();
+
+ return new LinkedList() {{
+ addAll(smsRecords);
+ addAll(mmsRecords);
+ }};
}
public void setUnread(long threadId) {
@@ -465,6 +476,18 @@ public long getThreadIdFor(Recipients recipients, int distributionType) {
return null;
}
+ public void updateReadState(long threadId) {
+ int unreadCount = DatabaseFactory.getMmsSmsDatabase(context).getUnreadCount(threadId);
+
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(READ, unreadCount == 0);
+
+ databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues,ID_WHERE,
+ new String[] {String.valueOf(threadId)});
+
+ notifyConversationListListeners();
+ }
+
public boolean update(long threadId, boolean unarchive) {
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
long count = mmsSmsDatabase.getConversationCount(threadId);
@@ -484,7 +507,7 @@ public boolean update(long threadId, boolean unarchive) {
if (reader != null && (record = reader.getNext()) != null) {
updateThread(threadId, count, record.getBody().getBody(), getAttachmentUriFor(record),
record.getTimestamp(), record.getDeliveryStatus(), record.getReceiptCount(),
- record.getType(), unarchive);
+ record.getType(), unarchive, record.getExpiresIn());
notifyConversationListListeners();
return false;
} else {
@@ -553,10 +576,12 @@ public ThreadRecord getCurrent() {
boolean archived = cursor.getInt(cursor.getColumnIndex(ThreadDatabase.ARCHIVED)) != 0;
int status = cursor.getInt(cursor.getColumnIndexOrThrow(ThreadDatabase.STATUS));
int receiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(ThreadDatabase.RECEIPT_COUNT));
+ long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(ThreadDatabase.EXPIRES_IN));
Uri snippetUri = getSnippetUri(cursor);
return new ThreadRecord(context, body, snippetUri, recipients, date, count, read == 1,
- threadId, receiptCount, status, type, distributionType, archived);
+ threadId, receiptCount, status, type, distributionType, archived,
+ expiresIn);
}
private DisplayRecord.Body getPlaintextBody(Cursor cursor) {
diff --git a/src/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatch.java b/src/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatch.java
index 1d1c63f97a3..ff7a48356f3 100644
--- a/src/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatch.java
+++ b/src/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatch.java
@@ -13,8 +13,8 @@
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.thoughtcrime.securesms.util.Base64;
-import org.whispersystems.libaxolotl.IdentityKey;
-import org.whispersystems.libaxolotl.InvalidKeyException;
+import org.whispersystems.libsignal.IdentityKey;
+import org.whispersystems.libsignal.InvalidKeyException;
import java.io.IOException;
diff --git a/src/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java b/src/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java
index 9701d086fda..7837c719a38 100644
--- a/src/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java
+++ b/src/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java
@@ -43,12 +43,13 @@ private Cursor getUnarchivedConversationList() {
ThreadDatabase.ID, ThreadDatabase.DATE, ThreadDatabase.MESSAGE_COUNT,
ThreadDatabase.RECIPIENT_IDS, ThreadDatabase.SNIPPET, ThreadDatabase.READ,
ThreadDatabase.TYPE, ThreadDatabase.SNIPPET_TYPE, ThreadDatabase.SNIPPET_URI,
- ThreadDatabase.ARCHIVED, ThreadDatabase.STATUS, ThreadDatabase.RECEIPT_COUNT}, 1);
+ ThreadDatabase.ARCHIVED, ThreadDatabase.STATUS, ThreadDatabase.RECEIPT_COUNT,
+ ThreadDatabase.EXPIRES_IN}, 1);
switchToArchiveCursor.addRow(new Object[] {-1L, System.currentTimeMillis(), archivedCount,
"-1", null, 1, ThreadDatabase.DistributionTypes.ARCHIVE,
- 0, null, 0, -1, 0});
-
+ 0, null, 0, -1, 0, 0});
+
cursorList.add(switchToArchiveCursor);
}
diff --git a/src/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java b/src/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java
index 5083f1dc179..22b85a19a8b 100644
--- a/src/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java
+++ b/src/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java
@@ -13,7 +13,7 @@
import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import org.whispersystems.textsecure.api.util.PhoneNumberFormatter;
+import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
public class CountryListLoader extends AsyncTaskLoader>> {
diff --git a/src/org/thoughtcrime/securesms/database/loaders/DeviceListLoader.java b/src/org/thoughtcrime/securesms/database/loaders/DeviceListLoader.java
index dfdf07ce395..eb22b51c1d4 100644
--- a/src/org/thoughtcrime/securesms/database/loaders/DeviceListLoader.java
+++ b/src/org/thoughtcrime/securesms/database/loaders/DeviceListLoader.java
@@ -1,12 +1,12 @@
package org.thoughtcrime.securesms.database.loaders;
import android.content.Context;
-import android.support.v4.content.AsyncTaskLoader;
import android.util.Log;
-import org.whispersystems.textsecure.api.TextSecureAccountManager;
-import org.whispersystems.textsecure.api.messages.multidevice.DeviceInfo;
-import org.whispersystems.textsecure.api.push.TextSecureAddress;
+import org.thoughtcrime.securesms.util.AsyncLoader;
+import org.whispersystems.signalservice.api.SignalServiceAccountManager;
+import org.whispersystems.signalservice.api.messages.multidevice.DeviceInfo;
+import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import java.io.IOException;
import java.util.Collections;
@@ -14,13 +14,13 @@
import java.util.Iterator;
import java.util.List;
-public class DeviceListLoader extends AsyncTaskLoader> {
+public class DeviceListLoader extends AsyncLoader> {
private static final String TAG = DeviceListLoader.class.getSimpleName();
- private final TextSecureAccountManager accountManager;
+ private final SignalServiceAccountManager accountManager;
- public DeviceListLoader(Context context, TextSecureAccountManager accountManager) {
+ public DeviceListLoader(Context context, SignalServiceAccountManager accountManager) {
super(context);
this.accountManager = accountManager;
}
@@ -32,7 +32,7 @@ public List loadInBackground() {
Iterator iterator = devices.iterator();
while (iterator.hasNext()) {
- if ((iterator.next().getId() == TextSecureAddress.DEFAULT_DEVICE_ID)) {
+ if ((iterator.next().getId() == SignalServiceAddress.DEFAULT_DEVICE_ID)) {
iterator.remove();
}
}
diff --git a/src/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java b/src/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java
new file mode 100644
index 00000000000..4a649572f9e
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java
@@ -0,0 +1,39 @@
+package org.thoughtcrime.securesms.database.loaders;
+
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.MediaStore;
+import android.support.v4.content.CursorLoader;
+
+import org.thoughtcrime.securesms.database.DatabaseFactory;
+
+public class RecentPhotosLoader extends CursorLoader {
+
+ public static Uri BASE_URL = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
+
+ private static final String[] PROJECTION = new String[] {
+ MediaStore.Images.ImageColumns._ID,
+ MediaStore.Images.ImageColumns.DATE_TAKEN,
+ MediaStore.Images.ImageColumns.DATE_MODIFIED,
+ MediaStore.Images.ImageColumns.ORIENTATION,
+ MediaStore.Images.ImageColumns.MIME_TYPE
+ };
+
+ private final Context context;
+
+ public RecentPhotosLoader(Context context) {
+ super(context);
+ this.context = context.getApplicationContext();
+ }
+
+ @Override
+ public Cursor loadInBackground() {
+ return context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
+ PROJECTION, null, null,
+ MediaStore.Images.ImageColumns.DATE_MODIFIED + " DESC");
+ }
+
+
+}
diff --git a/src/org/thoughtcrime/securesms/database/model/DisplayRecord.java b/src/org/thoughtcrime/securesms/database/model/DisplayRecord.java
index f3a2c6d64fe..df6f6f80c5a 100644
--- a/src/org/thoughtcrime/securesms/database/model/DisplayRecord.java
+++ b/src/org/thoughtcrime/securesms/database/model/DisplayRecord.java
@@ -115,6 +115,10 @@ public boolean isGroupAction() {
return isGroupUpdate() || isGroupQuit();
}
+ public boolean isExpirationTimerUpdate() {
+ return SmsDatabase.Types.isExpirationTimerUpdate(type);
+ }
+
public boolean isCallLog() {
return SmsDatabase.Types.isCallLog(type);
}
diff --git a/src/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java b/src/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java
index 7615e7a0212..8ef55e23226 100644
--- a/src/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java
+++ b/src/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java
@@ -25,6 +25,7 @@
import org.thoughtcrime.securesms.database.SmsDatabase.Status;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
+import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.Recipients;
@@ -53,10 +54,12 @@ public MediaMmsMessageRecord(Context context, long id, Recipients recipients,
@NonNull SlideDeck slideDeck,
int partCount, long mailbox,
List mismatches,
- List failures, int subscriptionId)
+ List failures, int subscriptionId,
+ long expiresIn, long expireStarted)
{
super(context, id, body, recipients, individualRecipient, recipientDeviceId, dateSent,
- dateReceived, threadId, Status.STATUS_NONE, receiptCount, mailbox, mismatches, failures, subscriptionId);
+ dateReceived, threadId, Status.STATUS_NONE, receiptCount, mailbox, mismatches, failures,
+ subscriptionId, expiresIn, expireStarted);
this.context = context.getApplicationContext();
this.partCount = partCount;
@@ -85,6 +88,17 @@ public boolean isMmsNotification() {
return false;
}
+ @Override
+ public boolean isMediaPending() {
+ for (Slide slide : getSlideDeck().getSlides()) {
+ if (slide.isInProgress() || slide.isPendingDownload()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
@Override
public SpannableString getDisplayBody() {
if (MmsDatabase.Types.isDecryptInProgressType(type)) {
diff --git a/src/org/thoughtcrime/securesms/database/model/MessageRecord.java b/src/org/thoughtcrime/securesms/database/model/MessageRecord.java
index 608e14304ea..68685ad2bd9 100644
--- a/src/org/thoughtcrime/securesms/database/model/MessageRecord.java
+++ b/src/org/thoughtcrime/securesms/database/model/MessageRecord.java
@@ -29,6 +29,7 @@
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.Recipients;
+import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.GroupUtil;
import java.util.List;
@@ -51,6 +52,8 @@ public abstract class MessageRecord extends DisplayRecord {
private final List mismatches;
private final List networkFailures;
private final int subscriptionId;
+ private final long expiresIn;
+ private final long expireStarted;
MessageRecord(Context context, long id, Body body, Recipients recipients,
Recipient individualRecipient, int recipientDeviceId,
@@ -58,7 +61,7 @@ public abstract class MessageRecord extends DisplayRecord {
int deliveryStatus, int receiptCount, long type,
List mismatches,
List networkFailures,
- int subscriptionId)
+ int subscriptionId, long expiresIn, long expireStarted)
{
super(context, body, recipients, dateSent, dateReceived, threadId, deliveryStatus, receiptCount,
type);
@@ -68,6 +71,8 @@ public abstract class MessageRecord extends DisplayRecord {
this.mismatches = mismatches;
this.networkFailures = networkFailures;
this.subscriptionId = subscriptionId;
+ this.expiresIn = expiresIn;
+ this.expireStarted = expireStarted;
}
public abstract boolean isMms();
@@ -103,6 +108,12 @@ public SpannableString getDisplayBody() {
return emphasisAdded(context.getString(R.string.MessageRecord_missed_call_from, getIndividualRecipient().toShortString()));
} else if (isJoined()) {
return emphasisAdded(context.getString(R.string.MessageRecord_s_is_on_signal_say_hey, getIndividualRecipient().toShortString()));
+ } else if (isExpirationTimerUpdate()) {
+ String time = ExpirationUtil.getExpirationDisplayValue(context, (int)(getExpiresIn() / 1000));
+ return isOutgoing() ? emphasisAdded(context.getString(R.string.MessageRecord_you_set_disappearing_message_time_to_s, time))
+ : emphasisAdded(context.getString(R.string.MessageRecord_s_set_disappearing_message_time_to_s, getIndividualRecipient().toShortString(), time));
+ } else if (isIdentityUpdate()) {
+ return emphasisAdded(context.getString(R.string.MessageRecord_your_safety_number_with_s_has_changed, getIndividualRecipient().toShortString()));
} else if (getBody().getBody().length() > MAX_DISPLAY_LENGTH) {
return new SpannableString(getBody().getBody().substring(0, MAX_DISPLAY_LENGTH));
}
@@ -119,8 +130,10 @@ public boolean isPush() {
}
public long getTimestamp() {
- if (isPush()) return getDateSent();
- else return getDateReceived();
+ if (isPush() && getDateSent() < getDateReceived()) {
+ return getDateSent();
+ }
+ return getDateReceived();
}
public boolean isForcedSms() {
@@ -155,6 +168,10 @@ public boolean isInvalidVersionKeyExchange() {
return SmsDatabase.Types.isInvalidVersionKeyExchange(type);
}
+ public boolean isMediaPending() {
+ return false;
+ }
+
public Recipient getIndividualRecipient() {
return individualRecipient;
}
@@ -201,4 +218,12 @@ public int hashCode() {
public int getSubscriptionId() {
return subscriptionId;
}
+
+ public long getExpiresIn() {
+ return expiresIn;
+ }
+
+ public long getExpireStarted() {
+ return expireStarted;
+ }
}
diff --git a/src/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java b/src/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java
index 8da31f5308f..c78413517ef 100644
--- a/src/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java
+++ b/src/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java
@@ -54,7 +54,8 @@ public NotificationMmsMessageRecord(Context context, long id, Recipients recipie
{
super(context, id, new Body("", true), recipients, individualRecipient, recipientDeviceId,
dateSent, dateReceived, threadId, Status.STATUS_NONE, receiptCount, mailbox,
- new LinkedList(), new LinkedList(), subscriptionId);
+ new LinkedList(), new LinkedList(), subscriptionId,
+ 0, 0);
this.contentLocation = contentLocation;
this.messageSize = messageSize;
@@ -113,6 +114,11 @@ public boolean isMmsNotification() {
return true;
}
+ @Override
+ public boolean isMediaPending() {
+ return true;
+ }
+
@Override
public SpannableString getDisplayBody() {
return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_multimedia_message));
diff --git a/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java b/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java
index 6000aea9dbe..796d08d48be 100644
--- a/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java
+++ b/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java
@@ -48,11 +48,12 @@ public SmsMessageRecord(Context context, long id,
int receiptCount,
long type, long threadId,
int status, List mismatches,
- int subscriptionId)
+ int subscriptionId, long expiresIn, long expireStarted)
{
super(context, id, body, recipients, individualRecipient, recipientDeviceId,
dateSent, dateReceived, threadId, status, receiptCount, type,
- mismatches, new LinkedList(), subscriptionId);
+ mismatches, new LinkedList(), subscriptionId,
+ expiresIn, expireStarted);
}
public long getType() {
@@ -74,9 +75,7 @@ public SpannableString getDisplayBody() {
} else if (MmsSmsColumns.Types.isLegacyType(type)) {
return emphasisAdded(context.getString(R.string.MessageRecord_message_encrypted_with_a_legacy_protocol_version_that_is_no_longer_supported));
} else if (isBundleKeyExchange()) {
- return emphasisAdded(context.getString(R.string.SmsMessageRecord_received_message_with_unknown_identity_key_tap_to_process));
- } else if (isIdentityUpdate()) {
- return emphasisAdded(context.getString(R.string.SmsMessageRecord_received_updated_but_unknown_identity_information));
+ return emphasisAdded(context.getString(R.string.SmsMessageRecord_received_message_with_new_safety_number_tap_to_process));
} else if (isKeyExchange() && isOutgoing()) {
return new SpannableString("");
} else if (isKeyExchange() && !isOutgoing()) {
@@ -89,8 +88,10 @@ public SpannableString getDisplayBody() {
return emphasisAdded(context.getString(R.string.MessageDisplayHelper_message_encrypted_for_non_existing_session));
} else if (!getBody().isPlaintext()) {
return emphasisAdded(context.getString(R.string.MessageNotifier_locked_message));
- } else if (SmsDatabase.Types.isEndSessionType(type)) {
+ } else if (isEndSession() && isOutgoing()) {
return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset));
+ } else if (isEndSession()) {
+ return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset_s, getIndividualRecipient().toShortString()));
} else {
return super.getDisplayBody();
}
diff --git a/src/org/thoughtcrime/securesms/database/model/ThreadRecord.java b/src/org/thoughtcrime/securesms/database/model/ThreadRecord.java
index f6a8af90456..21dfb0004a1 100644
--- a/src/org/thoughtcrime/securesms/database/model/ThreadRecord.java
+++ b/src/org/thoughtcrime/securesms/database/model/ThreadRecord.java
@@ -30,6 +30,7 @@
import org.thoughtcrime.securesms.database.SmsDatabase;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.recipients.Recipients;
+import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.GroupUtil;
/**
@@ -46,11 +47,12 @@ public class ThreadRecord extends DisplayRecord {
private final boolean read;
private final int distributionType;
private final boolean archived;
+ private final long expiresIn;
public ThreadRecord(@NonNull Context context, @NonNull Body body, @Nullable Uri snippetUri,
@NonNull Recipients recipients, long date, long count, boolean read,
long threadId, int receiptCount, int status, long snippetType,
- int distributionType, boolean archived)
+ int distributionType, boolean archived, long expiresIn)
{
super(context, body, recipients, date, date, threadId, status, receiptCount, snippetType);
this.context = context.getApplicationContext();
@@ -59,6 +61,7 @@ public ThreadRecord(@NonNull Context context, @NonNull Body body, @Nullable Uri
this.read = read;
this.distributionType = distributionType;
this.archived = archived;
+ this.expiresIn = expiresIn;
}
public @Nullable Uri getSnippetUri() {
@@ -96,6 +99,11 @@ public SpannableString getDisplayBody() {
return emphasisAdded(context.getString(org.thoughtcrime.securesms.R.string.ThreadRecord_missed_call));
} else if (SmsDatabase.Types.isJoinedType(type)) {
return emphasisAdded(context.getString(R.string.ThreadRecord_s_is_on_signal_say_hey, getRecipients().getPrimaryRecipient().toShortString()));
+ } else if (SmsDatabase.Types.isExpirationTimerUpdate(type)) {
+ String time = ExpirationUtil.getExpirationDisplayValue(context, (int) (getExpiresIn() / 1000));
+ return emphasisAdded(context.getString(R.string.ThreadRecord_disappearing_message_time_updated_to_s, time));
+ } else if (SmsDatabase.Types.isIdentityUpdate(type)) {
+ return emphasisAdded(context.getString(R.string.ThreadRecord_your_safety_number_with_s_has_changed, getRecipients().getPrimaryRecipient().toShortString()));
} else {
if (TextUtils.isEmpty(getBody().getBody())) {
return new SpannableString(emphasisAdded(context.getString(R.string.ThreadRecord_media_message)));
@@ -135,4 +143,8 @@ public boolean isArchived() {
public int getDistributionType() {
return distributionType;
}
+
+ public long getExpiresIn() {
+ return expiresIn;
+ }
}
diff --git a/src/org/thoughtcrime/securesms/dependencies/AxolotlStorageModule.java b/src/org/thoughtcrime/securesms/dependencies/AxolotlStorageModule.java
index 5e5d51301ae..4d4029261e0 100644
--- a/src/org/thoughtcrime/securesms/dependencies/AxolotlStorageModule.java
+++ b/src/org/thoughtcrime/securesms/dependencies/AxolotlStorageModule.java
@@ -2,10 +2,9 @@
import android.content.Context;
-import org.thoughtcrime.securesms.crypto.MasterSecret;
-import org.thoughtcrime.securesms.crypto.storage.TextSecureAxolotlStore;
+import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl;
import org.thoughtcrime.securesms.jobs.CleanPreKeysJob;
-import org.whispersystems.libaxolotl.state.SignedPreKeyStore;
+import org.whispersystems.libsignal.state.SignedPreKeyStore;
import dagger.Module;
import dagger.Provides;
@@ -23,7 +22,7 @@ public AxolotlStorageModule(Context context) {
return new SignedPreKeyStoreFactory() {
@Override
public SignedPreKeyStore create() {
- return new TextSecureAxolotlStore(context);
+ return new SignalProtocolStoreImpl(context);
}
};
}
diff --git a/src/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java b/src/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java
new file mode 100644
index 00000000000..ae11543e204
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java
@@ -0,0 +1,138 @@
+package org.thoughtcrime.securesms.dependencies;
+
+import android.content.Context;
+
+import org.thoughtcrime.securesms.BuildConfig;
+import org.thoughtcrime.securesms.DeviceListFragment;
+import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl;
+import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob;
+import org.thoughtcrime.securesms.jobs.AvatarDownloadJob;
+import org.thoughtcrime.securesms.jobs.CleanPreKeysJob;
+import org.thoughtcrime.securesms.jobs.CreateSignedPreKeyJob;
+import org.thoughtcrime.securesms.jobs.DeliveryReceiptJob;
+import org.thoughtcrime.securesms.jobs.GcmRefreshJob;
+import org.thoughtcrime.securesms.jobs.MultiDeviceBlockedUpdateJob;
+import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob;
+import org.thoughtcrime.securesms.jobs.MultiDeviceGroupUpdateJob;
+import org.thoughtcrime.securesms.jobs.MultiDeviceReadUpdateJob;
+import org.thoughtcrime.securesms.jobs.PushGroupSendJob;
+import org.thoughtcrime.securesms.jobs.PushGroupUpdateJob;
+import org.thoughtcrime.securesms.jobs.PushMediaSendJob;
+import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob;
+import org.thoughtcrime.securesms.jobs.PushTextSendJob;
+import org.thoughtcrime.securesms.jobs.RefreshAttributesJob;
+import org.thoughtcrime.securesms.jobs.RefreshPreKeysJob;
+import org.thoughtcrime.securesms.jobs.RequestGroupInfoJob;
+import org.thoughtcrime.securesms.push.Censorship;
+import org.thoughtcrime.securesms.push.SignalServiceTrustStore;
+import org.thoughtcrime.securesms.push.CensorshipFrontingTrustStore;
+import org.thoughtcrime.securesms.push.SecurityEventListener;
+import org.thoughtcrime.securesms.service.MessageRetrievalService;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
+import org.whispersystems.libsignal.util.guava.Optional;
+import org.whispersystems.signalservice.api.SignalServiceAccountManager;
+import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
+import org.whispersystems.signalservice.api.SignalServiceMessageSender;
+import org.whispersystems.signalservice.api.push.TrustStore;
+import org.whispersystems.signalservice.api.util.CredentialsProvider;
+import org.whispersystems.signalservice.internal.push.SignalServiceUrl;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module(complete = false, injects = {CleanPreKeysJob.class,
+ CreateSignedPreKeyJob.class,
+ DeliveryReceiptJob.class,
+ PushGroupSendJob.class,
+ PushTextSendJob.class,
+ PushMediaSendJob.class,
+ AttachmentDownloadJob.class,
+ RefreshPreKeysJob.class,
+ MessageRetrievalService.class,
+ PushNotificationReceiveJob.class,
+ MultiDeviceContactUpdateJob.class,
+ MultiDeviceGroupUpdateJob.class,
+ MultiDeviceReadUpdateJob.class,
+ MultiDeviceBlockedUpdateJob.class,
+ DeviceListFragment.class,
+ RefreshAttributesJob.class,
+ GcmRefreshJob.class,
+ RequestGroupInfoJob.class,
+ PushGroupUpdateJob.class,
+ AvatarDownloadJob.class})
+public class SignalCommunicationModule {
+
+ private final Context context;
+ private final SignalServiceUrl url;
+ private final TrustStore trustStore;
+
+ public SignalCommunicationModule(Context context) {
+ this.context = context;
+
+ if (Censorship.isCensored(context)) {
+ this.url = new SignalServiceUrl(BuildConfig.UNCENSORED_FRONTING_HOST, BuildConfig.CENSORED_REFLECTOR);
+ this.trustStore = new CensorshipFrontingTrustStore(context);
+ } else {
+ this.url = new SignalServiceUrl(BuildConfig.TEXTSECURE_URL, null);
+ this.trustStore = new SignalServiceTrustStore(context);
+ }
+ }
+
+ @Provides SignalServiceAccountManager provideSignalAccountManager() {
+ return new SignalServiceAccountManager(this.url, this.trustStore,
+ TextSecurePreferences.getLocalNumber(context),
+ TextSecurePreferences.getPushServerPassword(context),
+ BuildConfig.USER_AGENT);
+ }
+
+ @Provides
+ SignalMessageSenderFactory provideSignalMessageSenderFactory() {
+ return new SignalMessageSenderFactory() {
+ @Override
+ public SignalServiceMessageSender create() {
+ return new SignalServiceMessageSender(SignalCommunicationModule.this.url,
+ SignalCommunicationModule.this.trustStore,
+ TextSecurePreferences.getLocalNumber(context),
+ TextSecurePreferences.getPushServerPassword(context),
+ new SignalProtocolStoreImpl(context),
+ BuildConfig.USER_AGENT,
+ Optional.of(new SecurityEventListener(context)));
+ }
+ };
+ }
+
+ @Provides SignalServiceMessageReceiver provideSignalMessageReceiver() {
+ return new SignalServiceMessageReceiver(this.url, this.trustStore,
+ new DynamicCredentialsProvider(context),
+ BuildConfig.USER_AGENT);
+ }
+
+ public static interface SignalMessageSenderFactory {
+ public SignalServiceMessageSender create();
+ }
+
+ private static class DynamicCredentialsProvider implements CredentialsProvider {
+
+ private final Context context;
+
+ private DynamicCredentialsProvider(Context context) {
+ this.context = context.getApplicationContext();
+ }
+
+ @Override
+ public String getUser() {
+ return TextSecurePreferences.getLocalNumber(context);
+ }
+
+ @Override
+ public String getPassword() {
+ return TextSecurePreferences.getPushServerPassword(context);
+ }
+
+ @Override
+ public String getSignalingKey() {
+ return TextSecurePreferences.getSignalingKey(context);
+ }
+ }
+
+}
diff --git a/src/org/thoughtcrime/securesms/dependencies/TextSecureCommunicationModule.java b/src/org/thoughtcrime/securesms/dependencies/TextSecureCommunicationModule.java
deleted file mode 100644
index 2a38e2b3a97..00000000000
--- a/src/org/thoughtcrime/securesms/dependencies/TextSecureCommunicationModule.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.thoughtcrime.securesms.dependencies;
-
-import android.content.Context;
-
-import org.thoughtcrime.securesms.BuildConfig;
-import org.thoughtcrime.securesms.DeviceListFragment;
-import org.thoughtcrime.securesms.crypto.storage.TextSecureAxolotlStore;
-import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob;
-import org.thoughtcrime.securesms.jobs.CleanPreKeysJob;
-import org.thoughtcrime.securesms.jobs.CreateSignedPreKeyJob;
-import org.thoughtcrime.securesms.jobs.DeliveryReceiptJob;
-import org.thoughtcrime.securesms.jobs.GcmRefreshJob;
-import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob;
-import org.thoughtcrime.securesms.jobs.MultiDeviceGroupUpdateJob;
-import org.thoughtcrime.securesms.jobs.PushGroupSendJob;
-import org.thoughtcrime.securesms.jobs.PushMediaSendJob;
-import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob;
-import org.thoughtcrime.securesms.jobs.PushTextSendJob;
-import org.thoughtcrime.securesms.jobs.RefreshAttributesJob;
-import org.thoughtcrime.securesms.jobs.RefreshPreKeysJob;
-import org.thoughtcrime.securesms.push.SecurityEventListener;
-import org.thoughtcrime.securesms.push.TextSecurePushTrustStore;
-import org.thoughtcrime.securesms.service.MessageRetrievalService;
-import org.thoughtcrime.securesms.util.TextSecurePreferences;
-import org.whispersystems.libaxolotl.util.guava.Optional;
-import org.whispersystems.textsecure.api.TextSecureAccountManager;
-import org.whispersystems.textsecure.api.TextSecureMessageReceiver;
-import org.whispersystems.textsecure.api.TextSecureMessageSender;
-import org.whispersystems.textsecure.api.util.CredentialsProvider;
-
-import dagger.Module;
-import dagger.Provides;
-
-@Module(complete = false, injects = {CleanPreKeysJob.class,
- CreateSignedPreKeyJob.class,
- DeliveryReceiptJob.class,
- PushGroupSendJob.class,
- PushTextSendJob.class,
- PushMediaSendJob.class,
- AttachmentDownloadJob.class,
- RefreshPreKeysJob.class,
- MessageRetrievalService.class,
- PushNotificationReceiveJob.class,
- MultiDeviceContactUpdateJob.class,
- MultiDeviceGroupUpdateJob.class,
- DeviceListFragment.class,
- RefreshAttributesJob.class,
- GcmRefreshJob.class})
-public class TextSecureCommunicationModule {
-
- private final Context context;
-
- public TextSecureCommunicationModule(Context context) {
- this.context = context;
- }
-
- @Provides TextSecureAccountManager provideTextSecureAccountManager() {
- return new TextSecureAccountManager(BuildConfig.TEXTSECURE_URL,
- new TextSecurePushTrustStore(context),
- TextSecurePreferences.getLocalNumber(context),
- TextSecurePreferences.getPushServerPassword(context),
- BuildConfig.USER_AGENT);
- }
-
- @Provides TextSecureMessageSenderFactory provideTextSecureMessageSenderFactory() {
- return new TextSecureMessageSenderFactory() {
- @Override
- public TextSecureMessageSender create() {
- return new TextSecureMessageSender(BuildConfig.TEXTSECURE_URL,
- new TextSecurePushTrustStore(context),
- TextSecurePreferences.getLocalNumber(context),
- TextSecurePreferences.getPushServerPassword(context),
- new TextSecureAxolotlStore(context),
- BuildConfig.USER_AGENT,
- Optional.of(new SecurityEventListener(context)));
- }
- };
- }
-
- @Provides TextSecureMessageReceiver provideTextSecureMessageReceiver() {
- return new TextSecureMessageReceiver(BuildConfig.TEXTSECURE_URL,
- new TextSecurePushTrustStore(context),
- new DynamicCredentialsProvider(context),
- BuildConfig.USER_AGENT);
- }
-
- public static interface TextSecureMessageSenderFactory {
- public TextSecureMessageSender create();
- }
-
- private static class DynamicCredentialsProvider implements CredentialsProvider {
-
- private final Context context;
-
- private DynamicCredentialsProvider(Context context) {
- this.context = context.getApplicationContext();
- }
-
- @Override
- public String getUser() {
- return TextSecurePreferences.getLocalNumber(context);
- }
-
- @Override
- public String getPassword() {
- return TextSecurePreferences.getPushServerPassword(context);
- }
-
- @Override
- public String getSignalingKey() {
- return TextSecurePreferences.getSignalingKey(context);
- }
- }
-
-}
diff --git a/src/org/thoughtcrime/securesms/gcm/GcmBroadcastReceiver.java b/src/org/thoughtcrime/securesms/gcm/GcmBroadcastReceiver.java
deleted file mode 100644
index e1483d688ce..00000000000
--- a/src/org/thoughtcrime/securesms/gcm/GcmBroadcastReceiver.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.thoughtcrime.securesms.gcm;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.AsyncTask;
-import android.support.v4.content.WakefulBroadcastReceiver;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.google.android.gms.gcm.GoogleCloudMessaging;
-
-import org.thoughtcrime.redphone.RedPhoneService;
-import org.thoughtcrime.redphone.crypto.EncryptedSignalMessage;
-import org.thoughtcrime.redphone.crypto.InvalidEncryptedSignalException;
-import org.thoughtcrime.redphone.signaling.SessionDescriptor;
-import org.thoughtcrime.redphone.signaling.signals.CompressedInitiateSignalProtocol.CompressedInitiateSignal;
-import org.thoughtcrime.securesms.ApplicationContext;
-import org.thoughtcrime.securesms.jobs.PushContentReceiveJob;
-import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob;
-import org.thoughtcrime.securesms.recipients.RecipientFactory;
-import org.thoughtcrime.securesms.recipients.Recipients;
-import org.thoughtcrime.securesms.util.TextSecurePreferences;
-
-import java.io.IOException;
-
-public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
-
- private static final String TAG = GcmBroadcastReceiver.class.getSimpleName();
-
- @Override
- public void onReceive(Context context, Intent intent) {
- GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
- String messageType = gcm.getMessageType(intent);
-
- if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
- Log.w(TAG, "GCM message...");
-
- if (!TextSecurePreferences.isGcmRegistered(context)) {
- Log.w(TAG, "Not push registered!");
- return;
- }
-
- String messageData = intent.getStringExtra("message");
- String receiptData = intent.getStringExtra("receipt");
- String callData = intent.getStringExtra("call");
-
- if (!TextUtils.isEmpty(messageData)) handleReceivedMessage(context, messageData);
- else if (!TextUtils.isEmpty(receiptData)) handleReceivedMessage(context, receiptData);
- else if (intent.hasExtra("notification")) handleReceivedNotification(context);
- else if (!TextUtils.isEmpty(callData)) handleReceivedCall(context, callData);
- }
- }
-
- private void handleReceivedMessage(Context context, String data) {
- ApplicationContext.getInstance(context)
- .getJobManager()
- .add(new PushContentReceiveJob(context, data));
- }
-
- private void handleReceivedNotification(Context context) {
- ApplicationContext.getInstance(context)
- .getJobManager()
- .add(new PushNotificationReceiveJob(context));
- }
-
- private void handleReceivedCall(final Context context, final String data) {
- new AsyncTask() {
- @Override
- protected Void doInBackground(Void... params) {
- try {
- String signalingKey = TextSecurePreferences.getSignalingKey(context);
- EncryptedSignalMessage encryptedSignalMessage = new EncryptedSignalMessage(data, signalingKey);
- CompressedInitiateSignal signal = CompressedInitiateSignal.parseFrom(encryptedSignalMessage.getPlaintext());
- Recipients recipients = RecipientFactory.getRecipientsFromString(context, signal.getInitiator(), false);
-
- if (!recipients.isBlocked()) {
- Intent intent = new Intent(context, RedPhoneService.class);
- intent.setAction(RedPhoneService.ACTION_INCOMING_CALL);
- intent.putExtra(RedPhoneService.EXTRA_REMOTE_NUMBER, signal.getInitiator());
- intent.putExtra(RedPhoneService.EXTRA_SESSION_DESCRIPTOR, new SessionDescriptor(signal.getServerName(),
- signal.getPort(),
- signal.getSessionId(),
- signal.getVersion()));
- context.startService(intent);
- } else {
- Log.w(TAG, "*** Received incoming call from blocked number, ignoring...");
- }
- } catch (InvalidEncryptedSignalException | IOException e) {
- Log.w(TAG, e);
- }
-
- return null;
- }
- }.execute();
- }
-}
\ No newline at end of file
diff --git a/src/org/thoughtcrime/securesms/giph/model/GiphyImage.java b/src/org/thoughtcrime/securesms/giph/model/GiphyImage.java
new file mode 100644
index 00000000000..8efc46b8d96
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/giph/model/GiphyImage.java
@@ -0,0 +1,70 @@
+package org.thoughtcrime.securesms.giph.model;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class GiphyImage {
+
+ @JsonProperty
+ private ImageTypes images;
+
+ public String getGifUrl() {
+ return images.downsized.url;
+ }
+
+ public String getGifMmsUrl() {
+ return images.fixed_height_downsampled.url;
+ }
+
+ public float getGifAspectRatio() {
+ return (float)images.downsized.width / (float)images.downsized.height;
+ }
+
+ public String getStillUrl() {
+ return images.downsized_still.url;
+ }
+
+ public static class ImageTypes {
+ @JsonProperty
+ private ImageData fixed_height;
+ @JsonProperty
+ private ImageData fixed_height_still;
+ @JsonProperty
+ private ImageData fixed_height_downsampled;
+ @JsonProperty
+ private ImageData fixed_width;
+ @JsonProperty
+ private ImageData fixed_width_still;
+ @JsonProperty
+ private ImageData fixed_width_downsampled;
+ @JsonProperty
+ private ImageData fixed_width_small;
+ @JsonProperty
+ private ImageData downsized_medium;
+ @JsonProperty
+ private ImageData downsized;
+ @JsonProperty
+ private ImageData downsized_still;
+ }
+
+ public static class ImageData {
+ @JsonProperty
+ private String url;
+
+ @JsonProperty
+ private int width;
+
+ @JsonProperty
+ private int height;
+
+ @JsonProperty
+ private int size;
+
+ @JsonProperty
+ private String mp4;
+
+ @JsonProperty
+ private String webp;
+ }
+
+}
diff --git a/src/org/thoughtcrime/securesms/giph/model/GiphyResponse.java b/src/org/thoughtcrime/securesms/giph/model/GiphyResponse.java
new file mode 100644
index 00000000000..4ab61b57155
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/giph/model/GiphyResponse.java
@@ -0,0 +1,17 @@
+package org.thoughtcrime.securesms.giph.model;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.List;
+
+public class GiphyResponse {
+
+ @JsonProperty
+ private List data;
+
+ public List getData() {
+ return data;
+ }
+
+}
diff --git a/src/org/thoughtcrime/securesms/giph/net/GiphyGifLoader.java b/src/org/thoughtcrime/securesms/giph/net/GiphyGifLoader.java
new file mode 100644
index 00000000000..e832d23bf49
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/giph/net/GiphyGifLoader.java
@@ -0,0 +1,23 @@
+package org.thoughtcrime.securesms.giph.net;
+
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+public class GiphyGifLoader extends GiphyLoader {
+
+ public GiphyGifLoader(@NonNull Context context, @Nullable String searchString) {
+ super(context, searchString);
+ }
+
+ @Override
+ protected String getTrendingUrl() {
+ return "https://api.giphy.com/v1/gifs/trending?api_key=3o6ZsYH6U6Eri53TXy&offset=%d&limit=" + PAGE_SIZE;
+ }
+
+ @Override
+ protected String getSearchUrl() {
+ return "https://api.giphy.com/v1/gifs/search?api_key=3o6ZsYH6U6Eri53TXy&offset=%d&limit=" + PAGE_SIZE + "&q=%s";
+ }
+}
diff --git a/src/org/thoughtcrime/securesms/giph/net/GiphyLoader.java b/src/org/thoughtcrime/securesms/giph/net/GiphyLoader.java
new file mode 100644
index 00000000000..9ec89048c1d
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/giph/net/GiphyLoader.java
@@ -0,0 +1,73 @@
+package org.thoughtcrime.securesms.giph.net;
+
+
+import android.content.Context;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.squareup.okhttp.OkHttpClient;
+import com.squareup.okhttp.Request;
+import com.squareup.okhttp.Response;
+
+import org.thoughtcrime.securesms.giph.model.GiphyImage;
+import org.thoughtcrime.securesms.giph.model.GiphyResponse;
+import org.thoughtcrime.securesms.util.AsyncLoader;
+import org.thoughtcrime.securesms.util.JsonUtils;
+
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+
+public abstract class GiphyLoader extends AsyncLoader> {
+
+ private static final String TAG = GiphyLoader.class.getName();
+
+ public static int PAGE_SIZE = 100;
+
+ @Nullable private String searchString;
+
+ private final OkHttpClient client = new OkHttpClient();
+
+ protected GiphyLoader(@NonNull Context context, @Nullable String searchString) {
+ super(context);
+ this.searchString = searchString;
+ this.client.setProxySelector(new GiphyProxySelector());
+ }
+
+ @Override
+ public List loadInBackground() {
+ return loadPage(0);
+ }
+
+ public @NonNull List loadPage(int offset) {
+ try {
+ String url;
+
+ if (TextUtils.isEmpty(searchString)) url = String.format(getTrendingUrl(), offset);
+ else url = String.format(getSearchUrl(), offset, Uri.encode(searchString));
+
+ Request request = new Request.Builder().url(url).build();
+ Response response = client.newCall(request).execute();
+
+ if (!response.isSuccessful()) {
+ throw new IOException("Unexpected code " + response);
+ }
+
+ GiphyResponse giphyResponse = JsonUtils.fromJson(response.body().byteStream(), GiphyResponse.class);
+ List results = giphyResponse.getData();
+
+ if (results == null) return new LinkedList<>();
+ else return results;
+
+ } catch (IOException e) {
+ Log.w(TAG, e);
+ return new LinkedList<>();
+ }
+ }
+
+ protected abstract String getTrendingUrl();
+ protected abstract String getSearchUrl();
+}
diff --git a/src/org/thoughtcrime/securesms/giph/net/GiphyProxySelector.java b/src/org/thoughtcrime/securesms/giph/net/GiphyProxySelector.java
new file mode 100644
index 00000000000..e7c64bd487d
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/giph/net/GiphyProxySelector.java
@@ -0,0 +1,73 @@
+package org.thoughtcrime.securesms.giph.net;
+
+
+import android.os.AsyncTask;
+import android.util.Log;
+
+import org.thoughtcrime.securesms.BuildConfig;
+import org.thoughtcrime.securesms.util.Util;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.ProxySelector;
+import java.net.SocketAddress;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+public class GiphyProxySelector extends ProxySelector {
+
+ private static final String TAG = GiphyProxySelector.class.getSimpleName();
+
+ private final List EMPTY = new ArrayList<>(1);
+ private volatile List