diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..725c89d
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,88 @@
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+ifeq ($(TARGET_BUILD_APPS),)
+ LOCAL_RESOURCE_DIR += frameworks/support/v7/appcompat/res
+ LOCAL_RESOURCE_DIR += frameworks/support/v7/recyclerview/res
+else
+ LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/appcompat/res
+ LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/recyclerview/res
+endif
+LOCAL_RESOURCE_DIR += frameworks/opt/chips/res
+LOCAL_RESOURCE_DIR += frameworks/opt/colorpicker/res
+LOCAL_RESOURCE_DIR += frameworks/opt/photoviewer/res
+LOCAL_RESOURCE_DIR += frameworks/opt/photoviewer/activity/res
+
+LOCAL_STATIC_JAVA_LIBRARIES := android-common
+LOCAL_STATIC_JAVA_LIBRARIES += android-common-framesequence
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-palette
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-recyclerview
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v13
+LOCAL_STATIC_JAVA_LIBRARIES += com.android.vcard
+LOCAL_STATIC_JAVA_LIBRARIES += guava
+LOCAL_STATIC_JAVA_LIBRARIES += libchips
+LOCAL_STATIC_JAVA_LIBRARIES += libphotoviewer
+LOCAL_STATIC_JAVA_LIBRARIES += libphonenumber
+LOCAL_STATIC_JAVA_LIBRARIES += colorpicker
+
+include $(LOCAL_PATH)/version.mk
+
+LOCAL_AAPT_FLAGS := --auto-add-overlay
+LOCAL_AAPT_FLAGS += --version-name "$(version_name_package)"
+LOCAL_AAPT_FLAGS += --version-code $(version_code_package)
+LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat
+LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.recyclerview
+LOCAL_AAPT_FLAGS += --extra-packages com.android.ex.chips
+LOCAL_AAPT_FLAGS += --extra-packages com.android.vcard
+LOCAL_AAPT_FLAGS += --extra-packages com.android.ex.photo
+LOCAL_AAPT_FLAGS += --extra-packages com.android.colorpicker
+
+ifdef TARGET_BUILD_APPS
+ LOCAL_JNI_SHARED_LIBRARIES := libframesequence libgiftranscode
+else
+ LOCAL_REQUIRED_MODULES:= libframesequence libgiftranscode
+endif
+
+LOCAL_PROGUARD_FLAGS := -ignorewarnings -include build/core/proguard_basic_keeps.flags
+
+LOCAL_PROGUARD_ENABLED := nosystem
+
+LOCAL_PROGUARD_FLAG_FILES := proguard.flags
+ifeq (eng,$(TARGET_BUILD_VARIANT))
+ LOCAL_PROGUARD_FLAG_FILES += proguard-test.flags
+else
+ LOCAL_PROGUARD_FLAG_FILES += proguard-release.flags
+endif
+
+LOCAL_JACK_ENABLED := disabled
+
+LOCAL_PACKAGE_NAME := messaging
+
+LOCAL_CERTIFICATE := platform
+
+LOCAL_SDK_VERSION := current
+
+include $(BUILD_PACKAGE)
+
+include $(call all-makefiles-under, $(LOCAL_PATH))
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
new file mode 100644
index 0000000..8fe8fae
--- /dev/null
+++ b/AndroidManifest.xml
@@ -0,0 +1,524 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ForceProguard.mk b/ForceProguard.mk
new file mode 100755
index 0000000..e6f4fea
--- /dev/null
+++ b/ForceProguard.mk
@@ -0,0 +1,40 @@
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Check to see if we need to force proguard to re-run, typically after using tapas to
+# switch to/from eng builds. This is determined by comparing the flag files used in the previous
+# build. If the flag files have changed, proguard is rerun.
+
+# If the LOCAL_MODULE being setup isn't a build target, then don't run ForceProguard.
+ifneq (,$(findstring $(LOCAL_MODULE), $(TARGET_BUILD_APPS)))
+
+PREVIOUS_FLAG_FILES_USED_DIR := $(call local-intermediates-dir,1)
+
+# If the local intermediates dir doesn't exist, ForceProguard won't work.
+ifneq ($(wildcard $(PREVIOUS_FLAG_FILES_USED_DIR)),)
+PREVIOUS_FLAG_FILES_USED_FILE := $(PREVIOUS_FLAG_FILES_USED_DIR)/previous_proguard_flag_files
+PREVIOUS_FLAG_FILES_USED := $(if $(wildcard $(PREVIOUS_FLAG_FILES_USED_FILE)), \
+ $(shell cat $(PREVIOUS_FLAG_FILES_USED_FILE)))
+
+ifneq ($(strip $(PREVIOUS_FLAG_FILES_USED)), $(strip $(LOCAL_PROGUARD_FLAG_FILES)))
+$(info *** Flag files used for proguard have changed; forcing proguard to rerun.)
+$(shell touch $(LOCAL_PATH)/proguard.flags)
+$(shell echo $(LOCAL_PROGUARD_FLAG_FILES) > $(PREVIOUS_FLAG_FILES_USED_FILE))
+endif
+
+endif
+# End local intermediates directory existence check
+
+endif
+# End LOCAL_MODULE is a build target check
diff --git a/assets/licenses.html b/assets/licenses.html
new file mode 100644
index 0000000..aa9c3b7
--- /dev/null
+++ b/assets/licenses.html
@@ -0,0 +1,666 @@
+
+
+
+
+
+
+
+
+
Notice for AOSP:
+
+ Copyright (c) 2005-2008, The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+
+
Notices for Guava: Google Core Libraries for Java
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+
Notices for JSR 305
+
+Copyright (c) 2007-2009, JSR305 expert group
+All rights reserved.
+
+http://www.opensource.org/licenses/bsd-license.php
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the JSR305 expert group nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+
+
Notices for libphonenumber
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+
Notices for GIFLIB
+
+The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond
+
+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.
+
+
diff --git a/build/README b/build/README
new file mode 100644
index 0000000..3398014
--- /dev/null
+++ b/build/README
@@ -0,0 +1,8 @@
+Files in this folder are build extensions specific to the Bugle project, but currently could be merged into the core Android build.
+
+gcheckstyle is a tool from google3 to validate java from google3. The config file is baked into the jar, but can be updated with a little hackery.
+
+Files last pulled around CL 66008148:
+gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml is the config file which came from /home/build/nonconf/google3/tools/java/checkstyle and was modified to use Android specific styles. It must keep the same name and path in order to correctly update the jar
+
+google-style-checker_deploy.jar is pulled from the build share at /google/data/ro/teams/devtools/glint/linters/live/google-style-checker_deploy.jar and can be pulled from there as needed.
diff --git a/build/android_lint.mk b/build/android_lint.mk
new file mode 100644
index 0000000..3a9a3d7
--- /dev/null
+++ b/build/android_lint.mk
@@ -0,0 +1,59 @@
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Android lint checks for common code/resource errors specific to Android
+
+# Lint tool expects the intermediates dir to match the project name Bugle rather
+# than $(LOCAL_PACKAGE_NAME) which is messaging
+# Create a symbolic link to redirect the tool
+$(LOCAL_PACKAGE_NAME)BUGLE_RENAME := $(subst $(LOCAL_PACKAGE_NAME)_intermediates,Bugle_intermediates,$(intermediates.COMMON))
+$($(LOCAL_PACKAGE_NAME)BUGLE_RENAME): SOURCE_PATH := $(abspath $(intermediates.COMMON)/)
+$($(LOCAL_PACKAGE_NAME)BUGLE_RENAME): DST_PATH := $($(LOCAL_PACKAGE_NAME)BUGLE_RENAME)
+$($(LOCAL_PACKAGE_NAME)BUGLE_RENAME) :
+ ln -f -s $(SOURCE_PATH) $(DST_PATH)
+
+# Lint tool expects api-versions.xml from the SDK to be in development/sdk but
+# it's not. Create a symbolic link to the android SDK to fix it
+API_VERSIONS_XML := $(abspath development/sdk/api-versions.xml)
+$(API_VERSIONS_XML):
+ ln -f -s $(abspath prebuilts/fullsdk/linux/platform-tools/api/api-versions.xml) $(API_VERSIONS_XML)
+
+# The output xml file from the lint tool
+$(LOCAL_PACKAGE_NAME)LINT_XML := $(intermediates.COMMON)/$(LOCAL_PACKAGE_NAME)_android_lint.xml
+
+# The transformed text file from the output xml
+$(LOCAL_PACKAGE_NAME)LINT_TXT := $(intermediates.COMMON)/$(LOCAL_PACKAGE_NAME)_android_lint.txt
+
+# Creates the output xml from the lint tool by running the linting tool if the
+# package has been updated
+$($(LOCAL_PACKAGE_NAME)LINT_XML): PRIVATE_PATH := $(LOCAL_PATH)
+$($(LOCAL_PACKAGE_NAME)LINT_XML): LINT_CMD = $(LINT) --quiet -Wall --disable UnusedIds,UnusedResources,MissingTranslation $(PRIVATE_PATH)
+$($(LOCAL_PACKAGE_NAME)LINT_XML) : $(LOCAL_BUILT_MODULE) $($(LOCAL_PACKAGE_NAME)BUGLE_RENAME) $(API_VERSIONS_XML)
+ $(LINT_CMD) --xml $@ > /dev/null
+
+# Creates the transformed text file from the output xml by running an xslt on it
+# which filters out issues from the support library and formats it for console
+# output
+$($(LOCAL_PACKAGE_NAME)LINT_TXT): PRIVATE_PATH := $(LOCAL_PATH)
+$($(LOCAL_PACKAGE_NAME)LINT_TXT): INPUT := $($(LOCAL_PACKAGE_NAME)LINT_XML)
+$($(LOCAL_PACKAGE_NAME)LINT_TXT): XSLT_CMD = xsltproc $(PRIVATE_PATH)/build/android_lint.xslt $(INPUT)
+$($(LOCAL_PACKAGE_NAME)LINT_TXT) : $($(LOCAL_PACKAGE_NAME)LINT_XML)
+ $(hide) $(XSLT_CMD) > $@
+
+# The root of the lint rule which just prints the lint errors txt file to the
+# console
+$(LOCAL_PACKAGE_NAME)lint: PRIVATE_PATH := $(LOCAL_PATH)
+$(LOCAL_PACKAGE_NAME)lint :: $($(LOCAL_PACKAGE_NAME)LINT_TXT)
+ $(hide) $(PRIVATE_PATH)/build/colorize_errors.py < $<
+
diff --git a/build/android_lint.xslt b/build/android_lint.xslt
new file mode 100644
index 0000000..d0ddc1c
--- /dev/null
+++ b/build/android_lint.xslt
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+ : []
+
+
+
+ :
+
+ ,
+
+
+
+
+
+
+
+
diff --git a/build/colorize_errors.py b/build/colorize_errors.py
new file mode 100755
index 0000000..e33edc0
--- /dev/null
+++ b/build/colorize_errors.py
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Given an input stream look for Error: and Warning: lines and colorize those to
+# the output
+
+import fileinput
+import re
+import sys
+
+RED = "\033[31m"
+YELLOW = "\033[33m"
+RESET = "\033[0m"
+
+ERROR = re.compile(r"^Error:")
+WARNING = re.compile(r"^Warning:")
+STARTS_WITH_WS = re.compile(r"^\s")
+
+for line in fileinput.input():
+ if ERROR.match(line):
+ print RED + line,
+ elif WARNING.match(line):
+ print YELLOW + line,
+ elif STARTS_WITH_WS.match(line):
+ # If the line starts with a space use the same coloring as the previous line
+ print line,
+ else:
+ print RESET + line,
+print RESET
+
diff --git a/build/gcheckstyle.mk b/build/gcheckstyle.mk
new file mode 100644
index 0000000..61890ee
--- /dev/null
+++ b/build/gcheckstyle.mk
@@ -0,0 +1,45 @@
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# The config file to use when checking style issues
+STYLE_CONFIG := $(LOCAL_PATH)/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml
+
+# The jar file to use to perform the checking
+STYLE_JAR := $(LOCAL_PATH)/build/gcheckstyle/google-style-checker_deploy.jar
+
+# The output file to cache the results of style error checking
+$(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT := $(intermediates.COMMON)/$(LOCAL_PACKAGE_NAME)_style_errors.txt
+
+# The set of input files to check
+$(LOCAL_PACKAGE_NAME)JAVA_FILES = $(shell find $(LOCAL_PATH)/src/ -name '*.java')
+
+# Updates the JAR file with the new config if the config has changed
+# The config file has to be packaged into the jar, and jar uf command expects the current working directory
+# to match the jar structure
+$(STYLE_JAR): PRIVATE_PATH := $(LOCAL_PATH)
+$(STYLE_JAR) : $(STYLE_CONFIG)
+ $(hide) pushd $(PRIVATE_PATH)/build/gcheckstyle && \
+ jar uf google-style-checker_deploy.jar tools/java/checkstyle/googlestyle-5.0.xml && \
+ popd
+
+# Rebuilds the style errors text if the style checker or any of the java files have changed
+# FLAG: It may be more efficient to cache individual file results rather than grouping them all together
+$($(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT): SOURCES := $($(LOCAL_PACKAGE_NAME)JAVA_FILES)
+$($(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT) : $($(LOCAL_PACKAGE_NAME)JAVA_FILES) $(STYLE_JAR)
+ $(hide) -/usr/local/buildtools/java/jdk/bin/java -jar $(STYLE_JAR) $(SOURCES) > $@
+
+# The root of the lint rule which just prints the style errors txt file to the console
+$(LOCAL_PACKAGE_NAME)lint :: $($(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT)
+ $(hide) $(PRIVATE_PATH)/build/process_style_output.py -omit $(abspath $(PRIVATE_PATH))/ < $< | $(PRIVATE_PATH)/build/colorize_errors.py
+
diff --git a/build/gcheckstyle/google-style-checker_deploy.jar b/build/gcheckstyle/google-style-checker_deploy.jar
new file mode 100644
index 0000000..86afcbc
Binary files /dev/null and b/build/gcheckstyle/google-style-checker_deploy.jar differ
diff --git a/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml b/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml
new file mode 100644
index 0000000..6960849
--- /dev/null
+++ b/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml
@@ -0,0 +1,411 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build/process_style_output.py b/build/process_style_output.py
new file mode 100755
index 0000000..63ca9a0
--- /dev/null
+++ b/build/process_style_output.py
@@ -0,0 +1,38 @@
+#!/usr/bin/python
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Take the output from gstylechecker and clean up into a more friendly format
+
+import argparse
+import fileinput
+import re
+
+parser = argparse.ArgumentParser()
+parser.add_argument('-omit')
+args = parser.parse_args()
+
+PATTERN = re.compile(r"(?P[^:]+):(?P\d+)(?P:\d+)?:\s(?P.*)")
+
+for line in fileinput.input([]):
+ match = PATTERN.match(line)
+ if match:
+ filename = match.group("file");
+ if args.omit:
+ filename = filename.replace(args.omit, "")
+ message = match.group("message")
+ message = message[0].upper() + message[1:]
+ print message
+ print " " + filename + ':' + match.group("line") + (match.group("column") if match.group("column") else "")
+
diff --git a/jni/Android.mk b/jni/Android.mk
new file mode 100644
index 0000000..cd89b8f
--- /dev/null
+++ b/jni/Android.mk
@@ -0,0 +1,35 @@
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_STATIC_LIBRARIES += libgif
+
+# Link to Android logging (liblog.so) and dynamic linker (libdl.so) libraries
+LOCAL_LDFLAGS := -llog -ldl
+
+LOCAL_C_INCLUDES := \
+ external/giflib
+
+LOCAL_MODULE := libgiftranscode
+LOCAL_SRC_FILES := GifTranscoder.cpp
+
+LOCAL_CFLAGS += -Wall -Wno-unused-parameter -Wno-switch
+
+LOCAL_SDK_VERSION := 8
+LOCAL_NDK_STL_VARIANT := c++_static # LLVM libc++
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/jni/GifTranscoder.cpp b/jni/GifTranscoder.cpp
new file mode 100644
index 0000000..44fa30c
--- /dev/null
+++ b/jni/GifTranscoder.cpp
@@ -0,0 +1,573 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include "GifTranscoder.h"
+
+#define SQUARE(a) (a)*(a)
+
+// GIF does not support partial transparency, so our alpha channels are always 0x0 or 0xff.
+static const ColorARGB TRANSPARENT = 0x0;
+
+#define ALPHA(color) (((color) >> 24) & 0xff)
+#define RED(color) (((color) >> 16) & 0xff)
+#define GREEN(color) (((color) >> 8) & 0xff)
+#define BLUE(color) (((color) >> 0) & 0xff)
+
+#define MAKE_COLOR_ARGB(a, r, g, b) \
+ ((a) << 24 | (r) << 16 | (g) << 8 | (b))
+
+#define MAX_COLOR_DISTANCE 255 * 255 * 255
+
+#define TAG "GifTranscoder.cpp"
+#define LOGD_ENABLED 0
+#if LOGD_ENABLED
+#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__))
+#else
+#define LOGD(...) ((void)0)
+#endif
+#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__))
+#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__))
+#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__))
+
+// This macro expects the assertion to pass, but logs a FATAL if not.
+#define ASSERT(cond, ...) \
+ ( (__builtin_expect((cond) == 0, 0)) \
+ ? ((void)__android_log_assert(#cond, TAG, ## __VA_ARGS__)) \
+ : (void) 0 )
+#define ASSERT_ENABLED 1
+
+namespace {
+
+// Current time in milliseconds since Unix epoch.
+double now(void) {
+ struct timespec res;
+ clock_gettime(CLOCK_REALTIME, &res);
+ return 1000.0 * res.tv_sec + (double) res.tv_nsec / 1e6;
+}
+
+// Gets the pixel at position (x,y) from a buffer that uses row-major order to store an image with
+// the specified width.
+template
+T* getPixel(T* buffer, int width, int x, int y) {
+ return buffer + (y * width + x);
+}
+
+} // namespace
+
+int GifTranscoder::transcode(const char* pathIn, const char* pathOut) {
+ int error;
+ double t0;
+ GifFileType* gifIn;
+ GifFileType* gifOut;
+
+ // Automatically closes the GIF files when this method returns
+ GifFilesCloser closer;
+
+ gifIn = DGifOpenFileName(pathIn, &error);
+ if (gifIn) {
+ closer.setGifIn(gifIn);
+ LOGD("Opened input GIF: %s", pathIn);
+ } else {
+ LOGE("Could not open input GIF: %s, error = %d", pathIn, error);
+ return GIF_ERROR;
+ }
+
+ gifOut = EGifOpenFileName(pathOut, false, &error);
+ if (gifOut) {
+ closer.setGifOut(gifOut);
+ LOGD("Opened output GIF: %s", pathOut);
+ } else {
+ LOGE("Could not open output GIF: %s, error = %d", pathOut, error);
+ return GIF_ERROR;
+ }
+
+ t0 = now();
+ if (resizeBoxFilter(gifIn, gifOut)) {
+ LOGD("Resized GIF in %.2f ms", now() - t0);
+ } else {
+ LOGE("Could not resize GIF");
+ return GIF_ERROR;
+ }
+
+ return GIF_OK;
+}
+
+bool GifTranscoder::resizeBoxFilter(GifFileType* gifIn, GifFileType* gifOut) {
+ ASSERT(gifIn != NULL, "gifIn cannot be NULL");
+ ASSERT(gifOut != NULL, "gifOut cannot be NULL");
+
+ if (gifIn->SWidth < 0 || gifIn->SHeight < 0) {
+ LOGE("Input GIF has invalid size: %d x %d", gifIn->SWidth, gifIn->SHeight);
+ return false;
+ }
+
+ // Output GIF will be 50% the size of the original.
+ if (EGifPutScreenDesc(gifOut,
+ gifIn->SWidth / 2,
+ gifIn->SHeight / 2,
+ gifIn->SColorResolution,
+ gifIn->SBackGroundColor,
+ gifIn->SColorMap) == GIF_ERROR) {
+ LOGE("Could not write screen descriptor");
+ return false;
+ }
+ LOGD("Wrote screen descriptor");
+
+ // Index of the current image.
+ int imageIndex = 0;
+
+ // Transparent color of the current image.
+ int transparentColor = NO_TRANSPARENT_COLOR;
+
+ // Buffer for reading raw images from the input GIF.
+ std::vector srcBuffer(gifIn->SWidth * gifIn->SHeight);
+
+ // Buffer for rendering images from the input GIF.
+ std::unique_ptr renderBuffer(new ColorARGB[gifIn->SWidth * gifIn->SHeight]);
+
+ // Buffer for writing new images to output GIF (one row at a time).
+ std::unique_ptr dstRowBuffer(new GifByteType[gifOut->SWidth]);
+
+ // Many GIFs use DISPOSE_DO_NOT to make images draw on top of previous images. They can also
+ // use DISPOSE_BACKGROUND to clear the last image region before drawing the next one. We need
+ // to keep track of the disposal mode as we go along to properly render the GIF.
+ int disposalMode = DISPOSAL_UNSPECIFIED;
+ int prevImageDisposalMode = DISPOSAL_UNSPECIFIED;
+ GifImageDesc prevImageDimens;
+
+ // Background color (applies to entire GIF).
+ ColorARGB bgColor = TRANSPARENT;
+
+ GifRecordType recordType;
+ do {
+ if (DGifGetRecordType(gifIn, &recordType) == GIF_ERROR) {
+ LOGE("Could not get record type");
+ return false;
+ }
+ LOGD("Read record type: %d", recordType);
+ switch (recordType) {
+ case IMAGE_DESC_RECORD_TYPE: {
+ if (DGifGetImageDesc(gifIn) == GIF_ERROR) {
+ LOGE("Could not read image descriptor (%d)", imageIndex);
+ return false;
+ }
+
+ // Sanity-check the current image position.
+ if (gifIn->Image.Left < 0 ||
+ gifIn->Image.Top < 0 ||
+ gifIn->Image.Left + gifIn->Image.Width > gifIn->SWidth ||
+ gifIn->Image.Top + gifIn->Image.Height > gifIn->SHeight) {
+ LOGE("GIF image extends beyond logical screen");
+ return false;
+ }
+
+ // Write the new image descriptor.
+ if (EGifPutImageDesc(gifOut,
+ 0, // Left
+ 0, // Top
+ gifOut->SWidth,
+ gifOut->SHeight,
+ false, // Interlace
+ gifIn->Image.ColorMap) == GIF_ERROR) {
+ LOGE("Could not write image descriptor (%d)", imageIndex);
+ return false;
+ }
+
+ // Read the image from the input GIF. The buffer is already initialized to the
+ // size of the GIF, which is usually equal to the size of all the images inside it.
+ // If not, the call to resize below ensures that the buffer is the right size.
+ srcBuffer.resize(gifIn->Image.Width * gifIn->Image.Height);
+ if (readImage(gifIn, srcBuffer.data()) == false) {
+ LOGE("Could not read image data (%d)", imageIndex);
+ return false;
+ }
+ LOGD("Read image data (%d)", imageIndex);
+ // Render the image from the input GIF.
+ if (renderImage(gifIn,
+ srcBuffer.data(),
+ imageIndex,
+ transparentColor,
+ renderBuffer.get(),
+ bgColor,
+ prevImageDimens,
+ prevImageDisposalMode) == false) {
+ LOGE("Could not render %d", imageIndex);
+ return false;
+ }
+ LOGD("Rendered image (%d)", imageIndex);
+
+ // Generate the image in the output GIF.
+ for (int y = 0; y < gifOut->SHeight; y++) {
+ for (int x = 0; x < gifOut->SWidth; x++) {
+ const GifByteType dstColorIndex = computeNewColorIndex(
+ gifIn, transparentColor, renderBuffer.get(), x, y);
+ *(dstRowBuffer.get() + x) = dstColorIndex;
+ }
+ if (EGifPutLine(gifOut, dstRowBuffer.get(), gifOut->SWidth) == GIF_ERROR) {
+ LOGE("Could not write raster data (%d)", imageIndex);
+ return false;
+ }
+ }
+ LOGD("Wrote raster data (%d)", imageIndex);
+
+ // Save the disposal mode for rendering the next image.
+ // We only support DISPOSE_DO_NOT and DISPOSE_BACKGROUND.
+ prevImageDisposalMode = disposalMode;
+ if (prevImageDisposalMode == DISPOSAL_UNSPECIFIED) {
+ prevImageDisposalMode = DISPOSE_DO_NOT;
+ } else if (prevImageDisposalMode == DISPOSE_PREVIOUS) {
+ prevImageDisposalMode = DISPOSE_BACKGROUND;
+ }
+ if (prevImageDisposalMode == DISPOSE_BACKGROUND) {
+ prevImageDimens.Left = gifIn->Image.Left;
+ prevImageDimens.Top = gifIn->Image.Top;
+ prevImageDimens.Width = gifIn->Image.Width;
+ prevImageDimens.Height = gifIn->Image.Height;
+ }
+
+ if (gifOut->Image.ColorMap) {
+ GifFreeMapObject(gifOut->Image.ColorMap);
+ gifOut->Image.ColorMap = NULL;
+ }
+
+ imageIndex++;
+ } break;
+ case EXTENSION_RECORD_TYPE: {
+ int extCode;
+ GifByteType* ext;
+ if (DGifGetExtension(gifIn, &extCode, &ext) == GIF_ERROR) {
+ LOGE("Could not read extension block");
+ return false;
+ }
+ LOGD("Read extension block, code: %d", extCode);
+ if (extCode == GRAPHICS_EXT_FUNC_CODE) {
+ GraphicsControlBlock gcb;
+ if (DGifExtensionToGCB(ext[0], ext + 1, &gcb) == GIF_ERROR) {
+ LOGE("Could not interpret GCB extension");
+ return false;
+ }
+ transparentColor = gcb.TransparentColor;
+
+ // This logic for setting the background color based on the first GCB
+ // doesn't quite match the GIF spec, but empirically it seems to work and it
+ // matches what libframesequence (Rastermill) does.
+ if (imageIndex == 0 && gifIn->SColorMap) {
+ if (gcb.TransparentColor == NO_TRANSPARENT_COLOR) {
+ GifColorType bgColorIndex =
+ gifIn->SColorMap->Colors[gifIn->SBackGroundColor];
+ bgColor = gifColorToColorARGB(bgColorIndex);
+ LOGD("Set background color based on first GCB");
+ }
+ }
+
+ // Record the original disposal mode and then update it.
+ disposalMode = gcb.DisposalMode;
+ gcb.DisposalMode = DISPOSE_BACKGROUND;
+ EGifGCBToExtension(&gcb, ext + 1);
+ }
+ if (EGifPutExtensionLeader(gifOut, extCode) == GIF_ERROR) {
+ LOGE("Could not write extension leader");
+ return false;
+ }
+ if (EGifPutExtensionBlock(gifOut, ext[0], ext + 1) == GIF_ERROR) {
+ LOGE("Could not write extension block");
+ return false;
+ }
+ LOGD("Wrote extension block");
+ while (ext != NULL) {
+ if (DGifGetExtensionNext(gifIn, &ext) == GIF_ERROR) {
+ LOGE("Could not read extension continuation");
+ return false;
+ }
+ if (ext != NULL) {
+ LOGD("Read extension continuation");
+ if (EGifPutExtensionBlock(gifOut, ext[0], ext + 1) == GIF_ERROR) {
+ LOGE("Could not write extension continuation");
+ return false;
+ }
+ LOGD("Wrote extension continuation");
+ }
+ }
+ if (EGifPutExtensionTrailer(gifOut) == GIF_ERROR) {
+ LOGE("Could not write extension trailer");
+ return false;
+ }
+ } break;
+ }
+
+ } while (recordType != TERMINATE_RECORD_TYPE);
+ LOGD("No more records");
+
+ return true;
+}
+
+bool GifTranscoder::readImage(GifFileType* gifIn, GifByteType* rasterBits) {
+ if (gifIn->Image.Interlace) {
+ int interlacedOffset[] = { 0, 4, 2, 1 };
+ int interlacedJumps[] = { 8, 8, 4, 2 };
+
+ // Need to perform 4 passes on the image
+ for (int i = 0; i < 4; i++) {
+ for (int j = interlacedOffset[i]; j < gifIn->Image.Height; j += interlacedJumps[i]) {
+ if (DGifGetLine(gifIn,
+ rasterBits + j * gifIn->Image.Width,
+ gifIn->Image.Width) == GIF_ERROR) {
+ LOGE("Could not read interlaced raster data");
+ return false;
+ }
+ }
+ }
+ } else {
+ if (DGifGetLine(gifIn, rasterBits, gifIn->Image.Width * gifIn->Image.Height) == GIF_ERROR) {
+ LOGE("Could not read raster data");
+ return false;
+ }
+ }
+ return true;
+}
+
+bool GifTranscoder::renderImage(GifFileType* gifIn,
+ GifByteType* rasterBits,
+ int imageIndex,
+ int transparentColorIndex,
+ ColorARGB* renderBuffer,
+ ColorARGB bgColor,
+ GifImageDesc prevImageDimens,
+ int prevImageDisposalMode) {
+ ASSERT(imageIndex < gifIn->ImageCount,
+ "Image index %d is out of bounds (count=%d)", imageIndex, gifIn->ImageCount);
+
+ ColorMapObject* colorMap = getColorMap(gifIn);
+ if (colorMap == NULL) {
+ LOGE("No GIF color map found");
+ return false;
+ }
+
+ // Clear all or part of the background, before drawing the first image and maybe before drawing
+ // subsequent images (depending on the DisposalMode).
+ if (imageIndex == 0) {
+ fillRect(renderBuffer, gifIn->SWidth, gifIn->SHeight,
+ 0, 0, gifIn->SWidth, gifIn->SHeight, bgColor);
+ } else if (prevImageDisposalMode == DISPOSE_BACKGROUND) {
+ fillRect(renderBuffer, gifIn->SWidth, gifIn->SHeight,
+ prevImageDimens.Left, prevImageDimens.Top,
+ prevImageDimens.Width, prevImageDimens.Height, TRANSPARENT);
+ }
+
+ // Paint this image onto the canvas
+ for (int y = 0; y < gifIn->Image.Height; y++) {
+ for (int x = 0; x < gifIn->Image.Width; x++) {
+ GifByteType colorIndex = *getPixel(rasterBits, gifIn->Image.Width, x, y);
+
+ // This image may be smaller than the GIF's "logical screen"
+ int renderX = x + gifIn->Image.Left;
+ int renderY = y + gifIn->Image.Top;
+
+ // Skip drawing transparent pixels if this image renders on top of the last one
+ if (imageIndex > 0 && prevImageDisposalMode == DISPOSE_DO_NOT &&
+ colorIndex == transparentColorIndex) {
+ continue;
+ }
+
+ ColorARGB* renderPixel = getPixel(renderBuffer, gifIn->SWidth, renderX, renderY);
+ *renderPixel = getColorARGB(colorMap, transparentColorIndex, colorIndex);
+ }
+ }
+ return true;
+}
+
+void GifTranscoder::fillRect(ColorARGB* renderBuffer,
+ int imageWidth,
+ int imageHeight,
+ int left,
+ int top,
+ int width,
+ int height,
+ ColorARGB color) {
+ ASSERT(left + width <= imageWidth, "Rectangle is outside image bounds");
+ ASSERT(top + height <= imageHeight, "Rectangle is outside image bounds");
+
+ for (int y = 0; y < height; y++) {
+ for (int x = 0; x < width; x++) {
+ ColorARGB* renderPixel = getPixel(renderBuffer, imageWidth, x + left, y + top);
+ *renderPixel = color;
+ }
+ }
+}
+
+GifByteType GifTranscoder::computeNewColorIndex(GifFileType* gifIn,
+ int transparentColorIndex,
+ ColorARGB* renderBuffer,
+ int x,
+ int y) {
+ ColorMapObject* colorMap = getColorMap(gifIn);
+
+ // Compute the average color of 4 adjacent pixels from the input image.
+ ColorARGB c1 = *getPixel(renderBuffer, gifIn->SWidth, x * 2, y * 2);
+ ColorARGB c2 = *getPixel(renderBuffer, gifIn->SWidth, x * 2 + 1, y * 2);
+ ColorARGB c3 = *getPixel(renderBuffer, gifIn->SWidth, x * 2, y * 2 + 1);
+ ColorARGB c4 = *getPixel(renderBuffer, gifIn->SWidth, x * 2 + 1, y * 2 + 1);
+ ColorARGB avgColor = computeAverage(c1, c2, c3, c4);
+
+ // Search the color map for the best match.
+ return findBestColor(colorMap, transparentColorIndex, avgColor);
+}
+
+ColorARGB GifTranscoder::computeAverage(ColorARGB c1, ColorARGB c2, ColorARGB c3, ColorARGB c4) {
+ char avgAlpha = (char)(((int) ALPHA(c1) + (int) ALPHA(c2) +
+ (int) ALPHA(c3) + (int) ALPHA(c4)) / 4);
+ char avgRed = (char)(((int) RED(c1) + (int) RED(c2) +
+ (int) RED(c3) + (int) RED(c4)) / 4);
+ char avgGreen = (char)(((int) GREEN(c1) + (int) GREEN(c2) +
+ (int) GREEN(c3) + (int) GREEN(c4)) / 4);
+ char avgBlue = (char)(((int) BLUE(c1) + (int) BLUE(c2) +
+ (int) BLUE(c3) + (int) BLUE(c4)) / 4);
+ return MAKE_COLOR_ARGB(avgAlpha, avgRed, avgGreen, avgBlue);
+}
+
+GifByteType GifTranscoder::findBestColor(ColorMapObject* colorMap, int transparentColorIndex,
+ ColorARGB targetColor) {
+ // Return the transparent color if the average alpha is zero.
+ char alpha = ALPHA(targetColor);
+ if (alpha == 0 && transparentColorIndex != NO_TRANSPARENT_COLOR) {
+ return transparentColorIndex;
+ }
+
+ GifByteType closestColorIndex = 0;
+ int closestColorDistance = MAX_COLOR_DISTANCE;
+ for (int i = 0; i < colorMap->ColorCount; i++) {
+ // Skip the transparent color (we've already eliminated that option).
+ if (i == transparentColorIndex) {
+ continue;
+ }
+ ColorARGB indexedColor = gifColorToColorARGB(colorMap->Colors[i]);
+ int distance = computeDistance(targetColor, indexedColor);
+ if (distance < closestColorDistance) {
+ closestColorIndex = i;
+ closestColorDistance = distance;
+ }
+ }
+ return closestColorIndex;
+}
+
+int GifTranscoder::computeDistance(ColorARGB c1, ColorARGB c2) {
+ return SQUARE(RED(c1) - RED(c2)) +
+ SQUARE(GREEN(c1) - GREEN(c2)) +
+ SQUARE(BLUE(c1) - BLUE(c2));
+}
+
+ColorMapObject* GifTranscoder::getColorMap(GifFileType* gifIn) {
+ if (gifIn->Image.ColorMap) {
+ return gifIn->Image.ColorMap;
+ }
+ return gifIn->SColorMap;
+}
+
+ColorARGB GifTranscoder::getColorARGB(ColorMapObject* colorMap, int transparentColorIndex,
+ GifByteType colorIndex) {
+ if (colorIndex == transparentColorIndex) {
+ return TRANSPARENT;
+ }
+ return gifColorToColorARGB(colorMap->Colors[colorIndex]);
+}
+
+ColorARGB GifTranscoder::gifColorToColorARGB(const GifColorType& color) {
+ return MAKE_COLOR_ARGB(0xff, color.Red, color.Green, color.Blue);
+}
+
+GifFilesCloser::~GifFilesCloser() {
+ if (mGifIn) {
+ DGifCloseFile(mGifIn);
+ mGifIn = NULL;
+ }
+ if (mGifOut) {
+ EGifCloseFile(mGifOut);
+ mGifOut = NULL;
+ }
+}
+
+void GifFilesCloser::setGifIn(GifFileType* gifIn) {
+ ASSERT(mGifIn == NULL, "mGifIn is already set");
+ mGifIn = gifIn;
+}
+
+void GifFilesCloser::releaseGifIn() {
+ ASSERT(mGifIn != NULL, "mGifIn is already NULL");
+ mGifIn = NULL;
+}
+
+void GifFilesCloser::setGifOut(GifFileType* gifOut) {
+ ASSERT(mGifOut == NULL, "mGifOut is already set");
+ mGifOut = gifOut;
+}
+
+void GifFilesCloser::releaseGifOut() {
+ ASSERT(mGifOut != NULL, "mGifOut is already NULL");
+ mGifOut = NULL;
+}
+
+// JNI stuff
+
+jboolean transcode(JNIEnv* env, jobject clazz, jstring filePath, jstring outFilePath) {
+ const char* pathIn = env->GetStringUTFChars(filePath, JNI_FALSE);
+ const char* pathOut = env->GetStringUTFChars(outFilePath, JNI_FALSE);
+
+ GifTranscoder transcoder;
+ int gifCode = transcoder.transcode(pathIn, pathOut);
+
+ env->ReleaseStringUTFChars(filePath, pathIn);
+ env->ReleaseStringUTFChars(outFilePath, pathOut);
+
+ return (gifCode == GIF_OK);
+}
+
+const char *kClassPathName = "com/android/messaging/util/GifTranscoder";
+
+JNINativeMethod kMethods[] = {
+ { "transcodeInternal", "(Ljava/lang/String;Ljava/lang/String;)Z", (void*)transcode },
+};
+
+int registerNativeMethods(JNIEnv* env, const char* className,
+ JNINativeMethod* gMethods, int numMethods) {
+ jclass clazz = env->FindClass(className);
+ if (clazz == NULL) {
+ return JNI_FALSE;
+ }
+ if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
+ return JNI_FALSE;
+ }
+ return JNI_TRUE;
+}
+
+jint JNI_OnLoad(JavaVM* vm, void* reserved) {
+ JNIEnv* env;
+ if (vm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_6) != JNI_OK) {
+ return -1;
+ }
+ if (!registerNativeMethods(env, kClassPathName,
+ kMethods, sizeof(kMethods) / sizeof(kMethods[0]))) {
+ return -1;
+ }
+ return JNI_VERSION_1_6;
+}
diff --git a/jni/GifTranscoder.h b/jni/GifTranscoder.h
new file mode 100644
index 0000000..39ecc24
--- /dev/null
+++ b/jni/GifTranscoder.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef GIF_TRANSCODER_H
+#define GIF_TRANSCODER_H
+
+#include
+
+#include "gif_lib.h"
+
+// 24-bit color with alpha, stored in order: A, R, G, B.
+// The internal GIF render buffer stores pixels using this format.
+typedef uint32_t ColorARGB;
+
+// Compresses a GIF (probably animated) so it can be sent via MMS, which generally has a 1 MB limit
+// on attachments. GIF image data is already compressed (LZW), so to achieve further reduction in
+// file size, we reduce the image dimensions.
+//
+// Helpful GIF references:
+// GIF89A spec: http://www.w3.org/Graphics/GIF/spec-gif89a.txt
+// What's in a GIF: http://giflib.sourceforge.net/whatsinagif/index.html
+//
+class GifTranscoder {
+public:
+ GifTranscoder() {}
+ ~GifTranscoder() {}
+
+ // Resizes a GIF's width and height to 50% of their original dimensions. The new file is
+ // written to pathOut.
+ //
+ // The image is resized using a box filter, which averages the colors in each 2x2 box of pixels
+ // in the source to generate the color of the pixel in the destination.
+ //
+ // Returns GIF_OK (1) on success, or GIF_ERROR (0) on failure.
+ int transcode(const char* pathIn, const char* pathOut);
+
+private:
+ // Implementation of the box filter algorithm.
+ static bool resizeBoxFilter(GifFileType* gifIn, GifFileType* gifOut);
+
+ // Reads the raster data for the current image of the GIF.
+ static bool readImage(GifFileType* gifIn, GifByteType* rasterBits);
+
+ // Renders the current image of the GIF into the supplied render buffer.
+ static bool renderImage(GifFileType* gifIn,
+ GifByteType* rasterBits,
+ int imageIndex,
+ int transparentColorIndex,
+ ColorARGB* renderBuffer,
+ ColorARGB bgColor,
+ GifImageDesc prevImageDimens,
+ int prevImageDisposalMode);
+
+ // Fills a rectangle in the buffer with a solid color.
+ static void fillRect(ColorARGB* renderBuffer,
+ int imageWidth,
+ int imageHeight,
+ int left,
+ int top,
+ int width,
+ int height,
+ ColorARGB color);
+
+ // Computes the color for the pixel (x,y) in the current image in the output GIF.
+ static GifByteType computeNewColorIndex(GifFileType* gifIn,
+ int transparentColorIndex,
+ ColorARGB* renderBuffer,
+ int x,
+ int y);
+
+ // Computes the average color (by averaging the per-channel (ARGB) values).
+ static ColorARGB computeAverage(ColorARGB c1, ColorARGB c2, ColorARGB c3, ColorARGB c4);
+
+ // Searches a color map for the color closest (Euclidean distance) to the target color.
+ static GifByteType findBestColor(ColorMapObject* colorMap, int transparentColorIndex,
+ ColorARGB targetColor);
+
+ // Computes distance (squared) between 2 colors, considering each channel a separate dimension.
+ static int computeDistance(ColorARGB c1, ColorARGB c2);
+
+ // Returns the local color map of the current image (if any), or else the global color map.
+ static ColorMapObject* getColorMap(GifFileType* gifIn);
+
+ // Returns an indexed color from the color map.
+ static ColorARGB getColorARGB(ColorMapObject* colorMap, int transparentColorIndex,
+ GifByteType colorIndex);
+
+ // Converts a 24-bit GIF color (RGB) to a 32-bit ARGB color.
+ static ColorARGB gifColorToColorARGB(const GifColorType& color);
+};
+
+// Wrapper class that automatically closes the GIF files when the wrapper goes out of scope.
+class GifFilesCloser {
+public:
+ GifFilesCloser() {}
+ ~GifFilesCloser();
+
+ void setGifIn(GifFileType* gifIn);
+ void releaseGifIn();
+
+ void setGifOut(GifFileType* gifOut);
+ void releaseGifOut();
+
+private:
+ GifFileType* mGifIn = NULL;
+ GifFileType* mGifOut = NULL;
+};
+
+#endif // GIF_TRANSCODER_H
diff --git a/proguard-release.flags b/proguard-release.flags
new file mode 100644
index 0000000..36b6720
--- /dev/null
+++ b/proguard-release.flags
@@ -0,0 +1,24 @@
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+-assumenosideeffects public class com.android.messaging.util.Trace {
+ public void beginSection(...);
+ public void endSection(...);
+}
+-assumenosideeffects public class com.android.messaging.util.Assert {
+ private void setIfEngBuild();
+}
+-assumenosideeffects public class com.android.messaging.util.DebugUtils {
+ public void logCurrentMethod(...);
+}
diff --git a/proguard-test.flags b/proguard-test.flags
new file mode 100755
index 0000000..46e569f
--- /dev/null
+++ b/proguard-test.flags
@@ -0,0 +1,41 @@
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# These flags are in addition to the one in proguard.flags, which is included by the build
+# directives in Android.mk.
+
+-dontobfuscate
+-dontoptimize
+
+
+
+# FLAG(dnotario): Until we rationalize how to handle tests (extensive unit tests will want similar
+# settings to these, but maybe we want to require VisibleForTesting attribute), just expose all
+# non-private methods. This means we cannot run tests on user builds for the moment.
+-keep class com.android.messaging.* {
+ !private *;
+}
+
+-keep class com.android.messaging.*.* {
+ !private *;
+}
+
+-keep class com.android.messaging.*.*.* {
+ !private *;
+}
+
+# Keep the classes needed by emma
+-keep class com.vladium.** { *; }
+
+# End of Test Rules
diff --git a/proguard.flags b/proguard.flags
new file mode 100644
index 0000000..759f2d4
--- /dev/null
+++ b/proguard.flags
@@ -0,0 +1,58 @@
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Keep enough data for stack traces
+-renamesourcefileattribute SourceFile
+-keepattributes SourceFile,LineNumberTable,*Annotation*
+
+# Keep classes and methods that have the guava @VisibleForTesting annotation
+-keep @com.google.common.annotations.VisibleForTesting class *
+-keepclassmembers class * {
+ @com.google.common.annotations.VisibleForTesting *;
+}
+
+# Keep methods that have the @VisibleForAnimation annotation
+-keep @interface com.android.messaging.annotation.VisibleForAnimation
+-keepclassmembers class * {
+ @com.android.messaging.annotation.VisibleForAnimation *;
+}
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.support.v4.app.Fragment
+-keep public class com.android.vcard.* { *; }
+
+-keep class android.support.v4.* { *; }
+-keep class android.support.v4.*.* { *; }
+-keep class android.support.v7.* { *; }
+-keep class android.support.v7.*.* { *; }
+
+# Keep rastermill classes that need to be accessed from native code (JNI)
+-keep class android.support.rastermill.** { *; }
+
+# Preserve the name of the getCaller method so it can find itself in the stack trace it generates
+-keepclassmembers public class com.android.messaging.util.DebugUtils {
+ public static java.lang.StackTraceElement getCaller(...);
+}
+
+# Keep the static fields of referenced inner classes of auto-generated R classes, in case we
+# access those fields by reflection (e.g. EmojiMarkup)
+-keepclassmembers class **.R$* {
+ public static ;
+}
diff --git a/res/animator/fab_anim.xml b/res/animator/fab_anim.xml
new file mode 100644
index 0000000..e06416e
--- /dev/null
+++ b/res/animator/fab_anim.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/color/tab_text_color.xml b/res/color/tab_text_color.xml
new file mode 100644
index 0000000..dec20dd
--- /dev/null
+++ b/res/color/tab_text_color.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png b/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png
new file mode 100644
index 0000000..e5f8942
Binary files /dev/null and b/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png b/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png
new file mode 100644
index 0000000..11ef458
Binary files /dev/null and b/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png b/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png
new file mode 100644
index 0000000..eb948c1
Binary files /dev/null and b/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png b/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png
new file mode 100644
index 0000000..b90188e
Binary files /dev/null and b/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png differ
diff --git a/res/drawable-hdpi/cab_bg.9.png b/res/drawable-hdpi/cab_bg.9.png
new file mode 100644
index 0000000..1adfbc6
Binary files /dev/null and b/res/drawable-hdpi/cab_bg.9.png differ
diff --git a/res/drawable-hdpi/contact_popup_background.9.png b/res/drawable-hdpi/contact_popup_background.9.png
new file mode 100644
index 0000000..060ffad
Binary files /dev/null and b/res/drawable-hdpi/contact_popup_background.9.png differ
diff --git a/res/drawable-hdpi/fab_new_message_static_shadow.png b/res/drawable-hdpi/fab_new_message_static_shadow.png
new file mode 100644
index 0000000..22e1764
Binary files /dev/null and b/res/drawable-hdpi/fab_new_message_static_shadow.png differ
diff --git a/res/drawable-hdpi/ic_add_gray.png b/res/drawable-hdpi/ic_add_gray.png
new file mode 100644
index 0000000..dbbd78d
Binary files /dev/null and b/res/drawable-hdpi/ic_add_gray.png differ
diff --git a/res/drawable-hdpi/ic_add_white.png b/res/drawable-hdpi/ic_add_white.png
new file mode 100644
index 0000000..b52309f
Binary files /dev/null and b/res/drawable-hdpi/ic_add_white.png differ
diff --git a/res/drawable-hdpi/ic_archive_small_dark.png b/res/drawable-hdpi/ic_archive_small_dark.png
new file mode 100644
index 0000000..b679ebb
Binary files /dev/null and b/res/drawable-hdpi/ic_archive_small_dark.png differ
diff --git a/res/drawable-hdpi/ic_archive_small_light.png b/res/drawable-hdpi/ic_archive_small_light.png
new file mode 100644
index 0000000..783126c
Binary files /dev/null and b/res/drawable-hdpi/ic_archive_small_light.png differ
diff --git a/res/drawable-hdpi/ic_archive_undo_small_dark.png b/res/drawable-hdpi/ic_archive_undo_small_dark.png
new file mode 100644
index 0000000..505988d
Binary files /dev/null and b/res/drawable-hdpi/ic_archive_undo_small_dark.png differ
diff --git a/res/drawable-hdpi/ic_archive_undo_small_light.png b/res/drawable-hdpi/ic_archive_undo_small_light.png
new file mode 100644
index 0000000..2c91e44
Binary files /dev/null and b/res/drawable-hdpi/ic_archive_undo_small_light.png differ
diff --git a/res/drawable-hdpi/ic_arrow_back_dark.png b/res/drawable-hdpi/ic_arrow_back_dark.png
new file mode 100644
index 0000000..4e5dc89
Binary files /dev/null and b/res/drawable-hdpi/ic_arrow_back_dark.png differ
diff --git a/res/drawable-hdpi/ic_arrow_back_light.png b/res/drawable-hdpi/ic_arrow_back_light.png
new file mode 100644
index 0000000..fa1f67b
Binary files /dev/null and b/res/drawable-hdpi/ic_arrow_back_light.png differ
diff --git a/res/drawable-hdpi/ic_attachment_dark.png b/res/drawable-hdpi/ic_attachment_dark.png
new file mode 100644
index 0000000..10a1028
Binary files /dev/null and b/res/drawable-hdpi/ic_attachment_dark.png differ
diff --git a/res/drawable-hdpi/ic_audio_light.png b/res/drawable-hdpi/ic_audio_light.png
new file mode 100644
index 0000000..9605a5c
Binary files /dev/null and b/res/drawable-hdpi/ic_audio_light.png differ
diff --git a/res/drawable-hdpi/ic_audio_pause.png b/res/drawable-hdpi/ic_audio_pause.png
new file mode 100644
index 0000000..8797ad0
Binary files /dev/null and b/res/drawable-hdpi/ic_audio_pause.png differ
diff --git a/res/drawable-hdpi/ic_audio_play.png b/res/drawable-hdpi/ic_audio_play.png
new file mode 100644
index 0000000..552dc9c
Binary files /dev/null and b/res/drawable-hdpi/ic_audio_play.png differ
diff --git a/res/drawable-hdpi/ic_camera_front_light.png b/res/drawable-hdpi/ic_camera_front_light.png
new file mode 100644
index 0000000..c0ddaf6
Binary files /dev/null and b/res/drawable-hdpi/ic_camera_front_light.png differ
diff --git a/res/drawable-hdpi/ic_camera_light.png b/res/drawable-hdpi/ic_camera_light.png
new file mode 100644
index 0000000..d0406e4
Binary files /dev/null and b/res/drawable-hdpi/ic_camera_light.png differ
diff --git a/res/drawable-hdpi/ic_camera_rear_light.png b/res/drawable-hdpi/ic_camera_rear_light.png
new file mode 100644
index 0000000..6624c55
Binary files /dev/null and b/res/drawable-hdpi/ic_camera_rear_light.png differ
diff --git a/res/drawable-hdpi/ic_cancel_small_dark.png b/res/drawable-hdpi/ic_cancel_small_dark.png
new file mode 100644
index 0000000..5de5cfb
Binary files /dev/null and b/res/drawable-hdpi/ic_cancel_small_dark.png differ
diff --git a/res/drawable-hdpi/ic_cancel_small_light.png b/res/drawable-hdpi/ic_cancel_small_light.png
new file mode 100644
index 0000000..05c6b19
Binary files /dev/null and b/res/drawable-hdpi/ic_cancel_small_light.png differ
diff --git a/res/drawable-hdpi/ic_checkbox_blank_light.png b/res/drawable-hdpi/ic_checkbox_blank_light.png
new file mode 100644
index 0000000..879a770
Binary files /dev/null and b/res/drawable-hdpi/ic_checkbox_blank_light.png differ
diff --git a/res/drawable-hdpi/ic_checkbox_light.png b/res/drawable-hdpi/ic_checkbox_light.png
new file mode 100644
index 0000000..7aa9f5f
Binary files /dev/null and b/res/drawable-hdpi/ic_checkbox_light.png differ
diff --git a/res/drawable-hdpi/ic_checkbox_outline_light.png b/res/drawable-hdpi/ic_checkbox_outline_light.png
new file mode 100644
index 0000000..44ed34e
Binary files /dev/null and b/res/drawable-hdpi/ic_checkbox_outline_light.png differ
diff --git a/res/drawable-hdpi/ic_checkmark_circle_blue.png b/res/drawable-hdpi/ic_checkmark_circle_blue.png
new file mode 100644
index 0000000..55f277e
Binary files /dev/null and b/res/drawable-hdpi/ic_checkmark_circle_blue.png differ
diff --git a/res/drawable-hdpi/ic_checkmark_large.png b/res/drawable-hdpi/ic_checkmark_large.png
new file mode 100644
index 0000000..b8ecc06
Binary files /dev/null and b/res/drawable-hdpi/ic_checkmark_large.png differ
diff --git a/res/drawable-hdpi/ic_checkmark_large_light.png b/res/drawable-hdpi/ic_checkmark_large_light.png
new file mode 100644
index 0000000..48bf283
Binary files /dev/null and b/res/drawable-hdpi/ic_checkmark_large_light.png differ
diff --git a/res/drawable-hdpi/ic_checkmark_small_blue.png b/res/drawable-hdpi/ic_checkmark_small_blue.png
new file mode 100644
index 0000000..8661489
Binary files /dev/null and b/res/drawable-hdpi/ic_checkmark_small_blue.png differ
diff --git a/res/drawable-hdpi/ic_checkmark_small_light.png b/res/drawable-hdpi/ic_checkmark_small_light.png
new file mode 100644
index 0000000..ae0bf6d
Binary files /dev/null and b/res/drawable-hdpi/ic_checkmark_small_light.png differ
diff --git a/res/drawable-hdpi/ic_color_lens.png b/res/drawable-hdpi/ic_color_lens.png
new file mode 100644
index 0000000..69a4287
Binary files /dev/null and b/res/drawable-hdpi/ic_color_lens.png differ
diff --git a/res/drawable-hdpi/ic_content_copy_dark.png b/res/drawable-hdpi/ic_content_copy_dark.png
new file mode 100644
index 0000000..22d2516
Binary files /dev/null and b/res/drawable-hdpi/ic_content_copy_dark.png differ
diff --git a/res/drawable-hdpi/ic_crying_hero.png b/res/drawable-hdpi/ic_crying_hero.png
new file mode 100644
index 0000000..804b4e6
Binary files /dev/null and b/res/drawable-hdpi/ic_crying_hero.png differ
diff --git a/res/drawable-hdpi/ic_delete_small_dark.png b/res/drawable-hdpi/ic_delete_small_dark.png
new file mode 100644
index 0000000..901f992
Binary files /dev/null and b/res/drawable-hdpi/ic_delete_small_dark.png differ
diff --git a/res/drawable-hdpi/ic_delete_small_light.png b/res/drawable-hdpi/ic_delete_small_light.png
new file mode 100644
index 0000000..d2ed6d3
Binary files /dev/null and b/res/drawable-hdpi/ic_delete_small_light.png differ
diff --git a/res/drawable-hdpi/ic_dnd_on_dark.png b/res/drawable-hdpi/ic_dnd_on_dark.png
new file mode 100644
index 0000000..181df02
Binary files /dev/null and b/res/drawable-hdpi/ic_dnd_on_dark.png differ
diff --git a/res/drawable-hdpi/ic_dnd_on_light.png b/res/drawable-hdpi/ic_dnd_on_light.png
new file mode 100644
index 0000000..cadf5b5
Binary files /dev/null and b/res/drawable-hdpi/ic_dnd_on_light.png differ
diff --git a/res/drawable-hdpi/ic_failed_light.png b/res/drawable-hdpi/ic_failed_light.png
new file mode 100644
index 0000000..3614fbe
Binary files /dev/null and b/res/drawable-hdpi/ic_failed_light.png differ
diff --git a/res/drawable-hdpi/ic_failed_status_red.png b/res/drawable-hdpi/ic_failed_status_red.png
new file mode 100644
index 0000000..aa2d138
Binary files /dev/null and b/res/drawable-hdpi/ic_failed_status_red.png differ
diff --git a/res/drawable-hdpi/ic_file_download_dark.png b/res/drawable-hdpi/ic_file_download_dark.png
new file mode 100644
index 0000000..028c85e
Binary files /dev/null and b/res/drawable-hdpi/ic_file_download_dark.png differ
diff --git a/res/drawable-hdpi/ic_file_download_light.png b/res/drawable-hdpi/ic_file_download_light.png
new file mode 100644
index 0000000..ffa5b82
Binary files /dev/null and b/res/drawable-hdpi/ic_file_download_light.png differ
diff --git a/res/drawable-hdpi/ic_forward_dark.png b/res/drawable-hdpi/ic_forward_dark.png
new file mode 100644
index 0000000..e8b718a
Binary files /dev/null and b/res/drawable-hdpi/ic_forward_dark.png differ
diff --git a/res/drawable-hdpi/ic_history_light.png b/res/drawable-hdpi/ic_history_light.png
new file mode 100644
index 0000000..4b512fe
Binary files /dev/null and b/res/drawable-hdpi/ic_history_light.png differ
diff --git a/res/drawable-hdpi/ic_image_light.png b/res/drawable-hdpi/ic_image_light.png
new file mode 100644
index 0000000..744f920
Binary files /dev/null and b/res/drawable-hdpi/ic_image_light.png differ
diff --git a/res/drawable-hdpi/ic_ime_dark.png b/res/drawable-hdpi/ic_ime_dark.png
new file mode 100644
index 0000000..a539d28
Binary files /dev/null and b/res/drawable-hdpi/ic_ime_dark.png differ
diff --git a/res/drawable-hdpi/ic_ime_light.png b/res/drawable-hdpi/ic_ime_light.png
new file mode 100644
index 0000000..da65039
Binary files /dev/null and b/res/drawable-hdpi/ic_ime_light.png differ
diff --git a/res/drawable-hdpi/ic_info_dark.png b/res/drawable-hdpi/ic_info_dark.png
new file mode 100644
index 0000000..1453228
Binary files /dev/null and b/res/drawable-hdpi/ic_info_dark.png differ
diff --git a/res/drawable-hdpi/ic_keyboard_arrow_left_light.png b/res/drawable-hdpi/ic_keyboard_arrow_left_light.png
new file mode 100644
index 0000000..50f280e
Binary files /dev/null and b/res/drawable-hdpi/ic_keyboard_arrow_left_light.png differ
diff --git a/res/drawable-hdpi/ic_keyboard_arrow_right_light.png b/res/drawable-hdpi/ic_keyboard_arrow_right_light.png
new file mode 100644
index 0000000..3e31c08
Binary files /dev/null and b/res/drawable-hdpi/ic_keyboard_arrow_right_light.png differ
diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..2c52f06
Binary files /dev/null and b/res/drawable-hdpi/ic_launcher.png differ
diff --git a/res/drawable-hdpi/ic_mp_audio_mic.png b/res/drawable-hdpi/ic_mp_audio_mic.png
new file mode 100644
index 0000000..9c005d6
Binary files /dev/null and b/res/drawable-hdpi/ic_mp_audio_mic.png differ
diff --git a/res/drawable-hdpi/ic_mp_camera_large_light.png b/res/drawable-hdpi/ic_mp_camera_large_light.png
new file mode 100644
index 0000000..721b760
Binary files /dev/null and b/res/drawable-hdpi/ic_mp_camera_large_light.png differ
diff --git a/res/drawable-hdpi/ic_mp_camera_small_light.png b/res/drawable-hdpi/ic_mp_camera_small_light.png
new file mode 100644
index 0000000..6e3b09b
Binary files /dev/null and b/res/drawable-hdpi/ic_mp_camera_small_light.png differ
diff --git a/res/drawable-hdpi/ic_mp_capture_stop_large_light.png b/res/drawable-hdpi/ic_mp_capture_stop_large_light.png
new file mode 100644
index 0000000..5e29fdd
Binary files /dev/null and b/res/drawable-hdpi/ic_mp_capture_stop_large_light.png differ
diff --git a/res/drawable-hdpi/ic_mp_full_screen_light.png b/res/drawable-hdpi/ic_mp_full_screen_light.png
new file mode 100644
index 0000000..9c69eb8
Binary files /dev/null and b/res/drawable-hdpi/ic_mp_full_screen_light.png differ
diff --git a/res/drawable-hdpi/ic_mp_video_large_light.png b/res/drawable-hdpi/ic_mp_video_large_light.png
new file mode 100644
index 0000000..d6db42c
Binary files /dev/null and b/res/drawable-hdpi/ic_mp_video_large_light.png differ
diff --git a/res/drawable-hdpi/ic_mp_video_small_light.png b/res/drawable-hdpi/ic_mp_video_small_light.png
new file mode 100644
index 0000000..9816af7
Binary files /dev/null and b/res/drawable-hdpi/ic_mp_video_small_light.png differ
diff --git a/res/drawable-hdpi/ic_notifications_off_dark.png b/res/drawable-hdpi/ic_notifications_off_dark.png
new file mode 100644
index 0000000..9bcdc62
Binary files /dev/null and b/res/drawable-hdpi/ic_notifications_off_dark.png differ
diff --git a/res/drawable-hdpi/ic_notifications_off_light.png b/res/drawable-hdpi/ic_notifications_off_light.png
new file mode 100644
index 0000000..433b6a9
Binary files /dev/null and b/res/drawable-hdpi/ic_notifications_off_light.png differ
diff --git a/res/drawable-hdpi/ic_notifications_off_small_light.png b/res/drawable-hdpi/ic_notifications_off_small_light.png
new file mode 100644
index 0000000..fbd0ad5
Binary files /dev/null and b/res/drawable-hdpi/ic_notifications_off_small_light.png differ
diff --git a/res/drawable-hdpi/ic_notifications_on_dark.png b/res/drawable-hdpi/ic_notifications_on_dark.png
new file mode 100644
index 0000000..21e48a5
Binary files /dev/null and b/res/drawable-hdpi/ic_notifications_on_dark.png differ
diff --git a/res/drawable-hdpi/ic_notifications_on_light.png b/res/drawable-hdpi/ic_notifications_on_light.png
new file mode 100644
index 0000000..6b39fec
Binary files /dev/null and b/res/drawable-hdpi/ic_notifications_on_light.png differ
diff --git a/res/drawable-hdpi/ic_numeric_dialpad.png b/res/drawable-hdpi/ic_numeric_dialpad.png
new file mode 100644
index 0000000..5460fd7
Binary files /dev/null and b/res/drawable-hdpi/ic_numeric_dialpad.png differ
diff --git a/res/drawable-hdpi/ic_oobe_conv_list.png b/res/drawable-hdpi/ic_oobe_conv_list.png
new file mode 100644
index 0000000..3b904ba
Binary files /dev/null and b/res/drawable-hdpi/ic_oobe_conv_list.png differ
diff --git a/res/drawable-hdpi/ic_oobe_freq_list.png b/res/drawable-hdpi/ic_oobe_freq_list.png
new file mode 100644
index 0000000..148a9ea
Binary files /dev/null and b/res/drawable-hdpi/ic_oobe_freq_list.png differ
diff --git a/res/drawable-hdpi/ic_open_in_new.png b/res/drawable-hdpi/ic_open_in_new.png
new file mode 100644
index 0000000..06e5f71
Binary files /dev/null and b/res/drawable-hdpi/ic_open_in_new.png differ
diff --git a/res/drawable-hdpi/ic_people_add_light.png b/res/drawable-hdpi/ic_people_add_light.png
new file mode 100644
index 0000000..c506e9a
Binary files /dev/null and b/res/drawable-hdpi/ic_people_add_light.png differ
diff --git a/res/drawable-hdpi/ic_person_add_blue.png b/res/drawable-hdpi/ic_person_add_blue.png
new file mode 100644
index 0000000..dfd2bc1
Binary files /dev/null and b/res/drawable-hdpi/ic_person_add_blue.png differ
diff --git a/res/drawable-hdpi/ic_person_add_dark.png b/res/drawable-hdpi/ic_person_add_dark.png
new file mode 100644
index 0000000..71ca2a0
Binary files /dev/null and b/res/drawable-hdpi/ic_person_add_dark.png differ
diff --git a/res/drawable-hdpi/ic_person_add_light.png b/res/drawable-hdpi/ic_person_add_light.png
new file mode 100644
index 0000000..bb8ad3e
Binary files /dev/null and b/res/drawable-hdpi/ic_person_add_light.png differ
diff --git a/res/drawable-hdpi/ic_person_light.png b/res/drawable-hdpi/ic_person_light.png
new file mode 100644
index 0000000..b439c93
Binary files /dev/null and b/res/drawable-hdpi/ic_person_light.png differ
diff --git a/res/drawable-hdpi/ic_person_light_large.png b/res/drawable-hdpi/ic_person_light_large.png
new file mode 100644
index 0000000..5ddf265
Binary files /dev/null and b/res/drawable-hdpi/ic_person_light_large.png differ
diff --git a/res/drawable-hdpi/ic_phone_small_light.png b/res/drawable-hdpi/ic_phone_small_light.png
new file mode 100644
index 0000000..35cf121
Binary files /dev/null and b/res/drawable-hdpi/ic_phone_small_light.png differ
diff --git a/res/drawable-hdpi/ic_photo_library_light.png b/res/drawable-hdpi/ic_photo_library_light.png
new file mode 100644
index 0000000..1f71a62
Binary files /dev/null and b/res/drawable-hdpi/ic_photo_library_light.png differ
diff --git a/res/drawable-hdpi/ic_preview_pause.png b/res/drawable-hdpi/ic_preview_pause.png
new file mode 100644
index 0000000..fd49749
Binary files /dev/null and b/res/drawable-hdpi/ic_preview_pause.png differ
diff --git a/res/drawable-hdpi/ic_preview_play.png b/res/drawable-hdpi/ic_preview_play.png
new file mode 100644
index 0000000..db2b2ac
Binary files /dev/null and b/res/drawable-hdpi/ic_preview_play.png differ
diff --git a/res/drawable-hdpi/ic_remove_light.png b/res/drawable-hdpi/ic_remove_light.png
new file mode 100644
index 0000000..3992231
Binary files /dev/null and b/res/drawable-hdpi/ic_remove_light.png differ
diff --git a/res/drawable-hdpi/ic_remove_small_light.png b/res/drawable-hdpi/ic_remove_small_light.png
new file mode 100644
index 0000000..07e668c
Binary files /dev/null and b/res/drawable-hdpi/ic_remove_small_light.png differ
diff --git a/res/drawable-hdpi/ic_save_dark.png b/res/drawable-hdpi/ic_save_dark.png
new file mode 100644
index 0000000..7cf01da
Binary files /dev/null and b/res/drawable-hdpi/ic_save_dark.png differ
diff --git a/res/drawable-hdpi/ic_save_light.png b/res/drawable-hdpi/ic_save_light.png
new file mode 100644
index 0000000..b76adb2
Binary files /dev/null and b/res/drawable-hdpi/ic_save_light.png differ
diff --git a/res/drawable-hdpi/ic_search_light.png b/res/drawable-hdpi/ic_search_light.png
new file mode 100644
index 0000000..c35418e
Binary files /dev/null and b/res/drawable-hdpi/ic_search_light.png differ
diff --git a/res/drawable-hdpi/ic_send_dark.png b/res/drawable-hdpi/ic_send_dark.png
new file mode 100644
index 0000000..62108ef
Binary files /dev/null and b/res/drawable-hdpi/ic_send_dark.png differ
diff --git a/res/drawable-hdpi/ic_send_light.png b/res/drawable-hdpi/ic_send_light.png
new file mode 100644
index 0000000..724783d
Binary files /dev/null and b/res/drawable-hdpi/ic_send_light.png differ
diff --git a/res/drawable-hdpi/ic_share_dark.png b/res/drawable-hdpi/ic_share_dark.png
new file mode 100644
index 0000000..bd27042
Binary files /dev/null and b/res/drawable-hdpi/ic_share_dark.png differ
diff --git a/res/drawable-hdpi/ic_share_light.png b/res/drawable-hdpi/ic_share_light.png
new file mode 100644
index 0000000..dadb3e8
Binary files /dev/null and b/res/drawable-hdpi/ic_share_light.png differ
diff --git a/res/drawable-hdpi/ic_sim_card_send.png b/res/drawable-hdpi/ic_sim_card_send.png
new file mode 100644
index 0000000..426b153
Binary files /dev/null and b/res/drawable-hdpi/ic_sim_card_send.png differ
diff --git a/res/drawable-hdpi/ic_sms_delivery_ok.png b/res/drawable-hdpi/ic_sms_delivery_ok.png
new file mode 100644
index 0000000..e038563
Binary files /dev/null and b/res/drawable-hdpi/ic_sms_delivery_ok.png differ
diff --git a/res/drawable-hdpi/ic_sms_failed_light.png b/res/drawable-hdpi/ic_sms_failed_light.png
new file mode 100644
index 0000000..4973427
Binary files /dev/null and b/res/drawable-hdpi/ic_sms_failed_light.png differ
diff --git a/res/drawable-hdpi/ic_sms_light.png b/res/drawable-hdpi/ic_sms_light.png
new file mode 100644
index 0000000..aaeec4e
Binary files /dev/null and b/res/drawable-hdpi/ic_sms_light.png differ
diff --git a/res/drawable-hdpi/ic_sms_multi_light.png b/res/drawable-hdpi/ic_sms_multi_light.png
new file mode 100644
index 0000000..81ac2e7
Binary files /dev/null and b/res/drawable-hdpi/ic_sms_multi_light.png differ
diff --git a/res/drawable-hdpi/ic_tooltip_arrow.png b/res/drawable-hdpi/ic_tooltip_arrow.png
new file mode 100644
index 0000000..870d502
Binary files /dev/null and b/res/drawable-hdpi/ic_tooltip_arrow.png differ
diff --git a/res/drawable-hdpi/ic_video_play_light.png b/res/drawable-hdpi/ic_video_play_light.png
new file mode 100644
index 0000000..4a74f37
Binary files /dev/null and b/res/drawable-hdpi/ic_video_play_light.png differ
diff --git a/res/drawable-hdpi/ic_wear_reply.png b/res/drawable-hdpi/ic_wear_reply.png
new file mode 100644
index 0000000..19ce472
Binary files /dev/null and b/res/drawable-hdpi/ic_wear_reply.png differ
diff --git a/res/drawable-hdpi/ic_widget_avatar_shadow.png b/res/drawable-hdpi/ic_widget_avatar_shadow.png
new file mode 100644
index 0000000..9e0d519
Binary files /dev/null and b/res/drawable-hdpi/ic_widget_avatar_shadow.png differ
diff --git a/res/drawable-hdpi/ic_widget_list.png b/res/drawable-hdpi/ic_widget_list.png
new file mode 100644
index 0000000..06f9732
Binary files /dev/null and b/res/drawable-hdpi/ic_widget_list.png differ
diff --git a/res/drawable-hdpi/msg_bubble_error.9.png b/res/drawable-hdpi/msg_bubble_error.9.png
new file mode 100644
index 0000000..6a26c30
Binary files /dev/null and b/res/drawable-hdpi/msg_bubble_error.9.png differ
diff --git a/res/drawable-hdpi/msg_bubble_incoming.9.png b/res/drawable-hdpi/msg_bubble_incoming.9.png
new file mode 100644
index 0000000..7fed0a8
Binary files /dev/null and b/res/drawable-hdpi/msg_bubble_incoming.9.png differ
diff --git a/res/drawable-hdpi/msg_bubble_input.9.png b/res/drawable-hdpi/msg_bubble_input.9.png
new file mode 100644
index 0000000..01076da
Binary files /dev/null and b/res/drawable-hdpi/msg_bubble_input.9.png differ
diff --git a/res/drawable-hdpi/msg_bubble_outgoing.9.png b/res/drawable-hdpi/msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..8e7ccc0
Binary files /dev/null and b/res/drawable-hdpi/msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-hdpi/permissions.png b/res/drawable-hdpi/permissions.png
new file mode 100644
index 0000000..20697cf
Binary files /dev/null and b/res/drawable-hdpi/permissions.png differ
diff --git a/res/drawable-hdpi/swipe_shadow.9.png b/res/drawable-hdpi/swipe_shadow.9.png
new file mode 100644
index 0000000..8405721
Binary files /dev/null and b/res/drawable-hdpi/swipe_shadow.9.png differ
diff --git a/res/drawable-hdpi/swipe_shadow_drag.9.png b/res/drawable-hdpi/swipe_shadow_drag.9.png
new file mode 100644
index 0000000..950ec71
Binary files /dev/null and b/res/drawable-hdpi/swipe_shadow_drag.9.png differ
diff --git a/res/drawable-hdpi/sym_keyboard_delete_holo.png b/res/drawable-hdpi/sym_keyboard_delete_holo.png
new file mode 100644
index 0000000..9e74a64
Binary files /dev/null and b/res/drawable-hdpi/sym_keyboard_delete_holo.png differ
diff --git a/res/drawable-hdpi/tab_btn_bg_normal.9.png b/res/drawable-hdpi/tab_btn_bg_normal.9.png
new file mode 100644
index 0000000..791bb40
Binary files /dev/null and b/res/drawable-hdpi/tab_btn_bg_normal.9.png differ
diff --git a/res/drawable-hdpi/tab_btn_bg_pressed.9.png b/res/drawable-hdpi/tab_btn_bg_pressed.9.png
new file mode 100644
index 0000000..b2b488c
Binary files /dev/null and b/res/drawable-hdpi/tab_btn_bg_pressed.9.png differ
diff --git a/res/drawable-hdpi/tab_selected.9.png b/res/drawable-hdpi/tab_selected.9.png
new file mode 100644
index 0000000..84e63df
Binary files /dev/null and b/res/drawable-hdpi/tab_selected.9.png differ
diff --git a/res/drawable-hdpi/tab_selected_focused_holo.9.png b/res/drawable-hdpi/tab_selected_focused_holo.9.png
new file mode 100644
index 0000000..5cdc5b4
Binary files /dev/null and b/res/drawable-hdpi/tab_selected_focused_holo.9.png differ
diff --git a/res/drawable-hdpi/tab_selected_pressed_focused_holo.9.png b/res/drawable-hdpi/tab_selected_pressed_focused_holo.9.png
new file mode 100644
index 0000000..ca3eb7b
Binary files /dev/null and b/res/drawable-hdpi/tab_selected_pressed_focused_holo.9.png differ
diff --git a/res/drawable-hdpi/tab_selected_pressed_holo.9.png b/res/drawable-hdpi/tab_selected_pressed_holo.9.png
new file mode 100644
index 0000000..08e5edb
Binary files /dev/null and b/res/drawable-hdpi/tab_selected_pressed_holo.9.png differ
diff --git a/res/drawable-hdpi/tab_unselected.9.png b/res/drawable-hdpi/tab_unselected.9.png
new file mode 100644
index 0000000..bbcfb2c
Binary files /dev/null and b/res/drawable-hdpi/tab_unselected.9.png differ
diff --git a/res/drawable-hdpi/tab_unselected_focused_holo.9.png b/res/drawable-hdpi/tab_unselected_focused_holo.9.png
new file mode 100644
index 0000000..a0c8bc3
Binary files /dev/null and b/res/drawable-hdpi/tab_unselected_focused_holo.9.png differ
diff --git a/res/drawable-hdpi/tab_unselected_pressed_focused_holo.9.png b/res/drawable-hdpi/tab_unselected_pressed_focused_holo.9.png
new file mode 100644
index 0000000..6cf948e
Binary files /dev/null and b/res/drawable-hdpi/tab_unselected_pressed_focused_holo.9.png differ
diff --git a/res/drawable-hdpi/tab_unselected_pressed_holo.9.png b/res/drawable-hdpi/tab_unselected_pressed_holo.9.png
new file mode 100644
index 0000000..a5dce50
Binary files /dev/null and b/res/drawable-hdpi/tab_unselected_pressed_holo.9.png differ
diff --git a/res/drawable-hdpi/widget_hr.9.png b/res/drawable-hdpi/widget_hr.9.png
new file mode 100644
index 0000000..7590256
Binary files /dev/null and b/res/drawable-hdpi/widget_hr.9.png differ
diff --git a/res/drawable-hdpi/widget_msg_bubble_incoming.9.png b/res/drawable-hdpi/widget_msg_bubble_incoming.9.png
new file mode 100644
index 0000000..c6e77a7
Binary files /dev/null and b/res/drawable-hdpi/widget_msg_bubble_incoming.9.png differ
diff --git a/res/drawable-hdpi/widget_msg_bubble_outgoing.9.png b/res/drawable-hdpi/widget_msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..476efae
Binary files /dev/null and b/res/drawable-hdpi/widget_msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-ldrtl-hdpi/ic_keyboard_arrow_left_light.png b/res/drawable-ldrtl-hdpi/ic_keyboard_arrow_left_light.png
new file mode 100644
index 0000000..3e31c08
Binary files /dev/null and b/res/drawable-ldrtl-hdpi/ic_keyboard_arrow_left_light.png differ
diff --git a/res/drawable-ldrtl-hdpi/ic_keyboard_arrow_right_light.png b/res/drawable-ldrtl-hdpi/ic_keyboard_arrow_right_light.png
new file mode 100644
index 0000000..50f280e
Binary files /dev/null and b/res/drawable-ldrtl-hdpi/ic_keyboard_arrow_right_light.png differ
diff --git a/res/drawable-ldrtl-hdpi/ic_send_light.png b/res/drawable-ldrtl-hdpi/ic_send_light.png
new file mode 100644
index 0000000..4ee98a3
Binary files /dev/null and b/res/drawable-ldrtl-hdpi/ic_send_light.png differ
diff --git a/res/drawable-ldrtl-hdpi/msg_bubble_incoming.9.png b/res/drawable-ldrtl-hdpi/msg_bubble_incoming.9.png
new file mode 100644
index 0000000..8e7ccc0
Binary files /dev/null and b/res/drawable-ldrtl-hdpi/msg_bubble_incoming.9.png differ
diff --git a/res/drawable-ldrtl-hdpi/msg_bubble_input.9.png b/res/drawable-ldrtl-hdpi/msg_bubble_input.9.png
new file mode 100644
index 0000000..c3f68b0
Binary files /dev/null and b/res/drawable-ldrtl-hdpi/msg_bubble_input.9.png differ
diff --git a/res/drawable-ldrtl-hdpi/msg_bubble_outgoing.9.png b/res/drawable-ldrtl-hdpi/msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..7fed0a8
Binary files /dev/null and b/res/drawable-ldrtl-hdpi/msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-ldrtl-hdpi/sym_keyboard_delete_holo_dark.png b/res/drawable-ldrtl-hdpi/sym_keyboard_delete_holo_dark.png
new file mode 100644
index 0000000..f0e1b08
Binary files /dev/null and b/res/drawable-ldrtl-hdpi/sym_keyboard_delete_holo_dark.png differ
diff --git a/res/drawable-ldrtl-mdpi/ic_keyboard_arrow_left_light.png b/res/drawable-ldrtl-mdpi/ic_keyboard_arrow_left_light.png
new file mode 100644
index 0000000..9bd625d
Binary files /dev/null and b/res/drawable-ldrtl-mdpi/ic_keyboard_arrow_left_light.png differ
diff --git a/res/drawable-ldrtl-mdpi/ic_keyboard_arrow_right_light.png b/res/drawable-ldrtl-mdpi/ic_keyboard_arrow_right_light.png
new file mode 100644
index 0000000..6004f37
Binary files /dev/null and b/res/drawable-ldrtl-mdpi/ic_keyboard_arrow_right_light.png differ
diff --git a/res/drawable-ldrtl-mdpi/ic_send_light.png b/res/drawable-ldrtl-mdpi/ic_send_light.png
new file mode 100644
index 0000000..1267d66
Binary files /dev/null and b/res/drawable-ldrtl-mdpi/ic_send_light.png differ
diff --git a/res/drawable-ldrtl-mdpi/msg_bubble_incoming.9.png b/res/drawable-ldrtl-mdpi/msg_bubble_incoming.9.png
new file mode 100644
index 0000000..5ca9b14
Binary files /dev/null and b/res/drawable-ldrtl-mdpi/msg_bubble_incoming.9.png differ
diff --git a/res/drawable-ldrtl-mdpi/msg_bubble_input.9.png b/res/drawable-ldrtl-mdpi/msg_bubble_input.9.png
new file mode 100644
index 0000000..6f0b4bc
Binary files /dev/null and b/res/drawable-ldrtl-mdpi/msg_bubble_input.9.png differ
diff --git a/res/drawable-ldrtl-mdpi/msg_bubble_outgoing.9.png b/res/drawable-ldrtl-mdpi/msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..4e7e464
Binary files /dev/null and b/res/drawable-ldrtl-mdpi/msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-ldrtl-mdpi/sym_keyboard_delete_holo_dark.png b/res/drawable-ldrtl-mdpi/sym_keyboard_delete_holo_dark.png
new file mode 100644
index 0000000..346e754
Binary files /dev/null and b/res/drawable-ldrtl-mdpi/sym_keyboard_delete_holo_dark.png differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_keyboard_arrow_left_light.png b/res/drawable-ldrtl-xhdpi/ic_keyboard_arrow_left_light.png
new file mode 100644
index 0000000..51a1903
Binary files /dev/null and b/res/drawable-ldrtl-xhdpi/ic_keyboard_arrow_left_light.png differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_keyboard_arrow_right_light.png b/res/drawable-ldrtl-xhdpi/ic_keyboard_arrow_right_light.png
new file mode 100644
index 0000000..464a0bc
Binary files /dev/null and b/res/drawable-ldrtl-xhdpi/ic_keyboard_arrow_right_light.png differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_send_light.png b/res/drawable-ldrtl-xhdpi/ic_send_light.png
new file mode 100644
index 0000000..178c3cf
Binary files /dev/null and b/res/drawable-ldrtl-xhdpi/ic_send_light.png differ
diff --git a/res/drawable-ldrtl-xhdpi/msg_bubble_incoming.9.png b/res/drawable-ldrtl-xhdpi/msg_bubble_incoming.9.png
new file mode 100644
index 0000000..52cb936
Binary files /dev/null and b/res/drawable-ldrtl-xhdpi/msg_bubble_incoming.9.png differ
diff --git a/res/drawable-ldrtl-xhdpi/msg_bubble_input.9.png b/res/drawable-ldrtl-xhdpi/msg_bubble_input.9.png
new file mode 100644
index 0000000..4c5f45d
Binary files /dev/null and b/res/drawable-ldrtl-xhdpi/msg_bubble_input.9.png differ
diff --git a/res/drawable-ldrtl-xhdpi/msg_bubble_outgoing.9.png b/res/drawable-ldrtl-xhdpi/msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..0661fdb
Binary files /dev/null and b/res/drawable-ldrtl-xhdpi/msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-ldrtl-xhdpi/sym_keyboard_delete_holo_dark.png b/res/drawable-ldrtl-xhdpi/sym_keyboard_delete_holo_dark.png
new file mode 100644
index 0000000..a662fc2
Binary files /dev/null and b/res/drawable-ldrtl-xhdpi/sym_keyboard_delete_holo_dark.png differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_keyboard_arrow_left_light.png b/res/drawable-ldrtl-xxhdpi/ic_keyboard_arrow_left_light.png
new file mode 100644
index 0000000..62ca382
Binary files /dev/null and b/res/drawable-ldrtl-xxhdpi/ic_keyboard_arrow_left_light.png differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_keyboard_arrow_right_light.png b/res/drawable-ldrtl-xxhdpi/ic_keyboard_arrow_right_light.png
new file mode 100644
index 0000000..09536ed
Binary files /dev/null and b/res/drawable-ldrtl-xxhdpi/ic_keyboard_arrow_right_light.png differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_send_light.png b/res/drawable-ldrtl-xxhdpi/ic_send_light.png
new file mode 100644
index 0000000..74ffc46
Binary files /dev/null and b/res/drawable-ldrtl-xxhdpi/ic_send_light.png differ
diff --git a/res/drawable-ldrtl-xxhdpi/msg_bubble_incoming.9.png b/res/drawable-ldrtl-xxhdpi/msg_bubble_incoming.9.png
new file mode 100644
index 0000000..5d8fc74
Binary files /dev/null and b/res/drawable-ldrtl-xxhdpi/msg_bubble_incoming.9.png differ
diff --git a/res/drawable-ldrtl-xxhdpi/msg_bubble_input.9.png b/res/drawable-ldrtl-xxhdpi/msg_bubble_input.9.png
new file mode 100644
index 0000000..6d59b8f
Binary files /dev/null and b/res/drawable-ldrtl-xxhdpi/msg_bubble_input.9.png differ
diff --git a/res/drawable-ldrtl-xxhdpi/msg_bubble_outgoing.9.png b/res/drawable-ldrtl-xxhdpi/msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..009c721
Binary files /dev/null and b/res/drawable-ldrtl-xxhdpi/msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-ldrtl-xxhdpi/sym_keyboard_delete_holo_dark.png b/res/drawable-ldrtl-xxhdpi/sym_keyboard_delete_holo_dark.png
new file mode 100644
index 0000000..273efd6
Binary files /dev/null and b/res/drawable-ldrtl-xxhdpi/sym_keyboard_delete_holo_dark.png differ
diff --git a/res/drawable-ldrtl-xxxhdpi/ic_keyboard_arrow_left_light.png b/res/drawable-ldrtl-xxxhdpi/ic_keyboard_arrow_left_light.png
new file mode 100644
index 0000000..85d005b
Binary files /dev/null and b/res/drawable-ldrtl-xxxhdpi/ic_keyboard_arrow_left_light.png differ
diff --git a/res/drawable-ldrtl-xxxhdpi/ic_keyboard_arrow_right_light.png b/res/drawable-ldrtl-xxxhdpi/ic_keyboard_arrow_right_light.png
new file mode 100644
index 0000000..3737fec
Binary files /dev/null and b/res/drawable-ldrtl-xxxhdpi/ic_keyboard_arrow_right_light.png differ
diff --git a/res/drawable-ldrtl-xxxhdpi/ic_send_light.png b/res/drawable-ldrtl-xxxhdpi/ic_send_light.png
new file mode 100644
index 0000000..cd8e266
Binary files /dev/null and b/res/drawable-ldrtl-xxxhdpi/ic_send_light.png differ
diff --git a/res/drawable-ldrtl-xxxhdpi/msg_bubble_incoming.9.png b/res/drawable-ldrtl-xxxhdpi/msg_bubble_incoming.9.png
new file mode 100644
index 0000000..8378db5
Binary files /dev/null and b/res/drawable-ldrtl-xxxhdpi/msg_bubble_incoming.9.png differ
diff --git a/res/drawable-ldrtl-xxxhdpi/msg_bubble_input.9.png b/res/drawable-ldrtl-xxxhdpi/msg_bubble_input.9.png
new file mode 100644
index 0000000..a707db0
Binary files /dev/null and b/res/drawable-ldrtl-xxxhdpi/msg_bubble_input.9.png differ
diff --git a/res/drawable-ldrtl-xxxhdpi/msg_bubble_outgoing.9.png b/res/drawable-ldrtl-xxxhdpi/msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..f0d0d9e
Binary files /dev/null and b/res/drawable-ldrtl-xxxhdpi/msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-ldrtl-xxxhdpi/sym_keyboard_delete_holo_dark.png b/res/drawable-ldrtl-xxxhdpi/sym_keyboard_delete_holo_dark.png
new file mode 100644
index 0000000..9203260
Binary files /dev/null and b/res/drawable-ldrtl-xxxhdpi/sym_keyboard_delete_holo_dark.png differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png b/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png
new file mode 100644
index 0000000..577ab08
Binary files /dev/null and b/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png b/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png
new file mode 100644
index 0000000..d8525e4
Binary files /dev/null and b/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png b/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png
new file mode 100644
index 0000000..1b029e1
Binary files /dev/null and b/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png b/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png
new file mode 100644
index 0000000..4fa69f8
Binary files /dev/null and b/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png differ
diff --git a/res/drawable-mdpi/cab_bg.9.png b/res/drawable-mdpi/cab_bg.9.png
new file mode 100644
index 0000000..f43a85b
Binary files /dev/null and b/res/drawable-mdpi/cab_bg.9.png differ
diff --git a/res/drawable-mdpi/contact_popup_background.9.png b/res/drawable-mdpi/contact_popup_background.9.png
new file mode 100644
index 0000000..2989590
Binary files /dev/null and b/res/drawable-mdpi/contact_popup_background.9.png differ
diff --git a/res/drawable-mdpi/fab_new_message_static_shadow.png b/res/drawable-mdpi/fab_new_message_static_shadow.png
new file mode 100644
index 0000000..2e24f0a
Binary files /dev/null and b/res/drawable-mdpi/fab_new_message_static_shadow.png differ
diff --git a/res/drawable-mdpi/ic_add_gray.png b/res/drawable-mdpi/ic_add_gray.png
new file mode 100644
index 0000000..806b6e1
Binary files /dev/null and b/res/drawable-mdpi/ic_add_gray.png differ
diff --git a/res/drawable-mdpi/ic_add_white.png b/res/drawable-mdpi/ic_add_white.png
new file mode 100644
index 0000000..4a14229
Binary files /dev/null and b/res/drawable-mdpi/ic_add_white.png differ
diff --git a/res/drawable-mdpi/ic_archive_small_dark.png b/res/drawable-mdpi/ic_archive_small_dark.png
new file mode 100644
index 0000000..a733f56
Binary files /dev/null and b/res/drawable-mdpi/ic_archive_small_dark.png differ
diff --git a/res/drawable-mdpi/ic_archive_small_light.png b/res/drawable-mdpi/ic_archive_small_light.png
new file mode 100644
index 0000000..fa3ffa9
Binary files /dev/null and b/res/drawable-mdpi/ic_archive_small_light.png differ
diff --git a/res/drawable-mdpi/ic_archive_undo_small_dark.png b/res/drawable-mdpi/ic_archive_undo_small_dark.png
new file mode 100644
index 0000000..bc9dead
Binary files /dev/null and b/res/drawable-mdpi/ic_archive_undo_small_dark.png differ
diff --git a/res/drawable-mdpi/ic_archive_undo_small_light.png b/res/drawable-mdpi/ic_archive_undo_small_light.png
new file mode 100644
index 0000000..08b2332
Binary files /dev/null and b/res/drawable-mdpi/ic_archive_undo_small_light.png differ
diff --git a/res/drawable-mdpi/ic_arrow_back_dark.png b/res/drawable-mdpi/ic_arrow_back_dark.png
new file mode 100644
index 0000000..75ae1b1
Binary files /dev/null and b/res/drawable-mdpi/ic_arrow_back_dark.png differ
diff --git a/res/drawable-mdpi/ic_arrow_back_light.png b/res/drawable-mdpi/ic_arrow_back_light.png
new file mode 100644
index 0000000..c59a517
Binary files /dev/null and b/res/drawable-mdpi/ic_arrow_back_light.png differ
diff --git a/res/drawable-mdpi/ic_attachment_dark.png b/res/drawable-mdpi/ic_attachment_dark.png
new file mode 100644
index 0000000..2315e23
Binary files /dev/null and b/res/drawable-mdpi/ic_attachment_dark.png differ
diff --git a/res/drawable-mdpi/ic_audio_light.png b/res/drawable-mdpi/ic_audio_light.png
new file mode 100644
index 0000000..78bc072
Binary files /dev/null and b/res/drawable-mdpi/ic_audio_light.png differ
diff --git a/res/drawable-mdpi/ic_audio_pause.png b/res/drawable-mdpi/ic_audio_pause.png
new file mode 100644
index 0000000..e74d158
Binary files /dev/null and b/res/drawable-mdpi/ic_audio_pause.png differ
diff --git a/res/drawable-mdpi/ic_audio_play.png b/res/drawable-mdpi/ic_audio_play.png
new file mode 100644
index 0000000..0d986a4
Binary files /dev/null and b/res/drawable-mdpi/ic_audio_play.png differ
diff --git a/res/drawable-mdpi/ic_camera_front_light.png b/res/drawable-mdpi/ic_camera_front_light.png
new file mode 100644
index 0000000..a537897
Binary files /dev/null and b/res/drawable-mdpi/ic_camera_front_light.png differ
diff --git a/res/drawable-mdpi/ic_camera_light.png b/res/drawable-mdpi/ic_camera_light.png
new file mode 100644
index 0000000..429bef4
Binary files /dev/null and b/res/drawable-mdpi/ic_camera_light.png differ
diff --git a/res/drawable-mdpi/ic_camera_rear_light.png b/res/drawable-mdpi/ic_camera_rear_light.png
new file mode 100644
index 0000000..4da3328
Binary files /dev/null and b/res/drawable-mdpi/ic_camera_rear_light.png differ
diff --git a/res/drawable-mdpi/ic_cancel_small_dark.png b/res/drawable-mdpi/ic_cancel_small_dark.png
new file mode 100644
index 0000000..f63f351
Binary files /dev/null and b/res/drawable-mdpi/ic_cancel_small_dark.png differ
diff --git a/res/drawable-mdpi/ic_cancel_small_light.png b/res/drawable-mdpi/ic_cancel_small_light.png
new file mode 100644
index 0000000..33fdf10
Binary files /dev/null and b/res/drawable-mdpi/ic_cancel_small_light.png differ
diff --git a/res/drawable-mdpi/ic_checkbox_blank_light.png b/res/drawable-mdpi/ic_checkbox_blank_light.png
new file mode 100644
index 0000000..baec804
Binary files /dev/null and b/res/drawable-mdpi/ic_checkbox_blank_light.png differ
diff --git a/res/drawable-mdpi/ic_checkbox_light.png b/res/drawable-mdpi/ic_checkbox_light.png
new file mode 100644
index 0000000..3762dc4
Binary files /dev/null and b/res/drawable-mdpi/ic_checkbox_light.png differ
diff --git a/res/drawable-mdpi/ic_checkbox_outline_light.png b/res/drawable-mdpi/ic_checkbox_outline_light.png
new file mode 100644
index 0000000..4c3c722
Binary files /dev/null and b/res/drawable-mdpi/ic_checkbox_outline_light.png differ
diff --git a/res/drawable-mdpi/ic_checkmark_circle_blue.png b/res/drawable-mdpi/ic_checkmark_circle_blue.png
new file mode 100644
index 0000000..85735be
Binary files /dev/null and b/res/drawable-mdpi/ic_checkmark_circle_blue.png differ
diff --git a/res/drawable-mdpi/ic_checkmark_large.png b/res/drawable-mdpi/ic_checkmark_large.png
new file mode 100644
index 0000000..95206d1
Binary files /dev/null and b/res/drawable-mdpi/ic_checkmark_large.png differ
diff --git a/res/drawable-mdpi/ic_checkmark_large_light.png b/res/drawable-mdpi/ic_checkmark_large_light.png
new file mode 100644
index 0000000..4c33ce6
Binary files /dev/null and b/res/drawable-mdpi/ic_checkmark_large_light.png differ
diff --git a/res/drawable-mdpi/ic_checkmark_small_blue.png b/res/drawable-mdpi/ic_checkmark_small_blue.png
new file mode 100644
index 0000000..ec9dcb1
Binary files /dev/null and b/res/drawable-mdpi/ic_checkmark_small_blue.png differ
diff --git a/res/drawable-mdpi/ic_checkmark_small_light.png b/res/drawable-mdpi/ic_checkmark_small_light.png
new file mode 100644
index 0000000..414fe8f
Binary files /dev/null and b/res/drawable-mdpi/ic_checkmark_small_light.png differ
diff --git a/res/drawable-mdpi/ic_color_lens.png b/res/drawable-mdpi/ic_color_lens.png
new file mode 100644
index 0000000..b33c8b6
Binary files /dev/null and b/res/drawable-mdpi/ic_color_lens.png differ
diff --git a/res/drawable-mdpi/ic_content_copy_dark.png b/res/drawable-mdpi/ic_content_copy_dark.png
new file mode 100644
index 0000000..4b99a83
Binary files /dev/null and b/res/drawable-mdpi/ic_content_copy_dark.png differ
diff --git a/res/drawable-mdpi/ic_crying_hero.png b/res/drawable-mdpi/ic_crying_hero.png
new file mode 100644
index 0000000..d2f5eef
Binary files /dev/null and b/res/drawable-mdpi/ic_crying_hero.png differ
diff --git a/res/drawable-mdpi/ic_delete_small_dark.png b/res/drawable-mdpi/ic_delete_small_dark.png
new file mode 100644
index 0000000..86c0002
Binary files /dev/null and b/res/drawable-mdpi/ic_delete_small_dark.png differ
diff --git a/res/drawable-mdpi/ic_delete_small_light.png b/res/drawable-mdpi/ic_delete_small_light.png
new file mode 100644
index 0000000..641adc4
Binary files /dev/null and b/res/drawable-mdpi/ic_delete_small_light.png differ
diff --git a/res/drawable-mdpi/ic_dnd_on_dark.png b/res/drawable-mdpi/ic_dnd_on_dark.png
new file mode 100644
index 0000000..4e911a9
Binary files /dev/null and b/res/drawable-mdpi/ic_dnd_on_dark.png differ
diff --git a/res/drawable-mdpi/ic_dnd_on_light.png b/res/drawable-mdpi/ic_dnd_on_light.png
new file mode 100644
index 0000000..4936c2f
Binary files /dev/null and b/res/drawable-mdpi/ic_dnd_on_light.png differ
diff --git a/res/drawable-mdpi/ic_failed_light.png b/res/drawable-mdpi/ic_failed_light.png
new file mode 100644
index 0000000..02a4d0b
Binary files /dev/null and b/res/drawable-mdpi/ic_failed_light.png differ
diff --git a/res/drawable-mdpi/ic_failed_status_red.png b/res/drawable-mdpi/ic_failed_status_red.png
new file mode 100644
index 0000000..f6feafe
Binary files /dev/null and b/res/drawable-mdpi/ic_failed_status_red.png differ
diff --git a/res/drawable-mdpi/ic_file_download_dark.png b/res/drawable-mdpi/ic_file_download_dark.png
new file mode 100644
index 0000000..8104657
Binary files /dev/null and b/res/drawable-mdpi/ic_file_download_dark.png differ
diff --git a/res/drawable-mdpi/ic_file_download_light.png b/res/drawable-mdpi/ic_file_download_light.png
new file mode 100644
index 0000000..d066170
Binary files /dev/null and b/res/drawable-mdpi/ic_file_download_light.png differ
diff --git a/res/drawable-mdpi/ic_forward_dark.png b/res/drawable-mdpi/ic_forward_dark.png
new file mode 100644
index 0000000..7930393
Binary files /dev/null and b/res/drawable-mdpi/ic_forward_dark.png differ
diff --git a/res/drawable-mdpi/ic_history_light.png b/res/drawable-mdpi/ic_history_light.png
new file mode 100644
index 0000000..234b2ce
Binary files /dev/null and b/res/drawable-mdpi/ic_history_light.png differ
diff --git a/res/drawable-mdpi/ic_image_light.png b/res/drawable-mdpi/ic_image_light.png
new file mode 100644
index 0000000..3bd919e
Binary files /dev/null and b/res/drawable-mdpi/ic_image_light.png differ
diff --git a/res/drawable-mdpi/ic_ime_dark.png b/res/drawable-mdpi/ic_ime_dark.png
new file mode 100644
index 0000000..8c0a156
Binary files /dev/null and b/res/drawable-mdpi/ic_ime_dark.png differ
diff --git a/res/drawable-mdpi/ic_ime_light.png b/res/drawable-mdpi/ic_ime_light.png
new file mode 100644
index 0000000..fd58cb5
Binary files /dev/null and b/res/drawable-mdpi/ic_ime_light.png differ
diff --git a/res/drawable-mdpi/ic_info_dark.png b/res/drawable-mdpi/ic_info_dark.png
new file mode 100644
index 0000000..67457a3
Binary files /dev/null and b/res/drawable-mdpi/ic_info_dark.png differ
diff --git a/res/drawable-mdpi/ic_keyboard_arrow_left_light.png b/res/drawable-mdpi/ic_keyboard_arrow_left_light.png
new file mode 100644
index 0000000..6004f37
Binary files /dev/null and b/res/drawable-mdpi/ic_keyboard_arrow_left_light.png differ
diff --git a/res/drawable-mdpi/ic_keyboard_arrow_right_light.png b/res/drawable-mdpi/ic_keyboard_arrow_right_light.png
new file mode 100644
index 0000000..9bd625d
Binary files /dev/null and b/res/drawable-mdpi/ic_keyboard_arrow_right_light.png differ
diff --git a/res/drawable-mdpi/ic_launcher.png b/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..a6d2f55
Binary files /dev/null and b/res/drawable-mdpi/ic_launcher.png differ
diff --git a/res/drawable-mdpi/ic_mp_audio_mic.png b/res/drawable-mdpi/ic_mp_audio_mic.png
new file mode 100644
index 0000000..918d799
Binary files /dev/null and b/res/drawable-mdpi/ic_mp_audio_mic.png differ
diff --git a/res/drawable-mdpi/ic_mp_camera_large_light.png b/res/drawable-mdpi/ic_mp_camera_large_light.png
new file mode 100644
index 0000000..3ec72f9
Binary files /dev/null and b/res/drawable-mdpi/ic_mp_camera_large_light.png differ
diff --git a/res/drawable-mdpi/ic_mp_camera_small_light.png b/res/drawable-mdpi/ic_mp_camera_small_light.png
new file mode 100644
index 0000000..fe1dc7e
Binary files /dev/null and b/res/drawable-mdpi/ic_mp_camera_small_light.png differ
diff --git a/res/drawable-mdpi/ic_mp_capture_stop_large_light.png b/res/drawable-mdpi/ic_mp_capture_stop_large_light.png
new file mode 100644
index 0000000..a9705c1
Binary files /dev/null and b/res/drawable-mdpi/ic_mp_capture_stop_large_light.png differ
diff --git a/res/drawable-mdpi/ic_mp_full_screen_light.png b/res/drawable-mdpi/ic_mp_full_screen_light.png
new file mode 100644
index 0000000..5462c59
Binary files /dev/null and b/res/drawable-mdpi/ic_mp_full_screen_light.png differ
diff --git a/res/drawable-mdpi/ic_mp_video_large_light.png b/res/drawable-mdpi/ic_mp_video_large_light.png
new file mode 100644
index 0000000..fa8e3e2
Binary files /dev/null and b/res/drawable-mdpi/ic_mp_video_large_light.png differ
diff --git a/res/drawable-mdpi/ic_mp_video_small_light.png b/res/drawable-mdpi/ic_mp_video_small_light.png
new file mode 100644
index 0000000..9204827
Binary files /dev/null and b/res/drawable-mdpi/ic_mp_video_small_light.png differ
diff --git a/res/drawable-mdpi/ic_notifications_off_dark.png b/res/drawable-mdpi/ic_notifications_off_dark.png
new file mode 100644
index 0000000..4a5a7e9
Binary files /dev/null and b/res/drawable-mdpi/ic_notifications_off_dark.png differ
diff --git a/res/drawable-mdpi/ic_notifications_off_light.png b/res/drawable-mdpi/ic_notifications_off_light.png
new file mode 100644
index 0000000..33e0b4a
Binary files /dev/null and b/res/drawable-mdpi/ic_notifications_off_light.png differ
diff --git a/res/drawable-mdpi/ic_notifications_off_small_light.png b/res/drawable-mdpi/ic_notifications_off_small_light.png
new file mode 100644
index 0000000..4bd9563
Binary files /dev/null and b/res/drawable-mdpi/ic_notifications_off_small_light.png differ
diff --git a/res/drawable-mdpi/ic_notifications_on_dark.png b/res/drawable-mdpi/ic_notifications_on_dark.png
new file mode 100644
index 0000000..77a2a7d
Binary files /dev/null and b/res/drawable-mdpi/ic_notifications_on_dark.png differ
diff --git a/res/drawable-mdpi/ic_notifications_on_light.png b/res/drawable-mdpi/ic_notifications_on_light.png
new file mode 100644
index 0000000..eae03a5
Binary files /dev/null and b/res/drawable-mdpi/ic_notifications_on_light.png differ
diff --git a/res/drawable-mdpi/ic_numeric_dialpad.png b/res/drawable-mdpi/ic_numeric_dialpad.png
new file mode 100644
index 0000000..5802167
Binary files /dev/null and b/res/drawable-mdpi/ic_numeric_dialpad.png differ
diff --git a/res/drawable-mdpi/ic_oobe_conv_list.png b/res/drawable-mdpi/ic_oobe_conv_list.png
new file mode 100644
index 0000000..1648f2e
Binary files /dev/null and b/res/drawable-mdpi/ic_oobe_conv_list.png differ
diff --git a/res/drawable-mdpi/ic_oobe_freq_list.png b/res/drawable-mdpi/ic_oobe_freq_list.png
new file mode 100644
index 0000000..8d7d47f
Binary files /dev/null and b/res/drawable-mdpi/ic_oobe_freq_list.png differ
diff --git a/res/drawable-mdpi/ic_open_in_new.png b/res/drawable-mdpi/ic_open_in_new.png
new file mode 100644
index 0000000..44ef9d5
Binary files /dev/null and b/res/drawable-mdpi/ic_open_in_new.png differ
diff --git a/res/drawable-mdpi/ic_people_add_light.png b/res/drawable-mdpi/ic_people_add_light.png
new file mode 100644
index 0000000..4bc974f
Binary files /dev/null and b/res/drawable-mdpi/ic_people_add_light.png differ
diff --git a/res/drawable-mdpi/ic_person_add_blue.png b/res/drawable-mdpi/ic_person_add_blue.png
new file mode 100644
index 0000000..29f9066
Binary files /dev/null and b/res/drawable-mdpi/ic_person_add_blue.png differ
diff --git a/res/drawable-mdpi/ic_person_add_dark.png b/res/drawable-mdpi/ic_person_add_dark.png
new file mode 100644
index 0000000..6f1fd49
Binary files /dev/null and b/res/drawable-mdpi/ic_person_add_dark.png differ
diff --git a/res/drawable-mdpi/ic_person_add_light.png b/res/drawable-mdpi/ic_person_add_light.png
new file mode 100644
index 0000000..ba83709
Binary files /dev/null and b/res/drawable-mdpi/ic_person_add_light.png differ
diff --git a/res/drawable-mdpi/ic_person_light.png b/res/drawable-mdpi/ic_person_light.png
new file mode 100644
index 0000000..5698835
Binary files /dev/null and b/res/drawable-mdpi/ic_person_light.png differ
diff --git a/res/drawable-mdpi/ic_person_light_large.png b/res/drawable-mdpi/ic_person_light_large.png
new file mode 100644
index 0000000..7aa150b
Binary files /dev/null and b/res/drawable-mdpi/ic_person_light_large.png differ
diff --git a/res/drawable-mdpi/ic_phone_small_light.png b/res/drawable-mdpi/ic_phone_small_light.png
new file mode 100644
index 0000000..dfcbba0
Binary files /dev/null and b/res/drawable-mdpi/ic_phone_small_light.png differ
diff --git a/res/drawable-mdpi/ic_photo_library_light.png b/res/drawable-mdpi/ic_photo_library_light.png
new file mode 100644
index 0000000..322d486
Binary files /dev/null and b/res/drawable-mdpi/ic_photo_library_light.png differ
diff --git a/res/drawable-mdpi/ic_preview_pause.png b/res/drawable-mdpi/ic_preview_pause.png
new file mode 100644
index 0000000..14046e2
Binary files /dev/null and b/res/drawable-mdpi/ic_preview_pause.png differ
diff --git a/res/drawable-mdpi/ic_preview_play.png b/res/drawable-mdpi/ic_preview_play.png
new file mode 100644
index 0000000..8ad0b02
Binary files /dev/null and b/res/drawable-mdpi/ic_preview_play.png differ
diff --git a/res/drawable-mdpi/ic_remove_light.png b/res/drawable-mdpi/ic_remove_light.png
new file mode 100644
index 0000000..0464885
Binary files /dev/null and b/res/drawable-mdpi/ic_remove_light.png differ
diff --git a/res/drawable-mdpi/ic_remove_small_light.png b/res/drawable-mdpi/ic_remove_small_light.png
new file mode 100644
index 0000000..2131b6e
Binary files /dev/null and b/res/drawable-mdpi/ic_remove_small_light.png differ
diff --git a/res/drawable-mdpi/ic_save_dark.png b/res/drawable-mdpi/ic_save_dark.png
new file mode 100644
index 0000000..f9b0de5
Binary files /dev/null and b/res/drawable-mdpi/ic_save_dark.png differ
diff --git a/res/drawable-mdpi/ic_save_light.png b/res/drawable-mdpi/ic_save_light.png
new file mode 100644
index 0000000..4faf5d5
Binary files /dev/null and b/res/drawable-mdpi/ic_save_light.png differ
diff --git a/res/drawable-mdpi/ic_search_light.png b/res/drawable-mdpi/ic_search_light.png
new file mode 100644
index 0000000..b7e1de0
Binary files /dev/null and b/res/drawable-mdpi/ic_search_light.png differ
diff --git a/res/drawable-mdpi/ic_send_dark.png b/res/drawable-mdpi/ic_send_dark.png
new file mode 100644
index 0000000..965a9f0
Binary files /dev/null and b/res/drawable-mdpi/ic_send_dark.png differ
diff --git a/res/drawable-mdpi/ic_send_light.png b/res/drawable-mdpi/ic_send_light.png
new file mode 100644
index 0000000..46d2dcd
Binary files /dev/null and b/res/drawable-mdpi/ic_send_light.png differ
diff --git a/res/drawable-mdpi/ic_share_dark.png b/res/drawable-mdpi/ic_share_dark.png
new file mode 100644
index 0000000..c6ba4c9
Binary files /dev/null and b/res/drawable-mdpi/ic_share_dark.png differ
diff --git a/res/drawable-mdpi/ic_share_light.png b/res/drawable-mdpi/ic_share_light.png
new file mode 100644
index 0000000..362c862
Binary files /dev/null and b/res/drawable-mdpi/ic_share_light.png differ
diff --git a/res/drawable-mdpi/ic_sim_card_send.png b/res/drawable-mdpi/ic_sim_card_send.png
new file mode 100644
index 0000000..1f26017
Binary files /dev/null and b/res/drawable-mdpi/ic_sim_card_send.png differ
diff --git a/res/drawable-mdpi/ic_sms_delivery_ok.png b/res/drawable-mdpi/ic_sms_delivery_ok.png
new file mode 100644
index 0000000..ffccf64
Binary files /dev/null and b/res/drawable-mdpi/ic_sms_delivery_ok.png differ
diff --git a/res/drawable-mdpi/ic_sms_failed_light.png b/res/drawable-mdpi/ic_sms_failed_light.png
new file mode 100644
index 0000000..9914e3f
Binary files /dev/null and b/res/drawable-mdpi/ic_sms_failed_light.png differ
diff --git a/res/drawable-mdpi/ic_sms_light.png b/res/drawable-mdpi/ic_sms_light.png
new file mode 100644
index 0000000..518c989
Binary files /dev/null and b/res/drawable-mdpi/ic_sms_light.png differ
diff --git a/res/drawable-mdpi/ic_sms_multi_light.png b/res/drawable-mdpi/ic_sms_multi_light.png
new file mode 100644
index 0000000..bd6f4c6
Binary files /dev/null and b/res/drawable-mdpi/ic_sms_multi_light.png differ
diff --git a/res/drawable-mdpi/ic_tooltip_arrow.png b/res/drawable-mdpi/ic_tooltip_arrow.png
new file mode 100644
index 0000000..51824f5
Binary files /dev/null and b/res/drawable-mdpi/ic_tooltip_arrow.png differ
diff --git a/res/drawable-mdpi/ic_video_play_light.png b/res/drawable-mdpi/ic_video_play_light.png
new file mode 100644
index 0000000..e0ac1e4
Binary files /dev/null and b/res/drawable-mdpi/ic_video_play_light.png differ
diff --git a/res/drawable-mdpi/ic_wear_reply.png b/res/drawable-mdpi/ic_wear_reply.png
new file mode 100644
index 0000000..47bb396
Binary files /dev/null and b/res/drawable-mdpi/ic_wear_reply.png differ
diff --git a/res/drawable-mdpi/ic_widget_avatar_shadow.png b/res/drawable-mdpi/ic_widget_avatar_shadow.png
new file mode 100644
index 0000000..1a8dc8e
Binary files /dev/null and b/res/drawable-mdpi/ic_widget_avatar_shadow.png differ
diff --git a/res/drawable-mdpi/ic_widget_list.png b/res/drawable-mdpi/ic_widget_list.png
new file mode 100644
index 0000000..9bf4b11
Binary files /dev/null and b/res/drawable-mdpi/ic_widget_list.png differ
diff --git a/res/drawable-mdpi/msg_bubble_error.9.png b/res/drawable-mdpi/msg_bubble_error.9.png
new file mode 100644
index 0000000..694d117
Binary files /dev/null and b/res/drawable-mdpi/msg_bubble_error.9.png differ
diff --git a/res/drawable-mdpi/msg_bubble_incoming.9.png b/res/drawable-mdpi/msg_bubble_incoming.9.png
new file mode 100644
index 0000000..4e7e464
Binary files /dev/null and b/res/drawable-mdpi/msg_bubble_incoming.9.png differ
diff --git a/res/drawable-mdpi/msg_bubble_input.9.png b/res/drawable-mdpi/msg_bubble_input.9.png
new file mode 100644
index 0000000..1810ffb
Binary files /dev/null and b/res/drawable-mdpi/msg_bubble_input.9.png differ
diff --git a/res/drawable-mdpi/msg_bubble_outgoing.9.png b/res/drawable-mdpi/msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..5ca9b14
Binary files /dev/null and b/res/drawable-mdpi/msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-mdpi/permissions.png b/res/drawable-mdpi/permissions.png
new file mode 100644
index 0000000..2d754ec
Binary files /dev/null and b/res/drawable-mdpi/permissions.png differ
diff --git a/res/drawable-mdpi/swipe_shadow.9.png b/res/drawable-mdpi/swipe_shadow.9.png
new file mode 100644
index 0000000..e2ed6d4
Binary files /dev/null and b/res/drawable-mdpi/swipe_shadow.9.png differ
diff --git a/res/drawable-mdpi/swipe_shadow_drag.9.png b/res/drawable-mdpi/swipe_shadow_drag.9.png
new file mode 100644
index 0000000..94be3f9
Binary files /dev/null and b/res/drawable-mdpi/swipe_shadow_drag.9.png differ
diff --git a/res/drawable-mdpi/sym_keyboard_delete_holo.png b/res/drawable-mdpi/sym_keyboard_delete_holo.png
new file mode 100644
index 0000000..7b3103b
Binary files /dev/null and b/res/drawable-mdpi/sym_keyboard_delete_holo.png differ
diff --git a/res/drawable-mdpi/tab_btn_bg_normal.9.png b/res/drawable-mdpi/tab_btn_bg_normal.9.png
new file mode 100644
index 0000000..d56cd94
Binary files /dev/null and b/res/drawable-mdpi/tab_btn_bg_normal.9.png differ
diff --git a/res/drawable-mdpi/tab_btn_bg_pressed.9.png b/res/drawable-mdpi/tab_btn_bg_pressed.9.png
new file mode 100644
index 0000000..4d4c932
Binary files /dev/null and b/res/drawable-mdpi/tab_btn_bg_pressed.9.png differ
diff --git a/res/drawable-mdpi/tab_selected.9.png b/res/drawable-mdpi/tab_selected.9.png
new file mode 100644
index 0000000..4b00f35
Binary files /dev/null and b/res/drawable-mdpi/tab_selected.9.png differ
diff --git a/res/drawable-mdpi/tab_selected_focused_holo.9.png b/res/drawable-mdpi/tab_selected_focused_holo.9.png
new file mode 100644
index 0000000..c77808d
Binary files /dev/null and b/res/drawable-mdpi/tab_selected_focused_holo.9.png differ
diff --git a/res/drawable-mdpi/tab_selected_pressed_focused_holo.9.png b/res/drawable-mdpi/tab_selected_pressed_focused_holo.9.png
new file mode 100644
index 0000000..1e28bb6
Binary files /dev/null and b/res/drawable-mdpi/tab_selected_pressed_focused_holo.9.png differ
diff --git a/res/drawable-mdpi/tab_selected_pressed_holo.9.png b/res/drawable-mdpi/tab_selected_pressed_holo.9.png
new file mode 100644
index 0000000..098bf7d
Binary files /dev/null and b/res/drawable-mdpi/tab_selected_pressed_holo.9.png differ
diff --git a/res/drawable-mdpi/tab_unselected.9.png b/res/drawable-mdpi/tab_unselected.9.png
new file mode 100644
index 0000000..bb45ab9
Binary files /dev/null and b/res/drawable-mdpi/tab_unselected.9.png differ
diff --git a/res/drawable-mdpi/tab_unselected_focused_holo.9.png b/res/drawable-mdpi/tab_unselected_focused_holo.9.png
new file mode 100644
index 0000000..e00e256
Binary files /dev/null and b/res/drawable-mdpi/tab_unselected_focused_holo.9.png differ
diff --git a/res/drawable-mdpi/tab_unselected_pressed_focused_holo.9.png b/res/drawable-mdpi/tab_unselected_pressed_focused_holo.9.png
new file mode 100644
index 0000000..80e8f0c
Binary files /dev/null and b/res/drawable-mdpi/tab_unselected_pressed_focused_holo.9.png differ
diff --git a/res/drawable-mdpi/tab_unselected_pressed_holo.9.png b/res/drawable-mdpi/tab_unselected_pressed_holo.9.png
new file mode 100644
index 0000000..eb9422e
Binary files /dev/null and b/res/drawable-mdpi/tab_unselected_pressed_holo.9.png differ
diff --git a/res/drawable-mdpi/widget_hr.9.png b/res/drawable-mdpi/widget_hr.9.png
new file mode 100644
index 0000000..93f3417
Binary files /dev/null and b/res/drawable-mdpi/widget_hr.9.png differ
diff --git a/res/drawable-mdpi/widget_msg_bubble_incoming.9.png b/res/drawable-mdpi/widget_msg_bubble_incoming.9.png
new file mode 100644
index 0000000..ddadf73
Binary files /dev/null and b/res/drawable-mdpi/widget_msg_bubble_incoming.9.png differ
diff --git a/res/drawable-mdpi/widget_msg_bubble_outgoing.9.png b/res/drawable-mdpi/widget_msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..00432c3
Binary files /dev/null and b/res/drawable-mdpi/widget_msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-nodpi/bg_sms.jpg b/res/drawable-nodpi/bg_sms.jpg
new file mode 100644
index 0000000..d8711e7
Binary files /dev/null and b/res/drawable-nodpi/bg_sms.jpg differ
diff --git a/res/drawable-nodpi/ic_person_wear.png b/res/drawable-nodpi/ic_person_wear.png
new file mode 100644
index 0000000..97be017
Binary files /dev/null and b/res/drawable-nodpi/ic_person_wear.png differ
diff --git a/res/drawable-nodpi/messenger_widget_conversation_preview.png b/res/drawable-nodpi/messenger_widget_conversation_preview.png
new file mode 100644
index 0000000..e26ae97
Binary files /dev/null and b/res/drawable-nodpi/messenger_widget_conversation_preview.png differ
diff --git a/res/drawable-nodpi/messenger_widget_preview.png b/res/drawable-nodpi/messenger_widget_preview.png
new file mode 100644
index 0000000..a5d40b2
Binary files /dev/null and b/res/drawable-nodpi/messenger_widget_preview.png differ
diff --git a/res/drawable-v21/contact_picker_tab_background_selector.xml b/res/drawable-v21/contact_picker_tab_background_selector.xml
new file mode 100644
index 0000000..59bdf95
--- /dev/null
+++ b/res/drawable-v21/contact_picker_tab_background_selector.xml
@@ -0,0 +1,18 @@
+
+
+
\ No newline at end of file
diff --git a/res/drawable-v21/fab_new_message_bg.xml b/res/drawable-v21/fab_new_message_bg.xml
new file mode 100644
index 0000000..8043f0f
--- /dev/null
+++ b/res/drawable-v21/fab_new_message_bg.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable-v21/gallery_image_background_selector.xml b/res/drawable-v21/gallery_image_background_selector.xml
new file mode 100644
index 0000000..7486fad
--- /dev/null
+++ b/res/drawable-v21/gallery_image_background_selector.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/res/drawable-v21/mediapicker_tab_button_background.xml b/res/drawable-v21/mediapicker_tab_button_background.xml
new file mode 100644
index 0000000..10c4474
--- /dev/null
+++ b/res/drawable-v21/mediapicker_tab_button_background.xml
@@ -0,0 +1,18 @@
+
+
+
diff --git a/res/drawable-v21/transparent_button_background.xml b/res/drawable-v21/transparent_button_background.xml
new file mode 100644
index 0000000..10c4474
--- /dev/null
+++ b/res/drawable-v21/transparent_button_background.xml
@@ -0,0 +1,18 @@
+
+
+
diff --git a/res/drawable-v21/widget_item_background.xml b/res/drawable-v21/widget_item_background.xml
new file mode 100644
index 0000000..eb20c06
--- /dev/null
+++ b/res/drawable-v21/widget_item_background.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
diff --git a/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png b/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png
new file mode 100644
index 0000000..96eb10e
Binary files /dev/null and b/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png differ
diff --git a/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_holo.9.png b/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_holo.9.png
new file mode 100644
index 0000000..10986ee
Binary files /dev/null and b/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_holo.9.png differ
diff --git a/res/drawable-xhdpi/btn_keyboard_key_light_normal_holo.9.png b/res/drawable-xhdpi/btn_keyboard_key_light_normal_holo.9.png
new file mode 100644
index 0000000..12f9a82
Binary files /dev/null and b/res/drawable-xhdpi/btn_keyboard_key_light_normal_holo.9.png differ
diff --git a/res/drawable-xhdpi/btn_keyboard_key_light_pressed_holo.9.png b/res/drawable-xhdpi/btn_keyboard_key_light_pressed_holo.9.png
new file mode 100644
index 0000000..e7590b0
Binary files /dev/null and b/res/drawable-xhdpi/btn_keyboard_key_light_pressed_holo.9.png differ
diff --git a/res/drawable-xhdpi/cab_bg.9.png b/res/drawable-xhdpi/cab_bg.9.png
new file mode 100644
index 0000000..ba8c446
Binary files /dev/null and b/res/drawable-xhdpi/cab_bg.9.png differ
diff --git a/res/drawable-xhdpi/contact_popup_background.9.png b/res/drawable-xhdpi/contact_popup_background.9.png
new file mode 100644
index 0000000..f8b809a
Binary files /dev/null and b/res/drawable-xhdpi/contact_popup_background.9.png differ
diff --git a/res/drawable-xhdpi/fab_new_message_static_shadow.png b/res/drawable-xhdpi/fab_new_message_static_shadow.png
new file mode 100644
index 0000000..7075cb9
Binary files /dev/null and b/res/drawable-xhdpi/fab_new_message_static_shadow.png differ
diff --git a/res/drawable-xhdpi/ic_add_gray.png b/res/drawable-xhdpi/ic_add_gray.png
new file mode 100644
index 0000000..8ce295d
Binary files /dev/null and b/res/drawable-xhdpi/ic_add_gray.png differ
diff --git a/res/drawable-xhdpi/ic_add_white.png b/res/drawable-xhdpi/ic_add_white.png
new file mode 100644
index 0000000..7ef4fc1
Binary files /dev/null and b/res/drawable-xhdpi/ic_add_white.png differ
diff --git a/res/drawable-xhdpi/ic_archive_small_dark.png b/res/drawable-xhdpi/ic_archive_small_dark.png
new file mode 100644
index 0000000..ea31204
Binary files /dev/null and b/res/drawable-xhdpi/ic_archive_small_dark.png differ
diff --git a/res/drawable-xhdpi/ic_archive_small_light.png b/res/drawable-xhdpi/ic_archive_small_light.png
new file mode 100644
index 0000000..b3e628f
Binary files /dev/null and b/res/drawable-xhdpi/ic_archive_small_light.png differ
diff --git a/res/drawable-xhdpi/ic_archive_undo_small_dark.png b/res/drawable-xhdpi/ic_archive_undo_small_dark.png
new file mode 100644
index 0000000..7508484
Binary files /dev/null and b/res/drawable-xhdpi/ic_archive_undo_small_dark.png differ
diff --git a/res/drawable-xhdpi/ic_archive_undo_small_light.png b/res/drawable-xhdpi/ic_archive_undo_small_light.png
new file mode 100644
index 0000000..b7038d8
Binary files /dev/null and b/res/drawable-xhdpi/ic_archive_undo_small_light.png differ
diff --git a/res/drawable-xhdpi/ic_arrow_back_dark.png b/res/drawable-xhdpi/ic_arrow_back_dark.png
new file mode 100644
index 0000000..c40b832
Binary files /dev/null and b/res/drawable-xhdpi/ic_arrow_back_dark.png differ
diff --git a/res/drawable-xhdpi/ic_arrow_back_light.png b/res/drawable-xhdpi/ic_arrow_back_light.png
new file mode 100644
index 0000000..fa3d493
Binary files /dev/null and b/res/drawable-xhdpi/ic_arrow_back_light.png differ
diff --git a/res/drawable-xhdpi/ic_attachment_dark.png b/res/drawable-xhdpi/ic_attachment_dark.png
new file mode 100644
index 0000000..61e565c
Binary files /dev/null and b/res/drawable-xhdpi/ic_attachment_dark.png differ
diff --git a/res/drawable-xhdpi/ic_audio_light.png b/res/drawable-xhdpi/ic_audio_light.png
new file mode 100644
index 0000000..fab5ba4
Binary files /dev/null and b/res/drawable-xhdpi/ic_audio_light.png differ
diff --git a/res/drawable-xhdpi/ic_audio_pause.png b/res/drawable-xhdpi/ic_audio_pause.png
new file mode 100644
index 0000000..e33b655
Binary files /dev/null and b/res/drawable-xhdpi/ic_audio_pause.png differ
diff --git a/res/drawable-xhdpi/ic_audio_play.png b/res/drawable-xhdpi/ic_audio_play.png
new file mode 100644
index 0000000..ff93063
Binary files /dev/null and b/res/drawable-xhdpi/ic_audio_play.png differ
diff --git a/res/drawable-xhdpi/ic_camera_front_light.png b/res/drawable-xhdpi/ic_camera_front_light.png
new file mode 100644
index 0000000..9cd577d
Binary files /dev/null and b/res/drawable-xhdpi/ic_camera_front_light.png differ
diff --git a/res/drawable-xhdpi/ic_camera_light.png b/res/drawable-xhdpi/ic_camera_light.png
new file mode 100644
index 0000000..3b74ad6
Binary files /dev/null and b/res/drawable-xhdpi/ic_camera_light.png differ
diff --git a/res/drawable-xhdpi/ic_camera_rear_light.png b/res/drawable-xhdpi/ic_camera_rear_light.png
new file mode 100644
index 0000000..92727af
Binary files /dev/null and b/res/drawable-xhdpi/ic_camera_rear_light.png differ
diff --git a/res/drawable-xhdpi/ic_cancel_small_dark.png b/res/drawable-xhdpi/ic_cancel_small_dark.png
new file mode 100644
index 0000000..8b34b9b
Binary files /dev/null and b/res/drawable-xhdpi/ic_cancel_small_dark.png differ
diff --git a/res/drawable-xhdpi/ic_cancel_small_light.png b/res/drawable-xhdpi/ic_cancel_small_light.png
new file mode 100644
index 0000000..dea984f
Binary files /dev/null and b/res/drawable-xhdpi/ic_cancel_small_light.png differ
diff --git a/res/drawable-xhdpi/ic_checkbox_blank_light.png b/res/drawable-xhdpi/ic_checkbox_blank_light.png
new file mode 100644
index 0000000..7f6e917
Binary files /dev/null and b/res/drawable-xhdpi/ic_checkbox_blank_light.png differ
diff --git a/res/drawable-xhdpi/ic_checkbox_light.png b/res/drawable-xhdpi/ic_checkbox_light.png
new file mode 100644
index 0000000..9cb2b7e
Binary files /dev/null and b/res/drawable-xhdpi/ic_checkbox_light.png differ
diff --git a/res/drawable-xhdpi/ic_checkbox_outline_light.png b/res/drawable-xhdpi/ic_checkbox_outline_light.png
new file mode 100644
index 0000000..64f0a2b
Binary files /dev/null and b/res/drawable-xhdpi/ic_checkbox_outline_light.png differ
diff --git a/res/drawable-xhdpi/ic_checkmark_circle_blue.png b/res/drawable-xhdpi/ic_checkmark_circle_blue.png
new file mode 100644
index 0000000..211a405
Binary files /dev/null and b/res/drawable-xhdpi/ic_checkmark_circle_blue.png differ
diff --git a/res/drawable-xhdpi/ic_checkmark_large.png b/res/drawable-xhdpi/ic_checkmark_large.png
new file mode 100644
index 0000000..fd4420b
Binary files /dev/null and b/res/drawable-xhdpi/ic_checkmark_large.png differ
diff --git a/res/drawable-xhdpi/ic_checkmark_large_light.png b/res/drawable-xhdpi/ic_checkmark_large_light.png
new file mode 100644
index 0000000..d841688
Binary files /dev/null and b/res/drawable-xhdpi/ic_checkmark_large_light.png differ
diff --git a/res/drawable-xhdpi/ic_checkmark_small_blue.png b/res/drawable-xhdpi/ic_checkmark_small_blue.png
new file mode 100644
index 0000000..9fc4a4b
Binary files /dev/null and b/res/drawable-xhdpi/ic_checkmark_small_blue.png differ
diff --git a/res/drawable-xhdpi/ic_checkmark_small_light.png b/res/drawable-xhdpi/ic_checkmark_small_light.png
new file mode 100644
index 0000000..cd084fb
Binary files /dev/null and b/res/drawable-xhdpi/ic_checkmark_small_light.png differ
diff --git a/res/drawable-xhdpi/ic_color_lens.png b/res/drawable-xhdpi/ic_color_lens.png
new file mode 100644
index 0000000..8887429
Binary files /dev/null and b/res/drawable-xhdpi/ic_color_lens.png differ
diff --git a/res/drawable-xhdpi/ic_content_copy_dark.png b/res/drawable-xhdpi/ic_content_copy_dark.png
new file mode 100644
index 0000000..0114555
Binary files /dev/null and b/res/drawable-xhdpi/ic_content_copy_dark.png differ
diff --git a/res/drawable-xhdpi/ic_crying_hero.png b/res/drawable-xhdpi/ic_crying_hero.png
new file mode 100644
index 0000000..ccc40ab
Binary files /dev/null and b/res/drawable-xhdpi/ic_crying_hero.png differ
diff --git a/res/drawable-xhdpi/ic_delete_small_dark.png b/res/drawable-xhdpi/ic_delete_small_dark.png
new file mode 100644
index 0000000..b9b0cbd
Binary files /dev/null and b/res/drawable-xhdpi/ic_delete_small_dark.png differ
diff --git a/res/drawable-xhdpi/ic_delete_small_light.png b/res/drawable-xhdpi/ic_delete_small_light.png
new file mode 100644
index 0000000..7c45f70
Binary files /dev/null and b/res/drawable-xhdpi/ic_delete_small_light.png differ
diff --git a/res/drawable-xhdpi/ic_dnd_on_dark.png b/res/drawable-xhdpi/ic_dnd_on_dark.png
new file mode 100644
index 0000000..c40fe99
Binary files /dev/null and b/res/drawable-xhdpi/ic_dnd_on_dark.png differ
diff --git a/res/drawable-xhdpi/ic_dnd_on_light.png b/res/drawable-xhdpi/ic_dnd_on_light.png
new file mode 100644
index 0000000..e0527f5
Binary files /dev/null and b/res/drawable-xhdpi/ic_dnd_on_light.png differ
diff --git a/res/drawable-xhdpi/ic_failed_light.png b/res/drawable-xhdpi/ic_failed_light.png
new file mode 100644
index 0000000..33d3436
Binary files /dev/null and b/res/drawable-xhdpi/ic_failed_light.png differ
diff --git a/res/drawable-xhdpi/ic_failed_status_red.png b/res/drawable-xhdpi/ic_failed_status_red.png
new file mode 100644
index 0000000..3c6616a
Binary files /dev/null and b/res/drawable-xhdpi/ic_failed_status_red.png differ
diff --git a/res/drawable-xhdpi/ic_file_download_dark.png b/res/drawable-xhdpi/ic_file_download_dark.png
new file mode 100644
index 0000000..c31257a
Binary files /dev/null and b/res/drawable-xhdpi/ic_file_download_dark.png differ
diff --git a/res/drawable-xhdpi/ic_file_download_light.png b/res/drawable-xhdpi/ic_file_download_light.png
new file mode 100644
index 0000000..b894fa6
Binary files /dev/null and b/res/drawable-xhdpi/ic_file_download_light.png differ
diff --git a/res/drawable-xhdpi/ic_forward_dark.png b/res/drawable-xhdpi/ic_forward_dark.png
new file mode 100644
index 0000000..b62f0de
Binary files /dev/null and b/res/drawable-xhdpi/ic_forward_dark.png differ
diff --git a/res/drawable-xhdpi/ic_history_light.png b/res/drawable-xhdpi/ic_history_light.png
new file mode 100644
index 0000000..23585a2
Binary files /dev/null and b/res/drawable-xhdpi/ic_history_light.png differ
diff --git a/res/drawable-xhdpi/ic_image_light.png b/res/drawable-xhdpi/ic_image_light.png
new file mode 100644
index 0000000..b2aecfb
Binary files /dev/null and b/res/drawable-xhdpi/ic_image_light.png differ
diff --git a/res/drawable-xhdpi/ic_ime_dark.png b/res/drawable-xhdpi/ic_ime_dark.png
new file mode 100644
index 0000000..cd5c5c6
Binary files /dev/null and b/res/drawable-xhdpi/ic_ime_dark.png differ
diff --git a/res/drawable-xhdpi/ic_ime_light.png b/res/drawable-xhdpi/ic_ime_light.png
new file mode 100644
index 0000000..14b57f8
Binary files /dev/null and b/res/drawable-xhdpi/ic_ime_light.png differ
diff --git a/res/drawable-xhdpi/ic_info_dark.png b/res/drawable-xhdpi/ic_info_dark.png
new file mode 100644
index 0000000..31d1e05
Binary files /dev/null and b/res/drawable-xhdpi/ic_info_dark.png differ
diff --git a/res/drawable-xhdpi/ic_keyboard_arrow_left_light.png b/res/drawable-xhdpi/ic_keyboard_arrow_left_light.png
new file mode 100644
index 0000000..464a0bc
Binary files /dev/null and b/res/drawable-xhdpi/ic_keyboard_arrow_left_light.png differ
diff --git a/res/drawable-xhdpi/ic_keyboard_arrow_right_light.png b/res/drawable-xhdpi/ic_keyboard_arrow_right_light.png
new file mode 100644
index 0000000..51a1903
Binary files /dev/null and b/res/drawable-xhdpi/ic_keyboard_arrow_right_light.png differ
diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..3c82a06
Binary files /dev/null and b/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/res/drawable-xhdpi/ic_mp_audio_mic.png b/res/drawable-xhdpi/ic_mp_audio_mic.png
new file mode 100644
index 0000000..b35d0f1
Binary files /dev/null and b/res/drawable-xhdpi/ic_mp_audio_mic.png differ
diff --git a/res/drawable-xhdpi/ic_mp_camera_large_light.png b/res/drawable-xhdpi/ic_mp_camera_large_light.png
new file mode 100644
index 0000000..5552d92
Binary files /dev/null and b/res/drawable-xhdpi/ic_mp_camera_large_light.png differ
diff --git a/res/drawable-xhdpi/ic_mp_camera_small_light.png b/res/drawable-xhdpi/ic_mp_camera_small_light.png
new file mode 100644
index 0000000..75094e1
Binary files /dev/null and b/res/drawable-xhdpi/ic_mp_camera_small_light.png differ
diff --git a/res/drawable-xhdpi/ic_mp_capture_stop_large_light.png b/res/drawable-xhdpi/ic_mp_capture_stop_large_light.png
new file mode 100644
index 0000000..62125b3
Binary files /dev/null and b/res/drawable-xhdpi/ic_mp_capture_stop_large_light.png differ
diff --git a/res/drawable-xhdpi/ic_mp_full_screen_light.png b/res/drawable-xhdpi/ic_mp_full_screen_light.png
new file mode 100644
index 0000000..02cbd48
Binary files /dev/null and b/res/drawable-xhdpi/ic_mp_full_screen_light.png differ
diff --git a/res/drawable-xhdpi/ic_mp_video_large_light.png b/res/drawable-xhdpi/ic_mp_video_large_light.png
new file mode 100644
index 0000000..723b052
Binary files /dev/null and b/res/drawable-xhdpi/ic_mp_video_large_light.png differ
diff --git a/res/drawable-xhdpi/ic_mp_video_small_light.png b/res/drawable-xhdpi/ic_mp_video_small_light.png
new file mode 100644
index 0000000..00fde5f
Binary files /dev/null and b/res/drawable-xhdpi/ic_mp_video_small_light.png differ
diff --git a/res/drawable-xhdpi/ic_notifications_off_dark.png b/res/drawable-xhdpi/ic_notifications_off_dark.png
new file mode 100644
index 0000000..4f3b924
Binary files /dev/null and b/res/drawable-xhdpi/ic_notifications_off_dark.png differ
diff --git a/res/drawable-xhdpi/ic_notifications_off_light.png b/res/drawable-xhdpi/ic_notifications_off_light.png
new file mode 100644
index 0000000..16ae132
Binary files /dev/null and b/res/drawable-xhdpi/ic_notifications_off_light.png differ
diff --git a/res/drawable-xhdpi/ic_notifications_off_small_light.png b/res/drawable-xhdpi/ic_notifications_off_small_light.png
new file mode 100644
index 0000000..e54fc52
Binary files /dev/null and b/res/drawable-xhdpi/ic_notifications_off_small_light.png differ
diff --git a/res/drawable-xhdpi/ic_notifications_on_dark.png b/res/drawable-xhdpi/ic_notifications_on_dark.png
new file mode 100644
index 0000000..40f2909
Binary files /dev/null and b/res/drawable-xhdpi/ic_notifications_on_dark.png differ
diff --git a/res/drawable-xhdpi/ic_notifications_on_light.png b/res/drawable-xhdpi/ic_notifications_on_light.png
new file mode 100644
index 0000000..3c44f93
Binary files /dev/null and b/res/drawable-xhdpi/ic_notifications_on_light.png differ
diff --git a/res/drawable-xhdpi/ic_numeric_dialpad.png b/res/drawable-xhdpi/ic_numeric_dialpad.png
new file mode 100644
index 0000000..b22360f
Binary files /dev/null and b/res/drawable-xhdpi/ic_numeric_dialpad.png differ
diff --git a/res/drawable-xhdpi/ic_oobe_conv_list.png b/res/drawable-xhdpi/ic_oobe_conv_list.png
new file mode 100644
index 0000000..b41d322
Binary files /dev/null and b/res/drawable-xhdpi/ic_oobe_conv_list.png differ
diff --git a/res/drawable-xhdpi/ic_oobe_freq_list.png b/res/drawable-xhdpi/ic_oobe_freq_list.png
new file mode 100644
index 0000000..898daf5
Binary files /dev/null and b/res/drawable-xhdpi/ic_oobe_freq_list.png differ
diff --git a/res/drawable-xhdpi/ic_open_in_new.png b/res/drawable-xhdpi/ic_open_in_new.png
new file mode 100644
index 0000000..363a35d
Binary files /dev/null and b/res/drawable-xhdpi/ic_open_in_new.png differ
diff --git a/res/drawable-xhdpi/ic_people_add_light.png b/res/drawable-xhdpi/ic_people_add_light.png
new file mode 100644
index 0000000..f57f056
Binary files /dev/null and b/res/drawable-xhdpi/ic_people_add_light.png differ
diff --git a/res/drawable-xhdpi/ic_person_add_blue.png b/res/drawable-xhdpi/ic_person_add_blue.png
new file mode 100644
index 0000000..4e76e64
Binary files /dev/null and b/res/drawable-xhdpi/ic_person_add_blue.png differ
diff --git a/res/drawable-xhdpi/ic_person_add_dark.png b/res/drawable-xhdpi/ic_person_add_dark.png
new file mode 100644
index 0000000..6f325cf
Binary files /dev/null and b/res/drawable-xhdpi/ic_person_add_dark.png differ
diff --git a/res/drawable-xhdpi/ic_person_add_light.png b/res/drawable-xhdpi/ic_person_add_light.png
new file mode 100644
index 0000000..840f063
Binary files /dev/null and b/res/drawable-xhdpi/ic_person_add_light.png differ
diff --git a/res/drawable-xhdpi/ic_person_light.png b/res/drawable-xhdpi/ic_person_light.png
new file mode 100644
index 0000000..5d23639
Binary files /dev/null and b/res/drawable-xhdpi/ic_person_light.png differ
diff --git a/res/drawable-xhdpi/ic_person_light_large.png b/res/drawable-xhdpi/ic_person_light_large.png
new file mode 100644
index 0000000..22a4ff1
Binary files /dev/null and b/res/drawable-xhdpi/ic_person_light_large.png differ
diff --git a/res/drawable-xhdpi/ic_phone_small_light.png b/res/drawable-xhdpi/ic_phone_small_light.png
new file mode 100644
index 0000000..b2cab28
Binary files /dev/null and b/res/drawable-xhdpi/ic_phone_small_light.png differ
diff --git a/res/drawable-xhdpi/ic_photo_library_light.png b/res/drawable-xhdpi/ic_photo_library_light.png
new file mode 100644
index 0000000..1f5a69c
Binary files /dev/null and b/res/drawable-xhdpi/ic_photo_library_light.png differ
diff --git a/res/drawable-xhdpi/ic_preview_pause.png b/res/drawable-xhdpi/ic_preview_pause.png
new file mode 100644
index 0000000..bc0319d
Binary files /dev/null and b/res/drawable-xhdpi/ic_preview_pause.png differ
diff --git a/res/drawable-xhdpi/ic_preview_play.png b/res/drawable-xhdpi/ic_preview_play.png
new file mode 100644
index 0000000..dc3ac1e
Binary files /dev/null and b/res/drawable-xhdpi/ic_preview_play.png differ
diff --git a/res/drawable-xhdpi/ic_remove_light.png b/res/drawable-xhdpi/ic_remove_light.png
new file mode 100644
index 0000000..cbaf6d0
Binary files /dev/null and b/res/drawable-xhdpi/ic_remove_light.png differ
diff --git a/res/drawable-xhdpi/ic_remove_small_light.png b/res/drawable-xhdpi/ic_remove_small_light.png
new file mode 100644
index 0000000..222b86c
Binary files /dev/null and b/res/drawable-xhdpi/ic_remove_small_light.png differ
diff --git a/res/drawable-xhdpi/ic_save_dark.png b/res/drawable-xhdpi/ic_save_dark.png
new file mode 100644
index 0000000..7927ba6
Binary files /dev/null and b/res/drawable-xhdpi/ic_save_dark.png differ
diff --git a/res/drawable-xhdpi/ic_save_light.png b/res/drawable-xhdpi/ic_save_light.png
new file mode 100644
index 0000000..298bb47
Binary files /dev/null and b/res/drawable-xhdpi/ic_save_light.png differ
diff --git a/res/drawable-xhdpi/ic_search_light.png b/res/drawable-xhdpi/ic_search_light.png
new file mode 100644
index 0000000..b83d895
Binary files /dev/null and b/res/drawable-xhdpi/ic_search_light.png differ
diff --git a/res/drawable-xhdpi/ic_send_dark.png b/res/drawable-xhdpi/ic_send_dark.png
new file mode 100644
index 0000000..a6b3699
Binary files /dev/null and b/res/drawable-xhdpi/ic_send_dark.png differ
diff --git a/res/drawable-xhdpi/ic_send_light.png b/res/drawable-xhdpi/ic_send_light.png
new file mode 100644
index 0000000..a19b335
Binary files /dev/null and b/res/drawable-xhdpi/ic_send_light.png differ
diff --git a/res/drawable-xhdpi/ic_share_dark.png b/res/drawable-xhdpi/ic_share_dark.png
new file mode 100644
index 0000000..a4b822a
Binary files /dev/null and b/res/drawable-xhdpi/ic_share_dark.png differ
diff --git a/res/drawable-xhdpi/ic_share_light.png b/res/drawable-xhdpi/ic_share_light.png
new file mode 100644
index 0000000..711797c
Binary files /dev/null and b/res/drawable-xhdpi/ic_share_light.png differ
diff --git a/res/drawable-xhdpi/ic_sim_card_send.png b/res/drawable-xhdpi/ic_sim_card_send.png
new file mode 100644
index 0000000..9fc7e9a
Binary files /dev/null and b/res/drawable-xhdpi/ic_sim_card_send.png differ
diff --git a/res/drawable-xhdpi/ic_sms_delivery_ok.png b/res/drawable-xhdpi/ic_sms_delivery_ok.png
new file mode 100644
index 0000000..c12ae0a
Binary files /dev/null and b/res/drawable-xhdpi/ic_sms_delivery_ok.png differ
diff --git a/res/drawable-xhdpi/ic_sms_failed_light.png b/res/drawable-xhdpi/ic_sms_failed_light.png
new file mode 100644
index 0000000..90c899a
Binary files /dev/null and b/res/drawable-xhdpi/ic_sms_failed_light.png differ
diff --git a/res/drawable-xhdpi/ic_sms_light.png b/res/drawable-xhdpi/ic_sms_light.png
new file mode 100644
index 0000000..4b24a4b
Binary files /dev/null and b/res/drawable-xhdpi/ic_sms_light.png differ
diff --git a/res/drawable-xhdpi/ic_sms_multi_light.png b/res/drawable-xhdpi/ic_sms_multi_light.png
new file mode 100644
index 0000000..f3ba620
Binary files /dev/null and b/res/drawable-xhdpi/ic_sms_multi_light.png differ
diff --git a/res/drawable-xhdpi/ic_tooltip_arrow.png b/res/drawable-xhdpi/ic_tooltip_arrow.png
new file mode 100644
index 0000000..4a59931
Binary files /dev/null and b/res/drawable-xhdpi/ic_tooltip_arrow.png differ
diff --git a/res/drawable-xhdpi/ic_video_play_light.png b/res/drawable-xhdpi/ic_video_play_light.png
new file mode 100644
index 0000000..89397a8
Binary files /dev/null and b/res/drawable-xhdpi/ic_video_play_light.png differ
diff --git a/res/drawable-xhdpi/ic_wear_reply.png b/res/drawable-xhdpi/ic_wear_reply.png
new file mode 100644
index 0000000..c909c59
Binary files /dev/null and b/res/drawable-xhdpi/ic_wear_reply.png differ
diff --git a/res/drawable-xhdpi/ic_widget_avatar_shadow.png b/res/drawable-xhdpi/ic_widget_avatar_shadow.png
new file mode 100644
index 0000000..37600aa
Binary files /dev/null and b/res/drawable-xhdpi/ic_widget_avatar_shadow.png differ
diff --git a/res/drawable-xhdpi/ic_widget_list.png b/res/drawable-xhdpi/ic_widget_list.png
new file mode 100644
index 0000000..a12764f
Binary files /dev/null and b/res/drawable-xhdpi/ic_widget_list.png differ
diff --git a/res/drawable-xhdpi/msg_bubble_error.9.png b/res/drawable-xhdpi/msg_bubble_error.9.png
new file mode 100644
index 0000000..96b139b
Binary files /dev/null and b/res/drawable-xhdpi/msg_bubble_error.9.png differ
diff --git a/res/drawable-xhdpi/msg_bubble_incoming.9.png b/res/drawable-xhdpi/msg_bubble_incoming.9.png
new file mode 100644
index 0000000..0661fdb
Binary files /dev/null and b/res/drawable-xhdpi/msg_bubble_incoming.9.png differ
diff --git a/res/drawable-xhdpi/msg_bubble_input.9.png b/res/drawable-xhdpi/msg_bubble_input.9.png
new file mode 100644
index 0000000..67f92ff
Binary files /dev/null and b/res/drawable-xhdpi/msg_bubble_input.9.png differ
diff --git a/res/drawable-xhdpi/msg_bubble_outgoing.9.png b/res/drawable-xhdpi/msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..52cb936
Binary files /dev/null and b/res/drawable-xhdpi/msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-xhdpi/permissions.png b/res/drawable-xhdpi/permissions.png
new file mode 100644
index 0000000..39a81bc
Binary files /dev/null and b/res/drawable-xhdpi/permissions.png differ
diff --git a/res/drawable-xhdpi/swipe_shadow.9.png b/res/drawable-xhdpi/swipe_shadow.9.png
new file mode 100644
index 0000000..45d965d
Binary files /dev/null and b/res/drawable-xhdpi/swipe_shadow.9.png differ
diff --git a/res/drawable-xhdpi/swipe_shadow_drag.9.png b/res/drawable-xhdpi/swipe_shadow_drag.9.png
new file mode 100644
index 0000000..b443b5c
Binary files /dev/null and b/res/drawable-xhdpi/swipe_shadow_drag.9.png differ
diff --git a/res/drawable-xhdpi/sym_keyboard_delete_holo.png b/res/drawable-xhdpi/sym_keyboard_delete_holo.png
new file mode 100644
index 0000000..16b58a0
Binary files /dev/null and b/res/drawable-xhdpi/sym_keyboard_delete_holo.png differ
diff --git a/res/drawable-xhdpi/tab_btn_bg_normal.9.png b/res/drawable-xhdpi/tab_btn_bg_normal.9.png
new file mode 100644
index 0000000..d9446c6
Binary files /dev/null and b/res/drawable-xhdpi/tab_btn_bg_normal.9.png differ
diff --git a/res/drawable-xhdpi/tab_btn_bg_pressed.9.png b/res/drawable-xhdpi/tab_btn_bg_pressed.9.png
new file mode 100644
index 0000000..de76c06
Binary files /dev/null and b/res/drawable-xhdpi/tab_btn_bg_pressed.9.png differ
diff --git a/res/drawable-xhdpi/tab_selected.9.png b/res/drawable-xhdpi/tab_selected.9.png
new file mode 100644
index 0000000..95e5f43
Binary files /dev/null and b/res/drawable-xhdpi/tab_selected.9.png differ
diff --git a/res/drawable-xhdpi/tab_selected_focused_holo.9.png b/res/drawable-xhdpi/tab_selected_focused_holo.9.png
new file mode 100644
index 0000000..f98b4d9
Binary files /dev/null and b/res/drawable-xhdpi/tab_selected_focused_holo.9.png differ
diff --git a/res/drawable-xhdpi/tab_selected_pressed_focused_holo.9.png b/res/drawable-xhdpi/tab_selected_pressed_focused_holo.9.png
new file mode 100644
index 0000000..e8f2cb6
Binary files /dev/null and b/res/drawable-xhdpi/tab_selected_pressed_focused_holo.9.png differ
diff --git a/res/drawable-xhdpi/tab_selected_pressed_holo.9.png b/res/drawable-xhdpi/tab_selected_pressed_holo.9.png
new file mode 100644
index 0000000..1882927
Binary files /dev/null and b/res/drawable-xhdpi/tab_selected_pressed_holo.9.png differ
diff --git a/res/drawable-xhdpi/tab_unselected.9.png b/res/drawable-xhdpi/tab_unselected.9.png
new file mode 100644
index 0000000..8cede8d
Binary files /dev/null and b/res/drawable-xhdpi/tab_unselected.9.png differ
diff --git a/res/drawable-xhdpi/tab_unselected_focused_holo.9.png b/res/drawable-xhdpi/tab_unselected_focused_holo.9.png
new file mode 100644
index 0000000..28a7ec5
Binary files /dev/null and b/res/drawable-xhdpi/tab_unselected_focused_holo.9.png differ
diff --git a/res/drawable-xhdpi/tab_unselected_pressed_focused_holo.9.png b/res/drawable-xhdpi/tab_unselected_pressed_focused_holo.9.png
new file mode 100644
index 0000000..b9962b1
Binary files /dev/null and b/res/drawable-xhdpi/tab_unselected_pressed_focused_holo.9.png differ
diff --git a/res/drawable-xhdpi/tab_unselected_pressed_holo.9.png b/res/drawable-xhdpi/tab_unselected_pressed_holo.9.png
new file mode 100644
index 0000000..dadc471
Binary files /dev/null and b/res/drawable-xhdpi/tab_unselected_pressed_holo.9.png differ
diff --git a/res/drawable-xhdpi/widget_hr.9.png b/res/drawable-xhdpi/widget_hr.9.png
new file mode 100644
index 0000000..31fcc7e
Binary files /dev/null and b/res/drawable-xhdpi/widget_hr.9.png differ
diff --git a/res/drawable-xhdpi/widget_msg_bubble_incoming.9.png b/res/drawable-xhdpi/widget_msg_bubble_incoming.9.png
new file mode 100644
index 0000000..2abb496
Binary files /dev/null and b/res/drawable-xhdpi/widget_msg_bubble_incoming.9.png differ
diff --git a/res/drawable-xhdpi/widget_msg_bubble_outgoing.9.png b/res/drawable-xhdpi/widget_msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..35b58cd
Binary files /dev/null and b/res/drawable-xhdpi/widget_msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_holo.9.png b/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_holo.9.png
new file mode 100644
index 0000000..cc880c2
Binary files /dev/null and b/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_holo.9.png differ
diff --git a/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_holo.9.png b/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_holo.9.png
new file mode 100644
index 0000000..60ccf97
Binary files /dev/null and b/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_holo.9.png differ
diff --git a/res/drawable-xxhdpi/btn_keyboard_key_light_normal_holo.9.png b/res/drawable-xxhdpi/btn_keyboard_key_light_normal_holo.9.png
new file mode 100644
index 0000000..0358907
Binary files /dev/null and b/res/drawable-xxhdpi/btn_keyboard_key_light_normal_holo.9.png differ
diff --git a/res/drawable-xxhdpi/btn_keyboard_key_light_pressed_holo.9.png b/res/drawable-xxhdpi/btn_keyboard_key_light_pressed_holo.9.png
new file mode 100644
index 0000000..adcddc9
Binary files /dev/null and b/res/drawable-xxhdpi/btn_keyboard_key_light_pressed_holo.9.png differ
diff --git a/res/drawable-xxhdpi/cab_bg.9.png b/res/drawable-xxhdpi/cab_bg.9.png
new file mode 100644
index 0000000..b75401e
Binary files /dev/null and b/res/drawable-xxhdpi/cab_bg.9.png differ
diff --git a/res/drawable-xxhdpi/contact_popup_background.9.png b/res/drawable-xxhdpi/contact_popup_background.9.png
new file mode 100644
index 0000000..bb4f281
Binary files /dev/null and b/res/drawable-xxhdpi/contact_popup_background.9.png differ
diff --git a/res/drawable-xxhdpi/fab_new_message_static_shadow.png b/res/drawable-xxhdpi/fab_new_message_static_shadow.png
new file mode 100644
index 0000000..adfd569
Binary files /dev/null and b/res/drawable-xxhdpi/fab_new_message_static_shadow.png differ
diff --git a/res/drawable-xxhdpi/ic_add_gray.png b/res/drawable-xxhdpi/ic_add_gray.png
new file mode 100644
index 0000000..8273830
Binary files /dev/null and b/res/drawable-xxhdpi/ic_add_gray.png differ
diff --git a/res/drawable-xxhdpi/ic_add_white.png b/res/drawable-xxhdpi/ic_add_white.png
new file mode 100644
index 0000000..7b4d52c
Binary files /dev/null and b/res/drawable-xxhdpi/ic_add_white.png differ
diff --git a/res/drawable-xxhdpi/ic_archive_small_dark.png b/res/drawable-xxhdpi/ic_archive_small_dark.png
new file mode 100644
index 0000000..64aa9d5
Binary files /dev/null and b/res/drawable-xxhdpi/ic_archive_small_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_archive_small_light.png b/res/drawable-xxhdpi/ic_archive_small_light.png
new file mode 100644
index 0000000..042ed27
Binary files /dev/null and b/res/drawable-xxhdpi/ic_archive_small_light.png differ
diff --git a/res/drawable-xxhdpi/ic_archive_undo_small_dark.png b/res/drawable-xxhdpi/ic_archive_undo_small_dark.png
new file mode 100644
index 0000000..a3f7503
Binary files /dev/null and b/res/drawable-xxhdpi/ic_archive_undo_small_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_archive_undo_small_light.png b/res/drawable-xxhdpi/ic_archive_undo_small_light.png
new file mode 100644
index 0000000..cd9d0d5
Binary files /dev/null and b/res/drawable-xxhdpi/ic_archive_undo_small_light.png differ
diff --git a/res/drawable-xxhdpi/ic_arrow_back_dark.png b/res/drawable-xxhdpi/ic_arrow_back_dark.png
new file mode 100644
index 0000000..1c71cb0
Binary files /dev/null and b/res/drawable-xxhdpi/ic_arrow_back_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_arrow_back_light.png b/res/drawable-xxhdpi/ic_arrow_back_light.png
new file mode 100644
index 0000000..8b532d0
Binary files /dev/null and b/res/drawable-xxhdpi/ic_arrow_back_light.png differ
diff --git a/res/drawable-xxhdpi/ic_attachment_dark.png b/res/drawable-xxhdpi/ic_attachment_dark.png
new file mode 100644
index 0000000..64d9dad
Binary files /dev/null and b/res/drawable-xxhdpi/ic_attachment_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_audio_light.png b/res/drawable-xxhdpi/ic_audio_light.png
new file mode 100644
index 0000000..9b2f05c
Binary files /dev/null and b/res/drawable-xxhdpi/ic_audio_light.png differ
diff --git a/res/drawable-xxhdpi/ic_audio_pause.png b/res/drawable-xxhdpi/ic_audio_pause.png
new file mode 100644
index 0000000..d294f3c
Binary files /dev/null and b/res/drawable-xxhdpi/ic_audio_pause.png differ
diff --git a/res/drawable-xxhdpi/ic_audio_play.png b/res/drawable-xxhdpi/ic_audio_play.png
new file mode 100644
index 0000000..cb84ee6
Binary files /dev/null and b/res/drawable-xxhdpi/ic_audio_play.png differ
diff --git a/res/drawable-xxhdpi/ic_camera_front_light.png b/res/drawable-xxhdpi/ic_camera_front_light.png
new file mode 100644
index 0000000..53616e4
Binary files /dev/null and b/res/drawable-xxhdpi/ic_camera_front_light.png differ
diff --git a/res/drawable-xxhdpi/ic_camera_light.png b/res/drawable-xxhdpi/ic_camera_light.png
new file mode 100644
index 0000000..64e9873
Binary files /dev/null and b/res/drawable-xxhdpi/ic_camera_light.png differ
diff --git a/res/drawable-xxhdpi/ic_camera_rear_light.png b/res/drawable-xxhdpi/ic_camera_rear_light.png
new file mode 100644
index 0000000..8e478e3
Binary files /dev/null and b/res/drawable-xxhdpi/ic_camera_rear_light.png differ
diff --git a/res/drawable-xxhdpi/ic_cancel_small_dark.png b/res/drawable-xxhdpi/ic_cancel_small_dark.png
new file mode 100644
index 0000000..c8f583c
Binary files /dev/null and b/res/drawable-xxhdpi/ic_cancel_small_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_cancel_small_light.png b/res/drawable-xxhdpi/ic_cancel_small_light.png
new file mode 100644
index 0000000..b3eacda
Binary files /dev/null and b/res/drawable-xxhdpi/ic_cancel_small_light.png differ
diff --git a/res/drawable-xxhdpi/ic_checkbox_blank_light.png b/res/drawable-xxhdpi/ic_checkbox_blank_light.png
new file mode 100644
index 0000000..0556578
Binary files /dev/null and b/res/drawable-xxhdpi/ic_checkbox_blank_light.png differ
diff --git a/res/drawable-xxhdpi/ic_checkbox_light.png b/res/drawable-xxhdpi/ic_checkbox_light.png
new file mode 100644
index 0000000..3a1896b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_checkbox_light.png differ
diff --git a/res/drawable-xxhdpi/ic_checkbox_outline_light.png b/res/drawable-xxhdpi/ic_checkbox_outline_light.png
new file mode 100644
index 0000000..cc77c5e
Binary files /dev/null and b/res/drawable-xxhdpi/ic_checkbox_outline_light.png differ
diff --git a/res/drawable-xxhdpi/ic_checkmark_circle_blue.png b/res/drawable-xxhdpi/ic_checkmark_circle_blue.png
new file mode 100644
index 0000000..bede5b9
Binary files /dev/null and b/res/drawable-xxhdpi/ic_checkmark_circle_blue.png differ
diff --git a/res/drawable-xxhdpi/ic_checkmark_large.png b/res/drawable-xxhdpi/ic_checkmark_large.png
new file mode 100644
index 0000000..1be0e02
Binary files /dev/null and b/res/drawable-xxhdpi/ic_checkmark_large.png differ
diff --git a/res/drawable-xxhdpi/ic_checkmark_large_light.png b/res/drawable-xxhdpi/ic_checkmark_large_light.png
new file mode 100644
index 0000000..b5f4e24
Binary files /dev/null and b/res/drawable-xxhdpi/ic_checkmark_large_light.png differ
diff --git a/res/drawable-xxhdpi/ic_checkmark_small_blue.png b/res/drawable-xxhdpi/ic_checkmark_small_blue.png
new file mode 100644
index 0000000..65d3e5c
Binary files /dev/null and b/res/drawable-xxhdpi/ic_checkmark_small_blue.png differ
diff --git a/res/drawable-xxhdpi/ic_checkmark_small_light.png b/res/drawable-xxhdpi/ic_checkmark_small_light.png
new file mode 100644
index 0000000..7aeac03
Binary files /dev/null and b/res/drawable-xxhdpi/ic_checkmark_small_light.png differ
diff --git a/res/drawable-xxhdpi/ic_color_lens.png b/res/drawable-xxhdpi/ic_color_lens.png
new file mode 100644
index 0000000..6fd56fd
Binary files /dev/null and b/res/drawable-xxhdpi/ic_color_lens.png differ
diff --git a/res/drawable-xxhdpi/ic_content_copy_dark.png b/res/drawable-xxhdpi/ic_content_copy_dark.png
new file mode 100644
index 0000000..e3518ae
Binary files /dev/null and b/res/drawable-xxhdpi/ic_content_copy_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_crying_hero.png b/res/drawable-xxhdpi/ic_crying_hero.png
new file mode 100644
index 0000000..46538b5
Binary files /dev/null and b/res/drawable-xxhdpi/ic_crying_hero.png differ
diff --git a/res/drawable-xxhdpi/ic_delete_small_dark.png b/res/drawable-xxhdpi/ic_delete_small_dark.png
new file mode 100644
index 0000000..146ac39
Binary files /dev/null and b/res/drawable-xxhdpi/ic_delete_small_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_delete_small_light.png b/res/drawable-xxhdpi/ic_delete_small_light.png
new file mode 100644
index 0000000..b739ac9
Binary files /dev/null and b/res/drawable-xxhdpi/ic_delete_small_light.png differ
diff --git a/res/drawable-xxhdpi/ic_dnd_on_dark.png b/res/drawable-xxhdpi/ic_dnd_on_dark.png
new file mode 100644
index 0000000..a9ccb88
Binary files /dev/null and b/res/drawable-xxhdpi/ic_dnd_on_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_dnd_on_light.png b/res/drawable-xxhdpi/ic_dnd_on_light.png
new file mode 100644
index 0000000..3ddaa13
Binary files /dev/null and b/res/drawable-xxhdpi/ic_dnd_on_light.png differ
diff --git a/res/drawable-xxhdpi/ic_failed_light.png b/res/drawable-xxhdpi/ic_failed_light.png
new file mode 100644
index 0000000..7612138
Binary files /dev/null and b/res/drawable-xxhdpi/ic_failed_light.png differ
diff --git a/res/drawable-xxhdpi/ic_failed_status_red.png b/res/drawable-xxhdpi/ic_failed_status_red.png
new file mode 100644
index 0000000..26f76cc
Binary files /dev/null and b/res/drawable-xxhdpi/ic_failed_status_red.png differ
diff --git a/res/drawable-xxhdpi/ic_file_download_dark.png b/res/drawable-xxhdpi/ic_file_download_dark.png
new file mode 100644
index 0000000..d7fc0b3
Binary files /dev/null and b/res/drawable-xxhdpi/ic_file_download_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_file_download_light.png b/res/drawable-xxhdpi/ic_file_download_light.png
new file mode 100644
index 0000000..42eadbc
Binary files /dev/null and b/res/drawable-xxhdpi/ic_file_download_light.png differ
diff --git a/res/drawable-xxhdpi/ic_forward_dark.png b/res/drawable-xxhdpi/ic_forward_dark.png
new file mode 100644
index 0000000..cd071be
Binary files /dev/null and b/res/drawable-xxhdpi/ic_forward_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_history_light.png b/res/drawable-xxhdpi/ic_history_light.png
new file mode 100644
index 0000000..bd430f8
Binary files /dev/null and b/res/drawable-xxhdpi/ic_history_light.png differ
diff --git a/res/drawable-xxhdpi/ic_image_light.png b/res/drawable-xxhdpi/ic_image_light.png
new file mode 100644
index 0000000..16b7e7b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_image_light.png differ
diff --git a/res/drawable-xxhdpi/ic_ime_dark.png b/res/drawable-xxhdpi/ic_ime_dark.png
new file mode 100644
index 0000000..a32bd46
Binary files /dev/null and b/res/drawable-xxhdpi/ic_ime_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_ime_light.png b/res/drawable-xxhdpi/ic_ime_light.png
new file mode 100644
index 0000000..159d085
Binary files /dev/null and b/res/drawable-xxhdpi/ic_ime_light.png differ
diff --git a/res/drawable-xxhdpi/ic_info_dark.png b/res/drawable-xxhdpi/ic_info_dark.png
new file mode 100644
index 0000000..2df42de
Binary files /dev/null and b/res/drawable-xxhdpi/ic_info_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_keyboard_arrow_left_light.png b/res/drawable-xxhdpi/ic_keyboard_arrow_left_light.png
new file mode 100644
index 0000000..09536ed
Binary files /dev/null and b/res/drawable-xxhdpi/ic_keyboard_arrow_left_light.png differ
diff --git a/res/drawable-xxhdpi/ic_keyboard_arrow_right_light.png b/res/drawable-xxhdpi/ic_keyboard_arrow_right_light.png
new file mode 100644
index 0000000..62ca382
Binary files /dev/null and b/res/drawable-xxhdpi/ic_keyboard_arrow_right_light.png differ
diff --git a/res/drawable-xxhdpi/ic_launcher.png b/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..0d61198
Binary files /dev/null and b/res/drawable-xxhdpi/ic_launcher.png differ
diff --git a/res/drawable-xxhdpi/ic_mp_audio_mic.png b/res/drawable-xxhdpi/ic_mp_audio_mic.png
new file mode 100644
index 0000000..a01388b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_mp_audio_mic.png differ
diff --git a/res/drawable-xxhdpi/ic_mp_camera_large_light.png b/res/drawable-xxhdpi/ic_mp_camera_large_light.png
new file mode 100644
index 0000000..37fa935
Binary files /dev/null and b/res/drawable-xxhdpi/ic_mp_camera_large_light.png differ
diff --git a/res/drawable-xxhdpi/ic_mp_camera_small_light.png b/res/drawable-xxhdpi/ic_mp_camera_small_light.png
new file mode 100644
index 0000000..8012fce
Binary files /dev/null and b/res/drawable-xxhdpi/ic_mp_camera_small_light.png differ
diff --git a/res/drawable-xxhdpi/ic_mp_capture_stop_large_light.png b/res/drawable-xxhdpi/ic_mp_capture_stop_large_light.png
new file mode 100644
index 0000000..d34667a
Binary files /dev/null and b/res/drawable-xxhdpi/ic_mp_capture_stop_large_light.png differ
diff --git a/res/drawable-xxhdpi/ic_mp_full_screen_light.png b/res/drawable-xxhdpi/ic_mp_full_screen_light.png
new file mode 100644
index 0000000..483a1a3
Binary files /dev/null and b/res/drawable-xxhdpi/ic_mp_full_screen_light.png differ
diff --git a/res/drawable-xxhdpi/ic_mp_video_large_light.png b/res/drawable-xxhdpi/ic_mp_video_large_light.png
new file mode 100644
index 0000000..0a34b5e
Binary files /dev/null and b/res/drawable-xxhdpi/ic_mp_video_large_light.png differ
diff --git a/res/drawable-xxhdpi/ic_mp_video_small_light.png b/res/drawable-xxhdpi/ic_mp_video_small_light.png
new file mode 100644
index 0000000..1cb7798
Binary files /dev/null and b/res/drawable-xxhdpi/ic_mp_video_small_light.png differ
diff --git a/res/drawable-xxhdpi/ic_notifications_off_dark.png b/res/drawable-xxhdpi/ic_notifications_off_dark.png
new file mode 100644
index 0000000..27d3754
Binary files /dev/null and b/res/drawable-xxhdpi/ic_notifications_off_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_notifications_off_light.png b/res/drawable-xxhdpi/ic_notifications_off_light.png
new file mode 100644
index 0000000..a2aedec
Binary files /dev/null and b/res/drawable-xxhdpi/ic_notifications_off_light.png differ
diff --git a/res/drawable-xxhdpi/ic_notifications_off_small_light.png b/res/drawable-xxhdpi/ic_notifications_off_small_light.png
new file mode 100644
index 0000000..2a90e07
Binary files /dev/null and b/res/drawable-xxhdpi/ic_notifications_off_small_light.png differ
diff --git a/res/drawable-xxhdpi/ic_notifications_on_dark.png b/res/drawable-xxhdpi/ic_notifications_on_dark.png
new file mode 100644
index 0000000..e64da6b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_notifications_on_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_notifications_on_light.png b/res/drawable-xxhdpi/ic_notifications_on_light.png
new file mode 100644
index 0000000..f8f7d15
Binary files /dev/null and b/res/drawable-xxhdpi/ic_notifications_on_light.png differ
diff --git a/res/drawable-xxhdpi/ic_numeric_dialpad.png b/res/drawable-xxhdpi/ic_numeric_dialpad.png
new file mode 100644
index 0000000..a0d9e5e
Binary files /dev/null and b/res/drawable-xxhdpi/ic_numeric_dialpad.png differ
diff --git a/res/drawable-xxhdpi/ic_oobe_conv_list.png b/res/drawable-xxhdpi/ic_oobe_conv_list.png
new file mode 100644
index 0000000..f6fcde1
Binary files /dev/null and b/res/drawable-xxhdpi/ic_oobe_conv_list.png differ
diff --git a/res/drawable-xxhdpi/ic_oobe_freq_list.png b/res/drawable-xxhdpi/ic_oobe_freq_list.png
new file mode 100644
index 0000000..4d7543d
Binary files /dev/null and b/res/drawable-xxhdpi/ic_oobe_freq_list.png differ
diff --git a/res/drawable-xxhdpi/ic_open_in_new.png b/res/drawable-xxhdpi/ic_open_in_new.png
new file mode 100644
index 0000000..9109fa4
Binary files /dev/null and b/res/drawable-xxhdpi/ic_open_in_new.png differ
diff --git a/res/drawable-xxhdpi/ic_people_add_light.png b/res/drawable-xxhdpi/ic_people_add_light.png
new file mode 100644
index 0000000..915b91d
Binary files /dev/null and b/res/drawable-xxhdpi/ic_people_add_light.png differ
diff --git a/res/drawable-xxhdpi/ic_person_add_blue.png b/res/drawable-xxhdpi/ic_person_add_blue.png
new file mode 100644
index 0000000..10aa345
Binary files /dev/null and b/res/drawable-xxhdpi/ic_person_add_blue.png differ
diff --git a/res/drawable-xxhdpi/ic_person_add_dark.png b/res/drawable-xxhdpi/ic_person_add_dark.png
new file mode 100644
index 0000000..1d9bb20
Binary files /dev/null and b/res/drawable-xxhdpi/ic_person_add_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_person_add_light.png b/res/drawable-xxhdpi/ic_person_add_light.png
new file mode 100644
index 0000000..5a17f08
Binary files /dev/null and b/res/drawable-xxhdpi/ic_person_add_light.png differ
diff --git a/res/drawable-xxhdpi/ic_person_light.png b/res/drawable-xxhdpi/ic_person_light.png
new file mode 100644
index 0000000..adab957
Binary files /dev/null and b/res/drawable-xxhdpi/ic_person_light.png differ
diff --git a/res/drawable-xxhdpi/ic_person_light_large.png b/res/drawable-xxhdpi/ic_person_light_large.png
new file mode 100644
index 0000000..3cf214f
Binary files /dev/null and b/res/drawable-xxhdpi/ic_person_light_large.png differ
diff --git a/res/drawable-xxhdpi/ic_phone_small_light.png b/res/drawable-xxhdpi/ic_phone_small_light.png
new file mode 100644
index 0000000..8d7c25f
Binary files /dev/null and b/res/drawable-xxhdpi/ic_phone_small_light.png differ
diff --git a/res/drawable-xxhdpi/ic_photo_library_light.png b/res/drawable-xxhdpi/ic_photo_library_light.png
new file mode 100644
index 0000000..f61bb58
Binary files /dev/null and b/res/drawable-xxhdpi/ic_photo_library_light.png differ
diff --git a/res/drawable-xxhdpi/ic_preview_pause.png b/res/drawable-xxhdpi/ic_preview_pause.png
new file mode 100644
index 0000000..4785e1b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_preview_pause.png differ
diff --git a/res/drawable-xxhdpi/ic_preview_play.png b/res/drawable-xxhdpi/ic_preview_play.png
new file mode 100644
index 0000000..3120cd1
Binary files /dev/null and b/res/drawable-xxhdpi/ic_preview_play.png differ
diff --git a/res/drawable-xxhdpi/ic_remove_light.png b/res/drawable-xxhdpi/ic_remove_light.png
new file mode 100644
index 0000000..25bcc74
Binary files /dev/null and b/res/drawable-xxhdpi/ic_remove_light.png differ
diff --git a/res/drawable-xxhdpi/ic_remove_small_light.png b/res/drawable-xxhdpi/ic_remove_small_light.png
new file mode 100644
index 0000000..c69e993
Binary files /dev/null and b/res/drawable-xxhdpi/ic_remove_small_light.png differ
diff --git a/res/drawable-xxhdpi/ic_save_dark.png b/res/drawable-xxhdpi/ic_save_dark.png
new file mode 100644
index 0000000..8267484
Binary files /dev/null and b/res/drawable-xxhdpi/ic_save_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_save_light.png b/res/drawable-xxhdpi/ic_save_light.png
new file mode 100644
index 0000000..4b944cf
Binary files /dev/null and b/res/drawable-xxhdpi/ic_save_light.png differ
diff --git a/res/drawable-xxhdpi/ic_search_light.png b/res/drawable-xxhdpi/ic_search_light.png
new file mode 100644
index 0000000..97d77d6
Binary files /dev/null and b/res/drawable-xxhdpi/ic_search_light.png differ
diff --git a/res/drawable-xxhdpi/ic_send_dark.png b/res/drawable-xxhdpi/ic_send_dark.png
new file mode 100644
index 0000000..44729b1
Binary files /dev/null and b/res/drawable-xxhdpi/ic_send_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_send_light.png b/res/drawable-xxhdpi/ic_send_light.png
new file mode 100644
index 0000000..a1a6cab
Binary files /dev/null and b/res/drawable-xxhdpi/ic_send_light.png differ
diff --git a/res/drawable-xxhdpi/ic_share_dark.png b/res/drawable-xxhdpi/ic_share_dark.png
new file mode 100644
index 0000000..790670a
Binary files /dev/null and b/res/drawable-xxhdpi/ic_share_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_share_light.png b/res/drawable-xxhdpi/ic_share_light.png
new file mode 100644
index 0000000..880c6a2
Binary files /dev/null and b/res/drawable-xxhdpi/ic_share_light.png differ
diff --git a/res/drawable-xxhdpi/ic_sim_card_send.png b/res/drawable-xxhdpi/ic_sim_card_send.png
new file mode 100644
index 0000000..8eae7c3
Binary files /dev/null and b/res/drawable-xxhdpi/ic_sim_card_send.png differ
diff --git a/res/drawable-xxhdpi/ic_sms_delivery_ok.png b/res/drawable-xxhdpi/ic_sms_delivery_ok.png
new file mode 100644
index 0000000..2c8c9b0
Binary files /dev/null and b/res/drawable-xxhdpi/ic_sms_delivery_ok.png differ
diff --git a/res/drawable-xxhdpi/ic_sms_failed_light.png b/res/drawable-xxhdpi/ic_sms_failed_light.png
new file mode 100644
index 0000000..5da454b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_sms_failed_light.png differ
diff --git a/res/drawable-xxhdpi/ic_sms_light.png b/res/drawable-xxhdpi/ic_sms_light.png
new file mode 100644
index 0000000..7a8b491
Binary files /dev/null and b/res/drawable-xxhdpi/ic_sms_light.png differ
diff --git a/res/drawable-xxhdpi/ic_sms_multi_light.png b/res/drawable-xxhdpi/ic_sms_multi_light.png
new file mode 100644
index 0000000..6496cb8
Binary files /dev/null and b/res/drawable-xxhdpi/ic_sms_multi_light.png differ
diff --git a/res/drawable-xxhdpi/ic_tooltip_arrow.png b/res/drawable-xxhdpi/ic_tooltip_arrow.png
new file mode 100644
index 0000000..72f1c5b
Binary files /dev/null and b/res/drawable-xxhdpi/ic_tooltip_arrow.png differ
diff --git a/res/drawable-xxhdpi/ic_video_play_light.png b/res/drawable-xxhdpi/ic_video_play_light.png
new file mode 100644
index 0000000..f49c653
Binary files /dev/null and b/res/drawable-xxhdpi/ic_video_play_light.png differ
diff --git a/res/drawable-xxhdpi/ic_wear_reply.png b/res/drawable-xxhdpi/ic_wear_reply.png
new file mode 100644
index 0000000..0790ee8
Binary files /dev/null and b/res/drawable-xxhdpi/ic_wear_reply.png differ
diff --git a/res/drawable-xxhdpi/ic_widget_avatar_shadow.png b/res/drawable-xxhdpi/ic_widget_avatar_shadow.png
new file mode 100644
index 0000000..ea4e26d
Binary files /dev/null and b/res/drawable-xxhdpi/ic_widget_avatar_shadow.png differ
diff --git a/res/drawable-xxhdpi/ic_widget_list.png b/res/drawable-xxhdpi/ic_widget_list.png
new file mode 100644
index 0000000..c370ee8
Binary files /dev/null and b/res/drawable-xxhdpi/ic_widget_list.png differ
diff --git a/res/drawable-xxhdpi/msg_bubble_error.9.png b/res/drawable-xxhdpi/msg_bubble_error.9.png
new file mode 100644
index 0000000..f8bdc96
Binary files /dev/null and b/res/drawable-xxhdpi/msg_bubble_error.9.png differ
diff --git a/res/drawable-xxhdpi/msg_bubble_incoming.9.png b/res/drawable-xxhdpi/msg_bubble_incoming.9.png
new file mode 100644
index 0000000..ab693b3
Binary files /dev/null and b/res/drawable-xxhdpi/msg_bubble_incoming.9.png differ
diff --git a/res/drawable-xxhdpi/msg_bubble_input.9.png b/res/drawable-xxhdpi/msg_bubble_input.9.png
new file mode 100644
index 0000000..de41ef4
Binary files /dev/null and b/res/drawable-xxhdpi/msg_bubble_input.9.png differ
diff --git a/res/drawable-xxhdpi/msg_bubble_outgoing.9.png b/res/drawable-xxhdpi/msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..5b2a2ff
Binary files /dev/null and b/res/drawable-xxhdpi/msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-xxhdpi/permissions.png b/res/drawable-xxhdpi/permissions.png
new file mode 100644
index 0000000..fd61476
Binary files /dev/null and b/res/drawable-xxhdpi/permissions.png differ
diff --git a/res/drawable-xxhdpi/swipe_shadow.9.png b/res/drawable-xxhdpi/swipe_shadow.9.png
new file mode 100644
index 0000000..0491faa
Binary files /dev/null and b/res/drawable-xxhdpi/swipe_shadow.9.png differ
diff --git a/res/drawable-xxhdpi/swipe_shadow_drag.9.png b/res/drawable-xxhdpi/swipe_shadow_drag.9.png
new file mode 100644
index 0000000..0153c5b
Binary files /dev/null and b/res/drawable-xxhdpi/swipe_shadow_drag.9.png differ
diff --git a/res/drawable-xxhdpi/sym_keyboard_delete_holo.png b/res/drawable-xxhdpi/sym_keyboard_delete_holo.png
new file mode 100644
index 0000000..f2adbec
Binary files /dev/null and b/res/drawable-xxhdpi/sym_keyboard_delete_holo.png differ
diff --git a/res/drawable-xxhdpi/tab_btn_bg_normal.9.png b/res/drawable-xxhdpi/tab_btn_bg_normal.9.png
new file mode 100644
index 0000000..9f3a0f9
Binary files /dev/null and b/res/drawable-xxhdpi/tab_btn_bg_normal.9.png differ
diff --git a/res/drawable-xxhdpi/tab_btn_bg_pressed.9.png b/res/drawable-xxhdpi/tab_btn_bg_pressed.9.png
new file mode 100644
index 0000000..53f226e
Binary files /dev/null and b/res/drawable-xxhdpi/tab_btn_bg_pressed.9.png differ
diff --git a/res/drawable-xxhdpi/tab_selected.9.png b/res/drawable-xxhdpi/tab_selected.9.png
new file mode 100644
index 0000000..e5efc58
Binary files /dev/null and b/res/drawable-xxhdpi/tab_selected.9.png differ
diff --git a/res/drawable-xxhdpi/tab_selected_focused_holo.9.png b/res/drawable-xxhdpi/tab_selected_focused_holo.9.png
new file mode 100644
index 0000000..8762b9e
Binary files /dev/null and b/res/drawable-xxhdpi/tab_selected_focused_holo.9.png differ
diff --git a/res/drawable-xxhdpi/tab_selected_pressed_focused_holo.9.png b/res/drawable-xxhdpi/tab_selected_pressed_focused_holo.9.png
new file mode 100644
index 0000000..8faa7ff
Binary files /dev/null and b/res/drawable-xxhdpi/tab_selected_pressed_focused_holo.9.png differ
diff --git a/res/drawable-xxhdpi/tab_selected_pressed_holo.9.png b/res/drawable-xxhdpi/tab_selected_pressed_holo.9.png
new file mode 100644
index 0000000..c7a539b
Binary files /dev/null and b/res/drawable-xxhdpi/tab_selected_pressed_holo.9.png differ
diff --git a/res/drawable-xxhdpi/tab_unselected.9.png b/res/drawable-xxhdpi/tab_unselected.9.png
new file mode 100644
index 0000000..3891886
Binary files /dev/null and b/res/drawable-xxhdpi/tab_unselected.9.png differ
diff --git a/res/drawable-xxhdpi/tab_unselected_focused_holo.9.png b/res/drawable-xxhdpi/tab_unselected_focused_holo.9.png
new file mode 100644
index 0000000..462ab15
Binary files /dev/null and b/res/drawable-xxhdpi/tab_unselected_focused_holo.9.png differ
diff --git a/res/drawable-xxhdpi/tab_unselected_pressed_focused_holo.9.png b/res/drawable-xxhdpi/tab_unselected_pressed_focused_holo.9.png
new file mode 100644
index 0000000..58ddbe8
Binary files /dev/null and b/res/drawable-xxhdpi/tab_unselected_pressed_focused_holo.9.png differ
diff --git a/res/drawable-xxhdpi/tab_unselected_pressed_holo.9.png b/res/drawable-xxhdpi/tab_unselected_pressed_holo.9.png
new file mode 100644
index 0000000..de61933
Binary files /dev/null and b/res/drawable-xxhdpi/tab_unselected_pressed_holo.9.png differ
diff --git a/res/drawable-xxhdpi/widget_hr.9.png b/res/drawable-xxhdpi/widget_hr.9.png
new file mode 100644
index 0000000..375272b
Binary files /dev/null and b/res/drawable-xxhdpi/widget_hr.9.png differ
diff --git a/res/drawable-xxhdpi/widget_msg_bubble_incoming.9.png b/res/drawable-xxhdpi/widget_msg_bubble_incoming.9.png
new file mode 100644
index 0000000..5093c23
Binary files /dev/null and b/res/drawable-xxhdpi/widget_msg_bubble_incoming.9.png differ
diff --git a/res/drawable-xxhdpi/widget_msg_bubble_outgoing.9.png b/res/drawable-xxhdpi/widget_msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..6ae5608
Binary files /dev/null and b/res/drawable-xxhdpi/widget_msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-xxxhdpi/btn_keyboard_key_dark_normal_holo.9.png b/res/drawable-xxxhdpi/btn_keyboard_key_dark_normal_holo.9.png
new file mode 100644
index 0000000..65cd55e
Binary files /dev/null and b/res/drawable-xxxhdpi/btn_keyboard_key_dark_normal_holo.9.png differ
diff --git a/res/drawable-xxxhdpi/btn_keyboard_key_dark_pressed_holo.9.png b/res/drawable-xxxhdpi/btn_keyboard_key_dark_pressed_holo.9.png
new file mode 100644
index 0000000..b6cac56
Binary files /dev/null and b/res/drawable-xxxhdpi/btn_keyboard_key_dark_pressed_holo.9.png differ
diff --git a/res/drawable-xxxhdpi/btn_keyboard_key_light_normal_holo.9.png b/res/drawable-xxxhdpi/btn_keyboard_key_light_normal_holo.9.png
new file mode 100644
index 0000000..f017e03
Binary files /dev/null and b/res/drawable-xxxhdpi/btn_keyboard_key_light_normal_holo.9.png differ
diff --git a/res/drawable-xxxhdpi/btn_keyboard_key_light_pressed_holo.9.png b/res/drawable-xxxhdpi/btn_keyboard_key_light_pressed_holo.9.png
new file mode 100644
index 0000000..025e694
Binary files /dev/null and b/res/drawable-xxxhdpi/btn_keyboard_key_light_pressed_holo.9.png differ
diff --git a/res/drawable-xxxhdpi/cab_bg.9.png b/res/drawable-xxxhdpi/cab_bg.9.png
new file mode 100644
index 0000000..978cfad
Binary files /dev/null and b/res/drawable-xxxhdpi/cab_bg.9.png differ
diff --git a/res/drawable-xxxhdpi/contact_popup_background.9.png b/res/drawable-xxxhdpi/contact_popup_background.9.png
new file mode 100644
index 0000000..30919fa
Binary files /dev/null and b/res/drawable-xxxhdpi/contact_popup_background.9.png differ
diff --git a/res/drawable-xxxhdpi/fab_new_message_static_shadow.png b/res/drawable-xxxhdpi/fab_new_message_static_shadow.png
new file mode 100644
index 0000000..e1d16a6
Binary files /dev/null and b/res/drawable-xxxhdpi/fab_new_message_static_shadow.png differ
diff --git a/res/drawable-xxxhdpi/ic_add_white.png b/res/drawable-xxxhdpi/ic_add_white.png
new file mode 100644
index 0000000..0ed23b1
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_add_white.png differ
diff --git a/res/drawable-xxxhdpi/ic_archive_small_dark.png b/res/drawable-xxxhdpi/ic_archive_small_dark.png
new file mode 100644
index 0000000..c380363
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_archive_small_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_archive_small_light.png b/res/drawable-xxxhdpi/ic_archive_small_light.png
new file mode 100644
index 0000000..59ffef9
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_archive_small_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_archive_undo_small_dark.png b/res/drawable-xxxhdpi/ic_archive_undo_small_dark.png
new file mode 100644
index 0000000..b2e4f8b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_archive_undo_small_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_archive_undo_small_light.png b/res/drawable-xxxhdpi/ic_archive_undo_small_light.png
new file mode 100644
index 0000000..46fd7d8
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_archive_undo_small_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_arrow_back_dark.png b/res/drawable-xxxhdpi/ic_arrow_back_dark.png
new file mode 100644
index 0000000..e7a9c81
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_arrow_back_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_arrow_back_light.png b/res/drawable-xxxhdpi/ic_arrow_back_light.png
new file mode 100644
index 0000000..54a5687
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_arrow_back_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_attachment_dark.png b/res/drawable-xxxhdpi/ic_attachment_dark.png
new file mode 100644
index 0000000..7cf871a
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_attachment_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_audio_light.png b/res/drawable-xxxhdpi/ic_audio_light.png
new file mode 100644
index 0000000..768ac89
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_audio_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_audio_pause.png b/res/drawable-xxxhdpi/ic_audio_pause.png
new file mode 100644
index 0000000..f7ae29f
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_audio_pause.png differ
diff --git a/res/drawable-xxxhdpi/ic_audio_play.png b/res/drawable-xxxhdpi/ic_audio_play.png
new file mode 100644
index 0000000..71f21e7
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_audio_play.png differ
diff --git a/res/drawable-xxxhdpi/ic_camera_front_light.png b/res/drawable-xxxhdpi/ic_camera_front_light.png
new file mode 100644
index 0000000..3af175b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_camera_front_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_camera_light.png b/res/drawable-xxxhdpi/ic_camera_light.png
new file mode 100644
index 0000000..c3484b6
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_camera_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_camera_rear_light.png b/res/drawable-xxxhdpi/ic_camera_rear_light.png
new file mode 100644
index 0000000..c59b65b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_camera_rear_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_cancel_small_dark.png b/res/drawable-xxxhdpi/ic_cancel_small_dark.png
new file mode 100644
index 0000000..f454d2a
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_cancel_small_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_cancel_small_light.png b/res/drawable-xxxhdpi/ic_cancel_small_light.png
new file mode 100644
index 0000000..cce1904
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_cancel_small_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_checkbox_blank_light.png b/res/drawable-xxxhdpi/ic_checkbox_blank_light.png
new file mode 100644
index 0000000..ad983af
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_checkbox_blank_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_checkbox_light.png b/res/drawable-xxxhdpi/ic_checkbox_light.png
new file mode 100644
index 0000000..c8e8b79
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_checkbox_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_checkbox_outline_light.png b/res/drawable-xxxhdpi/ic_checkbox_outline_light.png
new file mode 100644
index 0000000..eb0a803
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_checkbox_outline_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_checkmark_circle_blue.png b/res/drawable-xxxhdpi/ic_checkmark_circle_blue.png
new file mode 100644
index 0000000..7bb1501
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_checkmark_circle_blue.png differ
diff --git a/res/drawable-xxxhdpi/ic_checkmark_large.png b/res/drawable-xxxhdpi/ic_checkmark_large.png
new file mode 100644
index 0000000..8119ff2
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_checkmark_large.png differ
diff --git a/res/drawable-xxxhdpi/ic_checkmark_large_light.png b/res/drawable-xxxhdpi/ic_checkmark_large_light.png
new file mode 100644
index 0000000..dddac27
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_checkmark_large_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_checkmark_small_blue.png b/res/drawable-xxxhdpi/ic_checkmark_small_blue.png
new file mode 100644
index 0000000..3199069
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_checkmark_small_blue.png differ
diff --git a/res/drawable-xxxhdpi/ic_checkmark_small_light.png b/res/drawable-xxxhdpi/ic_checkmark_small_light.png
new file mode 100644
index 0000000..380f4e8
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_checkmark_small_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_color_lens.png b/res/drawable-xxxhdpi/ic_color_lens.png
new file mode 100644
index 0000000..5c71071
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_color_lens.png differ
diff --git a/res/drawable-xxxhdpi/ic_content_copy_dark.png b/res/drawable-xxxhdpi/ic_content_copy_dark.png
new file mode 100644
index 0000000..24dc390
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_content_copy_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_crying_hero.png b/res/drawable-xxxhdpi/ic_crying_hero.png
new file mode 100644
index 0000000..0a428c9
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_crying_hero.png differ
diff --git a/res/drawable-xxxhdpi/ic_delete_small_dark.png b/res/drawable-xxxhdpi/ic_delete_small_dark.png
new file mode 100644
index 0000000..497e7a7
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_delete_small_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_delete_small_light.png b/res/drawable-xxxhdpi/ic_delete_small_light.png
new file mode 100644
index 0000000..d8a661f
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_delete_small_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_dnd_on_dark.png b/res/drawable-xxxhdpi/ic_dnd_on_dark.png
new file mode 100644
index 0000000..de2f17b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_dnd_on_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_dnd_on_light.png b/res/drawable-xxxhdpi/ic_dnd_on_light.png
new file mode 100644
index 0000000..7851985
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_dnd_on_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_failed_light.png b/res/drawable-xxxhdpi/ic_failed_light.png
new file mode 100644
index 0000000..53d374c
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_failed_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_failed_status_red.png b/res/drawable-xxxhdpi/ic_failed_status_red.png
new file mode 100644
index 0000000..ee1ed24
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_failed_status_red.png differ
diff --git a/res/drawable-xxxhdpi/ic_file_download_dark.png b/res/drawable-xxxhdpi/ic_file_download_dark.png
new file mode 100644
index 0000000..0012e5e
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_file_download_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_file_download_light.png b/res/drawable-xxxhdpi/ic_file_download_light.png
new file mode 100644
index 0000000..6d7ca08
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_file_download_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_forward_dark.png b/res/drawable-xxxhdpi/ic_forward_dark.png
new file mode 100644
index 0000000..6408fb9
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_forward_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_history_light.png b/res/drawable-xxxhdpi/ic_history_light.png
new file mode 100644
index 0000000..7ff42b7
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_history_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_image_light.png b/res/drawable-xxxhdpi/ic_image_light.png
new file mode 100644
index 0000000..0d229e2
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_image_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_ime_dark.png b/res/drawable-xxxhdpi/ic_ime_dark.png
new file mode 100644
index 0000000..7c051df
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_ime_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_ime_light.png b/res/drawable-xxxhdpi/ic_ime_light.png
new file mode 100644
index 0000000..031d086
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_ime_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_info_dark.png b/res/drawable-xxxhdpi/ic_info_dark.png
new file mode 100644
index 0000000..107385b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_info_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_keyboard_arrow_left_light.png b/res/drawable-xxxhdpi/ic_keyboard_arrow_left_light.png
new file mode 100644
index 0000000..3737fec
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_keyboard_arrow_left_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_keyboard_arrow_right_light.png b/res/drawable-xxxhdpi/ic_keyboard_arrow_right_light.png
new file mode 100644
index 0000000..85d005b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_keyboard_arrow_right_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_launcher.png b/res/drawable-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..0d61198
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_launcher.png differ
diff --git a/res/drawable-xxxhdpi/ic_mp_audio_mic.png b/res/drawable-xxxhdpi/ic_mp_audio_mic.png
new file mode 100644
index 0000000..9f51c4b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_mp_audio_mic.png differ
diff --git a/res/drawable-xxxhdpi/ic_mp_camera_large_light.png b/res/drawable-xxxhdpi/ic_mp_camera_large_light.png
new file mode 100644
index 0000000..f915989
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_mp_camera_large_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_mp_camera_small_light.png b/res/drawable-xxxhdpi/ic_mp_camera_small_light.png
new file mode 100644
index 0000000..d6d8c9d
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_mp_camera_small_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_mp_capture_stop_large_light.png b/res/drawable-xxxhdpi/ic_mp_capture_stop_large_light.png
new file mode 100644
index 0000000..30e725f
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_mp_capture_stop_large_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_mp_full_screen_light.png b/res/drawable-xxxhdpi/ic_mp_full_screen_light.png
new file mode 100644
index 0000000..4860109
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_mp_full_screen_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_mp_video_large_light.png b/res/drawable-xxxhdpi/ic_mp_video_large_light.png
new file mode 100644
index 0000000..32c4317
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_mp_video_large_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_mp_video_small_light.png b/res/drawable-xxxhdpi/ic_mp_video_small_light.png
new file mode 100644
index 0000000..6d2a14b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_mp_video_small_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_notifications_off_dark.png b/res/drawable-xxxhdpi/ic_notifications_off_dark.png
new file mode 100644
index 0000000..10ac318
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_notifications_off_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_notifications_off_light.png b/res/drawable-xxxhdpi/ic_notifications_off_light.png
new file mode 100644
index 0000000..8eb5782
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_notifications_off_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_notifications_off_small_light.png b/res/drawable-xxxhdpi/ic_notifications_off_small_light.png
new file mode 100644
index 0000000..3756943
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_notifications_off_small_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_notifications_on_dark.png b/res/drawable-xxxhdpi/ic_notifications_on_dark.png
new file mode 100644
index 0000000..3896212
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_notifications_on_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_notifications_on_light.png b/res/drawable-xxxhdpi/ic_notifications_on_light.png
new file mode 100644
index 0000000..47794fd
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_notifications_on_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_numeric_dialpad.png b/res/drawable-xxxhdpi/ic_numeric_dialpad.png
new file mode 100644
index 0000000..5e0986c
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_numeric_dialpad.png differ
diff --git a/res/drawable-xxxhdpi/ic_oobe_conv_list.png b/res/drawable-xxxhdpi/ic_oobe_conv_list.png
new file mode 100644
index 0000000..0decb23
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_oobe_conv_list.png differ
diff --git a/res/drawable-xxxhdpi/ic_oobe_freq_list.png b/res/drawable-xxxhdpi/ic_oobe_freq_list.png
new file mode 100644
index 0000000..4522cb6
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_oobe_freq_list.png differ
diff --git a/res/drawable-xxxhdpi/ic_open_in_new.png b/res/drawable-xxxhdpi/ic_open_in_new.png
new file mode 100644
index 0000000..6d6b59f
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_open_in_new.png differ
diff --git a/res/drawable-xxxhdpi/ic_people_add_light.png b/res/drawable-xxxhdpi/ic_people_add_light.png
new file mode 100644
index 0000000..5db76a9
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_people_add_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_person_add_blue.png b/res/drawable-xxxhdpi/ic_person_add_blue.png
new file mode 100644
index 0000000..b358660
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_person_add_blue.png differ
diff --git a/res/drawable-xxxhdpi/ic_person_add_dark.png b/res/drawable-xxxhdpi/ic_person_add_dark.png
new file mode 100644
index 0000000..37e252f
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_person_add_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_person_add_light.png b/res/drawable-xxxhdpi/ic_person_add_light.png
new file mode 100644
index 0000000..b279246
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_person_add_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_person_light.png b/res/drawable-xxxhdpi/ic_person_light.png
new file mode 100644
index 0000000..59853fc
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_person_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_person_light_large.png b/res/drawable-xxxhdpi/ic_person_light_large.png
new file mode 100644
index 0000000..44d4809
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_person_light_large.png differ
diff --git a/res/drawable-xxxhdpi/ic_phone_small_light.png b/res/drawable-xxxhdpi/ic_phone_small_light.png
new file mode 100644
index 0000000..433e4a7
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_phone_small_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_photo_library_light.png b/res/drawable-xxxhdpi/ic_photo_library_light.png
new file mode 100644
index 0000000..8627f42
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_photo_library_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_preview_pause.png b/res/drawable-xxxhdpi/ic_preview_pause.png
new file mode 100644
index 0000000..2ba4fe2
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_preview_pause.png differ
diff --git a/res/drawable-xxxhdpi/ic_preview_play.png b/res/drawable-xxxhdpi/ic_preview_play.png
new file mode 100644
index 0000000..f44f572
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_preview_play.png differ
diff --git a/res/drawable-xxxhdpi/ic_remove_light.png b/res/drawable-xxxhdpi/ic_remove_light.png
new file mode 100644
index 0000000..b9288bf
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_remove_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_remove_small_light.png b/res/drawable-xxxhdpi/ic_remove_small_light.png
new file mode 100644
index 0000000..0e0cb05
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_remove_small_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_save_dark.png b/res/drawable-xxxhdpi/ic_save_dark.png
new file mode 100644
index 0000000..2819de2
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_save_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_save_light.png b/res/drawable-xxxhdpi/ic_save_light.png
new file mode 100644
index 0000000..ba7564b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_save_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_search_light.png b/res/drawable-xxxhdpi/ic_search_light.png
new file mode 100644
index 0000000..b38785a
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_search_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_send_dark.png b/res/drawable-xxxhdpi/ic_send_dark.png
new file mode 100644
index 0000000..5f52b29
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_send_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_send_light.png b/res/drawable-xxxhdpi/ic_send_light.png
new file mode 100644
index 0000000..b4e8563
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_send_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_share_dark.png b/res/drawable-xxxhdpi/ic_share_dark.png
new file mode 100644
index 0000000..a6ddd2d
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_share_dark.png differ
diff --git a/res/drawable-xxxhdpi/ic_share_light.png b/res/drawable-xxxhdpi/ic_share_light.png
new file mode 100644
index 0000000..ac63637
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_share_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_sim_card_send.png b/res/drawable-xxxhdpi/ic_sim_card_send.png
new file mode 100644
index 0000000..0db661b
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_sim_card_send.png differ
diff --git a/res/drawable-xxxhdpi/ic_sms_delivery_ok.png b/res/drawable-xxxhdpi/ic_sms_delivery_ok.png
new file mode 100644
index 0000000..487525d
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_sms_delivery_ok.png differ
diff --git a/res/drawable-xxxhdpi/ic_sms_failed_light.png b/res/drawable-xxxhdpi/ic_sms_failed_light.png
new file mode 100644
index 0000000..2daf2ae
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_sms_failed_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_sms_light.png b/res/drawable-xxxhdpi/ic_sms_light.png
new file mode 100644
index 0000000..98d1bc8
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_sms_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_sms_multi_light.png b/res/drawable-xxxhdpi/ic_sms_multi_light.png
new file mode 100644
index 0000000..e2f4bfc
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_sms_multi_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_tooltip_arrow.png b/res/drawable-xxxhdpi/ic_tooltip_arrow.png
new file mode 100644
index 0000000..84b03ad
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_tooltip_arrow.png differ
diff --git a/res/drawable-xxxhdpi/ic_video_play_light.png b/res/drawable-xxxhdpi/ic_video_play_light.png
new file mode 100644
index 0000000..9192f84
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_video_play_light.png differ
diff --git a/res/drawable-xxxhdpi/ic_wear_reply.png b/res/drawable-xxxhdpi/ic_wear_reply.png
new file mode 100644
index 0000000..34065f6
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_wear_reply.png differ
diff --git a/res/drawable-xxxhdpi/ic_widget_avatar_shadow.png b/res/drawable-xxxhdpi/ic_widget_avatar_shadow.png
new file mode 100644
index 0000000..83d02ce
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_widget_avatar_shadow.png differ
diff --git a/res/drawable-xxxhdpi/ic_widget_list.png b/res/drawable-xxxhdpi/ic_widget_list.png
new file mode 100644
index 0000000..f316487
Binary files /dev/null and b/res/drawable-xxxhdpi/ic_widget_list.png differ
diff --git a/res/drawable-xxxhdpi/msg_bubble_error.9.png b/res/drawable-xxxhdpi/msg_bubble_error.9.png
new file mode 100644
index 0000000..fb8161c
Binary files /dev/null and b/res/drawable-xxxhdpi/msg_bubble_error.9.png differ
diff --git a/res/drawable-xxxhdpi/msg_bubble_incoming.9.png b/res/drawable-xxxhdpi/msg_bubble_incoming.9.png
new file mode 100644
index 0000000..34130fc
Binary files /dev/null and b/res/drawable-xxxhdpi/msg_bubble_incoming.9.png differ
diff --git a/res/drawable-xxxhdpi/msg_bubble_input.9.png b/res/drawable-xxxhdpi/msg_bubble_input.9.png
new file mode 100644
index 0000000..d330459
Binary files /dev/null and b/res/drawable-xxxhdpi/msg_bubble_input.9.png differ
diff --git a/res/drawable-xxxhdpi/msg_bubble_outgoing.9.png b/res/drawable-xxxhdpi/msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..cfd5734
Binary files /dev/null and b/res/drawable-xxxhdpi/msg_bubble_outgoing.9.png differ
diff --git a/res/drawable-xxxhdpi/permissions.png b/res/drawable-xxxhdpi/permissions.png
new file mode 100644
index 0000000..2a7a0d7
Binary files /dev/null and b/res/drawable-xxxhdpi/permissions.png differ
diff --git a/res/drawable-xxxhdpi/swipe_shadow.9.png b/res/drawable-xxxhdpi/swipe_shadow.9.png
new file mode 100644
index 0000000..4726ef4
Binary files /dev/null and b/res/drawable-xxxhdpi/swipe_shadow.9.png differ
diff --git a/res/drawable-xxxhdpi/swipe_shadow_drag.9.png b/res/drawable-xxxhdpi/swipe_shadow_drag.9.png
new file mode 100644
index 0000000..d48e311
Binary files /dev/null and b/res/drawable-xxxhdpi/swipe_shadow_drag.9.png differ
diff --git a/res/drawable-xxxhdpi/sym_keyboard_delete_holo.png b/res/drawable-xxxhdpi/sym_keyboard_delete_holo.png
new file mode 100644
index 0000000..09af002
Binary files /dev/null and b/res/drawable-xxxhdpi/sym_keyboard_delete_holo.png differ
diff --git a/res/drawable-xxxhdpi/tab_btn_bg_normal.9.png b/res/drawable-xxxhdpi/tab_btn_bg_normal.9.png
new file mode 100644
index 0000000..1290a0d
Binary files /dev/null and b/res/drawable-xxxhdpi/tab_btn_bg_normal.9.png differ
diff --git a/res/drawable-xxxhdpi/tab_btn_bg_pressed.9.png b/res/drawable-xxxhdpi/tab_btn_bg_pressed.9.png
new file mode 100644
index 0000000..9fce798
Binary files /dev/null and b/res/drawable-xxxhdpi/tab_btn_bg_pressed.9.png differ
diff --git a/res/drawable-xxxhdpi/tab_selected.9.png b/res/drawable-xxxhdpi/tab_selected.9.png
new file mode 100644
index 0000000..5c20d4d
Binary files /dev/null and b/res/drawable-xxxhdpi/tab_selected.9.png differ
diff --git a/res/drawable-xxxhdpi/tab_selected_focused_holo.9.png b/res/drawable-xxxhdpi/tab_selected_focused_holo.9.png
new file mode 100644
index 0000000..33be972
Binary files /dev/null and b/res/drawable-xxxhdpi/tab_selected_focused_holo.9.png differ
diff --git a/res/drawable-xxxhdpi/tab_selected_pressed_focused_holo.9.png b/res/drawable-xxxhdpi/tab_selected_pressed_focused_holo.9.png
new file mode 100644
index 0000000..dc38a52
Binary files /dev/null and b/res/drawable-xxxhdpi/tab_selected_pressed_focused_holo.9.png differ
diff --git a/res/drawable-xxxhdpi/tab_selected_pressed_holo.9.png b/res/drawable-xxxhdpi/tab_selected_pressed_holo.9.png
new file mode 100644
index 0000000..e4518a8
Binary files /dev/null and b/res/drawable-xxxhdpi/tab_selected_pressed_holo.9.png differ
diff --git a/res/drawable-xxxhdpi/tab_unselected.9.png b/res/drawable-xxxhdpi/tab_unselected.9.png
new file mode 100644
index 0000000..9df735b
Binary files /dev/null and b/res/drawable-xxxhdpi/tab_unselected.9.png differ
diff --git a/res/drawable-xxxhdpi/tab_unselected_focused_holo.9.png b/res/drawable-xxxhdpi/tab_unselected_focused_holo.9.png
new file mode 100644
index 0000000..f01cfaf
Binary files /dev/null and b/res/drawable-xxxhdpi/tab_unselected_focused_holo.9.png differ
diff --git a/res/drawable-xxxhdpi/tab_unselected_pressed_focused_holo.9.png b/res/drawable-xxxhdpi/tab_unselected_pressed_focused_holo.9.png
new file mode 100644
index 0000000..7d85b20
Binary files /dev/null and b/res/drawable-xxxhdpi/tab_unselected_pressed_focused_holo.9.png differ
diff --git a/res/drawable-xxxhdpi/tab_unselected_pressed_holo.9.png b/res/drawable-xxxhdpi/tab_unselected_pressed_holo.9.png
new file mode 100644
index 0000000..0ace170
Binary files /dev/null and b/res/drawable-xxxhdpi/tab_unselected_pressed_holo.9.png differ
diff --git a/res/drawable-xxxhdpi/widget_hr.9.png b/res/drawable-xxxhdpi/widget_hr.9.png
new file mode 100644
index 0000000..80fdaf6
Binary files /dev/null and b/res/drawable-xxxhdpi/widget_hr.9.png differ
diff --git a/res/drawable-xxxhdpi/widget_msg_bubble_incoming.9.png b/res/drawable-xxxhdpi/widget_msg_bubble_incoming.9.png
new file mode 100644
index 0000000..383133e
Binary files /dev/null and b/res/drawable-xxxhdpi/widget_msg_bubble_incoming.9.png differ
diff --git a/res/drawable-xxxhdpi/widget_msg_bubble_outgoing.9.png b/res/drawable-xxxhdpi/widget_msg_bubble_outgoing.9.png
new file mode 100644
index 0000000..daf33b5
Binary files /dev/null and b/res/drawable-xxxhdpi/widget_msg_bubble_outgoing.9.png differ
diff --git a/res/drawable/attachment_audio_preview_background.xml b/res/drawable/attachment_audio_preview_background.xml
new file mode 100644
index 0000000..8b62415
--- /dev/null
+++ b/res/drawable/attachment_audio_preview_background.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/attachment_image_placeholder_background.xml b/res/drawable/attachment_image_placeholder_background.xml
new file mode 100644
index 0000000..b3315e8
--- /dev/null
+++ b/res/drawable/attachment_image_placeholder_background.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/attachment_more_items_background.xml b/res/drawable/attachment_more_items_background.xml
new file mode 100644
index 0000000..0ef8e61
--- /dev/null
+++ b/res/drawable/attachment_more_items_background.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/attachment_vcard_preview_background.xml b/res/drawable/attachment_vcard_preview_background.xml
new file mode 100644
index 0000000..8b62415
--- /dev/null
+++ b/res/drawable/attachment_vcard_preview_background.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/audio_progress_bar_background_incoming.xml b/res/drawable/audio_progress_bar_background_incoming.xml
new file mode 100644
index 0000000..990e1de
--- /dev/null
+++ b/res/drawable/audio_progress_bar_background_incoming.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/audio_progress_bar_background_outgoing.xml b/res/drawable/audio_progress_bar_background_outgoing.xml
new file mode 100644
index 0000000..351cf18
--- /dev/null
+++ b/res/drawable/audio_progress_bar_background_outgoing.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/audio_progress_bar_progress.xml b/res/drawable/audio_progress_bar_progress.xml
new file mode 100644
index 0000000..a70ff32
--- /dev/null
+++ b/res/drawable/audio_progress_bar_progress.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/audio_record_control_button_background.xml b/res/drawable/audio_record_control_button_background.xml
new file mode 100644
index 0000000..02f329e
--- /dev/null
+++ b/res/drawable/audio_record_control_button_background.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/chips_dropdown_background.xml b/res/drawable/chips_dropdown_background.xml
new file mode 100644
index 0000000..48a727d
--- /dev/null
+++ b/res/drawable/chips_dropdown_background.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/chips_dropdown_text_color.xml b/res/drawable/chips_dropdown_text_color.xml
new file mode 100644
index 0000000..5f06751
--- /dev/null
+++ b/res/drawable/chips_dropdown_text_color.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/compose_chips_divider_gradient.xml b/res/drawable/compose_chips_divider_gradient.xml
new file mode 100644
index 0000000..65c6601
--- /dev/null
+++ b/res/drawable/compose_chips_divider_gradient.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/contact_picker_tab_background_selector.xml b/res/drawable/contact_picker_tab_background_selector.xml
new file mode 100644
index 0000000..78c443b
--- /dev/null
+++ b/res/drawable/contact_picker_tab_background_selector.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/contacts_fastscroll_label_left.xml b/res/drawable/contacts_fastscroll_label_left.xml
new file mode 100644
index 0000000..5ed079a
--- /dev/null
+++ b/res/drawable/contacts_fastscroll_label_left.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/contacts_fastscroll_label_right.xml b/res/drawable/contacts_fastscroll_label_right.xml
new file mode 100644
index 0000000..67c4622
--- /dev/null
+++ b/res/drawable/contacts_fastscroll_label_right.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/conversation_compose_divider_gradient.xml b/res/drawable/conversation_compose_divider_gradient.xml
new file mode 100644
index 0000000..2c8a180
--- /dev/null
+++ b/res/drawable/conversation_compose_divider_gradient.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/default_image.xml b/res/drawable/default_image.xml
new file mode 100644
index 0000000..749e73b
--- /dev/null
+++ b/res/drawable/default_image.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/drawable/exit_button_bg.xml b/res/drawable/exit_button_bg.xml
new file mode 100644
index 0000000..9fa0fb2
--- /dev/null
+++ b/res/drawable/exit_button_bg.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
diff --git a/res/drawable/fab_new_message_bg.xml b/res/drawable/fab_new_message_bg.xml
new file mode 100644
index 0000000..741b4b5
--- /dev/null
+++ b/res/drawable/fab_new_message_bg.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/fastscroll_preview_left.xml b/res/drawable/fastscroll_preview_left.xml
new file mode 100644
index 0000000..165a222
--- /dev/null
+++ b/res/drawable/fastscroll_preview_left.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
diff --git a/res/drawable/fastscroll_preview_right.xml b/res/drawable/fastscroll_preview_right.xml
new file mode 100644
index 0000000..7c0dc09
--- /dev/null
+++ b/res/drawable/fastscroll_preview_right.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
diff --git a/res/drawable/fastscroll_thumb.xml b/res/drawable/fastscroll_thumb.xml
new file mode 100644
index 0000000..be7c96f
--- /dev/null
+++ b/res/drawable/fastscroll_thumb.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/res/drawable/fastscroll_thumb_pressed.xml b/res/drawable/fastscroll_thumb_pressed.xml
new file mode 100644
index 0000000..39de5a6
--- /dev/null
+++ b/res/drawable/fastscroll_thumb_pressed.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/res/drawable/fastscroll_track.xml b/res/drawable/fastscroll_track.xml
new file mode 100644
index 0000000..f3bf96d
--- /dev/null
+++ b/res/drawable/fastscroll_track.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/gallery_checkbox_selector.xml b/res/drawable/gallery_checkbox_selector.xml
new file mode 100644
index 0000000..cdd9734
--- /dev/null
+++ b/res/drawable/gallery_checkbox_selector.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/gallery_document_picker_item_background.xml b/res/drawable/gallery_document_picker_item_background.xml
new file mode 100644
index 0000000..4bbd7fe
--- /dev/null
+++ b/res/drawable/gallery_document_picker_item_background.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/gallery_image_background_selector.xml b/res/drawable/gallery_image_background_selector.xml
new file mode 100644
index 0000000..0b902fd
--- /dev/null
+++ b/res/drawable/gallery_image_background_selector.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/generic_video_icon.xml b/res/drawable/generic_video_icon.xml
new file mode 100644
index 0000000..e98cb94
--- /dev/null
+++ b/res/drawable/generic_video_icon.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/mediapicker_tab_button_background.xml b/res/drawable/mediapicker_tab_button_background.xml
new file mode 100644
index 0000000..08dbf5c
--- /dev/null
+++ b/res/drawable/mediapicker_tab_button_background.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/message_bubble_incoming_no_arrow.xml b/res/drawable/message_bubble_incoming_no_arrow.xml
new file mode 100644
index 0000000..d234508
--- /dev/null
+++ b/res/drawable/message_bubble_incoming_no_arrow.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/res/drawable/message_bubble_outgoing_no_arrow.xml b/res/drawable/message_bubble_outgoing_no_arrow.xml
new file mode 100644
index 0000000..d234508
--- /dev/null
+++ b/res/drawable/message_bubble_outgoing_no_arrow.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/res/drawable/send_arrow_background.xml b/res/drawable/send_arrow_background.xml
new file mode 100644
index 0000000..4434997
--- /dev/null
+++ b/res/drawable/send_arrow_background.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/sim_selector_background_gradient.xml b/res/drawable/sim_selector_background_gradient.xml
new file mode 100644
index 0000000..ea7e440
--- /dev/null
+++ b/res/drawable/sim_selector_background_gradient.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/stat_notify_chat.png b/res/drawable/stat_notify_chat.png
new file mode 100644
index 0000000..cc08e21
Binary files /dev/null and b/res/drawable/stat_notify_chat.png differ
diff --git a/res/drawable/subject_editor_bubble.xml b/res/drawable/subject_editor_bubble.xml
new file mode 100644
index 0000000..21f0248
--- /dev/null
+++ b/res/drawable/subject_editor_bubble.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/tab_btn_bg.xml b/res/drawable/tab_btn_bg.xml
new file mode 100644
index 0000000..f7f03dd
--- /dev/null
+++ b/res/drawable/tab_btn_bg.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
diff --git a/res/drawable/tab_indicator.xml b/res/drawable/tab_indicator.xml
new file mode 100644
index 0000000..28ecda3
--- /dev/null
+++ b/res/drawable/tab_indicator.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/drawable/transparent_button_background.xml b/res/drawable/transparent_button_background.xml
new file mode 100644
index 0000000..08dbf5c
--- /dev/null
+++ b/res/drawable/transparent_button_background.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/widget_bottom_background.xml b/res/drawable/widget_bottom_background.xml
new file mode 100644
index 0000000..198b2d6
--- /dev/null
+++ b/res/drawable/widget_bottom_background.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/drawable/widget_top_background.xml b/res/drawable/widget_top_background.xml
new file mode 100644
index 0000000..1476c95
--- /dev/null
+++ b/res/drawable/widget_top_background.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/action_bar_conversation_name.xml b/res/layout/action_bar_conversation_name.xml
new file mode 100644
index 0000000..586cf83
--- /dev/null
+++ b/res/layout/action_bar_conversation_name.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/add_contacts_confirmation_dialog_body.xml b/res/layout/add_contacts_confirmation_dialog_body.xml
new file mode 100644
index 0000000..07f3d0f
--- /dev/null
+++ b/res/layout/add_contacts_confirmation_dialog_body.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/all_contacts_list_view.xml b/res/layout/all_contacts_list_view.xml
new file mode 100644
index 0000000..fe05c4d
--- /dev/null
+++ b/res/layout/all_contacts_list_view.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/apn_preference_layout.xml b/res/layout/apn_preference_layout.xml
new file mode 100644
index 0000000..25a0323
--- /dev/null
+++ b/res/layout/apn_preference_layout.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/attachment_chooser_activity.xml b/res/layout/attachment_chooser_activity.xml
new file mode 100644
index 0000000..850716e
--- /dev/null
+++ b/res/layout/attachment_chooser_activity.xml
@@ -0,0 +1,22 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/attachment_chooser_audio.xml b/res/layout/attachment_chooser_audio.xml
new file mode 100644
index 0000000..ea2f431
--- /dev/null
+++ b/res/layout/attachment_chooser_audio.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/res/layout/attachment_chooser_fragment.xml b/res/layout/attachment_chooser_fragment.xml
new file mode 100644
index 0000000..15e249a
--- /dev/null
+++ b/res/layout/attachment_chooser_fragment.xml
@@ -0,0 +1,29 @@
+
+
+
diff --git a/res/layout/attachment_chooser_image.xml b/res/layout/attachment_chooser_image.xml
new file mode 100644
index 0000000..b635161
--- /dev/null
+++ b/res/layout/attachment_chooser_image.xml
@@ -0,0 +1,26 @@
+
+
+
diff --git a/res/layout/attachment_chooser_vcard.xml b/res/layout/attachment_chooser_vcard.xml
new file mode 100644
index 0000000..fb20f84
--- /dev/null
+++ b/res/layout/attachment_chooser_vcard.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/res/layout/attachment_chooser_video.xml b/res/layout/attachment_chooser_video.xml
new file mode 100644
index 0000000..4ae4b0a
--- /dev/null
+++ b/res/layout/attachment_chooser_video.xml
@@ -0,0 +1,24 @@
+
+
+
diff --git a/res/layout/attachment_grid_item_view.xml b/res/layout/attachment_grid_item_view.xml
new file mode 100644
index 0000000..639ea64
--- /dev/null
+++ b/res/layout/attachment_grid_item_view.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/attachment_more_text_view.xml b/res/layout/attachment_more_text_view.xml
new file mode 100644
index 0000000..1a99a63
--- /dev/null
+++ b/res/layout/attachment_more_text_view.xml
@@ -0,0 +1,22 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/attachment_multiple_audio.xml b/res/layout/attachment_multiple_audio.xml
new file mode 100644
index 0000000..48440f0
--- /dev/null
+++ b/res/layout/attachment_multiple_audio.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/res/layout/attachment_multiple_image.xml b/res/layout/attachment_multiple_image.xml
new file mode 100644
index 0000000..7d911ac
--- /dev/null
+++ b/res/layout/attachment_multiple_image.xml
@@ -0,0 +1,29 @@
+
+
+
+
diff --git a/res/layout/attachment_multiple_vcard.xml b/res/layout/attachment_multiple_vcard.xml
new file mode 100644
index 0000000..e03d47b
--- /dev/null
+++ b/res/layout/attachment_multiple_vcard.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/res/layout/attachment_multiple_video.xml b/res/layout/attachment_multiple_video.xml
new file mode 100644
index 0000000..fdbc423
--- /dev/null
+++ b/res/layout/attachment_multiple_video.xml
@@ -0,0 +1,25 @@
+
+
+
+
diff --git a/res/layout/attachment_pending_item.xml b/res/layout/attachment_pending_item.xml
new file mode 100644
index 0000000..3e9bec7
--- /dev/null
+++ b/res/layout/attachment_pending_item.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/attachment_preview.xml b/res/layout/attachment_preview.xml
new file mode 100644
index 0000000..36ea038
--- /dev/null
+++ b/res/layout/attachment_preview.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/attachment_single_audio.xml b/res/layout/attachment_single_audio.xml
new file mode 100644
index 0000000..3ad02a8
--- /dev/null
+++ b/res/layout/attachment_single_audio.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/res/layout/attachment_single_image.xml b/res/layout/attachment_single_image.xml
new file mode 100644
index 0000000..7338368
--- /dev/null
+++ b/res/layout/attachment_single_image.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/attachment_single_vcard.xml b/res/layout/attachment_single_vcard.xml
new file mode 100644
index 0000000..6016593
--- /dev/null
+++ b/res/layout/attachment_single_vcard.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
diff --git a/res/layout/attachment_single_video.xml b/res/layout/attachment_single_video.xml
new file mode 100644
index 0000000..fba594f
--- /dev/null
+++ b/res/layout/attachment_single_video.xml
@@ -0,0 +1,28 @@
+
+
+
+
diff --git a/res/layout/audio_attachment_view.xml b/res/layout/audio_attachment_view.xml
new file mode 100644
index 0000000..6fcf89c
--- /dev/null
+++ b/res/layout/audio_attachment_view.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/blocked_participant_list_item_view.xml b/res/layout/blocked_participant_list_item_view.xml
new file mode 100644
index 0000000..7ac0ec9
--- /dev/null
+++ b/res/layout/blocked_participant_list_item_view.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
diff --git a/res/layout/blocked_participants_activity.xml b/res/layout/blocked_participants_activity.xml
new file mode 100644
index 0000000..e00f20f
--- /dev/null
+++ b/res/layout/blocked_participants_activity.xml
@@ -0,0 +1,23 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/blocked_participants_fragment.xml b/res/layout/blocked_participants_fragment.xml
new file mode 100644
index 0000000..7bb3c6a
--- /dev/null
+++ b/res/layout/blocked_participants_fragment.xml
@@ -0,0 +1,23 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/chips_alternates_dropdown_item.xml b/res/layout/chips_alternates_dropdown_item.xml
new file mode 100644
index 0000000..dad052c
--- /dev/null
+++ b/res/layout/chips_alternates_dropdown_item.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/compose_message_view.xml b/res/layout/compose_message_view.xml
new file mode 100644
index 0000000..fd60e2a
--- /dev/null
+++ b/res/layout/compose_message_view.xml
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/contact_list_item_view.xml b/res/layout/contact_list_item_view.xml
new file mode 100644
index 0000000..3015ae3
--- /dev/null
+++ b/res/layout/contact_list_item_view.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/contact_picker_fragment.xml b/res/layout/contact_picker_fragment.xml
new file mode 100644
index 0000000..c65f140
--- /dev/null
+++ b/res/layout/contact_picker_fragment.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/conversation_activity.xml b/res/layout/conversation_activity.xml
new file mode 100644
index 0000000..8879704
--- /dev/null
+++ b/res/layout/conversation_activity.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/conversation_fragment.xml b/res/layout/conversation_fragment.xml
new file mode 100644
index 0000000..028e66b
--- /dev/null
+++ b/res/layout/conversation_fragment.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/conversation_list_activity.xml b/res/layout/conversation_list_activity.xml
new file mode 100644
index 0000000..48f3b15
--- /dev/null
+++ b/res/layout/conversation_list_activity.xml
@@ -0,0 +1,23 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/conversation_list_fragment.xml b/res/layout/conversation_list_fragment.xml
new file mode 100644
index 0000000..bf5d401
--- /dev/null
+++ b/res/layout/conversation_list_fragment.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/conversation_list_item_view.xml b/res/layout/conversation_list_item_view.xml
new file mode 100644
index 0000000..da1ca4e
--- /dev/null
+++ b/res/layout/conversation_list_item_view.xml
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/conversation_message_view.xml b/res/layout/conversation_message_view.xml
new file mode 100644
index 0000000..daad600
--- /dev/null
+++ b/res/layout/conversation_message_view.xml
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/copy_contact_dialog_view.xml b/res/layout/copy_contact_dialog_view.xml
new file mode 100644
index 0000000..15e07f7
--- /dev/null
+++ b/res/layout/copy_contact_dialog_view.xml
@@ -0,0 +1,24 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/custom_header_view_pager.xml b/res/layout/custom_header_view_pager.xml
new file mode 100644
index 0000000..9552cd6
--- /dev/null
+++ b/res/layout/custom_header_view_pager.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/debug_mmsconfig_activity.xml b/res/layout/debug_mmsconfig_activity.xml
new file mode 100644
index 0000000..4056317
--- /dev/null
+++ b/res/layout/debug_mmsconfig_activity.xml
@@ -0,0 +1,22 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/debug_mmsconfig_fragment.xml b/res/layout/debug_mmsconfig_fragment.xml
new file mode 100644
index 0000000..be61710
--- /dev/null
+++ b/res/layout/debug_mmsconfig_fragment.xml
@@ -0,0 +1,23 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/debug_mmsconfig_item_view.xml b/res/layout/debug_mmsconfig_item_view.xml
new file mode 100644
index 0000000..a825ee5
--- /dev/null
+++ b/res/layout/debug_mmsconfig_item_view.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
diff --git a/res/layout/debug_sms_mms_from_dump_file_dialog.xml b/res/layout/debug_sms_mms_from_dump_file_dialog.xml
new file mode 100644
index 0000000..342f489
--- /dev/null
+++ b/res/layout/debug_sms_mms_from_dump_file_dialog.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/res/layout/enter_phone_number_view.xml b/res/layout/enter_phone_number_view.xml
new file mode 100644
index 0000000..825ac51
--- /dev/null
+++ b/res/layout/enter_phone_number_view.xml
@@ -0,0 +1,29 @@
+
+
+
diff --git a/res/layout/fastscroll_preview.xml b/res/layout/fastscroll_preview.xml
new file mode 100644
index 0000000..ab72744
--- /dev/null
+++ b/res/layout/fastscroll_preview.xml
@@ -0,0 +1,25 @@
+
+
+
diff --git a/res/layout/fastscroll_thumb.xml b/res/layout/fastscroll_thumb.xml
new file mode 100644
index 0000000..6f57056
--- /dev/null
+++ b/res/layout/fastscroll_thumb.xml
@@ -0,0 +1,19 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/fastscroll_track.xml b/res/layout/fastscroll_track.xml
new file mode 100644
index 0000000..6a35e94
--- /dev/null
+++ b/res/layout/fastscroll_track.xml
@@ -0,0 +1,20 @@
+
+
+
diff --git a/res/layout/frequent_contacts_list_view.xml b/res/layout/frequent_contacts_list_view.xml
new file mode 100644
index 0000000..9cb0c3a
--- /dev/null
+++ b/res/layout/frequent_contacts_list_view.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/gallery_grid_item_view.xml b/res/layout/gallery_grid_item_view.xml
new file mode 100644
index 0000000..8b7ee58
--- /dev/null
+++ b/res/layout/gallery_grid_item_view.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/group_mms_setting_dialog.xml b/res/layout/group_mms_setting_dialog.xml
new file mode 100644
index 0000000..efc3b00
--- /dev/null
+++ b/res/layout/group_mms_setting_dialog.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/license_activity.xml b/res/layout/license_activity.xml
new file mode 100644
index 0000000..1475ac2
--- /dev/null
+++ b/res/layout/license_activity.xml
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_empty_view.xml b/res/layout/list_empty_view.xml
new file mode 100644
index 0000000..aa4b4fb
--- /dev/null
+++ b/res/layout/list_empty_view.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
diff --git a/res/layout/mediapicker_audio_chooser.xml b/res/layout/mediapicker_audio_chooser.xml
new file mode 100644
index 0000000..795d2f8
--- /dev/null
+++ b/res/layout/mediapicker_audio_chooser.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/mediapicker_camera_chooser.xml b/res/layout/mediapicker_camera_chooser.xml
new file mode 100644
index 0000000..27d26bd
--- /dev/null
+++ b/res/layout/mediapicker_camera_chooser.xml
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/mediapicker_fragment.xml b/res/layout/mediapicker_fragment.xml
new file mode 100644
index 0000000..2e414bd
--- /dev/null
+++ b/res/layout/mediapicker_fragment.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
diff --git a/res/layout/mediapicker_image_chooser.xml b/res/layout/mediapicker_image_chooser.xml
new file mode 100644
index 0000000..b4f3c01
--- /dev/null
+++ b/res/layout/mediapicker_image_chooser.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/mediapicker_location_chooser.xml b/res/layout/mediapicker_location_chooser.xml
new file mode 100644
index 0000000..9135299
--- /dev/null
+++ b/res/layout/mediapicker_location_chooser.xml
@@ -0,0 +1,22 @@
+
+
+
diff --git a/res/layout/mediapicker_location_container.xml b/res/layout/mediapicker_location_container.xml
new file mode 100644
index 0000000..6f476d3
--- /dev/null
+++ b/res/layout/mediapicker_location_container.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
diff --git a/res/layout/mediapicker_tab_button.xml b/res/layout/mediapicker_tab_button.xml
new file mode 100644
index 0000000..353c871
--- /dev/null
+++ b/res/layout/mediapicker_tab_button.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/message_audio_attachment.xml b/res/layout/message_audio_attachment.xml
new file mode 100644
index 0000000..0854269
--- /dev/null
+++ b/res/layout/message_audio_attachment.xml
@@ -0,0 +1,22 @@
+
+
+
diff --git a/res/layout/message_vcard_attachment.xml b/res/layout/message_vcard_attachment.xml
new file mode 100644
index 0000000..0da6e2d
--- /dev/null
+++ b/res/layout/message_vcard_attachment.xml
@@ -0,0 +1,23 @@
+
+
+
diff --git a/res/layout/message_video_attachment.xml b/res/layout/message_video_attachment.xml
new file mode 100644
index 0000000..8aa2061
--- /dev/null
+++ b/res/layout/message_video_attachment.xml
@@ -0,0 +1,25 @@
+
+
+
diff --git a/res/layout/mms_config_debug_fragment.xml b/res/layout/mms_config_debug_fragment.xml
new file mode 100644
index 0000000..27528f9
--- /dev/null
+++ b/res/layout/mms_config_debug_fragment.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/open_source_licenses.xml b/res/layout/open_source_licenses.xml
new file mode 100644
index 0000000..89995eb
--- /dev/null
+++ b/res/layout/open_source_licenses.xml
@@ -0,0 +1,22 @@
+
+
+
+
diff --git a/res/layout/people_and_options_activity.xml b/res/layout/people_and_options_activity.xml
new file mode 100644
index 0000000..af879a0
--- /dev/null
+++ b/res/layout/people_and_options_activity.xml
@@ -0,0 +1,23 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/people_and_options_fragment.xml b/res/layout/people_and_options_fragment.xml
new file mode 100644
index 0000000..be61710
--- /dev/null
+++ b/res/layout/people_and_options_fragment.xml
@@ -0,0 +1,23 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/people_and_options_section_header.xml b/res/layout/people_and_options_section_header.xml
new file mode 100644
index 0000000..44b10c1
--- /dev/null
+++ b/res/layout/people_and_options_section_header.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/people_list_item_view.xml b/res/layout/people_list_item_view.xml
new file mode 100644
index 0000000..e4c07e4
--- /dev/null
+++ b/res/layout/people_list_item_view.xml
@@ -0,0 +1,26 @@
+
+
+
diff --git a/res/layout/people_options_item_view.xml b/res/layout/people_options_item_view.xml
new file mode 100644
index 0000000..fbb9592
--- /dev/null
+++ b/res/layout/people_options_item_view.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/permission_check_activity.xml b/res/layout/permission_check_activity.xml
new file mode 100644
index 0000000..57f665c
--- /dev/null
+++ b/res/layout/permission_check_activity.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/person_item_view.xml b/res/layout/person_item_view.xml
new file mode 100644
index 0000000..9645024
--- /dev/null
+++ b/res/layout/person_item_view.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/place_card.xml b/res/layout/place_card.xml
new file mode 100644
index 0000000..93b9e8c
--- /dev/null
+++ b/res/layout/place_card.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/settings_fragment.xml b/res/layout/settings_fragment.xml
new file mode 100644
index 0000000..b62b245
--- /dev/null
+++ b/res/layout/settings_fragment.xml
@@ -0,0 +1,21 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/settings_item_view.xml b/res/layout/settings_item_view.xml
new file mode 100644
index 0000000..a434c11
--- /dev/null
+++ b/res/layout/settings_item_view.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/share_intent_activity.xml b/res/layout/share_intent_activity.xml
new file mode 100644
index 0000000..d1e59ff
--- /dev/null
+++ b/res/layout/share_intent_activity.xml
@@ -0,0 +1,21 @@
+
+
+
diff --git a/res/layout/share_intent_conversation_list_view.xml b/res/layout/share_intent_conversation_list_view.xml
new file mode 100644
index 0000000..3da3c6b
--- /dev/null
+++ b/res/layout/share_intent_conversation_list_view.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/sim_selector_item_view.xml b/res/layout/sim_selector_item_view.xml
new file mode 100644
index 0000000..a20c4a9
--- /dev/null
+++ b/res/layout/sim_selector_item_view.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/sim_selector_view.xml b/res/layout/sim_selector_view.xml
new file mode 100644
index 0000000..816a2cc
--- /dev/null
+++ b/res/layout/sim_selector_view.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/res/layout/sms_free_storage_action_item_view.xml b/res/layout/sms_free_storage_action_item_view.xml
new file mode 100644
index 0000000..fd71904
--- /dev/null
+++ b/res/layout/sms_free_storage_action_item_view.xml
@@ -0,0 +1,23 @@
+
+
+
diff --git a/res/layout/sms_mms_dump_file_list_item.xml b/res/layout/sms_mms_dump_file_list_item.xml
new file mode 100644
index 0000000..a939db2
--- /dev/null
+++ b/res/layout/sms_mms_dump_file_list_item.xml
@@ -0,0 +1,30 @@
+
+
+
diff --git a/res/layout/sms_storage_low_warning_dialog.xml b/res/layout/sms_storage_low_warning_dialog.xml
new file mode 100644
index 0000000..965cab6
--- /dev/null
+++ b/res/layout/sms_storage_low_warning_dialog.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/res/layout/snack_bar.xml b/res/layout/snack_bar.xml
new file mode 100644
index 0000000..1cdabc3
--- /dev/null
+++ b/res/layout/snack_bar.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/test_activity.xml b/res/layout/test_activity.xml
new file mode 100644
index 0000000..a34b17a
--- /dev/null
+++ b/res/layout/test_activity.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/res/layout/vcard_detail_activity.xml b/res/layout/vcard_detail_activity.xml
new file mode 100644
index 0000000..aa4c3b9
--- /dev/null
+++ b/res/layout/vcard_detail_activity.xml
@@ -0,0 +1,23 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/vcard_detail_fragment.xml b/res/layout/vcard_detail_fragment.xml
new file mode 100644
index 0000000..8689df0
--- /dev/null
+++ b/res/layout/vcard_detail_fragment.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/video_thumbnail_view.xml b/res/layout/video_thumbnail_view.xml
new file mode 100644
index 0000000..7c009cb
--- /dev/null
+++ b/res/layout/video_thumbnail_view.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/viewgroup_vertical_explode_animation_popup.xml b/res/layout/viewgroup_vertical_explode_animation_popup.xml
new file mode 100644
index 0000000..8a8aa60
--- /dev/null
+++ b/res/layout/viewgroup_vertical_explode_animation_popup.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
diff --git a/res/layout/widget_conversation.xml b/res/layout/widget_conversation.xml
new file mode 100644
index 0000000..a9cda98
--- /dev/null
+++ b/res/layout/widget_conversation.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/widget_conversation_list.xml b/res/layout/widget_conversation_list.xml
new file mode 100644
index 0000000..822fe55
--- /dev/null
+++ b/res/layout/widget_conversation_list.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/widget_conversation_list_item.xml b/res/layout/widget_conversation_list_item.xml
new file mode 100644
index 0000000..e0115a2
--- /dev/null
+++ b/res/layout/widget_conversation_list_item.xml
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/widget_loading.xml b/res/layout/widget_loading.xml
new file mode 100644
index 0000000..8282b5d
--- /dev/null
+++ b/res/layout/widget_loading.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/widget_message_item_incoming.xml b/res/layout/widget_message_item_incoming.xml
new file mode 100644
index 0000000..3a1bc00
--- /dev/null
+++ b/res/layout/widget_message_item_incoming.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/widget_message_item_outgoing.xml b/res/layout/widget_message_item_outgoing.xml
new file mode 100644
index 0000000..472b5a2
--- /dev/null
+++ b/res/layout/widget_message_item_outgoing.xml
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/widget_missing_permission.xml b/res/layout/widget_missing_permission.xml
new file mode 100644
index 0000000..712ad02
--- /dev/null
+++ b/res/layout/widget_missing_permission.xml
@@ -0,0 +1,26 @@
+
+
+
+
diff --git a/res/menu/archived_conversation_list_menu.xml b/res/menu/archived_conversation_list_menu.xml
new file mode 100644
index 0000000..a3a2a19
--- /dev/null
+++ b/res/menu/archived_conversation_list_menu.xml
@@ -0,0 +1,25 @@
+
+
+
diff --git a/res/menu/attachment_chooser_menu.xml b/res/menu/attachment_chooser_menu.xml
new file mode 100644
index 0000000..99345c9
--- /dev/null
+++ b/res/menu/attachment_chooser_menu.xml
@@ -0,0 +1,27 @@
+
+
+
diff --git a/res/menu/compose_menu.xml b/res/menu/compose_menu.xml
new file mode 100644
index 0000000..a384f57
--- /dev/null
+++ b/res/menu/compose_menu.xml
@@ -0,0 +1,51 @@
+
+
+
diff --git a/res/menu/conversation_fragment_select_menu.xml b/res/menu/conversation_fragment_select_menu.xml
new file mode 100644
index 0000000..7ce0829
--- /dev/null
+++ b/res/menu/conversation_fragment_select_menu.xml
@@ -0,0 +1,63 @@
+
+
+
diff --git a/res/menu/conversation_list_fragment_menu.xml b/res/menu/conversation_list_fragment_menu.xml
new file mode 100644
index 0000000..a83a2a5
--- /dev/null
+++ b/res/menu/conversation_list_fragment_menu.xml
@@ -0,0 +1,51 @@
+
+
+
diff --git a/res/menu/conversation_list_fragment_select_menu.xml b/res/menu/conversation_list_fragment_select_menu.xml
new file mode 100644
index 0000000..8704691
--- /dev/null
+++ b/res/menu/conversation_list_fragment_select_menu.xml
@@ -0,0 +1,63 @@
+
+
+
diff --git a/res/menu/conversation_menu.xml b/res/menu/conversation_menu.xml
new file mode 100644
index 0000000..57e561b
--- /dev/null
+++ b/res/menu/conversation_menu.xml
@@ -0,0 +1,60 @@
+
+
+
diff --git a/res/menu/gallery_picker_menu.xml b/res/menu/gallery_picker_menu.xml
new file mode 100644
index 0000000..428f1e7
--- /dev/null
+++ b/res/menu/gallery_picker_menu.xml
@@ -0,0 +1,34 @@
+
+
+
diff --git a/res/menu/photo_view_menu.xml b/res/menu/photo_view_menu.xml
new file mode 100644
index 0000000..10a4367
--- /dev/null
+++ b/res/menu/photo_view_menu.xml
@@ -0,0 +1,31 @@
+
+
+
diff --git a/res/menu/settings_menu.xml b/res/menu/settings_menu.xml
new file mode 100644
index 0000000..3002be8
--- /dev/null
+++ b/res/menu/settings_menu.xml
@@ -0,0 +1,27 @@
+
+
+
diff --git a/res/menu/vcard_detail_fragment_menu.xml b/res/menu/vcard_detail_fragment_menu.xml
new file mode 100644
index 0000000..ea923cb
--- /dev/null
+++ b/res/menu/vcard_detail_fragment_menu.xml
@@ -0,0 +1,27 @@
+
+
+
diff --git a/res/raw/audio_end.wav b/res/raw/audio_end.wav
new file mode 100644
index 0000000..01d08f5
Binary files /dev/null and b/res/raw/audio_end.wav differ
diff --git a/res/raw/audio_initiate.wav b/res/raw/audio_initiate.wav
new file mode 100644
index 0000000..e335d0d
Binary files /dev/null and b/res/raw/audio_initiate.wav differ
diff --git a/res/raw/db_op_debug.wav b/res/raw/db_op_debug.wav
new file mode 100644
index 0000000..b807636
Binary files /dev/null and b/res/raw/db_op_debug.wav differ
diff --git a/res/raw/message_failure.wav b/res/raw/message_failure.wav
new file mode 100644
index 0000000..270a0b7
Binary files /dev/null and b/res/raw/message_failure.wav differ
diff --git a/res/raw/message_inc_thread.wav b/res/raw/message_inc_thread.wav
new file mode 100644
index 0000000..7dce364
Binary files /dev/null and b/res/raw/message_inc_thread.wav differ
diff --git a/res/raw/message_sent.wav b/res/raw/message_sent.wav
new file mode 100644
index 0000000..1d45718
Binary files /dev/null and b/res/raw/message_sent.wav differ
diff --git a/res/raw/server_request_debug.wav b/res/raw/server_request_debug.wav
new file mode 100644
index 0000000..864a7dd
Binary files /dev/null and b/res/raw/server_request_debug.wav differ
diff --git a/res/transition/explode.xml b/res/transition/explode.xml
new file mode 100644
index 0000000..a3a94ba
--- /dev/null
+++ b/res/transition/explode.xml
@@ -0,0 +1,17 @@
+
+
+
\ No newline at end of file
diff --git a/res/transition/fade.xml b/res/transition/fade.xml
new file mode 100644
index 0000000..e3617dc
--- /dev/null
+++ b/res/transition/fade.xml
@@ -0,0 +1,17 @@
+
+
+
\ No newline at end of file
diff --git a/res/values-af/arrays.xml b/res/values-af/arrays.xml
new file mode 100644
index 0000000..d780ddc
--- /dev/null
+++ b/res/values-af/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "geen onderwerp nie"
+ "geen onderwerp nie"
+
+
+ "Ja"
+ "Nee"
+ "Goed"
+ "Hê-hê"
+ "Dankie"
+ "Ek stem saam"
+ "Lekker"
+ "Op pad"
+ "OK, laat ek jou later antwoord"
+ ":)"
+ ":("
+
+
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
new file mode 100644
index 0000000..ebe9d4d
--- /dev/null
+++ b/res/values-af/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Boodskappe"
+ "Boodskappe"
+ "Kies gesprek"
+ "Instellings"
+ "Stuur boodskap"
+ "Voeg \'n aanhegsel by"
+ "Hulp"
+ "Welkom"
+ "Slaan oor"
+ "Volgende >"
+ "Volgende"
+ "Gaan uit"
+ "Instellings >"
+ "Instellings"
+ "Boodskappe het toestemming nodig vir SMS, foon en kontakte."
+ "Jy kan toestemmings verander in Instellings > Programme > Boodskappe > Toestemmings."
+ "Jy kan toestemmings verander in Instellings, Programme, Boodskappe, Toestemmings."
+ "Gereeldes"
+ "Alle kontakte"
+ "Stuur na %s"
+ "Neem foto\'s of video"
+ "Kies prente van hierdie toestel af"
+ "Neem oudio op"
+ "Kies foto"
+ "Die media is gekies."
+ "Die media is nie gekies nie."
+ "%d gekies"
+ "prent %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "prent"
+ "Neem oudio op"
+ "Deel"
+ "Nou net"
+ "Nou"
+
+ %d min.
+ %d min.
+
+
+ %d uur
+ %d uur
+
+
+ %d dae
+ %d dag
+
+
+ %d weke
+ \'n week
+
+
+ %d maande
+ \'n maand
+
+
+ %d jaar
+ \'n jaar
+
+ "Klas 0-boodskap"
+ "Stoor"
+ "Toestel het min spasie. Boodskappe sal ouer boodskappe outomaties uitvee om spasie beskikbaar te stel."
+ "Bergingspasie word min"
+ "Boodskappe sal dalk nie boodskappe stuur of ontvang voordat meer spasie op jou toestel beskikbaar is nie."
+ "Min SMS-berging. Jy sal dalk boodskappe moet uitvee."
+ "Bevestig jou foonnommer"
+ "Hierdie eenmalige stap sal sorg dat Boodskappe jou groepboodskappe toepaslik aflewer."
+ "Foonnommer"
+ "Vee alle boodskappe met media uit"
+ "Vee boodskappe ouer as %s uit"
+ "Vee boodskappe ouer as %s outomaties uit"
+ "Ignoreer"
+ "Vee alle boodskappe met media uit?"
+ "Vee boodskappe ouer as %s uit?"
+ "Vee boodskappe ouer as %s uit en skakel outomatiese uitvee aan?"
+ "%s het gesê"
+ "Jy het gesê"
+ "Boodskap van %s af"
+ "Jy het \'n boodskap gestuur"
+ "Stuur tans …"
+ "Nie gestuur nie. Raak om weer te probeer."
+ "Nie gestuur nie. Probeer tans weer …"
+ "Herstuur of vee uit"
+ "Maak asseblief \'n stemoproep na nooddienste. Jou SMS kon nie in hierdie stadium afgelewer word nie."
+ "Het misluk"
+ "Nuwe MMS-boodskap om af te laai"
+ "Nuwe MMS-boodskap"
+ "Kon nie aflaai nie"
+ "Raak om weer te probeer"
+ "Raak om af te laai"
+ "Laai af of vee uit"
+ "Laai tans af …"
+ "Boodskap het verval of is nie beskikbaar nie"
+ "grootte: %1$s, verval: %2$s"
+ "Kan nie stuur nie. Ontvanger nie geldig nie."
+ "Diens nie in netwerk geaktiveer nie"
+ "Kon weens netwerkprobleem nie stuur nie"
+ "Boodskap het verval of is nie beskikbaar nie"
+ "(Geen onderwerp nie)"
+ "Onbekende afsender"
+ "Afgelewer"
+ "Kon nie boodskap %1$s van %2$s aflaai nie."
+ "Kon nie databasishandeling voltooi nie weens lae geheue"
+ "Boodskap nie gestuur nie"
+ "Sommige boodskappe is nie in Boodskappe gestuur nie"
+
+ %d boodskappe in %d gesprekke
+ %d boodskappe in een gesprek
+
+ "Boodskap het nie afgelaai nie"
+ "Sommige boodskappe is nie in Boodskappe afgelaai nie"
+
+ %d boodskappe in %d gesprekke
+ %d boodskappe in een gesprek
+
+ "Boodskap aan %1$s nie gestuur nie"
+ "Maak asseblief \'n stemoproep na nooddienste. Jou SMS na %1$s kon nie in hierdie stadium afgelewer word nie."
+
+ %d nuwe boodskappe
+ Nuwe boodskap
+
+ "Begin"
+ "Kamera nie beskikbaar nie"
+ "Kamera nie beskikbaar nie"
+ "Video-opname nie beskikbaar nie"
+ "Kan nie media stoor nie"
+ "Kan nie foto neem nie"
+ "Terug"
+ "Geargiveer"
+ "Vee uit"
+ "Argiveer"
+ "Deargiveer"
+ "Skakel kennisgewings af"
+ "Skakel kennisgewings aan"
+ "Voeg kontak by"
+ "Laai af"
+ "Stuur"
+ "Vee uit"
+ "Vee hierdie boodskap uit?"
+ "Hierdie handeling kan nie ontdoen word nie."
+ "Vee uit"
+
+ Vee hierdie gesprekke uit?
+ Vee hierdie gesprek uit?
+
+ "Vee uit"
+ "Kanselleer"
+ "Aan"
+ "Kies verskeie prente"
+ "Bevestig keuse"
+ "+%d"
+ "Kan nie oudio opneem nie. Probeer weer."
+ "Kan nie oudio speel nie. Probeer weer."
+ "Kon nie oudio stoor nie. Probeer weer."
+ "Raak en hou"
+ ", "
+ " "
+ ": "
+ " "
+ "Prent"
+ "Oudiosnit"
+ "video"
+ "Kontakkaartjie"
+ "Laai af"
+ "Antwoord via SMS"
+ "Antwoord via MMS"
+ "Antwoord"
+
+ %d deelnemers
+ %d deelnemer
+
+ "Ek"
+ "Kontak geblokkeer en geargiveer"
+ "Kontak gedeblokkeer en gedeargiveer"
+ "%d geargiveer"
+ "%d gedeargiveer"
+ "Kennisgewings afgeskakel"
+ "Kennisgewings aangeskakel"
+ "Alles is gereed. Raak om weer te stuur."
+ "Boodskappe is suksesvol as die verstek-SMS-program gestel."
+
+ Gooi aanhegsels weg
+ Gooi aanhegsel weg
+
+ "Oudio-aanhegsel"
+ "Speel oudio-aanhegsel"
+ "Wag"
+ "Boodskap vanaf %s: %s."
+ "Mislukte boodskap van %s af: %s. Tyd: %s"
+ "Boodskap van %s af: %s. Tyd: %s"
+ "Ongestuurde boodskap aan %s: %s. Tyd: %s"
+ "Stuur tans boodskap aan %s: %s. Tyd: %s"
+ "Kon nie boodskap aan %s stuur nie: %s. Tyd: %s"
+ "Boodskap aan %s: %s. Tyd: %s"
+ "Mislukte boodskap van %s af: %s. Tyd: %s. %s"
+ "Boodskap van %s af: %s. Tyd: %s. %s"
+ "Ongestuurde boodskap aan %s: %s. Tyd: %s"
+ "Stuur tans boodskap aan %s: %s. Tyd: %s"
+ "Kon nie boodskap aan %s stuur nie: %s. Tyd: %s"
+ "Boodskap aan %s: %s. Tyd: %s"
+ "Kon nie boodskap stuur nie. Raak om weer te probeer."
+ "Gesprek met %s"
+ "Vee onderwerp uit"
+ "Neem video op"
+ "Vang \'n stilprent vas"
+ "Neem foto"
+ "Begin video opneem"
+ "Skakel na volskerm-kamera oor"
+ "Wissel tussen voorste en agterste kamera"
+ "Staak opname en heg video aan"
+ "Stop video-opname"
+ "Foto\'s uit Boodskappe"
+
+ %d foto\'s is na \"%s\"-album gestoor
+ %d foto is na \"%s\"-album gestoor
+
+
+ %d video\'s is na \"%s\"-album gestoor
+ %d video is na \"%s\"-album gestoor
+
+
+ %d aanhegsels is na \"%s\"-album gestoor
+ %d aanhegsel is na \"%s\"-album gestoor
+
+
+ %d aanhegsels is na \"Aflaaie\" gestoor
+ %d aanhegsel is na \"Aflaaie\" gestoor
+
+
+ %d aanhegsels is gestoor
+ %d aanhegsel is gestoor
+
+
+ Kon %d aanhegsels nie stoor nie
+ Kon %d aanhegsel nie stoor nie
+
+ "MMS-aanhegsel gestoor"
+ "Instellings"
+ "Geargiveer"
+ "Maak toe"
+ "MMS"
+ "Gevorderd"
+ "Ontfout"
+ "Kennisgewings"
+ "Klank"
+ "Stil"
+ "Vibreer"
+ "Geblokkeer"
+ "SMS-afleweringverslae"
+ "Versoek \'n afleweringsverslag vir elke SMS wat jy stuur"
+ "Haal outomaties op"
+ "Gaan haal MMS-boodskappe outomaties"
+ "Outoherwinning wanneer swerf"
+ "Laai MMS outomaties af terwyl geswerf word"
+ "Groepboodskappe"
+ "Gebruik MMS om \'n enkele boodskap te stuur wanneer daar veelvuldige ontvangers is"
+ "Verstek-SMS-program"
+ "Verstek-SMS-program"
+
+
+ "Jou foonnommer"
+ "Onbekend"
+ "Klanke vir uitgaande boodskappe"
+ "Gooi SMS weg"
+ "Stort rou data van ontvangde SMS in eksterne berginglêer"
+ "Gooi MMS weg"
+ "Stort rou data van ontvangde MMS in eksterne berginglêer"
+ "Draadlose waarskuwings"
+ "Boodskapopsies"
+ "Kopieer teks"
+ "Bekyk besonderhede"
+ "Vee uit"
+ "Stuur aan"
+ "Boodskapbesonderhede"
+ "Tipe: "
+ "Teksboodskap"
+ "Multimediaboodskap"
+ "Van: "
+ "Aan: "
+ "Gestuur: "
+ "Ontvang: "
+ "Onderwerp: "
+ "Grootte: "
+ "Prioriteit: "
+ "SIM: "
+ "Hoog"
+ "Normaal"
+ "Laag"
+ "SIM %s"
+ "Versteekte afsenderadres"
+ "Kan nie boodskap stuur terwyl aanhegsels gelaai word nie."
+ "Kan nie aanhegsel laai nie. Probeer weer."
+ "Netwerk is nie gereed nie. Probeer weer."
+ "Vee teks uit"
+ "Wissel tussen invoer van teks en syfers"
+ "Voeg meer deelnemers by"
+ "Bevestig deelnemers"
+ "Begin nuwe gesprek"
+ "Kies hierdie item"
+ "Speel video"
+ "Mense en opsies"
+ "Ontfout"
+ "Mense en opsies"
+ "Algemeen"
+ "Mense in hierdie gesprek"
+ "Maak \'n oproep"
+ "Stuur boodskap"
+ "Stuur boodskap<br/><small>van %s</small> af"
+
+ Stuur foto\'s
+ Stuur foto
+
+
+ Stuur oudio\'s
+ Stuur oudio
+
+
+ Stuur video\'s
+ Stuur video
+
+
+ Stuur kontakkaarte
+ Stuur kontakkaart
+
+
+ Stuur aanhegsels
+ Stuur aanhegsel
+
+
+ %d aanhegsels is gereed om te stuur
+ Een aanhegsel is gereed om te stuur
+
+ "Stuur terugvoer"
+ "Bekyk in Google Play Winkel"
+ "Weergawe-inligting"
+ "Weergawe %1$s"
+ "Oopbronlisensies"
+ "Kennisgewings"
+ "Aanhegsellimiet is bereik"
+ "Kon nie aanhegsel laai nie."
+ "Voeg by kontakte?"
+ "Voeg kontak by"
+ "Onderwerp"
+ "Onderwerp: "
+ "%s%s"
+ "Laai tans kontakkaart"
+ "Kon nie kontakkaart laai nie"
+ "Bekyk kontakkaart"
+
+ %d kontakte
+ %d kontak
+
+ "Kontakkaarte"
+ "Verjaardag"
+ "Notas"
+ "Aanstuurboodskap"
+ "Antwoord"
+ "+1"
+ "+%d"
+ "SMS gedeaktiveer"
+ "Stel Boodskappe as die verstek-SMS-program om te stuur"
+ "Stel Boodskappe as die verstek-SMS-program"
+ "Verander"
+ "Stel Boodskappe as die verstek-SMS-program om boodskappe te ontvang"
+ "Geen voorkeur-SIM vir die stuur van SMS-boodskappe gekies nie"
+ "Hierdie program word nie deur die toesteleienaar toegelaat nie."
+ "Goed"
+ "Te veel deelnemers aan \'n gesprek"
+
+ Ongeldige kontakte
+ Ongeldige kontak
+
+ "Kon nie kameraprent laai nie"
+ "Jy: "
+ "%s: "
+ "Konsep"
+ "Sodra jy \'n nuwe gesprek begin, sal jy dit hier gelys sien"
+ "Geargiveerde gesprekke verskyn hier"
+ "Laai tans gesprekke …"
+ "Prent"
+ "Oudiosnit"
+ "Video"
+ "Kontakkaartjie"
+ "MMS"
+ "Ontdoen"
+ "Herprobeer"
+ "Voer \'n kontaknaam of foonnommer in om \'n nuwe boodskap te begin"
+ "Blokkeer"
+ "Blokkeer %s"
+ "Deblokkeer %s"
+ "Blokkeer %s?"
+ "Jy sal steeds boodskappe van hierdie nommer af ontvang, maar sal nie meer in kennis gestel word nie. Hierdie gesprek sal geargiveer word."
+ "Geblokkeerde kontakte"
+ "DEBLOKKEER"
+ "Geblokkeerde kontakte"
+ "Kies prent uit dokumentbiblioteek"
+ "Stuur tans boodskap"
+ "Boodskap gestuur"
+ "Sellulêre data is afgeskakel. Gaan jou instellings na."
+ "Kan nie boodskappe in vliegtuigmodus stuur nie"
+ "Kon nie boodskap stuur nie"
+ "Boodskap afgelaai"
+ "Sellulêre data is afgeskakel. Gaan jou instellings na."
+ "Kan nie boodskappe in vliegtuigmodus aflaai nie"
+ "Boodskap kon nie afgelaai word nie"
+ "Nul"
+ "Een"
+ "Twee"
+ "Drie"
+ "Vier"
+ "Vyf"
+ "Ses"
+ "Sewe"
+ "Agt"
+ "Nege"
+ "Kan nie boodskap met %1$s stuur nie, fout %2$d"
+ "Kan nie boodskap met onbekende diensverskaffer stuur nie, fout %1$d"
+ "Fwd: %s"
+ "Boodskap nie gestuur nie: diens nie in netwerk geaktiveer nie"
+ "Boodskap nie gestuur nie: ongeldige bestemmingsadres"
+ "Boodskap nie gestuur nie: ongeldige boodskap"
+ "Boodskap nie gestuur nie: inhoud word nie gesteun nie"
+ "Boodskap nie gestuur nie: boodskap word nie gesteun nie"
+ "Boodskap nie gestuur nie; te groot"
+ "Nuwe boodskap"
+ "Bekyk"
+ "Prent"
+ "Kon nie \'n toepaslike program vind nie"
+ "Verwyder ontvanger"
+ "Nuwe boodskap"
+ "Kanselleer"
+ "Wysig toegangspunt"
+ "Nie gestel nie"
+ "Naam"
+ "APN"
+ "MMSC"
+ "MMS-volmag"
+ "MMS-poort"
+ "MCC"
+ "MNC"
+ "APN-tipe"
+ "Vee APN uit"
+ "Nuwe APN"
+ "Stoor"
+ "Gooi weg"
+ "Die naamveld kan nie leeg wees nie."
+ "Die APN kan nie leeg wees nie."
+ "MCC-veld moet 3 syfers wees."
+ "Die MNC-veld moet uit 2 of 3 syfers bestaan."
+ "Stel tans verstekinstellings vir APN terug."
+ "Stel terug na verstek"
+ "Terugstel van verstek-APN-instellings voltooi."
+ "Titelloos"
+ "APN\'e"
+ "APN\'e"
+ "Nuwe APN"
+ "APN-instellings is nie vir hierdie gebruiker beskikbaar nie"
+ "Kopieer na knipbord?"
+ "Kopieer"
+ "aan %s"
+ "Algemeen"
+ "Gevorderd"
+ "Algemene instellings"
+ "Gevorderde instellings"
+ "\"%s\"-SIM"
+ "Stuur individuele SMS-boodskappe aan alle ontvangers. Net jy sal enige antwoorde kry"
+ "Stuur \'n enkele MMS aan alle ontvangers"
+ "Onbekende nommer"
+ "Nuwe boodskap"
+ "Nuwe boodskap."
+ "SIM-selekteerder"
+ "%1$s gekies, SIM-selekteerder"
+ "Wysig onderwerp"
+ "Kies SIM of wysig onderwerp"
+ "Raak en hou om oudio op te neem"
+ "Begin nuwe gesprek"
+ "Boodskappe"
+ "Boodskappe-lys"
+ "Boodskappe"
+ "Nuwe boodskap"
+ "Gespreklys"
+ "Laai tans gesprekke"
+ "Laai tans boodskappe"
+ "Bekyk nog gesprekke"
+ "Bekyk nog boodskappe"
+ "Gesprek uitgevee"
+ "Gesprek is uitgevee. Raak om \'n ander Boodskappe-gesprek te wys"
+ "Geblokkeer"
+ "Gedeblokkeer"
+ "Daar is min bergingspasie. Sommige data kan verloor word."
+ "Kies aanhegsels"
+ "Bevestig keuse"
+ "%d gekies"
+ "Verwyder asseblief een of meer aanhegsels en probeer weer."
+ "Jy kan probeer om jou boodskap te stuur, maar dit sal dalk nie afgelewer word tensy jy een of meer aanhegsels verwyder nie."
+ "Jy kan net een video per boodskap stuur. Verwyder bykomende video\'s en probeer weer."
+ "Boodskappe kon nie aanhegsel laai nie."
+ "Stuur in elk geval"
+ "Kon nie gesprek begin nie"
+ "%1$s (%2$s)"
+ "%s gekies"
+
diff --git a/res/values-am/arrays.xml b/res/values-am/arrays.xml
new file mode 100644
index 0000000..225008e
--- /dev/null
+++ b/res/values-am/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "ርዕሰ-ጉዳይ የሌለው"
+ "ምንም ርእስ የለውም"
+
+
+ "አዎ"
+ "አይ"
+ "እሺ"
+ "ሃሃ"
+ "እናመሰግናለን"
+ "እስማማለሁ"
+ "በጣም ጥሩ"
+ "እየመጣሁ ነኝ"
+ "እሺ፣ በኋላ ላይ ላግኝዎት"
+ ":)"
+ ":("
+
+
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
new file mode 100644
index 0000000..9707157
--- /dev/null
+++ b/res/values-am/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "መልዕክት መላኪያ"
+ "መልዕክት መላኪያ"
+ "ውይይት ምረጥ"
+ "ቅንብሮች"
+ "መልዕክት ላከ"
+ "ዓባሪ አክል"
+ "እገዛ"
+ "እንኳን በደህና መጡ"
+ "ዝለል"
+ "ቀጣይ >"
+ "ቀጣይ"
+ "ውጣ"
+ "ቅንብሮች >"
+ "ቅንብሮች"
+ "አላላክ የኤስኤምኤስ፣ ስልክ እና እውቂያዎች ፍቃድ ያስፈልገዋል።"
+ "ፍቃዶችን በቅንብሮች > መተግበሪያዎች > አላላክ > ፍቃዶች ውስጥ መለወጥ ይችላሉ።"
+ "ፍቃዶችን በቅንብሮች፣ መተግበሪያዎች፣ አላላክ፣ ፍቃዶች ውስጥ መለወጥ ይችላሉ።"
+ "ተደጋጋሚዎች"
+ "ሁሉም ዕውቂያዎች"
+ "ወደ %s ላክ"
+ "ስዕሎችን አንሳ ወይም ቪዲዮ ቅረጽ"
+ "ከዚህ መሣሪያ ላይ ምስሎችን ይምረጡ"
+ "ተሰሚ ቅረጽ"
+ "ፎቶ ይምረጡ"
+ "ሚዲያው ተመርጧል።"
+ "ሚዲያው አልተመረጠም።"
+ "%d ተመርጠዋል"
+ "ምስል %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "ምስል"
+ "ተሰሚ ቅረጽ"
+ "አጋራ"
+ "ገና አሁን"
+ "አሁን"
+
+ %d ደቂቃዎች
+ %d ደቂቃዎች
+
+
+ %d ሰዓቶች
+ %d ሰዓቶች
+
+
+ %d ቀኖች
+ %d ቀኖች
+
+
+ %d ሳምንቶች
+ %d ሳምንቶች
+
+
+ %d ወሮች
+ %d ወሮች
+
+
+ %d ዓመቶች
+ %d ዓመቶች
+
+ "የመደብ 0 መልዕክት"
+ "አስቀምጥ"
+ "መሣሪያው አነስተኛ ቦታ ነው ያለው። አላላክ ቦታን ለማስለቀቅ የቆዩ መልዕክቶችን በራስ ሰር ይሰርዛል።"
+ "የማከማቻ ቦታ እያለቀ ነው"
+ "መሣሪያዎ ላይ ተጨማሪ ቦታ እስኪገኝ ድረስ አላላክ መልዕክቶችን ላይልክ ወይም ላይቀበል ይችላል።"
+ "ዝቅተኛ የኤስኤምኤስ ማከማቻ። መልዕክቶችን መሰረዝ ሊኖርብዎ ይችላል።"
+ "ስልክ ቁጥርዎን ያረጋግጡ"
+ "ይሄ የአንድ ጊዜ እርምጃ አላላክ የቡድን መልዕክቶችዎን በአግባቡ እንደሚልክ ያረጋግጣል።"
+ "ስልክ ቁጥር"
+ "ማህደረመረጃ ያላቸው ሁሉንም መልዕክቶች ሰርዝ"
+ "ከ%s በላይ የቆዩ መልዕክቶችን ሰርዝ"
+ "ከ%s በላይ የቆዩ መልዕክቶችን በራስ-ሰር ሰርዝ"
+ "ችላ በል"
+ "ማህደረመረጃ ያላቸው ሁሉም መልዕክቶች ይሰረዙ?"
+ "ከ%s በላይ የቆዩ መልዕክቶች ይሰረዙ?"
+ "ከ%s በላይ የቆዩ መልዕክቶች ይሰረዙ እና ራስ-ሰር ሰራዥ ይብራ?"
+ "%s እንዲህ ብለዋል፦"
+ "እርስዎ እንዲህ ብለዋል፦"
+ "መልዕክት ከ%s"
+ "እርስዎ መልዕክት ልከዋል"
+ "በመላክ ላይ…"
+ "አልተላከም። እንደገና ለመሞከር ይንኩ።"
+ "አልተላከም። እንደገና በመሞከር ላይ…"
+ "ዳግም ላክ ወይም ሰርዝ"
+ "ወደ ድንገተኛ አገልግሎቶች እባክዎ የድምፅ ጥሪ ያድርጉ። የእርስዎ የጽሑፍ መልዕክት አሁን ላይ ሊደርስ አይችልም።"
+ "አልተሳካም"
+ "አዲስ የሚወርድ የኤምኤምኤስ መልዕክት"
+ "አዲስ የኤምኤምኤስ መልዕክት"
+ "ማውረድ አልተቻለም"
+ "እንደገና ለመሞከር ይንኩ"
+ "ለማውረድ ይንኩ"
+ "አውርድ ወይም ሰርዝ"
+ "በማውረድ ላይ…"
+ "መልዕክቱ ጊዜው አልፎበታል ወይም አይገኝም።"
+ "መጠን፦ %1$s፣ ጊዜው የሚያልፍበት፦ %2$s"
+ "መላክ አይቻልም። ተቀባይ ልክ አይደለም።"
+ "አገልግሎት በአውታረ መረብ ላይ አልገበረም"
+ "በአውታረ መረብ ችግር ምክንያት መላክ አልተቻለም"
+ "መልዕክቱ ጊዜው አልፎበታል ወይም አይገኝም።"
+ "(ርዕስ ጉዳይ የለውም)"
+ "ያልታወቀ ላኪ"
+ "ደርሷል"
+ "መልዕክት %1$s ከ%2$s ማውረድ አልተቻለም።"
+ "በአነስተኛ ማህደረ ትውስታ ምክንያት የውሂብ ጎታ ክወና ማጠናቀቅ አልተቻለም"
+ "መልዕክት አልተላከም"
+ "አንዳንድ መልዕክቶች በአላላክ ውስጥ አልተላኩም"
+
+ %d መልዕክቶች በ%d ውይይቶች ውስጥ
+ %d መልዕክቶች በ%d ውይይቶች ውስጥ
+
+ "መልዕክት አልወረደም"
+ "አንዳንድ መልዕክቶች በአላላክ ውስጥ አልወረዱም"
+
+ %d መልዕክቶች በ%d ውይይቶች ውስጥ
+ %d መልዕክቶች በ%d ውይይቶች ውስጥ
+
+ "ወደ %1$s የሚሄድ መልዕክት አልተላከም"
+ "ወደ ድንገተኛ አገልግሎቶች እባክዎ የድምፅ ጥሪ ያድርጉ። የእርስዎ ወደ %1$s የጽሑፍ መልዕክት አሁን ላይ ሊደርስ አይችልም።"
+
+ %d አዲስ መልዕክቶች
+ %d አዲስ መልዕክቶች
+
+ "ጀምር"
+ "ካሜራ ሊገኝ አይችልም"
+ "ካሜራ ሊገኝ አይችልም"
+ "የቪዲዮ ቀረጻ ሊገኝ አይችልም"
+ "ማህደረ መረጃን ማስቀመጥ አይቻልም"
+ "ስዕል ማንሳት አልተቻለም"
+ "ተመለስ"
+ "በማህደር ተቀምጧል"
+ "ሰርዝ"
+ "በማህደር አስቀምጥ"
+ "ከማህደር አስወጣ"
+ "ማሳወቂያዎችን አጥፋ"
+ "ማሳወቂያዎችን አብራ"
+ "እውቂያ አክል"
+ "አውርድ"
+ "ላክ"
+ "ሰርዝ"
+ "ይህን መልዕክት ይሰረዝ?"
+ "ይህ እርምጃ ሊቀለበስ አይችልም።"
+ "ሰርዝ"
+
+ እነዚህ ውይይቶች ይሰርዙ?
+ እነዚህ ውይይቶች ይሰርዙ?
+
+ "ሰርዝ"
+ "ይቅር"
+ "ለ"
+ "በርካታ ምስሎችን ምረጥ"
+ "ምርጫ አረጋግጥ"
+ "+%d"
+ "ድምፅን መቅዳት አልተቻለም። እንደገና ይሞክሩ።"
+ "ድምፅን ማጫወት አልተቻለም። እንደገና ይሞክሩ።"
+ "ድምፅን ማስቀመጥ አልተቻለም። እንደገና ይሞክሩ።"
+ "ነካ ያድርጉ እና ይያዙ"
+ "፣ "
+ " "
+ "፦ "
+ " "
+ "ስዕል"
+ "የተሰሚ ቅንጥብ"
+ "ቪዲዮ"
+ "የእውቂያ ካርድ"
+ "አውርድ"
+ "በኤስኤምኤስ በኩል መልስ ስጥ"
+ "በኤምኤምኤስ በኩል ምላሽ ስጥ"
+ "ምላሽ ስጥ"
+
+ %d ተሳታፊዎች
+ %d ተሳታፊዎች
+
+ "እኔ"
+ "እውቂያ ታግዶ በማህደር ውስጥ ተቀምጧል"
+ "እውቂያ እገዳው ተነስቷል እና ከቤተማከማቻ ወጥቷል"
+ "%d በማህደር ተቀምጧል"
+ "%d ከማህደር ወጥተዋል"
+ "ማሳወቂያዎች ጠፍተዋል"
+ "ማሳወቂያዎች በርተዋል"
+ "ሁሉም ተቀናብሯል። እንደገና ላክ የሚለውን ይንኩ።"
+ "የአላላክ በተሳካ ሁኔታ እንደ ነባሪ የኤስኤምኤስ መተግበሪያ ተዘጋጅቷል።"
+
+ ዓባሪዎችን አስወግድ
+ ዓባሪዎችን አስወግድ
+
+ "የኦዲዮ ዓባሪ"
+ "የኦዲዮ ዓባሪ ያጫውቱ"
+ "ለአፍታ አቁም"
+ "መልእክት ከ %s፦ %s።"
+ "ያልተሳካ መልዕክት ከ%s፦ %s። ሰዓት፦ %s።"
+ "ከ%s የመጣ መልዕክት፦ %s። ሰዓት፦ %s።"
+ "ወደ %s የሚሄድ ያልተላከ መልዕክት፦ %s። ሰዓት፦ %s።"
+ "መልዕክት ወደ %s በመላክ ላይ፦ %s። ሰዓት፦ %s።"
+ "ያልተሳካ ወደ %s የሚሄድ መልዕክት፦ %s። ሰዓት፦ %s።"
+ "ወደ %s የሚሄድ መልዕክት፦ %s። ሰዓት፦ %s።"
+ "ያልተሳካ መልዕክት ከ%s፦ %s። ሰዓት፦ %s። %s።"
+ "መልዕክት ከ%s፦ %s። ሰዓት፦ %s። %s።"
+ "ወደ %s የሚሄድ ያልተላከ መልዕክት፦ %s። ሰዓት፦ %s።"
+ "መልዕክት ወደ %s በመላክ ላይ፦ %s። ሰዓት፦ %s።"
+ "ያልተሳካ ወደ %s የሚሄድ መልዕክት፦ %s። ሰዓት፦ %s።"
+ "ወደ %s የሚሄድ መልዕክት፦ %s። ሰዓት፦ %s።"
+ "ያልተሳካ መልዕክት። ዳግም ለመሞከር ይንኩ።"
+ "ከ%s ጋር ውይይት"
+ "ርዕሰ ጉዳይ ሰርዝ"
+ "ቪዲዮ ቅረጽ"
+ "የቆመ ምስል አንሳ"
+ "ፎቶ አንሳ"
+ "ቪዲዮ መቅረጽ ጀምር"
+ "ወደ የሙሉ ማያ ገጽ ካሜራ ቀይር"
+ "በፊት እና ኋላ ካሜራ መካከል ቀያይር"
+ "መቅረጽ አቁም እና ቪዲዮ አያይዝ"
+ "ቪዲዮ መቅዳትን አቁም"
+ "ፎቶዎችን በመልዕክት መላክ"
+
+ %d ፎቶዎች ወደ የ«%s» አልበም ተቀምጠዋል
+ %d ፎቶዎች ወደ የ«%s» አልበም ተቀምጠዋል
+
+
+ %d ቪዲዮዎች ወደ የ«%s» አልበም ተቀምጠዋል
+ %d ቪዲዮዎች ወደ የ«%s» አልበም ተቀምጠዋል
+
+
+ %d ዓባሪዎች ወደ «%s» አልበም ተቀምጠዋል
+ %d ዓባሪዎች ወደ «%s» አልበም ተቀምጠዋል
+
+
+ %d ዓባሪዎች ወደ «ውርዶች» ተቀምጠዋል
+ %d ዓባሪዎች ወደ «ውርዶች» ተቀምጠዋል
+
+
+ %d ዓባሪዎች ተቀምጠዋል
+ %d ዓባሪዎች ተቀምጠዋል
+
+
+ %d ዓባሪዎችን ማስቀመጥ አልተቻለም
+ %d ዓባሪዎችን ማስቀመጥ አልተቻለም
+
+ "የኤምኤምኤስ ዓባሪ ተቀምጧል"
+ "ቅንብሮች"
+ "በማህደር ተቀምጧል"
+ "ዝጋ"
+ "ኤምኤምኤስ"
+ "የላቀ"
+ "አርም"
+ "ማሳወቂያዎች"
+ "ድምፅ"
+ "ፀጥታ"
+ "ንዘር"
+ "ታግዷል"
+ "የኤስኤምኤስ መላክ ሪፖርቶች"
+ "ለሚልኩት እያንዳንዱ ኤስኤምኤስ የመላኪያ ሪፖርት ጠይቅ"
+ "በራስ- ሰርስረህ አውጣ"
+ "የኤምኤምኤስ መልዕክቶችን በራስ-ሰር ሰርስረህ አውጣ"
+ "በእንቅስቃሴ ላይ በራስ-ሰር ሰርስረህ አውጣ"
+ "የስልክ አገልግሎት ሰጪ በሚቀየርበት ጊዜ ኤምኤምኤስን በራስ-ሰር ሰርስረህ አውጣ"
+ "የቡድን መልዕክት መላላኪያ"
+ "ብዙ ተቀባዮች ሲኖሩ አንዲት መልዕክት ለመላክ ኤምኤምኤስ ይጠቀሙ"
+ "ነባሪ የኤስኤምኤስ መተግበሪያ"
+ "ነባሪ የኤስኤምኤስ መተግበሪያ"
+
+
+ "ስልክ ቁጥርዎ"
+ "የማይታወቅ"
+ "የወጪ መልዕክት ድምጾች"
+ "ኤስኤምኤስ አራግፍ"
+ "የመጡ የኤስኤምኤስ ጥሬ ውሂብ ወደ ውጫዊ የማከማቻ ፋይል ላይ አራግፍ"
+ "ኤምኤምኤስ አራግፍ"
+ "የመጡ የኤምኤምኤስ ጥሬ ውሂብ ወደ ውጫዊ የማከማቻ ፋይል ላይ አራግፍ"
+ "ገመድ አልባ ማንቂያዎች"
+ "የመልዕክት አማራጮች"
+ "ጽሁፍ ገልብጥ"
+ "ዝርዝሮችን ይመልከቱ"
+ "ሰርዝ"
+ "ያስተላልፉ"
+ "የመልዕክት ዝርዝሮች"
+ "ዓይነት፦ "
+ "የፅሁፍ መልዕክት"
+ "ማህደረ ብዙ መረጃመልዕክት"
+ "ከ፦ "
+ "ለ፦ "
+ "የተላከው፦ "
+ "የደረሰው፦ "
+ "ርዕሰ ጉዳይ፦ "
+ "መጠን፦ "
+ "ቅድሚያ የሚሰጠው፦ "
+ "ሲም፦ "
+ "ከፍተኛ"
+ "መደበኛ"
+ "ዝቅ ያለ"
+ "ሲም %s"
+ "የተደበቀ የላኪ አድራሻ"
+ "አባሪዎችን በመጫን ላይ እያለ መልዕክት መላክ አይችልም።"
+ "ዓባሪን መጫን አልተቻለም። እንደገና ይሞክሩ።"
+ "አውታረ መረቡ ዝግጁ አይደለም። እንደገና ይሞክሩ።"
+ "ጽሑፍ ሰርዝ"
+ "ጽሑፍ እና ቁጥሮችን በማስገባት መካከል ይቀያይሩ"
+ "ተጨማሪ ተሳታፊዎችን ያክሉ"
+ "ተሳታፊዎችን ያረጋግጡ"
+ "አዲስ ውይይት ጀምር"
+ "ይህን ንጥል ምረጥ"
+ "ቪዲዮ አጫውት"
+ "ሰዎች እና አማራጮች"
+ "አርም"
+ "ሰዎች እና አማራጮች"
+ "አጠቃላይ"
+ "በዚህ ውይይት ውስጥ ያሉ ሰዎች"
+ "ደውል"
+ "መልዕክት ላክ"
+ "መልዕክት ይላኩ<br/><small>from %s</small>"
+
+ ፎቶዎችን ይላኩ
+ ፎቶዎችን ይላኩ
+
+
+ ኦዲዮዎች ይላኩ
+ ኦዲዮዎች ይላኩ
+
+
+ ቪዲዮዎችን ይላኩ
+ ቪዲዮዎችን ይላኩ
+
+
+ የእውቂያ ካርዶችን ይላኩ
+ የእውቂያ ካርዶችን ይላኩ
+
+
+ ዓባሪዎችን ይላኩ
+ ዓባሪዎችን ይላኩ
+
+
+ %d ዓባሪዎችን ለመላክ የተዘጋጁ ዓባሪዎች
+ %d ዓባሪዎችን ለመላክ የተዘጋጁ ዓባሪዎች
+
+ "ግብረመልስ ላክ"
+ "በGoogle Play መደብር ውስጥ ይመልከቱ"
+ "የስሪት መረጃ"
+ "ስሪት %1$s"
+ "የክፍት ምንጭ ፍቃዶች"
+ "ማሳወቂያዎች"
+ "የዓባሪ ገደብ ተደርሷል"
+ "ዓባሪን መጫን አልተሳካም።"
+ "ወደ እውቂያ ይታከል?"
+ "እውቅያ ያክሉ"
+ "ርዕሰ ጉዳይ"
+ "ርዕሰ ጉዳይ፦ "
+ "%s%s"
+ "የእውቂያ ካርድ በመጫን ላይ"
+ "የእውቂያ ካርድን መጫን አልተቻለም"
+ "የእውቂያ ካርድ ይመልከቱ"
+
+ %d እውቂያዎች
+ %d እውቂያዎች
+
+ "የአውቂያ ካርዶች"
+ "የልደት ቀን"
+ "ማስታወሻዎች"
+ "መልዕክት አስተላልፍ"
+ "ምላሽ ስጥ"
+ "+1"
+ "+%d"
+ "ኤስኤምኤስ ተሰናክሏል"
+ "ለመላክ፣ የአላላክን እንደ ነባሪ የኤስኤምኤስ መተግበሪያ ያዘጋጁት"
+ "አላላክን እንደ ነባሪ የኤስኤምኤስ መተግበሪያ ያዘጋጁት"
+ "ለውጥ"
+ "መልዕክቶችን ለመቀበል የአላላክን እንደ ነባሪ የኤስኤምኤስ መተግበሪያ አድርገው ያዘጋጁት"
+ "ኤስ ኤም ኤስ መልዕክቶችን ለመላክ ምንም ተመራጭ ሲም አልተመረጠም"
+ "ይህ መተግበሪያ በመሣሪያው ባለቤት አይፈቀድም።"
+ "እሺ"
+ "በአንድ ውይይት ውስጥ በጣም ብዙ ተሳታፊዎች"
+
+ ልክ ያልሆኑ እውቂያዎች
+ ልክ ያልሆኑ እውቂያዎች
+
+ "የካሜራ ምስልን መጫን አልተቻለም"
+ "እርስዎ፦ "
+ "%s፦ "
+ "ረቂቅ"
+ "አንዴ አዲስ ውይይት ከጀመሩ በኋላ እዚህ ተዘርዝሮ ያዩታል"
+ "በቤተመዛግብት እንዲቀመጡ የተደረጉ ውይይቶች እዚህ ላይ ብቅ ያላሉ"
+ "ውይይቶች በመስቀል ላይ..."
+ "ስዕል"
+ "የተሰሚ ቅንጥብ"
+ "ቪዲዮ"
+ "የእውቂያ ካርድ"
+ "ኤምኤምኤስ"
+ "ቀልብስ"
+ "እንደገና ይሞክሩ"
+ "አዲስ መልዕክት ለመጀመር የእውቂያ ስም ወይም ስልክ ቁጥር ያስገቡ"
+ "አግድ"
+ "%sን አግድ"
+ "የ%s እገዳን አንሳ"
+ "%s ይታገድ?"
+ "ከዚህ ቁጥር መልዕክቶችን መቀበልዎን ይቀጥላሉ ነገርግን ከእንግዲህ እንዲያውቁት አይደረጉም። ይህ ውይይት በቤተመዛግብት ይቀመጣል።"
+ "የታገዱ እውቂያዎች"
+ "እገዳ አንሳ"
+ "የታገዱ እውቂያዎች"
+ "ከሰነዶች ቤተመዛግብት ምስል ይምረጡ"
+ "መልዕክት በመላክ ላይ"
+ "መልዕክት ተልኳል"
+ "የተንቀሳቃሽ ስልክ ውሂብ ጠፍቷል። ቅንብሮችዎን ያረጋግጡ።"
+ "በአይሮፕላን ሁኔታ ላይ እያለ መልዕክቶችን መላክ አይቻልም"
+ "መልዕክቱ ሊላክ አልቻለም"
+ "መልዕክት ወርዷል"
+ "የተንቀሳቃሽ ስልክ ውሂብ ጠፍቷል። ቅንብሮችዎን ያረጋግጡ።"
+ "መልዕክቶችን በአውሮፕላን ሁነታ ላይ ማውረድ አይቻልም"
+ "መልዕክት ሊወርድ አልቻለም"
+ "ዜሮ"
+ "አንድ"
+ "ሁለት"
+ "ሶስት"
+ "አራት"
+ "አምስት"
+ "ስድስት"
+ "ሰባት"
+ "ስምንት"
+ "ዘጠኝ"
+ "መልዕክት በ%1$s መላክ አልተቻለም፣ ስህተት %2$d"
+ "መልዕክት ባልታወቀ አገልግሎት አቅራቢ መላክ አልተቻለም፣ ስህተት %1$d"
+ "የተላለፈ፦ %s"
+ "መልዕክት አልተላከም፦ አገልግሎቱ በአውታረ መረብ ላይ አልገበረም።"
+ "መልዕክት አልተላከም፦ ልክ ያልሆነ የመድረሻ አድራሻ"
+ "መልዕክት አልተላከም፦ ልክ ያልሆነ መልዕክት"
+ "መልዕክት አልተላከም፦ የማይደገፍ ይዘት"
+ "መልዕክት አልተላከም፦ የማይደገፍ መልዕክት"
+ "መልዕክት አልተላከም፦ በጣም ትልቅ ነው"
+ "አዲስ መልዕክት"
+ "ይመልከቱ"
+ "ምስል"
+ "አግባብ የሆነውን መተግበሪያ ማግኘት አልተቻለም"
+ "ተቀባይ አስወግድ"
+ "አዲስ መልዕክት"
+ "ተወው"
+ "የመድረሻ ነጥብ ያርትዑ"
+ "አልተዘጋጀም"
+ "ስም"
+ "ኤ.ፒ.ኤን."
+ "MMSC"
+ "የMMS እጅ አዙር"
+ "የMMS ወደብ"
+ "MCC"
+ "MNC"
+ "የኤ.ፒ.ኤን አይነት"
+ "ኤ.ፒ.ኤን. ሰርዝ"
+ "አዲስ ኤ.ፒ.ኤን."
+ "አስቀምጥ"
+ "ጣለው"
+ "የስም መስክ ባዶ ሊሆን አይችልም"
+ "ኤ.ፒ.ኤን. ባዶ መሆን አይችልም።"
+ "የMCC መስክ 3 አሀዝ መሆን አለበት።"
+ "የMNC መስክ 2 ወይም 3 አሀዝ መሆን አለበት።"
+ "ነባሪ የኤ.ፒ.ኤን. ቅንብሮችን እነበረበት መመለስ።"
+ "ወደ ነባሪ ዳግም አስጀምር"
+ "የዳግም አስጀምር ነባሪ ኤ.ፒ.ኤን. ቅንብሮች ተጠናቀዋል።"
+ "ርዕስ አልባ"
+ "የመዳረሻ ነጥብ ስም"
+ "ኤ.ፒ.ኤኖች."
+ "አዲስ ኤ.ፒ.ኤን."
+ "የመዳረሻ ነጥብ ስም ቅንብሮች ለዚህ ተጠቃሚ አይገኙም"
+ "ወደ የቅንጥብ ሰሌዳ ይቀዳ?"
+ "ቅዳ"
+ "ለ%s"
+ "አጠቃላይ"
+ "የላቀ"
+ "አጠቃላይ ቅንብሮች"
+ "የላቁ ቅንብሮች"
+ "የ«%s» ሲም"
+ "የነጠላ ኤስኤምኤስ መልዕክቶችን ለሁሉም ተቀባዮች ይላኩ። እርስዎ ብቻ ነዎት ማንኛቸውም ምላሾችን የሚቀበሉት"
+ "አንዲት ኤምኤምኤስ ለሁሉም ተቀባዮች ይላኩ"
+ "ያልታወቀ ቁጥር"
+ "አዲስ መልዕክት"
+ "አዲስ መልዕክት"
+ "ሲም መራጭ"
+ "%1$s ተመርጧል፣ የሲም መራጭ"
+ "ርዕሰ ጉዳይ ያርትዑ"
+ "ሲም ይምረጡ ወይም ርዕሰ ጉዳይን ያርትዑ"
+ "ተሰሚን ለመቅረጽ ይንኩና ይያዙ"
+ "አዲስ ውይይት ጀምር"
+ "አላላክ"
+ "የአላላክ ዝርዝር"
+ "አላላክ"
+ "አዲስ መልዕክት"
+ "የውይይት ዝርዝር"
+ "ውይይቶችን በመጫን ላይ"
+ "መልዕክቶች በመስቀል ላይ"
+ "ተጨማሪ ውይይቶችን ይመልከቱ"
+ "ተጨማሪ መልዕክቶችን አሳይ"
+ "ውይይት ተሰርዟል"
+ "ውይይት ተሰርዟል። የተለየ የአላላክ ውይይት ለማሳየት ይንኩ"
+ "ታግዷል"
+ "አልታገደም"
+ "የማከማቻ ቦታ ዝቅተኛ ነው። አንዳንድ ውሂብ ሊጠፋ ይችላል።"
+ "ዓባሪዎችን ይምረጡ"
+ "ምርጫ አረጋግጥ"
+ "%d ተመርጠዋል"
+ "እባክዎ አንድ ወይም ተጨማሪ ዓባሪዎችን ያስወግዱና እንደገና ይሞክሩ።"
+ "መልዕክትዎን ለመላክ መሞከር ይችላሉ፣ ነገር ግን አንድ ወይም ተጨማሪ ዓባሪዎችን እስኪያስወግዱ ድረስ ላይደርስ ይችላል።"
+ "በአንድ መልዕክት አንድ ቪዲዮ ብቻ ለመላክ ይችላሉ። እባክዎ ተጨማሪ ቪዲዮዎችን ያስወግዱ እና እንደገና ይሞክሩ።"
+ "አላላክ አባሪን መጫን አልቻለም።"
+ "ለማንኛውም ላክ"
+ "ውይይት መጀመር አልተቻለም"
+ "%1$s (%2$s)"
+ "%s ተመርጧል"
+
diff --git a/res/values-ar/arrays.xml b/res/values-ar/arrays.xml
new file mode 100644
index 0000000..0cf1702
--- /dev/null
+++ b/res/values-ar/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "بدون موضوع"
+ "بدون موضوع"
+
+
+ "نعم"
+ "لا"
+ "موافق"
+ "هاها"
+ "شكرًا"
+ "أوافق"
+ "لطيف"
+ "في الطريق"
+ "حسنًا، سأتناول ذلك لاحقًا"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
new file mode 100644
index 0000000..8a58c4d
--- /dev/null
+++ b/res/values-ar/strings.xml
@@ -0,0 +1,623 @@
+
+
+
+
+ "المراسلة"
+ "المراسلة"
+ "تحديد محادثة"
+ "الإعدادات"
+ "إرسال رسالة"
+ "إضافة مرفق"
+ "مساعدة"
+ "مرحبًا"
+ "تخطٍ"
+ "التالي >"
+ "التالي"
+ "خروج"
+ "الإعدادات >"
+ "الإعدادات"
+ "يحتاج تطبيق المراسلة إلى إذن للوصول إلى الرسائل القصيرة SMS والهاتف وجهات الاتصال."
+ "يمكنك تغيير الأذونات من خلال الإعدادات > التطبيقات > المراسلة > الأذونات."
+ "يمكنك تغيير الأذونات من خلال الانتقال إلى الإعدادات، التطبيقات، المراسلة، الأذونات."
+ "من يتم الاتصال بهم بشكل متكرر"
+ "كل جهات الاتصال"
+ "إرسال إلى %s"
+ "التقاط الصور أو الفيديو"
+ "اختيار صور من هذا الجهاز"
+ "تسجيل الصوت"
+ "اختيار صورة"
+ "تم تحديد الوسائط."
+ "تم إلغاء تحديد الوسائط."
+ "تم تحديد %d"
+ "صورة %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "صورة"
+ "تسجيل الصوت"
+ "المشاركة"
+ "للتو"
+ "الآن"
+
+ %d دقيقة
+ دقيقتان (%d)
+ %d دقائق
+ %d دقيقة
+ %d من الدقائق
+ %d دقيقة
+
+
+ %d ساعة
+ ساعتان (%d)
+ %d ساعات
+ %d ساعة
+ %d من الساعات
+ %d ساعة
+
+
+ %d يوم
+ يومان (%d)
+ %d أيام
+ %d يومًا
+ %d من الأيام
+ يوم واحد (%d)
+
+
+ %d أسبوع
+ أسبوعان (%d)
+ %d أسابيع
+ %d أسبوعًا
+ %d من الأسابيع
+ أسبوع
+
+
+ %d شهر
+ شهران (%d)
+ %d أشهر
+ %d شهرًا
+ %d من الأشهر
+ شهر
+
+
+ %d عام
+ عامان (%d)
+ %d أعوام
+ %d عامًا
+ %d من الأعوام
+ عام
+
+ "رسالة من الفئة 0"
+ "حفظ"
+ "مساحة الجهاز منخفضة. سيحذف تطبيق المراسلة الرسائل القديمة تلقائيًا لتحرير مساحة."
+ "مساحة التخزين منخفضة"
+ "ربما لا يرسل تطبيق المراسلة رسائل أو يتلقاها ما لم تتوفر المزيد من المساحة على جهازك."
+ "سعة تخزين الرسائل القصيرة SMS منخفضة. ربما تحتاج إلى حذف بعض الرسائل."
+ "تأكيد رقم الهاتف"
+ "ستضمن هذه الخطوة - التي يتم تنفيذها مرة واحدة فقط - تسليم تطبيق المراسلة لرسائلك الجماعية بشكل صحيح."
+ "رقم الهاتف"
+ "حذف جميع الرسائل التي تتضمن وسائط"
+ "حذف الرسائل الأقدم من %s"
+ "حذف الرسائل الأقدم من %s تلقائيًا"
+ "تجاهل"
+ "هل تريد حذف كل الرسائل التي تتضمن ملفات وسائط؟"
+ "هل تريد حذف الرسائل الأقدم من %s؟"
+ "هل تريد حذف الرسائل الأقدم من %s وتشغيل الحذف التلقائي؟"
+ "قال %s"
+ "أنت قلت"
+ "رسالة من %s:"
+ "لقد أرسلت رسالة"
+ "جارٍ الإرسال..."
+ "لم يتم إرسال الرسالة. المس لإعادة المحاولة."
+ "لم يتم إرسال الرسالة. جارٍ إعادة المحاولة…"
+ "إعادة إرسال أو حذف"
+ "الرجاء إجراء مكالمة صوتية لخدمات الطوارئ. يتعذر توصيل رسالتك النصية في الوقت الحالي."
+ "أخفق الإرسال"
+ "هناك رسالة وسائط متعددة جديدة للتنزيل"
+ "رسالة وسائط متعددة جديدة"
+ "تعذر التنزيل"
+ "المس لإعادة المحاولة"
+ "المس للتنزيل"
+ "تنزيل أو حذف"
+ "جارٍ التنزيل…"
+ "انتهت صلاحية الرسالة أو ليست متاحة"
+ "الحجم: %1$s، تاريخ انتهاء الصلاحية: %2$s"
+ "يتعذر الإرسال. المستلم غير صالح."
+ "لم يتم تنشيط الخدمة على الشبكة"
+ "تعذر الإرسال بسبب حدوث مشكلة في الشبكة"
+ "انتهت صلاحية الرسالة أو ليست متاحة"
+ "(بلا موضوع)"
+ "مرسل غير معروف"
+ "تم التسليم"
+ "تعذر تنزيل الرسالة %1$s من %2$s."
+ "تعذر إتمام تشغيل قاعدة البيانات نظرًا لانخفاض الذاكرة"
+ "لم يتم إرسال الرسالة"
+ "لم يتم إرسال بعض الرسائل في تطبيق المراسلة"
+
+ %d من الرسائل في %d محادثة
+ %d من الرسائل في محادثتين (%d)
+ %d من الرسائل في %d محادثات
+ %d من الرسائل في %d محادثة
+ %d من الرسائل في %d من المحادثات
+ %d من الرسائل في محادثة واحدة
+
+ "لم يتم تنزيل الرسالة"
+ "لم يتم تنزيل بعض الرسائل في تطبيق المراسلة"
+
+ %d من الرسائل في %d محادثة
+ %d من الرسائل في محادثتين (%d)
+ %d من الرسائل في %d محادثات
+ %d من الرسائل في %d محادثة
+ %d من الرسائل في %d من المحادثات
+ %d من الرسائل في محادثة واحدة
+
+ "لم يتم إرسال رسالة إلى %1$s"
+ "الرجاء إجراء مكالمة صوتية لخدمات الطوارئ. يتعذر إرسال رسالتك النصية إلى %1$s في الوقت الحالي."
+
+ ليست هناك أية رسالة جديدة (%d)
+ رسالتان (%d) جديدتان
+ %d رسائل جديدة
+ %d رسالة جديدة
+ %d من الرسائل الجديدة
+ رسالة جديدة
+
+ "بدء"
+ "لا تتوفر كاميرا"
+ "لا تتوفر كاميرا"
+ "ميزة التقاط الفيديو غير متاحة"
+ "يتعذر حفظ ملف الوسائط"
+ "لا يمكن التقاط الصورة"
+ "رجوع"
+ "المؤرشفة"
+ "حذف"
+ "أرشيف"
+ "إزالة من الأرشيف"
+ "إيقاف الإشعارات"
+ "تشغيل الإشعارات"
+ "إضافة جهة اتصال"
+ "تنزيل"
+ "إرسال"
+ "حذف"
+ "هل تريد حذف هذه الرسالة؟"
+ "لا يمكن التراجع عن هذا الإجراء."
+ "حذف"
+
+ ليست هناك محادثات.
+ هل تريد حذف هاتين المحادثتين؟
+ هل تريد حذف هذه المحادثات؟
+ هل تريد حذف هذه المحادثات؟
+ هل تريد حذف هذه المحادثات؟
+ هل تريد حذف هذه الدردشة؟
+
+ "حذف"
+ "إلغاء"
+ "إلى"
+ "تحديد صور متعددة"
+ "تأكيد الاختيار"
+ "+%d"
+ "يتعذر تسجيل الصوت. أعد المحاولة."
+ "يتعذر تشغيل الصوت. أعد المحاولة."
+ "تعذر حفظ الصوت. أعد المحاولة."
+ "اللمس مع الاستمرار"
+ "، "
+ " "
+ ": "
+ " "
+ "الصورة"
+ "مقطع صوتي"
+ "الفيديو"
+ "بطاقة جهة الاتصال"
+ "تنزيل"
+ "الرد عبر رسالة قصيرة SMS"
+ "الرد عبر رسالة وسائط متعددة"
+ "الرد"
+
+ ليس هناك أي مشارك (%d)
+ مشاركان (%d)
+ %d مشاركين
+ %d مشاركًا
+ %d من المشاركين
+ مشارك واحد (%d)
+
+ "أنا"
+ "تم حظر جهة الاتصال وأرشفتها"
+ "تم إلغاء حظر جهة الاتصال وإلغاء أرشفتها"
+ "تم وضع %d في الأرشيف"
+ "تمت إزالة %d من الأرشيف"
+ "تم تعطيل الإشعارات"
+ "تم تشغيل الإشعارات"
+ "اكتمل الإعداد. المس \"إرسال\" مرة أخرى."
+ "تم تعيين تطبيق المراسلة كتطبيق الرسائل القصيرة SMS الافتراضي بنجاح."
+
+ ليست هناك مرفقات
+ تجاهل المرفقين
+ تجاهل المرفقات
+ تجاهل المرفقات
+ تجاهل المرفقات
+ تجاهل المرفق
+
+ "مرفق صوتي"
+ "تشغيل المرفق الصوتي"
+ "إيقاف مؤقت"
+ "رسالة من %s: %s."
+ "رسالة تعذر إرسالها من %s: %s. الوقت: %s."
+ "رسالة من %s: %s. الوقت: %s."
+ "رسالة لم يتم إرسالها إلى %s: %s. الوقت: %s."
+ "جارٍ إرسال رسالة إلى %s: %s. الوقت: %s."
+ "رسالة تعذر إرسالها إلى %s: %s. الوقت: %s."
+ "رسالة إلى %s: %s. الوقت: %s."
+ "رسالة تعذر إرسالها من %s: %s. الوقت: %s. %s."
+ "رسالة من %s: %s. الوقت: %s. %s."
+ "رسالة لم يتم إرسالها إلى %s: %s. الوقت: %s."
+ "جارٍ إرسال رسالة إلى %s: %s. الوقت: %s."
+ "رسالة تعذر إرسالها إلى %s: %s. الوقت: %s."
+ "رسالة إلى %s: %s. الوقت: %s."
+ "رسالة تعذر إرسالها. المس لإعادة المحاولة."
+ "محادثة مع %s"
+ "حذف الموضوع"
+ "التقاط فيديو"
+ "التقاط صورة ثابتة"
+ "التقاط صورة"
+ "بدء تسجيل الفيديو"
+ "التبديل إلى الكاميرا بملء الشاشة"
+ "التبديل بين الكاميرا الأمامية والخلفية"
+ "وقف التسجيل وإرفاق مقطع الفيديو"
+ "إيقاف تسجيل الفيديو"
+ "صور المراسلة"
+
+ لم يتم حفظ أية صورة (%d) في الألبوم \"%s\"
+ تم حفظ صورتين (%d) في الألبوم \"%s\"
+ تم حفظ %d صور في الألبوم \"%s\"
+ تم حفظ %d صورة في الألبوم \"%s\"
+ تم حفظ %d من الصور في الألبوم \"%s\"
+ تم حفظ صورة واحدة (%d) في الألبوم \"%s\"
+
+
+ لم يتم حفظ أي مقطع فيديو (%d) في الألبوم \"%s\"
+ تم حفظ مقطعي فيديو (%d) في الألبوم \"%s\"
+ تم حفظ %d مقاطع فيديو في الألبوم \"%s\"
+ تم حفظ %d مقطع فيديو في الألبوم \"%s\"
+ تم حفظ %d من مقاطع الفيديو في الألبوم \"%s\"
+ تم حفظ مقطع فيديو واحد (%d) في الألبوم \"%s\"
+
+
+ لم يتم حفظ أي مرفق (%d) في ألبوم \"%s\"
+ تم حفظ مرفقين (%d) في ألبوم \"%s\"
+ تم حفظ %d مرفقات في ألبوم \"%s\"
+ تم حفظ %d مرفقًا في ألبوم \"%s\"
+ تم حفظ %d من المرفقات في ألبوم \"%s\"
+ تم حفظ مرفق %d في ألبوم \"%s\"
+
+
+ لم يتم حفظ أي مرفق (%d) في \"التنزيلات\"
+ تم حفظ مرفقين (%d) في \"التنزيلات\"
+ تم حفظ %d مرفقات في \"التنزيلات\"
+ تم حفظ %d مرفقًا في \"التنزيلات\"
+ تم حفظ %d من المرفقات في \"التنزيلات\"
+ تم حفظ مرفق واحد (%d) في \"التنزيلات\"
+
+
+ لم يتم حفظ أية مرفقات (%d)
+ تم حفظ مرفقين (%d)
+ تم حفظ %d مرفقات
+ تم حفظ %d مرفقًا
+ تم حفظ %d من المرفقات
+ تم حفظ مرفق واحد %d
+
+
+ لم يتعذر حفظ أية مرفقات (%d)
+ تعذر حفظ مرفقين (%d)
+ تعذر حفظ %d مرفقات
+ تعذر حفظ %d مرفقًا
+ تعذر حفظ %d من المرفقات
+ تعذر حفظ مرفق واحد (%d)
+
+ "تم حفظ مرفق رسالة الوسائط المتعددة"
+ "الإعدادات"
+ "المؤرشفة"
+ "إغلاق"
+ "رسالة وسائط متعددة"
+ "إعدادات متقدمة"
+ "تصحيح الأخطاء"
+ "الإشعارات"
+ "الصوت"
+ "صامت"
+ "اهتزاز"
+ "محظور"
+ "تقارير تسليم الرسائل القصيرة SMS"
+ "طلب تقرير تسليم لكل رسالة قصيرة SMS ترسلها"
+ "استرداد تلقائي"
+ "استرداد رسائل الوسائط المتعددة تلقائيًا"
+ "استرداد تلقائي للتجوال"
+ "استرداد رسائل الوسائط المتعددة عند التجوال تلقائيًا"
+ "المراسلة الجماعية"
+ "يمكنك استخدام رسائل الوسائط المتعددة لإرسال رسالة واحدة عندما يكون هناك عدة مستلمين"
+ "تطبيق الرسائل القصيرة SMS الافتراضي"
+ "تطبيق الرسائل القصيرة SMS الافتراضي"
+
+
+ "رقم هاتفك"
+ "غير معروف"
+ "أصوات الرسائل الصادرة"
+ "تفريغ الرسائل القصيرة SMS"
+ "تفريغ البيانات الأولية للرسائل القصيرة SMS في ملف تخزين خارجي"
+ "تفريغ رسائل الوسائط المتعددة"
+ "تفريغ البيانات الأولية لرسائل الوسائط المتعددة في ملف تخزين خارجي"
+ "تنبيهات لاسلكية"
+ "خيارات الرسالة"
+ "نسخ النص"
+ "عرض التفاصيل"
+ "حذف"
+ "إعادة توجيه"
+ "تفاصيل الرسالة"
+ "النوع: "
+ "رسالة نصية"
+ "رسالة وسائط متعددة"
+ "من: "
+ "إلى: "
+ "تاريخ الإرسال: "
+ "تاريخ التلقي: "
+ "الموضوع: "
+ "الحجم: "
+ "الأولوية: "
+ "SIM: "
+ "عالية"
+ "عادية"
+ "منخفضة"
+ "SIM %s"
+ "عنوان المرسل المخفي"
+ "يتعذر إرسال رسالة أثناء تحميل المرفقات."
+ "يتعذر تحميل المرفق. أعد المحاولة."
+ "الشبكة ليست جاهزة بعد. يمكنك إعادة المحاولة."
+ "حذف النص"
+ "التبديل بين إدخال النص والأرقام"
+ "إضافة مزيد من المشاركين"
+ "تأكيد المشاركين"
+ "بدء محادثة جديدة"
+ "تحديد هذا العنصر"
+ "تشغيل الفيديو"
+ "الأشخاص والخيارات"
+ "تصحيح الأخطاء"
+ "الأشخاص والخيارات"
+ "عام"
+ "الأشخاص في هذه المحادثة"
+ "إجراء مكالمة"
+ "إرسال رسالة"
+ "إرسال رسالة<br/><small>من %s</small>"
+
+ ليست هناك صور لإرسالها
+ إرسال الصورتين
+ إرسال الصور
+ إرسال الصور
+ إرسال الصور
+ إرسال الصورة
+
+
+ ليست هناك ملفات صوت لإرسالها
+ إرسال ملفيّ الصوت
+ إرسال ملفات الصوت
+ إرسال ملفات الصوت
+ إرسال ملفات الصوت
+ إرسال ملف الصوت
+
+
+ ليست هناك ملفات فيديو لإرسالها
+ إرسال ملفي الفيديو
+ إرسال ملفات الفيديو
+ إرسال ملفات الفيديو
+ إرسال ملفات الفيديو
+ إرسال ملف الفيديو
+
+
+ ليست هناك بطاقات جهة اتصال لإرسالها
+ إرسال بطاقتي جهة الاتصال
+ إرسال بطاقات جهة الاتصال
+ إرسال بطاقات جهة الاتصال
+ إرسال بطاقات جهة الاتصال
+ إرسال بطاقة جهة الاتصال
+
+
+ ليست هناك مرفقات لإرسالها
+ إرسال المرفقين
+ إرسال المرفقات
+ إرسال المرفقات
+ إرسال المرفقات
+ إرسال المرفق
+
+
+ لم يتم تحديد أي مرفقات
+ مرفقان (%d) جاهزان للإرسال
+ %d مرفقات جاهزة للإرسال
+ %d مرفقًا جاهزًا للإرسال
+ %d من المرفقات الجاهزة للإرسال
+ مرفق واحد جاهز للإرسال
+
+ "إرسال تعليقات"
+ "عرض في متجر Google Play"
+ "معلومات الإصدار"
+ "الإصدار %1$s"
+ "تراخيص برامج مفتوحة مصدر"
+ "الإشعارات"
+ "تم بلوغ حد المرفقات"
+ "أخفق تحميل المرفق."
+ "إضافة إلى جهات الاتصال؟"
+ "إضافة جهة اتصال"
+ "الموضوع"
+ "الموضوع: "
+ "%s%s"
+ "جارٍ تحميل بطاقة جهة الاتصال"
+ "تعذر تحميل بطاقة جهة الاتصال"
+ "عرض بطاقة جهة الاتصال"
+
+ ليست هناك أية جهة اتصال (%d)
+ جهتا اتصال (%d)
+ %d جهات اتصال
+ %d جهة اتصال
+ %d من جهات الاتصال
+ جهة اتصال واحدة (%d)
+
+ "بطاقات جهات الاتصال"
+ "تاريخ الميلاد"
+ "ملاحظات"
+ "إعادة توجيه الرسالة"
+ "رد"
+ "1+"
+ "+%d"
+ "تم تعطيل الرسائل القصيرة SMS"
+ "للإرسال، عيّن تطبيق المراسلة كتطبيق الرسائل القصيرة SMS الافتراضي"
+ "يجب تعيين تطبيق المراسلة كتطبيق الرسائل القصيرة SMS الافتراضي"
+ "تغيير"
+ "لاستلام رسائل، عيّن تطبيق المراسلة كتطبيق الرسائل القصيرة SMS الافتراضي"
+ "لم يتم تحديد شريحة SIM المفضلة لإرسال رسائل قصيرة SMS"
+ "لم يتم السماح لهذا التطبيق بواسطة مالك الجهاز."
+ "موافق"
+ "هناك عدد كبير جدًا من المشاركين في محادثة"
+
+ ليست هناك جهات اتصال غير صالحة
+ جهتا اتصال غير صالحتين
+ جهات اتصال غير صالحة
+ جهات اتصال غير صالحة
+ جهات اتصال غير صالحة
+ جهة اتصال غير صالحة
+
+ "يتعذر تحميل صورة الكاميرا"
+ "أنت: "
+ "%s: "
+ "مسودة"
+ "بعد بدء دردشة جديدة، ستظهر مدرجة هنا"
+ "الإشعارات المؤرشفة تظهر هنا"
+ "جارٍ تحميل المحادثات..."
+ "صورة"
+ "مقطع صوتي"
+ "فيديو"
+ "بطاقة جهة الاتصال"
+ "رسالة وسائط متعددة"
+ "تراجع"
+ "إعادة المحاولة"
+ "أدخل اسم جهة اتصال أو رقم هاتف لبدء رسالة جديدة"
+ "حظر"
+ "حظر %s"
+ "إلغاء حظر %s"
+ "هل تريد حظر %s؟"
+ "ستستمر في استلام الرسائل من هذا الرقم ولكن لن يتم إرسال إشعارات إليك مرة أخرى. ستتم أرشفة هذه المحادثة."
+ "جهات الاتصال المحظورة"
+ "إلغاء الحظر"
+ "جهات الاتصال المحظورة"
+ "اختيار صورة من مكتبة المستندات"
+ "جارٍ إرسال الرسالة"
+ "تم إرسال الرسالة"
+ "تم إيقاف اتصال بيانات الجوّال. تحقق من إعداداتك."
+ "يتعذر إرسال رسائل في وضع الطائرة"
+ "تعذر إرسال الرسالة"
+ "تم تنزيل الرسالة"
+ "تم إيقاف اتصال بيانات الجوّال. تحقق من إعداداتك."
+ "يتعذر تنزيل الرسائل في وضع الطائرة"
+ "تعذر تنزيل الرسالة"
+ "صفر"
+ "واحد"
+ "اثنان"
+ "ثلاثة"
+ "أربعة"
+ "خمسة"
+ "ستة"
+ "سبعة"
+ "ثمانية"
+ "تسعة"
+ "يتعذر إرسال الرسالة مع %1$s، الخطأ %2$d"
+ "يتعذر إرسال الرسالة مع مشغِّل شبكة جوّال غير معروف، الخطأ %1$d"
+ "إعادة التوجيه: %s"
+ "لم يتم إرسال الرسالة: لم يتم تنشيط الخدمة على الشبكة"
+ "لم يتم إرسال الرسالة: عنوان الوجهة غير صالح"
+ "لم يتم إرسال الرسالة: رسالة غير صالحة"
+ "لم يتم إرسال الرسالة: محتوى غير متوافق"
+ "لم يتم إرسال الرسالة: رسالة غير متوافقة"
+ "لم يتم إرسال الرسالة: الحجم كبير جدًا"
+ "رسالة جديدة"
+ "عرض"
+ "صورة"
+ "تعذر العثور على تطبيق مناسب"
+ "إزالة المستلم"
+ "رسالة جديدة"
+ "إلغاء"
+ "تعديل نقطة الدخول"
+ "لم يتم التعيين"
+ "الاسم"
+ "APN"
+ "MMSC"
+ "الخادم الوكيل لرسائل الوسائط المتعددة"
+ "منفذ رسائل الوسائط المتعددة"
+ "MCC"
+ "MNC"
+ "نوع APN"
+ "حذف APN"
+ "APN جديد"
+ "حفظ"
+ "تجاهل"
+ "لا يمكن أن يكون حقل الاسم فارغًا."
+ "لا يمكن أن يكون APN فارغًا."
+ "يجب أن يكون حقل MCC من ثلاثة أرقام."
+ "يجب أن يتكون حقل MNC من رقمين أو ثلاثة أرقام."
+ "جارٍ استعادة إعدادات APN الافتراضية."
+ "إعادة تعيين إلى الإعداد الافتراضي"
+ "اكتملت إعادة تعيين إعدادات APN الافتراضية."
+ "بلا عنوان"
+ "أسماء نقاط الدخول"
+ "أسماء نقاط الدخول (APN)"
+ "APN جديد"
+ "إعدادات اسم نقطة الدخول ليست متوفرة لهذا المستخدم"
+ "هل تريد النسخ في الحافظة؟"
+ "نسخ"
+ "إلى %s"
+ "عام"
+ "إعدادات متقدمة"
+ "الإعدادات العامة"
+ "إعدادات متقدمة"
+ "شريحة SIM من \"%s\""
+ "إرسال رسالة قصيرة واحدة إلى جميع المستلمين. ولن تصل الردود إلا إليك"
+ "إرسال رسالة وسائط متعددة إلى جميع المستلمين"
+ "رقم غير معروف"
+ "رسالة جديدة"
+ "رسالة جديدة."
+ "محدد SIM"
+ "تم اختيار %1$s، أداة اختيار شريحة SIM"
+ "تعديل الموضوع"
+ "تحديد SIM أو تعديل الموضوع"
+ "المس مع الاستمرار لتسجيل الصوت"
+ "بدء محادثة جديدة"
+ "المراسلة"
+ "قائمة المراسلة"
+ "المراسلة"
+ "رسالة جديدة"
+ "قائمة المحادثات"
+ "جارٍ تحميل المحادثات."
+ "جارٍ تحميل الرسائل"
+ "عرض المزيد من المحادثات"
+ "عرض المزيد من الرسائل"
+ "تم حذف المحادثة"
+ "تم حذف المحادثة. المس لعرض محادثة مختلفة في تطبيق المراسلة"
+ "تم الحظر"
+ "تم إلغاء الحظر"
+ "مساحة التخزين منخفضة. ربما يتم فقد بعض البيانات."
+ "تحديد المرفقات"
+ "تأكيد التحديد"
+ "تم تحديد %d"
+ "يُرجى إزالة مرفق أو أكثر وإعادة المحاولة."
+ "يمكنك محاولة إرسال الرسالة، ولكن ربما لا يتم تسليمها ما لم تتم إزالة مرفق أو أكثر من هذه الرسالة."
+ "لا يمكنك إرسال أكثر من مقطع فيديو واحد لكل رسالة. يُرجى إزالة مقاطع الفيديو الإضافية وإعادة المحاولة."
+ "أخفق تطبيق المراسلة في تحميل المرفق."
+ "إرسال على أية حال"
+ "لا يمكن بدء المحادثة"
+ "%1$s (%2$s)"
+ "تم اختيار %s"
+
diff --git a/res/values-az-rAZ/arrays.xml b/res/values-az-rAZ/arrays.xml
new file mode 100644
index 0000000..f4b43e4
--- /dev/null
+++ b/res/values-az-rAZ/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "mövzu yoxdur"
+ "mövzusuz"
+
+
+ "Hə"
+ "Yox"
+ "Ok"
+ "Heh"
+ "Çox sağ olun"
+ "Razıyam"
+ "Nizza"
+ "Yolumda"
+ "Ok, Sizinlə sonra əlaqə saxlayacam"
+ ":)"
+ ":("
+
+
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..0bb8ef8
--- /dev/null
+++ b/res/values-az-rAZ/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Mesajlaşma"
+ "Mesajlaşma"
+ "Söhbəti seç"
+ "Ayarlar"
+ "Mesaj göndər"
+ "Qoşma əlavə edin"
+ "Yardım"
+ "Xoş gəlmisiniz"
+ "Ötürün"
+ "Sonrakı >"
+ "Növbəti"
+ "Çıxış"
+ "> ayarlar;"
+ "Ayarlar"
+ "Mesajlaşma SMS, Telefon və Kontaktlara icazə istəyir."
+ "İcazələri Ayarlar > Tətbiqlər > Mesajlaşma > İcazələr bölməsindən dəyişə bilərsiniz."
+ "İcazələri Ayarlar, Tətbiqlər, Mesajlaşma, İcazələr bölməsindən dəyişə bilərsiniz."
+ "Tez-tez olanlar"
+ "Bütün kontaktlar"
+ "%s ünvanına göndərin"
+ "Şəkilləri və ya videonu çəkin"
+ "Bu cihazdan şəkillər seçin"
+ "Səs yazın"
+ "Foto seçin"
+ "Media seçildi."
+ "Media seçilmədi."
+ "%d seçilib"
+ "təsvir %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "təsvir"
+ "Səs yazın"
+ "Paylaş"
+ "İndicə"
+ "İndi"
+
+ %d dəq
+ %d dəq
+
+
+ %d saat
+ %d saat
+
+
+ %d gün
+ %d gün
+
+
+ %d həftə
+ bir həftə
+
+
+ %d ay
+ bir ay
+
+
+ %d il
+ bir il
+
+ "Klass 0 mesaj"
+ "Yadda saxlayın"
+ "Cihazda boş yer azdır. Yer boşaltmaq üçün Mesajlaşma köhnə mesajları avtomatik siləcək."
+ "Yaddaş ehtiyatı qurtarır"
+ "Mesajlaşma cihazınızda kifayət qədər yaddaş olmayana kimi mesaj göndərə və qəbul etməyə bilər."
+ "SMS yaddaşı azdır. Mesajları silmə ehtiyacı hiss edə bilərsiniz."
+ "Telefon nömrənizi təsdiq edin"
+ "Bu bir addımlı mərhələ Mesajlaşmanın qrup mesajlarınızı düzgün şəkildə çatdıracağını təmin edəcək."
+ "Telefon nömrəsi"
+ "Media ilə olan bütün mesajları silin"
+ "%s müddətindən əvvəl köhnə mesajları silin"
+ "%s müddətindən köhnə mesajlar avtomatik silinsin"
+ "İqnor edin"
+ "Bütün mesajlar media ilə birlikdə silinsin?"
+ "%s müddətindən köhnə mesajlar silinsin?"
+ "%s müddətindən köhnə mesajlar avtomatik silinsin və avtomatik silinmə aktiv olsun?"
+ "%s bildirib"
+ "Bildirdiniz"
+ "%s tərəfindən mesaj:"
+ "Mesajı göndərdiniz"
+ "Göndərilir..."
+ "Göndərilmədi. Yenidən cəhd etmək üçün toxunun."
+ "Göndərilmədi. Yenidən cəhd edilir..."
+ "Resend or delete"
+ "Lütfən, təcili yardım xidmətlərinə səsli zəng edin. Mətn mesajınız bu vaxt çatdırıla bilməz."
+ "Alınmadı"
+ "Yükləmək üçün yeni MMS mesajı"
+ "Yeni MMS mesajı"
+ "Yüklənmədi"
+ "Yenidən cəhd etmək üçün toxun"
+ "Yükləmək üçün toxun"
+ "Yüklə və ya sil"
+ "Yüklənir..."
+ "Mesajın vaxtı bitib və ya mövcud deyil"
+ "size: %1$s, expiration: %2$s"
+ "Göndərə bilmir. Alıcı etibarsızdır."
+ "Xidmət şəbəkədə aktiv deyil"
+ "Şəbəkə probleminə görə göndərmək olmadı"
+ "Mesajın vaxtı keçib və ya əlçatmazdır"
+ "(Mövzusuz)"
+ "Naməlum göndərən"
+ "Çatdırılıb"
+ "%1$s mesajı %2$s bölməsindən endirilə bilmir."
+ "Az yaddaş ilə əlaqədar olaraq verilənlər bazası əməliyyatı tamamlana bilmədi"
+ "Mesaj göndərilmədi"
+ "Bəzi mesajlar Mesajlaşmada göndərilməyib"
+
+ %d söhbətdə %d mesaj
+ bir söhbətdə %d mesaj
+
+ "Mesaj endirilmədi"
+ "Bəzi mesajlar Mesajlaşmada endirilməyib"
+
+ %d söhbətdə %d mesaj
+ bir söhbətdə %d mesaj
+
+ "%1$s nömrəsinə mesaj göndərilmədi"
+ "Lütfən, təcili yardım xidmətlərinə səsli zəng edin. Mətn mesajınız %1$s nömrəsinə bu vaxt çatdırıla bilməz."
+
+ %d yeni mesaj
+ Yeni mesaj
+
+ "Başla"
+ "Kamera əlçatmazdır"
+ "Kamera əlçatmazdır"
+ "Video çəkiliş əlçatmazdır"
+ "Medianı yadda saxlamaq olmur"
+ "Şəkil çəkmək mümkün deyil"
+ "Geri"
+ "Arxivləşmiş"
+ "Sil"
+ "Arxiv"
+ "Arxivdən çıxarın"
+ "Bildirişləri deaktiv edin"
+ "Bildirişləri aktivləşdirin"
+ "Kontakt əlavə edin"
+ "Endirin"
+ "Göndər"
+ "Sil"
+ "Bu mesaj silinsin?"
+ "Bu əməliyyat geri qaytarıla bilməz."
+ "Sil"
+
+ Bu söhbətlər silinsin?
+ Bu söhbət silinsin?
+
+ "Sil"
+ "Ləğv et"
+ "Kimə"
+ "Çox şəkil seçin"
+ "Seçimi təsdiq edin"
+ "+%d"
+ "Audionu qeydə almaq olmur. Yenidən cəhd edin."
+ "Audionu oxutmaq olmur. Yenidən cəhd edin."
+ "Audionu saxlamaq olmadı. Yenidən cəhd edin."
+ "Toxunun və saxlayın"
+ ", "
+ " "
+ ": "
+ " "
+ "Şəkil"
+ "Audio klip"
+ "Videolar"
+ "Kontakt kartı"
+ "Endirin"
+ "SMS ilə cavab verin"
+ "MMS vasitəsilə cavab verin"
+ "Cavabla"
+
+ %d iştirakçı
+ %d iştirakçı
+
+ "Mən"
+ "Kontakt bloklandı və arxivləndi"
+ "Kontakt blokdan və arxivdən çıxarıldı"
+ "%d arxivlənib"
+ "%d arxivdən çıxarıldı"
+ "Bildirişlər deaktiv edildi"
+ "Bildirişlər aktiv edildi"
+ "Hamısı hazırdır. Göndərmək üçün toxunun."
+ "Mesajlaşma uğurla defolt SMS tətbiqi seçildi."
+
+ Qoşmaları ləğv edin
+ Qoşmanı ləğv edin
+
+ "Audio qoşma"
+ "Audio qoşmanı ifa et"
+ "Pauza"
+ "%s adlı göndərəndən mesaj: %s."
+ "%s adlı göndərənin mesajı getmədi: %s. Vaxt: %s."
+ "%s adlı göndərən tərəfindən mesaj: %s. Vaxt: %s."
+ "%s adlı əlaqəyə göndərilməmiş mesaj: %s. Vaxt: %s."
+ "%s adlı əlaqəyə mesaj göndərilir: %s. Vaxt: %s."
+ "%s adlı əlaqəyə mesaj göndərilmədi: %s. Vaxt: %s."
+ "%s adlı əlaqəyə mesaj: %s. Vaxt: %s."
+ "%s adlı göndərənin mesajı getmədi: %s. Vaxt: %s. %s."
+ "%s adlı göndərən tərəfindən mesaj: %s. Vaxt: %s. %s."
+ "%s istifadəçisinə göndərilməmiş mesaj: %s. Vaxt: %s."
+ "%s istifadəçisinə mesaj göndərilir: %s. Vaxt: %s."
+ "%s istifadəçisinə mesaj göndərilmədi: %s. Vaxt: %s."
+ "%s istifadəçisinə mesaj: %s. Vaxt: %s."
+ "Mesaj göndərilmədi. Təkrar cəhd etmək üçün toxunun."
+ "%s ilə söhbət"
+ "Mövzunu silin"
+ "Video çəkin"
+ "Durğun şəkli çəkin"
+ "Şəkil çəkin"
+ "Video çəkilişə başlayın"
+ "Tam ekranlı kameraya keçin"
+ "Ön və arxa kameralar arasında seçim edin"
+ "Çəkilişi dayandırın və videonu qoşun"
+ "Video qeydi dayandırın"
+ "Foto mesajlaşma"
+
+ %d foto \"%s\" albomunda yadda saxlanıldı
+ %d foto \"%s\" albomunda yadda saxlanıldı
+
+
+ %d video \"%s\" albomunda yadda saxlanıldı
+ %d video \"%s\" albomunda yadda saxlanıldı
+
+
+ %d qoşma \"%s\" albomunda yadda saxlanıldı
+ %d qoşma \"%s\" albomunda yadda saxlanıldı
+
+
+ %d qoşma \"Endirilənlər\" qovluğunda yadda saxlanıldı
+ %d qoşma \"Endirilənlər\" qovluğunda yadda saxlanıldı
+
+
+ %d qoşma yadda saxlanıldı
+ %d qoşma yadda saxlanıldı
+
+
+ %d qoşma yadda saxlanıla bilmədi
+ %d qoşma yadda saxlanıla bilmədi
+
+ "MMS qoşması yadda saxlandı"
+ "Ayarlar"
+ "Arxivləşmiş"
+ "Bağla"
+ "MMS"
+ "Qabaqcıl"
+ "Sazlama"
+ "Bildirişlər"
+ "Səs"
+ "Səssiz"
+ "Titrət"
+ "Bloklanmış"
+ "SMS çatdırma xətaları"
+ "Hər göndərdiyiniz SMS üçün çatdırılma raportu tələb edin"
+ "Avtomatik əldə edin"
+ "MMS mesajları avtomatik əldə edin"
+ "Rouminq zamanı avtomatik əldə edin"
+ "Rominq zamanı MMS-i avtomatim bərpa edin"
+ "Qrup mesajlaşması"
+ "Bir neçə alıcının olduğu halda bir mesaj göndərmək üçün MMS istifadə edin"
+ "Defolt SMS proqramı"
+ "Defolt SMS proqramı"
+
+
+ "Telefon nömrəniz"
+ "Naməlum"
+ "Gedən mesaj səsləri"
+ "Damp SMS"
+ "Damp xarici saxlanma faylına emal edilməmiş SMS datası qəbul etdi"
+ "Damp MMS"
+ "Damp xarici saxlanma faylına emal edilməmiş MMS datası qəbul etdi"
+ "Simsiz siqnallar"
+ "Mesaj seçimləri"
+ "Mətni kopyalayın"
+ "Detallara baxın"
+ "Sil"
+ "Yönləndir"
+ "Mesaj detalları"
+ "Növ: "
+ "Mətn mesajı"
+ "Multimedia mesajı"
+ "Kimdən: "
+ "Kimə: "
+ "Göndərilən: "
+ "Qəbul edilən: "
+ "Mövzu: "
+ "Ölçü: "
+ "Prioritet: "
+ "SIM: "
+ "Yüksək"
+ "Normal"
+ "Aşağı"
+ "SIM %s"
+ "Gizli göndərici ünvanı"
+ "Qoşmalar yüklənən zaman mesaj göndərmək olmur."
+ "Qoşma yüklənə bilmir. Yenidən cəhd edin."
+ "Şəbəkə hazır deyil. Yenidən cəhd edin."
+ "Mətni silin"
+ "Mətn və nömrə daxiletməsi arasında seçim edin"
+ "İştirakçı əlavə edin"
+ "İştirakçıları təsdiq edin"
+ "Yeni söhbətə başlayın"
+ "Bu elementi seçin"
+ "Videonu oxut"
+ "Adamlar və seçimlər"
+ "Sazlama"
+ "Adamlar və seçimlər"
+ "Ümumi"
+ "Bu söhbətdəki adamlar"
+ "Zəng edin"
+ "Mesaj göndərin"
+ "Mesaj göndərin<br/><kiçik>buradan: %s</kiçik>"
+
+ Fotolar göndərin
+ Foto göndərin
+
+
+ Audioları göndərin
+ Audio göndərin
+
+
+ Videoları göndərin
+ Video göndərin
+
+
+ Kontakt kartlarını göndərin
+ Kontakt kartını göndərin
+
+
+ Qoşmaları göndərin
+ Qoşma göndərin
+
+
+ %d qoşma göndərilmə üçün hazırdır
+ 1 qoşma göndərilmə üçün hazırdır
+
+ "Geri əlaqə göndərin"
+ "Google Play Store\'də bax"
+ "Versiya haqqında"
+ "Versiya %1$s"
+ "Açıq mənbə lisenziyaları"
+ "Bildirişlər"
+ "Qoşma limitini keçdi"
+ "Qoşmanı yükləyə bilmədi."
+ "Kontaktlara əlavə edilsin?"
+ "Kontakt əlavə edin"
+ "Mövzu"
+ "Mövzu: "
+ "%s%s"
+ "Kontakt kartı yüklənir"
+ "Kontakt kartını yükləmək alınmadı"
+ "Kontakt kartına baxın"
+
+ %d kontakt
+ %d kontakt
+
+ "Kontakt kartları"
+ "Doğum günü"
+ "Qeydlər"
+ "Mesajı yönləndirin"
+ "Cavablayın"
+ "+1"
+ "+%d"
+ "SMS deaktivdir"
+ "Göndərmək üçün Mesajlaşmanı defolt SMS tətbiqi kimi ayarlayın"
+ "Mesajlaşmanı defolt SMS tətbiqi kimi ayarlayın"
+ "Dəyişin"
+ "Mesaj qəbul etmək üçün Mesajlaşmanı defolt SMS tətbiqi kimi ayarlayın"
+ "SMS göndərmək üçün tərcih olunan SIM seçilməyib"
+ "Bu tətbiqə cihaz sahibi tərəfindən icazə verilmir."
+ "Ok"
+ "Söhbətdə həddən çox iştirakçı var"
+
+ Yanlış kontakt
+ Yanlış kontakt
+
+ "Kamera şəklini yükləmək olmur"
+ "Siz: "
+ "%s: "
+ "Qaralama"
+ "Söhbətə başlayan kimi onu burada siyahılanmış görəcəksiniz"
+ "Arxivlənmiş söhbətlər burada görünür"
+ "Söhbətlər yüklənir…"
+ "Şəkil"
+ "Audio klip"
+ "Video"
+ "Əlaqə kartı"
+ "MMS"
+ "Geri"
+ "Yenidən cəhd edin"
+ "Yeni mesaja başlamaq üçün kontakt adını və ya telefon nömrəsini daxil edin"
+ "Blok edin"
+ "%s bloklayın"
+ "%s blokdan çıxarın"
+ "%s bloklansın?"
+ "Bu nömrədən mesaj almağa davam edəcəksiniz, lakin mesajın gəlməsinə dair bildiriş olmayacaq. Söhbət arxivlənəcək."
+ "Bloklanmış kontaktlar"
+ "BLOKDAN ÇIXARIN"
+ "Bloklanmış kontaktlar"
+ "Sənəd kitabxanasından şəkil seçin"
+ "Mesaj göndərilir"
+ "Mesaj göndərildi"
+ "Mobil data deaktivdir. Ayarları yoxlayın."
+ "Təyyarə rejimində mesaj göndərmək olmur"
+ "Mesaj göndərilə bilmədi"
+ "Mesaj yükləndi"
+ "Mobil data deaktivdir. Ayarları yoxlayın."
+ "Təyyarrə rejimində mesajları endirə bilməz"
+ "Mesaj endirilə bilmədi"
+ "Sıfır"
+ "Bir"
+ "İki"
+ "Üç"
+ "Dörd"
+ "Beş"
+ "Altı"
+ "Yeddi"
+ "Səkkiz"
+ "Doqquz"
+ "Mesajı %1$s ilə göndərmək olmur, xəta %2$d"
+ "Mesajı naməlum operator ilə göndərmək olmur, xəta %1$d"
+ "Yön: %s"
+ "Mesaj göndərilmədi. Xidmət şəbəkədə aktivləşdirilməyib."
+ "Mesaj göndərilmədi: Etibarsız təyinat ünvanı"
+ "Mesaj göndərilmədi: etibarsız mesaj"
+ "Mesaj göndərilmədi: dəstəklənməyən məzmun"
+ "Mesaj göndərilmədi: dəstəklənməyən mesaj"
+ "Mesaj göndərilmədi: çox böyükdür"
+ "Yeni mesaj"
+ "Göstər"
+ "Təsvir"
+ "Uyğun tətbiqi tapmaq olmadı"
+ "Qəbuledicini silin"
+ "Yeni mesaj"
+ "Ləğv et"
+ "Edit access point"
+ "Ayarlanmayıb"
+ "Ad"
+ "APN"
+ "MMSC"
+ "MMS proksi"
+ "MMS por"
+ "MCC"
+ "MNC"
+ "APN növü"
+ "APN silin"
+ "Yeni APN"
+ "Yadda saxlayın"
+ "İmtina edin"
+ "Ad sahəsi boş ola bilməz."
+ "APN boş ola bilməz."
+ "MCC sahəsində 3 rəqəm olmalıdır."
+ "MNC sahəsi 2 və ya 3 rəqəm olmalıdır."
+ "Defolt APN ayarları bərpa olunur."
+ "Sıfırlayın"
+ "Varsayılan APN ayarlarının sıfırlanması tamamlandı."
+ "Başlıqsız"
+ "Çatma Nöqtəsi Adları"
+ "APNs"
+ "Yeni APN"
+ "Giriş Nöqtəsi Ad Ayarları bu istifadəçi üçün əlçatmazdır"
+ "Panoya kopyalansın?"
+ "Kopyalayın"
+ "Buraya: %s"
+ "Ümumi"
+ "Qabaqcıl"
+ "Ümumi ayarlar"
+ "Qabaqcıl ayarlar"
+ "\"%s\" SIM"
+ "Bütün alıcılara fərdi SMS göndər. Hər hansı bir cavabı özünüz olacaq"
+ "Bütün alıcılara bir MMS göndər"
+ "Naməlum nömrə"
+ "Yeni mesaj"
+ "Yeni mesaj."
+ "SIM seçicisi"
+ "%1$s seçildi, SIM seçicisi"
+ "Mövzunu dəyiş"
+ "SİM seçin və ya mövzu redaktə edin"
+ "Səs yazmaq üçün basın və saxlayın"
+ "Yeni söhbətə başla"
+ "Mesajlaşma"
+ "Mesajlaşma Siyahısı"
+ "Mesajlaşma"
+ "Yeni mesaj"
+ "Söhbət siyahısı"
+ "Söhbətlər yüklənir"
+ "Mesajlar yüklənir"
+ "Daha çox söhbət görüntülə"
+ "Daha çox mesaja bax"
+ "Söhbət silinib"
+ "Söhbət silindi. Başqa Mesajlaşma söhbəti göstərmək üçün toxunun"
+ "Bloklanıb"
+ "Blokdan çıxarılıb"
+ "Yaddaş yeri azdır. Bəzi məlumatlar itə bilər."
+ "Qoşmaları seçin"
+ "Seçimi təsdiq edin"
+ "%d seçilib"
+ "Lütfən, bir və ya daha çox qoşmanı silin və yenidən cəhd edin."
+ "Mesajınızı göndərməyə cəhd edə bilərsiniz, lakin bir və ya daha çox qoşmanı silmədiyiniz halda, mesaj çatmaya bilər."
+ "Hər mesaja yalnız bir video yükləyə bilərsiniz. Əlavə videoları silin və yenidən cəhd edin."
+ "Mesajlaşma qoşmanı yükləyə bilmədi."
+ "İstənilən halda göndərin"
+ "Söhbətə başlamaq olmadı"
+ "%1$s (%2$s)"
+ "%s seçilmiş"
+
diff --git a/res/values-bg/arrays.xml b/res/values-bg/arrays.xml
new file mode 100644
index 0000000..ac036c4
--- /dev/null
+++ b/res/values-bg/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "без тема"
+ "няма тема"
+
+
+ "Да"
+ "Не"
+ "ОK"
+ "Ха-ха"
+ "Благодаря"
+ "Приемам"
+ "Чудесно"
+ "Идвам"
+ "OK, ще се свържа с теб по-късно"
+ ":)"
+ ":("
+
+
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
new file mode 100644
index 0000000..5251fa8
--- /dev/null
+++ b/res/values-bg/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Съобщения"
+ "Съобщения"
+ "Избиране на разговор"
+ "Настройки"
+ "Изпращане на съобщение"
+ "Добавяне на прикачен файл"
+ "Помощ"
+ "Добре дошли"
+ "Пропускане"
+ "Напред >"
+ "Напред"
+ "Изход"
+ "Настройки >"
+ "Настройки"
+ "Приложението Съобщения се нуждае от разрешение за SMS, телефон и контакти."
+ "Можете да промените разрешенията от „Настройки“ > „Приложения“ > „Съобщения“ > „Разрешения“."
+ "Можете да промените разрешенията от „Настройки“, „Приложения“, „Съобщения“, „Разрешения“."
+ "Често търсени"
+ "Всички контакти"
+ "Изпращане до %s"
+ "Правете снимки или видеоклипове"
+ "Избиране на изображения от това устройство"
+ "Запишете звук"
+ "Избиране на снимка"
+ "Мултимедийният файл е избран."
+ "Изборът на мултимедиен файл е премахнат."
+ "Избрахте %d"
+ "изображение от %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "изображение"
+ "Запис на звук"
+ "Споделяне"
+ "Току-що"
+ "Сега"
+
+ %d мин
+ %d мин
+
+
+ %d часа
+ %d час
+
+
+ %d дни
+ %d ден
+
+
+ %d седмици
+ една седмица
+
+
+ %d месеца
+ един месец
+
+
+ %d години
+ една година
+
+ "Съобщения от клас 0"
+ "Запазване"
+ "Мястото на устройството не е достатъчно. Приложението Съобщения автоматично ще изтрие по-старите кореспонденции, за да освободи място."
+ "Мястото в хранилището е на изчерпване"
+ "Възможно е Съобщения да не изпраща, нито да получава съобщения, докато на устройството не се освободи повече място."
+ "Мястото в хранилището за SMS намалява. Може да се наложи да изтриете съобщения."
+ "Потвърждаване на телефонния ви номер"
+ "Тази еднократна стъпка ще гарантира, че Съобщения ще доставя правилно груповите ви съобщения."
+ "Телефонен номер"
+ "Изтриване на всички съобщения с мултимедия"
+ "Изтриване на съобщенията, по-стари от %s"
+ "Автоматично изтриване на съобщенията, по-стари от %s"
+ "Пренебрегване"
+ "Да се изтрият ли всички съобщения с медийни файлове?"
+ "Да се изтрият ли съобщенията, по-стари от %s?"
+ "Да се изтрият ли съобщенията, по-стари от %s, и да се включи ли функцията за автоматично изтриване?"
+ "%s каза"
+ "Казахте"
+ "Съобщение от %s"
+ "Изпратихте съобщение"
+ "Изпраща се…"
+ "Не е изпратено. Докоснете за нов опит."
+ "Не е изпратено. Извършва се нов опит…"
+ "Повторно изпращане или изтриване"
+ "Моля, осъществете гласово обаждане до спешните служби. Понастоящем текстовото ви съобщение не можа да бъде доставено."
+ "Не бе успешно"
+ "Ново MMS съобщение за изтегляне"
+ "Ново MMS съобщение"
+ "Не можа да се изтегли"
+ "Докоснете за нов опит"
+ "Докоснете за изтегляне"
+ "Изтегляне или изтриване"
+ "Изтегля се…"
+ "Съобщението е с изтекла валидност или не е налице"
+ "размер: %1$s, валидност: %2$s"
+ "Не може да се изпрати. Получателят не е валиден."
+ "Услугата не е активирана за мрежата"
+ "Не можа да се изпрати поради проблем с мрежата"
+ "Съобщението е с изтекла валидност или не е налице"
+ "(Без тема)"
+ "Неизвестен подател"
+ "Доставено"
+ "Съобщението „%1$s“ от %2$s не можа да се изтегли."
+ "Операцията в базата от данни не можа да завърши поради недостиг на памет"
+ "Съобщението не е изпратено"
+ "Някои съобщения в приложението Съобщения не са изпратени"
+
+ %d съобщения в %d разговора
+ %d съобщения в един разговор
+
+ "Съобщението не е изтеглено"
+ "Някои съобщения в приложението Съобщения не са изтеглени"
+
+ %d съобщения в %d разговора
+ %d съобщения в един разговор
+
+ "Съобщението до %1$s не е изпратено"
+ "Моля, осъществете гласово обаждане до спешните служби. Понастоящем текстовото ви съобщение до %1$s не можа да бъде доставено."
+
+ %d нови съобщения
+ Ново съобщение
+
+ "Стартиране"
+ "Няма достъп до камерата"
+ "Няма достъп до камерата"
+ "Функцията за заснемане на видео не е налице"
+ "Медийният файл не може да се запази"
+ "Не може да се направи снимка"
+ "Назад"
+ "Архивирани"
+ "Изтриване"
+ "Архивиране"
+ "Деархивиране"
+ "Изключване на известията"
+ "Включване на известията"
+ "Добавяне на контакт"
+ "Изтегляне"
+ "Изпращане"
+ "Изтриване"
+ "Да се изтрие ли това съобщение?"
+ "Това действие не може да се отмени."
+ "Изтриване"
+
+ Да се изтрият ли тези разговори?
+ Да се изтрие ли този разговор?
+
+ "Изтриване"
+ "Отказ"
+ "До"
+ "Избиране на няколко изображения"
+ "Потвърждаване на избора"
+ "+ %d"
+ "Аудиото не може да се запише. Опитайте отново."
+ "Аудиото не може да се възпроизведе. Опитайте отново."
+ "Аудиото не можа да се запази. Опитайте отново."
+ "Докоснете и задръжте"
+ ", "
+ " ,"
+ ": "
+ " :"
+ "Снимка"
+ "Аудиоклип"
+ "Видеоклип"
+ "Визитна картичка"
+ "Изтегляне"
+ "Отговор чрез SMS"
+ "Отговор чрез MMS"
+ "Отговор"
+
+ %d участници
+ %d участник
+
+ "Аз"
+ "Контактът е блокиран и архивиран"
+ "Контактът е отблокиран и деархивиран"
+ "Архивирахте %d"
+ "Деархивирахте %d"
+ "Известията са изключени"
+ "Известията са включени"
+ "Готово. Докоснете „Изпращане“ отново."
+ "Успешно зададохте Съобщения като стандартно приложение за SMS."
+
+ Отхвърляне на прикачените файлове
+ Отхвърляне на прикачения файл
+
+ "Прикачен аудиофайл"
+ "Пускане на прикачения аудиофайл"
+ "Пауза"
+ "Съобщение от %s: „%s“."
+ "Неуспешно съобщение от %s: „%s“. Час: %s."
+ "Съобщение от %s: „%s“. Час: %s."
+ "Неизпратено съобщение до %s: „%s“. Час: %s."
+ "Изпраща се съобщение до %s: „%s“. Час: %s."
+ "Неуспешно съобщение до %s: „%s“. Час: %s."
+ "Съобщение до %s: „%s“. Час: %s."
+ "Неуспешно съобщение от %s: „%s“. Час: %s. %s."
+ "Съобщение от %s: „%s“. Час: %s. %s."
+ "Неизпратено съобщение до %s: „%s“. Час: %s."
+ "Изпраща се съобщение до %s: „%s“. Час: %s."
+ "Неуспешно съобщение до %s: „%s“. Час: %s."
+ "Съобщение до %s: „%s“. Час: %s."
+ "Неуспешно съобщение. Докоснете, за да опитате отново."
+ "Разговор с/ъс %s"
+ "Изтриване на темата"
+ "Заснемане на видеоклип"
+ "Заснемане на кадър"
+ "Правене на снимка"
+ "Стартиране на записване на видеоклип"
+ "Превключване към камера на цял екран"
+ "Превключване между предната и задната камера"
+ "Спиране на записването и прикачване на видеоклипа"
+ "Спиране на видеозаписа"
+ "Снимки в Съобщения"
+
+ %d снимки са запазени в албума „%s“
+ %d снимка е запазена в албума „%s“
+
+
+ %d видеоклипа са запазени в албума „%s“
+ %d видеоклип е запазен в албума „%s“
+
+
+ %d прикачени файла са запазени в албума „%s“
+ %d прикачен файл е запазен в албума „%s“
+
+
+ %d прикачени файла са запазени в „Изтегляния“
+ %d прикачен файл е запазен в „Изтегляния“
+
+
+ %d прикачени файла са запазени
+ %d прикачен файл е запазен
+
+
+ %d прикачени файла не можаха да бъдат запазени
+ %d прикачен файл не можа да се запази
+
+ "Запазен прикачен файл от MMS"
+ "Настройки"
+ "Архивирани"
+ "Затваряне"
+ "MMS"
+ "Разширени"
+ "Отстраняване на грешки"
+ "Известия"
+ "Звук"
+ "Тих режим"
+ "Вибриране"
+ "Блокирано"
+ "Отчети за получаване на SMS"
+ "Заявяване на отчет за доставка за всеки изпратен от вас SMS"
+ "Автоматично извличане"
+ "Автоматично извличане на мултимедийните съобщения (MMS)"
+ "Автоматично извличане при роуминг"
+ "Автоматично извличане на MMS при роуминг"
+ "Групови съобщения"
+ "Използвайте MMS, за да изпратите едно съобщение, когато има няколко получатели"
+ "Стандартно приложение за SMS"
+ "Стандартно приложение за SMS"
+
+
+ "Вашият телефонен номер"
+ "Няма информация"
+ "Звуци за изходящи съобщения"
+ "Разтоварване на SMS"
+ "Разтоварване на необработените данни от получените SMS съобщения във файл във външното хранилище"
+ "Разтоварване на MMS"
+ "Разтоварване на необработените данни от получените MMS съобщения във файл във външното хранилище"
+ "Безжични сигнали"
+ "Опции на съобщението"
+ "Копиране на текста"
+ "Преглед на подробностите"
+ "Изтриване"
+ "Напред"
+ "Подробности за съобщението"
+ "Тип: "
+ "Текстово съобщение"
+ "Мултимедийно съобщение"
+ "От: "
+ "До: "
+ "Изпратено: "
+ "Получено: "
+ "Тема: "
+ "Размер: "
+ "Приоритет: "
+ "SIM: "
+ "Висок"
+ "Нормален"
+ "Нисък"
+ "SIM %s"
+ "Скрит адрес на изпращача"
+ "Съобщението не може да се изпрати, докато прикачените файлове се зареждат."
+ "Прикаченият файл не може да се зареди. Опитайте отново."
+ "Мрежата не е готова. Опитайте отново."
+ "Изтриване на текста"
+ "Превключване между букви и цифри"
+ "Добавяне на още участници"
+ "Потвърждаване на участниците"
+ "Начало на нова кореспонденция"
+ "Избиране на този елемент"
+ "Пускане на видеоклипа"
+ "Хора и опции"
+ "Отстраняване на грешки"
+ "Хора и опции"
+ "Общи настройки"
+ "Хора в този разговор"
+ "Обаждане по телефона"
+ "Изпращане на съобщение"
+ "Изпращане на съобщение<br/><small>от %s</small>"
+
+ Изпращане на снимките
+ Изпращане на снимката
+
+
+ Изпращане на аудиозаписите
+ Изпращане на аудиозаписа
+
+
+ Изпращане на видеоклиповете
+ Изпращане на видеоклипа
+
+
+ Изпращане на визитните картички
+ Изпращане на визитната картичка
+
+
+ Изпращане на прикачените файлове
+ Изпращане на прикачения файл
+
+
+ %d прикачени файла са готови за изпращане
+ Един прикачен файл е готов за изпращане
+
+ "Изпращане на отзиви"
+ "Преглед в Google Play Магазин"
+ "Информация за версията"
+ "Версия %1$s"
+ "Лицензи за отворен код"
+ "Известия"
+ "Ограничението за прикачени файлове е достигнато"
+ "Зареждането на прикачения файл не бе успешно."
+ "Да се добави ли към контактите?"
+ "Добавяне на контакт"
+ "Тема"
+ "Тема: "
+ "„%s“ – „%s“"
+ "Визитната картичка се зарежда"
+ "Визитната картичка не можа да се зареди"
+ "Преглед на визитната картичка"
+
+ %d контакта
+ %d контакт
+
+ "Визитни картички"
+ "Рожден ден"
+ "Бележки"
+ "Препращане на съобщението"
+ "Отговор"
+ "+1"
+ "+%d"
+ "SMS съобщенията са деактивирани"
+ "За да изпращате съобщения, задайте Съобщения като стандартно приложение за SMS"
+ "Задайте Съобщения като стандартно приложение за SMS"
+ "Промяна"
+ "За да получавате съобщения, задайте Съобщения като стандартно приложение за SMS"
+ "Няма избрана предпочитана SIM карта за изпращане на SMS съобщения"
+ "Това приложение не е разрешено от собственика на устройството."
+ "ОK"
+ "Твърде много участници в разговора"
+
+ Контактите са невалидни
+ Контактът е невалиден
+
+ "Изображението от камерата не можа да се зареди"
+ "Вие: "
+ "%s: "
+ "Чернова"
+ "Когато започнете нов разговор, ще го видите посочен тук"
+ "Тук се показват архивираните кореспонденции"
+ "Кореспонденциите се зареждат…"
+ "Снимка"
+ "Аудиоклип"
+ "Видеоклип"
+ "Визитна картичка"
+ "MMS"
+ "Отмяна"
+ "Повторен опит"
+ "Въведете име на контакт или телефонен номер, за да започнете ново съобщение"
+ "Блокиране"
+ "Блокиране на %s"
+ "Отблокиране на %s"
+ "Да се блокира ли %s?"
+ "Ще продължите да получавате съобщения от този номер, но вече няма да бъдете известявани. Кореспонденцията ще се архивира."
+ "Блокирани контакти"
+ "ОТБЛОКИРАНЕ"
+ "Блокирани контакти"
+ "Избиране на изображение от библиотеката с документи"
+ "Съобщението се изпраща"
+ "Съобщението е изпратено"
+ "Мобилните данни са изключени. Проверете настройките си."
+ "Не можете да изпращате съобщения в самолетен режим"
+ "Съобщението не можа да се изпрати"
+ "Съобщението е изтеглено"
+ "Мобилните данни са изключени. Проверете настройките си."
+ "Съобщенията не могат да се изтеглят в самолетен режим"
+ "Съобщението не можа да бъде изтеглено"
+ "нула"
+ "едно"
+ "две"
+ "три"
+ "четири"
+ "пет"
+ "шест"
+ "седем"
+ "осем"
+ "девет"
+ "Съобщението не може да се изпрати с/ъс %1$s – грешка %2$d"
+ "Съобщението не може да се изпрати с неизвестен оператор – грешка %1$d"
+ "Препр.: %s"
+ "Съобщението не е изпратено: Услугата не е активирана за мрежата"
+ "Съобщението не е изпратено: невалиден целеви адрес"
+ "Съобщението не е изпратено: невалидно съобщение"
+ "Съобщението не е изпратено: неподдържано съдържание"
+ "Съобщението не е изпратено: неподдържано съобщение"
+ "Съобщението не е изпратено: твърде голямо"
+ "Ново съобщение"
+ "Преглед"
+ "Изображение"
+ "Не можа да бъде намерено подходящо приложение"
+ "Премахване на получателя"
+ "Ново съобщение"
+ "Отказ"
+ "Редактиране на точката за достъп"
+ "Не е зададено"
+ "Име"
+ "Име на точката за достъп (APN)"
+ "MMSC"
+ "MMS прокси сървър"
+ "MMS порт"
+ "Mобилен код на държава"
+ "Код на мобилна мрежа (MNC)"
+ "Тип на името на точката за достъп (APN)"
+ "Изтриване на името на точката за достъп (APN)"
+ "Ново име на точката за достъп (APN)"
+ "Запазване"
+ "Отхвърляне"
+ "Полето за име трябва да се попълни."
+ "Името на точката за достъп (APN) трябва да се попълни."
+ "Полето за мобилен код на държавата трябва да е 3 цифри."
+ "Полето за код на мобилна мрежа (MNC) трябва да е с 2 или 3 цифри."
+ "Стандартните настройки за името на точката за достъп (APN) се възстановяват."
+ "Възстановяване на стандартните"
+ "Възстановяването на стандартните настройки за името на точката за достъп (APN) завърши."
+ "Без име"
+ "Имена на точката за достъп"
+ "Имена на точката за достъп (APN)"
+ "Ново име на точката за достъп (APN)"
+ "Настройките за име на точката за достъп не са налице за този потребител"
+ "Да се копира ли в буферната памет?"
+ "Копиране"
+ "до „%s“"
+ "Общи настройки"
+ "Разширени настройки"
+ "Общи настройки"
+ "Разширени настройки"
+ "SIM карта „%s“"
+ "Изпращане на отделни SMS съобщения до всички участници. Само вие ще получавате отговорите"
+ "Изпращане на един MMS до всички участници"
+ "Неизвестен номер"
+ "Ново съобщение"
+ "Ново съобщение."
+ "Инструмент за избор на SIM карта"
+ "Избрахте „%1$s“ – инструмент за избиране на SIM карти"
+ "Редактиране на темата"
+ "Избиране на SIM карта или редактиране на темата"
+ "Докоснете и задръжте, за да запишете аудио"
+ "Начало на нова кореспонденция"
+ "Съобщения"
+ "Списък със съобщения"
+ "Съобщения"
+ "Ново съобщение"
+ "Списък с кореспонденции"
+ "Кореспонденциите се зареждат"
+ "Съобщенията се зареждат"
+ "Преглед на още кореспонденции"
+ "Преглед на още съобщения"
+ "Кореспонденцията бе изтрита"
+ "Разговорът е изтрит. Докоснете за показване на друг от Съобщения"
+ "Блокирано"
+ "Отблокирано"
+ "Мястото в хранилището е малко. Може да изгубите някои данни."
+ "Избиране на прикачени файлове"
+ "Потвърждаване на избора"
+ "Избрахте %d"
+ "Моля, премахнете един или повече прикачени файлове и опитайте отново."
+ "Можете да опитате да изпратите съобщението си, но е възможно то да не бъде доставено, ако не премахнете един или повече прикачени файлове."
+ "Можете да изпращате само по един видеоклип с всяко съобщение. Моля, премахнете допълнителните клипове и опитайте отново."
+ "Зареждането на прикачения файл от Съобщения не бе успешно."
+ "Изпращане въпреки това"
+ "Разговорът не можа да започне"
+ "%1$s (%2$s)"
+ "Избрахте %s"
+
diff --git a/res/values-bn-rBD/arrays.xml b/res/values-bn-rBD/arrays.xml
new file mode 100644
index 0000000..bdf164c
--- /dev/null
+++ b/res/values-bn-rBD/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "কোনো বিষয় নেই"
+ "বিষয়হীন"
+
+
+ "হ্যাঁ"
+ "না"
+ "ঠিক আছে"
+ "হিহি"
+ "ধন্যবাদ"
+ "আমি রাজি"
+ "সুন্দর"
+ "রাস্তায় আছি"
+ "ঠিক আছে, পরে আপনার সঙ্গে এই নিয়ে কথা বলছি"
+ ":)"
+ ":("
+
+
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
new file mode 100644
index 0000000..8c58185
--- /dev/null
+++ b/res/values-bn-rBD/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "বার্তাপ্রেরণ"
+ "বার্তাপ্রেরণ"
+ "কথোপকথন নির্বাচন করুন"
+ "সেটিংস"
+ "বার্তা পাঠান"
+ "একটি সংযুক্তি যোগ করুন"
+ "সহায়তা"
+ "স্বাগতম"
+ "এড়িয়ে যান"
+ "পরবর্তী >"
+ "পরবর্তী"
+ "প্রস্থান করুন"
+ "সেটিংস >"
+ "সেটিংস"
+ "SMS, ফোন এবং পরিচিতিগুলিতে বার্তাপ্রেরণ -এর অনুমতির প্রয়োজন।"
+ "আপনি সেটিংস > অ্যাপ্লিকেশানগুলি > বার্তাপ্রেরণ > অনুমতিগুলি এ অনুমতিগুলি পরিবর্তন করতে পারেন৷"
+ "আপনি সেটিংস, অ্যাপ্লিকেশানগুলি, বার্তাপ্রেরণ, অনুমতিগুলি এ অনুমতিগুলি পরিবর্তন করতে পারেন৷"
+ "প্রায়শই ব্যবহৃত"
+ "সকল পরিচিতি"
+ "%s এ পাঠান"
+ "ছবি বা ভিডিও ক্যাপচার করুন"
+ "এই ডিভাইস থেকে চিত্র নির্বাচন করুন"
+ "অডিও রেকর্ড করুন"
+ "ফটো চয়ন করুন"
+ "মিডিয়া নির্বাচিত হয়েছে।"
+ "মিডিয়া নির্বাচিত হয় নি।"
+ "%dটি নির্বাচন করা হয়েছে"
+ "চিত্র %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "চিত্র"
+ "অডিও রেকর্ড করুন"
+ "ভাগ করুন"
+ "এইমাত্র"
+ "এখনই"
+
+ %d মিনিট
+ %d মিনিট
+
+
+ %d ঘণ্টা
+ %d ঘণ্টা
+
+
+ %d দিন
+ %d দিন
+
+
+ %d সপ্তাহ
+ %d সপ্তাহ
+
+
+ %d মাস
+ %d মাস
+
+
+ %d বছর
+ %d বছর
+
+ "ক্লাস ০ বার্তা"
+ "সংরক্ষণ করুন"
+ "ডিভাইসে কম জায়গা আছে। বার্তাপ্রেরণ জায়গা খালি করতে স্বয়ংক্রিয়ভাবে পুরানো পাঠ্য বার্তাগুলি মুছে ফেলবে।"
+ "সঞ্চয়স্থান পূর্ণ হতে চলেছে"
+ "আপনার ফোনে অরো বেশি সঞ্চয়স্থান উপলব্ধ না থাকলে, বার্তাপ্রেরণ বার্তাগুলি পাঠাতে বা গ্রহণ করতে নাও পারে৷"
+ "SMS সংগ্রহস্থল বেশি নেই৷ আপনাকে বার্তা মুছতে হতে পারে৷"
+ "আপনার ফোন নম্বর নিশ্চিত করুন"
+ "এই এককালীন ধাপটি নিশ্চিত করে যে বার্তাপ্রেরণ গোষ্ঠী বার্তাগুলিকে সঠিকভাবে বিতরণ করবে৷"
+ "ফোন নম্বর"
+ "মিডিয়ার সাথে সমস্ত বার্তা মুছুন"
+ "%s এর থেকে পুরানো বার্তাগুলি মুছুন"
+ "%s-এর থেকে পুরানো বার্তা স্বংয়ক্রিয়ভাবে মুছুন"
+ "উপেক্ষা করুন"
+ "মিডিয়ার সমন্বিত সমস্ত বার্তা মুছুন"
+ "%s-এর থেকে পুরানো বার্তাগুলি মুছবেন?"
+ "%s-এর থেকে পুরানো বার্তা মুছে দিন এবং স্বয়ংক্রিয়ভাবে মোছা চালু করবেন?"
+ "%s বলেছেন"
+ "আপনি বলেছেন"
+ "%s এর থেকে বার্তা"
+ "আপনি একটি বার্তা পাঠিয়েছেন"
+ "পাঠানো হচ্ছে..."
+ "পাঠানো হয়নি। আবার চেষ্টা করতে স্পর্শ করুন।"
+ "পাঠানো হয়নি। আবার চেষ্টা হচ্ছে…"
+ "আবার পাঠান অথবা মুছে ফেলুন"
+ "অনুগ্রহ করে জরুরি পরিষেবাগুলিতে একটি ভয়েস কল করুন৷ আপনার পাঠ্য বার্তাগুলিকে এই মূহুর্তে বিতরণ করা যাবে না৷"
+ "ব্যর্থ হয়েছে"
+ "ডাউনলোড করার জন্য নতুন MMS বার্তা"
+ "নতুন MMS বার্তা"
+ "ডাউনলোড করা যায়নি"
+ "আবার চেষ্টা করতে স্পর্শ করুন"
+ "ডাউনলোড করার জন্য স্পর্শ করুন"
+ "ডাউনলোড করুন অথবা মুছুন"
+ "ডাউনলোড হচ্ছে..."
+ "বার্তার মেয়াদ শেষ হয়ে গেছে বা অনুপলব্ধ"
+ "আকার: %1$s, মেয়াদ শেষ: %2$s"
+ "পাঠানো যাবে না। প্রাপক বৈধ নয়।"
+ "নেটওয়ার্কে পরিষেবা সক্রিয় নেই"
+ "নেটওয়ার্ক সমস্যার কারণে পাঠানো যায়নি"
+ "বার্তার মেয়াদ শেষ হয়ে গেছে বা অনুপলব্ধ"
+ "(কোনো বিষয় নেই)"
+ "অজ্ঞাত প্রেরক"
+ "পৌঁছে দেওয়া হয়েছে"
+ "%2$s থেকে %1$s বার্তা ডাউনলোড করা যায়নি।"
+ "কম মেমরি থাকার কারণে ডেটাবেস ক্রিয়াকলাপ সম্পন্ন করা যায়নি"
+ "বার্তা পাঠানো হয়নি"
+ "বার্তাপ্রেরণ এ কিছু বার্তা পাঠানো হয়নি"
+
+ %dটি কথোপকথনে %dটি বার্তা রয়েছে
+ %dটি কথোপকথনে %dটি বার্তা রয়েছে
+
+ "বার্তা ডাউনলোড করা যাবে না"
+ "বার্তাপ্রেরণ এ কিছু বার্তা ডাউনলোড করা যায়নি"
+
+ %dটি কথোপকথনে %dটি বার্তা রয়েছে
+ %dটি কথোপকথনে %dটি বার্তা রয়েছে
+
+ "%1$s এ বার্তা পাঠানো হয়নি"
+ "অনুগ্রহ করে জরুরি পরিষেবাগুলিতে একটি ভয়েস কল করুন৷ %1$s এ পাঠানো আপনার পাঠ্য বার্তাগুলিকে এই মূহুর্তে বিতরণ করা যাবে না৷"
+
+ %dটি নতুন বার্তা
+ %dটি নতুন বার্তা
+
+ "আরম্ভ"
+ "ক্যামেরা উপলব্ধ নয়"
+ "ক্যামেরা উপলব্ধ নয়"
+ "ভিডিও ক্যাপচার উপলব্ধ নয়"
+ "মিডিয়া সংরক্ষণ করা যাবে না"
+ "ছবি তুলতে পারবেন না"
+ "ফিরুন"
+ "সংরক্ষণাগারভুক্ত"
+ "মুছুন"
+ "সংরক্ষণ করুন"
+ "সংরক্ষণাগারমুক্ত করুন"
+ "বিজ্ঞপ্তিগুলি বন্ধ করুন"
+ "বিজ্ঞপ্তি চালু করুন"
+ "পরিচিতি যোগ করুন"
+ "ডাউনলোড করুন"
+ "পাঠান"
+ "মুছুন"
+ "এই বার্তাটি মুছবেন?"
+ "এই কাজটিকে পূর্বাবস্থায় ফেরানো যাবে না৷"
+ "মুছুন"
+
+ এই কথোপকথনগুলি মুছবেন?
+ এই কথোপকথনগুলি মুছবেন?
+
+ "মুছুন"
+ "বাতিল করুন"
+ "প্রাপক"
+ "একাধিক চিত্র নির্বাচন করুন"
+ "নির্বাচন নিশ্চিত করুন"
+ "+%dটি"
+ "অডিও রেকর্ড করা যাবে না। আবার চেষ্টা করুন।"
+ "অডিও প্লে করা যাবে না। আবার চেষ্টা করুন।"
+ "অডিও সংরক্ষণ করা যায়নি। আবার চেষ্টা করুন"
+ "স্পর্শ করুন এবং ধরে রাখুন"
+ ", "
+ " "
+ ": "
+ " "
+ "ছবি"
+ "অডিও ক্লিপ"
+ "ভিডিও"
+ "পরিচিতি কার্ড"
+ "ডাউনলোড"
+ "SMS এর মাধ্যমে উত্তর দিন"
+ "MMS এর মাধ্যমে উত্তর দিন"
+ "উত্তর দিন"
+
+ %d জন অংশগ্রহণকারী
+ %d জন অংশগ্রহণকারী
+
+ "আমি"
+ "পরিচিতি অবরুদ্ধ ও সংরক্ষণাগারভুক্ত হয়েছে"
+ "পরিচিতি অবরোধ মুক্ত এবং সংরক্ষণাগারমুক্ত করা হয়েছে"
+ "%d টি সংরক্ষণাগারভুক্ত হয়েছে"
+ "%d সংরক্ষণাগারমুক্ত হয়েছে"
+ "বিজ্ঞপ্তিগুলি বন্ধ করা হয়েছে"
+ "বিজ্ঞপ্তিগুলি চালু করা হয়েছে"
+ "সবকিছু সেট। আবার পাঠাতে স্পর্শ করুন।"
+ "ডিফল্ট SMS অ্যাপ্লিকেশান হিসাবে বার্তাপ্রেরণ সফলভাবে সেট করা হয়েছে৷"
+
+ সংযুক্তিগুলি বাতিল করুন
+ সংযুক্তিগুলি বাতিল করুন
+
+ "অডিও সংযুক্তি"
+ "অডিও সংযুক্তি চালান"
+ "বিরাম দিন"
+ "%s এর পাঠানো বার্তা: %s৷"
+ "%s:-র %s বার্তা পাঠাতে ব্যর্থ হয়েছে। সময়: %s।"
+ "%s: এর থেকে %s বার্তা। সময়: %s।"
+ "%s: -কে %s বার্তা পাঠানো যায় নি। সময়: %s।"
+ "%s: -কে %s বার্তা পাঠাচ্ছে। সময়: %s।"
+ "%s: -কে %s বার্তা পাঠাতে ব্যর্থ হয়েছে। সময়: %s।"
+ "%s: -কে %s বার্তা পাঠান। সময়: %s।"
+ "%s: %s বার্তা পাঠাতে ব্যর্থ হয়েছেন। সময়: %s। %s।"
+ "%s: এর থেকে %s বার্তা। সময়: %s। %s।"
+ "%s: -কে %s বার্তা পাঠানো যায় নি। সময়: %s।"
+ "%s:-এ %s বার্তা পাঠানো হচ্ছে। সময়: %s।"
+ "%s: -এ %s বার্তা পাঠাতে ব্যর্থ হয়েছে। সময়: %s।"
+ "%s: -এ %s বার্তা পাঠান। সময়: %s।"
+ "বার্তা পাঠাতে ব্যর্থ হয়েছে। পুনরায় চেষ্টা করতে স্পর্শ করুন।"
+ "%s এর সাথে কথোপকথন"
+ "বিষয় মুছুন"
+ "ভিডিও ক্যাপচার করুন"
+ "একটি স্থির চিত্র ক্যাপচার করুন"
+ "ছবি তুলুন"
+ "ভিডিও রেকর্ডিং শুরু করুন"
+ "সম্পূর্ণ স্ক্রীন ক্যামেরাতে স্যুইচ করুন"
+ "সামনে ও পিছনে ক্যামেরার মধ্যে স্যুইচ করুন"
+ "রেকর্ডিং করা বন্ধ করুন এবং ভিডিও সংযুক্ত করুন"
+ "ভিডিও রেকর্ডিং বন্ধ করুন"
+ "বার্তাপ্রেরণ ফটোগুলি"
+
+ %dটি ফটো \"%s\" অ্যালবামে সংরক্ষিত হয়েছে
+ %dটি ফটো \"%s\" অ্যালবামে সংরক্ষিত হয়েছে
+
+
+ %dটি ভিডিও \"%s\" অ্যালবামে সংরক্ষিত হয়েছে
+ %dটি ভিডিও \"%s\" অ্যালবামে সংরক্ষিত হয়েছে
+
+
+ %dটি সংযুক্তি \"%s\" অ্যালবামে সংরক্ষিত হয়েছে
+ %dটি সংযুক্তি \"%s\" অ্যালবামে সংরক্ষিত হয়েছে
+
+
+ %dটি সংযুক্তি \"ডাউনলোডগুলি\" এ সংরক্ষিত হয়েছে
+ %dটি সংযুক্তি \"ডাউনলোডগুলি\" এ সংরক্ষিত হয়েছে
+
+
+ %dটি সংযুক্তি সংরক্ষণ করা হয়েছে
+ %dটি সংযুক্তি সংরক্ষণ করা হয়েছে
+
+
+ %dটি সংযুক্তি সংরক্ষণ করা যায়নি
+ %dটি সংযুক্তি সংরক্ষণ করা যায়নি
+
+ "MMS সংযুক্তি সংরক্ষণ করা হয়েছে"
+ "সেটিংস"
+ "সংরক্ষণাগারভুক্ত"
+ "বন্ধ করুন"
+ "MMS"
+ "উন্নত"
+ "ডিবাগ"
+ "বিজ্ঞপ্তিগুলি"
+ "আওয়াজ"
+ "নীরব"
+ "কম্পন"
+ "অবরুদ্ধ"
+ "SMS বিতরণের প্রতিবেদনগুলি"
+ "আপনি যে SMS পাঠাবেন তার প্রতিটির জন্য পৌঁছে দেওয়ার প্রতিবেদনের অনুরোধ করুন"
+ "স্বতঃ-উদ্ধার"
+ "স্বয়ংক্রিয়ভাবে MMS বার্তাগুলি পুনরুদ্ধার করুন"
+ "রোমিং থাকাকালীন স্বতঃ-উদ্ধার"
+ "রোমিং-এ থাকার সময় স্বয়ংক্রিয়ভাবে MMS পুনরুদ্ধার করুন"
+ "গোষ্ঠীর মধ্যে বার্তাপ্রেরণ"
+ "যখন একাধিক প্রাপক রয়েছে তখন একটি বার্তা পাঠাতে MMS ব্যবহার করুন"
+ "ডিফল্ট SMS অ্যাপ্লিকেশান"
+ "ডিফল্ট SMS অ্যাপ্লিকেশান"
+
+
+ "আপনার ফোন নম্বর"
+ "অজানা"
+ "আউটগোয়িং বার্তার শব্দগুলি"
+ "ডাম্প SMS"
+ "পাওয়া SMS এর অপীষ্কার ডেটাকে বহিরাগত সংগ্রহস্থলে জমা করুন"
+ "ডাম্প MMS"
+ "গৃহিত MMS এর কাঁচা ডেটাকে বহিরাগত সংগ্রহস্থলে জমা করুন"
+ "বেতার সতর্কতাগুলি"
+ "বার্তা বিকল্পগুলি"
+ "পাঠ্য অনুলিপি করুন"
+ "বিশদ বিবরণ দেখুন"
+ "মুছুন"
+ "ফরওয়ার্ড করুন"
+ "বার্তার বিশদ বিবরণ"
+ "প্রকার: "
+ "পাঠ্য বার্তা"
+ "মাল্টিমিডিয়া বার্তা"
+ "প্রেরক: "
+ "প্রাপক: "
+ "পাঠানো হয়েছে: "
+ "গ্রহণ করা হয়েছে: "
+ "বিষয়: "
+ "মাপ: "
+ "অগ্রাধিকার: "
+ "SIM: "
+ "উচ্চ"
+ "স্বাভাবিক"
+ "নিম্ন"
+ "SIM %s"
+ "লুকানো প্রেরক ঠিকানা"
+ "সংযুক্তি লোড করার সময় বার্তা পাঠানো যাচ্ছে না।"
+ "সংযুক্তি লোড করা যাবে না। আবার চেষ্টা করুন।"
+ "নেটওয়ার্ক প্রস্তুত নয়৷ আবার চেষ্টা করুন৷"
+ "পাঠ্য মুছে দিন"
+ "পাঠ্য এবং সংখ্যা লেখার মধ্যে স্যুইচ করুন"
+ "আরো অংশগ্রহণকারী যোগ করুন"
+ "অংশগ্রহণকারীদের নিশ্চিত করুন"
+ "নতুন কথোপকথন শুরু করুন"
+ "এই আইটেমটি নির্বাচন করুন"
+ "ভিডিও দেখুন"
+ "ব্যক্তি ও বিকল্পগুলি"
+ "ডিবাগ"
+ "ব্যক্তি ও বিকল্পগুলি"
+ "সাধারণ"
+ "এই কথোপকথনে থাকা ব্যক্তিগণ"
+ "একটি কল করুন"
+ "বার্তা পাঠান"
+ "%s</small> থেকে <br/><small>from বার্তা পাঠান"
+
+ ফটোগুলি পাঠান
+ ফটোগুলি পাঠান
+
+
+ অডিওগুলি পাঠান
+ অডিওগুলি পাঠান
+
+
+ ভিডিওগুলি পাঠান
+ ভিডিওগুলি পাঠান
+
+
+ পরিচিতি কার্ডগুলি পাঠান
+ পরিচিতি কার্ডগুলি পাঠান
+
+
+ সংযুক্তিগুলি পাঠান
+ সংযুক্তিগুলি পাঠান
+
+
+ পাঠানোর জন্য %dটি সংযুক্তি প্রস্তুত
+ পাঠানোর জন্য %dটি সংযুক্তি প্রস্তুত
+
+ "প্রতিক্রিয়া পাঠান"
+ "Google Play স্টোরে দেখুন"
+ "সংস্করণ তথ্য"
+ "সংস্করণ %1$s"
+ "মুক্ত উৎস লাইসেন্সগুলি"
+ "বিজ্ঞপ্তিগুলি"
+ "সংযুক্তির সীমা অতিক্রান্ত হয়েছে"
+ "সংযুক্তি লোড করতে ব্যর্থ হয়েছে।"
+ "পরিচিতিতে জুড়ুন"
+ "পরিচিতি জুড়ুন"
+ "বিষয়"
+ "বিষয়: "
+ "%s%s"
+ "পরিচিতি কার্ড লোড হচ্ছে"
+ "পরিচিতি কার্ড লোড করা যায়নি"
+ "পরিচিতি কার্ড দেখুন"
+
+ %dটি পরিচিতি
+ %dটি পরিচিতি
+
+ "যোগাযোগ কার্ড"
+ "জন্মদিন"
+ "টীকাগুলি"
+ "বার্তা ফরোয়ার্ড করুন"
+ "উত্তর"
+ "+১"
+ "+%d"
+ "SMS অক্ষম করা হয়েছে"
+ "পাঠাতে, ডিফল্ট SMS অ্যাপ্লিকেশান হিসাবে বার্তাপ্রেরণ সেট করুন"
+ "ডিফল্ট SMS অ্যাপ্লিকেশান হিসাবে বার্তাপ্রেরণ সেট করুন"
+ "পরিবর্তন"
+ "বার্তাগুলি গ্রহণ করতে, আপনার ডিফল্ট SMS অ্যাপ্লিকেশান হিসাবে বার্তাপ্রেরণ সেট করুন"
+ "SMS বার্তাগুলি পাঠানোর জন্য কোন পছন্দের SIM নির্বাচিত নেই৷"
+ "এই অ্যাপ্লিকেশানটি ডিভাইস মালিক দ্বারা অনুমোদিত নয়।"
+ "ঠিক আছে"
+ "একটি কথোপকথনে খুব বেশি সংখ্যার অংশগ্রহণকারী"
+
+ অবৈধ পরিচিতিগুলি
+ অবৈধ পরিচিতিগুলি
+
+ "ক্যামেরা চিত্র লোড করা যায়নি"
+ "আপনি: "
+ "%s: "
+ "খসড়া"
+ "আপনি নতুন কোনো কথোপকথন শুরু করলে, সেটিকে এই তালিকায় দেখতে পাবেন"
+ "সংরক্ষিত করা কথোপকথন এখানে প্রদর্শিত হয়"
+ "কথোপকথনগুলি লোড হচ্ছে…"
+ "ছবি"
+ "অডিও ক্লিপ"
+ "ভিডিও"
+ "পরিচিতি কার্ড"
+ "MMS"
+ "পূর্বাবস্থায় ফিরুন"
+ "পুনরায় চেষ্টা করুন"
+ "একটি নতুন বার্তা পাঠাতে একটি পরিচিতি নাম অথবা ফোন নম্বর লিখুন"
+ "অবরুদ্ধ করুন"
+ "%s-কে অবরুদ্ধ করুন"
+ "%s-কে অবরোধ মুক্ত করুন"
+ "%s-কে অবরুদ্ধ করবেন?"
+ "আপনি এই নম্বর থেকে অবিরত বার্তা গ্রহণ করতে করবেন কিন্তু আপনাকে আর সূচিত করা হবে না। এই কথোপকথন সংরক্ষণ করা হবে।"
+ "অবরুদ্ধ পরিচিতিগুলি"
+ "অবরোধ মুক্ত করুন"
+ "অবরুদ্ধ পরিচিতিগুলি"
+ "দস্তাবেজ লাইব্রেরি থেকে চিত্র নির্বাচন করুন"
+ "বার্তা পাঠানো হচ্ছে"
+ "বার্তা পাঠানো হয়েছে"
+ "সেলুলার ডেটা বন্ধ আছে। আপনার সেটিংস চেক করুন।"
+ "বিমান মোডে বার্তা পাঠানো যাবে না"
+ "এই বার্তাটি পাঠানো যায়নি"
+ "বার্তা ডাউনলোড করা হয়েছে"
+ "সেলুলার ডেটা বন্ধ আছে। আপনার সেটিংস চেক করুন।"
+ "বিমান মোডে বার্তাগুলি ডাউনলোড করা যাবে না"
+ "বার্তা ডাউনলোড করা যায়নি"
+ "শূন্য"
+ "এক"
+ "দুই"
+ "তিন"
+ "চার"
+ "পাঁচ"
+ "ছয়"
+ "সাত"
+ "আট"
+ "নয়"
+ "%1$s এর মাধ্যমে বার্তা পাঠানো যাবে না, ত্র্রুটি %2$d"
+ "অজানা পরিষেবা প্রদানকারীর মাধ্যমে বার্তা পাঠানো যাবে না, ত্রুটি %1$d"
+ "ফরওয়ার্ড: %s"
+ "বার্তা পাঠানো হয়নি: নেটওয়ার্কে পরিষেবা সক্রিয় নেই"
+ "বার্তা পাঠানো যায়নি: অবৈধ গন্তব্য ঠিকানা"
+ "বার্তা পাঠানো যায়নি: অবৈধ বার্তা"
+ "বার্তা পাঠানো যায়নি: অসমর্থিত বিষয়বস্তু"
+ "বার্তা পাঠানো যায়নি: অসমর্থিত বার্তা"
+ "বার্তা পাঠানো হয়নি: খুব বড়"
+ "নতুন বার্তা"
+ "দেখুন"
+ "চিত্র"
+ "কোনো উপযুক্ত অ্যাপ্লিকেশান পাওয়া যায়নি"
+ "প্রাপককে সরান"
+ "নতুন বার্তা"
+ "বাতিল করুন"
+ "অ্যাক্সেস পয়েন্ট সম্পাদনা করুন"
+ "সেট করা নেই"
+ "নাম"
+ "APN"
+ "MMSC"
+ "MMS প্রক্সি"
+ "MMS পোর্ট"
+ "MCC"
+ "MNC"
+ "APN প্রকার"
+ "APN মুছে দিন"
+ "নতুন APN"
+ "সংরক্ষণ করুন"
+ "খারিজ করুন"
+ "নামের ক্ষেত্রটি খালি থাকতে পারে না।"
+ "APN খালি থাকতে পারে না।"
+ "MCC ক্ষেত্রটিকে ৩ ডিজিটের হতে হবে।"
+ "MNC ক্ষেত্রটিকে ২ অথবা ৩ ডিজিটের হতে হবে।"
+ "ডিফল্ট APN সেটিংস পুনরুদ্ধার করা হচ্ছে।"
+ "পুনরায় ডিফল্ট হিসাবে সেট করুন"
+ "ডিফল্ট APN সেটিংস পুনরায় সেট করা সম্পন্ন হয়েছে।"
+ "শীর্ষকহীন"
+ "অ্যাক্সেস পয়েন্টের নামগুলি"
+ "APNগুলি"
+ "নতুন APN"
+ "এই ব্যবহারকারীর জন্য অ্যাক্সেস পয়েন্ট নাম সেটিংস উপলব্ধ নয়"
+ "ক্লিপবোর্ডে অনুলিপি করবেন?"
+ "অনুলিপি করুন"
+ "%s এ"
+ "সাধারণ"
+ "আরো বিকল্প"
+ "সাধারণ সেটিংস"
+ "উন্নত সেটিংস"
+ "\"%s\" SIM"
+ "সকল প্রাপকের কাছে আলাদা আলাদা করে SMS পাঠান৷ শুধুমাত্র আপনিই উত্তরগুলি পাবেন"
+ "সকল প্রাপকের কাছে একটি নির্দিষ্ট MMS পাঠান"
+ "অজানা নম্বর"
+ "নতুন বার্তা"
+ "নতুন বার্তা৷"
+ "SIM নির্বাচক"
+ "%1$s নির্বাচিত, SIM নির্বাচক"
+ "বিষয় সম্পাদনা করুন"
+ "SIM নির্বাচন করুন বা বিষয় সম্পাদনা করুন"
+ "অডিও রেকর্ড করতে স্পর্শ করুন এবং ধরে রাখুন"
+ "নতুন কথোপকথন শুরু করুন"
+ "বার্তাপ্রেরণ"
+ "বার্তাপ্রেরণ তালিকা"
+ "বার্তাপ্রেরণ"
+ "নতুন বার্তা"
+ "কথোপকথনের তালিকা"
+ "কথোপকথনগুলি লোড হচ্ছে"
+ "বার্তাগুলি লোড করা হচ্ছে"
+ "আরো কথোপকথন দেখুন"
+ "আরো বার্তা দেখুন"
+ "কথোপকথন মুছে দেওয়া হয়েছে"
+ "কথোপকথন মুছে ফেলা হয়েছে৷ একটি ভিন্ন বার্তাপ্রেরণ কথোপকথন দেখানোর জন্য স্পর্শ করুন"
+ "অবরুদ্ধ"
+ "অবরোধ মুক্ত করা হয়েছে"
+ "সঞ্চয়স্থান কম রয়েছে৷ কিছু ডেটা হারিয়ে যেতে পারে৷"
+ "সংযুক্তিগুলি নির্বাচন করুন"
+ "নির্বাচন নিশ্চিত করুন"
+ "%dটি নির্বাচন করা হয়েছে"
+ "একটি অথবা আরও বেশি সংযুক্তি সরিয়ে আবার চেষ্টা করুন।"
+ "আপনি আপনার বার্তা পাঠানোর চেষ্টা করতে পারেন, কিন্তু আপনি এক বা একাধিক সংযুক্তি অপসারণ না করা পর্যন্ত তা বিতরণ নাও করা হতে পারে।"
+ "আপনি বার্তা প্রতি শুধুমাত্র একটি ভিডিও পাঠাতে পারেন৷ অতিরিক্ত ভিডিওগুলি সরিয়ে দিয়ে আবার চেষ্টা করুন৷"
+ "বার্তাপ্রেরণ সংযুক্তি লোড করতে ব্যর্থ হয়েছে৷"
+ "তবুও পাঠান"
+ "কথোপকথন শুরু করা যায়নি"
+ "%1$s (%2$s)"
+ "%s নির্বাচিত হয়েছে"
+
diff --git a/res/values-ca/arrays.xml b/res/values-ca/arrays.xml
new file mode 100644
index 0000000..69ce724
--- /dev/null
+++ b/res/values-ca/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "sense assumpte"
+ "nosubject"
+
+
+ "Sí"
+ "No"
+ "D\'acord"
+ "Hehe"
+ "Gràcies"
+ "Accepto"
+ "Molt bé"
+ "Ja vinc."
+ "D\'acord. Et diré alguna cosa més tard."
+ ":)"
+ ":("
+
+
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
new file mode 100644
index 0000000..8923f0c
--- /dev/null
+++ b/res/values-ca/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Missatges"
+ "Missatges"
+ "Selecció de la conversa"
+ "Configuració"
+ "Envia el missatge"
+ "Afegeix un fitxer adjunt"
+ "Ajuda"
+ "Et donem la benvinguda"
+ "Omet"
+ "Següent >"
+ "Següent"
+ "Surt"
+ "Configuració >"
+ "Configuració"
+ "Missatges necessita permís per accedir als SMS, al telèfon i als contactes."
+ "Pots canviar els permisos a Configuració > Aplicacions > Missatges > Permisos."
+ "Pots canviar els permisos a Configuració, Aplicacions, Missatges, Permisos."
+ "Freqüents"
+ "Tots els contactes"
+ "Envia al %s"
+ "Captura fotos o vídeos"
+ "Tria imatges d\'aquest dispositiu."
+ "Enregistra l\'àudio"
+ "Triar una foto"
+ "S\'ha seleccionat el fitxer multimèdia."
+ "No hi ha cap fitxer multimèdia seleccionat."
+ "Seleccionats: %d"
+ "imatge: %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "imatge"
+ "Enregistra l\'àudio"
+ "Comparteix"
+ "Ara mateix"
+ "Ara"
+
+ %d min
+ %d min
+
+
+ %d hores
+ %d hora
+
+
+ %d dies
+ %d dia
+
+
+ %d setmanes
+ una setmana
+
+
+ %d mesos
+ un mes
+
+
+ %d anys
+ un any
+
+ "Missatge de classe 0"
+ "Desa"
+ "Queda poc espai al dispositiu. Per alliberar-ne, Missatgeria suprimirà automàticament els missatges antics."
+ "L\'espai d\'emmagatzematge s\'està esgotant"
+ "Pot ser que Missatges no enviï ni rebi missatges fins que no tinguis més espai disponible al dispositiu."
+ "Poc emmagatzematge per a SMS. És possible que et calgui suprimir missatges."
+ "Confirma el teu número de telèfon"
+ "Aquest pas únic garanteix que els missatges de grup s\'enviïn correctament amb Missatges."
+ "Número de telèfon"
+ "Suprimeix tots els missatges amb fitxers multimèdia"
+ "Suprimeix els missatges de més de %s"
+ "Suprimeix automàticament els missatges de més de %s"
+ "Ignora"
+ "Confirmes que vols suprimir tots els missatges amb fitxers multimèdia?"
+ "Confirmes que vols suprimir els missatges de més de %s?"
+ "Confirmes que vols suprimir els missatges de més de %s i activar la funció per suprimir-los automàticament?"
+ "%s ha dit:"
+ "Has dit:"
+ "Missatge de: %s"
+ "Has enviat un missatge."
+ "S\'està enviant…"
+ "No s\'ha enviat. Toca per tornar-ho a provar."
+ "No s\'ha enviat. S\'està tornant a provar…"
+ "Reenvia o suprimeix"
+ "Truca als serveis d\'emergència. En aquest moment, el missatge de text no s\'ha pogut enviar."
+ "S\'ha produït un error."
+ "Missatge MMS nou per baixar"
+ "Missatge MMS nou"
+ "No s\'ha pogut baixar."
+ "Toca per tornar-ho a provar"
+ "Toca per baixar"
+ "Baixa o suprimeix"
+ "S\'està baixant..."
+ "El missatge ha caducat o no està disponible."
+ "mida: %1$s, caducitat: %2$s"
+ "No es pot enviar. El destinatari no és vàlid."
+ "El servei no està activat a la xarxa."
+ "No s\'ha pogut enviar a causa d\'un problema de xarxa."
+ "El missatge ha caducat o no està disponible."
+ "(Sense assumpte)"
+ "Emissor desconegut"
+ "Entregat"
+ "No s\'ha pogut baixar el missatge %1$s de %2$s."
+ "No s\'ha pogut completar l\'operació de la base de dades perquè hi ha poca memòria."
+ "No s\'ha enviat el missatge."
+ "Alguns missatges no s\'han enviat a Missatges"
+
+ %d missatges en %d converses
+ %d missatges en una conversa
+
+ "No s\'ha baixat el missatge"
+ "Alguns missatges a Missatges no s\'han baixat"
+
+ %d missatges en %d converses
+ %d missatges en una conversa
+
+ "No s\'ha enviat el missatge al %1$s"
+ "Truca als serveis d\'emergència. En aquest moment, el missatge de text al %1$s no s\'ha pogut enviar."
+
+ %d missatges nous
+ Missatge nou
+
+ "Inicia"
+ "La càmera no està disponible."
+ "La càmera no està disponible."
+ "La captura de vídeo no està disponible."
+ "No es pot desar el fitxer multimèdia."
+ "No es pot fer una foto."
+ "Enrere"
+ "Arxivades"
+ "Suprimeix"
+ "Arxiu"
+ "Treu de l\'arxiu"
+ "Desactiva les notificacions"
+ "Activa les notificacions"
+ "Afegeix un contacte"
+ "Baixa"
+ "Envia"
+ "Suprimeix"
+ "Vols suprimir aquest missatge?"
+ "Aquesta acció no es pot desfer."
+ "Suprimeix"
+
+ Vols suprimir aquestes converses?
+ Vols suprimir aquesta conversa?
+
+ "Suprimeix"
+ "Cancel·la"
+ "Per a"
+ "Selecciona diverses imatges"
+ "Confirma la selecció"
+ "+%d"
+ "No es pot enregistrar l\'àudio. Torna-ho a provar."
+ "No es pot reproduir l\'àudio. Torna-ho a provar."
+ "No s\'ha pogut desar l\'àudio. Torna-ho a provar."
+ "Toca i mantén premut"
+ ", "
+ " "
+ ": "
+ " "
+ "Imatge"
+ "Clip d\'àudio"
+ "Vídeo"
+ "Targeta de contacte"
+ "Baixa"
+ "Respon amb un SMS"
+ "Respon amb un MMS"
+ "Respon"
+
+ %d participants
+ %d participant
+
+ "Jo"
+ "Contactes bloquejats i arxivats"
+ "Contacte desbloquejat i no arxivat"
+ "Arxivades: %d"
+ "No arxivades: %d"
+ "Notificacions desactivades"
+ "Notificacions activades"
+ "Ja està tot llest. Torna a tocar Envia."
+ "Missatges s\'ha definit correctament com a aplicació predeterminada de SMS."
+
+ Descarta els fitxers adjunts
+ Descarta el fitxer adjunt
+
+ "Àudio adjunt"
+ "Reprodueix l\'àudio adjunt"
+ "Atura"
+ "Missatge de %s: %s."
+ "Missatge no enviat de %s: %s. Hora: %s."
+ "Missatge de %s: %s. Hora: %s."
+ "Missatge no enviat a %s: %s. Hora: %s"
+ "S\'està enviant un missatge a %s: %s. Hora: %s."
+ "Missatge no enviat a %s: %s. Hora: %s."
+ "Missatge a %s: %s. Hora: %s."
+ "Missatge no enviat de %s: %s. Hora: %s. %s."
+ "Missatge de %s: %s. Hora: %s. %s."
+ "Missatge no enviat a %s: %s. Hora: %s"
+ "S\'està enviant un missatge a %s: %s. Hora: %s."
+ "Missatge no enviat a %s: %s. Hora: %s."
+ "Missatge a %s: %s. Hora: %s."
+ "Hi ha hagut un problema amb aquest missatge. Toca per tornar-ho a provar."
+ "Conversa amb %s"
+ "Suprimeix l\'assumpte"
+ "Captura un vídeo"
+ "Captura una imatge fixa"
+ "Fes una foto"
+ "Comença a enregistrar vídeo"
+ "Canvia a la càmera de pantalla completa"
+ "Canvia entre la càmera frontal i la posterior"
+ "Deixa d\'enregistrar i adjunta un vídeo"
+ "Atura l\'enregistrament de vídeo"
+ "Fotos de missatges"
+
+ S\'han desat %d fotos a l\'àlbum %s
+ S\'ha desat %d foto a l\'àlbum %s
+
+
+ S\'han desat %d vídeos a l\'àlbum %s
+ S\'ha desat %d vídeo a l\'àlbum %s
+
+
+ S\'han desat %d fitxers adjunts a l\'àlbum %s
+ S\'ha desat %d fitxer adjunt a l\'àlbum %s
+
+
+ S\'han desat %d fitxers adjunts a Baixades
+ S\'ha desat %d fitxer adjunt a Baixades
+
+
+ S\'han desat %d fitxers adjunts
+ S\'ha desat %d fitxer adjunt
+
+
+ No s\'han pogut desar %d fitxers adjunts
+ No s\'ha pogut desar %d fitxer adjunt
+
+ "S\'ha desat el fitxer adjunt MMS."
+ "Configuració"
+ "Arxivades"
+ "Tanca"
+ "MMS"
+ "Avançada"
+ "Depuració"
+ "Notificacions"
+ "So"
+ "Silenci"
+ "Vibració"
+ "S\'ha bloquejat"
+ "Informes d\'entrega de SMS"
+ "Sol·licita un informe d\'entrega per a cada SMS enviat"
+ "Recuperació automàtica"
+ "Recupera MMS automàticament"
+ "Recupera aut. els MMS en itinerància"
+ "Recupera MMS automàticament en itinerància"
+ "Missatge de grup"
+ "Utilitza MMS per enviar un únic missatge a diversos destinataris"
+ "Aplicació de SMS predeterminada"
+ "Aplicació de SMS predeterminada"
+
+
+ "Número de telèfon"
+ "Desconegut"
+ "Sons per a missatges de sortida"
+ "Envia el contingut dels SMS"
+ "Envia les dades sense processar dels SMS rebuts al fitxer d\'emmagatzematge extern."
+ "Envia el contingut dels MMS"
+ "Buida les dades sense processar dels MMS rebuts en un fitxer d’emmagatzematge extern"
+ "Alertes sense fil"
+ "Opcions del missatge"
+ "Copia el text"
+ "Mostra els detalls"
+ "Suprimeix"
+ "Reenvia"
+ "Detalls del missatge"
+ "Tipus: "
+ "Missatge de text"
+ "Missatge multimèdia"
+ "De: "
+ "Per a: "
+ "Enviat: "
+ "Rebut: "
+ "Assumpte: "
+ "Mida: "
+ "Prioritat: "
+ "SIM: "
+ "Alta"
+ "Normal"
+ "Baixa"
+ "SIM %s"
+ "Amaga l\'adreça del remitent"
+ "No es pot enviar el missatge durant la càrrega dels fitxers adjunts."
+ "No s\'ha pogut carregar el fitxer adjunt. Torna-ho a provar."
+ "La xarxa no està a punt. Torna-ho a provar."
+ "Suprimeix el text"
+ "Alterna entre escriure lletres i números"
+ "Afegeix més participants"
+ "Confirma els participants"
+ "Inicia una conversa nova"
+ "Selecciona aquest element."
+ "Reprodueix el vídeo."
+ "Persones i opcions"
+ "Depura"
+ "Persones i opcions"
+ "General"
+ "Persones en aquesta conversa"
+ "Fes una trucada"
+ "Envia el missatge"
+ "Envia un missatge<br/><small>des de %s</small>."
+
+ Envia les fotos
+ Envia la foto
+
+
+ Envia els àudios
+ Envia l\'àudio
+
+
+ Envia els vídeos
+ Envia el vídeo
+
+
+ Envia les targetes de contacte
+ Envia la targeta de contacte
+
+
+ Envia els fitxers adjunts
+ Envia el fitxer adjunt
+
+
+ Ja es poden enviar %d fitxers adjunts
+ Ja es pot enviar un fitxer adjunt
+
+ "Envia suggeriments"
+ "Mostra a Google Play Store"
+ "Informació de la versió"
+ "Versió %1$s"
+ "Llicències de codi obert"
+ "Notificacions"
+ "S\'ha assolit el límit de fitxers adjunts"
+ "No s\'ha pogut carregar el fitxer adjunt."
+ "Vols afegir-lo als contactes?"
+ "Afegeix el contacte"
+ "Assumpte"
+ "Assumpte: "
+ "%s%s"
+ "S\'està carregant la targeta de contacte"
+ "No s\'ha pogut carregar la targeta de contacte"
+ "Mostra la targeta de contactes"
+
+ %d contactes
+ %d contacte
+
+ "Targetes de contacte"
+ "Natalici"
+ "Notes"
+ "Reenvia el missatge"
+ "Respon"
+ "+1"
+ "+%d"
+ "SMS desactivats"
+ "Per enviar missatges, defineix Missatges com a aplicació predeterminada de SMS"
+ "Defineix Missatges com a aplicació predeterminada de SMS"
+ "Canvia"
+ "Per rebre missatges, defineix Missatges com a aplicació predeterminada de SMS"
+ "No s\'ha seleccionat cap SIM preferida per enviar missatges SMS."
+ "El propietari del dispositiu no admet l\'aplicació."
+ "D\'acord"
+ "Hi ha massa participants a la conversa."
+
+ Els contactes no són vàlids
+ El contacte no és vàlid
+
+ "No s\'ha pogut carregar la imatge de la càmera."
+ "Tu: "
+ "%s: "
+ "Esborrany"
+ "Quan comencis una conversa nova, es mostrarà aquí."
+ "Les converses arxivades es mostren aquí."
+ "S\'estan carregant les converses..."
+ "Imatge"
+ "Clip d\'àudio"
+ "Vídeo"
+ "Targeta de contacte"
+ "MMS"
+ "Desfés"
+ "Torna-ho a provar"
+ "Introdueix el nom d\'un contacte o el número de telèfon per escriure un missatge nou."
+ "Bloqueja"
+ "Bloqueja %s"
+ "Desbloqueja %s"
+ "Vols bloquejar %s?"
+ "Continuaràs rebent missatges d\'aquest número, però no se t\'enviarà cap notificació. Aquesta conversa s\'arxivarà."
+ "Contactes bloquejats"
+ "DESBLOQUEJA"
+ "Contactes bloquejats"
+ "Tria una imatge de la biblioteca de documents."
+ "S\'està enviant el missatge"
+ "Missatge enviat"
+ "Les dades del telèfon estan desactivades. Comprova\'n la configuració."
+ "No es poden enviar missatges amb el mode d\'avió activat."
+ "No s\'ha pogut enviar el missatge"
+ "Missatge baixat"
+ "Les dades del telèfon estan desactivades. Comprova\'n la configuració."
+ "No es poden baixar missatges en mode d\'avió"
+ "El missatge no s\'ha pogut baixar"
+ "Zero"
+ "Un"
+ "Dos"
+ "Tres"
+ "Quatre"
+ "Cinc"
+ "Sis"
+ "Set"
+ "Vuit"
+ "Nou"
+ "No es pot enviar el missatge amb %1$s, error %2$d"
+ "No es pot enviar el missatge amb un operador de telefonia mòbil desconegut, error %1$d"
+ "Rv: %s"
+ "No s\'ha enviat el missatge; el servei no s\'ha activat a la xarxa."
+ "Missatge no enviat: adreça de destinació no vàlida"
+ "Missatge no enviat: missatge no vàlid"
+ "Missatge no enviat: contingut no admès"
+ "Missatge no enviat: missatge no admès"
+ "El missatge no s\'ha enviat: és massa gran"
+ "Missatge nou"
+ "Mostra"
+ "Imatge"
+ "No s\'ha pogut trobar una aplicació adequada."
+ "Suprimeix el destinatari."
+ "Missatge nou"
+ "Cancel·la"
+ "Edita el punt d\'accés"
+ "No definit"
+ "Nom"
+ "APN"
+ "MMSC"
+ "Servidor intermediari MMS"
+ "Port per a MMS"
+ "MCC"
+ "MNC"
+ "Tipus d\'APN"
+ "Suprimeix l\'APN"
+ "APN nou"
+ "Desa"
+ "Descarta"
+ "El camp Nom no pot quedar buit."
+ "L\'APN no pot quedar buit."
+ "El camp MCC ha de tenir 3 dígits."
+ "El camp MNC ha de tenir 2 o 3 dígits."
+ "S\'està restaurant la configuració predeterminada d\'APN."
+ "Restableix al valor predeterminat"
+ "S\'ha restablert la configuració predeterminada d\'APN."
+ "Sense títol"
+ "Noms de punt d\'accés"
+ "APN"
+ "APN nou"
+ "La configuració del nom del punt d\'accés no està disponible per a aquest usuari."
+ "Ho vols copiar al porta-retalls?"
+ "Copia"
+ "per a %s"
+ "General"
+ "Avançada"
+ "Configuració general"
+ "Configuració avançada"
+ "SIM %s"
+ "Envia missatges SMS individuals a tots els destinataris. Només tu rebràs les respostes."
+ "Envia un MMS individual a tots els destinataris"
+ "Número desconegut"
+ "Missatge nou"
+ "Missatge nou"
+ "Selector de SIM"
+ "%1$s seleccionada, selector de SIM"
+ "Edita l\'assumpte"
+ "Selecciona la SIM o edita l\'assumpte"
+ "Mantén premut per enregistrar àudio"
+ "Inicia una conversa nova"
+ "Missatges"
+ "Llista de missatges"
+ "Missatges"
+ "Missatge nou"
+ "Llista de converses"
+ "S\'estan carregant les converses"
+ "S\'estan carregant els missatges"
+ "Mostra més converses"
+ "Mostra més missatges"
+ "S\'ha suprimit la conversa."
+ "S\'ha suprimit la conversa. Toca per mostrar una altra conversa de Missatges"
+ "Bloquejat"
+ "Desbloquejat"
+ "Hi ha poc espai d\'emmagatzematge. És possible que es perdin algunes dades."
+ "Selecciona els fitxers adjunts"
+ "Confirma la selecció"
+ "Seleccionats: %d"
+ "Suprimeix un o més fitxers adjunts i torna-ho a provar."
+ "Pots provar d\'enviar el missatge, però és possible que no s\'enviï si no suprimeixes un o més fitxers adjunts."
+ "Només pots enviar un vídeo per missatge. Suprimeix els vídeos addicionals i torna-ho a provar."
+ "Missatges no ha pogut carregar el fitxer adjunt."
+ "Envia igualment"
+ "No s\'ha pogut iniciar la conversa"
+ "%1$s (%2$s)"
+ "%s seleccionada"
+
diff --git a/res/values-cs/arrays.xml b/res/values-cs/arrays.xml
new file mode 100644
index 0000000..95c2775
--- /dev/null
+++ b/res/values-cs/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "bez předmětu"
+ "bezpředmětu"
+
+
+ "Ano"
+ "Ne"
+ "OK"
+ "Cha cha"
+ "Díky"
+ "Souhlasím"
+ "Hezké"
+ "Jsem na cestě."
+ "OK, ozvu se později."
+ ":)"
+ ":("
+
+
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
new file mode 100644
index 0000000..8b56e47
--- /dev/null
+++ b/res/values-cs/strings.xml
@@ -0,0 +1,571 @@
+
+
+
+
+ "SMS a MMS"
+ "SMS a MMS"
+ "Vybrat konverzaci"
+ "Nastavení"
+ "Odeslat zprávu"
+ "Přidat přílohu"
+ "Nápověda"
+ "Vítejte"
+ "Přeskočit"
+ "Další >"
+ "Další"
+ "Ukončit"
+ "Nastavení >"
+ "Nastavení"
+ "Aplikace SMS a MMS vyžaduje oprávnění k přístupu k SMS, telefonu a kontaktům."
+ "Oprávnění můžete změnit v Nastavení > Aplikace > SMS a MMS > Oprávnění."
+ "Oprávnění můžete změnit v Nastavení, Aplikace, SMS a MMS, Oprávnění."
+ "Časté kontakty"
+ "Všechny kontakty"
+ "Odeslat na číslo %s"
+ "Pořídit fotky nebo video"
+ "Vyberte obrázky z tohoto zařízení."
+ "Nahrát zvuk"
+ "Vybrat fotku"
+ "Médium je vybráno."
+ "Výběr média je zrušen."
+ "Vybráno: %d"
+ "obrázek %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "obrázek"
+ "Nahrávání zvuku"
+ "Sdílet"
+ "Právě teď"
+ "Teď"
+
+ %d min
+ %d min
+ %d min
+ %d min
+
+
+ %d hodiny
+ %d hodiny
+ %d hodin
+ %d hodina
+
+
+ %d dny
+ %d dne
+ %d dnů
+ %d den
+
+
+ %d týdny
+ %d týdne
+ %d týdnů
+ jeden týden
+
+
+ %d měsíce
+ %d měsíce
+ %d měsíců
+ jeden měsíc
+
+
+ %d roky
+ %d roku
+ %d let
+ jeden rok
+
+ "Zpráva třídy 0"
+ "Uložit"
+ "V zařízení dochází místo. Aplikace SMS a MMS automaticky smaže starší zprávy, aby uvolnila místo."
+ "V úložišti je málo místa"
+ "Aplikace SMS a MMS nebude moci posílat ani přijímat zprávy, dokud v zařízení nebude k dispozici více místa."
+ "Dochází volné místo na zprávy SMS. Možná bude potřeba nějaké zprávy vymazat."
+ "Ověřit telefonní číslo"
+ "Tento jednorázový krok zajistí, že aplikace SMS a MMS správně doručí vaše skupinové zprávy."
+ "Telefonní číslo"
+ "Smazat všechny zprávy s médii"
+ "Smazat zprávy starší než %s"
+ "Automaticky smazat zprávy starší než %s"
+ "Ignorovat"
+ "Vymazat všechny zprávy s médii?"
+ "Smazat zprávy starší než %s?"
+ "Chcete smazat zprávy starší než %s a zapnout automatické mazání?"
+ "%s říká"
+ "Řekli jste"
+ "Zpráva od uživatele %s"
+ "Odeslali jste zprávu"
+ "Odesílání…"
+ "Zpráva nebyla odeslána. Klepnutím to zkusíte znovu."
+ "Zpráva nebyla odeslána. Probíhá další pokus…"
+ "Znovu odeslat nebo smazat"
+ "Uskutečněte prosím hlasové volání nouzových služeb. Vaši textovou zprávu v současné době nebylo možné doručit."
+ "Nezdařilo se"
+ "Nová zpráva MMS ke stažení"
+ "Nová zpráva MMS"
+ "Stažení se nezdařilo."
+ "Klepnutím to zkusíte znovu"
+ "Stáhněte klepnutím."
+ "Stáhnout nebo smazat"
+ "Stahování…"
+ "Platnost zprávy vypršela nebo zpráva není k dispozici."
+ "velikost: %1$s, vypršení platnosti: %2$s"
+ "Zprávu nelze odeslat. Příjemce není platný."
+ "Služba není v síti aktivována."
+ "Zprávu se nepodařilo odeslat z důvodu chyby v síti."
+ "Platnost zprávy vypršela nebo zpráva není k dispozici."
+ "(Bez předmětu)"
+ "Neznámý odesílatel"
+ "Doručeno"
+ "Stažení zprávy %1$s od odesílatele %2$s se nezdařilo."
+ "Databázovou operaci se nepodařilo dokončit z důvodu nedostatku paměti."
+ "Zprávu se nepodařilo odeslat."
+ "Několik zpráv v aplikaci SMS a MMS nebylo odesláno."
+
+ Počet zpráv ve %d konverzacích: %d
+ Počet zpráv v %d konverzace: %d
+ Počet zpráv v %d konverzacích: %d
+ Počet zpráv v jedné konverzaci: %d
+
+ "Zprávu se nepodařilo stáhnout"
+ "Několik zpráv se do aplikace SMS a MMS nepodařilo stáhnout."
+
+ Počet zpráv ve %d konverzacích: %d
+ Počet zpráv v %d konverzace: %d
+ Počet zpráv v %d konverzacích: %d
+ Počet zpráv v jedné konverzaci: %d
+
+ "Zpráva na číslo %1$s nebyla odeslána."
+ "Uskutečněte prosím hlasové volání nouzových služeb. Vaši textovou zprávu na číslo %1$s v současné době nebylo možné doručit."
+
+ %d nové zprávy
+ %d nové zprávy
+ %d nových zpráv
+ Nová zpráva
+
+ "Spustit"
+ "Fotoaparát není k dispozici"
+ "Fotoaparát není k dispozici."
+ "Záznam videa není k dispozici."
+ "Média nelze uložit."
+ "Nelze pořídit fotku"
+ "Zpět"
+ "Archivováno"
+ "Smazat"
+ "Archivovat"
+ "Vyjmout z archivu"
+ "Vypnout oznámení"
+ "Zapnout oznámení"
+ "Přidat kontakt"
+ "Stáhnout"
+ "Odeslat"
+ "Smazat"
+ "Smazat tuto zprávu?"
+ "Tuto akci nelze vrátit zpět."
+ "Smazat"
+
+ Smazat tyto konverzace?
+ Smazat tyto konverzace?
+ Smazat tyto konverzace?
+ Smazat tuto konverzaci?
+
+ "Smazat"
+ "Zrušit"
+ "Komu"
+ "Vybrat několik obrázků"
+ "Potvrďte výběr"
+ "+%d"
+ "Zvuk nelze zaznamenat. Zkuste to znovu."
+ "Zvuk nelze přehrát. Zkuste to znovu."
+ "Zvuk nelze uložit. Zkuste to znovu."
+ "Dotyk s podržením"
+ ", "
+ " "
+ ": "
+ " "
+ "Fotografie"
+ "Zvukový klip"
+ "Video"
+ "Karta kontaktu"
+ "Stáhnout"
+ "Odpovědět – SMS"
+ "Odpovědět v MMS"
+ "Odpovědět"
+
+ %d účastníci
+ %d účastníka
+ %d účastníků
+ %d účastník
+
+ "Já"
+ "Kontakt byl zablokován a archivován."
+ "Kontakt byl odblokován a jeho archivace byla zrušena"
+ "Archivováno: %d"
+ "Vyjmuto z archivu: %d"
+ "Oznámení jsou vypnuta"
+ "Oznámení jsou zapnuta"
+ "Vše je připraveno. Znovu klepněte na Odeslat."
+ "Aplikace SMS a MMS byla úspěšně nastavena jako výchozí aplikace pro SMS."
+
+ Zahodit přílohy
+ Zahodit přílohy
+ Zahodit přílohy
+ Zahodit přílohu
+
+ "Zvuková příloha"
+ "Přehrát zvukovou přílohu"
+ "Pozastavit"
+ "Zpráva od uživatele %s: %s"
+ "Neúspěšná zpráva od uživatele %s: %s. Čas: %s."
+ "Zpráva od uživatele %s: %s. Čas: %s."
+ "Neodeslaná zpráva pro uživatele %s: %s. Čas: %s."
+ "Odesílání zprávy uživateli %s: %s. Čas: %s."
+ "Neúspěšná zpráva pro uživatele %s: %s. Čas: %s."
+ "Zpráva pro uživatele %s: %s. Čas: %s."
+ "Neúspěšná zpráva od uživatele %s: %s. Čas: %s. %s."
+ "Zpráva od uživatele %s: %s. Čas: %s. %s."
+ "Neodeslaná zpráva pro uživatele %s: %s. Čas: %s."
+ "Odesílání zprávy uživateli %s: %s. Čas: %s."
+ "Neúspěšná zpráva pro uživatele %s: %s. Čas: %s."
+ "Zpráva pro uživatele %s: %s. Čas: %s."
+ "Neúspěšná zpráva. Klepnutím pokus opakujte."
+ "Konverzace s uživateli %s"
+ "Smazat předmět"
+ "Natočit video"
+ "Pořídit statický snímek"
+ "Vyfotit"
+ "Začít natáčet video"
+ "Přepnout na fotoaparát na celou obrazovku"
+ "Přepnout mezi předním a zadním fotoaparátem"
+ "Zastavit nahrávání a připojit video"
+ "Zastavit záznam videa"
+ "Fotky z aplikace SMS a MMS"
+
+ %d fotky byly uloženy do alba %s.
+ %d fotky bylo uloženo do alba %s.
+ %d fotek bylo uloženo do alba %s.
+ %d fotka byla uložena do alba %s.
+
+
+ %d videa byla uložena do alba %s.
+ %d videa bylo uloženo do alba %s.
+ %d videí bylo uloženo do alba %s.
+ %d video bylo uloženo do alba %s.
+
+
+ %d přílohy byly uloženy do alba %s.
+ %d přílohy bylo uloženo do alba %s.
+ %d příloh bylo uloženo do alba %s.
+ %d příloha byla uložena do alba %s.
+
+
+ %d přílohy byly uloženy do složky stažených položek.
+ %d přílohy bylo uloženo do složky stažených položek.
+ %d příloh bylo uloženo do složky stažených položek.
+ %d příloha byla uložena do složky stažených položek.
+
+
+ Uloženy %d přílohy
+ Uloženo %d přílohy
+ Uloženo %d příloh
+ Uložena %d příloha
+
+
+ %d přílohy se nepodařilo uložit
+ %d přílohy se nepodařilo uložit
+ %d příloh se nepodařilo uložit
+ %d přílohu se nepodařilo uložit
+
+ "Příloha MMS byla uložena"
+ "Nastavení"
+ "Archivováno"
+ "Zavřít"
+ "MMS"
+ "Rozšířená nastavení"
+ "Ladit"
+ "Oznámení"
+ "Zvuk"
+ "Tichý režim"
+ "Vibrace"
+ "Zablokováno"
+ "Zprávy o doručení SMS"
+ "U každé odeslané SMS požadovat potvrzení o doručení"
+ "Automatické načítání"
+ "Automaticky načítat zprávy MMS"
+ "Autom. načítání při roamingu"
+ "Při roamingu automaticky načítat zprávy MMS"
+ "Skupinové zprávy"
+ "Použít MMS k odeslání jedné zprávy, pokud má několik příjemců"
+ "Výchozí aplikace SMS"
+ "Výchozí aplikace SMS"
+
+
+ "Vaše telefonní číslo"
+ "Neznámé"
+ "Zvuky odchozích zpráv"
+ "Vypsání zpráv SMS"
+ "Vypsat nezpracovaná data přijatých zpráv SMS do souboru externího úložiště"
+ "Vypsání zpráv MMS"
+ "Vypsat nezpracovaná data přijatých zpráv MMS do souboru externího úložiště"
+ "Bezdrátová upozornění"
+ "Možnosti zprávy"
+ "Kopírovat text"
+ "Zobrazit podrobnosti"
+ "Smazat"
+ "Přeposlat"
+ "Podrobnosti zprávy"
+ "Typ: "
+ "Textová zpráva"
+ "Multimediální zpráva"
+ "Od: "
+ "Komu: "
+ "Odesláno: "
+ "Přijato: "
+ "Předmět: "
+ "Velikost: "
+ "Priorita: "
+ "SIM karta: "
+ "Vysoká"
+ "Normální"
+ "Nízká"
+ "SIM karta %s"
+ "Skrytá adresa odesílatele"
+ "Při načítání příloh nelze odeslat zprávu."
+ "Přílohu nelze načíst. Zkuste to znovu."
+ "Síť není připravena. Zkuste to znovu."
+ "Smazat text"
+ "Přepnutí mezi zadáváním textu a čísel"
+ "Přidat další účastníky"
+ "Potvrdit účastníky"
+ "Zahájit novou konverzaci"
+ "Vybrat tuto položku"
+ "Přehrát video"
+ "Lidé a možnosti"
+ "Ladit"
+ "Lidé a možnosti"
+ "Obecné"
+ "Lidé v této konverzaci"
+ "Uskutečnit hovor"
+ "Poslat zprávu"
+ "Odeslat zprávu<br/><small>ze SIM karty %s</small>"
+
+ Odeslat fotky
+ Odeslat fotky
+ Odeslat fotky
+ Odeslat fotku
+
+
+ Odeslat zvukové nahrávky
+ Odeslat zvukové nahrávky
+ Odeslat zvukové nahrávky
+ Odeslat zvukovou nahrávku
+
+
+ Odeslat videa
+ Odeslat videa
+ Odeslat videa
+ Odeslat video
+
+
+ Odeslat vizitky
+ Odeslat vizitky
+ Odeslat vizitky
+ Odeslat vizitku
+
+
+ Odeslat přílohy
+ Odeslat přílohy
+ Odeslat přílohy
+ Odeslat přílohu
+
+
+ %d přílohy jsou připraveny k odeslání
+ %d přílohy je připraveno k odeslání
+ %d příloh je připraveno k odeslání
+ Jedna příloha je připravena k odeslání
+
+ "Odeslat zpětnou vazbu"
+ "Zobrazit v Obchodě Google Play"
+ "Informace o verzi"
+ "Verze %1$s"
+ "Licence open source"
+ "Oznámení"
+ "Byl dosažen maximální počet příloh"
+ "Načtení přílohy se nezdařilo."
+ "Přidat do kontaktů?"
+ "Přidat kontakt"
+ "Předmět"
+ "Předmět: "
+ "%s%s"
+ "Načítání kontaktní karty"
+ "Kartu kontaktu nelze načíst."
+ "Zobrazit kontaktní kartu"
+
+ %d kontakty
+ %d kontaktu
+ %d kontaktů
+ %d kontakt
+
+ "Karty kontaktů"
+ "Narozeniny"
+ "Poznámky"
+ "Přeposlat zprávu"
+ "Odpovědět"
+ "+1"
+ "+%d"
+ "Zprávy SMS jsou zakázány"
+ "Chcete-li odeslat zprávu, nastavte aplikaci SMS a MMS jako výchozí aplikaci pro SMS."
+ "Nastavte aplikaci SMS a MMS jako výchozí aplikaci pro SMS."
+ "Změnit"
+ "Chcete-li dostávat zprávy, nastavte aplikaci SMS a MMS jako výchozí aplikaci pro SMS."
+ "Není vybrána preferovaná SIM karta pro odesílání zpráv SMS."
+ "Tuto aplikaci vlastník zařízení nepovolil."
+ "OK"
+ "Konverzace obsahuje příliš mnoho účastníků"
+
+ Neplatné kontakty
+ Neplatné kontakty
+ Neplatné kontakty
+ Neplatný kontakt
+
+ "Obraz z fotoaparátu nelze načíst."
+ "Vy: "
+ "%s: "
+ "Koncept"
+ "Zde budou uvedeny nové konverzace"
+ "Zde se zobrazují archivované konverzace."
+ "Načítání konverzací…"
+ "Fotografie"
+ "Zvukový klip"
+ "Video"
+ "Karta kontaktu"
+ "MMS"
+ "Vrátit zpět"
+ "Opakovat"
+ "Chcete-li začít psát novou zprávu, zadejte jméno kontaktu nebo telefonní číslo."
+ "Blokovat"
+ "Blokovat %s"
+ "Odblokovat kontakt %s"
+ "Blokovat %s?"
+ "Zprávy z tohoto čísla budete i nadále dostávat, ale nebude se pro ně již zobrazovat oznámení. Tato konverzace bude archivována."
+ "Blokované kontakty"
+ "ODBLOKOVAT"
+ "Blokované kontakty"
+ "Vyberte obrázek z knihovny dokumentů."
+ "Odesílání zprávy"
+ "Zpráva byla odeslána"
+ "Mobilní datové přenosy jsou vypnuty. Zkontrolujte svá nastavení."
+ "V režimu Letadlo zprávy nelze odeslat."
+ "Zprávu nelze odeslat"
+ "Zpráva byla stažena"
+ "Mobilní datové přenosy jsou vypnuty. Zkontrolujte svá nastavení."
+ "V režimu Letadlo zprávy nelze stahovat"
+ "Zprávu nelze stáhnout"
+ "Nula"
+ "Jedna"
+ "Dvě"
+ "Tři"
+ "Čtyři"
+ "Pět"
+ "Šest"
+ "Sedm"
+ "Osm"
+ "Devět"
+ "Zprávu prostřednictvím operátora %1$s nelze odeslat. Chyba %2$d."
+ "Zprávu prostřednictvím neznámého operátora nelze odeslat. Chyba %1$d."
+ "Fwd: %s"
+ "Zpráva nebyla odeslána: služba není v síti aktivována"
+ "Zpráva nebyla odeslána: neplatná cílová adresa"
+ "Zpráva nebyla odeslána: neplatná zpráva"
+ "Zpráva nebyla odeslána: nepodporovaný obsah"
+ "Zpráva nebyla odeslána: nepodporovaná zpráva"
+ "Zpráva nebyla odeslána, protože je příliš velká"
+ "Nová zpráva"
+ "Zobrazit"
+ "Obrázek"
+ "Vhodná aplikace nebyla nalezena."
+ "Odebrat příjemce"
+ "Nová zpráva"
+ "Zrušit"
+ "Upravit přístupový bod"
+ "Nenastaveno"
+ "Název"
+ "Název přístupového bodu (APN)"
+ "MMSC"
+ "Proxy server pro MMS"
+ "Port pro MMS"
+ "MCC"
+ "MNC"
+ "Typ APN"
+ "Smazat APN"
+ "Nový název přístupového bodu (APN)"
+ "Uložit"
+ "Zahodit"
+ "Pole Název nesmí být prázdné."
+ "Název přístupového bodu (APN) nesmí být prázdný."
+ "Pole MCC musí obsahovat alespoň 3 číslice."
+ "Pole MNC musí obsahovat 2 nebo 3 číslice."
+ "Obnovování výchozích nastavení (APN)"
+ "Obnovit výchozí"
+ "Obnovení výchozích nastavení APN bylo dokončeno."
+ "Bez názvu"
+ "Názvy přístupových bodů"
+ "Názvy přístupových bodů (APN)"
+ "Nový název přístupového bodu (APN)"
+ "Nastavení názvu přístupového budu pro tohoto uživatele není dostupné."
+ "Kopírovat do schránky?"
+ "Kopírovat"
+ "na SIM kartu %s"
+ "Obecné"
+ "Rozšířená nastavení"
+ "Obecná nastavení"
+ "Rozšířená nastavení"
+ "SIM karta %s"
+ "Odesílat všem příjemcům jednotlivé zprávy SMS. Odpovědi dostanete pouze vy."
+ "Odeslat všem příjemcům jednu zprávu MMS"
+ "Neznámé číslo"
+ "Nová zpráva"
+ "Nová zpráva"
+ "Výběr SIM karty"
+ "Výběr SIM karty (vybrána SIM karta %1$s)"
+ "Upravit předmět"
+ "Vybrat SIM kartu nebo upravit předmět"
+ "Zvuk zaznamenáte klepnutím a podržením"
+ "Zahájit novou konverzaci"
+ "SMS a MMS"
+ "Seznam SMS a MMS"
+ "SMS a MMS"
+ "Nová zpráva"
+ "Seznam konverzací"
+ "Načítání konverzací"
+ "Načítání zpráv"
+ "Zobrazit další konverzace"
+ "Zobrazit další zprávy"
+ "Konverzace byla smazána"
+ "Konverzace byla smazána. Klepnutím zobrazíte jinou konverzaci v aplikaci SMS a MMS."
+ "Zablokováno"
+ "Odblokováno"
+ "V úložišti je málo místa. Některá data mohou být ztracena."
+ "Vybrat přílohy"
+ "Potvrďte výběr"
+ "Vybráno: %d"
+ "Odstraňte prosím alespoň jednu přílohu a zkuste to znovu."
+ "Zprávu můžete zkusit odeslat, avšak může se stát, že nebude doručena, dokud neodstraníte alespoň jednu přílohu."
+ "Ve zprávě lze odeslat pouze jedno video. Odstraňte ostatní videa a zkuste to znovu."
+ "Načtení přílohy v aplikaci SMS a MMS se nezdařilo."
+ "Přesto odeslat"
+ "Konverzaci nelze zahájit"
+ "%1$s (%2$s)"
+ "Vybráno: %s"
+
diff --git a/res/values-da/arrays.xml b/res/values-da/arrays.xml
new file mode 100644
index 0000000..d40336a
--- /dev/null
+++ b/res/values-da/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "intet emne"
+ "nosubject"
+
+
+ "Ja"
+ "Nej"
+ "OK"
+ "Haha"
+ "Tak"
+ "Jeg er enig"
+ "Sådan!"
+ "Er på vej"
+ "Jeg vender tilbage til dig lidt senere"
+ ":)"
+ ":("
+
+
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
new file mode 100644
index 0000000..340c28f
--- /dev/null
+++ b/res/values-da/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Beskeder"
+ "Beskeder"
+ "Vælg en samtale"
+ "Indstillinger"
+ "Send besked"
+ "Tilføj en vedhæftet fil"
+ "Hjælp"
+ "Velkommen"
+ "Spring over"
+ "Næste >"
+ "Næste"
+ "Afslut"
+ "Indstillinger >"
+ "Indstillinger"
+ "Beskeder skal have tilladelse for at kunne anvende Sms, Telefon og Kontaktpersoner."
+ "Du kan ændre tilladelser i Indstillinger > Apps > Beskeder > Tilladelser."
+ "Du kan ændre tilladelser under Indstillinger, Apps, Beskeder, Tilladelser."
+ "Mest brugte"
+ "Alle kontaktpersoner"
+ "Send til %s"
+ "Optag billeder eller video"
+ "Vælg billeder fra denne enhed"
+ "Optag lyd"
+ "Vælg billede"
+ "Medierne er valgt."
+ "Medierne er fravalgt."
+ "Der er valgt %d"
+ "billede %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "billede"
+ "Optag lyd"
+ "Del"
+ "Lige nu"
+ "Nu"
+
+ %d min.
+ %d min.
+
+
+ %d timer
+ %d timer
+
+
+ %d dage
+ %d dage
+
+
+ %d uger
+ %d uger
+
+
+ %d måneder
+ %d måneder
+
+
+ %d år
+ %d år
+
+ "Klasse 0-besked"
+ "Gem"
+ "Enheden er ved at løbe tør for plads. Ældre beskeder bliver automatisk slettet for at frigøre plads."
+ "Der er snart ikke mere lagerplads"
+ "Beskeder sender eller modtager muligvis ikke beskeder, før der er mere ledig plads på din enhed."
+ "Begrænset lagerplads til sms. Det kan være nødvendigt at slette beskeder."
+ "Bekræft dit telefonnummer"
+ "Dette engangstrin sikrer, at Beskeder leverer dine gruppebeskeder på korrekt vis."
+ "Telefonnummer"
+ "Slet alle beskeder med medier"
+ "Slet beskeder, der er mere end %s gamle"
+ "Slet automatisk beskeder, der er mere end %s gamle"
+ "Ignorer"
+ "Slet alle beskeder, der indeholder medier?"
+ "Vil du slette beskeder, der er mere end %s gamle?"
+ "Vil du slette beskeder, der er ældre end %s, og aktiverr automatisk sletning?"
+ "%s sagde"
+ "Du sagde"
+ "Besked fra %s"
+ "Du sendte en besked"
+ "Sender…"
+ "Ikke sendt. Tryk for at prøve igen."
+ "Ikke sendt. Prøver igen…"
+ "Send igen eller slet"
+ "Ring op til alarmcentralen. Din sms-besked kan ikke leveres på nuværende tidspunkt."
+ "Mislykkedes"
+ "Ny MMS-besked til download"
+ "Ny MMS-besked"
+ "Download mislykkedes"
+ "Tryk for at prøve igen"
+ "Tryk for at downloade"
+ "Download eller slet"
+ "Downloader…"
+ "Beskeden er udløbet eller ikke tilgængelig"
+ "størrelse: %1$s, udløb: %2$s"
+ "Beskeden kan ikke sendes. Ugyldig modtager."
+ "Tjenesten er ikke aktiveret på netværket"
+ "Et netværksproblem er skyld i, at afsendelsen mislykkedes"
+ "Beskeden er udløbet eller ikke tilgængelig"
+ "(Intet emne)"
+ "Ukendt afsender"
+ "Leveret"
+ "Beskeden %1$s blev ikke downloadet fra %2$s."
+ "Databasehandlingen blev ikke udført, fordi hukommelsen er for lille"
+ "Beskeden blev ikke sendt"
+ "Nogle beskeder blev ikke sendt i Beskeder"
+
+ %d beskeder i %d samtaler
+ %d beskeder i %d samtaler
+
+ "Beskeden blev ikke downloadet"
+ "Nogle beskeder blev ikke downloadet i Beskeder"
+
+ %d beskeder i %d samtaler
+ %d beskeder i %d samtaler
+
+ "Beskeden til %1$s blev ikke sendt"
+ "Ring op til alarmcentralen. Din sms-besked til %1$s kan ikke leveres på nuværende tidspunkt."
+
+ %d nye beskeder
+ %d nye beskeder
+
+ "Start"
+ "Kameraet er ikke tilgængeligt"
+ "Kameraet er ikke tilgængeligt"
+ "Videooptagelse er ikke tilgængelig"
+ "Medie kan ikke gemmes"
+ "Der kan ikke tages billeder"
+ "Tilbage"
+ "Arkiveret"
+ "Slet"
+ "Arkivér"
+ "Fjern fra arkiv"
+ "Deaktiver underretninger"
+ "Aktivér underretninger"
+ "Tilføj kontaktperson"
+ "Download"
+ "Send"
+ "Slet"
+ "Vil du slette denne besked?"
+ "Denne handling kan ikke fortrydes."
+ "Slet"
+
+ Vil du slette disse samtaler?
+ Vil du slette disse samtaler?
+
+ "Slet"
+ "Annuller"
+ "Til"
+ "Vælg flere billeder"
+ "Bekræft valg"
+ "+ %d"
+ "Der kan ikke optages lyd. Prøv igen."
+ "Lyden kan ikke afspilles. Prøv igen."
+ "Lyden kunne ikke gemmes. Prøv igen."
+ "Tryk og hold nede"
+ ", "
+ " "
+ ": "
+ " "
+ "Billede"
+ "Lydklip"
+ "Video"
+ "Visitkort"
+ "Download"
+ "Svar via sms"
+ "Svar via mms"
+ "Besvar"
+
+ %d deltagere
+ %d deltagere
+
+ "Mig"
+ "Kontakten er blokeret og arkiveret"
+ "Kontaktpersonen er ikke længere blokeret og er fjernet fra arkivet"
+ "%d blev arkiveret"
+ "%d er blevet fjernet fra arkivet."
+ "Underretninger er slået fra"
+ "Underretninger er slået til"
+ "Alt er klart. Tryk på Send igen."
+ "Beskeder blev angivet som standardappen til sms-beskeder."
+
+ Kassér vedhæftede filer
+ Kassér vedhæftede filer
+
+ "Vedhæftet lydfil"
+ "Afspil vedhæftet lydfil"
+ "Sæt på pause"
+ "Besked fra %s: %s."
+ "Mislykket besked fra %s: %s. Tidspunkt: %s."
+ "Besked fra %s: %s. Tidspunkt: %s."
+ "Ikke-afsendt besked til %s: %s. Tidspunkt: %s."
+ "Sender besked til %s: %s. Tidspunkt: %s."
+ "Mislykket besked til %s: %s. Tidspunkt: %s."
+ "Besked til %s: %s. Tidspunkt: %s."
+ "Mislykket besked fra %s: %s. Tidspunkt: %s. %s."
+ "Besked fra %s: %s. Tidspunkt: %s. %s."
+ "Ikke-afsendt besked til %s: %s. Tidspunkt: %s."
+ "Sender besked til %s: %s. Tidspunkt: %s."
+ "Mislykket besked til %s: %s. Tidspunkt: %s."
+ "Besked til %s: %s. Tidspunkt: %s."
+ "Mislykket besked. Tryk for at prøve igen."
+ "Samtale med %s"
+ "Slet emne"
+ "Optag video"
+ "Tag et stillbillede"
+ "Tag et billede"
+ "Start videooptagelse"
+ "Skift til kamera i fuld skærm"
+ "Skift mellem front- og bagudvendt kamera"
+ "Stop optagelsen, og vedhæft video"
+ "Stands optagelse af video"
+ "Billeder i Beskeder"
+
+ %d billeder blev gemt i albummet \"%s\"
+ %d billeder blev gemt i albummet \"%s\"
+
+
+ %d videoer blev gemt i albummet \"%s\"
+ %d videoer blev gemt i albummet \"%s\"
+
+
+ %d vedhæftede filer blev gemt i albummet \"%s\"
+ %d vedhæftede filer blev gemt i albummet \"%s\"
+
+
+ %d vedhæftede filer blev gemt under \"Downloads\"
+ %d vedhæftede filer blev gemt under \"Downloads\"
+
+
+ %d vedhæftede filer blev gemt
+ %d vedhæftede filer blev gemt
+
+
+ %d vedhæftede filer kunne ikke gemmes
+ %d vedhæftede filer kunne ikke gemmes
+
+ "Den vedhæftede MMS blev gemt"
+ "Indstillinger"
+ "Arkiveret"
+ "Luk"
+ "Mms"
+ "Avanceret"
+ "Fejlretning"
+ "Underretninger"
+ "Lyd"
+ "Lydløs"
+ "Vibrer"
+ "Blokeret"
+ "SMS-leveringsrapporter"
+ "Anmod om leveringsrapporter for alle de sms-beskeder, du sender"
+ "Automatisk hentning"
+ "Hent automatisk mms-beskeder"
+ "Automatisk hentning under roaming"
+ "Hent automatisk mms under roaming"
+ "Gruppebeskeder"
+ "Brug mms til at sende en enkelt besked, når der er flere modtagere"
+ "Standardapp til sms-beskeder"
+ "Standardapp til sms-beskeder"
+
+
+ "Dit telefonnummer"
+ "Ukendt"
+ "Lyde for udgående besked"
+ "Gem sms"
+ "Gem rådata fra modtagne sms-beskeder i en fil på et eksternt lager"
+ "Gem mms"
+ "Gem rådata fra modtagne mms-beskeder i en fil på et eksternt lager"
+ "Trådløse alarmer"
+ "Indstillinger for beskeder"
+ "Kopiér tekst"
+ "Se info"
+ "Slet"
+ "Videresend"
+ "Beskedinfo"
+ "Type: "
+ "Sms"
+ "Mms"
+ "Fra: "
+ "Til: "
+ "Sendt: "
+ "Modtaget: "
+ "Emne: "
+ "Størrelse: "
+ "Prioritet: "
+ "SIM-kort: "
+ "Høj"
+ "Normal"
+ "Lav"
+ "SIM-kort %s"
+ "Skjult afsenderadresse"
+ "Beskeden kan ikke sendes, mens der indlæses vedhæftede filer."
+ "Den vedhæftede fil kunne ikke indlæses. Prøv igen."
+ "Netværket er ikke klar. Prøv igen."
+ "Slet tekst"
+ "Skift mellem indtastning af tekst og tal"
+ "Tilføj flere deltagere"
+ "Bekræft deltagere"
+ "Start en ny samtale"
+ "Vælg dette element"
+ "Afspil video"
+ "Personer og valgmuligheder"
+ "Fejlretning"
+ "Personer og valgmuligheder"
+ "Generelt"
+ "Personer i denne samtale"
+ "Foretag et opkald"
+ "Send besked"
+ "Send besked<br/><small>fra %s</small>"
+
+ Send billeder
+ Send billeder
+
+
+ Send lydoptagelser
+ Send lydoptagelser
+
+
+ Send videoer
+ Send videoer
+
+
+ Send visitkort
+ Send visitkort
+
+
+ Send vedhæftede filer
+ Send vedhæftede filer
+
+
+ %d vedhæftede filer er klar til at blive sendt
+ %d vedhæftede filer er klar til at blive sendt
+
+ "Send feedback"
+ "Se i Google Play Butik"
+ "Oplysninger om versionen"
+ "Version %1$s"
+ "Open source-licenser"
+ "Underretninger"
+ "Grænsen for vedhæftede filer er nået"
+ "Den vedhæftede fil kunne ikke indlæses."
+ "Vil du føje dette nummer til Kontaktpersoner?"
+ "Tilføj kontakt"
+ "Emne"
+ "Emne: "
+ "%s%s"
+ "Kontaktkortet indlæses"
+ "Kontaktkortet kunne ikke indlæses"
+ "Se visitkortet"
+
+ %d kontaktpersoner
+ %d kontaktpersoner
+
+ "Kontaktkort"
+ "Fødselsdag"
+ "Noter"
+ "Videresend besked"
+ "Svar"
+ "+1"
+ "+%d"
+ "Sms er slået fra"
+ "Angiv Beskeder som standardappen til sms-beskeder for at sende beskeder"
+ "Angiv Beskeder som standardappen til sms-beskeder"
+ "Skift"
+ "Angiv Beskeder som standardappen til sms-beskeder for at modtage beskeder"
+ "Der er ikke valgt et foretrukket simkort til afsendelse af sms-beskeder"
+ "Denne app er ikke tilladt af enhedens ejer."
+ "OK"
+ "Der er for mange deltagere i en samtale"
+
+ Ugyldige kontaktpersoner
+ Ugyldige kontaktpersoner
+
+ "Kamerabilledet kunne ikke indlæses"
+ "Dig: "
+ "%s: "
+ "Kladde"
+ "Når du starter en ny samtale, vises den her"
+ "Arkiverede samtaler vises her"
+ "Indlæser samtaler ..."
+ "Billede"
+ "Lydklip"
+ "Video"
+ "Visitkort"
+ "Mms"
+ "Fortryd"
+ "Prøv igen"
+ "Indtast navnet på en kontaktperson eller et telefonnummer for at starte på en ny besked"
+ "Bloker"
+ "Bloker %s"
+ "Ophæv blokering af %s"
+ "Vil du blokere %s?"
+ "Du vil fortsat modtage beskeder fra dette nummer, men du bliver ikke længere underrettet. Denne samtale arkiveres."
+ "Blokerede kontakter"
+ "OPHÆV BLOKERING"
+ "Blokerede kontakter"
+ "Vælg billede fra dokumentbiblioteket"
+ "Sender besked"
+ "Beskeden er sendt"
+ "Mobildata er slået fra. Kontrollér dine indstillinger."
+ "Der kan ikke sendes beskeder i flytilstand"
+ "Beskeden blev ikke sendt"
+ "Beskeden blev downloadet"
+ "Mobildata er slået fra. Kontrollér dine indstillinger."
+ "Beskeder kan ikke downloades i flytilstand"
+ "Beskeden kunne ikke downloades"
+ "Nul"
+ "Et"
+ "To"
+ "Tre"
+ "Fire"
+ "Fem"
+ "Seks"
+ "Syv"
+ "Otte"
+ "Ni"
+ "Der kan ikke sendes en besked med %1$s, fejl %2$d"
+ "Der kan ikke sendes en besked med ukendt mobilselskab, fejl %1$d"
+ "Vs: %s"
+ "Beskeden blev ikke sendt: Tjenesten er ikke aktiveret på netværket"
+ "Beskeden blev ikke sendt: Destinationsadressen er ugyldig"
+ "Beskeden blev ikke sendt: Beskeden er ugyldig"
+ "Beskeden blev ikke sendt: Indholdet understøttes ikke"
+ "Beskeden blev ikke sendt: Beskeden understøttes ikke"
+ "Beskeden blev ikke sendt, da den er for stor"
+ "Ny besked"
+ "Vis"
+ "Billede"
+ "Vi kunne ikke finde en passende applikation"
+ "Fjern modtager"
+ "Ny besked"
+ "Annuller"
+ "Rediger adgangspunkt"
+ "Ikke angivet"
+ "Navn"
+ "Adgangspunkt"
+ "MMSC"
+ "MMS-proxy"
+ "MMS-port"
+ "MCC"
+ "MNC"
+ "Adgangspunktstype"
+ "Slet adgangspunkt"
+ "Nyt adgangspunkt"
+ "Gem"
+ "Kassér"
+ "Feltet Navn skal udfyldes."
+ "Du skal angive et adgangspunkt."
+ "Feltet MCC skal indeholde tre cifre."
+ "Feltet MNC skal indeholde to eller tre cifre."
+ "Gendanner standardindstillingerne for adgangspunktet."
+ "Nulstil til standard"
+ "Standardindstillingerne for adgangspunktet er nulstillet."
+ "Ikke-navngivet"
+ "Adgangspunkter"
+ "Adgangspunkter"
+ "Nyt adgangspunkt"
+ "Indstillingerne for adgangspunkt (APN) er ikke tilgængelige for denne bruger"
+ "Vil du kopiere til udklipsholder?"
+ "Kopiér"
+ "til %s"
+ "Generelt"
+ "Avanceret"
+ "Generelle indstillinger"
+ "Avancerede indstillinger"
+ "Indstillinger for SIM-kortet \"%s\""
+ "Send individuelle sms-beskeder til alle modtagere. Der kan kun sendes svar til dig"
+ "Send en enkelt mms-besked til alle modtagere"
+ "Ukendt nummer"
+ "Ny besked"
+ "Ny besked."
+ "SIM-vælger"
+ "%1$s er valgt. SIM-vælger"
+ "Rediger emne"
+ "Vælg SIM-kort, eller rediger emne"
+ "Tryk og hold nede for at optage lyd"
+ "Start en ny samtale"
+ "Beskeder"
+ "Liste i Beskeder"
+ "Beskeder"
+ "Ny besked"
+ "Samtaleliste"
+ "Indlæser samtaler"
+ "Indlæser beskeder"
+ "Se flere samtaler"
+ "Se flere beskeder"
+ "Samtalen er slettet"
+ "Samtalen blev slettet. Tryk for at se en anden samtale i Beskeder."
+ "Blokeret"
+ "Blokering fjernet"
+ "Der er for lidt lagerplads. Nogle data gemmes muligvis ikke."
+ "Vælg vedhæftede filer"
+ "Bekræft valg"
+ "Der er valgt %d"
+ "Fjern en eller flere vedhæftede filer, og prøv igen."
+ "Du kan prøve at sende din besked, men den leveres muligvis ikke, medmindre du fjerner en eller flere vedhæftede filer."
+ "Du kan kun sende én video pr besked. Fjern flere videoer, og prøv igen."
+ "Beskeder kunne ikke indlæse den vedhæftede fil."
+ "Send alligevel"
+ "Samtalen kunne ikke startes"
+ "%1$s (%2$s)"
+ "%s er valgt"
+
diff --git a/res/values-de/arrays.xml b/res/values-de/arrays.xml
new file mode 100644
index 0000000..c3e971f
--- /dev/null
+++ b/res/values-de/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "kein Betreff"
+ "Kein Betreff"
+
+
+ "Ja"
+ "Nein"
+ "OK"
+ "Hehe"
+ "Vielen Dank!"
+ "Ich stimme zu."
+ "Wunderbar"
+ "Bin auf dem Weg."
+ "OK, ich melde mich später."
+ ":)"
+ ":("
+
+
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
new file mode 100644
index 0000000..88b95c3
--- /dev/null
+++ b/res/values-de/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "SMS/MMS"
+ "SMS/MMS"
+ "Konversation auswählen"
+ "Einstellungen"
+ "Nachricht senden"
+ "Anhang hinzufügen"
+ "Hilfe"
+ "Willkommen"
+ "Überspringen"
+ "Weiter >"
+ "Weiter"
+ "Beenden"
+ "Einstellungen >"
+ "Einstellungen"
+ "Die SMS/MMS App benötigt Berechtigungen für SMS, Telefon und Kontakte."
+ "Sie können die Berechtigungen unter \"Einstellungen\" > \"Apps\" > \"SMS/MMS\" > \"Berechtigungen\" ändern."
+ "Sie können die Berechtigungen unter \"Einstellungen\" > \"Apps\" > \"SMS/MMS\" > \"Berechtigungen\" ändern."
+ "Häufig genutzte Kontakte"
+ "Alle Kontakte"
+ "An %s senden"
+ "Bilder oder Videos aufnehmen"
+ "Bilder von diesem Gerät auswählen"
+ "Audio aufzeichnen"
+ "Foto auswählen"
+ "Die Medien sind ausgewählt."
+ "Die Auswahl der Medien ist aufgehoben."
+ "%d ausgewählt"
+ "Bild: %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "Bild"
+ "Audio aufzeichnen"
+ "Teilen"
+ "Gerade eben"
+ "Jetzt"
+
+ %d min
+ %d min
+
+
+ %d Stunden
+ %d Stunde
+
+
+ %d Tage
+ %d Tag
+
+
+ %d Wochen
+ eine Woche
+
+
+ %d Monate
+ ein Monat
+
+
+ %d Jahre
+ ein Jahr
+
+ "Nachricht Klasse 0"
+ "Speichern"
+ "Das Gerät verfügt über wenig Speicherplatz. Die SMS/MMS App löscht ältere Nachrichten automatisch, um Speicherplatz freizugeben."
+ "Der Speicherplatz wird knapp"
+ "Die SMS/MMS App versendet oder empfängt möglicherweise keine Nachrichten, bis mehr Speicherplatz auf Ihrem Gerät zur Verfügung steht."
+ "Geringer SMS-Speicherplatz. Sie müssen eventuell Nachrichten löschen."
+ "Telefonnummer bestätigen"
+ "Mit dieser einmaligen Eingabe stellen Sie sicher, dass die SMS/MMS App Ihre Gruppennachrichten korrekt sendet."
+ "Telefonnummer"
+ "Alle Nachrichten mit Medien löschen"
+ "Nachrichten löschen, die älter als %s sind"
+ "Nachrichten, die älter als %s sind, automatisch löschen"
+ "Ignorieren"
+ "Alle Nachrichten mit Medien löschen?"
+ "Nachrichten löschen, die älter als %s sind?"
+ "Nachrichten löschen, die älter als %s sind, und automatisches Löschen aktivieren?"
+ "%s hat Folgendes gesagt:"
+ "Sie haben Folgendes gesagt:"
+ "Nachricht von %s"
+ "Sie haben eine Nachricht gesendet."
+ "Nachricht wird gesendet…"
+ "Nachricht wurde nicht gesendet. Zum erneuten Senden tippen."
+ "Nachricht wurde nicht gesendet. Neuer Versuch…"
+ "Erneut senden oder löschen"
+ "Bitte kontaktieren Sie die Notfalldienste per Sprachanruf. Ihre SMS konnte dieses Mal nicht zugestellt werden."
+ "Fehler"
+ "Neue MMS zum Herunterladen"
+ "Neue MMS"
+ "Fehler beim Download"
+ "Für neuen Versuch hier tippen"
+ "Zum Herunterladen tippen"
+ "Herunterladen oder löschen"
+ "Nachricht wird heruntergeladen…"
+ "Nachricht abgelaufen oder nicht verfügbar"
+ "Größe: %1$s, läuft ab: %2$s"
+ "Nachricht kann nicht gesendet werden. Der Empfänger ist ungültig."
+ "Dienst im Netzwerk nicht aktiviert"
+ "Nachricht kann aufgrund eines Netzwerkproblems nicht gesendet werden."
+ "Nachricht abgelaufen oder nicht verfügbar"
+ "(Kein Betreff)"
+ "Unbekannter Absender"
+ "Zugestellt"
+ "Nachricht \"%1$s\" von %2$s konnte nicht heruntergeladen werden."
+ "Datenbankoperation konnte aufgrund unzureichenden Speichers nicht abgeschlossen werden."
+ "Nachricht wurde nicht gesendet."
+ "Einige Nachrichten in der SMS/MMS App wurden nicht gesendet."
+
+ %d Nachrichten in %d Unterhaltungen
+ %d Nachricht in einer Unterhaltung
+
+ "Nachricht nicht heruntergeladen"
+ "Einige Nachrichten in der SMS/MMS App wurden nicht heruntergeladen."
+
+ %d Nachrichten in %d Unterhaltungen
+ %d Nachricht in einer Unterhaltung
+
+ "SMS an %1$s nicht gesendet"
+ "Bitte kontaktieren Sie die Notfalldienste per Sprachanruf. Ihre SMS an %1$s konnte dieses Mal nicht zugestellt werden."
+
+ %d neue Nachrichten
+ Neue Nachricht
+
+ "Starten"
+ "Kamera nicht verfügbar"
+ "Kamera nicht verfügbar"
+ "Videoaufnahme nicht verfügbar"
+ "Medien können nicht gespeichert werden."
+ "Keine Bildaufnahme möglich"
+ "Zurück"
+ "Archiviert"
+ "Löschen"
+ "Archivieren"
+ "Aus Archiv entfernen"
+ "Benachrichtigungen deaktivieren"
+ "Benachrichtigungen aktivieren"
+ "Kontakt hinzufügen"
+ "Herunterladen"
+ "Senden"
+ "Löschen"
+ "Diese Nachricht löschen?"
+ "Diese Aktion kann nicht rückgängig gemacht werden."
+ "Löschen"
+
+ Diese Unterhaltungen löschen?
+ Diese Unterhaltung löschen?
+
+ "Löschen"
+ "Abbrechen"
+ "An"
+ "Mehrere Bilder auswählen"
+ "Auswahl bestätigen"
+ "+%d"
+ "Die Audioaufzeichnung ist nicht möglich. Bitte versuchen Sie es erneut."
+ "Die Audiowiedergabe ist nicht möglich. Bitte versuchen Sie es erneut."
+ "Die Audionachricht konnte nicht gespeichert werden. Bitte versuchen Sie es erneut."
+ "Berühren und halten"
+ ", "
+ " "
+ ": "
+ " "
+ "Bild"
+ "Audioclip"
+ "Video"
+ "Kontaktkarte"
+ "Herunterladen"
+ "Per SMS antworten"
+ "Antwort per MMS"
+ "Antworten"
+
+ %d Teilnehmer
+ %d Teilnehmer
+
+ "Ich"
+ "Kontakt blockiert und archiviert"
+ "Blockierung des Kontakts aufgehoben & Kontakt aus dem Archiv entfernt"
+ "%d archiviert"
+ "%d aus dem Archiv entfernt"
+ "Benachrichtigungen deaktiviert"
+ "Benachrichtigungen aktiviert"
+ "Bereit. Zum erneuten Senden tippen."
+ "Die SMS/MMS App wurde als Standard-SMS-App festgelegt."
+
+ Anhänge verwerfen
+ Anhang verwerfen
+
+ "Audioanhang"
+ "Audioanhang wiedergeben"
+ "Pausieren"
+ "Nachricht von %s: %s."
+ "Fehler bei Nachricht von %s: %s. Uhrzeit: %s."
+ "Nachricht von %s: %s. Uhrzeit: %s."
+ "Nicht gesendete Nachricht an %s: %s. Uhrzeit: %s."
+ "Nachricht wird gesendet an %s: %s. Uhrzeit: %s."
+ "Fehler bei Nachricht an %s: %s. Uhrzeit: %s."
+ "Nachricht an %s: %s. Uhrzeit: %s."
+ "Fehler bei Nachricht von %s: %s. Uhrzeit: %s. %s."
+ "Nachricht von %s: %s. Uhrzeit: %s. %s."
+ "Nicht gesendete Nachricht an %s: %s. Uhrzeit: %s."
+ "Nachricht wird gesendet an %s: %s. Uhrzeit: %s."
+ "Fehler bei Nachricht an %s: %s. Uhrzeit: %s."
+ "Nachricht an %s: %s. Uhrzeit: %s."
+ "Fehler bei Nachricht. Zum Wiederholen tippen."
+ "Unterhaltung mit %s"
+ "Betreff löschen"
+ "Video aufnehmen"
+ "Standbild aufnehmen"
+ "Bild aufnehmen"
+ "Videoaufnahme starten"
+ "Zur Vollbildkamera wechseln"
+ "Zwischen Kamera auf Vorder- und Rückseite wechseln"
+ "Aufnahme beenden und Video anhängen"
+ "Videoaufzeichnung stoppen"
+ "Fotos in der SMS/MMS App"
+
+ %d Fotos im Album \"%s\" gespeichert
+ %d Foto im Album \"%s\" gespeichert
+
+
+ %d Videos im Album \"%s\" gespeichert
+ %d Video im Album \"%s\" gespeichert
+
+
+ %d Anhänge im Album \"%s\" gespeichert
+ %d Anhang im Album \"%s\" gespeichert
+
+
+ %d Anhänge in \"Downloads\" gespeichert
+ %d Anhang in \"Downloads\" gespeichert
+
+
+ %d Anhänge wurden gespeichert.
+ %d Anhang wurde gespeichert.
+
+
+ %d Anhänge konnten nicht gespeichert werden.
+ %d Anhang konnte nicht gespeichert werden.
+
+ "MMS-Anhang gespeichert"
+ "Einstellungen"
+ "Archiviert"
+ "Schließen"
+ "MMS"
+ "Erweitert"
+ "Fehlersuche"
+ "Benachrichtigungen"
+ "Ton"
+ "Lautlos"
+ "Vibrieren"
+ "Blockiert"
+ "SMS-Zustellberichte"
+ "Zustellbestätigung für jede gesendete SMS anfordern"
+ "Automatisch abrufen"
+ "MMS-Nachrichten automatisch abrufen"
+ "Automatischer Roaming-Abruf"
+ "MMS beim Roaming automatisch abrufen"
+ "SMS/MMS an Gruppe senden"
+ "Verwenden Sie MMS, um eine einzelne Nachricht an mehrere Empfänger zu versenden."
+ "Standard-SMS-App"
+ "Standard-SMS-App"
+
+
+ "Meine Telefonnummer"
+ "Unbekannt"
+ "Töne für ausgehende Nachrichten"
+ "SMS sichern"
+ "Erhaltene SMS-Rohdaten in externer Speicherdatei sichern"
+ "MMS sichern"
+ "Erhaltene MMS-Rohdaten in externer Speicherdatei sichern"
+ "Cell Broadcast-Warnungen"
+ "Nachrichtenoptionen"
+ "Text kopieren"
+ "Details ansehen"
+ "Löschen"
+ "Weiterleiten"
+ "Nachrichtendetails"
+ "Typ: "
+ "SMS"
+ "MMS"
+ "Von: "
+ "An: "
+ "Gesendet: "
+ "Empfangen: "
+ "Betreff: "
+ "Größe: "
+ "Priorität: "
+ "SIM: "
+ "Hoch"
+ "Normal"
+ "Niedrig"
+ "SIM %s"
+ "Ausgeblendete Senderadresse"
+ "Die Nachricht kann nicht gesendet werden, weil die Anhänge noch nicht geladen wurden."
+ "Anhang kann nicht geladen werden. Bitte versuchen Sie es erneut."
+ "Netzwerk ist nicht bereit. Bitte versuchen Sie es erneut."
+ "Text löschen"
+ "Zwischen Text- und Zifferneingabe wechseln"
+ "Weitere Teilnehmer hinzufügen"
+ "Teilnehmer bestätigen"
+ "Neue Unterhaltung starten"
+ "Dieses Element auswählen"
+ "Video abspielen"
+ "Personen & Optionen"
+ "Debuggen"
+ "Personen & Optionen"
+ "Allgemein"
+ "Personen in dieser Konversation"
+ "Anrufen"
+ "Nachricht senden"
+ "Nachricht senden<br/><small>von %s</small>"
+
+ Fotos senden
+ Foto senden
+
+
+ Audioaufzeichnungen senden
+ Audioaufzeichnung senden
+
+
+ Videos senden
+ Video senden
+
+
+ Kontaktkarten senden
+ Kontaktkarte senden
+
+
+ Anhänge senden
+ Anhang senden
+
+
+ %d Anhänge zum Senden bereit
+ Ein Anhang zum Senden bereit
+
+ "Feedback geben"
+ "Im Google Play Store ansehen"
+ "Versionsinformationen"
+ "Version: %1$s"
+ "Open-Source-Lizenzen"
+ "Benachrichtigungen"
+ "Anhanglimit erreicht"
+ "Anhang konnte nicht geladen werden"
+ "Zu Kontakten hinzufügen?"
+ "Kontakt hinzufügen"
+ "Betreff"
+ "Betreff: "
+ "%s%s"
+ "Kontaktkarte wird geladen."
+ "Kontaktkarte kann nicht geladen werden."
+ "Kontaktkarte ansehen"
+
+ %d Kontakte
+ %d Kontakt
+
+ "Kontaktkarten"
+ "Geburtstag"
+ "Notizen"
+ "Nachricht weiterleiten"
+ "Antworten"
+ "+1"
+ "+%d"
+ "SMS deaktiviert"
+ "Um Nachrichten zu senden, legen Sie die SMS/MMS App als Standard-SMS-App fest."
+ "Legen Sie die SMS/MMS App als Standard-SMS-App fest."
+ "Ändern"
+ "Um Nachrichten zu erhalten, legen Sie die SMS/MMS App als Standard-SMS-App fest."
+ "Keine bevorzugte SIM für das Senden von SMS ausgewählt"
+ "Diese App wird vom Geräteeigentümer nicht zugelassen."
+ "OK"
+ "Zu viele Teilnehmer in der Unterhaltung"
+
+ Ungültige Kontakte
+ Ungültiger Kontakt
+
+ "Kamerabild kann nicht geladen werden."
+ "Sie: "
+ "%s: "
+ "Entwurf"
+ "Wenn Sie eine neue Unterhaltung beginnen, wird diese hier angezeigt"
+ "Archivierte Unterhaltungen erscheinen hier."
+ "Unterhaltungen werden geladen…"
+ "Bild"
+ "Audioclip"
+ "Video"
+ "Kontaktkarte"
+ "MMS"
+ "Rückgängig"
+ "Erneut versuchen"
+ "Geben Sie einen Kontaktnamen oder eine Telefonnummer ein, um eine neue Nachricht zu beginnen."
+ "Blockieren"
+ "%s blockieren"
+ "Blockierung aufheben für %s"
+ "%s blockieren?"
+ "Sie erhalten weiterhin Nachrichten von dieser Nummer, werden jedoch nicht mehr benachrichtigt. Diese Unterhaltung wird archiviert."
+ "Blockierte Kontakte"
+ "Blockierung aufheben"
+ "Blockierte Kontakte"
+ "Bild aus der Dokumentenbibliothek auswählen"
+ "Nachricht wird gesendet"
+ "Nachricht gesendet"
+ "Mobilfunkdaten sind deaktiviert. Bitte überprüfen Sie Ihre Einstellungen."
+ "Im Flugmodus können keine Nachrichten gesendet werden."
+ "Die Nachricht konnte nicht gesendet werden."
+ "Nachricht heruntergeladen"
+ "Mobilfunkdaten sind deaktiviert. Bitte überprüfen Sie Ihre Einstellungen."
+ "Im Flugmodus können keine Nachrichten heruntergeladen werden."
+ "Die Nachricht konnte nicht heruntergeladen werden."
+ "Null"
+ "Eins"
+ "Zwei"
+ "Drei"
+ "Vier"
+ "Fünf"
+ "Sechs"
+ "Sieben"
+ "Acht"
+ "Neun"
+ "Nachricht kann nicht mit %1$s gesendet werden. Fehler %2$d."
+ "Nachricht kann nicht mit einem unbekannten Mobilfunkanbieter gesendet werden. Fehler %1$d."
+ "Fwd: %s"
+ "Nachricht wurde nicht gesendet: Der Dienst ist im Netzwerk nicht aktiviert."
+ "Nachricht nicht gesendet: ungültige Zieladresse"
+ "Nachricht nicht gesendet: ungültige Nachricht"
+ "Nachricht nicht gesendet: nicht unterstützter Inhalt"
+ "Nachricht nicht gesendet: nicht unterstützte Nachricht"
+ "Nachricht nicht gesendet: zu groß"
+ "Neue Nachricht"
+ "Ansehen"
+ "Bild"
+ "Keine geeignete App gefunden"
+ "Empfänger entfernen"
+ "Neue Nachricht"
+ "Abbrechen"
+ "Zugangspunkt bearbeiten"
+ "Nicht definiert"
+ "Name"
+ "APN"
+ "MMSC"
+ "MMS-Proxy"
+ "MMS-Port"
+ "MCC"
+ "MNC"
+ "APN-Typ"
+ "APN löschen"
+ "Neuer APN"
+ "Speichern"
+ "Verwerfen"
+ "Das Namensfeld darf nicht leer sein."
+ "APN darf nicht leer sein."
+ "Das MCC-Feld muss 3 Zeichen enthalten."
+ "Das MNC-Feld muss 2 oder 3 Zeichen enthalten."
+ "Standard-APN-Einstellungen werden wiederhergestellt"
+ "Auf Standard zurücksetzen"
+ "Zurücksetzen auf Standard-APN-Einstellungen abgeschlossen"
+ "Unbenannt"
+ "Zugriffspunktnamen"
+ "APNs"
+ "Neuer APN"
+ "Die Einstellungen für den Zugangspunkt sind für diesen Nutzer nicht verfügbar."
+ "In Zwischenablage kopieren?"
+ "Kopieren"
+ "an %s"
+ "Allgemein"
+ "Erweitert"
+ "Allgemeine Einstellungen"
+ "Erweiterte Einstellungen"
+ "SIM \"%s\""
+ "Einzelne SMS-Nachrichten an alle Empfänger senden. Die Antworten erhalten nur Sie."
+ "Einzelne MMS an alle Empfänger senden"
+ "Unbekannte Nummer"
+ "Neue Nachricht"
+ "Neue Nachricht"
+ "SIM-Auswahl"
+ "%1$s ausgewählt, SIM-Auswahl"
+ "Betreff bearbeiten"
+ "SIM auswählen oder Betreff bearbeiten"
+ "Für Audioaufnahme berühren und halten"
+ "Neue Unterhaltung starten"
+ "SMS/MMS"
+ "Liste der Unterhaltungen"
+ "Nachricht"
+ "Neue Nachricht"
+ "Konversationsliste"
+ "Unterhaltungen werden geladen"
+ "Nachrichten werden geladen"
+ "Weitere Unterhaltungen anzeigen"
+ "Weitere Nachrichten ansehen"
+ "Konversation gelöscht"
+ "Unterhaltung gelöscht. Tippen Sie hier, um eine andere Unterhaltung zu sehen."
+ "Blockiert"
+ "Blockierung aufgehoben"
+ "Wenig freier Speicherplatz. Einige Daten gehen möglicherweise verloren."
+ "Anhänge auswählen"
+ "Auswahl bestätigen"
+ "%d ausgewählt"
+ "Bitte entfernen Sie mindestens einen Anhang und versuchen Sie es erneut."
+ "Sie können versuchen, die Nachricht zu senden, sie wird jedoch möglicherweise nicht zugestellt, wenn Sie nicht mindestens einen Anhang entfernen."
+ "Pro Nachricht kann nur ein Video gesendet werden. Bitte entfernen Sie überzählige Videos und versuchen Sie es erneut."
+ "Die SMS/MMS App konnte den Anhang nicht laden."
+ "Trotzdem senden"
+ "Die Unterhaltung konnte nicht gestartet werden."
+ "%1$s (%2$s)"
+ "%s ausgewählt"
+
diff --git a/res/values-el/arrays.xml b/res/values-el/arrays.xml
new file mode 100644
index 0000000..280d8e9
--- /dev/null
+++ b/res/values-el/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "χωρίς θέμα"
+ "χωρίς θέμα"
+
+
+ "Ναι"
+ "Όχι"
+ "ΟΚ"
+ "Χαχα"
+ "Σας ευχαριστούμε"
+ "Συμφωνώ"
+ "Ωραία"
+ "Έρχομαι"
+ "Εντάξει, θα επικοινωνήσω μαζί σου αργότερα"
+ ":)"
+ ":("
+
+
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
new file mode 100644
index 0000000..feade7b
--- /dev/null
+++ b/res/values-el/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Ανταλλαγή μηνυμάτων"
+ "Ανταλλαγή μηνυμάτων"
+ "Επιλογή συνομιλίας"
+ "Ρυθμίσεις"
+ "Αποστολή μηνύματος"
+ "Προσθήκη συνημμένου αρχείου"
+ "Βοήθεια"
+ "Καλώς ήρθατε"
+ "Παράλειψη"
+ "Επόμενο >"
+ "Επόμενο"
+ "Έξοδος"
+ "Ρυθμίσεις >"
+ "Ρυθμίσεις"
+ "Η Ανταλλαγή μηνυμάτων χρειάζεται άδεια για SMS, Τηλέφωνο και Επαφές."
+ "Μπορείτε να αλλάξετε τα δικαιώματα στις Ρυθμίσεις > Εφαρμογές > Ανταλλαγή μηνυμάτων > Δικαιώματα."
+ "Μπορείτε να αλλάξετε τα δικαιώματα στις Ρυθμίσεις, Εφαρμογές, Μηνύματα, Δικαιώματα."
+ "Συχνή επικοινωνία"
+ "Όλες οι επαφές"
+ "Αποστολή σε %s"
+ "Λήψη εικόνων ή βίντεο"
+ "Επιλέξτε εικόνες από αυτήν τη συσκευή"
+ "Ηχογράφηση"
+ "Επιλογή φωτογραφίας"
+ "Το μέσο είναι επιλεγμένο."
+ "Το μέσο δεν είναι επιλεγμένο."
+ "%d επιλεγμένα"
+ "εικόνα %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "εικόνα"
+ "Ηχογράφηση"
+ "Κοινή χρήση"
+ "Μόλις τώρα"
+ "Τώρα"
+
+ %d λεπτά
+ %d λεπτό
+
+
+ %d ώρες
+ %d ώρα
+
+
+ %d ημέρες
+ %d ημέρα
+
+
+ %d εβδομάδες
+ μία εβδομάδα
+
+
+ %d μήνες
+ ένας μήνας
+
+
+ %d έτη
+ ένα έτος
+
+ "Μήνυμα κλάσης 0"
+ "Αποθήκευση"
+ "Ο αποθηκευτικός χώρος της συσκευής είναι περιορισμένος. Η Ανταλλαγή μηνυμάτων θα διαγράψει αυτόματα τα παλαιότερα μηνύματα για να απελευθερώσει χώρο."
+ "Ο χώρος αποθήκευσης εξαντλείται"
+ "Η Ανταλλαγή μηνυμάτων μπορεί να μην κάνει αποστολή ή λήψη μηνυμάτων μέχρι να ελευθερώσετε περισσότερο χώρο στη συσκευή σας."
+ "Περιορισμένος αποθηκευτικός χώρος SMS. Μπορεί να χρειαστεί να διαγράψετε μηνύματα."
+ "Επιβεβαιώστε τον αριθμό τηλεφώνου σας"
+ "Αυτό το μοναδικό βήμα θα εξασφαλίσει ότι η Ανταλλαγή μηνυμάτων θα παραδώσει σωστά τα ομαδικά μηνύματά σας."
+ "Αριθμός τηλεφώνου"
+ "Διαγραφή όλων των μηνυμάτων με πολυμέσα"
+ "Διαγραφή μηνυμάτων πριν από τις %s"
+ "Αυτόματη διαγραφή των μηνυμάτων πριν από %s"
+ "Παράβλεψη"
+ "Να γίνει διαγραφή όλων των μηνυμάτων που περιέχουν πολυμέσα;"
+ "Να γίνει διαγραφή των μηνυμάτων πριν από τις %s;"
+ "Να γίνει αυτόματη διαγραφή των μηνυμάτων πριν από %s και ενεργοποίηση της αυτόματης διαγραφής;"
+ "Ο χρήστης %s είπε"
+ "Είπατε"
+ "Μήνυμα από το χρήστη %s"
+ "Στείλατε ένα μήνυμα"
+ "Αποστολή…"
+ "Δεν εστάλη. Αγγίξτε για να δοκιμάσετε ξανά."
+ "Δεν εστάλη. Επανάληψη…"
+ "Εκ νέου αποστολή ή διαγραφή"
+ "Κάντε μια φωνητική κλήση στις υπηρεσίες έκτακτης ανάγκης. Δεν ήταν δυνατή η παράδοση του μηνύματος κειμένου σας αυτήν τη φορά."
+ "Αποτυχία"
+ "Νέο μήνυμα MMS για λήψη"
+ "Νέο μήνυμα MMS"
+ "Δεν ήταν δυνατή η λήψη"
+ "Αγγίξτε για να δοκιμάσετε ξανά"
+ "Αγγίξτε για λήψη"
+ "Λήψη ή διαγραφή"
+ "Λήψη…"
+ "Το μήνυμα έληξε ή δεν είναι διαθέσιμο"
+ "μέγεθος: %1$s, λήξη: %2$s"
+ "Δεν είναι δυνατή η αποστολή. Ο παραλήπτης δεν είναι έγκυρος."
+ "Η υπηρεσία δεν έχει ενεργοποιηθεί στο δίκτυο"
+ "Δεν ήταν δυνατή η αποστολή λόγω προβλήματος στο δίκτυο"
+ "Το μήνυμα έληξε ή δεν είναι διαθέσιμο."
+ "(Χωρίς θέμα)"
+ "Άγνωστος αποστολέας"
+ "Παραδόθηκε"
+ "Δεν ήταν δυνατή η λήψη του μηνύματος %1$s από %2$s."
+ "Δεν ήταν δυνατή η ολοκλήρωση της λειτουργίας της βάσης δεδομένων λόγω ανεπαρκούς μνήμης"
+ "Το μήνυμα δεν εστάλη"
+ "Ορισμένα μηνύματα δεν εστάλησαν στην Ανταλλαγή μηνυμάτων"
+
+ %d μηνύματα σε %d συνομιλίες
+ %d μηνύματα σε μία συνομιλία
+
+ "Δεν έγινε λήψη του μηνύματος"
+ "Δεν έγινε λήψη ορισμένων μηνυμάτων στην Ανταλλαγή μηνυμάτων"
+
+ %d μηνύματα σε %d συνομιλίες
+ %d μηνύματα σε μία συνομιλία
+
+ "Το μήνυμα στον αριθμό %1$s δεν εστάλη"
+ "Κάντε μια φωνητική κλήση στις υπηρεσίες έκτακτης ανάγκης. Δεν ήταν δυνατή η παράδοση του μηνύματος κειμένου σας στον αριθμό %1$s αυτήν τη φορά."
+
+ %d νέα μηνύματα
+ Νέο μήνυμα
+
+ "Έναρξη"
+ "Η φωτογραφική μηχανή δεν είναι διαθέσιμη"
+ "Η φωτογραφική μηχανή δεν είναι διαθέσιμη"
+ "Η εγγραφή βίντεο δεν είναι διαθέσιμη"
+ "Δεν είναι δυνατή η αποθήκευση πολυμέσων"
+ "Δεν είναι δυνατή η λήψη φωτογραφίας"
+ "Πίσω"
+ "Αρχειοθετημένο"
+ "Διαγραφή"
+ "Αρχειοθέτηση"
+ "Κατάργηση αρχειοθέτησης"
+ "Απενεργοποίηση ειδοποιήσεων"
+ "Ενεργοποίηση ειδοποιήσεων"
+ "Προσθήκη επαφής"
+ "Λήψη"
+ "Αποστολή"
+ "Διαγραφή"
+ "Να διαγραφεί αυτό το μήνυμα;"
+ "Δεν είναι δυνατή η αναίρεση αυτής της ενέργειας."
+ "Διαγραφή"
+
+ Διαγραφή αυτών των συνομιλιών;
+ Διαγραφή αυτής της συνομιλίας;
+
+ "Διαγραφή"
+ "Ακύρωση"
+ "Προς"
+ "Επιλογή πολλαπλών εικόνων"
+ "Επιβεβαίωση επιλογής"
+ "+%d"
+ "Δεν είναι δυνατή η αποθήκευση ήχου. Δοκιμάστε ξανά."
+ "Δεν είναι δυνατή η αναπαραγωγή ήχου. Δοκιμάστε ξανά."
+ "Δεν ήταν δυνατή η αποθήκευση ήχου. Δοκιμάστε ξανά."
+ "Άγγιγμα & κράτημα"
+ ", "
+ " "
+ ": "
+ " "
+ "Εικόνα"
+ "Κλιπ ήχου"
+ "Βίντεο"
+ "Κάρτα επικοινωνίας"
+ "Λήψη"
+ "Απάντηση μέσω SMS"
+ "Απάντηση μέσω MMS"
+ "Απάντηση"
+
+ %d συμμετέχοντες
+ %d συμμετέχων
+
+ "Εγώ"
+ "Η επαφή αποκλείστηκε και αρχειοθετήθηκε"
+ "Έγινε κατάργηση αποκλεισμού και αρχειοθέτησης της επαφής"
+ "Έχουν αρχειοθετηθεί %d"
+ "%d αφαιρέθηκαν από το αρχείο"
+ "Οι ειδοποιήσεις απενεργοποιήθηκαν"
+ "Οι ειδοποιήσεις ενεργοποιήθηκαν"
+ "Έχουν ρυθμιστεί όλα. Αγγίξτε ξανά την επιλογή \"Αποστολή\"."
+ "Η Ανταλλαγή μηνυμάτων ορίστηκε επιτυχώς ως η προεπιλεγμένη εφαρμογή SMS."
+
+ Απόρριψη συνημμένων
+ Απόρριψη συνημμένου
+
+ "Συνημμένο ήχου"
+ "Αναπαραγωγή συνημμένου ήχου"
+ "Παύση"
+ "Μήνυμα από %s: %s."
+ "Αποτυχία μηνύματος από %s: %s. Ώρα: %s"
+ "Μήνυμα από %s: %s. Ώρα: %s"
+ "Μη απεσταλμένο μήνυμα προς %s: %s. Ώρα: %s"
+ "Αποστολή μηνύματος προς %s: %s. Ώρα: %s."
+ "Αποτυχία μηνύματος προς %s: %s. Ώρα: %s"
+ "Μήνυμα προς %s: %s. Ώρα: %s."
+ "Αποτυχία μηνύματος από %s: %s. Ώρα: %s. %s"
+ "Μήνυμα από %s: %s. Ώρα: %s. %s"
+ "Μη απεσταλμένο μήνυμα προς %s: %s. Ώρα: %s"
+ "Αποστολή μηνύματος σε %s: %s. Ώρα: %s"
+ "Αποτυχία μηνύματος προς %s: %s. Ώρα: %s"
+ "Μήνυμα προς %s: %s. Ώρα: %s"
+ "Αποτυχία μηνύματος. Αγγίξτε για επανάληψη."
+ "Συνομιλία με %s"
+ "Διαγραφή θέματος"
+ "Λήψη βίντεο"
+ "Τραβήξτε μια στατική εικόνα"
+ "Τραβήξτε μια φωτογραφία"
+ "Έναρξη εγγραφής βίντεο"
+ "Εναλλαγή σε κάμερα πλήρους οθόνης"
+ "Εναλλαγή μεταξύ μπροστινής και της πίσω φωτογραφικής μηχανής"
+ "Διακοπή εγγραφής και επισύναψη βίντεο"
+ "Διακοπή εγγραφής βίντεο"
+ "Φωτογραφίες Ανταλλαγής μηνυμάτων"
+
+ %d φωτογραφίες αποθηκεύτηκαν στο λεύκωμα \"%s\"
+ %d φωτογραφία αποθηκεύτηκε στο λεύκωμα \"%s\"
+
+
+ %d βίντεο αποθηκεύτηκαν στο λεύκωμα \"%s\"
+ %d βίντεο αποθηκεύτηκε στο λεύκωμα \"%s\"
+
+
+ %d συνημμένα αποθηκεύτηκαν στο λεύκωμα \"%s\"
+ %d συνημμένο αποθηκεύτηκε στο λεύκωμα \"%s\"
+
+
+ %d συνημμένα αποθηκεύτηκαν στις \"Λήψεις\"
+ %d συνημμένο αποθηκεύτηκε στις \"Λήψεις\"
+
+
+ Αποθηκεύτηκε %d συνημμένων αρχείων
+ Αποθηκεύτηκε %d συνημμένο αρχείο
+
+
+ Δεν ήταν δυνατή η αποθήκευση %d συνημμένων αρχείων
+ Δεν ήταν δυνατή η αποθήκευση %d συνημμένου αρχείου
+
+ "Αποθηκευμένο συνημμένο MMS"
+ "Ρυθμίσεις"
+ "Αρχειοθετημένο"
+ "Κλείσιμο"
+ "MMS"
+ "Σύνθετες ρυθμίσεις"
+ "Εντοπισμός σφαλμάτων"
+ "Ειδοποιήσεις"
+ "Ήχος"
+ "Σίγαση"
+ "Δόνηση"
+ "Αποκλεισμένο"
+ "Αναφορές παράδοσης SMS"
+ "Αίτηση αναφοράς παράδοσης για κάθε SMS που στέλνετε"
+ "Αυτόματη ανάκτηση"
+ "Αυτόματη ανάκτηση μηνυμάτων MMS"
+ "Αυ/τη ανάκτηση περιαγ."
+ "Αυτόματη ανάκτηση MMS κατά την περιαγωγή"
+ "Ομαδική ανταλλαγή μηνυμάτων"
+ "Χρησιμοποιήστε το MMS για να στείλετε ένα μήνυμα σε πολλούς παραλήπτες"
+ "Προεπιλεγμένη εφαρμογή SMS"
+ "Προεπιλεγμένη εφαρμογή SMS"
+
+
+ "Ο αριθμός τηλεφώνου σας"
+ "Άγνωστo"
+ "Ήχοε εξερχόμενου μηνύματος"
+ "Απόρριψη SMS"
+ "Απόρριψη μη επεξεργασμένων δεδομένων ληφθέντων SMS σε αρχείο εξωτερικού αποθηκευτικού χώρου"
+ "Απόρριψη MMS"
+ "Απόρριψη μη επεξεργασμένων δεδομένων ληφθέντων MMS σε αρχείο εξωτερικού αποθηκευτικού χώρου"
+ "Ασύρματες ειδοποιήσεις"
+ "Επιλογές μηνύματος"
+ "Αντιγραφή κειμένου"
+ "Προβολή λεπτομερειών"
+ "Διαγραφή"
+ "Προώθηση"
+ "Λεπτομέρειες μηνύματος"
+ "Τύπος: "
+ "Μήνυμα κειμένου"
+ "Μήνυμα πολυμέσων"
+ "Από: "
+ "Προς: "
+ "Εστάλη: "
+ "Ελήφθη: "
+ "Θέμα: "
+ "Μέγεθος: "
+ "Προτεραιότητα: "
+ "SIM: "
+ "Υψηλή"
+ "Κανονική"
+ "Χαμηλή"
+ "SIM %s"
+ "Διεύθυνση κρυφού αποστολέα"
+ "Δεν είναι δυνατή η αποστολή του μηνύματος ενώ φορτώνουν τα συνημμένα."
+ "Δεν είναι δυνατή η φόρτωση της επισύναψης. Δοκιμάστε ξανά."
+ "Το δίκτυο δεν είναι έτοιμο. Δοκιμάστε ξανά."
+ "Διαγραφή κειμένου"
+ "Εναλλαγή μεταξύ εισαγωγής κειμένου και αριθμών"
+ "Προσθήκη περισσότερων συμμετεχόντων"
+ "Επιβεβαίωση συμμετεχόντων"
+ "Έναρξη νέας συνομιλίας"
+ "Επιλέξτε αυτό το στοιχείο"
+ "Αναπαραγωγή βίντεο"
+ "Άτομα και επιλογές"
+ "Εντοπισμός σφαλμάτων"
+ "Άτομα και επιλογές"
+ "Γενικά"
+ "Άτομα σε αυτήν τη συνομιλία"
+ "Πραγματοποίηση κλήσης"
+ "Αποστολή μηνύματος"
+ "Αποστολή μηνύματος<br/><small>από %s</small>"
+
+ Αποστολή φωτογραφιών
+ Αποστολή φωτογραφίας
+
+
+ Αποστολή αρχείων ήχου
+ Αποστολή αρχείου ήχου
+
+
+ Αποστολή αρχείων βίντεο
+ Αποστολή αρχείου βίντεο
+
+
+ Αποστολή καρτών επαφών
+ Αποστολή κάρτας επαφής
+
+
+ Αποστολή συνημμένων
+ Αποστολή συνημμένου
+
+
+ %d συνημμένα έτοιμα για αποστολή
+ Ένα συνημμένο έτοιμο για αποστολή
+
+ "Αποστολή σχολίων"
+ "Προβολή στο Google Play Store"
+ "Πληροφορίες έκδοσης"
+ "Έκδοση %1$s"
+ "Άδειες λογισμικού ανοικτού κώδικα"
+ "Ειδοποιήσεις"
+ "Συμπλήρωση ορίου συνημμένων"
+ "Αποτυχία φόρτωσης συνημμένου."
+ "Προσθήκη στις επαφές;"
+ "Προσθήκη επαφής"
+ "Θέμα"
+ "Θέμα: "
+ "%s%s"
+ "Φόρτωση κάρτας επαφής"
+ "Δεν ήταν δυνατή η φόρτωση της κάρτας επαφής"
+ "Προβολή κάρτας επαφής"
+
+ %d επαφές
+ %d επαφή
+
+ "Κάρτες επαφών"
+ "Γενέθλια"
+ "Σημειώσεις"
+ "Προώθηση μηνύματος"
+ "Απάντηση"
+ "+1"
+ "+%d"
+ "Τα SMS απενεργοποιήθηκαν"
+ "Για αποστολή, ορίστε την Ανταλλαγή μηνυμάτων ως προεπιλεγμένη εφαρμογή SMS"
+ "Ορισμός Ανταλλαγής μηνυμάτων ως προεπιλεγμένης εφαρμογής SMS"
+ "Αλλαγή"
+ "Για να λαμβάνετε μηνύματα, ορίστε την Ανταλλαγή μηνυμάτων ως προεπιλεγμένη εφαρμογή SMS"
+ "Δεν έχει επιλεγεί προτιμώμενη SIM για την αποστολή μηνυμάτων SMS"
+ "Αυτή η εφαρμογή δεν επιτρέπεται από τον κάτοχο της συσκευής."
+ "ΟΚ"
+ "Πάρα πολλοί συμμετέχοντες σε μια συνομιλία"
+
+ Μη έγκυρες επαφές
+ Μη έγκυρη επαφή
+
+ "Δεν ήταν δυνατή η φόρτωση της εικόνας φωτογραφικής μηχανής"
+ "Εσείς: "
+ "%s: "
+ "Πρόχειρο"
+ "Αφού ξεκινήσετε μια νέα συνομιλία, θα εμφανίζεται εδώ"
+ "Οι αρχειοθετημένες συνομιλίες εμφανίζονται εδώ"
+ "Φόρτωση συνομιλιών…"
+ "Εικόνα"
+ "Κλιπ ήχου"
+ "Βίντεο"
+ "Κάρτα επαφής"
+ "MMS"
+ "Αναίρεση"
+ "Επανάληψη"
+ "Εισαγάγετε ένα όνομα επαφής ή έναν αριθμό τηλεφώνου για να ξεκινήσετε ένα νέο μήνυμα"
+ "Αποκλεισμός"
+ "Αποκλεισμός επαφής %s"
+ "Κατάργηση αποκλεισμού της επαφής %s"
+ "Αποκλεισμός %s;"
+ "Θα εξακολουθήσετε να λαμβάνετε μηνύματα από αυτόν τον αριθμό, αλλά δεν θα ειδοποιείστε πια. Αυτή η συνομιλία θα αρχειοθετηθεί."
+ "Αποκλεισμένες επαφές"
+ "ΚΑΤΑΡΓΗΣΗ ΑΠΟΚΛΕΙΣΜΟΥ"
+ "Αποκλεισμένες επαφές"
+ "Επιλέξτε μια εικόνα από τη βιβλιοθήκη εγγράφων"
+ "Αποστολή μηνύματος"
+ "Το μήνυμα εστάλη"
+ "Τα δεδομένα κινητής τηλεφωνίας έχουν απενεργοποιηθεί. Ελέγξτε τις ρυθμίσεις σας."
+ "Δεν είναι δυνατή η αποστολή μηνυμάτων σε Λειτουργία πτήσης"
+ "Αδυναμία αποστολής μηνύματος"
+ "Έγινε λήψη του μηνύματος"
+ "Τα δεδομένα κινητής τηλεφωνίας απενεργοποιήθηκαν. Ελέγξτε τις ρυθμίσεις σας."
+ "Δεν είναι δυνατή η λήψη μηνυμάτων σε λειτουργία πτήσης"
+ "Δεν ήταν δυνατή η λήψη του μηνύματος"
+ "Μηδέν"
+ "Ένα"
+ "Δύο"
+ "Τρία"
+ "Τέσσερα"
+ "Πέντε"
+ "Έξι"
+ "Επτά"
+ "Οκτώ"
+ "Εννέα"
+ "Δεν είναι δυνατή η αποστολή του μηνύματος με %1$s, σφάλμα %2$d"
+ "Δεν είναι δυνατή η αποστολή του μηνύματος με άγνωστη εταιρεία κινητής τηλεφωνίας, σφάλμα %1$d"
+ "Προώθ.: %s"
+ "Το μήνυμα δεν εστάλη: Η υπηρεσία δεν ενεργοποιήθηκε στο δίκτυο"
+ "Το μήνυμα δεν εστάλη: μη έγκυρη διεύθυνση προορισμού"
+ "Το μήνυμα δεν εστάλη: μη έγκυρο μήνυμα"
+ "Το μήνυμα δεν εστάλη: μη υποστηριζόμενο περιεχόμενο"
+ "Το μήνυμα δεν εστάλη: μη υποστηριζόμενο μήνυμα"
+ "Το μήνυμα δεν εστάλη: πάρα πολύ μεγάλο"
+ "Νέο μήνυμα"
+ "Προβολή"
+ "Εικόνα"
+ "Δεν ήταν δυνατή η εύρεση της κατάλληλης εφαρμογής"
+ "Κατάργηση παραλήπτη"
+ "Νέο μήνυμα"
+ "Ακύρωση"
+ "Επεξ/σία σημ. πρόσβ."
+ "Δεν έχει ρυθμιστεί"
+ "Όνομα"
+ "APN"
+ "MMSC"
+ "Διακομιστής μεσολάβησης MMS"
+ "Θύρα MMS"
+ "MCC"
+ "MNC"
+ "Τύπος APN"
+ "Διαγραφή APN"
+ "Νέο APN"
+ "Αποθήκευση"
+ "Απόρριψη"
+ "Το πεδίο Όνομα δεν μπορεί να είναι κενό."
+ "Το APN δεν μπορεί να είναι κενό."
+ "Το πεδίο MCC πρέπει να αποτελείται από 3 ψηφία."
+ "Το πεδίο MNC πρέπει να αποτελείται από 2 ή 3 ψηφία."
+ "Επαναφορά προεπιλεγμένων ρυθμίσεων APN."
+ "Επαναφορά προεπιλογών"
+ "Η επαναφορά των εργοστασιακών ρυθμίσεων APN ολοκληρώθηκε."
+ "Χωρίς τίτλο"
+ "Ονόματα σημείου πρόσβασης"
+ "APN"
+ "Νέο APN"
+ "Οι ρυθμίσεις ονόματος σημείου πρόσβασης δεν είναι διαθέσιμες γι\' αυτόν το χρήστη"
+ "Αντιγραφή στο πρόχειρο;"
+ "Αντιγραφή"
+ "σε %s"
+ "Γενικά"
+ "Σύνθετες ρυθμίσεις"
+ "Γενικές ρυθμίσεις"
+ "Σύνθετες ρυθμίσεις"
+ "\"%s\" SIM"
+ "Αποστολή μεμονωμένων μηνυμάτων SMS σε όλους τους παραλήπτες. Μόνο εσείς θα λαμβάνετε τις απαντήσεις"
+ "Αποστολή μεμονωμένου MMS σε όλους τους παραλήπτες"
+ "Άγνωστος αριθμός"
+ "Νέο μήνυμα"
+ "Νέο μήνυμα."
+ "Επιλογέας SIM"
+ "Επιλέχτηκε %1$s, επιλογέας SIM"
+ "Επεξεργασία θέματος"
+ "Επιλέξτε SIM ή επεξεργαστείτε το θέμα"
+ "Πατήστε παρατεταμένα για εγγραφή ήχου"
+ "Έναρξη νέας συνομιλίας"
+ "Ανταλλαγή μηνυμάτων"
+ "Λίστα Ανταλλαγής μηνυμάτων"
+ "Ανταλλαγή μηνυμάτων"
+ "Νέο μήνυμα"
+ "Λίστα συνομιλιών"
+ "Φόρτωση συνομιλιών"
+ "Φόρτωση μηνυμάτων"
+ "Προβολή περισσότερων συνομιλιών"
+ "Εμφάνιση περισσότερων μηνυμάτων"
+ "Η συνομιλία διαγράφηκε"
+ "Διαγραφή συνομιλίας. Αγγίξτε για να εμφανίσετε μια διαφορετική συνομιλία στην Ανταλλαγή μηνυμάτων"
+ "Αποκλείστηκε"
+ "Ο αποκλεισμός καταργήθηκε"
+ "Ο αποθηκευτικός χώρος είναι περιορισμένος. Ορισμένα στοιχεία ενδέχεται να χαθούν."
+ "Επιλέξτε συνημμένα"
+ "Επιβεβαίωση επιλογής"
+ "%d επιλ/μένα"
+ "Καταργήστε ένα ή περισσότερα συνημμένα και δοκιμάστε ξανά."
+ "Μπορείτε να δοκιμάσετε να στείλετε το μήνυμά σας, αλλά ενδέχεται να μην παραδοθεί αν δεν καταργήσετε ένα ή περισσότερα συνημμένα."
+ "Μπορείτε να στείλετε μόνο ένα βίντεο ανά μήνυμα. Καταργήστε τα επιπλέον βίντεο και δοκιμάστε ξανά."
+ "Αποτυχία φόρτωσης συνημμένου από την Ανταλλαγή μηνυμάτων."
+ "Αποστολή ούτως ή άλλως"
+ "Δεν ήταν δυνατή η έναρξη της συνομιλίας"
+ "%1$s (%2$s)"
+ "Επιλέχτηκε %s"
+
diff --git a/res/values-en-rAU/arrays.xml b/res/values-en-rAU/arrays.xml
new file mode 100644
index 0000000..94d5aff
--- /dev/null
+++ b/res/values-en-rAU/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "no subject"
+ "nosubject"
+
+
+ "Yes"
+ "No"
+ "OK"
+ "Hehe"
+ "Thanks"
+ "I agree"
+ "Nice"
+ "On my way"
+ "OK, let me get back to you later"
+ ":)"
+ ":("
+
+
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..11048a5
--- /dev/null
+++ b/res/values-en-rAU/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Messaging"
+ "Messaging"
+ "Select conversation"
+ "Settings"
+ "Send Message"
+ "Add an attachment"
+ "Help"
+ "Welcome"
+ "Skip"
+ "Next >"
+ "Next"
+ "Exit"
+ "Settings >"
+ "Settings"
+ "Messaging needs permission to SMS, Phone and Contacts."
+ "You can change permissions in Settings > Apps > Messaging > Permissions."
+ "You can change permissions in Settings, Apps, Messaging, Permissions."
+ "Frequents"
+ "All contacts"
+ "Send to %s"
+ "Capture pictures or video"
+ "Choose images from this device"
+ "Record audio"
+ "Choose photo"
+ "The media is selected."
+ "The media is unselected."
+ "%d selected"
+ "image %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "image"
+ "Record audio"
+ "Share"
+ "Just now"
+ "Now"
+
+ %d mins
+ %d min
+
+
+ %d hours
+ %d hour
+
+
+ %d days
+ %d day
+
+
+ %d weeks
+ a week
+
+
+ %d months
+ a month
+
+
+ %d years
+ a year
+
+ "Class 0 message"
+ "Save"
+ "Device is low on space. Messaging will automatically delete older messages to free up space."
+ "Storage space running out"
+ "Messaging might not send or receive messages until more space is available on your device."
+ "Low SMS storage. You may need to delete messages."
+ "Confirm your phone number"
+ "This one-off step will ensure Messaging will deliver your group messages properly."
+ "Phone number"
+ "Delete all messages with media"
+ "Delete messages older than %s"
+ "Auto-delete messages older than %s"
+ "Ignore"
+ "Delete all messages with media?"
+ "Delete messages older than %s?"
+ "Delete messages older than %s and turn on auto-delete?"
+ "%s said"
+ "You said"
+ "Message from %s"
+ "You sent a message"
+ "Sending…"
+ "Not sent. Touch to try again."
+ "Not sent. Trying again…"
+ "Resend or delete"
+ "Please make a voice call to emergency services. Your text message could not be delivered at this time."
+ "Failed"
+ "New MMS message to download"
+ "New MMS message"
+ "Couldn\'t download"
+ "Touch to try again"
+ "Touch to download"
+ "Download or delete"
+ "Downloading…"
+ "Message expired or not available"
+ "size: %1$s, expiration: %2$s"
+ "Can\'t send. Recipient not valid."
+ "Service not activated on network"
+ "Couldn\'t send due to network problem"
+ "Message expired or not available"
+ "(No subject)"
+ "Unknown sender"
+ "Delivered"
+ "Couldn\'t download message %1$s from %2$s."
+ "Couldn\'t complete database operation due to low memory"
+ "Message not sent"
+ "Some messages not sent in Messaging"
+
+ %d messages in %d conversations
+ %d messages in one conversation
+
+ "Message not downloaded"
+ "Some messages not downloaded in Messaging"
+
+ %d messages in %d conversations
+ %d messages in one conversation
+
+ "Message to %1$s not sent"
+ "Please make a voice call to emergency services. Your text message to %1$s could not be delivered at this time."
+
+ %d new messages
+ New message
+
+ "Start"
+ "Camera not available"
+ "Camera not available"
+ "Video capture not available"
+ "Can\'t save media"
+ "Can\'t take picture"
+ "Back"
+ "Archived"
+ "Delete"
+ "Archive"
+ "Unarchive"
+ "Turn off notifications"
+ "Turn on notifications"
+ "Add contact"
+ "Download"
+ "Send"
+ "Delete"
+ "Delete this message"
+ "This action cannot be undone."
+ "Delete"
+
+ Delete these conversations?
+ Delete this conversation?
+
+ "Delete"
+ "Cancel"
+ "To"
+ "Select multiple images"
+ "Confirm selection"
+ "+%d"
+ "Can\'t record audio. Try again."
+ "Can\'t play audio. Try again."
+ "Couldn\'t save audio. Try again."
+ "Touch & hold"
+ ", "
+ " "
+ ": "
+ " "
+ "Picture"
+ "Audio clip"
+ "Video"
+ "Contact card"
+ "Download"
+ "Reply via SMS"
+ "Reply via MMS"
+ "Reply"
+
+ %d participants
+ %d participant
+
+ "Me"
+ "Contact blocked & archived"
+ "Contact unblocked & unarchived"
+ "%d archived"
+ "%d unarchived"
+ "Notifications turned off"
+ "Notifications turned on"
+ "All set. Touch Send again."
+ "Messaging successfully set as the default SMS app."
+
+ Discard attachments
+ Discard attachment
+
+ "Audio attachment"
+ "Play audio attachment"
+ "Pause"
+ "Message from %s: %s."
+ "Failed message from %s: %s. Time: %s."
+ "Message from %s: %s. Time: %s."
+ "Unsent message to %s: %s. Time: %s."
+ "Sending message to %s: %s. Time: %s."
+ "Failed message to %s: %s. Time: %s."
+ "Message to %s: %s. Time: %s."
+ "Failed message from %s: %s. Time: %s. %s."
+ "Message from %s: %s. Time: %s. %s."
+ "Unsent message to %s: %s. Time: %s."
+ "Sending message to %s: %s. Time: %s."
+ "Failed message to %s: %s. Time: %s."
+ "Message to %s: %s. Time: %s."
+ "Failed message. Touch to retry."
+ "Conversation with %s"
+ "Delete subject"
+ "Capture video"
+ "Capture a still image"
+ "Take picture"
+ "Start recording video"
+ "Switch to full screen camera"
+ "Switch between front and back camera"
+ "Stop recording and attach video"
+ "Stop recording video"
+ "Messaging photos"
+
+ %d photos saved to \"%s\" album
+ %d photo saved to \"%s\" album
+
+
+ %d videos saved to \"%s\" album
+ %d video saved to \"%s\" album
+
+
+ %d attachments saved to \"%s\" album
+ %d attachment saved to \"%s\" album
+
+
+ %d attachments saved to \"Downloads\"
+ %d attachment saved to \"Downloads\"
+
+
+ %d attachments saved
+ %d attachment saved
+
+
+ Couldn\'t save %d attachments
+ Couldn\'t save %d attachment
+
+ "Saved MMS attachment"
+ "Settings"
+ "Archived"
+ "Close"
+ "MMS"
+ "Advanced"
+ "Debug"
+ "Notifications"
+ "Sound"
+ "Silent"
+ "Vibrate"
+ "Blocked"
+ "SMS delivery reports"
+ "Request a delivery report for each SMS that you send"
+ "Auto-retrieve"
+ "Automatically retrieve MMS messages"
+ "Roaming auto-retrieve"
+ "Automatically retrieve MMS when roaming"
+ "Group messaging"
+ "Use MMS to send a single message when there are multiple recipients"
+ "Default SMS app"
+ "Default SMS app"
+
+
+ "Your phone number"
+ "Unknown"
+ "Outgoing message sounds"
+ "Dump SMS"
+ "Dump received SMS raw data into external storage file"
+ "Dump MMS"
+ "Dump received MMS raw data into external storage file"
+ "Wireless alerts"
+ "Message options"
+ "Copy text"
+ "View details"
+ "Delete"
+ "Forward"
+ "Message details"
+ "Type: "
+ "Text message"
+ "Multimedia message"
+ "From: "
+ "To: "
+ "Sent: "
+ "Received: "
+ "Subject: "
+ "Size: "
+ "Priority: "
+ "SIM: "
+ "High"
+ "Normal"
+ "Low"
+ "SIM %s"
+ "Hidden sender address"
+ "Can\'t send message while loading attachments."
+ "Can\'t load attachment. Try again."
+ "Network is not ready. Try again."
+ "Delete text"
+ "Switch between entering text and numbers"
+ "Add more participants"
+ "Confirm participants"
+ "Start new conversation"
+ "Select this item"
+ "Play video"
+ "People & Options"
+ "Debug"
+ "People & Options"
+ "General"
+ "People in this conversation"
+ "Make a call"
+ "Send message"
+ "Send message<br/><small>from %s</small>"
+
+ Send photos
+ Send photo
+
+
+ Send audios
+ Send audio
+
+
+ Send videos
+ Send video
+
+
+ Send contact cards
+ Send contact card
+
+
+ Send attachments
+ Send attachment
+
+
+ %d attachments ready to send
+ One attachment ready to send
+
+ "Send feedback"
+ "View in Google Play Store"
+ "Version info"
+ "Version %1$s"
+ "Open-source licences"
+ "Notifications"
+ "Attachment limit reached"
+ "Failed to load attachment."
+ "Add to Contacts?"
+ "Add Contact"
+ "Subject"
+ "Subject: "
+ "%s%s"
+ "Loading contact card"
+ "Couldn\'t load contact card"
+ "View contact card"
+
+ %d contacts
+ %d contact
+
+ "Contact cards"
+ "Birthday"
+ "Notes"
+ "Forward message"
+ "Reply"
+ "+1"
+ "+%d"
+ "SMS disabled"
+ "To send, set Messaging as the default SMS app"
+ "Set Messaging as the default SMS app"
+ "Change"
+ "To receive messages, set Messaging as the default SMS app"
+ "No preferred SIM selected for sending SMS messages"
+ "This app isn\'t allowed by the device owner."
+ "OK"
+ "Too many participants in a conversation"
+
+ Invalid contacts
+ Invalid contact
+
+ "Couldn\'t load camera image"
+ "You: "
+ "%s: "
+ "Draft"
+ "Once you start a new conversation, you’ll see it listed here"
+ "Archived conversations appear here"
+ "Loading conversations…"
+ "Picture"
+ "Audio clip"
+ "In-stream video"
+ "Contact card"
+ "MMS"
+ "Undo"
+ "Retry"
+ "Enter a contact name or phone number to start a new message"
+ "Block"
+ "Block %s"
+ "Unblock %s"
+ "Block %s?"
+ "You\'ll continue to receive messages from this number but won\'t be notified anymore. This conversation will be archived."
+ "Blocked contacts"
+ "UNBLOCK"
+ "Blocked contacts"
+ "Choose image from document library"
+ "Sending message"
+ "Message sent"
+ "Mobile data is turned off. Check your settings."
+ "Can\'t send messages in Aeroplane mode"
+ "Message could not be sent"
+ "Message downloaded"
+ "Mobile data is turned off. Check your settings."
+ "Can\'t download messages in Aeroplane mode"
+ "Message could not be downloaded"
+ "Zero"
+ "One"
+ "Two"
+ "Three"
+ "Four"
+ "Five"
+ "Six"
+ "Seven"
+ "Eight"
+ "Nine"
+ "Can\'t send message with %1$s, error %2$d"
+ "Can\'t send message with unknown operator, error %1$d"
+ "Fwd: %s"
+ "Message not sent: service not activated on network"
+ "Message not sent: invalid destination address"
+ "Message not sent: invalid message"
+ "Message not sent: unsupported content"
+ "Message not sent: unsupported message"
+ "Message not sent: too large"
+ "New message"
+ "View"
+ "Image"
+ "Could not find an appropriate application"
+ "Remove recipient"
+ "New message"
+ "Cancel"
+ "Edit access point"
+ "Not set"
+ "Named"
+ "APN"
+ "MMSC"
+ "MMS proxy"
+ "MMS port"
+ "MCC"
+ "MNC"
+ "APN type"
+ "Delete APN"
+ "New APN"
+ "Save"
+ "Discard"
+ "The Name field can\'t be empty."
+ "The APN cannot be empty."
+ "MCC field must be 3 digits."
+ "MNC field must be 2 or 3 digits."
+ "Restoring default APN settings."
+ "Reset to default"
+ "Reset default APN settings completed"
+ "Untitled"
+ "Access point names"
+ "APNs"
+ "New APN"
+ "Access Point Name settings are not available for this user"
+ "Copy to clipboard?"
+ "Copy"
+ "to %s"
+ "General"
+ "Advanced"
+ "General settings"
+ "Advanced settings"
+ "\"%s\" SIM"
+ "Send individual SMS messages to all recipients. Only you will get any replies"
+ "Send a single MMS to all recipients"
+ "Unknown number"
+ "New message"
+ "New message"
+ "SIM selector"
+ "%1$s selected, SIM selector"
+ "Edit subject"
+ "Select SIM or edit subject"
+ "Touch and hold to record audio"
+ "Start new conversation"
+ "Messaging"
+ "Messaging List"
+ "Messaging"
+ "New message"
+ "Conversation list"
+ "Loading conversations"
+ "Loading messages"
+ "View more conversations"
+ "View more messages"
+ "Conversation deleted"
+ "Conversation deleted. Touch to show a different Messaging conversation"
+ "Blocked"
+ "Unblocked"
+ "Storage space is low. Some data may be lost."
+ "Select attachments"
+ "Confirm selection"
+ "%d selected"
+ "Please remove one or more attachments and try again."
+ "You can try sending your message, but it might not be delivered unless you remove one or more attachments."
+ "You can only send one video per message. Please remove additional videos and try again."
+ "Messaging failed to load attachment."
+ "Send anyway"
+ "Could not start conversation"
+ "%1$s (%2$s)"
+ "%s selected"
+
diff --git a/res/values-en-rGB/arrays.xml b/res/values-en-rGB/arrays.xml
new file mode 100644
index 0000000..94d5aff
--- /dev/null
+++ b/res/values-en-rGB/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "no subject"
+ "nosubject"
+
+
+ "Yes"
+ "No"
+ "OK"
+ "Hehe"
+ "Thanks"
+ "I agree"
+ "Nice"
+ "On my way"
+ "OK, let me get back to you later"
+ ":)"
+ ":("
+
+
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..11048a5
--- /dev/null
+++ b/res/values-en-rGB/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Messaging"
+ "Messaging"
+ "Select conversation"
+ "Settings"
+ "Send Message"
+ "Add an attachment"
+ "Help"
+ "Welcome"
+ "Skip"
+ "Next >"
+ "Next"
+ "Exit"
+ "Settings >"
+ "Settings"
+ "Messaging needs permission to SMS, Phone and Contacts."
+ "You can change permissions in Settings > Apps > Messaging > Permissions."
+ "You can change permissions in Settings, Apps, Messaging, Permissions."
+ "Frequents"
+ "All contacts"
+ "Send to %s"
+ "Capture pictures or video"
+ "Choose images from this device"
+ "Record audio"
+ "Choose photo"
+ "The media is selected."
+ "The media is unselected."
+ "%d selected"
+ "image %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "image"
+ "Record audio"
+ "Share"
+ "Just now"
+ "Now"
+
+ %d mins
+ %d min
+
+
+ %d hours
+ %d hour
+
+
+ %d days
+ %d day
+
+
+ %d weeks
+ a week
+
+
+ %d months
+ a month
+
+
+ %d years
+ a year
+
+ "Class 0 message"
+ "Save"
+ "Device is low on space. Messaging will automatically delete older messages to free up space."
+ "Storage space running out"
+ "Messaging might not send or receive messages until more space is available on your device."
+ "Low SMS storage. You may need to delete messages."
+ "Confirm your phone number"
+ "This one-off step will ensure Messaging will deliver your group messages properly."
+ "Phone number"
+ "Delete all messages with media"
+ "Delete messages older than %s"
+ "Auto-delete messages older than %s"
+ "Ignore"
+ "Delete all messages with media?"
+ "Delete messages older than %s?"
+ "Delete messages older than %s and turn on auto-delete?"
+ "%s said"
+ "You said"
+ "Message from %s"
+ "You sent a message"
+ "Sending…"
+ "Not sent. Touch to try again."
+ "Not sent. Trying again…"
+ "Resend or delete"
+ "Please make a voice call to emergency services. Your text message could not be delivered at this time."
+ "Failed"
+ "New MMS message to download"
+ "New MMS message"
+ "Couldn\'t download"
+ "Touch to try again"
+ "Touch to download"
+ "Download or delete"
+ "Downloading…"
+ "Message expired or not available"
+ "size: %1$s, expiration: %2$s"
+ "Can\'t send. Recipient not valid."
+ "Service not activated on network"
+ "Couldn\'t send due to network problem"
+ "Message expired or not available"
+ "(No subject)"
+ "Unknown sender"
+ "Delivered"
+ "Couldn\'t download message %1$s from %2$s."
+ "Couldn\'t complete database operation due to low memory"
+ "Message not sent"
+ "Some messages not sent in Messaging"
+
+ %d messages in %d conversations
+ %d messages in one conversation
+
+ "Message not downloaded"
+ "Some messages not downloaded in Messaging"
+
+ %d messages in %d conversations
+ %d messages in one conversation
+
+ "Message to %1$s not sent"
+ "Please make a voice call to emergency services. Your text message to %1$s could not be delivered at this time."
+
+ %d new messages
+ New message
+
+ "Start"
+ "Camera not available"
+ "Camera not available"
+ "Video capture not available"
+ "Can\'t save media"
+ "Can\'t take picture"
+ "Back"
+ "Archived"
+ "Delete"
+ "Archive"
+ "Unarchive"
+ "Turn off notifications"
+ "Turn on notifications"
+ "Add contact"
+ "Download"
+ "Send"
+ "Delete"
+ "Delete this message"
+ "This action cannot be undone."
+ "Delete"
+
+ Delete these conversations?
+ Delete this conversation?
+
+ "Delete"
+ "Cancel"
+ "To"
+ "Select multiple images"
+ "Confirm selection"
+ "+%d"
+ "Can\'t record audio. Try again."
+ "Can\'t play audio. Try again."
+ "Couldn\'t save audio. Try again."
+ "Touch & hold"
+ ", "
+ " "
+ ": "
+ " "
+ "Picture"
+ "Audio clip"
+ "Video"
+ "Contact card"
+ "Download"
+ "Reply via SMS"
+ "Reply via MMS"
+ "Reply"
+
+ %d participants
+ %d participant
+
+ "Me"
+ "Contact blocked & archived"
+ "Contact unblocked & unarchived"
+ "%d archived"
+ "%d unarchived"
+ "Notifications turned off"
+ "Notifications turned on"
+ "All set. Touch Send again."
+ "Messaging successfully set as the default SMS app."
+
+ Discard attachments
+ Discard attachment
+
+ "Audio attachment"
+ "Play audio attachment"
+ "Pause"
+ "Message from %s: %s."
+ "Failed message from %s: %s. Time: %s."
+ "Message from %s: %s. Time: %s."
+ "Unsent message to %s: %s. Time: %s."
+ "Sending message to %s: %s. Time: %s."
+ "Failed message to %s: %s. Time: %s."
+ "Message to %s: %s. Time: %s."
+ "Failed message from %s: %s. Time: %s. %s."
+ "Message from %s: %s. Time: %s. %s."
+ "Unsent message to %s: %s. Time: %s."
+ "Sending message to %s: %s. Time: %s."
+ "Failed message to %s: %s. Time: %s."
+ "Message to %s: %s. Time: %s."
+ "Failed message. Touch to retry."
+ "Conversation with %s"
+ "Delete subject"
+ "Capture video"
+ "Capture a still image"
+ "Take picture"
+ "Start recording video"
+ "Switch to full screen camera"
+ "Switch between front and back camera"
+ "Stop recording and attach video"
+ "Stop recording video"
+ "Messaging photos"
+
+ %d photos saved to \"%s\" album
+ %d photo saved to \"%s\" album
+
+
+ %d videos saved to \"%s\" album
+ %d video saved to \"%s\" album
+
+
+ %d attachments saved to \"%s\" album
+ %d attachment saved to \"%s\" album
+
+
+ %d attachments saved to \"Downloads\"
+ %d attachment saved to \"Downloads\"
+
+
+ %d attachments saved
+ %d attachment saved
+
+
+ Couldn\'t save %d attachments
+ Couldn\'t save %d attachment
+
+ "Saved MMS attachment"
+ "Settings"
+ "Archived"
+ "Close"
+ "MMS"
+ "Advanced"
+ "Debug"
+ "Notifications"
+ "Sound"
+ "Silent"
+ "Vibrate"
+ "Blocked"
+ "SMS delivery reports"
+ "Request a delivery report for each SMS that you send"
+ "Auto-retrieve"
+ "Automatically retrieve MMS messages"
+ "Roaming auto-retrieve"
+ "Automatically retrieve MMS when roaming"
+ "Group messaging"
+ "Use MMS to send a single message when there are multiple recipients"
+ "Default SMS app"
+ "Default SMS app"
+
+
+ "Your phone number"
+ "Unknown"
+ "Outgoing message sounds"
+ "Dump SMS"
+ "Dump received SMS raw data into external storage file"
+ "Dump MMS"
+ "Dump received MMS raw data into external storage file"
+ "Wireless alerts"
+ "Message options"
+ "Copy text"
+ "View details"
+ "Delete"
+ "Forward"
+ "Message details"
+ "Type: "
+ "Text message"
+ "Multimedia message"
+ "From: "
+ "To: "
+ "Sent: "
+ "Received: "
+ "Subject: "
+ "Size: "
+ "Priority: "
+ "SIM: "
+ "High"
+ "Normal"
+ "Low"
+ "SIM %s"
+ "Hidden sender address"
+ "Can\'t send message while loading attachments."
+ "Can\'t load attachment. Try again."
+ "Network is not ready. Try again."
+ "Delete text"
+ "Switch between entering text and numbers"
+ "Add more participants"
+ "Confirm participants"
+ "Start new conversation"
+ "Select this item"
+ "Play video"
+ "People & Options"
+ "Debug"
+ "People & Options"
+ "General"
+ "People in this conversation"
+ "Make a call"
+ "Send message"
+ "Send message<br/><small>from %s</small>"
+
+ Send photos
+ Send photo
+
+
+ Send audios
+ Send audio
+
+
+ Send videos
+ Send video
+
+
+ Send contact cards
+ Send contact card
+
+
+ Send attachments
+ Send attachment
+
+
+ %d attachments ready to send
+ One attachment ready to send
+
+ "Send feedback"
+ "View in Google Play Store"
+ "Version info"
+ "Version %1$s"
+ "Open-source licences"
+ "Notifications"
+ "Attachment limit reached"
+ "Failed to load attachment."
+ "Add to Contacts?"
+ "Add Contact"
+ "Subject"
+ "Subject: "
+ "%s%s"
+ "Loading contact card"
+ "Couldn\'t load contact card"
+ "View contact card"
+
+ %d contacts
+ %d contact
+
+ "Contact cards"
+ "Birthday"
+ "Notes"
+ "Forward message"
+ "Reply"
+ "+1"
+ "+%d"
+ "SMS disabled"
+ "To send, set Messaging as the default SMS app"
+ "Set Messaging as the default SMS app"
+ "Change"
+ "To receive messages, set Messaging as the default SMS app"
+ "No preferred SIM selected for sending SMS messages"
+ "This app isn\'t allowed by the device owner."
+ "OK"
+ "Too many participants in a conversation"
+
+ Invalid contacts
+ Invalid contact
+
+ "Couldn\'t load camera image"
+ "You: "
+ "%s: "
+ "Draft"
+ "Once you start a new conversation, you’ll see it listed here"
+ "Archived conversations appear here"
+ "Loading conversations…"
+ "Picture"
+ "Audio clip"
+ "In-stream video"
+ "Contact card"
+ "MMS"
+ "Undo"
+ "Retry"
+ "Enter a contact name or phone number to start a new message"
+ "Block"
+ "Block %s"
+ "Unblock %s"
+ "Block %s?"
+ "You\'ll continue to receive messages from this number but won\'t be notified anymore. This conversation will be archived."
+ "Blocked contacts"
+ "UNBLOCK"
+ "Blocked contacts"
+ "Choose image from document library"
+ "Sending message"
+ "Message sent"
+ "Mobile data is turned off. Check your settings."
+ "Can\'t send messages in Aeroplane mode"
+ "Message could not be sent"
+ "Message downloaded"
+ "Mobile data is turned off. Check your settings."
+ "Can\'t download messages in Aeroplane mode"
+ "Message could not be downloaded"
+ "Zero"
+ "One"
+ "Two"
+ "Three"
+ "Four"
+ "Five"
+ "Six"
+ "Seven"
+ "Eight"
+ "Nine"
+ "Can\'t send message with %1$s, error %2$d"
+ "Can\'t send message with unknown operator, error %1$d"
+ "Fwd: %s"
+ "Message not sent: service not activated on network"
+ "Message not sent: invalid destination address"
+ "Message not sent: invalid message"
+ "Message not sent: unsupported content"
+ "Message not sent: unsupported message"
+ "Message not sent: too large"
+ "New message"
+ "View"
+ "Image"
+ "Could not find an appropriate application"
+ "Remove recipient"
+ "New message"
+ "Cancel"
+ "Edit access point"
+ "Not set"
+ "Named"
+ "APN"
+ "MMSC"
+ "MMS proxy"
+ "MMS port"
+ "MCC"
+ "MNC"
+ "APN type"
+ "Delete APN"
+ "New APN"
+ "Save"
+ "Discard"
+ "The Name field can\'t be empty."
+ "The APN cannot be empty."
+ "MCC field must be 3 digits."
+ "MNC field must be 2 or 3 digits."
+ "Restoring default APN settings."
+ "Reset to default"
+ "Reset default APN settings completed"
+ "Untitled"
+ "Access point names"
+ "APNs"
+ "New APN"
+ "Access Point Name settings are not available for this user"
+ "Copy to clipboard?"
+ "Copy"
+ "to %s"
+ "General"
+ "Advanced"
+ "General settings"
+ "Advanced settings"
+ "\"%s\" SIM"
+ "Send individual SMS messages to all recipients. Only you will get any replies"
+ "Send a single MMS to all recipients"
+ "Unknown number"
+ "New message"
+ "New message"
+ "SIM selector"
+ "%1$s selected, SIM selector"
+ "Edit subject"
+ "Select SIM or edit subject"
+ "Touch and hold to record audio"
+ "Start new conversation"
+ "Messaging"
+ "Messaging List"
+ "Messaging"
+ "New message"
+ "Conversation list"
+ "Loading conversations"
+ "Loading messages"
+ "View more conversations"
+ "View more messages"
+ "Conversation deleted"
+ "Conversation deleted. Touch to show a different Messaging conversation"
+ "Blocked"
+ "Unblocked"
+ "Storage space is low. Some data may be lost."
+ "Select attachments"
+ "Confirm selection"
+ "%d selected"
+ "Please remove one or more attachments and try again."
+ "You can try sending your message, but it might not be delivered unless you remove one or more attachments."
+ "You can only send one video per message. Please remove additional videos and try again."
+ "Messaging failed to load attachment."
+ "Send anyway"
+ "Could not start conversation"
+ "%1$s (%2$s)"
+ "%s selected"
+
diff --git a/res/values-en-rIN/arrays.xml b/res/values-en-rIN/arrays.xml
new file mode 100644
index 0000000..94d5aff
--- /dev/null
+++ b/res/values-en-rIN/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "no subject"
+ "nosubject"
+
+
+ "Yes"
+ "No"
+ "OK"
+ "Hehe"
+ "Thanks"
+ "I agree"
+ "Nice"
+ "On my way"
+ "OK, let me get back to you later"
+ ":)"
+ ":("
+
+
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..11048a5
--- /dev/null
+++ b/res/values-en-rIN/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Messaging"
+ "Messaging"
+ "Select conversation"
+ "Settings"
+ "Send Message"
+ "Add an attachment"
+ "Help"
+ "Welcome"
+ "Skip"
+ "Next >"
+ "Next"
+ "Exit"
+ "Settings >"
+ "Settings"
+ "Messaging needs permission to SMS, Phone and Contacts."
+ "You can change permissions in Settings > Apps > Messaging > Permissions."
+ "You can change permissions in Settings, Apps, Messaging, Permissions."
+ "Frequents"
+ "All contacts"
+ "Send to %s"
+ "Capture pictures or video"
+ "Choose images from this device"
+ "Record audio"
+ "Choose photo"
+ "The media is selected."
+ "The media is unselected."
+ "%d selected"
+ "image %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "image"
+ "Record audio"
+ "Share"
+ "Just now"
+ "Now"
+
+ %d mins
+ %d min
+
+
+ %d hours
+ %d hour
+
+
+ %d days
+ %d day
+
+
+ %d weeks
+ a week
+
+
+ %d months
+ a month
+
+
+ %d years
+ a year
+
+ "Class 0 message"
+ "Save"
+ "Device is low on space. Messaging will automatically delete older messages to free up space."
+ "Storage space running out"
+ "Messaging might not send or receive messages until more space is available on your device."
+ "Low SMS storage. You may need to delete messages."
+ "Confirm your phone number"
+ "This one-off step will ensure Messaging will deliver your group messages properly."
+ "Phone number"
+ "Delete all messages with media"
+ "Delete messages older than %s"
+ "Auto-delete messages older than %s"
+ "Ignore"
+ "Delete all messages with media?"
+ "Delete messages older than %s?"
+ "Delete messages older than %s and turn on auto-delete?"
+ "%s said"
+ "You said"
+ "Message from %s"
+ "You sent a message"
+ "Sending…"
+ "Not sent. Touch to try again."
+ "Not sent. Trying again…"
+ "Resend or delete"
+ "Please make a voice call to emergency services. Your text message could not be delivered at this time."
+ "Failed"
+ "New MMS message to download"
+ "New MMS message"
+ "Couldn\'t download"
+ "Touch to try again"
+ "Touch to download"
+ "Download or delete"
+ "Downloading…"
+ "Message expired or not available"
+ "size: %1$s, expiration: %2$s"
+ "Can\'t send. Recipient not valid."
+ "Service not activated on network"
+ "Couldn\'t send due to network problem"
+ "Message expired or not available"
+ "(No subject)"
+ "Unknown sender"
+ "Delivered"
+ "Couldn\'t download message %1$s from %2$s."
+ "Couldn\'t complete database operation due to low memory"
+ "Message not sent"
+ "Some messages not sent in Messaging"
+
+ %d messages in %d conversations
+ %d messages in one conversation
+
+ "Message not downloaded"
+ "Some messages not downloaded in Messaging"
+
+ %d messages in %d conversations
+ %d messages in one conversation
+
+ "Message to %1$s not sent"
+ "Please make a voice call to emergency services. Your text message to %1$s could not be delivered at this time."
+
+ %d new messages
+ New message
+
+ "Start"
+ "Camera not available"
+ "Camera not available"
+ "Video capture not available"
+ "Can\'t save media"
+ "Can\'t take picture"
+ "Back"
+ "Archived"
+ "Delete"
+ "Archive"
+ "Unarchive"
+ "Turn off notifications"
+ "Turn on notifications"
+ "Add contact"
+ "Download"
+ "Send"
+ "Delete"
+ "Delete this message"
+ "This action cannot be undone."
+ "Delete"
+
+ Delete these conversations?
+ Delete this conversation?
+
+ "Delete"
+ "Cancel"
+ "To"
+ "Select multiple images"
+ "Confirm selection"
+ "+%d"
+ "Can\'t record audio. Try again."
+ "Can\'t play audio. Try again."
+ "Couldn\'t save audio. Try again."
+ "Touch & hold"
+ ", "
+ " "
+ ": "
+ " "
+ "Picture"
+ "Audio clip"
+ "Video"
+ "Contact card"
+ "Download"
+ "Reply via SMS"
+ "Reply via MMS"
+ "Reply"
+
+ %d participants
+ %d participant
+
+ "Me"
+ "Contact blocked & archived"
+ "Contact unblocked & unarchived"
+ "%d archived"
+ "%d unarchived"
+ "Notifications turned off"
+ "Notifications turned on"
+ "All set. Touch Send again."
+ "Messaging successfully set as the default SMS app."
+
+ Discard attachments
+ Discard attachment
+
+ "Audio attachment"
+ "Play audio attachment"
+ "Pause"
+ "Message from %s: %s."
+ "Failed message from %s: %s. Time: %s."
+ "Message from %s: %s. Time: %s."
+ "Unsent message to %s: %s. Time: %s."
+ "Sending message to %s: %s. Time: %s."
+ "Failed message to %s: %s. Time: %s."
+ "Message to %s: %s. Time: %s."
+ "Failed message from %s: %s. Time: %s. %s."
+ "Message from %s: %s. Time: %s. %s."
+ "Unsent message to %s: %s. Time: %s."
+ "Sending message to %s: %s. Time: %s."
+ "Failed message to %s: %s. Time: %s."
+ "Message to %s: %s. Time: %s."
+ "Failed message. Touch to retry."
+ "Conversation with %s"
+ "Delete subject"
+ "Capture video"
+ "Capture a still image"
+ "Take picture"
+ "Start recording video"
+ "Switch to full screen camera"
+ "Switch between front and back camera"
+ "Stop recording and attach video"
+ "Stop recording video"
+ "Messaging photos"
+
+ %d photos saved to \"%s\" album
+ %d photo saved to \"%s\" album
+
+
+ %d videos saved to \"%s\" album
+ %d video saved to \"%s\" album
+
+
+ %d attachments saved to \"%s\" album
+ %d attachment saved to \"%s\" album
+
+
+ %d attachments saved to \"Downloads\"
+ %d attachment saved to \"Downloads\"
+
+
+ %d attachments saved
+ %d attachment saved
+
+
+ Couldn\'t save %d attachments
+ Couldn\'t save %d attachment
+
+ "Saved MMS attachment"
+ "Settings"
+ "Archived"
+ "Close"
+ "MMS"
+ "Advanced"
+ "Debug"
+ "Notifications"
+ "Sound"
+ "Silent"
+ "Vibrate"
+ "Blocked"
+ "SMS delivery reports"
+ "Request a delivery report for each SMS that you send"
+ "Auto-retrieve"
+ "Automatically retrieve MMS messages"
+ "Roaming auto-retrieve"
+ "Automatically retrieve MMS when roaming"
+ "Group messaging"
+ "Use MMS to send a single message when there are multiple recipients"
+ "Default SMS app"
+ "Default SMS app"
+
+
+ "Your phone number"
+ "Unknown"
+ "Outgoing message sounds"
+ "Dump SMS"
+ "Dump received SMS raw data into external storage file"
+ "Dump MMS"
+ "Dump received MMS raw data into external storage file"
+ "Wireless alerts"
+ "Message options"
+ "Copy text"
+ "View details"
+ "Delete"
+ "Forward"
+ "Message details"
+ "Type: "
+ "Text message"
+ "Multimedia message"
+ "From: "
+ "To: "
+ "Sent: "
+ "Received: "
+ "Subject: "
+ "Size: "
+ "Priority: "
+ "SIM: "
+ "High"
+ "Normal"
+ "Low"
+ "SIM %s"
+ "Hidden sender address"
+ "Can\'t send message while loading attachments."
+ "Can\'t load attachment. Try again."
+ "Network is not ready. Try again."
+ "Delete text"
+ "Switch between entering text and numbers"
+ "Add more participants"
+ "Confirm participants"
+ "Start new conversation"
+ "Select this item"
+ "Play video"
+ "People & Options"
+ "Debug"
+ "People & Options"
+ "General"
+ "People in this conversation"
+ "Make a call"
+ "Send message"
+ "Send message<br/><small>from %s</small>"
+
+ Send photos
+ Send photo
+
+
+ Send audios
+ Send audio
+
+
+ Send videos
+ Send video
+
+
+ Send contact cards
+ Send contact card
+
+
+ Send attachments
+ Send attachment
+
+
+ %d attachments ready to send
+ One attachment ready to send
+
+ "Send feedback"
+ "View in Google Play Store"
+ "Version info"
+ "Version %1$s"
+ "Open-source licences"
+ "Notifications"
+ "Attachment limit reached"
+ "Failed to load attachment."
+ "Add to Contacts?"
+ "Add Contact"
+ "Subject"
+ "Subject: "
+ "%s%s"
+ "Loading contact card"
+ "Couldn\'t load contact card"
+ "View contact card"
+
+ %d contacts
+ %d contact
+
+ "Contact cards"
+ "Birthday"
+ "Notes"
+ "Forward message"
+ "Reply"
+ "+1"
+ "+%d"
+ "SMS disabled"
+ "To send, set Messaging as the default SMS app"
+ "Set Messaging as the default SMS app"
+ "Change"
+ "To receive messages, set Messaging as the default SMS app"
+ "No preferred SIM selected for sending SMS messages"
+ "This app isn\'t allowed by the device owner."
+ "OK"
+ "Too many participants in a conversation"
+
+ Invalid contacts
+ Invalid contact
+
+ "Couldn\'t load camera image"
+ "You: "
+ "%s: "
+ "Draft"
+ "Once you start a new conversation, you’ll see it listed here"
+ "Archived conversations appear here"
+ "Loading conversations…"
+ "Picture"
+ "Audio clip"
+ "In-stream video"
+ "Contact card"
+ "MMS"
+ "Undo"
+ "Retry"
+ "Enter a contact name or phone number to start a new message"
+ "Block"
+ "Block %s"
+ "Unblock %s"
+ "Block %s?"
+ "You\'ll continue to receive messages from this number but won\'t be notified anymore. This conversation will be archived."
+ "Blocked contacts"
+ "UNBLOCK"
+ "Blocked contacts"
+ "Choose image from document library"
+ "Sending message"
+ "Message sent"
+ "Mobile data is turned off. Check your settings."
+ "Can\'t send messages in Aeroplane mode"
+ "Message could not be sent"
+ "Message downloaded"
+ "Mobile data is turned off. Check your settings."
+ "Can\'t download messages in Aeroplane mode"
+ "Message could not be downloaded"
+ "Zero"
+ "One"
+ "Two"
+ "Three"
+ "Four"
+ "Five"
+ "Six"
+ "Seven"
+ "Eight"
+ "Nine"
+ "Can\'t send message with %1$s, error %2$d"
+ "Can\'t send message with unknown operator, error %1$d"
+ "Fwd: %s"
+ "Message not sent: service not activated on network"
+ "Message not sent: invalid destination address"
+ "Message not sent: invalid message"
+ "Message not sent: unsupported content"
+ "Message not sent: unsupported message"
+ "Message not sent: too large"
+ "New message"
+ "View"
+ "Image"
+ "Could not find an appropriate application"
+ "Remove recipient"
+ "New message"
+ "Cancel"
+ "Edit access point"
+ "Not set"
+ "Named"
+ "APN"
+ "MMSC"
+ "MMS proxy"
+ "MMS port"
+ "MCC"
+ "MNC"
+ "APN type"
+ "Delete APN"
+ "New APN"
+ "Save"
+ "Discard"
+ "The Name field can\'t be empty."
+ "The APN cannot be empty."
+ "MCC field must be 3 digits."
+ "MNC field must be 2 or 3 digits."
+ "Restoring default APN settings."
+ "Reset to default"
+ "Reset default APN settings completed"
+ "Untitled"
+ "Access point names"
+ "APNs"
+ "New APN"
+ "Access Point Name settings are not available for this user"
+ "Copy to clipboard?"
+ "Copy"
+ "to %s"
+ "General"
+ "Advanced"
+ "General settings"
+ "Advanced settings"
+ "\"%s\" SIM"
+ "Send individual SMS messages to all recipients. Only you will get any replies"
+ "Send a single MMS to all recipients"
+ "Unknown number"
+ "New message"
+ "New message"
+ "SIM selector"
+ "%1$s selected, SIM selector"
+ "Edit subject"
+ "Select SIM or edit subject"
+ "Touch and hold to record audio"
+ "Start new conversation"
+ "Messaging"
+ "Messaging List"
+ "Messaging"
+ "New message"
+ "Conversation list"
+ "Loading conversations"
+ "Loading messages"
+ "View more conversations"
+ "View more messages"
+ "Conversation deleted"
+ "Conversation deleted. Touch to show a different Messaging conversation"
+ "Blocked"
+ "Unblocked"
+ "Storage space is low. Some data may be lost."
+ "Select attachments"
+ "Confirm selection"
+ "%d selected"
+ "Please remove one or more attachments and try again."
+ "You can try sending your message, but it might not be delivered unless you remove one or more attachments."
+ "You can only send one video per message. Please remove additional videos and try again."
+ "Messaging failed to load attachment."
+ "Send anyway"
+ "Could not start conversation"
+ "%1$s (%2$s)"
+ "%s selected"
+
diff --git a/res/values-es-rUS/arrays.xml b/res/values-es-rUS/arrays.xml
new file mode 100644
index 0000000..4a3fbb7
--- /dev/null
+++ b/res/values-es-rUS/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "sin asunto"
+ "sinasunto"
+
+
+ "Sí"
+ "No"
+ "Aceptar"
+ "Je, je"
+ "Gracias"
+ "Acepto"
+ "Genial"
+ "Estoy en camino."
+ "De acuerdo, te llamo más tarde."
+ ":)"
+ ":("
+
+
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..1da2400
--- /dev/null
+++ b/res/values-es-rUS/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Centro de mensajes"
+ "Centro de mensajes"
+ "Seleccionar conversación"
+ "Configuración"
+ "Enviar mensaje"
+ "Agregar un archivo adjunto"
+ "Ayuda"
+ "Te damos la bienvenida"
+ "Omitir"
+ "Siguiente >"
+ "Siguiente"
+ "Salir"
+ "Configuración >"
+ "Configuración"
+ "Centro de Mensajes necesita permiso para acceder a SMS, Teléfono y Contactos."
+ "Puedes cambiar los permisos en Configuración > Aplicaciones > Centro de Mensajes > Permisos."
+ "Puedes cambiar los permisos en Configuración, Aplicaciones, Centro de Mensajes, Permisos."
+ "Frecuentes"
+ "Todos los contactos"
+ "Enviar a %s"
+ "Capturar imágenes o video"
+ "Seleccionar imágenes de este dispositivo"
+ "Grabar audio"
+ "Elegir foto"
+ "El medio está seleccionado."
+ "Los medios no están seleccionados."
+ "Seleccionado: %d"
+ "imagen %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "imagen"
+ "Grabar audio"
+ "Compartir"
+ "Recién"
+ "Recién"
+
+ %d minutos
+ %d minuto
+
+
+ %d horas
+ %d hora
+
+
+ %d días
+ %d día
+
+
+ %d semanas
+ una semana
+
+
+ %d meses
+ un mes
+
+
+ %d años
+ un año
+
+ "Mensaje clase 0"
+ "Guardar"
+ "El dispositivo tiene poco espacio de almacenamiento. El Centro de Mensajes borrará automáticamente los mensajes antiguos para liberar espacio."
+ "Queda poco espacio de almacenamiento"
+ "Es posible que Centro de Mensajes no envíe ni reciba mensajes hasta que se libere más espacio en el dispositivo."
+ "Como queda poco espacio para SMS, tal vez debas eliminar mensajes."
+ "Confirmar tu número de teléfono"
+ "Este paso, que se realiza por única vez, asegurará que Centro de Mensajes envíe los mensajes grupales de forma correcta."
+ "Número de teléfono"
+ "Eliminar todos los mensajes con contenido multimedia"
+ "Eliminar mensajes de más de %s"
+ "Eliminar automáticamente mensajes de más de %s"
+ "Ignorar"
+ "¿Eliminar todos los mensajes con contenido multimedia?"
+ "¿Eliminar mensajes de más de %s?"
+ "¿Eliminar mensajes de más de %s y activar la eliminación automática?"
+ "%s dijo"
+ "Tú dijiste"
+ "Mensaje de %s"
+ "Enviaste un mensaje"
+ "Enviando…"
+ "El mensaje no se envió. Toca para volver a intentarlo."
+ "El mensaje no se envió. Reintentando…"
+ "Volver a enviar o eliminar"
+ "Realiza una llamada de voz a los servicios de emergencia. No se pudo enviar el mensaje de texto esta vez."
+ "Error"
+ "Nuevo mensaje MMS para descargar"
+ "Nuevo mensaje MMS"
+ "El mensaje no se pudo descargar."
+ "Toca para volver a intentarlo."
+ "Toca para descargar."
+ "Descargar o eliminar"
+ "Descargando…"
+ "El mensaje venció o no está disponible."
+ "tamaño: %1$s; vencimiento: %2$s"
+ "No se puede enviar porque el destinatario no es válido."
+ "No se activó el servicio en la red."
+ "No se pudo enviar debido a un problema de la red."
+ "El mensaje venció o no está disponible."
+ "(Sin asunto)"
+ "Remitente desconocido"
+ "Entregado"
+ "No se pudo descargar el mensaje %1$s de %2$s."
+ "No se pudo completar la operación de la base de datos por falta de memoria."
+ "Mensaje no enviado"
+ "No se pudieron enviar algunos mensajes en Centro de Mensajes"
+
+ %d mensajes en %d conversaciones
+ %d mensajes en una conversación
+
+ "Mensaje no descargado"
+ "No se pudieron descargar algunos mensajes en Centro de Mensajes"
+
+ %d mensajes en %d conversaciones
+ %d mensaje en una conversación
+
+ "Mensaje al %1$s no enviado"
+ "Realiza una llamada de voz a los servicios de emergencia. No se pudo enviar el mensaje de texto a %1$s esta vez."
+
+ %d mensajes nuevos
+ Un mensaje nuevo
+
+ "Iniciar"
+ "Cámara no disponible"
+ "Cámara no disponible"
+ "Captura de video no disponible"
+ "No se puede guardar el contenido multimedia."
+ "No se puede tomar la foto."
+ "Atrás"
+ "Archivadas"
+ "Eliminar"
+ "Archivo"
+ "Eliminar del archivo"
+ "Desactivar notificaciones"
+ "Activar notificaciones"
+ "Agregar contacto"
+ "Descargar"
+ "Enviar"
+ "Eliminar"
+ "¿Deseas eliminar este mensaje?"
+ "Esta acción no se puede deshacer."
+ "Eliminar"
+
+ ¿Deseas borrar estas conversaciones?
+ ¿Deseas borrar esta conversación?
+
+ "Eliminar"
+ "Cancelar"
+ "Para"
+ "Seleccionar varias imágenes"
+ "Confirmar selección"
+ "%d más"
+ "No se puede grabar el audio. Vuelve a intentarlo."
+ "No se puede reproducir el audio. Vuelve a intentarlo."
+ "No se pudo guardar el audio. Vuelve a intentarlo."
+ "Mantener presionado"
+ ", "
+ " "
+ ": "
+ " "
+ "Imagen"
+ "Clip de audio"
+ "Video"
+ "Tarjeta de contacto"
+ "Descargar"
+ "Responder con SMS"
+ "Responder (MMS)"
+ "Responder"
+
+ %d participantes
+ %d participante
+
+ "Yo"
+ "Contacto bloqueado y archivado"
+ "Contacto desbloqueado y sin archivar"
+ "%d archivada(s)"
+ "%d no archivada(s)"
+ "Notificaciones desactivadas"
+ "Notificaciones activadas"
+ "Todo listo. Vuelve a tocar Enviar."
+ "Se estableció de forma correcta Centro de Mensajes como tu aplicación de SMS predeterminada."
+
+ Descartar archivos adjuntos
+ Descartar archivo adjunto
+
+ "Archivo adjunto de audio"
+ "Reproducir archivo adjunto de audio"
+ "Pausa"
+ "Mensaje de %s: %s"
+ "Error del mensaje de %s: %s Hora: %s"
+ "Mensaje de %s: %s Hora: %s"
+ "Mensaje no enviado a %s: %s Hora: %s"
+ "Enviando mensaje a %s: %s Hora: %s"
+ "Error de mensaje a %s: %s Hora: %s"
+ "Mensaje a %s: %s Hora: %s"
+ "Error del mensaje de %s: %s Hora: %s%s"
+ "Mensaje de %s: %s Hora: %s%s"
+ "Mensaje no enviado a %s: %s Hora: %s"
+ "Enviando mensaje a %s: %s Hora: %s"
+ "Error del mensaje a %s: %s Hora: %s"
+ "Mensaje a %s: %s Hora: %s"
+ "Se produjo un error en el mensaje. Toca para volver a intentarlo."
+ "Conversación con %s"
+ "Eliminar asunto"
+ "Capturar video"
+ "Capturar una imagen fija"
+ "Tomar fotografía"
+ "Iniciar grabación de video"
+ "Cambiar a cámara en pantalla completa"
+ "Alternar entre cámara frontal y trasera"
+ "Detener la grabación y adjuntar video"
+ "Detener la grabación de video"
+ "Fotos de Centro de Mensajes"
+
+ Se guardaron %d fotos en el álbum \"%s\"
+ Se guardó %d foto en el álbum \"%s\"
+
+
+ Se guardaron %d videos en el álbum \"%s\"
+ Se guardó %d video en el álbum \"%s\"
+
+
+ Se guardaron %d archivos adjuntos en el álbum \"%s\"
+ Se guardó %d archivo adjunto en el álbum \"%s\"
+
+
+ Se guardaron %d archivos adjuntos en \"Descargas\"
+ Se guardó %d archivo adjunto en \"Descargas\"
+
+
+ Se guardaron %d archivos adjuntos
+ Se guardó %d archivo adjunto
+
+
+ No se pudieron guardar %d archivos adjuntos
+ No se pudo guardar %d archivo adjunto
+
+ "Archivo adjunto de MMS guardado"
+ "Configuración"
+ "Archivadas"
+ "Cerrar"
+ "MMS"
+ "Avanzada"
+ "Depurar"
+ "Notificaciones"
+ "Sonido"
+ "Silencio"
+ "Vibrar"
+ "Bloqueado"
+ "Informes de entrega de SMS"
+ "Solicitar un informe de entrega al enviar un SMS"
+ "Recuperación automática"
+ "Recuperar mensajes MMS automáticamente"
+ "Recuperación automática en roaming"
+ "Recuperar MMS automáticamente en roaming"
+ "Mensajes grupales"
+ "Utiliza MMS para enviar un mismo mensaje a varios destinatarios."
+ "Aplicación de SMS predeterminada"
+ "Aplicación de SMS predeterminada"
+
+
+ "Tu número de teléfono"
+ "Desconocido"
+ "Sonidos de mensaje saliente"
+ "Volcar SMS"
+ "Volcar datos sin procesar de SMS en el archivo de almacenamiento externo"
+ "Volcar MMS"
+ "Volcar datos sin procesar de MMS recibidos en un archivo de almacenamiento externo"
+ "Alertas inalámbricas"
+ "Opciones de mensaje"
+ "Copiar el texto"
+ "Ver detalles"
+ "Eliminar"
+ "Reenviar"
+ "Detalles del mensaje"
+ "Tipo: "
+ "Mensaje de texto"
+ "Mensaje multimedia"
+ "De: "
+ "Para: "
+ "Enviado: "
+ "Fecha de recepción: "
+ "Asunto: "
+ "Tamaño: "
+ "Prioridad: "
+ "SIM: "
+ "Alta"
+ "Normal"
+ "Baja"
+ "SIM %s"
+ "Dirección de remitente oculta"
+ "No se pueden enviar mensajes mientras se cargan adjuntos."
+ "No se puede cargar el archivo adjunto. Vuelve a intentarlo."
+ "La red no está lista. Vuelve a intentarlo."
+ "Suprimir texto"
+ "Cambiar entre ingresar texto y números"
+ "Agregar más participantes"
+ "Confirmar participantes"
+ "Comenzar una nueva conversación"
+ "Seleccionar este elemento"
+ "Reproducir video"
+ "Contactos y opciones"
+ "Depurar"
+ "Contactos y opciones"
+ "General"
+ "Contactos en esta conversación"
+ "Hacer una llamada"
+ "Enviar mensaje"
+ "Enviar mensaje<br/><small>de %s</small>"
+
+ Enviar fotos
+ Enviar foto
+
+
+ Enviar audios
+ Enviar audio
+
+
+ Enviar videos
+ Enviar video
+
+
+ Enviar tarjetas de contacto
+ Enviar tarjeta de contacto
+
+
+ Enviar archivos adjuntos
+ Enviar archivo adjunto
+
+
+ %d archivos adjuntos listos para enviar
+ Un archivo adjunto listo para enviar
+
+ "Enviar comentarios"
+ "Ver en Google Play Store"
+ "Información de la versión"
+ "Versión %1$s"
+ "Licencias de código abierto"
+ "Notificaciones"
+ "Se alcanzó el límite de archivos adjuntos."
+ "Se produjo un error al cargar el archivo adjunto."
+ "¿Agregar a contactos?"
+ "Agregar contacto"
+ "Asunto"
+ "Asunto: "
+ "%s%s"
+ "Cargando tarjeta de contacto"
+ "No se pudo cargar la tarjeta de contacto."
+ "Ver tarjeta de contacto"
+
+ %d contactos
+ %d contacto
+
+ "Tarjetas de contactos"
+ "Fecha de nacimiento"
+ "Notas"
+ "Reenviar mensaje"
+ "Responder"
+ "Hacer +1"
+ "+%d"
+ "SMS inhabilitados"
+ "Establecer Centro de mensajes como la aplicación de SMS predeterminada para enviar mensajes"
+ "Establecer Centro de Mensajes como la aplicación de SMS predeterminada"
+ "Cambiar"
+ "Establecer Centro de mensajes como la aplicación de SMS predeterminada para recibir mensajes"
+ "No se seleccionó ninguna SIM preferida para el envío de mensajes SMS."
+ "El propietario del dispositivo no permite esta aplicación."
+ "Aceptar"
+ "Demasiados participantes en una conversación"
+
+ Contactos no válidos
+ Contacto no válido
+
+ "No se pudo cargar la imagen de la cámara."
+ "Tú: "
+ "%s: "
+ "Borrador"
+ "Cuando inicies una conversación nueva, aparecerá aquí."
+ "Las conversaciones archivadas aparecen aquí."
+ "Cargando conversaciones…"
+ "Imagen"
+ "Clip de audio"
+ "Video"
+ "Tarjeta de contacto"
+ "MMS"
+ "Deshacer"
+ "Volver a intentar"
+ "Ingresa un nombre de contacto o número de teléfono para crear un nuevo mensaje."
+ "Bloquear"
+ "Bloquear a %s"
+ "Desbloquear a %s"
+ "¿Bloquear a %s?"
+ "Seguirás recibiendo mensajes de este número, pero no verás notificaciones. Esta conversación se archivará."
+ "Contactos bloqueados"
+ "DESBLOQUEAR"
+ "Contactos bloqueados"
+ "Seleccionar imagen de la galería de documentos"
+ "Enviando el mensaje"
+ "Se envió el mensaje."
+ "Los datos móviles están desactivados. Comprueba la configuración."
+ "No se pueden enviar mensajes en modo de avión."
+ "No se pudo enviar el mensaje."
+ "Se descargó el mensaje."
+ "Los datos móviles están desactivados. Comprueba la configuración."
+ "No se pueden descargar mensajes en modo de avión."
+ "No se pudo descargar el mensaje."
+ "Cero"
+ "Uno"
+ "Dos"
+ "Tres"
+ "Cuatro"
+ "Cinco"
+ "Seis"
+ "Siete"
+ "Ocho"
+ "Nueve"
+ "Error %2$d. No se puede enviar el mensaje con %1$s."
+ "Error %1$d. No se puede enviar el mensaje con un proveedor desconocido."
+ "Rv: %s"
+ "No se envió el mensaje porque el servicio no está activado en la red."
+ "Mensaje no enviado: dirección de destino no válida"
+ "Mensaje no enviado: mensaje no válido"
+ "Mensaje no enviado: contenido no admitido"
+ "Mensaje no enviado: mensaje no admitido"
+ "Mensaje no enviado: demasiado largo"
+ "Mensaje nuevo"
+ "Ver"
+ "Imagen"
+ "No se pudo encontrar una aplicación adecuada."
+ "Eliminar destinatario"
+ "Mensaje nuevo"
+ "Cancelar"
+ "Editar el punto de acceso"
+ "Sin establecer"
+ "Nombre"
+ "APN"
+ "MMSC"
+ "Proxy de MMS"
+ "Puerto MMS"
+ "MCC"
+ "MNC"
+ "Tipo de APN"
+ "Eliminar APN"
+ "APN nuevo"
+ "Guardar"
+ "Descartar"
+ "El campo Nombre no puede estar vacío."
+ "El APN no puede estar vacío."
+ "El campo de MCC debe contener tres dígitos."
+ "El campo MNC debe contener dos o tres dígitos."
+ "Restaurando la configuración APN predeterminada"
+ "Restablecer parámetros predeterminados"
+ "Se restableció la configuración predeterminada de APN."
+ "Sin título"
+ "Nombres de puntos de acceso"
+ "APN"
+ "APN nuevo"
+ "La configuración del nombre de punto de acceso no está disponible para este usuario."
+ "¿Copiar en el portapapeles?"
+ "Copiar"
+ "a %s"
+ "General"
+ "Avanzada"
+ "Configuración general"
+ "Configuración avanzada"
+ "SIM \"%s\""
+ "Enviar mensajes de SMS individuales a todos los destinatarios (solo tú recibirás las respuestas)."
+ "Enviar un único MMS a todos los destinatarios"
+ "Número desconocido"
+ "Mensaje nuevo"
+ "Mensaje nuevo"
+ "Selector de SIM"
+ "Se seleccionó %1$s, selector de SIM."
+ "Editar asunto"
+ "Seleccionar SIM o editar asunto"
+ "Mantén presionado para grabar audio."
+ "Comenzar una nueva conversación"
+ "Centro de mensajes"
+ "Lista de Centro de Mensajes"
+ "Centro de mensajes"
+ "Mensaje nuevo"
+ "Lista de conversaciones"
+ "Cargando conversaciones"
+ "Cargando mensajes…"
+ "Ver más conversaciones"
+ "Ver más mensajes"
+ "Se eliminó la conversación."
+ "Se borró la conversación. Toca para mostrar otra conversación de Centro de Mensajes"
+ "Bloqueado"
+ "Desbloqueado"
+ "Hay poco espacio de almacenamiento. Podrían perderse algunos datos."
+ "Seleccionar archivos adjuntos"
+ "Confirmar selección"
+ "Seleccionado: %d"
+ "Elimina uno o más archivos adjuntos y vuelve a intentarlo."
+ "Puedes intentar enviar el mensaje, pero podría no enviarse a menos que elimines uno más archivos adjuntos."
+ "Solo puedes enviar un video por mensaje. Quita los videos adicionales y vuelve a intentarlo."
+ "Centro de Mensajes no pudo cargar el archivo adjunto."
+ "Enviar de todas formas"
+ "No se pudo iniciar la conversación."
+ "%1$s (%2$s)"
+ "Se seleccionó %s."
+
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
new file mode 100644
index 0000000..ca8e06b
--- /dev/null
+++ b/res/values-es/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "sin asunto"
+ "sinasunto"
+
+
+ "Sí"
+ "No"
+ "Ok"
+ "Je, je"
+ "Gracias"
+ "Acepto"
+ "Genial"
+ "Voy de camino"
+ "Vale, te llamo más tarde"
+ ":)"
+ ":("
+
+
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
new file mode 100644
index 0000000..78ffe68
--- /dev/null
+++ b/res/values-es/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Mensajes"
+ "Mensajes"
+ "Seleccionar conversación"
+ "Ajustes"
+ "Enviar mensaje"
+ "Adjuntar un archivo"
+ "Ayuda"
+ "Te damos la bienvenida"
+ "Saltar"
+ "Siguiente >"
+ "Siguiente"
+ "Salir"
+ "Ajustes >"
+ "Ajustes"
+ "Mensajes necesita permiso para acceder a los SMS, al teléfono y a los contactos."
+ "Puedes cambiar los permisos en Ajustes > Aplicaciones > Mensajes > Permisos."
+ "Puedes cambiar los permisos en Ajustes, Aplicaciones, Mensajes, Permisos."
+ "Frecuentes"
+ "Todos los contactos"
+ "Enviar a %s"
+ "Capturar imágenes o vídeo"
+ "Seleccionar imágenes de este dispositivo"
+ "Grabar audio"
+ "Elegir foto"
+ "Contenido multimedia seleccionado."
+ "Contenido multimedia no seleccionado."
+ "Seleccionado: %d"
+ "imagen del %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "imagen"
+ "Grabar audio"
+ "Compartir"
+ "Ahora mismo"
+ "Ahora"
+
+ %d min
+ %d min
+
+
+ %d horas
+ %d hora
+
+
+ %d días
+ %d día
+
+
+ %d semanas
+ una semana
+
+
+ %d meses
+ un mes
+
+
+ %d años
+ un año
+
+ "Mensaje de clase 0"
+ "Guardar"
+ "Casi no queda espacio en el dispositivo. La aplicación Mensajes eliminará automáticamente los mensajes más antiguos para liberar espacio."
+ "Queda poco espacio"
+ "Es posible que Mensajes no envíe ni reciba mensajes hasta que haya más espacio disponible en el dispositivo."
+ "Queda poco espacio para recibir SMS. Es posible que tengas que eliminar mensajes."
+ "Confirma tu número de teléfono"
+ "Este paso único garantiza que Mensajes enviará tus mensajes de grupo correctamente."
+ "Número de teléfono"
+ "Eliminar todos los mensajes con archivos multimedia"
+ "Eliminar mensajes anteriores a %s"
+ "Eliminar automáticamente mensajes anteriores a %s"
+ "Ignorar"
+ "¿Eliminar todos los mensajes con archivos multimedia?"
+ "¿Eliminar mensajes anteriores a %s?"
+ "¿Eliminar mensajes anteriores a %s y activar eliminación automática?"
+ "%s ha dicho"
+ "Has dicho"
+ "Mensaje de %s"
+ "Has enviado un mensaje"
+ "Enviando..."
+ "No enviado. Toca para volver a intentarlo."
+ "No enviado. Volviendo a intentar…"
+ "Volver a enviar o eliminar"
+ "Llama a los servicios de emergencias. Tu mensaje de texto no se puede entregar en estos momentos."
+ "Error"
+ "Nuevo mensaje MMS que descargar"
+ "Nuevo mensaje MMS"
+ "Error al descargar"
+ "Toca para volver a intentarlo"
+ "Toca para descargar"
+ "Descargar o eliminar"
+ "Descargando..."
+ "El mensaje ha caducado o no está disponible"
+ "tamaño: %1$s, vencimiento: %2$s"
+ "No se puede enviar porque el destinatario no es válido."
+ "No se ha activado el servicio en la red"
+ "No se ha podido enviar por un problema de red"
+ "El mensaje ha caducado o no está disponible"
+ "(Sin asunto)"
+ "Destinatario desconocido"
+ "Entregado"
+ "No se ha podido descargar el mensaje %1$s de %2$s."
+ "No se ha podido completar la operación de la base de datos por falta de memoria"
+ "Mensaje no enviado"
+ "Hay algunos mensajes no enviados en Mensajes"
+
+ %d mensajes en %d conversaciones
+ %d mensajes en una conversación
+
+ "Mensaje no descargado"
+ "Algunos mensajes no se han descargado en Mensajes"
+
+ %d mensajes en %d conversaciones
+ %d mensajes en una conversación
+
+ "Mensaje para %1$s no enviado"
+ "Llama a los servicios de emergencias. Tu mensaje de texto enviado al número %1$s no se puede entregar en estos momentos."
+
+ %d mensajes nuevos
+ Mensaje nuevo
+
+ "Iniciar"
+ "Cámara no disponible"
+ "Cámara no disponible"
+ "Captura de vídeo no disponible"
+ "No se puede guardar el archivo multimedia"
+ "No se pueden hacer fotos"
+ "Atrás"
+ "Archivado"
+ "Eliminar"
+ "Archivar"
+ "No archivar"
+ "Desactivar notificaciones"
+ "Activar notificaciones"
+ "Añadir contacto"
+ "Descargar"
+ "Enviar"
+ "Eliminar"
+ "¿Eliminar este mensaje?"
+ "Esta acción no se puede deshacer."
+ "Eliminar"
+
+ ¿Eliminar estas conversaciones?
+ ¿Eliminar esta conversación?
+
+ "Eliminar"
+ "Cancelar"
+ "Para"
+ "Seleccionar varias imágenes"
+ "Confirmar selección"
+ "+%d"
+ "No se puede grabar el audio. Vuelve a intentarlo."
+ "No se puede reproducir el audio. Vuelve a intentarlo."
+ "No se ha podido guardar el audio. Vuelve a intentarlo."
+ "Mantener pulsado"
+ ", "
+ " "
+ ": "
+ " "
+ "Imagen"
+ "Fragmento de audio"
+ "Vídeo"
+ "Tarjeta de contacto"
+ "Descargar"
+ "Responder con SMS"
+ "Responder por MMS"
+ "Responder"
+
+ %d participantes
+ %d participante
+
+ "Yo"
+ "Contacto bloqueado y archivado"
+ "Contacto desbloqueado y no archivado"
+ "%d archivadas"
+ "%d no archivadas"
+ "Notificaciones desactivadas"
+ "Notificaciones activadas"
+ "Listo. Toca Enviar de nuevo."
+ "Mensajes establecida como aplicación de SMS predeterminada."
+
+ Descartar archivos adjuntos
+ Descartar archivo adjunto
+
+ "Archivo de audio adjunto"
+ "Reproducir archivo de audio adjunto"
+ "Pausar"
+ "Mensaje de %s: %s."
+ "Error del mensaje de %s: %s. Hora: %s."
+ "Mensaje de %s: %s. Hora: %s."
+ "Mensaje no enviado a %s: %s. Hora: %s."
+ "Enviando mensaje a %s: %s. Hora: %s."
+ "Error del mensaje para %s: %s. Hora: %s."
+ "Mensaje para %s: %s. Hora: %s."
+ "Error del mensaje de %s: %s. Hora: %s. %s."
+ "Mensaje de %s: %s. Hora: %s. %s."
+ "Mensaje no enviado a %s: %s. Hora: %s."
+ "Enviando mensaje a %s: %s. Hora: %s."
+ "Error del mensaje para %s: %s. Hora: %s."
+ "Mensaje para %s: %s. Hora: %s."
+ "Error del mensaje. Toca para volver a intentarlo."
+ "Conversación con %s"
+ "Eliminar asunto"
+ "Capturar vídeo"
+ "Capturar una imagen fija"
+ "Hacer foto"
+ "Iniciar grabación de vídeo"
+ "Cambiar a cámara en pantalla completa"
+ "Cambiar de la cámara frontal a la trasera"
+ "Dejar de grabar y adjuntar vídeo"
+ "Detener grabación de vídeo"
+ "Fotos de Mensajes"
+
+ %d fotos guardadas en el álbum %s
+ %d foto guardada en el álbum %s
+
+
+ %d vídeos guardados en el álbum %s
+ %d vídeo guardado en el álbum %s
+
+
+ %d archivos adjuntos guardados en el álbum %s
+ %d archivo adjunto guardado en el álbum %s
+
+
+ %d archivos adjuntos guardados en Descargas
+ %d archivo adjunto guardado en Descargas
+
+
+ %d archivos adjuntos guardados
+ %d archivo adjunto guardado
+
+
+ No se han podido guardar %d archivos adjuntos
+ No se ha podido guardar %d archivo adjunto
+
+ "Adjunto de MMS guardado"
+ "Ajustes"
+ "Archivado"
+ "Cerrar"
+ "MMS"
+ "Opciones avanzadas"
+ "Depurar"
+ "Notificaciones"
+ "Sonido"
+ "Silencio"
+ "Vibrar"
+ "Bloqueado"
+ "Informes de entrega de SMS"
+ "Solicitar un informe de entrega al enviar un SMS"
+ "Recuperar automáticamente"
+ "Recuperar automáticamente mensajes MMS"
+ "Autorrecuperar en itinerancia"
+ "Recuperar MMS automáticamente en itinerancia"
+ "Mensaje de grupo"
+ "Usar MMS para enviar un único mensaje a varios destinatarios"
+ "Aplicación de SMS predeterminada"
+ "Aplicación de SMS predeterminada"
+
+
+ "Tu número de teléfono"
+ "Desconocido"
+ "Sonidos de mensajes enviados"
+ "Volcar SMS"
+ "Volcar datos sin procesar de SMS recibidos en un archivo del almacenamiento externo"
+ "Volcar MMS"
+ "Volcar datos sin procesar de MMS recibidos en un archivo del almacenamiento externo"
+ "Alertas inalámbricas"
+ "Opciones de mensaje"
+ "Copiar texto"
+ "Ver detalles"
+ "Eliminar"
+ "Reenviar"
+ "Detalles de mensaje"
+ "Tipo: "
+ "Mensaje de texto"
+ "Mensaje multimedia"
+ "De: "
+ "A: "
+ "Enviado: "
+ "Recibido: "
+ "Asunto: "
+ "Tamaño: "
+ "Prioridad: "
+ "SIM: "
+ "Alta"
+ "Normal"
+ "Baja"
+ "SIM %s"
+ "Dirección de remitente oculta"
+ "No se pueden enviar mensajes mientras se cargan adjuntos."
+ "No se ha podido cargar el archivo adjunto. Vuelve a intentarlo."
+ "La red no está lista. Inténtalo de nuevo."
+ "Eliminar texto"
+ "Alternar entre introducir texto y números"
+ "Añadir más participantes"
+ "Confirmar participantes"
+ "Iniciar nueva conversación"
+ "Seleccionar este elemento"
+ "Reproducir vídeo"
+ "Contactos y opciones"
+ "Depurar"
+ "Contactos y opciones"
+ "Generales"
+ "Contactos en esta conversación"
+ "Hacer una llamada"
+ "Enviar mensaje"
+ "Enviar mensaje<br/><small>de %s</small>"
+
+ Enviar fotos
+ Enviar foto
+
+
+ Enviar archivos de audio
+ Enviar archivo de audio
+
+
+ Enviar vídeos
+ Enviar vídeo
+
+
+ Enviar tarjetas de contacto
+ Enviar tarjeta de contacto
+
+
+ Enviar archivos adjuntos
+ Enviar archivo adjunto
+
+
+ %d archivos adjuntos listos para enviar
+ Un archivo adjunto listo para enviar
+
+ "Danos tu opinión"
+ "Ver en Google Play Store"
+ "Información de la versión"
+ "Versión %1$s"
+ "Licencias código abierto"
+ "Notificaciones"
+ "Límite de archivos adjuntos alcanzado"
+ "Error al cargar archivo adjunto."
+ "¿Añadir a contactos?"
+ "Añadir contacto"
+ "Asunto"
+ "Asunto: "
+ "%s%s"
+ "Cargando tarjeta de contacto"
+ "No se ha podido cargar la tarjeta de contacto"
+ "Ver tarjeta de contacto"
+
+ %d contactos
+ %d contacto
+
+ "Tarjetas de contacto"
+ "Cumpleaños"
+ "Notas"
+ "Reenviar mensaje"
+ "Responder"
+ "+1"
+ "+%d"
+ "SMS inhabilitados"
+ "Para enviar mensajes, establece Mensajes como aplicación de SMS predeterminada"
+ "Establecer Mensajes como aplicación de SMS predeterminada"
+ "Cambiar"
+ "Para recibir mensajes, establece Mensajes como aplicación de SMS predeterminada"
+ "No se ha seleccionado la SIM preferida para enviar mensajes SMS"
+ "El propietario del dispositivo no permite esta aplicación."
+ "Aceptar"
+ "Demasiados participantes en una conversación"
+
+ Contactos no válidos
+ Contacto no válido
+
+ "No se ha podido cargar la imagen de la cámara"
+ "Tú: "
+ "%s: "
+ "Borrador"
+ "Cuando inicies una conversación nueva, aparecerá aquí"
+ "Aquí aparecen las conversaciones archivadas"
+ "Cargando conversaciones..."
+ "Imagen"
+ "Fragmento de audio"
+ "Vídeo"
+ "Tarjeta de contacto"
+ "MMS"
+ "Deshacer"
+ "Volver a intentar"
+ "Escribe el nombre de un contacto o un número de teléfono para iniciar un mensaje nuevo"
+ "Bloquear"
+ "Bloquear a %s"
+ "Desbloquear a %s"
+ "¿Bloquear a %s?"
+ "Seguirás recibiendo mensajes de este número pero no volverás a recibir notificaciones. Esta conversación se archivará."
+ "Contactos bloqueados"
+ "DESBLOQUEAR"
+ "Contactos bloqueados"
+ "Selecciona imagen de la biblioteca de documentos"
+ "Enviando mensaje"
+ "Mensaje enviado"
+ "Los datos móviles están desactivados. Comprueba los ajustes."
+ "No se puede enviar mensajes en modo avión"
+ "Error al enviar mensaje"
+ "Mensaje descargado"
+ "Los datos móviles están desactivados. Comprueba los ajustes."
+ "No se pueden descargar mensajes en modo avión"
+ "No se ha podido descargar el mensaje"
+ "Cero"
+ "Uno"
+ "Dos"
+ "Tres"
+ "Cuatro"
+ "Cinco"
+ "Seis"
+ "Siete"
+ "Ocho"
+ "Nueve"
+ "No se puede enviar el mensaje con %1$s (error %2$d)"
+ "No se puede enviar el mensaje con un operador desconocido (error %1$d)"
+ "Rv: %s"
+ "Mensaje no enviado porque el servicio no se ha activado en la red"
+ "Mensaje no enviado: dirección de destino no válida"
+ "Mensaje no enviado: mensaje no válido"
+ "Mensaje no enviado: contenido no admitido"
+ "Mensaje no enviado: mensaje no admitido"
+ "Mensaje no enviado: demasiado largo"
+ "Mensaje nuevo"
+ "Ver"
+ "Imagen"
+ "No se ha podido encontrar una aplicación adecuada"
+ "Eliminar destinatario"
+ "Mensaje nuevo"
+ "Cancelar"
+ "Editar punto de acceso"
+ "No definida"
+ "Nombre"
+ "APN"
+ "MMSC"
+ "Proxy para MMS"
+ "Puerto para MMS"
+ "MCC"
+ "MNC"
+ "Tipo de APN"
+ "Eliminar APN"
+ "Nuevo APN"
+ "Guardar"
+ "Descartar"
+ "El campo Nombre no puede estar vacío."
+ "El campo APN no puede estar vacío."
+ "El campo MCC debe contener 3 dígitos."
+ "El campo MNC debe contener 2 o 3 dígitos."
+ "Restaurando la configuración de APN predeterminada"
+ "Restablecer ajustes"
+ "Se ha restablecido la configuración de APN predeterminada."
+ "Sin título"
+ "Nombre de puntos de acceso"
+ "APN"
+ "Nuevo APN"
+ "Los ajustes del nombre de punto de acceso no están disponibles para este usuario"
+ "¿Copiar al portapapeles?"
+ "Copiar"
+ "para %s"
+ "General"
+ "Opciones avanzadas"
+ "Ajustes generales"
+ "Ajustes avanzados"
+ "SIM \"%s\""
+ "Enviar mensajes SMS individuales. Solo tú recibirás las respuestas"
+ "Enviar un único MMS a todos los destinatarios"
+ "Número desconocido"
+ "Mensaje nuevo"
+ "Mensaje nuevo."
+ "Selector de SIM"
+ "%1$s seleccionada, selector de SIM"
+ "Editar asunto"
+ "Seleccionar SIM o editar asunto"
+ "Mantener pulsado para grabar audio"
+ "Iniciar nueva conversación"
+ "Mensajes"
+ "Lista de mensajes"
+ "Mensajes"
+ "Mensaje nuevo"
+ "Lista de conversaciones"
+ "Cargando conversaciones"
+ "Cargando mensajes"
+ "Ver más conversaciones"
+ "Ver más mensajes"
+ "Conversación eliminada"
+ "Conversación eliminada. Toca para ver otra conversación de Mensajes"
+ "Bloqueado"
+ "Desbloqueado"
+ "Queda poco espacio de almacenamiento. Es posible que se pierdan algunos datos."
+ "Seleccionar adjuntos"
+ "Confirmar selección"
+ "Seleccionado: %d"
+ "Elimina uno o varios archivos adjuntos y vuelve a intentarlo."
+ "Puedes probar a enviar el mensaje, pero quizás no se envíe hasta que elimines uno o varios archivos adjuntos."
+ "Solo puedes enviar un vídeo por mensaje. Elimina más vídeos y vuelve a intentarlo."
+ "El mensaje no ha podido cargar el archivo adjunto."
+ "Enviar de todos modos"
+ "No se ha podido iniciar la conversación"
+ "%1$s (%2$s)"
+ "%s seleccionada"
+
diff --git a/res/values-et-rEE/arrays.xml b/res/values-et-rEE/arrays.xml
new file mode 100644
index 0000000..16e1744
--- /dev/null
+++ b/res/values-et-rEE/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "teema puudub"
+ "teema puudub"
+
+
+ "Jah"
+ "Ei"
+ "OK"
+ "Hehe"
+ "Aitäh"
+ "Nõustun"
+ "Tore"
+ "Olen teel"
+ "OK, vastan sulle hiljem"
+ ":)"
+ ":("
+
+
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
new file mode 100644
index 0000000..79097fe
--- /dev/null
+++ b/res/values-et-rEE/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Sõnumside"
+ "Sõnumside"
+ "Vestluse valimine"
+ "Seaded"
+ "Saada sõnum"
+ "Manuse lisamine"
+ "Abi"
+ "Tere tulemast"
+ "Vahelejätmine"
+ "Järgmine >"
+ "Järgmine"
+ "Väljumine"
+ "Seaded >"
+ "Seaded"
+ "Sõnumside vajab luba SMS-idele, telefonile ja kontaktidele juurdepääsemiseks."
+ "Saate muuta lube jaotises Seaded > Rakendused > Sõnumside > Load."
+ "Lubade muutmiseks tehke valikud Seaded, Rakendused, Sõnumside, Load."
+ "Sagedased"
+ "Kõik kontaktid"
+ "Saada numbrile %s"
+ "Jäädvustage pilte või videoid"
+ "Kujutiste valimine sellest seadmest"
+ "Heli salvestamine"
+ "Foto valimine"
+ "Meedia on valitud."
+ "Meediat pole valitud."
+ "%d on valitud"
+ "pilt kuupäevaga %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "pilt"
+ "Heli salvestamine"
+ "Jagamine"
+ "Hetk tagasi"
+ "Praegu"
+
+ %d min
+ %d min
+
+
+ %d tundi
+ %d tund
+
+
+ %d päeva
+ %d päev
+
+
+ %d nädalat
+ nädal
+
+
+ %d kuud
+ kuu
+
+
+ %d aastat
+ aasta
+
+ "0-klassi sõnum"
+ "Salvesta"
+ "Seadmes on vähe ruumi. Sõnumside kustutab ruumi vabastamiseks automaatselt vanemad sõnumid."
+ "Talletusruum hakkab täis saama"
+ "Sõnumside ei pruugi sõnumeid saata ega vastu võtta seni, kuni seadmes on rohkem vaba ruumi."
+ "SMS-ide jaoks on vähe salvestusruumi. Peate võib-olla mõned sõnumid kustutama."
+ "Kinnitage oma telefoninumber"
+ "See ühekordne toiming tagab, et rakendus Sõnumside edastab teie grupisõnumid õigesti."
+ "Telefoninumber"
+ "Kustuta kõik meediumifaile sisaldavad sõnumid"
+ "Kustuta sõnumid, mis on vanemad kui %s"
+ "Kustuta automaatselt sõnumid, mis on vanemad kui %s"
+ "Eira"
+ "Kas kustutada kõik meediaga sõnumid?"
+ "Kas kustutada sõnumid, mis on vanemad kui %s?"
+ "Kas kustutada automaatselt sõnumid, mis on vanemad kui %s, ja lülitada sisse automaatne kustutamine?"
+ "%s ütles:"
+ "Ütlesite:"
+ "Sõnum saatjalt %s"
+ "Saatsite sõnumi"
+ "Saatmine ..."
+ "Ei saadetud. Puudutage uuesti proovimiseks."
+ "Ei saadetud. Proovitakse uuesti ..."
+ "Saada uuesti või kustuta"
+ "Helistage hädaabiteenusele. Teie tekstsõnumit ei õnnestunud praegu edastada."
+ "Ebaõnnestus"
+ "Uus MMS-sõnum allalaadimiseks"
+ "Uus MMS-sõnum"
+ "Ei saanud alla laadida"
+ "Puudutage uuesti proovimiseks"
+ "Puudutage allalaadimiseks"
+ "Laadi alla või kustuta"
+ "Allalaadimine ..."
+ "Sõnum on aegunud või pole saadaval"
+ "suurus: %1$s, aegumine: %2$s"
+ "Ei õnnestu saata. Saaja ei ole õige."
+ "Teenus pole võrgus aktiveeritud"
+ "Võrguprobleemi tõttu ei õnnestunud saata"
+ "Sõnum on aegunud või pole saadaval"
+ "(Teema puudub.)"
+ "Tundmatu saatja"
+ "Kohale toimetatud"
+ "Ei saa laadida alla sõnumit %1$s, mille saatis %2$s."
+ "Vähese mälu tõttu ei õnnestunud andmebaasi toimingut lõpule viia"
+ "Sõnumit ei saadetud"
+ "Mõnda sõnumit ei saadetud rakenduses Sõnumside"
+
+ %d sõnumit %d vestluses
+ %d sõnumit ühes vestluses
+
+ "Sõnumit ei laaditud alla"
+ "Mõnda sõnumit ei laaditud alla rakenduses Sõnumside"
+
+ %d sõnumit %d vestluses
+ %d sõnumit ühes vestluses
+
+ "Sõnumit numbrile %1$s ei saadetud"
+ "Helistage hädaabiteenusele. Teie tekstsõnumit numbrile %1$s ei õnnestunud praegu edastada."
+
+ %d uut sõnumit
+ Uus sõnum
+
+ "Käivita"
+ "Kaamera pole saadaval"
+ "Kaamera pole saadaval"
+ "Video jäädvustamine pole saadaval"
+ "Meediat ei saa salvestada"
+ "Pilti ei saa jäädvustada"
+ "Tagasi"
+ "Arhiivitud"
+ "Kustutamine"
+ "Arhiivimine"
+ "Arhiivimise tühistamine"
+ "Märguannete väljalülitamine"
+ "Märguannete sisselülitamine"
+ "Kontakti lisamine"
+ "Laadi alla"
+ "Saada"
+ "Kustuta"
+ "Kas kustutada see sõnum?"
+ "Seda toimingut ei saa tagasi võtta."
+ "Kustuta"
+
+ Kas kustutada need vestlused?
+ Kas kustutada see vestlus?
+
+ "Kustuta"
+ "Tühista"
+ "Sihtkohta"
+ "Mitme kujutise valimine"
+ "Valiku kinnitamine"
+ "ja veel %d"
+ "Heli ei õnnestu salvestada. Proovige uuesti."
+ "Heli ei saa esitada. Proovige uuesti."
+ "Heli ei õnnestunud salvestada. Proovige uuesti."
+ "Puudutage pikalt"
+ ", "
+ " "
+ ": "
+ " "
+ "Pilt"
+ "Heliklipp"
+ "Video"
+ "Kontaktikaart"
+ "Allalaadimine"
+ "Vasta SMS-iga"
+ "Vastam. MMS-iga"
+ "Vasta"
+
+ %d osalejat
+ %d osaleja
+
+ "Mina"
+ "Kontakt on blokeeritud ja arhiivitud"
+ "Kontakt deblokeeriti ja eemaldati arhiivist"
+ "%d on arhiivitud"
+ "%d üksuse arhiivimine on tühistatud"
+ "Märguanded on välja lülitatud"
+ "Märguanded on sisse lülitatud"
+ "Kõik on valmis. Puudutage uuesti käsku Saada."
+ "Sõnumside määramine SMS-i vaikerakenduseks õnnestus."
+
+ Manustest loobumine
+ Manusest loobumine
+
+ "Helimanus"
+ "Helimanuste esitamine"
+ "Peata"
+ "Sõnum saatjalt %s: %s."
+ "Sõnumi saamine kontaktilt %s ebaõnnestus: %s. Aeg: %s."
+ "Sõnum kontaktilt %s: %s. Aeg: %s."
+ "Saatmata sõnum kontaktile %s: %s. Aeg: %s."
+ "Sõnumi saatmine kontaktile %s: %s. Aeg: %s."
+ "Sõnumi saatmine kontaktile %s ebaõnnestus: %s. Aeg: %s."
+ "Sõnum kontaktile %s: %s. Aeg: %s."
+ "Sõnumi saamine kontaktilt %s ebaõnnestus: %s. Aeg: %s. %s."
+ "Sõnum kontaktilt %s: %s. Aeg: %s. %s."
+ "Saatmata sõnum kontaktile %s: %s. Aeg: %s."
+ "Sõnumi saatmine kontaktile %s: %s. Aeg: %s."
+ "Sõnumi saatmine kontaktile %s ebaõnnestus: %s. Aeg: %s."
+ "Sõnum kontaktile %s: %s. Aeg: %s."
+ "Sõnumi saatmine ebaõnnestus. Puudutage uuesti proovimiseks."
+ "Vestlus osalejatega %s"
+ "Teema kustutamine"
+ "Video jäädvustamine"
+ "Foto jäädvustamine"
+ "Pildistamine"
+ "Video salvestamise alustamine"
+ "Lülitamine täisekraaniga kaamerale"
+ "Esi- ja tagakaamera vahetamine"
+ "Salvestamise peatamine ja video lisamine"
+ "Lõpeta video salvestamine"
+ "Sõnumside fotod"
+
+ %d fotot salvestati albumisse „%s”
+ %d foto salvestati albumisse „%s”
+
+
+ %d videot salvestati albumisse „%s”
+ %d video salvestati albumisse „%s”
+
+
+ %d manust salvestati albumisse „%s”
+ %d manus salvestati albumisse „%s”
+
+
+ %d manust salvestati kausta „Allalaadimised”
+ %d manus salvestati kausta „Allalaadimised”
+
+
+ %d manust salvestati
+ %d manus salvestati
+
+
+ %d manust ei saanud salvestada
+ %d manust ei saanud salvestada
+
+ "Salvestati MMS-manus"
+ "Seaded"
+ "Arhiivitud"
+ "Sule"
+ "MMS"
+ "Täpsem"
+ "Silumine"
+ "Märguanded"
+ "Heli"
+ "Hääletu"
+ "Vibratsioon"
+ "Blokeeritud"
+ "SMS-i edastamisaruanded"
+ "Edastamisaruande taotlus iga saadetud SMS-i kohta"
+ "Automaatne toomine"
+ "MMS-sõnumite automaatne vastuvõtmine"
+ "Automaatne vastuvõtmine rändlusel"
+ "MMS-ide automaatne toomine rändluse ajal"
+ "Rühma sõnumside"
+ "MMS-i kasutamine, kui mitmele kontaktile tuleb saata üks sõnum"
+ "SMS-i vaikerakendus"
+ "SMS-i vaikerakendus"
+
+
+ "Teie telefoninumber"
+ "Teadmata"
+ "Väljuva sõnumi helid"
+ "SMS-i tõmmistamine"
+ "Saadud SMS-ide lähteandmete tõmmistamine välisesse talletusfaili"
+ "MMS-i tõmmistamine"
+ "Saadud MMS-ide lähteandmete tõmmistamine välisesse talletusfaili"
+ "Raadiosidehoiatused"
+ "Sõnumi valikud"
+ "Kopeeri tekst"
+ "Kuva üksikasjad"
+ "Kustuta"
+ "Edastamine"
+ "Sõnumi üksikasjad"
+ "Tüüp: "
+ "Tekstisõnum"
+ "Multimeediumsõnum"
+ "Saatja: "
+ "Saaja: "
+ "Saadetud: "
+ "Vastu võetud: "
+ "Teema: "
+ "Suurus: "
+ "Prioriteet: "
+ "SIM: "
+ "Suur"
+ "Tavaline"
+ "Madal"
+ "SIM %s"
+ "Varjatud saatja aadress"
+ "Sõnumit ei saa manuste laadimise ajal saata."
+ "Manust ei õnnestu laadida. Proovige uuesti."
+ "Võrk pole valmis. Proovige uuesti."
+ "Kustuta tekst"
+ "Teksti ja numbrite vaheldumisi sisestamine"
+ "Lisa rohkem osalejaid"
+ "Osalejate kinnitamine"
+ "Uue vestluse alustamine"
+ "Selle üksuse valimine"
+ "Video esitamine"
+ "Inimesed ja valikud"
+ "Silu"
+ "Inimesed ja valikud"
+ "Üldine"
+ "Selles vestluses osalevad inimesed"
+ "Helista"
+ "Saatke sõnum"
+ "Sõnumi saatmine<br/><small>SIM-kaardilt %s</small>"
+
+ Saada fotod
+ Saada foto
+
+
+ Saada helifailid
+ Saada helifail
+
+
+ Saada videod
+ Saada video
+
+
+ Saada kontaktikaardid
+ Saada kontaktikaart
+
+
+ Saada manused
+ Saada manus
+
+
+ %d manust on saatmiseks valmis
+ Üks manus on saatmiseks valmis
+
+ "Tagasiside saatmine"
+ "Kuvamine Google Play poes"
+ "Versiooni teave"
+ "Versioon %1$s"
+ "Avatud lähtekoodi litsentsid"
+ "Märguanded"
+ "Manuselimiit on täis"
+ "Manuse laadimine ebaõnnestus."
+ "Kas lisada kontaktidesse?"
+ "Kontaktisiku lisamine"
+ "Teema"
+ "Teema: "
+ "%s%s"
+ "Kontakti kaardi laadimine"
+ "Kontaktkaarti ei õnnestunud laadida"
+ "Kontakti kaardi kuvamine"
+
+ %d kontakti
+ %d kontakt
+
+ "Kontaktkaardid"
+ "Sünnipäev"
+ "Märkmed"
+ "Sõnumi edastamine"
+ "Vastamine"
+ "+1"
+ "+%d"
+ "SMS on keelatud"
+ "Saatmiseks määrake rakendus Sõnumside SMS-i vaikerakenduseks"
+ "Määrake rakendus Sõnumside SMS-i vaikerakenduseks"
+ "Muuda"
+ "Sõnumite vastuvõtmiseks määrake rakendus Sõnumside SMS-i vaikerakenduseks"
+ "SMS-sõnumite saatmiseks pole eelistatud SIM-kaarti valitud"
+ "Seadme omanik pole seda rakendust lubanud."
+ "OK"
+ "Vestluses on liiga palju osalejaid"
+
+ Sobimatud kontaktid
+ Sobimatu kontakt
+
+ "Kaamera kujutist ei õnnestunud laadida"
+ "Teie: "
+ "%s: "
+ "Mustand"
+ "Kui alustate uut vestlust, loetletakse see siin"
+ "Arhiivitud vestlused kuvatakse siin"
+ "Vestluste laadimine …"
+ "Pilt"
+ "Heliklipp"
+ "Video"
+ "Kontaktikaart"
+ "MMS"
+ "Tagasivõtmine"
+ "Proovi uuesti"
+ "Uue sõnumi alustamiseks sisestage kontakti nimi või telefoninumber"
+ "Blokeerimine"
+ "Blokeeri %s"
+ "Deblokeeri %s"
+ "Kas blokeerida %s?"
+ "Saate sellelt numbrilt ikka sõnumeid, kuid te ei saa enam märguandeid. Vestlus arhiivitakse."
+ "Blokeeritud kontaktid"
+ "DEBLOKEERIMINE"
+ "Blokeeritud kontaktid"
+ "Dokumendikogust kujutise valimine"
+ "Sõnumi saatmine"
+ "Sõnum on saadetud"
+ "Mobiilne andmeside on välja lülitatud. Kontrollige seadeid."
+ "Lennukirežiimis ei saa sõnumeid saata"
+ "Sõnumit ei saanud saata"
+ "Sõnum on alla laaditud"
+ "Mobiilne andmeside on välja lülitatud. Kontrollige seadeid."
+ "Lennukireżiimis ei saa sõnumeid alla laadida"
+ "Sõnumit ei saanud alla laadida"
+ "Null"
+ "Üks"
+ "Kaks"
+ "Kolm"
+ "Neli"
+ "Viis"
+ "Kuus"
+ "Seitse"
+ "Kaheksa"
+ "Üheksa"
+ "Operaatori %1$s kaudu ei õnnestu sõnumit saata, viga %2$d"
+ "Tundmatu operaatori kaudu ei õnnestu sõnumit saata, viga %1$d"
+ "Edastamine: %s"
+ "Sõnumit ei saadetud: teenus pole võrgus aktiveeritud"
+ "Sõnumit ei saadetud: kehtetu sihtaadress"
+ "Sõnumit ei saadetud: vigane sõnum"
+ "Sõnumit ei saadetud: toetuseta sisu"
+ "Sõnumit ei saadetud: toetuseta sõnum"
+ "Sõnumit ei saadetud: liiga suur"
+ "Uus sõnum"
+ "Kuvamine"
+ "Kujutis"
+ "Sobivat rakendust ei õnnestunud leida"
+ "Saaja eemaldamine"
+ "Uus sõnum"
+ "Tühista"
+ "Pääsupunkti muutmine"
+ "Määramata"
+ "Nimi"
+ "APN"
+ "MMSC"
+ "MMS-i puhverserver"
+ "MMS-i port"
+ "MCC"
+ "MNC"
+ "APN-i tüüp"
+ "Kustuta APN"
+ "Uus APN"
+ "Salvesta"
+ "Tühista"
+ "Nimeväli ei saa olla tühi."
+ "APN ei saa olla tühi."
+ "MCC-väli peab olema kolme numbriga."
+ "MNC-väli peab olema kahe või kolme numbriga."
+ "APN-i vaikeseadete taastamine."
+ "Lähtesta vaikeseadetele"
+ "APN-i vaikeseadete lähtestamine on lõpule viidud."
+ "Pealkirjata"
+ "Pääsupunktide nimed"
+ "APN-id"
+ "Uus APN"
+ "Pääsupunkti nime seaded pole selle kasutaja jaoks saadaval"
+ "Kas kopeerida lõikelauale?"
+ "Kopeeri"
+ "SIM-kaardile %s"
+ "Üldised"
+ "Täpsemad"
+ "Üldseaded"
+ "Täpsemad seaded"
+ "SIM-kaart „%s”"
+ "Individuaalsed SMS-id saadetakse kõikidele adressaatidele. Ainult teie saate vastuseid"
+ "Üks MMS saadetakse kõikidele adressaatidele"
+ "Tundmatu number"
+ "Uus sõnum"
+ "Uus sõnum."
+ "SIM-kaardi valija"
+ "%1$s on valitud, SIM-kaardi valija"
+ "Teema muutmine"
+ "SIM-kaardi valimine või objekti valimine"
+ "Puudutage pikalt heli salvestamiseks"
+ "Uue vestluse alustamine"
+ "Sõnumside"
+ "Sõnumside loend"
+ "Sõnumside"
+ "Uus sõnum"
+ "Vestlusloend"
+ "Vestluste laadimine …"
+ "Sõnumite laadimine ..."
+ "Kuva rohkem vestlusi"
+ "Kuva rohkem sõnumeid"
+ "Vestlus on kustutatud"
+ "Vestlus kustutati. Rakenduse Sõnumside eri vestluste kuvamiseks puudutage"
+ "Blokeeritud"
+ "Deblokeeritud"
+ "Talletusruumi on vähe. Osa andmetest võib kaduma minna."
+ "Manuste valimine"
+ "Valiku kinnitamine"
+ "%d on valitud"
+ "Eemaldage üks või mitu manust ja proovige uuesti."
+ "Võite proovida sõnumit saata, aga selle edastamine võib ebaõnnestuda, kui te ei eemalda üht või mitut manust."
+ "Saate sõnumis saata vaid ühe video. Eemaldage täiendavad videod ja proovige uuesti."
+ "Rakendusel Sõnumside ei õnnestunud manust laadida."
+ "Saada ikkagi"
+ "Vestlust ei õnnestunud alustada"
+ "%1$s (%2$s)"
+ "%s on valitud"
+
diff --git a/res/values-eu-rES/arrays.xml b/res/values-eu-rES/arrays.xml
new file mode 100644
index 0000000..5ea97f0
--- /dev/null
+++ b/res/values-eu-rES/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "gairik ez"
+ "gairik ez"
+
+
+ "Bai"
+ "Ez"
+ "Ados"
+ "Kar-kar"
+ "Eskerrik asko"
+ "Ados"
+ "Ederki"
+ "Banoa"
+ "Ados, geroago erantzungo dizut"
+ ":)"
+ ":("
+
+
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
new file mode 100644
index 0000000..24813fe
--- /dev/null
+++ b/res/values-eu-rES/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Mezuak"
+ "Mezuak"
+ "Hautatu elkarrizketa"
+ "Ezarpenak"
+ "Bidali mezua"
+ "Gehitu eranskina"
+ "Laguntza"
+ "Ongi etorri"
+ "Saltatu"
+ "Hurrengoa >"
+ "Hurrengoa"
+ "Irten"
+ "Ezarpenak >"
+ "Ezarpenak"
+ "Mezuak aplikazioak baimena behar du SMS mezuak bidaltzeko eta jasotzeko, deiak egiteko eta kontaktuak atzitzeko."
+ "Baimenak aldatzeko, zoaz Ezarpenak > Aplikazioak > Mezuak > Baimenak atalera."
+ "Baimenak aldatzeko, zoaz Ezarpenak, Aplikazioak, Mezuak, Baimenak atalera."
+ "Maiz erabilitakoak"
+ "Kontaktu guztiak"
+ "Bidali hona: %s"
+ "Atera irudiak edo grabatu bideoa"
+ "Aukeratu gailu honetako irudiak"
+ "Grabatu audioa"
+ "Aukeratu argazkia"
+ "Euskarria hautatu da."
+ "Euskarria desautatu da."
+ "%d hautatuta"
+ "Irudiaren data: %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "irudia"
+ "Grabatu audioa"
+ "Partekatu"
+ "Oraintxe"
+ "Orain"
+
+ %d min
+ %d min
+
+
+ %d ordu
+ %d ordu
+
+
+ %d egun
+ %d egun
+
+
+ %d aste
+ Astebete
+
+
+ %d hilabete
+ Hilabete
+
+
+ %d urte
+ Urtebete
+
+ "0 klaseko mezua"
+ "Gorde"
+ "Toki gutxi dago gailuan. Tokia egiteko, Mezuak aplikazioak automatikoki ezabatuko ditu mezu zaharragoak."
+ "Memoria betetzen ari da"
+ "Gailuan toki gehiago izan arte, baliteke Mezuak aplikazioak mezurik ez bidaltzea edo jasotzea."
+ "SMS mezuetarako memoria gutxi dago. Baliteke mezuak ezabatu behar izatea."
+ "Berretsi telefono-zenbakia"
+ "Behin bakarrik egin beharreko urrats honi esker, Mezuak aplikazioak taldeko mezuak behar bezala bidaliko dituela ziurtatuko duzu."
+ "Telefono-zenbakia"
+ "Ezabatu multimedia-elementuak dituzten mezu guztiak"
+ "Ezabatu %s baino zaharragoak diren mezuak"
+ "Ezabatu automatikoki %s baino zaharragoak diren mezuak"
+ "Egin ez ikusi"
+ "Multimedia-elementuak dauzkaten mezu guztiak ezabatu nahi dituzu?"
+ "%s baino zaharragoak diren mezuak ezabatu nahi dituzu?"
+ "%s baino zaharragoak diren mezuak ezabatu eta ezabaketa automatikoa aktibatu nahi duzu?"
+ "%s erabiltzaileak esan du"
+ "Zuk esan duzu"
+ "%s erabiltzailearen mezua:"
+ "Mezu bat bidali duzu"
+ "Bidaltzen…"
+ "Ez da bidali. Berriro saiatzeko, ukitu hau."
+ "Ez da bidali. Berriro saiatzen…"
+ "Birbidali edo ezabatu"
+ "Deitu larrialdi-zerbitzuetara. Ezin izan dugu entregatu testu-mezua."
+ "Huts egin du"
+ "MMS mezu berria deskargatzeko prest"
+ "MMS mezu berria"
+ "Ezin izan da deskargatu"
+ "Berriro saiatzeko, ukitu hau"
+ "Deskargatzeko, ukitu hau"
+ "Deskargatu edo ezabatu"
+ "Deskargatzen…"
+ "Mezua iraungi da edo ez dago erabilgarri"
+ "Tamaina: %1$s. Iraungitze-data: %2$s."
+ "Ezin da bidali. Hartzaileak ez du balio."
+ "Zerbitzua ez dago sare honetan aktibatuta"
+ "Ezin izan da bidali sareko arazo baten ondorioz"
+ "Mezua iraungi da edo ez dago erabilgarri"
+ "(Gairik ez)"
+ "Igorle ezezaguna"
+ "Bidalita"
+ "Ezin izan da %2$s erabiltzailearen %1$s mezua deskargatu."
+ "Ezin izan da datu-basearen eragiketa osatu memoria gutxi dagoelako"
+ "Ez da bidali mezua"
+ "Ez dira bidali Mezuak aplikazioko mezu batzuk"
+
+ %d mezu daude %d elkarrizketatan
+ %d mezu daude elkarrizketa batean
+
+ "Ez da deskargatu mezua"
+ "Ez dira deskargatu Mezuak aplikazioko mezu batzuk"
+
+ %d mezu daude %d elkarrizketatan
+ %d mezu daude elkarrizketa batean
+
+ "Mezua ez da bidali %1$s zenbakira"
+ "Deitu larrialdi-zerbitzuetara. Ezin izan dugu entregatu %1$s zenbakira bidalitako testu-mezua."
+
+ %d mezu berri
+ Mezu berria
+
+ "Hasi"
+ "Kamera ez dago erabilgarri"
+ "Kamera ez dago erabilgarri"
+ "Bideo-grabaketa ez dago erabilgarri"
+ "Ezin da gorde multimedia-elementua"
+ "Ezin da atera argazkia"
+ "Atzera"
+ "Artxibatutakoak"
+ "Ezabatu"
+ "Artxibatu"
+ "Kendu artxibotik"
+ "Desaktibatu jakinarazpenak"
+ "Aktibatu jakinarazpenak"
+ "Gehitu kontaktua"
+ "Deskargatu"
+ "Bidali"
+ "Ezabatu"
+ "Mezua ezabatu nahi duzu?"
+ "Ezin da ekintza hori desegin."
+ "Ezabatu"
+
+ Elkarrizketa hauek ezabatu nahi dituzu?
+ Elkarrizketa ezabatu nahi duzu?
+
+ "Ezabatu"
+ "Utzi"
+ "Hartzailea"
+ "Hautatu hainbat irudi"
+ "Berretsi hautapena"
+ "+%d"
+ "Ezin da grabatu audioa. Saiatu berriro."
+ "Ezin da erreproduzitu audioa. Saiatu berriro."
+ "Ezin izan da gorde audioa. Saiatu berriro."
+ "Eduki ukituta"
+ ", "
+ " "
+ ": "
+ " "
+ "Argazkia"
+ "Audio-klipa"
+ "Bideoa"
+ "Kontaktu-txartela"
+ "Deskargatu"
+ "Erantzun SMS bidez"
+ "Erantzun MMS bidez"
+ "Erantzun"
+
+ %d parte-hartzaile
+ %d parte-hartzaile
+
+ "Ni"
+ "Kontaktua blokeatu eta artxibatu egin da"
+ "Kontaktua desblokeatu da eta artxibotik kendu da"
+ "%d artxibatuta"
+ "%d artxibotik kenduta"
+ "Jakinarazpenak desaktibatuta daude"
+ "Jakinarazpenak aktibatuta daude"
+ "Dena ezarri da. Ukitu berriro Bidali."
+ "Mezuak aplikazioa behar bezala ezarri da SMS mezuetarako aplikazio lehenetsi gisa."
+
+ Baztertu eranskinak
+ Baztertu eranskina
+
+ "Audio-eranskina"
+ "Erreproduzitu audio-eranskina"
+ "Pausatu"
+ "%s erabiltzailearen mezua: %s."
+ "%s igorlearen mezuak huts egin du: %s. Ordua: %s"
+ "%s igorlearen mezua: %s. Ordua: %s"
+ "Ez zaio bidali mezua %s erabiltzaileari: %s. Ordua: %s"
+ "%s erabiltzaileari mezua bidaltzen: %s. Ordua: %s"
+ "Ezin izan zaio bidali mezua %s erabiltzaileari: %s. Ordua: %s"
+ "%s erabiltzailearentzako mezua: %s. Ordua: %s"
+ "%s igorlearen mezuak huts egin du: %s. Ordua: %s. %s"
+ "%s igorlearen mezua: %s. Ordua: %s. %s"
+ "Ez da bidali mezua %s taldera: %s. Ordua: %s"
+ "%s taldera mezua bidaltzen: %s. Ordua: %s"
+ "Ezin izan da bidali mezua %s taldera: %s. Ordua: %s"
+ "%s taldearentzako mezua: %s. Ordua: %s"
+ "Mezuak huts egin du. Ukitu berriro saiatzeko."
+ "Elkarrizketa erabiltzaile hauekin (%s)"
+ "Ezabatu gaia"
+ "Grabatu bideoa"
+ "Atera irudi finkoa"
+ "Atera argazkia"
+ "Hasi bideoa grabatzen"
+ "Aldatu pantaila osoko kamerara"
+ "Aldatu aurreko eta atzeko kameren artean"
+ "Utzi grabatzeari eta erantsi bideoa"
+ "Utzi bideoa grabatzeari"
+ "Mezuak aplikazioko argazkiak"
+
+ %d argazki gorde dira \"%s\" albumean
+ %d argazki gorde da \"%s\" albumean
+
+
+ %d bideo gorde dira \"%s\" albumean
+ %d bideo gorde da \"%s\" albumean
+
+
+ %d eranskin gorde dira \"%s\" albumean
+ %d eranskin gorde da \"%s\" albumean
+
+
+ %d eranskin gorde dira \"Deskargak\" atalean
+ %d eranskin gorde da \"Deskargak\" atalean
+
+
+ Gorde dira %d eranskin
+ Gorde da %d eranskin
+
+
+ Ezin izan dira gorde %d eranskin
+ Ezin izan da gorde %d eranskin
+
+ "MMSko eranskina gordeta dago"
+ "Ezarpenak"
+ "Artxibatuta"
+ "Itxi"
+ "MMS"
+ "Ezarpen aurreratuak"
+ "Araztu"
+ "Jakinarazpenak"
+ "Soinua"
+ "Isilik"
+ "Egin dar-dar"
+ "Blokeatuta"
+ "SMSak entregatzearen txostenak"
+ "Eskatu bidaltzen duzun SMS bakoitzaren entrega-txostena"
+ "Eskuratu automatikoki"
+ "Eskuratu MMS mezuak automatikoki"
+ "Eskuratu automatikoki ibiltaritzan"
+ "Eskuratu MMS mezuak automatikoki ibiltaritzan"
+ "Talde-mezularitza"
+ "Erabili MMSak mezu bakarra bidaltzeko hartzaile ugari daudenean"
+ "SMS mezuetarako aplikazio lehenetsia"
+ "SMS mezuetarako aplikazio lehenetsia"
+
+
+ "Zure telefono-zenbakia"
+ "Ezezaguna"
+ "Irteerako mezuen soinuak"
+ "Irauli SMSak"
+ "Irauli jasotako SMS mezuen prozesatu gabeko datuak kanpoko memoriako fitxategira"
+ "Irauli MMSak"
+ "Irauli jasotako MMS mezuen prozesatu gabeko datuak kanpoko memoriako fitxategira"
+ "Hari gabeko alertak"
+ "Mezuaren aukerak"
+ "Kopiatu testua"
+ "Ikusi xehetasunak"
+ "Ezabatu"
+ "Birbidali"
+ "Mezuaren xehetasunak"
+ "Mota: "
+ "Testu-mezua"
+ "Multimedia-mezua"
+ "Igorlea: "
+ "Hartzailea: "
+ "Bidaltze-data: "
+ "Jasotze-data: "
+ "Gaia: "
+ "Tamaina: "
+ "Lehentasuna: "
+ "SIM txartela: "
+ "Handia"
+ "Normala"
+ "Txikia"
+ "%s. SIM txartela"
+ "Igorlearen helbidea ezkutatuta badago"
+ "Ezin da mezua bidali eranskinak kargatzen ari diren bitartean."
+ "Ezin da kargatu eranskina. Saiatu berriro."
+ "Sarea ez dago prest. Saiatu berriro."
+ "Ezabatu testua"
+ "Aldatu testu eta zenbaki moduen artean"
+ "Gehitu parte-hartzaile gehiago"
+ "Berretsi parte-hartzaileak"
+ "Hasi elkarrizketa bat"
+ "Hautatu elementu hau"
+ "Erreproduzitu bideoa"
+ "Jendea eta aukerak"
+ "Araztu"
+ "Jendea eta aukerak"
+ "Orokorra"
+ "Elkarrizketa honetako jendea"
+ "Deitu"
+ "Bidali mezua"
+ "Bidali mezua <br/><small>%s txarteletik</small>"
+
+ Bidali argazkiak
+ Bidali argazkia
+
+
+ Bidali audioak
+ Bidali audioa
+
+
+ Bidali bideoak
+ Bidali bideoa
+
+
+ Bidali kontaktu-txartelak
+ Bidali kontaktu-txartela
+
+
+ Bidali eranskinak
+ Bidali eranskina
+
+
+ %d eranskin bidaltzeko prest daude
+ Eranskin bat bidaltzeko prest dago
+
+ "Bidali iritzia"
+ "Ikusi Google Play Store dendan"
+ "Bertsioari buruzko informazioa"
+ "%1$s bertsioa"
+ "Kode irekiko lizentziak"
+ "Jakinarazpenak"
+ "Eranskinen mugara iritsi zara"
+ "Ezin izan da kargatu eranskina."
+ "Kontaktuetan gehitu nahi duzu?"
+ "Gehitu kontaktua"
+ "Gaia"
+ "Gaia: "
+ "%s%s"
+ "Kontaktu-txartela kargatzen"
+ "Ezin izan da kargatu kontaktu-txartela"
+ "Ikusi kontaktu-txartela"
+
+ %d kontaktu
+ %d kontaktu
+
+ "Kontaktu-txartelak"
+ "Urtebetetzea"
+ "Oharrak"
+ "Birbidali mezua"
+ "Erantzun"
+ "+1"
+ "+%d"
+ "SMSak desgaituta"
+ "Mezuak bidaltzeko, ezarri Mezuak aplikazioa SMS mezuetarako aplikazio lehenetsi gisa"
+ "Ezarri Mezuak aplikazioa SMS mezuetarako aplikazio lehenetsi gisa"
+ "Aldatu"
+ "Mezuak jasotzeko, ezarri Mezuak aplikazioa SMS mezuetarako aplikazio lehenetsi gisa"
+ "Ez da hautatu SIM txartel hobetsirik SMS mezuak bidaltzeko"
+ "Gailuaren jabeak ez du aplikazio hau erabiltzea baimendu."
+ "Ados"
+ "Parte-hartzaile gehiegi daude elkarrizketan"
+
+ Kontaktuek ez dute balio
+ Kontaktuak ez du balio
+
+ "Ezin izan da kargatu kamerako irudia"
+ "Zu: "
+ "%s: "
+ "Zirriborroa"
+ "Elkarrizketak hasten dituzunean, hemen agertuko dira"
+ "Artxibatutako elkarrizketak hemen ageri dira"
+ "Elkarrizketak kargatzen…"
+ "Argazkia"
+ "Audio-klipa"
+ "Bideoa"
+ "Kontaktu-txartela"
+ "MMS"
+ "Desegin"
+ "Saiatu berriro"
+ "Mezu berria hasteko, idatzi kontaktu baten izena edo telefono-zenbakia."
+ "Blokeatu"
+ "Blokeatu %s"
+ "Desblokeatu %s"
+ "%s blokeatu nahi duzu?"
+ "Zenbaki horren mezuak jasotzen jarraituko duzu, baina ez duzu horren jakinarazpenik jasoko aurrerantzean. Elkarrizketa artxibatu egingo da."
+ "Blokeatutako kontaktuak"
+ "DESBLOKEATU"
+ "Blokeatutako kontaktuak"
+ "Aukeratu irudia dokumentuen liburutegitik"
+ "Mezua bidaltzen"
+ "Mezua bidali da"
+ "Mugikorreko datuak desaktibatuta daude. Egiaztatu ezarpenak."
+ "Ezin dira bidali mezuak hegaldi moduan"
+ "Ezin izan da bidali mezua"
+ "Mezua deskargatu da"
+ "Mugikorreko datuak desaktibatuta daude. Egiaztatu ezarpenak."
+ "Ezin da deskargatu mezua hegaldi moduan"
+ "Ezin izan da deskargatu mezua"
+ "Zero"
+ "Bat"
+ "Bi"
+ "Hiru"
+ "Lau"
+ "Bost"
+ "Sei"
+ "Zazpi"
+ "Zortzi"
+ "Bederatzi"
+ "Ezin da bidali mezua %1$s operadorearekin. Errorea: %2$d"
+ "Ezin da bidali mezua operadore ezezagunarekin. Errorea: %1$d"
+ "Fwd: %s"
+ "Ez da bidali mezua: zerbitzua ez dago aktibatuta sarean"
+ "Mezua ez da bidali. Helmugaren helbideak ez du balio."
+ "Mezua ez da bidali. Ez du balio."
+ "Mezua ez da bidali. Edukia ez da onartzen."
+ "Mezua ez da bidali. Ez da onartzen."
+ "Ez da bidali mezua: handiegia da"
+ "Mezu berria"
+ "Ikusi"
+ "Irudia"
+ "Ezin izan da aurkitu aplikazio egokia"
+ "Kendu hartzailea"
+ "Mezu berria"
+ "Utzi"
+ "Editatu sarbide-puntua"
+ "Ezarri gabe"
+ "Izena"
+ "APN"
+ "MMSC"
+ "MMS proxya"
+ "MMS ataka"
+ "MCC"
+ "MNC"
+ "APN mota"
+ "Ezabatu APNa"
+ "APN berria"
+ "Gorde"
+ "Baztertu"
+ "\"Izena\" eremua ezin da hutsik utzi."
+ "\"APN\" eremua ezin da hutsik utzi."
+ "\"MCC\" eremuak 3 digitu izan behar ditu."
+ "\"MNC\" eremuak 2 edo 3 digitu izan behar ditu."
+ "APN ezarpen lehenetsiak leheneratzen."
+ "Berrezarri ezarpen lehenetsiak"
+ "APN ezarpen lehenetsiak berrezarri dira."
+ "Izengabea"
+ "Sarbide-puntuen izenak"
+ "APNak"
+ "APN berria"
+ "Erabiltzaile honek ezin ditu APN ezarpenak atzitu"
+ "Arbelean kopiatu nahi duzu?"
+ "Kopiatu"
+ "%s txartelean"
+ "Orokorra"
+ "Ezarpen aurreratuak"
+ "Ezarpen orokorrak"
+ "Ezarpen aurreratuak"
+ "\"%s\" SIM txartela"
+ "Bidali SMS mezu bana hartzaile guztiei. Zuk bakarrik jasoko dituzu erantzunak"
+ "Bidali MMS mezu bakarra hartzaile guztiei"
+ "Zenbaki ezezaguna"
+ "Mezu berria"
+ "Mezu berria."
+ "SIM hautatzailea"
+ "%1$s hautatuta, SIM hautatzailea"
+ "Editatu gaia"
+ "Hautatu SIM txartela edo editatu gaia"
+ "Eduki sakatuta audioa grabatzeko"
+ "Hasi elkarrizketa bat"
+ "Mezuak"
+ "Mezuak aplikazioko zerrenda"
+ "Mezuak"
+ "Mezu berria"
+ "Elkarrizketa-zerrenda"
+ "Elkarrizketak kargatzen"
+ "Mezuak kargatzen"
+ "Ikusi elkarrizketa gehiago"
+ "Ikusi mezu gehiago"
+ "Elkarrizketa ezabatu egin da"
+ "Ezabatu egin da elkarrizketa. Ukitu hau Mezuak aplikazioko beste elkarrizketa bat erakusteko."
+ "Blokeatu da"
+ "Desblokeatu da"
+ "Toki gutxi geratzen da. Agian ez dira gordeko datu batzuk."
+ "Hautatu eranskinak"
+ "Berretsi hautapena"
+ "%d hautatuta"
+ "Kendu eranskin bat edo gehiago, eta saiatu berriro."
+ "Hala eta guztiz ere, mezua bidaltzen saia zaitezke, baina agian ez da entregatuko, eranskinetako batzuk kendu ezean."
+ "Bideo bakarra bidal dezakezu mezu bakoitzeko. Kendu gainerako bideoak eta saiatu berriro."
+ "Mezuak aplikazioak ezin izan du eranskina kargatu."
+ "Bidali halere"
+ "Ezin izan da hasi elkarrizketa"
+ "%1$s (%2$s)"
+ "%s hautatu da"
+
diff --git a/res/values-fa/arrays.xml b/res/values-fa/arrays.xml
new file mode 100644
index 0000000..01b6f3e
--- /dev/null
+++ b/res/values-fa/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "بدون موضوع"
+ "بدون موضوع"
+
+
+ "بله"
+ "خیر"
+ "تأیید"
+ "هههه"
+ "سپاسگزارم"
+ "موافقم"
+ "خوب"
+ "در راهم"
+ "بسیار خوب، بگذارید بعداً با شما تماس بگیرم"
+ ":)"
+ ":("
+
+
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
new file mode 100644
index 0000000..6a78532
--- /dev/null
+++ b/res/values-fa/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "پیامرسانی"
+ "پیامرسانی"
+ "انتخاب مکالمه"
+ "تنظیمات"
+ "ارسال پیام"
+ "افزودن پیوست"
+ "راهنما"
+ "خوش آمدید"
+ "رد شدن"
+ "بعدی >"
+ "بعدی"
+ "خروج"
+ "تنظیمات >"
+ "تنظیمات"
+ "«پیامرسانی» به مجوز دسترسی به پیامک، تلفن و مخاطبین نیاز دارد."
+ "میتوانید مجوزها را در تنظیمات > برنامهها > پیامرسانی > مجوزها تغییر دهید."
+ "میتوانید مجوزها را در تنظیمات، برنامهها، پیامرسانی، مجوزها تغییر دهید."
+ "مکرر"
+ "همه مخاطبین"
+ "ارسال به %s"
+ "گرفتن عکس یا ویدیو"
+ "انتخاب تصاویر از این دستگاه"
+ "ضبط صدا"
+ "انتخاب عکس"
+ "رسانه انتخاب شده است."
+ "رسانه انتخاب نشده است."
+ "%d مورد انتخاب شد"
+ "تاریخ تصویر %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "تصویر"
+ "ضبط صدا"
+ "اشتراکگذاری"
+ "هماکنون"
+ "اکنون"
+
+ %d دقیقه
+ %d دقیقه
+
+
+ %d ساعت
+ %d ساعت
+
+
+ %d روز
+ %d روز
+
+
+ %d هفته
+ %d هفته
+
+
+ %d ماه
+ %d ماه
+
+
+ %d سال
+ %d سال
+
+ "پیام رده ۰"
+ "ذخیره"
+ "فضای ذخیرهسازی دستگاه کم است. «پیامرسانی» برای آزاد کردن فضا، پیامهای قدیمیتر را بهطور خودکار پاک میکند."
+ "فضای ذخیرهسازی رو به پایان است"
+ "شاید تا وقتی فضای بیشتری در دستگاهتان در دسترس نباشد، «پیامرسانی» پیام ارسال یا دریافت نکند."
+ "فضای ذخیرهسازی پیامک کم است. ممکن است لازم باشد پیامها را حذف کنید."
+ "شماره تلفنتان را تأیید کنید"
+ "با انجام این مرحله یکباره مطمئن میشوید «پیامرسانی» پیامهای گروهی شما را بهدرستی تحویل میدهد."
+ "شماره تلفن"
+ "حذف همه پیامهای دارای رسانه"
+ "حذف پیامهای قدیمیتر از %s"
+ "حذف خودکار پیامهای قدیمیتر از %s"
+ "نادیده گرفتن"
+ "همه پیامهای دارای رسانه حذف شوند؟"
+ "پیامهای قدیمیتر از %s حذف شوند؟"
+ "پیامهای قدیمیتر از %s حذف شود و حذف خودکار روشن شود؟"
+ "%s گفت"
+ "گفتید"
+ "پیام از %s:"
+ "پیامی ارسال کردید"
+ "در حال ارسال…"
+ "ارسال نشد. برای امتحان مجدد لمس کنید."
+ "ارسال نشد. در حال امتحان مجدد…"
+ "ارسال مجدد یا حذف"
+ "لطفاً یک تماس صوتی با خدمات اضطراری برقرار کنید. در حال حاضر تحویل پیامک شما ممکن نیست."
+ "انجام نشد"
+ "پیام MMS جدید برای دانلود"
+ "پیام MMS جدید"
+ "دانلود نشد"
+ "برای امتحان مجدد لمس کنید"
+ "برای دانلود لمس کنید"
+ "دانلود یا حذف"
+ "در حال دانلود…"
+ "پیام منقضی شده است یا در دسترس نیست"
+ "اندازه: %1$s، تاریخ انقضا: %2$s"
+ "ارسال نمیشود. گیرنده معتبر نیست."
+ "سرویس در شبکه فعال نشده است"
+ "به علت مشکل شبکه ارسال نشد"
+ "پیام منقضی شده است یا در دسترس نیست"
+ "(بدون موضوع)"
+ "فرستنده ناشناس"
+ "تحویل داده شد"
+ "پیام %1$s از %2$s دانلود نشد."
+ "به دلیل حافظه کم، عملیات پایگاه داده انجام نشد"
+ "پیام ارسال نشد"
+ "بعضی از پیامها در «پیامرسانی» ارسال نشدند"
+
+ %d پیام در %d مکالمه
+ %d پیام در %d مکالمه
+
+ "پیام دانلود نشد"
+ "بعضی از پیامها در «پیامرسانی» دانلود نشدند"
+
+ %d پیام در %d مکالمه
+ %d پیام در %d مکالمه
+
+ "پیام به %1$s ارسال نشد"
+ "لطفاً یک تماس صوتی با خدمات اضطراری برقرار کنید. در حال حاضر تحویل پیامک شما به %1$s ممکن نیست."
+
+ %d پیام جدید
+ %d پیام جدید
+
+ "شروع"
+ "دوربین در دسترس نیست"
+ "دوربین در دسترس نیست"
+ "ضبط ویدیو در دسترس نیست"
+ "رسانه ذخیره نمیشود"
+ "عکس نمیگیرد"
+ "برگشت"
+ "بایگانی شده"
+ "حذف"
+ "بایگانی"
+ "لغو بایگانی"
+ "خاموش کردن اعلانها"
+ "روشن کردن اعلانها"
+ "افزودن مخاطب"
+ "دانلود"
+ "ارسال"
+ "حذف"
+ "این پیام حذف شود؟"
+ "این عملکرد قابل واگرد نیست."
+ "حذف"
+
+ این مکالمه حذف شود؟
+ این مکالمهها حذف شود؟
+
+ "حذف"
+ "لغو"
+ "به"
+ "انتخاب چند تصویر"
+ "تأیید انتخاب"
+ "+%d"
+ "صدا ضبط نمیشود. دوباره امتحان کنید."
+ "صدا پخش نمیشود. دوباره امتحان کنید."
+ "صدا ذخیره نشد. دوباره امتحان کنید."
+ "لمس کنید و نگهدارید"
+ "، "
+ " "
+ ": "
+ " "
+ "تصویر"
+ "کلیپ صوتی"
+ "ویدیو"
+ "کارت ویزیت"
+ "دانلود"
+ "پاسخ از طریق پیامک"
+ "پاسخ از طریق MMS"
+ "پاسخ"
+
+ %d شرکتکننده
+ %d شرکتکننده
+
+ "من"
+ "مخاطب مسدود و بایگانی شد"
+ "انسداد مخاطب برطرف شد و از بایگانی خارج شد"
+ "%d بایگانی شد"
+ "%d از بایگانی خارج شد"
+ "اعلانها خاموش شد"
+ "اعلانها روشن شد"
+ "همه چیز تنظیم شد. ارسال را دوباره لمس کنید."
+ "«پیامرسانی» با موفقیت بهعنوان برنامه پیشفرض پیامک تنظیم شد."
+
+ صرفنظر از پیوست
+ صرفنظر از پیوستها
+
+ "پیوست صوتی"
+ "پخش پیوست صوتی"
+ "توقف موقت"
+ "پیام از %s: %s."
+ "پیام ناموفق از %s: %s. زمان: %s."
+ "پیام از %s: %s. زمان: %s."
+ "پیام ارسال نشده به %s: %s. زمان: %s."
+ "ارسال پیام به %s: %s. زمان: %s."
+ "پیام ناموفق به %s: %s. زمان: %s."
+ "پیام به %s: %s. زمان: %s."
+ "پیام ناموفق از %s: %s. زمان: %s. %s."
+ "پیام از %s: %s. زمان: %s. %s."
+ "پیام ارسال نشده به %s: %s. زمان: %s."
+ "ارسال پیام به %s: %s. زمان: %s."
+ "پیام ناموفق به %s: %s. زمان: %s."
+ "پیام به %s: %s. زمان: %s."
+ "پیام ناموفق. برای امتحان مجدد، لمس کنید."
+ "مکالمه با %s"
+ "حذف موضوع"
+ "فیلمبرداری"
+ "ضبط تصویر ثابت"
+ "عکس گرفتن"
+ "شروع فیلمبرداری"
+ "تغییر به دوربین تمام صفحه"
+ "جابهجایی بین دوربین جلو و عقب"
+ "توقف ضبط و پیوست ویدیو"
+ "توقف ضبط ویدیو"
+ "عکسهای «پیامرسانی»"
+
+ %d عکس در آلبوم «%s» ذخیره شد
+ %d عکس در آلبوم «%s» ذخیره شد
+
+
+ %d ویدیو در آلبوم «%s» ذخیره شد
+ %d ویدیو در آلبوم «%s» ذخیره شد
+
+
+ %d پیوست در آلبوم «%s» ذخیره شد
+ %d پیوست در آلبوم «%s» ذخیره شد
+
+
+ %d پیوست در «دانلودها» ذخیره شد
+ %d پیوست در «دانلودها» ذخیره شد
+
+
+ %d پیوست ذخیره شد
+ %d پیوست ذخیره شد
+
+
+ %d پیوست ذخیره نشد
+ %d پیوست ذخیره نشد
+
+ "پیوست MMS ذخیره شد"
+ "تنظیمات"
+ "بایگانی شد"
+ "بستن"
+ "MMS"
+ "پیشرفته"
+ "اشکالزدایی"
+ "اعلانها"
+ "صدا"
+ "بیصدا"
+ "لرزش"
+ "مسدود شده"
+ "گزارشهای تحویل پیامک"
+ "درخواست گزارش تحویل برای هر پیامکی که ارسال میکنید"
+ "بازیابی خودکار"
+ "بازیابی خودکار پیامهای MMS"
+ "بازیابی خودکار در طول رومینگ"
+ "بازیابی خودکار MMS هنگام رومینگ"
+ "پیامرسانی گروهی"
+ "در صورت وجود چند گیرنده، برای ارسال یک پیام از MMS استفاده شود"
+ "برنامه پیامک پیشفرض"
+ "برنامه پیامک پیشفرض"
+
+
+ "شماره تلفن شما"
+ "نامشخص"
+ "صداهای پیام خروجی"
+ "نسخهبرداری پیامک"
+ "نسخهبرداری اطلاعات خام پیامک دریافتی در فایل فضای ذخیرهسازی خارجی"
+ "نسخهبرداری MMS"
+ "نسخهبرداری از اطلاعات خام MMS دریافتی در فایل فضای ذخیرهسازی خارجی"
+ "هشدارهای بیسیم"
+ "گزینههای پیام"
+ "کپی کردن نوشتار"
+ "مشاهده جزئیات"
+ "حذف"
+ "بازارسال"
+ "جزئیات پیام"
+ "نوع: "
+ "پیامک"
+ "پیام چندرسانهای"
+ "از: "
+ "به: "
+ "ارسال شده: "
+ "دریافت شده: "
+ "موضوع: "
+ "اندازه: "
+ "اولویت: "
+ "سیمکارت: "
+ "زیاد"
+ "عادی"
+ "کم"
+ "سیمکارت %s"
+ "مخفی کردن آدرس فرستنده"
+ "نمیتوانید در حال بارگیری پیوستها، پیام ارسال کنید."
+ "پیوست بارگیری نمیشود. دوباره امتحان کنید."
+ "شبکه آماده نیست. دوباره امتحان کنید."
+ "حذف نوشتار"
+ "جابهجایی بین وارد کردن نوشتار و عدد"
+ "افزودن شرکتکنندههای بیشتر"
+ "تأیید شرکتکنندگان"
+ "شروع مکالمه جدید"
+ "انتخاب این مورد"
+ "پخش ویدیو"
+ "افراد و گزینهها"
+ "اشکالزدایی"
+ "افراد و گزینهها"
+ "کلی"
+ "افراد در این مکالمه"
+ "برقراری تماس تلفنی"
+ "ارسال پیام"
+ "ارسال پیام<br/><small>از %s</small>"
+
+ ارسال عکس
+ ارسال عکسها
+
+
+ ارسال فایل صوتی
+ ارسال فایلهای صوتی
+
+
+ ارسال ویدیو
+ ارسال ویدیوها
+
+
+ ارسال کارت تماس
+ ارسال کارتهای تماس
+
+
+ ارسال پیوست
+ ارسال پیوستها
+
+
+ %d پیوست آماده ارسال است
+ %d پیوست آماده ارسال است
+
+ "ارسال بازخورد"
+ "نمایش در فروشگاه Google Play"
+ "اطلاعات نسخه"
+ "نسخه %1$s"
+ "مجوزهای منبع باز"
+ "اعلانها"
+ "به حد مجاز پیوست رسیدید"
+ "پیوست بارگیری نشد."
+ "به مخاطبین افزوده شود؟"
+ "افزودن مخاطب"
+ "موضوع"
+ "موضوع: "
+ "%s%s"
+ "در حال بارگیری کارت مخاطب"
+ "کارت مخاطب بارگیری نشد"
+ "مشاهده کارت مخاطب"
+
+ %d مخاطب
+ %d مخاطب
+
+ "کارتهای مخاطب"
+ "تاریخ تولد"
+ "یادداشتها"
+ "بازارسال پیام"
+ "پاسخ"
+ "1+"
+ "+%d"
+ "پیامک غیرفعال شد"
+ "برای ارسال، «پیامرسانی» را بهعنوان برنامه پیشفرض پیامک تنظیم کنید"
+ "«پیامرسانی» را بهعنوان برنامه پیشفرض پیامک تنظیم کنید"
+ "تغییر"
+ "برای دریافت پیام، «پیامرسانی» را بهعنوان برنامه پیشفرض پیامک تنظیم کنید"
+ "هیچ سیمکارت برگزیدهای برای ارسال پیامکها انتخاب نشده است"
+ "مالک دستگاه این برنامه را مجاز نکرده است."
+ "تأیید"
+ "شرکتکنندههای خیلی زیادی در مکالمه وجود دارد"
+
+ مخاطب نامعتبر
+ مخاطبین نامعتبر
+
+ "تصویر دوربین بارگیری نشد"
+ "شما: "
+ "%s: "
+ "پيشنويس"
+ "وقتی مکالمه جدیدی را شروع کنید، آن را در این لیست مشاهده میکنید"
+ "مکالمات بایگانیشده در اینجا نشان داده میشود"
+ "در حال بارگیری مکالمات…"
+ "تصویر"
+ "کلیپ صوتی"
+ "ویدیو"
+ "کارت ویزیت"
+ "MMS"
+ "واگرد"
+ "امتحان مجدد"
+ "نام یا شماره تلفن مخاطب را برای شروع یک پیام جدید وارد کنید"
+ "مسدود کردن"
+ "مسدود کردن %s"
+ "رفع انسداد %s"
+ "%s مسدود شود؟"
+ "همچنان از این شماره پیامها را دریافت میکنید، اما دیگر به شما اطلاع داده نمیشود. این مکالمه بایگانی میشود."
+ "مخاطبین مسدود شده"
+ "رفع انسداد"
+ "مخاطبین مسدود شده"
+ "انتخاب تصویر از کتابخانه سند"
+ "در حال ارسال پیام"
+ "پیام ارسال شد"
+ "داده شبکه تلفن همراه خاموش است. تنظیماتتان را بررسی کنید."
+ "در حالت هواپیما پیامها ارسال نمیشوند"
+ "پیام ارسال نشد"
+ "پیام دانلود شد"
+ "داده سلولی خاموش است. تنظیماتتان را بررسی کنید."
+ "پیام در حالت هواپیما دانلود نمیشود"
+ "پیام دانلود نشد"
+ "صفر"
+ "یک"
+ "دو"
+ "سه"
+ "چهار"
+ "پنج"
+ "شش"
+ "هفت"
+ "هشت"
+ "نه"
+ "ارسال پیام با %1$s امکانپذیر نیست، خطای %2$d"
+ "ارسال پیام با شرکت مخابراتی ناشناس امکانپذیر نیست، خطای %1$d"
+ "بازارسال: %s"
+ "پیام ارسال نشد: سرویس در شبکه فعال نیست"
+ "پیام ارسال نشد: آدرس مقصد نامعتبر است"
+ "پیام ارسال نشد: پیام نامعتبر است"
+ "پیام ارسال نشد: محتوا پشتیبانی نمیشود"
+ "پیام ارسال نشد: پیام پشتیبانی نمیشود"
+ "پیام ارسال نشد: بیش از حد بزرگ است"
+ "پیام جدید"
+ "مشاهده"
+ "تصویر"
+ "برنامه مناسبی یافت نشد"
+ "حذف گیرنده"
+ "پیام جدید"
+ "لغو"
+ "ویرایش نقطه دستیابی"
+ "تنظیم نشده"
+ "نام"
+ "نام نقطه دستیابی"
+ "MMSC"
+ "پروکسی فراپیام"
+ "درگاه فراپیام"
+ "MCC"
+ "MNC"
+ "نوع نام نقطه دستیابی"
+ "حذف نام نقطه دستیابی"
+ "نام نقطه دستیابی جدید"
+ "ذخیره"
+ "صرفنظر کردن"
+ "فیلد نام نباید خالی باشد."
+ "نام نقطه دستیابی نباید خالی باشد."
+ "فیلد MCC باید ۳ رقمی باشد."
+ "فیلد MNC باید ۲ یا ۳ رقمی باشد."
+ "درحال بازیابی تنظیمات پیشفرض نام نقطه دستیابی."
+ "بازنشانی به پیشفرض"
+ "تنظیمات پیشفرض نام نقطه دستیابی بازنشانی شد."
+ "بدون عنوان"
+ "نامهای نقطه دسترسی"
+ "نامهای نقاط دستیابی"
+ "نام نقطه دستیابی جدید"
+ "تنظیمات نام تقطه دسترسی برای این کاربر در دسترس نیست"
+ "کپی در بریدهدان؟"
+ "کپی"
+ "به %s"
+ "کلی"
+ "پیشرفته"
+ "تنظیمات کلی"
+ "تنظیمات پیشرفته"
+ "سیم کارت «%s»"
+ "ارسال پیامکهای جداگانه به همه گیرندگان. فقط شما جوابها را دریافت میکنید"
+ "ارسال یک MMS تکی به همه گیرندگان"
+ "شماره ناشناس"
+ "پیام جدید"
+ "پیام جدید."
+ "انتخاب سیم"
+ "%1$s انتخاب شد، انتخابگر سیمکارت"
+ "ویرایش موضوع"
+ "انتخاب سیم کارت یا ویرایش موضوع"
+ "برای ضبط کردن صدا، لمس کنید و نگهدارید"
+ "شروع مکالمه جدید"
+ "پیامرسانی"
+ "فهرست «پیامرسانی»"
+ "پیامرسانی"
+ "پیام جدید"
+ "فهرست مکالمات"
+ "در حال بارگیری مکالمات"
+ "در حال بارگیری پیامها"
+ "مشاهده مکالمات بیشتر"
+ "مشاهده پیامهای دیگر"
+ "مکالمه حذف شد"
+ "مکالمه حذف شد. لمس کنید تا مکالمه «پیامرسانی» دیگری نشان داده شود."
+ "مسدود شد"
+ "گشوده شد"
+ "فضای ذخیرهسازی کم است. ممکن است برخی از اطلاعات از دست بروند."
+ "انتخاب پیوستها"
+ "تأیید انتخاب"
+ "%d مورد انتخاب شد"
+ "لطفاً یک یا چند پیوست را بردارید و دوباره امتحان کنید."
+ "میتوانید سعی کنید پیامتان را ارسال کنید اما شاید تا وقتی که یک یا چند پیوست را برندارید، تحویل داده نشود."
+ "فقط میتوانید یک ویدیو در هر پیام ارسال کنید. لطفاً ویدیوهای اضافی را حذف کنید و دوباره امتحان نمایید."
+ "«پیامرسانی» پیوست را بارگیری نکرد."
+ "در هر حال فرستاده شود"
+ "مکالمه را نمیتوان شروع کرد"
+ "%1$s (%2$s)"
+ "%s انتخاب شد"
+
diff --git a/res/values-fi/arrays.xml b/res/values-fi/arrays.xml
new file mode 100644
index 0000000..95d4f23
--- /dev/null
+++ b/res/values-fi/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "ei aihetta"
+ "ei aihetta"
+
+
+ "Kyllä"
+ "Ei"
+ "OK"
+ "Hehe"
+ "Kiitos"
+ "Olen samaa mieltä"
+ "Kiva"
+ "Matkalla"
+ "OK, palaan asiaan"
+ ":)"
+ ":("
+
+
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
new file mode 100644
index 0000000..47ef00f
--- /dev/null
+++ b/res/values-fi/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Viestit"
+ "Viestit"
+ "Valitse keskustelu"
+ "Asetukset"
+ "Lähetä viesti"
+ "Lisää liite"
+ "Ohje"
+ "Tervetuloa"
+ "Ohita"
+ "Seuraava >"
+ "Seuraava"
+ "Sulje"
+ "Asetukset >"
+ "Asetukset"
+ "Viestit tarvitsee käyttöoikeuden tekstiviesteihin, puhelimeen ja yhteystietoihin."
+ "Voit muuttaa käyttöoikeuksia kohdassa Asetukset > Sovellukset > Viestit > Käyttöoikeudet."
+ "Voit muuttaa käyttöoikeuksia kohdassa Asetukset, Sovellukset, Viestit, Käyttöoikeudet."
+ "Usein käytetyt"
+ "Yhteystiedot"
+ "Lähetä numeroon %s"
+ "Tallenna kuva tai video"
+ "Valitse kuvia tästä laitteesta"
+ "Tallenna ääntä"
+ "Valitse valokuva"
+ "Media on valittu."
+ "Median valinta on poistettu."
+ "%d valittu"
+ "kuva %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "kuva"
+ "Tallenna ääntä"
+ "Jaa"
+ "Juuri nyt"
+ "Nyt"
+
+ %d min
+ %d minuutti
+
+
+ %d tuntia
+ %d tunti
+
+
+ %d päivää
+ %d päivä
+
+
+ %d viikkoa
+ viikko
+
+
+ %d kuukautta
+ kuukausi
+
+
+ %d vuotta
+ vuosi
+
+ "Luokan 0 viesti"
+ "Tallenna"
+ "Laitteen tila on vähissä. Viestit poistaa automaattisesti vanhempia viestejä vapauttaakseen tilaa."
+ "Tallennustila vähissä"
+ "Viestit ei ehkä lähetä tai vastaanota viestejä ennen kuin laitteessa on enemmän vapaata tilaa."
+ "Tekstiviestien tallennustila on vähissä. Harkitse viestien poistamista."
+ "Vahvista puhelinnumerosi"
+ "Tekemällä tämän kertaluontoisen vaiheen varmistat, että Viestit toimittaa ryhmäviestisi oikein."
+ "Puhelinnumero"
+ "Poista kaikki mediaa sisältävät viestit"
+ "Poista viestit, joiden ikä on yli %s"
+ "Poista automaattisesti viestit, jotka ovat vanhempia kuin %s"
+ "Ohita"
+ "Poistetaanko kaikki mediaa sisältävät viestit?"
+ "Poistetaanko viestit, jotka ovat vanhempia kuin %s?"
+ "Poistetaanko viestit, jotka ovat vanhempia kuin %s, ja otetaanko automaattinen poisto käyttöön?"
+ "%s sanoi"
+ "Sinä sanoit"
+ "Viesti käyttäjältä %s"
+ "Lähetit viestin"
+ "Lähetetään…"
+ "Ei lähetetty. Yritä uudelleen koskettamalla."
+ "Ei lähetetty. Yritetään uudelleen…"
+ "Lähetä uudelleen tai poista"
+ "Ota yhteyttä hätäpalveluihin soittamalla äänipuhelu. Tekstiviestiäsi ei voida toimittaa tällä hetkellä."
+ "Epäonnistui"
+ "Uusi multimediaviesti ladattavissa"
+ "Uusi multimediaviesti"
+ "Lataus epäonnistui"
+ "Yritä uudelleen koskettamalla"
+ "Lataa koskettamalla"
+ "Lataa tai poista"
+ "Ladataan…"
+ "Viesti on vanhentunut tai ei ole käytettävissä"
+ "koko: %1$s, vanhenee: %2$s"
+ "Ei voi lähettää. Vastaanottaja ei kelpaa."
+ "Palvelua ei ole aktivoitu verkossa"
+ "Ei voitu lähettää verkkovian takia"
+ "Viesti on vanhentunut tai ei ole käytettävissä"
+ "(Ei aihetta)"
+ "Tuntematon lähettäjä"
+ "Toimitettu"
+ "Lähettäjän %2$s viestin %1$s lataaminen epäonnistui."
+ "Tietokantatoimintoa ei voi suorittaa: muisti on vähissä"
+ "Viestiä ei lähetetty"
+ "Joitakin viestejä ei lähetetty Viesteissä."
+
+ %d viestiä %d keskustelussa
+ %d viesti yhdessä keskustelussa
+
+ "Viestiä ei ladattu."
+ "Joitakin viestejä ei ladattu Viesteissä."
+
+ %d viestiä %d keskustelussa
+ %d viesti yhdessä keskustelussa
+
+ "Viestiä numeroon %1$s ei lähetetty."
+ "Ota yhteyttä hätäpalveluihin soittamalla äänipuhelu. Tekstiviestiäsi numeroon %1$s ei voida toimittaa tällä hetkellä."
+
+ %d uutta viestiä
+ Uusi viesti
+
+ "Käynnistä"
+ "Kamera ei käytettävissä"
+ "Kamera ei käytettävissä"
+ "Videon kaappaus ei käytettävissä"
+ "Mediaa ei voi tallentaa"
+ "Kuvan ottaminen ei onnistu."
+ "Edellinen"
+ "Arkistoitu"
+ "Poista"
+ "Arkistoi"
+ "Poista arkistosta"
+ "Poista ilmoitukset käytöstä"
+ "Ota ilmoitukset käyttöön"
+ "Lisää kontakti"
+ "Lataa"
+ "Lähetä"
+ "Poista"
+ "Poistetaanko tämä viesti?"
+ "Tätä toimintoa ei voi kumota."
+ "Poista"
+
+ Poistetaanko nämä keskustelut?
+ Poistetaanko tämä keskustelu?
+
+ "Poista"
+ "Peruuta"
+ "Vastaanottaja"
+ "Valitse useita kuvia"
+ "Vahvista valinta"
+ "+ %d"
+ "Ääntä ei voi tallentaa. Yritä uudelleen."
+ "Ääntä ei voi toistaa. Yritä uudelleen."
+ "Ääntä ei voitu tallentaa. Yritä uudelleen."
+ "Kosketa pitkään"
+ ", "
+ " "
+ ": "
+ " "
+ "Kuva"
+ "Äänileike"
+ "Video"
+ "Yhteystietokortti"
+ "Lataa"
+ "Vastaa tekstiviestitse"
+ "Vastaa MMS-viestillä"
+ "Vastaa"
+
+ %d osallistujaa
+ %d osallistuja
+
+ "Minä"
+ "Yhteystieto estetty ja arkistoitu"
+ "Yhteystiedon esto on poistettu, ja se on poistettu arkistosta."
+ "%d arkistoitua"
+ "%d poistettiin arkistosta"
+ "Ilmoitukset on poistettu käytöstä."
+ "Ilmoitukset on otettu käyttöön."
+ "Kaikki valmiina. Kosketa Lähetä uudelleen."
+ "Viestit asetettiin oletustekstiviestisovellukseksi."
+
+ Hylkää liitteet
+ Hylkää liite
+
+ "Ääniliite"
+ "Toista ääniliite"
+ "Tauko"
+ "Viesti lähettäjältä %s: %s."
+ "Epäonnistunut viesti lähettäjältä %s: %s. Aika: %s."
+ "Viesti lähettäjältä %s: %s. Aika: %s."
+ "Lähettämätön viesti vastaanottajalle %s: %s. Aika: %s."
+ "Lähetetään viestiä vastaanottajalle %s: %s. Aika: %s."
+ "Epäonnistunut viesti vastaanottajalle %s: %s. Aika: %s."
+ "Viesti vastaanottajalle %s: %s. Aika: %s."
+ "Epäonnistunut viesti lähettäjältä %s: %s. Aika: %s. %s."
+ "Viesti lähettäjältä %s: %s. Aika: %s. %s."
+ "Lähettämätön viesti vastaanottajalle %s: %s. Aika: %s."
+ "Lähetetään viestiä vastaanottajalle %s: %s. Aika: %s."
+ "Epäonnistunut viesti vastaanottajalle %s: %s. Aika: %s."
+ "Viesti vastaanottajalle %s: %s. Aika: %s."
+ "Viesti epäonnistui. Yritä uudelleen koskettamalla."
+ "Keskustelu henkilöiden %s kanssa"
+ "Poista aihe"
+ "Tallenna video"
+ "Ota kuva"
+ "Ota kuva"
+ "Aloita videon tallentaminen"
+ "Siirry koko näytön kameraan"
+ "Vaihda etu- ja takakameran välillä"
+ "Lopeta tallennus ja liitä video"
+ "Lopeta videon tallentaminen"
+ "Viestien valokuvat"
+
+ %d valokuvaa tallennettu albumiin %s
+ %d valokuva tallennettu albumiin %s
+
+
+ %d videota tallennettu albumiin %s
+ %d video tallennettu albumiin %s
+
+
+ %d liitettä tallennettu albumiin %s
+ %d liite tallennettu albumiin %s
+
+
+ %d liitettä tallennettu Lataukset-kansioon
+ %d liite tallennettu Lataukset-kansioon
+
+
+ %d liitettä tallennettiin
+ %d liite tallennettiin.
+
+
+ %d liitteen tallentaminen epäonnistui.
+ %d liitteen tallentaminen epäonnistui.
+
+ "Multimedialiite tallennettiin"
+ "Asetukset"
+ "Arkistoitu"
+ "Sulje"
+ "Multimediaviesti"
+ "Lisäasetukset"
+ "Vianetsintä"
+ "Ilmoitukset"
+ "Ääni"
+ "Äänetön"
+ "Värinä"
+ "Estetty"
+ "Tekstiviestin lähetystiedot"
+ "Pyydä lähetystiedot kaikista lähettämistäsi tekstiviesteistä"
+ "Automaattilataus"
+ "Lataa MMS-viestit automaattisesti"
+ "Automaattilataus roaming-tilassa"
+ "Hae MMS-viestit automaattisesti roaming-tilassa."
+ "Ryhmäviestit"
+ "Jaa yksi multimediaviesti useille vastaanottajille"
+ "Oletusarvoinen tekstiviestisovellus"
+ "Oletusarvoinen tekstiviestisovellus"
+
+
+ "Puhelinnumerosi"
+ "Tuntematon"
+ "Lähtevien viestien äänet"
+ "Tekstiviestivedos"
+ "Vedosta vastaanotetut tekstiviestien raakatiedot ulkoiseen tallennustiedostoon"
+ "MMS-vedos"
+ "Vedosta vastaanotetut MMS-raakatiedot ulkoiseen tallennustiedostoon"
+ "Langattoman verkon ilmoitukset"
+ "Viestiasetukset"
+ "Kopioi teksti"
+ "Näytä tiedot"
+ "Poista"
+ "Lähetä edelleen"
+ "Viestin tiedot"
+ "Tyyppi: "
+ "Tekstiviesti"
+ "Multimediaviesti"
+ "Lähettäjä: "
+ "Vastaanottaja: "
+ "Lähetetty: "
+ "Vastaanotettu: "
+ "Aihe: "
+ "Koko: "
+ "Tärkeys: "
+ "SIM-kortti: "
+ "Korkea"
+ "Normaali"
+ "Matala"
+ "SIM-kortti %s"
+ "Piilotettu lähettäjän osoite"
+ "Viestiä ei voi lähettää liitetiedostojen latauksen aikana."
+ "Liitettä ei voi ladata. Yritä uudelleen."
+ "Verkko ei ole valmis. Yritä uudelleen."
+ "Poista teksti"
+ "Vaihda tekstin ja numeroiden syötön välillä"
+ "Lisää osallistujia"
+ "Vahvista osallistujat"
+ "Aloita uusi keskustelu"
+ "Valitse tämä"
+ "Katso video"
+ "Henkilöt ja asetukset"
+ "Vianetsintä"
+ "Henkilöt ja asetukset"
+ "Yleiset"
+ "Keskustelun osallistujat"
+ "Soita puhelu"
+ "Lähetä viesti"
+ "Lähetä viesti<br/><small>kortilta %s</small>"
+
+ Lähetä kuvia
+ Lähetä kuva
+
+
+ Lähetä äänitiedostoja
+ Lähetä äänitiedosto
+
+
+ Lähetä videoita
+ Lähetä video
+
+
+ Lähetä yhteystietokortteja
+ Lähetä yhteystietokortti
+
+
+ Lähetä liitteitä
+ Lähetä liite
+
+
+ %d liitettä valmiina lähetettäväksi
+ Yksi liite valmiina lähetettäväksi
+
+ "Lähetä palautetta"
+ "Näytä Google Play Kaupassa"
+ "Versiotiedot"
+ "Versio %1$s"
+ "Avoimen lähdekoodin käyttöluvat"
+ "Ilmoitukset"
+ "Liitetiedostojen enimmäisraja on saavutettu."
+ "Liitetiedoston lataaminen epäonnistui."
+ "Lisätäänkö yhteystietoihin?"
+ "Lisää yhteystieto"
+ "Aihe"
+ "Aihe: "
+ "%s%s"
+ "Ladataan yhteystietokorttia"
+ "Yhteystietokorttia ei voitu ladata:"
+ "Näytä yhteystietokortti"
+
+ %d yhteystietoa
+ %d yhteystieto
+
+ "Yhteystietokortit"
+ "Syntymäpäivä"
+ "Muistiinpanot"
+ "Lähetä viesti edelleen"
+ "Vastaa"
+ "+1"
+ "+%d"
+ "Tekstiviestit on poistettu käytöstä"
+ "Voit lähettää valittuasi Viestit oletustekstiviestisovellukseksi."
+ "Aseta Viestit oletustekstiviestisovellukseksi."
+ "Vaihda"
+ "Voit vastaanottaa viestejä valittuasi Viestit oletustekstiviestisovellukseksi."
+ "Ensisijaista SIM-korttia ei ole valittu tekstiviestien lähettämiselle"
+ "Laitteen omistaja ei ole myöntänyt lupaa tälle sovellukselle."
+ "OK"
+ "Keskustelussa on liian monta osallistujaa"
+
+ Virheelliset yhteystiedot
+ Virheellinen yhteystieto
+
+ "Kamerakuvaa ei voitu ladata"
+ "Sinä: "
+ "%s: "
+ "Luonnos"
+ "Uudet keskustelut on lueteltu tässä"
+ "Arkistoidut keskustelut näkyvät tässä"
+ "Ladataan keskusteluja…"
+ "Kuva"
+ "Äänileike"
+ "Video"
+ "Yhteystietokortti"
+ "Multimediaviesti"
+ "Kumoa"
+ "Yritä uudelleen"
+ "Aloita uusi viesti antamalla yhteystiedon nimi tai puhelinnumero"
+ "Estä"
+ "Estä %s"
+ "Kumoa esto: %s"
+ "Estetäänkö %s?"
+ "Saat edelleen viestejä tästä numerosta, mutta et enää ilmoituksia. Tämä keskustelu arkistoidaan."
+ "Estetyt yhteystiedot"
+ "KUMOA ESTO"
+ "Estetyt yhteystiedot"
+ "Valitse kuva dokumenttikirjastosta"
+ "Lähetetään viestiä"
+ "Viesti lähetetty"
+ "Matkapuhelindata on kytketty pois. Tarkista asetukset."
+ "Viestejä ei voi lähettää lentokonetilassa"
+ "Viestiä ei voitu lähettää"
+ "Viesti ladattu"
+ "Matkapuhelindata on kytketty pois. Tarkista asetukset."
+ "Viestejä ei voi ladata lentokonetilassa."
+ "Viestin lataaminen epäonnistui."
+ "Nolla"
+ "Yksi"
+ "Kaksi"
+ "Kolme"
+ "Neljä"
+ "Viisi"
+ "Kuusi"
+ "Seitsemän"
+ "Kahdeksan"
+ "Yhdeksän"
+ "Viestin lähettäminen operaattorin %1$s kautta ei onnistunut. Virhe %2$d"
+ "Viestin lähettäminen tuntemattoman operaattorin kautta ei onnistunut. Virhe %1$d"
+ "Vl: %s"
+ "Viestiä ei lähetetty: palvelu ei ole käytössä verkossa"
+ "Viestiä ei lähetetty: virheellinen kohdeosoite"
+ "Viestiä ei lähetetty: virheellinen viesti"
+ "Viestiä ei lähetetty: sisältöä ei tueta"
+ "Viestiä ei lähetetty: viestiä ei tueta"
+ "Viestiä ei lähetetty: liian suuri"
+ "Uusi viesti"
+ "Näytä"
+ "Kuva"
+ "Sopivaa sovellusta ei löytynyt"
+ "Poista vastaanottaja"
+ "Uusi viesti"
+ "Peruuta"
+ "Muokkaa tukiasemaa"
+ "Ei asetettu"
+ "Nimi"
+ "APN"
+ "MMSC"
+ "Multimediaviestien välityspalvelin"
+ "Multimediaviestien portti"
+ "MCC"
+ "MNC"
+ "APN-tyyppi"
+ "Poista APN"
+ "Uusi APN"
+ "Tallenna"
+ "Hylkää"
+ "Nimi-kenttä ei voi olla tyhjä."
+ "APN ei voi olla tyhjä."
+ "MCC-kentän arvon oltava kolminumeroinen."
+ "MNC-kentän arvon on oltava kaksi- tai kolminumeroinen."
+ "Palautetaan APN-oletusasetuksia"
+ "Palauta oletukseksi"
+ "APN-oletusasetukset on palautettu."
+ "Nimetön"
+ "Tukiasemien nimet"
+ "APN:t"
+ "Uusi APN"
+ "Tämä käyttäjä ei voi käyttää APN-asetuksia"
+ "Kopioidaanko leikepöydälle?"
+ "Kopioi"
+ "vastaanottaja: %s"
+ "Yleiset"
+ "Lisäasetukset"
+ "Yleiset asetukset"
+ "Lisäasetukset"
+ "%s SIM"
+ "Lähetä oma tekstiviesti kullekin vastaanottajalle. Vain sinä saat vastaukset."
+ "Lähetä yksi MMS-viesti kaikille vastaanottajille"
+ "Tuntematon numero"
+ "Uusi viesti"
+ "Uusi viesti."
+ "SIM-valitsin"
+ "%1$s valittu, SIM-valitsin"
+ "Muokkaa aihetta"
+ "Valitse SIM tai muokkaa aihetta"
+ "Nauhoita ääntä koskettamalla pitkään"
+ "Aloita uusi keskustelu."
+ "Viestit"
+ "Viestit-luettelo"
+ "Viestit"
+ "Uusi viesti"
+ "Keskusteluluettelo"
+ "Ladataan keskusteluja."
+ "Ladataan viestejä."
+ "Näytä lisää keskusteluita."
+ "Näytä lisää viestejä."
+ "Keskustelu on poistettu."
+ "Keskustelu poistettu. Näytä toinen Viestit-keskustelu."
+ "Estetty"
+ "Esto kumottu"
+ "Tallennustila on vähissä. Tietoja voi kadota."
+ "Valitse liitteet"
+ "Vahvista valinta"
+ "%d valittu"
+ "Poista yksi tai useampi liitetiedosto ja yritä uudelleen."
+ "Voit yrittää lähettää viestin, mutta sitä ei ehkä toimiteta ennen kuin olet poistanut yhden tai useamman liitetiedoston."
+ "Voit lähettää vain yhden videon viestiä kohden. Poista ylimääräiset videot ja yritä uudelleen."
+ "Viestit ei pystynyt lataamaan liitetiedostoa."
+ "Lähetä silti"
+ "Keskustelun aloittaminen epäonnistui"
+ "%1$s (%2$s)"
+ "%s valittu"
+
diff --git a/res/values-fr-rCA/arrays.xml b/res/values-fr-rCA/arrays.xml
new file mode 100644
index 0000000..05d76fb
--- /dev/null
+++ b/res/values-fr-rCA/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "sans objet"
+ "aucun objet"
+
+
+ "Oui"
+ "Non"
+ "OK"
+ "Hé hé"
+ "Merci"
+ "J\'accepte"
+ "Bien"
+ "En chemin"
+ "OK, je te réponds plus tard"
+ ":)"
+ ":("
+
+
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..239f4af
--- /dev/null
+++ b/res/values-fr-rCA/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Messagerie"
+ "Messagerie"
+ "Sélectionner la conversation"
+ "Paramètres"
+ "Envoyer un message"
+ "Ajouter une pièce jointe"
+ "Aide"
+ "Bienvenue"
+ "Ignorer"
+ "Suivant >"
+ "Suivant"
+ "Quitter"
+ "Paramètres >"
+ "Paramètres"
+ "Vous devez accorder à l\'application Messagerie des autorisations d\'accès aux messages, au téléphone et aux contacts."
+ "Vous pouvez modifier les autorisations dans Paramètres > Applications > Messagerie > Autorisations."
+ "Vous pouvez modifier les autorisations dans Paramètres > Applications > Messagerie > Autorisations."
+ "Fréquents"
+ "Tous les contacts"
+ "Envoyer à %s"
+ "Prendre des photos ou filmer une vidéo"
+ "Choisir des images de cet appareil"
+ "Enregistrer des fichiers audio"
+ "Choisir une photo"
+ "Support sélectionné."
+ "Support désélectionné."
+ "%d sélectionné(s)"
+ "Image : %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "image"
+ "Enregistrer des fichiers audio"
+ "Partager"
+ "À l\'instant"
+ "Maintenant"
+
+ %d min
+ %d min
+
+
+ %d heure
+ %d heures
+
+
+ %d jour
+ %d jours
+
+
+ %d semaine
+ %d semaines
+
+
+ %d mois
+ %d mois
+
+
+ %d an
+ %d ans
+
+ "Message de catégorie 0"
+ "Enregistrer"
+ "L\'appareil manque d\'espace. Pour en libérer, les messages de l\'application Messagerie les plus anciens seront automatiquement supprimés."
+ "L\'espace de stockage est presque plein"
+ "Il est possible que vous ne puissiez pas envoyer ni recevoir de messages dans l\'application Messagerie jusqu\'à ce que votre appareil ait plus d\'espace libre."
+ "Stockage limité pour les textos. Vous devrez peut-être supprimer des messages."
+ "Confirmez votre numéro de téléphone"
+ "Cette étape unique permet de garantir que vos messages de groupe sont correctement envoyés dans Messagerie."
+ "Numéro de téléphone"
+ "Supprimer tous les messages avec du contenu multimédia"
+ "Supprimer les messages datant de plus de %s"
+ "Suppression automatique des messages de plus de %s"
+ "Ignorer"
+ "Supprimer tous les messages avec contenu multimédia?"
+ "Supprimer les messages datant de plus de %s?"
+ "Supprimer les messages de plus de %s et activer la suppression automatique?"
+ "%s a dit"
+ "Vous avez dit"
+ "Message de %s"
+ "Vous avez envoyé un message"
+ "Envoi en cours..."
+ "Message non envoyé. Touchez ici pour réessayer."
+ "Message non envoyé. Nouvelle tentative en cours..."
+ "Renvoyer ou supprimer"
+ "Veuillez appeler les services d\'urgence. Impossible d\'envoyer votre texto pour l\'instant."
+ "Échec"
+ "Nouveau message multimédia à télécharger"
+ "Nouveau message multimédia"
+ "Échec du téléchargement"
+ "Touchez ici pour réessayer"
+ "Touchez ici pour lancer le téléchargement."
+ "Télécharger ou supprimer"
+ "Téléchargement en cours..."
+ "Le message a expiré ou n\'est plus disponible."
+ "taille : %1$s, date d\'expiration : %2$s"
+ "Impossible d\'envoyer le message. Destinataire non valide."
+ "Ce service n\'est pas activé sur le réseau"
+ "Impossible d\'envoyer le message en raison d\'un problème de réseau"
+ "Le message est expiration ou n\'est plus disponible."
+ "(Aucun objet)"
+ "Expéditeur inconnu"
+ "Distribué"
+ "Impossible de télécharger le message « %1$s » de l\'utilisateur suivant : %2$s."
+ "Impossible d\'effectuer cette opération dans la base de données. Mémoire insuffisante."
+ "Le message n\'a pas été envoyé"
+ "Certains messages n\'ont pas été envoyés dans Messagerie"
+
+ %d message dans %d conversations
+ %d messages dans %d conversations
+
+ "Message non téléchargé"
+ "Certains messages n\'ont pas été téléchargés dans Messagerie"
+
+ %d message dans %d conversations
+ %d messages dans %d conversations
+
+ "Échec de l\'envoi du message à %1$s"
+ "Veuillez appeler les services d\'urgence. Impossible d\'envoyer votre texto au numéro %1$s pour l\'instant."
+
+ %d nouveau message
+ %d nouveaux messages
+
+ "Démarrer"
+ "L\'appareil photo n\'est pas disponible"
+ "L\'appareil photo n\'est pas disponible"
+ "L\'enregistrement vidéo n\'est pas disponible"
+ "Impossible d\'enregistrer le média"
+ "Impossible de prendre la photo."
+ "Précédent"
+ "Archivée"
+ "Supprimer"
+ "Archiver"
+ "Annuler l\'archivage"
+ "Désactiver les notifications"
+ "Activer les notifications"
+ "Ajouter un contact"
+ "Télécharger"
+ "Envoyer"
+ "Supprimer"
+ "Supprimer ce message?"
+ "Cette action ne peut être annulée."
+ "Supprimer"
+
+ Supprimer cette conversation?
+ Supprimer ces conversations?
+
+ "Supprimer"
+ "Annuler"
+ "À"
+ "Sélectionner plusieurs images"
+ "Confirmer la sélection"
+ "+%d"
+ "Impossible d\'enregistrer l\'audio. Veuillez réessayer."
+ "Impossible de lire l\'audio. Veuillez réessayer."
+ "Impossible d\'enregistrer l\'audio. Veuillez réessayer."
+ "Maintenez le doigt ici"
+ ", "
+ " "
+ ": "
+ " "
+ "Image"
+ "Extrait audio"
+ "Vidéo"
+ "Fiche de contact"
+ "Télécharger"
+ "Répondre par texto"
+ "Rép. m. multim."
+ "Répondre"
+
+ %d participant
+ %d participants
+
+ "Moi"
+ "Contact bloqué et archivé"
+ "Contact débloqué et archivage annulé"
+ "%d archivée(s)"
+ "Archivage annulé de %d"
+ "Les notifications sont désactivées"
+ "Les notifications sont activées"
+ "Tout est prêt. Touchez « Envoyer » de nouveau."
+ "L\'application Messagerie a été définie comme application de messagerie par défaut."
+
+ Supprimer la pièce jointe
+ Supprimer les pièces jointes
+
+ "Contenu audio joint"
+ "Jouer le contenu audio joint"
+ "Pause"
+ "Message de %s : %s."
+ "Échec de la réception du message de %s : %s. Heure : %s."
+ "Message de %s : %s. Heure : %s."
+ "Message non envoyé à %s : %s. Heure : %s."
+ "Envoi du message à %s : %s. Heure : %s."
+ "Échec de l\'envoi du message à %s : %s. Heure : %s."
+ "Message à %s : %s. Heure : %s."
+ "Échec de la réception du message de %s : %s. Heure : %s. %s."
+ "Message de %s : %s. Heure : %s. %s."
+ "Message non envoyé à : %s: %s. Heure: %s."
+ "Envoi du message à %s : %s. Heure : %s."
+ "Échec de l\'envoi du message à %s : %s. Heure : %s."
+ "Message à %s : %s. Heure : %s."
+ "Échec du message. Touchez pour réessayer."
+ "Conversation avec %s"
+ "Supprimer l\'objet"
+ "Filmer une vidéo"
+ "Capturer une image fixe"
+ "Prendre une photo"
+ "Lancer l\'enregistrement vidéo"
+ "Activer le mode plein écran de l\'appareil photo"
+ "Basculer entre l\'appareil photo avant et arrière"
+ "Arrêter l\'enregistrement et joindre la vidéo"
+ "Arrêter l\'enregistrement vidéo"
+ "Photos de Messagerie"
+
+ %d photo enregistrée dans l\'album « %s »
+ %d photos enregistrées dans l\'album « %s »
+
+
+ %d vidéo enregistrée dans l\'album « %s »
+ %d vidéos enregistrées dans l\'album « %s »
+
+
+ %d pièce jointe enregistrée dans l\'album « %s »
+ %d pièces jointes enregistrées dans l\'album « %s »
+
+
+ %d pièce jointe enregistrée dans le dossier « Téléchargements »
+ %d pièces jointes enregistrées dans le dossier « Téléchargements »
+
+
+ %d pièce jointe enregistrée
+ %d pièces jointes enregistrées
+
+
+ Impossible d\'enregistrer %d pièce jointe
+ Impossible d\'enregistrer %d pièces jointes
+
+ "La pièce jointe du message multimédia a été enregistrée"
+ "Paramètres"
+ "Archivée"
+ "Fermer"
+ "Message multimédia"
+ "Avancés"
+ "Déboguer"
+ "Notifications"
+ "Son"
+ "Mode silencieux"
+ "Vibreur"
+ "Bloqué"
+ "Accusés de réception des messages texte"
+ "Demander un accusé de réception pour chaque texto envoyé"
+ "Récupération automatique"
+ "Récupérer automatiquement les messages multimédias"
+ "Récupération auto. en itinérance"
+ "Récupérer automatiquement les messages multimédias en itinérance"
+ "Messagerie de groupe"
+ "Utiliser la messagerie multimédia pour envoyer un message unique à plusieurs destinataires"
+ "Application de messagerie texte par défaut"
+ "Application de messagerie texte par défaut"
+
+
+ "Votre numéro de téléphone"
+ "Inconnu"
+ "Sons pour les messages sortants"
+ "Capturer les messages texte"
+ "Capturer les données brutes reçues des messages multimédias dans un fichier de stockage externe"
+ "Capturer les messages multimédias"
+ "Capturer les données brutes reçues des messages multimédias dans un fichier de stockage externe"
+ "Alertes par réseau sans fil"
+ "Options relatives aux messages"
+ "Copier le texte"
+ "Afficher les détails"
+ "Supprimer"
+ "Transférer"
+ "Détails du message"
+ "Type : "
+ "Message texte"
+ "Message multimédia"
+ "De : "
+ "À : "
+ "Envoyé : "
+ "Reçu : "
+ "Objet : "
+ "Taille : "
+ "Priorité : "
+ "Carte SIM : "
+ "Élevée"
+ "Normale"
+ "Faible"
+ "Fente SIM %s"
+ "Adresse d\'expéditeur masquée"
+ "Impossible d\'envoyer le message pendant le chargement des pièces jointes."
+ "Impossible de charger la pièce jointe. Veuillez réessayer."
+ "Le réseau n\'est pas prêt. Réssayez."
+ "Supprimer le texte"
+ "Alterner entre l\'entrée de texte et de chiffres"
+ "Ajouter des participants"
+ "Confirmer les participants"
+ "Commencer une nouvelle discussion"
+ "Sélectionner cet article"
+ "Lire la vidéo"
+ "Participants et options"
+ "Déboguer"
+ "Participants et options"
+ "Général"
+ "Participants à cette conversation"
+ "Faire un appel"
+ "Envoyer un message"
+ "Envoyer un message<br/><small>à partir de %s</small>"
+
+ Envoyer la photo
+ Envoyer les photos
+
+
+ Envoyer le fichier audio
+ Envoyer les fichiers audio
+
+
+ Envoyer la vidéo
+ Envoyer les vidéos
+
+
+ Envoyer la fiche de contact
+ Envoyer les fiches de contact
+
+
+ Envoyer la pièce jointe
+ Envoyer les pièces jointes
+
+
+ %d pièce jointe est prête à être envoyée
+ %d pièces jointes sont prêtes à être envoyées
+
+ "Envoyer des commentaires"
+ "Afficher dans la boutique Google Play Store"
+ "Détails de la version"
+ "Version %1$s"
+ "Licences de logiciels libres"
+ "Notifications"
+ "Taille maximale des pièces jointes atteinte"
+ "Échec du chargement de la pièce jointe."
+ "Ajouter aux contacts?"
+ "Ajouter un contact"
+ "Objet"
+ "Objet : "
+ "%s%s"
+ "Chargement de la fiche de contact"
+ "Impossible de charger la fiche de contact"
+ "Afficher la fiche de contact"
+
+ %d contact
+ %d contacts
+
+ "Fiches de contact"
+ "Anniversaire"
+ "Remarques"
+ "Transférer le message"
+ "Répondre"
+ "+1"
+ "+%d"
+ "Messagerie texte désactivée"
+ "Pour envoyer des messages, définissez Messagerie comme application de messagerie par défaut"
+ "Définissez Messagerie comme application de messagerie par défaut"
+ "Modifier"
+ "Pour recevoir des messages, vous devez définir l\'application Messagerie comme application de messagerie par défaut."
+ "Aucune carte SIM préférée n\'a été sélectionnée pour l\'envoi des messages texte"
+ "Cette application n\'est pas autorisée par le propriétaire de l\'appareil."
+ "OK"
+ "Trop de participants dans une conversation"
+
+ Contact non valide
+ Contacts non valides
+
+ "Impossible de charger l\'image de l\'appareil photo"
+ "Vous : "
+ "%s : "
+ "Brouillon"
+ "Lorsque vous commencez une conversation, elle s\'affiche ici"
+ "Les conversations archivées s\'affichent ici"
+ "Chargement des conversations en cours..."
+ "Image"
+ "Extrait audio"
+ "Vidéo"
+ "Fiche de contact"
+ "Message multimédia"
+ "Annuler"
+ "Réessayer"
+ "Entrez le nom d\'un contact ou un numéro de téléphone pour commencer un nouveau message"
+ "Bloquer"
+ "Bloquer %s"
+ "Débloquer %s"
+ "Bloquer %s?"
+ "Vous continuerez à recevoir les messages envoyés par ce numéro, mais vous ne recevrez plus de notifications. Cette conversation sera archivée."
+ "Contacts bloqués"
+ "DÉBLOQUER"
+ "Contacts bloqués"
+ "Choisissez une image dans la bibliothèque de documents"
+ "Envoi du message en cours..."
+ "Message envoyé"
+ "Les données cellulaires sont désactivées. Vérifiez vos paramètres."
+ "Impossible d\'envoyer des messages en mode Avion"
+ "Le message n\'a pas pu être envoyé"
+ "Message téléchargé"
+ "Les données cellulaires sont désactivées. Vérifiez vos paramètres."
+ "Impossible de télécharger des messages en mode Avion"
+ "Le message n\'a pas pu être téléchargé"
+ "Zéro"
+ "Un"
+ "Deux"
+ "Trois"
+ "Quatre"
+ "Cinq"
+ "Six"
+ "Sept"
+ "Huit"
+ "Neuf"
+ "Impossible d\'envoyer le message par l\'intermédiaire de %1$s. Erreur : %2$d."
+ "Impossible d\'envoyer le message par l\'intermédiaire d\'un fournisseur de services inconnu. Erreur : %1$d."
+ "Tr : %s"
+ "Le message n\'a pas été envoyé, car le service n\'est pas activé sur le réseau"
+ "Le message n\'a pas été envoyé, car l\'adresse de destination est incorrecte"
+ "Le message n\'a pas été envoyé, car il n\'est pas valide"
+ "Le message n\'a pas été envoyé, car le contenu est incompatible"
+ "Le message n\'a pas été envoyé, car il n\'est pas pris en charge"
+ "Le message n\'a pas été envoyé, car il est trop gros"
+ "Nouveau message"
+ "Afficher"
+ "Image"
+ "Impossible de trouver une application appropriée."
+ "Supprimer le destinataire"
+ "Nouveau message"
+ "Annuler"
+ "Modifier le point d\'accès"
+ "Non défini"
+ "Nom"
+ "Nom du point d\'accès"
+ "MMSC"
+ "Serveur mandataire pour la messagerie multimédia"
+ "Port pour la messagerie multimédia"
+ "MCC"
+ "MNC"
+ "Type de point d\'accès"
+ "Supprimer le point d\'accès"
+ "Nouveau point d\'accès"
+ "Enregistrer"
+ "Supprimer"
+ "Le champ « Nom » est obligatoire."
+ "Le champ « Point d\'accès » est obligatoire."
+ "Le champ MCC doit contenir 3 chiffres."
+ "Le champ MNC doit contenir 2 ou 3 chiffres."
+ "Restauration des paramètres de points d\'accès par défaut en cours..."
+ "Rétablir les valeurs par défaut"
+ "La réinitialisation des paramètres de points d\'accès par défaut est terminée."
+ "Sans titre"
+ "Noms des points d\'accès"
+ "Noms des points d\'accès"
+ "Nouveau point d\'accès"
+ "Les paramètres de point d\'accès ne sont pas disponibles pour cet utilisateur"
+ "Copier dans le presse-papiers?"
+ "Copier"
+ "à %s"
+ "Général"
+ "Avancés"
+ "Paramètres généraux"
+ "Paramètres avancés"
+ "Carte SIM « %s »"
+ "Envoyer des textos individuels à tous les destinataires. Vous seul recevrez les réponses."
+ "Envoyer des messages multimédias individuels à tous les destinataires."
+ "Numéro inconnu"
+ "Nouveau message"
+ "Nouveau message."
+ "Sélecteur de carte SIM"
+ "%1$s sélectionnée, sélecteur de carte SIM"
+ "Modifier l\'objet"
+ "Sélectionner une carte SIM ou modifier l\'objet"
+ "Maintenez le doigt sur le bouton pour enregistrer des contenus audio"
+ "Commencer une nouvelle discussion"
+ "Messagerie"
+ "Liste des conversations"
+ "Messagerie"
+ "Nouveau message"
+ "Liste des conversations"
+ "Chargement des conversations en cours..."
+ "Messages en cours de chargement…"
+ "Afficher plus de conversations"
+ "Voir plus de messages"
+ "Conversation supprimée"
+ "La conversation a été supprimée. Touchez pour afficher une autre conversation dans Messagerie."
+ "Bloqué"
+ "Débloqué"
+ "L\'espace de stockage est faible. Vous risquez de perdre certaines données."
+ "Sélectionner les pièces jointes"
+ "Confirmer la sélection"
+ "%d sélectionné(s)"
+ "Veuillez supprimer une ou plusieurs pièces jointes, puis réessayer."
+ "Vous pouvez essayer d\'envoyer votre message, mais il risque de ne pas être remis sauf si vous supprimez une ou plusieurs pièces jointes."
+ "Vous ne pouvez envoyer qu\'une vidéo par message. Veuillez supprimer les vidéos supplémentaires, puis réessayer."
+ "Échec du chargement de la pièce jointe."
+ "Envoyer quand même"
+ "Impossible de démarrer la conversation"
+ "%1$s (%2$s)"
+ "%s sélectionnée"
+
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
new file mode 100644
index 0000000..6bd25ad
--- /dev/null
+++ b/res/values-fr/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "aucun objet"
+ "nosubject"
+
+
+ "Oui"
+ "Non"
+ "OK"
+ "Haha"
+ "Merci"
+ "J\'accepte."
+ "Bien"
+ "J\'arrive."
+ "OK, je te réponds plus tard."
+ ":)"
+ ":("
+
+
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
new file mode 100644
index 0000000..688c1d5
--- /dev/null
+++ b/res/values-fr/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "SMS/MMS"
+ "SMS/MMS"
+ "Sélectionner la conversation"
+ "Paramètres"
+ "Envoyer le message"
+ "Ajouter une pièce jointe"
+ "Aide"
+ "Bienvenue"
+ "Ignorer"
+ "Suivant >"
+ "Suivant"
+ "Quitter"
+ "Paramètres >"
+ "Paramètres"
+ "Vous devez accorder à l\'application de SMS/MMS des autorisations d\'accès aux SMS, au téléphone et aux contacts."
+ "Vous pouvez modifier les autorisations dans Paramètres > Applications > SMS/MMS > Autorisations."
+ "Vous pouvez modifier les autorisations dans Paramètres > Applications > SMS/MMS > Autorisations."
+ "Fréquents"
+ "Tous les contacts"
+ "Envoyer au %s"
+ "Prendre des photos ou filmer une vidéo"
+ "Sélectionner des images sur cet appareil"
+ "Enregistrer un fichier audio"
+ "Sélectionner une photo"
+ "Le support est sélectionné."
+ "Le support est désélectionné."
+ "%d élément(s) sélectionné(s)"
+ "image %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "image"
+ "Enregistrer un fichier audio"
+ "Partager"
+ "À l\'instant"
+ "À l\'instant"
+
+ %d min
+ %d min
+
+
+ %d heure
+ %d heures
+
+
+ %d jour
+ %d jours
+
+
+ %d semaine
+ %d semaines
+
+
+ %d mois
+ %d mois
+
+
+ %d an
+ %d ans
+
+ "Message de catégorie 0"
+ "Enregistrer"
+ "L\'appareil manque d\'espace. Pour en libérer, les messages de l\'application SMS/MMS les plus anciens seront supprimés automatiquement."
+ "Espace de stockage bientôt saturé"
+ "Il est possible que vous ne puissiez pas envoyer ni recevoir de messages via l\'application de SMS/MMS jusqu\'à ce que votre appareil dispose de plus d\'espace."
+ "Espace de stockage limité. Il est possible que vous deviez supprimer des SMS."
+ "Confirmez votre numéro de téléphone"
+ "Cette étape unique permet de garantir que vos messages de groupe sont correctement envoyés via les SMS/MMS."
+ "Numéro de téléphone"
+ "Supprimer tous les messages comportant du contenu multimédia"
+ "Supprimer les messages datant de plus de %s"
+ "Supprimer automatiquement les messages datant de plus de %s"
+ "Ignorer"
+ "Supprimer tous les messages comportant du contenu multimédia ?"
+ "Supprimer les messages datant de plus de %s ?"
+ "Supprimer les messages datant de plus de %s et activer la suppression automatique ?"
+ "%s a dit"
+ "Vous avez dit"
+ "Expéditeur du message : %s"
+ "Vous avez envoyé un message."
+ "Envoi en cours…"
+ "Message non envoyé. Veuillez appuyer ici pour réessayer."
+ "Message non envoyé. Nouvelle tentative en cours…"
+ "Renvoyer ou supprimer"
+ "Veuillez appeler les services d\'urgence. Impossible d\'envoyer votre SMS pour l\'instant."
+ "Échec."
+ "Nouveau MMS à télécharger"
+ "Nouveau message MMS"
+ "Téléchargement impossible."
+ "Appuyer ici pour réessayer"
+ "Appuyer ici pour lancer le téléchargement"
+ "Télécharger ou supprimer"
+ "Téléchargement en cours…"
+ "Le message est arrivé à expiration ou n\'est plus disponible."
+ "taille : %1$s, expiration : %2$s"
+ "Impossible d\'envoyer le message. Destinataire non valide."
+ "Service non activé sur le réseau."
+ "Impossible d\'envoyer le message en raison de problèmes sur le réseau."
+ "Le message est arrivé à expiration ou n\'est plus disponible."
+ "(Aucun objet)"
+ "Expéditeur inconnu"
+ "Distribué"
+ "Impossible de télécharger le message \"%1$s\" de l\'utilisateur suivant : %2$s."
+ "Impossible d\'effectuer cette opération dans la base de données. Mémoire insuffisante."
+ "Le message n\'a pas été envoyé."
+ "Certains messages n\'ont pas été envoyés via les SMS/MMS."
+
+ %d messages dans %d conversation
+ %d messages dans %d conversations
+
+ "Message non téléchargé."
+ "Certains messages n\'ont pas été téléchargés via les SMS/MMS."
+
+ %d messages dans %d conversation
+ %d messages dans %d conversations
+
+ "Échec de l\'envoi du message à %1$s"
+ "Veuillez appeler les services d\'urgence. Impossible d\'envoyer votre SMS au numéro %1$s pour l\'instant."
+
+ %d nouveau message
+ %d nouveaux messages
+
+ "Démarrer"
+ "Caméra indisponible."
+ "Caméra indisponible."
+ "Enregistrement vidéo indisponible."
+ "Impossible d\'enregistrer le fichier multimédia."
+ "Impossible de prendre la photo."
+ "Retour"
+ "Archivées"
+ "Supprimer"
+ "Archiver"
+ "Annuler l\'archivage"
+ "Désactiver les notifications"
+ "Activer les notifications"
+ "Ajouter un contact"
+ "Télécharger"
+ "Envoyer"
+ "Supprimer"
+ "Supprimer ce message ?"
+ "Cette action est irréversible."
+ "Supprimer"
+
+ Supprimer cette conversation ?
+ Supprimer ces conversations ?
+
+ "Supprimer"
+ "Annuler"
+ "À"
+ "Sélectionner plusieurs images"
+ "Confirmer la sélection"
+ "+ %d"
+ "Impossible d\'enregistrer l\'audio. Veuillez réessayer."
+ "Impossible de lire l\'audio. Veuillez réessayer."
+ "Impossible d\'enregistrer l\'audio. Veuillez réessayer."
+ "Appuyez ici de manière prolongée"
+ ", "
+ " "
+ " : "
+ " "
+ "Image"
+ "Extrait audio"
+ "Vidéo"
+ "Fiche de contact"
+ "Télécharger"
+ "Répondre par SMS"
+ "Répondre par MMS"
+ "Répondre"
+
+ %d participant
+ %d participants
+
+ "Moi"
+ "Contact bloqué et archivé"
+ "Contact débloqué et archivage annulé."
+ "%d archivée(s)"
+ "Archivage annulé de %d conversation(s)."
+ "Notifications désactivées."
+ "Notifications activées."
+ "Configuration réussie. Appuyez de nouveau sur \"Envoyer\"."
+ "L\'application de SMS/MMS a bien été définie comme application de SMS par défaut."
+
+ Supprimer la pièce jointe
+ Supprimer les pièces jointes
+
+ "Pièce jointe audio"
+ "Jouer le contenu audio joint"
+ "Pause"
+ "Message de %s : %s."
+ "Échec de la réception du message envoyé par %s : %s. Heure : %s"
+ "Message envoyé par %s : %s. Heure : %s"
+ "Message non envoyé à %s : %s. Heure : %s"
+ "Envoi du message à %s en cours : %s. Heure : %s"
+ "Échec de l\'envoi du message à %s : %s. Heure : %s"
+ "Message à %s : %s. Heure : %s"
+ "Échec de la réception du message envoyé par %s : %s. Heure : %s. %s"
+ "Message envoyé par %s : %s. Heure : %s. %s"
+ "Message non envoyé au groupe \"%s\" : %s. Heure : %s"
+ "Envoi du message au groupe \"%s\" en cours : %s. Heure : %s"
+ "Échec de l\'envoi du message au groupe \"%s\" : %s. Heure : %s"
+ "Message au groupe \"%s\" : %s. Heure : %s"
+ "Échec du message. Appuyez pour réessayer."
+ "Conversation avec %s"
+ "Supprimer l\'objet"
+ "Enregistrer une vidéo"
+ "Capturer une image fixe"
+ "Prendre une photo"
+ "Lancer l\'enregistrement vidéo"
+ "Passer en caméra plein écran"
+ "Passer de la caméra frontale à la caméra arrière, et inversement"
+ "Arrêter l\'enregistrement et joindre la vidéo"
+ "Arrêter l\'enregistrement vidéo"
+ "Photos envoyées ou reçues par SMS/MMS"
+
+ %d photo a été enregistrée dans l\'album \"%s\"
+ %d photos ont été enregistrées dans l\'album \"%s\".
+
+
+ %d vidéo a été enregistrée dans l\'album \"%s\".
+ %d vidéos ont été enregistrées dans l\'album \"%s\".
+
+
+ %d pièce jointe a été enregistrée dans l\'album \"%s\".
+ %d pièces jointes ont été enregistrées dans l\'album \"%s\".
+
+
+ %d pièce jointe a été enregistrée dans le dossier \"Téléchargements\".
+ %d pièces jointes ont été enregistrées dans le dossier \"Téléchargements\".
+
+
+ %d pièce jointe a été enregistrée.
+ %d pièces jointes ont été enregistrées.
+
+
+ Impossible d\'enregistrer %d pièce jointe.
+ Impossible d\'enregistrer %d pièces jointes.
+
+ "Pièce jointe du MMS enregistrée"
+ "Paramètres"
+ "Archivées"
+ "Fermer"
+ "MMS"
+ "Paramètres avancés"
+ "Déboguer"
+ "Notifications"
+ "Son"
+ "Mode silencieux"
+ "Vibreur"
+ "Bloqué"
+ "Accusés de réception de SMS"
+ "Demander un accusé de réception pour chaque SMS envoyé"
+ "Récupération automatique"
+ "Récupérer automatiquement les MMS"
+ "Récupération auto. en itinérance"
+ "Récupérer automatiquement les MMS en itinérance"
+ "Messagerie de groupe"
+ "Utiliser un MMS pour envoyer un message unique à plusieurs destinataires"
+ "Application SMS par défaut"
+ "Application SMS par défaut"
+
+
+ "Votre numéro de téléphone"
+ "Inconnu"
+ "Sons pour les messages sortants"
+ "Créer une copie des SMS"
+ "Créer une copie des données SMS brutes reçues dans un fichier de stockage externe"
+ "Créer une copie des MMS"
+ "Créer une copie des données MMS brutes reçues dans un fichier de stockage externe"
+ "Alertes via le réseau sans fil"
+ "Options relatives au message"
+ "Copier le texte"
+ "Afficher les détails"
+ "Supprimer"
+ "Transférer"
+ "Détails du message"
+ "Type : "
+ "SMS"
+ "MMS"
+ "Expéditeur : "
+ "Destinataire : "
+ "Envoyé le : "
+ "Reçu le : "
+ "Objet : "
+ "Taille : "
+ "Priorité : "
+ "SIM : "
+ "Élevée"
+ "Normale"
+ "Basse"
+ "SIM %s"
+ "Adresse de l\'expéditeur masquée"
+ "Impossible d\'envoyer le message pendant le chargement des pièces jointes."
+ "Impossible de charger la pièce jointe. Veuillez réessayer."
+ "Le réseau n\'est pas prêt. Veuillez réessayer."
+ "Supprimer le texte"
+ "Alterner entre la saisie de texte et de chiffres"
+ "Ajouter d\'autres participants"
+ "Confirmer les participants"
+ "Démarrer une nouvelle conversation"
+ "Sélectionner cet article"
+ "Lire la vidéo"
+ "Participants et options"
+ "Déboguer"
+ "Participants et options"
+ "Général"
+ "Participants à cette conversation"
+ "Passer un appel"
+ "Envoyer un message"
+ "Envoyer un message<br/><small>avec la carte SIM \"%s\"</small>"
+
+ Envoyer la photo
+ Envoyer les photos
+
+
+ Envoyer le fichier audio
+ Envoyer les fichiers audio
+
+
+ Envoyer la vidéo
+ Envoyer les vidéos
+
+
+ Envoyer la carte de visite
+ Envoyer les cartes de visite
+
+
+ Envoyer la pièce jointe
+ Envoyer les pièces jointes
+
+
+ %d pièce jointe est prête à être envoyée.
+ %d pièces jointes sont prêtes à être envoyées.
+
+ "Envoyer des commentaires"
+ "Afficher sur le Google Play Store"
+ "Informations sur la version"
+ "Version %1$s"
+ "Licences Open Source"
+ "Notifications"
+ "Taille maximale des pièces jointes atteinte"
+ "Échec du chargement de la pièce jointe."
+ "Ajouter aux contacts ?"
+ "Ajouter un contact"
+ "Objet"
+ "Objet : "
+ "%s%s"
+ "Chargement de la fiche de contact en cours…"
+ "Impossible de charger la fiche de contact."
+ "Afficher la fiche de contact"
+
+ %d contact
+ %d contacts
+
+ "Fiches de contacts"
+ "Anniversaire"
+ "Remarques"
+ "Transférer le message"
+ "Répondre"
+ "+ 1"
+ "+%d"
+ "SMS désactivés"
+ "Pour envoyer des messages, vous devez définir l\'application de SMS/MMS comme application de SMS par défaut."
+ "Définissez l\'application de SMS/MMS comme application de SMS par défaut."
+ "Modifier"
+ "Pour recevoir des messages, vous devez définir l\'application de SMS/MMS comme application de SMS par défaut."
+ "Aucune carte SIM préférée sélectionnée pour l\'envoi de SMS."
+ "Cette application n\'est pas autorisée par le propriétaire de l\'appareil."
+ "OK"
+ "Trop de participants dans une conversation."
+
+ Contact non valide.
+ Contacts non valides.
+
+ "Impossible de charger l\'image de la caméra."
+ "Vous : "
+ "%s : "
+ "Brouillon"
+ "Lorsque vous commencez une conversation, elle s\'affiche ici."
+ "Les conversations archivées s\'affichent ici."
+ "Chargement des conversations en cours…"
+ "Image"
+ "Extrait audio"
+ "Vidéo"
+ "Fiche de contact"
+ "MMS"
+ "Annuler"
+ "Réessayer"
+ "Saisissez le nom d\'un contact ou un numéro de téléphone pour commencer un nouveau message"
+ "Bloquer"
+ "Bloquer \"%s\""
+ "Débloquer \"%s\""
+ "Bloquer %s ?"
+ "Vous continuerez à recevoir les messages envoyés par ce numéro, mais vous ne recevrez plus de notifications. Cette conversation sera archivée."
+ "Contacts bloqués"
+ "DÉBLOQUER"
+ "Contacts bloqués"
+ "Sélectionner une image dans la bibliothèque de documents"
+ "Envoi du message en cours..."
+ "Message envoyé."
+ "Les données cellulaires sont désactivées. Veuillez vérifier vos paramètres."
+ "Impossible d\'envoyer des messages en mode Avion."
+ "Envoi du SMS impossible."
+ "Message téléchargé."
+ "Les données cellulaires sont désactivées. Veuillez vérifier vos paramètres."
+ "Impossible de télécharger les messages en mode Avion."
+ "Impossible de télécharger le message."
+ "Zéro"
+ "Un"
+ "Deux"
+ "Trois"
+ "Quatre"
+ "Cinq"
+ "Six"
+ "Sept"
+ "Huit"
+ "Neuf"
+ "Impossible d\'envoyer le message via %1$s. Erreur : %2$d"
+ "Impossible d\'envoyer le message via un opérateur inconnu. Erreur : %1$d"
+ "TR : %s"
+ "Le message n\'a pas été envoyé, car le service n\'est pas activé sur le réseau."
+ "Le message n\'a pas été envoyé, car l\'adresse de destination est incorrecte."
+ "Le message n\'a pas été envoyé, car il n\'est pas valide."
+ "Le message n\'a pas été envoyé, car le contenu est incompatible."
+ "Le message n\'a pas été envoyé, car il est incompatible."
+ "Le message n\'a pas été envoyé, car il est trop volumineux."
+ "Nouveau message"
+ "Afficher"
+ "Image"
+ "Impossible de trouver une application appropriée."
+ "Supprimer le destinataire"
+ "Nouveau message"
+ "Annuler"
+ "Modifier le point d\'accès"
+ "Non défini"
+ "Nom"
+ "APN"
+ "MMSC"
+ "Proxy pour les MMS"
+ "Port pour les MMS"
+ "MCC"
+ "MNC"
+ "Type d\'APN"
+ "Supprimer l\'APN"
+ "Nouvel APN"
+ "Enregistrer"
+ "Supprimer"
+ "Champ \"Nom\" obligatoire."
+ "APN obligatoire."
+ "Le champ \"MCC\" doit contenir trois chiffres."
+ "Le champ \"MNC\" doit contenir deux ou trois chiffres."
+ "Restauration des paramètres APN par défaut en cours…"
+ "Rétablir les paramètres par défaut"
+ "Les paramètres APN par défaut ont bien été réinitialisés."
+ "Sans titre"
+ "Points d\'accès"
+ "APN"
+ "Nouvel APN"
+ "Les paramètres de point d\'accès ne sont pas disponibles pour cet utilisateur."
+ "Copier dans le Presse-papiers ?"
+ "Copier"
+ "destinataire : \"%s\""
+ "Général"
+ "Paramètres avancés"
+ "Paramètres généraux"
+ "Paramètres avancés"
+ "Carte SIM \"%s\""
+ "Envoyer des SMS individuels à tous les destinataires. Vous seul recevrez les réponses."
+ "Envoyer un MMS unique à tous les destinataires"
+ "Depuis un numéro inconnu"
+ "Nouveau message"
+ "Nouveau message."
+ "Sélecteur de carte SIM"
+ "\"%1$s\" sélectionnée – Sélecteur de carte SIM"
+ "Modifier l\'objet"
+ "Sélectionner une carte SIM ou modifier l\'objet"
+ "Appuyer de manière prolongée pour enregistrer des contenus audio"
+ "Lancer une conversation"
+ "SMS/MMS"
+ "Liste des SMS/MMS"
+ "SMS/MMS"
+ "Nouveau message"
+ "Liste des conversations"
+ "Chargement des conversations en cours…"
+ "Chargement des messages en cours…"
+ "Afficher plus de conversations"
+ "Afficher d\'autres messages"
+ "Conversation supprimée."
+ "La conversation a bien été supprimée. Appuyez pour afficher une autre conversation de SMS/MMS."
+ "Bloqué"
+ "Débloqué"
+ "L\'espace de stockage est faible. Vous risquez de perdre certaines données."
+ "Sélectionner les pièces jointes"
+ "Confirmer la sélection"
+ "%d élément(s) sélectionné(s)"
+ "Veuillez supprimer une ou plusieurs pièces jointes, puis réessayer."
+ "Vous pouvez essayer d\'envoyer votre message, mais il risque de ne pas être remis sauf si vous supprimez une ou plusieurs pièces jointes."
+ "Vous ne pouvez envoyer qu\'une vidéo par message. Veuillez supprimer les vidéos supplémentaires, puis réessayer."
+ "Échec du chargement de la pièce jointe via les SMS/MMS."
+ "Envoyer quand même"
+ "Impossible de lancer la conversation."
+ "%1$s (%2$s)"
+ "%s sélectionnée"
+
diff --git a/res/values-gl-rES/arrays.xml b/res/values-gl-rES/arrays.xml
new file mode 100644
index 0000000..1e43974
--- /dev/null
+++ b/res/values-gl-rES/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "sen asunto"
+ "senasunto"
+
+
+ "Si"
+ "Non"
+ "Aceptar"
+ "He he"
+ "Grazas"
+ "Acepto"
+ "Excelente"
+ "Á miña maneira"
+ "De acordo, póñome en contacto contigo máis tarde"
+ ":)"
+ ":("
+
+
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
new file mode 100644
index 0000000..91a6311
--- /dev/null
+++ b/res/values-gl-rES/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Mensaxería"
+ "Mensaxería"
+ "Seleccionar conversa"
+ "Configuración"
+ "Enviar mensaxe"
+ "Engadir un anexo"
+ "Axuda"
+ "Dámosche a benvida"
+ "Omitir"
+ "Seguinte >"
+ "Seguinte"
+ "Saír"
+ "Configuración >"
+ "Configuración"
+ "Mensaxería necesita permiso para acceder ás SMS, ao teléfono e aos contactos."
+ "Podes cambiar os permisos en Configuración > Aplicacións > Mensaxería > Permisos."
+ "Podes cambiar os permisos en Configuración, Aplicacións, Mensaxería, Permisos."
+ "Frecuentes"
+ "Todos os contactos"
+ "Enviar ao %s"
+ "Capturar fotos ou vídeo"
+ "Escoller imaxes deste dispositivo"
+ "Gravar audio"
+ "Escoller foto"
+ "O ficheiro multimedia está seleccionado."
+ "O ficheiro multimedia non está seleccionado."
+ "%d seleccionado"
+ "imaxe do %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "imaxe"
+ "Gravar audio"
+ "Compartir"
+ "Agora mesmo"
+ "Agora"
+
+ %d minutos
+ %d minuto
+
+
+ %d horas
+ %d hora
+
+
+ %d días
+ %d día
+
+
+ %d semanas
+ unha semana
+
+
+ %d meses
+ un mes
+
+
+ %d anos
+ un ano
+
+ "Mensaxe de clase 0"
+ "Gardar"
+ "Este dispositivo ten pouco espazo. Mensaxería eliminará automaticamente as mensaxes antigas para liberar espazo."
+ "Estase esgotando o espazo de almacenamento"
+ "É posible que Mensaxería non envíe nin reciba mensaxes ata que haxa máis espazo dispoñible no teu dispositivo."
+ "Queda pouco almacenamento de SMS restante. É posible que precises eliminar mensaxes."
+ "Confirma o teu número de teléfono"
+ "Este paso único garantirá que Mensaxería entregue as túas mensaxes de grupo de forma adecuada."
+ "Número de teléfono"
+ "Eliminar todas as mensaxes con ficheiros multimedia"
+ "Eliminar mensaxes anteriores a %s"
+ "Eliminar automaticamente mensaxes anteriores a %s"
+ "Ignorar"
+ "Queres eliminar todas as mensaxes con ficheiros multimedia?"
+ "Queres eliminar as mensaxes anteriores a %s?"
+ "Queres eliminar mensaxes anteriores a %s e activar a eliminación automática?"
+ "%s dixo"
+ "Dixeches"
+ "Mensaxe de %s"
+ "Enviaches unha mensaxe"
+ "Enviando…"
+ "Non se enviou. Toca para tentalo de novo."
+ "Non se enviou. Tentando de novo…"
+ "Reenviar ou eliminar"
+ "Realiza unha chamada de voz aos servizos de emerxencia. Non se puido entregar a túa mensaxe de texto neste momento."
+ "Erro"
+ "Nova mensaxe MMS para descargar"
+ "Nova mensaxe MMS"
+ "Non se puido descargar"
+ "Tocar para tentalo de novo"
+ "Tocar para descargar"
+ "Descargar ou eliminar"
+ "Descargando..."
+ "A mensaxe caducou ou non está dispoñible"
+ "tamaño: %1$s, caducidade: %2$s"
+ "Non se pode enviar. O destinatario non é válido."
+ "Servizo non activado na rede"
+ "Non se puido enviar debido a un problema de rede"
+ "A mensaxe caducou ou non está dispoñible"
+ "(Sen asunto)"
+ "Remitente descoñecido"
+ "Entregado"
+ "Non se puido descargar a mensaxe %1$s de %2$s."
+ "Non se puido completar a operación da base de datos debido a que queda pouca memoria"
+ "Mensaxe non enviada"
+ "Hai mensaxes non enviadas en Mensaxería"
+
+ %d mensaxes en %d conversas
+ %d mensaxes nunha conversa
+
+ "Non se descargou a mensaxe"
+ "Algunhas mensaxes non se descargaron en Mensaxería"
+
+ %d mensaxes en %d conversas
+ %d mensaxes nunha conversa
+
+ "Non se enviou a mensaxe ao %1$s"
+ "Realiza unha chamada de voz aos servizos de emerxencia. Non se puido entregar a túa mensaxe de texto ao %1$s neste momento."
+
+ %d mensaxes novas
+ Mensaxe nova
+
+ "Iniciar"
+ "A cámara non está dispoñible"
+ "A cámara non está dispoñible"
+ "A captura de vídeo non está dispoñible"
+ "Non se pode gardar o ficheiro multimedia"
+ "Non se pode sacar a foto"
+ "Atrás"
+ "Arquivadas"
+ "Eliminar"
+ "Arquivar"
+ "Cancelar o arquivado"
+ "Desactivar notificacións"
+ "Activar notificacións"
+ "Engadir contacto"
+ "Descargar"
+ "Enviar"
+ "Eliminar"
+ "Queres eliminar esta mensaxe?"
+ "Esta acción non se pode desfacer."
+ "Eliminar"
+
+ Queres eliminar estas conversas?
+ Queres eliminar esta conversa?
+
+ "Eliminar"
+ "Cancelar"
+ "Para"
+ "Seleccionar varias imaxes"
+ "Confirmar selección"
+ "+%d"
+ "Non se pode gravar o audio. Téntao de novo."
+ "Non se pode reproducir o audio. Téntao de novo."
+ "Non se puido gardar o audio. Téntao de novo."
+ "Mantén premido"
+ ", "
+ " "
+ ": "
+ " "
+ "Imaxe"
+ "Clip de audio"
+ "Vídeo"
+ "Tarxeta de contacto"
+ "Descargar"
+ "Responder mediante SMS"
+ "Resposta MMS"
+ "Responde"
+
+ %d participantes
+ %d participante
+
+ "Eu"
+ "Contacto bloqueado e arquivado"
+ "Contacto desbloqueado e sen arquivar"
+ "%d arquivada/s"
+ "%d non arquivada/s"
+ "Notificacións desactivadas"
+ "Notificacións activadas"
+ "Todo listo. Toca Enviar de novo."
+ "Mensaxería estableceuse correctamente como a aplicación de SMS predeterminada."
+
+ Descartar anexos
+ Descartar anexo
+
+ "Anexo de audio"
+ "Reproducir anexo de audio"
+ "Pausa"
+ "Mensaxe de %s: %s."
+ "Erro ao recibir a mensaxe de %s: %s. Hora: %s"
+ "Mensaxe de %s: %s. Hora: %s"
+ "Non se enviou a mensaxe a %s: %s. Hora: %s"
+ "Enviando mensaxe a %s: %sE. Hora: %s"
+ "Erro ao enviar a mensaxe a %s: %s. Hora: %s"
+ "Mensaxe para %s: %s. Hora: %s"
+ "Erro ao recibir a mensaxe de %s: %s. Hora: %s. %s"
+ "Mensaxe de %s: %s. Hora: %s. %s"
+ "Non se enviou a mensaxe a %s: %s. Hora: %s"
+ "Enviando mensaxe a %s: %sE. Hora: %s"
+ "Erro ao enviar a mensaxe a %s: %s. Hora: %s"
+ "Mensaxe para %s: %s. Hora: %s"
+ "Erro na mensaxe. Toca para tentalo de novo."
+ "Conversa con %s"
+ "Borrar asunto"
+ "Capturar vídeo"
+ "Capturar unha imaxe estática"
+ "Sacar foto"
+ "Comezar a gravar vídeo"
+ "Cambiar á cámara de pantalla completa"
+ "Cambiar entre a cámara dianteira e traseira"
+ "Deter a gravación e anexar vídeo"
+ "Deter a gravación de vídeo"
+ "Fotos de Mensaxería"
+
+ Gardáronse %d fotos no álbum \"%s\"
+ Gardouse %d foto no álbum \"%s\"
+
+
+ Gardáronse %d vídeos no álbum \"%s\"
+ Gardouse %d vídeo no álbum \"%s\"
+
+
+ Gardáronse %d anexos no álbum \"%s\"
+ Gardouse %d anexo no álbum \"%s\"
+
+
+ Gardáronse %d anexos en \"Descargas\"
+ Gardouse %d anexo en \"Descargas\"
+
+
+ Gardáronse %d anexos
+ Gardouse %d anexo
+
+
+ Non se puideron gardar %d anexos
+ Non se puido gardar %d anexo
+
+ "Anexo de MMS gardado"
+ "Configuración"
+ "Arquivadas"
+ "Pechar"
+ "MMS"
+ "Avanzado"
+ "Depuración"
+ "Notificacións"
+ "Son"
+ "Silencio"
+ "Vibrar"
+ "Bloqueado"
+ "Informes de entrega de SMS"
+ "Solicita un informe de entrega cando envías un SMS"
+ "Recuperación automática"
+ "Recupera mensaxes MMS automaticamente"
+ "Recuperación automática en itinerancia"
+ "Recuperación automática de MMS en itinerancia"
+ "Mensaxería en grupo"
+ "Utiliza MMS para enviar unha soa mensaxe cando hai varios destinatarios"
+ "Aplicación de SMS predeterminada"
+ "Aplicación de SMS predeterminada"
+
+
+ "O teu número de teléfono"
+ "Descoñecido"
+ "Sons de mensaxes saíntes"
+ "Pasar SMS"
+ "Pasa os datos recibidos de SMS sen procesar a un ficheiro de almacenamento externo"
+ "Pasar MMS"
+ "Pasa os datos recibidos de MMS sen procesar a un ficheiro de almacenamento externo"
+ "Alertas sen fíos"
+ "Opcións de mensaxes"
+ "Copiar texto"
+ "Ver detalles"
+ "Eliminar"
+ "Reenviar"
+ "Detalles da mensaxe"
+ "Tipo: "
+ "Mensaxe de texto"
+ "Mensaxe multimedia"
+ "De: "
+ "Para: "
+ "Enviada: "
+ "Recibida: "
+ "Asunto: "
+ "Tamaño: "
+ "Prioridade: "
+ "SIM: "
+ "Alta"
+ "Normal"
+ "Baixa"
+ "SIM %s"
+ "Enderezo do remitente oculto"
+ "Non é posible enviar a mensaxe ao cargar anexos."
+ "Non se pode cargar o anexo. Téntao de novo."
+ "A rede non está lista. Téntao de novo."
+ "Eliminar texto"
+ "Cambiar entre introducir texto e números"
+ "Engadir máis participantes"
+ "Confirmar participantes"
+ "Iniciar nova conversa"
+ "Selecciona este elemento"
+ "Reproducir vídeo"
+ "Persoas e opcións"
+ "Depurar"
+ "Persoas e opcións"
+ "Xeral"
+ "Persoas que participan nesta conversa"
+ "Facer unha chamada"
+ "Enviar mensaxe"
+ "Envía a mensaxe<br/><small>desde %s</small>"
+
+ Enviar fotos
+ Enviar foto
+
+
+ Enviar gravacións de audio
+ Enviar gravación de audio
+
+
+ Enviar vídeos
+ Enviar vídeo
+
+
+ Enviar tarxetas de contacto
+ Enviar tarxeta de contacto
+
+
+ Enviar anexos
+ Enviar anexo
+
+
+ %d anexos listos para enviar
+ Un anexo listo para enviar
+
+ "Dános a túa opinión"
+ "Ver en Google Play Store"
+ "Información da versión"
+ "Versión %1$s"
+ "Licenzas de código aberto"
+ "Notificacións"
+ "Acadouse o límite para anexos"
+ "Non se puido cargar o anexo."
+ "Queres engadir este número aos teus contactos?"
+ "Engadir contacto"
+ "Asunto"
+ "Asunto: "
+ "%s%s"
+ "Cargando tarxeta de contacto"
+ "Non se puido cargar a tarxeta de contacto"
+ "Ver tarxeta de contacto"
+
+ %d contactos
+ %d contacto
+
+ "Tarxetas de contacto"
+ "Aniversario"
+ "Notas"
+ "Reenviar mensaxe"
+ "Responder"
+ "+1"
+ "+%d"
+ "SMS desactivadas"
+ "Establece Mensaxería como a aplicación de SMS predeterminada para enviar mensaxes"
+ "Establece Mensaxería como a aplicación de SMS predeterminada"
+ "Cambiar"
+ "Establece Mensaxería como a aplicación de SMS predeterminada para recibir mensaxes"
+ "Non se seleccionou unha SIM preferida para o envío de mensaxes SMS"
+ "O propietario do dispositivo non permite esta aplicación."
+ "Aceptar"
+ "Hai demasiados participantes nunha conversa"
+
+ Contactos non válidos
+ Contacto non válido
+
+ "Non se puido cargar a imaxe da cámara"
+ "Ti: "
+ "%s: "
+ "Borrador"
+ "Cando inicies unha nova conversa, aparecerá aquí"
+ "As conversas arquivadas aparecen aquí"
+ "Cargando conversas..."
+ "Imaxe"
+ "Clip de audio"
+ "Vídeo"
+ "Tarxeta de contacto"
+ "MMS"
+ "Desfacer"
+ "Tentar de novo"
+ "Introduce o nome dun contacto ou o número de teléfono para iniciar unha mensaxe nova"
+ "Bloquear"
+ "Bloquear %s"
+ "Desbloquear %s"
+ "Queres bloquear %s?"
+ "Seguirás recibindo mensaxes deste número, pero xa non se notificarán. Arquivarase esta conversa."
+ "Contactos bloqueados"
+ "DESBLOQUEAR"
+ "Contactos bloqueados"
+ "Escolle unha imaxe da biblioteca de documentos"
+ "Enviando a mensaxe"
+ "Mensaxe enviada"
+ "Os datos móbiles están desactivados. Comproba a túa configuración."
+ "Non se poden enviar mensaxes en modo avión"
+ "Erro ao enviar a mensaxe"
+ "Mensaxe descargada"
+ "Os datos móbiles están desactivados. Comproba a túa configuración."
+ "Non se poden descargar mensaxes no modo avión"
+ "Non se puido descargar a mensaxe"
+ "Cero"
+ "Un"
+ "Dous"
+ "Tres"
+ "Catro"
+ "Cinco"
+ "Seis"
+ "Sete"
+ "Oito"
+ "Nove"
+ "Non se pode enviar a mensaxe con %1$s. Erro: %2$d"
+ "Non se pode enviar a mensaxe cun operador descoñecido. Erro: %1$d"
+ "Rv: %s"
+ "Mensaxe non enviada: servizo non activado na rede"
+ "Mensaxe non enviada: enderezo de destino non válido"
+ "Mensaxe non enviada: mensaxe non válida"
+ "Mensaxe non enviada: contido non compatible"
+ "Mensaxe non enviada: mensaxe non compatible"
+ "Mensaxe non enviada: demasiado longa"
+ "Mensaxe nova"
+ "Ver"
+ "Imaxe"
+ "Non se puido encontrar unha aplicación adecuada"
+ "Elimina o destinatario"
+ "Mensaxe nova"
+ "Cancelar"
+ "Editar punto de acceso"
+ "Sen configurar"
+ "Nome"
+ "APN"
+ "MMSC"
+ "Proxy MMS"
+ "Porto de MMS"
+ "MCC"
+ "MNC"
+ "Tipo de APN"
+ "Eliminar APN"
+ "Novo APN"
+ "Gardar"
+ "Descartar"
+ "O nome do campo non pode estar baleiro."
+ "O APN non pode estar baleiro."
+ "O campo MCC debe conter 3 díxitos."
+ "O campo MNC debe conter 2 ou 3 díxitos."
+ "Restaurando a configuración de APN predeterminada."
+ "Restablecer aos valores predeterminados"
+ "Completouse o restablecemento da configuración de APN predeterminada."
+ "Sen título"
+ "Nomes do punto de acceso"
+ "APN"
+ "Novo APN"
+ "A configuración do nome do punto de acceso non está dispoñible para este usuario"
+ "Copiar no portapapeis?"
+ "Copiar"
+ "en %s"
+ "Xeral"
+ "Avanzada"
+ "Configuración xeral"
+ "Configuración avanzada"
+ "SIM \"%s\""
+ "Enviar mensaxes SMS individuais a todos os destinatarios. Só ti recibirás as respostas"
+ "Enviar unha mensaxe MMS simple a todos os destinatarios"
+ "Número descoñecido"
+ "Mensaxe nova"
+ "Mensaxe nova."
+ "Selector de SIM"
+ "Seleccionouse %1$s, selector da SIM"
+ "Editar asunto"
+ "Seleccionar a SIM ou editar o asunto"
+ "Tocar e manter premido para gravar audio"
+ "Iniciar nova conversa"
+ "Mensaxería"
+ "Lista de Mensaxería"
+ "Mensaxería"
+ "Mensaxe nova"
+ "Lista de conversas"
+ "Cargando conversas"
+ "Cargando mensaxes"
+ "Ver máis conversas"
+ "Ver máis mensaxes"
+ "Conversa eliminada"
+ "Eliminouse a conversa. Toca para mostrar unha conversa de Mensaxería diferente"
+ "Bloqueado"
+ "Desbloqueado"
+ "Queda pouco espazo de almacenamento. É posible que se perdan algúns datos."
+ "Seleccionar anexos"
+ "Confirmar selección"
+ "%d seleccionado/s"
+ "Elimina un ou varios anexos e téntao de novo."
+ "Podes probar a enviar a túa mensaxe, pero é posible que non se entregue a menos que elimines un ou varios anexos."
+ "Só podes enviar un vídeo por mensaxe. Elimina os vídeos adicionais e téntao de novo."
+ "Mensaxería non puido cargar o anexo."
+ "Enviar igualmente"
+ "Non se puido iniciar a conversa"
+ "%1$s (%2$s)"
+ "Seleccionouse %s"
+
diff --git a/res/values-gu-rIN/arrays.xml b/res/values-gu-rIN/arrays.xml
new file mode 100644
index 0000000..89975e0
--- /dev/null
+++ b/res/values-gu-rIN/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "કોઇ વિષય નહીં"
+ "વિષય નથી"
+
+
+ "હા"
+ "નહીં"
+ "ઑકે"
+ "હીહી"
+ "આભાર"
+ "હું સહમત છું"
+ "સરસ"
+ "મારી અનુકૂળતાએ"
+ "ઑકે, હું તમને પછી મળું છું"
+ ":)"
+ ":("
+
+
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
new file mode 100644
index 0000000..866823c
--- /dev/null
+++ b/res/values-gu-rIN/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "મેસેજિંગ"
+ "મેસેજિંગ"
+ "વાર્તાલાપ પસંદ કરો"
+ "સેટિંગ્સ"
+ "સંદેશ મોકલો"
+ "એક જોડાણ ઉમેરો"
+ "સહાય"
+ "સ્વાગત છે"
+ "છોડી દો"
+ "આગલું >"
+ "આગલું"
+ "બહાર નીકળો"
+ "સેટિંગ્સ >"
+ "સેટિંગ્સ"
+ "મેસેજિંગને SMS, ફોન અને સંપર્કોની પરવાનગીની જરૂર છે."
+ "તમે સેટિંગ્સ > એપ્લિકેશન્સ > મેસેજિંગ > પરવાનગીઓમાં પરવાનગીઓ બદલી શકો છો."
+ "તમે સેટિંગ્સ, એપ્લિકેશન્સ, મેસેજિંગ, પરવાનગીઓમાં પરવાનગીઓ બદલી શકો છો."
+ "વારંવાર"
+ "તમામ સંપર્કો"
+ "%s પર મોકલો"
+ "ચિત્રો અથવા વિડિઓ કેપ્ચર કરો"
+ "આ ઉપકરણથી છબીઓ પસંદ કરો"
+ "ઑડિઓ રેકોર્ડ કરો"
+ "ફોટો પસંદ કરો"
+ "મીડિયા પસંદ થયેલ છે."
+ "મીડિયા પસંદ કરેલ નથી."
+ "%d પસંદ કર્યાં"
+ "છબી %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "છબી"
+ "ઑડિઓ રેકોર્ડ કરો"
+ "શેર કરો"
+ "હમણાં જ"
+ "હમણાં"
+
+ %d મિનિટ
+ %d મિનિટ
+
+
+ %d કલાક
+ %d કલાક
+
+
+ %d દિવસ
+ %d દિવસ
+
+
+ %d અઠવાડિયા
+ %d અઠવાડિયા
+
+
+ %d મહિના
+ %d મહિના
+
+
+ %d વર્ષ
+ %d વર્ષ
+
+ "વર્ગ 0 સંદેશ"
+ "સાચવો"
+ "ઉપકરણ પર જગ્યા ઓછી છે. મેસેજિંગ જગ્યા ખાલી કરવા માટે જૂના સંદેશા આપમેળે કાઢી નાખશે."
+ "સ્ટોરેજ સ્થાન સમાપ્ત થયું"
+ "તમારા ઉપકરણ પર વધુ સ્થાન ઉપલબ્ધ ન થાય ત્યાં સુધી મેસેજિંગ સંદેશા મોકલી અથવા પ્રાપ્ત કરી શકશે નહીં."
+ "ઓછો SMS સંગ્રહ. તમારે કેટલાક સંદેશા કાઢી નાખવાની જરૂર હોઈ શકે છે."
+ "તમારા ફોન નંબરની પુષ્ટિ કરો"
+ "મેસેજિંગ તમારા જૂથ સંદેશાનું યોગ્ય રીતે વિતરણ કરે તે બાબતની આ એક-વારનું પગલું ખાતરી કરશે."
+ "ફોન નંબર"
+ "મીડિયા સાથેના તમામ સંદેશા કાઢી નાખો"
+ "%s કરતાં જૂનાં સંદેશા કાઢી નાખો"
+ "%s કરતા જૂના સંદેશા આપમેળે કાઢી નાખો"
+ "અવગણો"
+ "મીડિયા સાથેના તમામ સંદેશા કાઢી નાખીએ?"
+ "%s કરતા જૂના સંદેશા કાઢી નાખીએ?"
+ "%s કરતા જૂનાં સંદેશા કાઢી નાખીએ અને આપમેળે કાઢી નાખવું ચાલુ કરીએ?"
+ "%s એ કહ્યું"
+ "તમે કહ્યું"
+ "%s તરફથી સંદેશ"
+ "તમે એક સંદેશ મોકલ્યો"
+ "મોકલી રહ્યાં છે…"
+ "મોકલાયો નથી. ફરીથી પ્રયાસ કરવા માટે ટચ કરો."
+ "મોકલાયું નથી. ફરીથી પ્રયાસ કરી રહ્યું છે…"
+ "ફરીથી મોકલો અથવા કાઢી નાખો"
+ "કૃપા કરીને કટોકટીની સેવાઓ માટે એક વૉઇસ કૉલ કરો. તમારો ટેક્સ્ટ સંદેશ આ સમયે વિતરિત કરી શકાયો નથી."
+ "નિષ્ફળ થયું"
+ "ડાઉનલોડ કરવા માટેનો નવો MMS સંદેશ"
+ "નવો MMS સંદેશ"
+ "ડાઉનલોડ કરી શક્યાં નથી"
+ "ફરીથી પ્રયત્ન કરવા ટચ કરો"
+ "ડાઉનલોડ કરવા ટચ કરો"
+ "ડાઉનલોડ કરો અથવા કાઢી નાખો"
+ "ડાઉનલોડ કરી રહ્યાં છે..."
+ "સંદેશની સમયસીમા સમાપ્ત થઈ અથવા ઉપલબ્ધ નથી"
+ "કદ: %1$s, સમય સમાપ્તિ: %2$s"
+ "મોકલી શકતા નથી. પ્રાપ્તકર્તા માન્ય નથી."
+ "નેટવર્ક પર સેવા સક્રિય કરી નથી"
+ "નેટવર્ક સમસ્યાને કારણે મોકલી શકાયો નથી"
+ "સંદેશની સમયસીમા સમાપ્ત થઈ અથવા ઉપલબ્ધ નથી"
+ "(કોઇ વિષય નથી)"
+ "અજાણ્યો પ્રેષક"
+ "વિતરિત"
+ "%2$s તરફનાં %1$s સંદેશા ડાઉનલોડ કરી શકાયા નથી."
+ "ઓછી મેમરીને કારણે ડેટાબેસ ક્રિયા પૂર્ણ કરી શકાઈ નથી"
+ "સંદેશ મોકલ્યો નથી"
+ "મેસેજિંગમાં કેટલાક સંદેશા મોકલ્યાં નથી"
+
+ %d વાર્તાલાપમાં %d સંદેશા
+ %d વાર્તાલાપમાં %d સંદેશા
+
+ "સંદેશ ડાઉનલોડ થયેલ નથી"
+ "મેસેજિંગમાં કેટલાક સંદેશા ડાઉનલોડ થયાં નથી"
+
+ %d વાર્તાલાપમાં %d સંદેશા
+ %d વાર્તાલાપમાં %d સંદેશા
+
+ "%1$s ને સંદેશ મોકલાયો નથી"
+ "કટોકટી સેવાઓને કૃપા કરીને એક વૉઇસ કૉલ કરો. %1$s ને તમારો ટેક્સ્ટ સંદેશ આ સમયે વિતરિત કરી શકાયો નથી."
+
+ %d નવા સંદેશા
+ %d નવા સંદેશા
+
+ "પ્રારંભ કરો"
+ "કૅમેરો ઉપલબ્ધ નથી"
+ "કૅમેરો ઉપલબ્ધ નથી"
+ "વિડિઓ કેપ્ચર ઉપલબ્ધ નથી"
+ "મીડિયા સાચવી શકતા નથી"
+ "ચિત્ર લઈ શકતા નથી"
+ "પાછળ"
+ "આર્કાઇવ કરેલા"
+ "કાઢી નાખો"
+ "આર્કાઇવ"
+ "આર્કાઇવ.કરેલ નથી"
+ "સૂચનાઓ બંધ કરો"
+ "સૂચનાઓ ચાલુ કરો"
+ "સંપર્ક ઉમેરો"
+ "ડાઉનલોડ કરો"
+ "મોકલો"
+ "કાઢી નાખો"
+ "આ સંદેશ કાઢી નાખીએ?"
+ "આ ક્રિયા પૂર્વવત્ કરી શકાતી નથી."
+ "કાઢી નાખો"
+
+ આ વાર્તાલાપ કાઢી નાખીએ?
+ આ વાર્તાલાપ કાઢી નાખીએ?
+
+ "કાઢી નાખો"
+ "રદ કરો"
+ "પ્રતિ"
+ "બહુવિધ છબીઓ પસંદ કરો"
+ "પસંદગીની પુષ્ટિ કરો"
+ "+%d"
+ "ઑડિઓ રેકોર્ડ કરી શકાતો નથી. ફરીથી પ્રયાસ કરો."
+ "ઑડિઓ ચલાવી શકાતો નથી. ફરીથી પ્રયાસ કરો."
+ "ઑડિઓ સાચવી શકાયો નથી. ફરીથી પ્રયાસ કરો."
+ "ટચ કરો અને પકડો"
+ ", "
+ " "
+ ": "
+ " "
+ "ચિત્ર"
+ "ઑડિઓ ક્લિપ"
+ "વિડિઓ"
+ "સંપર્ક કાર્ડ"
+ "ડાઉનલોડ કરો"
+ "SMS દ્વારા જવાબ આપો"
+ "MMS દ્વારા જવાબ આપો"
+ "જવાબ આપો"
+
+ %d સહભાગીઓ
+ %d સહભાગીઓ
+
+ "મારા"
+ "સંપર્ક અવરોધિત કર્યો અને આર્કાઇવ કર્યો"
+ "સંપર્ક અનાવરોધિત અને અનઆર્કાઇવ કર્યો"
+ "%d આર્કાઇવ કર્યાં"
+ "%d અનઆર્કાઇવ કર્યા"
+ "સૂચનાઓ બંધ કરી"
+ "સૂચનાઓ ચાલુ કરી"
+ "બધું સેટ થયું. મોકલો ને ફરીથી ટચ કરો."
+ "ડિફોલ્ટ SMS એપ્લિકેશન તરીકે મેસેજિંગ સફળતાપૂર્વક સેટ થયું."
+
+ જોડાણો નિકાળો
+ જોડાણો નિકાળો
+
+ "ઑડિઓ જોડાણ"
+ "ઑડિઓ જોડાણ ચલાવો"
+ "થોભો"
+ "%s તરફથી સંદેશ: %s."
+ "%s તરફથી સંદેશ નિષ્ફળ: %s. સમય: %s."
+ "%s તરફથી સંદેશ: %s. સમય: %s."
+ "%s ને વણમોકલાયેલ સંદેશ: %s. સમય: %s."
+ "%s ને સંદેશ મોકલી રહ્યું છે: %s. સમય: %s."
+ "%s ને સંદેશ મોકલવું નિષ્ફળ: %s. સમય: %s."
+ "%s ને સંદેશ: %s. સમય: %s."
+ "%s તરફથી સંદેશ નિષ્ફળ: %s. સમય: %s. %s."
+ "%s તરફથી સંદેશ: %s. સમય: %s. %s."
+ "%s ને વણમોકલાયેલ સંદેશ: %s. સમય: %s."
+ "%s ને સંદેશ મોકલી રહ્યું છે: %s. સમય: %s."
+ "%s ને સંદેશ મોકલવું નિષ્ફળ: %s. સમય: %s."
+ "%s ને સંદેશ: %s. સમય: %s."
+ "નિષ્ફળ સંદેશ. ફરી પ્રયાસ કરવા ટચ કરો."
+ "%s સાથે વાર્તાલાપ"
+ "વિષય કાઢી નાખો"
+ "વિડિઓ કેપ્ચર કરો"
+ "એક સ્થિર છબી કેપ્ચર કરો"
+ "ફોટો લો"
+ "વિડિઓ રેકોર્ડિંગ પ્રારંભ કરો"
+ "પૂર્ણ સ્ક્રીન કૅમેરા પર સ્વિચ કરો"
+ "આગળનાં અને પાછળનાં કૅમેરા વચ્ચે સ્વિચ કરો"
+ "રેકોર્ડિંગ બંધ કરો અને વિડિઓ જોડો"
+ "વિડિઓ રેકોર્ડિંગ બંધ કરો"
+ "મેસેજિંગ ફોટા"
+
+ \"%s\" આલ્બમમાં %d ફોટા સાચવ્યાં
+ \"%s\" આલ્બમમાં %d ફોટા સાચવ્યાં
+
+
+ \"%s\" આલ્બમમાં %d વિડિઓઝ સાચવી
+ \"%s\" આલ્બમમાં %d વિડિઓઝ સાચવી
+
+
+ \"%s\" આલ્બમમાં %d જોડાણો સાચવ્યાં
+ \"%s\" આલ્બમમાં %d જોડાણો સાચવ્યાં
+
+
+ \"ડાઉનલોડ્સ\"માં %d જોડાણો સાચવ્યાં
+ \"ડાઉનલોડ્સ\"માં %d જોડાણો સાચવ્યાં
+
+
+ %d જોડાણ સાચવ્યાં
+ %d જોડાણ સાચવ્યાં
+
+
+ %d જોડાણ સાચવી શક્યાં નથી
+ %d જોડાણ સાચવી શક્યાં નથી
+
+ "સાચવેલ MMS જોડાણ"
+ "સેટિંગ્સ"
+ "આર્કાઇવ કરેલા"
+ "બંધ કરો"
+ "MMS"
+ "વિગતવાર"
+ "ડીબગ"
+ "સૂચનાઓ"
+ "ધ્વનિ"
+ "શાંત"
+ "વાઇબ્રેટ"
+ "અવરોધિત"
+ "SMS વિતરણ રિપોર્ટ્સ"
+ "તમે મોકલેલા દરેક SMS માટે વિતરણ રિપોર્ટની વિનંતી કરો"
+ "સ્વતઃ-પુનર્પ્રાપ્ત કરો"
+ "MMS સંદેશા સ્વતઃ-પુનર્પ્રાપ્ત કરો"
+ "રોમિંગ સ્વતઃ-પુનર્પ્રાપ્ત કરો"
+ "રોમિંગ પર હોય ત્યારે MMS આપમેળે પુનર્પ્રાપ્ત કરો"
+ "જૂથ મેસેજિંગ"
+ "બહુવિધ પ્રાપ્તકર્તાઓ હોય ત્યારે એક જ સંદેશ મોકલવા માટે MMS નો ઉપયોગ કરો"
+ "ડિફોલ્ટ SMS એપ્લિકેશન"
+ "ડિફોલ્ટ SMS એપ્લિકેશન"
+
+
+ "તમારો ફોન નંબર"
+ "અજાણ્યો"
+ "આઉટગોઇંગ સંદેશ ધ્વનિઓ"
+ "SMS ડમ્પ કરો"
+ "પ્રાપ્ત થયેલ SMS અપૂર્ણ ડેટાને બાહ્ય સંગ્રહ ફાઇલમાં ડમ્પ કરો"
+ "MMS ડમ્પ કરો"
+ "પ્રાપ્ત થયેલ MMS અપૂર્ણ ડેટાને બાહ્ય સંગ્રહ ફાઇલમાં ડમ્પ કરો"
+ "વાયરલેસ ચેતવણીઓ"
+ "સંદેશ વિકલ્પો"
+ "ટેક્સ્ટ કૉપિ કરો"
+ "વિગતો જુઓ"
+ "કાઢી નાખો"
+ "ફોરવર્ડ કરો"
+ "સંદેશ વિગતો"
+ "પ્રકાર: "
+ "ટેક્સ્ટ સંદેશ"
+ "મલ્ટિમીડિયા સંદેશ"
+ "અહીંથી: "
+ "પ્રતિ: "
+ "મોકલ્યું: "
+ "પ્રાપ્ત કર્યુ: "
+ "વિષય: "
+ "કદ: "
+ "પ્રાધાન્યતા: "
+ "SIM: "
+ "ઉચ્ચ"
+ "સામાન્ય"
+ "નિમ્ન"
+ "SIM %s"
+ "પ્રેષક સરનામું છુપાયેલ છે"
+ "જોડાણો લોડ કરતી વખતે સંદેશ મોકલી શકાતો નથી."
+ "જોડાણ લોડ કરી શકાતું નથી. ફરીથી પ્રયાસ કરો."
+ "નેટવર્ક તૈયાર નથી. ફરીથી પ્રયાસ કરો."
+ "ટેક્સ્ટ કાઢી નાખો"
+ "ટેક્સ્ટ અને સંખ્યાઓ દાખલ કરવા વચ્ચે સ્વિચ કરો"
+ "વધુ સહભાગીઓ ઉમેરો"
+ "સહભાગીઓની પુષ્ટિ કરો"
+ "નવો વાર્તાલાપ પ્રારંભ કરો"
+ "આ આઇટમ પસંદ કરો"
+ "વિડિઓ ચલાવો"
+ "લોકો અને વિકલ્પો"
+ "ડીબગ"
+ "લોકો અને વિકલ્પો"
+ "સામાન્ય"
+ "આ વાર્તાલાપમાંના લોકો"
+ "એક કૉલ કરો"
+ "સંદેશ મોકલો"
+ "%s</small> દ્વારા <br/><small>સંદેશ મોકલો"
+
+ ફોટા મોકલો
+ ફોટા મોકલો
+
+
+ ઑડિઓ મોકલો
+ ઑડિઓ મોકલો
+
+
+ વિડિઓઝ મોકલો
+ વિડિઓઝ મોકલો
+
+
+ સંપર્ક કાર્ડ્સ મોકલો
+ સંપર્ક કાર્ડ્સ મોકલો
+
+
+ જોડાણ મોકલો
+ જોડાણ મોકલો
+
+
+ મોકલવા માટે %d જોડાણ તૈયાર છે
+ મોકલવા માટે %d જોડાણ તૈયાર છે
+
+ "પ્રતિસાદ મોકલો"
+ "Google Play Store માં જુઓ"
+ "સંસ્કરણ માહિતી"
+ "સંસ્કરણ %1$s"
+ "ઓપન સોર્સ લાઇસેંસેસ"
+ "સૂચનાઓ"
+ "જોડાણની મર્યાદા સુધી પહોંચ્યાં"
+ "જોડાણ લોડ કરવામાં નિષ્ફળ."
+ "સંપર્કોમાં ઉમેરીએ?"
+ "સંપર્ક ઉમેરો"
+ "વિષય"
+ "વિષય: "
+ "%s%s"
+ "સંપર્ક કાર્ડ લોડ કરી રહ્યું છે"
+ "સંપર્ક કાર્ડ લોડ કરી શકાયું નથી"
+ "સંપર્ક કાર્ડ જુઓ"
+
+ %d સંપર્કો
+ %d સંપર્કો
+
+ "સંપર્ક કાર્ડ્સ"
+ "જન્મદિવસ"
+ "નોંધો"
+ "સંદેશ ફોરવર્ડ કરો"
+ "જવાબ આપો"
+ "પસંદ"
+ "+%d"
+ "SMS અક્ષમ કરેલ છે"
+ "મોકલવા માટે, મેસેજિંગને ડિફોલ્ટ SMS એપ્લિકેશન તરીકે સેટ કરો"
+ "મેસેજિંગને ડિફોલ્ટ SMS એપ્લિકેશન તરીકે સેટ કરો"
+ "બદલો"
+ "સંદેશા પ્રાપ્ત કરવા માટે, મેસેજિંગને ડિફોલ્ટ SMS એપ્લિકેશન તરીકે સેટ કરો"
+ "SMS સંદેશા મોકલવા માટે પસંદીદા SIM પસંદ કરેલ નથી"
+ "આ એપ્લિકેશનને ઉપકરણ માલિક દ્વારા મંજૂરી નથી."
+ "ઑકે"
+ "વાર્તાલાપમાં ઘણાં બધા સહભાગીઓ છે"
+
+ અમાન્ય સંપર્કો
+ અમાન્ય સંપર્કો
+
+ "કૅમેરા છબી લોડ કરી શકાઈ નથી"
+ "તમે: "
+ "%s: "
+ "ડ્રાફ્ટ"
+ "એકવાર તમે એક નવો વાર્તાલાપ પ્રારંભ કરી લો તે પછી, તમે તેને અહીં સૂચિબદ્ધ જોશો"
+ "આર્કાઇવ કરેલ વાર્તાલાપ અહીં દેખાશે"
+ "વાર્તાલાપ લોડ કરી રહ્યાં છે…"
+ "ચિત્ર"
+ "ઑડિઓ ક્લિપ"
+ "વિડિઓ"
+ "સંપર્ક કાર્ડ"
+ "MMS"
+ "પૂર્વવત્ કરો"
+ "ફરી પ્રયાસ કરો"
+ "એક નવો સંદેશ પ્રારંભ કરવા માટે સંપર્ક નામ અથવા ફોન નંબર દાખલ કરો"
+ "અવરોધિત કરો"
+ "%s ને અવરોધિત કરો"
+ "%s ને અનાવરોધિત કરો"
+ "%s ને અવરોધિત કરીએ?"
+ "તમે આ નંબરથી સંદેશા પ્રાપ્ત કરવાનું ચાલુ રાખશો પરંતુ હવેથી સૂચિત કરવામાં આવશે નહીં. આ વાર્તાલાપ આર્કાઇવ કરવામાં આવશે."
+ "અવરોધિત કરેલા સંપર્કો"
+ "અનાવરોધિત કરો"
+ "અવરોધિત કરેલા સંપર્કો"
+ "દસ્તાવેજ લાઇબ્રેરીમાંથી છબી પસંદ કરો"
+ "સંદેશ મોકલી રહ્યાં છીએ"
+ "સંદેશ મોકલ્યો"
+ "સેલ્યુલર ડેટા બંધ છે. તમારી સેટિંગ્સ તપાસો."
+ "એરપ્લેન મોડમાં સંદેશા મોકલી શકાતા નથી"
+ "સંદેશ મોકલી શકાયો નથી"
+ "સંદેશ ડાઉનલોડ થયો"
+ "સેલ્યુલર ડેટા બંધ છે. તમારી સેટિંગ્સ તપાસો."
+ "એરપ્લેન મોડમાં સંદેશા ડાઉનલોડ કરી શકાતા નથી"
+ "સંદેશ ડાઉનલોડ કરી શકાયો નથી"
+ "શૂન્ય"
+ "એક"
+ "બે"
+ "ત્રણ"
+ "ચાર"
+ "પાંચ"
+ "છ"
+ "સાત"
+ "આઠ"
+ "નવ"
+ "%1$s સાથે સંદેશ મોકલી શકાતો નથી, ભૂલ %2$d"
+ "અજાણ્યાં કેરીઅર સાથે સંદેશ મોકલી શકાતો નથી, ભૂલ %1$d"
+ "ફોરવર્ડ: %s"
+ "સંદેશ મોકલાયો નથી: નેટવર્ક પર સેવા સક્રિય કરેલ નથી"
+ "સંદેશ મોકલાયો નથી: અમાન્ય લક્ષ્યસ્થાન સરનામું"
+ "સંદેશ મોકલાયો નથી: અમાન્ય સંદેશ"
+ "સંદેશ મોકલાયો નથી: અસમર્થિત સામગ્રી"
+ "સંદેશ મોકલાયો નથી: અસમર્થિત સંદેશ"
+ "સંદેશ મોકલ્યો નથી: ખૂબ મોટો"
+ "નવો સંદેશ"
+ "જુઓ"
+ "છબી"
+ "કોઈ યોગ્ય એપ્લિકેશન મળી શકી નથી"
+ "પ્રાપ્તકર્તા દૂર કરો"
+ "નવો સંદેશ"
+ "રદ કરો"
+ "અૅક્સેસ પોઇન્ટ સંપાદિત કરો"
+ "સેટ નથી"
+ "નામ"
+ "APN"
+ "MMSC"
+ "MMS પ્રોક્સી"
+ "MMS પોર્ટ"
+ "MCC"
+ "MNC"
+ "APN પ્રકાર"
+ "APN કાઢી નાખો"
+ "નવું APN"
+ "સાચવો"
+ "છોડી દો"
+ "નામ ફીલ્ડ ખાલી હોઈ શકતી નથી."
+ "APN ખાલી હોઈ શકતું નથી."
+ "MCC ફીલ્ડ 3 અંકોની હોવી આવશ્યક છે."
+ "MNC ફીલ્ડ 2 અથવા 3 અંકોની હોવી આવશ્યક છે."
+ "ડિફોલ્ટ APN સેટિંગ્સ પુનર્સ્થાપિત કરવી."
+ "ડિફોલ્ટ પર ફરીથી સેટ કરો"
+ "ડિફોલ્ટ APN સેટિંગ્સ ફરીથી સેટ કરો પૂર્ણ થયું."
+ "મથાળા વગર"
+ "ઍક્સેસ પોઇન્ટનું નામ"
+ "APNs"
+ "નવું APN"
+ "અૅક્સેસ પોઇન્ટનું નામ સેટિંગ્સ આ વપરાશકર્તા માટે ઉપલબ્ધ નથી"
+ "ક્લિપબોર્ડ પર કૉપિ કરીએ?"
+ "કૉપિ કરો"
+ "%s પર"
+ "સામાન્ય"
+ "વિગતવાર"
+ "સામાન્ય સેટિંગ્સ"
+ "વિગતવાર સેટિંગ્સ"
+ "\"%s\" SIM"
+ "તમામ પ્રાપ્તકર્તાઓને વ્યક્તિગત SMS સંદેશાઓ મોકલો. ફક્ત તમને જ કોઇ જવાબો મળશે"
+ "તમામ પ્રાપ્તકર્તાઓને એક જ MMS મોકલો"
+ "અજાણ્યો નંબર"
+ "નવો સંદેશ"
+ "નવો સંદેશ."
+ "SIM પસંદગીકર્તા"
+ "%1$s પસંદ કર્યા, SIM પસંદગીકર્તા"
+ "વિષય સંપાદિત કરો"
+ "SIM પસંદ કરો અથવા વિષય સંપાદિત કરો"
+ "ઑડિઓ રેકોર્ડ કરવા માટે ટચ કરો અને પકડો"
+ "નવો વાર્તાલાપ પ્રારંભ કરો"
+ "મેસેજિંગ"
+ "મેસેજિંગ સૂચિ"
+ "મેસેજિંગ"
+ "નવો સંદેશ"
+ "વાર્તાલાપની સૂચિ"
+ "વાર્તાલાપ લોડ કરી રહ્યાં છે"
+ "સંદેશા લોડ કરી રહ્યું છે"
+ "વધુ વાર્તાલાપ જુઓ"
+ "વધુ સંદેશા જુઓ"
+ "વાર્તાલાપ કાઢી નખાયો"
+ "વાર્તાલાપ કાઢી નાખ્યો. એક ભિન્ન મેસેજિંગ વાર્તાલાપ દર્શાવવા માટે ટચ કરો"
+ "અવરોધિત"
+ "અનાવરોધિત"
+ "સંગ્રહ સ્થાન ઓછું છે. કેટલોક ડેટા ખોવાઈ શકે છે."
+ "જોડાણો પસંદ કરો"
+ "પસંદગીની પુષ્ટિ કરો"
+ "%d પસંદ કર્યાં"
+ "કૃપા કરીને એક અથવા વધુ જોડાણો દૂર કરો અને ફરીથી પ્રયાસ કરો."
+ "તમે તમારો સંદેશ મોકલવાનો પ્રયાસ કરી શકો છો, પરંતુ તમે એક અથવા વધુ જોડાણો દૂર નહીં કરો ત્યાં સુધી તે વિતરિત કરવામાં આવી શકશે નહીં."
+ "તમે પ્રતિ સંદેશ ફક્ત એક વિડિઓ મોકલી શકો છો. કૃપા કરીને અતિરિક્ત વિડિઓઝ દૂર કરો અને ફરી પ્રયાસ કરો."
+ "જોડાણ લોડ કરવામાં મેસેજિંગ નિષ્ફળ."
+ "કોઈપણ રીતે મોકલો"
+ "વાર્તાલાપ પ્રારંભ કરી શકાયો નથી"
+ "%1$s (%2$s)"
+ "%s પસંદ કરી"
+
diff --git a/res/values-hi/arrays.xml b/res/values-hi/arrays.xml
new file mode 100644
index 0000000..abdcedf
--- /dev/null
+++ b/res/values-hi/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "कोई विषय नहीं"
+ "कोई विषय नहीं"
+
+
+ "हां"
+ "नहीं"
+ "ठीक"
+ "हेहे"
+ "धन्यवाद"
+ "मैं सहमत हूं"
+ "बढ़िया"
+ "मेरे रास्ते में रहने के दौरान"
+ "ठीक है, मैं आपसे बाद में संपर्क करूंगा/करूंगी"
+ ":)"
+ ":("
+
+
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
new file mode 100644
index 0000000..c281680
--- /dev/null
+++ b/res/values-hi/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "संदेश सेवा"
+ "संदेश सेवा"
+ "वार्तालाप चुनें"
+ "सेटिंग"
+ "संदेश भेजें"
+ "कोई अटैचमेंट जोड़ें"
+ "सहायता"
+ "स्वागत है"
+ "अभी नहीं"
+ "अगला >"
+ "अगला"
+ "बाहर निकलें"
+ "सेटिंग >"
+ "सेटिंग"
+ "संदेश सेवा को SMS, फ़ोन और संपर्कों के लिए अनुमति की आवश्यकता होती है."
+ "आप अनुमतियों को सेटिंग > ऐप्स > संदेश सेवा > अनुमतियां में बदल सकते हैं."
+ "आप अनुमतियों को सेटिंग, ऐप्स, संदेश सेवा, अनुमतियां में बदल सकते हैं."
+ "अक्सर"
+ "सभी संपर्क"
+ "%s पर भेजें"
+ "चित्र या वीडियो कैप्चर करें"
+ "इस डिवाइस के चित्र चुनें"
+ "ऑडियो रिकॉर्ड करें"
+ "फ़ोटो चुनें"
+ "मीडिया को चुना है."
+ "मीडिया को नहीं चुना है."
+ "%d चुने गए"
+ "चित्र %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "चित्र"
+ "ऑडियो रिकॉर्ड करें"
+ "साझा करें"
+ "अभी-अभी"
+ "अभी"
+
+ %d मिनट
+ %d मिनट
+
+
+ %d घंटे
+ %d घंटे
+
+
+ %d दिन
+ %d दिन
+
+
+ %d सप्ताह
+ %d सप्ताह
+
+
+ %d महीने
+ %d महीने
+
+
+ %d वर्ष
+ %d वर्ष
+
+ "वर्ग 0 संदेश"
+ "जोड़ें"
+ "डिवाइस में स्थान कम है. स्थान खाली करने के लिए संदेश सेवा पुराने संदेशों को अपने आप हटा देगी."
+ "मेमोरी स्थान समाप्त हो रहा है"
+ "हो सकता है कि आपके डिवाइस पर अधिक स्थान उपलब्ध होने तक संदेश सेवा संदेशों को ना भेजे या प्राप्त ना करे."
+ "कम SMS मेमोरी. आपको संदेशों को हटाने की आवश्यकता हो सकती है."
+ "अपने फ़ोन नंबर की पुष्टि करें"
+ "यह एक-बार का चरण यह सुनिश्चित करेगा कि संदेश सेवा आपके समूह संदेशों को ठीक से वितरित करेगी."
+ "फ़ोन नंबर"
+ "मीडिया वाले सभी संदेशों को हटाएं"
+ "%s से पुराने संदेशों को हटाएं"
+ "%s से पुराने संदेशों को स्वत: हटाएं"
+ "अनदेखा करें"
+ "मीडिया वाले सभी संदेशों को हटाएं?"
+ "%s से पुराने संदेशों को हटाएं?"
+ "%s से पुराने संदेश हटाएं और स्वत: हटाना चालू करें?"
+ "प्रेषक: %s"
+ "आपने कहा"
+ "%s की ओर से संदेश"
+ "आपने एक संदेश भेजा"
+ "भेजा जा रहा है..."
+ "नहीं भेजा गया. पुन: प्रयास करने के लिए स्पर्श करें."
+ "नहीं भेजा गया. पुन: प्रयास किया जा रहा है…"
+ "फिर से भेजें या हटाएं"
+ "कृपया आपातकालीन सेवाओं को वॉइस कॉल करें. आपका लेख संदेश इस समय वितरित नहीं किया जा सकता."
+ "विफल रहा"
+ "डाउनलोड करने के लिए नया MMS संदेश"
+ "नया MMS संदेश"
+ "डाउनलोड नहीं किया जा सका"
+ "पुन: प्रयास करने के लिए स्पर्श करें"
+ "डाउनलोड करने के लिए स्पर्श करें"
+ "डाउनलोड करें या हटाएं"
+ "डाउनलोड किया जा रहा है..."
+ "संदेश की समय सीमा समाप्त हो गई या वह उपलब्ध नहीं है"
+ "आकार: %1$s, समाप्ति: %2$s"
+ "भेजा नहीं जा सकता. प्राप्तकर्ता मान्य नहीं है."
+ "नेटवर्क पर सेवा सक्रिय नहीं है"
+ "नेटवर्क समस्या के कारण भेजा नहीं जा सका"
+ "संदेश की समय सीमा समाप्त हो गई या वह उपलब्ध नहीं है"
+ "(कोई विषय नहीं)"
+ "अज्ञात प्रेषक"
+ "डिलीवर कर दिया गया"
+ "%2$s से %1$s संदेश डाउनलोड नहीं किया जा सका."
+ "कम मेमोरी के कारण डेटाबेस कार्रवाई पूर्ण नहीं किया जा सका"
+ "संदेश नहीं भेजा गया"
+ "कुछ संदेशों को संदेश सेवा में नहीं भेजा गया है"
+
+ %d वार्तालापों में %d संदेश
+ %d वार्तालापों में %d संदेश
+
+ "संदेश डाउनलोड नहीं किया गया"
+ "कुछ संदेशों को संदेश सेवा में डाउनलोड नहीं किया गया है"
+
+ %d वार्तालापों में %d संदेश
+ %d वार्तालापों में %d संदेश
+
+ "%1$s को संदेश नहीं भेजा गया"
+ "कृपया आपातकालीन सेवाओं को वॉइस कॉल करें. %1$s को भेजा गया आपका लेख संदेश इस समय वितरित नहीं किया जा सकता."
+
+ %d नए संदेश
+ %d नए संदेश
+
+ "प्रारंभ करें"
+ "कैमरा उपलब्ध नहीं है"
+ "कैमरा उपलब्ध नहीं है"
+ "वीडियो कैप्चर उपलब्ध नहीं है"
+ "मीडिया सहेजा नहीं जा सकता"
+ "चित्र नहीं लिया जा सकता"
+ "पीछे"
+ "संग्रहीत"
+ "हटाएं"
+ "संग्रहीत करें"
+ "संग्रह से निकालें"
+ "नोटिफिकेशन बंद करें"
+ "नोटिफिकेशन चालू करें"
+ "संपर्क जोड़ें"
+ "डाउनलोड करें"
+ "भेजें"
+ "हटाएं"
+ "इस संदेश को हटाएं?"
+ "इस क्रिया को पूर्ववत नहीं किया जा सकता."
+ "हटाएं"
+
+ इन वार्तालापों को हटाएं?
+ इन वार्तालापों को हटाएं?
+
+ "हटाएं"
+ "अभी नहीं"
+ "प्रति"
+ "एकाधिक चित्र चुनें"
+ "चयन की दुबारा पूछें"
+ "+%d"
+ "ऑडियो रिकॉर्ड नहीं किया जा सकता. पुनः प्रयास करें."
+ "ऑडियो नहीं चलाया जा सकता. पुन: प्रयास करें."
+ "ऑडियो सहेजा नहीं जा सका. पुनः प्रयास करें."
+ "स्पर्श करके रखें"
+ ", "
+ " "
+ ": "
+ " "
+ "चित्र"
+ "ऑडियो क्लिप"
+ "वीडियो"
+ "संपर्क कार्ड"
+ "डाउनलोड करें"
+ "SMS के द्वारा उत्तर दें"
+ "MMS से उत्तर दें"
+ "उत्तर दें"
+
+ %d प्रतिभागी
+ %d प्रतिभागी
+
+ "मुझे"
+ "संपर्क अवरोधित तथा संग्रहीत किया गया"
+ "संपर्क को अनवरोधित किया गया और संग्रह से निकाला गया"
+ "%d को संग्रहीत किया गया"
+ "%d को संग्रह से निकाला गया"
+ "नोटिफ़िकेशन बंद हैं"
+ "नोटिफ़िकेशन चालू हैं"
+ "बिल्कुल तैयार. भेजें को पुन: स्पर्श करें."
+ "संदेश सेवा को डिफ़ॉल्ट SMS ऐप के रूप में सफलतापूर्वक सेट कर दिया गया है."
+
+ अटैचमेंट छोड़ें
+ अटैचमेंट छोड़ें
+
+ "ऑडियो अटैचमेंट"
+ "ऑडियो अटैचमेंट चलाएं"
+ "रोकें"
+ "%s की ओर से संदेश: %s."
+ "%s का भेजने में विफल रहा संदेश: %s. समय: %s."
+ "%s का संदेश: %s. समय: %s."
+ "%s को नहीं भेजा गया संदेश: %s. समय: %s."
+ "%s को संदेश भेजा जा रहा है: %s. समय: %s."
+ "%s को भेजने में विफल रहा संदेश: %s. समय: %s."
+ "%s के लिए संदेश: %s. समय: %s."
+ "%s का विफल रहा संदेश: %s. समय: %s. %s."
+ "%s का संदेश: %s. समय: %s. %s."
+ "%s को नहीं भेजा गया संदेश: %s. समय: %s."
+ "%s को संदेश भेजा जा रहा है: %s. समय: %s."
+ "%s को भेजने में विफल रहा संदेश: %s. समय: %s."
+ "%s के लिए संदेश: %s. समय: %s."
+ "विफल रहा संदेश. पुन: प्रयास करने के लिए स्पर्श करें."
+ "%s के साथ बातचीत"
+ "विषय हटाएं"
+ "वीडियो कैप्चर करें"
+ "स्थिर चित्र कैप्चर करें"
+ "चित्र लें"
+ "वीडियो रिकॉर्ड करना प्रारंभ करें"
+ "पूर्ण स्क्रीन कैमरा पर स्विच करें"
+ "सामने और पीछे वाले कैमरे के बीच स्विच करें"
+ "रिकॉर्डिंग रोकें और वीडियो अटैच करें"
+ "वीडियो रिकॉर्ड करना बंद करें"
+ "संदेश सेवा फ़ोटो"
+
+ %d फ़ोटो \"%s\" एल्बम में सहेजी गईं
+ %d फ़ोटो \"%s\" एल्बम में सहेजी गईं
+
+
+ %d वीडियो \"%s\" एल्बम में सहेजे गए
+ %d वीडियो \"%s\" एल्बम में सहेजे गए
+
+
+ %d अटैचमेंट \"%s\" एल्बम में सहेजे गए
+ %d अटैचमेंट \"%s\" एल्बम में सहेजे गए
+
+
+ %d अटैचमेंट \"डाउनलोड\" में सहेजे गए
+ %d अटैचमेंट \"डाउनलोड\" में सहेजे गए
+
+
+ %d अटैचमेंट सहेजे गए
+ %d अटैचमेंट सहेजे गए
+
+
+ %d अटैचमेंट सहेजे नहीं जा सके
+ %d अटैचमेंट सहेजे नहीं जा सके
+
+ "MMS अटैचमेंट सहेजा गया"
+ "सेटिंग"
+ "संग्रहीत"
+ "बंद करें"
+ "MMS"
+ "अतिरिक्त सेटिंग"
+ "डीबग"
+ "नोटिफिकेशन"
+ "ध्वनि"
+ "मौन"
+ "वाइब्रेट"
+ "अवरोधित"
+ "SMS वितरण रिपोर्ट"
+ "आपके द्वारा भेजे गए प्रत्येक SMS की वितरण रिपोर्ट का अनुरोध करें"
+ "स्वतः पुनर्प्राप्ति"
+ "MMS संदेशों को अपने आप प्राप्त करें"
+ "रोमिंग स्वतः पुनर्प्राप्ति"
+ "रोमिंग के दौरान MMS अपने आप प्राप्त करें"
+ "समूह संदेश सेवा"
+ "एक से अधिक प्राप्तकर्ता होने पर एक ही संदेश भेजने के लिए MMS का उपयोग करें"
+ "डिफ़ॉल्ट SMS ऐप"
+ "डिफ़ॉल्ट SMS ऐप"
+
+
+ "आपका फ़ोन नंबर"
+ "अज्ञात"
+ "आउटगोइंग संदेश ध्वनि"
+ "SMS डंप करें"
+ "बाहरी मेमोरी फ़ाइल में प्राप्त किया गया SMS अपरिष्कृत डेटा डंप करें"
+ "MMS डंप करें"
+ "बाहरी मेमोरी फ़ाइल में प्राप्त किया गया MMS अपरिष्कृत डेटा डंप करें"
+ "वायरलेस अलर्ट"
+ "संदेश के विकल्प"
+ "लेख की प्रतिलिपि बनाएं"
+ "विवरण देखें"
+ "हटाएं"
+ "अग्रेषित करें"
+ "संदेश के विवरण"
+ "प्रकार: "
+ "लेख संदेश"
+ "मल्टीमीडिया संदेश"
+ "प्रेषक: "
+ "प्रति: "
+ "भेजा गया: "
+ "प्राप्त हुआ: "
+ "विषय: "
+ "आकार: "
+ "प्राथमिकता: "
+ "सिम: "
+ "उच्च"
+ "सामान्य"
+ "निम्न"
+ "सिम %s"
+ "प्रेषक का पता छिपाएं"
+ "अटैचमेंट लोड करते समय संदेश नहीं भेजा जा सकता."
+ "अटैचमेंट लोड नहीं किया जा सकता. पुन: प्रयास करें."
+ "नेटवर्क तैयार नहीं है. पुनः प्रयास करें."
+ "लेख हटाएं"
+ "लेख और संख्याएं डालने के बीच स्विच करें"
+ "और अधिक प्रतिभागी जोड़ें"
+ "प्रतिभागियों की पुष्टि करें"
+ "नई बातचीत प्रारंभ करें"
+ "यह आइटम चुनें"
+ "वीडियो चलाएं"
+ "लोग और विकल्प"
+ "डीबग"
+ "लोग और विकल्प"
+ "सामान्य"
+ "इस वार्तालाप में लोग"
+ "कॉल करें"
+ "संदेश भेजें"
+ "<br/><small>from %s</small> से संदेश भेजें"
+
+ फ़ोटो भेजें
+ फ़ोटो भेजें
+
+
+ ऑडियो भेजें
+ ऑडियो भेजें
+
+
+ वीडियो भेजें
+ वीडियो भेजें
+
+
+ संपर्क कार्ड भेजें
+ संपर्क कार्ड भेजें
+
+
+ अटैचमेंट भेजें
+ अटैचमेंट भेजें
+
+
+ %d अटैचमेंट भेजे जाने के लिए तैयार हैं
+ %d अटैचमेंट भेजे जाने के लिए तैयार हैं
+
+ "फ़ीडबैक भेजें"
+ "Google Play स्टोर में देखें"
+ "वर्शन जानकारी"
+ "वर्शन %1$s"
+ "ओपन सोर्स लाइसेंस"
+ "नोटिफिकेशन"
+ "अटैचमेंट सीमा पर पहुंच गए"
+ "अटैचमेंट लोड करने में विफल रहा."
+ "संपर्कों में जोड़ें?"
+ "संपर्क जोड़ें"
+ "विषय"
+ "विषय: "
+ "%s%s"
+ "संपर्क कार्ड लोड हो रहा है"
+ "संपर्क कार्ड लोड नहीं किया जा सका"
+ "संपर्क कार्ड देखें"
+
+ %d संपर्क
+ %d संपर्क
+
+ "संपर्क कार्ड"
+ "जन्मदिन"
+ "नोट"
+ "संदेश अग्रेषित करें"
+ "जवाब दें"
+ "+1"
+ "+%d"
+ "SMS अक्षम है"
+ "भेजने के लिए, संदेश सेवा को डिफ़ॉल्ट SMS ऐप के रूप में सेट करें"
+ "संदेश सेवा को डिफ़ॉल्ट SMS ऐप के रूप में सेट करें"
+ "बदलें"
+ "संदेश प्राप्त करने के लिए, संदेश सेवा को डिफ़ॉल्ट SMS ऐप के रूप में सेट करें"
+ "SMS संदेश भेजने के लिए कोई भी पसंदीदा सिम नहीं चुनी गई है"
+ "डिवाइस स्वामी द्वारा इस ऐप्स की अनुमति नहीं दी गई है."
+ "ठीक"
+ "बातचीत में बहुत अधिक प्रतिभागी हैं"
+
+ अमान्य संपर्क
+ अमान्य संपर्क
+
+ "कैमरे का चित्र लोड नहीं किया जा सका"
+ "आप: "
+ "%s: "
+ "ड्राफ़्ट"
+ "आपके द्वारा नया वार्तालाप प्रारंभ करने के बाद, वह आपको यहां सूचीबद्ध दिखाई देगा"
+ "संग्रहीत वार्तालाप यहां दिखाई देते हैं"
+ "वार्तालाप लोड हो रहे हैं…"
+ "चित्र"
+ "ऑडियो क्लिप"
+ "वीडियो"
+ "संपर्क कार्ड"
+ "MMS"
+ "वापस लाएं"
+ "पुन: प्रयास करें"
+ "नया संदेश प्रारंभ करने के लिए कोई संपर्क नाम या फ़ोन नंबर डालें"
+ "अवरुद्ध करें"
+ "%s को अवरुद्ध करें"
+ "%s को अनवरोधित करें"
+ "%s को अवरोधित करें?"
+ "आपको इस संदेश से नंबर प्राप्त होते रहेंगे लेकिन अब उनकी सूचना नहीं दी जाएगी. इस वार्तालाप को संग्रहीत किया जाएगा."
+ "अवरोधित संपर्क"
+ "अनवरोधित करें"
+ "अवरोधित संपर्क"
+ "दस्तावेज़ लाइब्रेरी से चित्र चुनें"
+ "संदेश भेजा जा रहा है"
+ "संदेश भेजा गया"
+ "सेलुलर डेटा बंद हो गया है. अपनी सेटिंग जांचें."
+ "हवाई जहाज़ मोड में संदेश नहीं भेजे जा सकते"
+ "संदेश भेजा नहीं जा सका"
+ "संदेश डाउनलोड किया गया"
+ "सेल्युलर डेटा बंद हो गया है. अपनी सेटिंग जांचें."
+ "संदेश को हवाई जहाज़ मोड में डाउनलोड नहीं किया जा सकता"
+ "संदेश डाउनलोड नहीं किया जा सका"
+ "शून्य"
+ "एक"
+ "दो"
+ "तीन"
+ "चार"
+ "पांच"
+ "छह"
+ "सात"
+ "आठ"
+ "नौ"
+ "%1$s के साथ संदेश नहीं भेजा जा सकता, त्रुटि %2$d"
+ "अज्ञात वाहक के साथ संदेश नहीं भेजा जा सकता, त्रुटि %1$d"
+ "अग्रेषित: %s"
+ "संदेश नहीं भेजा गया: नेटवर्क पर सेवा सक्रिय नहीं है"
+ "संदेश नहीं भेजा गया: अमान्य गंतव्य पता"
+ "संदेश नहीं भेजा गया: अमान्य संदेश"
+ "संदेश नहीं भेजा गया: असमर्थित सामग्री"
+ "संदेश नहीं भेजा गया: असमर्थित संदेश"
+ "संदेश नहीं भेजा गया: बहुत बड़ा है"
+ "नया संदेश"
+ "देखें"
+ "चित्र"
+ "उपयुक्त ऐप्लिकेशन नहीं मिला"
+ "प्राप्तकर्ता को निकालें"
+ "नया संदेश"
+ "अभी नहीं"
+ "पहुंच बिंदु संपादित करें"
+ "सेट नहीं है"
+ "नाम"
+ "APN"
+ "MMSC"
+ "MMS प्रॉक्सी"
+ "MMS पोर्ट"
+ "MCC"
+ "MNC"
+ "APN प्रकार"
+ "APN हटाएं"
+ "नया APN"
+ "सहेजें"
+ "छोड़ें"
+ "नाम फ़ील्ड खाली नहीं हो सकता."
+ "APN खाली नहीं हो सकता."
+ "MCC फ़ील्ड में 3 अंक होने चाहिए."
+ "MCC फ़ील्ड में 2 या 3 अंक होने चाहिए."
+ "डिफ़ॉल्ट APN सेटिंग पुनर्स्थापित हो रही हैं."
+ "डिफ़ॉल्ट पर रीसेट करें"
+ "डिफ़ॉल्ट APN सेटिंग रीसेट करना पूर्ण हुआ."
+ "शीर्षक रहित"
+ "पहुंच बिंदु के नाम"
+ "APN"
+ "नया APN"
+ "एैक्सेस बिंदु नाम सेटिंग इस उपयोगकर्ता के लिए उपलब्ध नहीं हैं"
+ "क्लिपबोर्ड पर कॉपी बनाएं?"
+ "कॉपी बनाएं"
+ "%s पर"
+ "सामान्य"
+ "अतिरिक्त सेटिंस"
+ "सामान्य सेटिंग"
+ "अतिरिक्त सेटिंग"
+ "\"%s\" सिम"
+ "सभी प्राप्तकर्ताओं को व्यक्तिगत SMS संदेश भेजें. कोई भी जवाब केवल आपको प्राप्त होंगे"
+ "सभी प्राप्तकर्ताआें को एकल MMS भेजें"
+ "अज्ञात नंबर"
+ "नया संदेश"
+ "नया संदेश."
+ "सिम चयनकर्ता"
+ "%1$s चयनित, SIM चयनकर्ता"
+ "विषय संपादित करें"
+ "सिम चुनें या विषय संपादित करें"
+ "ऑडियो रिकॉर्ड करने के लिए स्पर्श करके रखें"
+ "नई बातचीत प्रारंभ करें"
+ "संदेश सेवा"
+ "संदेश सेवा सूची"
+ "संदेश सेवा"
+ "नया संदेश"
+ "वार्तालाप सूची"
+ "बातचीत लोड हो रही हैं…"
+ "संदेश लोड हो रहे हैं"
+ "और बातचीत देखें"
+ "अधिक संदेश देखें"
+ "वार्तालाप हटा दिया गया है"
+ "वार्तालाप हटा दिया गया. कोई भिन्न संदेश सेवा वार्तालाप दिखाने के लिए स्पर्श करें"
+ "अवरोधित"
+ "अनवरोधित"
+ "मेमोरी स्थान कम है. कुछ डेटा खो सकता है."
+ "अटैचमेंट चुनें"
+ "चयन की पुष्टि करें"
+ "%d चुने गए"
+ "कृपया एक या अधिक अटैचमेंट निकालें और पुन: प्रयास करें."
+ "आप अपना संदेश भेजकर देख सकते हैं, लेकिन यह तब तक वितरित नहीं होगा जब तक कि आप एक या कुछ और अटैचमेंट निकाल नहीं देते."
+ "आप प्रति संदेश केवल एक वीडियो भेज सकते हैं. कृपया अतिरिक्त वीडियो निकालें और पुन: प्रयास करें."
+ "संदेश सेवा अटैचमेंट लोड करने में विफल रही."
+ "फिर भी भेजें"
+ "बातचीत प्रारंभ नहीं की जा सकी"
+ "%1$s (%2$s)"
+ "%s चुनी गई"
+
diff --git a/res/values-hr/arrays.xml b/res/values-hr/arrays.xml
new file mode 100644
index 0000000..5ebf706
--- /dev/null
+++ b/res/values-hr/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "nema predmeta"
+ "nosubject"
+
+
+ "Da"
+ "Ne"
+ "U redu"
+ "He-he"
+ "Hvala"
+ "Slažem se"
+ "Lijepo"
+ "Krećem"
+ "U redu, javit ću se kasnije"
+ ":)"
+ ":("
+
+
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
new file mode 100644
index 0000000..e12b64f
--- /dev/null
+++ b/res/values-hr/strings.xml
@@ -0,0 +1,545 @@
+
+
+
+
+ "Slanje poruka"
+ "Slanje poruka"
+ "Odabir razgovora"
+ "Postavke"
+ "Pošalji poruku"
+ "Dodajte privitak"
+ "Pomoć"
+ "Dobro došli"
+ "Preskoči"
+ "Dalje >"
+ "Dalje"
+ "Izlaz"
+ "Postavke >"
+ "Postavke"
+ "Slanje poruka treba dopuštenje za SMS, Telefon i Kontakte."
+ "Dopuštenja možete promijeniti u Postavkama > Aplikacije > Slanje poruka > Dopuštenja."
+ "Dopuštenja možete promijeniti tako da u Postavkama otvorite Aplikacije, Slanje poruka, Dopuštenja."
+ "Često kontaktirani"
+ "Svi kontakti"
+ "Pošalji na %s"
+ "Snimite fotografije ili videozapis"
+ "Odaberite slike s ovog uređaja"
+ "Snimanje zvuka"
+ "Odaberite fotografiju"
+ "Medij je odabran."
+ "Odabir medija poništen je."
+ "Odabrano: %d"
+ "slika %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "slika"
+ "Snimanje zvuka"
+ "Dijeljenje"
+ "Upravo sada"
+ "Sad"
+
+ %d min
+ %d min
+ %d min
+
+
+ %d sat
+ %d sata
+ %d sati
+
+
+ %d dan
+ %d dana
+ %d dana
+
+
+ %d tjedan
+ %d tjedna
+ %d tjedana
+
+
+ %d mjesec
+ %d mjeseca
+ %d mjeseci
+
+
+ %d godina
+ %d godine
+ %d godina
+
+ "Poruka klase 0"
+ "Spremi"
+ "Na uređaju ponestaje prostora. Slanje poruka automatski će izbrisati starije poruke da bi se oslobodio prostor."
+ "Ponestaje prostora za pohranu"
+ "Slanje poruka možda neće slati ili primati poruke dok se na uređaju ne oslobodi više prostora."
+ "Nema dovoljno prostora za pohranu SMS-a. Možda ćete morati izbrisati poruke."
+ "Potvrđivanje telefonskog broja"
+ "Taj jednokratni korak omogućit će Slanju poruka pravilnu isporuku vaših grupnih poruka."
+ "Telefonski broj"
+ "Izbriši sve poruke s medijskim sadržajima"
+ "Izbriši poruke starije od %s"
+ "Automatski izbriši poruke starije od %s"
+ "Zanemari"
+ "Izbrisati sve poruke s medijskim sadržajima?"
+ "Izbrisati poruke starije od %s?"
+ "Izbrisati poruke starije od %s i uključiti automatsko brisanje?"
+ "%s kaže"
+ "Rekli ste"
+ "Poruka pošiljatelja %s"
+ "Poslali ste poruku"
+ "Slanje…"
+ "Nije poslano. Dodirnite za ponovni pokušaj."
+ "Nije poslano. Pokušavamo ponovo…"
+ "Ponovno slanje ili brisanje"
+ "Nazovite hitnu službu. Vaša tekstna poruka nije isporučena."
+ "Nije poslano"
+ "Nova MMS poruka za preuzimanje"
+ "Nova MMS poruka"
+ "Preuzimanje nije moguće"
+ "Dodirnite za ponovni pokušaj"
+ "Dodirnite za preuzimanje"
+ "Preuzimanje ili brisanje"
+ "Preuzimanje..."
+ "Poruka je istekla ili nije dostupna"
+ "veličina: %1$s, istek: %2$s"
+ "Nije poslano. Primatelj nije važeći."
+ "Usluga nije aktivirana na mreži"
+ "Slanje nije uspjelo zbog problema s mrežom"
+ "Poruka je istekla ili nije dostupna"
+ "(Bez predmeta)"
+ "Nepoznati pošiljatelj"
+ "Isporučeno"
+ "Preuzimanje poruke %1$s od pošiljatelja %2$s nije uspjelo."
+ "Radnja baze podataka nije dovršena zbog nedostatka memorije"
+ "Poruka nije poslana"
+ "Neke poruke nisu poslane u Slanju poruka"
+
+ %d poruka u %d razgovoru
+ %d poruke u %d razgovora
+ %d poruka u %d razgovora
+
+ "Poruka nije preuzeta"
+ "Neke poruke nisu preuzete u Slanje poruka"
+
+ %d poruka u %d razgovoru
+ %d poruke u %d razgovora
+ %d poruka u %d razgovora
+
+ "Poruka na broj %1$s nije poslana"
+ "Nazovite hitnu službu. Vaša tekstna poruka na broj %1$s nije isporučena."
+
+ %d nova poruka
+ %d nove poruke
+ %d novih poruka
+
+ "Započni"
+ "Fotoaparat nije dostupan"
+ "Fotoaparat nije dostupan"
+ "Snimanje videozapisa nije dostupno"
+ "Medij nije spremljen"
+ "Nije moguće snimiti sliku"
+ "Natrag"
+ "Arhivirano"
+ "Izbriši"
+ "Arhiviraj"
+ "Poništi arhiviranje"
+ "Isključi obavijesti"
+ "Uključi obavijesti"
+ "Dodaj kontakt"
+ "Preuzmi"
+ "Pošalji"
+ "Izbriši"
+ "Želite li izbrisati tu poruku?"
+ "Tu radnju nije moguće poništiti."
+ "Izbriši"
+
+ Izbrisati razgovore?
+ Izbrisati razgovore?
+ Izbrisati razgovore?
+
+ "Izbriši"
+ "Odustani"
+ "Odredište"
+ "Odaberi više slika"
+ "Potvrdite odabir"
+ "+%d"
+ "Audioporuka nije snimljena. Pokušajte ponovo."
+ "Audioporuku nije moguće reproducirati. Pokušajte ponovo."
+ "Audioporuka nije spremljena. Pokušajte ponovo."
+ "Dodirnite i zadržite"
+ ", "
+ " "
+ ": "
+ " "
+ "Slika"
+ "Audioisječak"
+ "Videozapis"
+ "Kartica kontakta"
+ "Preuzmi"
+ "Odgovorite putem SMS-a"
+ "Odgovor MMS-om"
+ "Odgovorite"
+
+ %d sudionik
+ %d sudionika
+ %d sudionika
+
+ "Ja"
+ "Kontakt je blokiran i arhiviran"
+ "Kontakt deblokiran i dearhiviran"
+ "Arhivirano: %d"
+ "Poništena arhiviranja: %d"
+ "Obavijesti isključene"
+ "Obavijesti uključene"
+ "Sve je postavljeno. Ponovo dodirnite Pošalji."
+ "Slanje poruka uspješno je postavljeno kao zadana aplikacija za SMS."
+
+ Odbacivanje privitaka
+ Odbacivanje privitaka
+ Odbacivanje privitaka
+
+ "Audioprivitak"
+ "Reproduciraj audioprivitak"
+ "Pauziraj"
+ "Poruka pošiljatelja %s: %s."
+ "Poruka pošiljatelja %s nije uspjela: %s. Vrijeme: %s"
+ "Poruka pošiljatelja %s: %s. Vrijeme: %s"
+ "Poruka za kontakt %s nije poslana: %s. Vrijeme: %s"
+ "Slanje poruke kontaktu %s: %s. Vrijeme: %s"
+ "Poruka za kontakt %s nije uspjela: %s. Vrijeme: %s"
+ "Poruka kontaktu %s: %s. Vrijeme: %s"
+ "Neuspjela poruka pošiljatelja %s: %s. Vrijeme: %s. %s"
+ "Poruka pošiljatelja %s: %s. Vrijeme: %s. %s"
+ "Poruka za grupu %s nije poslana: %s. Vrijeme: %s"
+ "Slanje poruke grupi %s: %s. Vrijeme: %s"
+ "Poruka za grupu %s nije uspjela: %s. Vrijeme: %s"
+ "Poruka grupi %s: %s. Vrijeme: %s"
+ "Poruka nije uspjela. Dodirnite za ponovni pokušaj."
+ "Razgovor sa sljedećima: %s"
+ "Brisanje predmeta"
+ "Snimi videozapis"
+ "Snimi fotografiju"
+ "Snimi sliku"
+ "Početak snimanja videozapisa"
+ "Prebacivanje na fotoaparat na punom zaslonu"
+ "Prebacivanje između prednjeg i stražnjeg fotoaparata"
+ "Zaustavi snimanje i priloži videozapis"
+ "Zaustavi snimanje videozapisa"
+ "Fotografije Slanja poruka"
+
+ %d fotografija spremljena je u album \"%s\"
+ %d fotografije spremljene su u album \"%s\"
+ %d fotografija spremljeno je u album \"%s\"
+
+
+ %d videozapis spremljen je u album \"%s\"
+ %d videozapisa spremljena su u album \"%s\"
+ %d videozapisa spremljeno je u album \"%s\"
+
+
+ %d privitak spremljen je u album \"%s\"
+ %d privitka spremljena su u album \"%s\"
+ %d privitaka spremljeno je u album \"%s\"
+
+
+ %d privitak spremljen je u \"Preuzimanja\"
+ %d privitka spremljena su u \"Preuzimanja\"
+ %d privitaka spremljeno je u \"Preuzimanja\"
+
+
+ %d privitak spremljen
+ %d privitka spremljena
+ %d privitaka spremljeno
+
+
+ Spremanje %d privitka nije uspjelo
+ Spremanje %d privitaka nije uspjelo
+ Spremanje %d privitaka nije uspjelo
+
+ "MMS privitak spremljen"
+ "Postavke"
+ "Arhivirano"
+ "Zatvori"
+ "MMS"
+ "Napredno"
+ "Otklanjanje pogrešaka"
+ "Obavijesti"
+ "Zvuk"
+ "Bešumno"
+ "Vibriranje"
+ "Blokirano"
+ "Izvješća o isporuci SMS-a"
+ "Zahtijevanje izvješća o isporuci za svaki poslani SMS"
+ "Automatski dohvat"
+ "Automatsko dohvaćanje MMS-ova"
+ "Automatski dohvati u roamingu"
+ "Automatsko dohvaćanje MMS-ova u roamingu"
+ "Grupne poruke"
+ "Slanje jedne poruke za više primatelja pomoću MMS-a"
+ "Zadana aplikacija za SMS"
+ "Zadana aplikacija za SMS"
+
+
+ "Vaš telefonski broj"
+ "Nepoznato"
+ "Zvukovi odlazne poruke"
+ "Sigurnosno kopiraj SMS-ove"
+ "Sigurnosno kopiranje neobrađenih podataka primljenih SMS-ova u datoteku vanjske pohrane"
+ "Sigurnosno kopiraj MMS-ove"
+ "Sigurnosno kopiranje neobrađenih podataka primljenih MMS-ova u datoteku vanjske pohrane"
+ "Upozorenja putem mobilne mreže"
+ "Opcije poruka"
+ "Kopiraj tekst"
+ "Prikaz pojedinosti"
+ "Izbriši"
+ "Proslijedi"
+ "Pojedinosti poruke"
+ "Vrsta: "
+ "SMS poruka"
+ "Multimedijska poruka"
+ "Šalje: "
+ "Prima: "
+ "Poslano: "
+ "Primljeno: "
+ "Predmet: "
+ "Veličina: "
+ "Prioritet: "
+ "SIM: "
+ "Visok"
+ "Uobičajeni"
+ "Niski"
+ "SIM %s"
+ "Skrivena adresa pošiljatelja"
+ "Slanje poruke nije moguće tijekom učitavanja privitaka."
+ "Privitak nije učitan. Pokušajte ponovo."
+ "Mreža nije spremna. Pokušajte ponovo."
+ "Brisanje teksta"
+ "Prebacivanje između unosa teksta i brojeva"
+ "Dodaj još sudionika"
+ "Potvrdi sudionike"
+ "Započnite novi razgovor"
+ "Odaberite ovu stavku"
+ "Reproduciraj videozapis"
+ "Osobe i opcije"
+ "Otkloni pogreške"
+ "Osobe i opcije"
+ "Općenito"
+ "Osobe u ovom razgovoru"
+ "Uputite poziv"
+ "Pošaljite poruku"
+ "Pošalji poruku<br/><small>sa SIM kartice %s</small>"
+
+ Pošaljite fotografije
+ Pošaljite fotografije
+ Pošaljite fotografije
+
+
+ Pošaljite audiozapise
+ Pošaljite audiozapise
+ Pošaljite audiozapise
+
+
+ Pošaljite videozapise
+ Pošaljite videozapise
+ Pošaljite videozapise
+
+
+ Pošaljite kartice kontakata
+ Pošaljite kartice kontakata
+ Pošaljite kartice kontakata
+
+
+ Pošaljite privitke
+ Pošaljite privitke
+ Pošaljite privitke
+
+
+ %d privitak spreman je za slanje
+ %d privitka spremna su za slanje
+ %d privitaka spremno je za slanje
+
+ "Slanje povratnih informacija"
+ "Prikaži u Trgovini Google Play"
+ "Informacije o verziji"
+ "Verzija %1$s"
+ "Licence otvorenog koda"
+ "Obavijesti"
+ "Dosegnuto je ograničenje za privitke"
+ "Učitavanje privitka nije uspjelo."
+ "Želite li dodati u Kontakte?"
+ "Dodavanje kontakta"
+ "Predmet"
+ "Predmet: "
+ "%s%s"
+ "Učitavanje kartice kontakta"
+ "Kartica kontakta nije učitana"
+ "Prikaz kartice kontakta"
+
+ %d kontakt
+ %d kontakta
+ %d kontakata
+
+ "Kartice kontakata"
+ "Rođendan"
+ "Bilješke"
+ "Proslijedi poruku"
+ "Odgovori"
+ "+1"
+ "+%d"
+ "SMS je onemogućen"
+ "Postavite Slanje poruka kao zadanu aplikaciju za SMS da biste slali poruke"
+ "Postavite Slanje poruka kao zadanu aplikaciju za SMS"
+ "Promijeni"
+ "Postavite Slanje poruka kao zadanu aplikaciju za SMS da biste primali poruke"
+ "Nije odabran preferirani SIM za slanje SMS poruka"
+ "Vlasnik uređaja nije odobrio upotrebu te aplikacije."
+ "U redu"
+ "Previše sudionika u razgovoru"
+
+ Nevažeći kontakti
+ Nevažeći kontakti
+ Nevažeći kontakti
+
+ "Slika nije učitana"
+ "Vi: "
+ "%s: "
+ "Skica"
+ "Ovdje će biti naveden novi razgovor kada ga pokrenete"
+ "Arhivirani razgovori prikazuju se ovdje"
+ "Učitavanje razgovora..."
+ "Slika"
+ "Audioisječak"
+ "Videozapis"
+ "Kartica kontakta"
+ "MMS"
+ "Poništi"
+ "Pokušaj ponovo"
+ "Unesite ime kontakta ili telefonski broj da biste započeli novu poruku"
+ "Blokiraj"
+ "Blokiranje %s"
+ "Deblokiraj %s"
+ "Blokirati %s?"
+ "I dalje ćete primati poruke s tog broja, ali više nećete primati obavijesti o tome. Razgovor će se arhivirati."
+ "Blokirani kontakti"
+ "DEBLOKIRAJ"
+ "Blokirani kontakti"
+ "Odaberite sliku iz knjižnice dokumenata"
+ "Slanje poruke"
+ "Poruka je poslana"
+ "Mobilni su podaci isključeni. Provjerite postavke."
+ "Ne možete slati poruke u načinu rada u zrakoplovu"
+ "Slanje poruke nije uspjelo"
+ "Poruka preuzeta"
+ "Mobilni su podaci isključeni. Provjerite postavke."
+ "Nije moguće preuzimanje poruka u načinu rada u zrakoplovu"
+ "Preuzimanje poruke nije uspjelo"
+ "Nula"
+ "Jedan"
+ "Dva"
+ "Tri"
+ "Četiri"
+ "Pet"
+ "Šest"
+ "Sedam"
+ "Osam"
+ "Devet"
+ "Poruka nije poslana putem operatera %1$s, pogreška %2$d"
+ "Poruka nije poslana putem nepoznatog mobilnog operatera, pogreška %1$d"
+ "Fwd: %s"
+ "Poruka nije poslana jer usluga nije aktivirana na mreži"
+ "Poruka nije poslana jer odredišna adresa nije važeća"
+ "Poruka nije poslana jer nije važeća"
+ "Poruka nije poslana jer sadržaj nije podržan"
+ "Poruka nije poslana jer nije podržana"
+ "Poruka nije poslana jer je prevelika"
+ "Nova poruka"
+ "Prikaz"
+ "Slika"
+ "Nije pronađena odgovarajuća aplikacija"
+ "Uklanjanje primatelja"
+ "Nova poruka"
+ "Odustani"
+ "Uređivanje pristupne točke"
+ "Nije postavljeno"
+ "Naziv"
+ "APN"
+ "MMSC"
+ "MMS proxy"
+ "MMS priključak"
+ "MCC"
+ "MNC"
+ "Vrsta APN-a"
+ "Izbriši APN"
+ "Novi APN"
+ "Spremi"
+ "Odbaci"
+ "Polje naziva ne može biti prazno."
+ "APN ne može biti prazan."
+ "MCC polje mora imati 3 znamenke."
+ "Polje MNC mora imati 2 ili 3 znamenke."
+ "Vraćaju se zadane postavke APN-a."
+ "Vrati na zadano"
+ "Dovršeno je vraćanje zadanih postavki APN-a."
+ "Bez naziva"
+ "Nazivi pristupnih točaka"
+ "APN-ovi"
+ "Novi APN"
+ "Postavke naziva pristupne točke nisu dostupne ovom korisniku"
+ "Kopirati u međuspremnik?"
+ "Kopiraj"
+ "na %s"
+ "Općenito"
+ "Napredno"
+ "Opće postavke"
+ "Napredne postavke"
+ "\"%s\" SIM"
+ "Slanje pojedinačnih SMS poruka svim primateljima. Eventualne odgovore dobit ćete samo vi"
+ "Slanje pojedinačnog MMS-a svim primateljima"
+ "Nepoznati broj"
+ "Nova poruka"
+ "Nova poruka."
+ "Gumb za odabir SIM-a"
+ "%1$s odabran, gumb za odabir SIM-a"
+ "Uredi predmet"
+ "Odabir SIM-a ili uređivanje predmeta"
+ "Dodirnite i zadržite da biste snimili zvuk"
+ "Započnite novi razgovor"
+ "Slanje poruka"
+ "Popis Slanja poruka"
+ "Slanje poruka"
+ "Nova poruka"
+ "Popis razgovora"
+ "Učitavanje razgovora"
+ "Učitavanje poruka"
+ "Prikaži više razgovora"
+ "Prikaži više poruka"
+ "Razgovor je izbrisan"
+ "Razgovor izbrisan. Dodirnite za prikaz drugog razgovora iz Slanja poruka"
+ "Blokirano"
+ "Deblokirano"
+ "Nedostaje prostora za pohranu. Neki se podaci mogu izgubiti."
+ "Odaberite privitke"
+ "Potvrdite odabir"
+ "Odabrano: %d"
+ "Uklonite jedan ili više privitaka i pokušajte ponovo."
+ "Možete pokušati poslati poruku, ali možda neće biti dostavljena ako ne uklonite jedan ili više privitaka."
+ "Možete poslati samo jedan videozapis u poruci. Uklonite dodatne videozapise i pokušajte ponovo."
+ "Slanje poruka nije uspjelo učitati privitak."
+ "Svejedno pošalji"
+ "Pokretanje razgovora nije uspjelo"
+ "%1$s (%2$s)"
+ "Odabrani SIM: %s"
+
diff --git a/res/values-hu/arrays.xml b/res/values-hu/arrays.xml
new file mode 100644
index 0000000..36c0cd0
--- /dev/null
+++ b/res/values-hu/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "nincs tárgy"
+ "nincs tárgy"
+
+
+ "Igen"
+ "Nem"
+ "OK"
+ "Haha!"
+ "Köszönöm!"
+ "Egyetértek"
+ "Ügyes"
+ "Úton vagyok"
+ "Rendben, később jelentkezem"
+ ":)"
+ ":("
+
+
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
new file mode 100644
index 0000000..cd254f2
--- /dev/null
+++ b/res/values-hu/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Üzenetváltás"
+ "Üzenetváltás"
+ "Beszélgetés kijelölése"
+ "Beállítások"
+ "Üzenet küldése"
+ "Melléklet hozzáadása"
+ "Súgó"
+ "Üdvözöljük!"
+ "Kihagyás"
+ "Következő >"
+ "Tovább"
+ "Kilépés"
+ "Beállítások >"
+ "Beállítások"
+ "A Messaging engedélyt kér a következőkhöz: SMS, telefon és névjegyek."
+ "Az engedélyeket a Beállítások > Alkalmazások > Messaging > Engedélyek lehetőségnél módosíthatja."
+ "Az engedélyeket a Beállítások, Alkalmazások, Messaging, Engedélyek lehetőségnél módosíthatja."
+ "Gyakran használt névjegyek"
+ "Az összes névjegy"
+ "Küldés: %s"
+ "Kép vagy videó rögzítése"
+ "Képek kiválasztása erről az eszközről"
+ "Hanganyag rögzítése"
+ "Fotó kiválasztása"
+ "Kijelölte a médiaelemet."
+ "Visszavonta a médiaelem kijelölését."
+ "%d kiválasztva"
+ "kép %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "kép"
+ "Hanganyag rögzítése"
+ "Megosztás"
+ "Éppen most"
+ "Most"
+
+ %d perce
+ %d perce
+
+
+ %d órája
+ %d órája
+
+
+ %d napja
+ %d napja
+
+
+ %d hét
+ egy hét
+
+
+ %d hónap
+ egy hónap
+
+
+ %d év
+ egy év
+
+ "0. osztályú üzenet"
+ "Mentés"
+ "Az eszközön kevés a tárhely. A Messaging automatikusan törli a régebbi üzeneteket tárhely felszabadítása érdekében."
+ "Kevés a szabad terület"
+ "A Messaging nem küldhet vagy fogadhat üzenetet, amíg nem áll rendelkezésre több hely az eszközön."
+ "Kevés a tárhely az SMS-eknek. Lehet, hogy üzeneteket kell törölnie."
+ "Telefonszám megerősítése"
+ "Ez az egyszeri lépés biztosítja, hogy a Messaging megfelelően továbbítsa a csoportos üzeneteket."
+ "Telefonszám"
+ "Az összes médiatartalommal bíró üzenet törlése"
+ "A(z) %s időtartamnál régebbi üzenetek törlése"
+ "A(z) %s időtartamnál régebbi üzenetek automatikus törlése"
+ "Mellőzés"
+ "Törli az összes, médiát tartalmazó üzenetet?"
+ "Törli a(z) %s időtartamnál régebbi üzeneteket?"
+ "Törli a(z) %s időtartamnál régebbi üzeneteket, és bekapcsolja az automatikus törlést?"
+ "%s a következőt mondta:"
+ "Ön a következőt mondta"
+ "%s üzenete:"
+ "Ön elküldött egy üzenetet"
+ "Küldés…"
+ "Nem lehetett elküldeni. Érintse meg az újbóli próbálkozáshoz."
+ "Nem lehetett elküldeni. Újabb próbálkozás…"
+ "Újraküldés vagy törlés"
+ "Kérjük, tárcsázza a segélyhívót. A szöveges üzenetet jelenleg nem tudjuk elküldeni."
+ "Sikertelen"
+ "Új letölthető MMS üzenet"
+ "Új MMS üzenet"
+ "Nem sikerült letölteni"
+ "Érintse meg az újabb próbálkozáshoz"
+ "Érintse meg a letöltéshez"
+ "Letöltés vagy törlés"
+ "Letöltés…"
+ "Az üzenet vagy lejárt, vagy nem érhető el."
+ "méret: %1$s, lejárat: %2$s"
+ "Nem lehetett elküldeni. A címzett érvénytelen."
+ "A szolgáltatás nincs aktiválva a hálózaton"
+ "Hálózati probléma miatt nem lehetett elküldeni"
+ "Az üzenet vagy lejárt, vagy nem érhető el."
+ "(Nincs tárgy)"
+ "Ismeretlen feladó"
+ "Kézbesítve"
+ "Nem sikerült letölteni %2$s „%1$s” tárgyú levelét."
+ "Kevés a memória, ezért nem sikerült végrehajtani a műveletet az adatbázison"
+ "A rendszer nem küldte el az üzenetet"
+ "A Messaging egyes üzeneteit nem lehetett elküldeni"
+
+ %d üzenet %d beszélgetésben
+ %d üzenet egy beszélgetésben
+
+ "Az üzenet nincs letöltve"
+ "A Messaging egyes üzeneteit nem lehetett letölteni"
+
+ %d üzenet %d beszélgetésben
+ %d üzenet egy beszélgetésben
+
+ "Nem sikerült elküldeni az üzenetet a(z) %1$s számra"
+ "Kérjük, tárcsázza a segélyhívót. A szöveges üzenetet jelenleg nem tudjuk elküldeni erre a számra: %1$s."
+
+ %d új üzenet
+ Új üzenet
+
+ "Indítás"
+ "A kamera nem érhető el"
+ "A kamera nem érhető el"
+ "A videorögzítés nem érhető el"
+ "Nem lehetett menteni a médiát"
+ "Nem lehet képet készíteni"
+ "Vissza"
+ "Archiválva"
+ "Törlés"
+ "Archiválás"
+ "Archiválás visszavonása"
+ "Értesítések kikapcsolása"
+ "Értesítések bekapcsolása"
+ "Névjegy hozzáadása"
+ "Letöltés"
+ "Küldés"
+ "Törlés"
+ "Törli ezt az üzenetet?"
+ "Ez a művelet nem vonható vissza."
+ "Törlés"
+
+ Törli ezeket a beszélgetéseket?
+ Törli ezt a beszélgetést?
+
+ "Törlés"
+ "Mégse"
+ "Címzett"
+ "Több kép kiválasztása"
+ "Kiválasztás megerősítése"
+ "+%d"
+ "Nem sikerült rögzíteni a hangot. Próbálja újra."
+ "A hanganyag nem játszható le. Próbálja újra."
+ "Nem sikerült elmenteni a hangot. Próbálja újra."
+ "Érintés és tartás"
+ ", "
+ " "
+ ": "
+ " "
+ "Kép"
+ "Hangfelvétel"
+ "Videó"
+ "Névjegykártya"
+ "Letöltés"
+ "Válasz SMS-ben"
+ "Válasz MMS-ben"
+ "Válasz"
+
+ %d résztvevő
+ %d résztvevő
+
+ "Én"
+ "Ismerős letiltva és archiválva"
+ "Névjegy tiltása és archiválása visszavonva"
+ "%d archiválva"
+ "%d archiválása megszüntetve"
+ "Értesítések kikapcsolva"
+ "Értesítések bekapcsolva"
+ "Minden készen áll. Érintse meg újra a Küldés lehetőséget."
+ "A Messaging sikeresen beállítva alapértelmezett SMS-alkalmazásként."
+
+ Mellékletek elvetése
+ Melléklet elvetése
+
+ "Hangmelléklet"
+ "Hangmelléklet lejátszása"
+ "Szünet"
+ "%s üzenete: %s."
+ "Sikertelen üzenet %s feladótól: %s. Idő: %s."
+ "Üzenet %s feladótól: %s. Idő: %s."
+ "Elküldetlen üzenet a(z) %s csoportnak: %s. Idő: %s."
+ "Üzenet küldése a(z) %s csoportnak: %s. Idő: %s."
+ "Sikertelen üzenet a(z) %s csoportnak: %s. Idő: %s."
+ "Üzenet a(z) %s csoportnak: %s. Idő: %s."
+ "Sikertelen üzenet %s feladótól: %s. Idő: %s. %s"
+ "Üzenet %s feladótól: %s. Idő: %s. %s"
+ "Elküldetlen üzenet a(z) %s csoportnak: %s. Idő: %s."
+ "Üzenet küldése a(z) %s csoportnak: %s. Idő: %s."
+ "Sikertelen üzenet a(z) %s csoportnak: %s. Idő: %s."
+ "Üzenet a(z) %s csoportnak: %s. Idő: %s."
+ "Sikertelen üzenet. Érintse meg az újrapróbáláshoz."
+ "Beszélgetés a következőkkel: %s"
+ "Tárgy törlése"
+ "Videó rögzítése"
+ "Állókép rögzítése"
+ "Kép készítése"
+ "Videofelvétel megkezdése"
+ "Váltás teljes képernyős kameranézetre"
+ "Váltás az elülső és a hátulsó kamera között"
+ "Rögzítés leállítása és a videó csatolása"
+ "Videofelvétel leállítása"
+ "Messaging-fotók"
+
+ %d fotó mentve a következő albumba: %s
+ %d fotó mentve a következő albumba: %s
+
+
+ %d videó mentve a következő albumba: %s
+ %d videó mentve a következő albumba: %s
+
+
+ %d melléklet mentve a következő albumba: %s
+ %d melléklet mentve a következő albumba: %s
+
+
+ %d melléklet mentve a „Letöltések” közé
+ %d melléklet mentve a „Letöltések” közé
+
+
+ %d melléklet sikeresen mentve
+ %d melléklet sikeresen mentve
+
+
+ %d melléklet mentése nem sikerült
+ %d melléklet mentése nem sikerült
+
+ "Mentett MMS-melléklet"
+ "Beállítások"
+ "Archiválva"
+ "Bezárás"
+ "MMS"
+ "Speciális"
+ "Hibakeresés"
+ "Értesítések"
+ "Hang"
+ "Néma"
+ "Rezgés"
+ "Letiltva"
+ "SMS-kézbesítési jelentések"
+ "Kézbesítési jelentés kérése minden elküldött SMS-ről"
+ "Automatikus letöltés"
+ "MMS-üzenetek automatikus letöltése"
+ "Auto. letöltés barangoláskor"
+ "MMS-ek automatikus lekérése adatbarangoláskor"
+ "Csoportos üzenetküldés"
+ "Küldjön MMS-t, amikor több címzettnek szeretne üzenetet küldeni."
+ "Alapértelmezett SMS-alkalmazás"
+ "Alapértelmezett SMS-alkalmazás"
+
+
+ "Az Ön telefonszáma"
+ "Ismeretlen"
+ "Kimenő üzenetek hangja"
+ "SMS kiírása"
+ "Beérkező nyers SMS-adatok kiírása külső tárolófájlba"
+ "MMS kiírása"
+ "Beérkező nyers MMS-adatok kiírása külső tárolófájlba"
+ "Vezeték nélküli értesítések"
+ "Üzenetbeállítások"
+ "Szöveg másolása"
+ "Részletek megjelenítése"
+ "Törlés"
+ "Továbbítás"
+ "Üzenet részletei"
+ "Típus: "
+ "Szöveges üzenet"
+ "Multimédiás üzenet"
+ "Küldő: "
+ "Címzett: "
+ "Elküldve: "
+ "Érkezett: "
+ "Tárgy: "
+ "Méret: "
+ "Prioritás: "
+ "SIM: "
+ "Magas"
+ "Normál"
+ "Alacsony"
+ "%s. SIM"
+ "A küldő címe elrejtve"
+ "A mellékletek betöltése közben nem lehet elküldeni az üzenetet."
+ "Nem lehetett betölteni a mellékletet. Próbálja újra."
+ "A hálózat nem áll készen. Próbálja újra."
+ "Szöveg törlése"
+ "Váltás szöveg és számok bevitele között"
+ "További résztvevők hozzáadása"
+ "Résztvevők megerősítése"
+ "Új beszélgetés indítása"
+ "Elem kiválasztása"
+ "Videó lejátszása"
+ "Személyek és beállítások"
+ "Hibakeresés"
+ "Személyek és beállítások"
+ "Általános"
+ "A jelen beszélgetésben részt vevő személyek"
+ "Hívásindítás"
+ "Üzenet küldése"
+ "Üzenet küldése<br/><small>a következő SIM kártyáról: %s</small>"
+
+ Fotók küldése
+ Fotó küldése
+
+
+ Hangok küldése
+ Hang küldése
+
+
+ Videók küldése
+ Videó küldése
+
+
+ Névjegykártyák küldése
+ Névjegykártya küldése
+
+
+ Mellékletek küldése
+ Melléklet küldése
+
+
+ %d melléklet készen áll a küldésre
+ Egy melléklet készen áll a küldésre
+
+ "Visszajelzés küldése"
+ "Megtekintés a Google Play Áruházban"
+ "Verzióadatok"
+ "Verzió: %1$s"
+ "Nyílt forráskódú licencek"
+ "Értesítések"
+ "Elérte a mellékletekre vonatkozó korlátot"
+ "Nem sikerült betölteni a mellékletet."
+ "Hozzáadja a Névjegyekhez?"
+ "Névjegy hozzáadása"
+ "Tárgy"
+ "Tárgy: "
+ "%s%s"
+ "Névjegykártya betöltése"
+ "Nem lehetett betölteni a névjegykártyát"
+ "Névjegykártya megtekintése"
+
+ %d névjegy
+ %d névjegy
+
+ "Névjegykártyák"
+ "Születésnap"
+ "Jegyzetek"
+ "Üzenet továbbítása"
+ "Válasz"
+ "+1"
+ "+%d"
+ "SMS-ek letiltva"
+ "A küldéshez állítsa be, hogy a Messaging legyen az alapértelmezett SMS-alkalmazás"
+ "A Messaging beállítása alapértelmezett SMS-alkalmazásként"
+ "Módosítás"
+ "Üzenetek fogadásához állítsa be, hogy a Messaging legyen az alapértelmezett SMS-alkalmazás"
+ "Nincs SIM kiválasztva az SMS-küldéshez"
+ "Az eszköz tulajdonosa nem engedélyezi ezt az alkalmazást."
+ "OK"
+ "Túl sok a résztvevő a beszélgetésben"
+
+ Érvénytelen névjegy
+ Érvénytelen névjegy
+
+ "Nem lehetett betölteni a kamera képét"
+ "Ön: "
+ "%s: "
+ "Piszkozat"
+ "Amikor új beszélgetésbe kezd, az itt jelenik meg"
+ "Itt jelennek meg az archivált beszélgetések"
+ "Beszélgetések betöltése…"
+ "Kép"
+ "Hangfelvétel"
+ "Videó"
+ "Névjegykártya"
+ "MMS"
+ "Visszavonás"
+ "Újra"
+ "Új üzenet létrehozásához adjon meg egy névjegyet vagy telefonszámot"
+ "Tiltás"
+ "%s letiltása"
+ "%s feloldása"
+ "Letiltja ezt: %s?"
+ "Továbbra is kap üzeneteket erről a számról, ám a rendszer nem küld róluk értesítést. A beszélgetést a rendszer archiválja."
+ "Letiltott ismerősök"
+ "FELOLD"
+ "Letiltott ismerősök"
+ "Kép választása a dokumentumtárból"
+ "Üzenet küldése"
+ "Üzenet elküldve"
+ "A mobiladat-kapcsolat ki van kapcsolva. Ellenőrizze beállításait."
+ "Repülős módban nem lehet üzeneteket küldeni"
+ "Az üzenetet nem sikerült elküldeni"
+ "Üzenet letöltve"
+ "A mobiladat-kapcsolat ki van kapcsolva. Ellenőrizze beállításait."
+ "Repülős üzemmódban nem lehet üzenetet letölteni"
+ "Az üzenetet nem sikerült letölteni"
+ "Nulla"
+ "Egy"
+ "Kettő"
+ "Három"
+ "Négy"
+ "Öt"
+ "Hat"
+ "Hét"
+ "Nyolc"
+ "Kilenc"
+ "Nem lehet elküldeni az üzenetet a következő szolgáltatónál: %1$s (hibakód: %2$d)"
+ "Nem lehet elküldeni az üzenetet egy ismeretlen szolgáltatónál (hibakód: %1$d)"
+ "Továbbítás: %s"
+ "Az üzenet nincs elküldve: a szolgáltatás nincs aktiválva a hálózaton"
+ "Az üzenet küldése sikertelen: a címzett címe érvénytelen"
+ "Az üzenet küldése sikertelen: érvénytelen üzenet"
+ "Az üzenet küldése sikertelen: nem támogatott tartalom"
+ "Az üzenet küldése sikertelen: nem támogatott üzenet"
+ "Az üzenet nincs elküldve: túl nagy"
+ "Új üzenet"
+ "Megtekintés"
+ "Kép"
+ "Nem található megfelelő alkalmazás"
+ "Címzett eltávolítása"
+ "Új üzenet"
+ "Mégse"
+ "Hozzáférési pont szerkesztése"
+ "Nincs megadva"
+ "Név"
+ "APN"
+ "MMSC"
+ "MMS-proxy"
+ "MMS-port"
+ "MCC"
+ "MNC"
+ "APN típusa"
+ "APN törlése"
+ "Új APN"
+ "Mentés"
+ "Elvetés"
+ "A Név mező nem lehet üres."
+ "Az APN nem lehet üres."
+ "Az MCC mezőnek három számjegyet kell tartalmaznia."
+ "Az MNC mezőbe 2 vagy 3 számjegyet kell írni."
+ "Alapértelmezett APN-beállítások visszaállítása."
+ "Visszaállítás alaphelyzetbe"
+ "Az alapértelmezett APN-beállítások visszaállítása befejeződött."
+ "Névtelen"
+ "Hozzáférési pontok nevei"
+ "APN-ek"
+ "Új APN"
+ "A hozzáférési pont nevének beállításai nem érhetők el ennél a felhasználónál"
+ "Átmásolja a vágólapra?"
+ "Másolás"
+ "fogadás a következőn: %s"
+ "Általános"
+ "Speciális"
+ "Általános beállítások"
+ "Speciális beállítások"
+ "„%s” SIM"
+ "Külön SMS küldése valamennyi címzettnek. Csak Ön kap választ"
+ "Egyetlen MMS küldése valamennyi címzettnek"
+ "Ismeretlen szám"
+ "Új üzenet"
+ "Új üzenet"
+ "SIM kártya kiválasztása"
+ "A(z) %1$s SIM kártya kiválasztva (SIM-választó)"
+ "Tárgy szerkesztése"
+ "SIM kártya kiválasztása vagy a tárgy szerkesztése"
+ "Hangfelvétel készítéséhez tartsa nyomva"
+ "Új beszélgetés indítása"
+ "Messaging"
+ "Messaging-lista"
+ "Messaging"
+ "Új üzenet"
+ "Beszélgetéslista"
+ "Beszélgetések betöltése"
+ "Üzenetek betöltése"
+ "További beszélgetések megtekintése"
+ "További üzenetek megtekintése"
+ "Beszélgetés törölve"
+ "Beszélgetés törölve. Másik Messaging-beszélgetés megjelenítéséhez érintse meg."
+ "Letiltva"
+ "Letiltás visszavonva"
+ "Kevés a tárhely. Lehet, hogy bizonyos adatok elvesztek."
+ "Mellékletek kiválasztása"
+ "Kiválasztás megerősítése"
+ "%d kiválasztva"
+ "Távolítson el legalább egy mellékletet, majd próbálja újra."
+ "Megpróbálhatja elküldeni az üzenetet, de előfordulhat, hogy az csak akkor lesz kézbesíthető, ha legalább egy mellékletet eltávolít."
+ "Üzenetenként csak egy videót lehet küldeni. Távolítsa el a többi videót, és próbálja újra."
+ "A Messaging nem tudta betölteni a mellékletet."
+ "Küldés mindenképpen"
+ "Nem sikerült elindítani a beszélgetést"
+ "%1$s (%2$s)"
+ "%s kiválasztva"
+
diff --git a/res/values-hy-rAM/arrays.xml b/res/values-hy-rAM/arrays.xml
new file mode 100644
index 0000000..d520d07
--- /dev/null
+++ b/res/values-hy-rAM/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "անվերնագիր"
+ "անվերնագիր"
+
+
+ "Այո"
+ "Ոչ"
+ "Լավ"
+ "Հե-հե"
+ "Շնորհակալություն"
+ "Համաձայն եմ"
+ "Գերազանց է"
+ "Ճանապարհին եմ"
+ "Լավ, կմիանամ ձեզ ավելի ուշ"
+ ":)"
+ ":("
+
+
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..4d01fef
--- /dev/null
+++ b/res/values-hy-rAM/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Հաղորդակցում"
+ "Հաղորդակցում"
+ "Ընտրեք խոսակցությունը"
+ "Կարգավորումներ"
+ "Ուղարկել հաղորդագրություն"
+ "Ավելացնել կցորդ"
+ "Օգնություն"
+ "Բարի գալուստ"
+ "Բաց թողնել"
+ "Հաջորդը >"
+ "Հաջորդը"
+ "Ելք"
+ "Կարգավորումներ >"
+ "Կարգավորումներ"
+ "Հաղորդակցում հավելվածին հարկավոր է թույլտվություն SMS-ներին, հեռախոսին ու կոնտակտներին:"
+ "Կարող եք փոխել թույլտվությունները՝ անցնելով Կարգավորումներ > Հավելվածներ > Հաղորդակցում > Թույլտվություններ:"
+ "Կարող եք փոխել թույլտվությունները՝ անցնելով Կարգավորումներ, Հավելվածներ, Հաղորդակցում, Թույլտվություններ:"
+ "Հաճախակի օգտագործվող կոնտակտներ"
+ "Բոլոր կոնտակտները"
+ "Ուղարկել %s համարին"
+ "Լուսանկարել կամ տեսագրել"
+ "Ընտրեք պատկերներ այս սարքից"
+ "Ձայնագրել ձայնանյութ"
+ "Ընտրել լուսանկար"
+ "Մեդիա ֆայլն ընտրված է:"
+ "Մեդիա ֆայլն ապընտրված է:"
+ "%d ընտրված"
+ "պատկեր %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "պատկեր"
+ "Ձայնագրել ձայնանյութ"
+ "Տարածել"
+ "Հենց հիմա"
+ "Այժմ"
+
+ %d րոպե
+ %d րոպե
+
+
+ %d ժամ
+ %d ժամ
+
+
+ %d օր
+ %d օր
+
+
+ %d շաբաթ
+ %d շաբաթ
+
+
+ %d ամիս
+ %d ամիս
+
+
+ %d տարի
+ %d տարի
+
+ "Class 0 հաղորդագրություն"
+ "Պահել"
+ "Սարքի վրա բավարար ազատ տարածք չկա: Հաղորդակցում հավելվածը ինքնաշխատորեն կջնջի հին հաղորդագրությունները, որպեսզի տեղ ազատի:"
+ "Պահոցային տարածքը սպառվում է"
+ "Հաղորդակցումը չի կարող ուղարկել կամ ստանալ հաղորդագրություններ, քանի դեռ սարքում բավարար տարածք չկա:"
+ "SMS պահոցի ծավալը փոքր է: Հնարավոր է՝ հաղորդագրություններ ջնջելու կարիք լինի:"
+ "Հաստատեք ձեր հեռախոսահամարը"
+ "Սա մեկանգամյա քայլ է, որի շնորհիվ Հաղորդակցումը անսխալ կուղարկի ձեր խմբային հաղորդագրությունները:"
+ "Հեռախոսահամար"
+ "Ջնջել մեդիաֆայլեր պարունակող բոլոր հաղորդագրությունները"
+ "Ջնջել %s-ից հին հաղորդագրությունները"
+ "Ավտոմատ ջնջել %s-ից հին հաղորդագրությունները"
+ "Անտեսել"
+ "Ջնջե՞լ մեդիա պարունակող բոլոր հաղորդագրությունները:"
+ "Ջնջե՞լ %s-ից հին հաղորդագրությունները:"
+ "Ջնջե՞լ %s-ից հին հաղորդագրությունները և միացնել ավտոմատ հեռացումը:"
+ "%s-ը ասել է"
+ "Դուք ասել եք"
+ "Հաղորդագրություն %s-ից"
+ "Դուք հաղորդագրություն եք ուղարկել"
+ "Ուղարկվում է…"
+ "Չի ուղարկվել: Հպեք՝ կրկին փորձելու համար:"
+ "Չի ուղարկվել: Փորձում է կրկին…"
+ "Կրկին ուղարկել թե ջնջել"
+ "Խնդրում ենք հեռախոսազանգ կատարել արտակարգ իրավիճակների ծառայություններին: Ձեր տեքստային հաղորդագրությունն այս պահին չի կարող առաքվել:"
+ "Ձախողվեց"
+ "Նոր MMS հաղորդագրություն՝ ներբեռնելու հաար"
+ "Նոր MMS հաղորդագրություն"
+ "Չհաջողվեց ներբեռնել"
+ "Հպեք՝ նորից փորձելու համար"
+ "Հպեք՝ ներբեռնելու համար"
+ "Ներբեռնել թե ջնջել"
+ "Ներբեռնում…"
+ "Հաղորդագրության ժամկետը սպառվել է կամ հասանելի չէ"
+ "չափը՝ %1$s , պիտանիությունը՝ %2$s"
+ "Հնարավոր չէ ուղարկել: Ստացողը վավեր չէ:"
+ "Ծառայությունն ակտիվացված չէ ցանցում"
+ "Հնարավոր չէ ուղարկել ցանցային խնդրի պատճառով"
+ "Հաղորդագրության ժամկետը սպառվել է կամ հասանելի չէ"
+ "(Անվերնագիր)"
+ "Անհայտ ուղարկող"
+ "Առաքված է"
+ "Հնարավոր չէ ներբեռնել %1$s հաղորդագրությունը %2$s-ից:"
+ "Չստացվեց ավարտել տվյալների շտեմարանի աշխատանքը՝ փոքր հիշողության պատճառով"
+ "Հաղորդագրությունը չի ուղարկվել"
+ "Հաղորդակցման որոշ հաղորդագրություններ չեն ուղարկվել"
+
+ %d հաղորդագրություն %d խոսակցությունում
+ %d հաղորդագրություն %d խոսակցությունում
+
+ "Հաղորդագրությունը չի ներբեռնվել"
+ "Որոշ հաղորդագրություններ չեն ներբեռնվել Հաղորդակցման մեջ"
+
+ %d հաղորդագրություն %d խոսակցությունում
+ %d հաղորդագրություն %d խոսակցությունում
+
+ "Հաղորդագրությունը %1$s համարին չի ուղարկվել"
+ "Խնդրում ենք հեռախոսազանգ կատարել արտակարգ իրավիճակների ծառայություններին: Ձեր տեքստային հաղորդագրությունն այս պահին չի կարող առաքվել %1$s համարին:"
+
+ %d նոր հաղորդագրություն
+ %d նոր հաղորդագրություն
+
+ "Սկսել"
+ "Խցիկն անհասանելի է"
+ "Խցիկն անհասանելի է"
+ "Տեսանյութը հասանելի չէ"
+ "Հնարավոր չէ պահել մեդիա ֆայլը"
+ "Չհաջողվեց լուսանկարել"
+ "Հետ"
+ "Արխիվացված"
+ "Ջնջել"
+ "Արխիվ"
+ "Ապարխիվացնել"
+ "Անջատել ծանուցումները"
+ "Միացնել ծանուցումները"
+ "Ավելացնել կոնտակտ"
+ "Ներբեռնել"
+ "Ուղարկել"
+ "Ջնջել"
+ "Ջնջե՞լ այս հաղորդագրությունը"
+ "Այս գործողությունը չի կարող հետարկվել:"
+ "Ջնջել"
+
+ Ջնջե՞լ այս խոսակցությունները:
+ Ջնջե՞լ այս խոսակցությունները:
+
+ "Ջնջել"
+ "Չեղարկել"
+ "Ստացող`"
+ "Ընտրել մի քանի պատկեր"
+ "Հաստատել ընտրությունը"
+ "+%d"
+ "Հնարավոր չէ ձայնագրել: Կրկին փորձեք:"
+ "Հնարավոր չէ նվագարկել աուդիո ֆայլը: Կրկին փորձեք:"
+ "Հնարավոր չէր պահել աուդիո ֆայլը: Կրկին փորձեք:"
+ "Հպել և պահել"
+ ", "
+ " "
+ ": "
+ " "
+ "Նկար"
+ "Ձայնահոլովակ"
+ "Տեսանյութ"
+ "Կոնտակտային քարտ"
+ "Ներբեռնել"
+ "Պատասխանել SMS-ով"
+ "Պատասխանել MMS-ով"
+ "Պատասխանել"
+
+ %d մասնակից
+ %d մասնակից
+
+ "Ես"
+ "Կոնտակտն արգելափակված և արխիվացված է"
+ "Կոնտակտն արգելաբացվեց և ապաարխիվացվեց"
+ "Արխիվացվեց %d խոսակցություն"
+ "Ապաարխիվացվեց %d խոսակցություն"
+ "Ծանուցումներն անջատվեցին"
+ "Ծանուցումները միացվեցին"
+ "Սահմանված է: Հպեք Ուղարկել կրկին:"
+ "Հաղորդակցումը դարձավ SMS-ների կանխադրված հավելված:"
+
+ Հեռացնել կցորդները
+ Հեռացնել կցորդները
+
+ "Կցված ձայնային ֆայլ"
+ "Նվագարկել աուդիո կցորդը"
+ "Դադարեցնել"
+ "Հաղորդագրություն %s-ից՝ %s:"
+ "Չառաքված հաղորդագրություն %s-ից՝ %s: Ժամանակ՝ %s:"
+ "Հաղորդագրություն %s-ից՝ %s: Ժամանակ՝ %s:"
+ "%s կոնտակտին չուղարկված հաղորդագրություն՝ %s: Ժամանակ՝ %s:"
+ "Հաղորդագրության ուղարկում %s կոնտակտին՝ %s: Ժամանակ՝ %s:"
+ "%s կոնտակտին չառաքված հաղորդագրություն՝ %s: Ժամանակ՝ %s:"
+ "%s կոնտակտին հասցեագրված հաղորդագրություն՝ %s: Ժամանակ՝ %s:"
+ "Չառաքված հաղորդագրություն %s-ից՝ %s: Ժամանակ՝ %s: %s:"
+ "Հաղորդագրություն %s-ից՝ %s: Ժամանակ՝ %s: %s:"
+ "%s խմբին չուղարկված հաղորդագրություն՝ %s: Ժամանակ՝ %s:"
+ "Հաղորդագրության ուղարկում %s խմբին՝ %s: Ժամանակ՝ %s:"
+ "%s խմբին չառաքված հաղորդագրություն՝ %s: Ժամանակ՝ %s:"
+ "%s խմբին հասցեագրված հաղորդագրություն՝ %s: Ժամանակ՝ %s:"
+ "Հաղորդագրությունը չի առաքվել: Հպեք՝ նորից փորձելու համար:"
+ "Զրույց %s-ի հետ"
+ "Ջնջել վերնագիրը"
+ "Տեսագրել"
+ "Նկարահանել ստատիկ պատկեր"
+ "Լուսանկարել"
+ "Սկսել տեսաձայնագրումը"
+ "Անցնել լիաէկրան ֆոտոխցիկի"
+ "Փոխարկել դիմացի և հետևի տեսախցիկները"
+ "Կանգնեցնել ձայնագրումը և կցել տեսանյութը"
+ "Դադարեցնել տեսանկարահանումը"
+ "Հաղորդակցման լուսանկարներ"
+
+ «%s» ալբոմում պահվել է %d լուսանկար
+ «%s» ալբոմում պահվել է %d լուսանկար
+
+
+ «%s» ալբոմում պահվել է %d տեսանյութ
+ «%s» ալբոմում պահվել է %d տեսանյութ
+
+
+ «%s» ալբոմում պահվել է %d կցորդ
+ «%s» ալբոմում պահվել է %d կցորդ
+
+
+ «Ներբեռնումներ» պանակում պահվել է %d կցորդ
+ «Ներբեռնումներ» պանակում պահվել է %d կցորդ
+
+
+ %d կցորդ պահվեց
+ %d կցորդ պահվեց
+
+
+ Չհաջողվեց պահել %d կցորդ
+ Չհաջողվեց պահել %d կցորդ
+
+ "MMS կցորդը պահվեց"
+ "Կարգավորումներ"
+ "Արխիվացված"
+ "Փակել"
+ "MMS"
+ "Հավելյալ"
+ "Կարգաբերում"
+ "Ծանուցումներ"
+ "Ձայն"
+ "Լուռ"
+ "Թրթռոց"
+ "Արգելափակված է"
+ "SMS-ի առաքման հաշվետվություններ"
+ "Առաքման ծանուցում հայցել յուրաքանչյուր ուղարկվող հաղորդագրության համար"
+ "Ինքնաառբերում"
+ "Ավտոմատ առբերել MMS հաղորդագրությունները"
+ "Ավտոմատ առբերում ռոումինգում"
+ "Ինքնաշխատորեն առբերել MMS-ը ռոումինգում"
+ "Խմբային հաղորդագրություններ"
+ "Օգտագործել MMS՝ մեկ հաղորդագրությունը մի քանի ստացողների ուղարկելու համար"
+ "SMS-ների կանխադրված հավելված"
+ "SMS-ների կանխադրված հավելված"
+
+
+ "Ձեր հեռախոսահամարը"
+ "Անհայտ է"
+ "Ելից հաղորդագրությունների ձայներ"
+ "Տեղափոխել SMS հաղորդագրությունները"
+ "Տեղափոխել ստացված SMS հաղորդագրությունների չմշակված տվյալները արտաքին հիշողության մեջ"
+ "Տեղափոխել MMS հաղորդագրությունները"
+ "Տեղափոխել ստացված MMS հաղորդագրությունների չմշակված տվյալները արտաքին հիշողության մեջ"
+ "Ծանուցումներ անլար կապի միջոցով"
+ "Հաղորդագրության ընտրանքներ"
+ "Պատճենել տեքստը"
+ "Տեսնել մանրամասները"
+ "Ջնջել"
+ "Առաջ"
+ "Հաղորդագրության մանրամասները"
+ "Տեսակ՝ "
+ "Տեքստային հաղորդագրություն"
+ "Մուլտիմեդիա հաղորդագրություն"
+ "Ումից` "
+ "Ում` "
+ "Ուղարկվել է՝ "
+ "Ստացվել է՝ "
+ "Վերնագիր՝ "
+ "Չափ՝ "
+ "Առաջնահերթություն՝ "
+ "SIM՝ "
+ "Բարձր"
+ "Սովորական"
+ "Ցածր"
+ "SIM %s"
+ "Թաքնված ուղարկողի հասցեն"
+ "Կցորդները բեռնելիս հնարավոր չէ ուղարկել հաղորդագրությունը:"
+ "Հնարավոր չէ բեռնել կցորդը: Փորձեք կրկին:"
+ "Ցանցը պատրաստ չէ: Նորից փորձեք:"
+ "Ջնջել տեքստը"
+ "Փոխարկել թվեր և տեքստ մուտքագրելու ռեժիմների միջև"
+ "Ավելացնել այլ մասնակիցների"
+ "Հաստատեք մասնակիցներին"
+ "Սկսել նոր խոսակցություն"
+ "Ընտրել այս նյութը"
+ "Նվագարկել տեսանյութը"
+ "Մարդիկ և ընտրանքներ"
+ "Կարգաբերել"
+ "Մարդիկ և ընտրանքներ"
+ "Ընդհանուր"
+ "Այս խոսակցության մասնակիցները"
+ "Զանգահարել"
+ "Ուղարկել հաղորդագրություն"
+ "Ուղարկել հաղորդագրություն<br/><small>%s-ից</small>"
+
+ Ուղարկել լուսանկարները
+ Ուղարկել լուսանկարները
+
+
+ Ուղարկել ձայնագրությունները
+ Ուղարկել ձայնագրությունները
+
+
+ Ուղարկել տեսանյութերը
+ Ուղարկել տեսանյութերը
+
+
+ Ուղարկել կոնտակտի քարտերը
+ Ուղարկել կոնտակտի քարտերը
+
+
+ Ուղարկել կցորդները
+ Ուղարկել կցորդները
+
+
+ %d կցորդ պատրաստ է ուղարկելու համար
+ %d կցորդ պատրաստ է ուղարկելու համար
+
+ "Ուղարկել կարծիք"
+ "Դիտել Google Play Store-ում"
+ "Տեղեկություններ տարբերակի մասին"
+ "Տարբերակ %1$s"
+ "Բաց աղբյուրով ծրագրերի լիցենզիաներ"
+ "Ծանուցումներ"
+ "Կցորդի սահմանաչափը լրացել է"
+ "Չհաջողվեց բեռնել կցորդը:"
+ "Ավելացնե՞լ կոնտակտներում"
+ "Ավելացնել կոնտակտ"
+ "Թեմա"
+ "Թեմա՝ "
+ "%s%s"
+ "Կոնտակտի քարտը բեռնվում է"
+ "Հնարավոր չէ բեռնել կոնտակտի քարտը"
+ "Դիտել կոնտակտի քարտը"
+
+ %d կոնտակտ
+ %d կոնտակտ
+
+ "Կոնտակտների քարտեր"
+ "Ծննդյան օր"
+ "Գրառումներ"
+ "Փոխանցել հաղորդագրությունը"
+ "Պատասխանել"
+ "+1"
+ "+%d"
+ "SMS-ն անջատված է"
+ "Հաղորդագրություններ ուղարկելու համար դարձրեք Հաղորդակցումը SMS-ների կանխադրված հավելված"
+ "Դարձրեք Հաղորդակցումը SMS-ների կանխադրված հավելված"
+ "Փոխել"
+ "Հաղորդագրություններ ստանալու համար դարձրեք Հաղորդակցումը SMS-ների կանխադրված հավելված"
+ "Դուք չեք նշել նախընտրելի SIM քարտը՝ SMS հաղորդագրություններն ուղարկելու համար"
+ "Այս հավելվածը սարքի սեփականատիրոջ կողմից թույլատրված չէ:"
+ "Լավ"
+ "Չափից շատ մասնակիցներ կան զրույցին"
+
+ Անվավեր կոնտակտներ
+ Անվավեր կոնտակտներ
+
+ "Չհաջողվեց բեռնել տեսախցիկի պատկերը"
+ "Դուք՝ "
+ "%s՝ "
+ "Սևագիր"
+ "Հենց նոր զրույց սկսեք, այն կտեսնեք այս ցուցակում"
+ "Արխիվացված խոսակցությունները հայտնվում են այստեղ"
+ "Խոսակցությունները բեռնվում են…"
+ "Նկար"
+ "Ձայնահոլովակ"
+ "Տեսանյութ"
+ "Կոնտակտային քարտ"
+ "MMS"
+ "Հետարկել"
+ "Կրկնել"
+ "Մուտքագրեք կոնտակտի անունը կամ հեռախոսահամարը՝ նոր հաղորդագրություն սկսելու համար"
+ "Արգելափակել"
+ "Արգելափակել %s-ին"
+ "Արգելաբացել %s-ին"
+ "Արգելափակե՞լ %s-ը:"
+ "Դուք կշարունակեք ստանալ հաղորդագրություններ այս հեռախոսահամարից, բայց չեք ծանուցվի դրանց մասին: Այս խոսակցությունը կարխիվացվի:"
+ "Արգելափակված կոնտակտներ"
+ "ԱՐԳԵԼԱԲԱՑԵԼ"
+ "Արգելափակված կոնտակտներ"
+ "Ընտրեք պատկեր՝ փաստաթղթերի գրադարանից"
+ "Հաղորդագրությունն ուղարկվում է"
+ "Հաղորդագրությունն ուղարկվել է"
+ "Բջջային տվյալների կապն անջատված է: Ստուգեք ձեր կարգավորումները:"
+ "Հնարավոր չէ ուղարկել հաղորդագրություններ Թռիչքի ռեժիմում"
+ "Հաղորդագրությունը չհաջողվեց ուղարկել"
+ "Հաղորդագրությունը բեռնվել է"
+ "Բջջային տվյալների կապն անջատված է: Ստուգեք ձեր կարգավորումները:"
+ "Հնարավոր չէ ներբեռնել հաղորդագրությունները Ինքնաթիռի ռեժիմում"
+ "Հաղորդագրությունը չներբեռնվեց"
+ "Զրո"
+ "Մեկ"
+ "Երկու"
+ "Երեք"
+ "Չորս"
+ "Հինգ"
+ "Վեց"
+ "Յոթ"
+ "Ութ"
+ "Ինը"
+ "Հնարավոր չէ ուղարկել հաղորդագրությունը %1$s-ի միջոցով: Սխալի կոդ՝ %2$d"
+ "Հնարավոր չէ ուղարկել հաղորդագրությունը անհայտ օպերատորի միջոցով: Սխալի կոդ՝ %1$d"
+ "Փխնց՝ %s"
+ "Հաղորդագրությունը չի ուղարկվել. Ծառայությունն ակտիվացված չէ ցանցում"
+ "Հաղորդագրությունը չի ուղարկվել. ստացողի հասցեն սխալ է"
+ "Հաղորդագրությունը չի ուղարկվել. անվավեր հաղորդագրություն"
+ "Հաղորդագրությունը չի ուղարկվել. չաջակցվող բովանդակություն"
+ "Հաղորդագրությունը չի ուղարկվել. չաջակցվող հաղորդագրություն"
+ "Հաղորդագրությունը չուղարկվեց: Այն չափազանց մեծ է"
+ "Նոր հաղորդագրություն"
+ "Դիտել"
+ "Պատկեր"
+ "Հնարավոր չէր գտնել համապատասխան հավելված"
+ "Հեռացնել ստացողին"
+ "Նոր հաղորդագրություն"
+ "Չեղարկել"
+ "Խմբագրել մուտքի կետը"
+ "Կարգավորված չէ"
+ "Անուն"
+ "APN"
+ "MMSC"
+ "MMS պրոքսի"
+ "MMS միացք"
+ "MCC"
+ "MNC"
+ "APN-ի տեսակը"
+ "Ջնջել APN-ը"
+ "Նոր APN"
+ "Պահել"
+ "Հրաժարվել"
+ "Անվանման դաշտը պետք է լրացված լինի:"
+ "APN-ը չի կարող դատարկ լինել:"
+ "MCC դաշտը պետք է 3 նիշ ունենա:"
+ "MNC դաշտը պետք է լինի առնվազն 2 կամ 3 թվանշան:"
+ "Լռելյայն APN կարգավորումների վերականգնում:"
+ "Վերականգնել կանխադրվածը"
+ "Սկզբնական APN կարգավորումների վերակարգավորումն ավարտված է:"
+ "Անվերնագիր"
+ "Մատչման կետերի անունները"
+ "APN-ներ"
+ "Նոր APN"
+ "Մատչման կետի անվան կարգավորումները հասանելի չեն այս օգտվողին"
+ "Պատճենել սեղմատախտակին"
+ "Պատճենել"
+ "%s-ին"
+ "Ընդհանուր"
+ "Հավելյալ"
+ "Ընդհանուր կարգավորումներ"
+ "Ընդլայնված կարգավորումներ"
+ "«%s» SIM"
+ "Ուղարկել անհատական SMS հաղորդագրություններ բոլոր ստացողներին: Միայն դուք կստանաք պատասխաններ"
+ "Բոլոր ստացողներին ուղարկել առանձին MMS"
+ "Անհայտ համար"
+ "Նոր հաղորդագրություն"
+ "Նոր հաղորդագրություն:"
+ "SIM քարտի ընտրում"
+ "Ընտրված է %1$s-ը, SIM քարտի ընտրում"
+ "Խմբագրել վերնագիրը"
+ "Ընտրել SIM քարտ կամ խմբագրել վերնագիրը"
+ "Հպեք և պահեք՝ ձայնագրելու համար"
+ "Սկսել նոր խոսակցություն"
+ "Հաղորդակցում"
+ "Հաղորդակցման ցանկ"
+ "Հաղորդակցում"
+ "Նոր հաղորդագրություն"
+ "Խոսակցությունների ցանկ"
+ "Խոսակցությունները բեռնվում են"
+ "Հաղորդագրությունների բեռնում"
+ "Տեսնել այլ զրույցներ"
+ "Դիտել ավելի շատ հաղորդագրություններ"
+ "Զրույցը ջնջված է"
+ "Խոսակցությունը ջնջվել է: Հպեք՝ Հաղորդակցման մեջ այլ խոսակցություն դիտելու համար"
+ "Արգելափակված է"
+ "Ապաարգելափակված է"
+ "Ազատ տարածքը բավարար չէ: Որոշ տվյալներ չեն պահվի:"
+ "Ընտրել կցորդներ"
+ "Հաստատել ընտրությունը"
+ "%d ընտրված"
+ "Հեռացրեք մեկ կամ ավելի կցորդ, ապա նորից փորձեք:"
+ "Կարող եք փորձել ուղարկել հաղորդագրությունը, սակայն այն չի կարող առաքվել, եթե չհեռացնեք մեկ կամ ավելի կցորդ:"
+ "Ամեն մի հաղորդագրության համար կարող եք միայն մեկ տեսանյութ ուղարկել: Հեռացրեք ավելորդ տեսանյութերը և նորից փորձեք:"
+ "Կցորդը չբեռնվեց:"
+ "Ուղարկել ամեն դեպքում"
+ "Չհաջողվեց սկսել խոսակցությունը"
+ "%1$s (%2$s)"
+ "Ընտրված է %s քարտը"
+
diff --git a/res/values-in/arrays.xml b/res/values-in/arrays.xml
new file mode 100644
index 0000000..ce2892e
--- /dev/null
+++ b/res/values-in/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "tanpa subjek"
+ "nosubject"
+
+
+ "Ya"
+ "Tidak"
+ "Oke"
+ "Hehe"
+ "Terima kasih"
+ "Saya setuju"
+ "Bagus"
+ "Dalam perjalanan"
+ "Oke, saya akan menghubungi Anda nanti"
+ ":)"
+ ":("
+
+
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
new file mode 100644
index 0000000..3529301
--- /dev/null
+++ b/res/values-in/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Perpesanan"
+ "Perpesanan"
+ "Pilih percakapan"
+ "Setelan"
+ "Kirim Pesan"
+ "Tambahkan lampiran"
+ "Bantuan"
+ "Selamat Datang"
+ "Lewati"
+ "Berikutnya >"
+ "Berikutnya"
+ "Keluar"
+ "Setelan >"
+ "Setelan"
+ "Perpesanan perlu izin ke SMS, Telepon, dan Kontak"
+ "Anda dapat mengubah izin di Setelan > Aplikasi > Perpesanan > Izin."
+ "Anda dapat mengubah izin di Setelan, Aplikasi, Messaging, Permissions."
+ "Sering"
+ "Semua kontak"
+ "Kirim ke %s"
+ "Jepret gambar atau rekam video"
+ "Pilih gambar dari perangkat ini"
+ "Rekam audio"
+ "Pilih foto"
+ "Media ini dipilih."
+ "Media ini batal dipilih."
+ "%d dipilih"
+ "gambar %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "gambar"
+ "Rekam audio"
+ "Bagikan"
+ "Baru saja"
+ "Sekarang"
+
+ %d mnt
+ %d mnt
+
+
+ %d jam
+ %d jam
+
+
+ %d hari
+ %d hari
+
+
+ %d minggu
+ seminggu
+
+
+ %d bulan
+ sebulan
+
+
+ %d tahun
+ setahun
+
+ "Pesan kelas 0"
+ "Simpan"
+ "Perangkat hampir kehabisan ruang. Perpesanan akan secara otomatis menghapus pesan lama untuk mengosongkan ruang."
+ "Ruang penyimpanan hampir habis"
+ "Perpesanan tidak dapat mengirim atau menerima pesan hingga lebih banyak ruang tersedia di perangkat Anda."
+ "Penyimpanan SMS tinggal sedikit. Anda perlu menghapus pesan."
+ "Konfirmasi nomor telepon Anda"
+ "Langkah satu kali ini akan memastikan bahwa Perpesanan mengirim pesan grup dengan tepat."
+ "Nomor telepon"
+ "Hapus semua pesan dengan media"
+ "Hapus pesan yang sudah lebih dari %s"
+ "Hapus otomatis pesan yang sudah lebih dari %s"
+ "Abaikan"
+ "Hapus semua pesan dengan media?"
+ "Hapus pesan yang sudah lebih dari %s?"
+ "Hapus pesan yang sudah lebih dari %s dan aktifkan fitur hapus otomatis?"
+ "%s mengatakan"
+ "Anda mengatakan"
+ "Pesan dari %s"
+ "Anda telah mengirim pesan"
+ "Mengirim…"
+ "Tidak dikirim. Sentuh untuk mencoba lagi."
+ "Tidak dikirim. Mencoba lagi..."
+ "Kirim ulang atau hapus"
+ "Lakukan panggilan suara ke layanan darurat. SMS Anda tidak dapat dikirim saat ini."
+ "Gagal"
+ "Pesan MMS baru untuk diunduh"
+ "Pesan MMS baru"
+ "Tidak dapat mengunduh"
+ "Sentuh untuk mencoba lagi"
+ "Sentuh untuk mengunduh"
+ "Unduh atau hapus"
+ "Mengunduh..."
+ "Pesan sudah tidak berlaku atau tidak tersedia"
+ "ukuran: %1$s, waktu berakhir: %2$s"
+ "Tidak dapat mengirim. Penerima tidak valid."
+ "Layanan tidak diaktifkan pada jaringan"
+ "Tidak dapat mengirim karena masalah jaringan"
+ "Pesan sudah tidak berlaku atau tidak tersedia"
+ "(Tanpa subjek)"
+ "Pengirim tidak diketahui"
+ "Telah Diantar"
+ "Tidak dapat mengunduh pesan %1$s dari %2$s."
+ "Tidak dapat menyelesaikan operasi basis data karena memori terlalu kecil"
+ "Pesan tidak dikirim"
+ "Beberapa pesan tidak terkirim di Perpesanan"
+
+ %d pesan dalam %d percakapan
+ %d pesan dalam satu percakapan
+
+ "Pesan tidak diunduh"
+ "Beberapa pesan tidak diunduh di Perpesanan"
+
+ %d pesan dalam %d percakapan
+ %d pesan dalam satu percakapan
+
+ "Pesan ke %1$s tidak terkirim"
+ "Lakukan panggilan suara ke layanan darurat. SMS Anda ke %1$s tidak dapat dikirim saat ini."
+
+ %d pesan baru
+ Pesan baru
+
+ "Mulai"
+ "Tidak ada kamera"
+ "Tidak ada kamera"
+ "Tidak ada rekaman video"
+ "Tidak dapat menyimpan media"
+ "Tidak dapat memfoto"
+ "Kembali"
+ "Diarsipkan"
+ "Hapus"
+ "Arsipkan"
+ "Batalkan pengarsipan"
+ "Nonaktifkan pemberitahuan"
+ "Aktifkan pemberitahuan"
+ "Tambahkan kontak"
+ "Unduh"
+ "Kirim"
+ "Hapus"
+ "Hapus pesan ini?"
+ "Tindakan ini tidak dapat diurungkan."
+ "Hapus"
+
+ Hapus percakapan ini?
+ Hapus percakapan ini?
+
+ "Hapus"
+ "Batal"
+ "Kepada"
+ "Pilih beberapa gambar"
+ "Konfirmasi pilihan"
+ "+%d"
+ "Tidak dapat merekam audio. Coba lagi."
+ "Tidak dapat memutar audio. Coba lagi."
+ "Tidak dapat menyimpan audio. Coba lagi."
+ "Sentuh & tahan"
+ ", "
+ " "
+ ": "
+ " "
+ "Gambar"
+ "Klip audio"
+ "Video"
+ "Kartu kontak"
+ "Unduh"
+ "Balas via SMS"
+ "Balas via MMS"
+ "Balas"
+
+ %d peserta
+ %d peserta
+
+ "Saya"
+ "Kontak diblokir & diarsipkan"
+ "Kontak tidak diblokir lagi & batal diarsipkan"
+ "%d diarsipkan"
+ "%d batal diarsipkan"
+ "Notifikasi dinonaktifkan"
+ "Notifikasi diaktifkan"
+ "Semua siap. Sentuh Kirim lagi."
+ "Perpesanan berhasil disetel sebagai aplikasi SMS default."
+
+ Buang lampiran
+ Buang lampiran
+
+ "Lampiran audio"
+ "Putar lampiran audio"
+ "Jeda"
+ "Pesan dari %s: %s."
+ "Pesan gagal dari %s: %s. Waktu: %s."
+ "Pesan dari %s: %s. Waktu: %s."
+ "Pesan yang tidak terkirim ke %s: %s. Waktu: %s."
+ "Mengirim pesan ke %s: %s. Waktu: %s."
+ "Pesan gagal ke %s: %s. Waktu: %s."
+ "Pesan ke %s: %s. Waktu: %s."
+ "Pesan gagal dari %s: %s. Waktu: %s. %s."
+ "Pesan dari %s: %s. Waktu: %s. %s."
+ "Pesan yang tidak terkirim ke %s: %s. Waktu: %s."
+ "Mengirim pesan ke %s: %s. Waktu: %s."
+ "Pesan gagal ke %s: %s. Waktu: %s."
+ "Pesan ke %s: %s. Waktu: %s."
+ "Pesan gagal. Sentuh untuk mencoba lagi."
+ "Percakapan dengan %s"
+ "Hapus subjek"
+ "Ambil video"
+ "Ambil gambar diam"
+ "Ambil gambar"
+ "Mulai merekam video"
+ "Beralih ke kamera layar penuh"
+ "Beralih antara kamera depan dan belakang"
+ "Hentikan perekaman dan lampirkan video"
+ "Berhenti merekam video"
+ "Foto Perpesanan"
+
+ %d foto disimpan ke album \"%s\"
+ %d foto disimpan ke album \"%s\"
+
+
+ %d video disimpan ke album \"%s\"
+ %d video disimpan ke album \"%s\"
+
+
+ %d lampiran disimpan ke album \"%s\"
+ %d lampiran disimpan ke album \"%s\"
+
+
+ %d lampiran disimpan ke \"Unduhan\"
+ %d lampiran disimpan ke \"Unduhan\"
+
+
+ %d lampiran disimpan
+ %d lampiran disimpan
+
+
+ Tidak dapat menyimpan %d lampiran
+ Tidak dapat menyimpan %d lampiran
+
+ "Lampiran MMS yang disimpan"
+ "Setelan"
+ "Diarsipkan"
+ "Tutup"
+ "MMS"
+ "Lanjutan"
+ "Debug"
+ "Notifikasi"
+ "Suara"
+ "Senyap"
+ "Getar"
+ "Diblokir"
+ "Laporan pengiriman SMS"
+ "Minta laporan pengiriman dari setiap SMS yang Anda kirimkan"
+ "Ambil otomatis"
+ "Otomatis ambil pesan MMS"
+ "Ambil otomatis saat roaming"
+ "Otomatis ambil MMS saat roaming"
+ "Perpesanan grup"
+ "Gunakan MMS untuk mengirimkan pesan tunggal saat ada beberapa penerima"
+ "Aplikasi SMS default"
+ "Aplikasi SMS default"
+
+
+ "Nomor telepon Anda"
+ "Tidak dikenal"
+ "Pesan suara keluar"
+ "Buang SMS"
+ "Buang data mentah SMS yang diterima ke dalam file penyimpanan eksternal"
+ "Buang MMS"
+ "Buang data mentah MMS yang diterima ke file penyimpanan eksternal"
+ "Lansiran nirkabel"
+ "Opsi pesan"
+ "Salin teks"
+ "Lihat detail"
+ "Hapus"
+ "Teruskan"
+ "Detail pesan"
+ "Jenis: "
+ "Pesan teks"
+ "Pesan multimedia"
+ "Dari: "
+ "Kepada: "
+ "Dikirim: "
+ "Diterima: "
+ "Subjek: "
+ "Ukuran: "
+ "Prioritas: "
+ "SIM: "
+ "Tinggi"
+ "Normal"
+ "Rendah"
+ "SIM %s"
+ "Alamat pengirim tersembunyi"
+ "Tidak dapat mengirim pesan saat memuat lampiran."
+ "Tidak dapat memuat lampiran. Coba lagi."
+ "Jaringan tidak siap. Coba lagi."
+ "Hapus teks"
+ "Beralih antara memasukkan teks dan angka"
+ "Tambahkan peserta lainnya"
+ "Konfirmasi peserta"
+ "Mulai percakapan baru"
+ "Pilih item ini"
+ "Putar video"
+ "Orang & opsi"
+ "Debug"
+ "Orang & opsi"
+ "Umum"
+ "Orang dalam percakapan ini"
+ "Lakukan panggilan telepon"
+ "Kirim pesan"
+ "Kirim pesan<br/><small>dari %s</small>"
+
+ Kirim foto
+ Kirim foto
+
+
+ Kirim audio
+ Kirim audio
+
+
+ Kirim video
+ Kirim video
+
+
+ Kirim kartu kontak
+ Kirim kartu kontak
+
+
+ Kirim lampiran
+ Kirim lampiran
+
+
+ %d lampiran siap dikirim
+ Satu lampiran siap dikirim
+
+ "Kirim masukan"
+ "Lihat di Google Play Store"
+ "Info versi"
+ "Versi %1$s"
+ "Lisensi sumber terbuka"
+ "Notifikasi"
+ "Batas lampiran tercapai"
+ "Gagal memuat lampiran."
+ "Tambahkan ke Kontak?"
+ "Tambahkan Kontak"
+ "Subjek"
+ "Subjek: "
+ "%s%s"
+ "Memuat kartu kontak"
+ "Tidak dapat memuat kartu kontak"
+ "Lihat kartu kontak"
+
+ %d kontak
+ %d kontak
+
+ "Kartu kontak"
+ "Ulang Tahun"
+ "Catatan"
+ "Teruskan pesan"
+ "Balas"
+ "+1"
+ "+%d"
+ "SMS dinonaktifkan"
+ "Untuk mengirim, setel Perpesanan sebagai aplikasi SMS default"
+ "Setel Perpesanan sebagai aplikasi SMS default"
+ "Ganti"
+ "Untuk menerima pesan, setel Perpesanan sebagai aplikasi SMS default."
+ "Tidak ada SIM yang dipilih untuk mengirim pesan SMS"
+ "Aplikasi ini tidak diizinkan oleh pemilik perangkat."
+ "Oke"
+ "Terlalu banyak peserta dalam percakapan"
+
+ Kontak tidak valid
+ Kontak tidak valid
+
+ "Tidak dapat memuat gambar kamera"
+ "Anda: "
+ "%s: "
+ "Draf"
+ "Setelah memulai percakapan baru, Anda akan melihatnya tercantum di sini"
+ "Arsip percakapan muncul di sini"
+ "Memuat percakapan..."
+ "Gambar"
+ "Klip audio"
+ "Video"
+ "Kartu kontak"
+ "MMS"
+ "Urungkan"
+ "Coba lagi"
+ "Masukkan nama atau nomor telepon yang dapat dihubungi untuk memulai pesan baru"
+ "Blokir"
+ "Blokir %s"
+ "Bebaskan %s"
+ "Blokir %s?"
+ "Anda akan terus menerima pesan dari nomor ini, tetapi tidak akan diberi tahu lagi. Percakapan ini akan diarsipkan."
+ "Kontak yang diblokir"
+ "BEBASKAN"
+ "Kontak yang diblokir"
+ "Pilih gambar dari perpustakaan dokumen"
+ "Mengirim pesan"
+ "Pesan terkirim"
+ "Data seluler dinonaktifkan. Periksa setelan."
+ "Tidak dapat mengirim pesan dalam mode Pesawat"
+ "Pesan tidak dapat dikirim"
+ "Pesan diunduh"
+ "Data seluler dinonaktifkan. Periksa setelan."
+ "Tidak dapat mengunduh pesan dalam mode Pesawat"
+ "Pesan tidak dapat diunduh"
+ "Nol"
+ "Satu"
+ "Dua"
+ "Tiga"
+ "Empat"
+ "Lima"
+ "Enam"
+ "Tujuh"
+ "Delapan"
+ "Sembilan"
+ "Tidak dapat mengirim pesan dengan %1$s, kesalahan %2$d"
+ "Tidak dapat mengirim pesan dengan operator tak dikenal, kesalahan %1$d"
+ "Trs: %s"
+ "Pesan tidak terkirim: layanan tidak diaktifkan di jaringan"
+ "Pesan tidak terkirim: alamat tujuan tidak valid"
+ "Pesan tidak terkirim: pesan tidak valid"
+ "Pesan tidak terkirim: konten tidak didukung"
+ "Pesan tidak terkirim: pesan tidak didukung"
+ "Pesan tidak terkirim: terlalu besar"
+ "Pesan baru"
+ "Lihat"
+ "Gambar"
+ "Aplikasi yang sesuai tidak dapat ditemukan"
+ "Hapus penerima"
+ "Pesan baru"
+ "Batal"
+ "Edit titik akses"
+ "Belum disetel"
+ "Nama"
+ "APN"
+ "MMSC"
+ "Proxy MMS"
+ "Port MMS"
+ "MCC"
+ "MNC"
+ "Jenis APN"
+ "Hapus APN"
+ "APN baru"
+ "Simpan"
+ "Buang"
+ "Bidang Nama wajib diisi."
+ "APN wajib diisi."
+ "Bidang MCC harus terdiri dari 3 digit."
+ "Bidang MNC harus 2 atau 3 digit."
+ "Memulihkan setelan APN default."
+ "Setel ulang ke default"
+ "Penyetelan ulang setelan APN default selesai."
+ "Tanpa judul"
+ "Nama Titik Akses"
+ "APN"
+ "APN baru"
+ "Setelan Nama Titik Akses tidak tersedia untuk pengguna ini"
+ "Salin ke papan klip?"
+ "Salin"
+ "kepada %s"
+ "Umum"
+ "Lanjutan"
+ "Setelan umum"
+ "Setelan lanjutan"
+ "SIM \"%s\""
+ "Kirimkan pesan SMS individual ke semua penerima. Hanya Anda yang akan mendapatkan balasan"
+ "Kirimkan satu MMS ke semua penerima"
+ "Nomor tidak dikenal"
+ "Pesan baru"
+ "Pesan baru."
+ "Pemilih SIM"
+ "%1$s dipilih, pemilih SIM"
+ "Edit subjek"
+ "Pilih SIM atau edit subjek"
+ "Sentuh dan tahan untuk merekam audio"
+ "Mulai percakapan baru"
+ "Perpesanan"
+ "Daftar Perpesanan"
+ "Perpesanan"
+ "Pesan baru"
+ "Daftar percakapan"
+ "Memuat percakapan"
+ "Memuat pesan"
+ "Lihat percakapan lain"
+ "Lihat pesan lainnya"
+ "Percakapan telah dihapus"
+ "Percakapan dihapus. Sentuh untuk menampilkan percakapan Perpesanan yang berbeda"
+ "Diblokir"
+ "Dibebaskan"
+ "Sedikit ruang penyimpanan. Beberapa data mungkin hilang."
+ "Pilih lampiran"
+ "Konfirmasi pilihan"
+ "%d dipilih"
+ "Hapus satu atau beberapa lampiran dan coba lagi."
+ "Anda dapat mencoba mengirim pesan, tetapi pesan tersebut mungkin tidak terkirim, kecuali Anda menghapus satu atau beberapa lampiran."
+ "Anda hanya dapat mengirim satu video per pesan. Hapus video tambahan dan coba lagi."
+ "Perpesanan gagal memuat lampiran."
+ "Tetap kirim"
+ "Tidak dapat memulai percakapan"
+ "%1$s (%2$s)"
+ "%s dipilih"
+
diff --git a/res/values-is-rIS/arrays.xml b/res/values-is-rIS/arrays.xml
new file mode 100644
index 0000000..f8d4803
--- /dev/null
+++ b/res/values-is-rIS/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "ekkert efni"
+ "ekkertefni"
+
+
+ "Já"
+ "Nei"
+ "Í lagi"
+ "Hehe"
+ "Takk"
+ "Ég er sammála"
+ "Flott"
+ "Er á leiðinni"
+ "Ókei, ég fæ að hafa samband síðar"
+ ":)"
+ ":("
+
+
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
new file mode 100644
index 0000000..4a54e14
--- /dev/null
+++ b/res/values-is-rIS/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Skilaboð"
+ "Skilaboð"
+ "Veldu samtal"
+ "Stillingar"
+ "Senda skilaboð"
+ "Bæta viðhengi við"
+ "Hjálp"
+ "Komdu fagnandi"
+ "Sleppa"
+ "Áfram >"
+ "Áfram"
+ "Hætta"
+ "Stillingar >"
+ "Stillingar"
+ "Skilaboð þurfa heimild til að fá aðgang að SMS-skilaboðum, síma og tengiliðum."
+ "Þú getur breytt heimildum undir Stillingar > Forrit > Skilaboð > Heimildir."
+ "Þú getur breytt heimildum undir Stillingar, Forrit, Skilaboð, Heimildir."
+ "Algengir"
+ "Allir tengiliðir"
+ "Senda í %s"
+ "Taka myndir eða myndskeið"
+ "Velja myndir úr þessu tæki"
+ "Taka upp hljóð"
+ "Velja mynd"
+ "Efnið er valið."
+ "Efnið er ekki valið."
+ "%d valin"
+ "mynd %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "mynd"
+ "Taka upp hljóð"
+ "Deila"
+ "Rétt í þessu"
+ "Núna"
+
+ %d mín.
+ %d mín.
+
+
+ %d klukkustund
+ %d klukkustundir
+
+
+ %d dagur
+ %d dagar
+
+
+ %d vika
+ %d vikur
+
+
+ %d mánuður
+ %d mánuðir
+
+
+ %d ár
+ %d ár
+
+ "Einnota skilaboð"
+ "Vista"
+ "Lítið pláss er í tækinu. Skilaboðaforritið mun sjálfkrafa eyða gömlum skilaboðum til að losa um pláss."
+ "Geymslurýmið er senn á þrotum"
+ "Ekki er víst að Skilaboð geti sent eða tekið á móti skilaboðum fyrr en meira pláss er til staðar í tækinu."
+ "SMS-geymsla að fyllast. Þú gætir þurft að eyða skilaboðum."
+ "Staðfestu símanúmerið þitt"
+ "Þetta þarf að gera í eitt skipti til að tryggja að Skilaboð komi hópskilaboðunum þínum til skila á réttan hátt."
+ "Símanúmer"
+ "Eyða öllum skilaboðum með margmiðlunarefni"
+ "Eyða skilaboðum sem eru eldri en %s"
+ "Eyða sjálfkrafa skilaboðum sem eru eldri en %s"
+ "Hunsa"
+ "Eyða öllum skilaboðum með margmiðlunarefni?"
+ "Eyða skilaboðum sem eru eldri en %s?"
+ "Eyða skilaboðum sem eru eldri en %s og kveikja á sjálfvirkri eyðingu?"
+ "%s sagði"
+ "Þú sagðir"
+ "Skilaboð sem %s sendi"
+ "Þú sendir skilaboð"
+ "Sendir…"
+ "Ekki sent. Snertu til að reyna aftur."
+ "Ekki sent. Reynir aftur…"
+ "Endursenda eða eyða"
+ "Hringdu í neyðarþjónustuna. Ekki tókst að senda textaskilaboðin þín á þessari stundu."
+ "Mistókst"
+ "Ný MMS-skilaboð til að sækja"
+ "Ný MMS-skilaboð"
+ "Ekki hægt að sækja"
+ "Snertu til að reyna aftur"
+ "Snertu til að sækja"
+ "Sækja eða eyða"
+ "Sækir…"
+ "Skilaboð útrunnin eða ekki aðgengileg"
+ "stærð: %1$s, útrunnið: %2$s"
+ "Ekki er hægt að senda. Viðtakandinn er ekki gildur."
+ "Símkerfið hefur ekki gert þjónustuna virka"
+ "Sending mistókst vegna símkerfisvandamáls"
+ "Skilaboð útrunnin eða ekki aðgengileg"
+ "(Ekkert efni)"
+ "Óþekktur sendandi"
+ "Sent"
+ "Ekki var hægt að sækja skilaboðin %1$s sem %2$s sendi."
+ "Lítið minni varð til þess að ekki var hægt að ljúka gagnagrunnsaðgerðinni"
+ "Skilaboð ekki send"
+ "Einhver skilaboð voru ekki send í Skilaboðum"
+
+ %d skilaboð í %d samtali
+ %d skilaboð í %d samtölum
+
+ "Skilaboð ekki sótt"
+ "Einhver skilaboð voru ekki sótt í Skilaboð"
+
+ %d skilaboð í %d samtali
+ %d skilaboð í %d samtölum
+
+ "Skilaboð til %1$s voru ekki send"
+ "Hringdu í neyðarþjónustuna. Ekki tókst að senda textaskilaboðin þín í númerið %1$s á þessari stundu."
+
+ %d ný skilaboð
+ %d ný skilaboð
+
+ "Byrja"
+ "Myndavélin er ekki tiltæk"
+ "Myndavélin er ekki tiltæk"
+ "Upptaka myndskeiða er ekki tiltæk"
+ "Ekki er hægt að vista efni"
+ "Ekki er hægt að taka mynd"
+ "Til baka"
+ "Geymsla"
+ "Eyða"
+ "Setja í geymslu"
+ "Taka úr geymslu"
+ "Slökkva á tilkynningum"
+ "Kveikja á tilkynningum"
+ "Bæta tengilið við"
+ "Sækja"
+ "Senda"
+ "Eyða"
+ "Eyða þessum skilaboðum?"
+ "Ekki er hægt að afturkalla þessa aðgerð."
+ "Eyða"
+
+ Eyða þessum samtölum?
+ Eyða þessum samtölum?
+
+ "Eyða"
+ "Hætta við"
+ "Til"
+ "Velja margar myndir"
+ "Staðfesta val"
+ "+%d"
+ "Ekki er hægt að taka upp hljóð. Reyndu aftur."
+ "Ekki er hægt að spila hljóð. Reyndu aftur."
+ "Ekki var hægt að vista hljóð. Reyndu aftur."
+ "Haltu inni"
+ ", "
+ " "
+ ": "
+ " "
+ "Mynd"
+ "Hljóðbútur"
+ "Myndskeið"
+ "Tengiliðaspjald"
+ "Sækja"
+ "Svara með SMS"
+ "Svara með MMS-skilaboðum"
+ "Svara"
+
+ %d þátttakandi
+ %d þátttakendur
+
+ "Ég"
+ "Tengiliður settur á bannlista og í geymslu"
+ "Tengiliður tekinn af bannlista og úr geymslu"
+ "%d sett í geymslu"
+ "%d tekin úr geymslu"
+ "Slökkt á tilkynningum"
+ "Kveikt á tilkynningum"
+ "Allt til reiðu. Snertu Senda aftur."
+ "Skilaboð voru valin sem sjálfgefið SMS-forrit."
+
+ Fleygja viðhengjum
+ Fleygja viðhengjum
+
+ "Hljóðviðhengi"
+ "Spila hljóðviðhengi"
+ "Hlé"
+ "Skilaboð sem %s sendi: %s."
+ "Misheppnuð skilaboð sem %s sendi: %s. Tími: %s."
+ "Skilaboð sem %s sendi: %s. Tími: %s."
+ "Ósend skilaboð til %s: %s. Tími: %s."
+ "Sendir skilaboð til %s: %s. Tími: %s."
+ "Misheppnuð skilaboð til %s: %s. Tími: %s."
+ "Skilaboð til %s: %s. Tími: %s."
+ "Misheppnuð skilaboð sem %s sendi: %s. Tími: %s. %s."
+ "Skilaboð sem %s sendi: %s. Tími: %s. %s."
+ "Ósend skilaboð til %s: %s. Tími: %s."
+ "Sendir skilaboð til %s: %s. Tími: %s."
+ "Misheppnuð skilaboð til %s: %s. Tími: %s."
+ "Skilaboð til %s: %s. Tími: %s."
+ "Misheppnuð skilaboð. Snertu til að reyna aftur."
+ "Samtal við %s"
+ "Eyða efni"
+ "Taka upp myndskeið"
+ "Taka kyrrmynd"
+ "Taka mynd"
+ "Byrja að taka upp myndskeið"
+ "Skipta yfir í myndavél á öllum skjánum"
+ "Skipt á milli fremri og aftari myndavélar"
+ "Stöðva upptöku og hengja myndskeið við"
+ "Stöðva upptöku myndskeiðs"
+ "Skilaboðamyndir"
+
+ %d mynd vistuð í „%s“ möppu
+ %d myndir vistaðar í „%s“ möppu
+
+
+ %d myndskeið vistað í „%s“ möppu
+ %d myndskeið vistuð í „%s“ möppu
+
+
+ %d viðhengi vistað í „%s“ möppu
+ %d viðhengi vistuð í „%s“ möppu
+
+
+ %d viðhengi vistað í „Niðurhal“
+ %d viðhengi vistuð í „Niðurhal“
+
+
+ %d viðhengi vistað
+ %d viðhengi vistuð
+
+
+ Ekki tókst að vista %d viðhengi
+ Ekki tókst að vista %d viðhengi
+
+ "MMS-viðhengi vistað"
+ "Stillingar"
+ "Geymsla"
+ "Loka"
+ "MMS"
+ "Ítarlegt"
+ "Villuleita"
+ "Tilkynningar"
+ "Hljóð"
+ "Hljóðlaust"
+ "Titringur"
+ "Á bannlista"
+ "SMS-skilatilkynningar"
+ "Óska eftir skilatilkynningu fyrir hver send SMS-skilaboð"
+ "Sækja sjálfkrafa"
+ "Sækja MMS-skilaboð sjálfkrafa"
+ "Sækja sjálfkrafa í reiki"
+ "Sækja MMS sjálfkrafa í reiki"
+ "Hópskilaboð"
+ "Nota MMS til að senda ein skilaboð þegar viðtakendur eru margir"
+ "Sjálfgefið SMS-forrit"
+ "Sjálfgefið SMS-forrit"
+
+
+ "Símanúmerið þitt"
+ "Óþekkt"
+ "Hljóð fyrir send skilaboð"
+ "Vista SMS-gögn"
+ "Vista ósniðin SMS-gögn í ytri geymsluskrá"
+ "Vista MMS-gögn"
+ "Vista ósniðin MMS-gögn í ytri geymsluskrá"
+ "Þráðlausar viðvaranir"
+ "Skilaboðavalkostir"
+ "Afrita texta"
+ "Skoða upplýsingar"
+ "Eyða"
+ "Áframsenda"
+ "Skilaboðaupplýsingar"
+ "Gerð: "
+ "Textaskilaboð"
+ "Margmiðlunarskilaboð"
+ "Frá: "
+ "Til: "
+ "Sent: "
+ "Móttekið: "
+ "Efni: "
+ "Stærð: "
+ "Forgangur: "
+ "SIM-kort: "
+ "Hár"
+ "Venjulegur"
+ "Lágur"
+ "SIM-kort %s"
+ "Falið netfang sendanda"
+ "Ekki er hægt að senda skilaboð á meðan verið er að hlaða viðhengi."
+ "Ekki er hægt að hlaða viðhengi. Reyndu aftur."
+ "Netið er ekki tilbúið. Reyndu aftur."
+ "Eyða texta"
+ "Skipta á milli innsláttar texta og talna"
+ "Bæta við fleiri þátttakendum"
+ "Staðfesta þátttakendur"
+ "Byrja nýtt samtal"
+ "Velja þetta atriði"
+ "Spila myndskeið"
+ "Fólk og valkostir"
+ "Villuleita"
+ "Fólk og valkostir"
+ "Almennt"
+ "Fólk í þessu samtali"
+ "Hringja símtal"
+ "Senda skilaboð"
+ "Senda skilaboð<br/><small>úr %s</small>"
+
+ Senda myndir
+ Senda myndir
+
+
+ Senda hljóð
+ Senda hljóð
+
+
+ Senda myndskeið
+ Senda myndskeið
+
+
+ Senda tengiliðaspjöld
+ Senda tengiliðaspjöld
+
+
+ Senda viðhengi
+ Senda viðhengi
+
+
+ %d viðhengi tilbúið til sendingar
+ %d viðhengi tilbúin til sendingar
+
+ "Senda ábendingu"
+ "Skoða í Google Play Store"
+ "Útgáfuupplýsingar"
+ "Útgáfa %1$s"
+ "Leyfi opins kóða"
+ "Tilkynningar"
+ "Hámarki viðhengja náð"
+ "Mistókst að hlaða viðhengið."
+ "Bæta við tengiliði?"
+ "Bæta tengilið við"
+ "Efni"
+ "Efni: "
+ "%s%s"
+ "Hleður tengiliðaspjald"
+ "Ekki var hægt að hlaða tengiliðaspjald"
+ "Skoða tengiliðaspjald"
+
+ %d tengiliður
+ %d tengiliðir
+
+ "Tengiliðaspjöld"
+ "Fæðingardagur"
+ "Athugasemdir"
+ "Áframsenda skilaboð"
+ "Svara"
+ "+1"
+ "+%d"
+ "Slökkt á SMS"
+ "Til að senda skaltu velja Skilaboð sem sjálfgefið SMS-forrit"
+ "Veldu Skilaboð sem sjálfgefið SMS-forrit"
+ "Breyta"
+ "Til að fá skilaboð skaltu velja Skilaboð sem sjálfgefið SMS-forrit"
+ "Ekkert SIM-kort valið fyrir sendingu SMS-skilaboða"
+ "Eigandi tækisins leyfir ekki þetta forrit."
+ "Í lagi"
+ "Of margir þátttakendur í samtali"
+
+ Ógildir tengiliðir
+ Ógildir tengiliðir
+
+ "Ekki var hægt að hlaða mynd frá myndavél"
+ "Þú: "
+ "%s: "
+ "Drög"
+ "Þegar þú hefur nýtt samtal birtist það hér"
+ "Samtöl í geymslu birtast hér"
+ "Hleður samtöl…"
+ "Mynd"
+ "Hljóðbútur"
+ "Myndskeið"
+ "Tengiliðaspjald"
+ "MMS"
+ "Afturkalla"
+ "Reyna aftur"
+ "Sláðu inn nafn eða símanúmer tengiliðar til að búa til ný skilaboð"
+ "Setja á bannlista"
+ "Útiloka %s"
+ "Taka %s af bannlista"
+ "Loka á %s?"
+ "Þú heldur áfram að fá skilaboð úr þessu númeri en færð ekki lengur tilkynningar. Þetta samtal verður sett í geymslu."
+ "Útilokaðir tengiliðir"
+ "TAKA AF BANNLISTA"
+ "Útilokaðir tengiliðir"
+ "Velja mynd úr skjalasafni"
+ "Sendir skilaboð"
+ "Skilaboð send"
+ "Slökkt er á farsímagögnum. Athugaðu stillingarnar."
+ "Ekki er hægt að senda skilaboð þegar flugstilling er virk"
+ "Ekki var hægt að senda skilaboðin"
+ "Skilaboð sótt"
+ "Slökkt er á farsímagögnum. Athugaðu stillingarnar."
+ "Ekki er hægt að sækja skilaboð þegar flugstilling er virk"
+ "Ekki var hægt að sækja skilaboðin"
+ "Núll"
+ "Einn"
+ "Tveir"
+ "Þrír"
+ "Fjórir"
+ "Fimm"
+ "Sex"
+ "Sjö"
+ "Átta"
+ "Níu"
+ "Ekki er hægt að senda skilaboð í gegnum %1$s, villa %2$d"
+ "Ekki er hægt að senda skilaboð í gegnum óþekkt símafyrirtæki, villa %1$d"
+ "Áfrs.: %s"
+ "Skilaboðin voru ekki send. Símkerfið hefur ekki gert þjónustuna virka"
+ "Skilaboðin voru ekki send: Ógildur áfangastaður"
+ "Skilaboðin voru ekki send: Ógild skilaboð"
+ "Skilaboðin voru ekki send: Óstutt innihald"
+ "Skilaboðin voru ekki send: Óstudd skilaboð"
+ "Skilaboðin voru ekki send: Of stór"
+ "Ný skilaboð"
+ "Skoða"
+ "Mynd"
+ "Viðeigandi forrit fannst ekki"
+ "Fjarlægja viðtakanda"
+ "Ný skilaboð"
+ "Hætta við"
+ "Breyta aðgangsstað"
+ "Ekki stillt"
+ "Heiti"
+ "Aðgangsstaður"
+ "MMSC"
+ "Proxy-þjónn fyrir MMS"
+ "MMS-gátt"
+ "MCC"
+ "MNC"
+ "Tegund aðgangsstaðar"
+ "Eyða aðgangsstað"
+ "Nýr aðgangsstaður"
+ "Vista"
+ "Fleygja"
+ "Reiturinn fyrir heiti má ekki vera auður."
+ "Heiti aðgangsstaðar má ekki vera autt."
+ "MCC-reitur verður að innihalda 3 tölustafi."
+ "MNC-reitur verður að innihalda 2 eða 3 tölustafi."
+ "Endurheimtir sjálfgefnar stillingar aðgangsstaðar."
+ "Núllstilla"
+ "Sjálfgefnar stillingar aðgangsstaðar endurheimtar."
+ "Ónefnt"
+ "Heiti aðgangsstaða"
+ "Aðgangsstaðir"
+ "Nýr aðgangsstaður"
+ "Stillingar fyrir heiti aðgangsstaðar eru ekki í boði fyrir þennan notanda"
+ "Afrita á klippiborð?"
+ "Afrita"
+ "á %s"
+ "Almennt"
+ "Ítarlegt"
+ "Almennar stillingar"
+ "Ítarlegar stillingar"
+ "SIM-kortið „%s“"
+ "Senda sérstök SMS-skilaboð til hvers viðtakanda fyrir sig. Svör verða aðeins send til þín"
+ "Senda ein MMS-skilaboð til allra viðtakenda"
+ "Óþekkt númer"
+ "Ný skilaboð"
+ "Ný skilaboð."
+ "Val á SIM-korti"
+ "%1$s valið, val á SIM-korti"
+ "Breyta efni"
+ "Velja SIM-kort eða breyta efni"
+ "Haltu inni til að taka upp hljóð"
+ "Hefja nýtt samtal"
+ "Skilaboð"
+ "Skilaboðalisti"
+ "Skilaboð"
+ "Ný skilaboð"
+ "Samtalalisti"
+ "Hleður samtöl"
+ "Hleður skilaboð"
+ "Skoða fleiri samtöl"
+ "Skoða fleiri skilaboð"
+ "Samtali eytt"
+ "Samtali eytt. Snertu til að sýna annað samtal í Skilaboðum"
+ "Á bannlista"
+ "Tekin(n) af bannlista"
+ "Geymslupláss er á þrotum. Einhver gögn kunna að glatast."
+ "Veldu viðhengi"
+ "Staðfesta val"
+ "%d valin"
+ "Fjarlægðu eitt eða fleiri viðhengi og reyndu aftur."
+ "Þú getur prófað að senda skilaboðin en þau komast ef til vill ekki til skila nema þú fjarlægir eitt eða fleiri viðhengi."
+ "Þú getur aðeins sent eitt myndskeið með hverjum skilaboðum. Fjarlægðu myndskeiðin sem eru umfram og reyndu aftur."
+ "Skilaboð gátu ekki hlaðið viðhengið."
+ "Senda samt"
+ "Ekki tókst að hefja samtal"
+ "%1$s (%2$s)"
+ "%s valið"
+
diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml
new file mode 100644
index 0000000..16f7792
--- /dev/null
+++ b/res/values-it/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "nessun oggetto"
+ "nosubject"
+
+
+ "Sì"
+ "No"
+ "OK"
+ "He he"
+ "Grazie"
+ "Accetto"
+ "Bene"
+ "Sto arrivando"
+ "OK, ti ricontatto più tardi"
+ ":)"
+ ":("
+
+
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
new file mode 100644
index 0000000..7261f25
--- /dev/null
+++ b/res/values-it/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Messaggi"
+ "Messaggi"
+ "Seleziona conversazione"
+ "Impostazioni"
+ "Invia messaggio"
+ "Aggiungi un allegato"
+ "Guida"
+ "Benvenuto"
+ "Ignora"
+ "Avanti >"
+ "Avanti"
+ "Esci"
+ "Impostazioni >"
+ "Impostazioni"
+ "Messaggi richiede l\'autorizzazione per SMS, Telefono e Contatti."
+ "Puoi modificare le autorizzazioni in Impostazioni > Applicazioni > Messaggi > Autorizzazioni."
+ "Puoi modificare le autorizzazioni in Impostazioni > Applicazioni > Messaggi > Autorizzazioni."
+ "Frequenti"
+ "Tutti i contatti"
+ "Invia a %s"
+ "Scatta foto o registra video"
+ "Scegli immagini su questo dispositivo"
+ "Registra audio"
+ "Scegli foto"
+ "Il contenuto multimediale è selezionato."
+ "Il contenuto multimediale è deselezionato."
+ "%d selezionati"
+ "immagine: %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "immagine"
+ "Registrazione audio"
+ "Condividi"
+ "Adesso"
+ "Ora"
+
+ %d min
+ %d min
+
+
+ %d ore
+ %d ora
+
+
+ %d giorni
+ %d giorno
+
+
+ %d settimane
+ una settimana
+
+
+ %d mesi
+ un mese
+
+
+ %d anni
+ un anno
+
+ "Messaggio classe 0"
+ "Salva"
+ "Spazio insufficiente sul dispositivo. Messaggi eliminerà automaticamente i messaggi meno recenti per liberare spazio."
+ "Spazio di archiviazione in esaurimento"
+ "Messaggi potrebbe non inviare o ricevere messaggi finché non si libererà spazio sul dispositivo."
+ "Memoria per gli SMS scarsa. Potresti dover eliminare alcuni messaggi."
+ "Conferma il tuo numero di telefono"
+ "Con questo passaggio da eseguire una sola volta, puoi assicurarti che Messaggi invii correttamente i messaggi di gruppo."
+ "Numero di telefono"
+ "Elimina tutti i messaggi con contenuti multimediali"
+ "Elimina messaggi più vecchi di %s"
+ "Elimina automaticamente messaggi più vecchi di %s"
+ "Ignora"
+ "Eliminare tutti i messaggi con contenuti multimediali?"
+ "Eliminare i messaggi più vecchi di %s?"
+ "Eliminare i messaggi più vecchi di %s e attivare l\'eliminazione automatica?"
+ "Messaggio di %s"
+ "Il tuo messaggio"
+ "Messaggio di %s"
+ "Hai inviato un messaggio"
+ "Invio…"
+ "Non inviato. Tocca per riprovare."
+ "Non inviato. Nuovo tentativo…"
+ "Invia di nuovo o elimina"
+ "Effettua una chiamata vocale al numero di emergenza. Al momento non è possibile recapitare l\'SMS."
+ "Operazione non riuscita"
+ "Nuovo messaggio MMS da scaricare"
+ "Nuovo messaggio MMS"
+ "Download non riuscito"
+ "Tocca per riprovare"
+ "Tocca per scaricare"
+ "Scarica o elimina"
+ "Download..."
+ "Messaggio scaduto o non disponibile"
+ "dimensioni: %1$s, scadenza: %2$s"
+ "Impossibile inviare. Destinatario non valido."
+ "Servizio non attivato sulla rete"
+ "Invio non riuscito a causa di problemi di rete"
+ "Messaggio scaduto o non disponibile"
+ "(Nessun oggetto)"
+ "Mittente sconosciuto"
+ "Recapitato"
+ "Download del messaggio %1$s inviato da %2$s non riuscito."
+ "Completamento dell\'operazione nel database non riuscito a causa di memoria insufficiente"
+ "Messaggio non inviato"
+ "Alcuni messaggi non inviati in Messaggi"
+
+ %d messaggi in %d conversazioni
+ %d messaggi in una conversazione
+
+ "Messaggio non scaricato"
+ "Alcuni messaggi non scaricati in Messaggi"
+
+ %d messaggi in %d conversazioni
+ %d messaggi in una conversazione
+
+ "Messaggio al numero %1$s non inviato"
+ "Effettua una chiamata vocale al numero di emergenza. Al momento non è possibile recapitare l\'SMS al numero %1$s."
+
+ %d nuovi messaggi
+ Nuovo messaggio
+
+ "Avvia"
+ "Fotocamera non disponibile"
+ "Fotocamera non disponibile"
+ "Acquisizione video non disponibile"
+ "Impossibile salvare i contenuti multimediali"
+ "Impossibile scattare una foto"
+ "Indietro"
+ "Archiviate"
+ "Elimina"
+ "Archivio"
+ "Annulla archiviazione"
+ "Disattiva notifiche"
+ "Attiva notifiche"
+ "Aggiungi contatto"
+ "Scarica"
+ "Invia"
+ "Elimina"
+ "Eliminare questo messaggio?"
+ "L\'operazione non può essere annullata."
+ "Elimina"
+
+ Eliminare queste conversazioni?
+ Eliminare questa conversazione?
+
+ "Elimina"
+ "Annulla"
+ "A"
+ "Seleziona diverse immagini"
+ "Conferma selezione"
+ "e altri %d"
+ "Impossibile registrare l\'audio. Riprova."
+ "Impossibile riprodurre l\'audio. Riprova."
+ "Impossibile salvare l\'audio. Riprova."
+ "Tocca e tieni premuto"
+ ", "
+ " "
+ ": "
+ " "
+ "Immagine"
+ "Clip audio"
+ "Video"
+ "Scheda contatto"
+ "Scarica"
+ "Rispondi tramite SMS"
+ "Rispondi con MMS"
+ "Rispondi"
+
+ %d partecipanti
+ %d participante
+
+ "Io"
+ "Contatto bloccato e archiviato"
+ "Contatto sbloccato e non archiviato"
+ "%d archiviate"
+ "%d rimosse dall\'archivio"
+ "Notifiche disattivate"
+ "Notifiche attivate"
+ "Fatto. Tocca di nuovo Invia."
+ "Messaggi impostato correttamente come app predefinita per gli SMS."
+
+ Elimina allegati
+ Elimina allegato
+
+ "Allegato audio"
+ "Riproduci allegato audio"
+ "Metti in pausa"
+ "Messaggio da %s: %s."
+ "Messaggio di %s non recapitato: %s. Data/ora: %s."
+ "Messaggio di %s: %s. Data/ora: %s."
+ "Messaggio per %s non inviato: %s. Data/ora: %s."
+ "Invio del messaggio a %s: %s. Data/ora: %s."
+ "Messaggio per %s non recapitato: %s. Data/ora: %s."
+ "Messaggio per %s: %s. Data/ora: %s."
+ "Messaggio di %s non recapitato: %s. Data/ora: %s. %s."
+ "Messaggio di %s: %s. Data/ora: %s. %s."
+ "Messaggio per %s non inviato: %s. Data/ora: %s."
+ "Invio del messaggio a %s: %s. Data/ora: %s."
+ "Messaggio per %s non recapitato: %s. Data/ora: %s."
+ "Messaggio per %s: %s. Data/ora: %s."
+ "Messaggio non recapitato. Tocca per riprovare."
+ "Conversazione con %s"
+ "Elimina oggetto"
+ "Registra video"
+ "Scatta una foto in posa"
+ "Scatta una foto"
+ "Inizia a registrare il video"
+ "Passa alla fotocamera a schermo intero"
+ "Passa dalla fotocamera frontale a quella posteriore e viceversa"
+ "Interrompi registrazione e aggiungi video"
+ "Interrompi registrazione video"
+ "Foto in Messaggi"
+
+ %d foto salvate nell\'album \"%s\"
+ %d foto salvata nell\'album \"%s\"
+
+
+ %d video salvati nell\'album \"%s\"
+ %d video salvato nell\'album \"%s\"
+
+
+ %d allegati salvati nell\'album \"%s\"
+ %d allegato salvato nell\'album \"%s\"
+
+
+ %d allegati salvati in \"Download\"
+ %d allegato salvato in \"Download\"
+
+
+ %d allegati salvati
+ %d allegato salvato
+
+
+ Impossibile salvare %d allegati
+ Impossibile salvare %d allegato
+
+ "Allegato MMS salvato"
+ "Impostazioni"
+ "Archiviate"
+ "Chiudi"
+ "MMS"
+ "Avanzate"
+ "Debug"
+ "Notifiche"
+ "Suono"
+ "Silenzioso"
+ "Vibrazione"
+ "Bloccato"
+ "Rapporti di consegna SMS"
+ "Richiedi conferma di recapito per ogni SMS inviato"
+ "Recupero automatico"
+ "Recupera messaggi MMS automaticamente"
+ "Recupero automatico in roaming"
+ "Recupero automatico di MMS in roaming"
+ "Messaggi di gruppo"
+ "Utilizza gli MMS per inviare un unico messaggio a più destinatari"
+ "App SMS predefinita"
+ "App SMS predefinita"
+
+
+ "Il tuo numero di telefono"
+ "Sconosciuto"
+ "Riproduzione audio per messaggi in uscita"
+ "Scarica SMS"
+ "Scarica dati non elaborati SMS ricevuti in file di archiviazione esterna"
+ "Scarica MMS"
+ "Scarica dati non elaborati MMS ricevuti in file di archiviazione esterna"
+ "Avvisi wireless"
+ "Opzioni messaggio"
+ "Copia testo"
+ "Visualizza dettagli"
+ "Elimina"
+ "Inoltra"
+ "Dettagli messaggio"
+ "Tipo: "
+ "SMS"
+ "Messaggio multimediale"
+ "Da: "
+ "A: "
+ "Inviato: "
+ "Ricevuto in data: "
+ "Oggetto: "
+ "Dimensioni: "
+ "Priorità: "
+ "SIM: "
+ "Alta"
+ "Normale"
+ "Bassa"
+ "SIM %s"
+ "Indirizzo mittente nascosto"
+ "Impossibile inviare il messaggio durante il caricamento degli allegati."
+ "Impossibile caricare l\'allegato. Riprova."
+ "La rete non è pronta. Riprova."
+ "Elimina testo"
+ "Passa tra immissione testo e numeri"
+ "Aggiungi altri partecipanti"
+ "Conferma partecipanti"
+ "Inizia nuova conversazione"
+ "Seleziona questo elemento"
+ "Riproduci video"
+ "Persone e opzioni"
+ "Debug"
+ "Persone e opzioni"
+ "Generali"
+ "Persone presenti nella conversazione"
+ "Fai una chiamata"
+ "Invia messaggio"
+ "Invia messaggio<br/><small>da %s</small>"
+
+ Invia foto
+ Invia foto
+
+
+ Invia audio
+ Invia audio
+
+
+ Invia video
+ Invia video
+
+
+ Invia schede contatti
+ Invia scheda contatto
+
+
+ Invia allegati
+ Invia allegato
+
+
+ %d allegati pronti da inviare
+ Un allegato pronto da inviare
+
+ "Invia feedback"
+ "Visualizza nel Google Play Store"
+ "Info versione"
+ "Versione %1$s"
+ "Licenze open source"
+ "Notifiche"
+ "Limite di allegati raggiunto"
+ "Impossibile caricare l\'allegato."
+ "Aggiungere a Contatti?"
+ "Aggiungi contatto"
+ "Oggetto"
+ "Oggetto: "
+ "%s%s"
+ "Caricamento scheda contatto in corso"
+ "Impossibile caricare la scheda del contatto"
+ "Visualizza scheda contatto"
+
+ %d contatti
+ %d contatto
+
+ "Schede contatti"
+ "Compleanno"
+ "Note"
+ "Inoltra messaggio"
+ "Rispondi"
+ "+1"
+ "+%d"
+ "SMS disattivati"
+ "Per inviare messaggi, imposta Messaggi come app predefinita per gli SMS"
+ "Imposta Messaggi come app predefinita per gli SMS"
+ "Modifica"
+ "Per ricevere messaggi, imposta Messaggi come app predefinita per gli SMS"
+ "Nessuna SIM preferita selezionata per l\'invio di messaggi SMS"
+ "Questa app non è consentita dal proprietario del dispositivo."
+ "OK"
+ "Troppi partecipanti alla conversazione"
+
+ Contatti non validi
+ Contatto non valido
+
+ "Impossibile caricare l\'immagine della fotocamera"
+ "Tu: "
+ "%s: "
+ "Bozza"
+ "Le nuove conversazioni che inizi verranno elencate qui"
+ "Le conversazioni archiviate vengono visualizzate qui"
+ "Caricamento conversazioni in corso..."
+ "Immagine"
+ "Clip audio"
+ "Video"
+ "Scheda contatto"
+ "MMS"
+ "Annulla"
+ "Riprova"
+ "Inserisci il nome o il numero di telefono di un contatto per iniziare un nuovo messaggio"
+ "Blocca"
+ "Blocca %s"
+ "Sblocca %s"
+ "Bloccare %s?"
+ "Continuerai a ricevere messaggi da questo numero ma non riceverai più notifiche. Questa conversazione verrà archiviata."
+ "Contatti bloccati"
+ "SBLOCCA"
+ "Contatti bloccati"
+ "Scegli immagine da raccolta documenti"
+ "Invio messaggio"
+ "Messaggio inviato"
+ "Dati mobili non attivi. Controlla le impostazioni."
+ "Impossibile inviare messaggi in modalità Aereo"
+ "Messaggio non inviato"
+ "Messaggio scaricato"
+ "Dati mobili non attivi. Controlla le impostazioni."
+ "Impossibile scaricare messaggi in modalità aereo"
+ "Impossibile scaricare il messaggio"
+ "Zero"
+ "Uno"
+ "Due"
+ "Tre"
+ "Quattro"
+ "Cinque"
+ "Sei"
+ "Sette"
+ "Otto"
+ "Nove"
+ "Impossibile inviare il messaggio tramite %1$s. Errore %2$d"
+ "Impossibile inviare il messaggio tramite un operatore sconosciuto. Errore %1$d"
+ "Fwd: %s"
+ "Messaggio non inviato: servizio non attivato nella rete"
+ "Messaggio non inviato: indirizzo di destinazione non valido"
+ "Messaggio non inviato: messaggio non valido"
+ "Messaggio non inviato: contenuti non supportati"
+ "Messaggio non inviato: messaggio non supportato"
+ "Messaggio non inviato: troppo grande"
+ "Nuovo messaggio"
+ "Visualizza"
+ "Immagine"
+ "Impossibile trovare un\'applicazione adeguata"
+ "Rimuovi destinatario"
+ "Nuovo messaggio"
+ "Annulla"
+ "Modifica punto di accesso"
+ "Non impostato"
+ "Nome"
+ "APN"
+ "MMSC"
+ "Proxy MMS"
+ "Porta MMS"
+ "MCC"
+ "MNC"
+ "Tipo APN"
+ "Elimina APN"
+ "Nuovo APN"
+ "Salva"
+ "Elimina"
+ "Il campo Nome non può essere vuoto."
+ "Il campo APN non può essere vuoto."
+ "Il campo MCC deve contenere 3 cifre."
+ "Il campo MNC deve contenere 2 o 3 cifre."
+ "Ripristino delle impostazioni APN predefinite."
+ "Ripristina impostazioni predefinite"
+ "Ripristino delle impostazioni APN predefinite completato."
+ "Senza titolo"
+ "Nomi punti di accesso"
+ "APN"
+ "Nuovo APN"
+ "Le impostazioni del nome punto di accesso non sono disponibili per questo utente"
+ "Copiare negli appunti?"
+ "Copia"
+ "a %s"
+ "Generali"
+ "Avanzate"
+ "Impostazioni generali"
+ "Impostazioni avanzate"
+ "SIM \"%s\""
+ "Invia SMS singoli a tutti i destinatari. Soltanto tu riceverai le risposte"
+ "Invia un singolo MMS a tutti i destinatari"
+ "Numero sconosciuto"
+ "Nuovo messaggio"
+ "Nuovo messaggio."
+ "Selettore SIM"
+ "Scheda %1$s selezionata, selettore SIM"
+ "Modifica oggetto"
+ "Seleziona la SIM o modifica l\'oggetto"
+ "Tocca e tieni premuto per registrare l\'audio"
+ "Inizia nuova conversazione"
+ "Messaggi"
+ "Elenco messaggi"
+ "Messaggi"
+ "Nuovo messaggio"
+ "Elenco conversazioni"
+ "Caricamento conversazioni..."
+ "Caricamento dei messaggi in corso"
+ "Visualizza altre conversazioni"
+ "Mostra altri messaggi"
+ "Conversazione eliminata"
+ "Conversazione eliminata. Tocca per vedere un\'altra conversazione di Messaggi"
+ "Bloccato"
+ "Sbloccato"
+ "Lo spazio di archiviazione è quasi esaurito. Alcuni dati potrebbero andare perduti."
+ "Seleziona allegati"
+ "Conferma selezione"
+ "%d selezionati"
+ "Rimuovi uno o più allegati e riprova."
+ "Puoi provare a inviare il messaggio, che però potrebbe non essere recapitato se non rimuovi uno o più allegati."
+ "Puoi inviare un solo video per messaggio. Rimuovi i video aggiuntivi e riprova."
+ "Messaggi non ha potuto caricare l\'allegato."
+ "Invia comunque"
+ "Impossibile avviare la conversazione"
+ "%1$s (%2$s)"
+ "SIM selezionata: %s"
+
diff --git a/res/values-iw/arrays.xml b/res/values-iw/arrays.xml
new file mode 100644
index 0000000..91bd7db
--- /dev/null
+++ b/res/values-iw/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "ללא נושא"
+ "ללא נושא"
+
+
+ "כן"
+ "לא"
+ "אישור"
+ "חחח"
+ "תודה"
+ "אני מסכים"
+ "נחמד"
+ "אני בדרך"
+ "אוקיי, נדבר מאוחר יותר"
+ ":)"
+ ":("
+
+
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
new file mode 100644
index 0000000..74e46bf
--- /dev/null
+++ b/res/values-iw/strings.xml
@@ -0,0 +1,571 @@
+
+
+
+
+ "העברת הודעות"
+ "העברת הודעות"
+ "בחר שיחה"
+ "הגדרות"
+ "שלח הודעה"
+ "הוסף קובץ מצורף"
+ "עזרה"
+ "ברוכים הבאים!"
+ "דלג"
+ "הבא >"
+ "הבא"
+ "צא"
+ "הגדרות >"
+ "הגדרות"
+ "\'העברת הודעות\' זקוק להרשאות SMS, טלפון ואנשי קשר."
+ "תוכל לשנות את ההרשאות ב\'הגדרות\' > \'אפליקציות\' > \'העברת הודעות\' > \'הרשאות\'."
+ "תוכל לשנות את ההרשאות ב\'הגדרות\', \'אפליקציות\', \'העברת הודעות\', \'הרשאות\'."
+ "בתדירות גבוהה"
+ "כל אנשי הקשר"
+ "שלח אל %s"
+ "צלם תמונות או סרטון"
+ "בחר תמונות ממכשיר זה"
+ "הקלט אודיו"
+ "בחר תמונה"
+ "בחרת במדיה."
+ "ביטלת את הבחירה במדיה."
+ "%d נבחרו"
+ "תמונה %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "תמונה"
+ "הקלט אודיו"
+ "שיתוף"
+ "ממש עכשיו"
+ "עכשיו"
+
+ %d דקות
+ %d דקות
+ %d דקות
+ דקה %d
+
+
+ %d שעות
+ %d שעות
+ %d שעות
+ שעה %d
+
+
+ %d ימים
+ %d ימים
+ %d ימים
+ יום %d
+
+
+ שבועות
+ שבועות%d
+ שבועות
+ שבוע
+
+
+ %d חודשים
+ %d חודשים
+ %d חודשים
+ חודש
+
+
+ שנים
+ שנים%d
+ שנים
+ שנה
+
+ "הודעה ברמה 0"
+ "שמור"
+ "נותר מעט שטח פנוי במכשיר. \'העברת הודעות\' ימחק הודעות ישנות באופן אוטומטי כדי לפנות שטח."
+ "שטח האחסון אוזל"
+ "לא תוכל לשלוח או לקבל הודעות ב\'העברת הודעות\' עד שתפנה שטח במכשיר."
+ "אין מספיק שטח אחסון להודעות SMS. ייתכן שתצטרך למחוק הודעות."
+ "אשר את מספר הטלפון שלך"
+ "שלב חד-פעמי זה יבטיח שהאפליקציה \'העברת הודעות\' תעביר כראוי את ההודעות הקבוצתיות שלך."
+ "מספר טלפון"
+ "מחק את כל ההודעות עם מדיה"
+ "מחק הודעות בנות יותר מ-%s"
+ "מחק אוטומטית הודעות שגילן עולה על %s"
+ "התעלם"
+ "למחוק את כל ההודעות עם המדיה?"
+ "למחוק הודעות שגילן עולה על %s?"
+ "למחוק הודעות שגילן עולה על %s ולהפעיל מחיקה אוטומטית?"
+ "%s אמר"
+ "אמרת"
+ "הודעה מאת %s"
+ "שלחת הודעה"
+ "שולח..."
+ "ההודעה לא נשלחה. גע כדי לנסות שוב."
+ "ההודעה לא נשלחה. מנסה שוב…"
+ "שלח שוב או מחק"
+ "בצע שיחה קולית לשירותי חירום. לא ניתן היה לשלוח את הודעת הטקסט."
+ "נכשל"
+ "הודעת MMS חדשה להורדה"
+ "הודעת MMS חדשה"
+ "לא ניתן לבצע את ההורדה"
+ "גע כדי לנסות שוב"
+ "גע כדי להוריד"
+ "הורד או מחק"
+ "מוריד…"
+ "תוקף ההודעה פג או שהיא לא זמינה"
+ "גודל: %1$s, תפוגה: %2$s"
+ "לא ניתן לשלוח. הנמען אינו חוקי."
+ "השירות לא הופעל ברשת"
+ "לא ניתן לשלוח בגלל בעיה ברשת"
+ "התוקף של ההודעה פג או שהיא לא זמינה"
+ "(ללא נושא)"
+ "שולח לא ידוע"
+ "נמסר"
+ "לא ניתן היה להוריד את ההודעה %1$s מ-%2$s."
+ "לא ניתן היה להשלים את הפעולה של מסד הנתונים עקב זיכרון לא מספיק"
+ "ההודעה לא נשלחה"
+ "\'העברת הודעות\' לא שלח חלק מההודעות"
+
+ %d הודעות ב-%d שיחות
+ %d הודעות ב-%d שיחות
+ %d הודעות ב-%d שיחות
+ %d הודעות בשיחה אחת
+
+ "ההודעה לא הורדה"
+ "\'העברת הודעות\' לא הוריד חלק מההודעות"
+
+ %d הודעות ב-%d שיחות
+ %d הודעות ב-%d שיחות
+ %d הודעות ב-%d שיחות
+ %d הודעות בשיחה אחת
+
+ "ההודעה אל %1$s לא נשלחה"
+ "התקשר לשירותי חירום. לא ניתן היה לשלוח את הודעת הטקסט אל %1$s."
+
+ %d הודעות חדשות
+ %d הודעות חדשות
+ %d הודעות חדשות
+ הודעה חדשה
+
+ "התחל"
+ "המצלמה לא זמינה"
+ "המצלמה לא זמינה"
+ "לכידת וידאו אינה זמינה"
+ "לא ניתן לשמור מדיה"
+ "לא ניתן לצלם את התמונה"
+ "הקודם"
+ "הועברו לארכיון"
+ "מחק"
+ "העבר לארכיון"
+ "הוצאה מארכיון"
+ "כבה התראות"
+ "הפעל התראות"
+ "הוסף איש קשר"
+ "הורד"
+ "שלח"
+ "מחק"
+ "למחוק הודעה זו?"
+ "פעולה זו אינה הפיכה."
+ "מחק"
+
+ האם למחוק את השיחות האלו?
+ האם למחוק את השיחות האלו?
+ האם למחוק את השיחות האלו?
+ האם למחוק את השיחה הזו?
+
+ "מחק"
+ "בטל"
+ "אל"
+ "בחר תמונות מרובות"
+ "אשר את הבחירה"
+ "+%d"
+ "לא ניתן להקליט אודיו. נסה שוב."
+ "לא ניתן להפעיל אודיו. נסה שוב."
+ "לא ניתן לשמור אודיו. נסה שוב."
+ "גע והחזק"
+ ", "
+ " "
+ ": "
+ " "
+ "תמונה"
+ "קטע אודיו"
+ "סרטון"
+ "כרטיס איש קשר"
+ "הורד"
+ "השב באמצעות SMS"
+ "השב באמצעות MMS"
+ "השב"
+
+ %d משתתפים
+ %d משתתפים
+ %d משתתפים
+ משתתף %d
+
+ "אני"
+ "איש הקשר נחסם והועבר לארכיון"
+ "חסימת איש הקשר בוטלה והוא הוצא מהארכיון"
+ "%d הועברו לארכיון"
+ "%d הוצאו מהארכיון"
+ "ההודעות כבויות"
+ "ההודעות פועלות"
+ "הכל מוכן. גע באפשרות \'שלח שוב\'."
+ "האפליקציה \'העברת הודעות\' הוגדרה בהצלחה כאפליקציית ברירת המחדל ל-SMS."
+
+ מחק את הקבצים המצורפים
+ מחק את הקבצים המצורפים
+ מחק את הקבצים המצורפים
+ מחק את הקובץ המצורף
+
+ "קובץ אודיו מצורף"
+ "הפעל את קובץ האודיו המצורף"
+ "השהה"
+ "הודעה מאת %s: %s."
+ "הודעה מאת %s שנכשלה: %s. שעה: %s."
+ "הודעה מאת %s: %s. שעה: %s."
+ "הודעה אל %s שלא נשלחה: %s. שעה: %s."
+ "שולח הודעה אל %s: %s. שעה: %s."
+ "הודעה אל %s שנכשלה: %s. שעה: %s."
+ "הודעה אל %s: %s. שעה: %s."
+ "הודעה שנכשלה מאת %s: %s. שעה: %s. %s."
+ "הודעה מאת %s: %s. שעה: %s. %s."
+ "הודעה אל %s שלא נשלחה: %s. שעה: %s."
+ "שולח הודעה אל %s: %s. שעה: %s."
+ "הודעה אל %s שנכשלה: %s. שעה: %s."
+ "הודעה אל %s: %s. שעה: %s."
+ "ההודעה נכשלה. גע כדי לנסות שוב."
+ "שיחה עם %s"
+ "מחק נושא"
+ "צלם סרטון"
+ "צלם תמונת סטילס"
+ "צלם תמונה"
+ "התחל הקלטת סרטון"
+ "עבור למצלמה במסך מלא"
+ "החלף בין המצלמה הקדמית לאחורית"
+ "הפסק להקליט וצרף סרטון"
+ "עצור הקלטת וידאו"
+ "תמונות ב\'העברת הודעות\'"
+
+ %d תמונות נשמרו באלבום \"%s\"
+ %d תמונות נשמרו באלבום \"%s\"
+ %d תמונות נשמרו באלבום \"%s\"
+ תמונה %d נשמרה באלבום \"%s\"
+
+
+ %d סרטונים נשמרו באלבום \"%s\"
+ %d סרטונים נשמרו באלבום \"%s\"
+ %d סרטונים נשמרו באלבום \"%s\"
+ סרטון %d נשמר באלבום \"%s\"
+
+
+ %d קבצים מצורפים נשמרו באלבום \"%s\"
+ %d קבצים מצורפים נשמרו באלבום \"%s\"
+ %d קבצים מצורפים נשמרו באלבום \"%s\"
+ קובץ מצורף %d נשמר באלבום \"%s\"
+
+
+ %d קבצים מצורפים נשמרו ב\"הורדות\"
+ %d קבצים מצורפים נשמרו ב\"הורדות\"
+ %d קבצים מצורפים נשמרו ב\"הורדות\"
+ קובץ מצורף %d נשמר ב\"הורדות\"
+
+
+ %d קבצים מצורפים נשמרו
+ %d קבצים מצורפים נשמרו
+ %d קבצים מצורפים נשמרו
+ קובץ מצורף %d נשמר
+
+
+ לא ניתן היה לשמור %d קבצים מצורפים
+ לא ניתן היה לשמור %d קבצים מצורפים
+ לא ניתן היה לשמור %d קבצים מצורפים
+ לא ניתן היה לשמור קובץ מצורף %d
+
+ "קובץ ה-MMS המצורף נשמר"
+ "הגדרות"
+ "הועברו לארכיון"
+ "סגור"
+ "MMS"
+ "מתקדם"
+ "ניפוי באגים"
+ "הודעות"
+ "צליל"
+ "מצב שקט"
+ "רטט"
+ "חסום"
+ "דוחות מסירת SMS"
+ "בקש דוח מסירה לכל SMS שאתה שולח"
+ "אחזור אוטומטי"
+ "אחזור אוטומטי של הודעות MMS"
+ "אחזור אוטומטי בנדידה"
+ "אחזר הודעות MMS באופן אוטומטי בזמן נדידה"
+ "העברת הודעות לקבוצה"
+ "השתמש ב-MMS לשליחת הודעה אחת לנמענים מרובים"
+ "אפליקציית SMS המוגדרת כברירת מחדל"
+ "אפליקציית SMS המוגדרת כברירת מחדל"
+
+
+ "מספר הטלפון שלך"
+ "לא ידוע"
+ "צלילים של הודעות יוצאות"
+ "צור Dump של SMS"
+ "צור Dump בקובץ אחסון חיצוני עבור נתוני SMS גולמיים שהתקבלו"
+ "צור Dump של MMS"
+ "צור Dump בקובץ אחסון חיצוני עבור נתוני MMS גולמיים שהתקבלו"
+ "התראות אלחוטיות"
+ "אפשרויות הודעה"
+ "העתק טקסט"
+ "הצגת פרטים"
+ "מחיקה"
+ "העבר"
+ "פרטי הודעה"
+ "סוג: "
+ "הודעת טקסט"
+ "הודעת מולטימדיה"
+ "מאת: "
+ "אל: "
+ "נשלחה ב: "
+ "התקבלה ב: "
+ "נושא: "
+ "גודל: "
+ "עדיפות: "
+ "SIM: "
+ "גבוהה"
+ "רגילה"
+ "נמוכה"
+ "SIM %s"
+ "כתובת שולח מוסתרת"
+ "לא ניתן לשלוח הודעה בעת טעינת קבצים מצורפים."
+ "לא ניתן לטעון קובץ מצורף. נסה שוב."
+ "הרשת לא מוכנה. נסה שוב."
+ "מחק טקסט"
+ "עבור בין הזנה של אותיות וספרות"
+ "הוסף עוד משתמשים"
+ "אשר משתתפים"
+ "התחל שיחה חדשה"
+ "בחר בפריט הזה"
+ "הפעל סרטון"
+ "אנשים ואפשרויות"
+ "ניפוי באגים"
+ "אנשים ואפשרויות"
+ "כללי"
+ "אנשים בשיחה הזו"
+ "התקשר"
+ "שלח הודעה"
+ "שלח הודעה<br/><small>מ-%s</small>"
+
+ שלח את התמונות
+ שלח את התמונות
+ שלח את התמונות
+ שלח את התמונה
+
+
+ שלח את הקלטות האודיו
+ שלח את הקלטות האודיו
+ שלח את הקלטות האודיו
+ שלח את הקלטת האודיו
+
+
+ שלח את הסרטונים
+ שלח את הסרטונים
+ שלח את הסרטונים
+ שלח את הסרטון
+
+
+ שלח את כרטיסי אנשי הקשר
+ שלח את כרטיסי אנשי הקשר
+ שלח את כרטיסי אנשי הקשר
+ שלח את כרטיס איש הקשר
+
+
+ שלח את הקבצים המצורפים
+ שלח את הקבצים המצורפים
+ שלח את הקבצים המצורפים
+ שלח את הקובץ המצורף
+
+
+ יש %d קבצים מצורפים המוכנים לשליחה
+ יש %d קבצים מצורפים המוכנים לשליחה
+ יש %d קבצים מצורפים המוכנים לשליחה
+ יש קובץ מצורף אחד המוכן לשליחה
+
+ "שלח משוב"
+ "הצג בחנות Google Play"
+ "פרטי גרסה"
+ "גרסה %1$s"
+ "רישיונות קוד פתוח"
+ "הודעות"
+ "צירפת את מספר הקבצים המקסימלי"
+ "טעינת הקובץ המצורף נכשלה."
+ "האם להוסיף לאנשי הקשר?"
+ "הוסף איש קשר"
+ "נושא"
+ "נושא: "
+ "%s%s"
+ "טוען את כרטיס איש הקשר"
+ "לא ניתן לטעון כרטיס איש קשר"
+ "הצג את כרטיס איש הקשר"
+
+ %d אנשי קשר
+ %d אנשי קשר
+ %d אנשי קשר
+ איש קשר %d
+
+ "כרטיסי אנשי קשר"
+ "יום הולדת"
+ "הערות"
+ "העבר הודעה"
+ "השב"
+ "+1"
+ "+%d"
+ "SMS מושבת"
+ "כדי לשלוח, הגדר את האפליקציה \'העברת הודעות\' כאפליקציית ברירת המחדל ל-SMS"
+ "הגדר את האפליקציה \'העברת הודעות\' כאפליקציית ברירת המחדל ל-SMS"
+ "שנה"
+ "כדי לקבל הודעות, הגדר את \'העברת הודעות\' כאפליקציית ברירת המחדל ל-SMS"
+ "לא נבחר SIM מועדף עבור שליחה של הודעות SMS"
+ "אפליקציה זו אינה מורשית על ידי בעל המכשיר."
+ "אישור"
+ "משתתפים רבים מדי בשיחה"
+
+ אנשי קשר לא חוקיים
+ אנשי קשר לא חוקיים
+ אנשי קשר לא חוקיים
+ איש קשר לא חוקי
+
+ "לא ניתן לטעון תמונת מצלמה"
+ "אתה: "
+ "%s: "
+ "טיוטה"
+ "כשתתחיל שיחה חדשה, תראה אותה ברשימה כאן"
+ "שיחות שהועברו לארכיון מופיעות כאן"
+ "טוען שיחות..."
+ "תמונה"
+ "קטע אודיו"
+ "סרטון"
+ "כרטיס איש קשר"
+ "MMS"
+ "בטל"
+ "נסה שוב"
+ "הזן שם איש קשר או מספר טלפון כדי להתחיל הודעה חדשה"
+ "חסום"
+ "חסום את %s"
+ "בטל חסימה של %s"
+ "לחסום את %s?"
+ "תמשיך לקבל הודעות ממספר זה אך לא יוצגו לך עוד דיווחים. שיחה זו תועבר לארכיון."
+ "אנשי קשר חסומים"
+ "אפשר"
+ "אנשי קשר חסומים"
+ "בחר תמונה מספריית המסמכים"
+ "שולח את ההודעה"
+ "ההודעה נשלחה"
+ "נתונים סלולריים כבויים. בדוק את ההגדרות."
+ "לא ניתן לשלוח הודעות במצב טיסה"
+ "לא ניתן היה לשלוח את ההודעה"
+ "הורדת ההודעה בוצעה"
+ "נתונים סלולריים כבויים. בדוק את ההגדרות."
+ "לא ניתן להוריד הודעות במצב טיסה"
+ "לא ניתן היה להוריד את ההודעה"
+ "אפס"
+ "אחת"
+ "שתיים"
+ "שלוש"
+ "ארבע"
+ "חמש"
+ "שש"
+ "שבע"
+ "שמונה"
+ "תשע"
+ "לא ניתן לשלוח הודעה דרך %1$s, שגיאה %2$d"
+ "לא ניתן לשלוח הודעה דרך ספק לא ידוע, שגיאה %1$d"
+ "העבר: %s"
+ "ההודעה לא נשלחה: השירות לא הופעל ברשת."
+ "ההודעה לא נשלחה: כתובת היעד לא חוקית"
+ "ההודעה לא נשלחה: הודעה לא חוקית"
+ "ההודעה לא נשלחה: תוכן לא נתמך"
+ "ההודעה לא נשלחה: הודעה לא נתמכת"
+ "ההודעה לא נשלחה מפני שהיא גדולה מדי"
+ "הודעה חדשה"
+ "הצג"
+ "תמונה"
+ "לא נמצא יישום מתאים"
+ "הסר נמען"
+ "הודעה חדשה"
+ "בטל"
+ "ערוך נקודת גישה"
+ "לא מוגדרת"
+ "שם"
+ "APN"
+ "MMSC"
+ "שרת Proxy של MMS"
+ "יציאת MMS"
+ "MCC"
+ "MNC"
+ "סוג APN"
+ "מחק APN"
+ "APN חדש"
+ "שמור"
+ "מחק"
+ "השדה \'שם\' לא יכול להיות ריק."
+ "ה-APN לא יכול להיות ריק."
+ "שדה MCC חייב להכיל 3 ספרות."
+ "שדה MNC חייב להכיל 2 או 3 ספרות."
+ "משחזר את הגדרות ברירת המחדל של APN."
+ "אפס לברירת מחדל"
+ "איפוס ההגדרות עבור ברירת המחדל של APN הושלם."
+ "ללא שם"
+ "שמות של נקודות גישה"
+ "APNs"
+ "APN חדש"
+ "הגדרות עבור שם נקודת גישה (APN) אינן זמינות עבור המשתמש הזה"
+ "האם להעתיק אל לוח העריכה?"
+ "העתק"
+ "אל %s"
+ "כללי"
+ "מתקדם"
+ "הגדרות כלליות"
+ "הגדרות מתקדמות"
+ "\"%s\" SIM"
+ "שלח הודעות SMS אישיות לכל הנמענים. רק אתה תקבל תשובות"
+ "שלח הודעת MMS אחת לכל הנמענים"
+ "מספר לא ידוע"
+ "הודעה חדשה"
+ "הודעה חדשה."
+ "בורר כרטיסי SIM"
+ "%1$s נבחר, בוחר כרטיסי SIM"
+ "ערוך נושא"
+ "בחר כרטיס SIM או ערוך את הנושא"
+ "גע נגיעה ממושכת כדי להקליט אודיו"
+ "התחל שיחה חדשה"
+ "\'העברת הודעות\'"
+ "רשימת \'העברת הודעות\'"
+ "\'העברת הודעות\'"
+ "הודעה חדשה"
+ "רשימת שיחות"
+ "טוען שיחות"
+ "טוען הודעות"
+ "הצג שיחות נוספות"
+ "הצג עוד הודעות"
+ "השיחה נמחקה"
+ "השיחה נמחקה. גע כדי להציג שיחה אחרת ב\'העברת הודעות\'"
+ "חסום"
+ "חסימה בוטלה"
+ "אין מספיק שטח אחסון. ייתכן שתאבד חלק מהנתונים."
+ "בחר קבצים מצורפים"
+ "אשר את הבחירה"
+ "בחרת %d"
+ "הסר קובץ מצורף אחד או יותר ונסה שוב."
+ "תוכל לנסות לשלוח את ההודעה, אך ייתכן שהיא לא תימסר אלא אם תסיר קובץ מצורף אחד או יותר."
+ "ניתן לשלוח רק סרטון אחד בכל הודעה. הסר סרטונים נוספים ונסה שוב."
+ "טעינת הקובץ המצורף נכשלה ב\'העברת הודעות\'."
+ "שלח בכל זאת"
+ "לא ניתן היה להתחיל את השיחה"
+ "%1$s (%2$s)"
+ "%s נבחר"
+
diff --git a/res/values-ja/arrays.xml b/res/values-ja/arrays.xml
new file mode 100644
index 0000000..cf9e1a6
--- /dev/null
+++ b/res/values-ja/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "件名なし"
+ "件名なし"
+
+
+ "はい"
+ "いいえ"
+ "OK"
+ "笑"
+ "ありがとう"
+ "賛成"
+ "ナイス"
+ "すぐに連絡します"
+ "後で連絡します"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
new file mode 100644
index 0000000..49df2fc
--- /dev/null
+++ b/res/values-ja/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "メッセージ"
+ "メッセージ"
+ "会話の選択"
+ "設定"
+ "メッセージを送信"
+ "添付ファイルを追加"
+ "ヘルプ"
+ "ようこそ"
+ "スキップ"
+ "次へ >"
+ "次へ"
+ "終了"
+ "設定 >"
+ "設定"
+ "SMSには、SMS、電話、連絡先に対する許可が必要です。"
+ "許可の変更は、[設定]>[アプリ]>[SMS]>[許可]で行えます。"
+ "許可の変更は、[設定]、[アプリ]、[SMS]、[許可]で行えます。"
+ "よく使う連絡先"
+ "すべての連絡先"
+ "%sに送信"
+ "写真や動画を撮影"
+ "この端末から画像を選択"
+ "音声の録音"
+ "写真を選択"
+ "メディアを選択しました。"
+ "メディアの選択を解除しました。"
+ "%d件選択済み"
+ "画像%1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "画像"
+ "音声の録音"
+ "共有"
+ "たった今"
+ "今"
+
+ %d分
+ %d分
+
+
+ %d時間
+ %d時間
+
+
+ %d日
+ %d日
+
+
+ %d週間
+ 1週間
+
+
+ %dか月
+ 1か月
+
+
+ %d年
+ 1年
+
+ "クラス0メッセージ"
+ "保存"
+ "端末の空き容量が少なくなっています。SMSでは空き容量を確保するため古いメッセージが自動的に削除されます。"
+ "空き容量が少なくなっています"
+ "端末上の空き容量が増えるまで、SMSでメッセージの送受信ができない場合があります。"
+ "SMSの空き容量が少なくなっています。メッセージの削除が必要な場合があります。"
+ "電話番号の確認"
+ "この1回の手順で、SMSはグループにメッセージを確実に配信します。"
+ "電話番号"
+ "メディア付きのメッセージをすべて削除"
+ "%sより前のメッセージを削除"
+ "%sより前のメッセージを自動削除"
+ "無視"
+ "メディア付きのメッセージをすべて削除しますか?"
+ "%sより前のメッセージを削除しますか?"
+ "%sより前のメッセージを削除し、自動削除をONにしますか?"
+ "%sさんからのメッセージ"
+ "メッセージ内容"
+ "%sさんからのメッセージ"
+ "メッセージを送信しました"
+ "送信しています…"
+ "送信されていません。タップしてもう一度お試しください。"
+ "送信されていません。もう一度送信しています…"
+ "再送信または削除"
+ "緊急通報には音声通話を使用してください。テキストメッセージを配信できませんでした。"
+ "失敗しました"
+ "ダウンロードする新しいMMSメッセージ"
+ "新しいMMSメッセージ"
+ "ダウンロードできませんでした"
+ "再試行するにはタップしてください"
+ "ダウンロードするにはタップしてください"
+ "ダウンロードまたは削除"
+ "ダウンロードしています…"
+ "メッセージが期限切れか参照できなくなっています"
+ "サイズ: %1$s、期限: %2$s"
+ "送信できません。受信者が無効です。"
+ "サービスがネットワークで有効になっていません"
+ "ネットワークに問題があるため送信できませんでした"
+ "メッセージが期限切れか参照できなくなっています"
+ "(無題)"
+ "送信者不明"
+ "配信済み"
+ "件名「%1$s」、送信者「%2$s」のメッセージをダウンロードできませんでした。"
+ "メモリ不足のためデータベース操作を完了できませんでした"
+ "メッセージが送信されていません"
+ "SMSの一部のメッセージが送信されていません"
+
+ %d件のスレッドのメッセージ%d件
+ 1件のスレッドのメッセージ%d件
+
+ "メッセージがダウンロードされていません"
+ "SMSの一部のメッセージがダウンロードされていません"
+
+ %d件のスレッドのメッセージ%d件
+ 1件のスレッドのメッセージ%d件
+
+ "%1$sへのメッセージは送信されませんでした"
+ "緊急通報には音声通話を使用してください。%1$sへのテキストメッセージを配信できませんでした。"
+
+ %d件の新しいメッセージ
+ 新しいメッセージ
+
+ "開始"
+ "カメラは利用できません"
+ "カメラは利用できません"
+ "動画撮影は利用できません"
+ "メディアを保存できません"
+ "写真を撮ることはできません"
+ "戻る"
+ "アーカイブ済み"
+ "削除"
+ "アーカイブ"
+ "アーカイブ解除"
+ "通知を無効化"
+ "通知を有効化"
+ "連絡先を追加"
+ "ダウンロード"
+ "送信"
+ "削除"
+ "このメッセージを削除しますか?"
+ "この操作は元に戻せません。"
+ "削除"
+
+ これらのスレッドを削除しますか?
+ このスレッドを削除しますか?
+
+ "削除"
+ "キャンセル"
+ "宛先"
+ "複数の画像を選択"
+ "選択の確認"
+ "+%d"
+ "音声を録音できません。もう一度お試しください。"
+ "音声を再生できません。もう一度お試しください。"
+ "音声を保存できませんでした。もう一度お試しください。"
+ "長押し"
+ "、 "
+ " "
+ ": "
+ " "
+ "写真"
+ "音声クリップ"
+ "動画"
+ "連絡先カード"
+ "ダウンロード"
+ "SMSで返信"
+ "MMSで返信"
+ "返信"
+
+ 参加者%d人
+ 参加者%d人
+
+ "自分"
+ "連絡先がブロックされ、アーカイブされました"
+ "連絡先をブロック解除し、アーカイブを解除しました"
+ "%d件をアーカイブしました"
+ "%d件のアーカイブを解除しました"
+ "通知をオフにしました"
+ "通知をオンにしました"
+ "すべて設定されました。もう一度[送信]をタップしてください。"
+ "SMSを既定のSMSアプリとして設定しました。"
+
+ 添付ファイルを破棄
+ 添付ファイルを破棄
+
+ "音声添付ファイル"
+ "音声添付ファイルの再生"
+ "一時停止"
+ "%sさんからのメッセージは「%s」です。"
+ "%sからのメッセージ「%s」を受信できませんでした(時間: %s)。"
+ "%sからのメッセージ「%s」を受信しました(時間: %s)。"
+ "%sへのメッセージ「%s」が送信されていません(時間: %s)。"
+ "%sへのメッセージ「%s」を送信しています(時間: %s)。"
+ "%sへのメッセージ「%s」を送信できませんでした(時間: %s)。"
+ "%sへのメッセージ「%s」を送信しました(時間: %s)。"
+ "%sからのメッセージ「%s」を受信できませんでした(時間: %s、%s)。"
+ "%sからのメッセージ「%s」を受信しました(時間: %s、%s)。"
+ "%sへのメッセージ「%s」が送信されていません(時間: %s)。"
+ "%sへのメッセージ「%s」を送信しています(時間: %s)。"
+ "%sへのメッセージ「%s」を送信できませんでした(時間: %s)。"
+ "%sへのメッセージ「%s」を送信しました(時間: %s)。"
+ "失敗したメッセージ。再試行するにはタップしてください。"
+ "%sとのスレッド"
+ "件名を削除"
+ "動画を撮影"
+ "静止画を撮影"
+ "画像を撮影"
+ "動画の録画を開始"
+ "全画面カメラに切り替える"
+ "前面カメラと背面カメラを切り替える"
+ "録画を停止し、動画を添付する"
+ "動画の録画を停止"
+ "SMSの写真"
+
+ %d枚の写真を「%s」アルバムに保存しました
+ %d枚の写真を「%s」アルバムに保存しました
+
+
+ %d本の動画を「%s」アルバムに保存しました
+ %d本の動画を「%s」アルバムに保存しました
+
+
+ %d個の添付ファイルを「%s」アルバムに保存しました
+ %d個の添付ファイルを「%s」アルバムに保存しました
+
+
+ %d個の添付ファイルを「ダウンロード」に保存しました
+ %d個の添付ファイルを「ダウンロード」に保存しました
+
+
+ %d個の添付ファイルを保存しました
+ %d個の添付ファイルを保存しました
+
+
+ %d個の添付ファイルを保存できませんでした
+ %d個の添付ファイルを保存できませんでした
+
+ "MMS添付ファイルを保存しました"
+ "設定"
+ "アーカイブ済み"
+ "閉じる"
+ "MMS"
+ "詳細設定"
+ "デバッグ"
+ "通知"
+ "通知音"
+ "マナーモード"
+ "バイブレーション"
+ "ブロック済み"
+ "SMS受取確認通知"
+ "送信するSMSの配信レポートを毎回リクエストする"
+ "自動取得"
+ "MMSメッセージを自動的に取得する"
+ "ローミング時に自動取得"
+ "ローミング時にMMSを自動取得"
+ "グループメッセージング"
+ "宛先が複数ある場合にMMSを使用して1通のメッセージとして送信する"
+ "既定のSMSアプリ"
+ "既定のSMSアプリ"
+
+
+ "電話番号"
+ "不明"
+ "メッセージ送信音"
+ "SMSのダンプ"
+ "受信したSMS生データを外部ストレージファイルにダンプする"
+ "MMSのダンプ"
+ "受信したMMS生データを外部ストレージファイルにダンプする"
+ "無線警報"
+ "メッセージオプション"
+ "テキストをコピー"
+ "詳細を表示"
+ "削除"
+ "転送"
+ "メッセージの詳細"
+ "形式: "
+ "テキストメッセージ"
+ "マルチメディアメッセージ"
+ "From: "
+ "To: "
+ "送信: "
+ "受信: "
+ "件名: "
+ "サイズ: "
+ "優先度: "
+ "SIM: "
+ "高"
+ "標準"
+ "低"
+ "SIM %s"
+ "差出人アドレスは非表示"
+ "添付ファイルの読み込み中はメッセージを送信できません。"
+ "添付ファイルを読み込めません。もう一度お試しください。"
+ "ネットワークの準備ができていません。もう一度お試しください。"
+ "テキストを削除"
+ "文字と数字の入力を切り替える"
+ "参加者を追加"
+ "参加者を確認"
+ "新しいスレッドを開始"
+ "この項目を選択する"
+ "動画を再生"
+ "ユーザーとオプション"
+ "デバッグ"
+ "ユーザーとオプション"
+ "全般"
+ "このスレッドのユーザー"
+ "発信"
+ "メッセージの送信"
+ "<small>%sから</small><:br/>メッセージを送信"
+
+ 写真を送信します
+ 写真を送信します
+
+
+ 音声を送信します
+ 音声を送信します
+
+
+ 動画を送信します
+ 動画を送信します
+
+
+ 連絡先カードを送信します
+ 連絡先カードを送信します
+
+
+ 添付ファイルを送信します
+ 添付ファイルを送信します
+
+
+ %d個の添付ファイルを送信する準備ができました
+ 1個の添付ファイルを送信する準備ができました
+
+ "フィードバックを送信"
+ "Google Playストアで表示"
+ "バージョン情報"
+ "バージョン%1$s"
+ "オープンソースライセンス"
+ "通知"
+ "添付ファイルの上限に達しました"
+ "添付ファイルを読み込めませんでした。"
+ "連絡先に追加しますか?"
+ "連絡先を追加"
+ "件名"
+ "件名: "
+ "%s%s"
+ "連絡先カードを読み込んでいます"
+ "連絡先カードを読み込めませんでした"
+ "連絡先カードを表示"
+
+ %d件の連絡先
+ %d件の連絡先
+
+ "連絡先カード"
+ "誕生日"
+ "メモ"
+ "メールを転送"
+ "返信"
+ "、他1人"
+ "、他%d人"
+ "SMSは無効になっています"
+ "送信するには、SMSを既定のSMSアプリとして設定してください"
+ "SMSを既定のSMSアプリとして設定してください"
+ "変更"
+ "メッセージを受信するには、SMSを既定のSMSアプリとして設定してください"
+ "SMSメッセージ送信用の優先SIMが選択されていません"
+ "このアプリは端末の所有者によって許可されていません。"
+ "OK"
+ "スレッドへの参加者が多すぎます"
+
+ 連絡先が無効です
+ 連絡先が無効です
+
+ "カメラ画像を読み込めませんでした"
+ "あなた: "
+ "%s: "
+ "下書き"
+ "新しいスレッドを開始すると、ここにリストが表示されます"
+ "アーカイブされたスレットがここに表示されます"
+ "スレッドを読み込んでいます…"
+ "画像"
+ "音声クリップ"
+ "動画"
+ "連絡先カード"
+ "MMS"
+ "元に戻す"
+ "再試行"
+ "新しいメッセージを開始するには連絡先の名前か電話番号を入力してください"
+ "ブロック"
+ "%sさんをブロック"
+ "%sさんのブロックを解除"
+ "%sをブロックしますか?"
+ "この番号からのメッセージは引き続き受信しますが、通知は表示されなくなります。このスレッドはアーカイブされます。"
+ "ブロック中の連絡先"
+ "ブロックを解除"
+ "ブロック中の連絡先"
+ "ドキュメントライブラリから画像を選択"
+ "メールを送信しています"
+ "メッセージを送信しました"
+ "モバイルデータがOFFになっています。設定を確認してください。"
+ "機内モードではメッセージを送信できません"
+ "メッセージを送信できませんでした"
+ "メッセージをダウンロードしました"
+ "モバイルデータがOFFになっています。設定を確認してください。"
+ "機内モードではメッセージをダウンロードできません"
+ "メッセージをダウンロードできませんでした"
+ "0"
+ "1"
+ "2"
+ "3"
+ "4"
+ "5"
+ "6"
+ "7"
+ "8"
+ "9"
+ "メッセージを送信できません(%1$s)、エラー%2$d"
+ "メッセージを送信できません(不明な携帯通信会社)、エラー%1$d"
+ "Fwd: %s"
+ "メッセージの送信失敗: サービスがネットワークで有効になっていません"
+ "メッセージの送信失敗: 無効な宛先アドレスです"
+ "メッセージの送信失敗: 無効なメッセージです"
+ "メッセージの送信失敗: サポートされていないコンテンツです"
+ "メッセージの送信失敗: サポートされていないメッセージです"
+ "メッセージの送信失敗: 大きすぎます"
+ "新しいメッセージ"
+ "表示"
+ "画像"
+ "適切なアプリが見つかりませんでした"
+ "宛先を削除"
+ "新しいメッセージ"
+ "キャンセル"
+ "アクセスポイントの編集"
+ "未設定"
+ "名前"
+ "APN"
+ "MMSC"
+ "MMSプロキシ"
+ "MMSポート"
+ "MCC"
+ "MNC"
+ "APNタイプ"
+ "APNを削除"
+ "新しいAPN"
+ "保存"
+ "破棄"
+ "[名前]欄は必須です。"
+ "APNは必須です。"
+ "MCC欄は3桁で指定してください。"
+ "MNC欄は2桁か3桁で指定してください。"
+ "デフォルトのAPN設定を復元しています。"
+ "デフォルトにリセット"
+ "デフォルトのAPN設定にリセットしました。"
+ "無題"
+ "アクセスポイント名"
+ "APN"
+ "新しいAPN"
+ "このユーザーはアクセスポイント名設定を利用できません"
+ "クリップボードにコピーしますか?"
+ "コピー"
+ "宛先: %s"
+ "全般"
+ "詳細設定"
+ "全般設定"
+ "詳細設定"
+ "「%s」SIM"
+ "SMSメッセージを全員に個別に送信し、返信があなただけに返されるようにします"
+ "1つのMMSを全員に送信します"
+ "不明な番号"
+ "新しいメッセージ"
+ "新しいメッセージがあります。"
+ "SIMの切り替え"
+ "SIMの切り替え(%1$sを選択済み)"
+ "件名を編集"
+ "SIMを選択するか件名を編集します"
+ "録音するには押し続けます"
+ "新しいスレッドを開始"
+ "SMS"
+ "SMSリスト"
+ "SMS"
+ "新しいメッセージ"
+ "スレッドリスト"
+ "スレッドを読み込んでいます"
+ "メールを読み込んでいます"
+ "他のスレッドを見る"
+ "他のメールを見る"
+ "スレッドを削除しました"
+ "スレッドを削除しました。タップしてSMSの別のスレッドを表示します"
+ "ブロックしました"
+ "ブロックを解除しました"
+ "空き容量が少なくなっています。一部のデータが失われる可能性があります。"
+ "添付ファイルの選択"
+ "選択の確認"
+ "%d件選択済み"
+ "添付ファイルを1つ以上削除してから、もう一度お試しください。"
+ "メッセージの送信を試すことはできますが、添付ファイルを1つ以上削除しないと配信されない可能性があります。"
+ "送信できる動画は1件のメッセージにつき1本までです。追加した動画を削除してもう一度お試しください。"
+ "SMSで添付ファイルを読み込めませんでした。"
+ "このまま送信"
+ "スレッドを開始できませんでした"
+ "%1$s(%2$s)"
+ "%sが選択されています"
+
diff --git a/res/values-ka-rGE/arrays.xml b/res/values-ka-rGE/arrays.xml
new file mode 100644
index 0000000..0f50610
--- /dev/null
+++ b/res/values-ka-rGE/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "უსათაურო"
+ "nosubject"
+
+
+ "კი"
+ "არა"
+ "კარგი"
+ "ჰე-ჰე"
+ "დიდი მადლობა"
+ "თანახმა ვარ"
+ "მშვენიერია"
+ "მოვდივარ"
+ "კარგი, მოგვიანებით შეგეხმიანები"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..9605c6b
--- /dev/null
+++ b/res/values-ka-rGE/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "შეტყობინებები"
+ "შეტყობინებები"
+ "მიმოწერის არჩევა"
+ "პარამეტრები"
+ "წერილის გაგზავნა"
+ "დანართის დამატება"
+ "დახმარება"
+ "მოგესალმებით"
+ "გამოტოვება"
+ "შემდეგი >"
+ "შემდეგი"
+ "გასვლა"
+ "პარამეტრები >"
+ "პარამეტრები"
+ "შეტყობინებები საჭიროებს ნებართვას SMS-ზე, ტელეფონზე და კონტაქტებზე."
+ "ნებართვების შეცვლა შეგიძლიათ აქ: პარამეტრები > აპები > შეტყობინებები > ნებართვები."
+ "ნებართვების შეცვლა შეგიძლიათ აქ: პარამეტრები, აპები, შეტყობინებები, ნებართვები."
+ "ხშირად გამოყენებული კონტაქტები"
+ "ყველა კონტაქტი"
+ "%s-ზე გაგზავნა"
+ "სურათების ან ვიდეოს გადაღება"
+ "ამ მოწყობილობიდან სურათების არჩევა"
+ "აუდიოს ჩაწერა"
+ "ფოტოს არჩევა"
+ "მედია შერჩეულია."
+ "მედია არ არის შერჩეული."
+ "%d შერჩეულია"
+ "სურათის %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "სურათი"
+ "აუდიოს ჩაწერა"
+ "გაზიარება"
+ "ახლახანს"
+ "ახლა"
+
+ %d წთ.
+ %d წთ.
+
+
+ %d საათის
+ %d საათის
+
+
+ %d დღის
+ %d დღის
+
+
+ %d კვირის
+ კვირის
+
+
+ %d თვის
+ თვის
+
+
+ %d წლის
+ წლის
+
+ "Class 0 შეტყობინება"
+ "შენახვა"
+ "მოწყობილობის მეხსიერებაში თავისუფალი სივრცე ცოტაა. შეტყობინებები ავტომატურად წაშლის ძველ შეტყობინებებს მეხსიერების გასათავისუფლებლად."
+ "თავისუფალი ადგილი იწურება"
+ "შეტყობინებებმა შესაძლოა ვერ მოახერხოს შეტყობინებების გაგზავნა ან მიღება მანამ, სანამ თქვენს მოწყობილობაზე ხელმისაწვდომი არ გახდება მეტი სივრცე."
+ "SMS სივრცე იწურება. შესაძლოა, მოგიწიოთ ძველი შეტყობინებების წაშლა"
+ "დაადასტურეთ თქვენი ტელეფონის ნომერი"
+ "ეს ერთჯერადი ნაბიჯი უზრუნველყოფს, რომ შეტყობინებებმა სწორად მოგაწოდოთ ჯგუფური შეტყობინებები."
+ "ტელეფონის ნომერი"
+ "ყველა შეტყობინების წაშლა, რომელსაც მედია აქვს"
+ "%s-ზე ძველი შეტყობინებების წაშლა"
+ "%s-ზე ძველი შეტყობინებების ავტომატური წაშლა"
+ "იგნორირება"
+ "წაიშალოს ყველა შეტყობინება, რომელსაც მედია აქვს?"
+ "წაიშალოს %s-ზე ძველი შეტყობინებები?"
+ "გსურთ %s-ზე უფრო ძველი შეტყობინებების წაშლა და ავტომატური წაშლის ჩართვა?"
+ "%s თქვა"
+ "თქვენ სთქვით,"
+ "შეტყობინება %s -საგან"
+ "თქვენ გააგზავნეთ შეტყობინება"
+ "იგზავნება..."
+ "არ გაიგზავნა. შეეხეთ ისევ საცდელად."
+ "არ გაიგზავნა. მიმდინარეობს ხელახლა ცდა…"
+ "ხელახლა გაგზავნა ან წაშლა"
+ "გამოიძახეთ საგანგებო სამსახურები ხმოვანი ზარით. ტექსტური შეტყობინების გაგზავნა ამჟამად შეუძლებელია."
+ "ვერ განხორციელდა"
+ "ახალი ჩამოსატვირთი MMS შეტყობინება"
+ "ახალი MMS შეტ"
+ "ჩამოტვირთვა ვერ მოხერხდა"
+ "ხელახლა საცდელად შეეხეთ"
+ "შეეხეთ ჩამოსატვირთად"
+ "ჩამოტვირთვა ან წაშლა"
+ "მიმდინარეობს ჩამოტვირთვა…"
+ "შეტყობინებას ვადა გაუვიდა ან მიუწვდომელია."
+ "ზომა: %1$s, ვადა: %2$s"
+ "გაგზავნა ვერ ხერხდება. მიმღები არასწორია."
+ "სერვისი არ გააქტიურებულა ქსელში"
+ "ქსელის პრობლემის გამო ვერ გაიგზავნა"
+ "შეტყობინებას ვადა გაუვიდა ან მიუწვდომელია."
+ "(თემის გარეშე)"
+ "უცნობი გამგზავნი"
+ "მიწოდებულია"
+ "%1$s შეტყობინების ჩამოტვირთვა ვერ მოხერხდა %2$s-დან."
+ "მცირე მეხსიერების გამო მონაცემთა ბაზასთან დაკავშირებული ოპერაციის დასრულება ვერ მოხერხდა"
+ "შეტყობინება ვერ გაიგზავნა"
+ "შეტყობინებებში ზოგიერთი შეტყობინება ვერ გაიგზავნა"
+
+ %d შეტყობინება %d მიმოწერაში
+ %d შეტყობინება ერთ მიმოწერაში
+
+ "შეტყობინება არ ჩამოტვირთულა"
+ "შეტყობინებებში ზოგიერთი შეტყობინება ვერ ჩამოიტვირთა"
+
+ %d შეტყობინება %d მიმოწერაში
+ %d შეტყობინება ერთ მიმოწერაში
+
+ "შეტყობინება ნომერზე %1$s ვერ გაიგზავნა"
+ "გამოიძახეთ საგანგებო სამსახურები ხმოვანი ზარით. ტექსტური შეტყობინების გაგზავნა ნომერზე %1$s ამჟამად შეუძლებელია."
+
+ %d ახალი შეტყობინება
+ ახალი შეტყობინება
+
+ "დაწყება"
+ "კამერა მიუწვდომელია"
+ "კამერა მიუწვდომელია"
+ "ვიდეო ჩაწერა მიუწვდომელია"
+ "მედიას შენახვა ვერ ვერხდება"
+ "ვერ ხორციელდება სურათის გადაღება"
+ "უკან"
+ "დაარქივებული"
+ "წაშლა"
+ "დაარქივება"
+ "დეარქივაცია"
+ "შეტყობინებების გამორთვა"
+ "შეტყობინებების ჩართვა"
+ "კონტაქტის დამატება"
+ "ჩამოტვირთვა"
+ "გაგზავნა"
+ "წაშლა"
+ "წავშალო ეს შეტყობინება?"
+ "ამ ქმედებას ვერ გააუქმებთ."
+ "წაშლა"
+
+ წაიშალოს ეს მიმოწერები?
+ წაიშალოს ეს მიმოწერა?
+
+ "წაშლა"
+ "გაუქმება"
+ "მიმღები:"
+ "მრავალი სურათის არჩევა"
+ "არჩევანის დადასტურება"
+ "+%d"
+ "ხმის ჩაწერა ვერ ხერხდენა. სცადეთ ისევ."
+ "ხმის დაკვრა ვერ ხერხდება. სცადეთ ისევ."
+ "ხმის ჩაწერა ვერ მოხერხდა. სცადეთ ისევ."
+ "შეეხეთ & დააყოვნეთ"
+ ", "
+ " "
+ ": "
+ " "
+ "სურათი"
+ "აუდიო კლიპი"
+ "ვიდეო"
+ "კონტაქტის ბარათი"
+ "ჩამოტვირთვა"
+ "SMS-ით პასუხი"
+ "MMS-ით პასუხი"
+ "პასუხი"
+
+ %d მონაწილე
+ %d მონაწილე
+
+ "მე"
+ "კონტაქტი დაბლოკილია & დაარქივებულია"
+ "კონტაქტი განბლოკილია & amp; დაუარქივებელი"
+ "%d დაარქივებული"
+ "%d დაუარქივებელი"
+ "შეტყობინებები გამორთულია"
+ "შეტყობინებები ჩართულია"
+ "მზად არის. შეეხეთ ხელახლა გაგზავნას."
+ "შეტყობინებები წარმატებით დაყენებულია ნაგულისხმევ SMS აპად."
+
+ დანართების გაუქმება
+ დანართის გაუქმება
+
+ "აუდიო დანართი"
+ "აუდიო დანართის ჩართვა"
+ "პაუზა"
+ "შეტყობინება %s-საგან: %s."
+ "%s-საგან შეტყობინების შეცდომა: %s. დრო: %s."
+ "შეტყობინება %s-საგან: %s. დრო: %s."
+ "%s-სთვის გაუგზავნელი შეტყობინება: %s. დრო: %s."
+ "იგზავნება შეტყობინება %s-სთვის: %s. დრო: %s."
+ "%s-სთვის შეტყობინების შეცდომა: %s. დრო: %s."
+ "შეტყობინება %s-სთვის: %s. დრო: %s."
+ "%s-საგან შეტყობინების შეცდომა: %s. დრო: %s. %s."
+ "შეტყობინება %s-საგან: %s. დრო: %s. %s."
+ "გაუგზავნელი შეტყობინება %s-სთვის: %s. დრო: %s."
+ "იგზავნება შეტყობინება %s-სთვის: %s. დრო: %s."
+ "%s-სთვის შეტყობინების შეცდომა: %s. დრო: %s."
+ "შეტყობინება %s-სთვის: %s. დრო: %s."
+ "შეტყობინების შეცდომა. შეეხეთ, რათა ხელახლა სცადოთ."
+ "საუბარი %s -სთან"
+ "თემის წაშლა"
+ "ვიდეოს გადაღება"
+ "ფოტოსურათის აღბეჭდვა"
+ "სურათის გადაღება"
+ "ვიდეოს ჩაწერის დაწყება"
+ "სრულეკრანიან კამერაზე გადართვა"
+ "წინა და უკანა კამერებს შორის გადართვა"
+ "ჩაწერის შეჩერება და ვიდეოს მიბმა"
+ "ვიდეოს ჩაწერის შეჩერება"
+ "შეტყობინებების ფოტოები"
+
+ %d ფოტო შენახულია ალბომში „%s“
+ %d ფოტო შენახულია ალბომში „%s“
+
+
+ %d ვიდეო შენახულია ალბომში „%s“
+ %d ვიდეო შენახულია ალბომში „%s“
+
+
+ %d მიმაგრებული ფაილი შენახულია ალბომში „%s“
+ %d მიმაგრებული ფაილი შენახულია ალბომში „%s“
+
+
+ %d მიმაგრებული ფაილი შენახულია „ჩამოტვირთვებში“
+ %d მიმაგრებული ფაილი შენახულია „ჩამოტვირთვებში“
+
+
+ შენახულია %d დანართი
+ შენახულია %d დანართი
+
+
+ %d დანართის შენახვა ვერ მოხერხდა
+ %d დანართის შენახვა ვერ მოხერხდა
+
+ "MMS დანართი შენახულია"
+ "პარამეტრები"
+ "დაარქივებული"
+ "დახურვა"
+ "MMS"
+ "გაფართოებული"
+ "გამართვა"
+ "შეტყობინებები"
+ "ხმა"
+ "დადუმებული"
+ "ვიბრაცია"
+ "დაბლოკილი"
+ "SMS მისვლის შეტყობინებები"
+ "ყოველ გაგზავნილ SMS-ზე მიწოდების დადასტურების მოთხოვნა"
+ "ავტო-მოძიება"
+ "MMS შეტყობინებების ავტომატურად ჩამოტვირთვა"
+ "ავტო ჩამოტვირთვა როუმინგში"
+ "როუმინგის დროს MMS-ის ავტომატური ჩამოტვირთვა"
+ "ჯგუფური შეტყობინება"
+ "მრავალი მიმღების შემთხვევაში ერთიანი შეტყობინების გასაგზავნად MMS-ის გამოყენება"
+ "ნაგულისხმევი SMS აპლიკაცია"
+ "ნაგულისხმევი SMS აპლიკაცია"
+
+
+ "თქვენი ტელეფონის ნომერი"
+ "უცნობი"
+ "გამავალი შეტყობინების ჟღერადობები"
+ "SMS-ის ჩაწერა"
+ "მიღებული SMS-ის დაუმუშავებელი მონაცემების გარე საცავის ფაილში ჩაწერა"
+ "MMS-ის ჩაწერა"
+ "მიღებული MMS-ის დაუმუშავებელი მონაცემების გარე საცავის ფაილში ჩაწერა"
+ "უსადენო გაფრთხილებები"
+ "შეტყობინების პარამეტრები"
+ "ტექსტის კოპირება"
+ "დეტალების ნახვა"
+ "წაშლა"
+ "გადაგზავნა"
+ "შეტყობინების მონაცემები"
+ "ტიპი: "
+ "ტექსტური შეტყობინება"
+ "მულტიმედია შეტყობინება"
+ "გამგზავნი: "
+ "მიმღები: "
+ "გაიგზავნა: "
+ "მიღებულია: "
+ "თემა: "
+ "ზომა: "
+ "პრიორიტეტი: "
+ "SIM: "
+ "მაღალი"
+ "ჩვეულებრივი"
+ "დაბალი"
+ "SIM %s"
+ "გამგზავნის მისამართი დამალულია"
+ "დანართების ჩატვირთვისას შეტყობინება ვერ გაიგზავნება."
+ "დანართი ვერ იტვირთება. სცადეთ ისევ."
+ "ქსელი მზად არ არის. ისევ სცადეთ."
+ "შემდეგის წაშლა"
+ "ტექსტისა და რიცხვების შეყვანას შორის გადართვა"
+ "მეტი მონაწილის დამატება"
+ "მონაწილეების დადასტურება"
+ "ახალი მიმოწერის დაწყება"
+ "ამ ერთეულის არჩევა"
+ "ვიდეოს დაკვრა"
+ "ხალხი & ვარიანტები"
+ "გამართვა"
+ "ხალხი & ვარიანტები"
+ "ზოგადი"
+ "ამ საუბრის მონაწილეები"
+ "დარეკვა"
+ "შეტყობინების გაგზავნა"
+ "შეტყობინების გაგზავნა<br/><small>%s-დან</small>"
+
+ ფოტოების გაგზავნა
+ ფოტოს გაგზავნა
+
+
+ აუდიო ჩანაწერების გაგზავნა
+ აუდიო ჩანაწერის გაგზავნა
+
+
+ ვიდეოების გაგზავნა
+ ვიდეოს გაგზავნა
+
+
+ კონტაქტის ბარათების გაგზავნა
+ კონტაქტის ბარათის გაგზავნა
+
+
+ დანართების გაგზავნა
+ დანართის გაგზავნა
+
+
+ %d დანართი მზად არის გასაგზავნად
+ გასაგზავნად მზად არის ერთი დანართი
+
+ "უკუკავშირის გაგზავნა"
+ "Google Play Store-ში ნახვა"
+ "ვერსიის ინფორმაცია"
+ "ვერსია %1$s"
+ "ღია კოდის ლიცენზიები"
+ "შეტყობინებები"
+ "მიღწეულია დანართების ლიმიტი"
+ "დანართი ვერ ჩაიტვირთა."
+ "დაემატოს კონტაქტებში?"
+ "კონტაქტის დამატება"
+ "თემა"
+ "თემა: "
+ "%s%s"
+ "იტვირთება კონტაქტის ბარათი"
+ "საკონტაქტო ბარათი ვერ იტვირთება"
+ "კონტაქტის ბარათის ნახვა"
+
+ %d კონტაქტი
+ %d კონტაქტი
+
+ "კონტაქტის ბარათები"
+ "დაბადების თარიღი"
+ "ჩანიშვნები"
+ "შეტყობინების გადაგზავნა"
+ "პასუხი"
+ "+1"
+ "+%d"
+ "SMS გამორთულია"
+ "გასაგზავნად დააყენეთ შეტყობინებები ნაგულისხმევ SMS აპად"
+ "დააყენეთ შეტყობინებები ნაგულისხმევ SMS აპად"
+ "შეცვლა"
+ "შეტყობინებების მისაღებად დააყენეთ შეტყობინებები ნაგულისხმევ SMS აპად"
+ "მოკლე ტექსტური შეტყობინებების გაგზავნისათვის, არ არის არჩეული უპირატესი SIM ბარათი"
+ "ეს აპი მოწყობილობის მფლობელის მიერ ნებადართული არ არის."
+ "კარგი"
+ "მიმოწერაში ძალიან ბევრი მონაწილეა"
+
+ კონტაქტები არასწორია
+ კონტაქტი არასწორია
+
+ "კამერის სურათი ვერ ჩაიტვირთა"
+ "თქვენ: "
+ "%s: "
+ "მონახაზი"
+ "როდესაც საუბარს წამოიწყებთ, ისინი აქ გამოჩნდება"
+ "დაარქივებული მიმოწერები აქ გამოჩნდება"
+ "მიმოწერები იტვირთება…"
+ "სურათი"
+ "აუდიო კლიპი"
+ "ვიდეო"
+ "კონტაქტის ბარათი"
+ "MMS"
+ "დაბრუნება"
+ "ხელახლა ცდა"
+ "ახალი შეტყობინების დასაწყებად შეიყვანეთ საკონტაქტო სახელი ან ტელეფონის ნომერი"
+ "დაბლოკვა"
+ "%s-ის დაბლოკვა"
+ "%s-ის განბლოკვა"
+ "%s-ის დაბლოკვა?"
+ "ამ ნომრიდან შეტყობინებებს კვლავ მიიღებთ, თუმცა შეხსენებები აღარ გამოგეგზავნებათ. ეს მიმოწერა დაარქივდება."
+ "დაბლოკილი კონტაქტები"
+ "განბლოკვა"
+ "დაბლოკილი კონტაქტები"
+ "აირჩიეთ სურათი დოკუმენტების ბიბლიოთეკიდან"
+ "შეტყობინება იგზავნება"
+ "შეტყობინება გაიგზავნა"
+ "მობილური ინტერნეტი გამორთულია. გადაამოწმეთ პარამეტრები."
+ "თვითმფრინავის რეჟიმში შეტყობინებების გაგზავნა ვერ ხერხდება"
+ "შეტყობინება ვერ გაიგზავნა"
+ "შეტყობინება გადმოწერილია"
+ "მობილური ინტერნეტი გამორთულია. გადაამოწმეთ პარამეტრები."
+ "თვითმფრინავის რეჟიმში შეტყობინების ჩამოტვირთვა ვერ ხორციელდება"
+ "შეტყობინების ჩამოტვირთვა ვერ ხორციელდება"
+ "ნული"
+ "ერთი"
+ "ორი"
+ "სამი"
+ "ოთხი"
+ "ხუთი"
+ "ექვსი"
+ "შვიდი"
+ "რვა"
+ "ცხრა"
+ "შეტყობინება ვერ იგზავნება: %1$s-ის შეცდომა %2$d"
+ "შეტყობინება ვერ იგზავნება უცნობი ოპერატორით, შეცდომა %1$d"
+ "Fwd: %s"
+ "შეტყობინება ვერ გაიგზავნა: სერვისი ქსელში გააქტიურებელი არ არის"
+ "შეტყობინება ვერ გაიგზავნა: სამიზნე მისამართი არასწორია"
+ "შეტყობინება ვერ გაიგზავნა: შეტყობინება არასწორია"
+ "შეტყობინება ვერ გაიგზავნა: კონტენტი მხარდაჭერილი არ არის"
+ "შეტყობინება ვერ გაიგზავნა: შეტყობინება მხარდაჭერილი არ არის"
+ "შეტყობინება არ გაიგზავნა: ის ძალიან დიდია"
+ "ახალი შეტყობინება"
+ "ნახვა"
+ "სურათი"
+ "შესაბამისი აპლიკაცია ვერ მოიძებნა"
+ "მიმღების ამოღება"
+ "ახალი შეტყობინება"
+ "გაუქმება"
+ "წვდომის წერტილის რედაქტირება"
+ "არ არის დაყენებული"
+ "სახელი"
+ "APN"
+ "MMSC"
+ "MMS პროქსი-სერვერი"
+ "MMS პორტი"
+ "MCC"
+ "MNC"
+ "APN ტიპი"
+ "APN-ის წაშლა"
+ "ახალი APN"
+ "შენახვა"
+ "გაუქმება"
+ "სახელის ველი არ შეიძლება იყოს ცარიელი."
+ "APN არ უნდა იყოს ცარიელი."
+ "MCC ველი უნდა შეიცავდეს 3 ციფრს."
+ "MNC ველი უნდა შეიცავდეს ორ ან სამ ციფრს."
+ "ნაგულისხმევი APN პარამეტრების აღდგენა."
+ "საწყის პარამეტრებზე ჩამოყრა"
+ "ნაგულისხმევი APN პარამეტრების აღდგენა დასრულებულია."
+ "უსათაურო"
+ "წვდომის წერტილის სახელები (APNs)"
+ "APN-ები"
+ "ახალი APN"
+ "წვდომის წერტილის (APN) პარამეტრები ამ მომხმარებლისათვის მიუწვდომელია"
+ "გსურთ ბუფერში კოპირება?"
+ "კოპირება"
+ "%s-ზე"
+ "ზოგადი"
+ "გაფართოებული"
+ "ძირითადი პარამეტრები"
+ "დამატებითი პარამეტრები"
+ "„%s“ SIM"
+ "ყველა მიმღებთან ინდივიდუალური SMS შეტყობინების გაგზავნა. პასუხებს მხოლოდ თქვენ მიიღებთ"
+ "ყველა მიმღებთან ერთი MMS-ის გაგზავნა"
+ "უცნობი ნომერი"
+ "ახალი შეტყობინება"
+ "ახალი შეტყობინება."
+ "SIM სელექტორი"
+ "არჩეულია %1$s, SIM სელექტორი"
+ "თემის რედაქტირება"
+ "აირჩიეთ SIM ან შეცვალეთ სათაური"
+ "აუდიო ჩაწერისათვის შეეხეთ და დააყოვნეთ"
+ "ახალი მიმოწერის დაწყება"
+ "შეტყობინებები"
+ "შეტყობინებების სია"
+ "შეტყობინებები"
+ "ახალი შეტყობინება"
+ "მიმოწერათა სია"
+ "მიმოწერები იტვირთება…"
+ "მიმდინარეობს შეტყობინებების ჩატვირთვა"
+ "მეტი მიმოწერის ნახვა"
+ "იხილეთ სხვა შეტყობინებები"
+ "მიმოწერა წაშლილია"
+ "მიმოწერა წაშლილია. შეეხეთ შეტყობინებების სხვა მიმოწერის საჩვენებლად"
+ "დაბლოკილი"
+ "განბლოკილი"
+ "შენახვის სივრცეში შემცირებულია. ზოგიერთი მონაცემი შეიძლება დაიკარგოს."
+ "დანართის არჩევა"
+ "არჩევანის დადასტურება"
+ "%d შერჩეულია"
+ "წაშალეთ ერთი ან რამდენიმე დანართი და ხელახლა სცადეთ."
+ "შეგიძლიათ სცადოთ შეტყობინების გაგზავნა, მაგრამ შეიძლება მისი მიწოდება ვერ მოხერხდეს, თუ არ წაშლით ერთ ან რამდენიმე დანართს."
+ "შეტყობინებით თქვენ შეგიძლიათ გააგზავნოთ მხოლოდ ერთი ვიდეო. გთხოვთ ამოშალეთ დამატებითი ვიდეოები და სცადეთ კიდევ ერთხელ."
+ "შეტყობინებებში დანართის ჩატვირთვა ვერ მოხერხდა."
+ "მაინც გაგზავნა"
+ "საუბრის დაწყება ვერ მოხერხდა"
+ "%1$s (%2$s)"
+ "შერჩეულია %s"
+
diff --git a/res/values-kk-rKZ/arrays.xml b/res/values-kk-rKZ/arrays.xml
new file mode 100644
index 0000000..b49d0cc
--- /dev/null
+++ b/res/values-kk-rKZ/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "тақырыпсыз"
+ "тақырып жоқ"
+
+
+ "Иә"
+ "Жоқ"
+ "Жарайды"
+ "Хехе"
+ "Рақмет"
+ "Келісемін"
+ "Жақсы"
+ "Жолдамын"
+ "Жарайды, кейінірек хабарласамын"
+ ":)"
+ ":("
+
+
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
new file mode 100644
index 0000000..5164592
--- /dev/null
+++ b/res/values-kk-rKZ/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Хабар алмасу"
+ "Хабар алмасу"
+ "Сөйлесуді таңдау"
+ "Параметрлер"
+ "Хабар жіберу"
+ "Тіркеме қосу"
+ "Анықтама"
+ "Қош келдіңіз"
+ "Өткізіп жіберу"
+ "Келесі >"
+ "Келесі"
+ "Шығу"
+ "Параметрлер >"
+ "Параметрлер"
+ "Messaging қолданбасына SMS, \"Телефон\" және \"Контактілер\" қолданбаларына рұқсат қажет."
+ "Рұқсаттарды \"Параметрлер\" > \"Қолданбалар\" > \"Messaging\" > \"Рұқсаттар\" тармағында өзгертуге болады."
+ "Рұқсаттарды \"Параметрлер\", \"Қолданбалар\", \"Messaging\", \"Рұқсаттар\" тармағында өзгерте аласыз."
+ "Жиі қолданылатын"
+ "Барлық контактілер"
+ "%s орнына жіберу"
+ "Суреттер немесе бейне түсіру"
+ "Осы құрылғыдан кескіндерді таңдау"
+ "Аудио жазу"
+ "Фотосуретті таңдау"
+ "Медиа таңдалды."
+ "Медиадан таңдау алынды."
+ "%d таңдалды"
+ "кескін %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "кескін"
+ "Аудио жазу"
+ "Бөлісу"
+ "Қазір ғана"
+ "Қазір"
+
+ %d мин.
+ %d мин.
+
+
+ %d сағат
+ %d сағат
+
+
+ %d күн
+ %d күн
+
+
+ %d апта
+ апта
+
+
+ %d ай
+ ай
+
+
+ %d жыл
+ жыл
+
+ "0 сыныпты хабар"
+ "Сақтау"
+ "Құрылғыдағы бос орын аз. \"Хабар алмасу\" орын босату үшін ескі хабарларды автоматты түрде жояды."
+ "Жадта бос орын бітуде"
+ "\"Хабар алмасу\" қолданбасы құрылғыда көбірек бос орын қол жетімді болғанша хабарлар жібере немесе ала алмауы мүмкін."
+ "SMS жадында орын аз. Хабарларды жою керек болуы мүмкін."
+ "Телефон нөміріңізді растау"
+ "Бұл бір реттік қадам Messaging қолданбасының топтық хабарларды тиісті түрде жеткізуін қамтамасыз етеді."
+ "Телефон нөмірі"
+ "Тасушы арқылы барлық хабарларды жою"
+ "%s уақыттан асқан хабарларды жою"
+ "%s ескірек хабарларды автоматты түрде жою"
+ "Елемеу"
+ "Медиа бар барлық хабарларды жою керек пе?"
+ "%s ескірек хабарларды жою керек пе?"
+ "%s ескірек хабарларды жою және автоматты түрде жоюды қосу керек пе?"
+ "%s айтты"
+ "Сіз айттыңыз"
+ "Хабар, кімнен: %s"
+ "Сіз хабар жібердіңіз"
+ "Жіберілуде…"
+ "Жіберілмеді. Әрекетті қайталау үшін түртіңіз."
+ "Жіберілмеді. Әрекет қайталануда…"
+ "Қайта жіберу немесе жою"
+ "Жедел қызметтерге дауыстық қоңырау соғыңыз. Бұл ретте мәтіндік хабарды жеткізу мүмкін болмады."
+ "Сәтсіз аяқталды"
+ "Жүктейтін жаңа MMS хабары бар"
+ "Жаңа MMS хабары"
+ "Жүктеу мүмкін болмады"
+ "Әрекетті қайталау үшін түртіңіз"
+ "Жүктеу үшін түртіңіз"
+ "Жүктеу немесе жою"
+ "Жүктелуде…"
+ "Хабар мерзімі бітті немесе ол қол жетімді емес"
+ "өлшемі: %1$s, мерзімі бітетін уақыт: %2$s"
+ "Жіберу мүмкін емес. Алушы жарамсыз."
+ "Қызмет желіде белсендірілмеген"
+ "Желілік мәселеге байланысты жіберу мүмкін болмады"
+ "Хабар мерзімі бітті немесе ол қол жетімді емес"
+ "(Тақырыпсыз)"
+ "Белгісіз хабар жіберуші"
+ "Жеткізілді"
+ "%1$s хабарын %2$s арқылы жүктеу мүмкін болмады."
+ "Жад көлемінің аз болуына байланысты дерекқор әрекетін аяқтау мүмкін болмады"
+ "Хабар жіберілмеді"
+ "Messaging қолданбасында кейбір хабарлар жіберілмеген"
+
+ %d сөйлесуде %d хабар
+ бір сөйлесуде %d хабар
+
+ "Хабар жүктелмеген"
+ "Messaging қолданбасында кейбір хабарлар жүктелмеген"
+
+ %d сөйлесуде %d хабар
+ бір сөйлесуде %d хабар
+
+ "%1$s нөміріне хабар жіберілмеді"
+ "Жедел қызметтерге дауыстық қоңырау соғыңыз. Бұл ретте %1$s нөміріне мәтіндік хабарды жеткізу мүмкін болмады."
+
+ %d жаңа хабар
+ Жаңа хабар
+
+ "Бастау"
+ "Камера қол жетімді емес"
+ "Камера қол жетімді емес"
+ "Бейне түсіру қол жетімді емес"
+ "Медианы сақтау мүмкін емес"
+ "Сурет түсіру мүмкін емес"
+ "Артқа"
+ "Мұрағатталды"
+ "Жою"
+ "Мұрағаттау"
+ "Мұрағаттан шығару"
+ "Хабарландыруларды өшіру"
+ "Хабарландыруларды қосу"
+ "Контакт қосу"
+ "Жүктеу"
+ "Жіберу"
+ "Жою"
+ "Бұл хабарды жою қажет пе?"
+ "Бұл әрекетті болдырмау мүмкін емес."
+ "Жою"
+
+ Осы сөйлесулерді жою қажет пе?
+ Осы сөйлесуді жою қажет пе?
+
+ "Жою"
+ "Бас тарту"
+ "Кімге"
+ "Бірнеше кескінді таңдау"
+ "Таңдауды растау"
+ "+%d"
+ "Аудионы жазу мүмкін емес. Әрекетті қайталаңыз."
+ "Аудионы ойнату мүмкін емес. Әрекетті қайталаңыз."
+ "Аудионы сақтау мүмкін болмады. Әрекетті қайталаңыз."
+ "Түрту және ұстап тұру"
+ ", "
+ " "
+ ": "
+ " "
+ "Фотосурет"
+ "Аудиоклип"
+ "Бейне"
+ "Контакт карточкасы"
+ "Жүктеу"
+ "SMS арқылы жауап беру"
+ "MMS ар. жау. б."
+ "Жауап беру"
+
+ %d қатысушы
+ %d қатысушы
+
+ "Мен"
+ "Контакт бөгелді және мұрағатталды"
+ "Контакт құлыптан босатылды және мұрағаттан шығарылды"
+ "%d мұрағатталды"
+ "%d мұрағаттан шығарылды"
+ "Хабарландырулар өшірілген"
+ "Хабарландырулар қосылған"
+ "Бәрі орнатылды. «Қайта жіберу» пәрменін түртіңіз."
+ "\"Хабар алмасу\" қолданбасы әдепкі SMS қолданбасы ретінде сәтті орнатылды."
+
+ Тіркемелерді алып тастау
+ Тіркемені алып тастау
+
+ "Аудио тіркеме"
+ "Аудио тіркемені ойнату"
+ "Кідірту"
+ "%s хабары: %s."
+ "%s сәтсіз хабары: %s. Уақыт: %s."
+ "%s хабары: %s. Уақыт: %s."
+ "%s тобына жіберілмеген хабар: %s. Уақыт: %s."
+ "%s тобына хабар жіберілуде: %s. Уақыт: %s."
+ "%s тобына сәтсіз хабар: %s. Уақыт: %s."
+ "%s тобына хабар: %s. Уақыт: %s."
+ "%s сәтсіз хабары: %s. Уақыт: %s. %s."
+ "%s хабары: %s. Уақыт: %s. %s."
+ "%s тобына жіберілмеген хабар: %s. Уақыт: %s."
+ "%s тобына хабар жіберілуде: %s. Уақыт: %s."
+ "%s тобына сәтсіз хабар: %s. Уақыт: %s."
+ "%s тобына хабар: %s. Уақыт: %s."
+ "Сәтсіз хабар. Қайталау үшін түртіңіз."
+ "%s адаммен сөйлесу"
+ "Тақырыпты жою"
+ "Бейне түсіру"
+ "Фотосурет түсіру"
+ "Сурет түсіру"
+ "Бейне жазуды бастау"
+ "Толық экранды камераға ауысу"
+ "Алдыңғы және артқы камера арасында ауысу"
+ "Жазуды тоқтату және бейне тіркеу"
+ "Бейне жазуды тоқтату"
+ "Messaging фотосуреттері"
+
+ %d фотосурет «%s» альбомына сақталды
+ %d фотосурет «%s» альбомына сақталды
+
+
+ %d бейне «%s» альбомына сақталды
+ %d бейне «%s» альбомына сақталды
+
+
+ %d тіркеме «%s» альбомына сақталды
+ %d тіркеме «%s» альбомына сақталды
+
+
+ %d тіркеме «Жүктеулер» ішіне сақталды
+ %d тіркеме «Жүктеулер» ішіне сақталды
+
+
+ %d тіркеме сақталды
+ %d тіркеме сақталды
+
+
+ %d тіркемені сақтау мүмкін болмады
+ %d тіркемені сақтау мүмкін болмады
+
+ "MMS тіркемесі сақталды"
+ "Параметрлер"
+ "Мұрағатталды"
+ "Жабу"
+ "MMS"
+ "Кеңейтілген"
+ "Күйін келтіру"
+ "Хабарландырулар"
+ "Дыбыс"
+ "Үнсіз"
+ "Дірілдеу"
+ "Бөгелген"
+ "SMS жеткізу туралы есептер"
+ "Әр жіберілген SMS үшін жеткізу туралы есепті сұрау"
+ "Авто шығарып алу"
+ "MMS хабарларын автоматты түрде шығарып алу"
+ "Роуминг кезінде авто-шығарып алу"
+ "Роумингте MMS автоматты түрде шығарып алу"
+ "Топтық хабар алмасу"
+ "Бірнеше алушыға бір хабар жіберу үшін MMS пайдалану"
+ "Әдепкі SMS қолданбасы"
+ "Әдепкі SMS қолданбасы"
+
+
+ "Телефон нөміріңіз"
+ "Белгісіз"
+ "Шығыс хабар дыбыстары"
+ "SMS дампын сақтау"
+ "Алынған SMS өңделмеген деректерінің дампын сыртқы қойма файлына сақтау"
+ "MMS дампын сақтау"
+ "Алынған MMS өңделмеген деректерінің дампын сыртқы қойма файлына сақтау"
+ "Сымсыз дабылдар"
+ "Хабар опциялары"
+ "Мәтінді көшіру"
+ "Мәліметтерді көру"
+ "Жою"
+ "Қайта жіберу"
+ "Хабар мәліметтері"
+ "Tүрі: "
+ "Мәтіндік-хабар"
+ "Mультимедиалық хабар"
+ "Кімнен: "
+ "Кімге: "
+ "Жіберілді: "
+ "Қабылданды: "
+ "Тақырып: "
+ "Өлшем: "
+ "Басымдық: "
+ "SIM: "
+ "Жоғары"
+ "Қалыпты"
+ "Төмен"
+ "SIM %s"
+ "Жіберуші мекенжайы жасырын"
+ "Тіркемелерді жүктеу кезінде хабар жіберу мүмкін емес."
+ "Тіркемені жүктеу мүмкін емес. Әрекетті қайталаңыз."
+ "Желі дайын емес. Әрекетті қайталаңыз."
+ "Мәтінді жою"
+ "Мәтінді және сандарды енгізу арасында ауысу"
+ "Қосымша қатысушыларды қосу"
+ "Қатысушыларды растау"
+ "Жаңа сөйлесуді бастау"
+ "Осы элементті таңдау"
+ "Бейнені ойнату"
+ "Адамдар және опциялар"
+ "Күйін келтіру"
+ "Адамдар және опциялар"
+ "Жалпы"
+ "Осы сөйлесудегі адамдар"
+ "Қоңырау шалу"
+ "Хабарды жіберу"
+ "<br/><small>%s</small> картасынан хабар жіберу"
+
+ Фотосуреттер жіберу
+ Фотосурет жіберу
+
+
+ Аудиолар жіберу
+ Аудио жіберу
+
+
+ Бейнелер жіберу
+ Бейне жіберу
+
+
+ Контакті карточкаларын жіберу
+ Контакті карточкасын жіберу
+
+
+ Тіркемелер жіберу
+ Тіркеме жіберу
+
+
+ %d тіркеме жіберуге дайын
+ Бір тіркеме жіберуге дайын
+
+ "Пікір жіберу"
+ "Google Play Store дүкенінде көру"
+ "Нұсқа туралы ақпарат"
+ "Нұсқа: %1$s"
+ "Ашық бастапқы код лицензиялары"
+ "Хабарландырулар"
+ "Тіркеме шегіне жеттіңіз"
+ "Тіркемені жүктеу сәтсіз аяқталды."
+ "Контактілерге қосу керек пе?"
+ "Контакт қосу"
+ "Тақырып"
+ "Тақырып: "
+ "%s%s"
+ "Контакт карточкасы жүктелуде"
+ "Контакт картасын жүктеу мүмкін болмады"
+ "Контакт карточкасын көру"
+
+ %d контакт
+ %d контакт
+
+ "Контакт карталары"
+ "Туған күн"
+ "Ескертпелер"
+ "Хабарды қайта жіберу"
+ "Жауап беру"
+ "+1"
+ "+%d"
+ "SMS өшірілген"
+ "Жіберу үшін \"Хабар алмасу\" қолданбасын әдепкі SMS қолданбасы ретінде орнатыңыз"
+ "\"Хабар алмасу\" қолданбасын әдепкі SMS қолданбасы ретінде орнату"
+ "Өзгерту"
+ "Хабарлар алу үшін Messaging қолданбасын әдепкі SMS қолданбасы ретінде орнатыңыз"
+ "SMS хабарларын жіберу үшін таңдаулы SIM таңдалмаған"
+ "Құрылғы иесі бұл қолданбаға рұқсат етпеген."
+ "Жарайды"
+ "Сөйлесуде қатысушылар тым көп"
+
+ Жарамсыз контактілер
+ Жарамсыз контакті
+
+ "Камера кескінін жүктеу мүмкін болмады"
+ "Сіз: "
+ "%s: "
+ "Жоба"
+ "Басталған жаңа сөйлесуді осы жерде тізімнен көресіз"
+ "Мұнда мұрағатталған сөйлесулер көрсетіледі"
+ "Сөйлесулер жүктелуде…"
+ "Сурет"
+ "Аудиоклип"
+ "Бейне"
+ "Контакт карточкасы"
+ "MMS"
+ "Болдырмау"
+ "Қайталау"
+ "Жаңа хабарды бастау үшін контакт атын немесе телефон нөмірін енгізіңіз"
+ "Бөгеу"
+ "%s бөгеу"
+ "%s бөгеуден шығару"
+ "%s бөгеу керек пе?"
+ "Сіз осы нөмірден хабарлар алуды жалғастырасыз, бірақ енді хабардар етілмейсіз. Бұл сөйлесу мұрағатталады."
+ "Бөгелген контактілер"
+ "БӨГЕУДЕН ШЫҒАРУ"
+ "Бөгелген контактілер"
+ "Құжаттар кітапханасынан кескінді таңдау"
+ "Хабар жіберілуде"
+ "Хабар жіберілді"
+ "Ұялы деректер өшірілген. Параметрлерді тексеріңіз."
+ "Ұшақ режимінде хабарлар жіберу мүмкін емес"
+ "Хабарды жіберу мүмкін болмады"
+ "Хабар жүктелді"
+ "Ұялы деректер өшірілген. Параметрлерді тексеріңіз."
+ "Ұшақ режимінде хабарларды жүктеу мүмкін емес"
+ "Хабарды жүктеу мүмкін болмады"
+ "Нөл"
+ "Бір"
+ "Екі"
+ "Үш"
+ "Төрт"
+ "Бес"
+ "Алты"
+ "Жеті"
+ "Сегіз"
+ "Тоғыз"
+ "%1$s арқылы хабар жіберілмейді, %2$d қатесі"
+ "Белгісіз оператормен хабар жіберілмейді, %1$d қатесі"
+ "Қайта жіберілген: %s"
+ "Хабар жіберілмеді, желіде қызмет белсендірілмеген"
+ "Хабар жіберілмеді: жарамсыз межелі мекенжай"
+ "Хабар жіберілмеді: жарамсыз хабар"
+ "Хабар жіберілмеді: қолдау көрсетілмейтін мазмұн"
+ "Хабар жіберілмеді: қолдау көрсетілмейтін хабар"
+ "Хабар жіберілмеді: тым үлкен"
+ "Жаңа хабар"
+ "Көру"
+ "Кескін"
+ "Тиісті қолданбаны табу мүмкін болмады"
+ "Алушыны жою"
+ "Жаңа хабар"
+ "Бас тарту"
+ "Кіру нүктесін өңдеу"
+ "Орнатылмаған"
+ "Аты"
+ "APN"
+ "MMSC"
+ "MMS прокси"
+ "MMS порты"
+ "MCC"
+ "MNC"
+ "APN түрі"
+ "APN жою"
+ "Жаңа APN"
+ "Сақтау"
+ "Алып тастау"
+ "Атау өрісі бос болмауы тиіс."
+ "APN бос болмауы тиіс."
+ "MCC өрісі 3 цифрдан тұруы тиіс."
+ "MNC өрісі 2 немесе 3 цифрдан тұруы тиіс."
+ "Әдепкі APN параметрлерін қалпына келтіру."
+ "Әдепкі параметрлерге қалпына келтіру"
+ "Әдепкі APN параметрлерін қалпына келтіру аяқталды."
+ "Атаусыз"
+ "Кіру нүктесі атаулары"
+ "APNs (Кіру нүктесі атаулары)"
+ "Жаңа APN"
+ "Кіру нүктесі атауының параметрлері осы пайдаланушы үшін қол жетімді емес"
+ "Аралық сақтағышқа көшіру керек пе?"
+ "Көшіру"
+ "%s картасына"
+ "Жалпы"
+ "Кеңейтілген"
+ "Жалпы параметрлер"
+ "Қосымша параметрлер"
+ "«%s» SIM"
+ "Барлық алушыларға SMS хабарларын жіберіңіз. Жауаптарды тек сіз аласыз"
+ "Барлық алушыларға бір MMS жіберу"
+ "Белгісіз нөмір"
+ "Жаңа хабар"
+ "Жаңа хабар"
+ "SIM таңдағыш"
+ "%1$s таңдалды, SIM таңдағыш"
+ "Тақырыпты өңдеу"
+ "SIM картасын таңдау немесе тақырыпты өңдеу"
+ "Аудио жазу үшін түртіп, ұстап тұрыңыз"
+ "Жаңа сөйлесуді бастау"
+ "Хабар алмасу"
+ "Хабар алмасу тізімі"
+ "Хабар алмасу"
+ "Жаңа хабар"
+ "Сөйлесімдер тізімі"
+ "Сөйлесулер жүктелуде"
+ "Хабарлар жүктелуде"
+ "Көбірек сөйлесулерді көру"
+ "Қосымша хабарларды көру"
+ "Сөйлесу жойылды"
+ "Сөйлесу жойылды. Басқа \"Хабар алмасу\" сөйлесуін көрсету үшін түртіңіз"
+ "Бөгелген"
+ "Бөгеуден шығарылған"
+ "Жадтағы бос орын аз. Кейбір деректер жоғалуы мүмкін."
+ "Тіркемелерді таңдау"
+ "Таңдауды растау"
+ "%d таңдалды"
+ "Бір немесе бірнеше тіркемені жойып, әрекетті қайталаңыз."
+ "Хабарды жіберіп көре аласыз, бірақ бір немесе бірнеше тіркемені жоймасаңыз, ол жеткізілмеуі мүмкін."
+ "Әр хабарламада бір ғана бейне жіберуге болады. Қосымша бейнелерді жойып, әрекетті қайталаңыз."
+ "Messaging тіркемені жүктей алмады."
+ "Бәрібір жіберу"
+ "Сөйлесуді бастау мүмкін болмады"
+ "%1$s (%2$s)"
+ "%s таңдалған"
+
diff --git a/res/values-km-rKH/arrays.xml b/res/values-km-rKH/arrays.xml
new file mode 100644
index 0000000..69f6e0d
--- /dev/null
+++ b/res/values-km-rKH/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "គ្មានប្រធានបទ"
+ "គ្មានប្រធានបទ"
+
+
+ "បាទ/ចាស"
+ "ទេ"
+ "យល់ព្រម"
+ "ហេហេ"
+ "អរគុណ"
+ "ខ្ញុំយល់ព្រម"
+ "ល្អ"
+ "នៅតាមផ្លូវ"
+ "យល់ព្រម ខ្ញុំនឹងទាក់ទងអ្នកពេលក្រោយ"
+ ":)"
+ ":("
+
+
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..1806cc7
--- /dev/null
+++ b/res/values-km-rKH/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "ការផ្ញើសារ"
+ "ការផ្ញើសារ"
+ "ជ្រើសរើសការសន្ទនា"
+ "ការកំណត់"
+ "ផ្ញើសារ"
+ "បន្ថែមឯកសារភ្ជាប់"
+ "ជំនួយ"
+ "សូមស្វាគមន៍"
+ "រំលង"
+ "បន្ទាប់ >"
+ "បន្ទាប់"
+ "ចេញ"
+ "ការកំណត់ >"
+ "ការកំណត់"
+ "ការផ្ញើសារត្រូវការសិទ្ធិអនុញ្ញាតដើម្បីប្រើសារ SMS, ទូរស័ព្ទ និងទំនាក់ទំនង។"
+ "អ្នកអាចប្តូរសិទ្ធិអនុញ្ញាតនៅក្នុង ការកំណត់ > កម្មវិធី > ការផ្ញើសារ > សិទិ្ធអនុញ្ញាត។"
+ "អ្នកអាចប្តូរសិទ្ធិអនុញ្ញាតនៅក្នុង ការកំណត់ , កម្មវិធី, ការផ្ញើសារ, សិទ្ធិអនុញ្ញាត។"
+ "ញឹកញាប់"
+ "ទំនាក់ទំនងទាំងអស់"
+ "ផ្ញើទៅ %s"
+ "ថតរូបភាព ឬវីដេអូ"
+ "ជ្រើសរូបភាពពីឧបករណ៍នេះ"
+ "ថតសំឡេង"
+ "ជ្រើសរូបថត"
+ "បានជ្រើសឯកសារកំសាន្ត។"
+ "បានលុបការជ្រើសឯកសារកំសាន្ត។"
+ "បានជ្រើស %d"
+ "រូបភាព %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "រូបភាព"
+ "ថតសំឡេង"
+ "ចែករំលែក"
+ "ថ្មីៗនេះ"
+ "ឥឡូវ"
+
+ %d នាទី
+ %d នាទី
+
+
+ %d ម៉ោង
+ %d ម៉ោង
+
+
+ %d ថ្ងៃ
+ %d ថ្ងៃ
+
+
+ %d សប្តាហ៍
+ មួយសប្តាហ៍
+
+
+ %d ខែ
+ មួយខែ
+
+
+ %d ឆ្នាំ
+ មួយឆ្នាំ
+
+ "សារថ្នាក់ ០"
+ "រក្សាទុក"
+ "ឧបករណ៍នៅសល់ទំហំផ្ទុកតិច។ ការផ្ញើសារនឹងលុបសារចាស់ៗដើម្បីធ្វើឲ្យមានទំហំផ្ទុកទំនេរ។"
+ "អស់ទំហំផ្ទុក"
+ "ការផ្ញើសារអាចនឹងមិនផ្ញើ ឬទទួលសារទេ រហូតដល់មានទំហំផ្ទុកបន្ថែមទៀតនៅលើឧបករណ៍របស់អ្នក។"
+ "ជិតអស់ទំហំផ្ទុកសារ SMS ។ អ្នកអាចលុបសារមួយចំនួន។"
+ "បញ្ជាក់លេខទូរស័ព្ទរបស់អ្នក"
+ "ជំហានមួយលើកនេះធានាថាការផ្ញើសារនឹងបញ្ជូនសារក្រុមរបស់អ្នកបានត្រឹមត្រូវ។"
+ "លេខទូរស័ព្ទ"
+ "លុបសារដែលមានមេឌៀទាំងអស់"
+ "លុបសារចាស់ជាង %s"
+ "លុបសារចាស់ជាង %s ដោយស្វ័យប្រវត្តិ"
+ "មិនអើពើ"
+ "លុបសារទាំងអស់មានក្នុងមេឌៀ?"
+ "លុបសារចាស់ជាង %s?"
+ "លុបសារចាស់ជាង %s និងបើកការលុបស្វ័យប្រវត្តិ?"
+ "%s និយាយថា"
+ "អ្នកនិយាយថា"
+ "សារពី %s"
+ "អ្នកបានផ្ញើសារមួយ"
+ "កំពុងផ្ញើ..."
+ "មិនបានផ្ញើ។ ប៉ះដើម្បីព្យាយាមម្ដងទៀត។"
+ "មិនបានផ្ញើ។ កំពុងព្យាយាមម្ដងទៀត..."
+ "ផ្ញើម្ដងទៀត ឬលុប"
+ "សូមធ្វើការហៅជាសម្លេងទៅកាន់សេវាកម្មសង្គ្រោះបន្ទាន់។ សារជាអក្សររបស់អ្នកមិនអាចបញ្ជូនបានទេនៅពេលនេះ។"
+ "បានបរាជ័យ"
+ "សារ MMS ថ្មីត្រូវទាញយក"
+ "សារ MMS ថ្មី"
+ "មិនអាចទាញយក"
+ "ប៉ះ ដើម្បីព្យាយាមម្តងទៀត"
+ "ប៉ះ ដើម្បីទាញយក"
+ "ទាញយក ឬលុប"
+ "កំពុងទាញយក..."
+ "សារបានផុតកំណត់ ឬមិនអាចប្រើបាន"
+ "ទំហំ៖ %1$s, ផុតកំណត់៖ %2$s"
+ "មិនអាចផ្ញើ។ អ្នកទទួលមិនត្រឹមត្រូវ។"
+ "សេវាមិនសកម្មនៅលើបណ្ដាញ"
+ "មិនអាចផ្ញើដោយសារបញ្ហាបណ្ដាញ"
+ "សារបានផុតកំណត់ ឬមិនអាចប្រើបាន"
+ "(គ្មានប្រធានបទ)"
+ "មិនស្គាល់អ្នកផ្ញើ"
+ "បានបញ្ជូន"
+ "មិនអាចទាញយកសារ %1$s ពី %2$s បានទេ។"
+ "មិនអាចបញ្ចប់ប្រតិបត្តិការមូលដ្ឋានទិន្នន័យដោយសារអង្គចងចាំមិនគ្រប់គ្រាន់"
+ "មិនបានផ្ញើសារ"
+ "សារមួយចំនួនមិនបានផ្ញើនៅក្នុងការផ្ញើសារទេ"
+
+ សារ %d នៅក្នុងការសន្ទនា %d
+ សារ %d នៅក្នុងការសន្ទនាមួយ
+
+ "មិនបានទាញយកសារ"
+ "សារមួយចំនួនមិនបានទាញយកនៅក្នុងការផ្ញើសារទេ"
+
+ សារ %d នៅក្នុងការសន្ទនា %d
+ សារ %d នៅក្នុងការសន្ទនាមួយ
+
+ "សារទៅកាន់ %1$s មិនត្រូវបានផ្ញើទេ"
+ "សូមធ្វើការហៅជាសម្លេងទៅកាន់សេវាកម្មសង្គ្រោះបន្ទាន់។ សារជាអក្សររបស់អ្នកទៅ %1$s មិនអាចបញ្ជូនបានទេនៅពេលនេះ។"
+
+ សារថ្មី %d
+ សារថ្មី
+
+ "ចាប់ផ្ដើម"
+ "មិនអាចប្រើម៉ាស៊ីនថតបាន"
+ "មិនអាចប្រើម៉ាស៊ីនថតបាន"
+ "មិនអាចថតវីដេអូបាន"
+ "មិនអាចរក្សាទុកមេឌៀ"
+ "មិនអាចថតរូបភាព"
+ "ថយក្រោយ"
+ "ទុកក្នុងប័ណ្ណសារ"
+ "លុប"
+ "ប័ណ្ណសារ"
+ "មិនទុកក្នុងប័ណ្ណសារ"
+ "បិទការជូនដំណឹង"
+ "បើកការជូនដំណឹង"
+ "បន្ថែមទំនាក់ទំនង"
+ "ទាញយក"
+ "ផ្ញើ"
+ "លុប"
+ "លុបសារនេះ?"
+ "សកម្មភាពនេះមិនអាចធ្វើវិញបានទេ។"
+ "លុប"
+
+ លុបការសន្ទនាទាំងនេះ?
+ លុបការសន្ទនានេះ?
+
+ "លុប"
+ "បោះបង់"
+ "ជូនចំពោះ"
+ "ជ្រើសរូបភាពច្រើន"
+ "បញ្ជាក់ការជ្រើស"
+ "+%d"
+ "មិនអាចថតសំឡេង។ ព្យាយាមម្ដងទៀត។"
+ "មិនអាចចាក់សំឡេង។ ព្យាយាមម្ដងទៀត។"
+ "មិនអាចរក្សាទុកសំឡេង។ ព្យាយាមម្ដងទៀត។"
+ "ប៉ះ & សង្កត់"
+ ", "
+ " "
+ ": "
+ " "
+ "រូបភាព"
+ "ឈុតសំឡេង"
+ "វីដេអូ"
+ "កាតទំនាក់ទំនង"
+ "ទាញយក"
+ "ឆ្លើយតបតាមសារ SMS"
+ "ឆ្លើយតបតាម MMS"
+ "ឆ្លើយតប"
+
+ អ្នកចូលរួម %d នាក់
+ អ្នកចូលរួម %d នាក់
+
+ "ខ្ញុំ"
+ "ទំនាក់ទំនងត្រូវបានទប់ស្កាត់ & ទុកក្នុងប័ណ្ណសារ"
+ "បានរារាំង និងបានដកទំនាក់ទំនងចេញពីបណ្ណ័សារ"
+ "បានទុកក្នុងបណ្ណសារចំនួន%d"
+ "មិនបានទុកក្នុងប័ណ្ណសារចំនួន %d"
+ "បានបិទការជូនដំណឹង"
+ "បានបើកការជូនដំណឹង"
+ "កំណត់រួចរាល់។ ប៉ះដើម្បីផ្ញើម្ដងទៀត។"
+ "បានកំណត់ការផ្ញើសារជាកម្មវិធីសារ SMS លំនាំដើមដោយជោគជ័យ។"
+
+ បោះបង់ឯកសារភ្ជាប់
+ បោះបង់ឯកសារភ្ជាប់
+
+ "ឯកសារភ្ជាប់សម្លេង"
+ "ឯកសារភ្ជាប់សម្លេង Play"
+ "ផ្អាក"
+ "សារពី %s៖ %s។"
+ "សារបរាជ័យពី %s៖ %s។ ម៉ោង៖ %s។"
+ "សារពី %s៖ %s។ ម៉ោង៖ %s។"
+ "សារមិនបានផ្ញើទៅ %s៖ %s។ ម៉ោង៖ %s។"
+ "កំពុងផ្ញើសារទៅ %s៖ %s។ ម៉ោង៖ %s។"
+ "សារបរាជ័យទៅ %s៖ %s។ ម៉ោង៖ %s។"
+ "សារទៅ %s៖ %s។ ម៉ោង៖ %s។"
+ "សារបរាជ័យពី %s៖ %s។ ម៉ោង៖ %s។ %s។"
+ "សារពី %s៖ %s។ ម៉ោង៖ %s។ %s។"
+ "សារមិនបានផ្ញើទៅ %s៖ %s។ ម៉ោង៖ %s។"
+ "កំពុងផ្ញើសារទៅ %s៖ %s។ ម៉ោង៖ %s។"
+ "សារបរាជ័យទៅ %s៖ %s។ ម៉ោង៖ %s។"
+ "សារទៅ %s៖ %s។ ម៉ោង៖ %s។"
+ "សារបរាជ័យ។ ប៉ះដើម្បីព្យាយាមម្តងទៀត។"
+ "ការសន្ទនាជាមួយ %s"
+ "លុបប្រធានបទ"
+ "ថតវីដេអូ"
+ "ថតរូបភាពថេរ"
+ "ថតរូប"
+ "ចាប់ផ្ដើមថតវីដេអូ"
+ "ប្ដូរទៅម៉ាស៊ីនថតពេញអេក្រង់"
+ "ប្ដូររវាងម៉ាស៊ីនថតមុន និងក្រោយ"
+ "បញ្ឈប់ការថត និងភ្ជាប់វីដេអូ"
+ "បញ្ឈប់ការថតវីដេអូ"
+ "រូបភាពសារ"
+
+ បានរក្សាទុករូបថត %d ទៅក្នុងអាល់ប៊ុម \"%s\"
+ បានរក្សាទុករូបថត %d ទៅក្នុងអាល់ប៊ុម \"%s\"
+
+
+ បានរក្សាទុកវីដេអូ %d ទៅក្នុងអាល់ប៊ុម \"%s\"
+ បានរក្សាទុកវីដេអូ %d ទៅក្នុងអាល់ប៊ុម \"%s\"
+
+
+ បានរក្សាទុកឯកសារភ្ជាប់ %d ទៅក្នុងអាល់ប៊ុម \"%s\"
+ បានរក្សាទុកឯកសារភ្ជាប់ %d ទៅក្នុងអាល់ប៊ុម \"%s\"
+
+
+ បានរក្សាទុកឯកសារភ្ជាប់ %d ទៅក្នុង \"ទាញយក\"
+ បានរក្សាទុកឯកសារភ្ជាប់ %d ទៅក្នុង \"ទាញយក\"
+
+
+ បានរក្សាទុកឯកសារភ្ជាប់ %d
+ បានរក្សាទុកឯកសារភ្ជាប់ %d
+
+
+ មិនអាចរក្សាទុកឯកសារភ្ជាប់ %d
+ មិនអាចរក្សាទុកឯកសារភ្ជាប់ %d
+
+ "បានរក្សាទុកឯកសារភ្ជាប់ជាសារ MMS"
+ "ការកំណត់"
+ "ទុកក្នុងប័ណ្ណសារ"
+ "បិទ"
+ "សារ MMS"
+ "កម្រិតខ្ពស់"
+ "កែកំហុស"
+ "ការជូនដំណឹង"
+ "សំឡេង"
+ "ស្ងាត់"
+ "ញ័រ"
+ "បានទប់ស្កាត់"
+ "របាយការណ៍បញ្ជូនសារ SMS"
+ "ស្នើរបាយការណ៍បញ្ជូនសម្រាប់សារ SMS នីមួយៗដែលអ្នកផ្ញើ"
+ "យកស្វ័យប្រវត្តិ"
+ "ទាញយកសារ MMS ដោយស្វ័យប្រវត្តិ"
+ "ទាញយកដោយស្វ័យប្រវត្តិពេលរ៉ូមីង"
+ "ទាញសារ MMS ត្រឡប់មកវិញដោយស្វ័យប្រវត្តិនៅពេលរ៉ូមីង"
+ "ការផ្ញើសារជាក្រុម"
+ "ប្រើ MMS ដើម្បីផ្ញើសារ នៅពេលមានអ្នកទទួលច្រើន"
+ "កម្មវិធីផ្ញើសារ SMS លំនាំដើម"
+ "កម្មវិធីផ្ញើសារ SMS លំនាំដើម"
+
+
+ "លេខទូរសព្ទរបស់អ្នក"
+ "មិនស្គាល់"
+ "សម្លេងសារផ្ញើចេញ"
+ "បោះបង់សារ SMS"
+ "ដាក់ទិន្នន័យដើមនៃសារ SMS បានទទួលក្នុងឯកសារឧបករណ៍ផ្ទុកខាងក្រៅ"
+ "បោះបង់សារ MMS"
+ "ដាក់ទិន្នន័យដើមនៃសារ MMS បានទទួលក្នុងឯកសារឧបករណ៍ផ្ទុកខាងក្រៅ"
+ "ការជូនដំណឹងឥតខ្សែ"
+ "ជម្រើសសារ"
+ "ចម្លងអត្ថបទ"
+ "មើលព័ត៌មានលម្អិត"
+ "លុប"
+ "បញ្ជូនបន្ត"
+ "ព័ត៌មានលម្អិតសារ"
+ "ប្រភេទ៖ "
+ "សារអត្ថបទ"
+ "សារពហុមេឌៀ"
+ "ពី៖ "
+ "ជូនចំពោះ៖ "
+ "បានផ្ញើ៖ "
+ "បានទទួល៖ "
+ "ប្រធានបទ៖ "
+ "ទំហំ៖ "
+ "អាទិភាព៖ "
+ "ស៊ីម៖ "
+ "ខ្ពស់"
+ "ធម្មតា"
+ "ទាប"
+ "ស៊ីម %s"
+ "អាសយដ្ឋានអ្នកផ្ញើដែលបានលាក់"
+ "មិនអាចផ្ញើសារខណៈពេលផ្ទុកឯកសារភ្ជាប់។"
+ "មិនអាចផ្ទុកឯកសារភ្ជាប់។ ព្យាយាមម្ដងទៀត។"
+ "បណ្តាញមិនទាន់រួចរាល់ទេ។ ព្យាយាមម្តងទៀត។"
+ "លុបអត្ថបទ"
+ "ប្ដូររវាងលេខ និងអត្ថបទបញ្ចូល"
+ "បន្ថែមអ្នកចូលរួមច្រើនទៀត"
+ "បញ្ជាក់អ្នកចូលរួម"
+ "ចាប់ផ្ដើមការសន្ទនាថ្មី"
+ "ជ្រើសធាតុនេះ"
+ "ចាក់វីដេអូ"
+ "មនុស្ស & ជម្រើស"
+ "កែកំហុស"
+ "មនុស្ស & ជម្រើស"
+ "ទូទៅ"
+ "មនុស្សក្នុងការសន្ទនានេះ"
+ "ហៅ"
+ "ផ្ញើសារ"
+ "ផ្ញើសារ<br/><small>ពី %s</small>"
+
+ ផ្ញើរូបថត
+ ផ្ញើរូបថត
+
+
+ ផ្ញើសំឡេង
+ ផ្ញើសំឡេង
+
+
+ ផ្ញើវីដេអូ
+ ផ្ញើវីដេអូ
+
+
+ ផ្ញើកាតទំនាក់ទំនង
+ ផ្ញើកាតទំនាក់ទំនង
+
+
+ ផ្ញើឯកសារភ្ជាប់
+ ផ្ញើឯកសារភ្ជាប់
+
+
+ ឯកសារភ្ជាប់ %d ត្រៀមសម្រាប់ផ្ញើ
+ ឯកសារភ្ជាប់មួយត្រៀមសម្រាប់ផ្ញើ
+
+ "ផ្ដល់មតិស្ថាបនា"
+ "មើលនៅក្នុង Google ឃ្លាំងកម្សាន្ត"
+ "ព័ត៌មានកំណែ"
+ "កំណែ %1$s"
+ "អាជ្ញាប័ណ្ណកម្មវិធីប្រភពកូដចំហ"
+ "ការជូនដំណឹង"
+ "ឯកសារភ្ជាប់ឈានដល់កំណត់"
+ "ការផ្ទុកឯកសារភ្ជាប់បានបរាជ័យ។"
+ "បន្ថែមទៅទំនាក់ទំនង?"
+ "បន្ថែមទំនាក់ទំនង"
+ "ប្រធានបទ"
+ "ប្រធានបទ៖ "
+ "%s%s"
+ "ផ្ទុកកាតទំនាក់ទំនង"
+ "មិនអាចផ្ទុកកាតទំនាក់ទំនង"
+ "មើលកាតទំនាក់ទំនង"
+
+ ទំនាក់ទំនង %d
+ ទំនាក់ទំនង %d
+
+ "កាតទំនាក់ទំនង"
+ "ថ្ងៃកំណើត"
+ "ចំណាំ"
+ "បញ្ជូនសារបន្ត"
+ "ឆ្លើយតប"
+ "+1"
+ "+%d"
+ "បានបិទសារ SMS"
+ "សូមកំណត់ការផ្ញើសារជាកម្មវិធីសារ SMS លំនាំដើមដើម្បីផ្ញើ"
+ "កំណត់ការផ្ញើសារជាកម្មវិធីសារ SMS លំនាំដើម"
+ "ផ្លាស់ប្ដូរ"
+ "សូមកំណត់ការផ្ញើសារជាកម្មវិធីសារ SMS លំនាំដើមដើម្បីទទួលសារ"
+ "គ្មានស៊ីមកាតដែលបានប្រើត្រូវបានជ្រើសរើសឲ្យផ្ញើសារ SMS ទេ"
+ "កម្មវិធីនេះមិនបានអនុញ្ញាតដោយម្ចាស់ឧបករណ៍។"
+ "យល់ព្រម"
+ "មានអ្នកចូលរួមច្រើនពេកក្នុងការសន្ទនា"
+
+ ទំនាក់ទំនងមិនត្រឹមត្រូវ
+ ទំនាក់ទំនងមិនត្រឹមត្រូវ
+
+ "មិនអាចផ្ទុករូបភាពម៉ាស៊ីនថត"
+ "អ្នក៖ "
+ "%s: "
+ "សេចក្ដីព្រាង"
+ "នៅពេលដែលអ្នកចាប់ផ្ដើមការសន្ទនាថ្មី អ្នកនឹងឃើញវាបង្ហាញនៅទីនេះ"
+ "ការសន្ទនាបានទុកក្នុងប័ណ្ណសារបង្ហាញនៅទីនេះ"
+ "កំពុងផ្ទុកការសន្ទនា…"
+ "រូបភាព"
+ "ឃ្លីបសម្លេង"
+ "វីដេអូ"
+ "កាតទំនាក់ទំនង"
+ "សារ MMS"
+ "មិនធ្វើវិញ"
+ "ព្យាយាមម្ដងទៀត"
+ "បញ្ចូលឈ្មោះទំនាក់ទំនង ឬលេខទូរសព្ទដើម្បីចាប់ផ្ដើមសារថ្មី"
+ "ទប់ស្កាត់"
+ "ទប់ស្កាត់ %s"
+ "មិនទប់ស្កាត់ %s"
+ "ទប់ស្កាត់ %s?"
+ "អ្នកនឹងបន្តទទួលសារពីលេខនេះ ប៉ុន្តែនឹងមិនត្រូវបានជូនដំណឹងទៀតទេ។ ការសន្ទនានេះនឹងត្រូវបានទុកក្នុងប័ណ្ណសារ។"
+ "បានទប់ស្កាត់ទំនាក់ទំនង"
+ "មិនទប់ស្កាត់"
+ "បានទប់ស្កាត់ទំនាក់ទំនង"
+ "ជ្រើសរូបភាពពីបណ្ណាល័យឯកសារ"
+ "កំពុងផ្ញើសារ"
+ "បានផ្ញើសារ"
+ "ទិន្នន័យចល័តត្រូវបានបិទ។ ពិនិត្យការកំណត់របស់អ្នក។"
+ "មិនអាចផ្ញើសារក្នុងរបៀបពេលជិះយន្តហោះ"
+ "មិនអាចផ្ញើសារបានទេ"
+ "បានទាញយកសារ"
+ "ទិន្នន័យចល័តត្រូវបានបិទ។ ពិនិត្យការកំណត់របស់អ្នក។"
+ "មិនអាចទាញយកសារនៅក្នុង របៀបយន្តហោះ ទេ។"
+ "មិនអាចទាញយកសារបានទេ"
+ "សូន្យ"
+ "មួយ"
+ "ពីរ"
+ "បី"
+ "បួន"
+ "ប្រាំ"
+ "ប្រាំមួយ"
+ "ប្រាំពីរ"
+ "ប្រាំបី"
+ "ប្រាំបួន"
+ "មិនអាចផ្ញើសារដោយប្រើ %1$s នេះបានទេ។ កំហុស %2$d"
+ "មិនអាចផ្ញើសារដោយប្រើក្រុមហ៊ុនផ្តល់សេវាដែលមិនស្គាល់បានទេ។ កំហុស %1$d"
+ "បញ្ជូនបន្ត៖ %s"
+ "សារមិនបានផ្ញើ៖ សេវាកម្មមិនសកម្មលើបណ្ដាញ"
+ "មិនបានផ្ញើសារ៖ អាសយដ្ឋានគោលដៅមិនត្រឹមត្រូវ"
+ "មិនបានផ្ញើសារ៖ សារមិនត្រឹមត្រូវ"
+ "មិនបានផ្ញើសារ៖ មិនគាំទ្រមាតិកា"
+ "មិនបានផ្ញើសារ៖ មិនគាំទ្រសារ"
+ "មិនបានផ្ញើសារ៖ ធំពេក"
+ "សារថ្មី"
+ "មើល"
+ "រូបភាព"
+ "មិនអាចរកឃើញកម្មវិធីដែលសមរម្យ"
+ "លុបអ្នកទទួល"
+ "សារថ្មី"
+ "បោះបង់"
+ "កែចំណុចចូលដំណើរការ"
+ "មិនបានកំណត់"
+ "ឈ្មោះ"
+ "APN"
+ "MMSC"
+ "ប្រូកស៊ី MMS"
+ "ច្រក MMS"
+ "MCC"
+ "MNC"
+ "ប្រភេទ APN"
+ "លុប APN"
+ "APN ថ្មី"
+ "រក្សាទុក"
+ "បោះបង់"
+ "វាលឈ្មោះមិនអាចទទេ។"
+ "APN មិនអាចទទេ។"
+ "វាល MCC ត្រូវតែមាន ៣ តួ។"
+ "វាល MNC ត្រូវតែមានពីរ ឬបីតួ។"
+ "ស្ដារការកំណត់ APN លំនាំដើមឡើងវិញ។"
+ "កំណត់ទៅលំនាំដើមឡើងវិញ"
+ "បានបញ្ចប់ការកំណត់នៃការកំណត់ APN លំនាំដើម។"
+ "គ្មានចំណងជើង"
+ "ឈ្មោះចំណុចចូលដំណើរការ"
+ "APNs"
+ "APN ថ្មី"
+ "ការកំណត់ឈ្មោះចូលដំណើរការមិនអាចប្រើបានសម្រាប់អ្នកប្រើនេះ"
+ "ចម្លងទៅក្ដារតម្បៀតខ្ទាស់?"
+ "ចម្លង"
+ "ទៅ %s"
+ "ទូទៅ"
+ "កម្រិតខ្ពស់"
+ "ការកំណត់ទូទៅ"
+ "ការកំណត់កម្រិតខ្ពស់"
+ "\"%s\" ស៊ីម"
+ "ផ្ញើសារ SMS នីមួយៗទៅអ្នកទទួលទាំងអស់។ មានតែអ្នកប៉ុណ្ណោះទទួលបានការឆ្លើយតប"
+ "ផ្ញើសារ MMS មួយទៅអ្នកទទួល"
+ "មិនស្គាល់លេខ"
+ "សារថ្មី"
+ "សារថ្មី។"
+ "កម្មវិធីជ្រើសស៊ីម"
+ "បានជ្រើសរើស %1$s កម្មវិធីជ្រើសស៊ីម"
+ "កែប្រធានបទ"
+ "ជ្រើសស៊ីម ឬកែប្រធានបទ"
+ "ប៉ះ និងសង្កត់ដើម្បីថតសម្លេង"
+ "ចាប់ផ្ដើមការសន្ទនាថ្មី"
+ "ការផ្ញើសារ"
+ "បញ្ជីសារ"
+ "ការផ្ញើសារ"
+ "សារថ្មី"
+ "បញ្ជីសន្ទនា"
+ "កំពុងផ្ទុកការសន្ទនា…"
+ "សារកំពុងដំណើរការ"
+ "មើលការសន្ទនាច្រើនទៀត"
+ "មើលសារច្រើនទៀត"
+ "បានលុបការសន្ទនា"
+ "បានលុបការសន្ទនា។ សូមប៉ះដើម្បីបង្ហាញការសន្ទនាផ្សេងទៀតនៅក្នុងការផ្ញើសារ"
+ "បានទប់ស្កាត់"
+ "បានឈប់ទប់ស្កាត់"
+ "ចន្លោះផ្ទុកមានកម្រិតទាប។ ទិន្នន័យមួយចំនួនអាចបាត់បង់។"
+ "ជ្រើសឯកសារភ្ជាប់"
+ "បញ្ជាក់ការជ្រើស"
+ "បានជ្រើស %d"
+ "សូមយកឯកសារភ្ជាប់មួយ ឬច្រើនចេញ ហើយព្យាយាមម្តងទៀត។"
+ "អ្នកអាចព្យាយាមផ្ញើសារបស់អ្នក ប៉ុន្តែវាប្រហែលជាមិនផ្ញើទៅទេ លុះត្រាតែអ្នកយកឯកសារភ្ជាប់មួយ ឬច្រើនចេញ។"
+ "អ្នកអាចផ្ញើវីដេអូតែមួយប៉ុណ្ណោះនៅក្នុងសារមួយ។ សូមយកវីដេអូដែលលើសពីនេះចេញ ហើយព្យាយាមម្តងទៀត។"
+ "ការផ្ញើសារបានបរាជ័យក្នុងដំណើរការផ្ទុកឯកសារភ្ជាប់។"
+ "អញ្ចឹងផ្ញើតែម្ដង"
+ "មិនអាចចាប់ផ្តើមការសន្ទនាទេ"
+ "%1$s (%2$s)"
+ "បានជ្រើស %s"
+
diff --git a/res/values-kn-rIN/arrays.xml b/res/values-kn-rIN/arrays.xml
new file mode 100644
index 0000000..932fec1
--- /dev/null
+++ b/res/values-kn-rIN/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "ಯಾವುದೇ ವಿಷಯವಿಲ್ಲ"
+ "ಯಾವುದೇ ವಿಷಯವಿಲ್ಲ"
+
+
+ "ಹೌದು"
+ "ಬೇಡ"
+ "ಸರಿ"
+ "ಹೆಹೆ"
+ "ಧನ್ಯವಾದಗಳು"
+ "ಒಪ್ಪುತ್ತೇನೆ"
+ "ಉತ್ತಮ"
+ "ನನ್ನ ಹಾದಿಯಲ್ಲಿದ್ದೇನೆ"
+ "ಸರಿ, ನಾನು ಮತ್ತೆ ನಿಮಗೆ ತಿಳಿಸುತ್ತೇನೆ"
+ ":)"
+ ":("
+
+
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
new file mode 100644
index 0000000..eb9539b
--- /dev/null
+++ b/res/values-kn-rIN/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"
+ "ಸಂಭಾಷಣೆಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"
+ "ಸೆಟ್ಟಿಂಗ್ಗಳು"
+ "ಸಂದೇಶ ಕಳುಹಿಸು"
+ "ಲಗತ್ತನ್ನು ಸೇರಿಸಿ"
+ "ಸಹಾಯ"
+ "ಸುಸ್ವಾಗತ"
+ "ಸ್ಕಿಪ್"
+ "ಮುಂದೆ >"
+ "ಮುಂದೆ"
+ "ನಿರ್ಗಮಿಸು"
+ "ಸೆಟ್ಟಿಂಗ್ಗಳು >"
+ "ಸೆಟ್ಟಿಂಗ್ಗಳು"
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಗೆ SMS, ಫೋನ್ ಮತ್ತು ಸಂಪರ್ಕಗಳಿಗೆ ಅನುಮತಿ ಹೊಂದಿರುವ ಅಗತ್ಯವಿದೆ."
+ "ನೀವು ಅನುಮತಿಗಳನ್ನು ಸೆಟ್ಟಿಂಗ್ಗಳು > ಅಪ್ಲಿಕೇಶನ್ಗಳು > ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ > ಅನುಮತಿಗಳಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು."
+ "ನೀವು ಅನುಮತಿಗಳನ್ನು ಸೆಟ್ಟಿಂಗ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ, ಅನುಮತಿಗಳಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು."
+ "ಪುನರಾವರ್ತನೆಗಳು"
+ "ಎಲ್ಲ ಸಂಪರ್ಕಗಳು"
+ "%s ಗೆ ಕಳುಹಿಸಿ"
+ "ಚಿತ್ರಗಳು ಅಥವಾ ವೀಡಿಯೊವನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ"
+ "ಈ ಸಾಧನದಿಂದ ಚಿತ್ರಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"
+ "ಆಡಿಯೋ ರೆಕಾರ್ಡ್ ಮಾಡಿ"
+ "ಫೋಟೋ ಆಯ್ಕೆಮಾಡಿ"
+ "ಮಾಧ್ಯಮ ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ."
+ "ಮಾಧ್ಯಮ ಆಯ್ಕೆ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ."
+ "%d ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ"
+ "ಚಿತ್ರ %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "ಚಿತ್ರ"
+ "ಆಡಿಯೋ ರೆಕಾರ್ಡ್ ಮಾಡಿ"
+ "ಹಂಚಿಕೊಳ್ಳಿ"
+ "ಈಗ ತಾನೇ"
+ "ಇದೀಗ"
+
+ %d ನಿಮಿಷಗಳು
+ %d ನಿಮಿಷಗಳು
+
+
+ %d ಗಂಟೆಗಳು
+ %d ಗಂಟೆಗಳು
+
+
+ %d ದಿನಗಳು
+ %d ದಿನಗಳು
+
+
+ %d ವಾರಗಳು
+ %d ವಾರಗಳು
+
+
+ %d ತಿಂಗಳು
+ %d ತಿಂಗಳು
+
+
+ %d ವರ್ಷಗಳು
+ %d ವರ್ಷಗಳು
+
+ "ವರ್ಗ 0 ಸಂದೇಶ"
+ "ಉಳಿಸು"
+ "ಸಾಧನದಲ್ಲಿ ಸ್ಥಳಾವಕಾಶವು ಕಡಿಮೆ ಇದೆ. ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯು ಸ್ಥಳಾವಕಾಶವನ್ನು ತೆರವುಗೊಳಿಸಲು ಹಳೆಯ ಸಂದೇಶಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅಳಿಸುತ್ತದೆ."
+ "ಸಂಗ್ರಹಣೆ ಸ್ಥಳವು ತುಂಬಿದೆ"
+ "ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಹೆಚ್ಚು ಸ್ಥಳಾವಕಾಶ ಲಭ್ಯವಿರುವವರೆಗೆ ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯು ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸದಿರಬಹುದು ಅಥವಾ ಸ್ವೀಕರಿಸದಿರಬಹುದು."
+ "ಕಡಿಮೆ SMS ಸಂಗ್ರಹಣೆ. ನೀವು ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಬೇಕಾಗಬಹುದು."
+ "ನಿಮ್ಮ ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಖಚಿತಪಡಿಸಿ"
+ "ಈ ಒಂದು-ಬಾರಿ ಹಂತವು ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯು ನಿಮ್ಮ ಗುಂಪು ಸಂದೇಶಗಳನ್ನು ಸರಿಯಾಗಿ ಕಳುಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ."
+ "ಫೋನ್ ಸಂಖ್ಯೆ"
+ "ಮೀಡಿಯಾದ ಎಲ್ಲಾ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಿ"
+ "%s ಗಿಂತಲೂ ಹಳೆಯದಾದ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಿ"
+ "%s ಗಿಂತಲೂ ಹಳೆಯದಾದ ಸಂದೇಶಗಳನ್ನು ಸ್ವಯಂ-ಅಳಿಸಿ"
+ "ನಿರ್ಲಕ್ಷಿಸು"
+ "ಮಾಧ್ಯಮದ ಎಲ್ಲಾ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸುವುದೇ?"
+ "%s ಗಿಂತಲೂ ಹಳೆಯದಾದ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸುವುದೇ?"
+ "%s ಗಿಂತಲೂ ಹಳೆಯದಾದ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಿ ಹಾಗೂ ಸ್ವಯಂ-ಅಳಿಸು ಆನ್ ಮಾಡಿ?"
+ "%s ಹೇಳಿದ್ದಾರೆ"
+ "ನೀವು ಹೇಳಿದ್ದೀರಿ"
+ "%s ಅವರಿಂದ ಸಂದೇಶ"
+ "ನೀವು ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಿರುವಿರಿ"
+ "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ..."
+ "ಕಳುಹಿಸಲಾಗಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲು ಸ್ಪರ್ಶಿಸಿ."
+ "ಕಳುಹಿಸಲಾಗಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ…"
+ "ಮರುಕಳುಹಿಸಿ ಅಥವಾ ಅಳಿಸಿ"
+ "ತುರ್ತು ಸೇವೆಗಳಿಗೆ ದಯವಿಟ್ಟು ಧ್ವನಿ ಕರೆಗಳನ್ನು ಮಾಡಿ. ಈ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ ಪಠ್ಯ ಸಂದೇಶವನ್ನು ತಲುಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."
+ "ವಿಫಲವಾಗಿದೆ"
+ "ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಹೊಸ MMS ಸಂದೇಶ"
+ "ಹೊಸ MMS ಸಂದೇಶ"
+ "ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+ "ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲು ಸ್ಪರ್ಶಿಸಿ"
+ "ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ"
+ "ಡೌನ್ಲೋಡ್ ಮಾಡಿ ಇಲ್ಲವೇ ಅಳಿಸಿ"
+ "ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"
+ "ಸಂದೇಶ ಅವಧಿ ಮೀರಿದೆ ಅಥವಾ ಲಭ್ಯವಿಲ್ಲ"
+ "ಗಾತ್ರ: %1$s, ಮುಕ್ತಾಯ: %2$s"
+ "ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ. ಸ್ವೀಕರಿಸುವವರು ಮಾನ್ಯವಾಗಿಲ್ಲ."
+ "ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಸೇವೆಯು ಸಕ್ರಿಯಗೊಂಡಿಲ್ಲ"
+ "ನೆಟ್ವರ್ಕ್ ಸಮಸ್ಯೆಯಿಂದಾಗಿ ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ"
+ "ಸಂದೇಶ ಅವಧಿ ಮೀರಿದೆ ಅಥವಾ ಲಭ್ಯವಿಲ್ಲ"
+ "(ವಿಷಯ ಇಲ್ಲ)"
+ "ಕಳುಹಿಸಿದವರು ತಿಳಿದಿಲ್ಲ"
+ "ತಲುಪಿಸಲಾಗಿದೆ"
+ "%2$s ರಿಂದ %1$s ಸಂದೇಶವನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ."
+ "ಕಡಿಮೆ ಮೆಮೊರಿಯ ಕಾರಣ ಡೇಟಾಬೇಸ್ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"
+ "ಸಂದೇಶ ಕಳುಹಿಸಲಾಗಿಲ್ಲ"
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯಲ್ಲಿ ಕೆಲವು ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲಾಗಿಲ್ಲ"
+
+ %d ಸಂವಾದಗಳಲ್ಲಿ %d ಸಂದೇಶಗಳು
+ %d ಸಂವಾದಗಳಲ್ಲಿ %d ಸಂದೇಶಗಳು
+
+ "ಸಂದೇಶವನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ"
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯಲ್ಲಿ ಕೆಲವು ಸಂದೇಶಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ"
+
+ %d ಸಂವಾದಗಳಲ್ಲಿ %d ಸಂದೇಶಗಳು
+ %d ಸಂವಾದಗಳಲ್ಲಿ %d ಸಂದೇಶಗಳು
+
+ "%1$s ಸಂಖ್ಯೆಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಿಲ್ಲ"
+ "ತುರ್ತು ಸೇವೆಗಳಿಗೆ ದಯವಿಟ್ಟು ಧ್ವನಿ ಕರೆಗಳನ್ನು ಮಾಡಿ. ಈ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ ಪಠ್ಯ ಸಂದೇಶವನ್ನು %1$s ಸಂಖ್ಯೆಗೆ ತಲುಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."
+
+ %d ಹೊಸ ಸಂದೇಶಗಳು
+ %d ಹೊಸ ಸಂದೇಶಗಳು
+
+ "ಪ್ರಾರಂಭಿಸು"
+ "ಕ್ಯಾಮರಾ ಲಭ್ಯವಿಲ್ಲ"
+ "ಕ್ಯಾಮರಾ ಲಭ್ಯವಿಲ್ಲ"
+ "ವಿಡಿಯೋ ಸೆರೆಹಿಡಿಯುವಿಕೆ ಲಭ್ಯವಿಲ್ಲ"
+ "ಮಾಧ್ಯಮ ಉಳಿಸಲಾಗಲಿಲ್ಲ"
+ "ಫೋಟೋ ತೆಗೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ"
+ "ಹಿಂದೆ"
+ "ಆರ್ಕೈವ್ ಮಾಡಲಾಗಿದೆ"
+ "ಅಳಿಸಿ"
+ "ಆರ್ಕೈವ್ ಮಾಡಿ"
+ "ಅನ್ಆರ್ಕೈವ್ ಮಾಡು"
+ "ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಿ"
+ "ಅಧಿಸೂಚನೆಗಳನ್ನು ಆನ್ ಮಾಡು"
+ "ಸಂಪರ್ಕ ಸೇರಿಸು"
+ "ಡೌನ್ಲೋಡ್"
+ "ಕಳುಹಿಸು"
+ "ಅಳಿಸಿ"
+ "ಈ ಸಂದೇಶವನ್ನು ಅಳಿಸುವುದೇ?"
+ "ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಪಡಿಸಲಾಗುವುದಿಲ್ಲ"
+ "ಅಳಿಸಿ"
+
+ ಈ ಸಂವಾದಗಳನ್ನು ಅಳಿಸುವುದೇ?
+ ಈ ಸಂವಾದಗಳನ್ನು ಅಳಿಸುವುದೇ?
+
+ "ಅಳಿಸಿ"
+ "ರದ್ದುಮಾಡು"
+ "ಇವರಿಗೆ"
+ "ಬಹು ಚಿತ್ರಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"
+ "ಆಯ್ಕೆ ಖಚಿತಪಡಿಸಿ"
+ "+%d"
+ "ಆಡಿಯೋ ರೆಕಾರ್ಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
+ "ಆಡಿಯೋವನ್ನು ಪ್ಲೇ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
+ "ಆಡಿಯೋವನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
+ "ಸ್ಪರ್ಶಿಸಿ & ಹೋಲ್ಡ್ ಮಾಡಿ"
+ ", "
+ " "
+ ": "
+ " "
+ "ಚಿತ್ರ"
+ "ಆಡಿಯೊ ಕ್ಲಿಪ್"
+ "ವೀಡಿಯೊ"
+ "ಸಂಪರ್ಕದ ಕಾರ್ಡ್"
+ "ಡೌನ್ಲೋಡ್"
+ "SMS ಮೂಲಕ ಪ್ರತ್ಯುತ್ತರಿಸಿ"
+ "MMS ಮೂಲಕ ಪ್ರತ್ಯುತ್ತರಿಸಿ"
+ "ಪ್ರತ್ಯುತ್ತರಿಸು"
+
+ %d ಪಾಲ್ಗೊಳ್ಳುವವರು
+ %d ಪಾಲ್ಗೊಳ್ಳುವವರು
+
+ "ನಾನು"
+ "ಸಂಪರ್ಕವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ & ಆರ್ಕೈವ್ ಮಾಡಲಾಗಿದೆ"
+ "ಸಂಪರ್ಕವನ್ನು ಅನಿರ್ಬಂಧಿಸಲಾಗಿದೆ & ಆರ್ಕೈವ್ ರದ್ದುಮಾಡಲಾಗಿದೆ"
+ "%d ಆರ್ಕೈವ್ ಮಾಡಲಾಗಿದೆ"
+ "%d ಅನ್ಆರ್ಕೈವ್ ಮಾಡಲಾಗಿದೆ"
+ "ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ"
+ "ಅಧಿಸೂಚನೆಗಳನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ"
+ "ಎಲ್ಲವನ್ನೂ ಹೊಂದಿಸಲಾಗಿದೆ. ಮತ್ತೆ ಕಳುಹಿಸಲು ಸ್ಪರ್ಶಿಸಿ."
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್ನಂತೆ ಹೊಂದಿಸಲಾಗಿದೆ."
+
+ ಲಗತ್ತುಗಳನ್ನು ತಿರಸ್ಕರಿಸು
+ ಲಗತ್ತುಗಳನ್ನು ತಿರಸ್ಕರಿಸು
+
+ "ಆಡಿಯೋ ಲಗತ್ತು"
+ "ಆಡಿಯೊ ಲಗತ್ತನ್ನು ಪ್ಲೇ ಮಾಡಿ"
+ "ವಿರಾಮಗೊಳಿಸು"
+ "%s ಅವರಿಂದ ಸಂದೇಶ: %s."
+ "%s ಅವರಿಂದ ಸಂದೇಶ ವಿಫಲವಾಗಿದೆ: %s. ಸಮಯ: %s."
+ "%s ಅವರಿಂದ ಸಂದೇಶ: %s. ಸಮಯ: %s."
+ "%s ಗೆ ಕಳುಹಿಸದಿರುವ ಸಂದೇಶ: %s. ಸಮಯ: %s."
+ "%s ಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ: %s. ಸಮಯ: %s."
+ "%s ಗೆ ಸಂದೇಶ ವಿಫಲವಾಗಿದೆ : %s. ಸಮಯ: %s."
+ "%s ಗೆ ಸಂದೇಶ: %s. ಸಮಯ: %s."
+ "%s ಅವರಿಂದ ಸಂದೇಶ ವಿಫಲವಾಗಿದೆ: %s. ಸಮಯ: %s. %s."
+ "%s ಅವರಿಂದ ಸಂದೇಶ: %s. ಸಮಯ: %s. %s."
+ "%s ಗೆ ಕಳುಹಿಸದಿರುವ ಸಂದೇಶ: %s. ಸಮಯ: %s."
+ "%s ಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ: %s. ಸಮಯ: %s."
+ "%s ಗೆ ಸಂದೇಶ ವಿಫಲವಾಗಿದೆ : %s. ಸಮಯ: %s."
+ "%s ಗೆ ಸಂದೇಶ: %s. ಸಮಯ: %s."
+ "ಸಂದೇಶ ವಿಫಲವಾಗಿದೆ. ಮರುಪ್ರಯತ್ನಿಸಲು ಸ್ಪರ್ಶಿಸಿ."
+ "%s ಅವರೊಂದಿಗೆ ಸಂಭಾಷಣೆ"
+ "ವಿಷಯವನ್ನು ಅಳಿಸಿ"
+ "ವೀಡಿಯೊ ಸೆರೆಹಿಡಿಯಿರಿ"
+ "ಸ್ಥಿರ ಚಿತ್ರವನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ"
+ "ಫೋಟೋ ತೆಗೆಯಿರಿ"
+ "ವೀಡಿಯೊ ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಿ"
+ "ಪೂರ್ಣ ಪರದೆ ಕ್ಯಾಮರಾಗೆ ಬದಲಿಸಿ"
+ "ಮುಂದಿನ ಮತ್ತು ಹಿಂದಿನ ಕ್ಯಾಮರಾ ನಡುವೆ ಬದಲಾಯಿಸಿ"
+ "ರೆಕಾರ್ಡಿಂಗ್ ನಿಲ್ಲಿಸಿ ಮತ್ತು ವೀಡಿಯೊ ಲಗತ್ತಿಸಿ"
+ "ವೀಡಿಯೊ ರೆಕಾರ್ಡಿಂಗ್ ನಿಲ್ಲಿಸಿ"
+ "ಫೋಟೋಗಳ ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"
+
+ \"%s\" ಆಲ್ಬಮ್ಗೆ %d ಫೋಟೋಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ
+ \"%s\" ಆಲ್ಬಮ್ಗೆ %d ಫೋಟೋಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ
+
+
+ \"%s\" ಆಲ್ಬಮ್ಗೆ %d ವೀಡಿಯೊಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ
+ \"%s\" ಆಲ್ಬಮ್ಗೆ %d ವೀಡಿಯೊಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ
+
+
+ \"%s\" ಆಲ್ಬಮ್ಗೆ %d ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ
+ \"%s\" ಆಲ್ಬಮ್ಗೆ %d ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ
+
+
+ \"ಡೌನ್ಲೋಡ್ಗಳಿಗೆ\" %d ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ
+ \"ಡೌನ್ಲೋಡ್ಗಳಿಗೆ\" %d ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ
+
+
+ %d ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ
+ %d ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ
+
+
+ %d ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ
+ %d ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ
+
+ "MMS ಲಗತ್ತನ್ನು ಉಳಿಸಲಾಗಿದೆ"
+ "ಸೆಟ್ಟಿಂಗ್ಗಳು"
+ "ಆರ್ಕೈವ್ ಮಾಡಲಾಗಿದೆ"
+ "ಮುಚ್ಚು"
+ "MMS"
+ "ಸುಧಾರಿತ"
+ "ಡೀಬಗ್ ಮಾಡು"
+ "ಅಧಿಸೂಚನೆಗಳು"
+ "ಶಬ್ದ"
+ "ಶಾಂತ"
+ "ವೈಬ್ರೇಟ್"
+ "ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"
+ "SMS ವಿತರಣಾ ವರದಿಗಳು"
+ "ನೀವು ಕಳುಹಿಸುವ ಪ್ರತಿ SMS ಗೂ ವಿತರಣೆ ವರದಿಯನ್ನು ವಿನಂತಿಸಿ"
+ "ಸ್ವಯಂ-ಹಿಂಪಡೆಯುವಿಕೆ"
+ "MMS ಸಂದೇಶಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹಿಂಪಡೆದುಕೊಳ್ಳಿ"
+ "ರೋಮಿಂಗ್ನಲ್ಲಿರುವಾಗ ಸ್ವಯಂ-ಹಿಂಪಡೆಯುವಿಕೆ"
+ "ರೋಮಿಂಗ್ನಲ್ಲಿರುವಾಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ MMS ಹಿಂಪಡೆಯಿರಿ"
+ "ಗುಂಪು ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"
+ "ಅನೇಕ ಸ್ವೀಕೃತದಾರರು ಇರುವಾಗ ಒಂದೇ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು MMS ಬಳಸಿ"
+ "ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್"
+ "ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್"
+
+
+ "ನಿಮ್ಮ ಫೋನ್ ಸಂಖ್ಯೆ"
+ "ಅಪರಿಚಿತ"
+ "ಹೊರಹೋಗುವ ಸಂದೇಶಕ್ಕೆ ಧ್ವನಿಗಳು"
+ "ಡಂಪ್ SMS"
+ "ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆ ಫೈಲ್ಗೆ SMS ಕಚ್ಛಾ ಡೇಟಾವನ್ನು ಡಂಪ್ ಸ್ವೀಕರಿಸಿದೆ"
+ "ಡಂಪ್ MMS"
+ "ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆ ಫೈಲ್ಗೆ MMS ಕಚ್ಛಾ ಡೇಟಾವನ್ನು ಡಂಪ್ ಸ್ವೀಕರಿಸಿದೆ"
+ "ವೈರ್ಲೆಸ್ ಎಚ್ಚರಿಕೆಗಳು"
+ "ಸಂದೇಶ ಆಯ್ಕೆಗಳು"
+ "ಪಠ್ಯ ನಕಲಿಸು"
+ "ವಿವರಗಳನ್ನು ವೀಕ್ಷಿಸಿ"
+ "ಅಳಿಸಿ"
+ "ಫಾರ್ವರ್ಡ್ ಮಾಡು"
+ "ಸಂದೇಶ ವಿವರಗಳು"
+ "ಪ್ರಕಾರ: "
+ "ಪಠ್ಯ ಸಂದೇಶ"
+ "ಮಲ್ಟಿಮೀಡಿಯಾ ಸಂದೇಶ"
+ "ಇಂದ: "
+ "ಗೆ: "
+ "ಕಳುಹಿಸಿದ್ದು: "
+ "ಸ್ವೀಕರಿಸಿದ್ದು: "
+ "ವಿಷಯ: "
+ "ಗಾತ್ರ: "
+ "ಆದ್ಯತೆ: "
+ "SIM: "
+ "ಅಧಿಕ"
+ "ಸಾಮಾನ್ಯ"
+ "ಕಡಿಮೆ"
+ "SIM %s"
+ "ಮರೆಮಾಡಲಾಗಿರುವ ಕಳುಹಿಸುವವರ ವಿಳಾಸ"
+ "ಲಗತ್ತುಗಳನ್ನು ಲೋಡ್ ಮಾಡುತ್ತಿರುವಾಗ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."
+ "ಲಗತ್ತನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
+ "ನೆಟ್ವರ್ಕ್ ಸಿದ್ಧವಾಗಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
+ "ಪಠ್ಯ ಅಳಿಸಿ"
+ "ಪಠ್ಯ ಮತ್ತು ಸಂಖ್ಯೆಗಳ ನಡುವೆ ನಮೂದಿಸುವುದನ್ನು ಬದಲಾಯಿಸಿ"
+ "ಇನ್ನಷ್ಟು ಪಾಲ್ಗೊಳ್ಳುವವರನ್ನು ಸೇರಿಸಿ"
+ "ಭಾಗವಹಿಸುವವರನ್ನು ಖಚಿತಪಡಿಸಿ"
+ "ಹೊಸ ಸಂವಾದವನ್ನು ಪ್ರಾರಂಭಿಸಿ"
+ "ಈ ಐಟಂ ಆಯ್ಕೆಮಾಡಿ"
+ "ವೀಡಿಯೊ ಪ್ಲೇ ಮಾಡಿ"
+ "ಜನರು & ಆಯ್ಕೆಗಳು"
+ "ಡೀಬಗ್ ಮಾಡು"
+ "ಜನರು & ಆಯ್ಕೆಗಳು"
+ "ಸಾಮಾನ್ಯ"
+ "ಈ ಸಂವಾದದಲ್ಲಿರುವ ಜನರು"
+ "ಕರೆ ಮಾಡಿ"
+ "ಸಂದೇಶ ಕಳುಹಿಸಿ"
+ "<br/><small>%s</small> ನಿಂದ ಸಂದೇಶ ಕಳುಹಿಸಿ"
+
+ ಫೋಟೋಗಳನ್ನು ಕಳುಹಿಸಿ
+ ಫೋಟೋಗಳನ್ನು ಕಳುಹಿಸಿ
+
+
+ ಆಡಿಯೋಗಳನ್ನು ಕಳುಹಿಸಿ
+ ಆಡಿಯೋಗಳನ್ನು ಕಳುಹಿಸಿ
+
+
+ ವೀಡಿಯೊಗಳನ್ನು ಕಳುಹಿಸಿ
+ ವೀಡಿಯೊಗಳನ್ನು ಕಳುಹಿಸಿ
+
+
+ ಸಂಪರ್ಕ ಕಾರ್ಡ್ಗಳನ್ನು ಕಳುಹಿಸಿ
+ ಸಂಪರ್ಕ ಕಾರ್ಡ್ಗಳನ್ನು ಕಳುಹಿಸಿ
+
+
+ ಲಗತ್ತುಗಳನ್ನು ಕಳುಹಿಸಿ
+ ಲಗತ್ತುಗಳನ್ನು ಕಳುಹಿಸಿ
+
+
+ %d ಕಳುಹಿಸಲು ಲಗತ್ತುಗಳು ಸಿದ್ಧವಾಗಿವೆ
+ %d ಕಳುಹಿಸಲು ಲಗತ್ತುಗಳು ಸಿದ್ಧವಾಗಿವೆ
+
+ "ಪ್ರತಿಕ್ರಿಯೆ ಕಳುಹಿಸಿ"
+ "Google Play Store ನಲ್ಲಿ ವೀಕ್ಷಿಸಿ"
+ "ಆವೃತ್ತಿ ಮಾಹಿತಿ"
+ "ಆವೃತ್ತಿ %1$s"
+ "ಮುಕ್ತ ಮೂಲ ಪರವಾನಗಿಗಳು"
+ "ಅಧಿಸೂಚನೆಗಳು"
+ "ಲಗತ್ತು ಮಿತಿಯನ್ನು ತಲುಪಿದೆ"
+ "ಲಗತ್ತನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ."
+ "ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸುವುದೇ?"
+ "ಸಂಪರ್ಕ ಸೇರಿಸು"
+ "ವಿಷಯ"
+ "ವಿಷಯ: "
+ "%s%s"
+ "ಸಂಪರ್ಕ ಕಾರ್ಡ್ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ"
+ "ಸಂಪರ್ಕ ಕಾರ್ಡ್ ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"
+ "ಸಂಪರ್ಕ ಕಾರ್ಡ್ ವೀಕ್ಷಿಸಿ"
+
+ %d ಸಂಪರ್ಕಗಳು
+ %d ಸಂಪರ್ಕಗಳು
+
+ "ಸಂಪರ್ಕ ಕಾರ್ಡ್ಗಳು"
+ "ಜನ್ಮದಿನ"
+ "ಟಿಪ್ಪಣಿಗಳು"
+ "ಸಂದೇಶವನ್ನು ಫಾರ್ವರ್ಡ್ ಮಾಡು"
+ "ಪ್ರತ್ಯುತ್ತರ ನೀಡು"
+ "+1"
+ "+%d"
+ "SMS ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"
+ "ಕಳುಹಿಸಲು, ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್ನಂತೆ ಹೊಂದಿಸಿ"
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್ನಂತೆ ಹೊಂದಿಸಿ"
+ "ಬದಲಾಯಿಸು"
+ "ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸಲು, ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್ನಂತೆ ಹೊಂದಿಸಿ"
+ "SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ಯಾವುದೇ ಪ್ರಾಶಸ್ತ್ಯದ ಸಿಮ್ ಆಯ್ಕೆಮಾಡಲಾಗಿಲ್ಲ"
+ "ಸಾಧನದ ಮಾಲೀಕರಿಂದ ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಅನುಮತಿಸಲಾಗಿಲ್ಲ"
+ "ಸರಿ"
+ "ಸಂವಾದದಲ್ಲಿ ಹಲವಾರು ಸಹಭಾಗಿಗಳಿದ್ದಾರೆ"
+
+ ಅಮಾನ್ಯ ಸಂಪರ್ಕಗಳು
+ ಅಮಾನ್ಯ ಸಂಪರ್ಕಗಳು
+
+ "ಕ್ಯಾಮರಾ ಚಿತ್ರವನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ"
+ "ನೀವು: "
+ "%s: "
+ "ಡ್ರಾಫ್ಟ್"
+ "ನೀವು ಒಮ್ಮೆ ಹೊಸ ಸಂವಾದ ಪ್ರಾರಂಭಿಸಿದರೆ, ಅದು ಇಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಲಾಗಿರುವುದನ್ನು ನೋಡುತ್ತೀರಿ"
+ "ಆರ್ಕೈವ್ ಮಾಡಲಾದ ಸಂವಾದಗಳು ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ"
+ "ಸಂವಾದಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."
+ "ಚಿತ್ರ"
+ "ಆಡಿಯೊ ಕ್ಲಿಪ್"
+ "ವೀಡಿಯೊ"
+ "ಸಂಪರ್ಕದ ಕಾರ್ಡ್"
+ "MMS"
+ "ರದ್ದುಮಾಡು"
+ "ಮರುಪ್ರಯತ್ನಿಸು"
+ "ಹೊಸ ಸಂದೇಶವನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಂಪರ್ಕ ಹೆಸರು ಅಥವಾ ಫೊನ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ"
+ "ನಿರ್ಬಂಧಿಸು"
+ "%s ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"
+ "%s ಅನಿರ್ಬಂಧಿಸು"
+ "%s ನಿರ್ಬಂಧಿಸುವುದೇ?"
+ "ಈ ಸಂಖ್ಯೆಯಿಂದ ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ನೀವು ಮುಂದುವರೆಸುತ್ತೀರಿ ಆದರೆ ಇನ್ನು ಮುಂದೆ ಸೂಚನೆ ನೀಡುವುದಿಲ್ಲ. ಈ ಸಂವಾದವನ್ನು ಆರ್ಕೈವ್ ಮಾಡಲಾಗುವುದು."
+ "ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಪರ್ಕಗಳು"
+ "ಅನಿರ್ಬಂಧಿಸು"
+ "ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಪರ್ಕಗಳು"
+ "ಡಾಕ್ಯುಮೆಂಟ್ ಲೈಬ್ರರಿಯಿಂದ ಚಿತ್ರವನ್ನು ಆಯ್ಕೆಮಾಡಿ"
+ "ಸಂದೇಶ ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ"
+ "ಸಂದೇಶ ಕಳುಹಿಸಲಾಗಿದೆ"
+ "ಸೆಲ್ಯುಲಾರ್ ಡೇಟಾ ಆಫ್ ಮಾಡಲಾಗಿದೆ. ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ."
+ "ಸಂದೇಶಗಳನ್ನು ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ನಲ್ಲಿ ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"
+ "ಸಂದೇಶ ಕಳುಸಲು ಆಗುತ್ತಿಲ್ಲ"
+ "ಸಂದೇಶ ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗಿದೆ"
+ "ಸೆಲ್ಯುಲಾರ್ ಡೇಟಾ ಆಫ್ ಮಾಡಲಾಗಿದೆ. ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ."
+ "ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ನಲ್ಲಿ ಸಂದೇಶಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"
+ "ಸಂದೇಶವನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"
+ "ಶೂನ್ಯ"
+ "ಒಂದು"
+ "ಎರಡು"
+ "ಮೂರು"
+ "ನಾಲ್ಕು"
+ "ಐದು"
+ "ಆರು"
+ "ಏಳು"
+ "ಎಂಟು"
+ "ಒಂದತ್ತು"
+ "%1$s ಮೂಲಕ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ದೋಷ %2$d"
+ "ಅಜ್ಞಾತ ವಾಹಕದ ಮೂಲಕ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ದೋಷ %1$d"
+ "ಫಾರ್ವರ್ಡ್: %s"
+ "ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ: ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಸೇವೆಯು ಸಕ್ರಿಯಗೊಂಡಿಲ್ಲ"
+ "ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ: ಅಮಾನ್ಯವಾದ ಗಮ್ಯಸ್ಥಾನ ವಿಳಾಸ"
+ "ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ: ಅಮಾನ್ಯವಾದ ಸಂದೇಶ"
+ "ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ: ಬೆಂಬಲವಿಲ್ಲದ ವಿಷಯ"
+ "ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ: ಬೆಂಬಲವಿಲ್ಲದ ಸಂದೇಶ"
+ "ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಿಲ್ಲ: ತುಂಬಾ ದೊಡ್ಡದಾಗಿದೆ"
+ "ಹೊಸ ಸಂದೇಶ"
+ "ವೀಕ್ಷಿಸಿ"
+ "ಚಿತ್ರ"
+ "ಸೂಕ್ತವಾದ ಅಪ್ಲಿಕೇಶನ್ ಕಂಡುಬಂದಿಲ್ಲ"
+ "ಸ್ವೀಕೃತಿದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ"
+ "ಹೊಸ ಸಂದೇಶ"
+ "ರದ್ದುಮಾಡು"
+ "ಪ್ರವೇಶ ಬಿಂದು ಸಂಪಾದನೆ"
+ "ಹೊಂದಿಸಿಲ್ಲ"
+ "ಹೆಸರು"
+ "APN"
+ "MMSC"
+ "MMS ಪ್ರಾಕ್ಸಿ"
+ "MMS ಪೋರ್ಟ್"
+ "MCC"
+ "MNC"
+ "APN ಪ್ರಕಾರ"
+ "APN ಅಳಿಸು"
+ "ಹೊಸ APN"
+ "ಉಳಿಸು"
+ "ತಿರಸ್ಕರಿಸು"
+ "ಹೆಸರಿನ ಕ್ಷೇತ್ರವು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ."
+ "APN ಖಾಲಿ ಇರುವಂತಿಲ್ಲ."
+ "MCC ಕ್ಷೇತ್ರವು 3 ಅಂಕಿಗಳಾಗಿರಬೇಕು."
+ "MNC ಕ್ಷೇತ್ರವು 2 ಅಥವಾ 3 ಅಂಕಿಗಳಾಗಿರಬೇಕು."
+ "ಡೀಫಾಲ್ಟ್ APN ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ."
+ "ಡೀಫಾಲ್ಟ್ಗೆ ಮರುಹೊಂದಿಸು"
+ "ಡೀಫಾಲ್ಟ್ APN ಸೆಟ್ಟಿಂಗ್ಗಳ ಮರುಹೊಂದಿಕೆಯು ಪೂರ್ಣಗೊಂಡಿದೆ."
+ "ಶೀರ್ಷಿಕೆರಹಿತ"
+ "ಪ್ರವೇಶಿಸುವಿಕೆ ಕೇಂದ್ರದ ಹೆಸರುಗಳು"
+ "APN ಗಳು"
+ "ಹೊಸ APN"
+ "ಪ್ರವೇಶ ಬಿಂದು ಹೆಸರಿನ ಸೆಟ್ಟಿಂಗ್ಗಳು ಈ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿಲ್ಲ"
+ "ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸುವುದೇ?"
+ "ನಕಲಿಸು"
+ "%s ಗೆ"
+ "ಸಾಮಾನ್ಯ"
+ "ಸುಧಾರಿತ"
+ "ಸಾಮಾನ್ಯ ಸೆಟ್ಟಿಂಗ್ಗಳು"
+ "ಸುಧಾರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳು"
+ "\"%s\" ಸಿಮ್"
+ "ಎಲ್ಲಾ ಸ್ವೀಕೃತದಾರರಿಗೆ ಪ್ರತ್ಯೇಕ SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಿ. ಯಾವುದೇ ಪ್ರತ್ಯುತ್ತರಗಳು ನಿಮಗೆ ಮಾತ್ರ ಬರುತ್ತವೆ"
+ "ಎಲ್ಲಾ ಸ್ವೀಕೃತಿದಾರರಿಗೆ ಒಂದೇ MMS ಕಳುಹಿಸಿ"
+ "ಅಜ್ಞಾತ ಸಂಖ್ಯೆ"
+ "ಹೊಸ ಸಂದೇಶ"
+ "ಹೊಸ ಸಂದೇಶ."
+ "ಸಿಮ್ ಆಯ್ಕೆದಾರ"
+ "%1$s ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ, ಸಿಮ್ ಆಯ್ಕೆ"
+ "ವಿಷಯವನ್ನು ಸಂಪಾದಿಸಿ"
+ "ಸಿಮ್ ಆಯ್ಕೆ ಮಾಡಿ ಅಥವಾ ವಿಷಯ ಸಂಪಾದಿಸಿ"
+ "ಆಡಿಯೋ ಅನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ"
+ "ಹೊಸ ಸಂವಾದವನ್ನು ಪ್ರಾರಂಭಿಸಿ"
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ ಪಟ್ಟಿ"
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"
+ "ಹೊಸ ಸಂದೇಶ"
+ "ಸಂವಾದ ಪಟ್ಟಿ"
+ "ಸಂವಾದಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ"
+ "ಸಂದೇಶಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ"
+ "ಇನ್ನಷ್ಟು ಸಂವಾದಗಳನ್ನು ವೀಕ್ಷಿಸಿ"
+ "ಹೆಚ್ಚಿನ ಸಂದೇಶಗಳನ್ನು ವೀಕ್ಷಿಸಿ"
+ "ಸಂವಾದವನ್ನು ಅಳಿಸಲಾಗಿದೆ"
+ "ಸಂಭಾಷಣೆಯನ್ನು ಅಳಿಸಲಾಗಿದೆ. ಬೇರೆ ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ ಸಂಭಾಷಣೆಯನ್ನು ತೋರಿಸಲು ಸ್ಪರ್ಶಿಸಿ"
+ "ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"
+ "ಅನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"
+ "ಸಂಗ್ರಹಣೆ ಸ್ಥಳಾವಕಾಶವು ಕಡಿಮೆ ಇದೆ. ಕೆಲವು ಡೇಟಾ ನಷ್ಟವಾಗಬಹುದು."
+ "ಲಗತ್ತುಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"
+ "ಆಯ್ಕೆ ಖಚಿತಪಡಿಸಿ"
+ "%d ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ"
+ "ದಯವಿಟ್ಟು ಒಂದು ಅಥವಾ ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಲಗತ್ತುಗಳನ್ನು ತೆಗೆದುಹಾಕಿ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
+ "ನಿಮ್ಮ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ನೀವು ಪ್ರಯತ್ನಿಸಬಹುದು, ಆದರೆ ನೀವು ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಲಗತ್ತುಗಳನ್ನು ತೆಗೆದುಹಾಕದ ಹೊರತು ಇದು ತಲುಪದಿರಬಹುದು."
+ "ನೀವು ಪ್ರತಿ ಸಂದೇಶಕ್ಕೆ ಒಂದು ವೀಡಿಯೊ ಮಾತ್ರ ಕಳುಹಿಸಬಹುದು. ದಯವಿಟ್ಟು ಹೆಚ್ಚುವರಿ ವೀಡಿಯೊಗಳನ್ನು ತೆಗೆದುಹಾಕಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."
+ "ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯು ಲಗತ್ತನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ."
+ "ಹೇಗಾದರೂ ಕಳುಹಿಸು"
+ "ಸಂವಾದವನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"
+ "%1$s (%2$s)"
+ "%s ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ"
+
diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml
new file mode 100644
index 0000000..876776b
--- /dev/null
+++ b/res/values-ko/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "제목 없음"
+ "nosubject"
+
+
+ "예"
+ "아니요"
+ "알겠습니다"
+ "하하"
+ "감사합니다."
+ "동의합니다"
+ "좋습니다."
+ "가는 중입니다"
+ "나중에 연락드리겠습니다"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
new file mode 100644
index 0000000..79949ea
--- /dev/null
+++ b/res/values-ko/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "메시지"
+ "메시지"
+ "대화 선택"
+ "설정"
+ "메시지 보내기"
+ "첨부파일 추가"
+ "도움말"
+ "환영합니다."
+ "건너뛰기"
+ "다음 >"
+ "다음"
+ "종료"
+ "설정 >"
+ "설정"
+ "메시지를 사용하려면 SMS, 전화, 주소록에 대한 권한이 필요합니다."
+ "설정 > 앱 > 메시지 > 권한에서 권한을 변경할 수 있습니다."
+ "설정, 앱, 메시지, 권한에서 권한을 변경할 수 있습니다."
+ "자주 연락하는 사람"
+ "모든 연락처"
+ "받는사람: %s"
+ "사진 또는 동영상 캡처"
+ "이 기기에서 이미지 선택"
+ "오디오 녹음"
+ "사진 선택"
+ "미디어가 선택되었습니다."
+ "미디어가 선택 취소되었습니다."
+ "%d개 선택됨"
+ "이미지 - %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "이미지"
+ "오디오 녹음"
+ "공유"
+ "방금 전"
+ "지금"
+
+ %d분
+ %d분
+
+
+ %d시간
+ %d시간
+
+
+ %d일
+ %d일
+
+
+ %d주
+ 1주
+
+
+ %d개월
+ 1개월
+
+
+ %d년
+ 1년
+
+ "클래스 0 메시지"
+ "저장"
+ "기기의 저장공간이 부족합니다. 메시지에서 공간을 확보하기 위해 오래된 메시지를 삭제합니다."
+ "저장 공간이 부족함"
+ "기기 공간이 더 확보되어야 메시지 앱에서 메시지를 보내고 받을 수 있습니다."
+ "SMS 저장공간이 부족합니다. 메시지를 삭제해야 합니다."
+ "전화번호 확인"
+ "이 단계를 한 번만 실행하면 메시지 앱에서 그룹 메시지를 정확히 전달할 수 있습니다."
+ "전화번호"
+ "미디어가 포함된 모든 메시지 삭제"
+ "%s보다 오래된 메시지 삭제"
+ "%s 이상 된 메시지 자동 삭제"
+ "무시"
+ "미디어가 포함된 모든 메시지를 삭제하시겠습니까?"
+ "%s 이상 된 메시지를 삭제하시겠습니까?"
+ "%s 이상 된 메시지를 삭제하고 자동 삭제를 사용하시겠습니까?"
+ "%s님이 보낸 내용"
+ "보낸 내용"
+ "%s님이 보낸 메시지"
+ "메시지 전송됨"
+ "보내는 중..."
+ "전송되지 않았습니다. 다시 시도하려면 터치하세요."
+ "전송되지 않았습니다. 다시 시도하는 중…"
+ "다시 보내기 또는 삭제"
+ "음성 통화로 응급 서비스에 연락하시기 바랍니다. 현재 SMS를 보낼 수 없습니다."
+ "실패"
+ "다운로드할 새 MMS 메시지"
+ "새 MMS 메시지"
+ "다운로드하지 못했습니다."
+ "다시 시도하려면 터치"
+ "터치하여 다운로드"
+ "다운로드 또는 삭제"
+ "다운로드 중..."
+ "메시지가 만료되었거나 사용할 수 없음"
+ "크기: %1$s, 만료: %2$s"
+ "보낼 수 없습니다. 수신자가 올바르지 않습니다."
+ "네트워크에 서비스가 활성화되어 있지 않습니다."
+ "네트워크 문제로 인해 전송하지 못했습니다."
+ "메시지가 만료되었거나 사용할 수 없음"
+ "(제목 없음)"
+ "알 수 없는 발신자"
+ "전송 완료"
+ "%2$s님이 보낸 메시지(%1$s)를 다운로드할 수 없습니다."
+ "메모리가 부족하여 데이터베이스 작업을 완료할 수 없습니다."
+ "메시지를 보내지 못함"
+ "일부 메시지가 전송되지 않았습니다."
+
+ 대화 %d개에 메시지 %d개
+ 대화 1개에 메시지 %d개
+
+ "메시지를 다운로드하지 못했습니다."
+ "일부 메시지가 다운로드되지 않았습니다."
+
+ 대화 %d개에 메시지 %d개
+ 대화 1개에 메시지 %d개
+
+ "%1$s에 메시지를 보내지 못했습니다."
+ "음성 통화로 응급 서비스에 연락하시기 바랍니다. 현재 %1$s번으로 SMS를 보낼 수 없습니다."
+
+ 새 메시지 %d개
+ 새 메시지 1개
+
+ "시작"
+ "카메라를 사용할 수 없습니다."
+ "카메라를 사용할 수 없습니다."
+ "동영상을 캡처할 수 없습니다."
+ "미디어를 저장할 수 없습니다."
+ "사진을 찍을 수 없음"
+ "뒤로"
+ "보관처리됨"
+ "삭제"
+ "보관처리"
+ "보관 취소"
+ "알림 사용 중지"
+ "알림 사용"
+ "연락처 추가"
+ "다운로드"
+ "전송"
+ "삭제"
+ "이 메일을 삭제하시겠습니까?"
+ "이 작업은 취소할 수 없습니다."
+ "삭제"
+
+ 대화를 삭제하시겠습니까?
+ 대화를 삭제하시겠습니까?
+
+ "삭제"
+ "취소"
+ "받는사람"
+ "여러 이미지 선택"
+ "선택항목 확인"
+ "+%d"
+ "오디오를 녹음할 수 없습니다. 다시 시도해 주세요."
+ "오디오를 재생할 수 없습니다. 다시 시도해 주세요."
+ "오디오를 저장할 수 없습니다. 다시 시도해 주세요."
+ "길게 터치"
+ ", "
+ " "
+ ": "
+ " "
+ "사진"
+ "오디오 클립"
+ "동영상"
+ "연락처 카드"
+ "다운로드"
+ "SMS를 통해 답장"
+ "MMS로 답장"
+ "답장"
+
+ 참여자 %d명
+ 참여자 %d명
+
+ "나"
+ "연락처가 차단 및 보관되었습니다."
+ "연락처 차단 해제 및 보관 취소됨"
+ "%d개 보관됨"
+ "%d개 보관 취소됨"
+ "알림 사용 중지됨"
+ "알림 사용 설정됨"
+ "준비가 완료되었습니다. 전송을 다시 터치해 주세요."
+ "메시지가 기본 SMS 앱으로 설정되었습니다."
+
+ 첨부파일 삭제
+ 첨부파일 삭제
+
+ "오디오 첨부파일"
+ "오디오 첨부파일 재생"
+ "일시중지"
+ "%s님의 메시지입니다. %s."
+ "받지 못한 %s님의 메시지: %s. 시간: %s."
+ "%s님의 메시지: %s. 시간: %s."
+ "%s님에게 전송되지 않은 메시지: %s. 시간: %s."
+ "%s님에게 전송 중인 메시지: %s. 시간: %s."
+ "%s님에게 전송하지 못한 메시지: %s. 시간: %s."
+ "%s님에게 보내는 메시지: %s. 시간: %s."
+ "받지 못한 %s님의 메시지: %s. 시간: %s. %s."
+ "%s님의 메시지: %s. 시간: %s. %s."
+ "%s 그룹에 전송되지 않은 메시지: %s. 시간: %s."
+ "%s 그룹에 전송 중인 메시지: %s. 시간: %s."
+ "%s 그룹에 전송하지 못한 메시지: %s. 시간: %s."
+ "%s 그룹에 보내는 메시지: %s. 시간: %s."
+ "메시지를 전달하지 못했습니다. 다시 시도하려면 터치하세요."
+ "%s님과 대화"
+ "제목 삭제"
+ "동영상 촬영"
+ "정지 이미지 캡처"
+ "사진 촬영"
+ "동영상 녹화 시작"
+ "전체화면 카메라로 전환"
+ "전면 및 후면 카메라 전환"
+ "녹화 중지 및 비디오 첨부"
+ "동영상 녹화 중지"
+ "메시지 사진"
+
+ 사진 %d장이 \"%s\" 앨범에 저장됨
+ 사진 %d장이 \"%s\" 앨범에 저장됨
+
+
+ 동영상 %d개가 \"%s\" 앨범에 저장됨
+ 동영상 %d개가 \"%s\" 앨범에 저장됨
+
+
+ 첨부파일 %d개가 \"%s\" 앨범에 저장됨
+ 첨부파일 %d개가 \"%s\" 앨범에 저장됨
+
+
+ 첨부파일 %d개가 \"다운로드\"에 저장됨
+ 첨부파일 %d개가 \"다운로드\"에 저장됨
+
+
+ 첨부파일 %d개가 첨부되었습니다.
+ 첨부파일 %d개가 저장되었습니다.
+
+
+ 첨부파일 %d개를 저장하지 못했습니다.
+ 첨부파일 %d개를 저장하지 못했습니다.
+
+ "저장된 MMS 첨부파일"
+ "설정"
+ "보관처리됨"
+ "닫기"
+ "MMS"
+ "고급"
+ "디버그"
+ "알림"
+ "소리"
+ "무음"
+ "진동"
+ "차단됨"
+ "SMS 전송 보고"
+ "모든 SMS에 대해 전송 확인 요청"
+ "자동 검색"
+ "MMS 메시지를 자동으로 수신"
+ "로밍 중 자동 수신"
+ "로밍 시 MMS 자동 검색"
+ "그룹 메시지"
+ "수신자가 여러 명일 때 MMS를 사용하여 한 개의 메시지를 전송합니다."
+ "기본 SMS 앱"
+ "기본 SMS 앱"
+
+
+ "전화번호"
+ "알 수 없음"
+ "발신 메시지 소리"
+ "SMS 덤프"
+ "수신된 SMS 원시 데이터를 외부 저장소 파일에 덤프합니다."
+ "MMS 덤프"
+ "수신된 MSS 원시 데이터를 외부 저장소 파일에 덤프합니다."
+ "긴급 무선 경보"
+ "메시지 옵션"
+ "텍스트 복사"
+ "세부정보 보기"
+ "삭제"
+ "전달"
+ "메시지 세부정보"
+ "유형: "
+ "문자 메시지"
+ "멀티미디어 메시지"
+ "보낸사람: "
+ "받는사람: "
+ "보낸 시간: "
+ "받은 시간: "
+ "제목: "
+ "크기: "
+ "중요도: "
+ "SIM: "
+ "높음"
+ "보통"
+ "낮음"
+ "SIM %s"
+ "숨긴 발신자 주소"
+ "파일을 로드하는 동안 메시지를 보낼 수 없습니다."
+ "첨부파일을 로드할 수 없습니다. 다시 시도해 주세요."
+ "네트워크가 준비되지 않았습니다. 다시 시도해 주세요."
+ "텍스트 삭제"
+ "텍스트 및 숫자 입력 간 전환"
+ "더 많은 참가자 추가"
+ "참가자 확인"
+ "새로운 대화 시작"
+ "이 항목을 선택합니다."
+ "Play 동영상"
+ "사용자 및 옵션"
+ "디버그"
+ "사용자 및 옵션"
+ "일반"
+ "이 대화에 참여하는 사용자"
+ "전화 걸기"
+ "메시지 보내기"
+ "<br/><small>%s</small>에서 메시지 보내기"
+
+ 사진 전송
+ 사진 전송
+
+
+ 오디오 전송
+ 오디오 전송
+
+
+ 동영상 전송
+ 동영상 전송
+
+
+ 연락처 카드 전송
+ 연락처 카드 전송
+
+
+ 첨부파일 전송
+ 첨부파일 전송
+
+
+ 첨부파일 %d개 전송 준비 완료
+ 첨부파일 1개 전송 준비 완료
+
+ "의견 보내기"
+ "Google Play 스토어에서 보기"
+ "버전 정보"
+ "버전: %1$s"
+ "오픈소스 라이선스"
+ "알림"
+ "첨부파일 한도 도달"
+ "첨부파일을 로드하지 못했습니다."
+ "주소록에 추가하시겠습니까?"
+ "연락처 추가"
+ "제목"
+ "제목: "
+ "%s%s"
+ "연락처 카드 로드 중"
+ "연락처 카드를 로드할 수 없습니다."
+ "연락처 카드 보기"
+
+ 연락처 %d개
+ 연락처 %d개
+
+ "연락처 카드"
+ "생일"
+ "메모"
+ "메시지 전달"
+ "답장"
+ "외 1명"
+ "외 %d명"
+ "SMS 사용 중지됨"
+ "메시지를 전송하려면 메시지를 기본 SMS 앱으로 설정하세요."
+ "메시지를 기본 SMS 앱으로 설정하세요."
+ "변경"
+ "메시지를 수신하려면 메시지를 기본 SMS 앱으로 설정하세요."
+ "SMS 메시지 보내기에 사용할 기본 앱이 선택되어 있지 않습니다."
+ "기기 소유자가 허용하지 않은 앱입니다."
+ "확인"
+ "대화 참가자가 너무 많습니다."
+
+ 잘못된 연락처
+ 잘못된 연락처
+
+ "카메라 이미지를 로드할 수 없습니다."
+ "나: "
+ "%s: "
+ "임시보관"
+ "새 대화를 시작하면 여기에 표시됩니다."
+ "보관처리된 대화는 여기에 표시됩니다."
+ "대화 로드 중..."
+ "사진"
+ "오디오 클립"
+ "동영상"
+ "연락처 카드"
+ "MMS"
+ "실행취소"
+ "다시 시도"
+ "새로운 메시지를 시작하려면 연락처 이름 또는 전화번호를 입력하세요."
+ "차단"
+ "%s 차단"
+ "%s 차단 해제"
+ "%s을(를) 차단하시겠습니까?"
+ "앞으로 이 번호에서 보낸 메시지를 계속 받지만 알림은 더 이상 받지 않습니다. 이 대화는 보관처리됩니다."
+ "차단된 연락처"
+ "차단 해제"
+ "차단된 연락처"
+ "문서 라이브러리에서 이미지 선택"
+ "메시지를 전송하는 중입니다."
+ "메시지가 전송되었습니다."
+ "이동통신 데이터 사용이 중지되어 있습니다. 설정을 확인하세요."
+ "비행기 모드에서는 메시지를 보낼 수 없습니다."
+ "메시지를 보내지 못했습니다."
+ "메시지가 다운로드되었습니다."
+ "이동통신 데이터 사용이 중지되어 있습니다. 설정을 확인하세요."
+ "비행기 모드에서 메시지를 다운로드할 수 없습니다."
+ "메시지를 다운로드할 수 없습니다."
+ "0"
+ "1"
+ "2"
+ "3"
+ "4"
+ "5"
+ "6"
+ "7"
+ "8"
+ "9"
+ "%1$s을(를) 사용하여 메시지를 보낼 수 없습니다. 오류: %2$d"
+ "알 수 없는 이동통신사를 사용하여 메시지를 보낼 수 없습니다. 오류: %1$d"
+ "전달: %s"
+ "서비스가 네트워크에서 활성화되지 않아 메시지가 전송되지 않았습니다."
+ "메시지가 전송되지 않음: 잘못된 수신 주소"
+ "메시지가 전송되지 않음: 잘못된 메시지"
+ "메시지가 전송되지 않음: 지원되지 않는 콘텐츠"
+ "메시지가 전송되지 않음: 지원되지 않는 메시지"
+ "메시지가 전송되지 않음: 용량 초과"
+ "새 메시지"
+ "보기"
+ "이미지"
+ "관련 애플리케이션을 찾을 수 없습니다."
+ "수신자 삭제"
+ "새 메시지"
+ "취소"
+ "액세스포인트 네임(APN) 수정"
+ "설정되지 않음"
+ "이름"
+ "APN"
+ "MMSC"
+ "MMS 프록시"
+ "MMS 포트"
+ "MCC"
+ "MNC"
+ "APN 유형"
+ "APN 삭제"
+ "새 APN"
+ "저장"
+ "취소"
+ "이름 입력란은 비워둘 수 없습니다."
+ "APN을 비워둘 수 없습니다."
+ "MCC 입력란에는 3자리 숫자를 입력해야 합니다."
+ "MNC 입력란에는 2~3자리 숫자를 입력해야 합니다."
+ "기본 APN 설정 복원 중"
+ "기본값으로 재설정"
+ "기본 APN 설정을 초기화했습니다."
+ "제목 없음"
+ "APN"
+ "APN"
+ "새 APN"
+ "이 사용자는 액세스포인트 네임(APN) 설정을 수정할 수 없습니다."
+ "클립보드에 복사할까요?"
+ "복사"
+ "전송 대상: %s"
+ "일반"
+ "고급"
+ "일반 설정"
+ "고급 설정"
+ "\'%s\' SIM"
+ "모든 수신자에게 개별 SMS 보내기(나만 답장을 받을 수 있음)"
+ "모든 수신자에게 하나의 MMS 보내기"
+ "알 수 없는 번호"
+ "새 메시지"
+ "새 메시지"
+ "SIM 선택기"
+ "%1$s 선택됨. SIM 선택기"
+ "제목 수정"
+ "SIM 선택 또는 제목 수정"
+ "길게 눌러 오디오 녹음"
+ "새로운 대화 시작"
+ "메시지"
+ "메시지 목록"
+ "메시지"
+ "새 메시지"
+ "대화 목록"
+ "대화 로드 중"
+ "메시지 로드 중"
+ "대화 더보기"
+ "메시지 더보기"
+ "대화를 삭제함"
+ "대화가 삭제되었습니다. 다른 메시지 대화를 표시하려면 터치하세요."
+ "차단됨"
+ "차단 해제됨"
+ "저장공간이 충분하지 않아 일부 데이터가 저장되지 않을 수 있습니다."
+ "첨부파일 선택"
+ "선택항목 확인"
+ "%d개 선택됨"
+ "하나 이상의 첨부파일을 삭제하고 다시 시도하세요."
+ "메시지 보내기를 시도할 수는 있지만 하나 이상의 첨부파일을 삭제하지 않으면 전송되지 않을 수 있습니다."
+ "메시지당 하나의 동영상만 보낼 수 있습니다. 추가 동영상을 삭제하고 다시 시도하세요."
+ "메시지에서 첨부파일이 로드되지 않았습니다."
+ "무시하고 보내기"
+ "대화를 시작할 수 없습니다."
+ "%1$s(%2$s)"
+ "%s 선택됨"
+
diff --git a/res/values-ky-rKG/arrays.xml b/res/values-ky-rKG/arrays.xml
new file mode 100644
index 0000000..0227144
--- /dev/null
+++ b/res/values-ky-rKG/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "темасы жок"
+ "темасыжок"
+
+
+ "Ооба"
+ "Жок"
+ "OK"
+ "Хе-хе"
+ "Рахмат"
+ "Туура"
+ "Сонун"
+ "Жолдомун"
+ "Макул, бир аздан кийин кайрылайынчы"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
new file mode 100644
index 0000000..b53ca0c
--- /dev/null
+++ b/res/values-ky-rKG/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "SMS/MMS"
+ "SMS/MMS"
+ "Маек тандаңыз"
+ "Жөндөөлөр"
+ "Билдирүү жөнөтүү"
+ "Тиркеме кошуңуз"
+ "Жардам"
+ "Кош келиңиз"
+ "Өткөрүп жиберүү"
+ "Кийинки >"
+ "Кийинки"
+ "Чыгуу"
+ "Жөндөөлөр >"
+ "Жөндөөлөр"
+ "SMS/MMS\'ке SMS, телефон жана байланыштар уруксаты керек."
+ "Уруксаттарды өзгөртүү үчүн Жөндөөлөр > Колдонмолор > SMS/MMS > уруксаттарды басыңыз."
+ "Уруксаттарды өзгөртүү үчүн Жөндөөлөр, Колдонмолор, SMS/MMS, уруксаттарды басыңыз."
+ "Көп байланышкандар"
+ "Бардык байланыштар"
+ "Төмөнкүгө жөнөтүү %s"
+ "Сүрөттөрдү же видео тартып алуу"
+ "Бул түзмөктөн сүрөттөрдү тандаңыз"
+ "Аудио жаздыруу"
+ "Сүрөт тандаңыз"
+ "Медиа файл тандалды."
+ "Медиа файл тандоодон чыгарылды."
+ "%d тандалды"
+ "сүрөт %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "сүрөт"
+ "Аудио жаздыруу"
+ "Бөлүшүү"
+ "Жаңы эле"
+ "Азыр"
+
+ %d мүн
+ %d мүн
+
+
+ %d саат
+ %d саат
+
+
+ %d күн
+ %d күн
+
+
+ %d апта
+ бир апта
+
+
+ %d ай
+ бир ай
+
+
+ %d жыл
+ бир жыл
+
+ "0 классындагы билдирүү"
+ "Сактоо"
+ "Түзмөктө бош орун жетишпейт. Орун бошотуу үчүн, SMS/MMS эски SMS билдирүүлөрүн автоматтык түрдө жок кылат."
+ "Сактагычта орун калбай баратат"
+ "Түзмөгүңүздө көбүрөөк бош орун болмоюнча, SMS/MMS билдирүүлөрдү жөнөтүп же ала албашы мүмкүн."
+ "SMS үчүн орун жетишпейт. Билдирүүлөрдү жок кылышыңыз керек окшойт."
+ "Телефон номериңизди ырастаңыз"
+ "Номер топтошкон SMS/MMS билдирүүлөрүн жөнөтүү үчүн талап кылынат. Аны бир гана жолу киргизүү керек."
+ "Телефон номери"
+ "Медиа файл камтылган бардык билдирүүлөрдү жок кылуу"
+ "%s ашкан билдирүүлөрдү жок кылуу"
+ "%s мурунку билдирүүлөр автоматтык түрдө жок кылынсын"
+ "Көңүл бурбоо"
+ "Медиа менен бардык файлдар жок кылынсынбы?"
+ "%s мурунку файлдар жок кылынсынбы?"
+ "%s мурунку билдирүүлөр жок кылынып, авто жок кылуу күйгүзүлсүнбү?"
+ "%s айтты"
+ "Сиз айттыңыз"
+ "%s дегенден билдирүү"
+ "Билдирүү жөнөттүңүз"
+ "Жөнөтүлүүдө…"
+ "Жөнөтүлгөн жок. Дагы аракет кылуу үчүн тийип коюңуз."
+ "Жөнөтүлгөн жок. Кайра аракет жасалууда…"
+ "Кайра жөнөтүү же жок кылуу"
+ "Өзгөчө кырдаал кызматтарына үн чалуу жасаңыз. Азыркы учурда текст билдирүүңүз жеткирилбей койду."
+ "Болбой калды"
+ "Жүктөлүп алынуучу жаңы MMS билдирүү"
+ "Жаңы MMS билдирүү"
+ "Жүктөлүп алынган жок"
+ "Дагы аракет кылуу үчүн тийип коюңуз"
+ "Жүктөп алуу үчүн тийип коюңуз"
+ "Жүктөп алуу же жок кылуу"
+ "Жүктөлүүдө…"
+ "Билдирүү мөөнөтү аяктады же жеткиликтүү эмес"
+ "өлчөмү: %1$s, мөөнөтү бүтөт: %2$s"
+ "Жөнөтүлбөй жатат. Алуучу жарактуу эмес."
+ "Тармакта кызмат жандырылган эмес"
+ "Тармактагы көйгөйдөн улам жөнөтүлгөн жок"
+ "Билдирүү мөөнөтү аяктады же жеткиликтүү эмес"
+ "(Темасы жок)"
+ "Белгисиз жөнөтүүчү"
+ "Жеткирилди"
+ "%2$s келген %1$s билдирүүсү жүктөлүп алынган жок."
+ "Сактагычта орун аз болгондуктан, дайындар базасы аяктабай калды"
+ "Билдирүү жөнөтүлгөн жок"
+ "Айрым SMS/MMS билдирүүлөрү жөнөтүлгөн жок"
+
+ %d баарлашууда %d билдирүү
+ Бир баарлашууда %d билдирүү
+
+ "Билдирүү жүктөлүп алынган жок"
+ "Айрым SMS/MMS билдирүүлөрү жүктөлүп алынган жок"
+
+ %d баарлашууда %d билдирүү
+ Бир баарлашууда %d билдирүү
+
+ "%1$s дегенге билдирүү жөнөтүлгөн жок"
+ "Өзгөчө кырдаал кызматтарына үн чалуу жасаңыз. Азыркы учурда %1$s номерине текст билдирүүңүз жеткирилбей койду."
+
+ %d жаңы билдирүү
+ Жаңы билдирүү
+
+ "Баштоо"
+ "Камера жеткиликтүү эмес"
+ "Камера жеткиликтүү эмес"
+ "Видеону тартып алуу жеткиликтүү эмес"
+ "Медиа сакталбай жатат"
+ "Сүрөткө тарта албайт"
+ "Артка"
+ "Архивделди"
+ "Жок кылуу"
+ "Архивдөө"
+ "Архивден чыгаруу"
+ "Эскертмелерди өчүрүү"
+ "Эскертмелерди күйгүзүү"
+ "Байланыш кошуу"
+ "Жүктөп алуу"
+ "Жөнөтүү"
+ "Жок кылуу"
+ "Бул билдирүү жок кылынсынбы?"
+ "Бул аракетти артка кайтаруу мүмкүн эмес."
+ "Жок кылуу"
+
+ Бул баарлашуулөр жок кылынсынбы?
+ Бул баарлашуу жок кылынсынбы?
+
+ "Жок кылуу"
+ "Жокко чыгаруу"
+ "Кимге"
+ "Бир нече сүрөт тандаңыз"
+ "Тандалгандарды ырастаңыз"
+ "+%d"
+ "Аудио жазылбай жатат. Дагы аракет кылыңыз."
+ "Аудио ойнотулбай жатат. Дагы аракет кылыңыз."
+ "Аудио сакталган жок. Дагы аракет кылыңыз."
+ "Коё бербей amp; тийип туруу"
+ ", "
+ " "
+ ": "
+ " "
+ "Сүрөт"
+ "Аудио клип"
+ "Видео"
+ "Байланыш картасы"
+ "Жүктөп алуу"
+ "SMS аркылуу жооп берүү"
+ "MMS аркылуу жооп берүү"
+ "Жооп берүү"
+
+ %d катышуучу
+ %d катышуучу
+
+ "Мен"
+ "Байланыш бөгөттөлдү & архивделди"
+ "Байланыш бөгөттөн жана архивден чыгарылды"
+ "%d архивделди"
+ "%d архивден чыгарылды"
+ "Эскертмелер өчүрүлгөн"
+ "Эскертмелер күйгүзүлгөн"
+ "Баары коюлду. Жөнөтүүнү кайра басыңыз."
+ "SMS/MMS демейки SMS колдонмосу катары коюлду."
+
+ Тиркемелерди жарактан чыгаруу
+ Тиркемени жарактан чыгаруу
+
+ "Аудио тиркеме"
+ "Аудио тиркемени ойнотуу"
+ "Бир азга токтотуу"
+ "%s жөнөткөн билдирүү: %s."
+ "%s: %s билдирүүсү бузулду. Убакыт: %s"
+ "%s: %s билдирүүсү. Убакыт: %s"
+ "Төмөнкүгө жиберилбеген билдирү %s: %s. Убакыт: %s"
+ "Төмөнкүгө билдирүү жөнөтүлүүдө: %s: %s. Убакыт: %s"
+ "%s: %s билдирүүсү бузулду. Убакыт: %s"
+ "%s: %s билдирүүсү. Убакыт: %s"
+ "%s: %s билдирүүсү бузулду. Убакыт: %s. %s."
+ "%s: %s билдирүүсү. Убакыт: %s. %s."
+ "Төмөнкүгө жиберилбеген билдирүү: %s: %s. Убакыт: %s"
+ "Төмөнкүгө билдирүү жөнөтүлүүдө: %s: %s. Убакыт: %s"
+ "%s: %s билдирүүсү бузулду. Убакыт: %s"
+ "%s: %s билдирүүсү. Убакыт: %s"
+ "Билдирүү жөнөтүлбөй койду. Кайра аракет кылуу үчүн тийип коюңуз."
+ "%s менен сүйлөшүү"
+ "Темасын жок кылуу"
+ "Видео жаздыруу"
+ "Кыймылдабаган сүрөттү тартып алуу"
+ "Сүрөт тартуу"
+ "Видео тартып баштоо"
+ "Камераны толук экранга которуу"
+ "Алдыңкы жана арткы камераны которуштуруу"
+ "Тартылып жаткан видеону токтотуп, тиркеңиз"
+ "Видео жаздырууну токтотуу"
+ "SMS/MMS сүрөттөрү"
+
+ %d сүрөт \"%s\" альбомуна сакталды
+ %d сүрөт \"%s\" альбомуна сакталды
+
+
+ %d видео \"%s\" альбомуна сакталды
+ %d видео \"%s\" альбомуна сакталды
+
+
+ %d тиркеме \"%s\" альбомуна сакталды
+ %d тиркеме \"%s\" альбомуна сакталды
+
+
+ %d тиркеме \"Жүктөлүп алынгандарга\" сакталды
+ %d тиркеме \"Жүктөлүп алынгандарга\" сакталды
+
+
+ %d тиркеме сакталды
+ %d тиркеме сакталды
+
+
+ %d тиркеме сакталбай калды
+ %d тиркеме сакталбай калды
+
+ "Сакталган MMS тиркемеси"
+ "Жөндөөлөр"
+ "Архивделди"
+ "Жабуу"
+ "MMS"
+ "Өркүндөтүлгөн"
+ "Мүчүлүштүктөрдү таап оңдоо"
+ "Эскертмелер"
+ "Үн"
+ "Үнсүз"
+ "Дирилдөө"
+ "Бөгөттөлгөн"
+ "SMS жеткирүү кабарлары"
+ "Ар бир жөнөтүлгөн SMS билдирүүсүнүн алынгандыгын кабарлап коюну өтүнүү"
+ "Авто-түшүрүү"
+ "MMS билдирүүлөрүн автоматтык түрдө түшүрүп алуу"
+ "Роумингде авто-түшүрүп алуу"
+ "Роуминг учурунда MMS\'ти автоматтык түрдө чыгарып алуу"
+ "Топтошуп билдирүү жазышуу"
+ "Бир нече алуучуга бир билдирүү жөнөтүү үчүн MMS\'ти колдонуңуз"
+ "Демейки SMS колдонмо"
+ "Демейки SMS колдонмо"
+
+
+ "Телефон номериңиз"
+ "Белгисиз"
+ "Билдирүү кеткенде добуш чыксын"
+ "SMS\'ти ыргытуу"
+ "Алынган SMS\'тин чийки дайындарын тышкы сактагычтагы файлга ыргытыңыз"
+ "MMS\'ти ыргытуу"
+ "Алынган MMS\'тин чийки дайындарын тышкы сактагычтагы файлга ыргытыңыз"
+ "Зымсыз айгай кабарлар"
+ "Билдирүүнүн параметрлери"
+ "Текстти көчүрүү"
+ "Дайындарды карап көрүү"
+ "Жок кылуу"
+ "Багыттоо"
+ "Билдирүүнүн чоо-жайы"
+ "Түрү: "
+ "SMS билдирүүсү"
+ "Мультимедиа билдирүүсү"
+ "Кимден: "
+ "Кимге: "
+ "Жөнөтүлдү: "
+ "Алынды: "
+ "Темасы: "
+ "Өлчөмү: "
+ "Шашылыштыгы: "
+ "SIM: "
+ "Жогору"
+ "Орточо"
+ "Төмөн"
+ "SIM %s"
+ "Дареги жашырылган жөнөтүүчү"
+ "Тиркемелер жүктөлүп жатканда билдирүү жөнөтүлбөйт."
+ "Тиркеме жүктөлбөй жатат. Дагы аракет кылыңыз."
+ "Тармак даяр эмес. Дагы аракет кылыңыз."
+ "Текстти жок кылуу"
+ "Текст жана сандарды киргизүү ыкмаларын которуштуруу"
+ "Дагы катышуучуларды кошуу"
+ "Катышуучуларды ырастоо"
+ "Жаңы сүйлөшүү баштоо"
+ "Бул нерсени тандоо"
+ "Видео ойнотуу"
+ "Адамдар & параметрлер"
+ "Мүчүлүштүктөрдү таап оңдоо"
+ "Адамдар & параметрлер"
+ "Жалпы"
+ "Бул маектеги адамдар"
+ "Чалуу"
+ "Билдирүү жөнөтүү"
+ "<br/><small> %s</small> аркылуу билдирүү жөнөтүү"
+
+ Сүрөттөрдү жөнөтүү
+ Сүрөт жөнөтүү
+
+
+ Аудиолорду жөнөтүү
+ Аудио жөнөтүү
+
+
+ Видеолорду жөнөтүү
+ Видео жөнөтүү
+
+
+ Байланыш карталарын жөнөтүү
+ Байланыш картасын жөнөтүү
+
+
+ Тиркемелерди жөнөтүү
+ Тиркемени жөнөтүү
+
+
+ %d тиркеме жөнөтүүгө даяр
+ Бир тиркеме жөнөтүүгө даяр
+
+ "Жооп пикир жөнөтүү"
+ "Google Play Дүкөнүндө карап көрүү"
+ "Версия маалыматы"
+ "%1$s версиясы"
+ "Ачык булак лицензиялары"
+ "Эскертмелер"
+ "Тиркеме чегине жетти"
+ "Тиркеме жүктөлбөй койду."
+ "Байланыштарга кошулсунбу?"
+ "Байланыш кошуу"
+ "Тема"
+ "Темасы: "
+ "%s%s"
+ "Байланыш картасы жүктөлүүдө"
+ "Байланыштын картасы жүктөлгөн жок"
+ "Байланыш картасын карап көрүү"
+
+ %d байланыш
+ %d байланыш
+
+ "Байланыш карталары"
+ "Туулган күн"
+ "Эскертүүлөр"
+ "Билдирүүнү багыттоо"
+ "Жооп берүү"
+ "+1"
+ "+%d"
+ "SMS өчүк"
+ "Билдирүүлөрдү жөнөтүү үчүн, SMS/MMS\'ти демейки SMS колдонмосу катары коюңуз"
+ "SMS/MMS\'ти демейки SMS колдонмосу катары коюңуз"
+ "Өзгөртүү"
+ "Билдирүүлөрдү алуу үчүн, SMS/MMS\'ти демейки SMS колдонмосу катары коюңуз"
+ "SMS билдирүүлөрдү жөнөтүү үчүн артыкчылыктуу SIM тандалган эмес"
+ "Бул колдонмого түзмөк ээсинен уруксат жок."
+ "OK"
+ "Маекте катышуучулар өтө эле көп"
+
+ Жараксыз байланыштар
+ Жараксыз байланыш
+
+ "Камера сүрөтү жүктөлгөн жок"
+ "Сиз: "
+ "%s: "
+ "Сомо"
+ "Жаңы маек башталганда, аны бул жердеги тизмеден көрөсүз"
+ "Архивделген маектер бул жерден көрүнөт"
+ "Маектер жүктөлүүдө…"
+ "Сүрөт"
+ "Аудио клип"
+ "Видео"
+ "Байланыш картасы"
+ "MMS"
+ "Кайтаруу"
+ "Дагы аракет кылуу"
+ "Жаңы билдирүүнү жазып баштоо үчүн байланыштын атын же телефон номерин киргизиңиз"
+ "Бөгөттөө"
+ "%s дегенди бөгөттөө"
+ "%s дегенди бөгөттөн чыгаруу"
+ "%s бөгөттөлсүнбү?"
+ "Бул номерден билдирүүлөрдү ала бересиз, бирок мындан ары эскертмелерди албай каласыз. Бул маек архивделет."
+ "Бөгөттөлгөн байланыштар"
+ "БӨГӨТТӨН ЧЫГАРУУ"
+ "Бөгөттөлгөн байланыштар"
+ "Документтер китепканасынан сүрөт тандаңыз"
+ "Билдирүү жөнөтүлүүдө…"
+ "Билдирүү жөнөтүлдү"
+ "Уюлдук дайындар өчүрүлгөн. Жөндөөлөрүңүздү текшериңиз."
+ "Учак режиминде билдирүүлөр жөнөтүлбөйт"
+ "Билдирүү жөнөтүлбөй жатат"
+ "Билдирүү жүктөлүп алынды"
+ "Уюлдук дайындар өчүрүлгөн. Жөндөөлөрүңүздү текшериңиз."
+ "Учак режиминде билдирүүлөрдү жүктөп ала албайт"
+ "Билдирүү жүктөлүп алынбай койду"
+ "Ноль"
+ "Бир"
+ "Эки"
+ "Үч"
+ "Төрт"
+ "Беш"
+ "Алты"
+ "Жети"
+ "Сегиз"
+ "Тогуз"
+ "Билдирүүнү %1$s оператору аркылуу жөнөтүү мүмкүн эмес, ката %2$d"
+ "Билдирүүнү белгисиз түзмөк аркылуу жөнөтүү мүмкүн эмес, ката %1$d"
+ "Багыттоо: %s"
+ "Билдирүү жөнөтүлгөн жок: кызмат тармакта жандырылган эмес"
+ "Билдирүү жөнөтүлгөн жок: жеткирүү дареги жараксыз"
+ "Билдирүү жөнөтүлгөн жок: билдирүү жараксыз"
+ "Билдирүү жөнөтүлгөн жок: мазмун колдоого алынбайт"
+ "Билдирүү жөнөтүлгөн жок: билдирүү колдоого алынбайт"
+ "Билдирүү жөнөтүлгөн жок: өтө чоң"
+ "Жаңы билдирүү"
+ "Карап көрүү"
+ "Сүрөт"
+ "Ылайыктуу колдонмо табылган жок"
+ "Алуучуну чыгарып салуу"
+ "Жаңы билдирүү"
+ "Жокко чыгаруу"
+ "Мүмкүнчүлүк алуу түйүнүн түзөтүү"
+ "Коюлган эмес"
+ "Ысымы"
+ "APN"
+ "MMSC"
+ "MMS прокси"
+ "MMS порту"
+ "MCC"
+ "MNC"
+ "APN түрү"
+ "APN жок кылуу"
+ "Жаңы APN"
+ "Сактоо"
+ "Жарактан чыгаруу"
+ "Аталыш талаасы бош болбошу керек."
+ "APN бош болбошу керек."
+ "MCC талаасы 3 сандан турушу керек."
+ "MNC талаасы 2 же 3 сандан турушу керек."
+ "Демейки APN жөндөөлөрү калыбына келтирилүүдө."
+ "Баштапкы абалга келтирүү"
+ "Демейки APN жөндөөлөрү баштапкы абалга келтирилди."
+ "Аталышы жок"
+ "Мүмкүнчүлүк алуу түйүнүнүн аталыштары"
+ "APN\'дер"
+ "Жаңы APN"
+ "Бул колдонуучу мүмкүнчүлүк алуу түйүнүнүн аталышынын жөндөөлөрүн колдоно албайт"
+ "Буферге көчүрүлсүнбү?"
+ "Көчүрүү"
+ "%s SIMге"
+ "Жалпы"
+ "Өркүндөтүлгөн"
+ "Жалпы жөндөөлөр"
+ "Өркүндөтүлгөн жөндөөлөр"
+ "\"%s\" SIM"
+ "Бардык алуучуларга жеке SMS билдирүүлөрүн жөнөтүү. Бардык жоопторду сиз гана аласыз"
+ "Бардык алуучуларга бир MMS жөнөтүү"
+ "Белгисиз номер"
+ "Жаңы билдирүү"
+ "Жаңы билдирүү."
+ "SIM тандагыч"
+ "%1$s тандалган, SIM тандагыч"
+ "Теманы түзөтүү"
+ "SIM тандоо же теманы түзөтүү"
+ "Аудио жаздырыш үчүн кол тийгизип туруңуз"
+ "Жаңы сүйлөшүү баштоо"
+ "SMS/MMS"
+ "SMS/MMS тизмеси"
+ "SMS/MMS"
+ "Жаңы билдирүү"
+ "Маек тизмеси"
+ "Сүйлөшүүлөр жүктөлүүдө…"
+ "Билдирүүлөр жүктөлүүдө"
+ "Көбүрөөк сүйлөшүүлөрдү көрүү"
+ "Дагы билдирүүлөрдү көрүү"
+ "Сүйлөшүү жок кылынды"
+ "Сүйлөшүү жок кылынды. Башка SMS/MMS сүйлөшүүсүн көрсөтүү үчүн тийиңиз"
+ "Бөгөттөлдү"
+ "Бөгөттөн чыгарылды"
+ "Сактагычта бош орун аз. Айрым дайындар жоголушу мүмкүн."
+ "Тиркемелерди тандаңыз"
+ "Тандалгандарды ырастаңыз"
+ "%d тандалды"
+ "Тиркемелердин бирин же көбүрөөгүн алып салып, кайра аракет кылыңыз."
+ "Билдирүүңүздү жөнөтүп көрсөңүз болот, бирок ал бир же көбүрөөк тиркемени алып салмайыңызча жеткирилбеши мүмкүн."
+ "Бир билдирүү менен бир эле видео жөнөтө аласыз. Кошумча видеолорду алып салып, кайра аракет кылыңыз."
+ "Тиркелген файлдар жүктөлбөй калды."
+ "Баары бир жөнөтүлсүн"
+ "Сүйлөшүүнү баштай алган жок"
+ "%1$s (%2$s)"
+ "%s тандалды"
+
diff --git a/res/values-ldrtl-v21/styles.xml b/res/values-ldrtl-v21/styles.xml
new file mode 100644
index 0000000..4775979
--- /dev/null
+++ b/res/values-ldrtl-v21/styles.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/res/values-ldrtl/styles.xml b/res/values-ldrtl/styles.xml
new file mode 100644
index 0000000..bd270c7
--- /dev/null
+++ b/res/values-ldrtl/styles.xml
@@ -0,0 +1,273 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values-lo-rLA/arrays.xml b/res/values-lo-rLA/arrays.xml
new file mode 100644
index 0000000..cae3797
--- /dev/null
+++ b/res/values-lo-rLA/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "ບໍ່ມີຫົວຂໍ້"
+ "ບໍ່ມີຫົວຂໍ້"
+
+
+ "ແມ່ນແລ້ວ"
+ "ບໍ່"
+ "ຕົກລົງ"
+ "ຮິຮິ"
+ "ຂອບໃຈ"
+ "ຂ້ອຍຍອມຮັບ"
+ "ຄັກຫຼາຍ"
+ "ກຳລັງໄປ"
+ "ຕົກລົງ, ດຽວຂ້ອຍຈະຕິດຕໍ່ກັບໄປ"
+ ":)"
+ ":("
+
+
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..f433031
--- /dev/null
+++ b/res/values-lo-rLA/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "ຂໍ້ຄວາມ"
+ "ຂໍ້ຄວາມ"
+ "ເລືອກການແປງຂໍ້ມູນ"
+ "ການຕັ້ງຄ່າ"
+ "ສົ່ງຂໍ້ຄວາມ"
+ "ເພີ່ມໄຟລ໌ແນບ"
+ "ຊ່ວຍເຫຼືອ"
+ "ຍິນດີຕ້ອນຮັບ"
+ "ຂ້າມ"
+ "ຕໍ່ໄປ >"
+ "ຕໍ່ໄປ"
+ "ອອກ"
+ "ການຕັ້ງຄ່າ >"
+ "ການຕັ້ງຄ່າ"
+ "ການສົ່ງຂໍ້ຄວາມຕ້ອງການການອະນຸຍາດຫາ SMS, ໂທລະສັບ ແລະ ລາຍຊື່."
+ "ທ່ານສາມາດປ່ຽນແປງການການອະນຸຍາດໄດ້ຢູ່ໃນການຕັ້ງຄ່າ > ແອັບ > ຂໍ້ຄວາມ > ການອະນຸຍາດ."
+ "ທ່ານສາມາດປ່ຽນແປງການອະນຸຍາດໄດ້ຢູ່ໃນການຕັ້ງຄ່າ, ແອັບ, ຂໍ້ຄວາມ, ການອະນຸຍາດ."
+ "ຄວາມຖີ່"
+ "ລາຍຊື່ຜູ້ຕິດຕໍ່ທັງໝົດ"
+ "ສົ່ງໄປ %s"
+ "ບັນທຶກຮູບ ຫຼືວິດີໂອ"
+ "ເລືອກຮູບສຳລັບອຸປະກອນນີ້"
+ "ບັນທຶກສຽງ"
+ "ເລືອກຮູບ"
+ "ມີດີນີ້ຖືກເລືອກແລ້ວ."
+ "ມີເດຍຖືກຖອນເລືອກແລ້ວ."
+ "ເລືອກແລ້ວ %d ລາຍການ"
+ "ຮູບ %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "ຮູບ"
+ "ບັນທຶກສຽງ"
+ "ແບ່ງປັນ"
+ "ຕອນນີ້"
+ "ຕອນນີ້"
+
+ %d ນທ
+ %d ນທ
+
+
+ %d ຊົ່ວໂມງ
+ %d ຊົ່ວໂມງ
+
+
+ %d ວັນ
+ %d ວັນ
+
+
+ %d ອາທິດ
+ ໜຶ່ງອາທິດ
+
+
+ %d ເດືອນ
+ ໜຶ່ງເດືອນ
+
+
+ %d ປີ
+ ໜຶ່ງປີ
+
+ "ຂໍ້ຄວາມຄລາສ 0"
+ "ບັນທຶກ"
+ "ອຸປະກອນມີພື້ນທີ່ເກັບຂໍ້ມູນໜ້ອຍ. ການສົ່ງຂໍ້ຄວາມຈະລຶບຂໍ້ຄວາມເກົ່າໂດຍອັດຕະໂນມັດ ເພື່ອເຮັດໃຫ້ມີພື້ນທີ່ຫວ່າງເພີ່ມຂຶ້ນ."
+ "ພື້ນທີ່ຈັດເກັບຂໍ້ມູນກຳລັງຈະເຕັມ"
+ "ການສົ່ງຂໍ້ຄວາມອາດຈະບໍ່ສົ່ງ ຫຼື ຮັບຂໍ້ຄວາມຈົນກ່ວາມີພື້ນທີ່ເພີ່ມເຕີມຢູ່ໃນອຸປະກອນຂອງທ່ານ."
+ "ພື້ນທີ່ເກັບຂໍ້ຄວາມໜ້ອຍລົງ. ທ່ານອາດຈະຕ້ອງລຶບຂໍ້ຄວາມເກົ່າອອກກ່ອນ."
+ "ຢືນຢັນເບີໂທລະສັບຂອງທ່ານ"
+ "ຂັ້ນຕອນໃຊ້ເທື່ອດຽວນີ້ຈະຮັບປະກັນໃຫ້ຂໍ້ຄວາມສົ່ງຂໍ້ຄວາມກຸ່ມຂອງທ່ານໄດ້ຢ່າງຖືກຕ້ອງ."
+ "ເບີໂທລະສັບ"
+ "ລຶບຂໍ້ຄວາມທັງໝົດພ້ອມທັງມີເດຍຕ່າງໆ"
+ "ລຶບຂໍ້ຄວາມທີ່ເກົ່າກວ່າ %s"
+ "ລຶບຂໍ້ຄວາມເກົ່າກວ່າ %s ໂດຍອັດຕະໂນມັດ"
+ "ບໍ່ສົນໃຈ"
+ "ລຶບຂໍ້ຄວາມທັງໝົດພ້ອມທັງມີເດຍຕ່າງໆຫຼືບໍ່?"
+ "ລຶບຂໍ້ຄວາມທີ່ເກົ່າກວ່າ %s ຫຼືບໍ່?"
+ "ລຶບຂໍ້ຄວາມເກົ່າກວ່າ %s ແລະ ເປີດການລຶບໂດຍອັດຕະໂນມັດຫຼືບໍ່?"
+ "%s ໄດ້ເວົ້າ"
+ "ທ່ານໄດ້ເວົ້າ"
+ "ຂໍ້ຄວາມຈາກ %s"
+ "ທ່ານໄດ້ສົ່ງຂໍ້ຄວາມ"
+ "ກຳລັງສົ່ງ..."
+ "ສົ່ງບໍ່ໄດ້. ສຳຜັດເພື່ອລອງໃໝ່ອີກຄັ້ງ."
+ "ສົ່ງບໍ່ໄດ້. ກຳລັງລອງໃໝ່ອີກຄັ້ງ…"
+ "Resend or delete"
+ "ກະລຸນາໂທດ້ວຍສຽງໄປຫາບໍລິການສຸກເສີນ. ຂໍ້ຄວາມຂອງທ່ານບໍ່ສາມາດນຳສົ່ງໄດ້ໃນເວລານີ້."
+ "ລົ້ມເຫລວ"
+ "ຂໍ້ຄວາມ MMS ໃຫມ່ທີ່ຈະດາວໂຫລດ"
+ "ຂໍ້ຄວາມ MMS ໃຫມ່"
+ "ບໍ່ສາມາດດາວໂຫລດໄດ້"
+ "ສຳຜັດເພື່ອລອງອີກຄັ້ງ"
+ "ແຕະເພື່ອດາວໂຫຼດ"
+ "ດາວໂຫລດ ຫລືລຶບ"
+ "ກຳລັງດາວໂຫລດ..."
+ "ຂໍ້ຄວາມໝົດອາຍຸ ຫຼື ໃຊ້ບໍ່ໄດ້ແລ້ວ"
+ "size: %1$s, expiration: %2$s"
+ "ບໍ່ສາມາດສົ່ງໄດ້. ຂໍ້ມູນຜູ່ຮັບບໍ່ຖືກຕ້ອງ."
+ "ບໍ່ໄດ້ເປີດໃຊ້ບໍລິການໃນເຄືອຂ່າຍ"
+ "ບໍ່ສາມາດສົ່ງໄດ້ເນື່ອງຈາກມີບັນຫາກັບເຄືອຂ່າຍ"
+ "ຂໍ້ຄວາມໝົດກຳນົດ ຫຼື ໃຊ້ບໍ່ໄດ້ແລ້ວ"
+ "(ບໍ່ມີຫົວຂໍ້)"
+ "ບໍ່ຮູ້ຜູ່ສົ່ງ"
+ "ສົ່ງຮອດແລ້ວ"
+ "ບໍ່ສາມາດດາວໂຫລດຂໍ້ຄວາມ %1$s ຈາກ %2$s ໄດ້."
+ "ບໍ່ສາມາດປະຕິບັດການທາງດ້ານຖານຂໍ້ມູນເນື່ອງຈາກໜ່ວຍຄວາມຈຳຕໍ່າ"
+ "ຂໍ້ຄວາມຍັງບໍ່ໄດ້ຖືກສົ່ງ"
+ "ບາງຂໍ້ຄວາມບໍ່ໄດ້ສົ່ງຢູ່ໃນການສົ່ງຂໍ້ຄວາມ"
+
+ %d ຂໍ້ຄວາມໃນ %d ບົດສົນທະນາ
+ %d ຂໍ້ຄວາມໃນຫນຶ່ງບົດສົນທະນາ
+
+ "ບໍ່ສາມາດດາວໂຫລດຂໍ້ຄວາມໄດ້"
+ "ບາງຂໍ້ຄວາມບໍ່ໄດ້ຮັບການດາວໂຫຼດຢູ່ໃນການສົ່ງຂໍ້ຄວາມ"
+
+ %d ຂໍ້ຄວາມໃນ %d ບົດສົນທະນາ
+ %d ຂໍ້ຄວາມໃນຫນຶ່ງບົດສົນທະນາ
+
+ "ຂໍ້ຄວາມຫາ %1$s ບໍ່ໄດ້ສົ່ງ"
+ "ກະລຸນາໂທດ້ວຍສຽງໄປຫາບໍລິການສຸກເສີນ. ຂໍ້ຄວາມຂອງທ່ານຫາ %1$s ບໍ່ສາມາດນຳສົ່ງໄດ້ໃນເວລານີ້."
+
+ %d ຂໍ້ຄວາມໃໝ່.
+ ຂໍ້ຄວາມໃໝ່.
+
+ "ເລີ່ມ"
+ "ບໍ່ສາມາດໃຊ້ກ້ອງໄດ້"
+ "ບໍ່ສາມາດໃຊ້ກ້ອງໄດ້"
+ "ບໍ່ສາມາດໃຊ້ການບັນທຶກວິດີໂອໄດ້"
+ "ບໍ່ສາມາດບັນທຶກມີເດຍໄດ້"
+ "ບໍ່ສາມາດຖ່າຍຮູບໄດ້"
+ "ກັບຄືນ"
+ "ຈັດເກັບແລ້ວ"
+ "ລຶບ"
+ "ຈັດເກັບ"
+ "ຖອດອອກຈາກແຟ້ມ"
+ "ປິດການແຈ້ງເຕືອນ"
+ "ເປີດການແຈ້ງເຕືອນ"
+ "ເພີ່ມລາຍຊື່ຜູ່ຕິດຕໍ່"
+ "ດາວໂຫລດ"
+ "ສົ່ງ"
+ "ລຶບ"
+ "ລຶບຂໍ້ຄວາມນີ້ຫຼືບໍ່?"
+ "ການກະທຳນີ້ຈະບໍ່ສາມາດກູ້ຄືນໄດ້."
+ "ລຶບ"
+
+ ລຶບການສົນທະນານີ້ບໍ?
+ ລຶບການສົນທະນານີ້ບໍ?
+
+ "ລຶບ"
+ "ຍົກເລີກ"
+ "ໄປ"
+ "ເລືອກຫຼາຍຮູບ"
+ "ຢືນຢັນການເລືອກ"
+ "+%d"
+ "ບໍ່ສາມາດອັດສຽງໄດ້. ລອງໃໝ່ອີກຄັ້ງ."
+ "ບໍ່ສາມາດຫຼິ້ນສຽງໄດ້. ລອງໃໝ່ອີກຄັ້ງ."
+ "ບໍ່ສາມາດບັນທຶກສຽງໄດ້. ລອງໃໝ່ອີກຄັ້ງ."
+ "ແຕະຄ້າງໄວ້"
+ ", "
+ " "
+ ": "
+ " "
+ "ຮູບພາບ"
+ "ຄລິບສຽງ"
+ "ວິດີໂອ"
+ "ບັດລາຍຊື່ຜູ່ຕິດຕໍ່"
+ "ດາວໂຫຼດ"
+ "ຕອບກັບຜ່ານ SMS"
+ "ຕອບກັບຜ່ານ MMS"
+ "ຕອບກັບ"
+
+ %d ຜູ້ເຂົ້າຮ່ວມ
+ %d ຜູ້ເຂົ້າຮ່ວມ
+
+ "ຂ້ອຍ"
+ "ບລັອກ & ຈັດເກັບລາຍຊື່ຜູ່ຕິດຕໍ່ເຂົ້າແຟ້ມແລ້ວ"
+ "ປົດບລັອກລາຍຊື່ແລ້ວ & ບໍ່ໄດ້ເກັບໄວ້"
+ "%d ຖືກຈັດເກັບແລ້ວ"
+ "%d ຖືກຖອດອອກຈາກບ່ອນຈັດເກັບແລ້ວ"
+ "ການແຈ້ງເຕືອນປິດແລ້ວ"
+ "ການແຈ້ງເຕືອນເປີດແລ້ວ"
+ "ຕັ້ງຮຽບຮ້ອຍແລ້ວ. ສຳຜັດເພື່ອສົ່ງໃໝ່ອີກຄັ້ງ."
+ "ຕັ້ງຂໍ້ຄວາມເປັນແອັບ SMS ເລີ່ມຕົ້ນສຳເລັດແລ້ວ."
+
+ ເອົາໄຟລ໌ຄັດຕິດຖິ້ມ
+ ເອົາໄຟລ໌ຄັດຕິດຖິ້ມ
+
+ "ໄຟລ໌ຄັດຕິດສຽງ"
+ "ຫຼິ້ນສິ່ງຕິດຄັດທີ່ເປັນສຽງ"
+ "ຢຸດຊົ່ວຄາວ"
+ "ຂໍ້ຄວາມຈາກ%s: %s."
+ "ຂໍ້ຄວາມບໍ່ສຳເລັດຈາກ %s: %s. ເວລາ: %s."
+ "ຂໍ້ຄວາມຈາກ %s: %s. ເວລາ: %s."
+ "ຂໍ້ຄວາມບໍ່ໄດ້ສົ່ງຫາ %s: %s. ເວລາ: %s."
+ "ຂໍ້ຄວາມກຳລັງສົ່ງຫາ %s: %s. ເວລາ: %s."
+ "ຂໍ້ຄວາມບໍ່ສຳເລັດຫາ %s: %s. ເວລາ: %s."
+ "ຂໍ້ຄວາມຫາ %s: %s. ເວລາ: %s."
+ "ຂໍ້ຄວາມບໍ່ສຳເລັດຈາກ %s: %s. ເວລາ: %s. %s."
+ "ຂໍ້ຄວາມຈາກ %s: %s. ເວລາ: %s. %s."
+ "ຂໍ້ຄວາມບໍ່ໄດ້ສົ່ງຫາ %s: %s. ເວລາ: %s."
+ "ຂໍ້ຄວາມກຳລັງສົ່ງຫາ %s: %s. ເວລາ: %s."
+ "ຂໍ້ຄວາມບໍ່ສຳເລັດຫາ %s: %s. Time: %s."
+ "ຂໍ້ຄວາມຫາ %s: %s. ເວລາ: %s."
+ "ຂໍ້ຄວາມບໍ່ສຳເລັດ. ສຳຜັດເພື່ອລອງໃໝ່ອີກ."
+ "ການສົນທະນາກັບ %s"
+ "ລຶບຫົວຂໍ້"
+ "ບັນທຶກວິດີໂອ"
+ "ບັນທຶກຮູບ"
+ "ຖ່າຍຮູບ"
+ "ເລີ່ມການບັນທຶກວິດີໂອ"
+ "ສະລັບໄປໃຊ້ກ້ອງແບບເຕັມຈໍ"
+ "ສະລັບລະຫວ່າງກ້ອງໜ້າ ແລະ ຫຼັງ"
+ "ຢຸດການບັນທຶກ ແລະ ແນບວິດີໂອ"
+ "ຢຸດການບັນທຶກວິດີໂອ"
+ "ຮູບຖ່າຍານສົ່ງຂໍ້ຄວາມ"
+
+ %d ຮູບຖືກບັນທຶກໄປໃສ່ອາລະບັ້ມ \"%s\"
+ %d ຮູບຖືກບັນທຶກໄປໃສ່ອາລະບັ້ມ \"%s\"
+
+
+ %d ວິດີໂອຖືກບັນທຶກໄປໃສ່ອາລະບັ້ມ \"%s\"
+ %d ວິດີໂອຖືກບັນທຶກໄປໃສ່ອາລະບັ້ມ \"%s\"
+
+
+ %d ໄຟລ໌ຄັດຕິດຖືກບັນທຶກໄປໃສ່ອາລະບັ້ມ \"%s\"
+ %d ໄຟລ໌ຄັດຕິດຖືກບັນທຶກໄປໃສ່ອາລະບັ້ມ \"%s\"
+
+
+ %dໄຟລ໌ຄັດຕິດຖືກບັນທຶກໄປໃສ່ \"ດາວໂຫຼດ\"
+ %d ໄຟລ໌ຄັດຕິດຖືກບັນທຶກໄປໃສ່ \"ດາວໂຫຼດ\"
+
+
+ %d ໄຟລ໌ຄັດຕິດຖືກບັນທຶກແລ້ວ
+ %d ໄຟລ໌ຄັດຕິດຖືກບັນທຶກແລ້ວ
+
+
+ ບໍ່ສາມາດບັນທຶກ %d ໄຟລ໌ຄັດຕິດໄດ້
+ ບໍ່ສາມາດບັນທຶກ %d ໄຟລ໌ຄັດຕິດໄດ້
+
+ "ບັນທຶກໄຟລ໌ແນບ MMS ແລ້ວ"
+ "ການຕັ້ງຄ່າ"
+ "ຈັດເກັບແລ້ວ"
+ "ປິດ"
+ "MMS"
+ "ຂັ້ນສູງ"
+ "ດີບັ໊ກ"
+ "ການແຈ້ງເຕືອນ"
+ "ສຽງ"
+ "ປິດສຽງ"
+ "ສັ່ນເຕືອນ"
+ "ບລັອກແລ້ວ"
+ "ລາຍງານຜົນການສົ່ງ SMS"
+ "ຂໍລາຍງານຜົນການສົ່ງສຳລັບແຕ່ລະ SMS ທີ່ທ່ານສົ່ງ"
+ "ດຶງຂໍ້ມູນອັດຕະໂນມັດ"
+ "ດຶງຂໍ້ຄວາມ MMS ອັດຕະໂນມັດ"
+ "ດຶງຂໍ້ຄວາມອັດຕະໂນມັດເມື່ອໂຣມມິງ"
+ "ກູ້ຄືນ MMS ອັດຕະໂນມັດເມື່ອໂຣມມິງ"
+ "ການສົ່ງຂໍ້ຄວາມກຸ່ມ"
+ "ໃຊ້ MMS ເພື່ອສົ່ງຂໍ້ຄວາມໃດນຶ່ງເມື່ອມີຜູ່ຮັບຫຼາຍຄົນ"
+ "ແອັບຯ SMS ມາດຕະຖານ"
+ "ແອັບຯ SMS ມາດຕະຖານ"
+
+
+ "ເບີໂທລະສັບຂອງທ່ານ"
+ "ບໍ່ຮູ້ຈັກ"
+ "ສຽງຂໍ້ຄວາມຂາອອກ"
+ "ດຶງ SMS"
+ "ດຶງຂໍ້ມູນ SMS ດິບທີ່ໄດ້ຮັບໃນຮູບແບບໄຟລ໌ເກັບຂໍ້ມູນພາຍນອກ"
+ "ດຶງ MMS"
+ "ດຶງຂໍ້ມູນ MMS ດິບທີ່ໄດ້ຮັບໃນຮູບແບບໄຟລ໌ເກັບຂໍ້ມູນພາຍນອກ"
+ "ແຈ້ງເຕືອນລະບົບໄຮ້ສາຍ"
+ "ໂຕເລືອກຂໍ້ຄວາມ"
+ "ສຳເນົາຂໍ້ຄວາມ"
+ "ເບິ່ງລາຍລະອຽດ"
+ "ລຶບ"
+ "ສົ່ງຕໍ່"
+ "ລາຍລະອຽດຂໍ້ຄວາມ"
+ "ປະເພດ: "
+ "ຂໍ້ຄວາມ"
+ "ຂໍ້ຄວາມມັນຕິມີເດຍ"
+ "ຈາກ: "
+ "ເຖິງ: "
+ "ສົ່ງເມື່ອ: "
+ "ໄດ້ຮັບເມື່ອ: "
+ "ຫົວຂໍ້: "
+ "ຂະໜາດ: "
+ "ຄວາມສຳຄັນ: "
+ "ຊິມ: "
+ "ສູງ"
+ "ປານກາງ"
+ "ຕ່ຳ"
+ "ຊິມ %s"
+ "ເຊື່ອງທີ່ຢູ່ຜູ່ສົ່ງ"
+ "ບໍ່ສາມາດສົ່ງຂໍ້ຄວາມໄດ້ໃນຂະນະທີ່ໂຫຼດໄຟລ໌ແນບ."
+ "ບໍ່ສາມາດໂຫລດໄຟລ໌ແນບໄດ້. ລອງໃໝ່ອີກຄັ້ງ."
+ "ເຄືອຂ່າຍບໍ່ພ້ອມ. ລອງໃໝ່ອີກ."
+ "ລຶບຂໍ້ຄວາມ"
+ "ສະລັບລະຫວ່າງການພິມໂຕອັກສອນ ແລະໂຕເລກ"
+ "ເພີ່ມຜູ່ເຂົ້າຮ່ວມອື່ນ"
+ "ຢືນຢັນຜູ່ເຂົ້າຮ່ວມ"
+ "ເລີ່ມບົດສົນທະນາໃໝ່"
+ "ເລືອກລາຍການນີ້"
+ "ຫຼິ້ນວິດີໂອ"
+ "ລາຍຊື່ຜູ່ຕິດຕໍ່ & ໂຕເລືອກ"
+ "ດີບັ໊ກ"
+ "ລາຍຊື່ຜູ່ຕິດຕໍ່ & ໂຕເລືອກ"
+ "ທົ່ວໄປ"
+ "ຄົນໃນບົດສົນທະນານີ້"
+ "ໂທອອກ"
+ "ສົ່ງຂໍ້ຄວາມ"
+ "ສົ່ງຂໍ້ຄວາມ<br/><small>ຈາກ %s</small>"
+
+ ສົ່ງຮູບພາບ
+ ສົ່ງຮູບພາບ
+
+
+ ສົ່ງສຽງ
+ ສົ່ງສຽງ
+
+
+ ສົ່ງວິດີໂອ
+ ສົ່ງວິດີໂອ
+
+
+ ສົ່ງບັດລາຍຊື່ຜູ້ຕິດຕໍ່
+ ສົ່ງບັດລາຍຊື່ຜູ້ຕິດຕໍ່
+
+
+ ສົ່ງໄຟລ໌ຄັດຕິດ
+ ສົ່ງໄຟລ໌ຄັດຕິດ
+
+
+ %d ໄຟລ໌ຄັດຕິດພ້ອມສົ່ງໄດ້ແລ້ວ
+ ໜຶ່ງໄຟລ໌ຄັດຕິດພ້ອມສົ່ງໄດ້ແລ້ວ
+
+ "ສົ່ງຄຳຕິຊົມ"
+ "ເບິ່ງໃນ Google Play Store"
+ "ຂໍ້ມູນເວີຊັນ"
+ "ເວີຊັນ %1$s"
+ "ລິຂະສິດໂອເພນຊອດ"
+ "ການແຈ້ງເຕືອນ"
+ "ຮອດຂີດຈຳກັດໄຟລ໌ຄັດຕິດແລ້ວ"
+ "ໂຫຼດໄຟລ໌ຄັດຕິດບໍ່ສຳເລັດ."
+ "ເພີ່ມໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່ບໍ່?"
+ "ເພີ່ມໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່"
+ "ຫົວຂໍ້"
+ "ຫົວຂໍ້: "
+ "%s%s"
+ "ກຳລັງໂຫລດບັດລາຍຊື່ຜູ່ຕິດຕໍ່"
+ "ບໍ່ສາມາດໂຫລດບັດລາຍຊື່ຜູ່ຕິດຕໍ່ໄດ້"
+ "ເບິ່ງບັດລາຍຊື່ຜູ່ຕິດຕໍ່"
+
+ %d ລາຍຊື່
+ %d ລາຍຊື່
+
+ "ບັດລາຍຊື່ຜູ່ຕິດຕໍ່"
+ "ວັນເດືອນປີເກີດ"
+ "ບັນທຶກ"
+ "ສົ່ງຕໍ່ຂໍ້ຄວາມ"
+ "ຕອບຄືນ"
+ "+1"
+ "+%d"
+ "SMS ຖືກປິດແລ້ວ"
+ "ເພື່ອສົ່ງ, ຕັ້ງການສົ່ງຂໍ້ຄວາມເປັນແອັບ SMS ເລີ່ມຕົ້ນ"
+ "ຕັ້ງການສົ່ງຂໍ້ຄວາມເປັນແອັບ SMS ເລີ່ມຕົ້ນ"
+ "ປ່ຽນແປງ"
+ "ເພື່ອຮັບຂໍ້ຄວາມ, ຕັ້ງການສົ່ງຂໍ້ຄວາມໃຫ້ເປັນແອັບ SMS ເລີ່ມຕົ້ນຂອງທ່ານ"
+ "ບໍ່ມີ SIM ທີ່ມັກຖືກເລືອກໄວ້ ເພື່ອສົ່ງຂໍ້ຄວາມ SMS"
+ "ເຈົ້າຂອງອຸປະກອນບໍ່ອະນຸຍາດໃຫ້ໃຊ້ແອັບຯນີ້."
+ "ຕົກລົງ"
+ "ມີຜູ່ເຂົ້າຮ່ວມໃນການສົນທະນາຫຼາຍເກີນໄປ"
+
+ ລາຍຊື່ຕິດຕໍ່ບໍ່ຖືກຕ້ອງ
+ ລາຍຊື່ຕິດຕໍ່ບໍ່ຖືກຕ້ອງ
+
+ "ບໍ່ສາມາດໂຫລດຮູບຈາກກ້ອງໄດ້"
+ "ທ່ານ: "
+ "%s: "
+ "ສະບັບຮ່າງ"
+ "ໃນເວລາທີ່ທານເລີ່ມການສົນທະນາໃຫມ່, ທ່ານຈະເຫັນມັນສະແດງຢູ່ບ່ອນນີ້"
+ "ບົດສົນທະນາທີ່ຖືກຈັດເກັບຈະສະແດງຢູ່ນີ້"
+ "ກຳລັງໂຫລດບົດສົນທະນາ..."
+ "ຮູບພາບ"
+ "ຄລິບສຽງ"
+ "ວິດີໂອ"
+ "ບັດລາຍຊື່ຕິດຕໍ່"
+ "MMS"
+ "ຍົກເລີກ"
+ "ລອງໃໝ່"
+ "ປ້ອນຊື່ລາຍຊື່ຜູ່ຕິດຕໍ່ ຫຼື ເບີໂທລະສັບເພື່ອເລີ່ມຂໍ້ຄວາມໃໝ່"
+ "ບລັອກ"
+ "ບລັອກ %s"
+ "ປົດບລັອກ %s"
+ "ບລັອກ %s ບໍ?"
+ "ທ່ານຈະຍັງສືບຕໍ່ໄດ້ຮັບຂໍ້ຄວາມຈາກເບີນີ້ ແຕ່ຈະບໍ່ຖືກແຈ້ງເຕືອນອີກຕໍ່ໄປ. ບົດສົນທະນານີ້ຈະຖືກຈັດເກັບ."
+ "ລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ຖືກບລັອກ"
+ "ປົດບລັອກ"
+ "ບລັອກລາຍຊື່ຜູ່ຕິດຕໍ່ແລ້ວ"
+ "ເລືອກຮູບຈາກຫ້ອງສະໝຸດເອກະສານ"
+ "ກຳລັງສົ່ງຂໍ້ຄວາມ"
+ "ສົ່ງຂໍ້ຄວາມແລ້ວ"
+ "ຂໍ້ມູນເຄືອຂ່າຍໂທລະສັບຖືກປິດໄວ້. ກະລຸນາກວດສອບການຕັ້ງຄ່າຂອງທ່ານ."
+ "ບໍ່ສາມາດສົ່ງຂໍ້ຄວາມໃນໂໝດໃນຍົນໄດ້"
+ "ບໍ່ສາມາດສົ່ງຂໍ້ຄວາມໄປໄດ້"
+ "ດາວໂຫຼດຂໍ້ຄວາມແລ້ວ"
+ "ຂໍ້ມູນເຊວລູລາຖືກປິດໄວ້. ສອບການຕັ້ງຄ່າຂອງທ່ານ."
+ "ບໍ່ສາມາດກາວໂຫຼດຂໍ້ຄວາມຢູ່ໃນໂໝດເຮືອບິນໄດ້"
+ "ບໍ່ສາມາດດາວໂຫຼດໄດ້"
+ "ສູນ"
+ "ນຶ່ງ"
+ "ສອງ"
+ "ສາມ"
+ "ສີ່"
+ "ຫ້າ"
+ "ຫົກ"
+ "ເຈັດ"
+ "ແປດ"
+ "ເກົ້າ"
+ "ບໍ່ສາມາດສົ່ງຂໍ້ຄວາມດ້ວຍ %1$s ໄດ້, ຂໍ້ຜິດພາດ %2$d"
+ "ບໍ່ສາມາດສົ່ງຂໍ້ຄວາມດ້ວຍບໍລິສັດເຄືອຂ່າຍມືຖືບໍ່ຮູ້ຈັກໄດ້, ຂໍ້ຜິດພາດ %1$d"
+ "Fwd: %s"
+ "ຂໍ້ຄວາມຍັງບໍ່ໄດ້ສົ່ງ: ບໍລິການຍັງບໍ່ໄດ້ເປີດນຳໃຊ້ໃນເຄືອຂ່າຍເທື່ອ"
+ "ຂໍ້ຄວາມຍັງບໍ່ໄດ້ສົ່ງ: ທີ່ຢູ່ປາຍທາງບໍ່ຖືກຕ້ອງ"
+ "ຂໍ້ຄວາມຍັງບໍ່ໄດ້ສົ່ງ: ຂໍ້ຄວາມບໍ່ຖືກຕ້ອງ"
+ "ຂໍ້ຄວາມຍັງບໍ່ໄດ້ສົ່ງ: ບໍ່ຮອງຮັບເນື້ອຫາ"
+ "ຂໍ້ຄວາມຍັງບໍ່ໄດ້ສົ່ງ: ບໍ່ຮອງຮັບຂໍ້ຄວາມ"
+ "ຂໍ້ຄວາມຍັງບໍ່ໄດ້ຖືກສົ່ງ: ໃຫຍ່ເກີນໄປ"
+ "ຂໍ້ຄວາມໃໝ່"
+ "ເບິ່ງ"
+ "ຮູບພາບ"
+ "ບໍ່ສາມາດຊອກຫາແອັບພລິເຄຊັນທີ່ເໝາະສົມໄດ້"
+ "ລຶບຜູ່ຮັບ"
+ "ຂໍ້ຄວາມໃໝ່"
+ "ຍົກເລີກ"
+ "ແກ້ໄຂຈຸດການເຊື່ອມຕໍ່"
+ "ຍັງບໍ່ໄດ້ຕັ້ງ"
+ "ຊື່"
+ "APN"
+ "MMSC"
+ "MMS proxy"
+ "ພອດ MMS"
+ "MCC"
+ "MNC"
+ "ປະເພດ APN"
+ "ລຶບ APN"
+ "APN ໃໝ່"
+ "ບັນທຶກ"
+ "ຍົກເລີກ"
+ "ຊ່ອງຂໍ້ມູນຊື່ບໍ່ສາມາດປ່ອຍຫວ່າງໄດ້."
+ "APN ບໍ່ສາມາດປ່ອຍໃຫ້ຫວ່າງໄດ້."
+ "ຊ່ອງຂໍ້ມູນ MMC ຕ້ອງມີ 3 ໂຕເລກ."
+ "ຊ່ອງຂໍ້ມູນ MNC ຕ້ອງມີ 2 ຫຼື 3 ໂຕເລກ."
+ "ກຳລັງກັບໄປໃຊ້ການຕັ້ງຄ່າ APN ເລີ່ມຕົ້ນ."
+ "ກັບຄືນໄປໃຊ້ຄ່າເລີ່ມຕົ້ນ"
+ "ສຳເລັດການກັບໄປໃຊ້ການຕັ້ງຄ່າ APN ເລີ່ມຕົ້ນແລ້ວ."
+ "ບໍ່ໄດ້ຕັ້ງຊື່"
+ "ຊື່ຂອງຈຸດການເຂົ້າເຖິງ (APN)"
+ "APNs"
+ "APN ໃໝ່"
+ "ຜູ່ໃຊ້ນີ້ບໍ່ສາມາດຕັ້ງຄ່າຊື່ຈຸດການເຂົ້າເຖິງໄດ້"
+ "ສຳເນົາໄວ້ໃນຄລິບບອດຫຼືບໍ່?"
+ "ສຳເນົາ"
+ "ເຖິງ %s"
+ "ທົ່ວໄປ"
+ "ຂັ້ນສູງ"
+ "ການຕັ້ງຄ່າທົ່ວໄປ"
+ "ການຕັ້ງຄ່າຂັ້ນສູງ"
+ "SIM \"%s\""
+ "ສົ່ງຂໍ້ຄວາມ SMS ສະເພາະບຸກຄົນໄປຫາທຸກໆຜູ່ຮັບ. ສະເພາະທ່ານເທົ່ານັ້ນທີ່ຈະໄດ້ຮັບແຕ່ລະການຕອບກັບ"
+ "ສົ່ງ MMS ສະບັບນຶ່ງໄປຫາທຸກໆຜູ່ຮັບ"
+ "ເບີໂທບໍ່ຮູ້ຈັກ"
+ "ຂໍ້ຄວາມໃໝ່"
+ "ຂໍ້ຄວາມໃໝ່."
+ "ຕົວເລືອກ SIM"
+ "%1$s ຖືກເລືອກແລ້ວ, ຕົວເລືອກ SIM"
+ "ແກ້ໄຂຫົວຂໍ້"
+ "ເລືອກ SIM ຫຼືແກ້ໄຂຫົວຂໍ້"
+ "ສຳພັດຄ້າງໄວ້ ເພື່ອບັນທຶກສຽງ"
+ "ເລີ່ມບົດສົນທະນາໃໝ່"
+ "ຂໍ້ຄວາມ"
+ "ລາຍການການສົ່ງຂໍ້ຄວາມ"
+ "ຂໍ້ຄວາມ"
+ "ຂໍ້ຄວາມໃໝ່"
+ "ລາຍການການສົນທະນາ"
+ "ກຳລັງໂຫລດບົດສົນທະນາ..."
+ "ກຳລັງໂຫລດຂໍ້ຄວາມ"
+ "ເບິ່ງບົດສົນທະນາເພີ່ມເຕີມ"
+ "ເບິ່ງຂໍ້ຄວາມເພີ່ມເຕີມ"
+ "ການສົນທະນາຖືກລຶບແລ້ວ"
+ "ການສົນທະນາຖືກລຶບແລ້ວ. ສຳຜັດເພື່ອສະແດງ, ການສົນທະນາຂໍ້ຄວາມທີ່ແຕກຕ່າງ"
+ "ບລັອກແລ້ວ"
+ "ປົດບລັອກແລ້ວ"
+ "ພື້ນທີ່ຈັດເກັບຕ່ຳ. ບາງຂໍ້ມູນອາດຈະເສຍໄປ."
+ "ເລືອກໄຟລ໌ຄັດຕິດ"
+ "ຢືນຢັນການເລືອກ"
+ "%d ເລືອກແລ້ວ"
+ "ກະລຸນາເອົາໜຶ່ງ ຫຼືຫຼາຍໄຟລ໌ຄັດຕິດອອກໄປ ແລະລອງໃໝ່ອີກ."
+ "ທ່ານສາມາດລອງສົ່ງຂໍ້ຄວາມຂອງທ່ານໄດ້, ແຕ່ມັນອາດຈະບໍ່ຖືກສົ່ງໄປ ນອກຈາກວ່າທ່ານເອົາໜຶ່ງ ຫຼືຫຼາຍໄຟລ໌ຄັດຕິດ."
+ "ທ່ານສາມາດສົ່ງໄດ້ແຕ່ໜຶ່ງວິດີໂອຕໍ່ຂໍ້ຄວາມເທົ່ານັ້ນ. ກະລຸນາເອົາວິດີໂອເພີ່ມເຕີມອອກ ແລະລອງໃໝ່ອີກ."
+ "ການສົ່ງຂໍ້ຄວາມໂຫຼດໄຟລ໌ຄັດຕິດບໍ່ສຳເລັດ."
+ "ແນວໃດກໍ່ສົ່ງ"
+ "ບໍ່ສາມາດເລີ່ມຕົ້ນການສົນທະນາໄດ້"
+ "%1$s (%2$s)"
+ "%s ເລືອກແລ້ວ"
+
diff --git a/res/values-lt/arrays.xml b/res/values-lt/arrays.xml
new file mode 100644
index 0000000..3c1c116
--- /dev/null
+++ b/res/values-lt/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "nėra temos"
+ "nėra temos"
+
+
+ "Taip"
+ "Ne"
+ "Gerai"
+ "Hehe"
+ "Ačiū"
+ "Sutinku"
+ "Puiku"
+ "Pakeliui"
+ "Gerai, informuosiu vėliau"
+ ":)"
+ ":("
+
+
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
new file mode 100644
index 0000000..167fe9f
--- /dev/null
+++ b/res/values-lt/strings.xml
@@ -0,0 +1,571 @@
+
+
+
+
+ "Susirašinėjimas pranešimais"
+ "Susirašinėjimas pranešimais"
+ "Pasirinkti pokalbį"
+ "Nustatymai"
+ "Siųsti pranešimą"
+ "Pridėti priedą"
+ "Pagalba"
+ "Sveiki!"
+ "Praleisti"
+ "Kitas >"
+ "Kitas"
+ "Išeiti"
+ "Nustatymai >"
+ "Nustatymai"
+ "Susirašinėjimo programai reikia leidimų pasiekti SMS pranešimus, telefoną ir kontaktus."
+ "Leidimus galite pakeisti skiltyje „Nustatymai > Programos > Susirašinėjimo programa > Leidimai“."
+ "Leidimus galite pakeisti skiltyje „Nustatymai, Programos, Susirašinėjimo programa, Leidimai“."
+ "Dažniausiai naudojami"
+ "Visi kontaktai"
+ "Siųsti: %s"
+ "Fotografuokite arba filmuokite"
+ "Pasirinkite vaizdus iš šio įrenginio"
+ "Įrašyti garsą"
+ "Pasirinkti nuotrauką"
+ "Medija pasirinkta."
+ "Medija nepasirinkta."
+ "Pasirinkta: %d"
+ "vaizdas: %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "vaizdas"
+ "Įrašyti garsą"
+ "Bendrinimas"
+ "Ką tik"
+ "Dabar"
+
+ %d min.
+ %d min.
+ %d min.
+ %d min.
+
+
+ %d val.
+ %d val.
+ %d val.
+ %d val.
+
+
+ %d diena
+ %d dienos
+ %d dienos
+ %d dienų
+
+
+ %d savaitė
+ %d savaitės
+ %d savaitės
+ %d savaičių
+
+
+ %d mėnesiai
+ %d mėnesiai
+ %d mėnesio
+ %d mėnesių
+
+
+ %d metai
+ %d metai
+ %d metų
+ %d metų
+
+ "0 klasės pranešimas"
+ "Išsaugoti"
+ "Mažai vietos įrenginyje. Susirašinėjimo programa automatiškai ištrins senesnius pranešimus, kad atlaisvintų vietos."
+ "Mažėja laisvos saugyklos vietos saugykloje"
+ "Galbūt Susirašinėjimo programa negalės siųsti ar gauti pranešimų, kol įrenginyje nebus daugiau laisvos vietos."
+ "Mažai laisvos SMS saugyklos vietos. Gali reikėti ištrinti pranešimus."
+ "Patvirtinkite telefono numerį"
+ "Atlikę šį vienkartinį veiksmą užtikrinsite, kad Susirašinėjimo programa tinkamai pateiks grupės pranešimus."
+ "Telefono numeris"
+ "Ištrinti visus pranešimus su medija"
+ "Ištrinti senesnius nei %s pranešimus"
+ "Automatiškai ištrinti pranešimus, kurie senesni nei %s"
+ "Nepaisyti"
+ "Ištrinti visus pranešimus su medija?"
+ "Ištrinti pranešimus, kurie senesni nei %s?"
+ "Ištrinti pranešimus, kurie senesni nei %s, ir įjungti automatinį ištrynimą?"
+ "%s sakė"
+ "Jūs sakėte"
+ "Pranešimas nuo %s:"
+ "Išsiuntėte pranešimą"
+ "Siunčiama…"
+ "Neišsiųsta. Palieskite, kad bandytumėte dar kartą."
+ "Neišsiųsta. Bandoma dar kartą…"
+ "Persiųsti arba ištrinti"
+ "Atlikite balso skambutį pagalbos tarnyboms. Šiuo metu negalime pateikti teksto pranešimo."
+ "Nepavyko"
+ "Naujas MMS pranešimas, kurį galima atsisiųsti"
+ "Naujas MMS pranešimas"
+ "Nepavyko atsisiųsti"
+ "Palieskite ir bandykite dar kartą"
+ "Palieskite, kad atsisiųstumėte"
+ "Atsisiųskite arba ištrinkite"
+ "Atsisiunčiama..."
+ "Pranešimo galiojimo laikas pasibaigė arba jis negalimas"
+ "dydis: %1$s, galiojimo pabaiga: %2$s"
+ "Nepavyko išsiųsti. Netinkamas gavėjas."
+ "Paslauga nesuaktyvinta tinkle"
+ "Nepavyko išsiųsti dėl tinklo problemos"
+ "Pranešimo galiojimo laikas pasibaigė arba jis negalimas"
+ "(Nėra temos)"
+ "Nežinomas siuntėjas"
+ "Pristatyta"
+ "Nepavyko atsisiųsti pranešimo „%1$s“ nuo %2$s."
+ "Nepavyko atlikti duomenų bazės operacijos dėl atminties trūkumo"
+ "Pranešimas neišsiųstas"
+ "Kai kurie pranešimai neišsiųsti naudojant Susirašinėjimo programą"
+
+ Pranešimų: %d (%d pokalbis)
+ Pranešimų: %d (%d pokalbiai)
+ Pranešimų: %d (%d pokalbio)
+ Pranešimų: %d (%d pokalbių)
+
+ "Pranešimas neatsisiųstas"
+ "Kai kurie pranešimai neatsisiųsti naudojant Susirašinėjimo programą"
+
+ Pranešimų: %d (%d pokalbis)
+ Pranešimų: %d (%d pokalbiai)
+ Pranešimų: %d (%d pokalbio)
+ Pranešimų: %d (%d pokalbių)
+
+ "Pranešimas numeriu %1$s nebuvo išsiųstas"
+ "Atlikite balso skambutį pagalbos tarnyboms. Šiuo metu negalime pateikti teksto pranešimo numeriu %1$s."
+
+ %d naujas pranešimas
+ %d nauji pranešimai
+ %d naujo pranešimo
+ %d naujų pranešimų
+
+ "Pradėti"
+ "Fotoaparatas negalimas"
+ "Fotoaparatas negalimas"
+ "Vaizdo įrašo fiksavimas negalimas"
+ "Nepavyko išsaugoti medijos"
+ "Negalima fotografuoti"
+ "Atgal"
+ "Suarchyvuota"
+ "Ištrinti"
+ "Archyvuoti"
+ "Išarchyvuoti"
+ "Išjungti pranešimus"
+ "Įjungti pranešimus"
+ "Pridėti kontaktą"
+ "Atsisiųsti"
+ "Siųsti"
+ "Ištrinti"
+ "Ištrinti šį pranešimą?"
+ "Šio veiksmo anuliuoti negalima."
+ "Ištrinti"
+
+ Ištrinti šiuos pokalbius?
+ Ištrinti šiuos pokalbius?
+ Ištrinti šiuos pokalbius?
+ Ištrinti šiuos pokalbius?
+
+ "Ištrinti"
+ "Atšaukti"
+ "Kam"
+ "Pasirinkti kelis vaizdus"
+ "Patvirtinti pasirinkimą"
+ "Dar %d"
+ "Nepavyko įrašyti garso. Bandykite dar kartą."
+ "Nepavyko paleisti garso įrašo. Bandykite dar kartą."
+ "Nepavyko išsaugoti garso įrašo. Bandykite dar kartą."
+ "Palieskite ir palaikykite"
+ ", "
+ " "
+ ": "
+ " "
+ "Nuotrauka"
+ "Garso įrašo klipas"
+ "Vaizdo įrašas"
+ "Kontakto kortelė"
+ "Atsisiųsti"
+ "Atsakyti SMS žinute"
+ "Atsakyti MMS"
+ "Atsakyti"
+
+ %d dalyvis
+ %d dalyviai
+ %d dalyvio
+ %d dalyvių
+
+ "Aš"
+ "Kontaktas užblokuotas ir suarchyvuotas"
+ "Kontaktas atblokuotas ir išarchyvuotas"
+ "Suarchyvuota: %d"
+ "Išarchyvuota: %d"
+ "Pranešimai išjungti"
+ "Pranešimai įjungti"
+ "Viskas nustatyta. Dar kartą palieskite „Siųsti“."
+ "Susirašinėjimo programa sėkmingai nustatyta kaip numatytoji SMS programa."
+
+ Išmesti priedus
+ Išmesti priedus
+ Išmesti priedus
+ Išmesti priedus
+
+ "Garso priedas"
+ "Leisti garso priedą"
+ "Pristabdyti"
+ "Pranešimas nuo %s: %s."
+ "Nepavyko atsiųsti pranešimo nuo %s: „%s“. Laikas: %s."
+ "Pranešimas nuo %s: „%s“. Laikas: %s."
+ "Neišsiųstas pranešimas grupei „%s“: „%s“. Laikas: %s."
+ "Siunčiamas pranešimas grupei „%s“: „%s“. Laikas: %s."
+ "Nepavyko išsiųsti pranešimo grupei „%s“: „%s“. Laikas: %s."
+ "Pranešimas grupei „%s“: „%s“. Laikas: %s."
+ "Nepavyko atsiųsti pranešimo nuo %s: „%s“. Laikas: %s. %s."
+ "Pranešimas nuo %s: „%s“. Laikas: %s. %s."
+ "Neišsiųstas pranešimas grupei „%s“: „%s“. Laikas: %s."
+ "Siunčiamas pranešimas grupei „%s“: „%s“. Laikas: %s."
+ "Nepavyko išsiųsti pranešimo grupei „%s“: „%s“. Laikas: %s."
+ "Pranešimas grupei „%s“: „%s“. Laikas: %s."
+ "Įvyko pranešimo klaida. Palieskite ir bandykite dar kartą."
+ "Pokalbis su %s"
+ "Pašalinti temą"
+ "Filmuoti"
+ "Fiksuoti nejudantį vaizdą"
+ "Fotografuoti"
+ "Pradėti filmuoti"
+ "Perjungti į viso ekrano režimu veikiantį fotoaparatą"
+ "Perjungti priekinį ir užpakalinį fotoaparatus"
+ "Sustabdyti įrašymą ir pridėti vaizdo įrašą"
+ "Sustabdyti vaizdo įrašymą"
+ "Susirašinėjimo programos nuotraukos"
+
+ %d nuotrauka išsaugota albume „%s“
+ %d nuotraukos išsaugotos albume „%s“
+ %d nuotraukos išsaugota albume „%s“
+ %d nuotraukų išsaugota albume „%s“
+
+
+ %d vaizdo įrašas išsaugotas albume „%s“
+ %d vaizdo įrašai išsaugoti albume „%s“
+ %d vaizdo įrašo išsaugota albume „%s“
+ %d vaizdo įrašų išsaugota albume „%s“
+
+
+ %d priedas išsaugotas albume „%s“
+ %d priedai išsaugoti albume „%s“
+ %d priedo išsaugota albume „%s“
+ %d priedų išsaugota albume „%s“
+
+
+ %d priedas išsaugotas aplanke „Atsisiuntimai“
+ %d priedai išsaugoti aplanke „Atsisiuntimai“
+ %d priedo išsaugota aplanke „Atsisiuntimai“
+ %d priedų išsaugota aplanke „Atsisiuntimai“
+
+
+ Išsaugotas %d priedas
+ Išsaugoti %d priedai
+ Išsaugota %d priedo
+ Išsaugota %d priedų
+
+
+ Nepavyko išsaugoti %d priedo
+ Nepavyko išsaugoti %d priedų
+ Nepavyko išsaugoti %d priedo
+ Nepavyko išsaugoti %d priedų
+
+ "Išsaugotas MMS priedas"
+ "Nustatymai"
+ "Suarchyvuota"
+ "Uždaryti"
+ "MMS"
+ "Išplėstiniai"
+ "Derinti"
+ "Pranešimai"
+ "Garsas"
+ "Tylus"
+ "Vibravimas"
+ "Užblokuota"
+ "SMS pristatymo ataskaitos"
+ "Pateikti kiekvieno išsiųsto SMS pristatymo ataskaitos užklausą"
+ "Automatiškai nuskaityti"
+ "Automatiškai nuskaityti MMS pranešimus"
+ "Aut. nuskait. naud. tarptinklinį ryšį"
+ "Automatiškai nuskaityti MMS, kai veikia tarptinklinis ryšys"
+ "Grupinis susirašinėjimas"
+ "Naudokite MMS, kad siųstumėte vieną pranešimą, kai yra keli gavėjai"
+ "Numatytoji SMS programa"
+ "Numatytoji SMS programa"
+
+
+ "Jūsų telefono numeris"
+ "Nežinomas"
+ "Siunčiamų pranešimų garsai"
+ "Pateikti SMS"
+ "Pateikti gautų SMS neapdorotus duomenis išorinės atminties faile"
+ "Pateikti MMS"
+ "Pateikti gautų MMS neapdorotus duomenis išorinės atminties faile"
+ "Belaidžiu ryšiu siunčiami įspėjimai"
+ "Pranešimo parinktys"
+ "Kopijuoti tekstą"
+ "Peržiūrėti išsamią informaciją"
+ "Ištrinti"
+ "Persiųsti"
+ "Išsami pranešimo informacija"
+ "Tipas: "
+ "teksto pranešimas"
+ "Įvairialypės informacijos pranešimas"
+ "Nuo: "
+ "Kam: "
+ "Išsiųsta: "
+ "Gauta: "
+ "Tema: "
+ "Dydis: "
+ "Pirmenybė: "
+ "SIM: "
+ "Aukšta"
+ "Įprasta"
+ "Žema"
+ "SIM %s"
+ "Paslėptas siuntėjo adresas"
+ "Negalima siųsti žinutės, kol įkeliami priedai."
+ "Nepavyko įkelti priedo. Bandykite dar kartą."
+ "Tinklas neparuoštas. Bandykite dar kartą."
+ "Pašalinti tekstą"
+ "Perjungti iš teksto įvedimo į skaičių įvedimą ir atvirkščiai"
+ "Pridėti daugiau dalyvių"
+ "Patvirtinti dalyvius"
+ "Pradėti naują pokalbį"
+ "Pasirinkti šį elementą"
+ "Leisti vaizdo įrašą"
+ "Žmonės ir parinktys"
+ "Derinti"
+ "Žmonės ir parinktys"
+ "Bendrieji"
+ "Žmonės šiame pokalbyje"
+ "Skambinti"
+ "Siųsti pranešimą"
+ "Siųsti pranešimą<br/><small>iš %s</small>"
+
+ Siųsti nuotraukas
+ Siųsti nuotraukas
+ Siųsti nuotraukas
+ Siųsti nuotraukas
+
+
+ Siųsti garso įrašus
+ Siųsti garso įrašus
+ Siųsti garso įrašus
+ Siųsti garso įrašus
+
+
+ Siųsti vaizdo įrašus
+ Siųsti vaizdo įrašus
+ Siųsti vaizdo įrašus
+ Siųsti vaizdo įrašus
+
+
+ Siųsti kontaktų korteles
+ Siųsti kontaktų korteles
+ Siųsti kontaktų korteles
+ Siųsti kontaktų korteles
+
+
+ Siųsti priedus
+ Siųsti priedus
+ Siųsti priedus
+ Siųsti priedus
+
+
+ %d priedas paruoštas siųsti
+ %d priedai paruošti siųsti
+ %d priedo paruošta siųsti
+ %d priedų paruošta siųsti
+
+ "Siųsti atsiliepimą"
+ "Žr. „Google Play“ parduotuvėje"
+ "Versijos informacija"
+ "%1$s versija"
+ "Atvirojo šaltinio licencijos"
+ "Pranešimai"
+ "Pasiektas priedų apribojimas"
+ "Nepavyko įkelti priedo."
+ "Pridėti prie kontaktų?"
+ "Pridėti kontaktą"
+ "Tema"
+ "Tema: "
+ "%s%s"
+ "Įkeliama kontakto kortelė"
+ "Nepavyko įkelti kontakto kortelės"
+ "Peržiūrėti kontakto kortelę"
+
+ %d kontaktas
+ %d kontaktai
+ %d kontakto
+ %d kontaktų
+
+ "Kontaktų kortelės"
+ "Gimimo data"
+ "Užrašai"
+ "Persiųsti pranešimą"
+ "Atsakyti"
+ "+1"
+ "+%d"
+ "SMS išjungta"
+ "Kad galėtumėte išsiųsti, nustatykite Susirašinėjimo programą kaip numatytąją SMS programą"
+ "Nustatykite Susirašinėjimo programą kaip numatytąją SMS programą"
+ "Pakeisti"
+ "Kad galėtumėte gauti pranešimus, nustatykite Susirašinėjimo programą kaip numatytąją SMS programą"
+ "Nepasirinkta jokių pageidaujamų SIM kortelių, kurias būtų galima naudoti SMS pranešimams siųsti"
+ "Įrenginio savininkas neleidžia naudoti šios programos."
+ "Gerai"
+ "Per daug pokalbio dalyvių"
+
+ Netinkami kontaktai
+ Netinkami kontaktai
+ Netinkami kontaktai
+ Netinkami kontaktai
+
+ "Nepavyko įkelti fotoaparato vaizdo"
+ "Jūs: "
+ "%s: "
+ "Juodraštis"
+ "Kai pradėsite naują pokalbį, jis bus pateiktas čia"
+ "Archyvuoti pokalbiai rodomi čia"
+ "Įkeliami pokalbiai..."
+ "Nuotrauka"
+ "Garso įrašo klipas"
+ "Vaizdo įrašas"
+ "Kontakto kortelė"
+ "MMS"
+ "Anuliuoti"
+ "Bandyti dar kartą"
+ "Įveskite kontakto vardą arba telefono numerį, kad pradėtumėte naują pranešimą"
+ "Blokuoti"
+ "Blokuoti %s"
+ "Panaikinti %s blokavimą"
+ "Blokuoti %s?"
+ "Ir toliau gausite pranešimus iš šio numerio, bet nebūsite apie juos įspėti. Šis pokalbis bus archyvuotas."
+ "Užblokuoti kontaktai"
+ "PANAIKINTI BLOKAVIMĄ"
+ "Užblokuoti kontaktai"
+ "Pasirinkite vaizdą iš dokumentų bibliotekos"
+ "Siunčiamas pranešimas"
+ "Pranešimas išsiųstas"
+ "Mobiliojo ryšio duomenys išjungti. Patikrinkite nustatymus."
+ "Negalima siųsti pranešimų lėktuvo režimu"
+ "Nepavyko išsiųsti pranešimo"
+ "Pranešimas atsisiųstas"
+ "Mobiliojo ryšio duomenys išjungti. Patikrinkite nustatymus."
+ "Nepavyksta atsisiųsti pranešimų lėktuvo režimu"
+ "Pranešimo nepavyko atsisiųsti"
+ "Nulis"
+ "Vienas"
+ "Du"
+ "Trys"
+ "Keturi"
+ "Penki"
+ "Šeši"
+ "Septyni"
+ "Aštuoni"
+ "Devyni"
+ "Nepavyko išsiųsti pranešimo; operatorius „%1$s“, %2$d klaida"
+ "Nepavyko išsiųsti pranešimo; operatorius nežinomas, %1$d klaida"
+ "Pers.: %s"
+ "Pranešimas neišsiųstas: paslauga nesuaktyvinta tinkle"
+ "Pranešimas neišsiųstas: netinkamas paskirties adresas"
+ "Pranešimas neišsiųstas: netinkamas pranešimas"
+ "Pranešimas neišsiųstas: nepalaikomas turinys"
+ "Pranešimas neišsiųstas: nepalaikomas pranešimas"
+ "Pranešimas neišsiųstas: per didelis"
+ "Naujas pranešimas"
+ "Peržiūrėti"
+ "Vaizdas"
+ "Nepavyko rasti tinkamos programos"
+ "Pašalinti gavėją"
+ "Naujas pranešimas"
+ "Atšaukti"
+ "Redaguoti prieigos tašką"
+ "Nenustatyta"
+ "Pavadinimas"
+ "APN"
+ "MMSC"
+ "MMS tarpinis serveris"
+ "MMS prievadas"
+ "MCC"
+ "MNC"
+ "APN tipas"
+ "Ištrinti APN"
+ "Naujas APN"
+ "Išsaugoti"
+ "Atmesti"
+ "Pavadinimo laukas negali būti tuščias."
+ "APN laukas negali būti tuščias."
+ "MCC lauke turi būti įvesti 3 skaitmenys."
+ "MNC lauke turi būti įvesti 2 ar 3 skaitmenys."
+ "Atkuriami numatytieji APN nustatymai."
+ "Iš naujo nustatyti numatytuosius nustatymus"
+ "Numatytųjų APN nustatymų nustatymas iš naujo baigtas."
+ "Be pavadinimo"
+ "Prieigos taškų pavadinimai"
+ "APN"
+ "Naujas APN"
+ "Prieigos taško pavadinimo nustatymai šiam naudotojui nepasiekiami"
+ "Kopijuoti į iškarpinę?"
+ "Kopijuoti"
+ "į %s"
+ "Bendrieji"
+ "Išplėstiniai"
+ "Bendrieji nustatymai"
+ "Išplėstiniai nustatymai"
+ "„%s“ SIM"
+ "Siųsti individualius SMS pranešimus visiems gavėjams. Atsakymus gausite tik jūs"
+ "Siųsti vieną MMS visiems gavėjams"
+ "Nežinomas numeris"
+ "Naujas pranešimas"
+ "Naujas pranešimas."
+ "SIM pasirinkimas"
+ "Pasirinkta: %1$s, SIM pasirinkimas"
+ "Redaguoti temą"
+ "Pasirinkite SIM arba redaguokite temą"
+ "Palaikykite palietę, kad įrašytumėte garso įrašą"
+ "Pradėti naują pokalbį"
+ "Susirašinėjimo programa"
+ "Susirašinėjimo programos sąrašas"
+ "Susirašinėjimo programa"
+ "Naujas pranešimas"
+ "Pokalbių sąrašas"
+ "Įkeliami pokalbiai"
+ "Įkeliami pranešimai"
+ "Peržiūrėti daugiau pokalbių"
+ "Peržiūrėti daugiau pranešimų"
+ "Pokalbis ištrintas"
+ "Pokalbis ištrintas. Palieskite, kad būtų rodomas kitas Susirašinėjimo programos pokalbis."
+ "Užblokuota"
+ "Atblokuota"
+ "Mažai laisvos saugyklos vietos. Kai kurie duomenys gali būti prarasti."
+ "Pasirinkti priedus"
+ "Patvirtinti pasirinkimą"
+ "Pasirinkta: %d"
+ "Pašalinkite bent vieną priedą ir bandykite dar kartą."
+ "Galite pabandyti siųsti pranešimą, bet gali nepavykti jo pristatyti, nebent pašalinsite bent vieną priedą."
+ "Viename pranešime galite siųsti tik vieną vaizdo įrašą. Pašalinkite papildomus vaizdo įrašus ir bandykite dar kartą."
+ "Susirašinėjimo programai nepavyko įkelti priedo."
+ "Vis tiek siųsti"
+ "Nepavyko pradėti pokalbio"
+ "%1$s (%2$s)"
+ "Pasirinkta %s"
+
diff --git a/res/values-lv/arrays.xml b/res/values-lv/arrays.xml
new file mode 100644
index 0000000..0e130b7
--- /dev/null
+++ b/res/values-lv/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "bez temata"
+ "bez temata"
+
+
+ "Jā"
+ "Nē"
+ "Labi"
+ "He-he"
+ "Paldies!"
+ "Piekrītu"
+ "Jauki"
+ "Esmu ceļā"
+ "Labi, vēlāk ar tevi sazināšos."
+ ":)"
+ ":("
+
+
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
new file mode 100644
index 0000000..a3195b3
--- /dev/null
+++ b/res/values-lv/strings.xml
@@ -0,0 +1,545 @@
+
+
+
+
+ "Ziņojumapmaiņa"
+ "Ziņojumapmaiņa"
+ "Atlasiet sarunu"
+ "Iestatījumi"
+ "Nosūtīt ziņojumu"
+ "Pievienot pielikumu"
+ "Palīdzība"
+ "Laipni lūdzam!"
+ "Izlaist"
+ "Tālāk >"
+ "Tālāk"
+ "Iziet"
+ "Iestatījumi >"
+ "Iestatījumi"
+ "Lietotnei Ziņojumapmaiņa ir nepieciešama piekļuves atļauja īsziņām, kā arī lietotnēm Tālrunis un Kontaktpersonas."
+ "Atļaujas varat mainīt sadaļā Iestatījumi > Lietotnes > Ziņojumapmaiņa > Atļaujas."
+ "Atļaujas varat mainīt sadaļā Iestatījumi > Lietotnes > Ziņojumapmaiņa > Atļaujas."
+ "Biežāk izmantotās"
+ "Visas kontaktpersonas"
+ "Nosūtīt uz: %s"
+ "Uzņemt attēlus vai video"
+ "Izvēlieties attēlus no šīs ierīces."
+ "Ierakstīt audio"
+ "Fotoattēla izvēle"
+ "Saturs ir atlasīts."
+ "Satura atlase ir noņemta."
+ "Atlasīts: %d"
+ "attēls, %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "attēls"
+ "Ierakstīt audio"
+ "Kopīgot"
+ "Tikko"
+ "Tikko"
+
+ %d min
+ %d min
+ %d min
+
+
+ %d stundas
+ %d stunda
+ %d stundas
+
+
+ %d dienas
+ %d diena
+ %d dienas
+
+
+ %d nedēļas
+ %d nedēļa
+ %d nedēļas
+
+
+ %d mēneši
+ %d mēnesis
+ %d mēneši
+
+
+ %d gadi
+ %d gads
+ %d gadi
+
+ "0. klases ziņojums"
+ "Saglabāt"
+ "Ierīcē ir maz vietas. Lai atbrīvotu vietu, lietotnē Ziņojumapmaiņa tiks automātiski dzēsti vecāki ziņojumi."
+ "Paliek maz brīvas vietas"
+ "Kamēr ierīcē nebūs vairāk vietas, lietotnē Ziņojumapmaiņa, iespējams, nevarēs sūtīt vai saņemt ziņojumus."
+ "Maz vietas īsziņām. Iespējams, jums būs jādzēš īsziņas."
+ "Tālruņa numura apstiprināšana"
+ "Šī vienreizējā darbība ir nepieciešama, lai lietotnē Ziņojumapmaiņa tiktu pareizi piegādāti jūsu grupas ziņojumi."
+ "Tālruņa numurs"
+ "Dzēst visus ziņojumus, kas ietver multivides saturu"
+ "Dzēst ziņojumus, kas vecāki par %s"
+ "Automātiski dzēst ziņojumus, kas vecāki par: %s"
+ "Ignorēt"
+ "Vai dzēst visas ziņas, kurās ietverts multivides saturs?"
+ "Vai dzēst ziņojumus, kas vecāki par: %s?"
+ "Vai dzēst ziņojumus, kas vecāki par: %s, un ieslēgt automātisko dzēšanu?"
+ "%s rakstīja"
+ "Jūs rakstījāt"
+ "Ziņojums no %s"
+ "Jūs nosūtījāt ziņojumu"
+ "Notiek sūtīšana…"
+ "Neizdevās nosūtīt. Pieskarieties, lai mēģinātu vēlreiz."
+ "Neizdevās nosūtīt. Notiek atkārtots mēģinājums…"
+ "Sūtiet vēlreiz vai dzēsiet vienumu"
+ "Veiciet balss zvanu uz avārijas dienesta tālruņa numuru. Pašlaik nevar nosūtīt īsziņu."
+ "Neizdevās"
+ "Jauna lejupielādējama multiziņa"
+ "Jauna multiziņa"
+ "Nevarēja lejupielādēt"
+ "Pieskarieties, lai mēģinātu vēlreiz"
+ "Pieskarieties, lai lejupielādētu"
+ "Lejupielādējiet vai dzēsiet"
+ "Notiek lejupielāde…"
+ "Ziņojums nav pieejams, vai ir beidzies tā derīguma termiņš"
+ "lielums: %1$s; derīgs līdz: %2$s"
+ "Nevar nosūtīt ziņojumu. Adresāts nav derīgs."
+ "Pakalpojums tīklā nav aktivizēts."
+ "Nevarēja nosūtīt tīkla problēmas dēļ."
+ "Ziņa nav pieejama, vai ir beidzies tās derīguma termiņš."
+ "(Bez temata)"
+ "Nezināms sūtītājs"
+ "Piegādāts"
+ "Nevarēja lejupielādēt no sūtītāja %2$s saņemto ziņojumu “%1$s”."
+ "Nevarēja pabeigt datu bāzes darbību, jo nav vietas atmiņā."
+ "Ziņojums netika nosūtīts."
+ "Lietotnē Ziņojumapmaiņa netika nosūtīti daži ziņojumi."
+
+ %d ziņojumi %d sarunās
+ %d ziņojumi %d sarunā
+ %d ziņojumi %d sarunās
+
+ "Ziņojums nav lejupielādēts."
+ "Lietotnē Ziņojumapmaiņa nav lejupielādēti daži ziņojumi."
+
+ %d ziņojumi %d sarunās
+ %d ziņojumi %d sarunā
+ %d ziņojumi %d sarunās
+
+ "Ziņojums netika nosūtīts uz tālruņa numuru %1$s."
+ "Veiciet balss zvanu uz avārijas dienesta tālruņa numuru. Pašlaik nevar nosūtīt īsziņu uz tālruņa numuru %1$s."
+
+ %d jauni ziņojumi
+ %d jauns ziņojums
+ %d jauni ziņojumi
+
+ "Ieslēgt"
+ "Kamera nav pieejama."
+ "Kamera nav pieejama."
+ "Video tveršana nav pieejama."
+ "Nevar saglabāt multivides failu."
+ "Nevar uzņemt attēlu"
+ "Atpakaļ"
+ "Arhīvs"
+ "Dzēst"
+ "Arhivēt"
+ "Izņemt no arhīva"
+ "Izslēgt paziņojumus"
+ "Ieslēgt paziņojumus"
+ "Pievienot kontaktpersonu"
+ "Lejupielādēt"
+ "Sūtīt"
+ "Dzēst"
+ "Vai dzēst šo ziņojumu?"
+ "Šo darbību nevar atsaukt."
+ "Dzēst"
+
+ Vai dzēst šīs sarunas?
+ Vai dzēst šīs sarunas?
+ Vai dzēst šīs sarunas?
+
+ "Dzēst"
+ "Atcelt"
+ "Kam:"
+ "Atlasīt vairākus attēlus"
+ "Apstiprināt atlasi"
+ "Vēl %d"
+ "Nevar ierakstīt audio. Mēģiniet vēlreiz."
+ "Nevar atskaņot audio. Mēģiniet vēlreiz."
+ "Nevarēja saglabāt audio. Mēģiniet vēlreiz."
+ "Pieskarieties un turiet."
+ ", "
+ " "
+ ": "
+ " "
+ "Attēls"
+ "Audioklips"
+ "Videoklips"
+ "Kontaktpersonas kartīte"
+ "Lejupielādēt"
+ "Atbildēt ar īsziņu"
+ "Atbildēt ar MMS"
+ "Atbildēt"
+
+ %d dalībnieki
+ %d dalībnieks
+ %d dalībnieki
+
+ "Es"
+ "Kontaktpersona ir bloķēta un arhivēta"
+ "Kontaktpersona ir atbloķēta un atarhivēta."
+ "Arhivētas: %d"
+ "Atcelta arhivēšana: %d"
+ "Paziņojumi ir izslēgti."
+ "Paziņojumi ir ieslēgti."
+ "Iestatīšana ir pabeigta. Vēlreiz pieskarieties vienumam Sūtīt."
+ "Lietotne Ziņojumapmaiņa ir sekmīgi iestatīta kā noklusējuma īsziņu lietotne."
+
+ Atmest pielikumus
+ Atmest pielikumu
+ Atmest pielikumus
+
+ "Audio pielikums"
+ "Atskaņot audio pielikumu"
+ "Pārtraukt"
+ "Ziņojums no lietotāja %s: %s."
+ "Neizdevās saņemt ziņojumu no kontaktpersonas %s: %s. Laiks: %s."
+ "Ziņojums no kontaktpersonas %s: %s. Laiks: %s."
+ "Nenosūtīts ziņojums kontaktpersonai %s: %s. Laiks: %s."
+ "Notiek ziņojuma sūtīšana kontaktpersonai %s: %s. Laiks: %s."
+ "Neizdevās nosūtīt ziņojumu kontaktpersonai %s: %s. Laiks: %s."
+ "Ziņojums kontaktpersonai %s: %s. Laiks: %s."
+ "Neizdevās saņemt ziņojumu no kontaktpersonas %s: %s. Laiks: %s. %s."
+ "Ziņojums no kontaktpersonas %s: %s. Laiks: %s. %s."
+ "Nenosūtīts ziņojums grupai %s: %s. Laiks: %s."
+ "Notiek ziņojuma sūtīšana grupai %s: %s. Laiks: %s."
+ "Neizdevās nosūtīt ziņojumu grupai %s: %s. Laiks: %s."
+ "Ziņojums grupai %s: %s. Laiks: %s."
+ "Radās problēma ar ziņojumu. Pieskarieties, lai mēģinātu vēlreiz."
+ "Saruna ar grupu: %s"
+ "Dzēst tēmu"
+ "Uzņemt video"
+ "Uzņemt fotoattēlu"
+ "Uzņemt attēlu"
+ "Sākt video ierakstīšanu"
+ "Pārslēgties uz pilnekrāna kameru"
+ "Pārslēgties no priekšējās kameras uz aizmugurējo kameru un otrādi"
+ "Pārtraukt ierakstīšanu un pievienot videoklipu"
+ "Pārtraukt videoklipa ierakstīšanu"
+ "Fotoattēli lietotnē Ziņojumapmaiņa"
+
+ %d fotoattēli tika saglabāti albumā “%s”
+ %d fotoattēls tika saglabāts albumā “%s”
+ %d fotoattēli tika saglabāti albumā “%s”
+
+
+ %d videoklipi tika saglabāti albumā “%s”
+ %d videoklips tika saglabāts albumā “%s”
+ %d videoklipi tika saglabāti albumā “%s”
+
+
+ %d pielikumi tika saglabāti albumā “%s”
+ %d pielikums tika saglabāts albumā “%s”
+ %d pielikumi tika saglabāti albumā “%s”
+
+
+ %d pielikumi tika saglabāti mapē “Lejupielādes”
+ %d pielikums tika saglabāts mapē “Lejupielādes”
+ %d pielikumi tika saglabāti mapē “Lejupielādes”
+
+
+ Tika saglabāti %d pielikumi.
+ Tika saglabāts %d pielikums.
+ Tika saglabāti %d pielikumi.
+
+
+ Nevarēja saglabāt %d pielikumus.
+ Nevarēja saglabāt %d pielikumu.
+ Nevarēja saglabāt %d pielikumus.
+
+ "Multiziņas pielikums tika saglabāts."
+ "Iestatījumi"
+ "Arhīvs"
+ "Aizvērt"
+ "Multiziņa"
+ "Papildu"
+ "Atkļūdot"
+ "Paziņojumi"
+ "Signāls"
+ "Klusums"
+ "Vibrozvans"
+ "Bloķēts"
+ "Īsziņu piegādes atskaites"
+ "Pieprasiet piegādes atskaiti par katru sūtīto īsziņu."
+ "Automātiski izgūt"
+ "Automātiski izgūstiet multiziņas."
+ "Autom. izgūšana viesabon. laikā"
+ "Automātiska multiziņu izgūšana viesabonēšanas laikā"
+ "Grupas ziņojumapmaiņa"
+ "Izmantojiet multiziņu, lai vairākiem adresātiem nosūtītu vienu ziņu."
+ "Noklusējuma īsziņu lietotne"
+ "Noklusējuma īsziņu lietotne"
+
+
+ "Jūsu tālruņa numurs"
+ "Nezināms"
+ "Izejošo ziņojumu signāli"
+ "Īsziņu izrakstīšana"
+ "Izrakstiet saņemto īsziņu jēldatus ārējā krātuves failā."
+ "Multiziņu izrakstīšana"
+ "Izrakstiet saņemto multiziņu jēldatus ārējā krātuves failā."
+ "Bezvadu brīdinājumi"
+ "Ziņojuma opcijas"
+ "Kopēt tekstu"
+ "Skatīt detalizētu informāciju"
+ "Dzēst"
+ "Pārsūtīt"
+ "Detalizēta informācija par ziņojumu"
+ "Veids: "
+ "Īsziņa"
+ "Multiziņa"
+ "No: "
+ "Kam: "
+ "Nosūtīts: "
+ "Saņemts: "
+ "Temats: "
+ "Lielums: "
+ "Prioritāte: "
+ "SIM: "
+ "Augsta"
+ "Parasta"
+ "Zema"
+ "SIM %s"
+ "Sūtītāja adrese ir slēpta"
+ "Ziņojumu nevar nosūtīt, kamēr tiek ielādēti pielikumi."
+ "Nevar ielādēt pielikumu. Mēģiniet vēlreiz."
+ "Tīkls nav gatavs lietošanai. Mēģiniet vēlreiz."
+ "Dzēst tekstu"
+ "Pārslēgties starp teksta un ciparu ievadīšanu"
+ "Pievienot vēl dalībniekus"
+ "Apstiprināt dalībniekus"
+ "Sākt jaunu sarunu"
+ "Atlasīt šo vienumu"
+ "Atskaņot videoklipu"
+ "Personas un opcijas"
+ "Atkļūdot"
+ "Personas un opcijas"
+ "Vispārīgi"
+ "Sarunas dalībnieki"
+ "Zvanīt"
+ "Sūtīt ziņojumu"
+ "Sūtiet īsziņu,<br/><small>izmantojot šo SIM: %s</small>"
+
+ Sūtīt fotoattēlus
+ Sūtīt fotoattēlus
+ Sūtīt fotoattēlus
+
+
+ Sūtīt audio failus
+ Sūtīt audio failus
+ Sūtīt audio failus
+
+
+ Sūtīt videoklipus
+ Sūtīt videoklipus
+ Sūtīt videoklipus
+
+
+ Sūtīt kontaktpersonu kartītes
+ Sūtīt kontaktpersonu kartītes
+ Sūtīt kontaktpersonu kartītes
+
+
+ Sūtīt pielikumus
+ Sūtīt pielikumus
+ Sūtīt pielikumus
+
+
+ Nav atlasīts neviens pielikums.
+ %d pielikums ir gatavs nosūtīšanai.
+ %d pielikumi ir gatavi nosūtīšanai.
+
+ "Sūtīt atsauksmes"
+ "Skatīt Google Play veikalā"
+ "Informācija par versiju"
+ "Versija %1$s"
+ "Atklātā pirmkoda licences"
+ "Paziņojumi"
+ "Sasniegts pielikumu ierobežojums."
+ "Neizdevās ielādēt pielikumu."
+ "Vai pievienot kontaktpersonām?"
+ "Pievienot kontaktpersonu"
+ "Temats"
+ "Temats: "
+ "%s%s"
+ "Notiek kontaktpersonas kartītes ielāde…"
+ "Nevarēja ielādēt kontaktpersonas kartīti."
+ "Skatiet kontaktpersonas kartīti"
+
+ %d kontaktpersonas
+ %d kontaktpersona
+ %d kontaktpersonas
+
+ "Kontaktpersonu kartītes"
+ "Dzimšanas diena"
+ "Piezīmes"
+ "Ziņojuma pārsūtīšana"
+ "Atbildēt"
+ "+1"
+ "+%d"
+ "Īsziņas ir atspējotas."
+ "Lai sūtītu īsziņas, iestatiet lietotni Ziņojumapmaiņa kā noklusējuma īsziņu lietotni."
+ "Iestatiet lietotni Ziņojumapmaiņa kā noklusējuma īsziņu lietotni."
+ "Mainīt"
+ "Lai saņemtu īsziņas, iestatiet lietotni Ziņojumapmaiņa kā noklusējuma īsziņu lietotni."
+ "Īsziņu sūtīšanai nav atlasīta vēlamā SIM karte"
+ "Ierīces īpašnieks nav atļāvis šīs lietotnes darbību."
+ "Labi"
+ "Sarunā ir pārāk daudz dalībnieku."
+
+ Nederīgas kontaktpersonas
+ Nederīga kontaktpersona
+ Nederīgas kontaktpersonas
+
+ "Nevarēja ielādēt kameras attēlu."
+ "Jūs: "
+ "%s: "
+ "Melnraksts"
+ "Jaunas sarunas tiks rādītas šeit."
+ "Šeit tiek rādītas arhivētās sarunas."
+ "Notiek sarunu ielāde..."
+ "Attēls"
+ "Audioklips"
+ "Videoklips"
+ "Kontaktpersonas kartīte"
+ "Multiziņa"
+ "Atsaukt"
+ "Mēģināt vēlreiz"
+ "Ievadiet kontaktpersonas vārdu vai tālruņa numuru, lai sāktu rakstīt jaunu ziņojumu."
+ "Bloķēt"
+ "Bloķēt: %s"
+ "Atbloķēt: %s"
+ "Vai bloķēt %s?"
+ "Jūs turpināsiet saņemt ziņojumus no šī numura, taču vairs nesaņemsiet par tiem paziņojumus. Šī saruna tiks arhivēta."
+ "Bloķētās kontaktpersonas"
+ "ATBLOĶĒT"
+ "Bloķētās kontaktpersonas"
+ "Izvēlēties attēlu no dokumentu bibliotēkas"
+ "Notiek ziņojuma sūtīšana"
+ "Ziņojums nosūtīts"
+ "Mobilo datu savienojums ir izslēgts. Pārbaudiet iestatījumus."
+ "Lidojuma režīmā nevar nosūtīt ziņojumus."
+ "Ziņojumu nevarēja nosūtīt."
+ "Ziņojums lejupielādēts"
+ "Mobilo datu savienojums ir izslēgts. Pārbaudiet iestatījumus."
+ "Ziņojumus nevar lejupielādēt lidojuma režīmā"
+ "Ziņojumu nevarēja lejupielādēt"
+ "Nulle"
+ "Viens"
+ "Divi"
+ "Trīs"
+ "Četri"
+ "Pieci"
+ "Seši"
+ "Septiņi"
+ "Astoņi"
+ "Deviņi"
+ "Nevar nosūtīt ziņojumu: operatora %1$s kļūda %2$d"
+ "Nevar nosūtīt ziņojumu: nezināma operatora kļūda %1$d"
+ "Pārs.: %s"
+ "Ziņojums netika nosūtīts: pakalpojums nav aktivizēts tīklā."
+ "Ziņojums nav nosūtīts: nederīga galamērķa adrese"
+ "Ziņojums nav nosūtīts: nederīgs ziņojums"
+ "Ziņojums nav nosūtīts: neatbalstīts saturs"
+ "Ziņojums nav nosūtīts: neatbalstīts ziņojums"
+ "Ziņojums nav nosūtīts: pārāk liels"
+ "Jauns ziņojums"
+ "Skatīt"
+ "Attēls"
+ "Neizdevās atrast atbilstošu lietojumprogrammu."
+ "Noņemt adresātu"
+ "Jauns ziņojums"
+ "Atcelt"
+ "Piekļuves punkta rediģēšana"
+ "Nav iestatīts"
+ "Nosaukums"
+ "APN"
+ "MMSC"
+ "Multiziņu starpniekserveris"
+ "Multiziņu ports"
+ "MCC"
+ "MNC"
+ "APN veids"
+ "Dzēst APN"
+ "Jauns APN"
+ "Saglabāt"
+ "Atmest"
+ "Nosaukuma lauks nedrīkst būt tukšs."
+ "APN lauks nedrīkst būt tukšs."
+ "MCC laukā ir jābūt 3 cipariem."
+ "MNC laukā ir jābūt 2 vai 3 cipariem."
+ "Notiek APN noklusējuma iestatījumu atjaunošana."
+ "Atiestatīt noklusējuma vērtības"
+ "Noklusējuma APN iestatījumu atiestatīšana ir pabeigta."
+ "Bez nosaukuma"
+ "Piekļuves punktu nosaukumi"
+ "APN"
+ "Jauns APN"
+ "Piekļuves punkta nosaukuma iestatījumi šim lietotājam nav pieejami."
+ "Vai kopēt starpliktuvē?"
+ "Kopēt"
+ "šajā SIM: %s"
+ "Vispārīgi"
+ "Papildu"
+ "Vispārīgi iestatījumi"
+ "Papildu iestatījumi"
+ "SIM kartes “%s” iestatījumi"
+ "Sūtīt atsevišķas īsziņas visiem adresātiem (atbildes saņemsiet tikai jūs)"
+ "Sūtīt vienu multiziņu visiem adresātiem"
+ "Nezināms numurs"
+ "Jauns ziņojums"
+ "Jauns ziņojums"
+ "SIM kartes atlasītājs"
+ "Atlasīta %1$s, SIM kartes atlasītājs"
+ "Rediģēt tematu"
+ "Atlasīt SIM karti vai rediģēt tematu"
+ "Pieskarieties un turiet, lai ierakstītu skaņu."
+ "Sākt jaunu sarunu"
+ "Ziņojumapmaiņa"
+ "Sarunu saraksts lietotnē Ziņojumapmaiņa"
+ "Ziņojumapmaiņa"
+ "Jauns ziņojums"
+ "Sarunu saraksts"
+ "Notiek sarunu ielāde"
+ "Notiek ziņojumu ielāde."
+ "Skatīt citas sarunas"
+ "Skatīt vairāk ziņojumu"
+ "Saruna ir izdzēsta"
+ "Saruna dzēsta. Pieskarieties, lai skatītu citu sarunu lietotnē Ziņojumapmaiņa."
+ "Bloķēts"
+ "Atbloķēts"
+ "Krātuvē ir maz vietas. Daļa datu var tikt zaudēta."
+ "Pielikumu atlasīšana"
+ "Apstiprināt atlasi"
+ "Atlasīti: %d"
+ "Lūdzu, noņemiet vienu vai vairākus pielikumus un mēģiniet vēlreiz."
+ "Varat mēģināt sūtīt ziņojumu, taču tas, iespējams, netiks piegādāts, ja vien nenoņemsiet vienu vai vairākus pielikumus."
+ "Ziņojumam var pievienot tikai vienu videoklipu. Lūdzu, noņemiet liekos videoklipus un mēģiniet vēlreiz."
+ "Lietotnē Ziņojumapmaiņa neizdevās ielādēt pielikumu."
+ "Tik un tā sūtīt"
+ "Nevarēja sākt sarunu"
+ "%1$s (%2$s)"
+ "Atlasīts: %s"
+
diff --git a/res/values-mk-rMK/arrays.xml b/res/values-mk-rMK/arrays.xml
new file mode 100644
index 0000000..eba8db7
--- /dev/null
+++ b/res/values-mk-rMK/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "без наслов"
+ "без тема"
+
+
+ "Да"
+ "Не"
+ "Во ред"
+ "Хехе"
+ "Фала"
+ "Се согласувам"
+ "Убаво"
+ "На пат сум"
+ "Во ред, ќе ти јавам подоцна"
+ ":)"
+ ":("
+
+
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
new file mode 100644
index 0000000..98f871e
--- /dev/null
+++ b/res/values-mk-rMK/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Пораки"
+ "Пораки"
+ "Изберете разговор"
+ "Поставки"
+ "Испрати порака"
+ "Додај прилог"
+ "Помош"
+ "Добре дојдовте"
+ "Прескокни"
+ "Следно >"
+ "Следно"
+ "Излези"
+ "Поставки >"
+ "Поставки"
+ "На Messaging му треба дозвола за СМС, телефон и контакти."
+ "Дозволите може да ги промените во Поставки > Апликации > Messaging > Дозволи."
+ "Дозволите може да ги промените во Поставки, Апликации, Messaging, Дозволи."
+ "Чести"
+ "Сите контакти"
+ "Испрати на %s"
+ "Снимај слики или видео"
+ "Изберете слики од уредот"
+ "Снимај аудио"
+ "Избери фотографија"
+ "Медиумот е избран."
+ "Медиумот е неизбран."
+ "Избрани: %d"
+ "слика %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "слика"
+ "Снимај аудио"
+ "Сподели"
+ "Пред малку"
+ "Сега"
+
+ %d мин.
+ %d мин.
+
+
+ %d час
+ %d часа
+
+
+ %d ден
+ %d дена
+
+
+ %d седмица
+ %d седмици
+
+
+ %d месец
+ %d месеци
+
+
+ %d година
+ %d години
+
+ "Порака 0 класа"
+ "Зачувај"
+ "Уредот нема доволно меморија. Messaging автоматски ќе ги брише постарите текстуални пораки за да ослободи простор."
+ "Меморијата е речиси полна"
+ "Messaging може да не испраќа или прима пораки сѐ додека не се ослободи повеќе простор на уредот."
+ "Малку простор за складирање СМС. Можеби ќе треба да избришете пораки."
+ "Потврдете го својот телефонски број"
+ "Со овој еднократен чекор ќе се погрижите Messaging правилно да ви ги испорачува групните пораки."
+ "Телефонски број"
+ "Избриши ги сите пораки со медиуми"
+ "Избриши ги пораките постари од %s"
+ "Автоматско бришење пораки постари од %s"
+ "Игнорирај"
+ "Да се избришат сите пораки со медиуми?"
+ "Да се избришат пораките постари од %s?"
+ "Да се избришат пораките постари од %s и да се вклучи автоматското бришење?"
+ "%s рече"
+ "Рековте"
+ "Порака од %s"
+ "Испративте порака"
+ "Се испраќа..."
+ "Не се испрати. Допрете за да се обидете повторно."
+ "Не се испрати. Се обидуваме повторно…"
+ "Испратете повторно или избришете"
+ "Направете гласовен повик до службите за итни случаи. Вашата текстуална порака не може да се испорача во ова време."
+ "Неуспешно"
+ "Нова ММС-порака за преземање"
+ "Нова ММС-порака"
+ "Не можеше да се преземе"
+ "Допрете да се обидете повторно"
+ "Допри за преземање"
+ "Преземете или избришете"
+ "Се презема..."
+ "Пораката е истечена или не е достапна"
+ "големина: %1$s, истекување: %2$s"
+ "Не може да се испрати. Примачот не е важечки."
+ "Услугата не е активирана на мрежата"
+ "Не можеше да се испрати поради проблем со мрежата"
+ "Пораката е истечена или не е достапна"
+ "(Без наслов)"
+ "Непознат испраќач"
+ "Доставено"
+ "Пораката %1$s од %2$s не може да се преземе."
+ "Не може да се заврши дејството во базата со податоци поради мала меморија"
+ "Пораката не се испрати"
+ "Некои пораки не се испратени во Messaging"
+
+ %d пораки во %d разговор
+ %d пораки во %d разговори
+
+ "Пораката не е преземена"
+ "Некои пораки не се преземени во Messaging"
+
+ %d пораки во %d разговор
+ %d пораки во %d разговори
+
+ "Пораката до %1$s не се испрати"
+ "Направете гласовен повик до службите за итни случаи. Вашата текстуална порака до %1$s не може да се испорача во ова време."
+
+ %d нова порака
+ %d нови пораки
+
+ "Започни"
+ "Нема фотоапарат на располагање"
+ "Нема фотоапарат на располагање"
+ "Снимањето видео не е достапно"
+ "Медиумите не може да се зачуваат"
+ "Не може да фотографира"
+ "Назад"
+ "Архивирано"
+ "Бришење"
+ "Архивирање"
+ "Извади од архива"
+ "Исклучи известувања"
+ "Вклучи известувања"
+ "Додај контакт"
+ "Преземи"
+ "Испрати"
+ "Избриши"
+ "Да се избрише пораката?"
+ "Дејството не може да се врати."
+ "Избриши"
+
+ Да се избрише разговоров?
+ Да се избришат разговориве?
+
+ "Избриши"
+ "Откажи"
+ "До"
+ "Избери повеќе слики"
+ "Потврдете го изборот"
+ "+%d"
+ "Аудиото не може да се сними. Обидете се повторно."
+ "Аудиото не може да се пушти. Обидете се повторно."
+ "Аудиото не можеше да се зачува. Обидете се повторно."
+ "Допри и задржи"
+ ", "
+ " "
+ ": "
+ " "
+ "Слика"
+ "Аудиоклип"
+ "Видео"
+ "Картичка за контакти"
+ "Преземи"
+ "Одговори преку СМС"
+ "Одговори преку ММС"
+ "Одговори"
+
+ %d учесник
+ %d учесници
+
+ "Јас"
+ "Контактот е блокиран и архивиран"
+ "Одблокиран и одархивиран контакт"
+ "%d архивирани"
+ "%d извадени од архива"
+ "Известувањата се исклучени"
+ "Известувањата се вклучени"
+ "Сè е подготвено. Допрете Испрати повторно."
+ "Messaging е успешно поставен како стандардна апликација за СМС."
+
+ Отфрли го прилогот
+ Отфрли ги прилозите
+
+ "Аудио прилог"
+ "Репродуцирај аудио прилог"
+ "Пауза"
+ "Порака од %s: %s."
+ "Неуспешна порака од %s: %s. Време: %s."
+ "Порака од %s: %s. Време: %s."
+ "Неиспратена порака до %s: %s. Време: %s."
+ "Се испраќа порака до %s: %s. Време: %s."
+ "Неуспешна порака до %s: %s. Време: %s."
+ "Порака до %s: %s. Време: %s."
+ "Неуспешна порака од %s: %s. Време: %s. %s."
+ "Порака од %s: %s. Време: %s. %s."
+ "Неиспратена порака до %s: %s. Време: %s."
+ "Се испраќа порака до %s: %s. Време: %s."
+ "Неуспешна порака до %s: %s. Време: %s."
+ "Порака до %s: %s. Време: %s."
+ "Неуспешна порака. Допрете за да се обидете повторно."
+ "Разговор со %s"
+ "Избриши тема"
+ "Снимај видео"
+ "Сними фотографија"
+ "Фотографирај"
+ "Започни со снимање видео"
+ "Префрлете на камера на цел екран"
+ "Префрли меѓу предна и задна камера"
+ "Престани со снимање и прикачи видео"
+ "Прекини со снимање видео"
+ "Фотографии во Messaging"
+
+ %d фотографија се зачува во албумот „%s“
+ %d фотографии се зачуваа во албумот „%s“
+
+
+ %d видео се зачува во албумот „%s“
+ %d видеа се зачуваа во албумот „%s“
+
+
+ %d прилог се зачува во албумот „%s“
+ %d прилози се зачуваа во албумот „%s“
+
+
+ %d прилог се зачува во „Преземања“
+ %d прилози се зачуваа во „Преземања“
+
+
+ Зачуван е %d прилог
+ Зачувани се %d прилози
+
+
+ Не можеше да се зачува %d прилог
+ Не можеше да се зачуваат %d прилози
+
+ "Зачуван ММС-прилог"
+ "Поставки"
+ "Архивирано"
+ "Затвори"
+ "ММС"
+ "Напредни"
+ "Отстрани грешка"
+ "Известувања"
+ "Звук"
+ "На тивко"
+ "Вибрации"
+ "Блокирано"
+ "Извештаи за испорака на СМС"
+ "Побарајте извештај за испорака за секоја СМС што ја испраќате"
+ "Автоматско преземање"
+ "Преземај ММС-пораки автоматски"
+ "Автоматско преземање во роаминг"
+ "Автоматски преземај MMS додека си во роаминг"
+ "Групно испраќање пораки"
+ "Користи ММС за испраќање една порака кога има повеќе примачи"
+ "Стандардна СМС апликација"
+ "Стандардна СМС апликација"
+
+
+ "Вашиот телефонски број"
+ "Непознато"
+ "Звуци на појдовни пораки"
+ "Извади СМС"
+ "Извади ги примените необработени податоци за СМС на надворешна датотека за складирање"
+ "Извади ММС"
+ "Извади ги примените необработени податоци за ММС на надворешна датотека за складирање"
+ "Безжични предупредувања"
+ "Опции на порака"
+ "Копирај текст"
+ "Прикажи детали"
+ "Избриши"
+ "Проследи"
+ "Детали на порака"
+ "Тип: "
+ "Текстуална порака"
+ "Мултимедијална порака"
+ "Од: "
+ "До: "
+ "Испратено: "
+ "Примени: "
+ "Предмет: "
+ "Големина: "
+ "Приоритет: "
+ "СИМ: "
+ "Високо"
+ "Нормално"
+ "Ниско"
+ "СИМ %s"
+ "Скриена адреса на испраќачот"
+ "Не може да се испрати порака додека се вчитуваат прилозите."
+ "Прилогот не може да се вчита. Обидете се повторно."
+ "Мрежата не е подготвена. Обидете се повторно."
+ "Избриши текст"
+ "Префрлајте меѓу внесување текст и броеви"
+ "Додај повеќе учесници"
+ "Потврди учесници"
+ "Започнете нов разговор"
+ "Изберете ја ставкава"
+ "Пушти видео"
+ "Луѓе и опции"
+ "Отстрани грешка"
+ "Луѓе и опции"
+ "Општи"
+ "Луѓе во овој разговор"
+ "Повикај"
+ "Испрати порака"
+ "Испратете порака <br/><small>од %s</small>"
+
+ Испрати ја фотографијата
+ Испрати ги фотографиите
+
+
+ Испрати го аудиото
+ Испрати ги аудиата
+
+
+ Испрати го видеото
+ Испрати ги видеата
+
+
+ Испрати ја картичката за контакт
+ Испрати ги картичките за контакт
+
+
+ Испрати го прилогот
+ Испрати ги прилозите
+
+
+ %d прилог е подготвен за испраќање
+ %d прилози се подготвени за испраќање
+
+ "Испрати повратни информации"
+ "Прикажи во продавницата на Google Play"
+ "Информации за верзијата"
+ "Верзија %1$s"
+ "Лиценци со отворен код"
+ "Известувања"
+ "Достигнато е ограничувањето за прилози"
+ "Не успеа да се вчита прилогот."
+ "Да додадеме во контакти?"
+ "Додај контакт"
+ "Предмет"
+ "Предмет: "
+ "%s%s"
+ "Се вчитува картичката за контакт"
+ "Картичката за контакт не можеше да се вчита"
+ "Прикажи картичка за контакти"
+
+ %d контакт
+ %d контакти
+
+ "Картички за контакт"
+ "Роденден"
+ "Белешки"
+ "Проследи порака"
+ "Одговори"
+ "+1"
+ "+%d"
+ "СМС-пораките се оневозможени"
+ "За испраќање, поставете го Messaging како стандардна апликација за СМС"
+ "Поставете го Messaging како стандардна апликација за СМС"
+ "Промени"
+ "За примање пораки, поставете го Messaging како стандардна апликација за СМС"
+ "Не е избрана претпочитана СИМ за испраќање СМС-пораки"
+ "Оваа апликација не е дозволена од сопственикот на уредот."
+ "Во ред"
+ "Премногу учесници во разговорот"
+
+ Неважечки контакт
+ Неважечки контакти
+
+ "Слика од камерата не можеше да се вчита"
+ "Вие: "
+ "%s: "
+ "Нацрт"
+ "Штом започнете нов разговор, ќе го видите наведен тука"
+ "Архивираните разговори се појавуваат тука"
+ "Се вчитуваат разговори…"
+ "Слика"
+ "Аудиоклип"
+ "Видео"
+ "Картичка за контакти"
+ "ММС"
+ "Врати"
+ "Обидете се повторно"
+ "Внесете име на контактот или телефонски број за да започнете нова порака"
+ "Блокирај"
+ "Блокирај %s"
+ "Одблокирај %s"
+ "Да се блокира %s?"
+ "Ќе продолжите да добивате пораки од овој број, но веќе нема да добивате известувања. Разговорот ќе се архивира."
+ "Блокирани контакти"
+ "ОДБЛОКИРАЈ"
+ "Блокирани контакти"
+ "Изберете слика од библиотеката со документи"
+ "Пораката се испраќа"
+ "Пораката е испратена"
+ "Мобилните податоци се исклучени. Проверете ги поставките."
+ "Не може да се испраќаат пораки во авионски режим"
+ "Пораката не може да се испрати."
+ "Пораката е преземeна"
+ "Мобилните податоци се исклучени. Проверете ги поставките."
+ "Не може да се преземаат пораки во авионски режим"
+ "Пораката не можеше да се преземе"
+ "Нула"
+ "Еден"
+ "Два"
+ "Три"
+ "Четири"
+ "Пет"
+ "Шест"
+ "Седум"
+ "Осум"
+ "Девет"
+ "Пораката не може да се испрати преку %1$s, грешка %2$d"
+ "Пораката не може да се испрати преку непознат давател на услуга, грешка %1$d"
+ "Препрати: %s"
+ "Пораката не се испрати: услугата не е активирана на мрежата"
+ "Пораката не е испратена: неважечка адреса на одредиштето"
+ "Пораката не е испратена: неважечка порака"
+ "Пораката не е испратена: неподдржана содржина"
+ "Пораката не е испратена: неподдржана порака"
+ "Пораката не е испратена: преголема"
+ "Нова порака"
+ "Прикажи"
+ "Слика"
+ "Не може да се најде соодветна апликација"
+ "Отстрани го примачот"
+ "Нова порака"
+ "Откажи"
+ "Уреди пристапна точка"
+ "Не е поставено"
+ "Име"
+ "Име на пристапна точка (APN)"
+ "ММСЦ"
+ "Прокси на ММС"
+ "Порта за ММС"
+ "MCC"
+ "MNC"
+ "Тип APN"
+ "Избриши APN"
+ "Ново APN"
+ "Зачувај"
+ "Отфрли"
+ "Полето за име не може да биде празно."
+ "APN не може да биде празна."
+ "Полето MNC мора да содржи 3 цифри."
+ "Полето MNC мора да содржи 2 или 3 цифри."
+ "Враќање стандардни поставки на APN."
+ "Ресетирај на стандардни вредности"
+ "Ресетирањето стандардни поставки на APN е завршено."
+ "Без наслов"
+ "Имиња на пристапни точки"
+ "Поставување APN"
+ "Ново APN"
+ "Поставките за името на пристапната точка не се достапни за овој корисник"
+ "Копирајте во таблата со исечоци?"
+ "Копирај"
+ "до %s"
+ "Општи"
+ "Напредни"
+ "Општи поставки"
+ "Напредни поставки"
+ "СИМ „%s“"
+ "Испратете поединечни СМС-пораки до сите примачи. Само вие ќе добивате одговори"
+ "Испратете единствена ММС-порака до сите примачи"
+ "Непознат број"
+ "Нова порака"
+ "Нова порака."
+ "Бирач на СИМ"
+ "%1$s е избран, бирач на СИМ"
+ "Уреди предмет"
+ "Избери СИМ или уреди предмет"
+ "Допри и задржи за снимање аудио"
+ "Започнете нов разговор"
+ "Messaging"
+ "Список на Messaging"
+ "Messaging"
+ "Нова порака"
+ "Список со разговори"
+ "Разговорите се вчитуваат"
+ "Се вчитуваат пораки"
+ "Прикажи повеќе разговори"
+ "Прикажи повеќе пораки"
+ "Конверзацијата е избришана"
+ "Разговорот е избришан. Допрете за да се прикаже друг разговор на Messaging"
+ "Блокирано"
+ "Одблокирано"
+ "Просторот за складирање е премногу мал. Некои податоци може да се изгубат."
+ "Изберете прилози"
+ "Потврдете го изборот"
+ "Избрани %d"
+ "Отстранете еден или повеќе прилози и обидете се повторно."
+ "Може да се обидете да ја испратите пораката, но можеби нема да се испорача, освен ако не отстраните еден или повеќе прилози."
+ "Може да испраќате само едно видео по порака. Отстранете ги дополнителните видеа и обидете се повторно."
+ "Messaging не успеа да го вчита прилогот."
+ "Сепак испрати"
+ "Не може да се започне разговор"
+ "%1$s (%2$s)"
+ "Избрана е %s"
+
diff --git a/res/values-ml-rIN/arrays.xml b/res/values-ml-rIN/arrays.xml
new file mode 100644
index 0000000..7454e1f
--- /dev/null
+++ b/res/values-ml-rIN/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "വിഷയമില്ല"
+ "വിഷയമൊന്നുമില്ല"
+
+
+ "ഉവ്വ്"
+ "ഇല്ല"
+ "ശരി"
+ "ഹിഹി"
+ "നന്ദി"
+ "ഞാൻ അംഗീകരിക്കുന്നു"
+ "കൊള്ളാം"
+ "മറുപടി നൽകാൻ തയ്യാറാണ്"
+ "ശരി, പിന്നീട് നിങ്ങളുമായി ബന്ധപ്പെടാൻ എന്നെ അനുവദിക്കുക"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
new file mode 100644
index 0000000..554cac3
--- /dev/null
+++ b/res/values-ml-rIN/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "സന്ദേശമയയ്ക്കൽ"
+ "സന്ദേശമയയ്ക്കൽ"
+ "സംഭാഷണം തിരഞ്ഞെടുക്കുക"
+ "ക്രമീകരണങ്ങൾ"
+ "സന്ദേശം അയയ്ക്കൂ"
+ "ഒരു അറ്റാച്ചുമെന്റ് ചേർക്കുക"
+ "സഹായം"
+ "സ്വാഗതം"
+ "ഒഴിവാക്കുക"
+ "അടുത്തത് >"
+ "അടുത്തത്"
+ "പുറത്തുകടക്കുക"
+ "ക്രമീകരണം >"
+ "ക്രമീകരണം"
+ "SMS, ഫോൺ, കോൺടാക്റ്റുകൾ എന്നിവയിലേക്ക് സന്ദേശമയയ്ക്കലിന് അനുമതി ആവശ്യമാണ്."
+ "ക്രമീകരണം > ആപ്സ് > സന്ദേശമയയ്ക്കൽ > അനുമതികൾ എന്നതിൽ നിങ്ങൾക്ക് അനുമതികൾ മാറ്റാവുന്നതാണ്."
+ "ക്രമീകരണം, ആപ്സ്, സന്ദേശമയയ്ക്കൽ, അനുമതികൾ എന്നതിൽ നിങ്ങൾക്ക് അനുമതികൾ മാറ്റാവുന്നതാണ്."
+ "പതിവായി കോൺടാക്റ്റുചെയ്യുന്നവർ"
+ "എല്ലാ കോൺടാക്റ്റുകളും"
+ "%s എന്നതിലേയ്ക്ക് അയയ്ക്കുക"
+ "ചിത്രങ്ങൾ അല്ലെങ്കിൽ വീഡിയോ എടുക്കുക"
+ "ഈ ഉപകരണത്തിൽ നിന്ന് ചിത്രങ്ങൾ തിരഞ്ഞെടുക്കുക"
+ "ഓഡിയോ റെക്കോർഡുചെയ്യുക"
+ "ഫോട്ടോ തിരഞ്ഞെടുക്കുക"
+ "മീഡിയ തിരഞ്ഞെടുത്തിരിക്കുന്നു."
+ "മീഡിയ തിരഞ്ഞെടുത്തത് മാറ്റി."
+ "%d എണ്ണം തിരഞ്ഞെടുത്തു"
+ "ചിത്രം %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "ചിത്രം"
+ "ഓഡിയോ റെക്കോർഡുചെയ്യുക"
+ "പങ്കിടുക"
+ "ഇപ്പോൾ"
+ "ഇപ്പോൾ"
+
+ %d മിനിറ്റ്
+ %d മിനിറ്റ്
+
+
+ %d മണിക്കൂർ
+ %d മണിക്കൂർ
+
+
+ %d ദിവസം
+ %d ദിവസം
+
+
+ %d ആഴ്ച
+ ഒരു ആഴ്ച
+
+
+ %d മാസം
+ ഒരു മാസം
+
+
+ %d വർഷം
+ ഒരു വർഷം
+
+ "ക്ലാസ് 0 സന്ദേശം"
+ "സംരക്ഷിക്കുക"
+ "ഉപകരണത്തിൽ ഇടം കുറവാണ്. ഇടം സ്വതന്ത്രമാക്കുന്നതിന് പഴയ സന്ദേശങ്ങളെ സന്ദേശമയയ്ക്കൽ സ്വയമേവ ഇല്ലാതാക്കും."
+ "സംഭരണയിടം കഴിഞ്ഞു"
+ "നിങ്ങളുടെ ഉപകരണത്തിൽ കൂടുതൽ ഇടം ലഭ്യമാകുന്നത് വരെ സന്ദേശമയയ്ക്കലിന് സന്ദേശങ്ങൾ അയയ്ക്കാനോ സ്വീകരിക്കാനോ ആയേക്കില്ല."
+ "SMS സ്റ്റോറേജ് കുറവാണ്. നിങ്ങൾക്ക് സന്ദേശങ്ങൾ ഇല്ലാതാക്കേണ്ടതായി വരാം."
+ "നിങ്ങളുടെ ഫോൺ നമ്പർ സ്ഥിരീകരിക്കുക"
+ "സന്ദേശമയയ്ക്കൽ നിങ്ങളുടെ ഗ്രൂപ്പ് സന്ദേശങ്ങൾ ശരിയായി വിതരണം ചെയ്യുമെന്ന് ഈ ഒറ്റത്തവണയുള്ള ഘട്ടം ഉറപ്പാക്കും."
+ "ഫോണ് നമ്പര്"
+ "മീഡിയയുള്ള എല്ലാ സന്ദേശങ്ങളും ഇല്ലാതാക്കുക"
+ "%s എന്നതിലും പഴയ സന്ദേശങ്ങൾ ഇല്ലാതാക്കുക"
+ "%s മുമ്പുള്ള സന്ദേശങ്ങൾ യാന്ത്രികമായി ഇല്ലാതാക്കുക"
+ "നിരസിക്കുക"
+ "മീഡിയയുള്ള എല്ലാ സന്ദേശങ്ങളും ഇല്ലാതാക്കണോ?"
+ "%s മുമ്പുള്ള സന്ദേശങ്ങൾ ഇല്ലാതാക്കണോ?"
+ "%s മുമ്പുള്ള സന്ദേശങ്ങൾ ഇല്ലാതാക്കുകയും യാന്ത്രിക ഇല്ലാതാക്കൽ ഓണാക്കുകയും ചെയ്യണോ?"
+ "%s, പറഞ്ഞു"
+ "നിങ്ങൾ പറഞ്ഞു"
+ "%s എന്നയാളില് നിന്നുള്ള സന്ദേശം"
+ "നിങ്ങൾ ഒരു സന്ദേശമയച്ചു"
+ "അയയ്ക്കുന്നു…"
+ "അയച്ചില്ല. വീണ്ടും ശ്രമിക്കാൻ സ്പർശിക്കുക."
+ "അയച്ചില്ല. വീണ്ടും ശ്രമിക്കുന്നു..."
+ "വീണ്ടും അയയ്ക്കുക അല്ലെങ്കിൽ ഇല്ലാതാക്കുക"
+ "അടിയന്തര സേവനങ്ങളിലേക്ക് വോയ്സ് കോൾ ചെയ്യുക. ഇപ്പോൾ നിങ്ങളുടെ ടെക്സ്റ്റ് സന്ദേശം കൈമാറാനായില്ല."
+ "പരാജയപ്പെട്ടു"
+ "ഡൗൺലോഡുചെയ്യാനുള്ള പുതിയ MMS സന്ദേശം"
+ "പുതിയ MMS സന്ദേശം"
+ "ഡൗൺലോഡുചെയ്യാനായില്ല"
+ "വീണ്ടും ശ്രമിക്കാൻ സ്പർശിക്കുക"
+ "ഡൗൺലോഡുചെയ്യാൻ സ്പർശിക്കുക"
+ "ഡൗൺലോഡുചെയ്യുക അല്ലെങ്കിൽ ഇല്ലാതാക്കുക"
+ "ഡൗൺലോഡുചെയ്യുന്നു…"
+ "സന്ദേശം കാലഹരണപ്പെട്ടു അല്ലെങ്കിൽ ലഭ്യമല്ല"
+ "വലുപ്പം: %1$s, കാലഹരണപ്പെടുന്നത്: %2$s"
+ "അയയ്ക്കാനാവില്ല. സ്വീകർത്താവ് അസാധുവാണ്."
+ "സേവനം നെറ്റ്വർക്കിൽ സജീവമാക്കിയിട്ടില്ല"
+ "നെറ്റ്വർക്ക് പ്രശ്നം കാരണം അയയ്ക്കാനായില്ല"
+ "സന്ദേശം കാലഹരണപ്പെട്ടു അല്ലെങ്കിൽ ലഭ്യമല്ല"
+ "(വിഷയമൊന്നുമില്ല)"
+ "അയച്ചയാൾ അജ്ഞാതനാണ്"
+ "ഡെലിവർ ചെയ്തു"
+ "%2$s എന്നയാളിൽ നിന്നുള്ള %1$s എന്ന സന്ദേശം ഡൗൺലോഡുചെയ്യാനായില്ല."
+ "മെമ്മറി കുറവായതിനാൽ ഡാറ്റാബേസ് പ്രവർത്തനം പൂർത്തിയാക്കാനായില്ല"
+ "സന്ദേശം അയച്ചില്ല"
+ "സന്ദേശമയയ്ക്കലിൽ ചില സന്ദേശങ്ങൾ അയച്ചിട്ടില്ല"
+
+ %d സംഭാഷണങ്ങളിൽ %d സന്ദേശങ്ങൾ
+ ഒരു സംഭാഷണത്തിൽ %d സന്ദേശങ്ങൾ
+
+ "സന്ദേശം ഡൗൺലോഡുചെയ്തില്ല"
+ "സന്ദേശമയയ്ക്കലിൽ ചില സന്ദേശങ്ങൾ ഡൗൺലോഡ് ചെയ്തിട്ടില്ല"
+
+ %d സംഭാഷണങ്ങളിൽ %d സന്ദേശങ്ങൾ
+ ഒരു സംഭാഷണത്തിൽ %d സന്ദേശങ്ങൾ
+
+ "%1$s എന്ന നമ്പറിലേക്ക് സന്ദേശം അയച്ചില്ല"
+ "അടിയന്തര സേവനങ്ങളിലേക്ക് വോയ്സ് കോൾ ചെയ്യുക. ഇപ്പോൾ നിങ്ങളുടെ ടെക്സ്റ്റ് സന്ദേശം %1$s എന്ന നമ്പറിലേക്ക് കൈമാറാനായില്ല."
+
+ %d പുതിയ സന്ദേശങ്ങൾ
+ പുതിയ സന്ദേശം
+
+ "ആരംഭിക്കുക"
+ "ക്യാമറ ലഭ്യമല്ല"
+ "ക്യാമറ ലഭ്യമല്ല"
+ "വീഡിയോ എടുക്കൽ ലഭ്യമല്ല"
+ "മീഡിയ സംരക്ഷിക്കാനാവില്ല"
+ "ചിത്രമെടുക്കാനാവില്ല"
+ "മടങ്ങുക"
+ "ആർക്കൈവുചെയ്തവ"
+ "ഇല്ലാതാക്കുക"
+ "ആര്ക്കൈവുചെയ്യുക"
+ "ആർക്കൈവുചെയ്തത് മാറ്റുക"
+ "അറിയിപ്പുകൾ ഓഫാക്കുക"
+ "അറിയിപ്പുകൾ ഓണാക്കുക"
+ "കോൺടാക്റ്റ് ചേർക്കുക"
+ "ഡൗൺലോഡ്"
+ "അയയ്ക്കുക"
+ "ഇല്ലാതാക്കുക"
+ "ഈ സന്ദേശം ഇല്ലാതാക്കണോ?"
+ "ഈ പ്രവർത്തനം പഴയപടിയാക്കാനാകില്ല."
+ "ഇല്ലാതാക്കുക"
+
+ ഈ സംഭാഷണങ്ങൾ ഇല്ലാതാക്കണോ?
+ ഈ സംഭാഷണം ഇല്ലാതാക്കണോ?
+
+ "ഇല്ലാതാക്കുക"
+ "റദ്ദാക്കുക"
+ "സ്വീകര്ത്താവ്"
+ "ഒന്നിലധികം ചിത്രങ്ങൾ തിരഞ്ഞെടുക്കുക"
+ "തിരഞ്ഞെടുത്തവ സ്ഥിരീകരിക്കുക"
+ "%d എണ്ണം കൂടി"
+ "ഓഡിയോ റെക്കോർഡ് ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക."
+ "ഓഡിയോ പ്ലേ ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക."
+ "ഓഡിയോ സംരക്ഷിക്കാനായില്ല. വീണ്ടും ശ്രമിക്കുക."
+ "സ്പർശിച്ച് പിടിക്കുക"
+ ", "
+ " "
+ ": "
+ " "
+ "ചിത്രം"
+ "ഓഡിയോ ക്ലിപ്പ്"
+ "വീഡിയോ"
+ "കോൺടാക്റ്റ് കാർഡ്"
+ "ഡൗൺലോഡുചെയ്യുക"
+ "SMS വഴി മറുപടി നൽകുക"
+ "MMS വഴി മറുപടി നൽകുക"
+ "മറുപടി നൽകുക"
+
+ %d പങ്കെടുക്കുന്നവർ
+ %d പങ്കെടുക്കുന്നയാൾ
+
+ "ഞാന്"
+ "കോൺടാക്റ്റ് തടഞ്ഞ് ആർക്കൈവുചെയ്തു"
+ "കോൺടാക്റ്റിനെ തടഞ്ഞതും ആർക്കൈവ് ചെയ്തതും മാറ്റി"
+ "%d എണ്ണം ആർക്കൈവുചെയ്തു"
+ "%d എണ്ണം ആർക്കൈവുചെയ്തത് മാറ്റി"
+ "അറിയിപ്പുകൾ ഓഫാക്കി"
+ "അറിയിപ്പുകൾ ഓണാക്കി"
+ "എല്ലാം സജ്ജീകരിച്ചു. വീണ്ടും അയയ്ക്കാൻ സ്പർശിക്കുക."
+ "സ്ഥിര SMS ആപ്പായി സന്ദേശമയയ്ക്കൽ സജ്ജീകരിച്ചു."
+
+ അറ്റാച്ച്മെന്റുകൾ ഉപേക്ഷിക്കുക
+ അറ്റാച്ച്മെന്റ് ഉപേക്ഷിക്കുക
+
+ "ഓഡിയോ അറ്റാച്ചുമെന്റ്"
+ "ഓഡിയോ അറ്റാച്ചുമെന്റ് പ്ലേ ചെയ്യുക"
+ "താൽക്കാലികമായി നിർത്തുക"
+ "%s എന്നയാളിൽ നിന്നുള്ള സന്ദേശം : %s ."
+ "%s എന്നയാളിൽ നിന്നുള്ള സന്ദേശം പരാജയപ്പെട്ടു: %s. സമയം: %s."
+ "%s എന്നയാളിൽ നിന്നുള്ള സന്ദേശം: %s. സമയം: %s."
+ "%s എന്നതിലേക്ക് സന്ദേശം അയച്ചില്ല: %s. സമയം: %s."
+ "%s എന്നതിലേക്ക് സന്ദേശം അയയ്ക്കുന്നു: %s. സമയം: %s."
+ "%s എന്നതിലേക്കുള്ള സന്ദേശം പരാജയപ്പെട്ടു: %s. സമയം: %s."
+ "%s എന്നതിലേക്കുള്ള സന്ദേശം: %s. സമയം: %s."
+ "%s എന്നയാളിൽ നിന്നുള്ള സന്ദേശം പരാജയപ്പെട്ടു: %s. സമയം: %s. %s."
+ "%s എന്നയാളിൽ നിന്നുള്ള സന്ദേശം: %s. സമയം: %s. %s."
+ "%s എന്നതിലേക്ക് സന്ദേശം അയച്ചില്ല: %s. സമയം: %s."
+ "%s എന്നതിലേക്ക് സന്ദേശം അയയ്ക്കുന്നു: %s. സമയം: %s."
+ "%s എന്നതിലേക്കുള്ള സന്ദേശം പരാജയപ്പെട്ടു: %s. സമയം: %s."
+ "%s എന്നതിലേക്കുള്ള സന്ദേശം: %s. സമയം: %s."
+ "സന്ദേശം പരാജയപ്പെട്ടു. വീണ്ടും ശ്രമിക്കുന്നതിന് സ്പർശിക്കുക."
+ "%s എന്നിവരുമായുള്ള സംഭാഷണം"
+ "വിഷയം ഇല്ലാതാക്കുക"
+ "വീഡിയോ എടുക്കുക"
+ "ഒരു സ്റ്റിൽ ചിത്രം എടുക്കുക"
+ "ചിത്രം എടുക്കുക"
+ "വീഡിയോ റെക്കോർഡുചെയ്യാൻ ആരംഭിക്കുക"
+ "പൂർണ്ണസ്ക്രീൻ ക്യാമറയിലേക്ക് മാറുക"
+ "മുന്നിലെയും പിന്നിലെയും ക്യാമറയ്ക്കിടയിൽ മാറുക"
+ "റെക്കോർഡുചെയ്യൽ നിർത്തി, വീഡിയോ അറ്റാച്ചുചെയ്യുക"
+ "വീഡിയോ റെക്കോർഡുചെയ്യൽ നിർത്തുക"
+ "സന്ദേശമയയ്ക്കൽ ഫോട്ടോകൾ"
+
+ %d ഫോട്ടോകൾ \"%s\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു
+ %d ഫോട്ടോ \"%s\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു
+
+
+ %d വീഡിയോകൾ \"%s\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു
+ %d വീഡിയോ \"%s\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു
+
+
+ %d അറ്റാച്ചുമെന്റുകൾ \"%s\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു
+ %d അറ്റാച്ച്മെന്റ് \"%s\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു
+
+
+ %d അറ്റാച്ചുമെന്റുകൾ \"ഡൗൺലോഡുകളി\"ലേക്ക് സംരക്ഷിച്ചു
+ %d അറ്റാച്ചുമെന്റ് \"ഡൗൺലോഡുകളി\"ലേക്ക് സംരക്ഷിച്ചു
+
+
+ %d അറ്റാച്ച്മെന്റുകൾ സംരക്ഷിച്ചു
+ %d അറ്റാച്ച്മെന്റ് സംരക്ഷിച്ചു
+
+
+ %dഅറ്റാച്ച്മെന്റുകൾ സംരക്ഷിക്കാനായില്ല
+ %d അറ്റാച്ച്മെന്റ് സംരക്ഷിക്കാനായില്ല
+
+ "MMS അറ്റാച്ചുമെന്റ് സംരക്ഷിച്ചു"
+ "ക്രമീകരണങ്ങൾ"
+ "ആർക്കൈവുചെയ്തവ"
+ "അടയ്ക്കുക"
+ "MMS"
+ "വിപുലം"
+ "ഡീബഗ്"
+ "അറിയിപ്പുകൾ"
+ "ശബ്ദം"
+ "നിശബ്ദം"
+ "വൈബ്രേറ്റുചെയ്യുക"
+ "തടഞ്ഞിരിക്കുന്നു"
+ "SMS ഡെലിവറി റിപ്പോർട്ടുകൾ"
+ "അയയ്ക്കുന്ന ഓരോ SMS-നും ഒരു ഡെലിവറി റിപ്പോർട്ട് അഭ്യർത്ഥിക്കുക"
+ "സ്വയമേവ വീണ്ടെടുക്കുക"
+ "MMS സന്ദേശങ്ങൾ സ്വയമേവ ലഭ്യമാക്കുക"
+ "റോമിംഗിൽ ലഭ്യമാക്കുക"
+ "റോമിംഗിലായിരിക്കുമ്പോൾ സ്വയമേ MMS വീണ്ടെടുക്കുന്നു"
+ "ഗ്രൂപ്പ് സന്ദേശമയയ്ക്കൽ"
+ "ഒന്നിലധികം സ്വീകർത്താക്കൾ ഉള്ളപ്പോൾ ഒരൊറ്റ സന്ദേശം അയയ്ക്കാൻ MMS ഉപയോഗിക്കുക."
+ "സ്ഥിര SMS അപ്ലിക്കേഷൻ"
+ "സ്ഥിര SMS അപ്ലിക്കേഷൻ"
+
+
+ "നിങ്ങളുടെ ഫോൺ നമ്പർ"
+ "അജ്ഞാതം"
+ "ഔട്ട്ഗോയിംഗ് സന്ദേശ ശബ്ദങ്ങൾ"
+ "SMS നൽകുക"
+ "ബാഹ്യ സംഭരണ ഫയലിലേക്ക് സ്വീകരിച്ച SMS റോ ഡാറ്റ നൽകുക"
+ "MMS നൽകുക"
+ "ബാഹ്യ സംഭരണ ഫയലിലേക്ക് സ്വീകരിച്ച MMS റോ ഡാറ്റ നൽകുക"
+ "വയർലെസ് അലേർട്ടുകൾ"
+ "സന്ദേശ ഓപ്ഷനുകൾ"
+ "ടെക്സ്റ്റ് പകർത്തുക"
+ "വിശദാംശങ്ങൾ കാണുക"
+ "ഇല്ലാതാക്കുക"
+ "കൈമാറുക"
+ "സന്ദേശ വിശദാംശങ്ങൾ"
+ "തരം: "
+ "ടെക്സ്റ്റ് സന്ദേശം"
+ "മൾട്ടിമീഡിയ സന്ദേശം"
+ "അയച്ചയാൾ: "
+ "സ്വീകർത്താവ്: "
+ "അയച്ചത്: "
+ "ലഭിച്ചവ: "
+ "വിഷയം: "
+ "വലുപ്പം: "
+ "പ്രധാനപ്പെട്ടവ: "
+ "SIM: "
+ "ഉയർന്നത്"
+ "സാധാരണ"
+ "കുറഞ്ഞവ"
+ "SIM %s"
+ "അയച്ചയാളിന്റെ വിലാസം മറച്ചിരിക്കുന്നു"
+ "അറ്റാച്ചുമെന്റുകൾ ലോഡുചെയ്യുന്ന സമയത്ത് സന്ദേശം അയയ്ക്കാനാവില്ല."
+ "അറ്റാച്ചുമെന്റ് ലോഡുചെയ്യാനാവില്ല. വീണ്ടും ശ്രമിക്കുക."
+ "നെറ്റ്വർക്ക് തയ്യാറായില്ല. വീണ്ടും ശ്രമിക്കുക."
+ "ടെക്സ്റ്റ് ഇല്ലാതാക്കുക"
+ "ടെക്സ്റ്റും നമ്പറുകളും നൽകുന്നതിനിടയിൽ മാറുക"
+ "കൂടുതൽ പങ്കാളികളെ ചേർക്കുക"
+ "പങ്കെടുക്കുന്നവരെ സ്ഥിരീകരിക്കുക"
+ "പുതിയ സംഭാഷണം ആരംഭിക്കുക"
+ "ഈ ഇനം തിരഞ്ഞെടുക്കുക"
+ "വീഡിയോ പ്ലേചെയ്യുക"
+ "ആളുകളും ഓപ്ഷനുകളും"
+ "ഡീബഗ്"
+ "ആളുകളും ഓപ്ഷനുകളും"
+ "പൊതുവായത്"
+ "ഈ സംഭാഷണത്തിലെ ആളുകൾ"
+ "ഒരു കോൾ ചെയ്യുക"
+ "സന്ദേശം അയയ്ക്കുക"
+ "<br/><small>%s -ൽ നിന്ന്</small> സന്ദേശമയയ്ക്കുക"
+
+ ഫോട്ടോകൾ അയയ്ക്കുക
+ ഫോട്ടോ അയയ്ക്കുക
+
+
+ ഓഡിയോകൾ അയയ്ക്കുക
+ ഓഡിയോ അയയ്ക്കുക
+
+
+ വീഡിയോകൾ അയയ്ക്കുക
+ വീഡിയോ അയയ്ക്കുക
+
+
+ കോൺടാക്റ്റ് കാർഡുകൾ അയയ്ക്കുക
+ കോൺടാക്റ്റ് കാർഡ് അയയ്ക്കുക
+
+
+ അറ്റാച്ച്മെന്റുകൾ അയയ്ക്കുക
+ അറ്റാച്ച്മെന്റ് അയയ്ക്കുക
+
+
+ %d അറ്റാച്ച്മെന്റുകൾ അയയ്ക്കാൻ തയ്യാറാണ്
+ ഒരു അറ്റാച്ച്മെന്റ് അയയ്ക്കാൻ തയ്യാറാണ്
+
+ "ഫീഡ്ബാക്ക് അയയ്ക്കുക"
+ "Google Play Store-ൽ കാണുക"
+ "പതിപ്പ് വിവരം"
+ "പതിപ്പ് %1$s"
+ "ഓപ്പൺ സോഴ്സ് ലൈസൻസുകൾ"
+ "അറിയിപ്പുകൾ"
+ "അറ്റാച്ചുമെന്റ് പരിധിയെത്തി"
+ "അറ്റാച്ചുമെന്റ് ലോഡുചെയ്യുന്നത് പരാജയപ്പെട്ടു."
+ "കോൺടാക്റ്റിലേക്ക് ചേർക്കണോ?"
+ "കോൺടാക്റ്റ് ചേർക്കുക"
+ "വിഷയം"
+ "വിഷയം: "
+ "%s%s"
+ "കോൺടാക്റ്റ് കാർഡ് ലോഡുചെയ്യുന്നു"
+ "കോൺടാക്റ്റ് കാർഡ് ലോഡുചെയ്യാനായില്ല"
+ "കോൺടാക്റ്റ് കാർഡ് കാണുക"
+
+ %d കോൺടാക്റ്റുകൾ
+ %d കോൺടാക്റ്റ്
+
+ "കോൺടാക്റ്റ് കാർഡുകൾ"
+ "ജന്മദിനം"
+ "കുറിപ്പുകള്"
+ "സന്ദേശം കൈമാറൽ"
+ "മറുപടി നൽകുക"
+ "+1 ചെയ്യുക"
+ "+%d"
+ "SMS പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു"
+ "അയയ്ക്കുന്നതിന്, സ്ഥിര SMS ആപ്പ് ആയി സന്ദേശമയയ്ക്കൽ സജ്ജമാക്കുക"
+ "സ്ഥിര SMS ആപ്പ് ആയി സന്ദേശമയയ്ക്കൽ സജ്ജമാക്കുക"
+ "മാറ്റുക"
+ "സന്ദേശങ്ങൾ സ്വീകരിക്കുന്നതിന്, സ്ഥിര SMS ആപ്പ് ആയി സന്ദേശമയയ്ക്കൽ സജ്ജമാക്കുക"
+ "SMS സന്ദേശങ്ങൾ അയയ്ക്കാൻ പ്രസ്താവിത SIM ഒന്നും തിരഞ്ഞെടുത്തിട്ടില്ല"
+ "ഉപകരണത്തിന്റെ ഉടമ ഈ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നില്ല."
+ "ശരി"
+ "ഒരു സംഭാഷണത്തിൽ നിരവധി പേർ പങ്കെടുക്കുന്നു"
+
+ അസാധുവായ കോൺടാക്റ്റുകൾ
+ അസാധുവായ കോൺടാക്റ്റ്
+
+ "ക്യാമറ ചിത്രം ലോഡുചെയ്യാനായില്ല"
+ "നിങ്ങൾ: "
+ "%s: "
+ "ഡ്രാഫ്റ്റ്"
+ "ഒരു പുതിയ സംഭാഷണം ആരംഭിക്കുമ്പോൾ, ഇത് ഇവിടെ ലിസ്റ്റുചെയ്തിരിക്കുന്നത് നിങ്ങൾ കാണും"
+ "ആർക്കൈവുചെയ്ത സംഭാഷണങ്ങൾ ഇവിടെ ദൃശ്യമാകും"
+ "സംഭാഷണങ്ങൾ ലോഡുചെയ്യുന്നു…"
+ "ചിത്രം"
+ "ഓഡിയോ ക്ലിപ്പ്"
+ "വീഡിയോ"
+ "കോൺടാക്റ്റ് കാർഡ്"
+ "MMS"
+ "പഴയപടിയാക്കുക"
+ "വീണ്ടും ശ്രമിക്കുക"
+ "ഒരു പുതിയ സന്ദേശം ആരംഭിക്കാൻ കോൺടാക്റ്റ് പേരോ ഫോൺ നമ്പറോ നൽകുക"
+ "തടയുക"
+ "%s എന്നയാളെ തടയുക"
+ "%s എന്നയാളെ തടഞ്ഞത് മാറ്റുക"
+ "%s തടയണോ?"
+ "ഈ നമ്പറിൽ നിന്ന് സന്ദേശങ്ങൾ തുടർന്നും ലഭിക്കുമെങ്കിലും ഇനി അറിയിപ്പൊന്നും ലഭിക്കില്ല. ഈ സംഭാഷണം ആർക്കൈവുചെയ്യും."
+ "തടഞ്ഞ കോൺടാക്റ്റുകൾ"
+ "തടഞ്ഞത് മാറ്റുക"
+ "തടഞ്ഞ കോൺടാക്റ്റുകൾ"
+ "പ്രമാണ ലൈബ്രറിയിൽ നിന്ന് ചിത്രം തിരഞ്ഞെടുക്കുക"
+ "സന്ദേശം അയക്കുന്നു"
+ "സന്ദേശം അയച്ചു"
+ "സെല്ലുലാർ ഡാറ്റ ഓഫാക്കിയിരിക്കുന്നു. നിങ്ങളുടെ ക്രമീകരണങ്ങൾ പരിശോധിക്കുക."
+ "വിമാന മോഡിൽ സന്ദേശങ്ങൾ അയയ്ക്കാനാവില്ല"
+ "സന്ദേശം അയയ്ക്കാനായില്ല"
+ "സന്ദേശം ഡൗൺലോഡുചെയ്തു"
+ "സെല്ലുലാർ ഡാറ്റ ഓഫാണ്. നിങ്ങളുടെ ക്രമീകരണം പരിശോധിക്കുക."
+ "വിമാന മോഡിൽ സന്ദേശങ്ങൾ ഡൗൺലോഡുചെയ്യാനാവില്ല"
+ "സന്ദേശം ഡൗൺലോഡുചെയ്യാനായില്ല"
+ "പൂജ്യം"
+ "ഒന്ന്"
+ "രണ്ട്"
+ "മൂന്ന്"
+ "നാല്"
+ "അഞ്ച്"
+ "ആറ്"
+ "ഏഴ്"
+ "എട്ട്"
+ "ഒൻപത്"
+ "%1$s എന്നതിലൂടെ സന്ദേശമയയ്ക്കാനായില്ല, പിശക് %2$d"
+ "അജ്ഞാത കാരിയറിലൂടെ സന്ദേശമയയ്ക്കാനായില്ല, പിശക് %1$d"
+ "കൈമാറിയത്: %s"
+ "സന്ദേശം അയച്ചില്ല: നെറ്റ്വർക്കിൽ സേവനം സജീവമാക്കിയിട്ടില്ല"
+ "സന്ദേശം അയച്ചില്ല: ലക്ഷ്യസ്ഥാന വിലാസം അസാധുവാണ്"
+ "സന്ദേശം അയച്ചില്ല: സന്ദേശം അസാധുവാണ്"
+ "സന്ദേശം അയച്ചില്ല: ഉള്ളടക്കം പിന്തുണയ്ക്കാത്തതാണ്"
+ "സന്ദേശം അയച്ചില്ല: സന്ദേശം പിന്തുണയ്ക്കാത്തതാണ്"
+ "സന്ദേശം അയച്ചില്ല: വളരെ വലുതാണ്"
+ "പുതിയ സന്ദേശം"
+ "കാണുക"
+ "ചിത്രം"
+ "അനുയോജ്യമായൊരു അപ്ലിക്കേഷൻ കണ്ടെത്താനായില്ല"
+ "സ്വീകർത്താവിനെ നീക്കംചെയ്യുക"
+ "പുതിയ സന്ദേശം"
+ "റദ്ദാക്കുക"
+ "ആക്സസ്സ്പോയിന്റ് എഡിറ്റുചെയ്യൂ"
+ "സജ്ജീകരിച്ചിട്ടില്ല"
+ "പേര്"
+ "APN"
+ "MMSC"
+ "MMS പ്രോക്സി"
+ "MMS പോർട്ട്"
+ "MCC"
+ "MNC"
+ "APN തരം"
+ "APN ഇല്ലാതാക്കുക"
+ "പുതിയ APN"
+ "സംരക്ഷിക്കുക"
+ "നിരസിക്കുക"
+ "പേരിന്റെ ഫീൽഡ് ശൂന്യമായിരിക്കരുത്."
+ "APN ശൂന്യമായിരിക്കരുത്."
+ "MCC ഫീൽഡിൽ 3 സംഖ്യകൾ ഉണ്ടായിരിക്കണം."
+ "MNC ഫീൽഡിൽ 2 അല്ലെങ്കിൽ 3 സംഖ്യകൾ ഉണ്ടായിരിക്കണം."
+ "സ്ഥിര APN ക്രമീകരണങ്ങൾ പുനഃസ്ഥാപിക്കുന്നു"
+ "സ്ഥിരമായതിലേക്ക് പുനഃസജ്ജമാക്കുക"
+ "സ്ഥിര APN ക്രമീകരണങ്ങൾ പുനഃസജ്ജീകരിക്കൽ പൂർത്തിയാക്കി."
+ "പേരില്ലാത്തത്"
+ "ആക്സസ്സ് പോയിന്റ് പേരുകൾ"
+ "APN-കൾ"
+ "പുതിയ APN"
+ "ആക്സസ്സ് പോയിന്റ് നെയിം ക്രമീകരണങ്ങൾ ഈ ഉപയോക്താവിനായി ലഭ്യമല്ല"
+ "ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തണോ?"
+ "പകര്ത്തുക"
+ "%s എന്നതിലേക്ക്"
+ "പൊതുവായത്"
+ "വിപുലമായത്"
+ "പൊതു ക്രമീകരണങ്ങൾ"
+ "വിപുലമായ ക്രമീകരണങ്ങൾ"
+ "\"%s\" SIM"
+ "എല്ലാ സ്വീകർത്താക്കൾക്കും വെവ്വേറെ SMS സന്ദേശങ്ങൾ അയയ്ക്കുക. മറുപടികളെല്ലാം നിങ്ങൾക്കുമാത്രമേ ലഭിക്കൂ"
+ "എല്ലാ സ്വീകർത്താക്കൾക്കും ഒരൊറ്റ MMS അയയ്ക്കുക"
+ "അജ്ഞാത നമ്പര്"
+ "പുതിയ സന്ദേശം"
+ "പുതിയ സന്ദേശം."
+ "SIM സെലക്ടർ"
+ "%1$s തിരഞ്ഞെടുത്തു, SIM സെലക്ടർ"
+ "വിഷയം എഡിറ്റുചെയ്യുക"
+ "SIM തിരഞ്ഞെടുക്കുക അല്ലെങ്കിൽ വിഷയം എഡിറ്റുചെയ്യുക"
+ "ഓഡിയോ റെക്കോർഡുചെയ്യാൻ സ്പർശിച്ച് പിടിക്കുക"
+ "പുതിയ സംഭാഷണം ആരംഭിക്കുക"
+ "സന്ദേശമയയ്ക്കൽ"
+ "സന്ദേശമയയ്ക്കൽ ലിസ്റ്റ്"
+ "സന്ദേശമയയ്ക്കൽ"
+ "പുതിയ സന്ദേശം"
+ "സംഭാഷണ ലിസ്റ്റ്"
+ "സംഭാഷണങ്ങൾ ലോഡുചെയ്യുന്നു"
+ "സന്ദേശങ്ങൾ ലോഡുചെയ്യുന്നു"
+ "കൂടുതൽ സംഭാഷണങ്ങൾ കാണുക"
+ "കൂടുതൽ സന്ദേശങ്ങൾ കാണുക"
+ "സംഭാഷണം ഇല്ലാതാക്കി"
+ "സംഭാഷണം ഇല്ലാതാക്കി. മറ്റൊരു സന്ദേശമയയ്ക്കൽ സംഭാഷണം കാണിക്കുന്നതിന് സ്പർശിക്കുക"
+ "തടഞ്ഞു"
+ "തടഞ്ഞത് മാറ്റി"
+ "സംഭരണത്തിനുള്ള ഇടം കുറവാണ്. ചില വിവരം നഷ്ടപ്പെട്ടേക്കാം."
+ "അറ്റാച്ചുമെന്റുകൾ തിരഞ്ഞെടുക്കുക"
+ "തിരഞ്ഞെടുത്തവ സ്ഥിരീകരിക്കുക"
+ "%d എണ്ണം തിരഞ്ഞെടുത്തു"
+ "ഒന്നോ അതിൽ കൂടുതലോ അറ്റാച്ചുമെന്റുകൾ നീക്കംചെയ്തുകൊണ്ട് വീണ്ടും ശ്രമിക്കുക."
+ "നിങ്ങളുടെ സന്ദേശം അയയ്ക്കാൻ ശ്രമിക്കാമെങ്കിലും ഒന്നോ അതിലധികമോ അറ്റാച്ചുമെന്റുകൾ നീക്കംചെയ്യാതെ അത് ഡെലിവർ ചെയ്തേക്കില്ല."
+ "നിങ്ങൾക്ക് ഒരു സന്ദേശത്തിന് ഒരു വീഡിയോ മാത്രമേ അയയ്ക്കാനാകൂ. കൂടുതൽ വീഡിയോകൾ നീക്കംചെയ്ത് വീണ്ടും ശ്രമിക്കുക."
+ "അറ്റാച്ച്മെന്റ് ലോഡുചെയ്യുന്നതിൽ സന്ദേശമയയ്ക്കൽ പരാജയപ്പെട്ടു."
+ "ഏതുവിധേനയും അയയ്ക്കുക"
+ "സംഭാഷണം ആരംഭിക്കാനായില്ല"
+ "%1$s (%2$s)"
+ "തിരഞ്ഞെടുത്തത്, %s"
+
diff --git a/res/values-mn-rMN/arrays.xml b/res/values-mn-rMN/arrays.xml
new file mode 100644
index 0000000..b47063a
--- /dev/null
+++ b/res/values-mn-rMN/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "гарчиггүй"
+ "nosubject"
+
+
+ "Тийм"
+ "Үгүй"
+ "Тийм"
+ "Хэхэ"
+ "Баярлалаа"
+ "Би зөвшөөрч байна"
+ "Янзтай"
+ "Очиж байна"
+ "За, би эргээд холбоо баръя"
+ ":)"
+ ":("
+
+
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..fb9106b
--- /dev/null
+++ b/res/values-mn-rMN/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Зурвас"
+ "Зурвас"
+ "Харилцааг сонгох"
+ "Тохиргоо"
+ "Зурвас Илгээх"
+ "Хавсралт нэмэх"
+ "Тусламж"
+ "Тавтай морилно уу"
+ "Алгасах"
+ "Дараах >"
+ "Дараах"
+ "Гарах"
+ "Тохиргоо >"
+ "Тохиргоо"
+ "Messaging-д SMS, Утас, Харилцагч хаягийн зөвшөөрөл шаардлагатай."
+ "Та зөвшөөрлийг Тохиргоо > Aпп > Зурвас > Зөвшөөрөл хэсэгт өөрчилж болно."
+ "Та зөвшөөрлийг Тохиргоо, Апп, Messaging, Зөвшөөрөл хэсэгт өөрчилж болно."
+ "БАЙНГЫН ХАРИЛЦАГЧ"
+ "Бүх харилцагч"
+ "%s руу илгээх"
+ "Зураг буюу видео авах"
+ "Энэ төхөөрөмжөөс зураг сонгоно уу"
+ "Аудио бичих"
+ "Зураг сонгох"
+ "Медиаг сонгосон байна."
+ "Медиаг сонгоогүй байна."
+ "%d сонгогдсон"
+ "зураг %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "зураг"
+ "Аудио бичих"
+ "Хуваалцах"
+ "Дөнгөж сая"
+ "Одоо"
+
+ %d минут
+ %d минут
+
+
+ %d цаг
+ %d цаг
+
+
+ %d өдөр
+ %d өдөр
+
+
+ %d долоо хоног
+ долоо хоног
+
+
+ %d сар
+ нэг сар
+
+
+ %d жил
+ нэг жил
+
+ "Ангилал 0 зурвас"
+ "Хадгалах"
+ "Төхөөрөмжийн багтаамж бага байна. Messaging нь багтаамж үүсгэхийн тулд хуучин зурвасыг автоматаар устгана."
+ "Сангийн хэмжээ дутагдаж байна"
+ "Мessaging нь таны төхөөрөмжид хангалттай багтаамж гарах хүртэл зурвас илгээх эсвэл хүлээн авах боломжгүй."
+ "SMS сан бага байна. Та зурвасуудаас устгах шаардлагатай бололтой."
+ "Утасны дугаараа баталгаажуулна уу"
+ "Нэг удаагийн алхам нь Messaging-г таны бүлэг зурвасыг асуудалгүйгээр илгээнэ."
+ "Утасны дугаар"
+ "Медиатай бүх зурвасуудыг устгах"
+ "%s-с өмнөх зурвасуудыг устгах"
+ "%s-с өмнөх зурвасуудыг автоматаар устгах"
+ "Үл тоох"
+ "Медиа бүхий бүх зурвасыг устгах уу?"
+ "%s-с өмнөх зурвасуудыг устгах уу?"
+ "%s-с өмнөх зурвасуудыг устгаж, автомат устгалтыг асаах уу?"
+ "%s гэж хэлсэн"
+ "Та хэлсэн байна"
+ "%s-ээс ирсэн мессеж"
+ "Та мессеж илгээсэн байна"
+ "Илгээж байна ..."
+ "Илгээгээгүй. Дахин оролдохын тулд хүрнэ үү."
+ "Илгээгээгүй. Дахин оролдож байна…"
+ "Дахин илгээх буюу устгах"
+ "Яаралтай түргэн тусламж руу залгана уу. Таны мессежийг яг одоо явуулах боломжгүй байна."
+ "Амжилтгүй"
+ "Татаж авах шинэ MMS мессеж"
+ "Шинэ MMS мессеж"
+ "Татан авч чадсангүй"
+ "Дахин оролдохын тулд хүрнэ үү"
+ "Татаж авахын тулд хүрнэ үү"
+ "Татаж авах буюу устгах"
+ "Татаж авч байна..."
+ "Зурвасын хугацаа өнгөрсөн буюу байхгүй"
+ "хэмжээ: %1$s, хугацаа дуусах: %2$s"
+ "Илгээх боломжгүй. Хүлээн авагч буруу."
+ "Сүлжээнд үйлчилгээг идэвхжүүлээгүй байна."
+ "Сүлжээний асуудлаас шалтгаалан илгээж чадсангүй."
+ "Зурвасын хугацаа өнгөрсөн буюу байхгүй"
+ "(Гарчиггүй)"
+ "Тодорхойгүй илгээгч"
+ "Хүргэгдсэн"
+ "%2$s-с %1$s зурвасыг татаж чадсангүй."
+ "Санах ой бага байгаагаас шалтгаалан датабаазын үйлдлийг гүйцээж чадсангүй"
+ "Зурвас илгээгдээгүй"
+ "Messaging-н зарим зурвасыг илгээгээгүй"
+
+ %d Харилцан ярианд %d зурвас байна
+ Нэг харилцан ярианд %d зурвас байна
+
+ "зурвасыг татаж болсонгүй"
+ "Зарим зурвасыг Messaging-д татаагүй"
+
+ %d Харилцан ярианд %d зурвас байна
+ Нэг харилцан ярианд %d зурвас байна
+
+ "%1$s явуулсан мессеж амжилтгүй болсон байна"
+ "Яаралтай түргэн тусламж руу залгана уу. Таны мессежийг %1$s дугаарт яг одоо явуулах боломжгүй байна. "
+
+ %d шинэ зурвас
+ Шинэ зурвас
+
+ "Эхлэх"
+ "Камер ашиглах боломжгүй"
+ "Камер ашиглах боломжгүй"
+ "Видео бичих боломжгүй"
+ "Медиаг хадгалах боломжгүй"
+ "Зураг авч болохгүй байна"
+ "Буцах"
+ "Архивлагдсан"
+ "Устгах"
+ "Архивлах"
+ "Архиваас гаргах"
+ "Мэдэгдэл унтраах"
+ "Мэдэгдлүүдийг асаах"
+ "Харилцагч нэмэх"
+ "Татаж авах"
+ "Илгээх"
+ "Устгах"
+ "Энэ зурвасыг устгах уу?"
+ "Энэ үйлдлийг буцаах боломжгүй."
+ "Устгах"
+
+ Эдгээр харилцан яриаг устгах уу?
+ Энэ харилцан яриаг устах уу?
+
+ "Устгах"
+ "Цуцлах"
+ "Хэнд"
+ "Олон зураг сонгох"
+ "Сонголтыг баталгаажуулах"
+ "+%d"
+ "Аудиог бичих боломжгүй. Дахин оролдоно уу."
+ "Аудиог тоглуулах боломжгүй. Дахин оролдоно уу."
+ "Аудиог хадгалж чадсангүй. Дахин оролдоно уу."
+ "Хүрээд & барих"
+ ", "
+ " "
+ ": "
+ " "
+ "Зураг"
+ "Аудио клип"
+ "Видео"
+ "Харилцагчийн карт"
+ "Татаж авах"
+ "SMS-р хариулах"
+ "MMS-ээр хариулах"
+ "Хариулах"
+
+ %d оролцогч
+ %d оролцогч
+
+ "Би"
+ "Харилцагчийг хориглож & архивласан"
+ "Харилцаа холбоог хориглоогүй & архивлагдаагүй"
+ "%d aрхивлагдсан"
+ "%d архивлагдаагүй"
+ "Мэдэгдлүүдийг унтраасан"
+ "Мэдэгдлүүдийг асаасан"
+ "Бүгдийг нь тохируулсан. Илгээх-д дахин хүрнэ үү."
+ "Мessaging-г SMS-н үндсэн апп-аар амжилттай тохирууллаа."
+
+ Хавсралтыг цуцлах
+ Хавсралтыг цуцлах
+
+ "Аудио хавсралт"
+ "Аудио хавсралтыг тоглуулах"
+ "Түр зогсоох"
+ "%s: %s-аас ирсэн зурвас."
+ "%s-с илгээсэн амжилтгүй болсон мессеж: %s. Цаг: %s."
+ "%s-с илгээсэн мессеж: %s. Цаг: %s."
+ "%s-д илгээгээгүй байгаа мессеж: %s. Цаг: %s."
+ "%s-д мессеж илгээж байна: %s. Цаг: %s."
+ "%s-д илгээсэн амжилтгүй болсон мессеж: %s. Цаг: %s."
+ "%s-д мессеж илгээх: %s. Цаг: %s."
+ "%s-с илгээсэн амжилтгүй болсон мессеж: %s. Цаг: %s. %s"
+ "%s-с илгээсэн мессеж: %s. Цаг: %s. %s."
+ "%s-т зориулсан илгээгээгүй байгаа мессеж: %s. Цаг: %s."
+ "%s-т мессеж илгээж байна: %s. Цаг: %s."
+ "%s-т зориулсан амжилтгүй болсон мессеж: %s. Цаг: %s."
+ "%s-т илгээх мессеж: %s. Цаг: %s."
+ "Амжилтгүй болсон мессеж. Дахин оролдоно уу."
+ "%s нартай холбоо тогтоох"
+ "Гарчгийг устгах"
+ "Видео авах"
+ "Хөдөлгөөнгүй зураг авах"
+ "Зураг авах"
+ "Видео бичлэг хийж эхлэх"
+ "Бүтэн дэлгэцийн камер руу сэлгэх"
+ "Урд болон хойд камер хооронд сэлгэх"
+ "Бичлэгийг зогсоож видеог хавсаргах"
+ "Видео бичилтийг зогсоох"
+ "Messaging-н зураг"
+
+ %d зургийг \"%s\" цомогт хадгаллаа
+ %d зургийг \"%s\" цомогт хадгаллаа
+
+
+ %d бичлэгийг \"%s\" цомогт хадгаллаа
+ %d бичлэгийг \"%s\" цомогт хадгаллаа
+
+
+ %d хавсралтыг \"%s\" цомогт хадгаллаа
+ %d хавсралтыг \"%s\" цомогт хадгаллаа
+
+
+ %d хавсралтыг \"Татаж авсан файл\"-д хадгаллаа
+ %d хавсралтыг \"Татаж aвсан файл\"-д хадгаллаа
+
+
+ %d хавсралт хадгалсан
+ %d хавсралт хадгалсан
+
+
+ %d хавсралтыг хадгалж чадсангүй
+ %d хавсралтыг хадгалж чадсангүй
+
+ "MMS хавсралтыг хадгалсан"
+ "Тохиргоо"
+ "Архивлагдсан"
+ "Хаах"
+ "MMS"
+ "Дэлгэрэнгүй"
+ "Дебаг"
+ "Мэдэгдэл"
+ "Дуу"
+ "Чимээгүй"
+ "Чичиргээ"
+ "Хориглогдсон"
+ "SMS хүргэлтийн репорт"
+ "Өөрийн илгээх SMS бүрт хүргэлтийн репорт хүснэ үү"
+ "Автомат-татагч"
+ "MMS зурвасуудыг автоматаар татах"
+ "Роумингын автомат-татагч"
+ "Роуминг ашиглаж байх үедээ MMS-ийг автоматаар сэргээж авч байх"
+ "Бүлгэмийн зурвас"
+ "Олон хүлээн авагчид нэг зурвас явуулахдаа MMS ашиглаарай"
+ "Үндсэн SMS програм"
+ "Үндсэн SMS програм"
+
+
+ "Таны утасны дугаар"
+ "Тодорхойгүй"
+ "Мессеж илгээх үеийн ая"
+ "SMS хадгалах"
+ "Хүлээн авсан SMS түүхий датаг гадаад сангийн файлд хадгалах"
+ "MMS хадгалах"
+ "Dump Хүлээн авсан MMS түүхий датаг гадаад сангийн файлд хадгалах"
+ "Утасгүй сэрэмжлүүлэг"
+ "Зурвасын тохиргоо"
+ "Текстийг хуулах"
+ "Дэлгэрэнгүй үзэх"
+ "Устгах"
+ "Дамжуулах"
+ "Зурвасын мэдээлэл"
+ "Төрөл: "
+ "Текст зурвас"
+ "Мультимедиа зурвас"
+ "Хэнээс: "
+ "Хэнд: "
+ "Илгээсэн: "
+ "Хүлээн авсан: "
+ "Гарчиг: "
+ "Хэмжээ: "
+ "Ач холбогдол: "
+ "SIM: "
+ "Өндөр"
+ "Энгийн"
+ "Бага"
+ "SIM %s"
+ "Илгээгчийн хаяг нууцлагдсан"
+ "Хавсралтуудыг ачаалах үед зурвас илгээх боломжгүй."
+ "Хавсралтыг ачаалж чадсангүй. Дахин оролдоно уу."
+ "Сүлжээ бэлэн биш байна. Дахин оролдоно уу."
+ "Текстийг устгах"
+ "Текст болон тоо оруулах хооронд сэлгэх"
+ "Өөр оролцогчид нэмэх"
+ "Оролцогчдыг баталгаажуулах"
+ "Шинээр харилцан яриа үүсгэж байна"
+ "Энэ зүйлийг сонгох"
+ "Видео тоглуулах"
+ "Хүмүүс & тохируулга"
+ "Дебаг"
+ "Хүмүүс & тохируулга"
+ "Ерөнхий"
+ "Энэ харилцаан доторх хүмүүс"
+ "Дуудлага хийх"
+ "Зурвас илгээх"
+ "Зурвас илгээх<br/><small>%s-с</small>"
+
+ Зураг илгээх
+ Зураг илгээх
+
+
+ Аудио илгээх
+ Аудио илгээх
+
+
+ Видео илгээх
+ Видео илгээх
+
+
+ Харилцагчийн карт илгээх
+ Харилцагчийн карт илгээх
+
+
+ Хавсралт илгээх
+ Хавсралт илгээх
+
+
+ Илгээхэд бэлэн %d хавсралт байна
+ Илгээхэд бэлэн нэг хавсралт байна
+
+ "Санал хүсэлт илгээх"
+ "Google Play дэлгүүр дээр харах"
+ "Хувилбарын мэдээлэл"
+ "Хувилбар %1$s"
+ "Нээлттэй эхийн лиценз"
+ "Мэдэгдэл"
+ "Хавсралтын дээд хэмжээнд хүрсэн байна"
+ "Хавсралтыг татаж авах үйлдэл амжилтгүй болсон байна."
+ "Харилцагчидад нэмэх үү?"
+ "Харилцагч нэмэх"
+ "Гарчиг"
+ "Гарчиг: "
+ "%s%s"
+ "Харилцагчийн картыг ачаалж байна"
+ "Харилцагчийн картыг дуудаж чадсангүй"
+ "Харилцагчийн картыг харах"
+
+ %d харилцагч
+ %d харилцагч
+
+ "Харилцагчийн картууд"
+ "Төрсөн өдөр"
+ "Тэмдэглэл"
+ "Зурвасыг дамжуулах"
+ "Хариулах"
+ "+1"
+ "+%d"
+ "SMS идэвхгүй"
+ "Илгээхийн тулд Messaging-г үндсэн SMS апп болго"
+ "Messaging-г үндсэн SMS апп болгох"
+ "Солих"
+ "Зурвас хүлээн авахын тулд Messaging-г үндсэн SMS апп-аар тохируулаарай"
+ "SMS зурвас илгээхээр сонгосон ямар ч SIM алга байна"
+ "Энэ апп-г төхөөрөмжийн эзэмшигч зөвшөөрөөгүй."
+ "ТИЙМ"
+ "Харилцаанд хэт олон оролцогч байна"
+
+ Харилцагчийн хаяг буруу байна
+ Харилцагчийн хаяг буруу байна
+
+ "Камерийн дүрсийг дуудаж чадсангүй"
+ "Та: "
+ "%s: "
+ "Ноорог"
+ "Шинэ харилцаа эхлүүлмэгц энэ жагсаалтад харагдах болно"
+ "Архивлагдсан харилцаанууд энд харагдана"
+ "Харилцааг ачаалж байна..."
+ "Зураг"
+ "Аудио клип"
+ "Видео"
+ "Харилцагчийн карт"
+ "MMS"
+ "Буцаах"
+ "Дахин оролдох"
+ "Шинэ зурвас эхлүүлэхийн тулд харилцагчийн нэр буюу утасны дугаар оруулна уу"
+ "Хориглох"
+ "%s-г хориглох"
+ "%s-н хориг авах"
+ "%s-г хориглох уу?"
+ "Та энэ дугаараас үргэлжлүүлэн зурвас хүлээн авах боловч мэдэгдэл авахгүй. Энэ харилцааг архивлах болно."
+ "Хориглогдсон харилцагчид"
+ "ХОРИГ АВАХ"
+ "Хориглогдсон харилцагчид"
+ "Документ сангаас зураг сонгох"
+ "Зурвасыг илгээж байна"
+ "Зурвас илгээгдсэн"
+ "Үүрэн дата унтарсан. Тохиргоог шалгана уу."
+ "Нислэгийн горимд зурвас илгээх боломжгүй"
+ "Зурвасыг илгээж чадсангүй."
+ "Зурвасыг татаж авсан"
+ "Гар утасны интернет холболт идэвхгүй байна. Тохиргоог дахин шалгана уу."
+ "Airplane mode дээр тавьсан байгаа тул мэдээллийг татаж авах боломжгүй байна"
+ "Мэдээллийг татаж авах боломжгүй байна"
+ "Тэг"
+ "Нэг"
+ "Хоёр"
+ "Гурав"
+ "Дөрөв"
+ "Тав"
+ "Зургаа"
+ "Долоо"
+ "Найм"
+ "Ес"
+ "%2$d алдаа бүхий %1$s мессежийг илгээх боломжгүй"
+ "Үл мэдэгдэх зөөвөрлөгчөөр ирсэн мессежийг илгээх боломжгүй, алдаа %1$d"
+ "Fwd: %s"
+ "Зурвас илгээгдээгүй: үйлчилгээ сүлжээн дээр идэвхжээгүй"
+ "Зурвас илгээгдээгүй: чиглэлийн хаяг буруу"
+ "Зурвас илгээгдээгүй: хүчингүй зурвас"
+ "Зурвас илгээгдээгүй: дэмжигдээгүй контент"
+ "Зурвас илгээгдээгүй: дэмжигдээгүй зурвас"
+ "Мессежийг илгээж болохгүй байна: хэтэрхий их хэмжээтэй байна"
+ "Шинэ зурвас"
+ "Харагдац"
+ "Зураг"
+ "Тохирох аппликешныг олж чадсангүй"
+ "Хүлээн авагчийг арилгах"
+ "Шинэ зурвас"
+ "Цуцлах"
+ "Хандалтын цэгийг засах"
+ "Тохируулаагүй"
+ "Нэр"
+ "APN"
+ "MMSC"
+ "MMS прокси"
+ "MMS порт"
+ "MCC"
+ "MNC"
+ "APN төрөл"
+ "APN устгах"
+ "Шинэ APN"
+ "Хадгалах"
+ "Устгах"
+ "Нэр оруулах талбар хоосон байж болохгүй."
+ "APN хоосон байж болохгүй."
+ "MCC талбар 3 цифртэй байх ёстой."
+ "MNC талбар 2 буюу 3 цифртэй байх ёстой."
+ "Үндсэн APN тохиргоог сэргээж байна"
+ "Үндсэн рүү сэргээх"
+ "Үндсэн APN тохиргоог дахин шинэчилж дууслаа."
+ "Гарчиггүй"
+ "Хандалтын Цэгийн Нэрс"
+ "APNs"
+ "Шинэ APN"
+ "Энэ хэрэглэгчийн хувьд Хандалтын цэгийн нэрийн тохиргоог ашиглах боломжгүй"
+ "Санах ойд хуулах уу?"
+ "Хуулах"
+ "%s руу"
+ "Ерөнхий"
+ "Дэлгэрэнгүй"
+ "Ерөнхий тохиргоо"
+ "Дэлгэрэнгүй тохиргоо"
+ "\" %s \"SIM"
+ "Бүх хүлээн авагч руу хувийн SMS мессеж илгээх. Зөвхөн та ямар ч хариу авахгүй"
+ "Бүх хүлээн авагч руу нэг MMS илгээх"
+ "Тодорхойгүй дугаар"
+ "Шинэ зурвас"
+ "Шинэ зурвас."
+ "SIM сонгогч"
+ "%1$s сонгосон, СИМ сонгогч"
+ "Гарчигийг засах"
+ "SIM-г сонгох эсвэл гарчигийг засах"
+ "Дуут бичлэг хийхийн тулд холбогдох хэсэгт даран түр хүлээнэ үү"
+ "Шинээр харилцан яриа үүсгэх"
+ "Messaging"
+ "Messaging-н жагсаалт"
+ "Messaging"
+ "Шинэ мэдээлэл"
+ "Харилцааны жагсаалт"
+ "Харилцан солилцсон мэдээллийг ачаалж байна"
+ "Зурвасуудыг дуудаж байна"
+ "Харилцан яриаг дэлгэрэнгүй харах"
+ "Илүү олон зурвасуудыг харах"
+ "Харилцаа холбоог устгасан байна"
+ "Харилцан яриа устсан. Messaging-н өөр харилцан яриа харуулахын тулд хүрнэ үү"
+ "Блоклосон байна"
+ "Блокыг арилгасан байна"
+ "Таны мэдээлэл хадгалах зай хангалтгүй байна. Зарим мэдээлэл алдагдах магадлалтай байна."
+ "Хавсралтыг сонгох"
+ "Сонголтыг баталгаажуулах"
+ "%d сонгосон"
+ "Нэг эсвэл түүнээс дээш тооны хавсралтыг арилгасны дараагаар дахин оролдоно уу."
+ "Та өөрийн мессежийг илгээх оролдлогыг хийж болох боловч нэг эсвэл түүнээс дээг тооны хавсралтыг арилгахаас нааш илгээгдэхгүй байх магадлалтай."
+ "Та нэг мессежээр нэг л видео илгээж болно. Нэмэлт видеонуудыг устгаад, дахин оролдоно уу."
+ "Messaging нь хавсралтыг ачаалж чадсангүй."
+ "Юутай ч илгээх"
+ "Харилцан яриаг эхэлж болохгүй байна"
+ "%1$s (%2$s)"
+ "%s сонгогдсон"
+
diff --git a/res/values-mr-rIN/arrays.xml b/res/values-mr-rIN/arrays.xml
new file mode 100644
index 0000000..73cd4c2
--- /dev/null
+++ b/res/values-mr-rIN/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "कोणताही विषय नाही"
+ "कोणताही विषय नाही"
+
+
+ "होय"
+ "नाही"
+ "ठीक आहे"
+ "हेहे"
+ "धन्यवाद"
+ "मी सहमत आहे"
+ "छान"
+ "मी वाटेत आहे"
+ "ठीक, नंतर मला आपल्याकडे परत येऊ द्या"
+ ":)"
+ ":("
+
+
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
new file mode 100644
index 0000000..418199c
--- /dev/null
+++ b/res/values-mr-rIN/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "संदेशन"
+ "संदेशन"
+ "संभाषण निवडा"
+ "सेटिंग्ज"
+ "संदेश पाठवा"
+ "एखादे संलग्नक जोडा"
+ "मदत"
+ "सुस्वागतम"
+ "वगळा"
+ "पुढील >"
+ "पुढील"
+ "बाहेर पडा"
+ "सेटिंग्ज >"
+ "सेटिंग्ज"
+ "संदेशनला SMS, फोन आणि संपर्कांसाठी परवानगी आवश्यक आहे."
+ "आपण सेटिंग्ज > अॅप्स > संदेशन > परवानग्या मध्ये परवानग्या बदलू शकता."
+ "आपण सेटिंग्ज, अॅप्स, संदेशन, परवानग्या मध्ये परवानग्या बदलू शकता."
+ "वारंवार"
+ "सर्व संपर्क"
+ "%s वर पाठवा"
+ "चित्रे किंवा व्हिडिओ कॅप्चर करा"
+ "या डिव्हाइसवरून प्रतिमा निवडा"
+ "ऑडिओ रेकॉर्ड करा"
+ "फोटो निवडा"
+ "मीडिया निवडण्यात आला आहे."
+ "मीडियाची निवड रद्द करण्यात आली आहे."
+ "%d निवडले"
+ "प्रतिमा %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "प्रतिमा"
+ "ऑडिओ रेकॉर्ड करा"
+ "सामायिक करा"
+ "आत्ताच"
+ "आत्ता"
+
+ %d मिनि
+ %d मिनिटे
+
+
+ %d तास
+ %d तास
+
+
+ %d दिवस
+ %d दिवस
+
+
+ %d आठवडा
+ %d आठवडे
+
+
+ %d महिना
+ %d महिने
+
+
+ %d वर्ष
+ %d वर्षे
+
+ "वर्ग 0 संदेश"
+ "जतन करा"
+ "डिव्हाइसवर स्थान कमी आहे. स्थान मोकळे करण्यासाठी संदेशन जुने संदेश स्वयंचलितपणे हटवेल."
+ "संचयन स्थान संपत आहे"
+ "आपल्या डिव्हाइसवर आणखी स्थान उपलब्ध होईपर्यंत संदेशन संदेश पाठवू किंवा प्राप्त करू शकत नाही."
+ "कमी SMS संचयन. आपल्याला संदेश हटविण्याची आवश्यकता असू शकते."
+ "आपल्या फोन नंबरची पुष्टी करा"
+ "हे एक-वेळ चरण संदेशन आपले गट संदेश योग्यरित्या वितरीत करेल हे सुनिश्चित करेल."
+ "फोन नंबर"
+ "मीडिया असलेले सर्व संदेश हटवा"
+ "%s पेक्षा अधिक जुने संदेश हटवा"
+ "%s पेक्षा जुने संदेश स्वयं हटवा"
+ "दुर्लक्ष करा"
+ "मीडिया असलेले सर्व संदेश हटवायचे?"
+ "%s पेक्षा जुने संदेश हटवायचे?"
+ "%s पेक्षा जुने संदेश हटवायचे आणि स्वयं-हटवा चालू करायचे?"
+ "%s म्हणाले"
+ "आपण म्हटले"
+ "%s कडून संदेश"
+ "आपण एक संदेश पाठविला"
+ "पाठवित आहे..."
+ "पाठविले नाही. पुन्हा प्रयत्न करण्यासाठी स्पर्श करा."
+ "पाठविले नाही. पुन्हा प्रयत्न करत आहे…"
+ "पुन्हा पाठवा किंवा हटवा"
+ "कृपया आणीबाणी सेवांना एक व्हॉईस कॉल करा. यावेळी आपला मजकूर संदेश वितरीत केला जाऊ शकत नाही."
+ "अयशस्वी झाले"
+ "डाउनलोड करण्यासाठी नवीन MMS संदेश"
+ "नवीन MMS संदेश"
+ "डाउनलोड करू शकलो नाही"
+ "पुन्हा प्रयत्न करण्यासाठी स्पर्श करा"
+ "डाउनलोड करण्यासाठी स्पर्श करा"
+ "डाउनलोड करा किंवा हटवा"
+ "डाउनलोड करत आहे..."
+ "संदेश कालबाह्य झाला किंवा उपलब्ध नाही"
+ "आकार: %1$s, कालबाह्यता: %2$s"
+ "पाठवू शकलो नाही. प्राप्तकर्ता वैध नाही."
+ "नेटवर्कवर सेवा सक्रिय केली नाही"
+ "नेटवर्क समस्येमुळे पाठवू शकलो नाही"
+ "संदेश कालबाह्य झाला किंवा उपलब्ध नाही"
+ "(विषय नाही)"
+ "अज्ञात प्रेषक"
+ "वितरित"
+ "%2$s कडील %1$s संदेश डाउनलोड करू शकलो नाही"
+ "कमी मेमरीमुळे डेटाबेस ऑपरेशन पूर्ण करू शकलो नाही"
+ "संदेश पाठविला नाही"
+ "काही संदेश संदेशन मध्ये पाठविले गेले नाहीत"
+
+ %d संभाषणांमधील %d संदेश
+ %d संभाषणांमधील %d संदेश
+
+ "संदेश डाउनलोड केला नाही"
+ "काही संदेश संदेशन मध्ये डाउनलोड झाले नाहीत"
+
+ %d संभाषणांमधील %d संदेश
+ %d संभाषणांमधील %d संदेश
+
+ "%1$s वर संदेश पाठविला नाही"
+ "कृपया आणीबाणी सेवांना एक व्हॉईस कॉल करा. यावेळी आपला मजकूर संदेश %1$s ला वितरीत केला जाऊ शकत नाही."
+
+ %d नवीन संदेश
+ %d नवीन संदेश
+
+ "प्रारंभ करा"
+ "कॅमेरा उपलब्ध नाही"
+ "कॅमेरा उपलब्ध नाही"
+ "व्हिडिओ कॅप्चर उपलब्ध नाही"
+ "मीडिया जतन करू शकत नाही"
+ "चित्र घेऊ शकत नाही"
+ "परत"
+ "संग्रहित"
+ "हटवा"
+ "संग्रहण करा"
+ "संग्रहण रद्द करा"
+ "सूचना बंद करा"
+ "सूचना चालू करा"
+ "संपर्क जोडा"
+ "डाउनलोड करा"
+ "पाठवा"
+ "हटवा"
+ "हा संदेश हटवायचा?"
+ "ही क्रिया पूर्ववत केली जाणे शक्य नाही."
+ "हटवा"
+
+ हे संभाषण हटवायचे?
+ ही संभाषणे हटवायची?
+
+ "हटवा"
+ "रद्द करा"
+ "प्रति"
+ "एकाधिक प्रतिमा निवडा"
+ "निवडीची पुष्टी करा"
+ "+%d"
+ "ऑडिओ रेकॉर्ड करू शकत नाही. पुन्हा प्रयत्न करा."
+ "ऑडिओ प्ले करू शकत नाही. पुन्हा प्रयत्न करा."
+ "ऑडिओ जतन करू शकलो नाही. पुन्हा प्रयत्न करा."
+ "स्पर्श करा आणि धरून ठेवा"
+ ", "
+ " "
+ ": "
+ " "
+ "चित्र"
+ "ऑडिओ क्लिप"
+ "व्हिडिओ"
+ "संपर्क कार्ड"
+ "डाउनलोड करा"
+ "SMS द्वारे प्रत्युत्तर द्या"
+ "MMS द्वारे प्रत्युत्तर द्या"
+ "प्रत्युत्तर द्या"
+
+ %d सहभागी
+ %d सहभागी
+
+ "मी"
+ "संपर्क अवरोधित आणि संग्रहित केला"
+ "संपर्क अनावरोधित केला आणि संग्रहण करणे रद्द केले"
+ "%d संग्रहित केले"
+ "%d संग्रहण करणे रद्द केले"
+ "सूचना बंद"
+ "सूचना चालू"
+ "सर्व सेट केले. पुन्हा पाठवा ला स्पर्श करा."
+ "डीफॉल्ट SMS अॅप म्हणून संदेशन यशस्वीरित्या सेट झाले."
+
+ संलग्नक टाकून द्या
+ संलग्नके टाकून द्या
+
+ "ऑडिओ संलग्नक"
+ "ऑडिओ संलग्नक प्ले करा"
+ "विराम द्या"
+ "%s कडून संदेश: %s."
+ "%s कडील अयशस्वी संदेश: %s. वेळ: %s"
+ "%s कडील संदेश: %s. वेळ: %s"
+ "%s ला न पाठविलेला संदेश: %s. वेळ: %s"
+ "%s ला संदेश पाठवित आहे: %s. वेळ: %s"
+ "%s चा अयशस्वी संदेश: %s. वेळ: %s"
+ "%s चा संदेश: %s. वेळ: %s"
+ "%s कडील अयशस्वी संदेश: %s. वेळ: %s. %s"
+ "%s कडील संदेश: %s. वेळ: %s. %s"
+ "%s ला न पाठविलेला संदेश: %s. वेळ: %s"
+ "%s ला संदेश पाठवित आहे: %s. वेळ: %s"
+ "%s चा अयशस्वी संदेश: %s. वेळ: %s"
+ "%s चा संदेश: %s. वेळ: %s"
+ "संदेश अयशस्वी. पुन्हा प्रयत्न करण्यासाठी स्पर्श करा."
+ "%s सह संभाषण"
+ "विषय हटवा"
+ "व्हिडिओ कॅप्चर करा"
+ "एक स्थिर प्रतिमा कॅप्च करा"
+ "चित्र घ्या"
+ "व्हिडिओ रेकॉर्ड करणे प्रारंभ करा"
+ "पूर्ण स्क्रीन कॅमेर्यावर स्विच करा"
+ "पुढील आणि मागील कॅमेर्यात स्विच करा"
+ "रेकॉर्डिंग थांबवा आणि व्हिडिओ संलग्न करा"
+ "व्हिडिओ रेकॉर्ड करणे थांबवा"
+ "संदेशन फोटो"
+
+ %d फोटो \"%s\" अल्बममध्ये जतन केला
+ %d फोटो \"%s\" अल्बममध्ये जतन केले
+
+
+ %d व्हिडिओ \"%s\" अल्बममध्ये जतन केला
+ %d व्हिडिओ \"%s\" अल्बममध्ये जतन केले
+
+
+ %d संलग्नक \"%s\" अल्बममध्ये जतन केले
+ %d संलग्नके \"%s\" अल्बममध्ये जतन केली
+
+
+ %d संलग्नक \"डाउनलोड\" मध्ये जतन केले
+ %d संलग्नके \"डाउनलोड\" मध्ये जतन केली
+
+
+ %d संलग्नक जतन केले
+ %d संलग्नके जतन केली
+
+
+ %d संलग्नक जतन करणे शक्य झाले नाही
+ %d संलग्नके जतन करणे शक्य झाले नाही
+
+ "MMS संलग्नक जतन केले"
+ "सेटिंग्ज"
+ "संग्रहित"
+ "बंद करा"
+ "MMS"
+ "प्रगत"
+ "डीबग करणे"
+ "सूचना"
+ "ध्वनी"
+ "मूक"
+ "कंपन"
+ "अवरोधित केले"
+ "SMS वितरण अहवाल"
+ "आपण पाठविता त्या प्रत्येक SMS साठी वितरण अहवालाची विनंती करा"
+ "स्वयं-पुनर्प्राप्त करा"
+ "MMS संदेश स्वयंचलितपणे पुनर्प्राप्त करा"
+ "रोमिंग स्वयं-पुनर्प्राप्त करा"
+ "रोमिंगमध्ये असताना स्वयंचलितपणे MMS पुनर्प्राप्त करा"
+ "गट संदेशन"
+ "एक संदेश एकाधिक प्राप्तकर्त्यांना पाठविण्यासाठी MMS चा वापर करा."
+ "डीफॉल्ट SMS अॅप"
+ "डीफॉल्ट SMS अॅप"
+
+
+ "आपला फोन नंबर"
+ "अज्ञात"
+ "पाठविला जाणारा संदेश ध्वनी करतो"
+ "SMS साचवा"
+ "प्राप्त केलेला SMS अविश्लेषित डेटा बाह्य संचयन फायलीमध्ये साचवा"
+ "MMS साचवा"
+ "प्राप्त केलेला MMS अविश्लेषित डेटा बाह्य संचयन फायलीमध्ये साचवा"
+ "वायरलेस अॅलर्ट"
+ "संदेश पर्याय"
+ "मजकूर कॉपी करा"
+ "तपशील पहा"
+ "हटवा"
+ "अग्रेषित करा"
+ "संदेश तपशील"
+ "प्रकार: "
+ "मजकूर संदेश"
+ "मल्टीमीडिया संदेश"
+ "प्रेषक: "
+ "प्रति: "
+ "प्रेषित: "
+ "प्राप्त झाले: "
+ "विषय: "
+ "आकार: "
+ "प्राधान्य: "
+ "सिम: "
+ "उच्च"
+ "सामान्य"
+ "निम्न"
+ "सिम %s"
+ "लपविलेला प्रेषक पत्ता"
+ "संलग्नके लोड करताना संदेश पाठवू शकत नाही."
+ "संलग्नक लोड करू शकत नाही. पुन्हा प्रयत्न करा."
+ "नेटवर्क सज्ज नाही. पुन्हा प्रयत्न करा."
+ "मजकूर हटवा"
+ "मजकूर आणि संख्या प्रविष्ट करणे दरम्यान स्विच करा"
+ "अधिक सहभागी जोडा"
+ "सहभाग्यांची पुष्टी करा"
+ "नवीन संभाषण प्रारंभ करा"
+ "हा आयटम निवडा"
+ "व्हिडिओ प्ले करा"
+ "लोक आणि पर्याय"
+ "डीबग करणे"
+ "लोक आणि पर्याय"
+ "सामान्य"
+ "या संभाषणातील लोक"
+ "एक कॉल करा"
+ "संदेश पाठवा"
+ "<br/><small>%s वरून</small>संदेश पाठवा"
+
+ फोटो पाठवा
+ फोटो पाठवा
+
+
+ ऑडिओ पाठवा
+ ऑडिओ पाठवा
+
+
+ व्हिडिओ पाठवा
+ व्हिडिओ पाठवा
+
+
+ संपर्क कार्ड पाठवा
+ संपर्क कार्ड पाठवा
+
+
+ संलग्नक पाठवा
+ संलग्नके पाठवा
+
+
+ पाठविण्यासाठी %d संलग्नक सज्ज
+ पाठविण्यासाठी %d संलग्नक सज्ज
+
+ "अभिप्राय पाठवा"
+ "Google Play Store मध्ये पहा"
+ "आवृत्ती माहिती"
+ "आवृत्ती %1$s"
+ "मुक्त स्त्रोत परवाने"
+ "सूचना"
+ "संलग्नक मर्यादेपर्यंत पोहोचले"
+ "संलग्नक लोड करण्यात अयशस्वी."
+ "संपर्कांवर जोडायचे?"
+ "संपर्क जोडा"
+ "विषय"
+ "विषय: "
+ "%s%s"
+ "संपर्क कार्ड लोड करीत आहे"
+ "संपर्क कार्ड लोड करू शकलो नाही"
+ "संपर्क कार्ड पहा"
+
+ %d संपर्क
+ %d संपर्क
+
+ "संपर्क कार्ड"
+ "जन्मदिवस"
+ "टिपा"
+ "संदेश अग्रेषित करा"
+ "प्रत्युत्तर द्या"
+ "+1"
+ "+%d"
+ "SMS अक्षम"
+ "पाठविण्यासाठी, डीफॉल्ट SMS अॅप म्हणून संदेशन सेट करा"
+ "डीफॉल्ट SMS अॅप म्हणून संदेशन सेट करा"
+ "बदला"
+ "संदेश प्राप्त करण्यासाठी, डीफॉल्ट SMS अॅप म्हणून संदेशन सेट करा"
+ "SMS संदेश पाठविण्यासाठी कोणतेही प्राधान्यकृत सिम निवडले नाही"
+ "या अॅप ला डिव्हाइस मालकाने अनुमती दिलेली नाही."
+ "ठीक आहे"
+ "एका संभाषणात पुष्कळ सहभागी आहेत"
+
+ अवैध संपर्क
+ अवैध संपर्क
+
+ "कॅमेरा प्रतिमा लोड करू शकलो नाही"
+ "आपण: "
+ "%s: "
+ "मसुदा"
+ "आपण नवीन संभाषण प्रारंभ केल्यावर, आपल्याला तो येथे सूचीबद्ध केलेला दिसेल"
+ "संग्रहित केलेली संभाषणे येथे दिसतात"
+ "संभाषणे लोड करीत आहे…"
+ "चित्र"
+ "ऑडिओ क्लिप"
+ "व्हिडिओ"
+ "संपर्क कार्ड"
+ "MMS"
+ "पूर्ववत करा"
+ "पुन्हा प्रयत्न करा"
+ "एक नवीन संदेश प्रारंभ करण्यासाठी एक संपर्क नाव किंवा फोन नंबर प्रविष्ट करा"
+ "अवरोधित करा"
+ "%s अवरोधित करा"
+ "%s अनावरोधित करा"
+ "%s अवरोधित करायचे?"
+ "आपण या नंबरवरून संदेश प्राप्त करणे सुरु ठेवाल परंतु आपल्याला आणखी सूचित केले जाणार नाही. हे संभाषम संग्रहित केले जाईल."
+ "अवरोधित संपर्क"
+ "अनावरोधित करा"
+ "अवरोधित संपर्क"
+ "दस्तऐवज लायब्ररीतून प्रतिमा निवडा"
+ "संदेश पाठवित आहे"
+ "संदेश पाठवला"
+ "सेल्युलर डेटा बंद आहे. आपल्या सेटिंग्ज तपासा."
+ "विमान मोडमध्ये संदेश पाठवू शकत नाही"
+ "संदेश पाठविला जाऊ शकला नाही"
+ "संदेश डाउनलोड केला"
+ "सेल्युलर डेटा बंद आहे. आपल्या सेटिंग्ज तपासा."
+ "विमान मोडमध्ये संदेश डाउनलोड करू शकत नाही"
+ "संदेश डाउनलोड करणे शक्य झाले नाही"
+ "शून्य"
+ "एक"
+ "दोन"
+ "तीन"
+ "चार"
+ "पाच"
+ "सहा"
+ "सात"
+ "आठ"
+ "नऊ"
+ "%1$s सह संदेश पाठवू शकत नाही, त्रुटी %2$d"
+ "अज्ञात वाहकासह संदेश पाठवू शकत नाही, त्रुटी %1$d"
+ "अग्रेषित: %s"
+ "संदेश पाठविला नाही: नेटवर्क वर सेवा सक्रिय नाही"
+ "संदेश पाठविला नाही: अवैध गंतव्यस्थान पत्ता"
+ "संदेश पाठविला नाही: अवैध संदेश"
+ "संदेश पाठविला नाही: असमर्थित सामग्री"
+ "संदेश पाठविला नाही: असमर्थित संदेश"
+ "संदेश पाठविला नाही: खूप मोठा"
+ "नवीन संदेश"
+ "पहा"
+ "प्रतिमा"
+ "योग्य अनुप्रयोग शोधणे शक्य झाले नाही"
+ "प्राप्तकर्ता काढा"
+ "नवीन संदेश"
+ "रद्द करा"
+ "प्रवेश बिंदू संपादित करा"
+ "सेट केले नाही"
+ "नाव"
+ "APN"
+ "MMSC"
+ "MMS प्रॉक्सी"
+ "MMS पोर्ट"
+ "MCC"
+ "MNC"
+ "APN प्रकार"
+ "APN हटवा"
+ "नवीन APN"
+ "जतन करा"
+ "टाकून द्या"
+ "नाव फील्ड रिक्त असू शकत नाही."
+ "APN रिक्त असू शकत नाही."
+ "MCC फील्ड 3 अंकी असणे आवश्यक आहे."
+ "MNC फील्ड 2 किंवा 3 अंकी असणे आवश्यक आहे."
+ "डीफॉल्ट APN सेटिंग्ज पुनर्संचयित करत आहे."
+ "डीफॉल्टवर रीसेट करा"
+ "डीफॉल्ट APN सेटिंग्ज रीसेट करणे पूर्ण झाले."
+ "अशीर्षकांकित"
+ "प्रवेश बिंदू नावे"
+ "APN"
+ "नवीन APN"
+ "या वापरकर्त्यासाठी प्रवेश बिंदू नाव सेटिंग्ज उपलब्ध नाहीत"
+ "क्लिपबोर्डवर कॉपी करायचे?"
+ "कॉपी करा"
+ "%s वर"
+ "सामान्य"
+ "प्रगत"
+ "सामान्य सेटिंग्ज"
+ "प्रगत सेटिंग्ज"
+ "\"%s\" सिम"
+ "सर्व प्राप्तकर्त्यांना वैयक्तिक SMS संदेश पाठवा. केवळ आपणच कोणतीही प्रत्युत्तरे मिळवाल"
+ "सर्व प्राप्तकर्त्यांना एक एकल MMS पाठवा"
+ "अज्ञात नंबर"
+ "नवीन संदेश"
+ "नवीन संदेश."
+ "सिम निवडकर्ता"
+ "%1$s निवडले, सिम निवडकर्ता"
+ "विषय संपादित करा"
+ "सिम निवडा किंवा विषय संपादित करा"
+ "ऑडिओ रेकॉर्ड करण्यासाठी स्पर्श करा आणि धरून ठेवा"
+ "नवीन संभाषण प्रारंभ करा"
+ "संदेशन"
+ "संदेशन सूची"
+ "संदेशन"
+ "नवीन संदेश"
+ "संभाषण सूची"
+ "संभाषणे लोड करीत आहे"
+ "संदेश लोड करत आहे"
+ "अधिक संभाषणे पहा"
+ "अधिक संदेश पहा"
+ "संभाषण हटवले"
+ "संभाषण हटविले. भिन्न संदेशन संभाषण दर्शविण्यासाठी स्पर्श करा"
+ "अवरोधित केले"
+ "अनावरोधित केले"
+ "संचयन स्थान कमी आहे. काही डेटा गमावला जाऊ शकतो."
+ "संलग्नके निवडा"
+ "निवडीची पुष्टी करा"
+ "%d निवडली"
+ "कृपया एक किंवा अधिक संलग्नके काढा आणि पुन्हा प्रयत्न करा."
+ "आपण आपला संदेश पाठविण्याचा प्रयत्न करू शकता, परंतु आपण जोपर्यंत एक किंवा अधिक संलग्नके काढत नाही तोपर्यंत तो वितरित केला जाऊ शकत नाही."
+ "आपण प्रति संदेश केवळ एक व्हिडिओ पाठवू शकता. कृपया अतिरिक्त व्हिडिओ काढा आणि पुन्हा प्रयत्न करा."
+ "संलग्नक लोड करण्यात संदेशन अयशस्वी झाले."
+ "तरीही पाठवा"
+ "संभाषण प्रारंभ करू शकलो नाही"
+ "%1$s (%2$s)"
+ "%s निवडले"
+
diff --git a/res/values-ms-rMY/arrays.xml b/res/values-ms-rMY/arrays.xml
new file mode 100644
index 0000000..10f0c1c
--- /dev/null
+++ b/res/values-ms-rMY/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "tiada subjek"
+ "tiada subjek"
+
+
+ "Ya"
+ "Tidak"
+ "OK"
+ "Hehe"
+ "Terima kasih"
+ "Saya bersetuju"
+ "Nice"
+ "Saya dalam perjalanan"
+ "OK, saya akan hubungi anda semula"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
new file mode 100644
index 0000000..80cb5c4
--- /dev/null
+++ b/res/values-ms-rMY/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Pemesejan"
+ "Pemesejan"
+ "Pilih perbualan"
+ "Tetapan"
+ "Hantar Mesej"
+ "Tambah lampiran"
+ "Bantuan"
+ "Selamat datang"
+ "Langkau"
+ "Seterusnya >"
+ "Seterusnya"
+ "Keluar"
+ "Tetapan >"
+ "Tetapan"
+ "Pemesejan memerlukan kebenaran untuk mengakses SMS, Telefon dan Kenalan."
+ "Anda boleh menukar kebenaran dalam Tetapan > Apl > Pemesejan > Kebenaran."
+ "Anda boleh menukar kebenaran dalam Tetapan, Apl, Pemesejan, Kebenaran."
+ "Kerap"
+ "Semua kenalan"
+ "Hantar ke %s"
+ "Abadikan gambar atau video"
+ "Pilih imej dari peranti ini"
+ "Rakam audio"
+ "Pilih foto"
+ "Media dipilih."
+ "Media tidak dipilih."
+ "%d dipilih"
+ "imej %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "imej"
+ "Rakam audio"
+ "Kongsi"
+ "Sebentar tadi"
+ "Sekarang"
+
+ %d min
+ %d min
+
+
+ %d jam
+ %d jam
+
+
+ %d hari
+ %d hari
+
+
+ %d minggu
+ seminggu
+
+
+ %d bulan
+ sebulan
+
+
+ %d tahun
+ setahun
+
+ "Mesej kelas 0"
+ "Simpan"
+ "Peranti kekurangan ruang. Pemesejan akan memadamkan mesej yang lebih lama secara automatik untuk mengosongkan ruang."
+ "Ruang storan semakin berkurangan"
+ "Pemesejan mungkin tidak akan menghantar atau menerima mesej sehingga lebih banyak ruang tersedia pada peranti anda."
+ "Storan SMS kurang. Anda mungkin perlu memadamkan mesej."
+ "Sahkan nombor telefon anda"
+ "Langkah sekali ini akan memastikan Pemesejan menghantar mesej kumpulan anda dengan betul."
+ "Nombor telefon"
+ "Padamkan semua mesej dengan media"
+ "Padamkan mesej yang lebih lama daripada %s"
+ "Auto padam mesej yang lebih lama daripada %s"
+ "Abaikan"
+ "Padam semua mesej dengan media?"
+ "Padam mesej yang lebih lama daripada %s?"
+ "Padam mesej yang lebih lama daripada %s dan hidupkan autopadam?"
+ "%s kata"
+ "Anda kata"
+ "Mesej daripada %s"
+ "Anda telah menghantar mesej"
+ "Menghantar…"
+ "Tidak dihantar. Sentuh untuk mencuba lagi."
+ "Tidak dihantar. Mencuba lagi..."
+ "Hantar semula atau padam"
+ "Sila buat panggilan suara ke perkhidmatan kecemasan. Mesej teks anda tidak dapat dihantar pada masa ini."
+ "Gagal"
+ "Mesej MMS baharu untuk dimuat turun"
+ "Mesej MMS baharu"
+ "Tidak dapat memuat turun"
+ "Sentuh untuk mencuba lagi"
+ "Sentuh untuk memuat turun"
+ "Muat turun atau padam"
+ "Memuat turun..."
+ "Mesej telah tamat tempoh atau tidak tersedia"
+ "saiz: %1$s, tarikh luput: %2$s"
+ "Tidak dapat menghantar. Penerima tidak sah."
+ "Perkhidmatan tidak diaktifkan pada rangkaian"
+ "Tidak dapat menghantar kerana masalah rangkaian"
+ "Mesej telah tamat tempoh atau tidak tersedia"
+ "(Tiada subjek)"
+ "Pengirim tidak dikenali"
+ "Dikirimkan"
+ "Tidak dapat memuat turun %1$s daripada %2$s."
+ "Tidak dapat menyelesaikan operasi pangkalan data akibat memori rendah"
+ "Mesej tidak dihantar"
+ "Sesetengah mesej tidak dihantar dalam Pemesejan"
+
+ %d mesej dalam %d perbualan
+ %d mesej dalam satu perbualan
+
+ "Mesej tidak dimuat turun"
+ "Sesetengah mesej tidak dimuat turun dalam Pemesejan"
+
+ %d mesej dalam %d perbualan
+ %d mesej dalam satu perbualan
+
+ "Mesej ke %1$s tidak dihantar"
+ "Sila buat panggilan suara ke perkhidmatan kecemasan. Mesej teks anda ke %1$s tidak dapat dihantar pada masa ini."
+
+ %d mesej baharu
+ Mesej baharu
+
+ "Mula"
+ "Kamera tidak tersedia"
+ "Kamera tidak tersedia"
+ "Pengabadian video tidak tersedia"
+ "Tidak dapat menyimpan media"
+ "Tidak boleh mengambil gambar"
+ "Kembali"
+ "Diarkibkan"
+ "Padam"
+ "Arkib"
+ "Nyaharkib"
+ "Matikan pemberitahuan"
+ "Hidupkan pemberitahuan"
+ "Tambah kenalan"
+ "Muat turun"
+ "Hantar"
+ "Padam"
+ "Padamkan mesej ini?"
+ "Tindakan ini tidak boleh dibuat asal."
+ "Padam"
+
+ Padamkan perbualan ini?
+ Padamkan perbualan ini?
+
+ "Padam"
+ "Batal"
+ "Ke"
+ "Pilih berbilang imej"
+ "Sahkan pilihan"
+ "+%d"
+ "Tidak dapat merakam audio. Cuba lagi."
+ "Tidak dapat memainkan audio. Cuba lagi."
+ "Tidak dapat menyimpan audio. Cuba lagi."
+ "Sentuh & tahan"
+ ", "
+ " "
+ ": "
+ " "
+ "Gambar"
+ "Klip audio"
+ "Video dalam strim"
+ "Kad kenalan"
+ "Muat turun"
+ "Balas melalui SMS"
+ "Balas melalui MMS"
+ "Balas"
+
+ %d peserta
+ %d peserta
+
+ "Saya"
+ "Kenalan yang disekat & diarkib"
+ "Kenalan dinyahsekat & dinyaharkib"
+ "%d diarkibkan"
+ "%d dinyaharkib"
+ "Pemberitahuan dimatikan"
+ "Pemberitahuan dihidupkan"
+ "Semuanya sedia. Sentuh Hantar lagi."
+ "Pemesejan berjaya dijadikan sebagai apl SMS lalai."
+
+ Buang lampiran
+ Buang lampiran
+
+ "Lampiran audio"
+ "Mainkan lampiran audio"
+ "Jeda"
+ "Mesej daripada %s: %s."
+ "Mesej gagal daripada %s: %s. Masa: %s."
+ "Mesej daripada %s: %s. Masa: %s."
+ "Mesej tidak dihantar kepada %s: %s. Masa: %s."
+ "Menghantar mesej kepada %s: %s. Masa: %s."
+ "Mesej gagal kepada %s: %s. Masa: %s."
+ "Mesej kepada %s: %s. Masa: %s."
+ "Mesej gagal daripada %s: %s. Masa: %s. %s."
+ "Mesej daripada %s: %s. Masa: %s. %s."
+ "Mesej tidak dihantar kepada %s: %s. Masa: %s."
+ "Menghantar mesej kepada %s: %s. Masa: %s."
+ "Mesej gagal kepada %s: %s. Masa: %s."
+ "Mesej kepada %s: %s. Masa: %s."
+ "Mesej gagal. Sentuh untuk mencuba semula."
+ "Perbualan dengan %s"
+ "Padam subjek"
+ "Rakam video"
+ "Abadikan imej pegun"
+ "Ambil gambar"
+ "Mula merakam video"
+ "Tukar kepada kamera skrin penuh"
+ "Bertukar antara kamera hadapan dan belakang"
+ "Berhenti merakam dan lampirkan video"
+ "Berhenti merakam video"
+ "Foto pemesejan"
+
+ %d foto disimpan ke album \"%s\"
+ %d foto disimpan ke album \"%s\"
+
+
+ %d video disimpan ke album \"%s\"
+ %d video disimpan ke album \"%s\"
+
+
+ %d lampiran disimpan ke album \"%s\"
+ %d lampiran disimpan ke album \"%s\"
+
+
+ %d lampiran disimpan ke \"Muat Turun\"
+ %d lampiran disimpan ke \"Muat Turun\"
+
+
+ %d lampiran disimpan
+ %d lampiran disimpan
+
+
+ Tidak dapat menyimpan %d lampiran
+ Tidak dapat menyimpan %d lampiran
+
+ "Lampiran MMS yang disimpan"
+ "Tetapan"
+ "Diarkibkan"
+ "Tutup"
+ "MMS"
+ "Lanjutan"
+ "Nyahpepijat"
+ "Pemberitahuan"
+ "Bunyi"
+ "Senyap"
+ "Bergetar"
+ "Disekat"
+ "Laporan penghantaran SMS"
+ "Minta laporan penghantaran untuk setiap SMS yang anda hantar"
+ "Auto dapat kembali"
+ "Dapatkan semula mesej MMS secara automatik"
+ "Dapatkan kembali perayauan secara automatik"
+ "Dapatkan MMS secara automatik semasa merayau"
+ "Pemesejan kumpulan"
+ "Gunakan MMS untuk menghantar mesej tunggal apabila terdapat berbilang penerima"
+ "Apl SMS lalai"
+ "Apl SMS lalai"
+
+
+ "Nombor telefon anda"
+ "Tidak diketahui"
+ "Bunyi mesej keluar"
+ "Buang SMS"
+ "Buang data mentah SMS yang diterima ke dalam fail storan luaran"
+ "Buang MMS"
+ "Buang data mentah MMS yang diterima ke dalam fail storan luaran"
+ "Makluman wayarles"
+ "Pilihan mesej"
+ "Salin teks"
+ "Lihat butiran"
+ "Padam"
+ "Kirim semula"
+ "Butiran mesej"
+ "Jenis: "
+ "Mesej teks"
+ "Mesej multimedia"
+ "Daripada: "
+ "Kepada: "
+ "Dihantar: "
+ "Diterima: "
+ "Subjek: "
+ "Saiz: "
+ "Keutamaan: "
+ "SIM: "
+ "Tinggi"
+ "Biasa"
+ "Rendah"
+ "SIM %s"
+ "Alamat pengirim tersembunyi"
+ "Tidak boleh menghantar mesej semasa memuatkan lampiran."
+ "Tidak dapat memuatkan lampiran. Cuba lagi."
+ "Rangkaian tidak sedia. Cuba lagi."
+ "Padam teks"
+ "Beralih antara memasukkan teks dan nombor"
+ "Tambah peserta lagi"
+ "Sahkan peserta"
+ "Mulakan perbualan baharu"
+ "Pilih item ini"
+ "Mainkan video"
+ "Orang & pilihan"
+ "Nyahpepijat"
+ "Orang & pilihan"
+ "Umum"
+ "Orang dalam perbualan ini"
+ "Buat panggilan"
+ "Hantar mesej"
+ "Hantar mesej<br/><small>from %s</small>"
+
+ Hantar foto
+ Hantar foto
+
+
+ Hantar audio
+ Hantar audio
+
+
+ Hantar video
+ Hantar video
+
+
+ Hantar kad kenalan
+ Hantar kad kenalan
+
+
+ Hantar lampiran
+ Hantar lampiran
+
+
+ %d lampiran sedia untuk dihantar
+ Satu lampiran sedia untuk dihantar
+
+ "Hantar maklum balas"
+ "Lihat di Gedung Google Play"
+ "Maklumat versi"
+ "Versi %1$s"
+ "Lesen sumber terbuka"
+ "Pemberitahuan"
+ "Had lampiran dicapai"
+ "Gagal memuatkan lampiran."
+ "Tambah pada Kenalan?"
+ "Tambah Kenalan"
+ "Subjek"
+ "Subjek: "
+ "%s%s"
+ "Memuatkan kad kenalan"
+ "Tidak dapat memuatkan kad kenalan"
+ "Lihat kad kenalan"
+
+ %d kenalan
+ %d kenalan
+
+ "Kad kenalan"
+ "Tarikh lahir"
+ "Nota"
+ "Kirim semula mesej"
+ "Balas"
+ "1"
+ "+%d"
+ "SMS dilumpuhkan"
+ "Untuk menghantar, jadikan Pemesejan apl SMS lalai"
+ "Jadikan Pemesejan apl SMS lalai"
+ "Tukar"
+ "Untuk menerima mesej, jadikan Pemesejan apl SMS lalai"
+ "Tiada SIM pilihan yang dipilih untuk menghantar mesej SMS"
+ "Apl ini tidak dibenarkan oleh pemilik peranti."
+ "OK"
+ "Terlalu ramai peserta dalam perbualan"
+
+ Kenalan tidak sah
+ Kenalan tidak sah
+
+ "Tidak dapat memuatkan imej kamera"
+ "Anda: "
+ "%s: "
+ "Draf"
+ "Sebaik sahaja anda memulakan perbualan baharu, anda akan melihat perbualan itu disenaraikan di sini"
+ "Perbualan diarkibkan dipaparkan di sini"
+ "Memuatkan perbualan..."
+ "Gambar"
+ "Klip audio"
+ "Video"
+ "Kad kenalan"
+ "MMS"
+ "Buat asal"
+ "Cuba semula"
+ "Masukkan nama kenalan atau nombor telefon untuk memulakan mesej baharu"
+ "Sekat"
+ "Sekat %s"
+ "Nyahsekat %s"
+ "Sekat %s?"
+ "Anda akan terus menerima mesej daripada nombor ini tetapi tidak akan dimaklumkan lagi. Perbualan ini akan diarkibkan."
+ "Kenalan yang disekat"
+ "NYAHSEKAT"
+ "Kenalan yang disekat"
+ "Pilih imej dari perpustakaan dokumen"
+ "Menghantar mesej"
+ "Mesej dihantar"
+ "Data selular dimatikan. Periksa tetapan anda."
+ "Tidak dapat menghantar mesej dalam mod Pesawat"
+ "Mesej tidak dapat dihantar"
+ "Mesej dimuat turun"
+ "Data selular dimatikan. Periksa tetapan anda."
+ "Tidak dapat memuat turun mesej dalam mod Pesawat"
+ "Mesej tidak dapat dimuat turun"
+ "Sifar"
+ "Satu"
+ "Dua"
+ "Tiga"
+ "Empat"
+ "Lima"
+ "Enam"
+ "Tujuh"
+ "Lapan"
+ "Sembilan"
+ "Tidak dapat menghantar mesej dengan %1$s, ralat %2$d"
+ "Tidak dapat menghantar mesej dengan pembawa yang tidak diketahui, ralat %1$d"
+ "K.S.: %s"
+ "Mesej tidak dihantar: perkhidmatan tidak diaktifkan di rangkaian"
+ "Mesej tidak dihantar: alamat destinasi tidak sah"
+ "Mesej tidak dihantar: mesej tidak sah"
+ "Mesej tidak dihantar: kandungan tidak disokong"
+ "Mesej tidak dihantar: mesej tidak disokong"
+ "Mesej tidak dihantar: terlalu besar"
+ "Mesej baharu"
+ "Paparan"
+ "Imej"
+ "Tidak menemui aplikasi yang sesuai"
+ "Alih keluar penerima"
+ "Mesej baharu"
+ "Batal"
+ "Edit titik capaian"
+ "Tidak ditetapkan"
+ "Nama"
+ "APN"
+ "MMSC"
+ "Proksi MMS"
+ "Port MMS"
+ "MCC"
+ "MNC"
+ "Jenis APN"
+ "Padam APN"
+ "APN Baharu"
+ "Simpan"
+ "Buang"
+ "Medan Nama tidak boleh kosong."
+ "APN tidak boleh kosong."
+ "Medan MCC mestilah 3 digit."
+ "Medan MNC hendaklah mempunyai 2 atau 3 digit."
+ "Memulihkan tetapan lalai APN."
+ "Tetapkan semula kepada lalai"
+ "Penetapan semula tetapan lalai APN selesai."
+ "Tidak bertajuk"
+ "Nama Titik Capaian"
+ "APN"
+ "APN Baharu"
+ "Tetapan Nama Titik Capaian tidak tersedia untuk pengguna ini"
+ "Salin ke papan keratan?"
+ "Salin"
+ "ke %s"
+ "Umum"
+ "Lanjutan"
+ "Tetapan umum"
+ "Tetapan terperinci"
+ "SIM \"%s\""
+ "Hantar mesej SMS individu kepada semua penerima. Hanya anda yang akan menerima sebarang balasan"
+ "Hantar MMS tunggal kepada semua penerima"
+ "Nombor tidak diketahui"
+ "Mesej baharu"
+ "Mesej baharu"
+ "Pemilih SIM"
+ "%1$s dipilih, pemilih SIM"
+ "Edit subjek"
+ "Pilih SIM atau edit subjek"
+ "Sentuh dan tahan untuk merakam audio"
+ "Mulakan perbualan baharu"
+ "Pemesejan"
+ "Senarai Pemesejan"
+ "Pemesejan"
+ "Mesej baharu"
+ "Senarai perbualan"
+ "Memuatkan perbualan"
+ "Memuatkan mesej"
+ "Lihat lagi perbualan"
+ "Lihat pesanan lagi"
+ "Perbualan dipadamkan"
+ "Perbualan dipadamkan. Sentuh untuk menunjukkan perbualan Pemesejan yang lain"
+ "Disekat"
+ "Dinyahsekat"
+ "Ruang storan rendah. Sesetengah data mungkin hilang."
+ "Pilih lampiran"
+ "Sahkan pilihan"
+ "%d dipilih"
+ "Sila alih keluar satu atau lebih lampiran, kemudian cuba lagi."
+ "Anda boleh cuba menghantar mesej tetapi mesej itu mungkin tidak dihantar kecuali anda mengalih keluar satu atau beberapa lampiran."
+ "Anda hanya boleh menghantar satu video bagi setiap mesej. Sila alih keluar video tambahan dan cuba lagi."
+ "Pemesejan gagal memuatkan lampiran."
+ "Hantar juga"
+ "Tidak dapat memulakan perbualan"
+ "%1$s (%2$s)"
+ "%s dipilih"
+
diff --git a/res/values-my-rMM/arrays.xml b/res/values-my-rMM/arrays.xml
new file mode 100644
index 0000000..331ac85
--- /dev/null
+++ b/res/values-my-rMM/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "အကြောင်းအရာ မရှိ"
+ "အကြောင်းအရာမဲ့"
+
+
+ "ဟုတ်"
+ "မဟုတ်"
+ "အိုကေ"
+ "ဟဲဟဲ"
+ "ကျေးဇူးပဲ"
+ "ကျွန်ုပ် သဘောတူသည်"
+ "ကောင်း"
+ "ကျွန်ုပ်၏ လမ်းပေါ်မှာ"
+ "အိုကေ၊ ကျွန်ုပ် နောက်မှာ ပြန်လာပါရစေ"
+ ":)"
+ ":("
+
+
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
new file mode 100644
index 0000000..35a6586
--- /dev/null
+++ b/res/values-my-rMM/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "စာပို့ခြင်း"
+ "စာပို့ခြင်း"
+ "စကားဝိုင်း ရွေးချယ်ပါ"
+ "ဆက်တင်များ"
+ "စာ ပို့ရန်"
+ "ပူးတွချက် တစ်ခု ထည့်ရန်"
+ "အကူအညီ"
+ "မင်္ဂလာပါ"
+ "ကျော်ရန်"
+ "နောက်တစ်ခု"
+ "နောက်တစ်ခု"
+ "ထွက်ရန်"
+ "ချိန်ညှိချက်များ >"
+ "ချိန်ညှိချက်များ"
+ "စာတိုပို့ခြင်က SMS၊ ဖုန်း နှင့် အဆက်အသွယ်များထံ ခွင့်ပြုချက် လိုအပ်သည်။"
+ "သင်သည် ခွင့်ပြုချက်များကို ဆက်တင်များထဲမှာ ပြောင်းလဲနိုင် > အက်ပ်များ > စာတိုပို့ခြင်း > ခွင့်ပြုချက်များ။"
+ "သင်သည် ခွင့်ပြုချက်များကို ဆက်တင်များ၊ အက်ပ်များ၊ စာတိုပို့ခြင်း၊ ခွင့်ပြုချက်များထဲတွင် ပြောင်းလဲနိုင်သည်။"
+ "မကြာခဏ"
+ "ဆက်သွယ်အားလုံး"
+ "%sသို့ ပို့ရန်"
+ "ပုံများ သို့မဟုတ် ဗီဒီယို ရိုက်ယူရန်"
+ "ဤစက်ပစ္စည်းမှ ပုံများ ရွေးရန်"
+ "အသံကို ဖမ်းရန်"
+ "ပုံရွေးရန်"
+ "မီဒီယာကိုရွေးချယ်ထားသည်။"
+ "မီဒီယာကို မရွေးချယ်ထားပါ။"
+ "%d ခု ရွေးချယ်ထား"
+ "ပုံ %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "ပုံ"
+ "အသံကို ဖမ်းရန်"
+ "မျှဝေရန်"
+ "ယခုလေးတင်"
+ "ယခု"
+
+ %d မိနစ်
+ %d မိနစ်
+
+
+ %d နာရီ
+ %d နာရီ
+
+
+ %d ရက်
+ %d ရက်
+
+
+ %d ပတ်
+ ၁ ပတ်
+
+
+ %d လ
+ တစ်လ
+
+
+ %d နှစ်
+ တစ်နှစ်
+
+ "အဆင် ၀ စာတို"
+ "သိမ်းဆည်းရန်"
+ "ကိရိယာထဲတွင် နေရာ နည်းနေသည်။ နေရာလွတ်ပေးရန် စာတိုပို့ခြင်းက စာတို စာသား အဟောင်းကို အလိုအလျောက် ဖယ်ရှားပစ်မည်။"
+ "သိုလှောင်ခန်း နေရာ ကုန်ပါတော့မည်"
+ "သင်၏ ကိရိယာထဲတွင် နေရာလွတ် နောက်ထပ် ပေါ်မလာမချင်း စာတိုပို့ခြင်းက စာတိုများကို ပို့ခြင်း သို့မဟုတ် လက်ခံခြင်း လုပ်နိုင်မည် မဟုတ်ပါ။"
+ "SMS သိုလှောင်ခန်း နည်းနေသည်။ သင်သည် စာများကို ဖျက်ချင် ဖျက်ရနိုင်သည်။"
+ "သင့် ဖုန်းနံပါတ်ကို အတည်ပြုပါ"
+ "တကြိမ် လုပ်ရသည့် ဒီခြေလှမ်းက စာတိုပို့ခြင်းမှ သင်၏ အုပ်စု စာတိုများကို စနစ်တကျ ပို့ပေးမှာကို စိတ်ချနိုင်ပါသည်။"
+ "ဖုန်း နံပါတ်"
+ "မီဒီယာနှင့် စာများ အားလုံးကို ဖျက်မည်"
+ "%s ထက် ပိုကြာသော စာများကို ဖျက်မည်"
+ "%s မတိုင်ခင်က စာများအား အလိုအလျောက် ဖျက်ရန်"
+ "လစ်လျှူရှုရန်"
+ "မီဒီယာနှင့် စာတိုများ ဖျက်မည်လား?"
+ "%s ထက် ပိုကြာသော စာများ ဖျက်မည်လား?"
+ "%s မတိုင်ခင်က စာများအား ဖျက်ပြီး စာများ အလိုအလျောက်ဖျက်နိုင်မှုကို ဖွင့်ထားမည်လား?"
+ "%s ပြောတာက"
+ "သင်ပြောတာက"
+ "%s ထံမှစာ"
+ "သင်စာပို့သည်"
+ "ပို့နေ၏…"
+ "မပို့နိုင်ပါ။ ထပ်မံကြိုးစားရန် ထိပါ။"
+ "မပို့နိုင်ပါ။ ထပ်မံကြိုးစားနေ၏…"
+ "ပြန်ပို့ရန် သို့မဟုတ် ဖျက်ရန်"
+ "အရေးပေါ်ဝန်ဆောင်မှုများထံ အသံဖြင့် ခေါ်ပါ။ ယခုအချိန်တွင် သင့် စာတို မပို့နိုင်ပါ။"
+ "မအောင်မြင်ခဲ့"
+ "MMS စာအသစ်ကို ဒေါင်းလုဒ် လုပ်ရန်"
+ "MMS စာအသစ်"
+ "ဒေါင်းလုဒ် မလုပ်နိုင်ခဲ့ပါ"
+ "ထပ်စမ်းရန် ထိပါ"
+ "ဒေါင်းလုပ်ရယူရန် ထိပါ"
+ "ဒေါင်းလုဒ် လုပ်ရန် သို့မဟုတ် ဖျက်ရန်"
+ "ဒေါင်းလုပ် လုပ်နေစဉ်"
+ "စာသက်တမ်းကုန်ဆုံးသွား၏ သို့မဟုတ် စာမရှိတော့ပါ။"
+ "ဆိုက်: %1$s၊ သက်တမ်း ကုန်ဆုံး: %2$s"
+ "မပို့နိုင်ပါ။ လက်ခံမည့်သူ မရယူနိုင်ပါ။"
+ "ကွန်ရက်တွင် ဝန်ဆောင်မှု စဖွင့်သတ်မှတ်ခြင်း မပြုရသေးပါ"
+ "ကွန်ရက် ပြဿနာကြောင့် မပို့နိုင်ခဲ့ပါ။"
+ "စာ သက်တမ်းကုန်ဆုံးသွား၏ သို့မဟုတ် စာမရှိတော့ပါ။"
+ "(အကြောင်းအရာမရှိ)"
+ "ပေးပို့သူ မသိရ"
+ "ပေးသွင်းပြီး"
+ "%1$sစာကို %2$sမှ ဒေါင်းလုဒ် မလုပ်နိုင်ခဲ့ပါ"
+ "မှတ်ဉာဏ် နည်းနေ၍ ဒေတာဘေ့စ် လုပ်ကိုင်စရာ မပြီးဆုံးနိုင်ခဲ့ပါ။"
+ "စာ မပို့ခဲ့ပါ"
+ "အချို့ စာတိုများကို စာပို့ခြင်းထဲတွင် မပို့ခဲ့ပါ။"
+
+ စာတိုများ %d ခုမှာ စကားပြောခန်း %d ခု အတွင်းတွင် ဖြစ်၏
+ စကားပြောခန်းတစ်ခုတွင်းရှိ စာတိုများ %d ခု
+
+ "စာကို ဒေါင်းလုပ်မလုပ်ထားပါ"
+ "အချို့ စာတိုများကို စာပို့ခြင်းထဲသို့ ဒေါင်းလုဒ် မလုပ်ခဲ့ပါ။"
+
+ စာတိုများ %d ခုမှာ စကားပြောခန်း %d ခု အတွင်းတွင် ဖြစ်၏
+ စကားပြောခန်းတစ်ခုတွင်းရှိ စာတိုများ %d ခု
+
+ "%1$s သို့ စာတို ပို့မရပါ"
+ "အရေးပေါ်ဝန်ဆောင်မှုများထံ အသံဖြင့် ခေါ်ပါ။ %1$s သို့ ယခုအချိန်တွင် သင့် စာတို မပို့နိုင်ပါ။"
+
+ %d စာအသစ်
+ စာအသစ်
+
+ "စတင်ရန်"
+ "ကင်မရာ အသုံးမပြုနိုင်ပါ"
+ "ကင်မရာ အသုံးမပြုနိုင်ပါ"
+ "ဗွီဒီယို မရိုက်ယူနိုင်ပါ"
+ "မီဒီယာအား မသိမ်းဆည်းနိုင်ပါ"
+ "ဓာတ်ပုံရိုက်၍ မရနိုင်ပါ"
+ "နောက်သို့"
+ "မော်ကွန်းတင်ပြီး"
+ "ဖျက်ရန်"
+ "မော်ကွန်း"
+ "မော်ကွန်းမှထုတ်ယူရန်"
+ "အကြောင်းကြားချက်များ ပိတ်ရန်"
+ "အကြောင်းကြားချက်များ ဖွင့်ရန်"
+ "အဆက်အသွယ် ထည့်ရန်"
+ "ဒေါင်းလုဒ် လုပ်ရန်"
+ "ပို့ရန်"
+ "ဖျက်ရန်"
+ "ဤ စာကို ဖျက်မလား?"
+ "ဒီလုပ်ဆောင်ချက်ကို ြပန်ဖျက်မရနိုင်ပါ။"
+ "ဖျက်ရန်"
+
+ ဤစကားဝိုင်းများအား ဖျက်မည်လား?
+ ဤစကားဝိုင်းအား ဖျက်မည်လား?
+
+ "ဖျက်ရန်"
+ "ထားတော့"
+ "သို့"
+ "ပုံများစွာ ရွေးချယ်ရန်"
+ "ရွေးချယ်မှုကို အတည်ပြုရန်"
+ "+%d"
+ "အသံ ဖမ်းမရပါ။ ထပ်မံကြိုးစားပါ။"
+ "အသံဖွင့်မရပါ။ ထပ်မံကြိုးစားပါ။"
+ "အသံ သိမ်းမရပါ။ ထပ်မံကြိုးစားပါ။"
+ "ထိပြီး & ကိုင်ထားရန်"
+ ", "
+ " "
+ ": "
+ " "
+ "ပုံ"
+ "အသံ ကလီပ်"
+ "ဗီဒီယို"
+ "အဆက်အသွယ် ကဒ်"
+ "ဒေါင်းလုဒ် လုပ်ရန်"
+ "SMS မှတစ်ဆင့် ဖြေကြားရန်"
+ "MMS ဖြင့် ဖြေကြားရန်"
+ "ဖြေကြားရန်"
+
+ ပါဝင်သူ %d ယောက်
+ ပါဝင်သူ %d ယောက်
+
+ "ကျွန်ုပ်"
+ "အဆက်အသွယ်ဖြတ်တောက်ပြီး & သိမ်းဆည်းပြီး"
+ "အဆက်အသွယ်အား မပိတ်ဆို့တော့ပါ & မှော်ကွန်းမတင်တော့ပါ"
+ "%d မှတ်တမ်းတင်သိမ်းဆည်းခဲ့၏"
+ "%d သိမ်းထားခြင်းမှ ပြန်ထုတ်ယူသည်"
+ "အသိပေးချက်များ ပိတ်ထား"
+ "အသိပေးချက်များ ဖွင့်ထား"
+ "အဆင်သင့်ဖြစ်ပြီ။ Send အား ထိပါ။"
+ "စာတို့ပို့ခြင်းကို SMS ပုံသေ app အဖြစ် အောင်မြင်စွာ သတ်မှတ်လိုက်ပြီ။"
+
+ ပူးတွဲပါဖိုင်များအား ဖယ်ရှားပါ
+ ပူးတွဲပါဖိုင်အား ဖယ်ရှားပါ
+
+ "အသံ ပူးတွဲဖိုင်"
+ "ပူးတွဲပါအသံကိုဖွင့်ပါ"
+ "ဆိုင်းငံ့ရန်"
+ "%s ထံမှ စာတို: %s ။"
+ "%s: %s မှ စာတိုပို့ခြင်းမအောင်မြင်ပါ။ အချိန်: %s"
+ "%s: %s မှ စာတို။ အချိန်: %s"
+ "%s: %s သို့ စာတိုမပို့ရသေးပါ။ အချိန်: %s"
+ "%s: %s သို့ စာတိုပို့နေသည်။ အချိန်: %s"
+ "%s: %s သို့ စာတိုပို့ခြင်းမအောင်မြင်ပါ။ အချိန်: %s"
+ "%s: %s သို့ စာတို။ အချိန်: %s"
+ "%s: %s မှ စာပို့ခြင်းမအောင်မြင်ပါ။အချိန်: %s. %s"
+ "%s: %sမှ စာတိုပို့နေသည်။ အချိန်: %s. %s"
+ "%s: %s သို့ စာတိုမပို့ရသေးပါ။ အချိန်: %s"
+ "%s: %s သို့ စာတိုပို့ နေသည်။အချိန်: %s"
+ "%s: %s သို့စာတိုပို့ခြင်းမအောင်မြင်ပါ။ အချိန်: %s"
+ "%s: %s သို့ စာတိုပို့နေသည်။ အချိန်: %s"
+ "စာတိုပို့ခြင်းမအောင်မြင်ပါ။ ပြန်လည်ကြိုးစားရန် ထိပါ။"
+ "%sနှင့် စကားဝိုင်းများ"
+ "အကြောင်းအရာကို ဖျက်ရန်"
+ "ဗီဒီယို ဖမ်းယူရန်"
+ "ပုံသေ တစ်ခုကို ရိုက်ယူရန်"
+ "ပုံ ရိုက်ယူရန်"
+ "ဗီဒီယို ဖမ်းယူမှု စတင်ရန်"
+ "မျက်နှာပြင် အပြည့် ကင်မရာသို့ ပြောင်းရန်"
+ "ကင်မရာ အရှေ့ဘက်နှင့် အနောက်ဘက် ပြောင်းရန်"
+ "မှတ်တမ်းတင်မှုရပ်ကာ ဗီဒီယို ချိတ်ရန်"
+ "ဗွီဒီယိုရိုက်ကူးခြင်း ရပ်ရန်"
+ "ဓာတ်ပုံများကို စာတိုပို့ခြင်း"
+
+ %d ဓါတ်ပုံများကို \"%s\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ
+ %d ဓါတ်ပုံကို \"%s\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ
+
+
+ %d ဗီဒီယိုများကို \"%s\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ
+ %d ဗီဒီယိုကို \"%s\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ
+
+
+ %d ပူးတွဲပါဖိုင်များကို \"%s\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ
+ %d ပူးတွဲပါဖိုင်ကို \"%s\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ
+
+
+ %d ပူးတွဲပါဖိုင်များကို \"ဒေါင်းလုဒ်များ\" သို့ သိမ်းဆည်းပြီ:ပါပြီ
+ %d ပူးတွဲပါဖိုင်ကို \"ဒေါင်းလုဒ်များ\" သို့ သိမ်းဆည်းပြီးပါပြီ
+
+
+ ပူးတွဲပါဖိုင် %d ဖိုင် သိမ်းဆည်းပြီး၏
+ ပူးတွဲပါဖိုင် %d ဖိုင် သိမ်းဆည်းပြီး၏
+
+
+ ပူးတွဲပါဖိုင် %d အား မသိမ်းဆည်းနိုင်ခဲ့ပါ
+ ပူးတွဲပါဖိုင် %d ဖိုင်အား မသိမ်းဆည်းနိုင်ခဲ့ပါ
+
+ "သိမ်းဆည်းထားသည့် MMS ပူးတွဲချက်"
+ "ဆက်တင်များ"
+ "မော်ကွန်းတင်ပြီး"
+ "ပိတ်ရန်"
+ "ရုပ်သံစာ"
+ "အဆင့်မြင့်"
+ "ဒီဘာဂ်"
+ "အကြောင်းကြားချက်များ"
+ "အသံ"
+ "အသံတိတ်ရန်"
+ "တုန်ခါရန်"
+ "ပိတ်ဆို့ထား"
+ "SMS ဖြန့်ဝေမှု အစီရင်ခံစာများ"
+ "သင် ပို့လိုက်သော စာတိုင်း အတွက် ပို့ပြီးကြောင်း အစီရင်ခံစာကို တောင်းဆိုမည်"
+ "အလိုအလျောက် ပြန်လည်ရယူမည်"
+ "MMS စာများကို အလိုအလျောက် ရယူရန်"
+ "ရုန်းမင်းလုပ်စဉ် အလိုအလျောက် ပြန်လည်ထုတ်ယူမည်"
+ "ရုန်းမင်းသုံးစဉ် MMS အလိုအလျောက် ရယူရန်"
+ "အဖွဲ့လိုက် စာပို့ခြင်း"
+ "စာတစ်စောင်ပို့ရန် လက်ခံသူအမြောက်အမြားရှိနေလျှင် ရုပ်သံစာကို သုံးရန်"
+ "စာတိုပို့ရန်သုံး အပလီကေးရှင်း"
+ "စာတိုပို့ရန်သုံး အပလီကေးရှင်း"
+
+
+ "သင့် ဖုန်းနံပါတ်"
+ "မသိရ"
+ "အပြင်သို့စာပေးပို့သည့် အသံများ"
+ "စိုစွတ် SMS"
+ "စိုစွတ် SMS အချက်လက်အကြမ်းများကို ပြင်ပသိုလှောင်မှုဖိုင် သို့လက်ခံ ရရှိပါသည်"
+ "စိုစွတ် MMS"
+ "စိုစွတ် MMS အချက်လက်အကြမ်းများကို ပြင်ပသိုလှောင်မှုဖိုင် သို့လက်ခံ ရရှိပါသည်"
+ "ကြိုးမဲ့ သတိပေးချက်များ"
+ "စာ အတွက် ရွေးစရာများ"
+ "စာကူးယူရန်"
+ "အသေးစိတ်များကို ကြည့်မည်"
+ "ဖျက်ရန်"
+ "တစ်ဆင့်ပို့ရန်"
+ "စာသေးစိတ်များ"
+ "အမျိုးအစား: "
+ "စာတို"
+ "မာလ်တီမီဒီယာ စာ"
+ "မှ: "
+ "သို့: "
+ "ပို့ပြီး: "
+ "လက်ခံရရှိခဲ့: "
+ "အကြောင်းအရာ: "
+ "အရွယ်အစား: "
+ "ဦးစားပေးမှု: "
+ "ဆင်းမ်: "
+ "မြင့်"
+ "ပုံမှန်"
+ "နိမ့်"
+ "ဆင်းမ် %s"
+ "ဝှက်ထားသော စာပို့သူ လိပ်စာ"
+ "ပူးတွဲချက်များဖွင့်စဉ် စာပို့၍မရပါ။"
+ "ပူးတွဲဖိုင် မရယူနိုင်ပါ။ ထပ်မံကြိုးစားပါ။"
+ "ကွန်ရက်အဆင်သင့် မဖြစ်သေးပါ။ ထပ်မံကြိုးစားပါ။"
+ "စာသားကို ဖျက်ရန်"
+ "စာသား နှင့် ဂဏန်းများ ရိုက်ထည့်မှု အကြားမှာ ပြောင်းလဲရန်"
+ "ပါဝင်သူများထပ်ထည့်မည်"
+ "ပါဝင်သူများ အတည်ပြုရန်"
+ "ပြောဆိုမှု အသစ် စတင်ရန်"
+ "ဒီအရာကို ရွေးရန်"
+ "ဗီဒီယို ဖွင့်ရန်"
+ "လူများ & ရွေးစရာများ"
+ "ဒီဘာဂ်"
+ "လူများ & ရွေးစရာများ"
+ "အထွေထွေ"
+ "ဒီစကားဝိုင်း ထဲက လူများ"
+ "ခေါ်ဆိုမှု ပြုလုပ်ရန်"
+ "စာတို ပို့ရန်"
+ "စာတိုကို<br/><> %s</small> ထံမှပို့ရန်"
+
+ ဓာတ်ပုံများ ပို့ရန်
+ ဓာတ်ပုံ ပို့ရန်
+
+
+ အသံဖိုင်များ ပို့ရန်
+ အသံဖိုင် ပို့ရန်
+
+
+ ဗီဒီယိုများ ပို့ရန်
+ ဗီဒီယို ပို့ရန်
+
+
+ အဆက်အသွယ်ကဒ်များ ပို့ရန်
+ အဆက်အသွယ်ကဒ် ပို့ရန်
+
+
+ ပူးတွဲပါဖိုင်များ ပို့ရန်
+ ပူးတွဲပါဖိုင် ပို့ရန်
+
+
+ ပူးတွဲဖိုင် %d ဖိုင် ပို့ရန် အဆင်သင့်ဖြစ်၏
+ ပူးတွဲဖိုင်တစ်ဖိုင် ပို့ရန် အဆင်သင့်ဖြစ်၏
+
+ "တုံ့ပြန်ချက် ပို့ရန်"
+ "Google ပလေး စတိုးတွင် ကြည့်ရန်"
+ "ဗားရှင်း အင်ဖို"
+ "ဗားရှင်း %1$s"
+ "အခမဲ့ ရင်းမြစ် လိုင်စင်များ"
+ "အကြောင်းကြားချက်များ"
+ "ချိတ်တွဲမှု ကန့်သတ်ချက်သို့ရောက်ရှိပါပြီ"
+ "ချိတ်တွဲမှု ဖွင့်ရန်မအောင်မြင်ပါ။"
+ "အဆက်အသွယ်များသို့ ထည့်ရမလား?"
+ "အဆက်အသွယ် ထည့်ရန်"
+ "ဘာသာရပ်"
+ "အကြောင်းအရာ: "
+ "%s%s"
+ "အဆက်အသွယ် ကဒ်ကို တင်ပေးနေ"
+ "နာမည်ကဒ် မရယူနိုင်ပါ"
+ "အဆက်အသွယ် ကဒ်ကို ကြည့်ရန်"
+
+ %d အဆက်အသွယ်
+ %d အဆက်အသွယ်
+
+ "နာမည် ကဒ်များ"
+ "မွေးနေ့"
+ "မှတ်စုများ"
+ "စာကို တစ်ဆင့်ပို့ရန်"
+ "စာပြန်ရန်"
+ "+၁"
+ "+%d"
+ "SMS ပိတ်ထား"
+ "ပို့ရန်အတွက် စာတိုပို့ခြင်းကို SMS ပုံသေ app အဖြစ် သတ်မှတ်ပေးပါ"
+ "စာတိုပို့ခြင်းကို SMS ပုံသေ app အဖြစ် သတ်မှတ်ရန်"
+ "ပြောင်းရန်"
+ "စာတိုများကို လက်ခံရန်အတွက်၊ စာတိုပို့ခြင်းကို SMS ပုံသေ app အဖြစ် သတ်မှတ်ပေးပါ"
+ "SMS စာများ ပို့ရန်အတွက် ဦးစားပေး ဆင်းမ်ကို မရွေးရသေးပါ"
+ "ဒီappကို ကိရိယာ ပိုင်ရှင်က ခွင့် မပြုပါ။"
+ "အိုကေ"
+ "စကားဝိုင်း တစ်ခုထဲမှာ ပါဝင်သူ များလွန်းနေ"
+
+ အဆက်အသွယ်များ မမှန်ကန်ပါ
+ အဆက်အသွယ် မမှန်ကန်ပါ
+
+ "ကင်မရာ ပုံ မရယူနိုင်ပါ"
+ "သင်: "
+ "%s: "
+ "မူကြမ်း"
+ "စကားပြောစတင်သည်နှင့်၊ ဤစာရင်းတွင် ပေါ်လာသည်ကို သင်မြင်ရလိမ့်မည်။"
+ "ဤတွင်မြင်ရသည့် ပြောဆိုမှုများအား သိမ်းဆည်းရန်"
+ "ပြောဆိုမှုများကို တင်နေ..."
+ "ပုံ"
+ "အသံ ကလီပ်"
+ "ဗီဒီယို"
+ "အဆက်အသွယ် ကဒ်"
+ "MMS"
+ "ပြန်ဖျက်ရန်"
+ "ထပ်စမ်းရန်"
+ "စာတို အသစ် စပို့ရန် အမည် သို့မဟုတ် ဖုန်းနံပါတ် ရိုက်ထည့်ပါ"
+ "ပိတ်ဆို့ရန်"
+ "အဆက်အသွယ်ဖြတ်ရန် %s"
+ "အဆက်အသွယ်ပြန်လုပ် %s"
+ "ပိတ်ဆို့ရမလား%s?"
+ "ဤနံပါတ်မှ စာတိုများ သင် ဆက်လက်ရရှိနေမည်ဖြစ်သော်လည်း အကြောင်းကြားချက်ပေးပို့တော့မည် မဟုတ်ပါ။ ဤပြောဆိုမှုများအား သိုလှောင်သိမ်းဆည်းထားမည်ဖြစ်၏။"
+ "အဆက်အသွယ် ဖြတ်ပြီး"
+ "အဆက်အသွယ်ပြန်လုပ်"
+ "အဆက်အသွယ် ဖြတ်ပြီး"
+ "စာကြည့်တိုက်မှ ပုံရွေးရန်"
+ "စာတိုပို့နေသည်"
+ "စာတိုပို့ပြီးပါပြီ"
+ "ဆဲလူလာ ဒေတာ ပိတ်ထား၏။ ဆက်တင်တွင် စစ်ဆေးပါ။"
+ "လေယာဉ်ပျံပေါ်သုံးစနစ်တွင် စာများ မပို့နိုင်ပါ"
+ "စာများ ပို့၍မရပါ။"
+ "စာတိုအားဒေါင်းလုတ်လုပ်ပြီး"
+ "ဆဲလူလာ ဒေတာ ပိတ်ထား၏။ ဆက်တင်တွင် စစ်ဆေးပါ။"
+ "လေယာဉ်ပျံမုဒ်တွင် စာတိုများကို ဒေါင်းလုပ်လုပ်၍မရနိုင်ပါ"
+ "စာတိုအား ဒေါင်းလုပ်လုပ်၍မရပါ"
+ "သုည"
+ "တစ်"
+ "နှစ်"
+ "သုံး"
+ "လေး"
+ "ငါး"
+ "ခြောက်"
+ "ခုနစ်"
+ "ရှစ်"
+ "ကိုး"
+ "%1$sဖြင့် စာတိုမပို့နိုင်ပါ၊ အမှား %2$d"
+ "အမည်မသိသယ်ဆောင်သူဖြင့် စာတိုမပို့နိုင်ပါ၊ အမှား %1$d"
+ "တစ်ဆင့်ပို့: %s"
+ "စာတိုကို မပို့ခဲ့: ဝန်ဆောင်မှုကို ကွန်ရက် ပေါ်မှာ စဖွင့်မသုံးရသေး"
+ "စာမပို့နိုင်ပါ − လက်ခံယူမည့် လိပ်စာ မှားနေ၏"
+ "စာမပို့နိုင်ပါ− စာ မမှန်ကန်ပါ။"
+ "စာမပို့နိုင်ပါ − ထောက်ပံ့မထားသော အကြောင်းအရာဖြစ်၏"
+ "စာမပို့နိုင်ပါ− ထောက်ပံ့မထားသော စာဖြစ်၏"
+ "စာပိုဒ်အလွန်ရှည်ပါက မက်ဆေ့ချ် ပို့မရပါ။"
+ "စာ အသစ်"
+ "ကြည့်ရှုရန်"
+ "ပုံ"
+ "သင့်တော်သည့် အပလီကေးရှင်းကို ရှာမရခဲ့"
+ "အဝေးမှ လက်ခံရရှိသူ"
+ "စာ အသစ်"
+ "ဖျက်သိမ်းရန်"
+ "ဝင်ရောက်မည့်ပွိုင့်အား ပြင်ဆင်ရန်"
+ "မသတ်မှတ်ထားပါ"
+ "အမည်"
+ "APN"
+ "MMSC"
+ "MMS ပရော့က်စီ"
+ "MMS ပို့တ်နံပါတ်"
+ "MCC"
+ "MNC"
+ "APN အမျိုးအစား"
+ "APN ကိုဖျက်မည်"
+ "APN အသစ်"
+ "သိမ်းဆည်းရန်"
+ "ဖျက်သိမ်းရန်"
+ "အမည်အကွက်မှာ ကွက်လပ်ဖြစ်မနေစေရပါ"
+ "APN မှာ ကွက်လပ်ဖြစ်မနေစေရပါ"
+ "MNC အကွက်မှာ ဂဏန်း ၃ လုံးဖြစ်ရမည်"
+ "MNC အကွက်မှာ ဂဏန်း ၂ လုံး သို့မဟုတ် ၃ လုံးဖြစ်ရမည်"
+ "မူရင်း APN ဆက်တင်များကိုပြန်လည်ရယူစေမည်"
+ "စနစ်အား မူလစက်ရုံအခြအေနေထံ ပြန်လည်သတ်မှတ်ရန်"
+ "APN ၏မူရင်းအပြင်အဆင်များကို အစသို့ပြန်လည်စတင်မှုအား ပြီးဆုံး၏။"
+ "ခေါင်းစဉ်မဲ့"
+ "ချိတ်ဆက်သောပွိုင့်အမည်များ"
+ "APNs"
+ "APN အသစ်"
+ "ဤအသုံးပြုသူ အတွက် ချိတ်ဆက်သောပွိုင့်အမည်၏ ဆက်တင်များကို မရယူနိုင်"
+ "ကလီပ်ဘုတ်သို့ ကူးရမလား?"
+ "ကူးယူရန်"
+ "%sသို့"
+ "အထွေထွေ"
+ "အဆင့်မြင့်သော"
+ "အထွေထွေ ဆက်တင်များ"
+ "အဆင့်မြင့် ဆက်တင်များ"
+ "\"%s\" SIM"
+ "ရရှိသူ အားလုံးတို့ထံ တစ်ဦးချင်း SMS စာများကို ပို့ပါ။ သင်သည်သာလျှင် ဖြေကြားချက် မှန်သမျှကို ရရှိမည်။"
+ "ရရှိသူ အားလုံးထံသို့ တစ်ခုတည်းသော MMS ကို ပို့ပါ"
+ "မသိရ နံပါတ်"
+ "စာ အသစ်"
+ "စာ အသစ်"
+ "SIM ရွေးချယ်ပေးရေးလက္ခဏာရပ်"
+ "%1$s ရွေးချယ်ပြီး၊ SIM ရွေးချယ်ပေးသူ"
+ "အကြောင်းအရာကို တည်းဖြတ်ပါ။"
+ "SIM ကိုရွေးချယ်ပါ သို့မဟုတ် အကြောင်းအရာတည်းဖြတ်ခြင်းကိုရွေးချယ်ပါ။"
+ "အသံအား ဖမ်းယူထားရန် ထိပြီးဖိထားပါ"
+ "ပြောဆိုမှု အသစ် စတင်ရန်"
+ "စာတိုပို့ခြင်း"
+ "စာတိုပို့ခြင်း စာရင်း"
+ "စာတိုပို့ခြင်း"
+ "စာ အသစ်"
+ "ပြောဆိုမှုစာရင်း"
+ "စကားဝိုင်းများကို ဖွင့်နေသည်"
+ "စာများကို တင်နေ"
+ "စကားပြောဆက်သွယ်မှုများကို ထပ်ပြီး ကြည့်မည်"
+ "နောက်ထပ် မက်ဆေ့များကြည့်ရန်"
+ "စကားဝိုင်းကို ဖျက်လိုက်ပြီ"
+ "ပြောဆိုမှုကို ဖျက်ခဲ့သည်။ အခြား စာတိုပို့ခြင်း ပြောဆိုမှုကို ပြရန် တို့ထိပါ။"
+ "ပိတ်ဆို့ထား"
+ "ပြန်ဖွင့်ထားခြင်း"
+ "သိုလှောင်ထားသည့်နေရာ နည်းနေပါသည်။ ဒေတာတချို့ပျောက်ဆုံးပါလိမ့်မည်။"
+ "ချိတ်တွဲမှုများ ရွေးချယ်မည်"
+ "ရွေးချယ်မှုကို အတည်ပြုရန်"
+ "%d ခရွေးချယ်ပြီး"
+ "ကျေးဇူးပြု၍ တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ချိတ်တွဲမှုများကို ဖယ်ရှားပြီး နောက်တစ်ကြိမ်ကြိုးစားပါ။"
+ "သင့်စာတိုကို ပေးပို့ရန် သင်ကြိုးစားနိုင်ပါသည်၊ သို့သော်သင်သည် တစ်ခုသို့မဟုတ် တစ်ခုထက်ပိုသော ချိတ်တွဲမှုများကို ဖယ်ရှားခြင်းမပြုပါက ၎င်းကို ပေးပို့မှုမရှိခြင်း ဖြစ်နိုင်သည်။"
+ "သင်သည် မက်ဆေ့ဂျ်တစ်ခုလျှင် ဗွီဒီယိုတကားသာ ပေးပို့နိုင်သည်။ အပိုဆောင်း ဗွီဒီယိုများအား ဖယ်ရှားပြီး ထပ်မံကြိုးစားပါ။"
+ "စာတိုကိုပို့စဉ် ပူးတွဲချက်ကို တင် မရခဲ့ပါ။"
+ "မည်သို့ပင်ဖြစ်စေ ပို့မည်"
+ "စကားဝိုင်းအား မစတင်နိုင်ပါ"
+ "%1$s (%2$s)"
+ "%s ရွေးချယ်ပြီး၏"
+
diff --git a/res/values-nb/arrays.xml b/res/values-nb/arrays.xml
new file mode 100644
index 0000000..c9efc6f
--- /dev/null
+++ b/res/values-nb/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "emne mangler"
+ "ikke noe emne"
+
+
+ "Ja"
+ "Nei"
+ "OK"
+ "Hehe"
+ "Takk"
+ "Jeg er enig"
+ "Bra"
+ "Jeg er på vei"
+ "OK, jeg tar kontakt med deg senere"
+ ":)"
+ ":("
+
+
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
new file mode 100644
index 0000000..7736c84
--- /dev/null
+++ b/res/values-nb/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Meldinger"
+ "Meldinger"
+ "Markér samtalen"
+ "Innstillinger"
+ "Send meldingen"
+ "Legg ved et vedlegg"
+ "Hjelp"
+ "Velkommen"
+ "Hopp over"
+ "Neste >"
+ "Neste"
+ "Avslutt"
+ "Innstillinger >"
+ "Innstillinger"
+ "Meldinger trenger tillatelse til å bruke SMS, Telefon og Kontakter."
+ "Du kan endre tillatelser i Innstillinger > Apper > Meldinger > Tillatelser."
+ "Du kan endre tillatelser i Innstillinger > Apper > Meldinger > Tillatelser."
+ "Ofte brukte"
+ "Alle kontakter"
+ "Send til %s"
+ "Ta bilder eller spill inn video"
+ "Velg bilder fra denne enheten"
+ "Spill inn lyd"
+ "Velg bilde"
+ "Mediene er valgt."
+ "Valget av mediene er fjernet."
+ "%d valgt"
+ "bilde %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "bilde"
+ "Spill inn lyd"
+ "Del"
+ "Nå nettopp"
+ "Nå"
+
+ %d minutter
+ %d minutt
+
+
+ %d timer
+ %d time
+
+
+ dager
+ %d dag
+
+
+ %d uker
+ én uke
+
+
+ %d måneder
+ én måned
+
+
+ %d år
+ ett år
+
+ "Klasse 0-melding"
+ "Lagre"
+ "Enheten har lite lagringsplass. Meldinger-appen sletter eldre meldinger automatisk for å frigjøre lagringsplass."
+ "Lite ledig lagringsplass"
+ "Du kan kanskje ikke sende eller motta SMS i Meldinger før mer plass er tilgjengelig på enheten din."
+ "Du har lite lagringsplass for SMS. Du må slette andre meldinger."
+ "Bekreft telefonnummeret ditt"
+ "Dette engangstrinnet sikrer at Meldinger leverer gruppemeldingene dine på riktig måte."
+ "Telefonnummer"
+ "Slett alle meldinger med medier"
+ "Slett meldinger som er eldre enn %s"
+ "Slett meldinger som er eldre enn %s automatisk"
+ "Ignorer"
+ "Vil du slette alle meldinger med media?"
+ "Vil du slette meldinger som er eldre enn %s?"
+ "Vil du slette meldinger som er eldre enn %s og slå av automatisk sletting?"
+ "%s sa"
+ "Du sa"
+ "Melding fra %s:"
+ "Du sendte en melding"
+ "Sender ..."
+ "Ikke sendt. Trykk for å prøve på nytt."
+ "Ikke sendt. Prøver på nytt …"
+ "Send på nytt eller slett"
+ "Ring til alarmsentralen. Tekstmeldingen kunne ikke leveres for øyeblikket."
+ "Mislykket"
+ "Ny MMS-melding for nedlasting"
+ "Ny MMS-melding"
+ "Kan ikke laste ned"
+ "Trykk for å prøve på nytt"
+ "Trykk for å laste ned"
+ "Last ned eller slett"
+ "Laster ned …"
+ "Meldingen er utløpt eller ikke tilgjengelig"
+ "størrelse: %1$s, utløper: %2$s"
+ "Kan ikke sende. Mottaker er ikke gyldig."
+ "Tjenesten er ikke aktivert på nettverket"
+ "Kunne ikke sende på grunn av et nettverksproblem"
+ "Meldingen er utløpt eller ikke tilgjengelig"
+ "(Mangler emne)"
+ "Ukjent avsender"
+ "Levert"
+ "Kunne ikke laste ned meldingen %1$s fra %2$s."
+ "Databasehandlingen kunne ikke fullføres på grunn av lite minne."
+ "Meldingen er ikke sendt"
+ "Enkelte meldinger er ikke sendt i Meldinger"
+
+ %d meldinger i %d samtaler
+ %d meldinger i én samtale
+
+ "Meldingen er ikke lastet ned"
+ "Enkelte meldinger er ikke lastet ned i Meldinger"
+
+ %d meldinger i %d samtaler
+ %d meldinger i én samtale
+
+ "Melding til %1$s ble ikke sendt"
+ "Ring til alarmsentralen. Tekstmeldingen til %1$s kunne ikke leveres for øyeblikket."
+
+ %d nye meldinger
+ Ny melding
+
+ "Start"
+ "Kameraet er ikke tilgjengelig"
+ "Kameraet er ikke tilgjengelig"
+ "Videoinnspilling er ikke tilgjengelig"
+ "Kan ikke lagre media"
+ "Kan ikke ta bilde"
+ "Tilbake"
+ "Arkivert"
+ "Slett"
+ "Arkivér"
+ "Fjern fra arkivet"
+ "Slå av varsler"
+ "Slå på varsler"
+ "Legg til kontakt"
+ "Last ned"
+ "Send"
+ "Slett"
+ "Vil du slette denne meldingen?"
+ "Denne handlingen kan ikke angres."
+ "Slett"
+
+ Vil du slette disse samtalene?
+ Vil du slette denne samtalen?
+
+ "Slett"
+ "Avbryt"
+ "Til"
+ "Velg flere bilder"
+ "Bekreft utvalget"
+ "+%d"
+ "Kan ikke ta opp lyd. Prøv på nytt."
+ "Kan ikke spille av lyd. Prøv på nytt."
+ "Kunne ikke lagre lydfil. Prøv på nytt."
+ "Berør og hold nede"
+ ", "
+ " "
+ ": "
+ " "
+ "Bilde"
+ "Lydklipp"
+ "Video"
+ "Kontaktkort"
+ "Last ned"
+ "Svar via SMS"
+ "Svar via MMS"
+ "Svar"
+
+ %d deltakere
+ %d deltaker
+
+ "Meg"
+ "Kontakten er blokkert og arkivert"
+ "Kontakt ublokkerte & uarkiverte"
+ "%d er arkivert"
+ "%d er fjernet fra arkivet"
+ "Varsler er slått av"
+ "Varsler er slått av"
+ "Alt klart. Trykk på Send én gang til."
+ "Meldinger er nå angitt som standard SMS-app."
+
+ Forkast vedlegg
+ Forkast vedlegget
+
+ "Lydvedlegg"
+ "Spill av lydvedlegg"
+ "Sett på pause"
+ "Melding fra %s: %s."
+ "Mislykket melding fra %s: %s. Tidspunkt: %s."
+ "Melding fra %s: %s. Tidspunkt: %s."
+ "Usendt melding til %s: %s. Tidspunkt: %s."
+ "Sender melding til %s: %s. Tidspunkt: %s."
+ "Mislykket melding til %s: %s. Tidspunkt: %s."
+ "Melding til %s: %s. Tidspunkt: %s."
+ "Mislykket melding fra %s: %s. Tidspunkt: %s. %s."
+ "Melding fra %s: %s. Tidspunkt: %s. %s."
+ "Usendt melding til %s: %s. Tidspunkt: %s."
+ "Sender melding til %s: %s. Tidspunkt: %s."
+ "Mislykket melding til %s: %s. Tidspunkt: %s."
+ "Melding til %s: %s. Tidspunkt: %s."
+ "Meldingen ble ikke sendt. Trykk for å prøve på nytt."
+ "Samtale med %s"
+ "Slett emnet"
+ "Ta video"
+ "Ta et stillbilde"
+ "Ta bilde"
+ "Start et videoopptak"
+ "Bytt til fullskjermkamera"
+ "Bytt mellom for- og baksidekamera"
+ "Stopp opptak og legg ved video"
+ "Slutt å filme"
+ "Bilder i Meldinger"
+
+ %d bilder er lagret i albumet «%s»
+ %d bilde er lagret i albumet «%s»
+
+
+ %d videoer er lagret i albumet «%s»
+ %d video er lagret i albumet «%s»
+
+
+ %d tillegg er lagret i albumet «%s»
+ %d tillegg er lagret i albumet «%s»
+
+
+ %d tillegg er lagret i «Nedlastinger»
+ %d tillegg er lagret i «Nedlastinger»
+
+
+ %d vedlegg er lagret
+ %d vedlegg er lagret
+
+
+ Kunne ikke lagre %d vedlegg
+ Kunne ikke lagre %d vedlegg
+
+ "MMS-vedlegget er lagret"
+ "Innstillinger"
+ "Arkivert"
+ "Lukk"
+ "MMS"
+ "Avansert"
+ "Feilsøk"
+ "Varsler"
+ "Lyd"
+ "Stille"
+ "Vibrer"
+ "Blokkert"
+ "Leveringsrapporter for SMS"
+ "Be om leveringsrapport for hver SMS du sender"
+ "Automatisk henting"
+ "Hent MMS-meldinger automatisk"
+ "Automatisk henting under roaming"
+ "Hent MMS automatisk ved romaning"
+ "Gruppemeldinger"
+ "Bruk MMS for å sende én melding med flere mottakere"
+ "Standard SMS-app"
+ "Standard SMS-app"
+
+
+ "Telefonnummeret ditt"
+ "Ukjent"
+ "Lyder for utgående meldinger"
+ "Dump SMS"
+ "Dump rådata fra mottatte SMS-er i en ekstern lagringsfil"
+ "Dump MMS"
+ "Dump rådata fra mottatte MMS-er i en ekstern lagringsfil"
+ "Trådløse varsler"
+ "Meldingsalternativer"
+ "Kopiér teksten"
+ "Se detaljer"
+ "Slett"
+ "Videresend"
+ "Meldingsinformasjon"
+ "Type: "
+ "SMS"
+ "Bildemelding"
+ "Fra: "
+ "Til: "
+ "Sendt: "
+ "Mottatt: "
+ "Emne: "
+ "Størrelse: "
+ "Prioritet: "
+ "SIM-kort: "
+ "Høy"
+ "Vanlig"
+ "Lav"
+ "SIM-kort %s"
+ "Skjult avsenderadresse"
+ "Meldingen kan ikke sendes mens vedleggene lastes inn."
+ "Kan ikke laste inn vedlegg. Prøv på nytt."
+ "Nettverket er ikke klart. Prøv på nytt."
+ "Slett teksten"
+ "Veksle mellom å skrive inn tekst og tall"
+ "Legg til flere deltakere"
+ "Bekreft deltakere"
+ "Start ny samtale"
+ "Velg dette elementet"
+ "Spill av videoen"
+ "Personer-appen og alternativer"
+ "Feilsøk"
+ "Personer-appen og alternativer"
+ "Generelt"
+ "Folk i denne samtalen"
+ "Start en samtale"
+ "Send melding"
+ "Send melding<br/><small>fra %s</small>"
+
+ Send bilder
+ Send bilde
+
+
+ Send lydklipp
+ Send lydklipp
+
+
+ Send videoer
+ Send video
+
+
+ Send kontaktkort
+ Send kontaktkort
+
+
+ Send vedlegg
+ Send vedlegg
+
+
+ %d vedlegg er klare til å sendes
+ Ett vedlegg er klart til å sendes
+
+ "Send tilbakemelding"
+ "Se i Google Play-butikken"
+ "Versjonsinformasjon"
+ "Versjon %1$s"
+ "Lisenser for åpen kildekode"
+ "Varsler"
+ "Vedleggsgrensen er nådd"
+ "Kunne ikke laste inn vedlegg."
+ "Vil du legge til nummeret i kontakter?"
+ "Legg til kontakten"
+ "Emne"
+ "Emne: "
+ "%s%s"
+ "Laster inn kontaktkortet"
+ "Kunne ikke laste kontaktkort"
+ "Se kontaktkortet"
+
+ %d kontakter
+ %d kontakt
+
+ "Kontaktkort"
+ "Fødselsdag"
+ "Notater"
+ "Videresend meldingen"
+ "Svar"
+ "1"
+ "+%d"
+ "SMS er deaktivert"
+ "For å sende meldinger, angi Meldinger som standard SMS-app"
+ "Angi Meldinger som standard SMS-app"
+ "Endre"
+ "For å motta meldinger, angi Meldinger som standard SMS-app"
+ "Ingen foretrukne SIM-kort er valgt for å sende SMS-meldinger"
+ "Denne appen er ikke tillatt av enhetseieren."
+ "OK"
+ "For mange deltakere i en samtale"
+
+ Ugyldige kontakter
+ Ugyldig kontakt
+
+ "Kunne ikke laste inn kamerabilde"
+ "Du: "
+ "%s: "
+ "Utkast"
+ "Når du starter en ny samtale, vises den her"
+ "Arkiverte samtaler vises her"
+ "Laster inn samtaler ..."
+ "Bilde"
+ "Lydklipp"
+ "Instream-video"
+ "Kontaktkort"
+ "MMS"
+ "Angre"
+ "Prøv på nytt"
+ "Skriv inn et kontaktnavn eller -telefonnummer for å starte en ny melding"
+ "Blokkér"
+ "Blokkér %s"
+ "Opphev blokkeringen av %s"
+ "Vil du blokkere %s?"
+ "Du fortsetter å motta meldinger fra dette nummeret, men blir ikke lenger varslet. Denne samtalen blir arkivert."
+ "Blokkerte kontakter"
+ "OPPHEV BLOKKERING"
+ "Blokkerte kontakter"
+ "Velg et bilde fra dokumentbiblioteket"
+ "Sender meldingen"
+ "Meldingen er sendt"
+ "Mobildata er slått av. Sjekk innstillingene dine."
+ "Kan ikke sende meldinger i flymodus"
+ "Kan ikke sende meldingen"
+ "Meldingen er nedlastet"
+ "Mobildata er slått av. Sjekk innstillingene dine."
+ "Kan ikke laste ned meldinger i flymodus"
+ "Meldingen kunne ikke lastes ned"
+ "Null"
+ "Én"
+ "To"
+ "Tre"
+ "Fire"
+ "Fem"
+ "Seks"
+ "Sju"
+ "Åtte"
+ "Ni"
+ "Kan ikke sende meldinger med %1$s – feil %2$d"
+ "Kan ikke sende meldinger med ukjent operatør – feil %1$d"
+ "V.send: %s"
+ "Meldingen er ikke sendt: Tjenesten er ikke aktivert på nettverket"
+ "Meldingen ble ikke sendt: ugyldig måladresse"
+ "Meldingen ble ikke sendt: ugyldig melding"
+ "Meldingen ble ikke sendt: innholdet støttes ikke"
+ "Meldingen ble ikke sendt: meldingen støttes ikke"
+ "Meldingen ble ikke sendt: Den var for stor."
+ "Ny melding"
+ "Se"
+ "Bilde"
+ "Kunne ikke finne en passende app"
+ "Fjern mottakeren"
+ "Ny melding"
+ "Avbryt"
+ "Rediger tilgangspunkt"
+ "Ikke angitt"
+ "Navn"
+ "APN-navn"
+ "MMSC"
+ "Proxy-tjener for MMS"
+ "MMS-port"
+ "MCC"
+ "MNC"
+ "APN-type"
+ "Slett APN"
+ "Ny APN"
+ "Lagre"
+ "Forkast"
+ "Navnefeltet kan ikke være tomt."
+ "APN kan ikke være tomt."
+ "MCC-feltet må bestå av tre siffer."
+ "MNC-feltet må bestå av to eller tre siffer."
+ "Gjenoppretter standard APN-innstillinger."
+ "Tilbakestill til standard"
+ "Tilbakestilling av standard APN-innstillinger er fullført."
+ "Uten navn"
+ "Navn på tilgangspunkt"
+ "APN-er"
+ "Ny APN"
+ "Innstillingene for navn på tilgangspunkt er ikke tilgjengelig for denne brukeren"
+ "Vil du kopiere til utklippstavlen?"
+ "Kopiér"
+ "til %s"
+ "Generelt"
+ "Avansert"
+ "Generelle innstillinger"
+ "Avanserte innstillinger"
+ "«%s»-SIM-kort"
+ "Send SMS-meldinger til alle mottakere. Bare du mottar svarene."
+ "Send én enkelt MMS til alle mottakere"
+ "Ukjent nummer"
+ "Ny melding"
+ "Ny melding."
+ "SIM-kortvelger"
+ "%1$s er valgt – SIM-kortvelger"
+ "Rediger emne"
+ "Velg SIM-kort eller rediger emnet"
+ "Trykk og hold inne for å ta opp lyd"
+ "Start ny samtale"
+ "Meldinger"
+ "Samtaleliste"
+ "Meldinger"
+ "Ny melding"
+ "Samtaleliste"
+ "Laster inn samtaler"
+ "Laster inn e-postmeldinger"
+ "Se flere samtaler"
+ "Se flere e-poster"
+ "Samtalen er slettet"
+ "Samtalen er slettet. Trykk for å se en annen samtale i Meldinger"
+ "Blokkert"
+ "Blokkeringen er opphevet"
+ "Lite lagringsplass ledig. Noen data kan gå tapt."
+ "Velg vedlegg"
+ "Bekreft utvalget"
+ "%d er valgt"
+ "Fjern ett eller flere vedlegg og prøv på nytt."
+ "Du kan prøve å sende meldingen din, men det er ikke sikkert at den kommer frem med mindre du fjerner ett eller flere vedlegg."
+ "Du kan bare sende én video per melding. Fjern overflødige videoer og prøv igjen."
+ "Meldinger kunne ikke laste inn vedlegget."
+ "Send likevel"
+ "Kunne ikke starte samtalen"
+ "%1$s (%2$s)"
+ "%s er valgt"
+
diff --git a/res/values-ne-rNP/arrays.xml b/res/values-ne-rNP/arrays.xml
new file mode 100644
index 0000000..614436d
--- /dev/null
+++ b/res/values-ne-rNP/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "शीर्षक नभएको"
+ "विषय छैन"
+
+
+ "हो"
+ "हैन"
+ "ठीक छ"
+ "हाहा"
+ "धन्यवाद"
+ "म सहमत छु"
+ "राम्रो"
+ "मेरो बाटोमा"
+ "ठीक छ, तपाईंलाई पछिको लागि मलाई अनुमति दिनुहोस्"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..c9e30e6
--- /dev/null
+++ b/res/values-ne-rNP/strings.xml
@@ -0,0 +1,521 @@
+
+
+
+
+ "सन्देश पठाइदै"
+ "सन्देश पठाइदै"
+ "कुराकानी चयन गर्नुहोस्"
+ "सेटिङ्हरू"
+ "सन्देश पठाउनुहोस्"
+ "एक अनुलग्नक थप गर्नुहोस्"
+ "मद्दत"
+ "स्वागतम"
+ "छोड्नुहोस्"
+ "अर्को >"
+ "अर्को"
+ "बाहिर"
+ "सेटिङहरू >"
+ "सेटिङहरू"
+ "सन्देश प्रवाहलाई SMS, फोन र सम्पर्क ठेगानाहरूमा अनुमतिको आवश्यक पर्छ।"
+ "तपाईँ अनुमतिहरूलाई सेटिङ अनुप्रयोगहरू > सन्देश प्रवाह > अनुमतिहरूमा परिवर्तन गर्न सक्नु हुनेछ।"
+ "तपाईँ अनुमतिहरूलाई सेटिङ अनुप्रयोगहरू, सन्देश प्रवाह, अनुमतिहरूमा परिवर्तन गर्न सक्नु हुनेछ।"
+ "नियमित"
+ "सबै सम्पर्कहरू"
+ "%s मा पठाउनुहोस्"
+ "तस्बिर वा भिडियो लिनुहोस्"
+ "यस उपकरणबाट तस्बिरहरू छान्नुहोस्"
+ "ध्वनि रेकर्ड गर्नुहोस्"
+ "फोटो छान्नुहोस्"
+ "यस मिडिया चयन गरिएको छ।"
+ "यस मिडियाको चयन हटाइएको छ।"
+ "%d चयन गरियो"
+ "छवि %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "छवि"
+ "ध्वनि रेकर्ड गर्नुहोस्"
+ "साझेदारी गर्नुहोस्"
+ "अहिले भर्खर"
+ "अब"
+
+ %d मिनेट
+ %d मिनेट
+
+
+ %d घन्टा
+ %d घन्टा
+
+
+ %d दिन
+ %d दिन
+
+
+ %d हप्ता
+ एक हप्ता
+
+
+ %d महिना
+ एक महिना
+
+
+ %d वर्ष
+ एक वर्ष
+
+ "वर्ग ० सन्देश"
+ "सुरक्षित गर्नुहोस्"
+ "यन्त्रमा ठाउँ कम छ। ठाउँ खाली गर्न सन्देश प्रवाहले पुराना सन्देशहरूलाई स्वचालित रूपमा मेट्ने छ।"
+ "भण्डारण ठाउँ सकिँदै छ"
+ "तपाईँको यन्त्रमा थप ठाउँ उपलब्ध नभएसम्म सन्देश प्रवाहले सन्देश पठाउन वा प्राप्त नगर्न सक्छ।"
+ "SMS भण्डारणमा कमी। तपाईँले सन्देशहरु हटाउनु पर्नेहुन्छ।"
+ "आफ्नो फोन नम्बर पुष्टि गर्नुहोस्"
+ "यो एक पटके चरणले सन्देश प्रवाहले तपाईँको समूह सन्देशहरू उचित रूपमा डेलिभर गर्ने छ भन्ने सुनिश्चित गर्ने छ।"
+ "फोन नम्बर"
+ "मीडियाको साथमा सबै सन्देशहरु मेटाउनुहोस्"
+ "%s भन्दा पुराना सन्देशहरुलाई मेट्नुहोस्"
+ "%s भन्दा पुरानो सन्देशहरू स्वत: मेट्नुहोस्"
+ "बेवास्ता गर्नुहोस्"
+ "मिडिया भएको सन्देशहरू मेट्ने?"
+ "%s भन्दा पुरानो सन्देशहरू मेट्ने?"
+ "%s भन्दा पुरानो सन्देशहरू मेटाउनुहुन्छ र स्वचालित-मेट्ने सक्षम गर्नुहुन्छ?"
+ "%s ले भन्नुभयो"
+ "तपाईंले भन्नुभयो"
+ "%s बाट सन्देश"
+ "तपाईंले एक सन्देश पठाउनुभयो"
+ "पठाउँदै..."
+ "पठाइएको छैन। पुन: प्रयास गर्न छुनुहोस्।"
+ "पठाइएको छैन। पुन: प्रयास गर्दै ..."
+ "पुन: पठाउनुहोस् वा मेट्नुहोस्"
+ "कृपया आकस्मिक सेवाहरूमा आवाज कल गर्नुहोस्। तपाईंको पाठ सन्देश यो समयमा डेलिभर हुन सक्दैन।"
+ "विफल भयो"
+ "डाउनलोड गर्न नयाँ MMS सन्देश"
+ "नयाँ MMS सन्देश"
+ "डाउनलोड गर्न सकिएन"
+ "पुनः प्रयास गर्न छुनुहोस्"
+ "डाउनलोड गर्न छुनुहोस्"
+ "डाउनलोड वा मेट्नुहोस्"
+ "डाउनलोड हुँदै..."
+ "सन्देशको अवधि सकियो वा उपलब्ध छैन"
+ "आकार: %1$s, समाप्ति: %2$s"
+ "पठाउन सकिएन। प्रापक मान्य छैन।"
+ "नेटवर्कमा सेवा सक्रिय छैन"
+ "नेटवर्कको समस्याको कारण पठाउन सकिएन"
+ "सन्देशको अवधि सकियो वा उपलब्ध छैन"
+ "(कुनै विषय छैन)"
+ "अज्ञात प्रेषक"
+ "पुर्याइयो"
+ "%2$s बाट सन्देश %1$s डाउनलोड गर्न सकिएन।"
+ "कम मेमोरीका कारण डेटाबेस कार्य पुरा गर्न सकिएन।"
+ "सन्देश पठाइएन"
+ "केही सन्देशहरू सन्देश प्रवाहमा पठाइएनन्"
+
+ %d वार्तालापमा %d सन्देशहरू
+ एउटा वार्तालापमा %d सन्देशहरू
+
+ "सन्देश डाउनलोड भएन"
+ "सन्देशहरू सन्देश प्रवाहमा डाउनलोड भएनन्"
+
+ %d वार्तालापमा %d सन्देशहरू
+ एउटा वार्तालापमा %d सन्देशहरू
+
+ "%1$s मा सन्देश पठाइएन"
+ "कृपया आकस्मिक सेवाहरूमा आवाज कल गर्नुहोस्। %1$s मा तपाईंको पाठ सन्देश यो समयमा डेलिभर हुन सक्दैन।"
+
+ %d नयाँ सन्देशहरू
+ नयाँ सन्देश
+
+ "सुरु गर्नुहोस्"
+ "क्यामेरा उपलब्ध छैन"
+ "क्यामेरा उपलब्ध छैन"
+ "भिडियो क्याप्चर उपलब्ध छैन"
+ "मिडिया बचत गर्न सकिँदैन"
+ "तस्वीर लिन सक्दैन"
+ "पछाडि"
+ "अभिलेख बनाइयो"
+ "मेटाउनुहोस्"
+ "अभिलेख"
+ "अभिलेखबाट निकाल्नुहोस्"
+ "सूचनाहरू बन्द गर्नुहोस्"
+ "सूचनाहरू सुचारु गर्नुहोस्"
+ "सम्पर्क थप्नुहोस्"
+ "डाउनलोड गर्नुहोस्"
+ "पठाउनुहोस्"
+ "मेटाउनुहोस्"
+ "यस सन्देश मेटाउने हो?"
+ "यो कार्य पूर्ववत् पार्न सकिँदैन।"
+ "मेटाउनुहोस्"
+
+ यी वार्तालापहरू मेटाउने हो?
+ यो वार्तालाप मेटाउने हो?
+
+ "मेटाउनुहोस्"
+ "रद्द गर्नुहोस्"
+ "प्रापक"
+ "बहु तस्बिर चयन गर्नुहोस्"
+ "चयन यकिन गर्नुहोस्"
+ "+%d"
+ "अडियो रेकर्ड गर्न सकिँदैन। पुन: प्रयास गर्नुहोस्।"
+ "अडियो बजाउन सकिएन। पुन: प्रयास गर्नुहोस्।"
+ "अडियो सुरक्षित गर्न सकेन। फेरी प्रयास गर्नुहोस्।"
+ "छुनुहोस् र होल्ड गर्नुहोस्"
+ ", "
+ " "
+ ": "
+ " "
+ "चित्र"
+ "ध्वनि क्लिप"
+ "भिडियो"
+ "सम्पर्क कार्ड"
+ "डाउनलोड गर्नुहोस्"
+ "SMS मार्फत जवाफ दिनुहोस्"
+ "MMS मार्फत जवाफ दिनुहोस्"
+ "जवाफ पठाउनुहोस्"
+
+ %d सहभागीहरू
+ %d सहभागी
+
+ "म"
+ "सम्पर्क अवरुद्ध; अभिलेख राखियो"
+ "सम्पर्क खुल्ला गरियो & अभिलेख हटाइयो"
+ "%dअभिलेख गरियो"
+ "%d अभिलेख हटाउनुहोस्"
+ "सूचनाहरू निष्क्रिय पारिए"
+ "सूचनाहरू सक्रिय पारिए"
+ "सबै ठीक छ। पुन: पठाउन छुनुहोस्।"
+ "सन्देश प्रवाह सफलतापूर्वक पूर्वनिर्धारित SMS अनुप्रयोगको रूपमा सेट भयो।"
+
+ संलग्नकहरू खारेज गर्नुहोस्
+ संलग्नक खारेज गर्नुहोस्
+
+ "अडियो संलग्नक"
+ "अडियो संलग्नक प्ले गर्नुहोस्"
+ "पज गर्नुहोस्"
+ "%s बाट प्राप्त सन्देश: %s।"
+ "%s बाट विफल सन्देश: %s. समय: %s"
+ "%s बाट सन्देश: %s. समय: %s"
+ "%s मा नपठाइएको सन्देश: %s. समय: %s"
+ "%s मा सन्देश पठाउँदै: %s. समय: %s"
+ "%s मा विफल सन्देश: %s. समय: %s"
+ "%s मा सन्देश: %s. समय: %s"
+ "%s बाट विफल सन्देश: %s. समय: %s. %s"
+ "%s बाट सन्देश: %s. समय: %s. %s"
+ "%s मा नपठाइएको सन्देश: %s. समय: %s"
+ "%s मा सन्देश पठाउँदै: %s. समय: %s"
+ "%s मा विफल सन्देश: %s. समय: %s"
+ "%s मा सन्देश: %s. समय: %s"
+ "असफल सन्देश। पुन: प्रयास गर्न छुनुहोस्।"
+ "%s सँग कुराकानी"
+ "विषय मेट्नुहोस्"
+ "भिडियो खिच्नुहोस्"
+ "स्थिर छाँया लिदै"
+ "फोटो लिनुहोस्"
+ "भिडियो रेकर्ड सुरु गर्नुहोस्"
+ "पूरा पर्दा क्यामेरा खोल्नुहोस्"
+ "अगाडि र पछाडि क्यामेरा बीच बदल्नुहोस्"
+ "भिडियो रेकर्ड गर्न र संलग्न रोक्नुहोस्"
+ "भिडियो रेकर्ड रोक्नुहोस्"
+ "सन्देश प्रवाह तस्बिरहरू"
+
+ %d तस्बिरहरू \"%s \" एल्बममा सुरक्षित गरियो
+ %d तस्बिर \"%s \" एल्बममा सुरक्षित गरियो
+
+
+ %d भिडियोहरू \"%s\" एल्बममा सुरक्षित गरियो
+ %d भिडियो \"%s\" एल्बममा सुरक्षित गरियो
+
+
+ %d संलग्नकहरू \" %s \" एल्बममा सुरक्षित गरियो
+ %d संलग्नक \" %s \" एल्बममा सुरक्षित गरियो
+
+
+ %d संलग्नकहरू \"डाउनलोडहरू\" मा सुरक्षित गरियो
+ %d संलग्नक \"डाउनलोडहरू\" मा सुरक्षित गरियो
+
+
+ %d संलग्नकहरू सुरक्षित गरियो
+ %d संलग्नक सुरक्षित गरियो
+
+
+ %d संलग्नकहरू सुरक्षित गर्न सकेन
+ %d संलग्नक सुरक्षित गर्न सकेन
+
+ "संलग्न MMS सुरक्षित गरियो"
+ "सेटिङहरू"
+ "अभिलेख बनाइयो"
+ "बन्द गर्नुहोस्"
+ "MMS"
+ "उन्नत"
+ "डिबग"
+ "सूचनाहरू"
+ "आवाज"
+ "मौन"
+ "कम्पन गर्नुहोस्"
+ "अवरूद्ध गरियो"
+ "SMS वितरण प्रतिवेदनहरू"
+ "तपाईँले पठाउनु हुने हरेक SMS को लागि पुगेको खबर अनुरोध गर्नुहोस्"
+ "स्वत:प्राप्ति"
+ "MMS सन्देशहरु स्वत: रूपमा पुनः प्राप्त गर्नुहोस्"
+ "रोमिङ स्वतः पुनः प्राप्ति"
+ "रोमिङमा हुँदा MMS स्वचालित रूपमा प्राप्त गर्नुहोस्"
+ "समूहिक सन्देश पठाइँदै"
+ "जब त्यहाँ बहुप्राप्तकर्ताहरू हुन्छन् तब सन्देश पठाउनको लागि MMS प्रयोग गर्नुहोस्।"
+ "पूर्वनिर्धारित SMS अनुप्रयोग"
+ "पूर्वनिर्धारित SMS अनुप्रयोग"
+
+
+ "तपाईँको फोन नम्बर"
+ "अज्ञात"
+ "बाहिर जाने सन्देशका लागि ध्वनिहरू"
+ "SMS फाल्नुहोस्"
+ "प्राप्त भएको MMS अप्रशोधित डेटा बाह्य भण्डारण फाइलमा फाल्नुहोस्"
+ "MMS फाल्दिनुहोस्"
+ "प्राप्त भएको MMS अप्रशोधित डेटा बाह्य भण्डारण फाइलमा फाल्नुहोस्"
+ "ताररहित सतर्कताहरू"
+ "सन्देश विकल्पहरू"
+ "पाठ प्रतिलिपि गर्नुहोस्"
+ "विवरणहरू हेर्नुहोस्"
+ "मेटाउनुहोस्"
+ "फर्वार्ड गर्नुहोस्"
+ "सन्देश विवरणहरू"
+ "प्रकार: "
+ "पाठ सन्देश"
+ "मल्टिमिडिया सन्देश"
+ "प्रेषक: "
+ "प्रापक: "
+ "पठाइयो: "
+ "प्राप्त: "
+ "विषय: "
+ "आकार: "
+ "प्राथमिकता: "
+ "SIM: "
+ "उच्च"
+ "सामान्य"
+ "कम"
+ "SIM %s"
+ "प्रेषकको ठेगाना लुकेको"
+ "संलग्नहरू लोड गर्दा सन्देश पठाउन सक्दैन।"
+ "संलग्नक लोड गर्न सकिएन। पुन: प्रयास गर्नुहोस्।"
+ "नेटवर्क तयार छैन। पुन: प्रयास गर्नुहोस्।"
+ "पाठ मेट्नुहोस्"
+ "पाठ र संख्या बीच प्रविष्टि गर्न स्विच गर्नुहोस्"
+ "थप सहभागी थप्नुहोस्"
+ "सहभागीहरूको पुष्टि गर्नुहोस्"
+ "नयाँ कुराकानी सुरू गर्नुहोस्"
+ "यो वस्तु चयन गर्नुहोस्"
+ "भिडियो चलाउनुहोस्"
+ "मानिस र विकल्पहरू"
+ "डिबग"
+ "मानिसहरू र विकल्पहरु"
+ "सामान्य"
+ "यस कुराकानीमा मानिसहरू"
+ "कल गर्नुहोस्"
+ "सन्देश पठाउनुहोस्"
+ "सन्देश पठाउनुहोस्<br/><small>%s</small> बाट"
+
+ तस्बिरहरू पठाउनुहोस्
+ तस्बिर पठाउनुहोस्
+
+
+ अडियोहरू पठाउनुहोस्
+ अडियो पठाउनुहोस्
+
+
+ भिडियोहरू पठाउनुहोस्
+ भिडियो पठाउनुहोस्
+
+
+ सम्पर्क कार्डहरू पठाउनुहोस्
+ सम्पर्क कार्ड पठाउनुहोस्
+
+
+ संलग्नक पठाउनुहोस्
+ संलग्नक पठाउनुहोस्
+
+
+ %d संलग्नकहरू पठाउनको लागि तयार
+ एउटा संलग्नक पठाउनको लागि तयार
+
+ "प्रतिक्रिया पठाउनुहोस्"
+ "Google Play Store मा हेर्नुहोस्"
+ "संस्करण जानकारी"
+
+
+
+ "खुला स्रोत इजाजतपत्रहरू"
+ "अधिसूचनाहरू"
+ "संलग्नकको सीमा पुग्यो"
+ "संलग्नक लोड गर्न असफल।"
+ "सम्पर्कहरूमा थप्नुहुन्छ?"
+ "सम्पर्क थप्नुहोस्"
+ "विषय"
+ "विषय: "
+ "%s%s"
+ "सम्पर्क कार्ड लोड गर्दै"
+ "सम्पर्क कार्ड लोड गर्न सकिएन"
+ "सम्पर्क कार्ड हेर्नुहोस्"
+
+ %d सम्पर्कहरू
+ %d सम्पर्क
+
+ "सम्पर्क कार्डहरू"
+ "जन्मदिन"
+ "टिप्पणीहरू"
+ "सन्देश फर्वार्ड गर्नुहोस्"
+ "जवाफ पठाउनुहोस्"
+ "+१"
+ "+%d"
+ "SMS असक्षम गरियो"
+ "पठाउनका लागि सन्देश प्रवाहलाई पूर्वनिर्धारित SMS अनुप्रयोगको रूपमा सेट गर्नुहोस्"
+ "सन्देश प्रवाहलाई पूर्वनिर्धारित SMS अनुप्रयोगको रूपमा सेट गर्नुहोस्"
+ "परिवर्तन गर्नुहोस्"
+ "सन्देशहरू प्राप्त गर्न, सन्देश प्रवाहलाई पूर्वनिर्धारित SMS अनुप्रयोगको रूपमा सेट गर्नुहोस्"
+ "SMS सन्देशहरू पठाउनको लागि मान्यता प्राप्त SIM चयन गरिएको छैन।"
+ "यो अनुप्रयोग उपकरण मालिकद्वारा अनुमति छैन।"
+ "ठीक छ"
+ "कुराकानीमा धेरै सहभागीहरू"
+
+ अमान्य सम्पर्कहरू
+ अमान्य सम्पर्क
+
+ "क्यामेराको तस्बिर लोड गर्न सकिएन"
+ "तपाईँ: "
+ "%s: "
+ "मस्यौदा"
+ "तपाईँ नयाँ कुराकानी सुरु भएपछि, तपाईँ यसलाई यहाँ सूचीबद्ध देख्नुहुने छ"
+ "अभिलेख कुराकानी यहाँ देखा पर्नेछ"
+ "कुराकानीहरू लोड हुँदै..."
+ "तस्बिर"
+ "अडियो क्लिप"
+ "भिडियो"
+ "सम्पर्क कार्ड"
+ "MMS"
+ "अनडु गर्नुहोस्"
+ "पुनःप्रयास गर्नुहोस्"
+ "सम्पर्क नाम वा फोन नम्बर प्रविष्ट गरी नयाँ सन्देश सुरु गर्नुहोस्"
+ "रोक्नुहोस्"
+ "अवरुद्ध %s"
+ "अनब्लक %s"
+ "अवरुद्ध गर्नुस् %s?"
+ "तपाईँ यो नम्बरबाट सन्देश प्राप्त गरिरहनु हुनेछ तर तपाईँलाई सूचीत गरिने छैन। यो कुराकानीलाई संग्रह गरिने छ।"
+ "अवरुद्ध सम्पर्कहरू"
+ "UNBLOCK"
+ "अवरुद्ध सम्पर्कहरू"
+ "कागजात लाइब्रेरीबाट तस्बिर छान्नुहोस्"
+ "सन्देश पठाउँदै"
+ "सन्देश पठाइयो"
+ "सेलुलर डेटा बन्द छ। आफ्नो सेटिङ जाँच गर्नुहोस्।"
+ "हवाइजहाज मोडमा सन्देश पठाउन सक्नुहुन्न्"
+ "सन्देश पठाउन सकिएन"
+ "सन्देश डाउनलोड गरियो"
+ "सेलुलर डाटा बन्द गरिएको छ। आफ्नो सेटिङहरू जाँच्नुहोस्।"
+ "हवाइजहाज मोडमा सन्देशहरू डाउनलोड गर्न सक्दैन"
+ "सन्देश डाउनलोड गर्न सकिएन"
+ "शून्य"
+ "एक"
+ "दुई"
+ "तीन"
+ "चार"
+ "पाँच"
+ "छ"
+ "सात"
+ "आठ"
+ "नौ"
+ "%1$s मार्फत सन्देश पठाउन सक्दैन, त्रुटि %2$d"
+ "अज्ञात वाहकमार्फत सन्देश पठाउन सक्दैन, त्रुटि %1$d"
+ "फर्वाड गर्नुहोस्: %s"
+ "सन्देश पठाइएको छैन: सञ्जालमा सेवा सक्रिय छैन"
+ "सन्देश पठाइएको छैन: अवैध गन्तव्य ठेगाना"
+ "सन्देश पठाइएको छैन: अमान्य सन्देश"
+ "सन्देश पठाइएको छैन: असमर्थित सामाग्री"
+ "सन्देश पठाइएको छैन: असमर्थित सन्देश"
+ "सन्देश पठाइएन: निकै ठूलो छ"
+ "नयाँ सन्देश"
+ "हेर्नुहोस्"
+ "तस्बिर"
+ "उपयुक्त अनुप्रयोग फेला पार्न सकिएन"
+ "प्राप्तकर्ता हटाउनुहोस्"
+ "नयाँ सन्देश"
+ "रद्द गर्नुहोस्"
+ "पहुँच बिन्दु सम्पादन गर्नुहोस्"
+ "सेट गरेको छैन"
+ "नाम"
+ "APN"
+ "MMSC"
+ "MMS प्रोक्सी"
+ "MMS पोर्ट"
+ "MCC"
+ "MNC"
+ "APN प्रकार"
+ "APN मेटाउनुहोस्"
+ "नयाँ APN"
+ "सुरक्षित गर्नुहोस्"
+ "त्याग्नुहोस्"
+ "नाम क्षेत्र खाली हुन सक्दैन।"
+ "APN खाली हुन सक्दैन।"
+ "MCC क्षेत्र कम्तिमा ३ अङ्कको हुनु पर्छ।"
+ "MNC क्षेत्रमा २ वा ३ अंकहरू हुनु पर्दछ।"
+ "पूर्वनिर्धारित APN सेटिङ्हरू पुनःप्राप्त गर्दै।"
+ "पूर्वनिर्धारितमा पुनःसेट गर्नुहोस्"
+ "पूर्वनिर्धारित APN सेटिङ्हरू पुनः सेट गर्ने काम पूरा भयो।"
+ "शीर्षक विहिन"
+ "पहुँच बिन्दु नामहरू"
+ "APNs"
+ "नयाँ APN"
+ "पहुँच बिन्दु नामको सेटिङ्हरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"
+ "क्लिपबोर्डमा प्रतिलिपि गर्ने?"
+ "प्रतिलिपि गर्नुहोस्"
+ "%s लाई"
+ "सामान्य"
+ "उन्नत"
+ "साधारण सेटिङ्हरू"
+ "उन्नत सेटिङ्हरू"
+ "\"%s\" SIM"
+ "सबै प्रापकलाई व्यक्तिगत SMS सन्देशहरू पठाउनुहोस्। केवल तपाईँले कुनै पनि उत्तर प्राप्त गर्नुहुने छ"
+ "सबै प्रापकलाई एउटा एकल MMS पठाउनुहोस्"
+ "अज्ञात संख्या"
+ "नयाँ सन्देश"
+ "नयाँ सन्देश।"
+ "सिम चयनकर्ता"
+ "%1$s चयन गरियो, SIM चयनकर्ता"
+ "विषय सम्पादन गर्नुहोस्"
+ "सिम चयन गर्नुहोस् वा विषय सम्पादन गर्नुहोस्"
+ "अडियो रेकर्ड गर्न छुनुहोस् र होल्ड गर्नुहोस्"
+ "नयाँ कुराकानी सुरू गर्नुहोस्"
+ "सन्देश प्रवाह"
+ "सन्देश प्रवाह सूची"
+ "सन्देश प्रवाह"
+ "नयाँ सन्देश"
+ "कुराकानी सूची"
+ "कुराकानीहरू लोड हुँदै..."
+ "सन्देशहरू लोड हुँदै"
+ "थप कुराकानीहरू हेर्नुहोस्"
+ "थप सन्देशहरू हेर्नुहोस्"
+ "कुराकानी मेटिएको छ"
+ "वार्तालाप मेटियो। एउटा फरक सन्देश प्रवाह वार्तालाप देखाउन छुनुहोस्"
+ "अवरूद्ध गरियो"
+ "अवरोध हटाइयो"
+ "भण्डारण ठाउँ कम छ। केही डाटा हराउन सक्छ।"
+ "संलग्नकहरू चयन गर्नुहोस्"
+ "चयन पुष्टि गर्नुहोस्"
+ "%d चयन गरियो"
+ "कृपया एक वा बढी संलग्नकहरू हटाउनुहोस् र फेरि प्रयास गर्नुहोस्।"
+ "तपाईं आफ्नो सन्देश पठाउन प्रयास गर्न सक्नुहुन्छ, तर तपाईंले एक वा बढी संलग्नकहरू नहटाएसम्म यो डेलिभर नहुन सक्छ।"
+ "तपाईँले प्रति सन्देश एउटा मात्र भिडियो पठाउन सक्नुहुन्छ। अतिरिक्त भिडियो हटाउनुहोस् र फेरि प्रयास गर्नुहोस्।"
+ "संलग्नक लोड गर्न सन्देश प्रवाह असफल भयो।"
+ "जसरी भए पनि पठाउनुहोस्"
+ "कुराकानी सुरु गर्न सकेन"
+ "%1$s (%2$s)"
+ "%s चयन गरियो"
+
diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml
new file mode 100644
index 0000000..adfdcbe
--- /dev/null
+++ b/res/values-nl/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "geen onderwerp"
+ "geenonderwerp"
+
+
+ "Ja"
+ "Nee"
+ "OK"
+ "Haha"
+ "Hartelijk dank"
+ "Ik ga akkoord"
+ "Mooi"
+ "Ik ben onderweg"
+ "Hier kom ik later op terug"
+ ":)"
+ ":("
+
+
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
new file mode 100644
index 0000000..4f1a53c
--- /dev/null
+++ b/res/values-nl/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Berichten"
+ "Berichten"
+ "Gesprek selecteren"
+ "Instellingen"
+ "Bericht verzenden"
+ "Een bijlage toevoegen"
+ "Help"
+ "Welkom"
+ "Overslaan"
+ "Volgende >"
+ "Volgende"
+ "Sluiten"
+ "Instellingen >"
+ "Instellingen"
+ "Berichten heeft toegang tot Sms, Telefoon en Contacten nodig."
+ "U kunt rechten wijzigen via \'Instellingen\' > \'Apps\' > \'Berichten\' > \'Rechten\'."
+ "U kunt rechten wijzigen via \'Instellingen\' > \'Apps\' > \'Berichten\' > \'Rechten\'."
+ "Veelgebruikt"
+ "Alle contacten"
+ "Verzenden naar %s"
+ "Foto\'s of video vastleggen"
+ "Afbeeldingen kiezen op dit apparaat"
+ "Audio opnemen"
+ "Foto kiezen"
+ "Het medium is geselecteerd."
+ "Het medium is gedeselecteerd."
+ "%d geselecteerd"
+ "afbeelding %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "afbeelding"
+ "Audio opnemen"
+ "Delen"
+ "Zojuist"
+ "Nu"
+
+ %d min.
+ %d min.
+
+
+ %d uur
+ %d uur
+
+
+ %d dagen
+ %d dag
+
+
+ %d weken
+ één week
+
+
+ %d maanden
+ één maand
+
+
+ %d jaar
+ één jaar
+
+ "Berichtklasse 0"
+ "Opslaan"
+ "Er is weinig ruimte vrij op het apparaat. Oudere berichten worden automatisch verwijderd om ruimte vrij te maken."
+ "Opslagruimte is bijna vol"
+ "Berichten verzendt of ontvangt mogelijk geen berichten totdat er meer ruimte beschikbaar is op uw apparaat."
+ "Weinig opslagruimte voor sms-berichten beschikbaar. Je moet mogelijk berichten verwijderen."
+ "Uw telefoonnummer bevestigen"
+ "Deze eenmalige stap zorgt ervoor dat Berichten uw groepsberichten correct aflevert."
+ "Telefoonnummer"
+ "Alle berichten met media verwijderen"
+ "Berichten ouder dan %s verwijderen"
+ "Berichten ouder dan %s automatisch verwijderen"
+ "Negeren"
+ "Alle berichten met media verwijderen?"
+ "Berichten ouder dan %s verwijderen?"
+ "Berichten ouder dan %s verwijderen en automatisch verwijderen inschakelen?"
+ "%s zei"
+ "U zei"
+ "Bericht van %s:"
+ "U heeft een bericht verzonden"
+ "Verzenden…"
+ "Niet verzonden. Tik om het opnieuw te proberen."
+ "Niet verzonden. Nieuwe poging…"
+ "Opnieuw verzenden of verwijderen"
+ "Bel de hulpdiensten. Uw sms kan momenteel niet worden afgeleverd."
+ "Mislukt"
+ "Nieuw mms-bericht downloaden"
+ "Nieuw mms-bericht"
+ "Kan niet downloaden"
+ "Tik voor nieuwe poging"
+ "Tik om te downloaden"
+ "Downloaden of verwijderen"
+ "Downloaden..."
+ "Bericht verlopen of niet beschikbaar"
+ "grootte: %1$s, verloopt: %2$s"
+ "Kan niet verzenden. Ontvanger niet geldig."
+ "Service niet geactiveerd in netwerk"
+ "Kan niet verzenden wegens een netwerkprobleem"
+ "Bericht verlopen of niet beschikbaar"
+ "(Geen onderwerp)"
+ "Onbekende afzender"
+ "Bezorgd"
+ "Kan bericht %1$s niet downloaden van %2$s."
+ "Kan databasebewerking niet voltooien wegens onvoldoende geheugen"
+ "Bericht niet verzonden"
+ "Sommige berichten niet verzonden in Berichten"
+
+ %d berichten in %d gesprekken
+ %d berichten in één gesprek
+
+ "Bericht niet gedownload"
+ "Sommige berichten zijn niet gedownload in Berichten"
+
+ %d berichten in %d gesprekken
+ %d berichten in één gesprek
+
+ "Bericht naar %1$s niet verzonden"
+ "Bel de hulpdiensten. Uw sms aan %1$s kan momenteel niet worden afgeleverd."
+
+ %d nieuwe berichten
+ Nieuw bericht
+
+ "Starten"
+ "Camera niet beschikbaar"
+ "Camera niet beschikbaar"
+ "Video-opname niet beschikbaar"
+ "Kan media niet opslaan"
+ "Kan geen foto maken"
+ "Terug"
+ "Gearchiveerd"
+ "Verwijderen"
+ "Archiveren"
+ "Terugzetten uit archief"
+ "Meldingen uitschakelen"
+ "Meldingen inschakelen"
+ "Contact toevoegen"
+ "Downloaden"
+ "Verzenden"
+ "Verwijderen"
+ "Dit bericht verwijderen?"
+ "Deze actie kan niet ongedaan worden gemaakt."
+ "Verwijderen"
+
+ Deze gesprekken verwijderen?
+ Dit gesprek verwijderen?
+
+ "Verwijderen"
+ "Annuleren"
+ "Aan"
+ "Meerdere afbeeldingen selecteren"
+ "Selectie bevestigen"
+ "+%d"
+ "Kan audio niet opnemen. Probeer het opnieuw."
+ "Kan audio niet afspelen. Probeer het opnieuw."
+ "Kan audio niet opslaan. Probeer het opnieuw."
+ "Blijven aanraken"
+ ", "
+ " "
+ ": "
+ " "
+ "Afbeelding"
+ "Audioclip"
+ "Video"
+ "Visitekaartje"
+ "Downloaden"
+ "Reageren via sms"
+ "Reageren via mms"
+ "Beantwoorden"
+
+ %d deelnemers
+ %d deelnemer
+
+ "Ik"
+ "Contact geblokkeerd en gearchiveerd"
+ "Blokkering van contact opgeheven en teruggezet uit archief"
+ "%d gearchiveerd"
+ "%d teruggezet uit archief"
+ "Meldingen uitgeschakeld"
+ "Meldingen ingeschakeld"
+ "Alles is ingesteld. Tik nogmaals op \'Verzenden\'."
+ "Berichten is ingesteld als de standaard sms-app"
+
+ Bijlagen verwijderen
+ Bijlage verwijderen
+
+ "Audiobijlage"
+ "Audiobijlage afspelen"
+ "Onderbreken"
+ "Bericht van %s: %s."
+ "Mislukt bericht van %s: %s. Tijd: %s."
+ "Bericht van %s: %s. Tijd: %s."
+ "Niet-verzonden bericht aan %s: %s. Tijd: %s."
+ "Bericht verzenden naar %s: %s. Tijd: %s."
+ "Mislukt bericht aan %s: %s. Tijd: %s."
+ "Bericht aan %s: %s. Tijd: %s."
+ "Mislukt bericht van %s: %s. Tijd: %s. %s."
+ "Bericht van %s: %s. Tijd: %s. %s."
+ "Niet-verzonden bericht aan %s: %s. Tijd: %s."
+ "Bericht verzenden naar %s: %s. Tijd: %s."
+ "Mislukt bericht aan %s: %s. Tijd: %s."
+ "Bericht aan %s: %s. Tijd: %s."
+ "Bericht mislukt. Tik om het opnieuw te proberen."
+ "Gesprek met %s"
+ "Onderwerp verwijderen"
+ "Video opnemen"
+ "Een stilstaand beeld opnemen"
+ "Foto maken"
+ "Video opnemen"
+ "Overschakelen naar camera op volledig scherm"
+ "Schakelen tussen camera aan voorzijde en camera aan achterzijde"
+ "Opname stoppen en video bijvoegen"
+ "Video-opname stoppen"
+ "Foto\'s in Berichten"
+
+ %d foto\'s opgeslagen in het album \"%s\"
+ %d foto opgeslagen in het album \"%s\"
+
+
+ %d video\'s opgeslagen in het album \"%s\"
+ %d video opgeslagen in het album \"%s\"
+
+
+ %d bijlagen opgeslagen in het album \"%s\"
+ %d bijlage opgeslagen in het album \"%s\"
+
+
+ %d bijlagen opgeslagen in \"Downloads\"
+ %d bijlage opgeslagen in \"Downloads\"
+
+
+ %d bijlagen opgeslagen
+ %d bijlage opgeslagen
+
+
+ Kan %d bijlagen niet opslaan
+ Kan %d bijlage niet opslaan
+
+ "Opgeslagen mms-bijlage"
+ "Instellingen"
+ "Gearchiveerd"
+ "Sluiten"
+ "Mms"
+ "Geavanceerd"
+ "Fouten opsporen"
+ "Meldingen"
+ "Geluid"
+ "Stil"
+ "Trillen"
+ "Geblokkeerd"
+ "Bezorgingsrapporten voor sms"
+ "Ontvangstbevestiging vragen voor elke verzonden sms"
+ "Automatisch ophalen"
+ "Mms-berichten automatisch ophalen"
+ "Automatisch ophalen tijdens roaming"
+ "Automatisch MMS ophalen tijdens roaming"
+ "Groepsberichten"
+ "Mms gebruiken om één bericht te verzenden wanneer er meerdere ontvangers zijn"
+ "Standaard sms-app"
+ "Standaard sms-app"
+
+
+ "Uw telefoonnummer"
+ "Onbekend"
+ "Geluiden voor uitgaand bericht"
+ "Sms dumpen"
+ "Onbewerkte gegevens voor ontvangen sms\'jes in een extern opslagbestand dumpen"
+ "Mms dumpen"
+ "Onbewerkte gegevens voor ontvangen mms\'jes in een extern opslagbestand dumpen"
+ "Waarschuwingen voor draadloos"
+ "Berichtopties"
+ "Tekst kopiëren"
+ "Details weergeven"
+ "Verwijderen"
+ "Doorsturen"
+ "Berichtdetails"
+ "Type: "
+ "Sms-bericht"
+ "Mms-bericht"
+ "Van: "
+ "Aan: "
+ "Verzonden: "
+ "Ontvangen: "
+ "Onderwerp: "
+ "Grootte: "
+ "Prioriteit: "
+ "Simkaart: "
+ "Hoog"
+ "Normaal"
+ "Laag"
+ "Simkaart %s"
+ "Verborgen adres verzender"
+ "Kan bericht niet verzenden terwijl bijlagen worden geladen."
+ "Kan bijlage niet laden. Probeer het opnieuw."
+ "Netwerk is niet gereed. Probeer het opnieuw."
+ "Tekst verwijderen"
+ "Schakelen tussen letters en cijfers invoeren"
+ "Meer deelnemers toevoegen"
+ "Deelnemers bevestigen"
+ "Nieuw gesprek starten"
+ "Dit item selecteren"
+ "Video afspelen"
+ "Mensen en opties"
+ "Fouten opsporen"
+ "Mensen en opties"
+ "Algemeen"
+ "Mensen in dit gesprek"
+ "Bellen"
+ "Bericht verzenden"
+ "Bericht verzenden<br/><small>via %s</small>"
+
+ Foto\'s verzenden
+ Foto verzenden
+
+
+ Audio-opnamen verzenden
+ Audio-opname verzenden
+
+
+ Video\'s verzenden
+ Video verzenden
+
+
+ Contactkaarten verzenden
+ Contactkaart verzenden
+
+
+ Bijlagen verzenden
+ Bijlage verzenden
+
+
+ %d bijlagen klaar voor verzenden
+ Eén bijlage klaar voor verzenden
+
+ "Feedback verzenden"
+ "Bekijken in de Google Play Store"
+ "Versie-informatie"
+ "Versie %1$s"
+ "Open-sourcelicenties"
+ "Meldingen"
+ "Bijlagelimiet bereikt"
+ "Kan bijlage niet laden."
+ "Toevoegen aan contacten?"
+ "Contact toevoegen"
+ "Onderwerp"
+ "Onderwerp: "
+ "%s%s"
+ "Contactkaart laden"
+ "Kan visitekaartje niet laden"
+ "Contactkaart weergeven"
+
+ %d contacten
+ %d contact
+
+ "Visitekaartjes"
+ "Verjaardag"
+ "Notities"
+ "Bericht doorsturen"
+ "Beantwoorden"
+ "+1"
+ "+%d"
+ "Sms uitgeschakeld"
+ "Stel Berichten in als standaard sms-app om berichten te verzenden"
+ "Berichten instellen als standaard sms-app"
+ "Wijzigen"
+ "Stel Berichten in als standaard sms-app om berichten te ontvangen"
+ "Geen voorkeurs-simkaart geselecteerd voor het verzenden van sms\'jes"
+ "Deze app is niet toegestaan door de eigenaar van het apparaat."
+ "OK"
+ "Te veel deelnemers in een gesprek"
+
+ Ongeldige contacten
+ Ongeldig contact
+
+ "Kan camera-afbeelding niet laden"
+ "U: "
+ "%s: "
+ "Concept"
+ "Zodra u een nieuw gesprek start, wordt dit hier vermeld"
+ "Gearchiveerde gesprekken worden hier weergegeven"
+ "Gesprekken laden..."
+ "Afbeelding"
+ "Audioclip"
+ "Video"
+ "Visitekaartje"
+ "Mms"
+ "Ongedaan maken"
+ "Opnieuw proberen"
+ "Geef de naam of het telefoonnummer van een contact op om een nieuw bericht te starten"
+ "Blokkeren"
+ "%s blokkeren"
+ "Blokkering van %s opheffen"
+ "%s blokkeren?"
+ "U blijft berichten van dit nummer ontvangen, maar krijgt geen meldingen meer. Dit gesprek wordt gearchiveerd."
+ "Geblokkeerde contacten"
+ "BLOKKERING OPHEFFEN"
+ "Geblokkeerde contacten"
+ "Afbeelding kiezen uit documentbibliotheek"
+ "Bericht wordt verzonden"
+ "Bericht verzonden"
+ "Mobiele gegevens zijn ingeschakeld. Controleer uw instellingen."
+ "Kan geen berichten verzenden in vliegtuigmodus"
+ "Kan bericht niet verzenden"
+ "Bericht gedownload"
+ "Mobiele gegevens zijn uitgeschakeld. Controleer uw instellingen."
+ "Kan geen berichten downloaden in de vliegtuigmodus"
+ "Bericht kan niet worden gedownload"
+ "Nul"
+ "Eén"
+ "Twee"
+ "Drie"
+ "Vier"
+ "Vijf"
+ "Zes"
+ "Zeven"
+ "Acht"
+ "Negen"
+ "Kan bericht niet verzenden via %1$s, fout %2$d"
+ "Kan bericht niet verzenden via onbekende provider, fout %1$d"
+ "Fwd: %s"
+ "Bericht niet verzonden: service niet geactiveerd in netwerk"
+ "Bericht niet verzonden: ongeldig bestemmingsadres"
+ "Bericht niet verzonden: ongeldig bericht"
+ "Bericht niet verzonden: niet-ondersteunde inhoud"
+ "Bericht niet verzonden: niet-ondersteund bericht"
+ "Bericht niet verzonden: te groot"
+ "Nieuw bericht"
+ "Weergeven"
+ "Afbeelding"
+ "Kan geen geschikte applicatie vinden"
+ "Ontvanger verwijderen"
+ "Nieuw bericht"
+ "Annuleren"
+ "Toegangspunt bewerken"
+ "Niet ingesteld"
+ "Naam"
+ "APN"
+ "MMSC"
+ "MMS-proxy"
+ "MMS-poort"
+ "MCC"
+ "MNC"
+ "APN-type"
+ "APN verwijderen"
+ "Nieuwe APN"
+ "Opslaan"
+ "Verwijderen"
+ "Het veld \'Naam\' mag niet leeg zijn."
+ "De APN mag niet leeg zijn."
+ "MCC-veld moet drie cijfers bevatten."
+ "MNC-veld moet twee of drie cijfers bevatten."
+ "Standaard-APN-instellingen herstellen."
+ "Standaardinstellingen herstellen"
+ "Herstellen van standaard-APN-instellingen voltooid."
+ "Naamloos"
+ "Namen toegangspunten"
+ "APN\'s"
+ "Nieuwe APN"
+ "Instellingen voor toegangspuntnamen zijn niet beschikbaar voor deze gebruiker"
+ "Kopiëren naar klembord?"
+ "Kopiëren"
+ "naar %s"
+ "Algemeen"
+ "Geavanceerd"
+ "Algemene instellingen"
+ "Geavanceerde instellingen"
+ "Sim van \'%s\'"
+ "Afzonderlijke sms\'jes verzenden naar alle ontvangers. U bent de enige die eventuele reacties ontvangt"
+ "Eén mms verzenden naar alle ontvangers"
+ "Onbekend nummer"
+ "Nieuw bericht"
+ "Nieuw bericht."
+ "Simkaart selecteren"
+ "%1$s geselecteerd, simkaartkiezer"
+ "Onderwerp bewerken"
+ "Simkaart selecteren of onderwerp bewerken"
+ "Blijf aanraken om audio op te nemen"
+ "Nieuw gesprek starten"
+ "Berichten"
+ "Lijst in Berichten"
+ "Berichten"
+ "Nieuw bericht"
+ "Gesprekslijst"
+ "Gesprekken laden"
+ "Berichten laden"
+ "Meer gesprekken bekijken"
+ "Meer berichten bekijken"
+ "Gesprek verwijderd"
+ "Gesprek verwijderd. Tik om een ander Berichten-gesprek weer te geven"
+ "Geblokkeerd"
+ "Blokkering opgeheven"
+ "Er is weinig opslagruimte beschikbaar. Er kunnen gegevens verloren gaan."
+ "Bijlagen selecteren"
+ "Selectie bevestigen"
+ "%d geselecteerd"
+ "Verwijder een of meer bijlagen en probeer het opnieuw."
+ "U kunt proberen uw bericht te verzenden, maar het bericht wordt mogelijk niet bezorgd, tenzij u een of meer bijlagen verwijdert."
+ "U kunt slechts één video verzenden per bericht. Verwijder extra video\'s en probeer het opnieuw."
+ "Berichten kan de bijlage niet laden."
+ "Toch verzenden"
+ "Kan gesprek niet starten"
+ "%1$s (%2$s)"
+ "%s geselecteerd"
+
diff --git a/res/values-pa-rIN/arrays.xml b/res/values-pa-rIN/arrays.xml
new file mode 100644
index 0000000..1cf23e9
--- /dev/null
+++ b/res/values-pa-rIN/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "ਕੋਈ ਵਿਸ਼ਾ ਨਹੀਂ"
+ "ਕੋਈ ਵਿਸ਼ਾ ਨਹੀਂ"
+
+
+ "ਹਾਂ"
+ "ਨਹੀਂ"
+ "ਠੀਕ"
+ "Hehe"
+ "ਧੰਨਵਾਦ"
+ "ਮੈਂ ਸਹਿਮਤ ਹਾਂ"
+ "ਵਧੀਆ"
+ "ਰਸਤੇ ਵਿੱਚ ਹਾਂ"
+ "ਠੀਕ, ਮੈਂ ਤੁਹਾਨੂੰ ਬਾਅਦ ਵਿੱਚ ਸੰਪਰਕ ਕਰਾਂਗਾ"
+ ":)"
+ ":("
+
+
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
new file mode 100644
index 0000000..3be69e1
--- /dev/null
+++ b/res/values-pa-rIN/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Messaging"
+ "Messaging"
+ "ਗੱਲਬਾਤ ਚੁਣੋ"
+ "ਸੈਟਿੰਗਾਂ"
+ "ਸੁਨੇਹਾ ਭੇਜੋ"
+ "ਇੱਕ ਅਟੈਚਮੈਂਟ ਜੋੜੋ"
+ "ਸਹਾਇਤਾ"
+ "ਸੁਆਗਤ ਹੈ"
+ "ਛੱਡੋ"
+ "ਅਗਲਾ >"
+ "ਅਗਲਾ"
+ "ਬਾਹਰ ਜਾਓ"
+ "ਸੈਟਿੰਗਾਂ >"
+ "ਸੈਟਿੰਗਾਂ"
+ "Messaging ਨੂੰ SMS, ਫੋਨ ਅਤੇ ਸੰਪਰਕਾਂ ਲਈ ਅਨੁਮਤੀ ਦੀ ਲੋੜ ਹੈ।"
+ "ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ > ਐਪਸ > Messaging > ਅਨੁਮਤੀਆਂ ਵਿੱਚ ਅਨੁਮਤੀਆਂ ਬਦਲ ਸਕਦੇ ਹੋ।"
+ "ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ, ਐਪਸ, Messaging, ਅਨੁਮਤੀਆਂ ਵਿੱਚ ਅਨੁਮਤੀਆਂ ਬਦਲ ਸਕਦੇ ਹੋ।"
+ "ਫ੍ਰੀਕਵੈਂਟਸ"
+ "ਸਾਰੇ ਸੰਪਰਕ"
+ "%s ਨੂੰ ਭੇਜੋ"
+ "ਤਸਵੀਰਾਂ ਜਾ ਵੀਡੀਓ ਕੈਪਚਰ ਕਰੋ"
+ "ਇਸ ਡਿਵਾਈਸ ਤੋਂ ਚਿੱਤਰ ਚੁਣੋ"
+ "ਔਡੀਓ ਰਿਕਾਰਡ ਕਰੋ"
+ "ਫੋਟੋ ਚੁਣੋ"
+ "ਮੀਡੀਆ ਚੁਣਿਆ ਗਿਆ ਹੈ।"
+ "ਮੀਡੀਆ ਅਚੋਣਵਾਂ ਕੀਤਾ ਗਿਆ ਹੈ।"
+ "%d ਚੁਣਿਆ ਗਿਆ"
+ "ਚਿੱਤਰ %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "ਚਿੱਤਰ"
+ "ਔਡੀਓ ਰਿਕਾਰਡ ਕਰੋ"
+ "ਸ਼ੇਅਰ ਕਰੋ"
+ "ਬਿਲਕੁਲ ਹੁਣੇ"
+ "ਹੁਣ"
+
+ %d ਮਿੰਟ
+ %d ਮਿੰਟ
+
+
+ %d ਘੰਟੇ
+ %d ਘੰਟੇ
+
+
+ %d ਦਿਨ
+ %d ਦਿਨ
+
+
+ %d ਹਫ਼ਤੇ
+ %d ਹਫ਼ਤੇ
+
+
+ %d ਮਹੀਨੇ
+ %d ਮਹੀਨੇ
+
+
+ %d ਸਾਲ
+ %d ਸਾਲ
+
+ "ਕਲਾਸ 0 ਸੁਨੇਹਾ"
+ "ਸੁਰੱਖਿਅਤ ਕਰੋ"
+ "ਡਿਵਾਈਸ ਵਿੱਚ ਘੱਟ ਸਪੇਸ ਹੈ। Messaging ਆਟੋਮੈਟਿਕਲੀ ਸਪੇਸ ਖਾਲੀ ਕਰਨ ਲਈ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਮਿਟਾ ਦੇਵੇਗਾ।"
+ "ਸਟੋਰੇਜ ਸਪੇਸ ਖ਼ਤਮ ਹੋ ਰਿਹਾ ਹੈ"
+ "Messaging ਸੁਨੇਹੇ ਭੇਜ ਜਾਂ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰ ਸਕਦਾ ਜਦੋਂ ਤੱਕ ਕਿ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਤੇ ਹੋਰ ਸਪੇਸ ਉਪਲਬਧ ਨਾ ਹੋਵੇ।"
+ "ਘੱਟ SMS ਸਟੋਰੇਜ। ਤੁਹਾਨੂੰ ਸੁਨੇਹੇ ਮਿਟਾਉਣ ਦੀ ਲੋੜ ਪੈ ਸਕਦੀ ਹੈ।"
+ "ਆਪਣੇ ਫੋਨ ਨੰਬਰ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"
+ "ਇਹ ਵਨ-ਟਾਈਮ ਸਟੈਪ ਯਕੀਨੀ ਬਣਾਏਗਾ ਕਿ Messaging ਤੁਹਾਡੇ ਸਮੂਹ ਦੇ ਸੁਨੇਹੇ ਸਹੀ ਢੰਗ ਨਾਲ ਡਿਲੀਵਰ ਕਰੇਗਾ।"
+ "ਫੋਨ ਨੰਬਰ"
+ "ਮੀਡੀਆ ਵਾਲੇ ਸਾਰੇ ਸੁਨੇਹੇ ਮਿਟਾਓ"
+ "%s ਤੋਂ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਮਿਟਾਓ"
+ "%s ਤੋਂ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਆਟੋ-ਮਿਟਾਓ"
+ "ਅਣਡਿੱਠ ਕਰੋ"
+ "ਕੀ ਮੀਡੀਆ ਵਾਲੇ ਸਾਰੇ ਸੁਨੇਹੇ ਮਿਟਾਉਣੇ ਹਨ?"
+ "ਕੀ %s ਤੋਂ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਮਿਟਾਉਣੇ ਹਨ?"
+ "ਕੀ %s ਤੋਂ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਮਿਟਾਉਣੇ ਹਨ ਅਤੇ ਆਟੋ-ਮਿਟਾਓ ਨੂੰ ਚਾਲੂ ਕਰਨਾ ਹੈ?"
+ "%s ਨੇ ਕਿਹਾ"
+ "ਤੁਸੀਂ ਕਿਹਾ"
+ "%s ਦਾ ਸੁਨੇਹਾ"
+ "ਤੁਸੀਂ ਇੱਕ ਸੁਨੇਹਾ ਭੇਜਿਆ"
+ "ਭੇਜ ਰਿਹਾ ਹੈ..."
+ "ਨਹੀਂ ਭੇਜਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਛੋਹਵੋ।"
+ "ਨਹੀਂ ਭੇਜਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਹੈ..."
+ "ਦੁਬਾਰਾ ਭੇਜੋ ਜਾਂ ਮਿਟਾਓ"
+ "ਕਿਰਪਾ ਕਰਕੇ ਐਮਰਜੈਂਸੀ ਸੇਵਾਵਾਂ ਨੂੰ ਇੱਕ ਵੌਇਸ ਕਾਲ ਕਰੋ। ਤੁਹਾਡਾ ਟੈਕਸਟ ਸੁਨੇਹਾ ਇਸ ਵੇਲੇ ਡਿਲੀਵਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕੇਗਾ।"
+ "ਅਸਫਲ"
+ "ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਨਵਾਂ MMS ਸੁਨੇਹਾ"
+ "ਨਵਾਂ MMS ਸੁਨੇਹਾ"
+ "ਡਾਊਨਲੋਡ ਨਹੀਂ ਕਰ ਸਕਿਆ"
+ "ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਛੋਹਵੋ"
+ "ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਛੋਹਵੋ"
+ "ਡਾਊਨਲੋਡ ਕਰੋ ਜਾਂ ਮਿਟਾਓ"
+ "ਡਾਊਨਲੋਡ ਕਰ ਰਿਹਾ ਹੈ..."
+ "ਸੁਨੇਹੇ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਜਾਂ ਉਪਲਬਧ ਨਹੀਂ"
+ "ਆਕਾਰ: %1$s, ਮਿਆਦ ਪੁੱਗਣ ਦਾ ਸਮਾਂ: %2$s"
+ "ਭੇਜ ਨਹੀਂ ਸਕਦਾ। ਪ੍ਰਾਪਤਕਰਤਾ ਪ੍ਰਮਾਣਿਕ ਨਹੀਂ ਹੈ।"
+ "ਨੈਟਵਰਕ ਤੇ ਸੇਵਾ ਸਕਿਰਿਆ ਨਹੀਂ ਕੀਤੀ"
+ "ਨੈਟਵਰਕ ਸਮੱਸਿਆ ਦੇ ਕਾਰਨ ਨਹੀਂ ਭੇਜ ਸਕਿਆ"
+ "ਸੁਨੇਹੇ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਜਾਂ ਉਪਲਬਧ ਨਹੀਂ"
+ "(ਕੋਈ ਵਿਸ਼ਾ ਨਹੀਂ)"
+ "ਅਗਿਆਤ ਭੇਜਣ ਵਾਲਾ"
+ "ਡਿਲੀਵਰ ਕੀਤਾ"
+ "%2$s ਦਾ %1$s ਸੁਨੇਹਾ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕਰ ਸਕਿਆ।"
+ "ਘੱਟ ਮੈਮਰੀ ਦੇ ਕਾਰਨ ਡਾਟਾਬੇਸ ਓਪਰੇਸ਼ਨ ਪੂਰਾ ਨਹੀਂ ਕਰ ਸਕਿਆ"
+ "ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਗਿਆ"
+ "ਕੁਝ ਸੁਨੇਹੇ Messaging ਵਿੱਚ ਨਹੀਂ ਭੇਜੇ ਗਏ ਹਨ"
+
+ %d ਗੱਲਬਾਤਾਂ ਵਿੱਚ %d ਸੁਨੇਹੇ
+ %d ਗੱਲਬਾਤਾਂ ਵਿੱਚ %d ਸੁਨੇਹੇ
+
+ "ਸੁਨੇਹਾ ਡਾਉਨਲੋਡ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"
+ "ਕੁਝ ਸੁਨੇਹੇ Messaging ਵਿੱਚ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤੇ ਗਏ ਹਨ"
+
+ %d ਗੱਲਬਾਤਾਂ ਵਿੱਚ %d ਸੁਨੇਹੇ
+ %d ਗੱਲਬਾਤਾਂ ਵਿੱਚ %d ਸੁਨੇਹੇ
+
+ "%1$s ਨੂੰ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਗਿਆ"
+ "ਕਿਰਪਾ ਕਰਕੇ ਐਮਰਜੈਂਸੀ ਸੇਵਾਵਾਂ ਨੂੰ ਇੱਕ ਵੌਇਸ ਕਾਲ ਕਰੋ। ਤੁਹਾਡਾ ਟੈਕਸਟ ਸੁਨੇਹਾ ਇਸ ਵੇਲੇ %1$s ਨੂੰ ਡਿਲੀਵਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕੇਗਾ।"
+
+ %d ਨਵੇਂ ਸੁੁਨੇਹੇ
+ %d ਨਵੇਂ ਸੁੁਨੇਹੇ
+
+ "ਚਾਲੂ ਕਰੋ"
+ "ਕੈਮਰਾ ਉਪਲਬਧ ਨਹੀਂ"
+ "ਕੈਮਰਾ ਉਪਲਬਧ ਨਹੀਂ"
+ "ਵੀਡੀਓ ਕੈਪਚਰ ਉਪਲਬਧ ਨਹੀਂ"
+ "ਮੀਡੀਆ ਨੂੰ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਦਾ"
+ "ਤਸਵੀਰ ਨਹੀਂ ਲੈ ਸਕਦਾ"
+ "ਪਿੱਛੇ"
+ "ਆਰਕਾਈਵ ਕੀਤਾ"
+ "ਮਿਟਾਓ"
+ "ਆਰਕਾਈਵ ਕਰੋ"
+ "ਅਨਆਰਕਾਈਵ ਕਰੋ"
+ "ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰੋ"
+ "ਸੂਚਨਾਵਾਂ ਚਾਲੂ ਕਰੋ"
+ "ਸੰਪਰਕ ਜੋੜੋ"
+ "ਡਾਊਨਲੋਡ ਕਰੋ"
+ "ਭੇਜੋ"
+ "ਮਿਟਾਓ"
+ "ਕੀ ਇਹ ਸੁਨੇਹਾ ਮਿਟਾਉਣਾ ਹੈ?"
+ "ਇਹ ਕਿਰਿਆ ਨਸ਼ਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ।"
+ "ਮਿਟਾਓ"
+
+ ਕੀ ਇਹ ਗੱਲਬਾਤਾਂ ਮਿਟਾਉਣੀਆਂ ਹਨ?
+ ਕੀ ਇਹ ਗੱਲਬਾਤਾਂ ਮਿਟਾਉਣੀਆਂ ਹਨ?
+
+ "ਮਿਟਾਓ"
+ "ਰੱਦ ਕਰੋ"
+ "ਵੱਲ"
+ "ਮਲਟੀਪਲ ਚਿੱਤਰ ਚੁਣੋ"
+ "ਚੋਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"
+ "+%d"
+ "ਔਡੀਓ ਰਿਕਾਰਡ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"
+ "ਔਡੀਓ ਪਲੇ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"
+ "ਔਡੀਓ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"
+ "ਛੋਹਵੋ & ਹੋਲਡ ਕਰੋ"
+ ", "
+ " "
+ ": "
+ " "
+ "ਤਸਵੀਰ"
+ "ਔਡੀਓ ਕਲਿਪ"
+ "ਵੀਡੀਓ"
+ "ਸੰਪਰਕ ਕਾਰਡ"
+ "ਡਾਊਨਲੋਡ ਕਰੋ"
+ "SMS ਰਾਹੀਂ ਜਵਾਬ"
+ "MMS ਰਾਹੀਂ ਜਵਾਬ"
+ "ਜਵਾਬ"
+
+ %d ਭਾਗੀਦਾਰ
+ %d ਭਾਗੀਦਾਰ
+
+ "ਮੈਂ"
+ "ਬਲੌਕ ਕੀਤਾ & ਆਰਕਾਈਵ ਕੀਤਾ ਸੰਪਰਕ"
+ "ਸੰਪਰਕ ਅਨਬਲੌਕ ਕੀਤਾ & ਅਨਆਰਕਾਈਵ ਕੀਤਾ"
+ "%d ਆਰਕਾਈਵ ਕੀਤੀਆਂ"
+ "%d ਅਨਆਰਕਾਈਵ ਕੀਤੀਆਂ"
+ "ਸੂਚਨਾਵਾਂ ਬੰਦ ਕੀਤੀਆਂ"
+ "ਸੂਚਨਾਵਾਂ ਚਾਲੂ ਕੀਤੀਆਂ"
+ "ਸਾਰੇ ਸੈਟ ਕੀਤੇ। ਭੇਜੋ ਨੂੰ ਦੁਬਾਰਾ ਛੋਹਵੋ।"
+ "Messaging ਡਿਫੌਲਟ SMS ਐਪਸ ਦੇ ਤੌਰ ਤੇ ਸਫਲਤਾਪੂਰਵਕ ਸੈਟ ਕੀਤਾ ਗਿਆ।"
+
+ ਅਟੈਚਮੈਂਟਾਂ ਬਰਖਾਸਤ ਕਰੋ
+ ਅਟੈਚਮੈਂਟਾਂ ਬਰਖਾਸਤ ਕਰੋ
+
+ "ਔਡੀਓ ਅਟੈਚਮੈਂਟ"
+ "ਔਡੀਓ ਅਟੈਚਮੈਂਟ ਪਲੇ ਕਰੋ"
+ "ਰੋਕੋ"
+ "%s ਦਾ ਸੁਨੇਹਾ: %s।"
+ "%s ਦਾ ਸੁਨੇਹਾ ਅਸਫਲ: %s। ਸਮਾਂ: %s।"
+ "%s ਦਾ ਸੁਨੇਹਾ: %s। ਸਮਾਂ: %s।"
+ "%s ਨੂੰ ਨਾ ਭੇਜਿਆ ਗਿਆ ਸੁਨੇਹਾ: %s। Time: %s।"
+ "%s ਨੂੰ ਸੁਨੇਹਾ ਭੇਜ ਰਿਹਾ ਹੈ: %s। ਸਮਾਂ: %s।"
+ "%s ਨੂੰ ਸੁਨੇਹਾ ਭੇਜਣਾ ਅਸਫਲ: %s। ਸਮਾਂ: %s।"
+ "%s ਨੂੰ ਸੁਨੇਹਾ: %s। ਸਮਾਂ: %s।"
+ "%s ਦਾ ਸੁਨੇਹਾ ਅਸਫਲ: %s। ਸਮਾਂ: %s। %s।"
+ "%s ਦਾ ਸੁਨੇਹਾ: %s. ਸਮਾਂ: %s। %s।"
+ "%s ਨੂੰ ਨਾ ਭੇਜਿਆ ਗਿਆ ਸੁਨੇਹਾ: %s। ਸਮਾਂ: %s।"
+ "%s ਨੂੰ ਸੁਨੇਹਾ ਭੇਜ ਰਿਹਾ ਹੈ: %s। ਸਮਾਂ: %s।"
+ "%s ਨੂੰ ਸੁਨੇਹਾ ਭੇਜਣਾ ਅਸਫਲ: %s। ਸਮਾਂ: %s।"
+ "%s ਨੂੰ ਸੁਨੇਹਾ: %s। ਸਮਾਂ: %s।"
+ "ਸੁਨੇਹਾ ਅਸਫਲ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਛੋਹਵੋ।"
+ "%s ਨਾਲ ਗੱਲਬਾਤ ਕਰੋ"
+ "ਵਿਸ਼ਾ ਹਟਾਓ"
+ "ਵੀਡੀਓ ਕੈਪਚਰ ਕਰੋ"
+ "ਇੱਕ ਸਟਿਲ ਚਿੱਤਰ ਕੈਪਚਰ ਕਰੋ"
+ "ਤਸਵੀਰ ਲਓ"
+ "ਵੀਡੀਓ ਰਿਕਾਰਡ ਕਰਨਾ ਚਾਲੂ ਕਰੋ"
+ "ਪੂਰੀ ਸਕ੍ਰੀਨ ਕੈਮਰਾ ਤੇ ਸਵਿਚ ਕਰੋ"
+ "ਫ੍ਰੰਟ ਅਤੇ ਬੈਕ ਕੈਮਰਾ ਵਿਚਕਾਰ ਸਵਿਚ ਕਰੋ"
+ "ਰਿਕਾਰਡਿੰਗ ਰੋਕੋ ਅਤੇ ਵੀਡੀਓ ਅਟੈਚ ਕਰੋ"
+ "ਵੀਡੀਓ ਰਿਕਾਰਡ ਕਰਨਾ ਰੋਕੋ"
+ "Messaging ਫੋਟੋਆਂ"
+
+ %d ਫੋਟੋਆਂ ਨੂੰ \"%s\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ
+ %d ਫੋਟੋਆਂ ਨੂੰ \"%s\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ
+
+
+ %d ਵੀਡਿਓ ਨੂੰ \"%s\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ
+ %d ਵੀਡਿਓ ਨੂੰ \"%s\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ
+
+
+ %d ਅਟੈਚਮੈਂਟਾਂ ਨੂੰ \"%s\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ
+ %d ਅਟੈਚਮੈਂਟਾਂ ਨੂੰ \"%s\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ
+
+
+ %d ਅਟੈਚਮੈਂਟਾਂ ਡਾਊਨਲੋਡਸ\" ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤੀਆਂ ਗਈਆਂ
+ %d ਅਟੈਚਮੈਂਟਾਂ ਡਾਊਨਲੋਡਸ\" ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤੀਆਂ ਗਈਆਂ
+
+
+ %d ਅਟੈਚਮੈਂਟਾਂ ਸੁਰੱਖਿਅਤ ਕੀਤੀਆਂ
+ %d ਅਟੈਚਮੈਂਟਾਂ ਸੁਰੱਖਿਅਤ ਕੀਤੀਆਂ
+
+
+ %d ਅਟੈਚਮੈਂਟਾਂ ਨੂੰ ਸੁੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ
+ %d ਅਟੈਚਮੈਂਟਾਂ ਨੂੰ ਸੁੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ
+
+ "ਸੁਰੱਖਿਅਤ ਕੀਤੀ MMS ਅਟੈਚਮੈਂਟ"
+ "ਸੈਟਿੰਗਾਂ"
+ "ਆਰਕਾਈਵ ਕੀਤਾ"
+ "ਬੰਦ ਕਰੋ"
+ "MMS"
+ "ਉੱਨਤ"
+ "ਡੀਬਗ ਕਰੋ"
+ "ਸੂਚਨਾਵਾਂ"
+ "ਅਵਾਜ਼"
+ "ਸਾਈਲੈਂਟ"
+ "ਵਾਈਬ੍ਰੇਟ"
+ "ਬਲੌਕ ਕੀਤਾ"
+ "SMS ਡਿਲੀਵਰੀ ਰਿਪੋਰਟਾਂ"
+ "ਤੁਸੀਂ ਜੋ ਵੀ SMS ਭੇਜੋ ਉਸ ਹਰੇਕ ਲਈ ਇੱਕ ਡਿਲੀਵਰੀ ਰਿਪੋਰਟ ਦੀ ਬੇਨਤੀ ਕਰੋ"
+ "ਆਟੋ-ਮੁੜ ਪ੍ਰਾਪਤ ਕਰੋ"
+ "ਆਟੋਮੈਟਿਕਲੀ MMS ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਕਰੋ"
+ "ਰੋਮਿੰਗ ਆਟੋ-ਮੁੜ ਪ੍ਰਾਪਤ ਕਰੋ"
+ "ਰੋਮਿੰਗ ਵੇਲੇ MMS ਆਟੋਮੈਟਿਕਲੀ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰੋ"
+ "ਸਮੂਹ ਮੈਸੇਂਜ਼ਿੰਗ"
+ "ਜਦੋਂ ਮਲਟੀਪਲ ਪ੍ਰਾਪਤਕਰਤਾ ਹੋਣ ਤਾਂ ਇੱਕ ਸਿੰਗਲ ਸੁਨੇਹਾ ਭੇਜਣ ਲਈ MMS ਵਰਤੋ"
+ "ਡਿਫੌਲਟ SMS ਐਪ"
+ "ਡਿਫੌਲਟ SMS ਐਪ"
+
+
+ "ਤੁਹਾਡਾ ਫੋਨ ਨੰਬਰ"
+ "ਅਗਿਆਤ"
+ "ਆਊਟਗੋਇੰਗ ਸੁਨੇਹਾ ਅਵਾਜ਼ਾਂ"
+ "SMS ਡੰਪ ਕਰੋ"
+ "ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ ਫਾਈਲ ਵਿੱਚ ਪ੍ਰਾਪਤ ਕੀਤਾ SMS ਅਧੂਰਾ ਡਾਟਾ ਡੰਪ ਕਰੋ"
+ "MMS ਡੰਪ ਕਰੋ"
+ "ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ ਫਾਈਲ ਵਿੱਚ ਪ੍ਰਾਪਤ ਕੀਤਾ MMS ਅਧੂਰਾ ਡਾਟਾ ਡੰਪ ਕਰੋ"
+ "ਵਾਇਰਲੈਸ ਚਿਤਾਵਨੀਆਂ"
+ "ਸੁਨੇਹਾ ਚੋਣਾਂ"
+ "ਟੈਕਸਟ ਕਾਪੀ ਕਰੋ"
+ "ਵੇਰਵੇ ਦੇਖੋ"
+ "ਮਿਟਾਓ"
+ "ਅੱਗੇ ਭੇਜੋ"
+ "ਸੁਨੇਹਾ ਵੇਰਵੇ"
+ "ਟਾਈਪ: "
+ "ਟੈਕਸਟ ਸੁਨੇਹਾ"
+ "ਮਲਟੀਮੀਡੀਆ ਸੁਨੇਹਾ"
+ "ਇਸ ਤੋਂ: "
+ "ਵੱਲ: "
+ "ਭੇਜਿਆ: "
+ "ਪ੍ਰਾਪਤ ਕੀਤਾ: "
+ "ਵਿਸ਼ਾ: "
+ "ਆਕਾਰ: "
+ "ਤਰਜੀਹ: "
+ "SIM: "
+ "ਉੱਚ"
+ "ਸਧਾਰਨ"
+ "ਘੱਟ"
+ "SIM %s"
+ "ਭੇਜਣ ਵਾਲੇ ਦਾ ਪਤਾ ਲੁਕਾਇਆ ਗਿਆ"
+ "ਅਟੈਚਮੈਂਟਾਂ ਲੋਡ ਕਰਨ ਵੇਲੇ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜ ਸਕਦਾ।"
+ "ਅਟੈਚਮੈਂਟ ਲੋਡ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"
+ "ਨੈੱਟਵਰਕ ਤਿਆਰ ਨਹੀਂ ਹੈ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"
+ "ਟੈਕਸਟ ਮਿਟਾਓ"
+ "ਟੈਕਸਟ ਅਤੇ ਨੰਬਰ ਦਰਜ ਕਰਨ ਵਿਚਕਾਰ ਸਵਿਚ ਕਰੋ"
+ "ਹੋਰ ਭਾਗੀਦਾਰ ਜੋੜੋ"
+ "ਭਾਗੀਦਾਰਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"
+ "ਨਵੀਂ ਗੱਲਬਾਤ ਚਾਲੂ ਕਰੋ"
+ "ਇਹ ਆਈਟਮ ਚੁਣੋ"
+ "ਵੀਡੀਓ ਪਲੇ ਕਰੋ"
+ "ਲੋਕ & ਚੋਣਾਂ"
+ "ਡੀਬਗ ਕਰੋ"
+ "ਲੋਕ & ਚੋਣਾਂ"
+ "ਸਧਾਰਨ"
+ "ਇਸ ਗੱਲਬਾਤ ਵਿੱਚ ਲੋਕ"
+ "ਇੱਕ ਕਾਲ ਕਰੋ"
+ "ਸੁਨੇਹਾ ਭੇਜੋ"
+ "ਸੁਨੇਹਾ ਭੇਜੋ<br/><ਛੋਟਾ>%s</ਤੋਂ ਛੋਟਾ>"
+
+ ਫੋਟੋਆਂ ਭੇਜੋ
+ ਫੋਟੋਆਂ ਭੇਜੋ
+
+
+ ਔਡੀਓ ਭੇਜੋ
+ ਔਡੀਓ ਭੇਜੋ
+
+
+ ਵੀਡਿਓ ਭੇਜੋ
+ ਵੀਡਿਓ ਭੇਜੋ
+
+
+ ਸੰਪਰਕ ਕਾਰਡ ਭੇਜੋ
+ ਸੰਪਰਕ ਕਾਰਡ ਭੇਜੋ
+
+
+ ਅਟੈਚਮੈਂਟਾਂ ਭੇਜੋ
+ ਅਟੈਚਮੈਂਟਾਂ ਭੇਜੋ
+
+
+ %d ਅਟੈਚਮੈਂਟਾਂ ਭੇਜਣ ਲਈ ਤਿਆਰ
+ %d ਅਟੈਚਮੈਂਟਾਂ ਭੇਜਣ ਲਈ ਤਿਆਰ
+
+ "ਫੀਡਬੈਕ ਭੇਜੋ"
+ "Google Play ਸਟੋਰ ਵਿੱਚ ਦੇਖੋ"
+ "ਵਰਜਨ ਜਾਣਕਾਰੀ"
+ "ਵਰਜਨ %1$s"
+ "ਓਪਨ ਸ੍ਰੋਤ ਲਸੰਸ"
+ "ਸੂਚਨਾਵਾਂ"
+ "ਅਟੈਚਮੈਂਟ ਸੀਮਾ ਪੂਰੀ ਹੋਈ"
+ "ਅਟੈਚਮੈਂਟ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ।"
+ "ਕੀ ਸੰਪਰਕ ਜੋੜਨੇ ਹਨ?"
+ "ਸੰਪਰਕ ਜੋੜੋ"
+ "ਵਿਸ਼ਾ"
+ "ਵਿਸ਼ਾ: "
+ "%s%s"
+ "ਸੰਪਰਕ ਕਾਰਡ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ"
+ "ਸੰਪਰਕ ਕਾਰਡ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"
+ "ਸੰਪਰਕ ਕਾਰਡ ਦੇਖੋ"
+
+ %d ਸੰਪਰਕ
+ %d ਸੰਪਰਕ
+
+ "ਸੰਪਰਕ ਕਾਰਡ"
+ "ਜਨਮਦਿਨ"
+ "ਸੂਚਨਾਵਾਂ"
+ "ਸੁਨੇਹਾ ਅੱਗੇ ਭੇਜੋ"
+ "ਜਵਾਬ ਦਿਓ"
+ "+1"
+ "+%d"
+ "SMS ਅਸਮਰਥਿਤ"
+ "ਭੇਜਣ ਲਈ, Messaging ਨੂੰ ਡਿਫੌਲਟ SMS ਐਪ ਦੇ ਤੌਰ ਤੇ ਸੈਟ ਕਰੋ"
+ "Messaging ਨੂੰ ਡਿਫੌਲਟ SMS ਐਪ ਦੇ ਤੌਰ ਤੇ ਸੈਟ ਕਰੋ"
+ "ਬਦਲੋ"
+ "ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ, Messaging ਨੂੰ ਡਿਫੌਲਟ SMS ਐਪਸ ਦੇ ਤੌਰ ਤੇ ਸੈਟ ਕਰੋ"
+ "SMS ਸੁਨੇਹੇ ਭੇਜਣ ਲਈ ਕੋਈ ਤਰਜੀਹੀ SIM ਨਹੀਂ ਚੁਣਿਆ ਗਿਆ"
+ "ਡਿਵਾਈਸ ਮਾਲਕ ਵੱਲੋਂ ਇਸ ਐਪ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ।"
+ "ਠੀਕ"
+ "ਇੱਕ ਗੱਲਬਾਤਾ ਵਿੱਚ ਬਹੁਤ ਜ਼ਿਆਦਾ ਪ੍ਰਾਪਤਕਰਤਾ"
+
+ ਅਪ੍ਰਮਾਣਿਕ ਸੰਪਰਕ
+ ਅਪ੍ਰਮਾਣਿਕ ਸੰਪਰਕ
+
+ "ਕੈਮਰਾ ਚਿੱਤਰ ਲੋਡ ਨਹੀਂ ਕਰ ਸਕਿਆ"
+ "ਤੁਸੀਂ: "
+ "%s: "
+ "ਡ੍ਰਾਫਟ"
+ "ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਨਵੀਂ ਗੱਲਬਾਤ ਚਾਲੂ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਇਸਨੂੰ ਇੱਥੇ ਸੂਚੀਬੱਧ ਦੇਖੋਗੇ"
+ "ਆਰਕਾਈਵ ਕੀਤੀਆਂ ਗੱਲਬਾਤਾਂ ਇੱਥੇ ਪ੍ਰਗਟ ਹੋਣਗੀਆਂ"
+ "ਗੱਲਬਾਤਾਂ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ…"
+ "ਤਸਵੀਰ"
+ "ਔਡੀਓ ਕਲਿਪ"
+ "ਵੀਡੀਓ"
+ "ਸੰਪਰਕ ਕਾਰਡ"
+ "MMS"
+ "ਪਹਿਲਾਂ ਵਰਗਾ ਕਰੋ"
+ "ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"
+ "ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ ਚਾਲੂ ਕਰਨ ਲਈ ਇੱਕ ਸੰਪਰਕ ਨਾਮ ਜਾਂ ਫੋਨ ਨੰਬਰ ਦਰਜ ਕਰੋ"
+ "ਬਲੌਕ ਕਰੋ"
+ "%s ਨੂੰ ਬਲੌਕ ਕਰੋ"
+ "%s ਨੂੰ ਅਨਬਲੌਕ ਕਰੋ"
+ "ਕੀ %s ਨੂੰ ਬਲੌਕ ਕਰਨਾ ਹੈ?"
+ "ਤੁਸੀਂ ਇਸ ਨੰਬਰ ਤੋਂ ਲਗਾਤਾਰ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਕਰੋਗੇ ਪਰੰਤੂ ਹੁਣ ਤੁਹਾਨੂੰ ਸੂਚਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾਏਗਾ। ਇਹ ਗੱਲਬਾਤ ਆਰਕਾਈਵ ਕੀਤੀ ਜਾਏਗੀ।"
+ "ਬਲੌਕ ਕੀਤੇ ਸੰਪਰਕ"
+ "ਅਨਬਲੌਕ ਕਰੋ"
+ "ਬਲੌਕ ਕੀਤੇ ਸੰਪਰਕ"
+ "ਦਸਤਾਵੇਜ਼ ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚੋਂ ਚਿੱਤਰ ਚੁਣੋ"
+ "ਸੁਨੇਹਾ ਭੇਜ ਰਿਹਾ ਹੈ"
+ "ਸੁਨੇਹਾ ਭੇਜਿਆ ਗਿਆ"
+ "ਸੈਲਿਊਲਰ ਡਾਟਾ ਬੰਦ ਹੈ। ਆਪਣੀਆਂ ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਕਰੋ।"
+ "ਏਅਰਪਲੇਨ ਮੋਡ ਵਿੱਚ ਸੁਨੇਹੇ ਨਹੀਂ ਭੇਜ ਸਕਦਾ"
+ "ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਜਾ ਸਕੇਗਾ"
+ "ਸੁਨੇਹਾ ਡਾਊਨਲੋਡ ਕੀਤਾ"
+ "ਸੈਲਿਊਲਰ ਡਾਟਾ ਬੰਦ ਹੈ। ਆਪਣੀਆਂ ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਕਰੋ।"
+ "ਏਅਰਪਲੇਨ ਮੋਡ ਵਿੱਚ ਸੁਨੇਹੇ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ"
+ "ਸੁਨੇਹਾ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕੇਗਾ"
+ "ਸਿਫਰ"
+ "ਇੱਕ"
+ "ਦੋ"
+ "ਤਿੰਨ"
+ "ਚਾਰ"
+ "ਪੰਜ"
+ "ਛੇ"
+ "ਸੱਤ"
+ "ਅੱਠ"
+ "ਨੌ"
+ "%1$s ਨਾਲ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜ ਸਕਦਾ, ਅਸ਼ੁੱਧੀ %2$d"
+ "ਅਗਿਆਤ ਕੈਰੀਅਰ ਨਾਲ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜ ਸਕਦਾ, ਅਸ਼ੁੱਧੀ %1$d"
+ "Fwd: %s"
+ "ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ: ਨੈਟਵਰਕ ਤੇ ਸੇਵਾ ਸਕਿਰਿਆ ਨਹੀਂ"
+ "ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ: ਅਪ੍ਰਮਾਣਿਕ ਡੈਸਟੀਨੇਸ਼ਨ ਪਤਾ"
+ "ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ: ਅਪ੍ਰਮਾਣਿਤ ਸੁਨੇਹਾ"
+ "ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ: ਅਸਮਰਥਿਤ ਸਮੱਗਰੀ"
+ "ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ: ਅਸਮਰਥਿਤ ਸੁਨੇਹਾ"
+ "ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਗਿਆ: ਬਹੁਤ ਜ਼ਿਆਦਾ ਵੱਡਾ"
+ "ਨਵਾਂ ਸੁਨੇਹਾ"
+ "ਦੇਖੋ"
+ "ਚਿੱਤਰ"
+ "ਇੱਕ ਅਨੁੁਕੂਲ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਲੱਭ ਸਕਿਆ"
+ "ਪ੍ਰਾਪਤਕਰਤਾ ਹਟਾਓ"
+ "ਨਵਾਂ ਸੁਨੇਹਾ"
+ "ਰੱਦ ਕਰੋ"
+ "ਪਹੁੰਚ ਬਿੰਦੂ ਸੰਪਾਦਿਤ ਕਰੋ"
+ "ਸੈਟ ਨਹੀਂ ਕੀਤਾ"
+ "ਨਾਮ"
+ "APN"
+ "MMSC"
+ "MMS ਪ੍ਰੌਕਸੀ"
+ "MMS ਪੋਰਟ"
+ "MCC"
+ "MNC"
+ "APN ਪ੍ਰਕਾਰ"
+ "APN ਮਿਟਾਓ"
+ "ਨਵਾਂ APN"
+ "ਸੁਰੱਖਿਅਤ ਕਰੋ"
+ "ਅਣਡਿੱਠਾ"
+ "ਨਾਮ ਖੇਤਰ ਨੂੰ ਖਾਲੀ ਨਹੀਂ ਛੱਡਿਆ ਜਾ ਸਕਦਾ।"
+ "APN ਨੂੰ ਖਾਲੀ ਨਹੀਂ ਛੱਡਿਆ ਜਾ ਸਕਦਾ।"
+ "MCC ਖੇਤਰ 3 ਅੰਕਾਂ ਦਾ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ।"
+ "MNC ਖੇਤਰ 2 ਜਾਂ 3 ਅੰਕਾਂ ਦਾ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ।"
+ "ਡਿਫੌਲਟ APN ਸੈਟਿੰਗਾਂ ਰੀਸਟੋਰ ਕਰ ਰਿਹਾ ਹੈ।"
+ "ਡਿਫੌਲਟਸ ਤੇ ਰੀਸੈਟ ਕਰੋ"
+ "ਡਿਫੌਲਟ APN ਸੈਟਿੰਗਾਂ ਰੀਸੈਟ ਕਰਨਾ ਪੂਰਾ ਹੋਇਆ।"
+ "ਬਿਨਾਂ ਨਾਮ"
+ "ਪਹੁੰਚ ਬਿੰਦੂ ਨਾਮ"
+ "APNs"
+ "ਨਵਾਂ APN"
+ "ਪਹੁੰਚ ਬਿੰਦੂ ਨਾਮ ਸੈਟਿੰਗਾਂ ਇਸ ਉਪਭੋਗਤਾ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"
+ "ਕੀ ਕਲਿਪਬੋਰਡ ਤੇ ਕਾਪੀ ਕਰਨਾ ਹੈ?"
+ "ਕਾਪੀ ਕਰੋ"
+ "%s ਨੂੰ"
+ "ਸਧਾਰਨ"
+ "ਉੱਨਤ"
+ "ਸਧਾਰਨ ਸੈਟਿੰਗਾਂ"
+ "ਉੱਨਤ ਸੈਟਿੰਗਾਂ"
+ "\"%s\" SIM"
+ "ਸਾਰੇ ਪ੍ਰਾਪਤਕਰਤਾਵਾਂ ਨੂੰ ਵੱਖ-ਵੱਖ SMS ਸੁਨੇਹੇ ਭੇਜੋ। ਕੇਵਲ ਤੁਸੀਂ ਹੀ ਕੋਈ ਜਵਾਬ ਪ੍ਰਾਪਤ ਕਰੋਗੇ"
+ "ਸਾਰੇ ਪ੍ਰਾਪਤਕਰਤਾਵਾਂ ਨੂੰ ਇੱਕ ਸਿੰਗ MMS ਭੇਜੋ।"
+ "ਅਗਿਆਤ ਨੰਬਰ"
+ "ਨਵਾਂ ਸੁਨੇਹਾ"
+ "ਨਵਾਂ ਸੁਨੇਹਾ।"
+ "SIM ਚੋਣਕਾਰ"
+ "%1$s ਚੁਣਿਆ ਗਿਆ, SIM ਚੋਣਕਰਤਾ"
+ "ਵਿਸ਼ਾ ਸੰਪਾਦਿਤ ਕਰੋ"
+ "SIM ਚੁਣੋ ਜਾਂ ਵਿਸ਼ਾ ਸੰਪਾਦਿਤ ਕਰੋ"
+ "ਔਡੀਓ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਛੋਹਵੋ ਅਤੇ ਹੋਲਡ ਕਰੋ"
+ "ਨਵੀਂ ਗੱਲਬਾਤ ਚਾਲੂ ਕਰੋ"
+ "Messaging"
+ "Messaging ਸੂਚੀ"
+ "Messaging"
+ "ਨਵਾਂ ਸੁਨੇਹਾ"
+ "ਗੱਲਬਾਤ ਸੂਚੀ"
+ "ਗੱਲਬਾਤਾਂ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ"
+ "ਸੁਨੇਹੇ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ"
+ "ਹੋਰ ਗੱਲਬਾਤਾਂ ਦੇਖੋ"
+ "ਹੋਰ ਸੁਨੇਹੇ ਦੇਖੋ"
+ "ਗੱਲਬਾਤ ਮਿਟਾਈ ਗਈ"
+ "ਗੱਲਬਾਤ ਮਿਟਾਈ ਗਈ। ਇੱਕ ਵੱਖਰੀ Messaging ਗੱਲਬਾਤ ਦਿਖਾਉਣ ਲਈ ਛੋਹਵੋ"
+ "ਬਲੌਕ ਕੀਤਾ"
+ "ਅਨਬਲੌਕ ਕੀਤਾ"
+ "ਸਟੋਰੇਜ ਸਪੇਸ ਘੱਟ ਹੈ। ਕੁਝ ਡਾਟਾ ਨਸ਼ਟ ਹੋ ਸਕਦਾ ਹੈ।"
+ "ਅਟੈਚਮੈਂਟਾਂ ਚੁਣੋ"
+ "ਚੋਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"
+ "%d ਚੁਣਿਆ ਗਿਆ"
+ "ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਜਾਂ ਵੱਧ ਅਟੈਚਮੈਂਟਾਂ ਹਟਾਓ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"
+ "ਤੁਸੀਂ ਆਪਣਾ ਸੁਨੇਹਾ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹੋ, ਪਰੰਤੂ ਇਹ ਸ਼ਾਇਦ ਨਾ ਭੇਜਿਆ ਜਾ ਸਕੇ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਇੱਕ ਜਾਂ ਵੱਧ ਅਟੈਚਮੈਂਟਾਂ ਨਹੀਂ ਹਟਾਉਂਦੇ।"
+ "ਤੁਸੀਂ ਪ੍ਰਤੀ ਸੁਨੇਹਾ ਕੇਵਲ ਇੱਕ ਵੀਡੀਓ ਭੇਜ ਸਕਦੇ ਹੋ। ਕਿਰਪਾ ਕਰਕੇ ਵਾਧੂ ਵੀਡੀਓ ਹਟਾਓ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"
+ "Messaging ਅਟੈਚਮੈਂਟ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ।"
+ "ਫੇਰ ਵੀ ਭੇਜੋ"
+ "ਗੱਲਬਾਤ ਚਾਲੂ ਨਹੀਂ ਕਰ ਸਕਿਆ"
+ "%1$s (%2$s)"
+ "%s ਚੁਣਿਆ ਗਿਆ"
+
diff --git a/res/values-pl/arrays.xml b/res/values-pl/arrays.xml
new file mode 100644
index 0000000..2bd82e4
--- /dev/null
+++ b/res/values-pl/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "brak tematu"
+ "braktematu"
+
+
+ "Tak"
+ "Nie"
+ "OK"
+ "Ha ha"
+ "Dzięki"
+ "Zgadzam się"
+ "Super"
+ "Jestem w drodze"
+ "Skontaktuję się z Tobą później"
+ ":)"
+ ":("
+
+
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
new file mode 100644
index 0000000..0ee2511
--- /dev/null
+++ b/res/values-pl/strings.xml
@@ -0,0 +1,571 @@
+
+
+
+
+ "Wiadomości"
+ "Wiadomości"
+ "Wybierz wątek"
+ "Ustawienia"
+ "Wyślij wiadomość"
+ "Dodaj załącznik"
+ "Pomoc"
+ "Witamy"
+ "Pomiń"
+ "Dalej >"
+ "Dalej"
+ "Zakończ"
+ "Ustawienia >"
+ "Ustawienia"
+ "Aplikacja SMS/MMS potrzebuje uprawnień do SMS-ów, telefonu i kontaktów."
+ "Uprawnienia możesz zmienić, klikając Ustawienia > Aplikacje > SMS/MMS > Uprawnienia."
+ "Uprawnienia możesz zmienić, klikając Ustawienia, Aplikacje, SMS/MMS, Uprawnienia."
+ "Częste kontakty"
+ "Wszystkie kontakty"
+ "Wyślij pod numer %s"
+ "Zrób zdjęcia lub nagraj film"
+ "Wybierz obrazy z tego urządzenia"
+ "Nagraj dźwięk"
+ "Wybierz zdjęcie"
+ "Plik multimedialny został wybrany."
+ "Plik multimedialny nie został wybrany."
+ "Wybrano: %d"
+ "obraz – %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "obraz"
+ "Nagraj dźwięk"
+ "Udostępnij"
+ "W tej chwili"
+ "Teraz"
+
+ %d min
+ %d min
+ %d min
+ %d min
+
+
+ %d godziny
+ %d godzin
+ %d godziny
+ %d godzina
+
+
+ %d dni
+ %d dni
+ %d dnia
+ %d dzień
+
+
+ %d tygodnie
+ %d tygodni
+ %d tygodnia
+ tydzień
+
+
+ %d miesiące
+ %d miesięcy
+ %d miesiąca
+ miesiąc
+
+
+ %d lata
+ %d lat
+ %d roku
+ rok
+
+ "Wiadomość klasy 0"
+ "Zapisz"
+ "Na urządzeniu jest mało miejsca. Aplikacja SMS/MMS automatycznie usunie starsze SMS-y, by zwolnić miejsce."
+ "Kończy się miejsce"
+ "Aplikacja SMS/MMS może nie wysyłać i nie odbierać wiadomości do momentu zwolnienia miejsca na urządzeniu."
+ "Mało miejsca na SMS-y. Może usuniesz niektóre wiadomości?"
+ "Potwierdź swój numer telefonu"
+ "Dzięki tej jednorazowej czynności aplikacja SMS/MMS będzie poprawnie dostarczać Twoje wiadomości grupowe."
+ "Numer telefonu"
+ "Usuń wszystkie MMS-y"
+ "Usuń wiadomości starsze niż %s"
+ "Automatycznie usuwaj wiadomości starsze niż %s"
+ "Ignoruj"
+ "Usunąć wszystkie MMS-y?"
+ "Usunąć wiadomości starsze niż %s?"
+ "Usunąć wiadomości starsze niż %s i włączyć automatyczne usuwanie?"
+ "%s pisze"
+ "Treść Twojej wiadomości"
+ "Wiadomość od użytkownika %s"
+ "Wysłałeś wiadomość"
+ "Wysyłam…"
+ "Nie wysłano. Kliknij, by spróbować ponownie."
+ "Nie wysłano. Próbuję ponownie…"
+ "Wyślij ponownie lub usuń"
+ "Zadzwoń do służb ratunkowych. Tym razem nie udało się dostarczyć SMS-a."
+ "Błąd"
+ "Nowa wiadomość MMS do pobrania"
+ "Nowa wiadomość MMS"
+ "Nie udało się pobrać"
+ "Kliknij, by spróbować ponownie"
+ "Kliknij, by pobrać"
+ "Pobierz lub usuń"
+ "Pobieram…"
+ "Wiadomość wygasła lub jest niedostępna"
+ "rozmiar: %1$s, termin ważności: %2$s"
+ "Nie można wysłać. Nieprawidłowy adresat."
+ "Usługa nie została aktywowana w sieci"
+ "Nie udało się wysłać z powodu problemu z siecią"
+ "Wiadomość wygasła lub jest niedostępna"
+ "(Brak tematu)"
+ "Nieznany nadawca"
+ "Dostarczono"
+ "Nie udało się pobrać wiadomości %1$s od użytkownika %2$s."
+ "Nie można dokończyć operacji na bazie danych z powodu zbyt małej ilości pamięci"
+ "Wiadomość nie została wysłana"
+ "Niektóre wiadomości nie zostały wysłane w aplikacji SMS/MMS"
+
+ %d wiadomości w %d wątkach
+ %d wiadomości w %d wątkach
+ %d wiadomości w %d wątku
+ %d wiadomości w jednym wątku
+
+ "Wiadomość nie została pobrana"
+ "Niektóre wiadomości nie zostały pobrane w aplikacji SMS/MMS"
+
+ %d wiadomości w %d wątkach
+ %d wiadomości w %d wątkach
+ %d wiadomości w %d wątku
+ %d wiadomości w jednym wątku
+
+ "Wiadomość do %1$s nie została wysłana"
+ "Zadzwoń do służb ratunkowych. Tym razem nie udało się dostarczyć SMS-a pod numer %1$s."
+
+ %d nowe wiadomości
+ %d nowych wiadomości
+ %d nowej wiadomości
+ Nowa wiadomość
+
+ "Rozpocznij"
+ "Aparat jest niedostępny"
+ "Aparat jest niedostępny"
+ "Nagrywanie filmu jest niedostępne"
+ "Nie można zapisać pliku multimedialnego"
+ "Nie można zrobić zdjęcia"
+ "Wstecz"
+ "Archiwum"
+ "Usuń"
+ "Archiwizuj"
+ "Przywróć z archiwum"
+ "Wyłącz powiadomienia"
+ "Włącz powiadomienia"
+ "Dodaj kontakt"
+ "Pobierz"
+ "Wyślij"
+ "Usuń"
+ "Usunąć tę wiadomość?"
+ "Nie można tego cofnąć."
+ "Usuń"
+
+ Usunąć te wątki?
+ Usunąć te wątki?
+ Usunąć te wątki?
+ Usunąć ten wątek?
+
+ "Usuń"
+ "Anuluj"
+ "Do"
+ "Wybierz wiele obrazów"
+ "Potwierdź wybór"
+ "Jeszcze %d"
+ "Nie można nagrać dźwięku. Spróbuj ponownie."
+ "Nie można odtworzyć dźwięku. Spróbuj ponownie."
+ "Nie można zapisać dźwięku. Spróbuj ponownie."
+ "Kliknij i przytrzymaj"
+ ", "
+ " "
+ ": "
+ " "
+ "Zdjęcie"
+ "Klip dźwiękowy"
+ "Film"
+ "Wizytówka"
+ "Pobierz"
+ "Odpowiedz SMS-em"
+ "Wyślij MMS-a"
+ "Odpowiedz"
+
+ %d uczestników
+ %d uczestników
+ %d uczestnika
+ %d uczestnik
+
+ "Ja"
+ "Kontakt został zablokowany i zarchiwizowany"
+ "Kontakt odblokowany i rozpakowany"
+ "Zarchiwizowano: %d"
+ "Przywrócone z archiwum: %d"
+ "Powiadomienia wyłączone"
+ "Powiadomienia włączone"
+ "Wszystko gotowe. Ponownie kliknij Wyślij."
+ "SMS/MMS to teraz domyślna aplikacja do SMS-ów."
+
+ Odrzuć załączniki
+ Odrzuć załączniki
+ Odrzuć załączniki
+ Odrzuć załącznik
+
+ "Załącznik audio"
+ "Odtwórz załącznik audio"
+ "Pauza"
+ "Wiadomość od użytkownika %s: %s."
+ "Nieudane odbieranie wiadomości od: %s: %s. Godzina: %s."
+ "Wiadomość od: %s: %s. Godzina: %s."
+ "Niewysłana wiadomość do: %s: %s. Godzina: %s."
+ "Wysyłanie wiadomości do: %s: %s. Godzina: %s."
+ "Nieudane wysyłanie wiadomości do: %s: %s. Godzina: %s."
+ "Wiadomość do: %s: %s. Godzina: %s."
+ "Nieudane odbieranie wiadomości od: %s: %s. Godzina: %s. %s."
+ "Wiadomość od: %s: %s. Godzina: %s. %s."
+ "Niewysłana wiadomość do: %s: %s. Godzina: %s."
+ "Wysyłanie wiadomości do: %s: %s. Godzina: %s."
+ "Nieudane wysyłanie wiadomości do: %s: %s. Godzina: %s."
+ "Wiadomość do: %s: %s. Godzina: %s."
+ "Niedostarczona wiadomość. Kliknij, aby ponowić próbę."
+ "Rozmowa z: %s"
+ "Usuń temat"
+ "Nagraj film"
+ "Zrób zdjęcie"
+ "Zrób zdjęcie"
+ "Zacznij nagrywać film"
+ "Włącz aparat pełnoekranowy"
+ "Przełącz między kamerą z przodu i z tyłu"
+ "Zatrzymaj nagrywanie i dołącz film"
+ "Zatrzymaj nagrywanie filmu"
+ "Zdjęcia z aplikacji SMS/MMS"
+
+ %d zdjęcia zapisane w albumie „%s”
+ %d zdjęć zapisanych w albumie „%s”
+ %d zdjęcia zapisane w albumie „%s”
+ %d zdjęcie zapisane w albumie „%s”
+
+
+ %d filmy zapisane w albumie „%s”
+ %d filmów zapisanych w albumie „%s”
+ %d filmu zapisane w albumie „%s”
+ %d film zapisany w albumie „%s”
+
+
+ %d załączniki zapisane w albumie „%s”
+ %d załączników zapisanych w albumie „%s”
+ %d załącznika zapisane w albumie „%s”
+ %d załącznik zapisany w albumie „%s”
+
+
+ %d załączniki zapisane w folderze „Pobrane pliki”
+ %d załączników zapisanych w folderze „Pobrane pliki”
+ %d załącznika zapisane w folderze „Pobrane pliki”
+ %d załącznik zapisany w folderze „Pobrane pliki”
+
+
+ %d załączniki zapisane
+ %d załączników zapisanych
+ %d załącznika zapisane
+ %d załącznik zapisany
+
+
+ Nie udało się zapisać %d załączników
+ Nie udało się zapisać %d załączników
+ Nie udało się zapisać %d załącznika
+ Nie udało się zapisać %d załącznika
+
+ "Zapisany załącznik MMS-a"
+ "Ustawienia"
+ "Zarchiwizowane"
+ "Zamknij"
+ "MMS"
+ "Zaawansowane"
+ "Debugowanie"
+ "Powiadomienia"
+ "Dźwięk"
+ "Cichy"
+ "Wibracje"
+ "Zablokowany"
+ "Raporty doręczeń SMS-ów"
+ "Otrzymuj raport o dostarczeniu każdego wysłanego SMS-a"
+ "Autopobieranie"
+ "Automatycznie pobieraj MMS-y"
+ "Autopobieranie w roamingu"
+ "Automatycznie pobieraj MMS-y w roamingu"
+ "Wiadomości grupowe"
+ "Używaj MMS-ów, gdy chcę wysłać jedną wiadomość do wielu odbiorców"
+ "Domyślna aplikacja do SMS-ów"
+ "Domyślna aplikacja do SMS-ów"
+
+
+ "Twój numer telefonu"
+ "Nieznany"
+ "Dźwięki przy wysyłaniu wiadomości"
+ "Zrzuć SMS-y"
+ "Zrzuć odebrane nieprzetworzone dane SMS-ów do pliku w pamięci zewnętrznej"
+ "Zrzuć MMS-y"
+ "Zrzuć odebrane nieprzetworzone dane MMS-ów do pliku w pamięci zewnętrznej"
+ "Alerty o zagrożeniach"
+ "Opcje wiadomości"
+ "Skopiuj tekst"
+ "Wyświetl szczegóły"
+ "Usuń"
+ "Przekaż dalej"
+ "Szczegóły wiadomości"
+ "Typ: "
+ "SMS"
+ "Wiadomość multimedialna"
+ "Od: "
+ "Do: "
+ "Wysłano: "
+ "Odebrane: "
+ "Temat: "
+ "Rozmiar: "
+ "Priorytet: "
+ "SIM: "
+ "Wysoki"
+ "Normalny"
+ "Niski"
+ "SIM %s"
+ "Ukryty adres nadawcy"
+ "Nie można wysłać wiadomości w czasie ładowania załączników."
+ "Nie można załadować załącznika. Spróbuj ponownie."
+ "Sieć nie jest gotowa. Spróbuj ponownie."
+ "Usuń tekst"
+ "Przełącz się między wpisywaniem tekstu i cyfr"
+ "Dodaj uczestników"
+ "Potwierdź uczestników"
+ "Rozpocznij nowy wątek"
+ "Wybierz ten element"
+ "Odtwórz film"
+ "Osoby i opcje"
+ "Debuguj"
+ "Osoby i opcje"
+ "Ogólne"
+ "Uczestnicy tej rozmowy"
+ "Zadzwoń"
+ "Wyślij wiadomość"
+ "Wyślij wiadomość<br/><small>z %s</small>"
+
+ Wyślij zdjęcia
+ Wyślij zdjęcia
+ Wyślij zdjęcia
+ Wyślij zdjęcie
+
+
+ Wyślij pliki audio
+ Wyślij pliki audio
+ Wyślij pliki audio
+ Wyślij plik audio
+
+
+ Wyślij filmy
+ Wyślij filmy
+ Wyślij filmy
+ Wyślij film
+
+
+ Wyślij wizytówki
+ Wyślij wizytówki
+ Wyślij wizytówki
+ Wyślij wizytówkę
+
+
+ Wyślij załączniki
+ Wyślij załączniki
+ Wyślij załączniki
+ Wyślij załącznik
+
+
+ %d załączniki gotowe do wysłania
+ %d załączników gotowych do wysłania
+ %d załącznika gotowe do wysłania
+ Jeden załącznik gotowy do wysłania
+
+ "Prześlij opinię"
+ "Zobacz w Sklepie Google Play"
+ "Informacje o wersji"
+ "Wersja %1$s"
+ "Licencje open source"
+ "Powiadomienia"
+ "Osiągnięto limit załączników"
+ "Nie udało się załadować załącznika."
+ "Dodać do kontaktów?"
+ "Dodaj kontakt"
+ "Temat"
+ "Temat: "
+ "%s%s"
+ "Ładowanie wizytówki"
+ "Nie można załadować wizytówki"
+ "Wyświetl wizytówkę"
+
+ %d kontakty
+ %d kontaktów
+ %d kontaktu
+ %d kontakt
+
+ "Wizytówki"
+ "Urodziny"
+ "Notatki"
+ "Przekaż wiadomość dalej"
+ "Odpowiedz"
+ "+1"
+ "+%d"
+ "SMS-y wyłączone"
+ "Aby wysyłać wiadomości, ustaw SMS/MMS jako domyślną aplikację do SMS-ów"
+ "Ustaw SMS/MMS jako domyślną aplikację do SMS-ów"
+ "Zmień"
+ "Aby odbierać wiadomości, ustaw SMS/MMS jako domyślną aplikację do SMS-ów"
+ "Nie wybrano preferowanej karty SIM do wysyłania SMS-ów"
+ "Właściciel urządzenia nie zezwolił na działanie tej aplikacji."
+ "OK"
+ "Zbyt wielu uczestników rozmowy"
+
+ Nieprawidłowe kontakty
+ Nieprawidłowe kontakty
+ Nieprawidłowe kontakty
+ Nieprawidłowy kontakt
+
+ "Nie udało się załadować zdjęcia z aparatu"
+ "Ty: "
+ "%s: "
+ "Wersja robocza"
+ "Po rozpoczęciu nowej rozmowy zobaczysz ją tutaj"
+ "Tutaj będą widoczne zarchiwizowane wątki"
+ "Ładuję wątki…"
+ "Zdjęcie"
+ "Klip dźwiękowy"
+ "Film"
+ "Wizytówka"
+ "MMS"
+ "Cofnij"
+ "Ponów"
+ "Wpisz nazwę kontaktu lub numer telefonu, by rozpocząć nową wiadomość"
+ "Zablokuj"
+ "Zablokuj: %s"
+ "Odblokuj: %s"
+ "Zablokować %s?"
+ "Będziesz nadal otrzymywać wiadomości z tego numeru, ale nie będzie już powiadomień o nich. Ten wątek zostanie zarchiwizowany."
+ "Zablokowane kontakty"
+ "ODBLOKUJ"
+ "Zablokowane kontakty"
+ "Wybierz obraz z biblioteki dokumentów"
+ "Wysyłam wiadomość"
+ "Wiadomość wysłana"
+ "Komórkowa transmisja danych jest wyłączona. Sprawdź ustawienia."
+ "W trybie samolotowym nie można wysyłać wiadomości"
+ "Nie można wysłać wiadomości"
+ "Wiadomość pobrana"
+ "Komórkowa transmisja danych jest wyłączona. Sprawdź ustawienia."
+ "Wiadomości nie można pobierać w trybie samolotowym"
+ "Nie udało się pobrać wiadomości"
+ "Zero"
+ "Jeden"
+ "Dwa"
+ "Trzy"
+ "Cztery"
+ "Pięć"
+ "Sześć"
+ "Siedem"
+ "Osiem"
+ "Dziewięć"
+ "Nie można wysłać wiadomości w sieci %1$s (błąd %2$d)"
+ "Nie można wysłać wiadomości w sieci nieznanego operatora (błąd %1$d)"
+ "PD: %s"
+ "Nie wysłano wiadomości: usługa nie została aktywowana w sieci"
+ "Wiadomość nie została wysłana: nieprawidłowy adres docelowy"
+ "Wiadomość nie została wysłana: nieprawidłowa wiadomość"
+ "Wiadomość nie została wysłana: nieobsługiwane treści"
+ "Wiadomość nie została wysłana: nieobsługiwana wiadomość"
+ "Wiadomość nie została wysłana: jest za duża"
+ "Nowa wiadomość"
+ "Wyświetl"
+ "Obraz"
+ "Nie udało się znaleźć stosownej aplikacji"
+ "Usuń odbiorcę"
+ "Nowa wiadomość"
+ "Anuluj"
+ "Edytuj punkt dostępu"
+ "Nie ustawiono"
+ "Nazwa"
+ "APN"
+ "MMSC"
+ "Proxy dla MMS"
+ "Port MMS"
+ "MCC"
+ "MNC"
+ "Typ APN"
+ "Usuń APN"
+ "Nowy APN"
+ "Zapisz"
+ "Odrzuć"
+ "Pole Nazwa nie może być puste."
+ "Nazwa APN nie może być pusta."
+ "Pole MCC musi zawierać 3 cyfry."
+ "Pole MNC musi zawierać 2 lub 3 cyfry."
+ "Przywracam domyślne ustawienia APN."
+ "Przywróć domyślne"
+ "Przywrócono domyślne ustawienia APN."
+ "Bez nazwy"
+ "Nazwy punktów dostępu"
+ "APN-y"
+ "Nowy APN"
+ "Ustawienia nazwy punktu dostępu są niedostępne dla tego użytkownika"
+ "Skopiować do schowka?"
+ "Kopiuj"
+ "do %s"
+ "Ogólne"
+ "Zaawansowane"
+ "Ustawienia ogólne"
+ "Ustawienia zaawansowane"
+ "Karta SIM „%s”"
+ "Wyślij osobne SMS-y do wszystkich odbiorców. Odpowiedzi trafią tylko do Ciebie"
+ "Wysyłaj jednego MMS-a do wszystkich odbiorców"
+ "Nieznany numer"
+ "Nowa wiadomość"
+ "Nowa wiadomość."
+ "Przełącznik SIM"
+ "Przełącznik SIM, wybrana karta: %1$s"
+ "Edytuj temat"
+ "Wybierz SIM lub edytuj temat"
+ "Dotknij i przytrzymaj, aby nagrać dźwięk"
+ "Zacznij nową rozmowę"
+ "Wiadomości"
+ "Lista wiadomości"
+ "Wiadomości"
+ "Nowa wiadomość"
+ "Lista wątków"
+ "Ładuję wątki"
+ "Wczytuję wiadomości"
+ "Wyświetl więcej wątków"
+ "Wyświetl więcej wiadomości"
+ "Wątek został usunięty"
+ "Rozmowa usunięta. Kliknij, by zobaczyć inną rozmowę w aplikacji SMS/MMS"
+ "Zablokowano"
+ "Odblokowano"
+ "Mała ilość miejsca. Część danych może zostać utracona."
+ "Wybierz załączniki"
+ "Potwierdź wybór"
+ "Wybrano %d"
+ "Usuń co najmniej jeden załącznik i spróbuj ponownie."
+ "Możesz spróbować wysłać wiadomość, ale może ona nie zostać dostarczona, dopóki nie usuniesz przynajmniej jednego załącznika."
+ "W jednej wiadomości możesz wysłać tylko jeden film. Usuń dodatkowe filmy i spróbuj ponownie."
+ "Nie udało się załadować załącznika w aplikacji SMS/MMS."
+ "Wyślij mimo wszystko"
+ "Nie udało się rozpocząć rozmowy"
+ "%1$s (%2$s)"
+ "Wybrano %s"
+
diff --git a/res/values-pt-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml
new file mode 100644
index 0000000..3f99811
--- /dev/null
+++ b/res/values-pt-rPT/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "sem assunto"
+ "sem assunto"
+
+
+ "Sim"
+ "Não"
+ "OK"
+ "Eh eh"
+ "Obrigado"
+ "Aceito"
+ "Boa"
+ "Estou a caminho"
+ "OK, ligo mais tarde"
+ ":)"
+ ":("
+
+
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..e546031
--- /dev/null
+++ b/res/values-pt-rPT/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Mensagens"
+ "Mensagens"
+ "Selecionar conversa"
+ "Definições"
+ "Enviar mensagem"
+ "Adicionar um anexo"
+ "Ajuda"
+ "Bem-vindo"
+ "Ignorar"
+ "Seguinte >"
+ "Seguinte"
+ "Sair"
+ "Definições >"
+ "Definições"
+ "A aplicação Mensagens necessita de autorização para SMS, Telefone e Contactos."
+ "Pode alterar as autorizações em Definições > Aplicações > Mensagens > Autorizações."
+ "Pode alterar as autorizações em Definições, Aplicações, Mensagens, Autorizações."
+ "Frequentes"
+ "Todos os contactos"
+ "Enviar para %s"
+ "Capturar imagens ou vídeo"
+ "Escolher imagens deste dispositivo"
+ "Gravar áudio"
+ "Escolher fotografia"
+ "O ficheiro multimédia está selecionado."
+ "O ficheiro multimédia está desselecionado."
+ "%d selecionado(s)"
+ "imagem de %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "imagem"
+ "Gravar áudio"
+ "Partilhar"
+ "Agora mesmo"
+ "Agora"
+
+ %d min
+ %d min
+
+
+ %d horas
+ %d hora
+
+
+ %d dias
+ %d dia
+
+
+ %d semanas
+ uma semana
+
+
+ %d meses
+ um mês
+
+
+ %d anos
+ um ano
+
+ "Mensagem de classe 0"
+ "Guardar"
+ "O dispositivo tem pouco espaço disponível. A aplicação Mensagens elimina automaticamente mensagens mais antigas para libertar espaço."
+ "Está quase sem espaço de armazenamento"
+ "A aplicação Mensagens pode não enviar ou receber mensagens até que exista mais espaço disponível no dispositivo."
+ "Armazenamento SMS reduzido. Pode ter de eliminar mensagens."
+ "Confirmar número de telefone"
+ "Este passo único assegura que a aplicação Mensagens fornece as suas mensagens de grupo corretamente."
+ "Número de telefone"
+ "Eliminar todas as mensagens com multimédia"
+ "Eliminar mensagens com mais de %s"
+ "Eliminar automaticamente mensagens com mais de %s"
+ "Ignorar"
+ "Eliminar todas as mensagens com multimédia?"
+ "Eliminar mensagens com mais de %s?"
+ "Eliminar mensagens com mais de %s e ativar eliminação automática?"
+ "%s disse"
+ "Você disse"
+ "Mensagem de %s"
+ "Enviou uma mensagem"
+ "A enviar..."
+ "Não enviado. Toque para tentar novamente."
+ "Não enviado. A tentar novamente..."
+ "Reenviar ou eliminar"
+ "Faça uma chamada de voz para os serviços de emergência. Neste momento, não foi possível entregar a sua mensagem de texto."
+ "Falha"
+ "Nova mensagem MMS para transferir"
+ "Nova mensagem MMS"
+ "Não foi possível transferir"
+ "Toque para tentar novamente"
+ "Toque para transferir"
+ "Transferir ou eliminar"
+ "A transferir..."
+ "Mensagem expirada ou não disponível"
+ "tamanho: %1$s, data de validade: %2$s"
+ "Não é possível enviar. O destinatário não é válido."
+ "Serviço não ativado na rede"
+ "Não foi possível enviar devido a um problema de rede"
+ "Mensagem expirada ou não disponível"
+ "(Sem assunto)"
+ "Remetente desconhecido"
+ "Entregue"
+ "Não foi possível transferir a mensagem %1$s de %2$s."
+ "Não foi possível concluir a operação da base de dados devido a pouca memória"
+ "Mensagem não enviada"
+ "Algumas mensagens não enviadas na aplicação Mensagens"
+
+ %d mensagens em %d conversas
+ %d mensagens numa conversa
+
+ "Mensagem não transferida"
+ "Algumas mensagens não transferidas na aplicação Mensagens"
+
+ %d mensagens em %d conversas
+ %d mensagens numa conversa
+
+ "Mensagem para %1$s não enviada"
+ "Faça uma chamada de voz para os serviços de emergência. Neste momento, não foi possível entregar a sua mensagem de texto para o número %1$s."
+
+ %d novas mensagens
+ Nova mensagem
+
+ "Iniciar"
+ "Câmara não disponível"
+ "Câmara não disponível"
+ "Captura de vídeo não disponível"
+ "Não é possível guardar multimédia"
+ "Não é possível tirar a fotografia"
+ "Anterior"
+ "Arquivadas"
+ "Eliminar"
+ "Arquivar"
+ "Retirar do arquivo"
+ "Desativar as notificações"
+ "Ativar notificações"
+ "Adicionar contacto"
+ "Transferir"
+ "Enviar"
+ "Eliminar"
+ "Pretende eliminar esta mensagem?"
+ "Esta ação não pode ser anulada."
+ "Eliminar"
+
+ Pretende eliminar estas conversas?
+ Pretende eliminar esta conversa?
+
+ "Eliminar"
+ "Cancelar"
+ "Para"
+ "Selecionar várias imagens"
+ "Confirmar seleção"
+ "+%d"
+ "Não é possível gravar áudio. Tente novamente."
+ "Não é possível reproduzir áudio. Tente novamente."
+ "Não foi possível guardar áudio. Tente novamente."
+ "Toque sem largar"
+ ", "
+ " "
+ ": "
+ " "
+ "Imagem"
+ "Clipe de áudio"
+ "Vídeo"
+ "Cartão de contacto"
+ "Transferir"
+ "Responder por SMS"
+ "Responder por MMS"
+ "Responder"
+
+ %d participantes
+ %d participante
+
+ "Eu"
+ "Contacto bloqueado e arquivado"
+ "Contacto desbloqueado e não arquivado"
+ "%d arquivada(s)"
+ "%d não arquivada(s)"
+ "Notificações desativadas"
+ "Notificações ativadas"
+ "Tudo definido. Toque novamente em Enviar."
+ "A aplicação Mensagens foi definida com êxito como a aplicação de SMS predefinida."
+
+ Rejeitar anexos
+ Rejeitar anexo
+
+ "Anexo de áudio"
+ "Reproduzir anexo de áudio"
+ "Interromper"
+ "Mensagem de %s: %s."
+ "Mensagem falhada de %s: %s. Hora: %s."
+ "Mensagem de %s: %s. Hora: %s."
+ "Mensagem não enviada para %s: %s. Hora: %s."
+ "A enviar mensagem para %s: %s. Hora: %s."
+ "Mensagem falhada para %s: %s. Hora: %s."
+ "Mensagem para %s: %s. Hora: %s."
+ "Mensagem falhada de %s: %s. Hora: %s. %s."
+ "Mensagem de %s: %s. Hora: %s. %s."
+ "Mensagem não enviada para %s: %s. Hora: %s."
+ "A enviar mensagem para %s: %s. Hora: %s."
+ "Mensagem falhada para %s: %s. Hora: %s."
+ "Mensagem para %s: %s. Hora: %s."
+ "Mensagem falhada. Toque para tentar novamente."
+ "Conversa com %s"
+ "Eliminar assunto"
+ "Capturar vídeo"
+ "Capturar uma imagem fixa"
+ "Tirar fotografia"
+ "Começar a gravar vídeo"
+ "Mudar para a câmara de ecrã completo"
+ "Alternar entre as câmaras frontal e traseira"
+ "Parar gravação e anexar vídeo"
+ "Parar a gravação de vídeo"
+ "Fotos das Mensagens"
+
+ %d fotos guardadas no álbum \"%s\"
+ %d foto guardada no álbum \"%s\"
+
+
+ %d vídeos guardados no álbum \"%s\"
+ %d vídeo guardado no álbum \"%s\"
+
+
+ %d anexos guardados no álbum \"%s\"
+ %d anexo guardado no álbum \"%s\"
+
+
+ %d anexos guardados em \"Transferências\"
+ %d anexo guardado em \"Transferências\"
+
+
+ %d anexos guardados
+ %d anexo guardado
+
+
+ Não foi possível guardar %d anexos
+ Não foi possível guardar %d anexo
+
+ "Anexo de MMS guardado"
+ "Definições"
+ "Arquivadas"
+ "Fechar"
+ "MMS"
+ "Avançadas"
+ "Depurar"
+ "Notificações"
+ "Som"
+ "Silencioso"
+ "Vibrar"
+ "Bloqueado"
+ "Relatórios de entrega de SMS"
+ "Solicitar um relatório de entrega para cada SMS enviada"
+ "Recuperação automática"
+ "Recuperar automaticamente mensagens MMS"
+ "Recuperar automat. em roaming"
+ "Obter automaticamente MMS em roaming"
+ "Mensagens de grupo"
+ "Utilizar MMS para enviar uma única mensagem quando houver vários destinatários"
+ "Aplicação de SMS predefinida"
+ "Aplicação de SMS predefinida"
+
+
+ "O seu número de telefone"
+ "Desconhecido"
+ "Sons de mensagem enviada"
+ "Criar cópia de segurança de SMS"
+ "A cópia de segurança recebeu dados SMS não processados no ficheiro de armazenamento externo"
+ "Criar cópia de segurança de MMS"
+ "A cópia de segurança recebeu dados MMS não processados no ficheiro de armazenamento externo"
+ "Alertas sem fios"
+ "Opções da mensagem"
+ "Copiar texto"
+ "Ver detalhes"
+ "Eliminar"
+ "Encaminhar"
+ "Detalhes da mensagem"
+ "Tipo: "
+ "Mensagem de texto"
+ "Mensagem multimédia"
+ "De: "
+ "Para: "
+ "Enviadas: "
+ "Recebidas: "
+ "Assunto: "
+ "Tamanho: "
+ "Prioridade: "
+ "SIM: "
+ "Alta"
+ "Normal"
+ "Baixa"
+ "SIM %s"
+ "Endereço do remetente oculto"
+ "Não é possível enviar a mensagem enquanto os anexos estiverem a ser carregados."
+ "Não é possível carregar o anexo. Tente novamente."
+ "A rede não está pronta. Tente novamente."
+ "Eliminar texto"
+ "Alternar entre a introdução de texto e números"
+ "Adicionar mais participantes"
+ "Confirmar participantes"
+ "Iniciar nova conversa"
+ "Selecionar este item"
+ "Reproduzir vídeo"
+ "Pessoas e opções"
+ "Depurar"
+ "Pessoas e opções"
+ "Geral"
+ "Pessoas nesta conversa"
+ "Efetuar uma chamada"
+ "Enviar mensagem"
+ "Enviar mensagem<br/><small>de %s</small>"
+
+ Enviar fotos
+ Enviar foto
+
+
+ Enviar ficheiros de áudio
+ Enviar ficheiro de áudio
+
+
+ Enviar vídeos
+ Enviar vídeo
+
+
+ Enviar cartões de contacto
+ Enviar cartão de contacto
+
+
+ Enviar anexos
+ Enviar anexo
+
+
+ %d anexos prontos a enviar
+ Um anexo pronto a enviar
+
+ "Enviar comentários"
+ "Ver na Google Play Store"
+ "Informações da versão"
+ "Versão %1$s"
+ "Licenças de código aberto"
+ "Notificações"
+ "Foi atingido o limite de anexos"
+ "Falha ao carregar o anexo."
+ "Adicionar a Contactos?"
+ "Adicionar contacto"
+ "Assunto"
+ "Assunto: "
+ "%s%s"
+ "A carregar o cartão de contacto"
+ "Não foi possível carregar o cartão de contacto"
+ "Ver cartão de contacto"
+
+ %d contactos
+ %d contacto
+
+ "Cartões de contacto"
+ "Aniversário"
+ "Notas"
+ "Encaminhar mensagem"
+ "Responder"
+ "+1"
+ "+%d"
+ "SMS desativado"
+ "Para enviar, defina a aplicação Mensagens como a aplicação de SMS predefinida"
+ "Defina a aplicação Mensagens como a aplicação de SMS predefinida"
+ "Alterar"
+ "Para receber mensagens, defina a aplicação Mensagens como a aplicação de SMS predefinida"
+ "Nenhum SIM preferido selecionado para o envio de mensagens SMS"
+ "Esta aplicação não é permitida pelo proprietário do dispositivo."
+ "OK"
+ "Demasiados participantes numa conversa"
+
+ Contactos inválidos
+ Contacto inválido
+
+ "Não foi possível carregar a imagem da câmara"
+ "Utilizador: "
+ "%s: "
+ "Rascunho"
+ "Ao iniciar uma nova conversa, esta será listada aqui"
+ "As conversas arquivadas aparecem aqui"
+ "A carregar conversações..."
+ "Imagem"
+ "Clipe de áudio"
+ "Vídeo"
+ "Cartão de contacto"
+ "MMS"
+ "Anular"
+ "Tentar novamente"
+ "Introduza um nome ou número de telefone do contacto para iniciar uma nova mensagem"
+ "Bloquear"
+ "Bloquear %s"
+ "Desbloquear %s"
+ "Pretende bloquear %s?"
+ "O utilizador continuará a receber mensagens deste número, mas deixará de ser notificado. Esta conversa será arquivada."
+ "Contactos bloqueados"
+ "DESBLOQUEAR"
+ "Contactos bloqueados"
+ "Escolher imagem da biblioteca de documentos"
+ "A enviar mensagem"
+ "Mensagem enviada"
+ "Os dados celulares estão desligados. Verifique as suas definições."
+ "Não é possível enviar mensagens no modo de avião"
+ "Não foi possível enviar a mensagem"
+ "Mensagem transferida"
+ "Os dados celulares estão desligados. Verifique as suas definições."
+ "Não é possível transferir mensagens no modo de avião"
+ "Não foi possível transferir a mensagem"
+ "Zero"
+ "Um"
+ "Dois"
+ "Três"
+ "Quatro"
+ "Cinco"
+ "Seis"
+ "Sete"
+ "Oito"
+ "Nove"
+ "Não é possível enviar a mensagem com %1$s, erro %2$d"
+ "Não é possível enviar a mensagem com operador desconhecido, erro %1$d"
+ "Enc: %s"
+ "Mensagem não enviada: serviço não ativado na rede"
+ "Mensagem não enviada: endereço de destino inválido"
+ "Mensagem não enviada: mensagem inválida"
+ "Mensagem não enviada: conteúdo não suportado"
+ "Mensagem não enviada: a mensagem não é compatível"
+ "Mensagem não enviada: demasiado grande"
+ "Nova mensagem"
+ "Ver"
+ "Imagem"
+ "Não foi possível encontrar uma aplicação adequada"
+ "Remover o destinatário"
+ "Nova mensagem"
+ "Cancelar"
+ "Editar ponto de acesso"
+ "Não definido"
+ "Nome"
+ "APN"
+ "MMSC"
+ "Proxy de MMS"
+ "Porta MMS"
+ "MCC"
+ "MNC"
+ "Tipo de APN"
+ "Eliminar APN"
+ "Novo APN"
+ "Guardar"
+ "Rejeitar"
+ "O campo Nome não pode estar vazio."
+ "O APN não pode estar vazio."
+ "O campo MCC tem de ter 3 dígitos."
+ "O campo MNC tem de ter 2 ou 3 dígitos."
+ "A restaurar as predefinições do APN"
+ "Repor as predefinições"
+ "Reposição das predefinições do APN concluída."
+ "Sem nome"
+ "Nomes dos Pontos de Acesso"
+ "APNs"
+ "Novo APN"
+ "As definições de Nome do Ponto de Acesso não estão disponíveis para este utilizador"
+ "Pretende copiar para a área de transferência?"
+ "Copiar"
+ "em %s"
+ "Geral"
+ "Avançadas"
+ "Definições gerais"
+ "Definições avançadas"
+ "SIM \"%s\""
+ "Enviar mensagens SMS individuais para todos os destinatários. Apenas o utilizador recebe as respostas"
+ "Enviar uma única MMS para todos os destinatários"
+ "Número desconhecido"
+ "Nova mensagem"
+ "Nova mensagem."
+ "Seletor de SIM"
+ "%1$s selecionado, seletor de SIM"
+ "Editar assunto"
+ "Selecionar SIM ou editar assunto"
+ "Tocar sem soltar para gravar áudio"
+ "Iniciar nova conversa"
+ "Mensagens"
+ "Lista de mensagens"
+ "Mensagens"
+ "Nova mensagem"
+ "Lista de conversas"
+ "A carregar conversas"
+ "A carregar mensagens"
+ "Ver mais conversas"
+ "Ver mais mensagens"
+ "Conversa eliminada"
+ "Conversa eliminada. Toque para mostrar uma conversa das Mensagens diferente"
+ "Bloqueado"
+ "Desbloqueado"
+ "O espaço de armazenamento é reduzido. Alguns dados podem ser perdidos."
+ "Selecionar anexos"
+ "Confirmar seleção"
+ "%d selecionado(s)"
+ "Remova um ou mais anexos e tente novamente."
+ "Pode tentar enviar a sua mensagem, mas esta pode não ser entregue se não remover um ou mais anexos."
+ "Apenas pode enviar um vídeo por mensagem. Remova os vídeos adicionais e tente novamente."
+ "Falha da aplicação Mensagens ao carregar o anexo."
+ "Enviar mesmo assim"
+ "Não foi possível iniciar a conversa"
+ "%1$s (%2$s)"
+ "%s selecionado"
+
diff --git a/res/values-pt/arrays.xml b/res/values-pt/arrays.xml
new file mode 100644
index 0000000..0ab0334
--- /dev/null
+++ b/res/values-pt/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "sem assunto"
+ "nosubject"
+
+
+ "Sim"
+ "Não"
+ "Ok"
+ "Hehe"
+ "Obrigado"
+ "Concordo"
+ "Legal"
+ "Estou a caminho"
+ "OK, falo com você mais tarde"
+ ":)"
+ ":("
+
+
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
new file mode 100644
index 0000000..c9fdfad
--- /dev/null
+++ b/res/values-pt/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Mensagens"
+ "Mensagens"
+ "Selecionar uma conversa"
+ "Configurações"
+ "Enviar mensagem"
+ "Adicionar um anexo"
+ "Ajuda"
+ "Bem-vindo"
+ "Pular"
+ "Próxima >"
+ "Próximo"
+ "Sair"
+ "Configurações >"
+ "Configurações"
+ "O app Mensagens precisa de permissão para SMS, telefone e contatos."
+ "É possível alterar as permissões em \"Config. > Apps > Mensagens > Permissões\"."
+ "É possível alterar as permissões em \"Config. > Apps > Mensagens > Permissões\"."
+ "Frequentes"
+ "Todos os contatos"
+ "Enviar para %s"
+ "Capturar fotos ou vídeos"
+ "Escolher imagens do dispositivo"
+ "Gravar áudio"
+ "Escolher foto"
+ "A mídia foi selecionada."
+ "A mídia foi desmarcada."
+ "%d selecionado"
+ "imagem %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "imagem"
+ "Gravar áudio"
+ "Compartilhar"
+ "Há pouco"
+ "Agora"
+
+ %d min
+ %d min
+
+
+ %d horas
+ %d horas
+
+
+ %d dias
+ %d dias
+
+
+ %d semanas
+ %d semanas
+
+
+ %d meses
+ %d meses
+
+
+ %d anos
+ %d anos
+
+ "Mensagem classe 0"
+ "Salvar"
+ "O dispositivo está com pouco espaço. As mensagens mais antigas serão excluídas automaticamente para liberar espaço."
+ "Pouco espaço de armazenamento"
+ "O app Mensagens talvez não envie ou receba mensagens até que mais espaço esteja disponível no seu dispositivo."
+ "Pouco espaço para SMS. Pode ser necessário excluir mensagens."
+ "Confirme seu número de telefone"
+ "Esta etapa única garantirá que o app Mensagens entregue suas mensagens em grupo corretamente."
+ "Número de telefone"
+ "Excluir todas as mensagens com mídia"
+ "Excluir mensagens com mais de %s"
+ "Excluir automaticamente mensagens com mais de %s"
+ "Ignorar"
+ "Excluir todas as mensagens com mídia?"
+ "Excluir mensagens com mais de %s?"
+ "Excluir mensagens com mais de %s e ativar a exclusão automática?"
+ "%s disse"
+ "Você disse"
+ "Mensagem de %s"
+ "Você enviou uma mensagem"
+ "Enviando…"
+ "Não enviado. Toque para tentar novamente."
+ "Não enviado. Tentando novamente…"
+ "Reenviar ou excluir"
+ "Faça uma chamada de voz para os serviços de emergência. Não foi possível entregar sua mensagem de texto no momento."
+ "Falhou"
+ "Nova mensagem MMS para fazer o download"
+ "Nova mensagem MMS"
+ "Falha no download"
+ "Tocar para tentar novamente"
+ "Tocar para fazer o download"
+ "Fazer o download ou excluir"
+ "Fazendo o download…"
+ "A mensagem expirou ou não está disponível"
+ "tamanho: %1$s, validade: %2$s"
+ "Falha ao enviar. Destinatário inválido."
+ "Serviço não ativado na rede"
+ "Falha ao enviar devido a um problema de rede"
+ "A mensagem expirou ou não está disponível"
+ "(Sem assunto)"
+ "Remetente desconhecido"
+ "Entregue"
+ "Não foi possível fazer o download da mensagem %1$s de %2$s."
+ "Não foi possível concluir a operação do banco de dados devido a memória insuficiente"
+ "Mensagem não enviada"
+ "Algumas mensagens não foram enviadas no app Mensagens"
+
+ %d mensagens em %d conversas
+ %d mensagens em %d conversas
+
+ "Download da mensagem não realizado"
+ "Não foi feito o download de algumas mensagens no app Mensagens"
+
+ %d mensagens em %d conversas
+ %d mensagens em %d conversas
+
+ "Mensagem para %1$s não enviada"
+ "Faça uma chamada de voz para os serviços de emergência. Não foi possível entregar sua mensagem de texto para %1$s no momento."
+
+ %d novas mensagens
+ %d novas mensagens
+
+ "Iniciar"
+ "Câmera não disponível"
+ "Câmera não disponível"
+ "Captura de vídeo não disponível"
+ "Falha ao salvar a mídia"
+ "Não é possível tirar uma foto"
+ "Voltar"
+ "Arquivadas"
+ "Excluir"
+ "Arquivar"
+ "Desarquivar"
+ "Desativar notificações"
+ "Ativar notificações"
+ "Adicionar contato"
+ "Fazer o download"
+ "Enviar"
+ "Excluir"
+ "Excluir esta mensagem?"
+ "Esta ação não pode ser desfeita."
+ "Excluir"
+
+ Excluir estas conversas?
+ Excluir estas conversas?
+
+ "Excluir"
+ "Cancelar"
+ "Para"
+ "Selecionar várias imagens"
+ "Confirmar seleção"
+ "+%d"
+ "Falha ao gravar o áudio. Tente novamente."
+ "Falha ao reproduzir o áudio. Tente novamente."
+ "Falha ao salvar o áudio. Tente novamente."
+ "Toque e mantenha pressionado"
+ ", "
+ " "
+ ": "
+ " "
+ "Imagem"
+ "Clipe de áudio"
+ "Vídeo"
+ "Cartão de visita"
+ "Download"
+ "Responder via SMS"
+ "Responder via MMS"
+ "Responder"
+
+ %d participantes
+ %d participantes
+
+ "Eu"
+ "Contato bloqueado e arquivado"
+ "Contato desbloqueado e desarquivado"
+ "%d arquivada(s)"
+ "%d desarquivada(s)"
+ "Notificações desativadas"
+ "Notificações ativadas"
+ "Tudo pronto. Toque em \"Enviar\" novamente."
+ "O app Mensagens foi definido como o app padrão de SMS."
+
+ Descartar anexos
+ Descartar anexos
+
+ "Anexo de áudio"
+ "Reproduzir anexo de áudio"
+ "Pausa"
+ "Mensagem de %s: %s."
+ "Falha na mensagem de %s: %s. Hora: %s."
+ "Mensagem de %s: %s. Hora: %s."
+ "Mensagem não enviada para %s: %s. Hora: %s."
+ "Enviando mensagem para %s: %s. Hora: %s."
+ "Falha na mensagem para %s: %s. Hora: %s."
+ "Mensagem para %s: %s. Hora: %s."
+ "Falha na mensagem de %s: %s. Hora: %s. %s."
+ "Mensagem de %s: %s. Hora: %s. %s."
+ "Mensagem não enviada para %s: %s. Hora: %s."
+ "Enviando mensagem para %s: %s. Hora: %s."
+ "Falha na mensagem para %s: %s. Hora: %s."
+ "Mensagem para %s: %s. Hora: %s."
+ "Falha na mensagem. Toque para tentar novamente."
+ "Conversa com %s"
+ "Excluir assunto"
+ "Capturar vídeo"
+ "Capturar uma imagem estática"
+ "Tirar foto"
+ "Iniciar gravação de vídeo"
+ "Alternar para câmera em tela cheia"
+ "Alternar entre câmera frontal e traseira"
+ "Parar a gravação e anexar vídeo"
+ "Parar gravação de vídeo"
+ "Fotos do app Mensagens"
+
+ %d fotos salvas no álbum \"%s\"
+ %d fotos salvas no álbum \"%s\"
+
+
+ %d vídeos salvos no álbum \"%s\"
+ %d vídeos salvos no álbum \"%s\"
+
+
+ %d anexos salvos no álbum \"%s\"
+ %d anexos salvos no álbum \"%s\"
+
+
+ %d anexos salvos em \"Downloads\"
+ %d anexos salvos em \"Downloads\"
+
+
+ %d anexos salvos
+ %d anexos salvos
+
+
+ Não foi possível salvar %d anexos
+ Não foi possível salvar %d anexos
+
+ "Anexo MMS salvo"
+ "Configurações"
+ "Arquivadas"
+ "Fechar"
+ "MMS"
+ "Avançadas"
+ "Depurar"
+ "Notificações"
+ "Som"
+ "Silencioso"
+ "Vibração"
+ "Bloqueado"
+ "Relat. de entrega de SMS"
+ "Solicitar um relatório de entrega para cada SMS enviado"
+ "Recuperação automática"
+ "Recuperar mensagens MMS automaticamente"
+ "Recup. autom. em roaming"
+ "Recuperar MMS automaticamente durante roaming"
+ "Mensagens em grupo"
+ "Usar MMS para enviar uma única mensagem para vários destinatários"
+ "App de SMS padrão"
+ "App de SMS padrão"
+
+
+ "Seu número de telefone"
+ "Desconhecido"
+ "Sons de mensagem de saída"
+ "Descartar SMS"
+ "Descartar dados brutos de SMS recebidos no arquivo de armazenamento externo"
+ "Descartar MMS"
+ "Descartar dados brutos de MMS recebidos no arquivo de armazenamento externo"
+ "Alertas sem fio"
+ "Opções de mensagem"
+ "Copiar texto"
+ "Ver detalhes"
+ "Excluir"
+ "Avançar"
+ "Detalhes da mensagem"
+ "Tipo: "
+ "Mensagem de texto"
+ "Mensagem multimídia"
+ "De: "
+ "Para: "
+ "Enviada: "
+ "Recebida: "
+ "Assunto: "
+ "Tamanho: "
+ "Prioridade: "
+ "SIM: "
+ "Alta"
+ "Normal"
+ "Baixa"
+ "SIM %s"
+ "Endereço do remetente oculto"
+ "Não é possível enviar mensagens ao carregar anexos."
+ "Falha ao carregar o anexo. Tente novamente."
+ "A rede não está pronta. Tente novamente."
+ "Excluir texto"
+ "Alternar entre entrada de texto ou números"
+ "Adicionar mais participantes"
+ "Confirmar participantes"
+ "Iniciar nova conversa"
+ "Selecione este item"
+ "Reproduzir vídeo"
+ "Pessoas e opções"
+ "Depurar"
+ "Pessoas e opções"
+ "Gerais"
+ "Pessoas nesta conversa"
+ "Fazer uma chamada"
+ "Enviar mensagem"
+ "Enviar mensagem<br/><small>de %s</small>"
+
+ Enviar fotos
+ Enviar fotos
+
+
+ Enviar áudios
+ Enviar áudios
+
+
+ Enviar vídeos
+ Enviar vídeos
+
+
+ Enviar cards de contato
+ Enviar cards de contato
+
+
+ Enviar anexos
+ Enviar anexos
+
+
+ %d anexos prontos para envio
+ %d anexos prontos para envio
+
+ "Enviar feedback"
+ "Ver na Google Play Store"
+ "Informações da versão"
+ "Versão %1$s"
+ "Licenças de código aberto"
+ "Notificações"
+ "Limite de anexos alcançado"
+ "Falha ao carregar anexo."
+ "Adicionar a Contatos?"
+ "Adicionar contato"
+ "Assunto"
+ "Assunto: "
+ "%s%s"
+ "Carregando cartão de visita"
+ "Falha ao carregar o cartão de visita"
+ "Ver cartão de visita"
+
+ %d contatos
+ %d contatos
+
+ "Cartões de visita"
+ "Aniversário"
+ "Notas"
+ "Encaminhar mensagem"
+ "Responder"
+ "+1"
+ "+%d"
+ "SMS desativado"
+ "Para enviar, defina o Mensagens como app padrão de SMS"
+ "Definir o Mensagens como o app padrão de SMS"
+ "Alterar"
+ "Para receber mensagens, defina o Mensagens como app padrão de SMS"
+ "Nenhum SIM preferido para o envio de mensagens SMS selecionado"
+ "Este app não é permitido pelo proprietário do dispositivo."
+ "Ok"
+ "Muitos participantes em uma conversa"
+
+ Contatos inválidos
+ Contatos inválidos
+
+ "Falha ao carregar a imagem da câmera"
+ "Você: "
+ "%s: "
+ "Rascunho"
+ "Quando uma nova conversa for iniciada, será listada aqui"
+ "As conversas arquivadas aparecem aqui"
+ "Carregando conversas…"
+ "Imagem"
+ "Clipe de áudio"
+ "Vídeo"
+ "Cartão de visita"
+ "MMS"
+ "Desfazer"
+ "Repetir"
+ "Digite o nome ou telefone de um contato para iniciar uma nova mensagem"
+ "Bloquear"
+ "Bloquear %s"
+ "Desbloquear %s"
+ "Bloquear %s?"
+ "Você continuará recebendo mensagens deste número, mas não será notificado. Esta conversa será ativada."
+ "Contatos bloqueados"
+ "DESBLOQUEAR"
+ "Contatos bloqueados"
+ "Escolher imagem da biblioteca de documentos"
+ "Enviando mensagem"
+ "Mensagem enviada"
+ "Dados da rede celular desativados. Verifique suas configurações."
+ "Não é possível enviar mensagens no modo avião"
+ "Não foi possível enviar a mensagem"
+ "Mensagem baixada"
+ "Dados da rede celular desativados. Verifique suas configurações."
+ "Não é possível fazer o download de mensagens no modo Avião"
+ "Não foi possível fazer o download da mensagem"
+ "Zero"
+ "Um"
+ "Dois"
+ "Três"
+ "Quatro"
+ "Cinco"
+ "Seis"
+ "Sete"
+ "Oito"
+ "Nove"
+ "Não é possível enviar a mensagem com %1$s. Erro: %2$d"
+ "Não é possível enviar a mensagem com operadora desconhecida. Erro: %1$d"
+ "Enc: %s"
+ "Mensagem não enviada: serviço não ativado na rede"
+ "Mensagem não enviada: endereço de destino inválido"
+ "Mensagem não enviada: mensagem inválida"
+ "Mensagem não enviada: conteúdo não compatível"
+ "Mensagem não enviada: mensagem não compatível"
+ "Mensagem não enviada: muito grande"
+ "Nova mensagem"
+ "Visualizar"
+ "Imagem"
+ "Não foi possível encontrar um app adequado"
+ "Remover destinatário"
+ "Nova mensagem"
+ "Cancelar"
+ "Editar ponto de acesso"
+ "Não definido"
+ "Nome"
+ "APN"
+ "MMSC"
+ "Proxy MMS"
+ "Porta MMS"
+ "MCC"
+ "MNC"
+ "Tipo de APN"
+ "Excluir APN"
+ "Novo APN"
+ "Salvar"
+ "Descartar"
+ "O campo Nome não pode ficar vazio."
+ "O APN não pode estar vazio."
+ "O campo MCC deve ter 3 dígitos."
+ "O campo MNC deve ter 2 ou 3 dígitos."
+ "Restaurando as configurações APN padrão."
+ "Redefinir para o padrão"
+ "Redefinição das configurações padrão do APN concluída."
+ "Sem título"
+ "Nomes dos pontos de acesso"
+ "APNs"
+ "Novo APN"
+ "As configurações do Nome do ponto de acesso não estão disponíveis para este usuário"
+ "Copiar para área de transferência?"
+ "Copiar"
+ "para %s"
+ "Gerais"
+ "Avançadas"
+ "Configurações gerais"
+ "Configurações avançadas"
+ "SIM \"%s\""
+ "Enviar mensagens SMS individuais para todos os destinatários. Só você receberá respostas"
+ "Enviar uma só mensagem MMS para todos os destinatários"
+ "Número desconhecido"
+ "Nova mensagem"
+ "Nova mensagem."
+ "Seletor de SIM"
+ "%1$s selecionado, seletor de SIM"
+ "Editar assunto"
+ "Selecione o SIM ou edite o assunto"
+ "Toque e segure para gravar áudio"
+ "Iniciar nova conversa"
+ "Mensagens"
+ "Lista de mensagens"
+ "Mensagens"
+ "Nova mensagem"
+ "Lista de conversas"
+ "Carregando conversas"
+ "Carregando mensagens"
+ "Ver mais conversas"
+ "Ver mais mensagens"
+ "Conversa excluída"
+ "Conversa excluída. Toque para mostrar outra conversa do app Mensagens"
+ "Contato bloqueado"
+ "Contato desbloqueado"
+ "O espaço de armazenamento está baixo. Alguns dados podem ser perdidos."
+ "Selecionar anexos"
+ "Confirmar seleção"
+ "%d selecionados"
+ "Remova um ou mais anexos e tente novamente."
+ "Tente enviar sua mensagem. Se ela não for entregue, remova um ou mais anexos."
+ "Você só pode enviar um vídeo por mensagem. Remova os vídeos adicionais e tente novamente."
+ "Ocorreu uma falha no app Mensagens ao carregar o anexo."
+ "Enviar mesmo assim"
+ "Não foi possível iniciar a conversa"
+ "%1$s (%2$s)"
+ "%s selecionado"
+
diff --git a/res/values-ro/arrays.xml b/res/values-ro/arrays.xml
new file mode 100644
index 0000000..dc5e3fe
--- /dev/null
+++ b/res/values-ro/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "fără subiect"
+ "nosubject"
+
+
+ "Da"
+ "Nu"
+ "OK"
+ "Hehe"
+ "Mulțumesc"
+ "Sunt de acord"
+ "Frumos"
+ "Sunt pe drum"
+ "OK, revin mai târziu"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
new file mode 100644
index 0000000..25b2d8c
--- /dev/null
+++ b/res/values-ro/strings.xml
@@ -0,0 +1,545 @@
+
+
+
+
+ "Mesaje"
+ "Mesaje"
+ "Selectați conversația"
+ "Setări"
+ "Trimiteți mesajul"
+ "Adăugați un atașament"
+ "Ajutor"
+ "Bun venit"
+ "Omiteți"
+ "Înainte >"
+ "Înainte"
+ "Ieșiți"
+ "Setări >"
+ "Setări"
+ "Mesageria necesită permisiuni la SMS, Telefon și Agendă."
+ "Puteți să schimbați permisiunile din Setări > Aplicații > Mesagerie > Permisiuni."
+ "Puteți să schimbați permisiunile din Setări, Aplicații, Mesagerie, Permisiuni."
+ "Folosite frecvent"
+ "Toată agenda"
+ "Trimiteți la %s"
+ "Faceți fotografii sau înregistrați videoclipuri"
+ "Alegeți imagini de pe acest dispozitiv"
+ "Înregistrați conținut audio"
+ "Alegeți o fotografie"
+ "Conținutul media este selectat."
+ "Conținutul media este deselectat."
+ "Ați selectat %d"
+ "imagine din %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "imagine"
+ "Înregistrați conținut audio"
+ "Trimiteți"
+ "Adineauri"
+ "Acum"
+
+ %d minute
+ %d de minute
+ %d minut
+
+
+ %d ore
+ %d de ore
+ %d oră
+
+
+ %d zile
+ %d de zile
+ %d zi
+
+
+ %d săptămâni
+ %d de săptămâni
+ o săptămână
+
+
+ %d luni
+ %d de luni
+ o lună
+
+
+ %d ani
+ %d de ani
+ un an
+
+ "Mesaje clasa 0"
+ "Salvați"
+ "Spațiul de stocare pe dispozitiv este redus. Mesageria va șterge automat mesaje mai vechi pentru a elibera spațiul."
+ "Spațiu de stocare limitat"
+ "Este posibil ca aplicația Mesagerie să nu trimită și să nu primească mesaje până când nu este disponibil mai mult spațiu pe dispozitiv."
+ "Spațiu de stocare scăzut pentru SMS-uri. Poate fi necesar să ștergeți unele mesaje."
+ "Confirmați numărul de telefon"
+ "Prin acest pas efectuat o singură dată vă asigurați că Mesageria va livra în mod corespunzător mesajele de grup."
+ "Număr de telefon"
+ "Ștergeți toate mesajele multimedia"
+ "Ștergeți mesajele mai vechi de %s"
+ "Ștergeți automat mesajele mai vechi de %s"
+ "Ignorați"
+ "Ștergeți toate mesajele multimedia?"
+ "Ștergeți mesajele mai vechi de %s?"
+ "Ștergeți mesajele mai vechi de %s și activați ștergerea automată?"
+ "%s a spus"
+ "Ați spus"
+ "Mesaj de la %s"
+ "Ați trimis un mesaj"
+ "Se trimite..."
+ "Nu s-a trimis. Atingeți pentru a încerca din nou."
+ "Nu s-a trimis. Se încearcă din nou..."
+ "Trimiteți din nou sau ștergeți"
+ "Inițiați un apel vocal către serviciile de urgență. Momentan, mesajul text nu a putut fi livrat."
+ "Eroare"
+ "Mesaj MMS nou de descărcat"
+ "Mesaj MMS nou"
+ "Descărcarea nu a reușit"
+ "Atingeți pentru a reîncerca"
+ "Atingeți pentru a descărca"
+ "Descărcați sau ștergeți"
+ "Se descarcă..."
+ "Mesajul a expirat sau nu este disponibil"
+ "dimensiune: %1$s, expirare: %2$s"
+ "Nu se poate trimite. Destinatar nevalid."
+ "Serviciul nu este activat în rețea"
+ "Mesajul nu s-a putut trimite din cauza unei probleme de rețea"
+ "Mesajul a expirat sau nu este disponibil."
+ "(Fără subiect)"
+ "Expeditor necunoscut"
+ "Livrat"
+ "Nu s-a putut descărca mesajul %1$s de la %2$s."
+ "Nu s-a putut finaliza operațiunea în baza de date din cauza memoriei reduse"
+ "Mesajul nu a fost trimis."
+ "Unele mesaje nu au fost trimise în Mesagerie"
+
+ %d (de) mesaje în %d conversații
+ %d (de) mesaje în %d de conversații
+ %d (de) mesaje într-o conversație
+
+ "Mesajul nu a fost descărcat"
+ "Unele mesaje nu au fost descărcate în Mesagerie"
+
+ %d (de) mesaje în %d conversații
+ %d (de) mesaje în %d de conversații
+ %d (de) mesaje într-o conversație
+
+ "Mesajul către %1$s nu a fost trimis"
+ "Inițiați un apel vocal către serviciile de urgență. Momentan, mesajul text către %1$s nu a putut fi livrat."
+
+ %d mesaje noi
+ %d de mesaje noi
+ Mesaj nou
+
+ "Începeți"
+ "Camera foto nu este disponibilă"
+ "Camera foto nu este disponibilă"
+ "Filmarea video nu este disponibilă"
+ "Nu se poate salva fișierul multimedia"
+ "Nu se poate fotografia"
+ "Înapoi"
+ "Arhivate"
+ "Ștergeți"
+ "Arhivați"
+ "Dezarhivați"
+ "Dezactivați notificările"
+ "Activați notificările"
+ "Adăugați o persoană"
+ "Descărcați"
+ "Trimiteți"
+ "Ștergeți"
+ "Ștergeți acest mesaj?"
+ "Această acțiune nu poate fi anulată."
+ "Ștergeți"
+
+ Ștergeți aceste conversații?
+ Ștergeți aceste conversații?
+ Ștergeți această conversație?
+
+ "Ștergeți"
+ "Anulați"
+ "Către"
+ "Selectați mai multe imagini"
+ "Confirmați selecția"
+ "+%d"
+ "Mesajul audio nu poate fi înregistrat. Încercați din nou."
+ "Mesajul audio nu poate fi redat. Încercați din nou."
+ "Mesajul audio nu a putut fi salvat. Încercați din nou."
+ "Apăsați lung"
+ ", "
+ " "
+ ": "
+ " "
+ "Imagine"
+ "Clip audio"
+ "Videoclip"
+ "Carte de vizită"
+ "Descărcați"
+ "Răspundeți prin SMS"
+ "Răsp. prin MMS"
+ "Răspundeți"
+
+ %d participanți
+ %d de participanți
+ %d participant
+
+ "Eu"
+ "Persoana de contact este blocată și arhivată"
+ "Persoană de contact deblocată și dezarhivată"
+ "%d arhivate"
+ "%d dezarhivate"
+ "Notificări dezactivate"
+ "Notificări activate"
+ "Gata. Atingeți din nou Trimiteți."
+ "Mesageria a fost setată ca aplicație prestabilită pentru SMS-uri."
+
+ Eliminați atașamentele
+ Eliminați atașamentele
+ Eliminați atașamentul
+
+ "Atașament audio"
+ "Redați atașamentul audio"
+ "Pauză"
+ "Mesaj de la %s: %s."
+ "Mesaj neprimit de la %s: %s. Ora: %s."
+ "Mesaj de la %s: %s. Ora: %s."
+ "Mesaj netrimis către %s: %s. Ora: %s."
+ "Se trimite mesajul către %s: %s. Ora: %s."
+ "Mesaj netrimis către %s: %s. Ora: %s."
+ "Mesaj către %s: %s. Ora: %s."
+ "Mesaj neprimit de la %s: %s. Ora: %s. %s."
+ "Mesaj de la %s: %s. Ora: %s. %s."
+ "Mesaj netrimis către %s: %s. Ora: %s."
+ "Se trimite mesajul către %s: %s. Ora: %s."
+ "Mesaj netrimis către %s: %s. Ora: %s."
+ "Mesaj către %s: %s. Ora: %s."
+ "Mesaj nelivrat. Atingeți pentru a reîncerca."
+ "Conversație cu %s"
+ "Ștergeți subiectul"
+ "Înregistrați conținut video"
+ "Fotografiați o imagine statică"
+ "Fotografiaţi"
+ "Începeți să înregistrați conținut video"
+ "Comutați la camera pe ecran complet"
+ "Comutați între camera foto frontală și camera foto posterioară"
+ "Opriți înregistrarea și atașați videoclipul"
+ "Opriți înregistrarea video"
+ "Fotografii din Mesagerie"
+
+ %d fotografii salvate în albumul „%s”
+ %d de fotografii salvate în albumul „%s”
+ %d fotografie salvată în albumul „%s”
+
+
+ %d videoclipuri salvate în albumul „%s”
+ %d de videoclipuri salvate în albumul „%s”
+ %d videoclip salvat în albumul „%s”
+
+
+ %d atașamente salvate în albumul „%s”
+ %d de atașamente salvate în albumul „%s”
+ %d atașament salvat în albumul „%s”
+
+
+ %d atașamente salvate în „Descărcări”
+ %d de atașamente salvate în „Descărcări”
+ %d atașament salvat în „Descărcări”
+
+
+ %d atașamente au fost salvate
+ %d de atașamente au fost salvate
+ %d atașament a fost salvat
+
+
+ Nu s-au putut salva %d atașamente
+ Nu s-au putut salva %d de atașamente
+ Nu s-a putut salva %d atașament
+
+ "Atașamentul MMS a fost salvat"
+ "Setări"
+ "Arhivate"
+ "Închideți"
+ "MMS"
+ "Avansate"
+ "Remedierea erorilor"
+ "Notificări"
+ "Sunet"
+ "Silențios"
+ "Vibrații"
+ "Blocat"
+ "Rapoarte de trimitere a SMS-urilor"
+ "Solicitați un raport de expediere pentru fiecare mesaj SMS trimis"
+ "Preluare automată"
+ "Preia automat mesajele MMS"
+ "Preluare automată în roaming"
+ "Preia automat mesajele MMS în roaming"
+ "Mesagerie de grup"
+ "Utilizați serviciul MMS pentru a trimite un singur mesaj, atunci când există mai mulți destinatari"
+ "Aplicație SMS prestabilită"
+ "Aplicație SMS prestabilită"
+
+
+ "Numărul dvs. de telefon"
+ "Necunoscut"
+ "Sunete pentru mesaje trimise"
+ "Copiați mesajele SMS"
+ "Copiați datele brute din mesajele SMS primite în fișierul de stocare externă"
+ "Copiați mesajele MMS"
+ "Copiați datele brute din mesajele MMS primite în fișierul de stocare externă"
+ "Alerte wireless"
+ "Opţiuni mesaj"
+ "Copiați textul"
+ "Vedeți detaliile"
+ "Ștergeți"
+ "Redirecționați"
+ "Detalii mesaj"
+ "Tip: "
+ "Mesaj text"
+ "Mesaj multimedia"
+ "De la: "
+ "Către: "
+ "Trimis: "
+ "Primit: "
+ "Subiect: "
+ "Dimensiune: "
+ "Prioritate: "
+ "SIM: "
+ "Ridicată"
+ "Normală"
+ "Scăzută"
+ "SIM %s"
+ "Adresa expeditorului este ascunsă"
+ "Nu se poate trimite mesajul în timp ce se încarcă atașamente."
+ "Nu se poate încărca atașamentul. Încercați din nou."
+ "Rețeaua nu este gata. Încercați din nou."
+ "Ștergeți textul"
+ "Comutați între introducere de text și numere"
+ "Adăugați mai mulți participanți"
+ "Confirmați participanții"
+ "Începeți o conversație nouă"
+ "Selectați acest articol"
+ "Redați videoclipul"
+ "Persoane și opțiuni"
+ "Remediați erorile"
+ "Persoane și opțiuni"
+ "Generale"
+ "Persoane participante la conversație"
+ "Efectuați un apel"
+ "Trimiteți mesajul"
+ "Trimiteți mesajul<br/><small>de pe cardul %s</small>"
+
+ Trimiteți fotografiile
+ Trimiteți fotografiile
+ Trimiteți fotografia
+
+
+ Trimiteți fișierele audio
+ Trimiteți fișierele audio
+ Trimiteți fișierul audio
+
+
+ Trimiteți videoclipurile
+ Trimiteți videoclipurile
+ Trimiteți videoclipul
+
+
+ Trimiteți cărțile de vizită
+ Trimiteți cărțile de vizită
+ Trimiteți cartea de vizită
+
+
+ Trimiteți atașamentele
+ Trimiteți atașamentele
+ Trimiteți atașamentul
+
+
+ %d atașamente gata de trimis
+ %d de atașamente gata de trimis
+ Un atașament gata de trimis
+
+ "Trimiteți feedback"
+ "Vedeți în Magazinul Google Play"
+ "Informații despre versiune"
+ "Versiunea %1$s"
+ "Licențe open source"
+ "Notificări"
+ "S-a atins limita pentru atașamente"
+ "Atașamentul nu a putut fi încărcat."
+ "Adăugați în Agendă?"
+ "Adăugați o persoană"
+ "Subiect"
+ "Subiect: "
+ "%s%s"
+ "Se încarcă cartea de vizită"
+ "Cartea de vizită nu a putut fi încărcată"
+ "Vedeți cartea de vizită"
+
+ %d persoane de contact
+ %d de persoane de contact
+ %d persoană de contact
+
+ "Cărți de vizită"
+ "Ziua de naștere"
+ "Note"
+ "Redirecționați mesajul"
+ "Răspundeți"
+ "+1"
+ "+%d"
+ "SMS-urile sunt dezactivate"
+ "Pentru a trimite mesaje, setați Mesageria ca aplicație prestabilită pentru SMS-uri"
+ "Setați Mesageria ca aplicație prestabilită pentru SMS-uri"
+ "Modificați"
+ "Pentru a primi mesaje, setați Mesageria ca aplicație prestabilită pentru SMS-uri"
+ "Pentru trimiterea mesajelor SMS nu este selectat niciun card SIM preferat"
+ "Această aplicație nu este acceptată de proprietarul dispozitivului."
+ "OK"
+ "Prea mulți participanți la o conversație"
+
+ Persoane de contact nevalide
+ Persoane de contact nevalide
+ Persoană de contact nevalidă
+
+ "Nu s-a putut încărca imaginea de la camera foto"
+ "Dvs.: "
+ "%s: "
+ "Mesaj nefinalizat"
+ "Când începeți o nouă conversație, o veți vedea aici"
+ "Conversațiile arhivate apar aici"
+ "Conversațiile sunt în curs de încărcare..."
+ "Imagine"
+ "Clip audio"
+ "Videoclip"
+ "Carte de vizită"
+ "MMS"
+ "Anulați"
+ "Reîncercați"
+ "Introduceți numele unei persoane de contact sau un număr de telefon pentru a începe un nou mesaj"
+ "Blocați"
+ "Blocați %s"
+ "Deblocați-l(o) pe %s"
+ "Blocați %s?"
+ "Veți primi, în continuare, mesaje de la acest număr, dar nu veți mai primi notificări. Această conversație va fi arhivată."
+ "Persoane din Agendă blocate"
+ "DEBLOCAȚI"
+ "Persoane din Agendă blocate"
+ "Alegeți imaginea din biblioteca de documente"
+ "Se trimite mesajul"
+ "Mesaj trimis"
+ "Datele mobile sunt dezactivate. Verificați setările."
+ "Nu se pot trimite mesaje în modul Avion"
+ "Mesajul nu a putut fi trimis"
+ "Mesaj descărcat"
+ "Datele mobile sunt dezactivate. Verificați setările."
+ "Nu se pot descărca mesaje în modul Avion"
+ "Mesajul nu a putut fi descărcat"
+ "Zero"
+ "Unu"
+ "Doi"
+ "Trei"
+ "Patru"
+ "Cinci"
+ "Șase"
+ "Șapte"
+ "Opt"
+ "Nouă"
+ "Nu se poate trimite mesaj prin %1$s, eroare %2$d"
+ "Nu se poate trimite mesaj printr-un operator necunoscut, eroare %1$d"
+ "Redir.: %s"
+ "Mesajul nu a fost trimis: serviciul nu este activat în rețea"
+ "Mesajul nu a fost trimis: adresă de destinație nevalidă"
+ "Mesajul nu a fost trimis: mesaj nevalid"
+ "Mesajul nu a fost trimis: conținut neacceptat"
+ "Mesajul nu a fost trimis: mesaj neacceptat"
+ "Mesajul nu a fost trimis: mesaj prea mare"
+ "Mesaj nou"
+ "Afișați"
+ "Imagine"
+ "Nu am găsit o aplicație adecvată"
+ "Eliminați un destinatar"
+ "Mesaj nou"
+ "Anulați"
+ "Modificaţi punctul de acces"
+ "Nesetat"
+ "Nume"
+ "APN"
+ "MMSC"
+ "Proxy MMS"
+ "Port MMS"
+ "MCC"
+ "MNC"
+ "Tip APN"
+ "Ștergeți APN"
+ "APN nou"
+ "Salvați"
+ "Renunțați"
+ "Câmpul Nume trebuie completat."
+ "APN-ul trebuie completat."
+ "Câmpul MCC trebuie să conțină 3 cifre."
+ "Câmpul MNC trebuie să conțină 2 sau 3 cifre."
+ "Se restabilesc setările APN prestabilite."
+ "Resetați la valorile prestabilite"
+ "Resetarea setărilor APN prestabilite a fost finalizată."
+ "Fără titlu"
+ "Numele punctelor de acces"
+ "APN-uri"
+ "APN nou"
+ "Setările pentru „Nume puncte de acces” nu sunt disponibile pentru acest utilizator"
+ "Copiați în clipboard?"
+ "Copiați"
+ "pe cardul %s"
+ "Generale"
+ "Avansate"
+ "Setări generale"
+ "Setări avansate"
+ "Cartela SIM „%s”"
+ "Trimiteți mesaje SMS individuale către toți destinatarii. Numai dvs. veți primi răspunsurile."
+ "Trimiteți un singur mesaj MMS către toți destinatarii"
+ "Număr necunoscut"
+ "Mesaj nou"
+ "Mesaj nou."
+ "Selector de SIM"
+ "%1$s a fost selectat, selector de SIM"
+ "Editați subiectul"
+ "Selectați cardul SIM sau editați subiectul"
+ "Atingeți lung pentru a înregistra conținutul audio"
+ "Începeți o conversație nouă"
+ "Mesagerie"
+ "Listă Mesagerie"
+ "Mesagerie"
+ "Mesaj nou"
+ "Lista de conversații"
+ "Se încarcă conversațiile"
+ "Se încarcă mesajele"
+ "Vedeți mai multe conversații"
+ "Vedeți mai multe mesaje"
+ "Conversație ștearsă"
+ "Conversația a fost ștearsă. Atingeți pentru a afișa altă conversație din Mesagerie"
+ "Blocat"
+ "Deblocat"
+ "Spațiul de stocare este scăzut. Se pot pierde unele date."
+ "Selectați atașamentele"
+ "Confirmați selecția"
+ "Ați selectat %d"
+ "Eliminați unul sau mai multe atașamente și încercați din nou."
+ "Puteți încerca să trimiteți mesajul, însă dacă nu eliminați unul sau mai multe atașamente, este posibil ca acesta să nu fie livrat."
+ "Puteți trimite doar un videoclip per mesaj. Eliminați videoclipurile suplimentare și încercați din nou."
+ "Mesageria nu a putut încărca atașamentul."
+ "Trimiteți oricum"
+ "Conversația nu a putut fi începută"
+ "%1$s (%2$s)"
+ "%s selectat"
+
diff --git a/res/values-ru/arrays.xml b/res/values-ru/arrays.xml
new file mode 100644
index 0000000..8af4db2
--- /dev/null
+++ b/res/values-ru/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "без темы"
+ "без темы"
+
+
+ "Да"
+ "Нет"
+ "ОК"
+ "Ха-ха"
+ "Спасибо!"
+ "Хорошо"
+ "Отлично"
+ "Скоро буду"
+ "ОК, отвечу позже"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
new file mode 100644
index 0000000..0683b2b
--- /dev/null
+++ b/res/values-ru/strings.xml
@@ -0,0 +1,571 @@
+
+
+
+
+ "SMS/MMS"
+ "SMS/MMS"
+ "Выберите чат"
+ "Настройки"
+ "Отправить сообщение"
+ "Прикрепить файл"
+ "Справка"
+ "Добро пожаловать!"
+ "Пропустить"
+ "Далее >"
+ "Далее"
+ "Закрыть"
+ "Настройки >"
+ "Настройки"
+ "Приложению SMS/MMS требуются разрешения категорий SMS, \"Телефон\" и \"Контакты\"."
+ "Чтобы изменить разрешения, нажмите \"Настройки > Приложения > SMS/MMS > Разрешения\"."
+ "Чтобы изменить разрешения, нажмите \"Настройки > Приложения > SMS/MMS > Разрешения\"."
+ "Частые"
+ "Все контакты"
+ "Отправить на номер %s"
+ "Снять фото или видео"
+ "Выбрать изображения на устройстве"
+ "Записать аудио"
+ "Выбрать фотографию"
+ "Медиафайл выбран"
+ "Выбор отменен"
+ "Выбрано: %d"
+ "изображение %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "изображение"
+ "Запись аудио"
+ "Поделиться"
+ "Только что"
+ "Только что"
+
+ %d минута
+ %d минуты
+ %d минут
+ %d минуты
+
+
+ %d час
+ %d часа
+ %d часов
+ %d часа
+
+
+ %d день
+ %d дня
+ %d дней
+ %d дня
+
+
+ %d неделя
+ %d недели
+ %d недель
+ %d недели
+
+
+ %d месяц
+ %d месяца
+ %d месяцев
+ %d месяца
+
+
+ %d год
+ %d года
+ %d лет
+ %d года
+
+ "Сообщение класса 0"
+ "Сохранить"
+ "Свободное место в памяти устройства заканчивается. Чтобы освободить его, приложение удалит старые сообщения."
+ "Недостаточно памяти"
+ "Недостаточно свободного места, чтобы отправлять и получать сообщения в SMS/MMS."
+ "Для хранения SMS осталось мало места. Удалите старые сообщения."
+ "Подтверждение номера телефона"
+ "Номер требуется для отправки групповых сообщений в SMS/MMS. Его нужно ввести только один раз."
+ "Номер телефона"
+ "Удалить сообщения с медиафайлами"
+ "Удалить сообщения старше %s"
+ "Автоматически удалять сообщения старше %s"
+ "Игнорировать"
+ "Удалить сообщения с медиафайлами?"
+ "Удалить сообщения старше %s?"
+ "Удалить сообщения старше %s и включить автоматическое удаление?"
+ "%s пишет:"
+ "Вы сказали:"
+ "Сообщение от пользователя %s"
+ "Вы отправили сообщение"
+ "Отправка…"
+ "Сообщение не отправлено. Нажмите, чтобы повторить попытку."
+ "Сообщение не отправлено. Повторная попытка…"
+ "Переслать или удалить"
+ "Не удалось доставить сообщение. Чтобы связаться с экстренными службами, позвоните по этому номеру."
+ "Не удалось отправить"
+ "Скачайте новое MMS-сообщение"
+ "Новое сообщение MMS"
+ "Не удалось скачать"
+ "Нажмите, чтобы повторить попытку"
+ "Нажмите, чтобы скачать"
+ "Скачать или удалить"
+ "Скачивание…"
+ "Срок действия сообщения истек, или оно недоступно"
+ "размер: %1$s, срок действия: %2$s"
+ "Не удалось отправить сообщение: укажите действительного получателя."
+ "Услуга не активирована в сети"
+ "Не удалось отправить сообщение из-за ошибки сети"
+ "Срок действия сообщения истек, или оно недоступно"
+ "Без темы"
+ "Неизвестный отправитель"
+ "Доставлено"
+ "Не удалось загрузить сообщение \"%1$s\" от пользователя %2$s"
+ "Не удалось выполнить операцию с базой данных: недостаточно памяти"
+ "Сообщение не отправлено"
+ "Некоторые сообщения в SMS/MMS не отправлены"
+
+ Сообщений: %d, чатов: %d
+ Сообщений: %d, чатов: %d
+ Сообщений: %d, чатов: %d
+ Сообщений: %d, чатов: %d
+
+ "Не удалось загрузить сообщение"
+ "Некоторые сообщения в SMS/MMS не скачаны"
+
+ Сообщений: %d, чатов: %d
+ Сообщений: %d, чатов: %d
+ Сообщений: %d, чатов: %d
+ Сообщений: %d, чатов: %d
+
+ "SMS на номер %1$s не отправлено"
+ "Не удалось доставить сообщение на номер %1$s. Позвоните в экстренную службу по телефону."
+
+ %d новое сообщение
+ %d новых сообщения
+ %d новых сообщений
+ %d нового сообщения
+
+ "Начать беседу"
+ "Камера недоступна"
+ "Камера недоступна"
+ "Видеозапись недоступна"
+ "Не удалось сохранить"
+ "Не удалось сфотографировать"
+ "Назад"
+ "Архив"
+ "Удалить"
+ "Архив"
+ "Вернуть из архива"
+ "Отключить оповещения"
+ "Включить оповещения"
+ "Добавить контакт"
+ "Скачать"
+ "Отправить"
+ "Удалить"
+ "Удалить сообщение?"
+ "Это действие нельзя будет отменить."
+ "Удалить"
+
+ Удалить эти чаты?
+ Удалить эти чаты?
+ Удалить эти чаты?
+ Удалить эти чаты?
+
+ "Удалить"
+ "Отмена"
+ "Кому"
+ "Выбрать несколько изображений"
+ "Подтверждение выбора"
+ "+%d"
+ "Не удалось записать. Повторите попытку."
+ "Не удалось воспроизвести. Повторите попытку."
+ "Не удалось сохранить. Повторите попытку."
+ "Нажмите и удерживайте"
+ ", "
+ " "
+ ": "
+ " "
+ "Изображение"
+ "Аудиоклип"
+ "Видео"
+ "Карточка контакта"
+ "Скачать"
+ "Отправить SMS"
+ "Ответить MMS"
+ "Ответить"
+
+ %d участник
+ %d участника
+ %d участников
+ %d участника
+
+ "Вы"
+ "Контакт заблокирован, переписка помещена в архив"
+ "Контакт разблокирован, чат возвращен из архива"
+ "Добавлено в архив: %d"
+ "Возвращено из архива: %d"
+ "Уведомления отключены"
+ "Уведомления включены"
+ "Все готово. Нажмите \"Отправить\" ещё раз."
+ "Вы назначили SMS/MMS приложением для SMS по умолчанию"
+
+ Убрать прикрепленные файлы
+ Убрать прикрепленные файлы
+ Убрать прикрепленные файлы
+ Убрать прикрепленные файлы
+
+ "Аудиофайл"
+ "Воспроизвести прикрепленный аудиофайл"
+ "Пауза"
+ "Сообщение от пользователя %s: %s."
+ "Не удалось отправить сообщение от пользователя %s: %s. Время: %s."
+ "Сообщение от пользователя %s: %s. Время: %s."
+ "Неотправленное сообщение для пользователя %s: %s. Время: %s."
+ "Отправляется сообщение для пользователя %s: %s. Время: %s."
+ "Не удалось отправить сообщение для пользователя %s: %s. Время: %s."
+ "Сообщение для пользователя %s: %s. Время: %s."
+ "Не удалось отправить сообщение от пользователя %s: %s. Время: %s. %s."
+ "Сообщение от пользователя %s: %s. Время: %s. %s."
+ "Неотправленное сообщение для группы %s: %s. Время: %s."
+ "Отправляется сообщение для группы %s: %s. Время: %s."
+ "Не удалось отправить сообщение для группы %s: %s. Время: %s."
+ "Сообщение для группы %s: %s. Время: %s."
+ "Не удалось отправить сообщение. Нажмите, чтобы повторить попытку."
+ "Чат с пользователями %s"
+ "Удалить тему."
+ "Снять видео"
+ "Сделать стоп-кадр"
+ "Сделать снимок"
+ "Начать запись видео"
+ "Перейти в полноэкранный режим"
+ "Переключение между основной и фронтальной камерами"
+ "Остановить запись и прикрепить видео"
+ "Остановить запись видео"
+ "Фото из SMS/MMS"
+
+ %d фото сохранено в альбоме \"%s\"
+ %d фото сохранено в альбоме \"%s\"
+ %d фото сохранено в альбоме \"%s\"
+ %d фото сохранено в альбоме \"%s\"
+
+
+ %d видео сохранено в альбоме \"%s\"
+ %d видео сохранено в альбоме \"%s\"
+ %d видео сохранено в альбоме \"%s\"
+ %d видео сохранено в альбоме \"%s\"
+
+
+ %d прикрепленный файл сохранен в альбоме \"%s\"
+ %d прикрепленных файла сохранено в альбоме \"%s\"
+ %d прикрепленных файлов сохранено в альбоме \"%s\"
+ %d прикрепленных файла сохранено в альбоме \"%s\"
+
+
+ %d прикрепленный файл сохранен в Загрузках
+ %d прикрепленных файла сохранено в Загрузках
+ %d прикрепленных файлов сохранено в Загрузках
+ %d прикрепленных файла сохранено в Загрузках
+
+
+ %d прикрепленный файл сохранен
+ %d прикрепленных файла сохранено
+ %d прикрепленных файлов сохранено
+ %d прикрепленного файла сохранено
+
+
+ Не удалось сохранить %d прикрепленный файл
+ Не удалось сохранить %d прикрепленных файла
+ Не удалось сохранить %d прикрепленных файлов
+ Не удалось сохранить %d прикрепленного файла
+
+ "Сохраненный файл из MMS"
+ "Настройки"
+ "Архив"
+ "Закрыть"
+ "MMS"
+ "Дополнительные настройки"
+ "Выполнить отладку"
+ "Уведомления"
+ "Звуковой сигнал"
+ "Без звука"
+ "Вибросигнал"
+ "Заблокировано"
+ "Отчеты о доставке SMS"
+ "Запрашивать отчет о доставке для всех отправляемых SMS"
+ "Автополучение"
+ "Автоматически загружать MMS-сообщения"
+ "Автополучение в роуминге"
+ "Автоматически загружать MMS-сообщения в роуминге"
+ "Групповые сообщения"
+ "Использовать MMS для отправки одного сообщения нескольким получателям"
+ "Приложение для обмена SMS"
+ "Приложение для обмена SMS"
+
+
+ "Ваш номер телефона"
+ "Неизвестный"
+ "Сигнал исходящего сообщения"
+ "Передача SMS"
+ "Передать необработанные данные полученных SMS во внешнее хранилище"
+ "Передача MMS"
+ "Передать необработанные данные полученных MMS во внешнее хранилище"
+ "Оповещение населения"
+ "Параметры сообщения"
+ "Копировать текст"
+ "Сведения"
+ "Удалить"
+ "Переслать"
+ "Сведения о сообщении"
+ "Тип: "
+ "SMS"
+ "MMS"
+ "От: "
+ "Кому: "
+ "Отправлено: "
+ "Получено: "
+ "Тема: "
+ "Размер: "
+ "Приоритет: "
+ "SIM-карта: "
+ "Высокий"
+ "Обычный"
+ "Низкий"
+ "SIM-карта %s"
+ "Адрес отправителя скрыт"
+ "Не удается отправить сообщение. Дождитесь завершения загрузки прикрепленных файлов."
+ "Не удалось загрузить прикрепленный файл. Повторите попытку."
+ "Сеть не готова. Повторите попытку."
+ "Удалить текст"
+ "Переключение между вводом букв и цифр"
+ "Добавить участников"
+ "Подтвердить участников"
+ "Начать чат"
+ "Выбрать этот вариант"
+ "Воспроизвести видео"
+ "Участники и параметры"
+ "Выполнить отладку"
+ "Участники и параметры"
+ "Общие"
+ "Участники чата"
+ "Позвонить"
+ "Отправить сообщение"
+ "Отправить сообщение<br/><small>с %s</small>"
+
+ Отправить фото
+ Отправить фото
+ Отправить фото
+ Отправить фото
+
+
+ Отправить аудио
+ Отправить аудио
+ Отправить аудио
+ Отправить аудио
+
+
+ Отправить видео
+ Отправить видео
+ Отправить видео
+ Отправить видео
+
+
+ Отправить карточки контактов
+ Отправить карточки контактов
+ Отправить карточки контактов
+ Отправить карточки контактов
+
+
+ Отправить прикрепленные файлы
+ Отправить прикрепленные файлы
+ Отправить прикрепленные файлы
+ Отправить прикрепленные файлы
+
+
+ %d прикрепленный файл готов к отправке
+ %d прикрепленных файла готовы к отправке
+ %d прикрепленных файлов готовы к отправке
+ %d прикрепленного файла готовы к отправке
+
+ "Отправить отзыв"
+ "Искать в Play Маркете"
+ "Версия"
+ "Версия %1$s"
+ "Лицензии открытого ПО"
+ "Уведомления"
+ "Прикреплено максимальное количество файлов"
+ "Не удалось загрузить прикрепленный файл"
+ "Добавить в контакты?"
+ "Добавить"
+ "Тема"
+ "Тема: "
+ "%s%s"
+ "Загрузка карточки контакта…"
+ "Не удалось загрузить карточку контакта"
+ "Посмотреть карточку контакта"
+
+ %d контакт
+ %d контакта
+ %d контактов
+ %d контакта
+
+ "Карточки контактов"
+ "День рождения"
+ "Примечания"
+ "Пересылка сообщения"
+ "Ответ"
+ "и ещё 1"
+ "и ещё %d"
+ "SMS-служба отключена"
+ "Чтобы отправлять сообщения, назначьте SMS/MMS приложением для SMS по умолчанию"
+ "Назначьте SMS/MMS приложением для SMS по умолчанию"
+ "Изменить"
+ "Чтобы получать сообщения, сделайте SMS/MMS приложением для SMS по умолчанию"
+ "Не выбрана SIM-карта для отправки SMS-сообщений"
+ "Владелец устройства запретил использовать это приложение."
+ "ОК"
+ "Слишком много участников"
+
+ Контакты не найдены
+ Контакты не найдены
+ Контакты не найдены
+ Контакты не найдены
+
+ "Не удалось загрузить изображение с камеры"
+ "Вы: "
+ "%s: "
+ "Черновик"
+ "Когда вы начнете переписку, она появится здесь"
+ "Здесь появятся архивированные чаты"
+ "Загрузка цепочек писем…"
+ "Изображение"
+ "Аудиоклип"
+ "Видео"
+ "Карточка контакта"
+ "MMS"
+ "Отменить"
+ "Повторить"
+ "Введите имя пользователя или номер телефона"
+ "Заблокировать"
+ "Заблокировать пользователя %s"
+ "Разблокировать пользователя %s"
+ "Заблокировать %s?"
+ "Вы по-прежнему будете получать сообщения с этого номера, но не увидите оповещений о них. Этот чат будет архивирован."
+ "Заблокированные контакты"
+ "РАЗБЛОКИРОВАТЬ"
+ "Заблокированные контакты"
+ "Выбрать изображение в библиотеке документов"
+ "Отправка сообщения"
+ "Сообщение отправлено"
+ "Передача данных по мобильной сети отключена в настройках устройства"
+ "В режиме полета нельзя отправлять сообщения"
+ "Не удалось отправить сообщение"
+ "Сообщение скачано"
+ "Передача данных по мобильной сети отключена в настройках устройства"
+ "Невозможно скачать сообщения в режиме полета"
+ "Невозможно скачать сообщение"
+ "Ноль"
+ "Один"
+ "Два"
+ "Три"
+ "Четыре"
+ "Пять"
+ "Шесть"
+ "Семь"
+ "Восемь"
+ "Девять"
+ "Не удалось отправить сообщение с помощью оператора \"%1$s\" (ошибка %2$d)"
+ "Не удалось отправить сообщение с помощью неизвестного оператора (ошибка %1$d)"
+ "Fwd: %s"
+ "Сообщение не отправлено: услуга не активирована в сети"
+ "Сообщение не отправлено: недопустимый адрес получателя"
+ "Ошибка: недопустимое сообщение"
+ "Сообщение не отправлено, поскольку содержит неподдерживаемый контент"
+ "Ошибка: неподдерживаемое сообщение"
+ "Не удалось отправить сообщение из-за его размера"
+ "Новое сообщение"
+ "Посмотреть"
+ "Изображение"
+ "Подходящее приложение не найдено"
+ "Удалить получателя."
+ "Новое сообщение"
+ "Отмена"
+ "Настройки точки доступа"
+ "Не настроено"
+ "Название"
+ "Точка доступа"
+ "MMSC"
+ "Прокси-сервер MMS"
+ "Порт MMS"
+ "MCC"
+ "MNC"
+ "Тип точки доступа"
+ "Удалить точку доступа"
+ "Создать точку доступа"
+ "Сохранить"
+ "Отменить"
+ "Укажите название."
+ "Укажите точку доступа."
+ "Поле MCC должно содержать 3 цифры."
+ "Поле MNC должно содержать 2 или 3 цифры."
+ "Восстановление настроек по умолчанию…"
+ "Восстановить настройки по умолчанию"
+ "Настройки по умолчанию восстановлены"
+ "Без названия"
+ "Точки доступа"
+ "Точки доступа"
+ "Создать точку доступа"
+ "Этот пользователь не может изменять настройки точки доступа"
+ "Скопировать в буфер обмена?"
+ "Да"
+ "На %s"
+ "Общие"
+ "Дополнительные настройки"
+ "Общие настройки"
+ "Расширенные настройки"
+ "SIM-карта \"%s\""
+ "Отправлять всем получателям отдельные SMS-сообщения. Ответы на них будут отправлены только вам."
+ "Отправлять всем получателям одно MMS-сообщение"
+ "Неизвестный номер"
+ "Новое сообщение"
+ "Новое сообщение"
+ "Выбрать SIM-карту"
+ "Выбрана SIM-карта %1$s"
+ "Изменить тему"
+ "Выбрать SIM-карту или изменить тему"
+ "Нажмите и удерживайте, чтобы записать аудио"
+ "Начать чат"
+ "SMS/MMS"
+ "Чаты из SMS/MMS"
+ "SMS/MMS"
+ "Новое сообщение"
+ "Список чатов"
+ "Загрузка чатов"
+ "Загрузка сообщений…"
+ "Другие чаты"
+ "Другие сообщения"
+ "Чат удален"
+ "Чат удален. Нажмите здесь, чтобы перейти к другому."
+ "Заблокирован"
+ "Разблокирован"
+ "Заканчивается место в памяти устройства. Некоторые данные могут быть потеряны."
+ "Выбор прикрепленных файлов"
+ "Подтверждение выбора"
+ "Выбрано: %d"
+ "Удалите один или несколько прикрепленных файлов и повторите попытку."
+ "Если вы не удалите один или несколько прикрепленных файлов, сообщение может не дойти до адресата."
+ "Вы можете отправлять по одному видео за раз. Удалите лишние ролики и повторите попытку."
+ "Не удалось загрузить прикрепленные файлы."
+ "Отправить"
+ "Не удается начать разговор"
+ "%1$s (%2$s)"
+ "SIM-карта выбрана: %s"
+
diff --git a/res/values-si-rLK/arrays.xml b/res/values-si-rLK/arrays.xml
new file mode 100644
index 0000000..89f6c6c
--- /dev/null
+++ b/res/values-si-rLK/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "කාරණාවක් නොමැත"
+ "කාරණාවක් නොමැත"
+
+
+ "ඔව්"
+ "නැත"
+ "හරි"
+ "හා හා"
+ "ස්තූතියි"
+ "මම එකඟයි"
+ "නයිස්"
+ "මම එන ගමන්"
+ "හරි, මම ඔබ වෙත පසුව පැමිණෙන්නම්"
+ ":)"
+ ":("
+
+
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..11a5943
--- /dev/null
+++ b/res/values-si-rLK/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "පණිවිඩ යැවීම"
+ "පණිවිඩ යැවීම"
+ "සංවාදය තෝරන්න"
+ "සැකසීම්"
+ "පණිවිඩය යවන්න"
+ "ඇමිණුමක් එක් කරන්න"
+ "උදවු"
+ "සාදරයෙන් පිළිගනිමු"
+ "මඟ හරින්න"
+ "ඊළඟ >"
+ "මීළඟ"
+ "පිටවන්න"
+ "සැකසීම් >"
+ "සැකසීම්"
+ "පණිවිඩ යැවීමට SMS, Phone සහ සම්බන්ධතා වෙත අවසර අවශ්යයි."
+ "ඔබට සැකසීම් > යෙදුම් > පණිවිඩ යැවීම > අවසරවල අවසර වෙනස් කළ හැකිය."
+ "ඔබට සැකසීම්, යෙදුම්, පණිවිඩ යැවීම, අවසරවල අවසර වෙනස් කළ හැකිය."
+ "නිතරම"
+ "සියලුම සම්බන්ධතා"
+ "%s වෙත යවන්න"
+ "පින්තූර හෝ වීඩියෝ ලබාගන්න"
+ "මෙම උපාංගයෙන් පින්තූර තෝරන්න"
+ "ශ්රව්ය තැටිගත කරන්න"
+ "ඡායාරූපය තෝරන්න"
+ "මාධ්යය තෝරාගෙන තිබේ."
+ "මාධ්යය තෝරාගෙන නොතිබේ."
+ "%d ක් තෝරාගන්නා ලදි"
+ "රූපය %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "රූපය"
+ "ශ්රව්ය තැටිගත කරන්න"
+ "බෙදාගන්න"
+ "මේ දැන්"
+ "දැන්"
+
+ මිනිත්තු %d
+ මිනිත්තු %d
+
+
+ පැය %d
+ පැය %d
+
+
+ දින %d
+ දින %d
+
+
+ සති %d
+ සති %d
+
+
+ මාස %d
+ මාස %d
+
+
+ අවුරුදු %d
+ අවුරුදු %d
+
+ "0 පන්තියේ පණිවිඩය"
+ "සුරකින්න"
+ "උපාංගයේ ඉඩ අඩුය. පණිවිඩකරණය ඉඩ හිස් කර ගැනීමට පැරණි පණිවිඩ ස්වයංක්රියව මකනු ඇත."
+ "ආචයනය ඉඩ ප්රමාණය අඩු වී ඇත"
+ "පණිවිඩ යැවීම ඔබේ උපාංගය මත වැඩි ඉඩක් ලබාගත හැකිවන තෙක් පණිවිඩ නොයැවිය හැකිය නැතහොත් ලබා නොගත හැකිය."
+ "අඩු SMS ආචයනය. ඇතැම් විට ඔබට පණිවිඩ මැකීමට සිදුවේ."
+ "ඔබගේ දුරකථන අංකය තහවුරු කරන්න"
+ "පණිවිඩ යැවීම ඔබේ සමූහ පණිවිඩ නිසි ලෙස බෙදා හරිනු ඇති බවට මෙම එක්-වරක් පියවර තහවුරු කරනු අැත."
+ "දුරකථන අංකය"
+ "මාධ්ය සමඟ ඇති සියලුම පණිවිඩ මකන්න"
+ "%s වඩා පැරණි පණිවිඩ මකන්න"
+ "%s වඩා පැරණි පණිවිඩ ස්වයංක්රීයව මකන්න"
+ "නොසලකා හරින්න"
+ "මාධ්ය සමඟ ඇති සියලුම පණිවිඩ මකන්නද?"
+ "%s වඩා පැරණි පණිවිඩ මකන්නද?"
+ "%s වඩා පැරණි පණිවිඩ ස්වයංක්රීයව මැකීම සක්රිය කරන්නද?"
+ "%s පැවසුවා"
+ "ඔබ පැවසුවා"
+ "%s වෙතින් පණිවිඩය:"
+ "ඔබ පණිවිඩයක් යැවුවා"
+ "යවමින්..."
+ "යැව්වේ නැත. නැවත උත්සාහ කිරීමට ස්පර්ශ කරන්න."
+ "යැව්වේ නැත. නැවත උත්සාහ කරමින්…"
+ "නැවත යවන්න නැතහොත් මකන්න"
+ "කරුණාකර හදිසි සේවාවන් සඳහා හඬ ඇමතුමක් ගන්න. මේ මොහොතේ ඔබගේ පෙළ පණිවිඩය යැවීමට නොහැක."
+ "අසාර්ථක වුණි"
+ "බාගැනීමට අලුත් MMS පණිවුඩයකි"
+ "අලුත් MMS පණිවුඩය"
+ "බාගැනීමට නොහැකි විය"
+ "නැවත උත්සාහයට ස්පර්ශ කරන්න"
+ "බාගැනීමට ස්පර්ශ කරන්න"
+ "බාගතකරන්න නැතහොත් මකන්න"
+ "බාගනිමින්…"
+ "පණිවිඩය කල් ඉකුත්වී ඇත හෝ දැනට නොමැත."
+ "ප්රමාණය: %1$s, කල් ඉකුත් වීම: %2$s"
+ "යැවිය නොහැක. ලබන්නා වලංගු නැත."
+ "ජාලය තුළ සේවාව සක්රිය කර නොමැත"
+ "ජාලයේ ගැටළුවක් හේතුවෙන් යැවීම කළ නොහැක"
+ "පණිවිඩය කල් ඉකුත්වී ඇත හෝ දැනට නොමැත."
+ "(කාරණාවක් නොමැත)"
+ "නොහඳුනන යවන්නෙක්"
+ "භාර දුණි"
+ "%1$s පණිවිඩය %2$s වෙතින් බාගත නොහැකි විය."
+ "අඩු මතකය නිසා දත්ත සමුදාය මත මෙහෙයුම සම්පූර්ණ කළ නොහැකි විය"
+ "පණිවිඩය යැවුවේ නැත"
+ "සමහර පණිවිඩ පණිවිඩ යැවීමේදී නොයවන ලදී"
+
+ සංවාද %d ක් තුළ පණිවිඩ %d
+ සංවාද %d ක් තුළ පණිවිඩ %d
+
+ "පණිවිඩය බානොගන්නා ලදී"
+ "සමහර පණිවිඩ පණිවිඩ යැවීමේදී බා නොගන්නා ලදී"
+
+ සංවාද %d ක් තුළ පණිවිඩ %d
+ සංවාද %d ක් තුළ පණිවිඩ %d
+
+ "%1$s වෙත පණිවිඩය ගියේ නැත"
+ "කරුණාකර හදිසි සේවාවන් සඳහා හඬ ඇමතුමක් ගන්න. මේ මොහොතේ %1$s වෙත ඔබගේ පෙළ පණිවිඩය යැවීමට නොහැක."
+
+ නව පණිවිඩ %d
+ නව පණිවිඩ %d
+
+ "ආරම්භ කරන්න"
+ "කැමරාව නොපවතී"
+ "කැමරාව නොපවතී"
+ "වීඩියෝව ගැනීම නොතිබේ"
+ "මාධ්ය සුරැකීම කළ නොහැක"
+ "පින්තූරය ලබාගත නොහැක"
+ "ආපසු"
+ "සංරක්ෂිත"
+ "මකන්න"
+ "සංරක්ෂිත කරන්න"
+ "සංරක්ෂණය නොකළ"
+ "දැනුම්දීම් අක්රිය කරන්න"
+ "දැනුම්දීම් සක්රිය කරන්න"
+ "සම්බන්ධතාවය එක් කරන්න"
+ "බාගන්න"
+ "යවන්න"
+ "මකන්න"
+ "මෙම පණිවිඩය මකන්න?"
+ "මෙම ක්රියාව අවසන් කිරීම කළ නොහැක."
+ "මකන්න"
+
+ මෙම සංවාද මකන්නද?
+ මෙම සංවාද මකන්නද?
+
+ "මකන්න"
+ "අවලංගු කරන්න"
+ "වෙත"
+ "බහු පින්තූර තෝරන්න"
+ "තේරීම සහතික කරන්න"
+ "+%d"
+ "ශ්රව්ය පටිගත කළ නොහැක. නැවත උත්සාහ කරන්න."
+ "ශ්රව්ය ධාවනය කළ නොහැක. නැවත උත්සාහ කරන්න."
+ "ශ්රව්ය සුරැකීම කළ නොහැක. නැවත උත්සාහ කරන්න."
+ "ස්පර්ශ කරන්න සහ අල්ලා සිටින්න"
+ ", "
+ " "
+ ": "
+ " "
+ "පින්තූරය"
+ "ශ්රව්ය පසුර"
+ "වීඩියෝව"
+ "සම්බන්ධතා කාඩ් පත"
+ "බාගන්න"
+ "SMS ඔස්සේ ප්රතිචාර දක්වන්න"
+ "MMS හරහා පිළිතුරු දෙන්න"
+ "පිළිතුරු දෙන්න"
+
+ සහභාගිවන්නන් %d
+ සහභාගිවන්නන් %d
+
+ "මම"
+ "සම්බන්ධතා අවහිර කරන ලද සහ සංරක්ෂණය කරන ලද"
+ "සම්බන්ධතාව අවහිර කිරීම ඉවත් කර සංරක්ෂණය නොකරන ලදී"
+ "%d ක් සංරක්ෂණය කරන ලදි"
+ "%d ක් සංරක්ෂණය නොකරන ලදි"
+ "දැනුම්දීම් ක්රියාවිරහිත කරන ලදී"
+ "දැනුම්දීම් ක්රියාත්මක කරන ලදී"
+ "සියල්ල සකසා ඇත. නැවත යැවීමට ස්පර්ශ කරන්න."
+ "පණිවිඩ යැවීම සාර්ථකව පෙරනිමි SMS යෙදුම ලෙස සකසන ලදී."
+
+ ඇමුණුම් ඉවත ලන්න
+ ඇමුණුම් ඉවත ලන්න
+
+ "ශ්රව්ය ඇමුණුම"
+ "ශ්රව්ය ඇමුණුම ධාවනය කරන්න"
+ "විරාමය"
+ "%s වෙතින් පණිවිඩය: %s."
+ "%s වෙතින් අසාර්ථක පණිවිඩයක්: %s. වේලාව: %s."
+ "%s වෙතින් පණිවිඩයක්: %s. වේලාව: %s."
+ "%s වෙත නොයැවූ පණිවිඩයක්: %s. වේලාව: %s."
+ "%s වෙත පණිවිඩයක් යවමින්: %s. වේලාව: %s."
+ "%s වෙත අසාර්ථක පණිවිඩයක්: %s. වේලාව: %s."
+ "%s වෙත පණිවිඩයක්: %s. වේලාව: %s."
+ "%s වෙතින් අසාර්ථක පණිවිඩයක්: %s. වේලාව: %s. %s."
+ "%s වෙතින් පණිවිඩයක්: %s. වේලාව: %s. %s."
+ "%s වෙත නොයැවූ පණිවිඩය: %s. වේලාව: %s."
+ "%s වෙත පණිවිඩයක් යවමින්: %s. වේලාව: %s."
+ "%s වෙත අසාර්ථක පණිවිඩයක්: %s. වේලාව: %s."
+ "%s වෙත පණිවිඩයක්: %s. වේලාව: %s."
+ "පණිවිඩය අසාර්ථක විය. නැවත උත්සාහ කිරීමට ස්පර්ශ කරන්න."
+ "%s සමඟ සංවාදය"
+ "කාරණය මකන්න"
+ "වීඩියෝව ග්රහණය කරගන්න"
+ "නිසල පින්තූරයක් ලබාගන්න"
+ "පින්තූරයක් ගන්න"
+ "වීඩියෝව පටිගත කිරීම ආරම්භ කරන්න"
+ "පූර්ණ තිර කැමරාව වෙත මාරු වෙන්න"
+ "ඉදිරිපස සහ පසුපස කාමර අතර මාරු නොවන්න"
+ "පටිගත කිරීම නවත්වා වීඩියෝව අමුණන්න"
+ "වීඩියෝ පටිගත කිරීම නැවත් වන්න"
+ "ඡායාරූප පණිවිඩ යැවීම"
+
+ ඡායාරූප %d ක් \"%s\" ඇල්බමය වෙත සුරකින ලදී
+ ඡායාරූප %d ක් \"%s\" ඇල්බමය වෙත සුරකින ලදී
+
+
+ වීඩියෝ %d ක් \"%s\" ඇල්බමය වෙත සුරකින ලදී
+ වීඩියෝ %d ක් \"%s\" ඇල්බමය වෙත සුරකින ලදී
+
+
+ ඇමුණුම් %d ක් \"%s\" ඇල්බමය වෙත සුරකින ලදී
+ ඇමුණුම් %d ක් \"%s\" ඇල්බමය වෙත සුරකින ලදී
+
+
+ ඇමුණුම් %d ක් \"බාගැනීම්\" වෙත සුරකින ලදී
+ ඇමුණුම් %d ක් \"බාගැනීම්\" වෙත සුරකින ලදී
+
+
+ ඇමුණුම් %d ක් සුරකින ලදි
+ ඇමුණුම් %d ක් සුරකින ලදි
+
+
+ ඇමුණුම් %d ක් සුරැකීමට නොහැකි විය
+ ඇමුණුම් %d ක් සුරැකීමට නොහැකි විය
+
+ "MMS ඇමුණුම සුරකින ලදි"
+ "සැකසීම්"
+ "සංරක්ෂිත"
+ "වසන්න"
+ "MMS"
+ "උසස්"
+ "නිදොස්කරණය"
+ "දැනුම්දීම්"
+ "ශබ්දය"
+ "නිහඬ"
+ "කම්පනය වන්න"
+ "අවහිර කරන ලදි"
+ "SMS යැවීමේ වාර්තාව"
+ "ඔබ යවන ලද සෑම පණිවිඩයකටම යැවීමේ වාර්තාවක් ඉල්ලන්න"
+ "ස්වයං-ලබාගැනීම"
+ "MMS පණිවිඩ ස්වයංක්රීයව ලබාගන්න"
+ "රෝමින් ස්වයං-ලබාගැනීම"
+ "රෝමිං විට MMS ස්වයංක්රියව යළි ලබා ගන්න"
+ "කණ්ඩායම් පණිවිඩ යැවීම්"
+ "ලබන්නන් කිහිපදෙනෙක් සිටින විට එක් පණිවිඩයක් යැවීමට MMS භාවිතා කරන්න"
+ "සුපුරුදු SMS යෙදුම"
+ "සුපුරුදු SMS යෙදුම"
+
+
+ "ඔබගේ දුරකථන අංකය"
+ "නොදනී"
+ "යන පණිවිඩ හඬ"
+ "SMS ගොඩ ගසන්න"
+ "ලැබුණු SMS අමු දත්ත බාහිර ආචයන ගොනුවකට ගොඩ ගසන්න"
+ "MMS ගොඩ ගසන්න"
+ "ලැබුණු MMS අමු දත්ත බාහිර ආචයන ගොනුවකට ගොඩ ගසන්න"
+ "නොරැහැන් ඇඟවීම්"
+ "පණිවිඩ විකල්ප"
+ "පෙළ පිටපත් කරන්න"
+ "විස්තර බලන්න"
+ "මකන්න"
+ "ඉදිරියට යවන්න"
+ "පණිවිඩ විස්තර"
+ "වර්ගය: "
+ "පෙළ පණිවුඩය"
+ "බහු මාධ්ය පණිවිඩය"
+ "වෙතින්: "
+ "වෙත: "
+ "යවන ලද: "
+ "ලැබිණි: "
+ "කාරණය: "
+ "ප්රමාණය: "
+ "ප්රමුඛතාව: "
+ "SIM: "
+ "ඉහළ"
+ "සාමාන්ය"
+ "පහළ"
+ "SIM %s"
+ "සැඟවුණු යවන්නාගේ ලිපිනය"
+ "ඇමුණුම් පුරණය කිරීමේදී පණිවිඩය යැවිය නොහැක."
+ "ඇමුණුම පුර්ණය කළ නොහැක. නැවත උත්සාහ කරන්න."
+ "ජාලය සූදානම් නැත. නැවත උත්සාහ කරන්න."
+ "පෙළ මකන්න"
+ "පෙළ සහ අංක ඇතුළු කිරීම අතර මාරුවන්න"
+ "සහභාගිවන්නන් තව එකතු කරන්න"
+ "සහභාගිවන්නන් සහතික කරන්න"
+ "අළුත් සංවාදයක් ආරම්භ කරන්න"
+ "මෙම අයිතමය තෝරන්න"
+ "වීඩියෝව ධාවනය කරන්න"
+ "පුද්ගලයින් සහ විකල්ප"
+ "නිදොස්කරණය"
+ "පුද්ගලයින් සහ විකල්ප"
+ "පොදු"
+ "මෙම සංවාදයේ සිටින පුද්ගලයින්"
+ "ඇමතුමක් ලබාගන්න"
+ "පණිවිඩය යවන්න"
+ "<small>%s සිට</small><br/> පණිවිඩ යවන්න"
+
+ ඡායාරූප යවන්න
+ ඡායාරූප යවන්න
+
+
+ ශ්රව්යය යවන්න
+ ශ්රව්යය යවන්න
+
+
+ වීඩියෝ යවන්න
+ වීඩියෝ යවන්න
+
+
+ සම්බන්ධතා කාඩ්පත් යවන්න
+ සම්බන්ධතා කාඩ්පත් යවන්න
+
+
+ ඇමුණුම් යවන්න
+ ඇමුණුම් යවන්න
+
+
+ ඇමුණුම් %d ක් යැවීමට සුදානම්
+ ඇමුණුම් %d ක් යැවීමට සුදානම්
+
+ "ප්රතිපෝෂණය යවන්න"
+ "Google Play වෙළඳසැල තුළ බලන්න"
+ "අනුවාදයේ තොරතුරු"
+ "අනුවාදය %1$s"
+ "විවෘත මූලාශ්ර බලපත්ර"
+ "දැනුම්දීම්"
+ "ඇමුණුම් සීමාව ළඟා විය"
+ "ඇමුණුම ප්රවේශනය කිරීම අසාර්ථක විය."
+ "සම්බන්ධතාවෙත එකතු කරනද?"
+ "සම්බන්ධතාවය එකතු කරන්න"
+ "මාතෘකාව"
+ "මාතෘකාව "
+ "%s%s"
+ "සම්බන්ධතා කාඩ් පත් පුර්ණ කරමින්"
+ "සම්බන්ධතා කාඩ්පත පුර්ණය කළ නොහැක"
+ "සම්බන්ධ්තා කාඩ්පත පෙන්වන්න"
+
+ සම්බන්ධතා %d
+ සම්බන්ධතා %d
+
+ "සම්බන්ධතා කාඩ්පත්"
+ "උපන්දිනය"
+ "සටහන්"
+ "ඉදිරියට යන පණිවිඩය"
+ "පිළිතුරු දෙන්න"
+ "+1"
+ "+%d"
+ "SMS අබල කරන ලදි"
+ "යැවීමට, පණිවිඩ යැවීම පෙරනිමි SMS යෙදුම ලෙස සකසන්න"
+ "පණිවිඩ යැවීම පෙරනිමි SMS යෙදුම ලෙස සකසන්න"
+ "වෙනස් කරන්න"
+ "පණිවිඩ ලබා ගැනීම සඳහා, පණිවිඩ යැවීම පෙරනිමි SMS යෙදුම ලෙස සකසන්න"
+ "SMS පණිවිඩ යැවීමට සඳහා මනාප SIM එකක් තෝරාගෙන නොමැත"
+ "උපාංගයේ හිමිකරු මෙම යෙදුමට ඉඩ නොදෙන ලදි."
+ "හරි"
+ "සංවාදයේ සහභාගීවන්නන් ගොඩක් සිටි"
+
+ වලංගු නොවන සම්බන්ධතා
+ වලංගු නොවන සම්බන්ධතා
+
+ "කැමරා පින්තූරය පුර්ණය කළ නොහැක"
+ "ඔබ: "
+ "%s: "
+ "කටු සටහන"
+ "අලුත් සංවාදක් ඔබ ආරම්භ කළ පසු, එය මෙතැන ලැයිස්තු කර ඇති බව ඔබ දකීවි"
+ "සංරක්ෂණය කළ සංවාද මෙහි දිස් වේ"
+ "සංවාද පුර්ණය වෙමින්..."
+ "පින්තූරය"
+ "ශ්රව්ය පසුර"
+ "වීඩියෝව"
+ "සම්බන්ධතා කාඩ් පත"
+ "MMS"
+ "අස් කරන්න"
+ "නැවත උත්සාහ කරන්න"
+ "අලුත් පණිවිඩයක් ආරම්භ කිරීමට සම්බන්ධතාවේ නම හෝ දුරකථන අංකය ඇතුළු කරන්න"
+ "අවහිර කරන්න"
+ "%s අවහිර කරන ලද"
+ "%s අවහිර නොකරන්න"
+ "%s අවහිර කරලද?"
+ "මෙම අංකයෙන් දිගටම පණිවිඩ ලැබීමට ඔබ ඉදිරියට යන ලදි නමුත් තවදුරත් දැනුම් දෙන්න එපා. මෙම සංවාදය සංරක්ෂණය කරවී."
+ "සම්බන්ධතා අවහිර කරන ලදි"
+ "අවහිර නොකරන්න"
+ "සම්බන්ධතා අවහිර කරන ලදි"
+ "ලේඛන පුස්ථකාලයෙන් පින්තූර තෝරන්න"
+ "පණිවිඩය යවමින්"
+ "පණිවිඩය යවන ලදී"
+ "සෙල්යුලර් දත්ත අක්රිය කර තිබේ. ඔබගේ සැකසීම් පරික්ෂා කරන්න."
+ "අහස්යානා ආකාරය තුළ පණිවිඩ යැවිය නොහැක"
+ "පණිවිඩය යැවිය නොහැකි විය"
+ "පණිවිඩය බාගන්නා ලදි"
+ "සෙල්යුලර් දත්ත අක්රිය කර තිබේ. ඔබගේ සැකසීම් පරික්ෂා කරන්න."
+ "ගුවන්යානා ප්රකාරයේදී පණිවිඩ බාගැනීමට නොහැකිය"
+ "පණිවිඩය බාගැනීමට නොහැකි විය"
+ "බිංදුව"
+ "එක"
+ "දෙක"
+ "තුන"
+ "හතර"
+ "පහ"
+ "හය"
+ "හත"
+ "අට"
+ "නවය"
+ "%1$s සමඟ පණිවිඩය යැවිය නොහැක, දෝෂය %2$d"
+ "නොදන්නා වාහකයක් සමඟ පණිවිඩය යැවිය නොහැක, දෝෂය %1$d"
+ "ඉදිරි: %s"
+ "පණිවිඩ නොයවන ලදි: ජාලය තුළ සක්රිය නොකළ සේවාවකි"
+ "පණිවිඩ නොයවන ලදි: ගමනාන්ත ලිපිනය වලංගු නැත"
+ "පණිවිඩ නොයවන ලදි: පණිවිඩය වලංගු නැත"
+ "පණිවිඩ නොයවන ලදි: අන්තර්ගතය සහාය නොදක්වයි"
+ "පණිවිඩ නොයවන ලදි: පණිවිඩ සහාය නොදක්වයි"
+ "පණිවිඩය නොයවන ලදි: ඉතාම විශාලයි"
+ "අලුත් පණිවිඩය"
+ "බලන්න"
+ "පින්තුරය"
+ "අදාළ යෙදුම සොයාගත නොහැක"
+ "ලබන්නා ඉවත් කරන්න"
+ "අලුත් පණිවිඩය"
+ "අවලංගු කරන්න"
+ "ප්රවේශ ස්ථානය සංස්කරණය"
+ "සකසා නැත"
+ "නම"
+ "APN"
+ "MMSC"
+ "MMS ප්රොක්සිය"
+ "MMS තොට"
+ "MCC"
+ "MNC"
+ "APN වර්ගය"
+ "APN මකන්න"
+ "නව APN"
+ "සුරකින්න"
+ "ඉවතලන්න"
+ "නම ක්ෂේත්රය හිස් විය නොහැක."
+ "APN හිස් විය නොහැක."
+ "MCC ක්ෂේත්රය සංඛ්යා 3 ක් විය යුතුය."
+ "MNC ක්ෂේත්රය ඉලක්කම් 2 ක් හෝ 3 ක් විය යුතුය."
+ "සුපුරුදු APN සැකසුම් යළි පිහිටුවමින්."
+ "සුපුරුදු වෙත යළි සකසන්න"
+ "සුපුරුදු APN සැකසීම නැවත සැකසීම සම්පූර්ණ කරන ලදි."
+ "නම් යොදා නැත"
+ "ප්රවේශ ලක්ෂ්ය නම්"
+ "APN"
+ "නව APN"
+ "මෙම පරිශීලකයා සඳහා ප්රවේශ ලක්ෂ්යයේ නමේ සැකසීම් නොතිබේ"
+ "පසුරු පුවරුව වෙත පිටපත් කරන්නද?"
+ "පිටපත්කරණය"
+ "%s වෙත"
+ "පොදු"
+ "උසස්"
+ "පොදු සැකසීම්"
+ "උසස් සැකසුම්"
+ "\"%s\" SIM"
+ "සියළුම ලබන්නන් වෙත තනි SMS පණිවිඩ යවන්න. ඕනෑම පිළිතුරක් පමණක් ඔබට ලැබේ"
+ "සියළුම ලබන්නන් වෙත තනි MMS යවන්න"
+ "නොදන්නා අංකය"
+ "අලුත් පණිවිඩය"
+ "අලුත් පණිවිඩය."
+ "SIM තෝරාගැනීම"
+ "%1$s තෝරාගත්තේය, SIM තෝරාගැනීම"
+ "මාතෘකාව සකසන්න"
+ "SIM තෝරන්න හෝ මාතෘකාව සකසන්න"
+ "ශ්රව්ය පටිගත කිරීමට තට්ටු කර අල්ලා සිටින්න"
+ "අළුත් සංවාදයක් ආරම්භ කරන්න"
+ "පණිවිඩ යැවීම"
+ "පණිවිඩ යැවීමේ ලැයිස්තුව"
+ "පණිවිඩ යැවීම"
+ "අලුත් පණිවිඩය"
+ "සංවාද ලැයිස්තුව"
+ "සංවාද පුරණය වෙමින්"
+ "පණිවුඩ පූරණය කරමින්"
+ "තවත් සංවාද පෙන්වන්න"
+ "View more messages"
+ "සංවාදය මකාදැමුණි"
+ "සංවාදය මකන ලදී. වෙනස් පණිවිඩ යැවීමේ සංවාදයක් පෙන්වීමට ස්පර්ශ කරන්න"
+ "අවහිර කරන ලදි"
+ "අවහුර නොකළ"
+ "ගබඩා ඉඩ අවමයි. ඇතැම් දත්ත අහිමි වනු ඇත."
+ "ඇමුණුම් තෝරන්න"
+ "තේරීම සහතික කරන්න"
+ "%d ක් තෝරන ලදි"
+ "කරුණාකර ඇමුණුම් එකක් හෝ වැඩි සංඛ්යාවක් ඉවත් කර නැවත උත්සාහ කරන්න."
+ "ඔබට ඔබේ පණිවිඩය යැවීමට උත්සාහ කළ හැකි වුවත්, ඔබ ඇමුණුම් එකක් හෝ වැඩි සංඛ්යාවක් ඉවත් කරන්නේ නම් හැර එය බෙදාගැනීම නොහැකි විය හැකිය."
+ "ඔබට පණිවිඩයකට එක් වීඩියෝවක් පමණක් යැවිය හැකිය. කරුණාකර අමතර වීඩියෝ ඉවත් කර නැවත උත්සාහ කරන්න."
+ "පණිවිඩ යැවීම ඇමුණුම පූරණය කිරීමට අසමත් විය."
+ "කෙසේ වුවත් යවන්න"
+ "සංවාදය ඇරඹීමට නොහැකි විය"
+ "%1$s (%2$s)"
+ "%s තෝරාගත්තේය"
+
diff --git a/res/values-sk/arrays.xml b/res/values-sk/arrays.xml
new file mode 100644
index 0000000..0e48259
--- /dev/null
+++ b/res/values-sk/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "bez predmetu"
+ "žiadny predmet"
+
+
+ "Áno"
+ "Nie"
+ "OK"
+ "Haha"
+ "Ďakujeme"
+ "Súhlasím"
+ "Pekné"
+ "Som na ceste"
+ "OK, odpíšem neskôr"
+ ":)"
+ ":("
+
+
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
new file mode 100644
index 0000000..32ec96b
--- /dev/null
+++ b/res/values-sk/strings.xml
@@ -0,0 +1,571 @@
+
+
+
+
+ "SMS a MMS"
+ "SMS a MMS"
+ "Vybrať konverzáciu"
+ "Nastavenia"
+ "Odoslať správu"
+ "Pridať prílohu"
+ "Pomocník"
+ "Vitajte"
+ "Preskočiť"
+ "Ďalej >"
+ "Ďalej"
+ "Ukončiť"
+ "Nastavenia >"
+ "Nastavenia"
+ "Aplikácia SMS a MMS vyžaduje povolenie na prístup k správam SMS, telefónu a kontaktom."
+ "Povolenia môžete zmeniť v časti Nastavenia > Aplikácie > SMS a MMS > Povolenia."
+ "Povolenia môžete zmeniť v časti Nastavenia, Aplikácie, SMS a MMS, Povolenia."
+ "Často kontaktované osoby"
+ "Všetky kontakty"
+ "Odoslať na číslo %s"
+ "Snímať obrázky alebo videá"
+ "Vybrať obrázky z tohto zariadenia"
+ "Zaznamenať zvuk"
+ "Vybrať fotku"
+ "Je vybrané médium."
+ "Výber média bol zrušený."
+ "Vybrané: %d"
+ "obrázok – %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "obrázok"
+ "Zaznamenanie zvuku"
+ "Zdieľať"
+ "Práve teraz"
+ "Teraz"
+
+ %d min
+ %d min
+ %d min
+ %d min
+
+
+ %d hodiny
+ %d hodiny
+ %d hodín
+ %d hodina
+
+
+ %d dni
+ %d dňa
+ %d dní
+ %d deň
+
+
+ %d týždne
+ %d týždňa
+ %d týždňov
+ týždeň
+
+
+ %d mesiace
+ %d mesiaca
+ %d mesiacov
+ mesiac
+
+
+ %d roky
+ %d roka
+ %d rokov
+ rok
+
+ "Správa triedy 0"
+ "Uložiť"
+ "V zariadení dochádza voľné miesto. Služba SMS a MMS bude automaticky odstraňovať staršie správy, aby uvoľnila miesto."
+ "Nedostatok miesta na úložisku"
+ "Aplikácia SMS a MMS nebude môcť posielať ani prijímať správy, pokiaľ v zariadení nebude k dispozícii viac miesta."
+ "V úložisku pre správy SMS nie je dostatok voľného miesta. Je možné, že budete musieť správy odstrániť."
+ "Potvrďte svoje telefónne číslo"
+ "Tento jednorazový krok zaistí, že aplikácia SMS a MMS bude správne doručovať vaše skupinové správy."
+ "Telefónne číslo"
+ "Odstrániť všetky správy s médiami"
+ "Odstrániť správy staršie ako %s"
+ "Automaticky odstrániť správy staršie ako %s"
+ "Ignorovať"
+ "Odstrániť všetky správy s médiami?"
+ "Odstrániť správy staršie ako %s?"
+ "Chcete odstrániť správy staršie ako %s a zapnúť automatické odstraňovanie?"
+ "%s povedal(a)"
+ "Povedali ste"
+ "Správa od používateľa %s:"
+ "Odoslali ste správu"
+ "Odosiela sa…"
+ "Správa nebola odoslaná. Klepnutím to skúste znova."
+ "Správa nebola odoslaná. Skúšame to znova…"
+ "Znova odoslať alebo odstrániť"
+ "Zavolajte na pohotovostné služby. Vašu textovú správu sa v tejto chvíli nepodarilo doručiť."
+ "Nepodarilo sa"
+ "Nová správa MMS na stiahnutie"
+ "Nová správa MMS"
+ "Nepodarilo sa stiahnuť"
+ "Klepnutím to skúste znova"
+ "Stiahnite klepnutím"
+ "Stiahnuť alebo odstrániť"
+ "Sťahuje sa..."
+ "Platnosť správy vypršala alebo správa nie je k dispozícii"
+ "veľkosť: %1$s, vypršanie platnosti: %2$s"
+ "Správu nie je možné odoslať. Nie je uvedený platný príjemca."
+ "Služba nie je v sieti aktivovaná"
+ "Správu sa nepodarilo odoslať, pretože sa vyskytol problém so sieťou"
+ "Platnosť správy vypršala alebo správa nie je k dispozícii"
+ "(Bez predmetu)"
+ "Neznámy odosielateľ"
+ "Doručené"
+ "Nepodarilo sa stiahnuť správu %1$s od odosielateľa %2$s"
+ "Operáciu v databáze sa nepodarilo dokončiť z dôvodu nedostatku pamäte"
+ "Správu sa nepodarilo odoslať"
+ "Niektoré správy neboli odoslané v aplikácii SMS a MMS"
+
+ %d Počet správ v %d konverzáciách
+ %d Počet správ v %d konverzácie
+ %d Počet správ v %d konverzáciách
+ %d Počet správ v jednej konverzácii
+
+ "Správu sa nepodarilo stiahnuť"
+ "Niektoré správy neboli stiahnuté v aplikácii SMS a MMS"
+
+ %d Počet správ v %d konverzáciách
+ %d Počet správ v %d konverzácie
+ %d Počet správ v %d konverzáciách
+ %d Počet správ v jednej konverzácii
+
+ "Správa na číslo %1$s nebola odoslaná"
+ "Zavolajte na pohotovostné služby. Vašu textovú správu na číslo %1$s sa v tejto chvíli nepodarilo doručiť."
+
+ %d nové správy
+ %d novej správy
+ %d nových správ
+ Nová správa
+
+ "Spustiť"
+ "Fotoaparát nie je k dispozícii"
+ "Fotoaparát nie je k dispozícii"
+ "Snímanie videa nie je k dispozícii"
+ "Média nie je možné uložiť"
+ "Snímku nie je možné odfotiť"
+ "Späť"
+ "Archivované"
+ "Odstrániť"
+ "Archivovať"
+ "Vybrať z archívu"
+ "Vypnúť upozornenia"
+ "Zapnúť upozornenia"
+ "Pridať kontakt"
+ "Stiahnuť"
+ "Odoslať"
+ "Odstrániť"
+ "Chcete odstrániť túto správu?"
+ "Táto akcia sa nedá vrátiť späť."
+ "Odstrániť"
+
+ Odstrániť tieto konverzácie?
+ Odstrániť tieto konverzácie?
+ Odstrániť tieto konverzácie?
+ Odstrániť túto konverzáciu?
+
+ "Odstrániť"
+ "Zrušiť"
+ "Komu"
+ "Vybrať viaceré obrázky"
+ "Potvrdiť výber"
+ "+ %d"
+ "Zvuk sa nedá zaznamenať. Skúste to znova."
+ "Zvuk sa nedá prehrať. Skúste to znova."
+ "Zvuk sa nepodarilo uložiť. Skúste to znova."
+ "Klepnutie a podržanie"
+ ", "
+ " "
+ ": "
+ " "
+ "Fotografia"
+ "Zvukový klip"
+ "Video"
+ "Vizitka"
+ "Stiahnuť"
+ "Odpovedať pomocou správy SMS"
+ "Odpovedať správou MMS"
+ "Odpovedať"
+
+ %d účastníci
+ %d účastníka
+ %d účastníkov
+ %d účastník
+
+ "Ja"
+ "Kontakt bol zablokovaný a archivovaný"
+ "Kontakt bol odblokovaný a jeho archivácia bola zrušená"
+ "Archivované: %d"
+ "Zrušená archivácia: %d"
+ "Upozornenia sú vypnuté"
+ "Upozornenia sú zapnuté"
+ "Všetko je pripravené. Klepnite znova na tlačidlo Odoslať."
+ "Aplikácia SMS a MMS bola úspešne nastavená ako predvolená aplikácia pre SMS"
+
+ Zahodiť prílohy
+ Zahodiť prílohy
+ Zahodiť prílohy
+ Zahodiť prílohu
+
+ "Zvuková príloha"
+ "Prehrať zvukovú prílohu"
+ "Pozastaviť"
+ "Správa od používateľa %s: %s"
+ "Správa od používateľa %s bola neúspešná: %s. Čas: %s."
+ "Správa od používateľa %s: %s. Čas: %s."
+ "Správa nebola odoslaná používateľovi %s: %s. Čas: %s."
+ "Odosiela sa správa používateľovi %s: %s. Čas: %s."
+ "Správa používateľovi %s bola neúspešná: %s. Čas: %s."
+ "Správa používateľovi %s: %s. Čas: %s."
+ "Neúspešná správa od používateľa %s: %s. Čas: %s. %s."
+ "Správa od používateľa %s: %s. Čas: %s. %s."
+ "Správa nebola odoslaná skupine %s: %s. Čas: %s."
+ "Odosiela sa správa skupine %s: %s. Čas: %s."
+ "Správa skupine %s bola neúspešná: %s. Čas: %s."
+ "Správa skupine %s: %s. Čas: %s."
+ "Neúspešná správa. Skúste to znova klepnutím."
+ "Rozhovor s používateľmi %s"
+ "Odstrániť predmet"
+ "Natočiť video"
+ "Urobiť statickú snímku"
+ "Vyfotiť"
+ "Spustiť natáčanie videa"
+ "Prepnúť na fotoaparát na celej obrazovke"
+ "Prepnúť medzi predným a zadným fotoaparátom"
+ "Zastaviť zaznamenávanie a pripojiť video"
+ "Zastaviť zaznamenávanie videa"
+ "Fotky v aplikácii SMS a MMS"
+
+ %d fotky boli uložené do albumu %s
+ %d fotky bolo uloženej do albumu %s
+ %d fotiek bolo uložených do albumu %s
+ %d fotka bola uložená do albumu %s
+
+
+ %d videá boli uložené do albumu %s
+ %d videa bolo uloženého do albumu %s
+ %d videí bolo uložených do albumu %s
+ %d video bolo uložené do albumu %s
+
+
+ %d prílohy boli uložené do albumu %s
+ %d prílohy bolo uloženej do albumu %s
+ %d príloh bolo uložených do albumu %s
+ %d príloha bola uložená do albumu %s
+
+
+ %d prílohy boli uložené do priečinka so stiahnutými súbormi
+ %d prílohy bolo uloženej do priečinka so stiahnutými súbormi
+ %d príloh bolo uložených do priečinka so stiahnutými súbormi
+ %d príloha bola uložená do priečinka so stiahnutými súbormi
+
+
+ Boli uložené %d prílohy
+ Bolo uloženej %d prílohy
+ Bolo uložených %d príloh
+ Bola uložená %d príloha
+
+
+ Nepodarilo sa uložiť %d prílohy
+ Nepodarilo sa uložiť %d prílohy
+ Nepodarilo sa uložiť %d príloh
+ Nepodarilo sa uložiť %d prílohu
+
+ "Uložené prílohy správ MMS"
+ "Nastavenia"
+ "Archivované"
+ "Zavrieť"
+ "MMS"
+ "Rozšírené"
+ "Ladiť"
+ "Upozornenia"
+ "Zvuk"
+ "Tichý režim"
+ "Vibrovanie"
+ "Blokované"
+ "Prehľady doručovania SMS"
+ "Vyžadovať potvrdenie o doručení každej odoslanej SMS"
+ "Automatické načítanie"
+ "Automaticky načítať správy MMS"
+ "Automatické načítanie pri roamingu"
+ "Automaticky načítať správy MMS počas roamingu"
+ "Skupinové správy"
+ "Použiť MMS na odoslanie jednej správy, ak má niekoľko príjemcov"
+ "Predvolená aplikácia SMS"
+ "Predvolená aplikácia SMS"
+
+
+ "Vaše telefónne číslo"
+ "Neznáme"
+ "Zvuky odosielanej správy"
+ "Zálohovať správy SMS"
+ "Zálohovať nespracované údaje prijatých správ SMS do súboru v externom úložisku"
+ "Zálohovať správy MMS"
+ "Zálohovať nespracované údaje prijatých správ MMS do súboru v externom úložisku"
+ "Bezdrôtové núdzové upozornenia"
+ "Možnosti správy"
+ "Kopírovať text"
+ "Zobraziť podrobnosti"
+ "Odstrániť"
+ "Poslať ďalej"
+ "Podrobnosti správy"
+ "Typ: "
+ "Textová správa"
+ "Multimediálna správa"
+ "Od: "
+ "Komu: "
+ "Odoslané: "
+ "Prijaté: "
+ "Predmet: "
+ "Veľkosť: "
+ "Priorita: "
+ "SIM karta: "
+ "Vysoká"
+ "Normálna"
+ "Nízka"
+ "Slot SIM %s"
+ "Skrytá adresa odosielateľa"
+ "Počas načítavania príloh nie je možné odoslať správu."
+ "Nie je možné načítať prílohu. Skúste to znova."
+ "Sieť nie je pripravená. Skúste to znova."
+ "Odstrániť text"
+ "Prepnúť medzi zadávaním textu a číslic"
+ "Pridať ďalších účastníkov"
+ "Potvrdiť účastníkov"
+ "Začať novú konverzáciu"
+ "Vybrať túto položku"
+ "Prehrať video"
+ "Ľudia a možnosti"
+ "Ladiť"
+ "Ľudia a možnosti"
+ "Všeobecné"
+ "Ľudia v tejto konverzácii"
+ "Zavolať"
+ "Odoslať správu"
+ "Odošlite správu<br/><small>zo SIM karty %s</small>"
+
+ Odoslať fotky
+ Odoslať fotky
+ Odoslať fotky
+ Odoslať fotku
+
+
+ Odoslať zvukové súbory
+ Odoslať zvukové súbory
+ Odoslať zvukové súbory
+ Odoslať zvukový súbor
+
+
+ Odoslať videá
+ Odoslať videá
+ Odoslať videá
+ Odoslať video
+
+
+ Odoslať vizitky
+ Odoslať vizitky
+ Odoslať vizitky
+ Odoslať vizitku
+
+
+ Odoslať prílohy
+ Odoslať prílohy
+ Odoslať prílohy
+ Odoslať prílohu
+
+
+ %d prílohy sú pripravené na odoslanie
+ %d prílohy je pripravenej na odoslanie
+ %d príloh je pripravených na odoslanie
+ Jedna príloha je pripravená na odoslanie
+
+ "Odoslať spätnú väzbu"
+ "Zobraziť v Obchode Google Play"
+ "Informácie o verzii"
+ "Verzia %1$s"
+ "Licencie open source"
+ "Upozornenia"
+ "Dosiahli ste limit pre počet príloh"
+ "Prílohu sa nepodarilo načítať."
+ "Pridať medzi kontakty?"
+ "Pridať kontakt"
+ "Predmet"
+ "Predmet: "
+ "%s%s"
+ "Načítava sa vizitka"
+ "Nepodarilo sa načítať vizitku"
+ "Zobraziť vizitku"
+
+ %d kontakty
+ %d kontaktu
+ %d kontaktov
+ %d kontakt
+
+ "Vizitky"
+ "Narodeniny"
+ "Poznámky"
+ "Poslanie správy ďalej"
+ "Odpovedanie"
+ "+1"
+ "+%d"
+ "Správy SMS sú zakázané"
+ "Ak chcete odosielať správy, nastavte SMS a MMS ako predvolenú aplikáciu pre SMS"
+ "Nastavte SMS a MMS ako predvolenú aplikáciu pre SMS"
+ "Zmeniť"
+ "Ak chcete prijímať správy, nastavte SMS a MMS ako predvolenú aplikáciu pre SMS"
+ "Nie je vybraná preferovaná SIM karta na odosielanie správ SMS."
+ "Túto aplikáciu vlastník zariadenia nepovolil."
+ "OK"
+ "V konverzácii je príliš mnoho účastníkov"
+
+ Neplatné kontakty
+ Neplatné kontakty
+ Neplatné kontakty
+ Neplatný kontakt
+
+ "Obrázok z fotoaparátu sa nepodarilo načítať"
+ "Vy: "
+ "%s: "
+ "Koncept"
+ "Tu uvidíte svoje konverzácie"
+ "Tu sa zobrazujú archivované konverzácie"
+ "Načítavajú sa konverzácie..."
+ "Obrázok"
+ "Zvukový klip"
+ "Video"
+ "Vizitka"
+ "MMS"
+ "Späť"
+ "Skúsiť znova"
+ "Zadajte meno kontaktu alebo telefónne číslo a začnite písať novú správu"
+ "Blokovať"
+ "Blokovať kontakt %s"
+ "Odblokovať kontakt %s"
+ "Blokovať %s?"
+ "Z tohto čísla budete aj naďalej dostávať správy. Nebudete už však dostávať upozornenia. Táto konverzácia bude archivovaná."
+ "Blokované kontakty"
+ "ODBLOKOVAŤ"
+ "Blokované kontakty"
+ "Vyberte obrázok z knižnice dokumentov"
+ "Správa sa odosiela"
+ "Správa bola odoslaná"
+ "Prenos mobilných údajov je vypnutý. Skontrolujte svoje nastavenia."
+ "V režime V lietadle nie je možné odosielať správy"
+ "Odoslanie správy zlyhalo"
+ "Správa bola stiahnutá"
+ "Prenos mobilných dát je vypnutý. Skontrolujte svoje nastavenia."
+ "V režime v lietadle nie je možné sťahovať správy"
+ "Správu nie je možné stiahnuť"
+ "Nula"
+ "Jedna"
+ "Dva"
+ "Tri"
+ "Štyri"
+ "Päť"
+ "Šesť"
+ "Sedem"
+ "Osem"
+ "Deväť"
+ "Správu prostredníctvom operátora %1$s nie je možné odoslať. Chyba: %2$d"
+ "Správu prostredníctvom neznámeho operátora nie je možné odoslať. Chyba: %1$d"
+ "Poslať ďalej: %s"
+ "Správa nebola odoslaná: služba nie je aktivovaná v sieti"
+ "Správa nebola odoslaná: neplatná cieľová adresa"
+ "Správa nebola odoslaná: neplatná správa"
+ "Správa nebola odoslaná: nepodporovaný obsah"
+ "Správa nebola odoslaná: nepodporovaná správa"
+ "Správa nebola odoslaná: veľkosť prekročila limit"
+ "Nová správa"
+ "Zobraziť"
+ "Obrázok"
+ "Nenašla sa vhodná aplikácia"
+ "Odstrániť príjemcu"
+ "Nová správa"
+ "Zrušiť"
+ "Úprava prístupového bodu"
+ "Nenastavené"
+ "Názov"
+ "Názov prístupového bodu"
+ "MMSC"
+ "Proxy server systému MMS"
+ "Port systému MMS"
+ "MCC"
+ "MNC"
+ "Typ prístupového bodu"
+ "Odstrániť názov prístupového bodu (APN)"
+ "Nový prístupový bod"
+ "Uložiť"
+ "Zrušiť"
+ "Pole Meno nemôže byť prázdne."
+ "Názov prístupového bodu (APN) nemôže byť prázdny."
+ "Pole MCC musí obsahovať 3 číslice."
+ "Pole MNC musí obsahovať 2 alebo 3 číslice."
+ "Obnovujú sa predvolené nastavenia názvu prístupového bodu (APN)."
+ "Obnoviť predvolené"
+ "Predvolené nastavenia prístupových bodov boli obnovené"
+ "Bez názvu"
+ "Názvy prístupových bodov"
+ "Prístupové body"
+ "Nový prístupový bod"
+ "Nastavenia názvu prístupového bodu (APN) nie sú dostupné pre tohto používateľa"
+ "Kopírovať do schránky?"
+ "Kopírovať"
+ "na SIM kartu %s"
+ "Všeobecné"
+ "Rozšírené"
+ "Všeobecné nastavenia"
+ "Rozšírené nastavenia"
+ "SIM karta %s"
+ "Odoslať osobitné správy SMS všetkým príjemcom. Všetky odpovede dostanete iba vy."
+ "Odoslať jednu správu MMS všetkým príjemcom"
+ "Neznáme číslo"
+ "Nová správa"
+ "Nová správa"
+ "Výber SIM karty"
+ "Výber SIM karty (vybraná SIM karta %1$s)"
+ "Upraviť predmet"
+ "Vybrať SIM kartu alebo upraviť predmet"
+ "Zvuk zaznamenáte klepnutím a podržaním"
+ "Začať novú konverzáciu"
+ "SMS a MMS"
+ "Zoznam v aplikácii SMS a MMS"
+ "SMS a MMS"
+ "Nová správa"
+ "Zoznam konverzácií"
+ "Načítavajú sa konverzácie..."
+ "Načítavajú sa správy"
+ "Zobraziť ďalšie konverzácie"
+ "Zobraziť viac správ"
+ "Konverzácia bola odstránená"
+ "Konverzácia bola odstránená. Klepnutím si zobrazte inú konverzáciu aplikácie SMS a MMS."
+ "Zablokované"
+ "Odblokované"
+ "V úložisku je málo miesta. Niektoré údaje môžu byť stratené."
+ "Vybrať prílohy"
+ "Potvrďte výber"
+ "Vybrané: %d"
+ "Odstráňte jednu alebo viac príloh a skúste to znova."
+ "Svoju správu sa môžete pokúsiť odoslať, ale pravdepodobne bude doručená až vtedy, keď odstránite jednu alebo viac príloh."
+ "Môžete odoslať iba jedno video na správu. Odstráňte ďalšie videá a skúste to znova."
+ "Aplikácii SMS a MMS sa nepodarilo načítať prílohu."
+ "Aj tak odoslať"
+ "Rozhovor nie je možné spustiť"
+ "%1$s (%2$s)"
+ "Vybrané: %s"
+
diff --git a/res/values-sl/arrays.xml b/res/values-sl/arrays.xml
new file mode 100644
index 0000000..0cd69b7
--- /dev/null
+++ b/res/values-sl/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "brez zadeve"
+ "nizadeve"
+
+
+ "Da"
+ "Ne"
+ "V redu"
+ "Hehe"
+ "Hvala"
+ "Strinjam se"
+ "Lepo"
+ "Prihajam"
+ "V redu, oglasim se pozneje"
+ ":)"
+ ":("
+
+
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
new file mode 100644
index 0000000..2352632
--- /dev/null
+++ b/res/values-sl/strings.xml
@@ -0,0 +1,571 @@
+
+
+
+
+ "Sporočila"
+ "Sporočila"
+ "Izbira pogovora"
+ "Nastavitve"
+ "Pošlji sporočilo"
+ "Dodajte prilogo"
+ "Pomoč"
+ "Pozdravljeni"
+ "Preskoči"
+ "Naprej >"
+ "Naprej"
+ "Izhod"
+ "Nastavitve >"
+ "Nastavitve"
+ "Sporočila zahtevajo dovoljenje za dostop do sporočil SMS, telefona in stikov."
+ "Dovoljenja lahko spreminjate v »Nastavitve > Aplikacije > Sporočila > Dovoljenja«."
+ "Dovoljenja lahko spreminjate v »Nastavitve, Aplikacije, Sporočila, Dovoljenja«."
+ "Pogosti"
+ "Vsi stiki"
+ "Pošlji na številko %s"
+ "Snemanje slik ali videoposnetkov"
+ "Izbira slik iz te naprave"
+ "Snemanje zvoka"
+ "Izbira fotografije"
+ "Predstavnost je izbrana."
+ "Izbor predstavnosti je preklican."
+ "Št. izbranih: %d"
+ "slika %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "slika"
+ "Snemanje zvoka"
+ "Skupna raba"
+ "Pravkar"
+ "Zdaj"
+
+ %d min
+ %d min
+ %d min
+ %d min
+
+
+ %d ura
+ %d uri
+ %d ure
+ %d ur
+
+
+ %d dan
+ %d dneva
+ %d dni
+ %d dni
+
+
+ %d teden
+ %d tedna
+ %d tedne
+ %d tednov
+
+
+ %d mesec
+ %d meseca
+ %d mesece
+ %d mesecev
+
+
+ %d leto
+ %d leti
+ %d leta
+ %d let
+
+ "Sporočilo razreda 0"
+ "Shrani"
+ "V napravi primanjkuje prostora za shranjevanje. Sporočila bodo zaradi sprostitve prostora samodejno izbrisala starejša sporočila."
+ "Zmanjkalo bo prostora za shranjevanje"
+ "Sporočila morda ne bodo pošiljala ali sprejemala sporočil, dokler v napravi ne bo na voljo več prostora."
+ "Prostora za SMS-je je malo. Morda boste morali izbrisati sporočila."
+ "Potrditev telefonske številke"
+ "S tem enkratnim korakom boste zagotovili, da bodo Sporočila pravilno dostavljala skupinska sporočila."
+ "Telefonska številka"
+ "Izbriši vsa sporočila s predstavnostjo"
+ "Izbriši sporočila, starejša od %s"
+ "Samodejno brisanje sporočil, starejših od %s"
+ "Prezri"
+ "Želite izbrisati vsa sporočila s predstavnostjo?"
+ "Želite izbrisati sporočila, starejša od %s?"
+ "Želite izbrisati sporočila, starejša od %s, in vklopiti samodejno brisanje?"
+ "Oseba %s sporoča"
+ "Sporočili ste"
+ "Sporočilo osebe %s"
+ "Poslali ste sporočilo"
+ "Pošiljanje …"
+ "Ni bilo poslano. Dotaknite se za vnovični poskus."
+ "Ni bilo poslano. Vnovični poskus …"
+ "Znova pošlji ali izbriši"
+ "Pokličite nujno pomoč. SMS-ja ni bilo mogoče poslati."
+ "Ni uspelo"
+ "Novo sporočilo MMS za prenos"
+ "Novo sporočilo MMS"
+ "Prenos ni uspel"
+ "Dotaknite se za vnovični poskus"
+ "Dotaknite se za prenos"
+ "Prenesi ali izbriši"
+ "Prenašanje …"
+ "Sporočilo je poteklo ali ni na voljo"
+ "velikost: %1$s, poteče: %2$s"
+ "Pošiljanje ni mogoče. Prejemnik ni veljaven."
+ "Storitev ni aktivirana v omrežju"
+ "Pošiljanje zaradi težave v omrežju ni uspelo"
+ "Sporočilo je poteklo ali ni na voljo"
+ "(Ni zadeve)"
+ "Neznan pošiljatelj"
+ "Dostavljeno"
+ "Sporočila %1$s osebe %2$s ni bilo mogoče prenesti."
+ "Postopka v zbirki podatkov ni bilo mogoče dokončati, ker primanjkuje pomnilnika"
+ "Sporočilo ni bilo poslano"
+ "Nekatera sporočila niso bila poslana v Sporočilih"
+
+ %d sporočilo v %d pogovoru
+ %d sporočili v %d pogovorih
+ %d sporočila v %d pogovorih
+ %d sporočil v %d pogovorih
+
+ "Sporočilo ni bilo preneseno"
+ "Nekatera sporočila niso bila prenesena v Sporočilih"
+
+ %d sporočilo v %d pogovoru
+ %d sporočili v %d pogovorih
+ %d sporočila v %d pogovorih
+ %d sporočil v %d pogovorih
+
+ "Sporočilo na številko %1$s ni bilo poslano"
+ "Pokličite nujno pomoč. SMS-ja na %1$s ni bilo mogoče poslati."
+
+ %d novo sporočilo
+ %d novi sporočili
+ %d nova sporočila
+ %d novih sporočil
+
+ "Začni"
+ "Fotoaparat ni na voljo"
+ "Fotoaparat ni na voljo"
+ "Snemanje videoposnetkov ni na voljo"
+ "Predstavnosti ni mogoče shraniti"
+ "Ni mogoče posneti fotografije"
+ "Nazaj"
+ "Arhivirano"
+ "Izbriši"
+ "Arhiviraj"
+ "Odstrani iz arhiva"
+ "Izklop obvestil"
+ "Vklop obvestil"
+ "Dodaj stik"
+ "Prenos"
+ "Pošlji"
+ "Izbriši"
+ "Želite izbrisati sporočilo?"
+ "Tega dejanja ni mogoče razveljaviti."
+ "Izbriši"
+
+ Želite izbrisati te pogovore?
+ Želite izbrisati te pogovore?
+ Želite izbrisati te pogovore?
+ Želite izbrisati te pogovore?
+
+ "Izbriši"
+ "Prekliči"
+ "Za"
+ "Izbira več slik"
+ "Potrditev izbora"
+ "+%d"
+ "Zvoka ni mogoče posneti. Poskusite znova."
+ "Zvoka ni mogoče predvajati. Poskusite znova."
+ "Zvoka ni bilo mogoče shraniti. Poskusite znova."
+ "Dotaknite se in pridržite"
+ ", "
+ " "
+ ": "
+ " "
+ "Slika"
+ "Zvočni posnetek"
+ "Videoposnetek"
+ "Osebna vizitka"
+ "Prenos"
+ "Odgovor prek sporočila SMS"
+ "Odg. z MMS-jem"
+ "Odgovori"
+
+ %d udeleženec
+ %d udeleženca
+ %d udeleženci
+ %d udeležencev
+
+ "Jaz"
+ "Blokirani in arhivirani stiki"
+ "Stik odblokiran in odstranjen iz arhiva"
+ "Št. arhiviranih: %d"
+ "Št. povrnjenih iz arhiva: %d"
+ "Obvestila izklopljena"
+ "Obvestila vklopljena"
+ "Vse je nastavljeno. Znova se dotaknite »Pošlji«."
+ "Sporočila so uspešno nastavljena kot privzeta aplikacija za sporočila SMS."
+
+ Zavrzi priloge
+ Zavrzi priloge
+ Zavrzi priloge
+ Zavrzi priloge
+
+ "Zvočna priloga"
+ "Predvajanje zvočne priloge"
+ "Začasna zaustavitev"
+ "Sporočilo pošiljatelja %s: %s."
+ "Neuspelo sporočilo osebe %s: %s. Čas: %s."
+ "Sporočilo osebe %s: %s. Čas: %s."
+ "Neposlano sporočilo osebi %s: %s. Čas: %s."
+ "Pošiljanje sporočila osebi %s: %s. Čas: %s."
+ "Neuspelo sporočilo osebi %s: %s. Čas: %s."
+ "Sporočilo osebi %s: %s. Čas: %s."
+ "Neuspelo sporočilo osebe %s: %s. Čas: %s. %s."
+ "Sporočilo osebe %s: %s. Čas: %s. %s."
+ "Neposlano sporočilo skupini %s: %s. Čas: %s."
+ "Pošiljanje sporočila skupini %s: %s. Čas: %s."
+ "Neuspelo sporočilo skupini %s: %s. Čas: %s."
+ "Sporočilo skupini %s: %s. Čas: %s."
+ "Neuspelo sporočilo. Dotaknite se za vnovičen poskus."
+ "Pogovor z udeleženci %s"
+ "Izbris zadeve"
+ "Posnemi video"
+ "Posnemi fotografijo"
+ "Fotografiraj"
+ "Začni snemanje videa"
+ "Preklopi v celozaslonski način fotoaparata"
+ "Preklop med sprednjim in zadnjim fotoaparatom"
+ "Ustavi snemanje in pripni videoposnetek"
+ "Ustavi snemanje videoposnetka"
+ "Fotografije v Sporočilih"
+
+ %d fotografija shranjena v album »%s«
+ %d fotografiji shranjeni v album »%s«
+ %d fotografije shranjene v album »%s«
+ %d fotografij shranjenih v album »%s«
+
+
+ %d videoposnetek shranjen v album »%s«
+ %d videoposnetka shranjena v album »%s«
+ %d videoposnetki shranjeni v album »%s«
+ %d videoposnetkov shranjenih v album »%s«
+
+
+ %d priloga shranjena v album »%s«
+ %d prilogi shranjeni v album »%s«
+ %d priloge shranjene v album »%s«
+ %d prilog shranjenih v album »%s«
+
+
+ %d priloga shranjena v »Prenosi«
+ %d prilogi shranjeni v »Prenosi«
+ %d priloge shranjene v »Prenosi«
+ %d prilog shranjenih v »Prenosi«
+
+
+ %d priloga je bila shranjena
+ %d prilogi sta bili shranjeni
+ %d priloge so bile shranjene
+ %d prilog je bilo shranjenih
+
+
+ %d priloge ni bilo mogoče shraniti
+ %d prilog ni bilo mogoče shraniti
+ %d prilog ni bilo mogoče shraniti
+ %d prilog ni bilo mogoče shraniti
+
+ "Shranjena priloga sporočila MMS"
+ "Nastavitve"
+ "Arhivirano"
+ "Zapri"
+ "MMS"
+ "Dodatno"
+ "Odpravljanje napak"
+ "Obvestila"
+ "Zvok"
+ "Tiho"
+ "Vibriranje"
+ "Blokirano"
+ "Poročila o dostavi sporočil SMS"
+ "Zahtevanje poročila o dostavi za vsak poslan SMS"
+ "Samodejni prenos"
+ "Samodejni prenos MMS-jev"
+ "Samodejni prenos med gostovanjem"
+ "Samodejni prenos sporočil MMS med gostovanjem"
+ "Skupinsko pošiljanje sporočil"
+ "Če želite eno sporočilo poslati več prejemnikom, uporabite MMS"
+ "Privzeta aplikacija za sporočila SMS"
+ "Privzeta aplikacija za sporočila SMS"
+
+
+ "Vaša telefonska številka"
+ "Neznano"
+ "Zvoki pri odhodnih sporočilih"
+ "Izvoz SMS-jev"
+ "Izvoz neobdelanih podatkov iz prejetih SMS-jev v datoteko v zunanji napravi za shranjevanje"
+ "Izvoz MMS-jev"
+ "Izvoz neobdelanih podatkov iz prejetih MMS-jev v datoteko v zunanji napravi za shranjevanje"
+ "Brezžična opozorila"
+ "Možnosti sporočila"
+ "Kopiraj besedilo"
+ "Ogled podrobnosti"
+ "Brisanje"
+ "Posreduj"
+ "Podrobnosti sporočila"
+ "Vrsta: "
+ "SMS"
+ "MMS"
+ "Od: "
+ "Za: "
+ "Poslano: "
+ "Prejeto: "
+ "Zadeva: "
+ "Velikost: "
+ "Prednost: "
+ "SIM: "
+ "Visoka"
+ "Običajna"
+ "Nizka"
+ "SIM %s"
+ "Skrit naslov pošiljatelja"
+ "Med nalaganjem priponk ni mogoče poslati sporočila."
+ "Priloge ni mogoče naložiti. Poskusite znova."
+ "Omrežje ni pripravljeno. Poskusite znova."
+ "Izbriši besedilo"
+ "Preklop med vnašanjem besedila in številk"
+ "Dodaj več udeležencev"
+ "Potrditev udeležencev"
+ "Začenjanje novega pogovora"
+ "Izbira tega elementa"
+ "Predvajanje videoposnetka"
+ "Osebe in možnosti"
+ "Odpravljanje napak"
+ "Osebe in možnosti"
+ "Splošno"
+ "Osebe v tem pogovoru"
+ "Klicanje"
+ "Pošlji sporočilo"
+ "Pošiljanje sporočila<br/><small>s kartico %s</small>"
+
+ Pošljite fotografije
+ Pošljite fotografije
+ Pošljite fotografije
+ Pošljite fotografije
+
+
+ Pošljite zvočne posnetke
+ Pošljite zvočne posnetke
+ Pošljite zvočne posnetke
+ Pošljite zvočne posnetke
+
+
+ Pošljite videoposnetke
+ Pošljite videoposnetke
+ Pošljite videoposnetke
+ Pošljite videoposnetke
+
+
+ Pošljite osebne vizitke
+ Pošljite osebne vizitke
+ Pošljite osebne vizitke
+ Pošljite osebne vizitke
+
+
+ Pošljite priloge
+ Pošljite priloge
+ Pošljite priloge
+ Pošljite priloge
+
+
+ %d priloga je pripravljena za pošiljanje
+ %d prilogi sta pripravljeni za pošiljanje
+ %d priloge so pripravljene za pošiljanje
+ %d prilog je pripravljenih za pošiljanje
+
+ "Pošljite povratne informacije"
+ "Ogled v Trgovini Google Play"
+ "Podatki o različici"
+ "Različica %1$s"
+ "Odprtokodne licence"
+ "Obvestila"
+ "Dosežena je omejitev za priloge"
+ "Nalaganje priloge ni uspelo."
+ "Ali želite dodati med stike?"
+ "Dodaj stik"
+ "Zadeva"
+ "Zadeva: "
+ "%s%s"
+ "Nalaganje osebne vizitke"
+ "Vizitke ni bilo mogoče naložiti"
+ "Ogled osebne vizitke"
+
+ %d stik
+ %d stika
+ %d stiki
+ %d stikov
+
+ "Vizitke"
+ "Rojstni dan"
+ "Zapiski"
+ "Posredovanje sporočila"
+ "Odgovor"
+ "še 1"
+ "več kot %d"
+ "SMS-ji so onemogočeni"
+ "Če želite pošiljati, nastavite Sporočila kot privzeto aplikacijo za sporočila SMS"
+ "Nastavite Sporočila kot privzeto aplikacijo za sporočila SMS"
+ "Spremeni"
+ "Če želite prejemati sporočila, nastavite Sporočila kot privzeto aplikacijo za sporočila SMS"
+ "Ni izbrane prednostne kartice SIM za pošiljanje sporočil SMS"
+ "Lastnik naprave ne dovoli uporabe te aplikacije."
+ "V redu"
+ "Preveč udeležencev v pogovoru"
+
+ Neveljavni stiki
+ Neveljavni stiki
+ Neveljavni stiki
+ Neveljavni stiki
+
+ "Slike fotoaparata ni bilo mogoče naložiti"
+ "Vi: "
+ "%s: "
+ "Osnutek"
+ "Ko začnete nov pogovor, bo naveden tukaj"
+ "Tu so prikazani arhivirani pogovori"
+ "Nalaganje pogovorov ..."
+ "Slika"
+ "Zvočni posnetek"
+ "Videoklic"
+ "Osebna vizitka"
+ "MMS"
+ "Razveljavi"
+ "Poskusi znova"
+ "Če želite začeti novo sporočilo, vnesite ime stika ali telefonsko številko"
+ "Blokiraj"
+ "Blokiraj stik %s"
+ "Odblokiraj stik %s"
+ "Želite blokirati %s?"
+ "Še vedno boste prejemali sporočila s te številke, vendar ne boste več obveščeni. Ta pogovor bo arhiviran."
+ "Blokirani stiki"
+ "ODBLOKIRAJ"
+ "Blokirani stiki"
+ "Izbira slike iz knjižnice dokumentov"
+ "Pošiljanje sporočila"
+ "Sporočilo poslano"
+ "Prenos podatkov v mobilnem omrežju je izklopljen. Preverite nastavitve."
+ "V načinu za letalo ni mogoče pošiljati sporočil"
+ "Sporočila ni bilo mogoče poslati."
+ "Sporočilo preneseno"
+ "Prenos podatkov v mobilnem omrežju je izklopljen. Preverite nastavitve."
+ "V načinu za letalo ni mogoče prenašati sporočil"
+ "Sporočila ni bilo mogoče prenesti"
+ "Nič"
+ "Ena"
+ "Dva"
+ "Tri"
+ "Štiri"
+ "Pet"
+ "Šest"
+ "Sedem"
+ "Osem"
+ "Devet"
+ "Sporočila prek operaterja %1$s ni mogoče poslati, napaka %2$d"
+ "Sporočila prek neznanega operaterja ni mogoče poslati, napaka %1$d"
+ "Fwd: %s"
+ "Sporočilo ni bilo poslano: storitev ni aktivirana v omrežju"
+ "Sporočilo ni poslano: neveljaven naslov prejemnika"
+ "Sporočilo ni poslano: neveljavno sporočilo"
+ "Sporočilo ni poslano: nepodprta vsebina"
+ "Sporočilo ni poslano: nepodprto sporočilo"
+ "Sporočilo ni bilo poslano: prevelika velikost"
+ "Novo sporočilo"
+ "Pogled"
+ "Slika"
+ "Ni bilo mogoče najti primerne aplikacije"
+ "Odstrani prejemnika"
+ "Novo sporočilo"
+ "Prekliči"
+ "Urejanje dostopne točke"
+ "Ni nastavljeno"
+ "Ime"
+ "APN"
+ "Storitveni center za sporočila MMS"
+ "Strežnik proxy za sporočila MMS"
+ "Vrata za sporočila MMS"
+ "Mobilna koda države"
+ "Koda mobilnega omrežja"
+ "Vrsta APN-ja"
+ "Izbriši APN"
+ "Nov APN"
+ "Shrani"
+ "Zavrzi"
+ "Polje z imenom ne sme biti prazno."
+ "APN ne sme biti prazen."
+ "Polje z mobilno kodo države mora vsebovati 3 števke."
+ "Polje s kodo mobilnega omrežja mora vsebovati 2 ali 3 števke."
+ "Obnavljanje privzetih nastavitev APN-ja."
+ "Ponastavi na privzeto"
+ "Ponastavitev privzetih nastavitev APN-ja je končana."
+ "Neimenovano"
+ "Imena dostopnih točk"
+ "APN-ji"
+ "Nov APN"
+ "Nastavitve imena dostopne točke niso na voljo za tega uporabnika"
+ "Želite kopirati v odložišče?"
+ "Kopiraj"
+ "v kartico %s"
+ "Splošno"
+ "Dodatno"
+ "Splošne nastavitve"
+ "Dodatne nastavitve"
+ "Kartica SIM »%s«"
+ "Pošiljanje posameznih sporočil SMS vsem prejemnikom. Morebitne odgovore boste prejeli samo vi."
+ "Pošiljanje enega sporočila MMS vsem prejemnikom"
+ "Neznana številka"
+ "Novo sporočilo"
+ "Novo sporočilo."
+ "Izbirnik kartice SIM"
+ "Izbrana kartica SIM %1$s, izbirnik kartic SIM"
+ "Uredi zadevo"
+ "Izberi kartico SIM ali uredi zadevo"
+ "Dotakni se in pridrži za snemanje zvoka"
+ "Začenjanje novega pogovora"
+ "Sporočila"
+ "Seznam sporočil"
+ "Sporočila"
+ "Novo sporočilo"
+ "Seznam pogovorov"
+ "Nalaganje pogovorov"
+ "Nalaganje sporočil"
+ "Več pogovorov"
+ "Prikaz več sporočil"
+ "Pogovor je izbrisan"
+ "Pogovor je izbrisan. Dotaknite se, če želite prikazati drug pogovor v Sporočilih."
+ "Blokiran(-a)"
+ "Odblokiran(-a)"
+ "Primanjkuje prostora za shranjevanje. Nekateri podatki bodo morda izgubljeni."
+ "Izbira prilog"
+ "Potrditev izbora"
+ "Št. izbranih: %d"
+ "Odstranite eno ali več prilog in poskusite znova."
+ "Lahko poskusite poslati sporočilo, vendar morda ne bo dostavljeno, razen če odstranite eno ali več prilog."
+ "Pošljete lahko samo en videoposnetek na sporočilo. Odstranite druge videoposnetke in poskusite znova."
+ "Sporočila niso uspela naložiti priloge."
+ "Vseeno pošlji"
+ "Pogovora ni bilo mogoče začeti"
+ "%1$s (%2$s)"
+ "Izbrana kartica SIM %s"
+
diff --git a/res/values-sq-rAL/arrays.xml b/res/values-sq-rAL/arrays.xml
new file mode 100644
index 0000000..2744180
--- /dev/null
+++ b/res/values-sq-rAL/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "pa subjekt"
+ "pa subjekt"
+
+
+ "Po"
+ "Jo"
+ "Në rregull!"
+ "Hehe"
+ "Faleminderit"
+ "Pranoj"
+ "Këndshëm"
+ "Jam rrugës"
+ "Në rregull, më lejo të të marr më vonë"
+ ":)"
+ ":("
+
+
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
new file mode 100644
index 0000000..b98ea92
--- /dev/null
+++ b/res/values-sq-rAL/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Mesazhet"
+ "Mesazhet"
+ "Përzgjidh bisedën"
+ "Cilësimet"
+ "Dërgo mesazh"
+ "Shto një bashkëngjitje"
+ "Ndihma"
+ "Mirë se erdhe"
+ "Kapërce"
+ "Përpara >"
+ "Përpara"
+ "Dil"
+ "Cilësimet >"
+ "Cilësimet"
+ "Mesazhet kanë nevojë për leje për në SMS, Telefon dhe Kontakte."
+ "Lejet mund t\'i ndryshosh te Cilësimet, Aplikacionet, Mesazhet, Lejet."
+ "Lejet mund t\'i ndryshosh te Cilësimet, Aplikacionet, Mesazhet, Lejet."
+ "Të shpeshta"
+ "Të gjitha kontaktet"
+ "Dërgoje te %s"
+ "Regjistro fotografi ose video"
+ "Zgjidh imazhe nga kjo pajisje"
+ "Regjistro audio"
+ "Zgjidh foto"
+ "Artikulli \"media\" u zgjodh."
+ "Artikulli \"media\" nuk u zgjodh."
+ "U përzgjodhën %d"
+ "imazhi %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "imazhi"
+ "Regjistro audio"
+ "Shpërnda"
+ "Pikërisht tani"
+ "Tani"
+
+ %d minuta
+ %d minutë
+
+
+ %d orë
+ %d orë
+
+
+ %d ditë
+ %d ditë
+
+
+ %d javë
+ një javë
+
+
+ %d muaj
+ një muaj
+
+
+ %d vite
+ një vit
+
+ "Mesazh i kategorisë 0"
+ "Ruaj"
+ "Në pajisje ka mbetur pak hapësirë e lirë. Mesazhet do të fshijnë automatikisht mesazhet e vjetra për të liruar hapësirë."
+ "Hapësira ruajtëse po mbaron"
+ "\"Mesazhet\" mund të mos dërgojë ose pranojë mesazhe derisa të ketë hapësirë tjetër të lirë në pajisjen tënde."
+ "Hapësirë e paktë ruajtëse për SMS-tw. Mund të të duhet të fshish mesazhe."
+ "Konfirmo numrin tënd të telefonit"
+ "Ky hap që kryhet vetëm një herë do të garantojë që Mesazhet t\'i dorëzojë siç duhet mesazhet e tua në grup."
+ "Numri i telefonit"
+ "Fshiji të gjitha mesazhet me klipe \"media\""
+ "Fshi mesazhe më të vjetra se %s"
+ "Fshi automatikisht mesazhe më të vjetra se %s"
+ "Shpërfill"
+ "Të fshihen të gjitha mesazhet me klipe \"media\"?"
+ "Të fshihen mesazhet më të vjetra se %s?"
+ "Të fshihen mesazhet më të vjetra se %s dhe të aktivizohet fshirja automatike?"
+ "%s tha"
+ "Ti the"
+ "Mesazh nga %s"
+ "Dërgove një mesazh"
+ "Po dërgon..."
+ "Nuk u dërgua. Prek për të provuar sërish."
+ "Nuk u dërgua. Po provon sërish…"
+ "Dërgo sërish ose fshi"
+ "Bëj një telefonatë me zë drejt shërbimeve të urgjencës. Mesazhi yt me tekst nuk arriti të dërgohej këtë herë."
+ "Dështoi"
+ "Mesazh i ri MMS-je për të shkarkuar"
+ "Mesazh i ri MMS-je"
+ "Nuk arriti ta shkarkonte"
+ "Prek për të provuar sërish"
+ "Prek për të shkarkuar"
+ "Shkarko ose fshi"
+ "Po shkarkon…"
+ "Mesazhi skadoi ose nuk mund të përdoret"
+ "madhësia: %1$s, skadimi: %2$s"
+ "Nuk mund ta dërgojë. Marrësi është i pavlefshëm."
+ "Shërbimi nuk është i aktivizuar në rrjet"
+ "Nuk arriti ta dërgonte për shkak të një problemit në rrjet"
+ "Mesazhi skadoi ose nuk mundësohet"
+ "(Pa subjekt)"
+ "Dërgues i panjohur"
+ "Dorëzuar"
+ "Nuk arriti të shkarkonte mesazhin %1$s nga %2$s."
+ "Nuk arriti të përfundonte operacionin e bazës së të dhënave për shkak të kujtesës së pakët"
+ "Mesazhi nuk është dërguar"
+ "Disa mesazhe nuk janë dërguar te Mesazhet"
+
+ %d mesazhe në %d bashkëbisedime
+ %d mesazhe në një bashkëbisedim
+
+ "Mesazhi nuk u shkarkua"
+ "Disa mesazhe nuk janë shkarkuar te Mesazhet"
+
+ %d mesazhe në %d bashkëbisedime
+ %d mesazhe në një bashkëbisedim
+
+ "Mesazhi për %1$s nuk u dërgua"
+ "Bëj një telefonatë me zë drejt shërbimeve të urgjencës. Mesazhi yt me tekst për %1$s nuk arriti të dërgohej këtë herë."
+
+ %d mesazhe të reja
+ Mesazh i ri
+
+ "Fillo"
+ "Kamera nuk mund të përdoret"
+ "Kamera nuk mund të përdoret"
+ "Regjistrimi i videos nuk mundësohet"
+ "Nuk mund të ruajë materiale \"media\""
+ "Nuk mund të nxjerrë fotografi"
+ "Prapa"
+ "Arkivuar"
+ "Fshi"
+ "Arkivo"
+ "Hiq nga arkiva"
+ "Çaktivizo njoftimet"
+ "Aktivizo njoftimet"
+ "Shto kontakt"
+ "Shkarko"
+ "Dërgo"
+ "Fshi"
+ "Të fshihet ky mesazh?"
+ "Ky veprim nuk mund të zhbëhet."
+ "Fshi"
+
+ Fshiji këto biseda?
+ Fshije këtë bisedë?
+
+ "Fshi"
+ "Anulo"
+ "Për"
+ "Përzgjidh shumë imazhe"
+ "Konfirmo përzgjedhjen"
+ "+%d"
+ "Nuk mund të regjistrojë audio. Provo sërish."
+ "Nuk mund të luajë audio. Provo sërish."
+ "Nuk arriti ta ruante audion. Provo sërish."
+ "Prek dhe mbaj shtypur"
+ ", "
+ " "
+ ": "
+ " "
+ "Fotografi"
+ "Klip audioje"
+ "Video"
+ "Kartë kontakti"
+ "Shkarko"
+ "Përgjigju përmes SMS-së"
+ "Përgjigju përmes MMS-së"
+ "Përgjigju"
+
+ %d pjesëmarrës
+ %d pjesëmarrës
+
+ "Unë"
+ "Kontakt i bllokuar dhe i arkivuar"
+ "Kontakti u zhbllokua dhe arkivimi i tij u anulua"
+ "%d të arkivuara"
+ "%d të paarkivuara"
+ "Njoftimet janë të çaktivizuara"
+ "Njoftimet janë të aktivizuara"
+ "Gjithçka gati. Prek sërish \"Dërgo\"."
+ "\"Mesazhet\" u caktua me sukses si aplikacioni me parazgjedhje i SMS-ve."
+
+ Hiq bashkëngjitjet
+ Hiq bashkëngjitjen
+
+ "Bashkëngjitja audio"
+ "Luaj bashkëngjitjen në audio"
+ "Pauzë"
+ "Mesazh nga %s: %s."
+ "Mesazh i dështuar nga %s: %s. Ora: %s."
+ "Mesazh nga %s: %s. Ora: %s."
+ "Mesazh i padërguar për %s: %s. Ora: %s."
+ "Po dërgon mesazh te %s: %s. Ora: %s."
+ "Mesazh i dështuar për %s: %s. Ora: %s."
+ "Mesazh për %s: %s. Ora: %s."
+ "Mesazh i dështuar nga %s: %s. Ora: %s. %s."
+ "Mesazh nga %s: %s. Ora: %s. %s."
+ "Mesazh i padërguar për %s: %s. Ora: %s."
+ "Po dërgon mesazh te %s: %s. Ora: %s."
+ "Mesazh i dështuar për %s: %s. Ora: %s."
+ "Mesazh për %s: %s. Ora: %s."
+ "Mesazhi dështoi. Prek për ta provuar sërish."
+ "Bisedë me %s"
+ "Fshi subjektin"
+ "Regjistro video"
+ "Regjistro një pamje të palëvizshme"
+ "Nxirr fotografi"
+ "Fillo regjistrimin në video"
+ "Kalo në kamerën me ekran të plotë"
+ "Ndërro mes kamerës para dhe mbrapa"
+ "Ndalo regjistrimin dhe bashkëngjit video"
+ "Ndalo regjistrimin e videos"
+ "Foto me mesazhe"
+
+ %d fotografi u ruajtën tek albumi \"%s\"
+ %d fotografi u ruajt tek albumi \"%s\"
+
+
+ %d video u ruajtën tek albumi \"%s\"
+ %d video u ruajt tek albumi \"%s\"
+
+
+ %d bashkëngjitje u ruajtën tek albumi\"%s\"
+ %d bashkëngjitje u ruajt tek albumi \"%s\"
+
+
+ %d bashkëngjitje u ruajtën tek \"Shkarkimet\"
+ %d bashkëngjitje u ruajt tek \"Shkarkimet\"
+
+
+ %d bashkëngjitje u ruajtën
+ %d bashkëngjitje u ruajt
+
+
+ %d bashkëngjitje nuk mund të ruheshin
+ %d bashkëngjitje nuk mund të ruhej
+
+ "Bashkëgjitje MMS e ruajtur"
+ "Cilësimet"
+ "Arkivuar"
+ "Mbyll"
+ "MMS"
+ "Të përparuara"
+ "Korrigjo"
+ "Njoftime"
+ "Zëri"
+ "Hesht"
+ "Dridh"
+ "I bllokuar"
+ "Raportet e dorëzimit të SMS"
+ "Kërko një raport dorëzimi për çdo SMS që dërgon"
+ "Gjej automatikisht"
+ "Gjej automatikisht mesazhe MMS"
+ "Gjetje automatike në roaming"
+ "Merr automatikisht mesazhin MMS kur je në roaming"
+ "Mesazhe në grup"
+ "Përdor \"MMS\" për të dërguar një mesazh të vetëm kur ka shumë marrës"
+ "Aplikacioni me parazgjedhje i SMS-ve"
+ "Aplikacioni me parazgjedhje i SMS-ve"
+
+
+ "Numri yt i telefonit"
+ "E panjohur"
+ "Tingujt e mesazheve dalëse"
+ "Hidh SMS-të"
+ "Hidhi të dhënat SMS të papërpunuara në skedarin e hapësirës së jashtme ruajtëse"
+ "Hidh MMS-të"
+ "Hidhi të dhënat MMS të papërpunuara në skedarin e hapësirës së jashtme ruajtëse"
+ "Sinjalizimi pa tel"
+ "Opsionet e mesazhit"
+ "Kopjo tekstin"
+ "Shiko detajet"
+ "Fshi"
+ "Përpara"
+ "Detajet e mesazhit"
+ "Shkruaj: "
+ "Mesazh me tekst"
+ "Mesazh multimedial"
+ "Nga: "
+ "Për: "
+ "Dërguar: "
+ "Marrë: "
+ "Subjekti: "
+ "Madhësia: "
+ "Përparësia: "
+ "Karta SIM: "
+ "E lartë"
+ "Normale"
+ "E ulët"
+ "Numri i kartës SIM: %s"
+ "Adresë e fshehur e dërguesit"
+ "Nuk mund të dërgojë mesazh kur ngarkon bashkëngjitje."
+ "Nuk mund ta ngarkojë bashkëngjitjen. Provo sërish."
+ "Rrjeti nuk është gati. Provo përsëri."
+ "Fshi tekstin"
+ "Kalo mes futjes së tekstit dhe numrave"
+ "Shto më shumë pjesëmarrës"
+ "Konfirmo pjesëmarrësit"
+ "Fillo bisedë të re"
+ "Përzgjidh këtë artikull"
+ "Luaj video"
+ "Kontaktet dhe opsionet"
+ "Korrigjo"
+ "Kontaktet dhe opsionet"
+ "Të përgjithshme"
+ "Kontakte në këtë bisedë"
+ "Bëj telefonatë"
+ "Dërgo mesazh"
+ "Dërgo mesazh<br/><small>nga %s</small>"
+
+ Dërgo fotografitë
+ Dërgo fotografinë
+
+
+ Dërgo audiot
+ Dërgo audion
+
+
+ Dërgo videot
+ Dërgo videon
+
+
+ Dërgo kartat e kontaktit
+ Dërgo kartën e kontaktit
+
+
+ Dërgo bashkëngjitjet
+ Dërgo bashkëngjitjen
+
+
+ %d bashkëngjitje gati për dërgim
+ Një bashkëngjitje gati për dërgim
+
+ "Dërgo përshtypjet"
+ "Shiko në Dyqanin \"Luaj me Google\""
+ "Informacion mbi versionin"
+ "Versioni %1$s"
+ "Licenca me burim informacioni të hapur"
+ "Njoftime"
+ "U arrit kufiri i bashkëngjitjeve"
+ "Dështoi në ngarkimin e bashkëngjitjes."
+ "Shto te kontaktet?"
+ "Shto kontakt"
+ "Subjekti"
+ "Subjekti: "
+ "%s%s"
+ "Po ngarkon kartën e kontaktit"
+ "Nuk arriti të ngarkonte kartën e kontakteve"
+ "Shiko kartën e kontaktit"
+
+ %d kontakte
+ %d kontakt
+
+ "Kartat e kontakteve"
+ "Ditëlindje"
+ "Shënime"
+ "Transfero mesazhin"
+ "Përgjigju"
+ "+1"
+ "+%d"
+ "Funksioni \"SMS\" u çaktivizua"
+ "Për të dërguar, caktoje \"Mesazhet\" si aplikacionin me parazgjedhje të SMS-ve"
+ "Caktoje \"Mesazhet\" si aplikacionin me parazgjedhje të SMS-ve"
+ "Ndrysho"
+ "Për të pranuar mesazhe, caktoje \"Mesazhet\" si aplikacionin me parazgjedhje të SMS-ve"
+ "Nuk u përzgjodh kartë e preferuar SIM për dërgimin e mesazheve SMS"
+ "Ky aplikacion nuk lejohet nga zotëruesi i pajisjes."
+ "Në rregull!"
+ "Shumë pjesëmarrës në një bisedë"
+
+ Kontakte të pavlefshme
+ Kontakt i pavlefshëm
+
+ "Nuk arriti të ngarkonte pamjen e kamerës"
+ "Ti: "
+ "%s: "
+ "Draft"
+ "Pasi të fillosh një bisedë të re, do ta shikosh të listuar këtu"
+ "Bisedat e arkivuara shfaqen këtu"
+ "Po ngarkon bisedat…"
+ "Fotografi"
+ "Klip audioje"
+ "Video"
+ "Kartë kontakti"
+ "MMS"
+ "Zhbëj"
+ "Provo përsëri"
+ "Fut një emër kontakti ose numër telefoni për të nisur një mesazh të ri"
+ "Blloko"
+ "Blloko %s"
+ "Zhblloko %s"
+ "Të bllokohet %s?"
+ "Do të vazhdosh të marrësh mesazhe nga ky numër, por nuk do të njoftohesh më. Kjo bisedë do të arkivohet."
+ "Kontaktet e bllokuara"
+ "ZHBLLOKO"
+ "Kontaktet e bllokuara"
+ "Zgjidh imazh nga biblioteka e dokumenteve"
+ "Po dërgon mesazhin"
+ "Mesazhi u dërgua"
+ "Të dhënat celulare janë të çaktivizuara. Kontrollo cilësimet."
+ "Nuk mund të dërgojë mesazhe në modalitetin \"në aeroplan\""
+ "Mesazhi nuk u arrit të dërgohej"
+ "Mesazhi u shkarkua"
+ "Të dhënat celulare janë të çaktivizuara. Kontrollo cilësimet."
+ "Nuk mund të shkarkojë mesazhe në modalitetin \"në aeroplan\""
+ "Mesazhi nuk u arrit të shkarkohej"
+ "Zero"
+ "Një"
+ "Dy"
+ "Tre"
+ "Katër"
+ "Pesë"
+ "Gjashtë"
+ "Shtatë"
+ "Tetë"
+ "Nëntë"
+ "Mesazhi nuk mund të dërgohet me %1$s - gabimi %2$d"
+ "Mesazhi nuk mund të dërgohet me një operator celular të panjohur - gabimi %1$d"
+ "Transfero: %s"
+ "Mesazhi nuk u dërgua - shërbimi nuk është i aktivizuar në rrjet"
+ "Mesazhi nuk u dërgua - adresë e pavlefshme vendmbërritje"
+ "Mesazhi nuk u dërgua - mesazh i pavlefshëm"
+ "Mesazhi nuk u dërgua - përmbajtje e pambështetur"
+ "Mesazhi nuk u dërgua - mesazh i pambështetur"
+ "Mesazhi nuk u dërgua: shumë i madh"
+ "Mesazh i ri"
+ "Shiko"
+ "Imazh"
+ "Nuk arriti të gjente një aplikacion të përshtatshëm"
+ "Hiq marrësin"
+ "Mesazh i ri"
+ "Anulo"
+ "Redakto pikën e qasjes"
+ "Nuk është vendosur"
+ "Emri"
+ "APN-ja"
+ "MMSC-ja"
+ "Përfaqësuesi i MMS-ve"
+ "Porta e MMS-ve"
+ "MCC-ja"
+ "MNC"
+ "Lloji i APN-së"
+ "Fshi APN-në"
+ "APN e re"
+ "Ruaj"
+ "Injoro"
+ "Fusha \"Emri\" nuk të lihet bosh."
+ "APN-ja nuk mund të lihet bosh."
+ "Fusha e MCC-së duhet të ketë 3 shifra."
+ "Fusha e MNC-së duhet të ketë 2 ose 3 shifra."
+ "Po restauron cilësimet e APN-së me parazgjedhje."
+ "Rivendos në parazgjedhje"
+ "Rivendosja e cilësimeve të APN-së me parazgjedhje përfundoi."
+ "Pa titull"
+ "Emrat e Pikës së Qasjes"
+ "APN-të"
+ "APN e re"
+ "Cilësimet e Emrit të Pikës së Qasjes nuk mund të përdoren për këtë përdorues"
+ "Të kopjohet në kujtesën e fragmenteve"
+ "Kopjo"
+ "për %s"
+ "Të përgjithshme"
+ "Të përparuara"
+ "Cilësimet e përgjithshme"
+ "Cilësimet e përparuara"
+ "Emri i kartës SIM: \"%s\""
+ "Dërgoju mesazhe SMS të gjithë marrësve. Vetëm ti do të marrësh përgjigje"
+ "Dërgoju një MMS të vetme, të gjithë marrësve"
+ "Numër i panjohur"
+ "Mesazh i ri."
+ "Mesazh i ri."
+ "Përzgjedhësi i kartës SIM"
+ "%1$s i përzgjedhur, përzgjedhësi i kartës SIM"
+ "Redakto subjektin"
+ "Përzgjidh kartën SIM ose redakto subjektin"
+ "Prek dhe mbaj shtypur për të regjistruar audio"
+ "Fillo bisedë të re"
+ "Mesazhet"
+ "Lista e Mesazheve"
+ "Mesazhet"
+ "Mesazh i ri"
+ "Lista e bisedave"
+ "Po ngarkon bisedat"
+ "Po ngarkon mesazhet"
+ "Shiko më shumë biseda"
+ "Shiko më shumë mesazhe"
+ "Biseda është fshirë"
+ "Biseda u fshi. Prek për të shfaqur një bisedë tjetër te \"Mesazhet\""
+ "I bllokuar"
+ "I zhbllokuar"
+ "Hapësira ruajtëse është e vogël. Disa të dhëna mund të humbin."
+ "Përzgjidh bashkëngjitje"
+ "Konfirmo përzgjedhjen"
+ "U përzgjodhën %d"
+ "Hiq një ose më shumë bashkëngjitje dhe provo sërish."
+ "Mund të provosh ta dërgosh mesazhin, por mund të mos dërgohet pa hequr një ose disa bashkëngjitje."
+ "Mund të dërgosh vetëm një video për çdo mesazh. Hiqi videot shtesë dhe provo përsëri."
+ "Mesazhet dështuan në ngarkimin e bashkëngjitjes."
+ "Dërgoje gjithsesi"
+ "Nuk arriti të fillonte bisedën"
+ "%1$s (%2$s)"
+ "%s u zgjodh"
+
diff --git a/res/values-sr/arrays.xml b/res/values-sr/arrays.xml
new file mode 100644
index 0000000..f099488
--- /dev/null
+++ b/res/values-sr/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "без наслова"
+ "нема наслова"
+
+
+ "Да"
+ "Не"
+ "Потврди"
+ "Хе хе"
+ "Хвала"
+ "Слажем се"
+ "Фино"
+ "Стижем ускоро"
+ "Добро, јавићу ти се касније"
+ ":)"
+ ":("
+
+
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
new file mode 100644
index 0000000..7155cd9
--- /dev/null
+++ b/res/values-sr/strings.xml
@@ -0,0 +1,545 @@
+
+
+
+
+ "Размена порука"
+ "Размена порука"
+ "Изаберите преписку"
+ "Подешавања"
+ "Пошаљи поруку"
+ "Додај прилог"
+ "Помоћ"
+ "Добро дошли"
+ "Прескочи"
+ "Следеће >"
+ "Даље"
+ "Изађи"
+ "Подешавања >"
+ "Подешавања"
+ "Размена порука тражи дозволу за SMS, телефон и контакте."
+ "Можете да мењате дозволе у одељку Подешавања > Апликације > Размена порука > Дозволе."
+ "Можете да мењате дозволе у одељку Подешавања, Апликације, Размена порука, Дозволе."
+ "Често контактирани"
+ "Сви контакти"
+ "Пошаљи на %s"
+ "Сними слику или видео снимак"
+ "Избор слика са овог уређаја"
+ "Сними звук"
+ "Изаберите слику"
+ "Изабрали сте медијски садржај."
+ "Опозвали сте избор медијског садржаја."
+ "Изабраних: %d"
+ "слика %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "слика"
+ "Снимање звука"
+ "Дели"
+ "Управо сад"
+ "Сада"
+
+ %d мин
+ %d мин
+ %d мин
+
+
+ %d сат
+ %d сата
+ %d сати
+
+
+ %d дан
+ %d дана
+ %d дана
+
+
+ %d недеље
+ %d недеље
+ %d недеља
+
+
+ %d месеца
+ %d месеца
+ %d месеци
+
+
+ %d године
+ %d године
+ %d година
+
+ "Порука класе 0"
+ "Сачувај"
+ "Понестаје простора на уређају. Апликација за размену порука ће аутоматски обрисати старије поруке да би ослободила простор."
+ "Понестаје складишног простора"
+ "Размена порука можда неће моћи да шаље нити прима поруке док још простора не буде доступно на уређају."
+ "Понестаје меморије за SMS. Можда ћете морати да избришете поруке."
+ "Потврдите број телефона"
+ "Овим једнократним кораком обезбеђујете да Размена порука правилно испоручује групне поруке."
+ "Број телефона"
+ "Избриши све поруке са медијским садржајем"
+ "Избриши поруке старије од %s"
+ "Аутоматски бриши поруке старије од %s"
+ "Игнориши"
+ "Желите ли да избришете све поруке са медијским садржајем?"
+ "Желите ли да избришете поруке старије од %s?"
+ "Желите ли да избришете поруке старије од %s и да укључите аутоматско брисање?"
+ "%s каже"
+ "Рекли сте"
+ "Порука од корисника %s"
+ "Послали сте поруку"
+ "Шаље се..."
+ "Слање није успело. Додирните да бисте покушали поново."
+ "Слање није успело. Покушавамо поново…"
+ "Пошаљите поново или избришите"
+ "Упутите гласовни позив службама за хитне случајеве. Слање SMS-а тренутно није успело."
+ "Није успело"
+ "Нова MMS порука за преузимање"
+ "Нова MMS порука"
+ "Преузимање није успело"
+ "Додирните да бисте покушали поново"
+ "Додирните да бисте преузели"
+ "Преузмите или избришите"
+ "Преузима се..."
+ "Порука је истекла или није доступна"
+ "величина: %1$s, истиче: %2$s"
+ "Слање није могуће. Прималац није важећи."
+ "Услуга није активирана у мрежи"
+ "Слање није могуће због проблема са мрежом"
+ "Порука је истекла или није доступна"
+ "(Без наслова)"
+ "Непознати пошиљалац"
+ "Испоручено"
+ "Није могуће преузети поруку %1$s пошиљаоца %2$s."
+ "Није могуће довршити операцију у вези са базом података због недостатка меморије"
+ "Порука није послата"
+ "Неке поруке нису послате у Размени порука"
+
+ %d поруке(а) у %d конверзацији
+ %d поруке(а) у %d конверзације
+ %d поруке(а) у %d конверзација
+
+ "Порука није преузета"
+ "Неке поруке нису преузете у Размени порука"
+
+ %d поруке(а) у %d конверзацији
+ %d поруке(а) у %d конверзације
+ %d поруке(а) у %d конверзација
+
+ "Порука на %1$s није послата"
+ "Упутите гласовни позив службама за хитне случајеве. Слање SMS-а на %1$s тренутно није успело."
+
+ %d нова порука
+ %d нове поруке
+ %d нових порука
+
+ "Покрени"
+ "Камера није доступна"
+ "Камера није доступна"
+ "Снимање видео снимака није доступно"
+ "Чување медија није могуће"
+ "Није успело снимање слике"
+ "Назад"
+ "Архивирано"
+ "Избриши"
+ "Архивирај"
+ "Опозови архивирање"
+ "Искључи обавештења"
+ "Укључи обавештења"
+ "Додај контакт"
+ "Преузми"
+ "Пошаљи"
+ "Избриши"
+ "Желите да избришете ову поруку?"
+ "Ова радња не може да се опозове."
+ "Избриши"
+
+ Желите ли да избришете ове конверзације?
+ Желите ли да избришете ове конверзације?
+ Желите ли да избришете ове конверзације?
+
+ "Избриши"
+ "Откажи"
+ "Прима"
+ "Изаберите више слика"
+ "Потврди избор"
+ "+%d"
+ "Снимање звука није успело. Покушајте поново."
+ "Пуштање звука није успело. Покушајте поново."
+ "Чување звука није успело. Покушајте поново."
+ "Додирните и задржите"
+ ", "
+ " "
+ ": "
+ " "
+ "Слика"
+ "Аудио исечак"
+ "Видео"
+ "Картица контакта"
+ "Преузми"
+ "Одговори преко SMS-а"
+ "Одговори MMS-ом"
+ "Одговорите"
+
+ %d учесник
+ %d учесника
+ %d учесника
+
+ "Ја"
+ "Контакт је блокиран и архивиран"
+ "Контакт је деблокиран и архивирање је опозвано"
+ "Архивирано: %d"
+ "Опозвано је архивирање за: %d"
+ "Обавештења су искључена"
+ "Обавештења су укључена"
+ "Све је спремно. Додирните Пошаљи поново."
+ "Размена порука је подешена као подразумевана апликација за SMS."
+
+ Одбаци прилоге
+ Одбаци прилоге
+ Одбаци прилоге
+
+ "Аудио прилог"
+ "Пусти аудио прилог"
+ "Пауза"
+ "%s вам шаље нову поруку: %s"
+ "Није примљена порука од корисника %s: %s. Време: %s."
+ "Порука од корисника %s: %s. Време: %s."
+ "Порука није послата кориснику %s: %s. Време: %s."
+ "Шаље се порука кориснику %s: %s. Време: %s."
+ "Није успело слање поруке кориснику %s: %s. Време: %s."
+ "Порука кориснику %s: %s. Време: %s."
+ "Није примљена порука од корисника %s: %s. Време: %s. %s."
+ "Порука од корисника %s: %s. Време: %s. %s."
+ "Порука која није послата групи %s: %s. Време: %s."
+ "Шаље се порука групи %s: %s. Време: %s."
+ "Није успело слање поруке групи %s: %s. Време: %s."
+ "Порука групи %s: %s. Време: %s."
+ "Слање поруке није успело. Додирните да бисте поново покушали."
+ "Конверзација са учесницима %s"
+ "Брисање наслова"
+ "Снимите видео"
+ "Снимите слику"
+ "Снимите слику"
+ "Почните да снимате видео"
+ "Пређите на камеру целог екрана"
+ "Пребацујте са предње на задњу камеру и обрнуто"
+ "Заустави снимање и приложи видео"
+ "Заустави снимање звука"
+ "Слике из Размене порука"
+
+ %d слика је сачувана у албуму „%s“
+ %d слике су сачуване у албуму „%s“
+ %d слика је сачувано у албуму „%s“
+
+
+ %d видео је сачуван у албуму „%s“
+ %d видео снимка су сачувана у албуму „%s“
+ %d видео снимака је сачувано у албуму „%s“
+
+
+ %d прилог је сачуван у албуму „%s“
+ %d прилога су сачувана у албуму „%s“
+ %d прилога је сачувано у албуму „%s“
+
+
+ %d прилог је сачуван у директоријуму „Преузимања“
+ %d прилога су сачувана у директоријуму „Преузимања“
+ %d прилога је сачувано у директоријуму „Преузимања“
+
+
+ %d прилог је сачуван
+ %d прилога су сачувана
+ %d прилога је сачувано
+
+
+ Нисмо успели да сачувамо %d прилог
+ Нисмо успели да сачувамо %d прилога
+ Нисмо успели да сачувамо %d прилога
+
+ "Сачувани прилог MMS-а"
+ "Подешавања"
+ "Архивирано"
+ "Затвори"
+ "MMS"
+ "Напредно"
+ "Отклањање грешака"
+ "Обавештења"
+ "Звук"
+ "Нечујно"
+ "Вибрација"
+ "Блокирано"
+ "Извештаји о испоруци SMS-ова"
+ "Захтевајте извештај о испоруци за сваки послати SMS"
+ "Аутоматско преузимање"
+ "Аутоматско преузимање MMS порука"
+ "Аутоматски преузимај у ромингу"
+ "Аутоматски преузимај MMS у ромингу"
+ "Групна размена порука"
+ "Користите MMS за слање једне поруке када постоји више прималаца"
+ "Подразумевана апликација за SMS"
+ "Подразумевана апликација за SMS"
+
+
+ "Број телефона"
+ "Непознато"
+ "Звукови за одлазне поруке"
+ "Направи сирову копију SMS-а"
+ "Направи сирову копију необрађених података примљеног SMS-а у датотеци спољног складишног простора"
+ "Направи сирову копију MMS-а"
+ "Направи сирову копију необрађених података примљеног MMS-а у датотеци спољног складишног простора"
+ "Обавештења преко мобилне мреже"
+ "Опције поруке"
+ "Копирај текст"
+ "Погледајте детаље"
+ "Избриши"
+ "Проследи"
+ "Детаљи поруке"
+ "Тип: "
+ "SMS"
+ "Мултимедијална порука"
+ "Од: "
+ "Коме: "
+ "Послато: "
+ "Примљено: "
+ "Наслов: "
+ "Величина: "
+ "Приоритет: "
+ "SIM картица: "
+ "Висок"
+ "Нормалан"
+ "Низак"
+ "Отвор за SIM картицу %s"
+ "Скривена адреса пошиљаоца"
+ "Не можете да пошаљете поруку док се прилози учитавају."
+ "Учитавање прилога није успело. Покушајте поново."
+ "Мрежа није спремна. Покушајте поново."
+ "Избриши текст"
+ "Пребацивање између уноса текста и бројева"
+ "Додај још учесника"
+ "Потврди учеснике"
+ "Започни нову конверзацију"
+ "Изаберите ову ставку"
+ "Пусти видео"
+ "Људи и опције"
+ "Отклони грешке"
+ "Људи и опције"
+ "Опште"
+ "Људи у овој конверзацији"
+ "Позови"
+ "Пошаљите поруку"
+ "Пошаљите поруку<br/><small>са картице %s</small>"
+
+ Пошаљите слике
+ Пошаљите слике
+ Пошаљите слике
+
+
+ Пошаљите аудио снимке
+ Пошаљите аудио снимке
+ Пошаљите аудио снимке
+
+
+ Пошаљите видео снимке
+ Пошаљите видео снимке
+ Пошаљите видео снимке
+
+
+ Пошаљите картице контаката
+ Пошаљите картице контаката
+ Пошаљите картице контаката
+
+
+ Пошаљите прилоге
+ Пошаљите прилоге
+ Пошаљите прилоге
+
+
+ %d прилог је спреман за слање
+ %d прилога су спремна за слање
+ %d прилога је спремно за слање
+
+ "Пошаљи повратне информације"
+ "Прикажи у Google Play продавници"
+ "Информације о верзији"
+ "Верзија %1$s"
+ "Лиценце отвореног кода"
+ "Обавештења"
+ "Ограничење за прилоге је достигнуто"
+ "Учитавање прилога није успело."
+ "Желите ли да додате у контакте?"
+ "Додај контакт"
+ "Наслов"
+ "Наслов: "
+ "%s%s"
+ "Учитава се картица контакта"
+ "Учитавање картице контакта није успело"
+ "Погледајте картицу контакта"
+
+ %d контакт
+ %d контакта
+ %d контаката
+
+ "Картице контаката"
+ "Рођендан"
+ "Белешке"
+ "Проследите поруку"
+ "Одговорите"
+ "+1"
+ "+%d"
+ "SMS је онемогућен"
+ "Да бисте слали поруке, подесите Размену порука као подразумевану апликацију за SMS"
+ "Подесите Размену порука као подразумевану апликацију за SMS"
+ "Промени"
+ "Да бисте примали поруке, подесите Размену порука као подразумевану апликацију за SMS"
+ "Није изабран жељени SIM за слање SMS-ова"
+ "Власник уређаја не дозвољава ову апликацију."
+ "Потврди"
+ "Превише учесника у конверзацији"
+
+ Неважећи контакти
+ Неважећи контакти
+ Неважећи контакти
+
+ "Учитавање слике са камере није успело"
+ "Ви: "
+ "%s: "
+ "Недовршена порука"
+ "Када започнете нову конверзацију, видећете је наведену овде"
+ "Овде се појављују архивиране преписке"
+ "Преписке се учитавају..."
+ "Слика"
+ "Аудио клип"
+ "Видео"
+ "Картица контакта"
+ "MMS"
+ "Опозови"
+ "Покушај поново"
+ "Унесите име или број телефона контакта да бисте започели нову поруку"
+ "Блокирај"
+ "Блокирај %s"
+ "Деблокирај %s"
+ "Желите ли да блокирате %s?"
+ "И даље ћете примати поруке са овог броја, али нећете више добијати обавештења. Ова преписка ће бити архивирана."
+ "Блокирани контакти"
+ "ДЕБЛОКИРАЈ"
+ "Блокирани контакти"
+ "Изаберите слику из библиотеке докумената"
+ "Порука се шаље"
+ "Порука је послата"
+ "Подаци за мобилне уређаје су искључени. Проверите подешавања."
+ "Слање порука није могуће у Режиму рада у авиону"
+ "Порука није послата"
+ "Порука је преузета"
+ "Подаци за мобилне уређаје су искључени. Проверите подешавања."
+ "Није могуће преузимати поруке у режиму рада у авиону"
+ "Преузимање поруке није успело"
+ "Нула"
+ "Један"
+ "Два"
+ "Три"
+ "Четири"
+ "Пет"
+ "Шест"
+ "Седам"
+ "Осам"
+ "Девет"
+ "Није могуће послати поруку помоћу мобилног оператера %1$s, грешка %2$d"
+ "Није могуће послати поруку помоћу непознатог мобилног оператера, грешка %1$d"
+ "Fwd: %s"
+ "Порука није послата: услуга није активирана на мрежи"
+ "Порука није послата: неважећа одредишна адреса"
+ "Порука није послата: неважећа порука"
+ "Порука није послата: неподржани садржај"
+ "Порука није послата: неподржана порука"
+ "Порука није послата: превелика је"
+ "Нова порука"
+ "Прикажи"
+ "Слика"
+ "Проналажење одговарајуће апликације није успело"
+ "Уклањање примаоца"
+ "Нова порука"
+ "Откажи"
+ "Измените приступну тачку"
+ "Није подешено"
+ "Назив"
+ "Назив приступне тачке"
+ "MMSC"
+ "MMS прокси"
+ "MMS порт"
+ "MCC"
+ "MNC"
+ "Тип назива приступне тачке"
+ "Избриши назив приступне тачке"
+ "Нов назив приступне тачке"
+ "Сачувај"
+ "Одбаци"
+ "Поље Назив не сме да буде празно."
+ "Поље Назив приступне тачке не сме да буде празно."
+ "Поље MCC мора да садржи 3 цифре."
+ "Поље MNC мора да садржи 2 или 3 цифре."
+ "Враћање подразумеваних подешавања назива приступне тачке."
+ "Ресетуј подразумеване вредности"
+ "Ресетовање подразумеваних подешавања назива приступне тачке је довршено."
+ "Ненасловљено"
+ "Називи приступних тачака"
+ "Називи приступних тачака"
+ "Нов назив приступне тачке"
+ "Подешавања назива приступне тачке нису доступна за овог корисника"
+ "Желите ли да копирате у привремену меморију?"
+ "Копирај"
+ "на картицу %s"
+ "Опште"
+ "Напредно"
+ "Општа подешавања"
+ "Напредна подешавања"
+ "„%s“ SIM"
+ "Шаљите појединачне SMS поруке свим примаоцима. Само ви ћете добијати одговоре"
+ "Пошаљите један MMS свим примаоцима"
+ "Непознат број"
+ "Нова порука"
+ "Нова порука."
+ "Бирач SIM картице"
+ "Изабран је %1$s, бирач SIM картица"
+ "Измени наслов"
+ "Изабери SIM или измени наслов"
+ "Додирните и задржите за снимање звука"
+ "Започни нову конверзацију"
+ "Размена порука"
+ "Листа из Размене порука"
+ "Размена порука"
+ "Нова порука"
+ "Листа преписки"
+ "Учитавају се конверзације"
+ "Учитавају се поруке"
+ "Прикажи још конверзација"
+ "Прикажи још порука"
+ "Конверзација је избрисана"
+ "Конверзација је избрисана. Додирните да бисте приказали неку другу конверзацију Размене порука"
+ "Блокирано"
+ "Деблокирано"
+ "Нема довољно меморијског простора. Неки подаци ће можда бити изгубљени."
+ "Изабери прилоге"
+ "Потврди избор"
+ "Изабраних: %d"
+ "Уклоните један прилог или више њих и покушајте поново."
+ "Можете да покушате да пошаљете поруку, али можда неће бити испоручена ако не уклоните један прилог или више њих."
+ "Можете да пошаљете само један видео по поруци. Уклоните друге видео снимке и покушајте поново."
+ "Размена порука није успела да учита прилог."
+ "Ипак пошаљи"
+ "Започињање преписке није успело"
+ "%1$s (%2$s)"
+ "Изабрали сте %s"
+
diff --git a/res/values-sv/arrays.xml b/res/values-sv/arrays.xml
new file mode 100644
index 0000000..8f03e4b
--- /dev/null
+++ b/res/values-sv/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "inget ämne"
+ "inget ämne"
+
+
+ "Ja"
+ "Nej"
+ "OK"
+ "Hehe"
+ "Tack"
+ "Jag accepterar"
+ "Nice"
+ "På väg"
+ "OK, jag återkommer senare"
+ ":)"
+ ":("
+
+
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
new file mode 100644
index 0000000..36ad85c
--- /dev/null
+++ b/res/values-sv/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Sms/mms"
+ "Sms/mms"
+ "Välj konversation"
+ "Inställningar"
+ "Skicka meddelande"
+ "Lägg till en bilaga"
+ "Hjälp"
+ "Välkommen"
+ "Hoppa över"
+ "Nästa >"
+ "Nästa"
+ "Stäng"
+ "Inställningar >"
+ "Inställningar"
+ "Meddelanden behöver ha åtkomst till Sms, Telefon och Kontakter."
+ "Du kan ändra behörigheterna i Inställningar > Appar > Meddelanden > Behörigheter."
+ "Du kan ändra behörigheterna i Inställningar, Appar, Meddelanden, Behörigheter."
+ "Frekventa"
+ "Alla kontakter"
+ "Skicka till %s"
+ "Ta bilder eller spela in video"
+ "Välj bilder från den här enheten"
+ "Spela in ljud"
+ "Välj foto"
+ "Video-/bildobjektet har markerats."
+ "Video-/bildobjektet har avmarkerats."
+ "%d har valts"
+ "bild %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "bild"
+ "Spela in ljud"
+ "Dela"
+ "Nyss"
+ "Nu"
+
+ %d min
+ %d min
+
+
+ %d timmar
+ %d timme
+
+
+ %d dagar
+ %d dag
+
+
+ %d veckor
+ en vecka
+
+
+ %d månader
+ en månad
+
+
+ %d år
+ ett år
+
+ "Meddelande, klass 0"
+ "Spara"
+ "Det finns ont om utrymme på enheten. Om du skickar och tar emot sms kommer äldre sms att raderas för att göra plats."
+ "Lagringsutrymmet börjar ta slut"
+ "Du kan behöva frigöra utrymme på enheten för att kunna skicka eller ta emot sms med Meddelanden."
+ "Lagringsutrymmet för sms är fullt. Du kan behöva ta bort sms."
+ "Bekräfta ditt telefonnummer"
+ "Genom detta engångssteg säkerställer du att dina gruppmeddelanden levereras som de ska med Meddelanden."
+ "Telefonnummer"
+ "Ta bort alla meddelanden med mediefiler"
+ "Ta bort meddelanden som är äldre än %s"
+ "Ta automatiskt bort meddelanden som är äldre än %s"
+ "Ignorera"
+ "Vill du ta bort alla meddelanden med media?"
+ "Vill du ta bort meddelanden som är äldre än %s?"
+ "Vill du ta bort meddelanden som är äldre än %s och aktivera automatisk borttagning?"
+ "%s sade"
+ "Du sade"
+ "Meddelande från %s"
+ "Du har skickat ett meddelande"
+ "Skickar …"
+ "Det gick inte att skicka. Tryck om du vill försöka igen."
+ "Det gick inte att skicka. Försöker igen ..."
+ "Skicka igen eller ta bort"
+ "Ring larmcentralen. Det gick inte att skicka ett sms just nu."
+ "Misslyckades"
+ "Nya MMS att ladda ned"
+ "Nytt MMS"
+ "Nedladdningen genomfördes inte"
+ "Tryck om du vill försöka igen"
+ "Ladda ned genom att trycka"
+ "Ladda ned eller radera"
+ "Hämtar ..."
+ "Meddelandet har upphört att gälla eller är inte tillgängligt"
+ "storlek: %1$s, finns kvar till: %2$s"
+ "Det gick inte att skicka. Mottagaren är inte giltig."
+ "Tjänsten är inte aktiverad i nätverket"
+ "Det gick inte att skicka på grund av nätverksproblem"
+ "Meddelandet har upphört att gälla eller är inte tillgängligt."
+ "(Inget ämne)"
+ "Okänd avsändare"
+ "Levererat"
+ "Det gick inte att ladda ned meddelandet %1$s från %2$s."
+ "Det gick inte att slutföra åtgärden i databasen på grund av för låg minneskapacitet"
+ "Meddelandet har inte skickats"
+ "Vissa meddelanden skickades inte i Meddelanden"
+
+ %d meddelanden i %d konversationer
+ %d meddelanden i en konversation
+
+ "Meddelandet har inte laddats ned"
+ "Vissa meddelanden laddades inte ned i Meddelanden"
+
+ %d meddelanden i %d konversationer
+ %d meddelanden i en konversation
+
+ "Meddelandet till %1$s skickades inte"
+ "Ring larmcentralen. Det gick inte att skicka ett sms till %1$s just nu."
+
+ %d nya meddelanden
+ Nytt meddelande
+
+ "Börja"
+ "Kameran är inte tillgänglig"
+ "Kameran är inte tillgänglig"
+ "Det går inte att spela in video"
+ "Det går inte att spara media"
+ "Det går inte att fota"
+ "Föregående"
+ "Arkiverat"
+ "Ta bort"
+ "Arkivera"
+ "Ångra arkivering"
+ "Inaktivera aviseringar"
+ "Aktivera aviseringar"
+ "Lägg till kontakt"
+ "Ladda ned"
+ "Skicka"
+ "Ta bort"
+ "Vill du ta bort meddelandet?"
+ "Åtgärden kan inte ångras."
+ "Ta bort"
+
+ Vill du ta bort dessa konversationer?
+ Vill du ta bort konversationen?
+
+ "Ta bort"
+ "Avbryt"
+ "Till"
+ "Markera flera bilder"
+ "Bekräfta ditt val"
+ "+%d"
+ "Det gick inte att spela in ljud. Försök igen."
+ "Det gick inte att spela upp ljudet. Försök igen."
+ "Det gick inte att spara ljud. Försök igen."
+ "Tryck länge"
+ ", "
+ " "
+ ": "
+ " "
+ "Bild"
+ "Ljudklipp"
+ "Video"
+ "Visitkort"
+ "Ladda ned"
+ "Svara via sms"
+ "Svara via mms"
+ "Svara"
+
+ %d deltagare
+ %d deltagare
+
+ "Jag"
+ "Kontakten har blockerats och arkiverats"
+ "Kontakten har återaktiverats och hämtats från arkivet"
+ "%d har arkiverats"
+ "%d arkiveringar har ångrats"
+ "Aviseringar har inaktiverats"
+ "Aviseringar har aktiverats"
+ "Allt klart. Tryck på Skicka igen."
+ "Meddelanden har angetts som standardapp för sms."
+
+ Släng bilagor
+ Släng bilaga
+
+ "Ljudbilaga"
+ "Spela upp ljudbilaga"
+ "Pausa"
+ "Meddelande från %s: %s."
+ "Meddelande som inte kunde skickas från %s: %s. Tidpunkt: %s."
+ "Meddelande från %s: %s. Tidpunkt: %s."
+ "Meddelande som inte har skickats till %s: %s. Tidpunkt: %s."
+ "Skickar meddelande till %s: %s. Tidpunkt: %s."
+ "Meddelande som inte kunde skickas till %s: %s. Tidpunkt: %s."
+ "Meddelande till %s: %s. Tidpunkt: %s."
+ "Meddelande som inte kunde skickas från %s: %s. Tidpunkt: %s. %s."
+ "Meddelande från %s: %s. Tidpunkt: %s. %s."
+ "Meddelande som inte har skickats till %s: %s. Tidpunkt: %s."
+ "Skickar meddelande till %s: %s. Tidpunkt: %s."
+ "Meddelande som inte kunde skickas till %s: %s. Tidpunkt: %s."
+ "Meddelande till %s: %s. Tidpunkt: %s."
+ "Det här meddelandet gick inte att skicka. Tryck om du vill försöka igen."
+ "Samtal med %s"
+ "Radera ämne"
+ "Spela in video"
+ "Ta en stillbild"
+ "Ta bild"
+ "Börja spela in video"
+ "Byt till fullskärmskamera"
+ "Växla mellan främre och bakre kamera"
+ "Stoppa inspelningen och bifoga en video"
+ "Sluta spela in video"
+ "Skicka foton med Meddelanden"
+
+ %d foton har sparats i albumet %s
+ %d foto har sparats i albumet %s
+
+
+ %d videor har sparats i albumet %s
+ %d video har sparats i albumet %s
+
+
+ %d bilagor har sparats i albumet %s
+ %d bilaga har sparats i albumet %s
+
+
+ %d bilagor har sparats i Nedladdningar
+ %d bilaga har sparats i Nedladdningar
+
+
+ %d bilagor sparas
+ %d bilaga har sparats
+
+
+ Det gick inte att spara %d bilagor
+ Det gick inte att spara %d bilaga
+
+ "Mms-bilaga har sparats"
+ "Inställningar"
+ "Arkiverat"
+ "Stäng"
+ "Mms"
+ "Avancerat"
+ "Felsökning"
+ "Aviseringar"
+ "Ljud"
+ "Tyst"
+ "Vibration"
+ "Blockerad"
+ "Sms-leveransrapporter"
+ "Begär en leveransrapport för varje sms du skickar"
+ "Automatisk hämtning"
+ "Hämta mms-meddelanden automatiskt"
+ "Autohämtning vid roaming"
+ "Hämta mms automatiskt vid roaming"
+ "Gruppmeddelanden"
+ "Använd mms för att skicka ett meddelande när det finns flera mottagare"
+ "Standardapp för sms"
+ "Standardapp för sms"
+
+
+ "Ditt telefonnummer"
+ "Okänt"
+ "Ljud vid utgående meddelande"
+ "Dumpa sms"
+ "Dumpa rådata för mottagna sms i en extern lagringsfil"
+ "Dumpa mms"
+ "Dumpa rådata för mottagna mms i en extern lagringsfil"
+ "Trådlösa varningar"
+ "Meddelandealternativ"
+ "Kopiera text"
+ "Visa mer information"
+ "Ta bort"
+ "Vidarebefordra"
+ "Meddelandeinformation"
+ "Typ: "
+ "Sms"
+ "Mms"
+ "Från: "
+ "Till: "
+ "Skickat: "
+ "Mottaget: "
+ "Ämne: "
+ "Storlek: "
+ "Prioritet: "
+ "SIM: "
+ "Hög"
+ "Normal"
+ "Låg"
+ "SIM %s"
+ "Avsändaradress dold"
+ "Kan inte skicka meddelandet samtidigt som bilagor läses in."
+ "Det gick inte att läsa in bilagan. Försök igen."
+ "Nätverket är inte klart. Försök igen."
+ "Ta bort text"
+ "Växla mellan att ange text och siffror"
+ "Lägg till fler deltagare"
+ "Bekräfta deltagare"
+ "Starta ny konversation"
+ "Välj det här objektet"
+ "Spela upp video"
+ "Personer och alternativ"
+ "Felsökning"
+ "Personer och alternativ"
+ "Allmänt"
+ "Personer i den här konversationen"
+ "Ring ett samtal"
+ "Skicka meddelande"
+ "Skicka meddelandet<br/><small>från %s</small>"
+
+ Skicka foton
+ Skicka foto
+
+
+ Skicka ljud
+ Skicka ljud
+
+
+ Skicka videor
+ Skicka video
+
+
+ Skicka kontaktkort
+ Skicka kontaktkort
+
+
+ Skicka bilagor
+ Skicka bilaga
+
+
+ %d bilagor är klara att skicka
+ En bilaga är klar att skicka
+
+ "Skicka feedback"
+ "Visa i Google Play Butik"
+ "Version"
+ "Version %1$s"
+ "Licenser, öppen källkod"
+ "Aviseringar"
+ "Gränsen för bilagor har uppnåtts"
+ "Det gick inte att läsa in bilagan."
+ "Vill du lägga till detta i Kontakter?"
+ "Lägg till kontakt"
+ "Ämne"
+ "Ämne: "
+ "%s%s"
+ "Läser in visitkort"
+ "Det gick inte att läsa in kontaktkortet"
+ "Visa visitkort"
+
+ %d kontakter
+ %d kontakt
+
+ "Kontaktkort"
+ "Födelsedatum"
+ "Anteckningar"
+ "Vidarebefordra meddelande"
+ "Svara"
+ "+ 1"
+ "+%d"
+ "Sms har inaktiverats"
+ "Ange Meddelanden som standardapp för sms om du vill skicka"
+ "Ange Meddelanden som standardapp för sms"
+ "Ändra"
+ "Ställ in Meddelanden som standardapp för sms om du vill ta emot meddelanden"
+ "Inget SIM-kort har angetts som primärt för att skicka sms"
+ "Appen tillåts inte av enhetsägaren."
+ "OK"
+ "För många deltagare i en konversation"
+
+ Ogiltiga kontakter
+ Ogiltig kontakt
+
+ "Det gick inte att läsa in kamerabild"
+ "Du: "
+ "%s: "
+ "Utkast"
+ "När du startar en ny konversation listas den här"
+ "Arkiverade konversationer visas här"
+ "Läser in konversationer …"
+ "Bild"
+ "Ljudklipp"
+ "Video"
+ "Visitkort"
+ "Mms"
+ "Ångra"
+ "Försök igen"
+ "Ange namnet på en kontakt eller ett telefonnummer för att starta ett nytt meddelande"
+ "Blockera"
+ "Blockera %s"
+ "Återaktivera %s"
+ "Vill du blockera %s?"
+ "Du kan fortfarande få meddelanden från det här numret, men du får inga fler aviseringar. Den här konversationen arkiveras."
+ "Blockerade kontakter"
+ "ÅTERAKTIVERA"
+ "Blockerade kontakter"
+ "Välj en bild från dokumentbiblioteket"
+ "Skickar meddelande"
+ "Meddelandet har skickats"
+ "Mobildata har inaktiverats. Kontrollera inställningarna."
+ "Det går inte att skicka meddelanden i flygplansläge"
+ "Meddelandet kunde inte skickas"
+ "Meddelandet har laddats ned"
+ "Mobildata har inaktiverats. Kontrollera inställningarna."
+ "Det går inte att ladda ned meddelanden i flygplansläge"
+ "Det gick inte att ladda ned meddelandet"
+ "Noll"
+ "Ett"
+ "Två"
+ "Tre"
+ "Fyra"
+ "Fem"
+ "Sex"
+ "Sju"
+ "Åtta"
+ "Nio"
+ "Det gick inte att skicka meddelandet med %1$s, fel %2$d"
+ "Det gick inte att skicka meddelandet med okänd operatör, fel %1$d"
+ "Vidarebefordra: %s"
+ "Meddelandet har inte skickats: tjänsten är inte aktiverad i nätverket"
+ "Meddelandet skickades inte: ogiltig e-postadress"
+ "Meddelandet skickades inte: ogiltigt meddelande"
+ "Meddelandet skickades inte: inget stöd för innehållet"
+ "Meddelandet skickades inte: inget stöd för meddelandet"
+ "Meddelandet skickades inte: för stort"
+ "Nytt meddelande"
+ "Visa"
+ "Bild"
+ "Ingen app för detta hittades"
+ "Ta bort mottagare"
+ "Nytt meddelande"
+ "Avbryt"
+ "Redigera åtkomstpunkt"
+ "Har inte angetts"
+ "Namn"
+ "APN"
+ "MMSC"
+ "MMS-proxy"
+ "MMS-port"
+ "MCC"
+ "MNC"
+ "APN-typ"
+ "Ta bort APN"
+ "Nytt APN"
+ "Spara"
+ "Ignorera"
+ "Fältet Namn får inte vara tomt."
+ "APN får inte vara tomt."
+ "MCC-fältet måste bestå av 3 siffror."
+ "MNC-fältet måste bestå av 2 eller 3 siffror."
+ "Återställer standardinställningar för APN."
+ "Återställ standardinställningarna"
+ "Standardinställningar för APN har återställts."
+ "Namnlös"
+ "Åtkomstpunktens namn (APN)"
+ "APN:er"
+ "Nytt APN"
+ "Inställningarna för åtkomstpunktens namn är inte tillgängliga för den här användaren"
+ "Vill du kopiera till urklipp?"
+ "Kopiera"
+ "till %s"
+ "Allmänt"
+ "Avancerat"
+ "Allmänna inställningar"
+ "Avancerade inställningar"
+ "SIM-kortet %s"
+ "Skicka enskilda sms till alla mottagare. Det är endast du som får de eventuella svaren."
+ "Skicka samma mms till alla mottagare."
+ "Okänt nummer"
+ "Nytt meddelande"
+ "Nytt meddelande."
+ "SIM-kortsväljaren"
+ "%1$s har valts, SIM-kortsväljare"
+ "Redigera ämne"
+ "Välj SIM-kort eller redigera ämne"
+ "Tryck länge för att spela in ljud"
+ "Starta ny konversation"
+ "Meddelanden"
+ "Meddelandelista"
+ "Meddelanden"
+ "Nytt meddelande"
+ "Konversationslista"
+ "Konversationer hämtas"
+ "Läser in meddelanden"
+ "Visa fler konversationer"
+ "Visa fler meddelanden"
+ "Konversationen har raderats"
+ "Konversationen raderades. Tryck här om du vill visa en annan konversation i Meddelanden."
+ "Blockerad"
+ "Återaktiverad"
+ "Lagringsutrymmet är nästan fullt. All data kanske inte sparas."
+ "Välj bilagor"
+ "Bekräfta ditt val"
+ "%d har valts"
+ "Ta bort en eller flera av bilagorna och försök igen."
+ "Du kan testa att skicka meddelandet, men det kanske inte kommer fram om du inte tar bort en eller flera av bilagorna först."
+ "Det går bara att skicka en video per meddelande. Ta bort ytterligare videor och försök igen."
+ "Det gick inte att läsa in bilagan i Meddelanden."
+ "Skicka ändå"
+ "Det gick inte att starta en konversation"
+ "%1$s (%2$s)"
+ "%s har valts"
+
diff --git a/res/values-sw/arrays.xml b/res/values-sw/arrays.xml
new file mode 100644
index 0000000..1641f55
--- /dev/null
+++ b/res/values-sw/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "kichwa hakijaongezwa"
+ "kichwa hakijaongezwa"
+
+
+ "Ndiyo"
+ "Hapana"
+ "Sawa"
+ "Hehe"
+ "Asante"
+ "Nakubali"
+ "Shwari"
+ "Niko njiani"
+ "Sawa, nitawasiliana na wewe baadaye"
+ ":)"
+ ":("
+
+
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
new file mode 100644
index 0000000..b415367
--- /dev/null
+++ b/res/values-sw/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Utumaji ujumbe"
+ "Utumaji ujumbe"
+ "Chagua mazungumzo"
+ "Mipangilio"
+ "Tuma Ujumbe"
+ "Ongeza kiambatisho"
+ "Usaidizi"
+ "Karibu"
+ "Ruka"
+ "Inayofuata >"
+ "Inayofuata"
+ "Ondoka"
+ "Mipangilio >"
+ "Mipangilio"
+ "Programu ya Ujumbe inahitaji ruhusa za SMS, Simu na Anwani."
+ "Unaweza kubadilisha ruhusa katika Mipangilio> Programu> Ujumbe> Ruhusa."
+ "Unaweza kubadilisha ruhusa katika Mipangilio, Programu, Ujumbe, Ruhusa."
+ "Mara kwa mara"
+ "Anwani zote"
+ "Tuma kwa %s"
+ "Piga picha au urekodi video"
+ "Chagua picha kutoka kifaa hiki"
+ "Rekodi sauti"
+ "Chagua picha"
+ "Maudhui yameteuliwa."
+ "Maudhui yameondolewa uteuzi."
+ "%d zimechaguliwa"
+ "picha %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "picha"
+ "Rekodi sauti"
+ "Shiriki"
+ "Sasa hivi tu"
+ "Sasa"
+
+ Dakika %d
+ Dakika %d
+
+
+ Saa %d
+ Saa %d
+
+
+ Siku %d
+ Siku %d
+
+
+ wiki %d
+ wiki
+
+
+ miezi %d
+ mwezi
+
+
+ miaka %d
+ mwaka
+
+ "Ujumbe wa tabaka 0"
+ "Hifadhi"
+ "Nafasi haitoshi kwenye kifaa. Programu ya Ujumbe itafuta kiotomatiki ujumbe wa zamani ili kuacha nafasi kwenye kifaa."
+ "Nafasi ya kuhafadhi inakaribia kujaa"
+ "Huenda programu ya Ujumbe isitume au kupokea ujumbe hadi nafasi zaidi ipatikane katika kifaa chako."
+ "Hifadhi ya SMS ni ndogo. Itakubidi ufute ujumbe."
+ "Thibitisha nambari yako ya simu"
+ "Hatua hii ya kufanywa mara moja itahakikisha kuwa programu ya Ujumbe itawasilisha ujumbe wako wa kikundi bila tatizo."
+ "Nambari ya simu"
+ "Futa ujumbe wote ulio na picha, sauti au video"
+ "Futa ujumbe uliokaa zaidi ya %s"
+ "Futa kiotomatiki ujumbe uliokaa zaidi ya %s"
+ "Puuza"
+ "Je, ungependa kufuta ujumbe wote ulio na maudhui?"
+ "Je, ungependa kufuta ujumbe uliokaa zaidi ya %s?"
+ "Je, ungependa kufuta ujumbe uliokaa zaidi ya %s na uwashe kufuta kiotomatiki?"
+ "%s alisema"
+ "Ulisema"
+ "Ujumbe kutoka %s"
+ "Ulituma ujumbe"
+ "Inatuma…"
+ "Haikutumwa. Gusa ili ujaribu tena."
+ "Haikutumwa. Jaribu tena..."
+ "Tuma tena au ufute"
+ "Tafadhali piga simu ya sauti kwa huduma za dharura. Ujumbe wako haukuweza kupokelewa kwa wakati huu."
+ "Imeshindikana"
+ "Ujumbe mpya wa MMS wa kupakua"
+ "Ujumbe mpya wa MMS"
+ "Haikuweza kupakua"
+ "Gusa ili ujaribu tena"
+ "Gusa ili upakue"
+ "Pakua au ufute"
+ "Inapakua…"
+ "Ujumbe umepitwa na wakati au haupo"
+ "ukubwa: %1$s, mwisho: %2$s"
+ "Haiwezi kutuma. Mpokeaji si sahihi."
+ "Huduma haijaanza kutumika kwenye mtandao."
+ "Haikutuma kwa sababu ya hitilafu ya mtandao"
+ "Ujumbe umepitwa na wakati au haupo"
+ "(Kichwa hakijaongezwa)"
+ "Mtumaji asiyejulikana"
+ "Umewasilishwa"
+ "Haikuweza kupakua ujumbe %1$s kutoka %2$s."
+ "Haikuweza kukamilisha utendaji wa hifadhidata kwa sababu ya kumbukumbu ndogo"
+ "Ujumbe haujatumwa"
+ "Baadhi ya ujumbe haukutumwa katika programu ya Ujumbe"
+
+ Ujumbe %d katika mazungumzo %d
+ Ujumbe %d katika mazungumzo moja
+
+ "Ujumbe haujapakuliwa"
+ "Baadhi ya ujumbe haukupakuliwa katika programu ya Ujumbe"
+
+ Ujumbe %dkatika mazungumzo %d
+ Ujumbe %d katika mazungumzo moja
+
+ "Ujumbe kwa %1$s haukutumwa"
+ "Tafadhali piga simu ya sauti kwa huduma za dharura. Ujumbe wako kwa %1$s haukuweza kupokelewa kwa wakati huu."
+
+ Ujumbe %d mpya
+ Ujumbe mpya
+
+ "Anza"
+ "Kamera haipatikani"
+ "Kamera haipatikani"
+ "Kurekodi video hakupatikani"
+ "Haiwezi kuhifadhi maudhui ya picha au video"
+ "Haiwezi kupiga picha"
+ "Nyuma"
+ "Imewekwa kwenye kumbukumbu"
+ "Futa"
+ "Kumbukumbu"
+ "Ondoa kwenye kumbukumbu"
+ "Zima arifa"
+ "Washa arifa"
+ "Ongeza anwani"
+ "Pakua"
+ "Tuma"
+ "Futa"
+ "Je, ungependa kufuta ujumbe huu?"
+ "Kitendo hiki hakiwezi kutenduliwa."
+ "Futa"
+
+ Ungependa kufuta mazungumzo haya?
+ Ungependa kufuta mazungumzo haya?
+
+ "Futa"
+ "Ghairi"
+ "Kwa"
+ "Chagua picha nyingi"
+ "Thibitisha uteuzi"
+ "%d+"
+ "Haiwezi kurekodi sauti. Jaribu tena."
+ "Haiwezi kucheza sauti. Jaribu tena."
+ "Haikuweza kuhifadhi sauti. Jaribu tena."
+ "Gusa na ushikilie"
+ ", "
+ " "
+ ": "
+ " "
+ "Picha"
+ "Klipu ya sauti"
+ "Video"
+ "Kadi ya anwani"
+ "Pakua"
+ "Jibu kupitia SMS"
+ "Jibu kupitia MMS"
+ "Jibu"
+
+ Washiriki %d
+ Mshiriki %d
+
+ "Mimi"
+ "Anwani imezuiwa na imewekwa kwenye kumbukumbu"
+ "Anwani imeacha kuzuiliwa na imetolewa kwenye kumbukumbu"
+ "%d yamewekwa kwenye kumbukumbu"
+ "%d yameondolewa kwenye kumbukumbu"
+ "Arifa zimezimwa"
+ "Arifa zimewashwa"
+ "Imewekwa. Gusa Tuma tena."
+ "Umefaulu kuweka Programu ya Ujumbe kuwa programu ya chaguo-msingi ya SMS."
+
+ Tupa viambatisho
+ Tupa kiambatisho
+
+ "Kiambatisho cha sauti"
+ "Cheza kiambatisho cha sauti"
+ "Sitisha"
+ "Ujumbe kutoka kwa %s: %s."
+ "Ujumbe ulioshindikana kutoka kwa %s: %s. Saa: %s."
+ "Ujumbe kutoka %s: %s. Saa: %s."
+ "Ujumbe ambao haukutumwa kwa %s: %s. Saa: %s."
+ "Inatuma ujumbe kwa %s: %s. Saa: %s."
+ "Ujumbe ulioshindikana kwa %s: %s. Saa: %s."
+ "Ujumbe kwa %s: %s. Saa: %s."
+ "Ujumbe ulioshindikana kutoka kwa %s: %s. Saa: %s. %s."
+ "Ujumbe kutoka %s: %s. Saa: %s. %s."
+ "Ujumbe ambao haukutumwa kwa %s: %s. Saa: %s."
+ "Inatuma ujumbe kwa %s: %s. Saa: %s."
+ "Ujumbe ulioshindikana kwenda kwa %s: %s. Saa: %s."
+ "Ujumbe kwa %s: %s. Saa: %s."
+ "Ujumbe ulishindikana. Gusa ili ujaribu tena."
+ "Mazungumzo na %s"
+ "Futa kichwa"
+ "Rekodi video"
+ "Piga picha ya mnato"
+ "Piga picha"
+ "Anza kurekodi video"
+ "Badili utumie kamera ya skrini nzima"
+ "Badili kati ya kamera ya nyuma na mbele"
+ "Acha kurekodi na kuambatisha video"
+ "Acha kurekodi video"
+ "Picha za programu ya Ujumbe"
+
+ Picha %d zimehifadhiwa kwenye albamu ya \"%s\"
+ Picha %d imehifadhiwa kwenye albamu ya \"%s\"
+
+
+ Video %d zimehifadhiwa kwenye albamu ya \"%s\"
+ Video %d imehifadhiwa kwenye albamu ya \"%s\"
+
+
+ Viambatisho %d vimehifadhiwa kwenye albamu ya \"%s\"
+ Kiambatisho %d kimehifadhiwa kwenye albamu ya \"%s\"
+
+
+ Viambatisho %d vimehifadhiwa kwenye \"Vipakuliwa\"
+ Kiambatisho %d kimehifadhiwa kwenye \"Vipakuliwa\"
+
+
+ Imehifadhi viambatisho %d
+ Imehifadhi kiambatisho %d
+
+
+ Haikuweza kuhifadhi viambatisho %d
+ Haikuweza kuhifadhi kiambatisho %d
+
+ "Kiambatisho cha MMS kimehifadhiwa"
+ "Mipangilio"
+ "Imewekwa kwenye kumbukumbu"
+ "Funga"
+ "MMS"
+ "Mahiri"
+ "Tatua"
+ "Arifa"
+ "Mlio"
+ "Kimya"
+ "Tetema"
+ "Imezuiwa"
+ "Ripoti za kupokelewa kwa SMS"
+ "Omba ripoti ya kuthibitisha kuwa kila SMS unayotuma imewasilishwa"
+ "Pakua kiotomatiki"
+ "Rejesha ujumbe wa MMS kiotomatiki"
+ "Rejesha kiotomatiki wakati wa kutumia mitandao mingine"
+ "Rejesha MMS kiotomatiki unapotumia mitandao mingine"
+ "Utumaji ujumbe kwa kikundi"
+ "Tumia MMS kutuma ujumbe mmoja wakati kuna wapokeaji wengi"
+ "Programu chaguo-msingi ya SMS"
+ "Programu chaguo-msingi ya SMS"
+
+
+ "Nambari yako ya simu"
+ "Isiyojulikana"
+ "Sauti za ujumbe unaotumwa"
+ "Tupa SMS"
+ "Tupa data ghafi za SMS zilizopokelewa kwenye faili ya hifadhi ya nje"
+ "Tupa ujumbe wa MMS"
+ "Tupa data ghafi za ujumbe wa MMS uliopokelewa kwenye faili ya hifadhi ya nje"
+ "Arifa ya dharura"
+ "Chaguo za ujumbe"
+ "Nakili maandishi"
+ "Tazama maelezo"
+ "Futa"
+ "Sambaza"
+ "Maelezo ya ujumbe"
+ "Aina: "
+ "Ujumbe wa maandishi"
+ "Ujumbe anuai"
+ "Kutoka: "
+ "Kwa: "
+ "Imetumwa: "
+ "Imepokelewa: "
+ "Kichwa: "
+ "Ukubwa: "
+ "Kipaumbele: "
+ "SIM: "
+ "Juu"
+ "Kawaida"
+ "Chini"
+ "SIM %s"
+ "Anwani ya mtumaji iliyofichwa"
+ "Haiwezi kutuma ujumbe wakati inapakiwa viambatisho."
+ "Haiwezi kupakia kiambatisho. Jaribu tena."
+ "Mtandao hauko tayari. Jaribu tena."
+ "Futa ujumbe"
+ "Badili kati ya kuweka maandishi na nambari"
+ "Ongeza washiriki zaidi"
+ "Thibitisha washiriki"
+ "Anzisha mazungumzo mapya"
+ "Chagua bidhaa hii"
+ "Cheza video"
+ "Watu na chaguo"
+ "Tatua"
+ "Watu na chaguo"
+ "Jumla"
+ "Watu katika mazungumzo haya"
+ "Piga simu"
+ "Tuma ujumbe"
+ "Tuma ujumbe<br/><small>kutoka %s</small>"
+
+ Tuma picha
+ Tuma picha
+
+
+ Tuma sauti
+ Tuma sauti
+
+
+ Tuma video
+ Tuma video
+
+
+ Tuma kadi za anwani
+ Tuma kadi ya anwani
+
+
+ Tuma viambatisho
+ Tuma kiambatisho
+
+
+ Viambatisho %d viko tayari kutumwa
+ Kiambatisho kimoja kiko tayari kutumwa
+
+ "Tuma maoni"
+ "Angalia katika Duka la Google Play"
+ "Maelezo kuhusu toleo hili"
+ "Toleo la %1$s"
+ "Leseni za programu huria"
+ "Arifa"
+ "Kikomo cha kiambatisho kilifikiwa"
+ "Imeshindwa kupakia kiambatisho."
+ "Ungependa kuongeza kwenye Anwani?"
+ "Ongeza Anwani"
+ "Kichwa"
+ "Kichwa: "
+ "%s%s"
+ "Inapakia kadi ya anwani"
+ "Haikuweza kupakia kadi ya anwani"
+ "Angalia kadi ya anwani"
+
+ Anwani %d
+ Anwani %d
+
+ "Kadi za mawasiliano"
+ "Siku ya kuzaliwa"
+ "Madokezo"
+ "Sambaza ujumbe"
+ "Jibu"
+ "+1"
+ "+%d"
+ "SMS imezimwa"
+ "Ili utume ujumbe, weka programu ya Ujumbe kuwa programu ya chaguo-msingi ya SMS"
+ "Weka programu ya Ujumbe kuwa programu ya chaguo-msingi ya SMS"
+ "Badilisha"
+ "Ili kupokea ujumbe, weka programu ya Ujumbe iwe programu ya chaguo-msingi ya SMS"
+ "Hakuna SIM inayopendelewa kwa kutuma ujumbe wa SMS iliyochaguliwa"
+ "Programu hii hairuhusiwi na mmiliki kifaa."
+ "SAWA"
+ "Washiriki wengi mno katika mazungumzo"
+
+ Anwani zisizo sahihi
+ Anwani isiyo sahihi
+
+ "Haikuweza kupakia picha ya kamera"
+ "Wewe: "
+ "%s: "
+ "Rasimu"
+ "Utakapoanzisha mazungumzo mapya, utayaona yameorodheshwa hapa"
+ "Mazungumzo yaliyowekwa kwenye kumbukumbu huonekana hapa"
+ "Inapakia mazungumzo..."
+ "Picha"
+ "Klipu ya sauti"
+ "Video"
+ "Kadi ya anwani"
+ "MMS"
+ "Tendua"
+ "Jaribu tena"
+ "Andika jina la anwani au nambari ya simu ili uanze ujumbe mpya"
+ "Zuia"
+ "Zuia %s"
+ "Ondoa kizuizi kwa %s"
+ "Ungependa kuzuia %s?"
+ "Utaendelea kupokea ujumbe kutoka nambari hii ila hutapewa arifa tena. Mazungumzo haya yatawekwa kwenye kumbukumbu."
+ "Anwani zilizozuiwa"
+ "ONDOA KIZUIZI"
+ "Anwani zilizozuiwa"
+ "Chagua picha kutoka maktaba ya hati"
+ "Inatuma ujumbe"
+ "Ujumbe umetumwa"
+ "Data ya simu za mkononi imezimwa. Angalia mipangilio yako."
+ "Haiwezi kutuma ujumbe katika Hali ya ndegeni"
+ "Ujumbe haukutumwa"
+ "Ujumbe umepakuliwa"
+ "Data ya simu za mkononi imezimwa. Angalia mipangilio yako."
+ "Haiwezi kupakua ujumbe katika Hali ya ndegeni"
+ "Ujumbe haukuweza kupakuliwa"
+ "Sifuri"
+ "Moja"
+ "Mbili"
+ "Tatu"
+ "Nne"
+ "Tano"
+ "Sita"
+ "Saba"
+ "Nane"
+ "Tisa"
+ "Huwezi kutuma ujumbe ukitumia %1$s, hitilafu %2$d"
+ "Huwezi kutuma ujumbe ukitumia mtoa huduma asiyejulikana, hitilafu %1$d"
+ "Fwd: %s"
+ "Ujumbe haukutumwa: huduma haijaanza kutumika kwenye mtandao."
+ "Ujumbe haujatumwa: anwani ya unakotuma si sahihi"
+ "Ujumbe haujatumwa: ujumbe usio sahihi"
+ "Ujumbe haujatumwa: maudhui yasiyoweza kutumika"
+ "Ujumbe haujatumwa: ujumbe usioweza kutumika"
+ "Ujumbe haujatumwa: ni mkubwa mno"
+ "Ujumbe mpya"
+ "Tazama"
+ "Picha"
+ "Haikuweza kupata programu inayofaa"
+ "Ondoa mpokeaji"
+ "Ujumbe mpya"
+ "Ghairi"
+ "Badilisha mahali pa kufikia"
+ "Haijawekwa"
+ "Jina"
+ "APN"
+ "MMSC"
+ "Proksi ya MMS"
+ "Mlango wa MMS"
+ "MCC"
+ "MNC"
+ "Aina ya APN"
+ "Futa APN"
+ "APN Mpya"
+ "Hifadhi"
+ "Tupa"
+ "Sehemu hii haiwezi kuachwa ikiwa haijajazwa."
+ "APN haiwezi kuwa tupu."
+ "Sehemu ya MCC lazima iwe na nambari 3."
+ "Sehemu ya MNC lazima iwe na nambari 2 au 3."
+ "Inarejesha mipangilio mbadala ya APN"
+ "Rudisha kwenye chaguo-msingi"
+ "Kuweka upya kwa mipangilio mbadala ya APN kumekamilika"
+ "Haina Kichwa"
+ "Majina ya Lango la Mtandao"
+ "APN"
+ "APN Mpya"
+ "Mipangilio ya Jina la Lango la Mtandao (APN) haipatikani kwa mtumiaji huyu"
+ "Je, ungependa kunakili kwenye ubao klipu?"
+ "Nakili"
+ "kwa %s"
+ "Jumla"
+ "Mahiri"
+ "Mipangilio ya jumla"
+ "Mipangilio ya kina"
+ "SIM \"%s\""
+ "Tuma ujumbe binafsi wa SMS kwa wapokeaji wote. Wewe tu ndiye utakayepata majibu yoyote"
+ "Tuma MMS moja kwa wapokeaji wote"
+ "Nambari isiyojulikana"
+ "Ujumbe mpya"
+ "Ujumbe mpya."
+ "Kichagua SIM"
+ "%1$s imechaguliwa, Kichagua SIM"
+ "Badilisha kichwa"
+ "Chagua SIM au ubadilishe kichwa"
+ "Gusa na ushikilie ili urekodi sauti"
+ "Anzisha mazungumzo mapya"
+ "Ujumbe"
+ "Orodha ya Ujumbe"
+ "Ujumbe"
+ "Ujumbe mpya"
+ "Orodha ya mazungumzo"
+ "Inapakia mazungumzo"
+ "Inapakia ujumbe"
+ "Tazama mazungumzo zaidi"
+ "Angalia ujumbe zaidi"
+ "Mazungumzo yamefutwa"
+ "Mazungumzo yamefutwa. Gusa ili uonyeshe mazungumzo tofauti ya programu ya Ujumbe"
+ "Amezuiwa"
+ "Ameondolewa kizuizi"
+ "Nafasi ya hifadhi ni ndogo. Unaweza kupoteza baadhi ya data."
+ "Chagua viambatisho"
+ "Thibitisha uteuzi"
+ "%d vimechaguliwa"
+ "Tafadhali ondoa moja au zaidi ya viambatisho na ujaribu tena."
+ "Unaweza kujaribu kutuma ujumbe wako, lakini huenda usitumwe hadi uondoe kiambatisho kimoja au zaidi."
+ "Unaweza kutuma video moja pekee kwa kila ujumbe. Tafadhali ondoa video za ziada na ujaribu tena."
+ "Programu ya Ujumbe haikupakia kiambatisho."
+ "Tuma tu"
+ "Haikuweza kuanza mazungumzo"
+ "%1$s (%2$s)"
+ "%s imechaguliwa"
+
diff --git a/res/values-ta-rIN/arrays.xml b/res/values-ta-rIN/arrays.xml
new file mode 100644
index 0000000..9953b60
--- /dev/null
+++ b/res/values-ta-rIN/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "தலைப்பு இல்லை"
+ "தலைப்பு இல்லை"
+
+
+ "ஆம்"
+ "இல்லை"
+ "சரி"
+ "ஹிஹி"
+ "நன்றி"
+ "ஆம்"
+ "அருமை"
+ "வந்துகொண்டிருக்கிறேன்"
+ "பின்னர் அழைக்கிறேன்"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
new file mode 100644
index 0000000..e107ffe
--- /dev/null
+++ b/res/values-ta-rIN/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "மெசேஜ்"
+ "மெசேஜ்"
+ "உரையாடலைத் தேர்ந்தெடுக்கவும்"
+ "அமைப்பு"
+ "செய்தி அனுப்பு"
+ "இணைப்பைச் சேர்"
+ "உதவி"
+ "நல்வரவு"
+ "தவிர்"
+ "அடுத்து >"
+ "அடுத்து"
+ "வெளியேறு"
+ "அமைப்புகள் >"
+ "அமைப்புகள்"
+ "செய்தியிடலுக்கு SMS, ஃபோன் மற்றும் தொடர்புகள் ஆகியவற்றுக்கான அனுமதி தேவை."
+ "அமைப்புகள் > பயன்பாடுகள் > செய்தியிடல் > அனுமதிகள் என்பதில் அனுமதிகளை மாற்றலாம்."
+ "அமைப்புகள், பயன்பாடுகள், செய்தியிடல், அனுமதிகள் என்பதில் அனுமதிகளை மாற்றலாம்."
+ "அடிக்கடி தொடர்புகொண்டவர்கள்"
+ "எல்லா தொடர்புகளும்"
+ "%s க்கு அனுப்பு"
+ "படங்கள் அல்லது வீடியோவை எடுக்கவும்"
+ "இந்தச் சாதனத்தில் இருந்து படங்களைத் தேர்வு செய்யவும்"
+ "ஆடியோவைப் பதிவுசெய்"
+ "படத்தைத் தேர்வுசெய்"
+ "மீடியா தேர்ந்தெடுக்கப்பட்டது."
+ "மீடியா தேர்வுநீக்கப்பட்டது."
+ "%d தேர்ந்தெடுக்கப்பட்டது"
+ "படம் %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "படம்"
+ "ஆடியோவைப் பதிவுசெய்"
+ "பகிர்"
+ "சற்றுமுன்"
+ "இப்போது"
+
+ %d நிமிடங்கள்
+ %d நிமிடம்
+
+
+ %d மணிநேரம்
+ %d மணிநேரம்
+
+
+ %d நாட்கள்
+ %d நாள்
+
+
+ %d வாரங்கள்
+ ஒரு வாரம்
+
+
+ %d மாதங்கள்
+ ஒரு மாதம்
+
+
+ %d ஆண்டுகள்
+ ஒரு ஆண்டு
+
+ "கிளாஸ் 0 செய்தி"
+ "சேமி"
+ "சாதனத்தில் இடம் குறைவாக உள்ளது. இடத்தைக் காலியாக்க, செய்தியிடலானது பழைய உரைச் செய்திகளை தானாகவே நீக்கும்."
+ "சேமிப்பிடம் குறைகிறது"
+ "உங்கள் சாதனத்தில் கூடுதல் இடம் கிடைக்கும் வரை செய்தியிடல் செய்திகளை அனுப்பாமல் அல்லது பெறாமல் இருக்கக் கூடும்."
+ "SMS சேமிப்பகம் குறைவாக உள்ளது. நீங்கள் செய்திகளை நீக்க வேண்டியிருக்கலாம்."
+ "உங்கள் ஃபோன் எண்ணை உறுதிசெய்யவும்"
+ "இந்த ஒரு முறை செயல்பாடானது, செய்தியிடல் உங்கள் குழுச் செய்திகளைச் சரியாக வழங்குவதை உறுதிப்படுத்தும்."
+ "ஃபோன் எண்"
+ "மீடியாவுடனான செய்திகளை நீக்கு"
+ "%s க்கு முந்தைய செய்திகளை நீக்கு"
+ "%s காலத்திற்கு முந்தைய செய்திகளைத் தானாகவே நீக்கு"
+ "புறக்கணி"
+ "மீடியாவுடனான எல்லா செய்திகளையும் நீக்க வேண்டுமா?"
+ "%s காலத்திற்கு முந்தைய செய்திகளை நீக்க வேண்டுமா?"
+ "%s காலத்திற்கு முந்தைய செய்திகளை நீக்கி, தானாக நீக்கும் அம்சத்தை இயக்கவா?"
+ "%s கூறியது"
+ "நீங்கள் கூறியது"
+ "%s இடமிருந்து செய்தி"
+ "செய்தி அனுப்பியுள்ளீர்கள்"
+ "அனுப்புகிறது…"
+ "அனுப்பவில்லை. மீண்டும் முயல, தொடவும்."
+ "அனுப்பவில்லை. மீண்டும் முயல்கிறது…"
+ "மீண்டும் அனுப்பு அல்லது நீக்கு"
+ "அவசரகால சேவைகளை அழைக்கவும். உங்கள் உரைச் செய்தியை தற்போது வழங்க முடியவில்லை."
+ "தோல்வி"
+ "இறக்க, புதிய MMS செய்தி உள்ளது"
+ "புதிய MMS செய்தி"
+ "இறக்க முடியவில்லை"
+ "மீண்டும் முயல, தொடவும்"
+ "இறக்க, தொடவும்"
+ "இறக்கு அல்லது நீக்கு"
+ "இறக்குகிறது…"
+ "செய்தி காலாவதியானது அல்லது இல்லை"
+ "அளவு: %1$s, காலாவதியாகும் தேதி: %2$s"
+ "அனுப்ப முடியவில்லை. பெறுநர் விவரம் தவறாக உள்ளது."
+ "நெட்வொர்க்கில் சேவை இயக்கப்படவில்லை"
+ "நெட்வொர்க் சிக்கல் காரணமாக அனுப்ப முடியவில்லை"
+ "செய்தி காலாவதியானது அல்லது இல்லை"
+ "(தலைப்பு இல்லை)"
+ "அறியப்படாத அனுப்புநர்"
+ "டெலிவரி செய்யப்பட்டது"
+ "%2$s இலிருந்து %1$s செய்தியைப் பதிவிறக்க முடியவில்லை."
+ "குறைந்த நினைவகம் காரணமாகத் தரவுத்தளச் செயல்பாட்டை முடிக்க முடியவில்லை"
+ "செய்தி அனுப்பப்படவில்லை"
+ "செய்தியிடலில் சில செய்திகள் அனுப்பப்படவில்லை"
+
+ %d உரையாடல்களில் %d செய்திகள் உள்ளன
+ ஒரு உரையாடலில் %d செய்திகள் உள்ளன
+
+ "செய்தி இறக்கப்படவில்லை"
+ "செய்தியிடலில் சில செய்திகள் இறக்கப்படவில்லை"
+
+ %d உரையாடல்களில் %d செய்திகள் உள்ளன
+ ஒரு உரையாடலில் %d செய்திகள் உள்ளன
+
+ "%1$sக்குச் செய்தி அனுப்பப்படவில்லை"
+ "அவசரகால சேவைகளை அழைக்கவும். %1$s_1க்கு நீங்கள் அனுப்பிய செய்தியை தற்போது வழங்க முடியவில்லை."
+
+ %d புதிய செய்திகள்
+ புதிய செய்தி
+
+ "தொடங்கு"
+ "கேமரா இல்லை"
+ "கேமரா இல்லை"
+ "வீடியோ படமெடுக்க முடியாது"
+ "மீடியாவைச் சேமிக்க முடியவில்லை"
+ "படமெடுக்க முடியாது"
+ "முந்தையது"
+ "காப்பகப்படுத்தப்பட்டன"
+ "நீக்கு"
+ "காப்பிடு"
+ "காப்பிட வேண்டாம்"
+ "அறிவிப்புகளை முடக்கு"
+ "அறிவிப்புகளை இயக்கு"
+ "தொடர்பைச் சேர்"
+ "இறக்கு"
+ "அனுப்பு"
+ "நீக்கு"
+ "இந்தச் செய்தியை நீக்கவா?"
+ "இந்தச் செயலை பின்னர் செயல்தவிர்க்க முடியாது."
+ "நீக்கு"
+
+ உரையாடல்களை நீக்கவா?
+ உரையாடலை நீக்கவா?
+
+ "நீக்கு"
+ "ரத்துசெய்"
+ "பெறுநர்"
+ "பல படங்களைத் தேர்ந்தெடு"
+ "தேர்வை உறுதிப்படுத்து"
+ "+%d"
+ "ஆடியோவைப் பதிவு செய்ய இயலவில்லை. மீண்டும் முயலவும்."
+ "ஆடியோவை இயக்க முடியவில்லை. மீண்டும் முயலவும்."
+ "ஆடியோவைச் சேமிக்க முடியவில்லை. மீண்டும் முயலவும்."
+ "தொட்டுப் பிடித்திருக்கவும்"
+ ", "
+ " "
+ ": "
+ " "
+ "படம்"
+ "ஆடியோ கிளிப்"
+ "வீடியோ"
+ "தொடர்பு கார்டு"
+ "இறக்கு"
+ "SMS மூலம் பதிலளி"
+ "MMS மூலம் பதிலளி"
+ "பதிலளி"
+
+ %d பங்கேற்பாளர்கள்
+ %d பங்கேற்பாளர்
+
+ "எனக்கு"
+ "தொடர்பு தடுக்கப்பட்டு காப்பகப்படுத்தப்பட்டது"
+ "தொடர்பு தடைநீக்கப்பட்டுள்ளது & பட்டியலில் தோன்றும்"
+ "%d காப்பகப்படுத்தப்பட்டன"
+ "%d பட்டியலில் தோன்றும்"
+ "அறிவிப்புகள் முடக்கப்பட்டுள்ளன"
+ "அறிவிப்புகள் இயக்கப்பட்டுள்ளன"
+ "எல்லாம் முடிந்தது. மீண்டும் அனுப்பு என்பதைத் தொடவும்."
+ "செய்தியிடல் இயல்பு SMS பயன்பாடாக அமைக்கப்பட்டது."
+
+ இணைப்புகளை நிராகரி
+ இணைப்பை நிராகரி
+
+ "ஆடியோ இணைப்பு"
+ "ஆடியோ இணைப்பை இயக்கவும்"
+ "இடைநிறுத்து"
+ "செய்தி அனுப்பியவர்: %s - %s."
+ "%sக்கு அனுப்பிய செய்தி தோல்வி: %s. நேரம்: %s."
+ "%s அனுப்பிய செய்தி: %s. நேரம்: %s."
+ "%sக்கு அனுப்பப்படாத செய்தி: %s. நேரம்: %s."
+ "%sக்குச் செய்தி அனுப்புகிறது: %s. நேரம்: %s."
+ "%sக்கு அனுப்பிய செய்தி தோல்வி: %s. நேரம்: %s."
+ "%sக்கான செய்தி: %s. நேரம்: %s."
+ "%sக்கு அனுப்பிய செய்தி தோல்வி: %s. நேரம்: %s. %s."
+ "%s இடமிருந்து செய்தி: %s. நேரம்: %s. %s."
+ "%sக்கு அனுப்பப்படாத செய்தி: %s. நேரம்: %s."
+ "%sக்குச் செய்தி அனுப்புகிறது: %s. நேரம்: %s."
+ "%sக்கு அனுப்பிய செய்தி தோல்வி: %s. நேரம்: %s."
+ "%sக்கான செய்தி: %s. நேரம்: %s."
+ "செய்தி அனுப்புவதில் தோல்வி. மீண்டும் முயற்சிக்க, தொடவும்."
+ "%s உடனான உரையாடல்"
+ "தலைப்பை நீக்கு"
+ "வீடியோ எடு"
+ "ஸ்டில் படமெடு"
+ "படமெடு"
+ "வீடியோவைப் படமெடு"
+ "முழுத் திரை கேமராவிற்கு மாறு"
+ "முன் மற்றும் பின்பக்க கேமராவிற்கு இடையே மாறு"
+ "பதிவுசெய்வதை நிறுத்தி வீடியோவை இணைக்கவும்"
+ "வீடியோ பதிவு செய்வதை நிறுத்து"
+ "செய்தியிடல் படங்கள்"
+
+ %d படங்கள், \"%s\" ஆல்பத்தில் சேமிக்கப்பட்டன
+ %d படம், \"%s\" ஆல்பத்தில் சேமிக்கப்பட்டது
+
+
+ %d வீடியோக்கள், \"%s\" ஆல்பத்தில் சேமிக்கப்பட்டன
+ %d வீடியோ, \"%s\" ஆல்பத்தில் சேமிக்கப்பட்டது
+
+
+ %d இணைப்புகள், \"%s\" ஆல்பத்தில் சேமிக்கப்பட்டன
+ %d இணைப்பு, \"%s\" ஆல்பத்தில் சேமிக்கப்பட்டது
+
+
+ %d இணைப்புகள், \"இறக்கங்கள்\" என்பதில் சேமிக்கப்பட்டன
+ %d இணைப்பு, \"இறக்கங்கள்\" என்பதில் சேமிக்கப்பட்டது
+
+
+ %d இணைப்புகள் சேமிக்கப்பட்டன
+ %d இணைப்பு சேமிக்கப்பட்டது
+
+
+ %d இணைப்புகளைச் சேமிக்க முடியவில்லை
+ %d இணைப்பைச் சேமிக்க முடியவில்லை
+
+ "சேமித்த MMS இணைப்பு"
+ "அமைப்பு"
+ "காப்பகப்படுத்தப்பட்டன"
+ "மூடு"
+ "MMS"
+ "மேம்பட்டவை"
+ "பிழைத்திருத்து"
+ "அறிவிப்புகள்"
+ "ஒலி"
+ "நிசப்தம்"
+ "அதிர்வு"
+ "தடுக்கப்பட்டது"
+ "SMS டெலிவரி அறிக்கைகள்"
+ "நீங்கள் அனுப்பும் ஒவ்வொரு SMS க்கும் வழங்கல் அறிக்கையைக் கோரவும்"
+ "தானாக மீட்டெடு"
+ "தானாக MMS செய்திகளை மீட்டெடு"
+ "ரோமிங்கில் தானாக மீட்டெடு"
+ "ரோமிங்கின் போது தானாகவே MMSஐ மீட்டெடு"
+ "குழு மெசேஜ்"
+ "ஒரு செய்தியைப் பல பெறுநர்களுக்கு அனுப்புவதற்கு MMS ஐப் பயன்படுத்து"
+ "இயல்புநிலை SMS பயன்பாடு"
+ "இயல்புநிலை SMS பயன்பாடு"
+
+
+ "மொபைல் எண்"
+ "தெரியாதது"
+ "வெளிச்செல்லும் செய்தி ஒலிகள்"
+ "SMS ஐ நகலெடு"
+ "பெற்ற SMS அசல் தரவை வெளிப்புறச் சேமிப்பகக் கோப்பில் நகலெடு"
+ "MMS ஐ நகலெடு"
+ "பெற்ற MMS அசல் தரவை வெளிப்புறச் சேமிப்பகச் கோப்பில் நகலெடு"
+ "வயர்லெஸ் விழிப்பூட்டல்கள்"
+ "செய்தி விருப்பங்கள்"
+ "உரையை நகலெடு"
+ "விவரங்களைக் காட்டு"
+ "நீக்கு"
+ "முன்னனுப்பு"
+ "செய்தி விவரங்கள்"
+ "வகை: "
+ "உரைச் செய்தி"
+ "மல்டிமீடியா செய்தி"
+ "அனுப்புநர்: "
+ "பெறுநர்: "
+ "அனுப்பியது: "
+ "பெறப்பட்டது: "
+ "தலைப்பு: "
+ "அளவு: "
+ "முன்னுரிமை: "
+ "SIM: "
+ "உயர்தரம்"
+ "இயல்பு"
+ "குறைந்த தரம்"
+ "SIM %s"
+ "மறைவிலிருக்கும் அனுப்புநர் முகவரி"
+ "இணைப்புகளை ஏற்றும் போது செய்தியை அனுப்ப முடியாது."
+ "இணைப்பை ஏற்ற முடியவில்லை. மீண்டும் முயலவும்."
+ "நெட்வொர்க் தயாராக இல்லை. மீண்டும் முயற்சிக்கவும்."
+ "உரையை நீக்கு"
+ "உரை மற்றும் எண்களை உள்ளிடுவதன் இடையே மாறு"
+ "மேலும் பங்கேற்பாளர்களைச் சேர்"
+ "பங்கேற்பாளர்களை உறுதிப்படுத்தவும்"
+ "புதிய உரையாடலைத் தொடங்கு"
+ "இதனைத் தேர்வுசெய்"
+ "வீடியோவை இயக்கு"
+ "நபர்களும் விருப்பங்களும்"
+ "பிழைத்திருத்து"
+ "நபர்களும் விருப்பங்களும்"
+ "பொது"
+ "உரையாடலில் உள்ளவர்கள்"
+ "அழை"
+ "செய்தி அனுப்பு"
+ "செய்தி அனுப்ப:<br/><small>%s</small>"
+
+ படங்களை அனுப்பு
+ படத்தை அனுப்பு
+
+
+ ஆடியோக்களை அனுப்பு
+ ஆடியோவை அனுப்பு
+
+
+ வீடியோக்களை அனுப்பு
+ வீடியோவை அனுப்பு
+
+
+ தொடர்பு கார்டுகளை அனுப்பு
+ தொடர்பு கார்டை அனுப்பு
+
+
+ இணைப்புகளை அனுப்பு
+ இணைப்பை அனுப்பு
+
+
+ %d இணைப்புகள் அனுப்புவதற்குத் தயாராக உள்ளன
+ ஒரு இணைப்பு அனுப்புவதற்குத் தயாராக உள்ளது
+
+ "கருத்தை அனுப்பு"
+ "Google Play Store இல் காட்டு"
+ "பதிப்புத் தகவல்"
+ "பதிப்பு %1$s"
+ "ஓப்பன் சோர்ஸ் உரிமங்கள்"
+ "அறிவிப்புகள்"
+ "இணைப்பிற்கான வரம்பை அடைந்துவிட்டீர்கள்"
+ "இணைப்பை ஏற்றுவதில் தோல்வி."
+ "தொடர்புகளில் சேர்க்கவா?"
+ "தொடர்பைச் சேர்"
+ "தலைப்பு"
+ "தலைப்பு: "
+ "%s%s"
+ "தொடர்பு கார்டை ஏற்றுகிறது"
+ "தொடர்பு கார்டை ஏற்ற முடியவில்லை"
+ "தொடர்பு கார்டைக் காட்டு"
+
+ %d தொடர்புகள்
+ %d தொடர்பு
+
+ "தொடர்பு கார்டுகள்"
+ "பிறந்தநாள்"
+ "குறிப்புகள்"
+ "செய்தியை முன்னனுப்பு"
+ "பதிலளிக்கவும்"
+ "+1"
+ "+%d"
+ "SMS முடக்கப்பட்டது"
+ "அனுப்ப, இயல்பு SMS பயன்பாடாக செய்தியிடலை அமைக்கவும்"
+ "இயல்பு SMS பயன்பாடாக செய்தியிடலை அமைக்கவும்"
+ "மாற்று"
+ "செய்திகளைப் பெற, இயல்பு SMS பயன்பாடாக செய்தியிடலை அமைக்கவும்"
+ "SMS செய்திகளை அனுப்புவதற்கு விருப்பமான சிம் எதுவும் தேர்ந்தெடுக்கப்படவில்லை"
+ "சாதன உரிமையாளர் இந்தப் பயன்பாட்டை அனுமதிக்கவில்லை."
+ "சரி"
+ "உரையாடலில் பலர் உள்ளனர்"
+
+ தவறான தொடர்புகள்
+ தவறான தொடர்பு
+
+ "கேமரா படத்தை ஏற்ற முடியவில்லை"
+ "நீங்கள்: "
+ "%s: "
+ "வரைவு"
+ "புதிய உரையாடலைத் தொடங்கியதும், அது இங்கு பட்டியலிடப்படும்"
+ "காப்பகப்படுத்திய உரையாடல்கள் இங்கே தோன்றும்"
+ "உரையாடல்களை ஏற்றுகிறது…"
+ "படம்"
+ "ஆடியோ கிளிப்"
+ "வீடியோ"
+ "தொடர்பு கார்டு"
+ "MMS"
+ "செயல்தவிர்"
+ "மீண்டும் முயற்சிக்கவும்"
+ "புதிய செய்தி உருவாக்க, தொடர்பின் பெயர் அல்லது மொபைல் எண்ணை உள்ளிடவும்"
+ "தடு"
+ "%sஐத் தடு"
+ "%s இன் தடுப்பை நீக்கு"
+ "%sஐத் தடைசெய்யவா?"
+ "தொடர்ந்து இந்த எண்ணில் இருந்து செய்திகளைப் பெறுவீர்கள், அது குறித்து இனி உங்களுக்கு அறிவிக்கப்படாது. உரையாடல் காப்பகப்படுத்தப்படும்."
+ "தடுக்கப்பட்ட தொடர்புகள்"
+ "தடுப்பை நீக்கு"
+ "தடுக்கப்பட்ட தொடர்புகள்"
+ "ஆவண நூலகத்தில் இருந்து படத்தைத் தேர்வு செய்யவும்"
+ "செய்தி அனுப்பப்படுகிறது"
+ "செய்தி அனுப்பப்பட்டது"
+ "செல்லுலார் தரவு முடக்கப்பட்டுள்ளது. அமைப்புகளைச் சரிபார்க்கவும்."
+ "விமானப் பயன்முறையில் செய்திகளை அனுப்ப முடியாது"
+ "செய்தியை அனுப்ப முடியவில்லை"
+ "செய்தி பதிவிறக்கப்பட்டது"
+ "செல்லுலார் தரவு முடக்கப்பட்டுள்ளது. அமைப்புகளைச் சரிபார்க்கவும்."
+ "விமானப் பயன்முறையில் செய்திகளை இறக்க முடியாது"
+ "செய்தி இறக்கப்படவில்லை"
+ "பூஜ்ஜியம்"
+ "ஒன்று"
+ "இரண்டு"
+ "மூன்று"
+ "நான்கு"
+ "ஐந்து"
+ "ஆறு"
+ "ஏழு"
+ "எட்டு"
+ "ஒன்பது"
+ "%1$s மூலம் செய்தியை அனுப்ப முடியவில்லை, பிழை %2$d"
+ "அறியப்படாத மொபைல் நிறுவனம் மூலம் செய்தியை அனுப்ப முடியவில்லை, பிழை %1$d"
+ "அனுப்பு: %s"
+ "செய்தி அனுப்பப்படவில்லை: நெட்வொர்க்கில் சேவை செயல்படுத்தப்படவில்லை"
+ "செய்தி அனுப்பப்படவில்லை: தவறான இலக்கு முகவரி"
+ "செய்தி அனுப்பப்படவில்லை: தவறான செய்தி"
+ "செய்தி அனுப்பப்படவில்லை: ஆதரிக்கப்படாத உள்ளடக்கம்"
+ "செய்தி அனுப்பப்படவில்லை: ஆதரிக்கப்படாத செய்தி"
+ "செய்தி அனுப்பப்படவில்லை: மிகப் பெரியது"
+ "புதிய செய்தி"
+ "காட்டு"
+ "படம்"
+ "தகுந்த பயன்பாட்டைக் கண்டுபிடிக்க இயலவில்லை"
+ "பெறுநரை அகற்று"
+ "புதிய செய்தி"
+ "ரத்துசெய்"
+ "ஆக்சஸ் பாயிண்ட்டைத் திருத்து"
+ "அமைக்கப்படவில்லை"
+ "பெயர்"
+ "APN"
+ "MMSC"
+ "MMS ப்ராக்ஸி"
+ "MMS போர்ட்"
+ "MCC"
+ "MNC"
+ "APN வகை"
+ "APNஐ நீக்கு"
+ "புதிய APN"
+ "சேமி"
+ "நிராகரி"
+ "பெயர் புலம் வெறுமையாக இருக்கக்கூடாது."
+ "APN வெறுமையாக இருக்கக்கூடாது."
+ "MCC புலம் கண்டிப்பாக 3 இலக்கங்களில் இருக்க வேண்டும்."
+ "MNC புலம் கண்டிப்பாக 2 அல்லது 3 இலக்கங்களில் இருக்க வேண்டும்."
+ "இயல்புநிலை APN அமைப்புகளை மீட்டமைக்கிறது."
+ "இயல்புநிலைக்கு மீட்டமை"
+ "இயல்புநிலை APN அமைப்புகளை மீட்டமைப்பது முடிந்தது."
+ "பெயரிடப்படாதது"
+ "ஆக்சஸ் பாயிண்ட் நேம்கள்"
+ "APNகள்"
+ "புதிய APN"
+ "இவரால் ஆக்சஸ் பாயிண்ட் நேம் அமைப்புகளை மாற்ற முடியாது"
+ "கிளிப்போர்டுக்கு நகலெடுக்கவா?"
+ "நகலெடு"
+ "%s"
+ "பொது"
+ "மேம்பட்டவை"
+ "பொது அமைப்பு"
+ "மேம்பட்ட அமைப்பு"
+ "\"%s\" சிம்"
+ "எல்லா பெறுநர்களுக்கும் SMS செய்திகளைத் தனித்தனியாக அனுப்பவும். நீங்கள் மட்டுமே பதில்களைப் பெறுவீர்கள்"
+ "எல்லா பெறுநர்களுக்கும் MMS செய்திகளைத் தனித்தனியாக அனுப்பவும்"
+ "தெரியாத எண்"
+ "புதிய செய்தி"
+ "புதிய செய்தி."
+ "சிம் தேர்வி"
+ "%1$s தேர்ந்தெடுக்கப்பட்டது, சிம் தேர்வி"
+ "தலைப்பைத் திருத்து"
+ "சிம்மைத் தேர்ந்தெடுக்கவும் அல்லது தலைப்பைத் திருத்தவும்"
+ "ஆடியோவைப் பதிவுசெய்ய, தொட்டுப் பிடித்திருக்கவும்"
+ "புதிய உரையாடலைத் தொடங்கு"
+ "செய்தியிடல்"
+ "செய்தியிடல் பட்டியல்"
+ "செய்தியிடல்"
+ "புதிய செய்தி"
+ "உரையாடல் பட்டியல்"
+ "உரையாடல்களை ஏற்றுகிறது"
+ "செய்திகளை ஏற்றுகிறது"
+ "மேலும் உரையாடல்களைக் காட்டு"
+ "கூடுதல் செய்திகளைக் காட்டு"
+ "உரையாடல் நீக்கப்பட்டது"
+ "உரையாடல் நீக்கப்பட்டது. வேறொரு செய்தியிடல் உரையாடலைக் காட்ட, தொடவும்"
+ "தடுக்கப்பட்டார்"
+ "தடுப்பு நீக்கப்பட்டார்"
+ "சேமிப்பகம் குறைவாக உள்ளது. சில தரவை இழக்க நேரிடலாம்."
+ "இணைப்புகளைத் தேர்ந்தெடு"
+ "தேர்வை உறுதிப்படுத்து"
+ "%d தேர்ந்தெடுக்கப்பட்டன"
+ "ஒன்று அல்லது அதற்கு மேற்பட்ட இணைப்புகளை அகற்றிவிட்டு, முயற்சிக்கவும்."
+ "நீங்கள் செய்தியை அனுப்ப முயற்சிக்கலாம், ஆனால் ஒன்று அல்லது அதற்கு மேற்பட்ட இணைப்புகளை நீக்கும் வரை இது வழங்கப்படாமல் இருக்கலாம்."
+ "ஒரு செய்தியில் ஒரு வீடியோவை மட்டுமே நீங்கள் அனுப்ப முடியும். கூடுதல் வீடியோக்களை அகற்றிவிட்டு, மீண்டும் முயற்சிக்கவும்."
+ "செய்தியிடலால் இணைப்பை ஏற்ற முடியவில்லை."
+ "எப்படியேனும் அனுப்பு"
+ "உரையாடலைத் தொடங்க முடியவில்லை"
+ "%1$s (%2$s)"
+ "%s தேர்ந்தெடுக்கப்பட்டது"
+
diff --git a/res/values-te-rIN/arrays.xml b/res/values-te-rIN/arrays.xml
new file mode 100644
index 0000000..c18a1b6
--- /dev/null
+++ b/res/values-te-rIN/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "విషయం లేదు"
+ "విషయం లేదు"
+
+
+ "అవును"
+ "వద్దు"
+ "సరే"
+ "హెహే"
+ "ధన్యవాదాలు"
+ "నేను అంగీకరిస్తున్నాను"
+ "బాగుంది"
+ "నేను ఆ పని మీదే ఉన్నాను"
+ "సరే, నేను మీతో తర్వాత మాట్లాడుతాను"
+ ":)"
+ ":("
+
+
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
new file mode 100644
index 0000000..4a58e0f
--- /dev/null
+++ b/res/values-te-rIN/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "మెసేజింగ్"
+ "మెసేజింగ్"
+ "సంభాషణను ఎంచుకోండి"
+ "సెట్టింగ్లు"
+ "సందేశం పంపు"
+ "జోడింపును జోడించండి"
+ "సహాయం"
+ "స్వాగతం"
+ "దాటవేయి"
+ "తదుపరి >"
+ "తదుపరి"
+ "నిష్క్రమించండి"
+ "సెట్టింగ్లు >"
+ "సెట్టింగ్లు"
+ "సందేశ సేవకు SMS, ఫోన్ మరియు పరిచయాల ప్రాప్యత అనుమతి ఇవ్వడం అవసరం."
+ "మీరు సెట్టింగ్లు > అనువర్తనాలు > సందేశ సేవ > అనుమతులులో అనుమతులను మార్చవచ్చు."
+ "మీరు సెట్టింగ్లు, అనువర్తనాలు, సందేశ సేవ, అనుమతులులో అనుమతులను మార్చవచ్చు."
+ "తరచుగా సంప్రదించినవి"
+ "అన్ని పరిచయాలు"
+ "%sకి పంపండి"
+ "చిత్రాలను లేదా వీడియోను సంగ్రహించు"
+ "ఈ పరికరం నుండి చిత్రాలను ఎంచుకోండి"
+ "ఆడియోను రికార్డ్ చేయి"
+ "ఫోటోను ఎంచుకోండి"
+ "మీడియా ఎంచుకోబడింది."
+ "మీడియా ఎంపిక తీసివేయబడింది."
+ "%d ఎంచుకోబడింది"
+ "చిత్రం %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "చిత్రం"
+ "ఆడియోను రికార్డ్ చేయి"
+ "భాగస్వామ్యం చేయి"
+ "ఇప్పుడే"
+ "ఇప్పుడు"
+
+ %d నిమి
+ %d నిమి
+
+
+ %d గంటలు
+ %d గంట
+
+
+ %d రోజులు
+ %d రోజు
+
+
+ %d వారాలు
+ ఒక వారం
+
+
+ %d నెలలు
+ ఒక నెల
+
+
+ %d సంవత్సరాలు
+ ఒక సంవత్సరం
+
+ "తరగతి 0 సందేశం"
+ "సేవ్ చేయి"
+ "పరికరంలో ఖాళీ స్థలం తక్కువగా ఉంది. స్థలం ఖాళీ చేయడానికి సందేశ సేవ స్వయంచాలకంగా పాత సందేశాలను తొలగిస్తుంది."
+ "నిల్వ స్థలం అయిపోతోంది"
+ "మీ పరికరంలో మరింత ఖాళీ స్థలం లభించే వరకు సందేశ సేవ సందేశాలను పంపలేకపోవచ్చు లేదా స్వీకరించలేకపోవచ్చు."
+ "SMS నిల్వ తక్కువగా ఉంది. మీరు సందేశాలను తొలగించాల్సి రావచ్చు."
+ "మీ ఫోన్ నంబర్ను నిర్ధారించండి"
+ "ఈ ఒక పర్యాయ దశ సందేశ సేవ మీ సమూహ సందేశాలను సరిగ్గా బట్వాడా చేస్తుందని నిర్ధారిస్తుంది."
+ "ఫోన్ నంబర్"
+ "మీడియాలోని అన్ని సందేశాలను తొలగించండి"
+ "%s కంటే మునుపు ఉన్న సందేశాలను తొలగించండి"
+ "%s కంటే పాత సందేశాలను స్వయంచాలకంగా తొలగించు"
+ "విస్మరించు"
+ "మీడియా ఉన్న అన్ని సందేశాలను తొలగించాలా?"
+ "%s కంటే పాత సందేశాలను తొలగించాలా?"
+ "%s కంటే పాత సందేశాలను తొలగించి, స్వయంచాలక తొలగింపుని ఆన్ చేయాలా?"
+ "%s చెప్పారు"
+ "మీరు చెప్పారు"
+ "%s నుండి సందేశం"
+ "మీరు సందేశాన్ని పంపారు"
+ "పంపుతోంది..."
+ "పంపబడలేదు. మళ్లీ ప్రయత్నించడానికి తాకండి."
+ "పంపబడలేదు. మళ్లీ ప్రయత్నిస్తోంది..."
+ "మళ్లీ పంపండి లేదా తొలగించండి"
+ "దయచేసి అత్యవసర సేవలకు వాయిస్ కాల్ చేయండి. మీ వచన సందేశాన్ని ప్రస్తుతం బట్వాడా చేయడం సాధ్యపడలేదు."
+ "విఫలమైంది"
+ "డౌన్లోడ్ చేయడానికి కొత్త MMS సందేశం"
+ "కొత్త MMS సందేశం"
+ "డౌన్లోడ్ చేయడం సాధ్యపడలేదు"
+ "మళ్లీ ప్రయత్నించడానికి తాకండి"
+ "డౌన్లోడ్ చేయడానికి తాకండి"
+ "డౌన్లోడ్ చేయండి లేదా తొలగించండి"
+ "డౌన్లోడ్ చేస్తోంది…"
+ "సందేశం గడువు ముగిసింది లేదా అందుబాటులో లేదు"
+ "పరిమాణం: %1$s, గడువు: %2$s"
+ "పంపడం సాధ్యపడదు. చెల్లని స్వీకర్త."
+ "నెట్వర్క్లో సేవ సక్రియం చేయబడలేదు"
+ "నెట్వర్క్ సమస్య కారణంగా పంపడం సాధ్యపడలేదు"
+ "సందేశం గడువు ముగిసింది లేదా అందుబాటులో లేదు"
+ "(విషయం లేదు)"
+ "పంపినవారు తెలియదు"
+ "బట్వాడా చేయబడింది"
+ "%2$s నుండి %1$s సందేశాన్ని డౌన్లోడ్ చేయడం సాధ్యపడలేదు."
+ "మెమరీ తక్కువగా ఉన్న కారణంగా డేటాబేస్ నిర్వహణను పూర్తి చేయడం సాధ్యపడలేదు"
+ "సందేశం పంపబడలేదు"
+ "సందేశ సేవలో కొన్ని సందేశాలు పంపబడలేదు"
+
+ %d సంభాషణల్లో %d సందేశాలు
+ ఒక సంభాషణలో %d సందేశాలు
+
+ "సందేశం డౌన్లోడ్ కాలేదు"
+ "సందేశ సేవలో కొన్ని సందేశాలు డౌన్లోడ్ కాలేదు"
+
+ %d సంభాషణల్లో %d సందేశాలు
+ ఒక సంభాషణలో %d సందేశాలు
+
+ "%1$sకి సందేశం పంపబడలేదు"
+ "దయచేసి అత్యవసర సేవలకు వాయిస్ కాల్ చేయండి. మీరు %1$sకి పంపిన వచన సందేశాన్ని ప్రస్తుతం బట్వాడా చేయడం సాధ్యపడలేదు."
+
+ %d కొత్త సందేశాలు
+ కొత్త సందేశం
+
+ "ప్రారంభించు"
+ "కెమెరా అందుబాటులో లేదు"
+ "కెమెరా అందుబాటులో లేదు"
+ "వీడియో సంగ్రహణ అందుబాటులో లేదు"
+ "మీడియాను సేవ్ చేయడం సాధ్యపడదు"
+ "చిత్రం తీయడం సాధ్యపడలేదు"
+ "వెనుకకు"
+ "ఆర్కైవ్ చేయబడినవి"
+ "తొలగించు"
+ "ఆర్కైవ్ చేయి"
+ "ఆర్కైవ్ నుండి తీసివేయి"
+ "నోటిఫికేషన్లను ఆఫ్ చేయి"
+ "నోటిఫికేషన్లను ఆన్ చేయి"
+ "పరిచయాన్ని జోడించు"
+ "డౌన్లోడ్ చేయి"
+ "పంపు"
+ "తొలగించు"
+ "ఈ సందేశాన్ని తొలగించాలా?"
+ "ఈ చర్య రద్దు చేయబడదు."
+ "తొలగించు"
+
+ ఈ సంభాషణలను తొలగించాలా?
+ ఈ సంభాషణను తొలగించాలా?
+
+ "తొలగించు"
+ "రద్దు చేయి"
+ "వీరికి"
+ "బహుళ చిత్రాలను ఎంచుకోండి"
+ "ఎంపికను నిర్ధారించు"
+ "+%d"
+ "ఆడియోను రికార్డ్ చేయడం సాధ్యపడదు. మళ్లీ ప్రయత్నించండి."
+ "ఆడియోను ప్లే చేయడం సాధ్యపడదు. మళ్లీ ప్రయత్నించండి."
+ "ఆడియోను సేవ్ చేయడం సాధ్యపడలేదు. మళ్లీ ప్రయత్నించండి."
+ "తాకి ఉంచండి"
+ ", "
+ " "
+ ": "
+ " "
+ "చిత్రం"
+ "ఆడియో క్లిప్"
+ "వీడియో"
+ "పరిచయ కార్డు"
+ "డౌన్లోడ్ చేయి"
+ "SMS ద్వారా ప్రత్యుత్తరం ఇవ్వండి"
+ "MMSలో ప్రత్యు."
+ "ప్రత్యుత్తరం పంపండి"
+
+ %d మంది పాల్గొన్నారు
+ %d పాల్గొన్నారు
+
+ "నేను"
+ "పరిచయం బ్లాక్ చేయబడింది & ఆర్కైవ్ చేయబడింది"
+ "పరిచయం అన్బ్లాక్ చేయబడింది & అన్ఆర్కైవ్ చేయబడింది"
+ "%d ఆర్కైవ్ చేయబడింది/ఆర్కైవ్ చేయబడ్డాయి"
+ "%d ఆర్కైవ్ నుండి తీసివేయబడింది/ఆర్కైవ్ నుండి తీసివేయబడ్డాయి"
+ "నోటిఫికేషన్లు ఆఫ్ చేయబడ్డాయి"
+ "నోటిఫికేషన్లు ఆన్ చేయబడ్డాయి"
+ "అంతా సెట్ చేశారు. మళ్లీ పంపు తాకండి."
+ "సందేశ సేవ డిఫాల్ట్ SMS అనువర్తనంగా విజయవంతంగా సెట్ చేయబడింది."
+
+ జోడింపులను విస్మరించండి
+ జోడింపును విస్మరించండి
+
+ "ఆడియో జోడింపు"
+ "ఆడియో జోడింపుని ప్లే చేయండి"
+ "పాజ్ చేయి"
+ "%s నుండి సందేశం: %s."
+ "%s నుండి %s సందేశం పంపడంలో విఫలమైంది. సమయం: %s."
+ "%s నుండి %s సందేశం వచ్చింది. సమయం: %s."
+ "%sకి %s సందేశం పంపబడలేదు. సమయం: %s."
+ "%sకి %s సందేశం పంపబడుతోంది. సమయం: %s."
+ "%sకి %s సందేశం పంపడంలో విఫలమైంది. సమయం: %s."
+ "%sకి %s సందేశం పంపబడింది. సమయం: %s."
+ "%s నుండి %s సందేశం పంపడంలో విఫలమైంది. సమయం: %s. %s."
+ "%s నుండి %s సందేశం వచ్చింది. సమయం: %s. %s."
+ "%sకి %s సందేశం పంపబడలేదు. సమయం: %s."
+ "%sకి %s సందేశం పంపబడుతోంది. సమయం: %s."
+ "%sకి %s సందేశం పంపడంలో విఫలమైంది. సమయం: %s."
+ "%sకి %s సందేశం పంపబడింది. సమయం: %s."
+ "సందేశం పంపడం విఫలమైంది. మళ్లీ ప్రయత్నించడానికి తాకండి."
+ "%sతో సంభాషణ"
+ "విషయాన్ని తొలగించండి"
+ "వీడియోను క్యాప్చర్ చేయండి"
+ "నిలకడగా ఉన్న చిత్రాన్ని క్యాప్చర్ చేయండి"
+ "చిత్రం తీయండి"
+ "వీడియో రికార్డింగ్ను ప్రారంభించండి"
+ "కెమెరాను పూర్తి స్క్రీన్కి మార్చండి"
+ "ముందు మరియు వెనుక కెమెరా మోడ్ల మధ్య మారండి"
+ "రికార్డింగ్ను ఆపివేసి, వీడియోను చేర్చండి"
+ "వీడియో రికార్డ్ చేయడాన్ని ఆపివేయండి"
+ "సందేశ సేవ ఫోటోలు"
+
+ %d ఫోటోలు \"%s\" ఆల్బమ్కి సేవ్ చేయబడ్డాయి
+ %d ఫోటో \"%s\" ఆల్బమ్కి సేవ్ చేయబడింది
+
+
+ %d వీడియోలు \"%s\" ఆల్బమ్కి సేవ్ చేయబడ్డాయి
+ %d వీడియో \"%s\" ఆల్బమ్కి సేవ్ చేయబడింది
+
+
+ %d జోడింపులు \"%s\" ఆల్బమ్కి సేవ్ చేయబడ్డాయి
+ %d జోడింపు \"%s\" ఆల్బమ్కి సేవ్ చేయబడింది
+
+
+ %d జోడింపులు \"డౌన్లోడ్లు\"కి సేవ్ చేయబడ్డాయి
+ %d జోడింపు \"డౌన్లోడ్లు\"కి సేవ్ చేయబడింది
+
+
+ %d జోడింపులు సేవ్ చేయబడ్డాయి
+ %d జోడింపు సేవ్ చేయబడింది
+
+
+ %d జోడింపులను సేవ్ చేయలేకపోయింది
+ %d జోడింపును సేవ్ చేయలేకపోయింది
+
+ "MMS జోడింపు సేవ్ చేయబడింది"
+ "సెట్టింగ్లు"
+ "ఆర్కైవ్ చేయబడింది"
+ "మూసివేయి"
+ "MMS"
+ "అధునాతనం"
+ "డీబగ్"
+ "నోటిఫికేషన్లు"
+ "ధ్వని"
+ "నిశ్శబ్దం"
+ "వైబ్రేట్"
+ "బ్లాక్ చేయబడింది"
+ "SMS బట్వాడా నివేదికలు"
+ "మీరు పంపే ప్రతి SMS కోసం బట్వాడా నివేదికను అభ్యర్థించండి"
+ "స్వయంచాలకంగా తిరిగి పొందడం"
+ "MMS సందేశాలను స్వయంచాలకంగా పునరుద్ధరించండి"
+ "రోమింగ్లో ఉన్నప్పుడు స్వీయ-పునరుద్ధరణ"
+ "రోమింగ్లో ఉన్నప్పుడు MMSని స్వయంచాలకంగా తిరిగి పొందుతుంది"
+ "సమూహ సందేశాలు"
+ "ఒక సందేశాన్ని బహుళ స్వీకర్తలకు పంపాల్సినప్పుడు MMSను ఉపయోగించండి"
+ "డిఫాల్ట్ SMS అనువర్తనం"
+ "డిఫాల్ట్ SMS అనువర్తనం"
+
+
+ "మీ ఫోన్ నంబర్"
+ "తెలియదు"
+ "అవుట్గోయింగ్ సందేశ ధ్వనులు"
+ "SMSను డంప్ చేయండి"
+ "స్వీకరించబడిన SMS ప్రాసెస్ చేయబడని డేటాను బాహ్య నిల్వ ఫైల్లోకి డంప్ చేయండి"
+ "MMSను డంప్ చేయండి"
+ "స్వీకరించబడిన MMS ప్రాసెస్ చేయబడని డేటాను బాహ్య నిల్వ ఫైల్లోకి డంప్ చేయండి"
+ "వైర్లెస్ హెచ్చరికలు"
+ "సందేశ ఎంపికలు"
+ "వచనాన్ని కాపీ చేయి"
+ "వివరాలను వీక్షించండి"
+ "తొలగించు"
+ "ఫార్వార్డ్ చేయండి"
+ "సందేశ వివరాలు"
+ "రకం: "
+ "వచన సందేశం"
+ "మల్టీమీడియా సందేశం"
+ "వీరి నుండి: "
+ "వీరికి: "
+ "పంపినది: "
+ "స్వీకరించినది: "
+ "విషయం: "
+ "పరిమాణం: "
+ "ప్రాధాన్యత: "
+ "SIM: "
+ "అధికం"
+ "సాధారణం"
+ "తక్కువ"
+ "SIM %s"
+ "లేఖరి చిరునామా దాచబడింది"
+ "జోడింపులు లోడ్ అవుతున్నప్పుడు సందేశాన్ని పంపలేరు."
+ "జోడింపుని లోడ్ చేయడం సాధ్యపడదు. మళ్లీ ప్రయత్నించండి."
+ "నెట్వర్క్ సిద్ధంగా లేదు. మళ్లీ ప్రయత్నించండి."
+ "వచనాన్ని తొలగించు"
+ "వచనం మరియు సంఖ్యలను నమోదు చేయడానికి వాటిని అటుఇటు మార్చు"
+ "మరింతమంది పాల్గొనేవారిని జోడించు"
+ "పాల్గొనేవారిని నిర్ధారించండి"
+ "కొత్త సంభాషణను ప్రారంభించండి"
+ "ఈ అంశాన్ని ఎంచుకోండి"
+ "వీడియోను ప్లే చేయండి"
+ "వ్యక్తులు & ఎంపికలు"
+ "డీబగ్"
+ "వ్యక్తులు & ఎంపికలు"
+ "సాధారణం"
+ "ఈ సంభాషణలో పాల్గొన్న వ్యక్తులు"
+ "కాల్ చేయి"
+ "సందేశాన్ని పంపండి"
+ "సందేశాన్ని <small>%s నుండి</small><br/>పంపు"
+
+ ఫోటోలను పంపండి
+ ఫోటోను పంపండి
+
+
+ ఆడియోలను పంపండి
+ ఆడియోను పంపండి
+
+
+ వీడియోలను పంపండి
+ వీడియోను పంపండి
+
+
+ పరిచయ కార్డ్లను పంపండి
+ పరిచయ కార్డ్ను పంపండి
+
+
+ జోడింపులను పంపండి
+ జోడింపుని పంపండి
+
+
+ %d జోడింపులు పంపడానికి సిద్ధంగా ఉన్నాయి
+ ఒక జోడింపు పంపడానికి సిద్ధంగా ఉంది
+
+ "అభిప్రాయం పంపండి"
+ "Google Play Storeలో వీక్షించండి"
+ "సంస్కరణ సమాచారం"
+ "సంస్కరణ %1$s"
+ "ఓపెన్ సోర్స్ లైసెన్స్లు"
+ "నోటిఫికేషన్లు"
+ "జోడింపు పరిమితిని చేరుకున్నారు"
+ "జోడింపుని లోడ్ చేయడంలో విఫలమైంది."
+ "పరిచయాలకు జోడించాలా?"
+ "పరిచయాన్ని జోడించు"
+ "విషయం"
+ "విషయం: "
+ "%s%s"
+ "పరిచయ కార్డ్ను లోడ్ చేస్తోంది"
+ "పరిచయ కార్డ్ను లోడ్ చేయడం సాధ్యపడలేదు"
+ "పరిచయ కార్డ్ను వీక్షించండి"
+
+ %d పరిచయాలు
+ %d పరిచయం
+
+ "పరిచయ కార్డ్లు"
+ "పుట్టినరోజు"
+ "గమనికలు"
+ "సందేశాన్ని ఫార్వార్డ్ చేయండి"
+ "ప్రత్యుత్తరం"
+ "+1"
+ "+%d"
+ "SMS నిలిపివేయబడింది"
+ "పంపడానికి, సందేశ సేవను డిఫాల్ట్ SMS అనువర్తనంగా సెట్ చేయండి"
+ "సందేశ సేవను డిఫాల్ట్ SMS అనువర్తనంగా సెట్ చేయండి"
+ "మార్చు"
+ "సందేశాలు స్వీకరించడానికి, సందేశ సేవను డిఫాల్ట్ SMS అనువర్తనంగా సెట్ చేయండి"
+ "SMS సందేశాలు పంపడానికి ప్రాధాన్య SIM ఏదీ ఎంచుకోలేదు"
+ "ఈ అనువర్తనాన్ని పరికరం యజమాని అనుమతించలేదు."
+ "సరే"
+ "సంభాషణలో చాలా ఎక్కువ మంది పాల్గొన్నారు"
+
+ పరిచయాలు చెల్లవు
+ పరిచయం చెల్లదు
+
+ "కెమెరా చిత్రాన్ని లోడ్ చేయడం సాధ్యపడలేదు"
+ "మీరు: "
+ "%s: "
+ "చిత్తుప్రతి"
+ "మీరు కొత్త సంభాషణను ప్రారంభిస్తే, అది ఇక్కడ జాబితా కావడం మీకు కనిపిస్తుంది"
+ "ఆర్కైవ్ చేసిన సంభాషణలు ఇక్కడ కనిపిస్తాయి"
+ "సంభాషణలను లోడ్ చేస్తోంది…"
+ "చిత్రం"
+ "ఆడియో క్లిప్"
+ "వీడియో"
+ "పరిచయ కార్డ్"
+ "MMS"
+ "చర్య రద్దు చేయి"
+ "మళ్లీ ప్రయత్నించు"
+ "కొత్త సందేశాన్ని ప్రారంభించడానికి పరిచయం పేరు లేదా ఫోన్ నంబర్ని నమోదు చేయండి"
+ "బ్లాక్ చేయి"
+ "%sని బ్లాక్ చేయి"
+ "%sని అన్బ్లాక్ చేయి"
+ "%sని బ్లాక్ చేయాలా?"
+ "మీరు ఈ నంబర్ నుండి సందేశాలను స్వీకరించడం కొనసాగుతుంది కానీ ఇకపై వాటి గురించి తెలియజేయబడదు. ఈ సంభాషణ ఆర్కైవ్ చేయబడుతుంది."
+ "బ్లాక్ చేయబడిన పరిచయాలు"
+ "అన్బ్లాక్ చేయి"
+ "బ్లాక్ చేయబడిన పరిచయాలు"
+ "పత్రం లైబ్రరీ నుండి చిత్రాన్ని ఎంచుకోండి"
+ "సందేశం పంపబడుతోంది"
+ "సందేశం పంపబడింది"
+ "సెల్యులార్ డేటా ఆఫ్ చేయబడింది. మీ సెట్టింగ్లను తనిఖీ చేయండి."
+ "ఎయిర్ప్లైన్ మోడ్లో సందేశాలు పంపడం సాధ్యపడదు"
+ "సందేశం పంపడం సాధ్యపడలేదు"
+ "సందేశం డౌన్లోడ్ చేయబడింది"
+ "సెల్యులార్ డేటా ఆఫ్ చేయబడింది. మీ సెట్టింగ్లను తనిఖీ చేయండి."
+ "ఎయిర్ప్లైన్ మోడ్లో సందేశాలను డౌన్లోడ్ చేయడం సాధ్యపడదు"
+ "సందేశాన్ని డౌన్లోడ్ చేయడం సాధ్యపడలేదు"
+ "సున్నా"
+ "ఒకటి"
+ "రెండు"
+ "మూడు"
+ "నాలుగు"
+ "ఐదు"
+ "ఆరు"
+ "ఏడు"
+ "ఎనిమిది"
+ "తొమ్మిది"
+ "%1$sతో సందేశం పంపలేరు, దోషం %2$d"
+ "తెలియని క్యారియర్తో సందేశం పంపలేరు, లోపం %1$d"
+ "ఫార్వా.: %s"
+ "సందేశం పంపబడలేదు: నెట్వర్క్లో సేవ సక్రియం కాలేదు"
+ "సందేశం పంపబడలేదు: గమ్యస్థాన చిరునామా చెల్లదు"
+ "సందేశం పంపబడలేదు: సందేశం చెల్లదు"
+ "సందేశం పంపబడలేదు: మద్దతు లేని కంటెంట్"
+ "సందేశం పంపబడలేదు: మద్దతు లేని సందేశం"
+ "సందేశం పంపబడలేదు: చాలా పెద్దది"
+ "కొత్త సందేశం"
+ "వీక్షించండి"
+ "చిత్రం"
+ "సముచిత అనువర్తనాన్ని కనుగొనడం సాధ్యపడలేదు"
+ "స్వీకర్తను తీసివేయండి"
+ "కొత్త సందేశం"
+ "రద్దు చేయి"
+ "ప్రాప్యత స్థానాన్ని సవరించు"
+ "సెట్ చేయలేదు"
+ "పేరు"
+ "APN"
+ "MMSC"
+ "MMS ప్రాక్సీ"
+ "MMS పోర్ట్"
+ "MCC"
+ "MNC"
+ "APN రకం"
+ "APNను తొలగించు"
+ "కొత్త APN"
+ "సేవ్ చేయి"
+ "విస్మరించు"
+ "పేరు ఫీల్డ్ ఖాళీగా ఉండకూడదు."
+ "APN ఖాళీగా ఉండకూడదు."
+ "MCC ఫీల్డ్లో తప్పనిసరిగా 3 అంకెలు ఉండాలి."
+ "MNC ఫీల్డ్లో తప్పనిసరిగా 2 లేదా 3 అంకెలు ఉండాలి."
+ "డిఫాల్ట్ APN సెట్టింగ్లను పునరుద్ధరిస్తోంది."
+ "డిఫాల్ట్కు రీసెట్ చేయి"
+ "డిఫాల్ట్ APN సెట్టింగ్లను రీసెట్ చేయడం పూర్తయింది."
+ "శీర్షిక లేదు"
+ "ప్రాప్యత స్థానం పేర్లు"
+ "APNలు"
+ "కొత్త APN"
+ "ప్రాప్యత స్థానం పేరు సెట్టింగ్లు ఈ వినియోగదారుకి అందుబాటులో లేవు"
+ "క్లిప్బోర్డ్కు కాపీ చేయాలా?"
+ "కాపీ చేయి"
+ "%sకి"
+ "సాధారణం"
+ "అధునాతనం"
+ "సాధారణ సెట్టింగ్లు"
+ "అధునాతన సెట్టింగ్లు"
+ "\"%s\" SIM"
+ "స్వీకర్తలందరికీ వేర్వేరుగా SMS సందేశాలను పంపండి. ఏవైనా ప్రత్యుత్తరాలను మీరు మాత్రమే పొందుతారు"
+ "స్వీకర్తలందరికీ ఒకే MMS పంపండి"
+ "తెలియని నంబర్"
+ "కొత్త సందేశం"
+ "కొత్త సందేశం."
+ "SIM ఎంపిక సాధనం"
+ "%1$s ఎంచుకోబడింది, SIM ఎంపిక"
+ "విషయాన్ని సవరించు"
+ "SIM ఎంచుకోండి లేదా విషయాన్ని సవరించండి"
+ "ఆడియోను రికార్డ్ చేయడానికి తాకి, అలాగే ఉంచండి"
+ "కొత్త సంభాషణను ప్రారంభించండి"
+ "సందేశ సేవ"
+ "సందేశ సేవ జాబితా"
+ "సందేశ సేవ"
+ "కొత్త సందేశం"
+ "సంభాషణ జాబితా"
+ "సంభాషణలను లోడ్ చేస్తోంది"
+ "సందేశాలు లోడ్ అవుతున్నాయి"
+ "మరిన్ని సంభాషణలను వీక్షించండి"
+ "మరిన్ని సందేశాలను వీక్షించండి"
+ "సంభాషణ తొలగించబడింది"
+ "సంభాషణ తొలగించబడింది. విభిన్న సందేశ సేవ సంభాషణను చూపడానికి తాకండి"
+ "బ్లాక్ చేయబడ్డారు"
+ "అన్బ్లాక్ చేయబడ్డారు"
+ "నిల్వ స్థలంలో ఖాళీ తక్కువగా ఉంది. కొంత డేటా కోల్పోవచ్చు."
+ "జోడింపులను ఎంచుకోండి"
+ "ఎంపికను నిర్ధారించు"
+ "%d ఎంచుకోబడింది/ఎంచుకోబడ్డాయి"
+ "దయచేసి ఒకటి లేదా అంతకంటే ఎక్కువ జోడింపులను తీసివేసి, మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ సందేశం పంపడాన్ని ప్రయత్నించవచ్చు, కానీ ఒకటి లేదా అంతకంటే ఎక్కువ జోడింపులను తీసివేస్తే మినహా అది బట్వాడా చేయబడదు."
+ "మీరు ఒక సందేశానికి ఒక వీడియోను మాత్రమే పంపగలరు. దయచేసి అదనపు వీడియోలను తీసివేసి, ఆపై మళ్లీ ప్రయత్నించండి."
+ "సందేశ సేవ జోడింపును లోడ్ చేయడంలో విఫలమైంది."
+ "ఏదేమైనా పంపు"
+ "సంభాషణను ప్రారంభించలేరు"
+ "%1$s (%2$s)"
+ "%s ఎంచుకోబడింది"
+
diff --git a/res/values-th/arrays.xml b/res/values-th/arrays.xml
new file mode 100644
index 0000000..749516e
--- /dev/null
+++ b/res/values-th/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "ไม่มีเรื่อง"
+ "ไม่มีชื่อเรื่อง"
+
+
+ "ใช่"
+ "ไม่ใช่"
+ "ตกลง"
+ "อิอิ"
+ "ขอบคุณ"
+ "ฉันเห็นด้วย"
+ "เยี่ยมเลย"
+ "เดินทางอยู่"
+ "ตกลง ฉันจะติดต่อกลับมาในภายหลัง"
+ ":)"
+ ":("
+
+
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
new file mode 100644
index 0000000..d191be9
--- /dev/null
+++ b/res/values-th/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "การรับส่งข้อความ"
+ "การรับส่งข้อความ"
+ "เลือกการสนทนา"
+ "การตั้งค่า"
+ "ส่งข้อความ"
+ "เพิ่มไฟล์แนบ"
+ "ความช่วยเหลือ"
+ "ยินดีต้อนรับ"
+ "ข้าม"
+ "ถัดไป >"
+ "ถัดไป"
+ "ออก"
+ "การตั้งค่า >"
+ "การตั้งค่า"
+ "การรับส่งข้อความต้องใช้สิทธิ์เข้าถึง SMS, โทรศัพท์ และรายชื่อติดต่อ"
+ "คุณสามารถเปลี่ยนแปลงสิทธิ์ได้ในการตั้งค่า > แอป > การรับส่งข้อความ > สิทธิ์"
+ "คุณสามารถเปลี่ยนแปลงสิทธิ์ได้ในการตั้งค่า แอป การรับส่งข้อความ และสิทธิ์"
+ "ผู้ที่ติดต่อบ่อย"
+ "รายชื่อติดต่อทั้งหมด"
+ "ส่งไปยัง %s"
+ "จับภาพหรือวิดีโอ"
+ "เลือกรูปภาพจากอุปกรณ์นี้"
+ "บันทึกเสียง"
+ "เลือกรูปภาพ"
+ "เลือกสื่อแล้ว"
+ "ไม่มีการเลือกสื่อ"
+ "เลือกไว้ %d รายการ"
+ "ภาพเมื่อวันที่ %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "ภาพ"
+ "บันทึกเสียง"
+ "แชร์"
+ "เดี๋ยวนี้เอง"
+ "ตอนนี้"
+
+ %d นาที
+ %d นาที
+
+
+ %d ชั่วโมง
+ %d ชั่วโมง
+
+
+ %d วัน
+ %d วัน
+
+
+ %d สัปดาห์
+ 1 สัปดาห์
+
+
+ %d เดือน
+ 1 เดือน
+
+
+ %d ปี
+ 1 ปี
+
+ "ข้อความคลาส 0"
+ "บันทึก"
+ "อุปกรณ์มีพื้นที่เหลือน้อย การรับส่งข้อความจะลบข้อความเก่าโดยอัตโนมัติเพื่อเพิ่มพื้นที่ว่าง"
+ "พื้นที่จัดเก็บเหลือน้อย"
+ "การรับส่งข้อความอาจไม่ส่งหรือรับข้อความจนกว่าจะมีพื้นที่เพิ่มมากขึ้นบนอุปกรณ์"
+ "พื้นที่จัดเก็บ SMS เหลือน้อย คุณอาจต้องลบข้อความ"
+ "ยืนยันหมายเลขโทรศัพท์"
+ "ขั้นตอนที่ทำเพียงครั้งเดียวนี้จะช่วยให้การรับส่งข้อความส่งข้อความของกลุ่มได้อย่างถูกต้อง"
+ "หมายเลขโทรศัพท์"
+ "ลบข้อความทั้งหมดที่มีสื่อ"
+ "ลบข้อความที่เก่ากว่า %s"
+ "ลบข้อความที่เก่ากว่า %s โดยอัตโนมัติ"
+ "ไม่สนใจ"
+ "ลบข้อความทั้งหมดที่มีสื่อใช่ไหม"
+ "ลบข้อความที่เก่ากว่า %s ใช่ไหม"
+ "ลบข้อความที่เก่ากว่า %s และเปิดการลบอัตโนมัติใช่ไหม"
+ "%s กล่าว"
+ "คุณกล่าว"
+ "ข้อความจาก %s"
+ "คุณส่งข้อความแล้ว"
+ "กำลังส่ง…"
+ "ไม่สามารถส่ง แตะเพื่อลองอีกครั้ง"
+ "ไม่สามารถส่ง ลองอีกครั้ง…"
+ "ส่งอีกครั้งหรือลบ"
+ "โปรดโทรไปที่ฝ่ายบริการฉุกเฉิน ระบบไม่สามารถส่งข้อความของคุณได้ในขณะนี้"
+ "ล้มเหลว"
+ "มีข้อความ MMS ใหม่ให้ดาวน์โหลด"
+ "ข้อความ MMS ใหม่"
+ "ไม่สามารถดาวน์โหลดได้"
+ "แตะเพื่อลองอีกครั้ง"
+ "แตะเพื่อดาวน์โหลด"
+ "ดาวน์โหลดหรือลบ"
+ "กำลังดาวน์โหลด…"
+ "ข้อความหมดอายุหรือไม่สามารถใช้ได้"
+ "ขนาด: %1$s หมดอายุ: %2$s"
+ "ไม่สามารถส่งได้ ผู้รับไม่ถูกต้อง"
+ "ไม่ได้เปิดใช้บริการบนเครือข่าย"
+ "ไม่สามารถส่งได้เนื่องจากปัญหาของเครือข่าย"
+ "ข้อความหมดอายุหรือไม่สามารถใช้ได้"
+ "(ไม่มีเรื่อง)"
+ "ไม่ทราบผู้ส่ง"
+ "ส่งแล้ว"
+ "ไม่สามารถดาวน์โหลดข้อความ %1$s จาก %2$s"
+ "ไม่สามารถดำเนินการฐานข้อมูลให้เสร็จสิ้นเนื่องจากมีหน่วยความจำเหลือน้อย"
+ "ไม่ได้ส่งข้อความ"
+ "ไม่ได้ส่งข้อความบางรายการในการรับส่งข้อความ"
+
+ %d ข้อความใน %d การสนทนา
+ %d ข้อความใน 1 การสนทนา
+
+ "ข้อความไม่ได้รับการดาวน์โหลด"
+ "ไม่ได้ดาวน์โหลดข้อความบางรายการในการรับส่งข้อความ"
+
+ %d ข้อความใน %d การสนทนา
+ %d ข้อความใน 1 การสนทนา
+
+ "ไม่ได้ส่งข้อความถึง %1$s"
+ "โปรดโทรไปที่ฝ่ายบริการฉุกเฉิน ระบบไม่สามารถส่งข้อความของคุณไปยัง %1$s ได้ในขณะนี้"
+
+ %d ข้อความใหม่
+ ข้อความใหม่
+
+ "เริ่ม"
+ "กล้องไม่สามารถใช้ได้"
+ "กล้องไม่สามารถใช้ได้"
+ "การจับภาพวิดีโอไม่พร้อมใช้งาน"
+ "ไม่สามารถบันทึกสื่อได้"
+ "ไม่สามารถถ่ายภาพ"
+ "กลับ"
+ "เก็บถาวรแล้ว"
+ "ลบ"
+ "เก็บถาวร"
+ "ยกเลิกการเก็บถาวร"
+ "ปิดการแจ้งเตือน"
+ "เปิดการแจ้งเตือน"
+ "เพิ่มรายชื่อติดต่อ"
+ "ดาวน์โหลด"
+ "ส่ง"
+ "ลบ"
+ "ลบข้อความนี้ไหม"
+ "การดำเนินการนี้ไม่สามารถยกเลิกได้"
+ "ลบ"
+
+ ลบการสนทนาเหล่านี้ใช่ไหม
+ ลบการสนทนานี้ใช่ไหม
+
+ "ลบ"
+ "ยกเลิก"
+ "ถึง"
+ "เลือกภาพหลายภาพ"
+ "ยืนยันการเลือก"
+ "+%d"
+ "ไม่สามารถบันทึกเสียงได้ ลองอีกครั้ง"
+ "ไม่สามารถเล่นเสียงได้ ลองอีกครั้ง"
+ "ไม่สามารถบันทึกเสียงได้ ลองอีกครั้ง"
+ "แตะค้างไว้"
+ ", "
+ " "
+ ": "
+ " "
+ "ภาพ"
+ "คลิปเสียง"
+ "วิดีโอ"
+ "บัตรติดต่อ"
+ "ดาวน์โหลด"
+ "ตอบกลับทาง SMS"
+ "ตอบกลับผ่าน MMS"
+ "ตอบ"
+
+ ผู้เข้าร่วม %d คน
+ ผู้เข้าร่วม %d คน
+
+ "ฉัน"
+ "บล็อกและเก็บผู้ติดต่อแล้ว"
+ "เลิกบล็อกและเลิกเก็บรายชื่อติดต่อแล้ว"
+ "เก็บแล้ว %d รายการ"
+ "เลิกเก็บแล้ว %d รายการ"
+ "ปิดการแจ้งเตือนแล้ว"
+ "เปิดการแจ้งเตือนแล้ว"
+ "ตั้งค่าเรียบร้อย แตะ \"ส่ง\" อีกครั้ง"
+ "ตั้งค่าการรับส่งข้อความเป็นแอป SMS ค่าเริ่มต้นเรียบร้อยแล้ว"
+
+ ยกเลิกไฟล์แนบ
+ ยกเลิกไฟล์แนบ
+
+ "ไฟล์แนบเสียง"
+ "เล่นไฟล์เสียงที่แนบอยู่"
+ "หยุดชั่วคราว"
+ "ข้อความจาก %s: %s"
+ "ไม่สามารถรับข้อความจาก %s: %s เวลา: %s"
+ "ข้อความจาก %s: %s เวลา: %s"
+ "ข้อความที่ยังไม่ได้ส่งถึง %s: %s เวลา: %s"
+ "กำลังส่งข้อความถึง %s: %s เวลา: %s"
+ "ไม่สามารถส่งข้อความถึง %s: %s เวลา: %s"
+ "ส่งข้อความถึง %s: %s เวลา: %s"
+ "ไม่สามารถรับข้อความจาก %s: %s เวลา: %s%s"
+ "ข้อความจาก %s: %s เวลา: %s%s"
+ "ข้อความที่ยังไม่ได้ส่งถึง %s: %s เวลา: %s"
+ "กำลังส่งข้อความถึง %s: %s เวลา: %s"
+ "ไม่สามารถส่งข้อความถึง %s: %s เวลา: %s"
+ "ส่งข้อความถึง %s: %s เวลา: %s"
+ "ข้อความล้มเหลว แตะเพื่อลองใหม่"
+ "การสนทนากับ %s"
+ "ลบเรื่อง"
+ "จับภาพวิดีโอ"
+ "จับภาพนิ่ง"
+ "ถ่ายภาพ"
+ "เริ่มบันทึกวิดีโอ"
+ "สลับไปยังกล้องแบบเต็มหน้าจอ"
+ "สลับระหว่างกล้องหน้าและกล้องหลัง"
+ "หยุดการบันทึกและแนบวิดีโอ"
+ "หยุดการบันทึกวิดีโอ"
+ "รูปภาพในการรับส่งข้อความ"
+
+ บันทึก %d ภาพไปยังอัลบั้ม \"%s\" แล้ว
+ บันทึก %d ภาพไปยังอัลบั้ม \"%s\" แล้ว
+
+
+ บันทึกวิดีโอ %d รายการไปยังอัลบั้ม \"%s\" แล้ว
+ บันทึกวิดีโอ %d รายการไปยังอัลบั้ม \"%s\" แล้ว
+
+
+ บันทึก %d ไฟล์แนบไปยังอัลบั้ม \"%s\" แล้ว
+ บันทึก %d ไฟล์แนบไปยังอัลบั้ม \"%s\" แล้ว
+
+
+ บันทึก %d ไฟล์แนบไปยัง \"ดาวน์โหลด\" แล้ว
+ บันทึก %d ไฟล์แนบไปยัง \"ดาวน์โหลด\" แล้ว
+
+
+ บันทึกไฟล์แนบ %d รายการแล้ว
+ บันทึกไฟล์แนบ %d รายการแล้ว
+
+
+ ไม่สามารถบันทึกไฟล์แนบ %d รายการ
+ ไม่สามารถบันทึกไฟล์แนบ %d รายการ
+
+ "ไฟล์แนบของ MMS ที่บันทึกไว้"
+ "การตั้งค่า"
+ "เก็บถาวรแล้ว"
+ "ปิด"
+ "MMS"
+ "ขั้นสูง"
+ "แก้ไขข้อบกพร่อง"
+ "การแจ้งเตือน"
+ "เสียง"
+ "เงียบ"
+ "สั่น"
+ "ถูกบล็อก"
+ "รายงานการส่ง SMS"
+ "ขอรายงานการส่ง SMS แต่ละครั้ง"
+ "เรียกอัตโนมัติ"
+ "เรียกดูข้อความ MMS อัตโนมัติ"
+ "เรียกข้อความอัตโนมัติขณะโรมมิ่ง"
+ "ดึง MMS โดยอัตโนมัติเมื่อโรมมิ่ง"
+ "การรับส่งข้อความแบบกลุ่ม"
+ "ใช้ MMS ส่งข้อความเดียวเมื่อมีผู้รับหลายราย"
+ "แอป SMS เริ่มต้น"
+ "แอป SMS เริ่มต้น"
+
+
+ "หมายเลขโทรศัพท์ของคุณ"
+ "ไม่รู้จัก"
+ "เสียงข้อความขาออก"
+ "ถ่ายโอน SMS"
+ "ถ่ายโอนข้อมูลดิบของ SMS ที่ได้รับลงในไฟล์พื้นที่จัดเก็บข้อมูลภายนอก"
+ "ถ่ายโอน MMS"
+ "ถ่ายโอนข้อมูลดิบของ MMS ที่ได้รับลงในไฟล์พื้นที่จัดเก็บข้อมูลภายนอก"
+ "การแจ้งเตือนแบบไร้สาย"
+ "ตัวเลือกข้อความ"
+ "คัดลอกข้อความ"
+ "ดูรายละเอียด"
+ "ลบ"
+ "ส่งต่อ"
+ "รายละเอียดข้อความ"
+ "ประเภท: "
+ "ข้อความ"
+ "ข้อความมัลติมีเดีย"
+ "จาก: "
+ "ถึง: "
+ "ส่งแล้ว: "
+ "ได้รับ: "
+ "เรื่อง: "
+ "ขนาด: "
+ "ลำดับความสำคัญ: "
+ "ซิม: "
+ "สูง"
+ "ปกติ"
+ "ต่ำ"
+ "ซิม %s"
+ "ที่อยู่ผู้ส่งที่ซ่อนไว้"
+ "ไม่สามารถส่งข้อความเสียงขณะโหลดเอกสารแนบ"
+ "ไม่สามารถโหลดไฟล์แนบได้ ลองอีกครั้ง"
+ "เครือข่ายยังไม่พร้อม ลองอีกครั้ง"
+ "ลบข้อความ"
+ "สลับระหว่างการป้อนข้อความและตัวเลข"
+ "เพิ่มผู้เข้าร่วมเพิ่มเติม"
+ "ยืนยันผู้เข้าร่วม"
+ "เริ่มต้นการสนทนาใหม่"
+ "เลือกรายการนี้"
+ "เล่นวิดีโอ"
+ "ผู้คนและตัวเลือก"
+ "แก้ไขข้อบกพร่อง"
+ "ผู้คนและตัวเลือก"
+ "ทั่วไป"
+ "ผู้เข้าร่วมการสนทนานี้"
+ "โทรออก"
+ "ส่งข้อความ"
+ "ส่งข้อความ<br/><small>จาก %s</small>"
+
+ ส่งรูปภาพ
+ ส่งรูปภาพ
+
+
+ ส่งไฟล์เสียง
+ ส่งไฟล์เสียง
+
+
+ ส่งวิดีโอ
+ ส่งวิดีโอ
+
+
+ ส่งการ์ดรายชื่อติดต่อ
+ ส่งการ์ดรายชื่อติดต่อ
+
+
+ ส่งไฟล์แนบ
+ ส่งไฟล์แนบ
+
+
+ %d ไฟล์แนบพร้อมส่ง
+ 1 ไฟล์แนบพร้อมส่ง
+
+ "ส่งความคิดเห็น"
+ "ดูใน Google Play สโตร์"
+ "ข้อมูลเวอร์ชัน"
+ "เวอร์ชัน %1$s"
+ "สัญญาอนุญาตสำหรับโอเพนซอร์ส"
+ "การแจ้งเตือน"
+ "ถึงขีดจำกัดของไฟล์แนบแล้ว"
+ "ไม่สามารถโหลดไฟล์แนบได้"
+ "เพิ่มในรายชื่อติดต่อใช่ไหม"
+ "เพิ่มรายชื่อติดต่อ"
+ "เรื่อง"
+ "เรื่อง: "
+ "%s%s"
+ "กำลังโหลดบัตรติดต่อ"
+ "ไม่สามารถโหลดการ์ดรายชื่อติดต่อได้"
+ "ดูบัตรติดต่อ"
+
+ รายชื่อติดต่อ %d ราย
+ รายชื่อติดต่อ %d ราย
+
+ "การ์ดรายชื่อติดต่อ"
+ "วันเกิด"
+ "บันทึก"
+ "ส่งต่อข้อความ"
+ "ตอบ"
+ "+1"
+ "+%d"
+ "ปิดใช้ SMS แล้ว"
+ "ในการส่งข้อความ ให้ตั้งค่าการรับส่งข้อความเป็นแอป SMS ค่าเริ่มต้น"
+ "ตั้งค่าการรับส่งข้อความเป็นแอป SMS ค่าเริ่มต้น"
+ "เปลี่ยน"
+ "ในการรับข้อความ ให้ตั้งค่าการรับส่งข้อความเป็นแอป SMS ค่าเริ่มต้น"
+ "ยังไม่ได้เลือกซิมสำหรับการส่งข้อความ SMS"
+ "เจ้าของอุปกรณ์ไม่อนุญาตแอปนี้"
+ "ตกลง"
+ "มีผู้เข้าร่วมในการสนทนามากเกินไป"
+
+ รายชื่อติดต่อไม่ถูกต้อง
+ รายชื่อติดต่อไม่ถูกต้อง
+
+ "ไม่สามารถโหลดภาพจากกล้องได้"
+ "คุณ: "
+ "%s: "
+ "ข้อความร่าง"
+ "เมื่อคุณเริ่มการสนทนาใหม่ คุณจะเห็นการสนทนาใหม่ที่นี่"
+ "การสนทนาที่เก็บไว้จะปรากฏที่นี่"
+ "กำลังโหลดการสนทนา…"
+ "ภาพ"
+ "คลิปเสียง"
+ "วิดีโอ"
+ "บัตรติดต่อ"
+ "MMS"
+ "เลิกทำ"
+ "ลองอีกครั้ง"
+ "ป้อนชื่อผู้ติดต่อหรือหมายเลขโทรศัพท์เพื่อเริ่มเขียนข้อความใหม่"
+ "บล็อก"
+ "บล็อก %s"
+ "เลิกบล็อก %s"
+ "ต้องการบล็อก %s ไหม"
+ "คุณจะยังคงได้รับข้อความจากหมายเลขนี้ต่อไปแต่จะไม่ได้รับการแจ้งเตือนอีก ระบบจะเก็บการสนทนานี้ไว้"
+ "รายชื่อที่บล็อกไว้"
+ "เลิกบล็อก"
+ "รายชื่อที่บล็อกไว้"
+ "เลือกรูปภาพจากห้องสมุดเอกสาร"
+ "กำลังส่งข้อความ"
+ "ส่งข้อความแล้ว"
+ "ข้อมูลมือถือปิดอยู่ โปรดตรวจสอบการตั้งค่า"
+ "ไม่สามารถส่งข้อความในโหมดบนเครื่องบินได้"
+ "ไม่สามารถส่งข้อความนี้"
+ "ดาวน์โหลดข้อความแล้ว"
+ "ข้อมูลมือถือปิดอยู่ โปรดตรวจสอบการตั้งค่า"
+ "ไม่สามารถดาวน์โหลดข้อความในโหมดบนเครื่องบินได้"
+ "ไม่สามารถดาวน์โหลดข้อความได้"
+ "ศูนย์"
+ "หนึ่ง"
+ "สอง"
+ "สาม"
+ "สี่"
+ "ห้า"
+ "หก"
+ "เจ็ด"
+ "แปด"
+ "เก้า"
+ "ไม่สามารถส่งข้อความผ่าน %1$s ข้อผิดพลาด %2$d"
+ "ไม่สามารถส่งข้อความผ่านผู้ให้บริการที่ไม่รู้จัก ข้อผิดพลาด %1$d"
+ "ส่งต่อ: %s"
+ "ไม่มีการส่งข้อความ เพราะยังไม่เปิดใช้งานบริการบนเครือข่าย"
+ "ไม่มีการส่งข้อความ: ที่อยู่ปลายทางไม่ถูกต้อง"
+ "ไม่มีการส่งข้อความ: ข้อความไม่ถูกต้อง"
+ "ไม่มีการส่งข้อความ: ระบบไม่สนับสนุนเนื้อหา"
+ "ไม่มีการส่งข้อความ: ระบบไม่สนับสนุนข้อความ"
+ "ไม่ได้ส่งข้อความ: ขนาดใหญ่เกินไป"
+ "ข้อความใหม่"
+ "ดู"
+ "รูปภาพ"
+ "ไม่สามารถหาแอปพลิเคชันที่เหมาะสม"
+ "นำผู้รับออก"
+ "ข้อความใหม่"
+ "ยกเลิก"
+ "แก้ไขจุดเข้าใช้งาน"
+ "ไม่ได้ตั้งค่า"
+ "ชื่อ"
+ "APN"
+ "MMSC"
+ "พร็อกซี MMS"
+ "พอร์ต MMS"
+ "MCC"
+ "MNC"
+ "ประเภท APN"
+ "ลบ APN"
+ "APN ใหม่"
+ "บันทึก"
+ "ยกเลิก"
+ "ต้องใส่ข้อมูลในช่องชื่อ"
+ "ต้องใส่ข้อมูล APN"
+ "ช่อง MCC ต้องเป็นเลข 3 หลัก"
+ "ช่อง MNC ต้องเป็นเลข 2 หรือ 3 หลัก"
+ "กำลังคืนการตั้งค่า APN เริ่มต้น"
+ "รีเซ็ตเป็นค่าเริ่มต้น"
+ "รีเซ็ตการตั้งค่า APN กลับเป็นค่าเริ่มต้นเรียบร้อยแล้ว"
+ "ไม่มีชื่อ"
+ "ชื่อจุดเข้าใช้งาน"
+ "APN"
+ "APN ใหม่"
+ "การตั้งค่าจุดเข้าใช้งานไม่สามารถใช้ได้สำหรับผู้ใช้รายนี้"
+ "คัดลอกไปยังคลิปบอร์ดไหม"
+ "คัดลอก"
+ "ถึง %s"
+ "ทั่วไป"
+ "ขั้นสูง"
+ "การตั้งค่าทั่วไป"
+ "การตั้งค่าขั้นสูง"
+ "ซิม \"%s\""
+ "ส่งข้อความ SMS ส่วนบุคคลให้กับผู้รับทุกคน เฉพาะคุณที่จะได้รับการตอบกลับ"
+ "ส่ง MMS เดี่ยวให้กับผู้รับทุกคน"
+ "ไม่ทราบหมายเลข"
+ "ข้อความใหม่"
+ "ข้อความใหม่"
+ "ตัวเลือกซิม"
+ "เลือก %1$s แล้ว ตัวเลือกซิม"
+ "แก้ไขเรื่อง"
+ "เลือกซิมหรือแก้ไขเรื่อง"
+ "แตะค้างไว้เพื่อบันทึกเสียง"
+ "เริ่มต้นการสนทนาใหม่"
+ "การรับส่งข้อความ"
+ "รายการสนทนาในการรับส่งข้อความ"
+ "การรับส่งข้อความ"
+ "ข้อความใหม่"
+ "รายการการสนทนา"
+ "กำลังโหลดการสนทนา"
+ "กำลังโหลดข้อความ"
+ "ดูการสนทนาเพิ่มเติม"
+ "ดูข้อความเพิ่มเติม"
+ "ลบการสนทนาแล้ว"
+ "ลบการสนทนาแล้ว แตะเพื่อแสดงการสนทนาอื่นๆ ในการรับส่งข้อความ"
+ "ถูกบล็อก"
+ "เลิกบล็อกแล้ว"
+ "พื้นที่เก็บข้อมูลเหลือน้อย ข้อมูลบางอย่างอาจสูญหายไป"
+ "เลือกไฟล์แนบ"
+ "ยืนยันการเลือก"
+ "เลือกไว้ %d รายการ"
+ "โปรดนำไฟล์แนบออกอย่างน้อย 1 รายการ แล้วลองอีกครั้ง"
+ "คุณสามารถลองส่งข้อความ แต่ข้อความอาจส่งไม่ได้หากคุณไม่ได้นำไฟล์แนบออกอย่างน้อย 1 รายการ"
+ "คุณสามารถส่งวิดีโอได้ 1 รายการต่อข้อความเท่านั้น โปรดนำวิดีโอเพิ่มเติมออกและลองอีกครั้ง"
+ "การรับส่งข้อความไม่สามารถโหลดไฟล์แนบ"
+ "ส่งเลย"
+ "ไม่สามารถเริ่มการสนทนาได้"
+ "%1$s (%2$s)"
+ "เลือก %s แล้ว"
+
diff --git a/res/values-tl/arrays.xml b/res/values-tl/arrays.xml
new file mode 100644
index 0000000..6f30a29
--- /dev/null
+++ b/res/values-tl/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "walang paksa"
+ "nosubject"
+
+
+ "Oo"
+ "Hindi"
+ "OK"
+ "Hehe"
+ "Salamat"
+ "Sang-ayon ako"
+ "Ayos"
+ "Papunta na ako"
+ "OK, balikan na lang kita mamaya"
+ ":)"
+ ":("
+
+
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
new file mode 100644
index 0000000..dddb04b
--- /dev/null
+++ b/res/values-tl/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Pagmemensahe"
+ "Pagmemensahe"
+ "Pumili ng pag-uusap"
+ "Mga Setting"
+ "Magpadala ng Mensahe"
+ "Magdagdag ng attachment"
+ "Tulong"
+ "Maligayang Pagdating"
+ "Laktawan"
+ "Susunod >"
+ "Susunod"
+ "Lumabas"
+ "Mga Setting >"
+ "Mga Setting"
+ "Kailangan ng pahintulot ng Pagmemensahe sa SMS, Telepono at Mga Contact."
+ "Maaari mong baguhin ang mga pahintulot sa Mga Setting > Mga App > Pagmemensahe > Mga Pahintulot."
+ "Maaari mong baguhin ang mga pahintulot sa Mga Setting, Mga App, Pagmemensahe, Mga Pahintulot."
+ "Mga madalas makaugnayan"
+ "Lahat ng contact"
+ "Ipadala sa %s"
+ "Kumuha ng mga larawan o video"
+ "Pumili ng mga larawan mula sa device na ito"
+ "I-record ang audio"
+ "Pumili ng larawan"
+ "Napili ang media."
+ "Inalis sa pagkakapili ang media."
+ "%d ang pinili"
+ "larawan %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "larawan"
+ "I-record ang audio"
+ "Ibahagi"
+ "Ngayon lang"
+ "Ngayon"
+
+ %d min
+ %d na min
+
+
+ %d oras
+ %d na oras
+
+
+ %d araw
+ %d na araw
+
+
+ %d linggo
+ %d na linggo
+
+
+ %d buwan
+ %d na buwan
+
+
+ %d taon
+ %d na taon
+
+ "Class 0 na mensahe"
+ "I-save"
+ "Kaunti na lang ang espasyo ng device. Awtomatikong ide-delete ng Pagmemensahe ang mga mas lumang mensahe upang magbakante ng espasyo."
+ "Nauubos na ang espasyo ng storage"
+ "Maaaring hindi makatanggap o makapagpadala ng mga mensahe ang Pagmemensahe hanggang sa maging available ang higit pang espasyo sa iyong device."
+ "Kaunti na ang storage ng SMS. Maaaring kailanganin mong magtanggal ng mga mensahe."
+ "Kumpirmahin ang numero ng iyong telepono"
+ "Titiyakin ng isang beses na hakbang na ito na maihahatid nang maayos ng Pagmemensahe ang iyong mga mensahe sa pangkat."
+ "Numero ng telepono"
+ "Tanggalin ang lahat ng mensahe na may media"
+ "Tangglain ang mga mensaheng lampas na ng %s"
+ "Awtomatikong i-delete ang mga mensaheng mas luma sa %s"
+ "Huwag Pansinin"
+ "I-delete ang lahat ng mensaheng may media?"
+ "I-delete ang mga mensaheng mas luma sa %s?"
+ "Awtomatikong i-delete ang mga mensaheng mas luma sa %s at i-on ang awtomatikong pag-delete?"
+ "Sinabi ni %s"
+ "Sinabi mo"
+ "Mensahe mula kay %s"
+ "Nagpadala ka ng mensahe"
+ "Ipinapadala..."
+ "Hindi naipadala. Pindutin upang subukang muli.."
+ "Hindi naipadala. Sinusubukang muli…"
+ "Ipadalang muli o i-delete"
+ "Mangyaring mag-voice call sa mga pang-emergency na serbisyo. Sa ngayon, hindi maipadala ang iyong text message."
+ "Hindi nagawa"
+ "Bagong MMS message na ida-download"
+ "Bagong MMS message"
+ "Hindi mai-download"
+ "Pindutin upang subukang muli"
+ "Pindutin upang i-download"
+ "I-download o i-delete"
+ "Nagda-download..."
+ "Nag-expire o hindi available ang mensahe"
+ "laki: %1$s, expiration: %2$s"
+ "Hindi maipadala. Di-wasto ang tatanggap."
+ "Hindi naka-activate sa network ang serbisyo"
+ "Hindi maipadala dahil sa problema sa network"
+ "Nag-expire o hindi available ang mensahe"
+ "(Walang paksa)"
+ "Hindi kilalang nagpadala"
+ "Naihatid"
+ "Hindi ma-download ang mensaheng %1$s mula kay %2$s."
+ "Hindi makumpleto ang operation sa database dahil sa mababang memory"
+ "Hindi naipadala ang mensahe"
+ "Hindi naipadala sa Pagmemensahe ang ilang mensahe"
+
+ %d mensahe sa %d pag-uusap
+ %d na mensahe sa %d na pag-uusap
+
+ "Hindi na-download ang mensahe"
+ "Hindi na-download sa Pagmemensahe ang ilang mensahe"
+
+ %d mensahe sa %d pag-uusap
+ %d na mensahe sa %d na pag-uusap
+
+ "Hindi naipadala ang mensahe sa %1$s"
+ "Mangyaring mag-voice call sa mga pang-emergency na serbisyo. Sa ngayon, hindi maipadala ang iyong text message sa %1$s."
+
+ %d bagong mensahe
+ %d na bagong mensahe
+
+ "Magsimula"
+ "Hindi available ang camera"
+ "Hindi available ang camera"
+ "Hindi available ang pagkuha ng video"
+ "Hindi mai-save ang media"
+ "Hindi makakakuha ng larawan"
+ "Bumalik"
+ "Naka-archive"
+ "I-delete"
+ "I-archive"
+ "Alisin sa archive"
+ "I-off ang mga notification"
+ "I-on ang mga notification"
+ "Magdagdag ng contact"
+ "I-download"
+ "Ipadala"
+ "I-delete"
+ "I-delete ang mensaheng ito?"
+ "Hindi maaaring bawiin ang pagkilos na ito."
+ "I-delete"
+
+ I-delete ang mga pag-uusap na ito?
+ I-delete ang mga pag-uusap na ito?
+
+ "Tanggalin"
+ "Kanselahin"
+ "Para kay"
+ "Pumili ng maramihang larawan"
+ "Kumpirmahin ang pinili"
+ "+%d"
+ "Hindi mai-record ang audio. Subukang muli."
+ "Hindi mai-play ang audio. Subukang muli."
+ "Hindi mai-save ang audio. Subukang muli."
+ "Pindutin nang matagal"
+ ", "
+ " "
+ ": "
+ " "
+ "Larawan"
+ "Audio clip"
+ "Video"
+ "Contact card"
+ "I-download"
+ "Tumugon sa pamamagitan ng SMS"
+ "Tumugon sa pamamagitan ng MMS"
+ "Tumugon"
+
+ %d kalahok
+ %d na kalahok
+
+ "Ako"
+ "Na-block at na-archive ang contact"
+ "Naka-unblock at hindi naka-archive ang contact"
+ "%d ang na-archive"
+ "%d ang inalis sa pagkaka-archive"
+ "Naka-off ang mga notification"
+ "Naka-on ang mga notification"
+ "Handa na ang lahat. Pindutin muli ang Ipadala."
+ "Matagumpay na naitakda ang Pagmemensahe bilang default na SMS app."
+
+ I-discard ang mga attachment
+ I-discard ang mga attachment
+
+ "Attachment na audio"
+ "I-play ang attachment na audio"
+ "I-pause"
+ "Mensahe mula kay %s: %s."
+ "Hindi naipadalang mensahe mula kay %s: %s. Oras: %s."
+ "Mensahe mula kay %s: %s. Oras: %s."
+ "Hindi naipadalang mensahe kay %s: %s. Oras: %s."
+ "Ipinapadala ang mensahe kay %s: %s. Oras: %s."
+ "Hindi naipadalang mensahe kay %s: %s. Oras: %s."
+ "Mensahe kay %s: %s. Oras: %s."
+ "Hindi naipadalang mensahe mula kay %s: %s. Oras: %s. %s."
+ "Mensahe mula kay %s: %s. Oras: %s. %s."
+ "Hindi naipadalang mensahe sa %s: %s. Oras: %s."
+ "Ipinapadala ang mensahe sa %s: %s. Oras: %s."
+ "Hindi naipadalang mensahe sa %s: %s. Oras: %s."
+ "Mensahe sa %s: %s. Oras: %s."
+ "Hindi naipadalang mensahe. Pindutin upang subukang muli."
+ "Pag-uusap kasama sina %s"
+ "I-delete ang paksa"
+ "Kumuha ng video"
+ "Kumuha ng still na larawan"
+ "Kumuha ng larawan"
+ "Simulan ang pag-record ng video"
+ "Lumipat sa camera na full screen"
+ "Lumipat sa pagitan ng camera sa harap at likod"
+ "Ihinto ang pagre-record at i-attach ang video"
+ "Itigil ang pagre-record ng video"
+ "Mga larawan sa pagmemensahe"
+
+ %d larawan ang naka-save sa album na \"%s\"
+ %d na larawan ang naka-save sa album na \"%s\"
+
+
+ %d video ang naka-save sa album na \"%s\"
+ %d na video ang naka-save sa album na \"%s\"
+
+
+ %d attachment ang naka-save sa album na \"%s\"
+ %d na attachment ang naka-save sa album na \"%s\"
+
+
+ %d attachment ang naka-save sa \"Mga Download\"
+ %d na attachment ang naka-save sa \"Mga Download\"
+
+
+ %d attachment ang na-save
+ %d na attachment ang na-save
+
+
+ Hindi ma-save ang %d attachment
+ Hindi ma-save ang %d na attachment
+
+ "Na-save na MMS attachment"
+ "Mga Setting"
+ "Naka-archive"
+ "Isara"
+ "MMS"
+ "Advanced"
+ "I-debug"
+ "Mga Notification"
+ "Tunog"
+ "Naka-silent"
+ "Mag-vibrate"
+ "Naka-block"
+ "Mga ulat sa pagpapadala ng SMS"
+ "Humiling ng ulat sa paghahatid para sa bawat SMS na iyong ipinapadala"
+ "I-auto-retrieve"
+ "Awtomatikong kunin ang mga mensaheng MMS"
+ "Awtomatikong pagkuha sa roaming"
+ "Awtomatikong kunin ang MMS kapag naka-roaming"
+ "Panggrupong pagpapadala ng mensahe"
+ "Gamitin ang MMS upang magpadala ng iisang mensahe kapag may maraming recipient"
+ "Default na SMS app"
+ "Default na SMS app"
+
+
+ "Numero ng iyong telepono"
+ "Hindi kilala"
+ "Mga tunog ng papalabas na mensahe"
+ "Itapon ang SMS"
+ "Itapon ang raw data ng natanggap na SMS sa file ng external storage"
+ "Itapon ang MMS"
+ "Itapon ang raw data ng natanggap na MMS sa file ng external storage"
+ "Mga wireless na alerto"
+ "Mga opsyon sa mensahe"
+ "Kopyahin ang text"
+ "Tingnan ang mga detalye"
+ "I-delete"
+ "Ipasa"
+ "Mga detalye ng mensahe"
+ "Uri: "
+ "Text message"
+ "Multimedia message"
+ "Mula kay: "
+ "Para kay: "
+ "Ipinadala: "
+ "Natanggap: "
+ "Paksa: "
+ "Laki: "
+ "Priyoridad: "
+ "SIM: "
+ "Mataas"
+ "Normal"
+ "Mababa"
+ "SIM %s"
+ "Nakatago ang address ng nagpadala"
+ "Hindi maaaring magpadala ng mensahe habang naglo-load ng mga attachment."
+ "Hindi mai-load ang attachment. Subukang muli."
+ "Hindi pa handa ang network. Subukang muli."
+ "I-delete ang text"
+ "Lumipat sa pagitan ng paglagay ng text at mga numero"
+ "Magdagdag ng higit pang mga kalahok"
+ "Kumpirmahin ang mga kalahok"
+ "Magsimula ng bagong pag-uusap"
+ "Piliin ang item na ito"
+ "I-play ang video"
+ "Mga tao at opsyon"
+ "I-debug"
+ "Mga tao at opsyon"
+ "Pangkalahatan"
+ "Mga tao sa pag-uusap na ito"
+ "Tumawag"
+ "Magpadala ng mensahe"
+ "Magpadala ng mensahe<br/><small>mula sa %s</small>"
+
+ Ipadala ang mga larawan
+ Ipadala ang mga larawan
+
+
+ Ipadala ang mga audio
+ Ipadala ang mga audio
+
+
+ Ipadala ang mga video
+ Ipadala ang mga video
+
+
+ Ipadala ang mga contact card
+ Ipadala ang mga contact card
+
+
+ Ipadala ang mga attachment
+ Ipadala ang mga attachment
+
+
+ %d attachment ang handa nang ipadala
+ %d na attachment ang handa nang ipadala
+
+ "Magpadala ng feedback"
+ "Tingnan sa Google Play Store"
+ "Impormasyon sa bersyon"
+ "Bersyon %1$s"
+ "Mga open source na lisensya"
+ "Mga Notification"
+ "Naabot na ang limitasyon ng attachment"
+ "Hindi na-load ang attachment."
+ "Idagdag sa Mga Contact?"
+ "Magdagdag ng Contact"
+ "Subject"
+ "Subject: "
+ "%s%s"
+ "Nilo-load ang contact card"
+ "Hindi mai-load ang contact card"
+ "Tingnan ang contact card"
+
+ %d contact
+ %d na contact
+
+ "Mga contact card"
+ "Kaarawan"
+ "Mga Tala"
+ "Ipasa ang mensahe"
+ "Tumugon"
+ "+1"
+ "+%d"
+ "Naka-disable ang SMS"
+ "Upang ipadala, itakda ang Pagmemensahe bilang default na SMS app"
+ "Itakda ang Pagmemensahe bilang default na SMS app"
+ "Baguhin"
+ "Upang makatanggap ng mga mensahe, itakda ang Pagmemensahe bilang default na SMS app"
+ "Walang piniling gustong SIM para sa pagpapadala ng mga mensaheng SMS"
+ "Hindi pinapayagan ang app na ito ng may-ari ng device."
+ "OK"
+ "Masyadong maraming kalahok sa isang pag-uusap"
+
+ Mga di-wastong contact
+ Mga di-wastong contact
+
+ "Hindi mai-load ang larawan ng camera"
+ "Ikaw: "
+ "%s: "
+ "Draft"
+ "Sa sandaling magsimula ka ng bagong pag-uusap, makikita mo ito na nakalista rito"
+ "Lumalabas dito ang mga naka-archive na pag-uusap"
+ "Nilo-load ang mga pag-uusap…"
+ "Larawan"
+ "Audio clip"
+ "Video"
+ "Card sa pakikipag-ugnayan"
+ "MMS"
+ "I-undo"
+ "Subukang muli"
+ "Maglagay ng pangalan ng contact o numero ng telepono upang magsimula ng isang bagong mensahe"
+ "I-block"
+ "I-block ang %s"
+ "Alisin sa pagkaka-block ang %s"
+ "I-block ang %s?"
+ "Patuloy kang makakatanggap ng mga mensahe mula sa numerong ito ngunit hindi ka na aabisuhan. Maa-archive ang pag-uusap na ito."
+ "Mga na-block na contact"
+ "ALISIN SA PAGKAKA-BLOCK"
+ "Mga na-block na contact"
+ "Pumili ng larawan mula sa library ng dokumento"
+ "Ipinapadala ang mensahe"
+ "Naipadala na ang mensahe"
+ "Naka-off ang cellular data. Suriin ang iyong mga setting."
+ "Hindi maaaring magpadala ng mga mensahe sa Airplane mode"
+ "Hindi maipadala ang mensahe"
+ "Na-download na ang mensahe"
+ "Naka-off ang cellular data. Tingnan ang iyong mga setting."
+ "Hindi maaaring mag-download ng mga mensahe sa Airplane mode"
+ "Hindi ma-download ang mensahe"
+ "Zero"
+ "Isa"
+ "Dalawa"
+ "Tatlo"
+ "Apat"
+ "Lima"
+ "Anim"
+ "Pito"
+ "Walo"
+ "Siyam"
+ "Hindi maipadala ang mensahe gamit ang %1$s, error na %2$d"
+ "Hindi maipadala ang mensahe gamit ang hindi nakikilalang carrier, error na %1$d"
+ "Fwd: %s"
+ "Hindi napadala ang mensahe: hindi naka-activate sa network ang serbisyo"
+ "Hindi naipadala ang mensahe: di-wastong patutunguhang address"
+ "Hindi naipadala ang mensahe: di-wastong mensahe"
+ "Hindi naipadala ang mensahe: hindi sinusuportahang content"
+ "Hindi naipadala ang mensahe: hindi sinusuportahang mensahe"
+ "Hindi napadala ang mensahe: masyadong malaki"
+ "Bagong mensahe"
+ "Tingnan"
+ "Larawan"
+ "Hindi makahanap ng naaangkop na application"
+ "Alisin ang tatanggap"
+ "Bagong mensahe"
+ "Kanselahin"
+ "I-edit ang access point"
+ "Hindi nakatakda"
+ "Pangalan"
+ "APN"
+ "MMSC"
+ "Proxy ng MMS"
+ "Port ng MMS"
+ "MCC"
+ "MNC"
+ "Uri ng APN"
+ "I-delete ang APN"
+ "Bagong APN"
+ "I-save"
+ "I-discard"
+ "Hindi maaaring walang laman ang field ng Pangalan."
+ "Hindi maaaring walang laman ang APN."
+ "Dapat na 3 digit ang field na MCC."
+ "Dapat na 2 o 3 digit ang field ng MNC."
+ "Nire-restore ang default na mga setting ng APN"
+ "I-reset sa default"
+ "Nakumpleto na ang pag-reset sa default na mga setting ng APN."
+ "Walang pamagat"
+ "Mga Access Point Name"
+ "Mga APN"
+ "Bagong APN"
+ "Hindi available ang mga setting ng Access Point Name para sa user na ito"
+ "Kopyahin sa clipboard?"
+ "Kopyahin"
+ "sa %s"
+ "Pangkalahatan"
+ "Advanced"
+ "Mga pangkalahatang setting"
+ "Mga advanced na setting"
+ "\"%s\" SIM"
+ "Magpadala ng mga indibidwal na mensaheng SMS sa lahat ng tatanggap. Ikaw lang ang makakatanggap ng anumang mga tugon"
+ "Magpadala ng iisang MMS sa lahat ng tatanggap"
+ "Hindi kilalang numero"
+ "Bagong mensahe"
+ "Bagong mensahe."
+ "SIM selector"
+ "Pinili ang %1$s, selector ng SIM"
+ "I-edit ang paksa"
+ "Pumili ng SIM o i-edit ang paksa"
+ "Pindutin nang matagal upang i-record ang audio"
+ "Magsimula ng bagong pag-uusap"
+ "Pagmemensahe"
+ "Listahan ng Pagmemensahe"
+ "Pagmemensahe"
+ "Bagong mensahe"
+ "Listahan ng pag-uusap"
+ "Nilo-load ang mga pag-uusap"
+ "Nilo-load ang mga mensahe"
+ "Tumingin ng higit pang pag-uusap"
+ "Tingnan ang higit pang mga mensahe"
+ "Na-delete na ang pag-uusap"
+ "Na-delete na ang pag-uusap. Pindutin upang magpakita ng iba\'t ibang pag-uusap sa Pagmemensahe"
+ "Na-block"
+ "Na-unblock"
+ "Kaunti na lang ang espasyo sa storage. Maaaring mawala ang ilang data."
+ "Pumili ng mga attachment"
+ "Kumpirmahin ang napili"
+ "%d ang napili"
+ "Mangyaring mag-alis ng isa o higit pang mga attachment at subukang muli."
+ "Maaari mong subukang ipadala ang iyong mensahe, ngunit maaaring hindi ito maipadala maliban kung mag-aalis ka ng isa o higit pang mga attachment."
+ "Maaari ka lang magpadala ng isang video sa bawat mensahe. Mangyaring alisin ang mga karagdagang video at subukang muli."
+ "Hindi na-load ng pagmemensahe ang attachment."
+ "Ipadala pa rin"
+ "Hindi makapagsimula ng pag-uusap"
+ "%1$s (%2$s)"
+ "%s ang napili"
+
diff --git a/res/values-tr/arrays.xml b/res/values-tr/arrays.xml
new file mode 100644
index 0000000..d0b4e84
--- /dev/null
+++ b/res/values-tr/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "konu yok"
+ "konu yok"
+
+
+ "Evet"
+ "Hayır"
+ "Tamam"
+ "Olur"
+ "Teşekkürler"
+ "Kabul ediyorum"
+ "Güzel"
+ "Yoldayım"
+ "Tamam, sana sonra dönerim"
+ ":)"
+ ":("
+
+
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
new file mode 100644
index 0000000..6ea1cbe
--- /dev/null
+++ b/res/values-tr/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Mesajlaşma"
+ "Mesajlaşma"
+ "İleti dizisini seç"
+ "Ayarlar"
+ "İleti Gönder"
+ "Dosya ekle"
+ "Yardım"
+ "Hoş geldiniz"
+ "Atla"
+ "Sonraki >"
+ "Sonraki"
+ "Çık"
+ "Ayarlar >"
+ "Ayarlar"
+ "Mesajlaşma\'nın SMS, Telefon ve Kişiler için izninize ihtiyacı var."
+ "İzinleri; Ayarlar > Uygulamalar > Mesajlaşma > İzinler\'de değiştirebilirsiniz."
+ "İzinleri; Ayarlar, Uygulamalar, Mesajlaşma, İzinler\'de değiştirebilirsiniz."
+ "Sık kullanılanlar"
+ "Tüm kişiler"
+ "Şuraya gönder: %s"
+ "Fotoğraf veya video çekin"
+ "Bu cihazdan resim seç"
+ "Ses kaydedin"
+ "Fotoğraf seç"
+ "Medya seçildi."
+ "Medya seçilmedi."
+ "%d öğe seçildi"
+ "resim %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "resim"
+ "Ses kaydedin"
+ "Paylaş"
+ "Şimdi"
+ "Şimdi"
+
+ %d dk.
+ %d dk.
+
+
+ %d saat
+ %d saat
+
+
+ %d gün
+ %d gün
+
+
+ %d hafta
+ bir hafta
+
+
+ %d ay
+ bir ay
+
+
+ %d yıl
+ bir yıl
+
+ "Sınıf 0 iletisi"
+ "Kaydet"
+ "Cihazınızda boş alan az. Mesajlaşma boş alan açmak için daha eski iletileri otomatik olarak silecektir."
+ "Depolama alanı bitiyor"
+ "Mesajlaşma, cihazınızda daha fazla yer açılana kadar ileti gönderip almayabilir."
+ "SMS depolama alanı azaldı. İletileri silmeniz gerekebilir."
+ "Telefon numaranızı doğrulayın"
+ "Bu bir kerelik adım, Mesajlaşma\'nın, grup iletilerini düzgün olarak teslim etmesini sağlayacaktır."
+ "Telefon numarası"
+ "Medya içeren tüm iletileri sil"
+ "Şundan eski iletileri sil: %s"
+ "Şundan daha eski iletileri otomatik olarak sil: %s"
+ "Yoksay"
+ "Medya içeren tüm iletiler silinsin mi?"
+ "Şundan daha eski iletiler silinsin mi: %s?"
+ "Şundan daha eski iletiler silinip otomatik silme etkinleştirilsin mi: %s?"
+ "%s şunu dedi:"
+ "Şunu dediniz:"
+ "%s adlı kişiden ileti"
+ "Bir ileti gönderdiniz"
+ "Gönderiliyor..."
+ "Gönderilmedi. Tekrar denemek için dokunun."
+ "Gönderilmedi. Tekrar deniyor…"
+ "Yeniden gönderin veya silin"
+ "Lütfen acil durum servislerine telefon edin. Kısa mesajınız şu anda teslim edilemedi."
+ "Başarısız oldu"
+ "İndirilecek yeni MMS iletisi"
+ "Yeni MMS iletisi"
+ "İndirilemedi"
+ "Tekrar denemek için dokunun"
+ "İndirmek için dokunun"
+ "İndirin veya silin"
+ "İndiriliyor..."
+ "İletinin süresi doldu veya kullanılamıyor"
+ "boyut: %1$s, süre sonu: %2$s"
+ "Gönderilemiyor. Alıcı geçersiz."
+ "Hizmet, ağda etkinleştirilmemiş"
+ "Ağ sorunu nedeniyle gönderilemedi"
+ "İletinin süresi doldu veya kullanılamıyor"
+ "(Konu yok)"
+ "Bilinmeyen gönderen"
+ "Teslim edildi"
+ "%2$s tarafından gönderilen %1$s konulu ileti indirilemedi."
+ "Yetersiz bellek nedeniyle veritabanı işlemi tamamlanamadı"
+ "İleti gönderilmedi"
+ "Bazı iletiler Mesajlaşma\'da gönderilmedi"
+
+ %d ileti dizisinde %d ileti
+ Bir ileti dizisinde %d ileti
+
+ "İleti indirilmedi"
+ "Bazı iletiler Mesajlaşma\'dan indirilmedi"
+
+ %d ileti dizisinde %d ileti
+ Bir ileti dizisinde %d ileti
+
+ "%1$s numaralı telefona ileti gönderilemedi"
+ "Lütfen acil durum servislerine telefon edin. %1$s numaralı telefona gönderdiğiniz kısa mesajınız şu anda teslim edilemedi."
+
+ %d yeni ileti
+ Yeni ileti
+
+ "Başlat"
+ "Kamera kullanılamıyor"
+ "Kamera kullanılamıyor"
+ "Video çekimi kullanılamıyor"
+ "Medya kaydedilemiyor"
+ "Resim çekilemiyor"
+ "Geri"
+ "Arşivlenen"
+ "Sil"
+ "Arşivle"
+ "Arşivden kaldır"
+ "Bildirimleri devre dışı bırak"
+ "Bildirimleri aç"
+ "Kişi ekle"
+ "İndir"
+ "Gönder"
+ "Sil"
+ "Bu ileti silinsin mi?"
+ "Bu işlem geri alınamaz."
+ "Sil"
+
+ Bu ileti dizileri silinsin mi?
+ Bu ileti dizisi silinsin mi?
+
+ "Sil"
+ "İptal"
+ "Alıcı:"
+ "Birden fazla resim seç"
+ "Seçimi onayla"
+ "+%d"
+ "Ses kaydedilemiyor. Tekrar deneyin."
+ "Ses çalınamıyor. Tekrar deneyin."
+ "Ses kaydedilemedi. Tekrar deneyin."
+ "Dokunup basılı tutun"
+ ", "
+ " "
+ ": "
+ " "
+ "Resim"
+ "Ses klibi"
+ "Video"
+ "Kişi kartı"
+ "İndir"
+ "SMS ile yanıtla"
+ "MMS ile yanıtla"
+ "Yanıtla"
+
+ %d katılımcı
+ %d katılımcı
+
+ "Ben"
+ "Kişi engellendi ve arşivlendi"
+ "Kişinin engellemesi kaldırıldı ve kişi arşivden geri alındı"
+ "%d ileti dizisi arşivlendi"
+ "%d ileti dizisi arşivden kaldırıldı"
+ "Bildirimler kapalı"
+ "Bildirimler açık"
+ "Tümü ayarlandı. Gönder\'e tekrar dokunun."
+ "Mesajlaşma, başarılı bir şekilde varsayılan SMS uygulaması olarak ayarlandı."
+
+ Ekleri sil
+ Eki sil
+
+ "Ses dosyası eki"
+ "Ekli ses dosyasını çal"
+ "Duraklat"
+ "%s adlı kişiden ileti: %s."
+ "Şu ileti %s tarafından gönderilemedi: %s. Saat: %s."
+ "Şu ileti %s tarafından gönderildi: %s. Saat: %s."
+ "Şu ileti %s adlı kişiye gönderilmedi: %s. Saat: %s."
+ "Şu ileti %s adlı kişiye gönderiliyor: %s. Saat: %s."
+ "Şu ileti %s adlı kişiye gönderilemedi: %s. Saat: %s."
+ "Şu ileti %s adlı kişiye gönderildi: %s. Saat: %s."
+ "Şu ileti %s tarafından gönderilemedi: %s. Saat: %s. %s."
+ "Şu ileti %s tarafından gönderildi: %s. Saat: %s. %s."
+ "Şu ileti %s adlı gruba gönderilmedi: %s. Saat: %s."
+ "Şu ileti %s adlı gruba gönderiliyor: %s. Saat: %s."
+ "Şu ileti %s adlı gruba gönderilemedi: %s. Saat: %s."
+ "Şu ileti %s adlı gruba gönderildi: %s. Saat: %s."
+ "İleti başarısız oldu. Yeniden denemek için dokunun."
+ "%s ile ileti dizisi"
+ "Konuyu sil"
+ "Video çek"
+ "Fotoğraf çek"
+ "Fotoğraf çek"
+ "Video kaydetmeye başla"
+ "Tam ekran kameraya geç"
+ "Ön ve arka kamera arasında geçiş yap"
+ "Kaydı durdur ve video ekle"
+ "Video kaydını durdur"
+ "Mesajlaşma fotoğrafları"
+
+ %d fotoğraf, \"%s\" albümüne kaydedildi
+ %d fotoğraf, \"%s\" albümüne kaydedildi
+
+
+ %d video, \"%s\" albümüne kaydedildi
+ %d video, \"%s\" albümüne kaydedildi
+
+
+ Ekli %d dosya, \"%s\" albümüne kaydedildi
+ Ekli %d dosya, \"%s\" albümüne kaydedildi
+
+
+ Ekli %d dosya, \"İndirilenler\"e kaydedildi
+ Ekli %d dosya, \"İndirilenler\"e kaydedildi
+
+
+ %d ek kaydedildi
+ %d ek kaydedildi
+
+
+ %d ek kaydedilemedi
+ %d ek kaydedilemedi
+
+ "MMS eki kaydedildi"
+ "Ayarlar"
+ "Arşivlenen"
+ "Kapat"
+ "MMS"
+ "Gelişmiş"
+ "Hata Ayıklama"
+ "Bildirimler"
+ "Ses"
+ "Sessiz"
+ "Titreşim"
+ "Engellendi"
+ "SMS iletim raporları"
+ "Gönderilen her SMS için bir iletim raporu iste"
+ "Otomatik al"
+ "MMS iletilerini otomatik olarak al"
+ "Dolaşımda otomatik al"
+ "Dolaşımdayken MMS\'leri otomatik olarak al"
+ "Grup mesajları"
+ "Birden fazla alıcıya tek bir ileti göndermek için MMS kullanın"
+ "Varsayılan SMS uygulaması"
+ "Varsayılan SMS uygulaması"
+
+
+ "Telefon numaranız"
+ "Bilinmiyor"
+ "Giden ileti sesleri"
+ "SMS verilerini aktar"
+ "Alınan ham SMS verilerini harici bir depolama dosyasına aktarın"
+ "MMS verilerini aktar"
+ "Alınan ham MMS verilerini harici bir depolama dosyasına aktarın"
+ "Kablosuz uyarıları"
+ "İleti seçenekleri"
+ "Metni kopyala"
+ "Ayrıntıları görüntüle"
+ "Sil"
+ "Yönlendir"
+ "İleti ayrıntıları"
+ "Tür: "
+ "Kısa mesaj"
+ "Multimedya iletisi"
+ "Gönderen: "
+ "Alıcı: "
+ "Gönderilme tarihi: "
+ "Alınma tarihi: "
+ "Konu: "
+ "Boyut: "
+ "Öncelik: "
+ "SIM: "
+ "Yüksek"
+ "Normal"
+ "Düşük"
+ "SIM %s"
+ "Gizli gönderen adresi"
+ "Ekler yüklenirken ileti gönderilemez."
+ "Ek yüklenemiyor. Tekrar deneyin."
+ "Ağ hazır değil. Tekrar deneyin."
+ "Metni sil"
+ "Metin ve sayı girişi arasında geçiş yap"
+ "Daha fazla katılımcı ekle"
+ "Katılımcıları onayla"
+ "Yeni ileti dizisi başlat"
+ "Bu öğeyi seçin"
+ "Videoyu oynat"
+ "Kişiler ve seçenekler"
+ "Hata ayıkla"
+ "Kişiler ve seçenekler"
+ "Genel"
+ "Bu görüşmedeki kişiler"
+ "Çağrı yap"
+ "İleti gönder"
+ "Mesajı şu karttan gönder:<br/><small>%s</small>"
+
+ Fotoğrafları gönder
+ Fotoğrafı gönder
+
+
+ Ses dosyalarını gönder
+ Ses dosyasını gönder
+
+
+ Videoları gönder
+ Videoyu gönder
+
+
+ Kişi kartlarını gönder
+ Kişi kartını gönder
+
+
+ Ekleri gönder
+ Eki gönder
+
+
+ %d ek gönderilmeye hazır
+ Bir ek gönderilmeye hazır
+
+ "Geri bildirim gönder"
+ "Google Play Store\'da görüntüle"
+ "Sürüm bilgisi"
+ "Sürüm %1$s"
+ "Açık kaynak lisansları"
+ "Bildirimler"
+ "Ek sınırına ulaşıldı"
+ "Ek yüklenemedi."
+ "Kişilere eklensin mi?"
+ "Kişi Ekle"
+ "Konu"
+ "Konu: "
+ "%s%s"
+ "Kişi kartı yükleniyor"
+ "Kişi kartı yüklenemedi"
+ "Kişi kartını görüntüle"
+
+ %d kişi
+ %d kişi
+
+ "Kişi kartları"
+ "Doğum günü"
+ "Notlar"
+ "İletiyi yönlendir"
+ "Yanıtla"
+ "+1"
+ "+%d"
+ "SMS devre dışı bırakıldı"
+ "Göndermek için Mesajlaşma\'yı varsayılan SMS uygulamanız olarak ayarlayın"
+ "Mesajlaşma\'yı varsayılan SMS uygulamanız olarak ayarlayın"
+ "Değiştir"
+ "İletileri almak için Mesajlaşma\'yı varsayılan SMS uygulamanız olarak ayarlayın"
+ "SMS iletilerini göndermek için SIM tercihi yapılmadı"
+ "Cihaz sahibi bu uygulamaya izin vermiyor."
+ "Tamam"
+ "Bir görüşmede çok fazla katılımcı var"
+
+ Geçersiz kişiler
+ Geçersiz kişi
+
+ "Kamera görüntüsü yüklenemedi"
+ "Siz: "
+ "%s: "
+ "Taslak"
+ "Yeni bir görüşme başlattığınızda burada listelendiğini göreceksiniz"
+ "Arşivlenmiş ileti dizileri burada görünür"
+ "İleti dizileri yükleniyor..."
+ "Resim"
+ "Ses klibi"
+ "Video"
+ "Kişi kartı"
+ "MMS"
+ "Geri al"
+ "Yeniden dene"
+ "Yeni bir iletiye başlamak için bir kişi adı veya telefon numarası girin"
+ "Engelle"
+ "%s hedefini engelle"
+ "%s adlı kişinin engellemesini kaldır"
+ "%s engellensin mi?"
+ "Bu numaradan gelen iletileri almaya devam edecek ancak artık bildirim almayacaksınız. Bu ileti dizisi arşivlenecektir."
+ "Engellenen kişiler"
+ "ENGELLEMEYİ KALDIR"
+ "Engellenen kişiler"
+ "Doküman kitaplığından resim seç"
+ "İleti gönderiliyor"
+ "İleti gönderildi"
+ "Hücresel veri özelliği kapalı. Ayarlarınızı kontrol edin."
+ "Uçak modunda iletiler gönderilemiyor"
+ "İleti gönderilemedi"
+ "İleti indirildi"
+ "Hücresel veri özelliği kapalı. Ayarlarınızı kontrol edin."
+ "Uçak modundayken iletiler indirilemez"
+ "İleti indirilemedi"
+ "Sıfır"
+ "Bir"
+ "İki"
+ "Üç"
+ "Dört"
+ "Beş"
+ "Altı"
+ "Yedi"
+ "Sekiz"
+ "Dokuz"
+ "%1$s ile ileti gönderilemiyor. Hata kodu: %2$d"
+ "Bilinmeyen operatör ile ileti gönderilemiyor. Hata kodu: %1$d"
+ "Yön: %s"
+ "İleti gönderilmedi: Hizmet, ağ üzerinde etkin değil"
+ "İleti gönderilmedi: Geçersiz gönderim adresi"
+ "İleti gönderilmedi: Geçersiz ileti"
+ "İleti gönderilmedi: Desteklenmeyen içerik"
+ "İleti gönderilmedi: Desteklenmeyen ileti"
+ "İleti gönderilmedi: Çok büyük"
+ "Yeni ileti"
+ "Görüntüle"
+ "Resim"
+ "Uygun bir uygulama bulunamadı"
+ "Alıcıyı kaldır"
+ "Yeni ileti"
+ "İptal"
+ "Erişim noktasını düzenle"
+ "Ayarlanmadı"
+ "Ad"
+ "APN"
+ "MMSC"
+ "MMS proxy\'si"
+ "MMS bağlantı noktası"
+ "MCC"
+ "MNC"
+ "APN türü"
+ "APN\'yi sil"
+ "Yeni APN"
+ "Kaydet"
+ "Yoksay"
+ "Ad alanı boş olamaz."
+ "APN boş olamaz."
+ "MCC alanındaki değer 3 rakamdan oluşmalıdır."
+ "MNC alanındaki değer 2 veya 3 rakamdan oluşmalıdır."
+ "Varsayılan APN ayarları geri yükleniyor."
+ "Varsayılana sıfırla"
+ "Varsayılan APN ayarlarına sıfırlama tamamlandı."
+ "Başlıksız"
+ "Erişim Noktası Adları (APN)"
+ "APN\'ler"
+ "Yeni APN"
+ "Erişim Noktası Adı (APN) ayarları bu kullanıcı için kullanılamıyor"
+ "Panoya kopyalansın mı?"
+ "Kopyala"
+ "Mesajın alınacağı kart: %s"
+ "Genel"
+ "Gelişmiş"
+ "Genel ayarlar"
+ "Gelişmiş ayarlar"
+ "\"%s\" SIM"
+ "Tüm alıcılara tek tek SMS iletisi gönder. Sadece size yanıt gönderilir."
+ "Tüm alıcılara tek bir MMS iletisi gönder"
+ "Bilinmeyen numara"
+ "Yeni ileti"
+ "Yeni ileti."
+ "SIM seçici"
+ "%1$s seçildi, SIM seçici"
+ "Konuyu düzenle"
+ "SIM seçin veya konuyu düzenleyin"
+ "Ses kaydetmek için dokunun ve basılı tutun"
+ "Yeni ileti dizisi başlat"
+ "Mesajlaşma"
+ "Mesajlaşma Listesi"
+ "Mesajlaşma"
+ "Yeni ileti"
+ "İleti dizisi listesi"
+ "İleti dizileri yükleniyor"
+ "İletiler yükleniyor"
+ "Diğer ileti dizilerini görüntüle"
+ "Daha fazla ileti görüntüle"
+ "İleti dizisi silindi"
+ "İleti dizisi silindi. Farklı bir Mesajlaşma ileti dizisini görüntülemek için dokunun"
+ "Engellendi"
+ "Engellemesi kaldırıldı"
+ "Depolama alanı az. Bazı veriler kaybolabilir."
+ "Ekleri seçin"
+ "Seçimi onayla"
+ "%d öğe seçildi"
+ "Lütfen bir veya daha fazla eki kaldırın ve tekrar deneyin."
+ "İletinizi göndermeyi deneyebilirsiniz, ancak bir veya daha fazla eki kaldırmadığınız sürece ileti teslim edilmeyebilir."
+ "Her iletide yalnızca bir tane video gönderebilirsiniz. Lütfen ek videoları kaldırın ve tekrar deneyin."
+ "Mesajlaşma, eki yükleyemedi."
+ "Yine de gönder"
+ "Sohbet başlatılamadı"
+ "%1$s (%2$s)"
+ "%s seçildi"
+
diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml
new file mode 100644
index 0000000..fc47a64
--- /dev/null
+++ b/res/values-uk/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "без теми"
+ "без теми"
+
+
+ "Так"
+ "Ні"
+ "ОК"
+ "Ха-ха-ха"
+ "Дякую"
+ "Погоджуюсь"
+ "Чудово"
+ "У дорозі"
+ "Добре, я зателефоную пізніше"
+ ":)"
+ ":("
+
+
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
new file mode 100644
index 0000000..1c44548
--- /dev/null
+++ b/res/values-uk/strings.xml
@@ -0,0 +1,571 @@
+
+
+
+
+ "Повідомлення"
+ "Повідомлення"
+ "Виберіть ланцюжок повідомлень"
+ "Налаштування"
+ "Надіслати повідомлення"
+ "Вкласти файл"
+ "Довідка"
+ "Вітаємо"
+ "Пропустити"
+ "Далі >"
+ "Далі"
+ "Вийти"
+ "Налаштування >"
+ "Налаштування"
+ "Додатку Повідомлення потрібен доступ до SMS, телефона й контактів."
+ "Щоб змінити дозволи, виберіть \"Налаштування\" > \"Додатки\" > \"Повідомлення\" > \"Дозволи\"."
+ "Щоб змінити дозволи, виберіть \"Налаштування\" > \"Додатки\" > \"Повідомлення\" > \"Дозволи\"."
+ "Найчастіше на зв’язку"
+ "Усі контакти"
+ "Надіслати на номер %s"
+ "Зняти фото або відео"
+ "Вибрати зображення на цьому пристрої"
+ "Записати аудіо"
+ "Вибрати фотографію"
+ "Медіафайл вибрано."
+ "Медіафайл не вибрано."
+ "Вибрано %d"
+ "зображення: %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "зображення"
+ "Записати аудіо"
+ "Поділитися"
+ "Щойно"
+ "Зараз"
+
+ %d хвилина
+ %d хвилини
+ %d хвилин
+ %d хвилини
+
+
+ %d година
+ %d години
+ %d годин
+ %d години
+
+
+ %d день
+ %d дні
+ %d днів
+ %d дня
+
+
+ %d тиждень
+ %d тижні
+ %d тижнів
+ %d тижня
+
+
+ %d місяць
+ %d місяці
+ %d місяців
+ %d місяця
+
+
+ %d рік
+ %d роки
+ %d років
+ %d року
+
+ "Повідомлення класу 0"
+ "Зберегти"
+ "На пристрої замало місця. З додатка Повідомлення буде автоматично видалено старіші SMS, щоб звільнити місце."
+ "Закінчується пам’ять"
+ "Додаток Повідомлення не зможе надсилати й отримувати SMS, доки не звільниться місце на пристрої."
+ "Недостатньо місця для SMS. Видаліть старі повідомлення."
+ "Підтвердьте свій номер телефону"
+ "Номер потрібен, щоб надсилати групові повідомлення. Його потрібно ввести лише один раз."
+ "Номер телефону"
+ "Видалити всі повідомлення з медіафайлами"
+ "Видалити повідомлення, отримані понад %s тому"
+ "Автоматично видаляти повідомлення, отримані понад %s тому"
+ "Ігнорувати"
+ "Видалити всі повідомлення з медіафайлами?"
+ "Видалити повідомлення, отримані понад %s тому?"
+ "Видаляти повідомлення, отримані понад %s тому й увімкнути автоматичне видалення?"
+ "Повідомлення від користувача %s"
+ "Ваше повідомлення"
+ "Повідомлення від користувача %s"
+ "Ви надіслали повідомлення"
+ "Надсилання…"
+ "Не надіслано. Торкніться, щоб повторити спробу."
+ "Не надіслано. Повторна спроба…"
+ "Надіслати повторно або видалити"
+ "Не вдалося надіслати текстове повідомлення в екстрену службу. Спробуйте зателефонувати."
+ "Помилка"
+ "Доступне нове MMS-повідомлення"
+ "Нове MMS-повідомлення"
+ "Не вдалося завантажити"
+ "Торкніться, щоб повторити спробу"
+ "Торкніться, щоб завантажити"
+ "Завантажити або видалити"
+ "Завантаження…"
+ "Повідомлення прострочене або недоступне"
+ "розмір: %1$s, дійсне до: %2$s"
+ "Не вдається надіслати. Недійсний отримувач."
+ "Послугу не активовано в мережі"
+ "Не вдалося надіслати через проблему з мережею"
+ "Повідомлення прострочене або недоступне"
+ "(Без теми)"
+ "Невідомий відправник"
+ "Доставлено"
+ "Не вдалося завантажити повідомлення з темою \"%1$s\" від користувача %2$s."
+ "Не вдалося завершити дію з базою даних. Недостатньо пам’яті"
+ "Повідомлення не надіслано"
+ "Деякі повідомлення не надіслано"
+
+ %d повідомлення в ланцюжках (%d)
+ %d повідомлення в ланцюжках (%d)
+ %d повідомлень у ланцюжках (%d)
+ %d повідомлення в ланцюжках (%d)
+
+ "Повідомлення не завантажено"
+ "Деякі повідомлення не завантажено"
+
+ %d повідомлення в ланцюжках (%d)
+ %d повідомлення в ланцюжках (%d)
+ %d повідомлень у ланцюжках (%d)
+ %d повідомлення в ланцюжках (%d)
+
+ "Повідомлення на номер %1$s не надіслано"
+ "Не вдалося надіслати текстове повідомлення на номер екстреної служби %1$s. Спробуйте зателефонувати."
+
+ %d нове повідомлення
+ %d нові повідомлення
+ %d нових повідомлень
+ %d нового повідомлення
+
+ "Почати"
+ "Камера недоступна"
+ "Камера недоступна"
+ "Відеозйомка недоступна"
+ "Не вдається зберегти медіафайли"
+ "Не вдається сфотографувати"
+ "Назад"
+ "Архів"
+ "Видалити"
+ "Архів"
+ "Розархівувати"
+ "Вимкнути сповіщення"
+ "Увімкнути сповіщення"
+ "Додати контакт"
+ "Завантажити"
+ "Надіслати"
+ "Видалити"
+ "Видалити це повідомлення?"
+ "Цю дію не можна скасувати."
+ "Видалити"
+
+ Видалити ці ланцюжки повідомлень?
+ Видалити ці ланцюжки повідомлень?
+ Видалити ці ланцюжки повідомлень?
+ Видалити ці ланцюжки повідомлень?
+
+ "Видалити"
+ "Скасувати"
+ "Кому:"
+ "Вибрати кілька зображень"
+ "Підтвердити вибір"
+ "+%d"
+ "Не вдається записати аудіо. Повторіть спробу."
+ "Не вдається відтворити аудіо. Повторіть спробу."
+ "Не вдалося зберегти аудіо. Повторіть спробу."
+ "Натисніть і утримуйте"
+ ", "
+ " "
+ ": "
+ " "
+ "Зображення"
+ "Аудіокліп"
+ "Відео"
+ "Картка контакта"
+ "Завантажити"
+ "Відповісти за допомогою SMS"
+ "Надіслати MMS"
+ "Відповісти"
+
+ %d учасник
+ %d учасники
+ %d учасників
+ %d учасника
+
+ "Я"
+ "Користувача заблоковано та заархівовано"
+ "Контакт розблоковано та розархівовано"
+ "Заархівовано: %d"
+ "Розархівовано: %d"
+ "Сповіщення вимкнено"
+ "Сповіщення ввімкнено"
+ "Готово. Торкніться опції \"Надіслати\" знову."
+ "Повідомлення тепер є додатком для SMS за умовчанням."
+
+ Видалити вкладені файли
+ Видалити вкладені файли
+ Видалити вкладені файли
+ Видалити вкладені файли
+
+ "Вкладений аудіофайл"
+ "Відтворити аудіовкладення"
+ "Пауза"
+ "Повідомлення від користувача %s: %s."
+ "Не вдалося надіслати повідомлення від користувача %s: %s. Час: %s."
+ "Повідомлення від користувача %s: %s. Час: %s."
+ "Ненадіслане повідомлення групі %s: %s. Час: %s."
+ "Надсилається повідомлення групі %s: %s. Час: %s."
+ "Не вдалося надіслати повідомлення групі %s: %s. Час: %s."
+ "Повідомлення групі %s: %s. Час: %s."
+ "Не вдалося надіслати повідомлення від користувача %s: %s. Час: %s. %s."
+ "Повідомлення від користувача %s: %s. Час: %s. %s."
+ "Ненадіслане повідомлення групі %s: %s. Час: %s."
+ "Надсилається повідомлення групі %s: %s. Час: %s."
+ "Не вдалося надіслати повідомлення групі %s: %s. Час: %s."
+ "Повідомлення групі %s: %s. Час: %s."
+ "Не вдалося надіслати повідомлення. Торкніться, щоб повторити спробу."
+ "Учасники бесіди: %s"
+ "Видалити тему"
+ "Зняти відео"
+ "Зняти статичне зображення"
+ "Зробити знімок"
+ "Почати запис відео"
+ "Показувати зображення з камери на весь екран"
+ "Переключатися між камерами на передній і задній панелях"
+ "Зупинити запис і долучити відео"
+ "Зупинити запис відео"
+ "Фото з повідомлень"
+
+ %d фотографію збережено в альбом \"%s\"
+ %d фотографії збережено в альбом \"%s\"
+ %d фотографій збережено в альбом \"%s\"
+ %d фотографії збережено в альбом \"%s\"
+
+
+ %d відео збережено в альбом \"%s\"
+ %d відео збережено в альбом \"%s\"
+ %d відео збережено в альбом \"%s\"
+ %d відео збережено в альбом \"%s\"
+
+
+ %d вкладений файл збережено в альбом \"%s\"
+ %d вкладені файли збережено в альбом \"%s\"
+ %d вкладених файлів збережено в альбом \"%s\"
+ %d вкладеного файлу збережено в альбом \"%s\"
+
+
+ %d вкладений файл збережено в папку \"Завантаження\"
+ %d вкладені файли збережено в папку \"Завантаження\"
+ %d вкладених файлів збережено в папку \"Завантаження\"
+ %d вкладеного файлу збережено в папку \"Завантаження\"
+
+
+ Збережено %d вкладений файл
+ Збережено %d вкладені файли
+ Збережено %d вкладених файлів
+ Збережено %d вкладеного файлу
+
+
+ Не вдалося зберегти %d вкладений файл
+ Не вдалося зберегти %d вкладені файли
+ Не вдалося зберегти %d вкладених файлів
+ Не вдалося зберегти %d вкладеного файлу
+
+ "Вкладення з MMS збережено"
+ "Налаштування"
+ "Архів"
+ "Закрити"
+ "MMS"
+ "Додатково"
+ "Налагодження"
+ "Сповіщення"
+ "Сигнал"
+ "Без звуку"
+ "Вібросигнал"
+ "Заблоковано"
+ "Звіти про доставку SMS"
+ "Запитувати звіт про доставку для кожного надісланого SMS"
+ "Автоматичне отримання"
+ "Автоматично отримувати MMS-повідомлення"
+ "Автоотримання в роумінгу"
+ "Автоматично отримувати MMS у роумінгу"
+ "Групові повідомлення"
+ "Використовуйте опцію MMS, щоб надсилати одне повідомлення декільком одержувачам"
+ "Додаток для SMS за умовчанням"
+ "Додаток для SMS за умовчанням"
+
+
+ "Ваш номер телефону"
+ "Невідомий"
+ "Сигнали для вихідних повідомлень"
+ "Записати дані SMS"
+ "Записати отримані вихідні дані SMS у файл зовнішньої пам’яті"
+ "Записати дані MMS"
+ "Записати отримані вихідні дані MMS у файл зовнішньої пам’яті"
+ "Сповіщення через бездротові мережі"
+ "Параметри повідомлення"
+ "Копіювати текст"
+ "Переглянути деталі"
+ "Видалити"
+ "Переслати"
+ "Деталі повідомлення"
+ "Тип: "
+ "SMS"
+ "Мультимедійне повідомлення"
+ "Від: "
+ "Кому: "
+ "Надіслано: "
+ "Отримано: "
+ "Тема: "
+ "Розмір: "
+ "Пріоритет: "
+ "SIM-карта: "
+ "Високий"
+ "Звичайний"
+ "Низький"
+ "SIM-карта %s"
+ "Прихована адреса відправника"
+ "Неможливо надіслати повідомлення під час завантаження вкладених файлів."
+ "Не вдається завантажити вкладений файл. Повторіть спробу."
+ "Мережа не готова. Повторіть спробу."
+ "Видалити текст"
+ "Переключення між введенням тексту та числами"
+ "Додати більше учасників"
+ "Підтвердити учасників"
+ "Почати нову бесіду"
+ "Вибрати цей елемент"
+ "Відтворити відео"
+ "Учасники й опції"
+ "Налагодження"
+ "Учасники й опції"
+ "Загальні"
+ "Учасники цієї бесіди"
+ "Телефонувати"
+ "Надіслати повідомлення"
+ "Надіслати повідомлення<br/><small>із SIM-карти %s</small>"
+
+ Надіслати фото
+ Надіслати фото
+ Надіслати фото
+ Надіслати фото
+
+
+ Надіслати аудіозаписи
+ Надіслати аудіозаписи
+ Надіслати аудіозаписи
+ Надіслати аудіозаписи
+
+
+ Надіслати відео
+ Надіслати відео
+ Надіслати відео
+ Надіслати відео
+
+
+ Надіслати картки контактів
+ Надіслати картки контактів
+ Надіслати картки контактів
+ Надіслати картки контактів
+
+
+ Надіслати вкладені файли
+ Надіслати вкладені файли
+ Надіслати вкладені файли
+ Надіслати вкладені файли
+
+
+ Можна надсилати %d вкладений файл
+ Можна надсилати %d вкладені файли
+ Можна надсилати %d вкладених файлів
+ Можна надсилати %d вкладеного файлу
+
+ "Надіслати відгук"
+ "Переглянути в магазині Google Play"
+ "Інформація про версію"
+ "Версія %1$s"
+ "Ліцензії відкритого коду"
+ "Сповіщення"
+ "Ви вклали максимальну кількість файлів"
+ "Не вдалося завантажити вкладений файл."
+ "Додати в контакти?"
+ "Додати контакт"
+ "Тема"
+ "Тема: "
+ "%s. %s"
+ "Завантаження картки контакта"
+ "Не вдалося завантажити картку контакта"
+ "Переглянути картку контакта"
+
+ %d контакт
+ %d контакти
+ %d контактів
+ %d контакта
+
+ "Картки контактів"
+ "День народження"
+ "Нотатки"
+ "Переслати повідомлення"
+ "Відповісти"
+ "+1"
+ "+%d"
+ "SMS вимкнено"
+ "Щоб надсилати SMS, зробіть Повідомлення додатком для SMS за умовчанням"
+ "Зробіть Повідомлення додатком для SMS за умовчанням"
+ "Змінити"
+ "Щоб отримувати повідомлення, зробіть Повідомлення додатком для SMS за умовчанням"
+ "Не вибрано основної SIM-карти для надсилання SMS-повідомлень"
+ "Власник пристрою не надав дозволів для цього додатка."
+ "ОК"
+ "Забагато учасників у бесіді"
+
+ Недійсні контакти
+ Недійсні контакти
+ Недійсні контакти
+ Недійсні контакти
+
+ "Не вдалося завантажити зображення з камери"
+ "Ви: "
+ "%s: "
+ "Чернетка"
+ "Коли ви почнете переписку, вона з’явиться тут"
+ "Тут відображаються заархівовані бесіди"
+ "Завантаження бесід…"
+ "Зображення"
+ "Аудіокліп"
+ "Відео"
+ "Картка контакта"
+ "MMS"
+ "Скасувати"
+ "Повторити"
+ "Щоб створити нове повідомлення, введіть ім’я контакта або номер телефону"
+ "Заблокувати"
+ "Блокувати користувача %s"
+ "Розблокувати користувача %s"
+ "Заблокувати номер %s?"
+ "Ви надалі отримуватимете повідомлення з цього номера, але не отримуватимете сповіщення. Цю бесіду буде заархівовано."
+ "Заблоковані контакти"
+ "РОЗБЛОКУВАТИ"
+ "Заблоковані контакти"
+ "Вибрати зображення з бібліотеки документів"
+ "Повідомлення надсилається"
+ "Повідомлення надіслано"
+ "Мобільне передавання даних вимкнено. Перевірте налаштування."
+ "Не вдається надіслати повідомлення в режимі польоту"
+ "Не вдалося надіслати повідомлення"
+ "Повідомлення завантажено"
+ "Мобільний Інтернет вимкнено. Перевірте налаштування."
+ "Неможливо завантажити повідомлення в режимі польоту"
+ "Не вдалося завантажити повідомлення"
+ "Нуль"
+ "Один"
+ "Два"
+ "Три"
+ "Чотири"
+ "П’ять"
+ "Шість"
+ "Сім"
+ "Вісім"
+ "Дев’ять"
+ "Не вдається надіслати повідомлення. Помилка %2$d, оператор %1$s"
+ "Не вдається надіслати повідомлення. Помилка %1$d, невідомий оператор"
+ "Пересилання: %s"
+ "Повідомлення не надіслано: послугу не активовано в мережі"
+ "Повідомлення не надіслано. Недійсна адреса одержувача"
+ "Повідомлення не надіслано. Повідомлення недійсне"
+ "Повідомлення не надіслано. Вміст не підтримується"
+ "Повідомлення не надіслано. Повідомлення не підтримується"
+ "Повідомлення не надіслано: текст задовгий"
+ "Нове повідомлення"
+ "Переглянути"
+ "Зображення"
+ "Не вдалося знайти відповідний додаток"
+ "Видалити отримувача"
+ "Нове повідомлення"
+ "Скасувати"
+ "Редагування точки доступу"
+ "Не вказано"
+ "Назва"
+ "Назва точки доступу"
+ "MMSC"
+ "Проксі MMS"
+ "Порт MMS"
+ "MCC"
+ "MNC"
+ "Тип назви точки доступу"
+ "Видалити назву точки доступу"
+ "Нова назва точки доступу"
+ "Зберегти"
+ "Відхилити"
+ "Поле \"Назва\" не може бути порожнім."
+ "Поле назви точки доступу не може бути порожнім."
+ "Поле MCC має містити 3 цифри."
+ "Поле MNC має містити 2 або 3 цифри."
+ "Відновлення налаштувань назви точки доступу за умовчанням."
+ "Відновити налаштування за умовчанням"
+ "Налаштування назви точки доступу за умовчанням відновлено."
+ "Без назви"
+ "Назви точок доступу"
+ "Назви точок доступу"
+ "Нова назва точки доступу"
+ "Цей користувач не може вказувати назву точки доступу"
+ "Копіювати в буфер обміну?"
+ "Копіювати"
+ "на SIM-карту %s"
+ "Загальні"
+ "Розширені"
+ "Загальні налаштування"
+ "Додаткові налаштування"
+ "SIM-карта \"%s\""
+ "Надсилати окремі SMS усім отримувачам. Відповіді надходитимуть лише вам"
+ "Надсилати одне MMS усім отримувачам"
+ "Невідомий номер"
+ "Нове повідомлення"
+ "Нове повідомлення."
+ "Вибір SIM-карти"
+ "Вибір SIM-карти: вибрано %1$s"
+ "Змінити тему"
+ "Вибрати SIM-карту або змінити тему"
+ "Торкніться й утримуйте, щоб записати аудіо"
+ "Почати нову бесіду"
+ "Повідомлення"
+ "Список у додатку Повідомлення"
+ "Повідомлення"
+ "Нове повідомлення"
+ "Список бесід"
+ "Завантаження бесід"
+ "Завантаження повідомлень"
+ "Переглянути інші бесіди"
+ "Переглянути більше повідомлень"
+ "Бесіду видалено"
+ "Бесіду видалено. Торкніться, щоб переглянути іншу бесіду в додатку Повідомлення"
+ "Заблоковано"
+ "Розблоковано"
+ "Замало пам’яті. Деякі дані можуть не зберегтись."
+ "Вибрати вкладені файли"
+ "Підтвердити вибір"
+ "Вибрано %d"
+ "Видаліть один або декілька вкладених файлів і повторіть спробу."
+ "Спробуйте надіслати повідомлення, але адресат може його не отримати, якщо ви не видалите один або декілька вкладених файлів."
+ "У повідомленні можна надіслати лише одне відео. Видаліть зайві відео та спробуйте знову."
+ "Не вдалося завантажити вкладенні файли."
+ "Усе одно надіслати"
+ "Не вдалося почати бесіду"
+ "%1$s (%2$s)"
+ "Вибрано %s"
+
diff --git a/res/values-ur-rPK/arrays.xml b/res/values-ur-rPK/arrays.xml
new file mode 100644
index 0000000..fa4e5da
--- /dev/null
+++ b/res/values-ur-rPK/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "بلا عنوان"
+ "بلا عنوان"
+
+
+ "ہاں"
+ "نہیں"
+ "ٹھیک ہے"
+ "Hehe"
+ "شکریہ"
+ "میں متفق ہوں"
+ "اچھا"
+ "راستے میں ہوں"
+ "ٹھیک ہے، میں بعد میں آپ سے رابطہ کرتا ہوں"
+ ":)"
+ ":("
+
+
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
new file mode 100644
index 0000000..1ed22e1
--- /dev/null
+++ b/res/values-ur-rPK/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "پیغام رسانی"
+ "پیغام رسانی"
+ "گفتگو منتخب کریں"
+ "ترتیبات"
+ "پیغام بھیجیں"
+ "ایک منسلکہ شامل کریں"
+ "مدد"
+ "خوش آمدید"
+ "نظر انداز کریں"
+ "اگلا >"
+ "آگے"
+ "باہر نکلیں"
+ "ترتیبات >"
+ "ترتیبات"
+ "پیغام رسانی کو SMS، فون اور رابطوں کیلئے اجازت درکار ہے۔"
+ "آپ ترتیبات > ایپس > پیغام رسانی > اجازتوں میں جا کر اجازتیں تبدیل کر سکتے ہیں۔"
+ "آپ ترتیبات، ایپس، پیغام رسانی، اجازتوں میں جا کر اجازتیں تبدیل کر سکتے ہیں۔"
+ "اکثر و بیشتر"
+ "سبھی رابطے"
+ "%s پر بھیجیں"
+ "تصاویر یا ویڈیو کیپچر کریں"
+ "اس آلہ سے تصاویر منتخب کریں"
+ "آڈیو ریکارڈ کریں"
+ "تصویر منتخب کریں"
+ "میڈیا منتخب کردہ ہے۔"
+ "میڈیا غیر منتخب کردہ ہے۔"
+ "%d کو منتخب کیا گیا"
+ "تصویر %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "تصویر"
+ "آڈیو ریکارڈ کریں"
+ "اشتراک کریں"
+ "ابھی ابھی"
+ "ابھی"
+
+ %d منٹ
+ %d منٹ
+
+
+ %d گھنٹے
+ %d گھنٹہ
+
+
+ %d دن
+ %d دن
+
+
+ %d ہفتے
+ ایک ہفتہ
+
+
+ %d مہینے
+ ایک ماہ
+
+
+ %d سال
+ ایک سال
+
+ "کلاس 0 پیغام"
+ "محفوظ کریں"
+ "آلہ میں جگہ کم ہے۔ پیغام رسانی جگہ خالی کرنے کیلئے خودکار طریقے سے پرانے پیغامات حذف کر دے گی۔"
+ "اسٹوریج کی جگہ ختم ہو رہی ہے"
+ "جب تک آپ کے آلہ پر مزید جگہ دستیاب نہ ہو، ممکن ہے اس وقت تک پیغام رسانی نہ پیغامات بھیجے یا نہ موصول کرے۔"
+ "SMS کا کم اسٹوریج۔ آپ کو کچھ پیغامات کو حذف کرنے کی ضرورت پڑ سکتی ہے۔"
+ "اپنے فون نمبر کی توثیق کریں"
+ "یہ یک وقتی مرحلہ اس بات کو یقینی بنائے گا کہ پیغام رسانی آپ کے گروپ پیغامات کو مناسب طریقے سے ڈیلیور کرے گی۔"
+ "فون نمبر"
+ "میڈیا والے سبھی پیغامات کو حذف کریں"
+ "%s سے پرانے پیغامات کو حذف کر دیں"
+ "%s سے پہلے کے پیغامات کو خودکار طور پر حذف کریں"
+ "نظر انداز کریں"
+ "میڈیا کے ساتھ سبھی پیغامات کو حذف کریں؟"
+ "%s سے پہلے کے پیغامات کو حذف کریں؟"
+ "%s سے پہلے کے پیغامات کو حذف کریں اور خودکار طور پر حذف کرنے کو آن کریں؟"
+ "%s نے کہا"
+ "آپ نے کہا"
+ "پیغام منجانب %s"
+ "آپ نے ایک پیغام بھیجا"
+ "بھیجا جا رہا ہے…"
+ "بھیجا نہیں گیا۔ دوبارہ کوشش کرنے کیلئے ٹچ کریں۔"
+ "بھیجا نہیں گیا۔ دوبارہ کوشش کی جا رہی ہے…"
+ "دوبارہ بھیجیں یا حذف کریں"
+ "براہ کرم ہنگامی سروسز کیلئے ایک صوتی کال کریں۔ آپ کا متنی پیغام اس وقت ڈیلیور نہیں کیا جا سکا۔"
+ "ناکام"
+ "ڈاؤن لوڈ کرنے کیلئے نیا MMS پیغام"
+ "نیا MMS پیغام"
+ "ڈاؤن لوڈ نہیں کیا جا سکا"
+ "دوبارہ کوشش کرنے کیلئے ٹچ کریں"
+ "ڈاؤن لوڈ کرنے کیلئے ٹچ کریں"
+ "ڈاؤن لوڈ کریں یا حذف کریں"
+ "ڈاؤن لوڈ ہو رہا ہے…"
+ "پیغام کی میعاد ختم ہو گئی یا دستیاب نہیں ہے"
+ "سائز: %1$s، اختتامی میعاد: %2$s"
+ "بھیجا نہیں جا سکتا۔ وصول کنندہ درست نہیں ہے۔"
+ "نیٹ ورک پر سروس فعال نہیں ہے"
+ "نیٹ ورک کے مسئلہ کی وجہ سے نہیں بھیجا جا سکا"
+ "پیغام کی میعاد ختم ہو گئی یا دستیاب نہیں ہے"
+ "(بلا عنوان)"
+ "نامعلوم ارسال کنندہ"
+ "ڈیلیور ہو گیا"
+ "پیغام %1$s کو %2$s سے ڈاؤن لوڈ نہیں کیا جا سکا۔"
+ "کم میموری کی وجہ سے ڈیٹا بیس کی کارروائی مکمل نہیں ہو سکی"
+ "پیغام نہیں بھیجا گیا"
+ "پیغام رسانی میں کچھ پیغامات کو نہیں بھیجا گیا"
+
+ %d گفتگوؤں میں %d پیغامات
+ ایک گفتگو میں %d پیغامات
+
+ "پیغام ڈاؤن لوڈ نہیں ہوا"
+ "پیغام رسانی میں کچھ پیغامات ڈاؤن لوڈ نہیں ہوئے"
+
+ %d گفتگوؤں میں %d پیغامات
+ ایک گفتگو میں %d یغامات
+
+ "%1$s پر پیغام نہیں بھیجا گیا"
+ "براہ کرم ہنگامی سروسز کیلئے ایک صوتی کال کریں۔ %1$s پر آپ کا متنی پیغام اس وقت ڈیلیور نہیں کیا جا سکا۔"
+
+ %d نئے پیغامات
+ نیا پیغام
+
+ "شروع کریں"
+ "کیمرہ دستیاب نہیں ہے"
+ "کیمرہ دستیاب نہیں ہے"
+ "ویڈیو کیپچر دستیاب نہیں ہے"
+ "میڈیا کو محفوظ نہیں کیا جا سکتا ہے"
+ "تصویر نہیں لی جا سکتی"
+ "واپس جائیں"
+ "آرکائیو کردہ"
+ "حذف کریں"
+ "آرکائیو کریں"
+ "آرکائیو سے نکالیں"
+ "اطلاعات آف کریں"
+ "اطلاعات آن کریں"
+ "رابطہ شامل کریں"
+ "ڈاؤن لوڈ کریں"
+ "بھیجیں"
+ "حذف کریں"
+ "یہ پیغام حذف کریں؟"
+ "اس عمل کو کالعدم نہیں کیا جاسکتا۔"
+ "حذف کریں"
+
+ ان گفتگوؤں کو حذف کریں؟
+ اس گفتگو کو حذف کریں؟
+
+ "حذف کریں"
+ "منسوخ کریں"
+ "بنام"
+ "متعدد تصاویر منتخب کریں"
+ "انتخاب کی توثیق کریں"
+ "+%d"
+ "آڈیو کو ریکارڈ نہیں کیا جا سکتا ہے۔ دوبارہ کوشش کریں۔"
+ "آڈیو کو چلایا نہیں جا سکتا ہے۔ دوبارہ کوشش کریں۔"
+ "آڈیو کو محفوظ نہیں کیا جا سکا۔ دوبارہ کوشش کریں۔"
+ "ٹچ کریں اور دبائے رکھیں"
+ "، "
+ " "
+ ": "
+ " "
+ "تصویر"
+ "آڈیو کلپ"
+ "ویڈیو"
+ "رابطہ کارڈ"
+ "ڈاؤن لوڈ کریں"
+ "SMS کے ذریعے جواب دیں"
+ "MMS کے ذریعے جواب دیں"
+ "جواب دیں"
+
+ %d شرکت کنندگان
+ %d شرکت کنندہ
+
+ "میں"
+ "رابطہ کو مسدود اور آرکائیو کر دیا گیا"
+ "رابطہ کو غیر مسدود کر دیا گیا اور آرکائیو سے نکال دیا گیا"
+ "%d کو آرکائیو کر دیا گیا"
+ "%d کو آرکائیو سے نکال دیا گیا"
+ "اطلاعات آف کر دی گئیں"
+ "اطلاعات آن کر دی گئیں"
+ "سب ٹھیک ہے۔ بھیجیں کو دوبارہ ٹچ کریں۔"
+ "پیغام رسانی کامیابی سے بطور ڈیفالٹ SMS ایپ سیٹ ہو گئی۔"
+
+ منسلکہ جات کو مسترد کریں
+ منسلکہ کو مسترد کریں
+
+ "آڈیو منسلکہ"
+ "آڈیو منسلکہ چلائیں"
+ "موقوف کریں"
+ "پیغام منجانب %s: %s۔"
+ "ناکام پیغام منجانب %s: %s۔ وقت: %s۔"
+ "پیغام منجانب %s: %s۔ وقت: %s۔"
+ "غیر ارسال کردہ پیغام بنام %s: %s۔ وقت: %s۔"
+ "پیغام بھیجا جا رہا ہے بنام %s: %s۔ وقت: %s۔"
+ "ناکام پیغام بنام %s: %s۔ وقت: %s۔"
+ "پیغام بنام %s: %s۔ وقت: %s۔"
+ "ناکام پیغام منجانب %s: %s۔ وقت: %s۔ %s۔"
+ "پیغام منجانب %s: %s۔ وقت: %s۔ %s۔"
+ "غیر ارسال کردہ پیغام بنام %s: %s۔ وقت: %s۔"
+ "پیغام بھیجا جا رہا ہے بنام %s: %s۔ وقت: %s۔"
+ "ناکام پیغام بنام %s: %s۔ وقت: %s۔"
+ "پیغام بنام %s: %s۔ وقت: %s۔"
+ "ناکام پیغام۔ دوبارہ کوشش کرنے کیلئے ٹچ کریں۔"
+ "%s کے ساتھ گفتگو"
+ "موضوع حذف کریں"
+ "ویڈیو کیپچر کریں"
+ "ایک ساکت تصویر کیپچر کریں"
+ "تصویر لیں"
+ "ویڈیو ریکارڈ کرنا شروع کریں"
+ "پوری اسکرین کے کیمرہ پر سوئچ کریں"
+ "سامنے اور پیچھے کے کیمرے کے درمیان سوئچ کریں"
+ "ریکارڈنگ بند کریں اور ویڈیو منسلک کریں"
+ "ویڈیو ریکارڈ کرنے کو روکیں"
+ "پیغام رسانی تصاویر"
+
+ %d تصاویر \"%s\" البم میں محفوظ ہو گئیں
+ %d تصویر \"%s\" البم میں محفوظ ہو گئی
+
+
+ %d ویڈیوز \"%s\" البم میں محفوظ ہو گئیں
+ %d ویڈیو \"%s\" البم میں محفوظ ہو گئی
+
+
+ %d منسلکہ جات \"%s\" البم میں محفوظ ہو گئیں
+ %d منسلکہ \"%s\" البم میں محفوظ ہو گئی
+
+
+ %d منسلکہ جات \'ڈاؤن لوڈز\' میں محفوظ ہو گئیں
+ %d منسلکہ \'ڈاؤن لوڈز\' میں محفوظ ہو گئی
+
+
+ %d منسلکہ جات کو محفوظ کر دیا گیا
+ %d منسلکہ کو محفوظ کر دیا گیا
+
+
+ %d منسلکہ جات کو محفوظ نہیں کیا جا سکا
+ %d منسلکہ کو محفوظ نہیں کیا جا سکا
+
+ "MMS منسلکہ کو محفوظ کر دیا گیا"
+ "ترتیبات"
+ "آرکائیو کردہ"
+ "بند کریں"
+ "MMS"
+ "جدید ترین"
+ "ڈیبگ کریں"
+ "اطلاعات"
+ "آواز"
+ "خاموش"
+ "وائبریٹ"
+ "مسدود"
+ "SMS ڈیلیوری کی رپورٹس"
+ "اپنے ذریعہ بھیجے جانے والے ہر SMS کی ایک ڈیلیوری رپورٹ کی درخواست کریں"
+ "خودکار طور پر بازیافت کریں"
+ "خود کار طور پر MMS پیغامات کی بازیابی کریں"
+ "رومنگ کے وقت خود کار بازیابی"
+ "رومنگ میں رہتے ہوئے MMS کی خود کار طور پر بازيابی کریں"
+ "گروپ پیغام رسانی"
+ "متعدد وصول کنندگان ہونے کی صورت میں ایک پیغام بھیجنے کیلئے MMS استعمال کریں"
+ "ڈیفالٹ SMS ایپ"
+ "ڈیفالٹ SMS ایپ"
+
+
+ "آپ کا فون نمبر"
+ "نامعلوم"
+ "آؤٹ گوئنگ پیغامات کی آوازیں"
+ "SMS کو ڈمپ کریں"
+ "وصول کردہ SMS خام ڈیٹا کو خارجی اسٹوریج فائل میں ڈمپ کریں"
+ "MMS کو ڈمپ کریں"
+ "وصول کردہ MMS خام ڈیٹا کو خارجی اسٹوریج فائل میں ڈمپ کریں"
+ "وائرلیس الرٹس"
+ "پیغام کے اختیارات"
+ "متن کاپی کریں"
+ "تفصیلات دیکھیں"
+ "حذف کریں"
+ "فارورڈ کریں"
+ "پیغام کی تفصیلات"
+ "قسم: "
+ "متنی پیغام"
+ "ملٹی میڈیا پیغام"
+ "منجانب: "
+ "بنام: "
+ "ارسال کردہ: "
+ "موصول کردہ: "
+ "موضوع: "
+ "سائز: "
+ "ترجیح: "
+ "SIM: "
+ "اعلی"
+ "عام"
+ "کم"
+ "SIM %s"
+ "ارسال کنندہ کا پتہ مخفی کر دیا گیا"
+ "منسلکات کو لوڈ کرتے وقت پیغام نہیں بھیجا جا سکتا۔"
+ "منسلکہ کو لوڈ نہیں کیا جا سکتا۔ دوبارہ کوشش کریں۔"
+ "نیٹ ورک تیار نہیں ہے۔ دوبارہ کوشش کریں۔"
+ "متن کو حذف کریں"
+ "متن اور اعداد درج کرنے کے بیچ سوئچ کریں"
+ "مزید شرکاء کو شامل کریں"
+ "شرکاء کی توثیق کریں"
+ "نئی گفتگو شروع کریں"
+ "اس آئٹم کو منتخب کریں"
+ "ویڈیو چلائیں"
+ "لوگ اور اختیارات"
+ "ڈیبگ کریں"
+ "لوگ اور اختیارات"
+ "عام"
+ "اس گفتگو میں موجود لوگ"
+ "ایک کال کریں"
+ "پیغام بھیجیں"
+ "پیغام بھیجیں<br/><small>از %s</small>"
+
+ تصاویر بھیجیں
+ تصویر بھیجیں
+
+
+ آڈیوز بھیجیں
+ آڈیو بھیجیں
+
+
+ ویڈیوز بھیجیں
+ ویڈیو بھیجیں
+
+
+ رابطہ کارڈز بھیجیں
+ رابطہ کارڈ بھیجیں
+
+
+ منسلکہ جات بھیجیں
+ منسلکہ بھیجیں
+
+
+ %d منسلکہ جات بھیجنے کیلئے تیار
+ ایک منسلکہ بھیجنے کیلئے تیار
+
+ "تاثرات بھیجیں"
+ "Google Play اسٹور میں دیکھیں"
+ "ورژن کی معلومات"
+ "ورژن %1$s"
+ "اوپن سورس لائسنسز"
+ "اطلاعات"
+ "منسلکہ کی حد تک پہنچ گئے"
+ "منسلکہ لوڈ کرنے میں ناکام۔"
+ "رابطوں میں شامل کریں؟"
+ "رابطہ شامل کریں"
+ "موضوع"
+ "موضوع: "
+ "%s%s"
+ "رابطہ کارڈ لوڈ کر رہا ہے"
+ "رابطہ کارڈ کو لوڈ نہیں کیا جا سکا"
+ "رابطہ کارڈ دیکھیں"
+
+ %d رابطے
+ %d رابطہ
+
+ "رابطہ کارڈز"
+ "سالگرہ"
+ "نوٹس"
+ "پیغام فارورڈ کریں"
+ "جواب دیں"
+ "+1"
+ "+%d"
+ "SMS غیر فعال ہے"
+ "بھیجنے کیلئے پیغام رسانی کو بطور ڈیفالٹ SMS ایپ سیٹ کریں"
+ "پیغام رسانی کو بطور ڈیفالٹ SMS ایپ سیٹ کریں"
+ "تبدیل کریں"
+ "پیغامات موصول کرنے کیلئے پیغام رسانی کو بطور ڈیفالٹ SMS ایپ سیٹ کریں"
+ "SMS پیغامات بھیجنے کیلئے کوئی ترجیحی SIM منتخب نہیں کیا گیا"
+ "آلہ کے مالک نے اس ایپ کی اجازت نہیں دی ہے۔"
+ "ٹھیک ہے"
+ "ایک گفتگو میں بہت زیادہ شرکاء"
+
+ غلط رابطے
+ غلط رابطہ
+
+ "کیمرے کی تصویر کو لوڈ نہیں کیا جا سکا"
+ "آپ: "
+ "%s: "
+ "مسودہ"
+ "کوئی نئی گفتگو شروع کرنے پر، آپ اسے یہاں مندرج دیکھیں گے"
+ "آرکائیو کردہ گفتگوئیں یہاں ظاہر ہوتی ہیں"
+ "گفتگوئیں لوڈ ہو رہی ہیں…"
+ "تصویر"
+ "آڈیو کلپ"
+ "ویڈیو"
+ "رابطہ کارڈ"
+ "MMS"
+ "کالعدم کریں"
+ "دوبارہ کوشش کریں"
+ "ایک نیا پیغام شروع کرنے کیلئے رابطہ کا ایک نام یا فون نمبر درج کریں"
+ "مسدود کریں"
+ "%s کو مسدود کریں"
+ "%s کو غیر مسدود کریں"
+ "%s کو مسدود کریں؟"
+ "آپ کو اس نمبر سے پیغامات موصول ہوتے رہیں گے لیکن مزید مطلع نہیں کیا جائے گا۔ اس گفتگو کو آرکائیو کر دیا جائے گا۔"
+ "مسدود رابطے"
+ "غیر مسدود کریں"
+ "مسدود رابطے"
+ "دستاویز لائبریری سے تصویر منتخب کریں"
+ "پیغام بھیجا جا رہا ہے"
+ "پیغام بھیج دیا گیا"
+ "سیلولر ڈیٹا آف ہے۔ اپنی ترتیبات چیک کریں۔"
+ "پیغامات کو ہوائی جہاز وضع میں نہیں بھیجا جا سکتا ہے"
+ "پیغام بھیجا نہیں جا سکا"
+ "پیغام ڈاؤن لوڈ ہو گیا"
+ "سیلولر ڈیٹا آف ہے۔ اپنی ترتیبات چیک کریں۔"
+ "ہوائی جہاز وضع میں پیغامات ڈاؤن لوڈ نہیں کیے جا سکتے ہیں"
+ "پیغام ڈاؤن لوڈ نہیں کیا جا سکا"
+ "صفر"
+ "ایک"
+ "دو"
+ "تین"
+ "چار"
+ "پانچ"
+ "چھ"
+ "سات"
+ "آٹھ"
+ "نو"
+ "%1$s کے ساتھ پیغام نہیں بھیجا جا سکتا، خرابی %2$d"
+ "نامعلوم کیرئیر کے ساتھ پیغام نہیں بھیجا جا سکتا، خرابی %1$d"
+ "آگے منتقل کریں: %s"
+ "پیغام نہیں بھیجا گیا: سروس نیٹ ورک پر فعال نہیں ہے"
+ "پیغام نہیں بھیجا گیا: منزل مقصول کا غلط پتہ"
+ "پیغام نہیں بھیجا گیا: غلط پیغام"
+ "پیغام نہیں بھیجا گیا: غیر تعاون یافتہ مواد"
+ "پیغام کو نہیں بھیجا گیا: غیر تعاون یافتہ پیغام"
+ "پیغام نہیں بھیجا گیا: کافی بڑا ہے"
+ "نیا پیغام"
+ "دیکھیں"
+ "تصویر"
+ "ایک مناسب ایپلیکیشن تلاش نہیں کی جا سکی"
+ "وصول کنندہ کو ہٹائیں"
+ "نیا پیغام"
+ "منسوخ کریں"
+ "رسائی کی جگہ میں ترمیم کریں"
+ "سیٹ نہیں ہے"
+ "نام"
+ "APN"
+ "MMSC"
+ "MMS پراکسی"
+ "MMS پورٹ"
+ "MCC"
+ "MNC"
+ "APN قسم"
+ "APN کو حذف کریں"
+ "نیا APN"
+ "محفوظ کریں"
+ "مسترد کریں"
+ "نام کی فیلڈ خالی نہیں رہ سکتی-"
+ "APN خالی نہيں رہ سکتا۔"
+ "MCC فیلڈ میں 3 ہندسے ہونا ضروری ہے۔"
+ "MNC فیلڈ میں 2 یا 3 ہندسے ہونا ضروری ہے-"
+ "ڈیفالٹ APN ترتیبات بحال ہو رہی ہیں-"
+ "ڈیفالٹ پر دوبارہ ترتیب دیں"
+ "ڈیفالٹ APN ترتیبات کو دوبارہ ترتیب دینے کا عمل مکمل ہو گیا-"
+ "بلا عنوان"
+ "رسائی کی جگہ کے نام"
+ "APNs"
+ "نیا APN"
+ "رسائی کی جگہ کے نام کی ترتیبات اس صارف کیلئے دستیاب نہیں ہیں"
+ "کلپ بورڈ پر کاپی کریں؟"
+ "کاپی کریں"
+ "%s پر"
+ "عام"
+ "جدید ترین"
+ "عام ترتیبات"
+ "جدید ترین ترتیبات"
+ "\"%s\" SIM"
+ "سبھی وصول کنندگان کو انفرادی SMS پیغامات بھیجیں۔ صرف آپ کو کوئی جوابات موصول ہوں گے"
+ "سبھی وصول کنندگان کو ایک MMS بھیجیں"
+ "نامعلوم نمبر"
+ "نیا پیغام"
+ "نیا پیغام۔"
+ "SIM کا انتخاب کنندہ"
+ "منتخب شدہ %1$s، SIM کا انتخاب کنندہ"
+ "موضوع میں ترمیم کریں"
+ "SIM منتخب کریں یا موضوع میں ترمیم کریں"
+ "آڈیو ریکارڈ کرنے کیلئے ٹچ کریں اور پکڑ کر رکھیں"
+ "نئی گفتگو شروع کریں"
+ "پیغام رسانی"
+ "پیغام رسانی کی فہرست"
+ "پیغام رسانی"
+ "نیا پیغام"
+ "گفتگو کی فہرست"
+ "گفتگوئیں لوڈ ہو رہی ہیں"
+ "پیغامات لوڈ ہو رہے ہیں"
+ "مزید گفتگوئیں دیکھیں"
+ "مزید پیغامات دیکھیں"
+ "گفتگو کو حذف کر دیا گیا"
+ "گفتگو حذف ہوگئی۔ پیغام رسانی کی ایک دوسری گفتگو دکھانے کیلئے ٹچ کریں"
+ "مسدود"
+ "غیر مسدود"
+ "اسٹوریج کی جگہ کم ہے۔ کچھ ڈیٹا ضائع ہو سکتا ہے۔"
+ "منسلکات منتخب کریں"
+ "انتخاب کی توثیق کریں"
+ "%d کو منتخب کیا گیا"
+ "براہ کرم ایک یا مزید منسلکات ہٹائیں اور دوبارہ کوشش کریں۔"
+ "آپ اپنا پیغام بھیجنے کی کوشش کر سکتے ہیں، لیکن ہو سکتا ہے وہ تب تک ڈیلیور نہ ہو جب تک کہ آپ ایک یا مزيد منسلکات نہیں ہٹا دیتے۔"
+ "آپ فی پیغام صرف ایک ویڈیو بھیج سکتے ہیں۔ براہ کرم اضافی ویڈیوز ہٹائیں اور دوبارہ کوشش کریں۔"
+ "پیغام رسانی منسلکہ کو لوڈ کرنے میں ناکام رہی۔"
+ "بہر صورت بھیجیں"
+ "گفتگو شروع نہیں کی جا سکی"
+ "%1$s (%2$s)"
+ "%s منتخب کردہ"
+
diff --git a/res/values-uz-rUZ/arrays.xml b/res/values-uz-rUZ/arrays.xml
new file mode 100644
index 0000000..79b4c47
--- /dev/null
+++ b/res/values-uz-rUZ/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "mavzu yo‘q"
+ "mavzu yo‘q"
+
+
+ "Ha"
+ "Yo‘q"
+ "OK"
+ "Ha-ha"
+ "Rahmat"
+ "Yaxshi"
+ "Ajoyib"
+ "Yo‘ldaman"
+ "OK, keyinroq telefon qilaman"
+ ":)"
+ ":("
+
+
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
new file mode 100644
index 0000000..2437398
--- /dev/null
+++ b/res/values-uz-rUZ/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Xabarlar"
+ "Xabarlar"
+ "Suhbatni tanlang"
+ "Sozlamalar"
+ "Xabar yuborish"
+ "Fayl biriktiring"
+ "Yordam"
+ "Xush kelibsiz"
+ "O’tkazib yuborish"
+ "Keyingi >"
+ "Keyingi"
+ "Chiqish"
+ "Sozlamalar >"
+ "Sozlamalar"
+ "SMS/MMS xizmatiga SMS, Telefon va Kontaktlardan foydalanish uchun ruxsat zarur."
+ "Ruxsatnomalarni bu yerdan o‘zgartiring: Sozlamalar > Ilovalar > SMS/MMS > Ruxsatnomalar"
+ "Ruxsatnomalarni bu yerdan o‘zgartiring: Sozlamalar > Ilovalar > SMS/MMS > Ruxsatnomalar"
+ "Tez-tez"
+ "Barcha kontaktlar"
+ "Yuborish: %s"
+ "Rasm yoki video tasvirga olish"
+ "Ushbu qurilmadan rasmlarni tanlang"
+ "Audio yozish"
+ "Rasmni tanlang"
+ "Media tanlandi."
+ "Mediani tanlash bekor qilindi."
+ "%d ta tanlandi"
+ "tasvir %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "tasvir"
+ "Audio yozish"
+ "Ulashish"
+ "Hozir"
+ "Hozir"
+
+ %d daqiqa
+ %d daqiqa
+
+
+ %d soat
+ %d soat
+
+
+ %d kun
+ %d kun
+
+
+ %d hafta
+ bir hafta
+
+
+ %d oy
+ bir oy
+
+
+ %d yil
+ bir yil
+
+ "0-toifa xabari"
+ "Saqlash"
+ "Qurilma xotirasidagi bo‘sh joy kam qolmoqda. Joy bo‘shatish uchun eskiroq xabarlar avtomatik o‘chirib tashlanadi."
+ "Xotirada bo‘sh joy tugamoqda"
+ "Qurilmangizda bo‘sh joy kam qolsa, SMS/MMS xizmati xabarlarni yubora yoki qabul qila olmay qolishi mumkin."
+ "SMS uchun xotirada joy kam. Sizdan ba’zi xabarlarni o‘chirish talab qilinishi mumkin."
+ "Telefon raqamingizni tasdiqlang"
+ "Bu bir martalik bosqich bajarilsa, SMS/MMS xizmati guruh xabarlarini to‘g‘ri yuboradigan bo‘ladi."
+ "Telefon raqami"
+ "Barcha multimediali xabarlarni o‘chirish"
+ "%sdan eski xabarlar o‘chirilsin"
+ "%sdan oldingi xabarlar avtomatik o‘chirilsin"
+ "E’tiborsiz qoldirish"
+ "Media faylli barcha xabarlar o‘chirib tashlansinmi?"
+ "%s dan oldingi barcha xabarlar o‘chirib tashlansinmi?"
+ "%sdan oldingi xabarlar o‘chirilib, avtomatik o‘chirish funksiyasi yoqilsinmi?"
+ "%s dedi"
+ "Siz dedingiz"
+ "%s yuborgan xabar"
+ "Siz xabar yubordingiz"
+ "Yuborilmoqda…"
+ "Yuborilmadi. Qayta urinish uchun bosing."
+ "Yuborilmadi. Qayta urinilmoqda…"
+ "Qayta yuboring yoki o‘chirib tashlang"
+ "Favqulodda xizmatlarga ovozli qo‘ng‘iroq qiling. Favqulodda xizmat raqamlariga yuborilgan SMS xabarlarni hozirda yetkazib bo‘lmaydi."
+ "Xabar yuborilmadi"
+ "Yuklab olish uchun yangi MMS xabari"
+ "Yangi MMS xabari"
+ "Yuklab olinmadi"
+ "Qayta urinish uchun bosing"
+ "Yuklab olish uchun bosing"
+ "Yuklab oling yoki o‘chirib tashlang"
+ "Yuklab olinmoqda…"
+ "Xabar eskirgan yoki mavjud emas"
+ "hajmi: %1$s, tugash muddati: %2$s"
+ "Yuborib bo‘lmadi. Qabul qiluvchi noto‘g‘ri ko‘rsatilgan."
+ "Xizmat tarmoqda faollashtirilmagan"
+ "Tarmoqdagi muammo tufayli yuborib bo‘lmadi"
+ "Xabar eskirgan yoki mavjud emas"
+ "(Mavzu yo‘q)"
+ "Noma’lum yuboruvchi"
+ "Yetkazildi"
+ "“%1$s” to‘g‘risidagi xabarni (yuboruvchi: %2$s) yuklab bo‘lmadi."
+ "Xotirada kam joy qolganligi sababli ma’lumotlar bazasi amalini bajarib bo‘lmaydi"
+ "Xabar yuborilmadi"
+ "SMS/MMS xizmatidagi ayrim xabarlar yuborilmadi"
+
+ Suhbatlar: %d, xabarlar: %d
+ Suhbatdagi xabarlar soni: %d
+
+ "Xabar yuklab olinmadi"
+ "SMS/MMS xizmatidagi ayrim xabarlar yuklab olinmadi"
+
+ Suhbatlar: %d, xabarlar: %d
+ Suhbatdagi xabarlar soni: %d
+
+ "%1$s raqamiga xabar yuborilmadi"
+ "Favqulodda xizmatlarga ovozli qo‘ng‘iroq qiling. %1$s raqamiga yuborgan SMS xabaringizni hozir yetkazib bo‘lmaydi."
+
+ %d ta yangi xabar
+ Yangi xabar
+
+ "Boshlash"
+ "Kamera tayyor emas"
+ "Kamera tayyor emas"
+ "Videoga olib bo‘lmaydi"
+ "Media faylni saqlab bo‘lmadi"
+ "Rasmga olib bo‘lmadi"
+ "Orqaga"
+ "Arxivlangan"
+ "O‘chirish"
+ "Arxivlash"
+ "Arxivdan chiqarish"
+ "Bildirishnomalarni o‘chirib qo‘yish"
+ "Bildirishnomalarni yoqish"
+ "Kontakt qo‘shish"
+ "Yuklab olish"
+ "Yuborish"
+ "O‘chirish"
+ "Ushbu xabar o‘chirilsinmi?"
+ "Ushbu amalni bekor qilib bo‘lmaydi."
+ "O‘chirish"
+
+ Bu suhbatlar o’chirib tashlansinmi?
+ Bu suhbat o’chirib tashlansinmi?
+
+ "O‘chirish"
+ "Bekor qilish"
+ "Kimga:"
+ "Bir nechta rasm tanlash"
+ "Tanlovni tasdiqlash"
+ "+%d ta"
+ "Audioni yozib bo‘lmadi. Qaytadan urining."
+ "Audioni ijro qilib bo‘lmadi. Qaytadan urining."
+ "Audioni saqlab bo‘lmadi. Qaytadan urining."
+ "Bosib turing"
+ ", "
+ " "
+ ": "
+ " "
+ "Rasm"
+ "Audio-klip"
+ "Video"
+ "Kontaktlar kartasi"
+ "Yuklab olish"
+ "SMS orqali javob berish"
+ "MMS orqali javob"
+ "Javob berish"
+
+ %d ta ishtirokchi
+ %d ta ishtirokchi
+
+ "Men"
+ "Kontakt bloklandi va arxivlandi"
+ "Kontakt blokdan va arxivdan chiqarildi"
+ "%d ta qayd arxivlandi"
+ "%d ta qayd arxivdan chiqarildi"
+ "Bildirishnomalar o‘chirib qo‘yildi"
+ "Bildirishnomalar yoqildi"
+ "Hammasi tayyor. Endi “Yuborish” tugmasini bosing."
+ "SMS/MMS xizmati birlamchi SMS ilovasi sifatida o‘rnatildi."
+
+ Biriktirmalarni olib tashlash
+ Biriktirmani olib tashlash
+
+ "Ovozli biriktirma"
+ "Audio biriktirmani ijro qilish"
+ "To‘xtatib turish"
+ "%s yuborgan xabar: %s."
+ "%s yuborgan muvaffaqiyatsiz xabar: %s. Vaqt: %s"
+ "%s yuborgan xabar: %s. Vaqt: %s"
+ "%sga yuborilmay qolgan xabar: %s. Vaqt: %s"
+ "%sga xabar yuborilmoqda: %s. Vaqt: %s"
+ "%sga yuborilgan muvaffaqiyatsiz xabar: %s. Vaqt: %s"
+ "%sga xabar: %s. Vaqt: %s"
+ "%s yuborgan muvaffaqiyatsiz xabar: %s. Vaqt: %s. %s"
+ "%s yuborgan xabar: %s. Vaqt: %s. %s"
+ "%s guruhiga yuborilmay qolgan xabar: %s. Vaqt: %s"
+ "%s guruhiga xabar yuborilmoqda: %s. Vaqt: %s"
+ "%s guruhiga yuborilgan muvaffaqiyatsiz xabar: %s. Vaqt: %s"
+ "%s guruhiga xabar: %s. Vaqt: %s"
+ "Muvaffaqiyatsiz xabar. Qayta urinish uchun bosing."
+ "%s bilan suhbat"
+ "Mavzuni o‘chirish"
+ "Video tasvirga olish"
+ "Harakatsiz rasmni suratga olish"
+ "Rasmga olish"
+ "Video tasvirga olishni boshlash"
+ "To‘liq ekranli kameraga o‘tish"
+ "Old va orqa kamera o‘rtasida almashish"
+ "Tasvirga olishni to‘xtatish va faylni biriktirish"
+ "Videoga olishni to‘xtatish"
+ "SMS/MMS rasmlari"
+
+ %d ta rasm “%s” albomiga saqlandi
+ %d ta rasm “%s” albomiga saqlandi
+
+
+ %d ta video “%s” albomiga saqlandi
+ %d ta video “%s” albomiga saqlandi
+
+
+ %d ta biriktirma “%s” albomiga saqlandi
+ %d ta biriktirma “%s” albomiga saqlandi
+
+
+ %d ta biriktirma “Yuklanishlar” jildiga saqlandi
+ %d ta biriktirma “Yuklanishlar” jildiga saqlandi
+
+
+ %d ta biriktirma saqlandi
+ %d ta biriktirma saqlandi
+
+
+ %d ta biriktirmani saqlab bo’lmadi
+ %d ta biriktirmani saqlab bo’lmadi
+
+ "MMS fayli saqlandi"
+ "Sozlamalar"
+ "Arxivlangan"
+ "Yopish"
+ "MMS"
+ "Qo‘shimcha"
+ "Tuzatish"
+ "Bildirishnomalar"
+ "Ovoz"
+ "Ovozsiz"
+ "Tebranish"
+ "Bloklandi"
+ "SMS xabarlarning yetkazilganlik hisobotlari"
+ "Yuborilgan har bir SMS uchun yetkazilganlik hisobotini talab qilish"
+ "Avtomatik yuklanish"
+ "MMS xabarlarni avtomatik yuklab olish"
+ "Rouming vaqtida avtomatik yuklab olish"
+ "Rouming vaqtida MMS xabarlarni avtomatik yuklab olish"
+ "Guruh xabarlari"
+ "Bitta xabarni bir nechta qabul qiluvchiga yuborish uchun MMS xabardan foydalanilsin"
+ "Birlamchi SMS ilovasi"
+ "Birlamchi SMS ilovasi"
+
+
+ "Telefon raqamingiz"
+ "Noma’lum"
+ "Chiquvchi xabar ovozlari"
+ "SMS xabarni o‘tkazish"
+ "SMS orqali olingan qayta ishlanmagan ma’lumotlarni tashqi xotiraga o‘tkazish"
+ "MMS xabarni o‘tkazish"
+ "MMS orqali olingan qayta ishlanmagan ma’lumotlarni tashqi xotiraga o‘tkazish"
+ "Aholini ogohlantirish"
+ "Xabar sozlamalari"
+ "Matndan nusxa olish"
+ "Tafsilotlarni ko‘rish"
+ "O‘chirish"
+ "Qayta yo‘naltirish"
+ "Xabar tafsilotlari"
+ "Turi: "
+ "Matnli xabar"
+ "Multimediali xabar"
+ "Kimdan: "
+ "Kimga: "
+ "Yuborildi: "
+ "Qabul qilindi: "
+ "Mavzu: "
+ "Hajmi: "
+ "Ustivorlik: "
+ "SIM-karta: "
+ "Yuqori"
+ "O‘rtacha"
+ "Past"
+ "%s-SIM karta"
+ "Yuboruvchining manzili yashirilgan"
+ "Biriktirilgan fayllarni yuklab olayotganda xabar yuborib bo‘lmaydi."
+ "Biriktirma faylini yuklab bo‘lmadi. Qaytadan urining."
+ "Tarmoq hali tayyor emas. Qaytadan urining."
+ "Matnni o‘chirish"
+ "Harf va raqam kiritish o‘rtasida almashish"
+ "Yana ishtirokchi qo‘shish"
+ "Ishtirokchilarni tasdiqlang"
+ "Yangi suhbat boshlash"
+ "Ushbu variantni tanlash"
+ "Videoni ijro qilish"
+ "Odamlar va tanlamalar"
+ "Tuzatish"
+ "Odamlar va tanlamalar"
+ "Umumiy"
+ "Ushbu suhbat ishtirokchilari"
+ "Qo‘ng‘iroq qilish"
+ "Xabar yuborish"
+ "<br/><small>%s orqali</small> xabar yuboring"
+
+ Rasmlarni yuborish
+ Rasmni yuborish
+
+
+ Audio faylni yuborish
+ Audio faylni yuborish
+
+
+ Videolarni yuborish
+ Videoni yuborish
+
+
+ Kontaktlar kartasini yuborish
+ Kontaktlar kartasini yuborish
+
+
+ Biriktirmani yuborish
+ Biriktirmani yuborish
+
+
+ %d ta biriktirma yuborishga tayyor
+ Biriktirma yuborishga tayyor
+
+ "Fikr va mulohaza yuborish"
+ "Play Marketdan qidirish"
+ "Versiyasi"
+ "%1$s versiya"
+ "Ochiq kodli DT litsenziyalari"
+ "Bildirishnomalar"
+ "Biriktirma chekloviga yetdi"
+ "Biriktirmani yuklab bo‘lmadi."
+ "Kontaktlarga qo‘shilsinmi?"
+ "Kontakt qo‘shish"
+ "Mavzu"
+ "Mavzu: "
+ "%s%s"
+ "Kontaktlar kartasi yuklanmoqda"
+ "Kontaktlar kartasini yuklab bo‘lmadi"
+ "Kontaktlar kartasini ko‘rish"
+
+ %d ta kontakt
+ %d ta kontakt
+
+ "Kontakt kartalari"
+ "Tug‘ilgan kun"
+ "Qaydlar"
+ "Xabarni qayta yo‘naltirish"
+ "Javob berish"
+ "+1"
+ "+%d"
+ "SMS o‘chirib qo‘yilgan"
+ "Yuborish uchun SMS/MMS xizmatini birlamchi SMS ilovasi sifatida o‘rnating"
+ "SMS/MMS xizmatini birlamchi SMS ilovasi sifatida o‘rnating"
+ "O‘zgartirish"
+ "Xabarlarni qabul qilish uchun SMS/MMS xizmatini birlamchi SMS ilovasi sifatida o‘rnating"
+ "SMS xabarlarni yuborish uchun ma’qul SIM-karta tanlanmagan"
+ "Qurilma egasi ushbu ilovadan foydalanishga ruxsat bermagan."
+ "OK"
+ "Suhbatdagi ishtirokchilar soni juda ko‘p"
+
+ Kontaktlar topilmadi
+ Kontakt topilmadi
+
+ "Kameradagi rasmni yuklab bo‘lmadi"
+ "Siz: "
+ "%s: "
+ "Qoralama"
+ "Yangi suhbat boshlasangiz, u bu yerda ko‘rinadi"
+ "Arxivlangan suhbatlar bu yerda ko‘rinadi"
+ "Suhbatlar yuklanmoqda…"
+ "Rasm"
+ "Audio-klip"
+ "Video"
+ "Kontaktlar kartasi"
+ "MMS"
+ "Bekor qilish"
+ "Qayta urinish"
+ "Yangi xabar yozish uchun kontaktning ismi yoki telefon raqamini kiriting"
+ "Bloklash"
+ "Bloklash:%s"
+ "Blokdan chiqarish: %s"
+ "%s bloklansinmi?"
+ "Sizga ushbu raqamdan xabarlar kelishi mumkin, biroq bu haqda siz xabardor qilinmaysiz. Ushbu suhbat esa arxivlanadi."
+ "Bloklangan kontaktlar"
+ "BLOKDAN CHIQARISH"
+ "Bloklangan kontaktlar"
+ "Hujjatlar kutubxonasidan rasm tanlang"
+ "Xabar yuborilmoqda"
+ "Xabar yuborildi"
+ "Mobil internet o‘chirilgan. Sozlamalarni tekshiring."
+ "Parvoz rejimida xabarlarni yuborib bo‘lmaydi"
+ "Xabar yuborilmadi"
+ "Xabar yuklab olindi"
+ "Mobil internet o‘chirilgan. Sozlamalarni tekshiring."
+ "Parvoz rejimida xabarlarni yuklab olib bo‘lmaydi"
+ "Xabarni yuklab olib bo‘lmadi"
+ "Nol"
+ "Bir"
+ "Ikki"
+ "Uch"
+ "To‘rt"
+ "Besh"
+ "Olti"
+ "Yetti"
+ "Sakkiz"
+ "To‘qqiz"
+ "%1$s orqali xabar yuborib bo‘lmadi, xatolik kodi: %2$d"
+ "Noma’lum aloqa operatori orqali xabar yuborib bo‘lmadi, xatolik kodi: %1$d"
+ "Fwd: %s"
+ "Xabar yuborilmadi: xizmat tarmoqda faollashtirilmagan"
+ "Xabar yuborilmadi: qabul qiluvchining manzili noto‘g‘ri"
+ "Xabar yuborilmadi: xabar noto‘g‘ri"
+ "Xabar yuborilmadi: kontent turi qo‘llab-quvvatlanmaydi"
+ "Xabar yuborilmadi: xabar turi qo‘llab-quvvatlanmaydi"
+ "Xabar yuborilmadi: juda katta"
+ "Yangi xabar"
+ "Ko‘rish"
+ "Rasm"
+ "Mos ilovani topib bo‘lmadi"
+ "Qabul qiluvchini o‘chirish"
+ "Yangi xabar"
+ "Bekor qilish"
+ "Ulanish nuqtasi sozlamalari"
+ "Sozlanmagan"
+ "Nomi"
+ "APN"
+ "MMSC"
+ "MMS proksi-serveri"
+ "MMS porti"
+ "MCC"
+ "MNC"
+ "APN turi"
+ "APNni o‘chirish"
+ "Yangi APN"
+ "Saqlash"
+ "Bekor qilish"
+ "APN nomi maydonchasini to‘ldirish shart."
+ "APN maydonchasini to‘ldirish shart."
+ "MCC 3 ta raqamdan iborat bo‘lishi shart."
+ "MNC 2 yoki 3 ta raqamdan iborat bo‘lishi shart."
+ "Standart APN sozlamalari qayta tiklanmoqda."
+ "Standart sozlamalarni tiklash"
+ "Standart sozlamalar tiklandi."
+ "Nomsiz"
+ "Ulanish nuqtalari"
+ "APN"
+ "Yangi APN"
+ "Ushbu foydalanuvchi uchun Ulanish nuqtasi nomi (APN) sozlamalari mavjud emas"
+ "Vaqtinchalik xotiraga nusxa olinsinmi?"
+ "Nusxa olish"
+ "ushbu SIM-kartaga: %s"
+ "Umumiy"
+ "Qo‘shimcha"
+ "Umumiy sozlamalar"
+ "Qo‘shimcha sozlamalar"
+ "“%s” SIM kartasi"
+ "Har bir qabul qiluvchiga alohida SMS xabar yuboring. Faqat siz barcha javoblarni olishingiz mumkin"
+ "Barcha qabul qiluvchilarga bir xil MMS xabar yuboring"
+ "Noma’lum raqam"
+ "Yangi xabar"
+ "Yangi xabar."
+ "SIM kartani tanlash"
+ "%1$s SIM-kartasi tanlangan"
+ "Mavzuni tahrirlash"
+ "SIM kartani tanlang yoki mavzuni tahrirlang"
+ "Audio yozib olish uchun bosib turing"
+ "Yangi suhbat boshlash"
+ "SMS/MMS"
+ "SMS/MMS chatlari"
+ "SMS/MMS"
+ "Yangi xabar"
+ "Suhbatlar ro‘yxati"
+ "Suhbatlar yuklanmoqda"
+ "Xabarlar yuklanmoqda"
+ "Ko‘proq suhbatlarni ko‘rish"
+ "Boshqa xabarlarni ko‘rish"
+ "Suhbat o‘chirib tashlandi"
+ "Suhbat o‘chirib tashlandi. SMS/MMS xizmatidagi boshqa suhbatni ko‘rish uchun bosing."
+ "Bloklandi"
+ "Blokdan chiqarildi"
+ "Xotirada joy kam qoldi. Ba’zi ma’lumotlar saqlanmasligi mumkin."
+ "Biriktirmalarni tanlash"
+ "Tanlovni tasdiqlash"
+ "%d ta tanlandi"
+ "Bir yoki bir nechta biriktirmani olib tashlab, keyin qayta urinib ko‘ring."
+ "Xabarni yuborib ko‘rishingiz mumkin, lekin undagi bir yoki bir nechta biriktirma olib tashlanmaguncha qabul qiluvchiga yetib bormasligi mumkin."
+ "Siz bitta xabarda faqat bitta video jo‘nata olasiz. Ortiqcha videolarni olib tashlang va qaytadan urinib ko‘ring."
+ "Biriktirmani yuklab bo‘lmadi."
+ "Baribir yuborilsin"
+ "Suhbatni boshlab bo‘lmadi"
+ "%1$s (%2$s)"
+ "%s tanlandi"
+
diff --git a/res/values-v17/styles.xml b/res/values-v17/styles.xml
new file mode 100644
index 0000000..01cec58
--- /dev/null
+++ b/res/values-v17/styles.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values-v21/colors.xml b/res/values-v21/colors.xml
new file mode 100644
index 0000000..d51ad04
--- /dev/null
+++ b/res/values-v21/colors.xml
@@ -0,0 +1,22 @@
+
+
+
+ #DE000000
+ #8A000000
+ #8A000000
+ #DE000000
+
diff --git a/res/values-v21/dimens.xml b/res/values-v21/dimens.xml
new file mode 100644
index 0000000..466d2c8
--- /dev/null
+++ b/res/values-v21/dimens.xml
@@ -0,0 +1,22 @@
+
+
+
+ 16dp
+ 16dp
+ 56dp
+ 0dp
+
diff --git a/res/values-v21/styles.xml b/res/values-v21/styles.xml
new file mode 100644
index 0000000..aef5d1c
--- /dev/null
+++ b/res/values-v21/styles.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values-vi/arrays.xml b/res/values-vi/arrays.xml
new file mode 100644
index 0000000..b16f18b
--- /dev/null
+++ b/res/values-vi/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "không có chủ đề"
+ "không có chủ đề"
+
+
+ "Có"
+ "Không"
+ "OK"
+ "Hehe"
+ "Xin cảm ơn"
+ "Tôi đồng ý"
+ "Tuyệt vời"
+ "Đang trên đường"
+ "OK, tôi sẽ liên hệ lại với bạn sau"
+ ":)"
+ ":("
+
+
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
new file mode 100644
index 0000000..ac23771
--- /dev/null
+++ b/res/values-vi/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Nhắn tin"
+ "Nhắn tin"
+ "Chọn cuộc hội thoại"
+ "Cài đặt"
+ "Gửi tin nhắn"
+ "Thêm tệp đính kèm"
+ "Trợ giúp"
+ "Chào mừng"
+ "Bỏ qua"
+ "Tiếp theo >"
+ "Tiếp theo"
+ "Thoát"
+ "Cài đặt >"
+ "Cài đặt"
+ "Nhắn tin cần quyền truy cập vào SMS, Điện thoại và Danh bạ."
+ "Bạn có thể thay đổi các quyền trong Cài đặt > Ứng dụng > Nhắn tin > Quyền."
+ "Bạn có thể thay đổi các quyền trong Cài đặt, Ứng dụng, Nhắn tin, Quyền."
+ "Liên hệ thường xuyên"
+ "Tất cả liên hệ"
+ "Gửi đến %s"
+ "Chụp ảnh hoặc quay video"
+ "Chọn hình ảnh từ thiết bị này"
+ "Ghi âm"
+ "Chọn ảnh"
+ "Phương tiện được chọn."
+ "Phương tiện không được chọn."
+ "Đã chọn %d"
+ "hình ảnh %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "hình ảnh"
+ "Ghi âm"
+ "Chia sẻ"
+ "Vừa đăng"
+ "Hiện tại"
+
+ %d phút
+ %d phút
+
+
+ %d giờ
+ %d giờ
+
+
+ %d ngày
+ %d ngày
+
+
+ %d tuần
+ một tuần
+
+
+ %d tháng
+ một tháng
+
+
+ %d năm
+ một năm
+
+ "Thông báo hạng 0"
+ "Lưu"
+ "Thiết bị sắp hết bộ nhớ. Nhắn tin sẽ tự động xóa các tin nhắn cũ để giải phóng dung lượng."
+ "Sắp hết dung lượng lưu trữ"
+ "Nhắn tin không thể gửi hoặc nhận tin nhắn cho tới khi có thêm bộ nhớ trên thiết bị của bạn."
+ "Sắp hết dung lượng SMS. Bạn có thể cần xóa tin nhắn."
+ "Xác nhận số điện thoại của bạn"
+ "Bước thực hiện một lần này sẽ đảm bảo ứng dụng Nhắn tin gửi tin nhắn nhóm của bạn đúng cách."
+ "Số điện thoại"
+ "Xóa tất cả tin nhắn có phương tiện"
+ "Xóa tin nhắn cũ hơn %s"
+ "Tự động xóa tin nhắn cũ hơn %s"
+ "Bỏ qua"
+ "Xóa tất cả tin nhắn có phương tiện?"
+ "Xóa tin nhắn cũ hơn %s?"
+ "Xóa tin nhắn cũ hơn %s và bật tự động xóa?"
+ "%s đã nói"
+ "Bạn đã nói"
+ "Tin nhắn từ %s:"
+ "Bạn đã gửi tin nhắn"
+ "Đang gửi…"
+ "Không gửi được. Hãy chạm để thử lại."
+ "Không gửi được. Đang thử lại…"
+ "Gửi lại hoặc xóa"
+ "Vui lòng thực hiện cuộc gọi thoại tới các dịch vụ khẩn cấp. Chúng tôi hiện không thể gửi tin nhắn văn bản của bạn."
+ "Không thành công"
+ "Tin nhắn MMS mới cần tải xuống"
+ "Tin nhắn MMS mới"
+ "Không thể tải xuống"
+ "Chạm để thử lại"
+ "Chạm để tải xuống"
+ "Tải xuống hoặc xóa"
+ "Đang tải xuống..."
+ "Tin nhắn đã hết hạn hoặc không khả dụng"
+ "kích thước: %1$s, hết hạn: %2$s"
+ "Không thể gửi. Người nhận không hợp lệ."
+ "Dịch vụ không được kích hoạt trên mạng"
+ "Không thể gửi do sự cố mạng"
+ "Tin nhắn đã hết hạn hoặc không khả dụng"
+ "(Không có chủ đề)"
+ "Người gửi không xác định"
+ "Đã gửi"
+ "Không thể tải xuống tin nhắn %1$s từ %2$s."
+ "Không thể hoàn tất thao tác liên quan đến cơ sở dữ liệu do sắp hết bộ nhớ"
+ "Không gửi được tin nhắn"
+ "Không gửi được một số tin nhắn trong Nhắn tin"
+
+ %d tin nhắn trong %d cuộc trò chuyện
+ %d tin nhắn trong một cuộc trò chuyện
+
+ "Không tải xuống được tin nhắn"
+ "Không tải xuống được một số tin nhắn trong Nhắn tin"
+
+ %d tin nhắn trong %d cuộc trò chuyện
+ %d tin nhắn trong một cuộc trò chuyện
+
+ "Tin nhắn tới %1$s chưa được gửi"
+ "Vui lòng thực hiện cuộc gọi thoại tới các dịch vụ khẩn cấp. Chúng tôi hiện không thể gửi tin nhắn văn bản của bạn tới %1$s."
+
+ %d tin nhắn mới
+ Tin nhắn mới
+
+ "Bắt đầu"
+ "Máy ảnh không khả dụng"
+ "Máy ảnh không khả dụng"
+ "Quay video không khả dụng"
+ "Không thể lưu phương tiện"
+ "Không thể chụp ảnh"
+ "Quay lại"
+ "Đã lưu trữ"
+ "Xóa"
+ "Lưu trữ"
+ "Hủy lưu trữ"
+ "Tắt thông báo"
+ "Bật thông báo"
+ "Thêm liên hệ"
+ "Tải xuống"
+ "Gửi"
+ "Xóa"
+ "Xóa tin nhắn này?"
+ "Không thể hoàn tác tác vụ này."
+ "Xóa"
+
+ Xóa những cuộc trò chuyện này?
+ Xóa cuộc trò chuyện này?
+
+ "Xóa"
+ "Hủy"
+ "Đến"
+ "Chọn nhiều hình ảnh"
+ "Xác nhận lựa chọn"
+ "+%d"
+ "Không thể ghi âm thanh. Hãy thử lại."
+ "Không thể phát âm thanh. Hãy thử lại."
+ "Không thể lưu âm thanh. Hãy thử lại."
+ "Chạm và giữ"
+ ", "
+ " "
+ ": "
+ " "
+ "Hình ảnh"
+ "Clip âm thanh"
+ "Video"
+ "Thẻ liên hệ"
+ "Tải xuống"
+ "Trả lời qua SMS"
+ "Trả lời qua MMS"
+ "Trả lời"
+
+ %d người tham gia
+ %d người tham gia
+
+ "Tôi"
+ "Đã chặn và lưu trữ địa chỉ liên hệ"
+ "Đã bỏ chặn và hủy lưu trữ liên hệ"
+ "Đã lưu trữ %d"
+ "Đã hủy lưu trữ %d"
+ "Đã tắt thông báo"
+ "Đã bật thông báo"
+ "Đã hoàn tất. Hãy chạm vào Gửi lần nữa."
+ "Đã đặt thành công Nhắn tin là ứng dụng SMS mặc định."
+
+ Hủy tệp đính kèm
+ Hủy tệp đính kèm
+
+ "Tệp âm thanh đính kèm"
+ "Phát tệp âm thanh đính kèm"
+ "Tạm dừng"
+ "Tin nhắn từ %s: %s."
+ "Không gửi được tin nhắn từ %s: %s. Thời gian: %s."
+ "Tin nhắn từ %s: %s. Thời gian: %s."
+ "Chưa gửi được tin nhắn tới %s: %s. Thời gian: %s."
+ "Đang gửi tin nhắn tới %s: %s. Thời gian: %s."
+ "Không gửi được tin nhắn tới %s: %s. Thời gian: %s."
+ "Tin nhắn tới %s: %s. Thời gian: %s."
+ "Không gửi được tin nhắn từ %s: %s. Thời gian: %s. %s."
+ "Tin nhắn từ %s: %s. Thời gian: %s. %s."
+ "Chưa gửi được tin nhắn tới %s: %s. Thời gian: %s."
+ "Đang gửi tin nhắn tới %s: %s. Thời gian: %s."
+ "Không gửi được tin nhắn tới %s: %s. Thời gian: %s."
+ "Tin nhắn tới %s: %s. Thời gian: %s."
+ "Không gửi được tin nhắn. Hãy chạm để thử lại."
+ "Cuộc trò chuyện với %s"
+ "Xóa chủ đề"
+ "Quay video"
+ "Chụp ảnh tĩnh"
+ "Chụp ảnh"
+ "Bắt đầu quay video"
+ "Chuyển sang máy ảnh toàn màn hình"
+ "Chuyển đổi giữa máy ảnh trước và sau"
+ "Dừng quay và đính kèm video"
+ "Dừng ghi video"
+ "Ảnh trong Nhắn tin"
+
+ %d ảnh đã được lưu vào album \"%s\"
+ %d ảnh đã được lưu vào album \"%s\"
+
+
+ %d video đã được lưu vào album \"%s\"
+ %d video đã được lưu vào album \"%s\"
+
+
+ %d tệp đính kèm đã được lưu vào album \"%s\"
+ %d tệp đính kèm đã được lưu vào album \"%s\"
+
+
+ %d tệp đính kèm đã được lưu vào \"Nội dung tải xuống\"
+ %d tệp đính kèm đã được lưu vào \"Nội dung tải xuống\"
+
+
+ Đã lưu %d tệp đính kèm
+ Đã lưu %d tệp đính kèm
+
+
+ Không thể lưu %d tệp đính kèm
+ Không thể lưu %d tệp đính kèm
+
+ "Đã lưu tệp đính kèm MMS"
+ "Cài đặt"
+ "Đã lưu trữ"
+ "Đóng"
+ "MMS"
+ "Nâng cao"
+ "Gỡ lỗi"
+ "Thông báo"
+ "Âm thanh"
+ "Im lặng"
+ "Rung"
+ "Đã chặn"
+ "Báo cáo gửi SMS"
+ "Yêu cầu báo cáo gửi cho mỗi SMS bạn gửi"
+ "Tự động truy xuất"
+ "Tự động truy xuất tin nhắn MMS"
+ "Tự động truy xuất khi chuyển vùng"
+ "Tự động truy xuất MMS khi chuyển vùng"
+ "Nhắn tin theo nhóm"
+ "Sử dụng MMS để gửi một tin nhắn duy nhất khi có nhiều người nhận"
+ "Ứng dụng SMS mặc định"
+ "Ứng dụng SMS mặc định"
+
+
+ "Số điện thoại của bạn"
+ "Không xác định"
+ "Âm thanh tin nhắn đi"
+ "Kết xuất SMS"
+ "Kết xuất dữ liệu thô SMS đã nhận vào tệp bộ nhớ ngoài"
+ "Kết xuất MMS"
+ "Kết xuất dữ liệu thô MMS đã nhận vào tệp bộ nhớ ngoài"
+ "Cảnh báo không dây"
+ "Tùy chọn tin nhắn"
+ "Sao chép văn bản"
+ "Xem chi tiết"
+ "Xóa"
+ "Chuyển tiếp"
+ "Chi tiết tin nhắn"
+ "Loại: "
+ "Tin nhắn văn bản"
+ "Tin nhắn đa phương tiện"
+ "Người gửi: "
+ "Người nhận: "
+ "Đã gửi: "
+ "Đã nhận: "
+ "Chủ đề: "
+ "Kích cỡ: "
+ "Mức độ ưu tiên: "
+ "SIM: "
+ "Cao"
+ "Bình thường"
+ "Thấp"
+ "SIM %s"
+ "Địa chỉ người gửi bị ẩn"
+ "Không thể gửi tin nhắn trong khi tải tệp đính kèm."
+ "Không thể tải tệp đính kèm. Hãy thử lại."
+ "Mạng chưa sẵn sàng. Hãy thử lại."
+ "Xóa văn bản"
+ "Chuyển đổi giữa nhập văn bản và số"
+ "Thêm người tham gia khác"
+ "Xác nhận người tham gia"
+ "Bắt đầu cuộc trò chuyện mới"
+ "Chọn mục này"
+ "Phát video"
+ "Danh bạ và tùy chọn"
+ "Gỡ lỗi"
+ "Danh bạ và tùy chọn"
+ "Chung"
+ "Mọi người trong cuộc hội thoại này"
+ "Gọi điện"
+ "Gửi tin nhắn"
+ "Gửi tin nhắn<br/><nhỏ>từ %s</nhỏ>"
+
+ Gửi ảnh
+ Gửi ảnh
+
+
+ Gửi âm thanh
+ Gửi âm thanh
+
+
+ Gửi video
+ Gửi video
+
+
+ Gửi danh thiếp
+ Gửi danh thiếp
+
+
+ Gửi tệp đính kèm
+ Gửi tệp đính kèm
+
+
+ %d tệp đính kèm đã sẵn sàng gửi
+ Một tệp đính kèm đã sẵn sàng gửi
+
+ "Gửi phản hồi"
+ "Xem trong Cửa hàng Google Play"
+ "Thông tin phiên bản"
+ "Phiên bản %1$s"
+ "Giấy phép nguồn mở"
+ "Thông báo"
+ "Đã đạt đến giới hạn tệp đính kèm"
+ "Không tải được tệp đính kèm."
+ "Thêm vào Danh bạ?"
+ "Thêm liên hệ"
+ "Chủ đề"
+ "Chủ đề: "
+ "%s%s"
+ "Đang tải thẻ liên hệ"
+ "Không thể tải danh thiếp"
+ "Xem thẻ liên hệ"
+
+ %d liên hệ
+ %d liên hệ
+
+ "Danh thiếp"
+ "Ngày sinh"
+ "Ghi chú"
+ "Chuyển tiếp thư"
+ "Trả lời"
+ "+1"
+ "+%d"
+ "Đã tắt tính năng nhắn tin SMS"
+ "Để gửi, hãy đặt Nhắn tin là ứng dụng SMS mặc định"
+ "Đặt Nhắn tin là ứng dụng SMS mặc định"
+ "Thay đổi"
+ "Để nhận tin nhắn, hãy đặt Nhắn tin là ứng dụng SMS mặc định"
+ "Không có SIM ưu tiên nào được chọn để gửi tin nhắn SMS"
+ "Ứng dụng này không được chủ sở hữu thiết bị cho phép."
+ "OK"
+ "Có quá nhiều người tham gia trong một cuộc trò chuyện"
+
+ Liên hệ không hợp lệ
+ Liên hệ không hợp lệ
+
+ "Không thể tải hình ảnh trong máy ảnh"
+ "Bạn: "
+ "%s: "
+ "Thư nháp"
+ "Sau khi bạn bắt đầu một cuộc trò chuyện mới, bạn sẽ thấy cuộc trò chuyện đó được liệt kê ở đây"
+ "Các cuộc trò chuyện đã lưu trữ xuất hiện ở đây"
+ "Đang tải cuộc trò chuyện..."
+ "Hình ảnh"
+ "Clip âm thanh"
+ "Video"
+ "Thẻ liên hệ"
+ "MMS"
+ "Hoàn tác"
+ "Thử lại"
+ "Nhập tên liên hệ hoặc số điện thoại để bắt đầu tin nhắn mới"
+ "Chặn"
+ "Chặn %s"
+ "Bỏ chặn %s"
+ "Chặn %s?"
+ "Bạn sẽ tiếp tục nhận tin nhắn từ số này nhưng bạn sẽ không được thông báo nữa. Cuộc trò chuyện này sẽ được lưu trữ."
+ "Địa chỉ liên hệ bị chặn"
+ "BỎ CHẶN"
+ "Địa chỉ liên hệ bị chặn"
+ "Chọn hình ảnh từ thư viện tài liệu"
+ "Đang gửi tin nhắn"
+ "Đã gửi tin nhắn"
+ "Dữ liệu di động đã bị tắt. Hãy kiểm tra cài đặt của bạn."
+ "Không thể gửi tin nhắn ở Chế độ trên máy bay"
+ "Không thể gửi thư"
+ "Đã tải tin nhắn xuống"
+ "Dữ liệu di động đã bị tắt. Hãy kiểm tra cài đặt của bạn."
+ "Không thể tải xuống tin nhắn ở Chế độ trên máy bay"
+ "Không thể tải xuống tin nhắn"
+ "Không"
+ "Một"
+ "Hai"
+ "Ba"
+ "Bốn"
+ "Năm"
+ "Sáu"
+ "Bảy"
+ "Tám"
+ "Chín"
+ "Không thể gửi tin nhắn bằng %1$s, lỗi %2$d"
+ "Không thể gửi tin nhắn bằng nhà cung cấp dịch vụ không xác định, lỗi %1$d"
+ "Chuyển tiếp: %s"
+ "Không gửi được tin nhắn: dịch vụ chưa được kích hoạt trên mạng"
+ "Không gửi được tin nhắn: địa chỉ đích không hợp lệ"
+ "Không gửi được tin nhắn: tin nhắn không hợp lệ"
+ "Không gửi được tin nhắn: nội dung không được hỗ trợ"
+ "Không gửi được tin nhắn: tin nhắn không được hỗ trợ"
+ "Không gửi được tin nhắn: quá lớn"
+ "Tin nhắn mới"
+ "Xem"
+ "Hình ảnh"
+ "Không thể tìm thấy ứng dụng thích hợp"
+ "Xóa người nhận"
+ "Tin nhắn mới"
+ "Hủy"
+ "Chỉnh sửa điểm truy cập"
+ "Chưa đặt"
+ "Tên"
+ "APN"
+ "MMSC"
+ "Proxy của MMS"
+ "Cổng MMS"
+ "MCC"
+ "MNC"
+ "Loại APN"
+ "Xóa APN"
+ "APN mới"
+ "Lưu"
+ "Hủy"
+ "Không được để trống trường Tên."
+ "Không được để trống APN."
+ "Trường MCC phải có 3 chữ số."
+ "Trường MNC phải có 2 hoặc 3 chữ số."
+ "Đang khôi phục cài đặt APN mặc định."
+ "Đặt lại về mặc định"
+ "Đặt lại cài đặt APN mặc định đã hoàn tất."
+ "Không có tiêu đề"
+ "Tên điểm truy cập"
+ "APN"
+ "APN mới"
+ "Cài đặt Tên điểm truy cập không khả dụng cho người dùng này"
+ "Sao chép vào khay nhớ tạm?"
+ "Sao chép"
+ "tới %s"
+ "Chung"
+ "Nâng cao"
+ "Cài đặt chung"
+ "Cài đặt nâng cao"
+ "SIM \"%s\""
+ "Gửi từng tin nhắn SMS cho tất cả người nhận. Chỉ bạn mới nhận được mọi tin nhắn trả lời"
+ "Gửi một MMS cho tất cả người nhận"
+ "Số điện thoại không xác định"
+ "Tin nhắn mới"
+ "Tin nhắn mới."
+ "Bộ chọn SIM"
+ "Đã chọn %1$s, bộ chọn SIM"
+ "Chỉnh sửa chủ đề"
+ "Chọn SIM hoặc chỉnh sửa chủ đề"
+ "Chạm và giữ để ghi âm"
+ "Bắt đầu cuộc trò chuyện mới"
+ "Nhắn tin"
+ "Danh sách Nhắn tin"
+ "Nhắn tin"
+ "Tin nhắn mới"
+ "Danh sách cuộc hội thoại"
+ "Đang tải cuộc trò chuyện..."
+ "Đang tải thư"
+ "Xem các cuộc hội thoại khác"
+ "Xem thêm tin nhắn"
+ "Đã xóa cuộc hội thoại"
+ "Đã xóa cuộc trò chuyện. Chạm để hiển thị cuộc trò chuyện khác trong Nhắn tin"
+ "Đã chặn"
+ "Đã bỏ chặn"
+ "Dung lượng bộ nhớ thấp. Một số dữ liệu có thể bị mất."
+ "Chọn tài liệu đính kèm"
+ "Xác nhận lựa chọn"
+ "Đã chọn %d"
+ "Vui lòng xóa một hoặc nhiều tệp đính kèm và thử lại."
+ "Bạn có thể thử gửi tin nhắn của mình nhưng tin nhắn có thể không gửi được trừ khi bạn xóa một hoặc nhiều tệp đính kèm."
+ "Bạn chỉ có thể gửi một video cho mỗi tin nhắn. Hãy xóa các video khác rồi thử lại."
+ "Ứng dụng Nhắn tin không tải được tệp đính kèm."
+ "Vẫn gửi"
+ "Không thể bắt đầu cuộc trò chuyện"
+ "%1$s (%2$s)"
+ "Đã chọn %s"
+
diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml
new file mode 100644
index 0000000..9512884
--- /dev/null
+++ b/res/values-zh-rCN/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "无主题"
+ "无主题"
+
+
+ "是的"
+ "不"
+ "好"
+ "呵呵"
+ "谢谢"
+ "同意"
+ "不错"
+ "在路上"
+ "稍后再回复你"
+ ":)"
+ ":("
+
+
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..1a128fc
--- /dev/null
+++ b/res/values-zh-rCN/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "短信"
+ "短信"
+ "选择对话"
+ "设置"
+ "发送信息"
+ "添加附件"
+ "帮助"
+ "欢迎使用"
+ "跳过"
+ "下一步 >"
+ "下一步"
+ "退出"
+ "设置 >"
+ "设置"
+ "“短信”应用需要获得“短信”、“电话”和“通讯录”的访问权限。"
+ "您可以在“设置”>“应用”>“短信”>“权限”中更改权限。"
+ "您可以依次触摸“设置”、“应用”、“短信”和“权限”来更改权限。"
+ "常用联系人"
+ "所有联系人"
+ "发送到%s"
+ "拍照或录像"
+ "选择此设备上的图片"
+ "录制语音"
+ "选择照片"
+ "已选择此媒体。"
+ "已取消选择此媒体。"
+ "已选择%d项"
+ "图片(%1$tB %1$te %1$tY %1$tl %1$tM %1$tp)"
+ "图片"
+ "录制语音"
+ "分享"
+ "刚刚"
+ "刚刚"
+
+ %d 分钟
+ %d 分钟
+
+
+ %d 小时
+ %d 小时
+
+
+ %d 天
+ %d 天
+
+
+ %d 周
+ 1 周
+
+
+ %d 个月
+ 1 个月
+
+
+ %d 年
+ 1 年
+
+ "0级信息"
+ "保存"
+ "设备存储空间不足。“短信”将自动删除较早的信息,以便腾出存储空间。"
+ "存储空间不足"
+ "除非您的设备上腾出更多可用空间,否则“短信”可能无法收发信息。"
+ "短信存储空间不足,建议您删除部分信息。"
+ "确认您的电话号码"
+ "执行这个一次性步骤可确保“短信”正确地传送您的群发信息。"
+ "电话号码"
+ "删除所有含媒体内容的信息"
+ "删除%s以前的信息"
+ "自动删除超过 %s以前的信息"
+ "忽略"
+ "要删除所有含媒体内容的信息吗?"
+ "要删除超过 %s以前的信息吗?"
+ "要删除超过 %s以前的信息并开启自动删除功能吗?"
+ "%s说"
+ "您说"
+ "来自%s的信息"
+ "您发送了一条信息"
+ "正在发送…"
+ "发送失败。触摸即可重试。"
+ "发送失败。正在重试…"
+ "重新发送或删除"
+ "请拨打语音电话寻求紧急服务。目前您的信息无法成功发送。"
+ "失败"
+ "待下载的新彩信"
+ "新彩信"
+ "无法下载"
+ "触摸即可重试"
+ "触摸即可下载"
+ "下载或删除"
+ "正在下载…"
+ "信息已过期或无法查看"
+ "信息大小:%1$s,过期时间:%2$s"
+ "无法发送。收件人无效。"
+ "您尚未在网络上启用该服务。"
+ "遇到网络问题,发送失败"
+ "信息已过期或无法查看"
+ "(无主题)"
+ "未知发件人"
+ "已送达"
+ "无法下载来自%2$s的信息“%1$s”。"
+ "内存不足,无法完成数据库操作"
+ "信息发送失败"
+ "“短信”未发送部分信息"
+
+ %d 个对话中的 %d 条信息
+ 1 个对话中的 %d 条信息
+
+ "信息下载失败"
+ "“短信”未下载部分信息"
+
+ %d 个对话中的 %d 条信息
+ 1 个对话中的 %d 条信息
+
+ "未能将信息发送至 %1$s"
+ "请拨打语音电话寻求紧急服务。目前您的信息无法发送至 %1$s。"
+
+ %d 条新信息
+ 新信息
+
+ "发起"
+ "无法使用相机"
+ "无法使用相机"
+ "无法使用视频拍摄功能"
+ "无法保存媒体"
+ "无法拍照"
+ "返回"
+ "已归档的对话"
+ "删除"
+ "归档"
+ "取消归档"
+ "关闭通知"
+ "开启通知"
+ "添加到通讯录"
+ "下载"
+ "发送"
+ "删除"
+ "要删除此信息吗?"
+ "该操作无法撤消。"
+ "删除"
+
+ 要删除这些对话吗?
+ 要删除此对话吗?
+
+ "删除"
+ "取消"
+ "收件人"
+ "选择多张图片"
+ "确认选择"
+ "+%d"
+ "无法录制语音,请重试。"
+ "无法播放语音,请重试。"
+ "无法保存语音,请重试。"
+ "触摸并按住"
+ "、 "
+ " "
+ ": "
+ " "
+ "图片"
+ "语音"
+ "视频"
+ "名片"
+ "下载"
+ "通过短信回复"
+ "通过彩信回复"
+ "回复"
+
+ %d 位参与者
+ %d 位参与者
+
+ "我"
+ "联系人已被屏蔽且已归档"
+ "已取消屏蔽并取消归档联系人"
+ "已归档 %d 个"
+ "已取消归档 %d 个"
+ "通知已关闭"
+ "通知已开启"
+ "设置已完成。请再次触摸“发送”。"
+ "已成功地将“短信”设为默认短信应用。"
+
+ 舍弃附件
+ 舍弃附件
+
+ "语音附件"
+ "播放语音附件"
+ "暂停"
+ "%s发来了消息:%s。"
+ "%s未能成功发送的信息,内容为:%s。时间为:%s。"
+ "%s发来的信息,内容为:%s。时间为:%s。"
+ "要发送给%s的草稿信息,内容为:%s。时间为:%s。"
+ "正在向%s发送的信息,内容为:%s。时间为:%s。"
+ "未能成功发送给%s的信息,内容为:%s。时间为:%s。"
+ "发送给%s的信息,内容为:%s。时间为:%s。"
+ "%s未能成功发送的信息,内容为:%s。时间为:%s。%s。"
+ "%s发来的信息,内容为:%s。时间为:%s。%s。"
+ "要发送给%s的草稿信息,内容为:%s。时间为:%s。"
+ "正在向%s发送的信息,内容为:%s。时间为:%s。"
+ "未能成功发送给%s的信息,内容为:%s。时间为:%s。"
+ "发送给%s的信息,内容为:%s。时间为:%s。"
+ "信息发送失败。触摸即可重试。"
+ "与%s的对话"
+ "删除主题"
+ "拍摄视频"
+ "拍摄静态照片"
+ "拍照"
+ "开始录制视频"
+ "切换到全屏相机模式"
+ "在前置和后置相机之间切换"
+ "停止拍摄并添加视频附件"
+ "停止录制视频"
+ "“短信”中的照片"
+
+ %d 张照片已保存至“%s”相册
+ %d 张照片已保存至“%s”相册
+
+
+ %d 个视频已保存至“%s”相册
+ %d 个视频已保存至“%s”相册
+
+
+ %d 个附件已保存至“%s”相册
+ %d 个附件已保存至“%s”相册
+
+
+ %d 个附件已保存至“下载内容”
+ %d 个附件已保存至“下载内容”
+
+
+ 已保存 %d 个附件
+ 已保存 %d 个附件
+
+
+ 无法保存 %d 个附件
+ 无法保存 %d 个附件
+
+ "保存的彩信附件"
+ "设置"
+ "已归档的对话"
+ "关闭"
+ "彩信"
+ "高级"
+ "调试"
+ "通知"
+ "提示音"
+ "静音"
+ "振动"
+ "已屏蔽"
+ "短信送达情况报告"
+ "了解您发的每条短信的送达情况"
+ "自动检索"
+ "自动检索彩信"
+ "漫游时自动检索"
+ "漫游时自动检索彩信"
+ "群发彩信"
+ "有多个收件人时,也使用彩信发送信息"
+ "默认短信应用"
+ "默认短信应用"
+
+
+ "您的手机号码"
+ "未知"
+ "信息发送提示音"
+ "转储短信"
+ "将收到的短信原始数据转储到外部存储文件中"
+ "转储彩信"
+ "将收到的彩信原始数据转储到外部存储文件中"
+ "无线警报"
+ "信息选项"
+ "复制文字"
+ "查看详情"
+ "删除"
+ "转发"
+ "信息详情"
+ "类型: "
+ "文字信息"
+ "多媒体信息"
+ "发件人: "
+ "收件人: "
+ "发送时间: "
+ "接收时间: "
+ "主题: "
+ "大小: "
+ "优先级: "
+ "SIM 卡: "
+ "高"
+ "中"
+ "低"
+ "SIM 卡 %s"
+ "隐藏的发件人地址"
+ "附件尚未加载完毕,无法发送信息。"
+ "无法加载附件,请重试。"
+ "网络尚未就绪,请重试。"
+ "删除文字"
+ "在文字和数字输入模式间切换"
+ "添加更多参与者"
+ "确认参与者"
+ "发起新的对话"
+ "选择此项内容"
+ "播放视频"
+ "参与者名单和选项"
+ "调试"
+ "参与者名单和选项"
+ "常规"
+ "此对话的参与者"
+ "拨打电话"
+ "发送信息"
+ "发送信息<br/><small>(通过%s)</small>"
+
+ 发送照片
+ 发送照片
+
+
+ 发送语音
+ 发送语音
+
+
+ 发送视频
+ 发送视频
+
+
+ 发送名片
+ 发送名片
+
+
+ 发送附件
+ 发送附件
+
+
+ %d 个附件待发送
+ 1 个附件待发送
+
+ "发送反馈"
+ "在 Google Play 商店中查看"
+ "版本信息"
+ "版本%1$s"
+ "开放源代码许可"
+ "通知"
+ "已达到附件上限"
+ "加载附件失败。"
+ "要添加到通讯录吗?"
+ "添加到通讯录"
+ "主题"
+ "主题: "
+ "%s%s"
+ "正在加载名片"
+ "无法加载名片"
+ "查看名片"
+
+ %d 位联系人
+ %d 位联系人
+
+ "名片"
+ "生日"
+ "备注"
+ "转发信息"
+ "回复"
+ "+1"
+ "+%d"
+ "短信功能已停用"
+ "要发送信息,请将“短信”设为默认短信应用"
+ "将“短信”设为默认短信应用"
+ "更改"
+ "要接收信息,请将“短信”设为默认短信应用"
+ "未选择用于发送短信的首选 SIM 卡"
+ "此应用未获得设备机主授权。"
+ "确定"
+ "对话中的参与者过多"
+
+ 联系人无效
+ 联系人无效
+
+ "无法加载相机图像"
+ "你: "
+ "%s: "
+ "草稿"
+ "您的短信对话将列在此处"
+ "已归档的对话会显示在此处"
+ "正在加载对话…"
+ "照片"
+ "语音"
+ "视频"
+ "名片"
+ "彩信"
+ "撤消"
+ "重试"
+ "要发送新信息,请输入联系人姓名或电话号码"
+ "屏蔽"
+ "屏蔽%s"
+ "取消屏蔽%s"
+ "要屏蔽%s吗?"
+ "您将继续接收来自此号码的信息,但不会再收到相关通知。此对话将被归档。"
+ "屏蔽的联系人"
+ "取消屏蔽"
+ "屏蔽的联系人"
+ "从文档库中选择图片"
+ "正在发送消息"
+ "消息已发送"
+ "移动数据网络已关闭。请检查您的设置。"
+ "在飞行模式下无法发送信息"
+ "无法发送信息"
+ "彩信已下载"
+ "移动数据网络已关闭。请检查您的设置。"
+ "在飞行模式下无法下载信息"
+ "无法下载信息"
+ "0"
+ "1"
+ "2"
+ "3"
+ "4"
+ "5"
+ "6"
+ "7"
+ "8"
+ "9"
+ "无法发送消息(运营商:%1$s,错误代码:%2$d)"
+ "无法发送消息(运营商:未知,错误代码:%1$d)"
+ "转发:%s"
+ "信息发送失败:服务未在网络上激活"
+ "信息发送失败:目标地址无效"
+ "信息发送失败:信息无效"
+ "信息发送失败:内容不受支持"
+ "信息发送失败:信息不受支持"
+ "信息发送失败:信息过长"
+ "新信息"
+ "查看"
+ "图片"
+ "找不到合适的应用"
+ "移除收件人"
+ "新消息"
+ "取消"
+ "修改接入点"
+ "未设置"
+ "名称"
+ "APN"
+ "MMSC"
+ "彩信代理"
+ "彩信端口"
+ "MCC"
+ "MNC"
+ "APN 类型"
+ "删除 APN"
+ "新建 APN"
+ "保存"
+ "舍弃"
+ "“名称”字段不能为空。"
+ "APN 不能为空。"
+ "MCC 字段必须为 3 位数。"
+ "MNC 字段必须为 2 位数或 3 位数。"
+ "正在恢复默认 APN 设置。"
+ "重置为默认值"
+ "已重置默认 APN 设置。"
+ "未命名"
+ "接入点名称"
+ "APN"
+ "新建 APN"
+ "此用户无权修改接入点名称设置"
+ "要复制到剪贴板吗?"
+ "复制"
+ "发至%s"
+ "常规"
+ "高级"
+ "常规设置"
+ "高级设置"
+ "SIM 卡 “%s”"
+ "将单条短信发送给所有收件人。只有您能收到相应回复"
+ "将单条彩信发送给所有收件人"
+ "未知号码"
+ "新信息"
+ "新信息。"
+ "SIM 卡选择器"
+ "已选择%1$s,SIM 卡选择器"
+ "修改主题"
+ "选择 SIM 卡或修改主题"
+ "触摸并按住即可录制语音"
+ "发起新的对话"
+ "短信"
+ "短信列表"
+ "短信"
+ "新信息"
+ "对话列表"
+ "正在加载对话"
+ "正在加载信息"
+ "查看更多对话"
+ "查看更多信息"
+ "对话已删除"
+ "对话已删除。触摸可显示其他“短信”对话"
+ "已屏蔽"
+ "已取消屏蔽"
+ "存储空间不足,部分数据可能会丢失。"
+ "选择附件"
+ "确认选择"
+ "已选择 %d 个附件"
+ "请移除一个或多个附件,然后重试。"
+ "您可以尝试发送信息,但您可能需要移除一个或多个附件才能成功发送。"
+ "您在每条消息中只能发送一个视频。请移除多余的视频,然后重试。"
+ "“短信”无法加载附件。"
+ "仍然发送"
+ "无法发起对话"
+ "%1$s (%2$s)"
+ "已选择%s"
+
diff --git a/res/values-zh-rHK/arrays.xml b/res/values-zh-rHK/arrays.xml
new file mode 100644
index 0000000..ab1cad4
--- /dev/null
+++ b/res/values-zh-rHK/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "沒有主旨"
+ "無主旨"
+
+
+ "是"
+ "否"
+ "確定"
+ "呵呵"
+ "謝謝"
+ "我同意"
+ "很好"
+ "我正在路上"
+ "好,我稍後再回覆您"
+ ":)"
+ ":("
+
+
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..a93ba92
--- /dev/null
+++ b/res/values-zh-rHK/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "訊息"
+ "訊息"
+ "選取對話群組"
+ "設定"
+ "傳送訊息"
+ "新增附件"
+ "說明"
+ "歡迎"
+ "略過"
+ "繼續 >"
+ "下一步"
+ "結束"
+ "設定 >"
+ "設定"
+ "「短訊」需要存取短訊、手機和聯絡人的權限。"
+ "您可以前往 [設定] > [應用程式] > [短訊] > [權限] 變更權限。"
+ "您可以前往 [設定]、[應用程式]、[短訊]、[權限] 變更權限。"
+ "常用聯絡人"
+ "所有聯絡人"
+ "傳送至 %s"
+ "拍照或錄影"
+ "從這部裝置選擇圖片"
+ "錄音"
+ "選擇相片"
+ "已選取媒體。"
+ "已取消選取媒體。"
+ "已選取 %d 個項目"
+ "%1$tB %1$te %1$tY %1$tl %1$tM %1$tp的圖片"
+ "圖片"
+ "錄音"
+ "分享"
+ "剛剛"
+ "現在"
+
+ %d分鐘
+ %d分鐘
+
+
+ %d小時
+ %d小時
+
+
+ %d天
+ %d天
+
+
+ %d個星期
+ 一個星期
+
+
+ %d個月
+ 一個月
+
+
+ %d年
+ 一年
+
+ "等級 0 訊息"
+ "儲存"
+ "裝置儲存空間不足。「短訊」會自動刪除較舊的訊息以騰出空間。"
+ "儲存空間即將用盡"
+ "「短訊」需要更多裝置空間方可發送或接收訊息。"
+ "短訊儲存空間即將用完,建議您刪除部分訊息。"
+ "確認您的電話號碼"
+ "這個單一步驟能確保「短訊」正確發送群組訊息。"
+ "電話號碼"
+ "刪除所有附有媒體的訊息"
+ "刪除超過 %s的訊息"
+ "自動刪除超過 %s的訊息"
+ "略過"
+ "要刪除所有附有媒體檔案的訊息嗎?"
+ "要刪除超過 %s的訊息嗎?"
+ "要刪除超過 %s的訊息並開啟自動刪除嗎?"
+ "傳送者:%s"
+ "您說"
+ "來自%s的訊息"
+ "您傳送了訊息"
+ "正在傳送…"
+ "訊息傳送失敗,輕觸即可再試一次。"
+ "訊息傳送失敗,正在重試…"
+ "重新傳送或刪除"
+ "請致電緊急服務。目前,您的短訊無法送達。"
+ "失敗"
+ "下載新的多媒體訊息"
+ "新的多媒體訊息"
+ "無法下載"
+ "輕觸即可再試一次"
+ "輕觸即可下載"
+ "下載或刪除"
+ "正在下載…"
+ "訊息已過期或無法取得"
+ "大小:%1$s,期限:%2$s"
+ "收件者無效,因此無法傳送訊息。"
+ "您還未在網絡上啟用這項服務"
+ "網絡發生問題,因此無法傳送"
+ "訊息已過期或無法取得"
+ "(沒有主旨)"
+ "未知的寄件者"
+ "已傳送"
+ "無法下載 %2$s 傳送的這則訊息「%1$s」。"
+ "記憶體不足,因此無法完成資料庫操作"
+ "無法傳送訊息"
+ "部分訊息未能在「短訊」中發送"
+
+ %d個對話中的%d則訊息
+ 一個對話中的%d則訊息
+
+ "仍未下載訊息"
+ "部分訊息未能在「短訊」中下載"
+
+ %d個對話中的%d則訊息
+ 一個對話中的%d則訊息
+
+ "未能傳送訊息至 %1$s"
+ "請致電緊急服務。目前,您的短訊無法送達至 %1$s。"
+
+ %d 則新訊息
+ 新訊息
+
+ "開始"
+ "無法使用相機"
+ "無法使用相機"
+ "無法錄製影片"
+ "無法儲存媒體檔案"
+ "無法拍照"
+ "返回"
+ "已封存"
+ "刪除"
+ "封存"
+ "取消封存"
+ "關閉通知"
+ "開啟通知"
+ "新增聯絡人"
+ "下載"
+ "傳送"
+ "刪除"
+ "要刪除這個訊息嗎?"
+ "此操作將無法復原。"
+ "刪除"
+
+ 要刪除這些對話嗎?
+ 要刪除這個對話嗎?
+
+ "刪除"
+ "取消"
+ "收件者︰"
+ "選取多個圖片"
+ "確認選取"
+ "超過 %d 個項目"
+ "無法錄製語音,請再試一次。"
+ "無法播放語音,請再試一次。"
+ "無法儲存語音,請再試一次。"
+ "輕觸並按住"
+ "、 "
+ " "
+ ": "
+ " "
+ "圖片"
+ "錄音片段"
+ "影片"
+ "聯絡人卡"
+ "下載"
+ "透過短訊回覆"
+ "透過 MMS 回覆"
+ "回覆"
+
+ %d位參加者
+ %d位參加者
+
+ "我"
+ "已封鎖並封存聯絡人"
+ "已解除封鎖並取消封存聯絡人"
+ "已封存 %d 個對話記錄"
+ "已取消封存 %d 個項目"
+ "已關閉通知"
+ "已開啟通知"
+ "準備就緒,輕觸 [重新傳送]。"
+ "已成功將「短訊」設定為預設短訊應用程式。"
+
+ 捨棄附件
+ 捨棄附件
+
+ "音效檔案附件"
+ "播放音效檔案附件"
+ "暫停"
+ "來自%s的訊息:%s。"
+ "%s未能成功傳送的訊息:%s。時間:%s。"
+ "%s傳送的訊息:%s。時間:%s。"
+ "尚未傳送給%s的訊息:%s。時間:%s。"
+ "正在傳送給%s的訊息:%s。時間:%s。"
+ "未能成功傳送給%s的訊息:%s。時間:%s。"
+ "傳送給%s的訊息:%s。時間:%s。"
+ "%s未能成功傳送的訊息:%s。時間:%s。%s。"
+ "%s傳送的訊息:%s。時間:%s。%s。"
+ "尚未傳送給%s的訊息:%s。時間:%s。"
+ "正在傳送給%s的訊息:%s。時間:%s。"
+ "未能成功傳送給%s的訊息:%s。時間:%s。"
+ "傳送給%s的訊息:%s。時間:%s。"
+ "未能成功傳送的訊息。輕觸即可重試。"
+ "與%s的對話"
+ "刪除主旨"
+ "拍攝影片"
+ "拍攝靜態圖像"
+ "拍照"
+ "開始錄製影片"
+ "切換至全屏攝像"
+ "切換前置和後置鏡頭"
+ "停止錄製並附加影片"
+ "停止錄製影片"
+ "「短訊」相片"
+
+ %d 張相片已儲存至「%s」相簿
+ %d 張相片已儲存至「%s」相簿
+
+
+ %d 部影片已儲存至「%s」相簿
+ %d 部影片已儲存至「%s」相簿
+
+
+ %d 個附件已儲存至「%s」相簿
+ %d 個附件已儲存至「%s」相簿
+
+
+ %d 個附件已儲存至「下載」
+ %d 個附件已儲存至「下載」
+
+
+ 已儲存%d個附件
+ 已儲存%d個附件
+
+
+ 無法儲存%d個附件
+ 無法儲存%d個附件
+
+ "已儲存的 MMS 附件"
+ "設定"
+ "已封存"
+ "關閉"
+ "MMS"
+ "進階"
+ "除錯"
+ "通知"
+ "音效"
+ "靜音"
+ "震動"
+ "已封鎖"
+ "短訊傳送報告"
+ "每次發送短訊後要求發送報告"
+ "自動擷取"
+ "自動擷取 MMS 訊息"
+ "漫遊時自動擷取"
+ "漫遊時自動擷取 MMS 訊息"
+ "群組短訊"
+ "有多位收件者時只發送一則 MMS 訊息"
+ "預設短訊應用程式"
+ "預設短訊應用程式"
+
+
+ "您的電話號碼"
+ "不明"
+ "傳送訊息音效"
+ "傾印短訊"
+ "將收到的短訊原始資料傾印到外部儲存檔案"
+ "傾印 MMS"
+ "將收到的 MMS 原始資料傾印到外部儲存檔案"
+ "無線警示"
+ "訊息選項"
+ "複製文字"
+ "查看詳情"
+ "刪除"
+ "轉寄"
+ "訊息詳情"
+ "類型: "
+ "短訊"
+ "多媒體訊息"
+ "寄件者: "
+ "收件者: "
+ "傳送時間: "
+ "接收時間: "
+ "主旨: "
+ "大小: "
+ "重要: "
+ "SIM 卡: "
+ "高"
+ "正常"
+ "低"
+ "SIM 卡 %s"
+ "隱藏的寄件者地址"
+ "載入附件時無法傳送訊息。"
+ "無法載入附件,請再試一次。"
+ "網絡尚未準備好,請再試一次。"
+ "刪除文本"
+ "切換文字和數字輸入"
+ "新增更多參與者"
+ "確認參與者"
+ "開始新的對話"
+ "選取這個項目"
+ "播放影片"
+ "參與者和選項"
+ "除錯"
+ "參與者和選項"
+ "一般"
+ "這個對話的參與者"
+ "進行通話"
+ "傳送訊息"
+ "<br/><small>從 %s</small> 發送短訊"
+
+ 傳送相片
+ 傳送相片
+
+
+ 傳送音效檔案
+ 傳送音效檔案
+
+
+ 傳送影片
+ 傳送影片
+
+
+ 傳送聯絡資料
+ 傳送聯絡資料
+
+
+ 傳送附件
+ 傳送附件
+
+
+ %d個附件正等待傳送
+ 一個附件正等待傳送
+
+ "傳送意見"
+ "前往 Google Play 商店查看"
+ "版本資料"
+ "%1$s 版"
+ "開放原始碼授權"
+ "通知"
+ "已達到附件限制"
+ "未能成功載入附件。"
+ "新增至聯絡人?"
+ "新增聯絡人"
+ "主旨"
+ "主旨: "
+ "%s:%s"
+ "正在載入聯絡人卡片"
+ "無法載入聯絡人資訊卡"
+ "查看聯絡人卡片"
+
+ %d 個聯絡人
+ %d 個聯絡人
+
+ "聯絡人資訊卡"
+ "生日"
+ "附註"
+ "轉寄郵件"
+ "回覆"
+ "+1"
+ "+%d"
+ "短訊功能已停用"
+ "將「短訊」設定為預設短訊應用程式,即可發送訊息"
+ "將「短訊」設定為預設短訊應用程式"
+ "變更"
+ "將「短訊」設定為預設短訊應用程式,即可接收訊息"
+ "尚未選取傳送短訊的首選 SIM"
+ "裝置擁有者不允許使用該應用程式。"
+ "確定"
+ "參與對話的人過多"
+
+ 無效的聯絡人
+ 無效的聯絡人
+
+ "無法載入相機圖片"
+ "您: "
+ "%s: "
+ "草稿"
+ "只要有新對話,便會在此列出"
+ "封存的對話顯示在這裏"
+ "正在載入對話…"
+ "圖片"
+ "錄音片段"
+ "影片"
+ "聯絡人卡"
+ "MMS"
+ "復原"
+ "重試"
+ "如要傳送新訊息,請輸入聯絡人姓名或電話號碼"
+ "封鎖"
+ "封鎖%s"
+ "解除封鎖%s"
+ "要封鎖 %s?"
+ "您將繼續接收這個電話號碼傳來的訊息,但不會再收到通知。這個對話將被封存。"
+ "已封鎖的聯絡人"
+ "解除封鎖"
+ "已封鎖的聯絡人"
+ "從文件庫選擇圖片"
+ "正在傳送訊息"
+ "已傳送訊息"
+ "流動數據已關閉,請檢查您的設定。"
+ "無法在飛行模式下傳送訊息"
+ "無法傳送訊息"
+ "已下載訊息"
+ "流動數據已關閉,請檢查您的設定。"
+ "在飛行模式下無法下載訊息"
+ "無法下載訊息"
+ "0"
+ "1"
+ "2"
+ "3"
+ "4"
+ "5"
+ "6"
+ "7"
+ "8"
+ "9"
+ "無法經%1$s傳送訊息,錯誤:%2$d"
+ "無法經不明流動網絡供應商傳送訊息,錯誤:%1$d"
+ "轉寄:%s"
+ "無法傳送訊息:未在網絡上啟用服務"
+ "無法傳送訊息:目的地位址無效"
+ "無法傳送訊息:訊息無效"
+ "無法傳送訊息:不支援的內容"
+ "無法傳送訊息:不支援的訊息"
+ "無法傳送訊息:太大"
+ "新訊息"
+ "檢視"
+ "圖片"
+ "找不到合適的應用程式"
+ "移除收件者"
+ "新訊息"
+ "取消"
+ "編輯接入點"
+ "未設定"
+ "名稱"
+ "APN"
+ "MMSC"
+ "MMS 代理"
+ "MMS 通訊埠"
+ "MCC"
+ "MNC"
+ "APN 類型"
+ "刪除 APN"
+ "新增 APN"
+ "儲存"
+ "捨棄"
+ "[名稱] 欄位不可留空。"
+ "APN 不可留空。"
+ "MCC 欄位必須為 3 位數。"
+ "MNC 欄位必須要有 2 或 3 位數。"
+ "正在還原預設 APN 設定。"
+ "重設回預設值"
+ "重設預設 APN 設定已完成。"
+ "未命名"
+ "接入點名稱"
+ "APN"
+ "新增 APN"
+ "這位使用者無法修改存取點名稱設定"
+ "要複製到剪貼簿嗎?"
+ "複製"
+ "至 %s"
+ "一般"
+ "進階"
+ "一般設定"
+ "進階設定"
+ "「%s」SIM 卡"
+ "向所有收件者逐一傳送短訊。只有您會收到回覆"
+ "向所有收件者傳送一封 MMS"
+ "電話號碼不明"
+ "新訊息"
+ "新訊息。"
+ "SIM 選取器"
+ "已選擇%1$s,SIM 選取器"
+ "編輯主旨"
+ "選取 SIM 或編輯主旨"
+ "輕觸並按住即可錄製音效檔案"
+ "開始新的對話"
+ "短訊"
+ "「短訊」清單"
+ "短訊"
+ "新訊息"
+ "對話群組清單"
+ "正在載入對話"
+ "正在載入訊息"
+ "查看更多對話"
+ "查看更多訊息"
+ "對話群組已刪除"
+ "已刪除對話,輕觸即可查看其他「短訊」對話"
+ "已封鎖"
+ "已解除封鎖"
+ "儲存空間不足。部分資料可能會遺失。"
+ "選取附件"
+ "確認選取"
+ "已選取 %d 個附件"
+ "請移除一個或多個附件,然後再試一次。"
+ "您可以嘗試傳送訊息,但可能要移除一個或多個附件才可送達。"
+ "每封郵件只可傳送一部影片。請移除額外的影片,然後再試一次。"
+ "「短訊」無法載入附件。"
+ "直接傳送"
+ "無法開始對話"
+ "%1$s (%2$s)"
+ "已選取 %s"
+
diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml
new file mode 100644
index 0000000..3226b70
--- /dev/null
+++ b/res/values-zh-rTW/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "無主旨"
+ "無主旨"
+
+
+ "是"
+ "否"
+ "確定"
+ "呵呵"
+ "謝謝"
+ "我同意"
+ "很好"
+ "我正在路上"
+ "好,我稍後再回覆您"
+ ":)"
+ ":("
+
+
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..957d943
--- /dev/null
+++ b/res/values-zh-rTW/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "簡訊"
+ "簡訊"
+ "選取對話"
+ "設定"
+ "傳送訊息"
+ "新增附件"
+ "説明"
+ "歡迎使用"
+ "略過"
+ "繼續 >"
+ "繼續"
+ "結束"
+ "設定 >"
+ "設定"
+ "「簡訊」需要取得簡訊、電話和聯絡人應用程式的存取權限。"
+ "如要變更權限,請依序前往 [設定] > [應用程式] > [簡訊] > [權限]。"
+ "如要變更權限,請依序前往 [設定]、[應用程式]、[簡訊] 及 [權限]。"
+ "常用聯絡人"
+ "所有聯絡人"
+ "傳送至 %s"
+ "拍照或錄影"
+ "選擇這個裝置上的圖片"
+ "錄音"
+ "選擇相片"
+ "已選取媒體。"
+ "已取消選取媒體。"
+ "已選取 %d 個項目"
+ "圖片 (%1$tB %1$te %1$tY %1$tl %1$tM %1$tp)"
+ "圖片"
+ "錄音"
+ "分享"
+ "剛剛"
+ "最新"
+
+ %d 分鐘
+ %d 分鐘
+
+
+ %d 小時
+ %d 小時
+
+
+ %d 天
+ %d 天
+
+
+ %d 週
+ 1 週
+
+
+ %d 個月
+ 1 個月
+
+
+ %d 年
+ 1 年
+
+ "等級 0 訊息"
+ "儲存"
+ "裝置儲存空間不足,「簡訊」會自動刪除較舊簡訊以釋出空間。"
+ "儲存空間不足"
+ "在裝置可用空間增加前,「簡訊」可能無法收發訊息。"
+ "簡訊儲存空間即將用完,建議您刪除部分訊息。"
+ "驗證您的手機號碼"
+ "這個一次性步驟可確保「簡訊」正確傳送群組訊息。"
+ "手機號碼"
+ "刪除所有內含媒體的訊息"
+ "刪除超過 %s的訊息"
+ "自動刪除超過 %s的訊息"
+ "忽略"
+ "刪除所有內含媒體的訊息?"
+ "刪除超過 %s的訊息?"
+ "刪除超過 %s的訊息並開啟自動刪除設定?"
+ "%s說了"
+ "您說了"
+ "來自%s的訊息"
+ "您傳送了訊息"
+ "傳送中…"
+ "傳送失敗,輕觸即可再試一次。"
+ "傳送失敗,正在嘗試重新傳送…"
+ "重新傳送或刪除"
+ "目前無法傳送您的簡訊,請撥打語音電話聯絡緊急服務。"
+ "失敗"
+ "可下載新的多媒體訊息"
+ "新的多媒體訊息"
+ "無法下載"
+ "輕觸即可再試一次"
+ "輕觸即可下載"
+ "下載或刪除"
+ "下載中…"
+ "訊息已過期或無法存取"
+ "大小:%1$s,期限:%2$s"
+ "收件者無效,因此無法傳送訊息。"
+ "尚未透過網路啟用服務"
+ "網路發生問題,因此無法傳送"
+ "訊息已過期或無法存取"
+ "(無主旨)"
+ "寄件者不明"
+ "已傳送"
+ "無法下載來自 %2$s 的這則訊息:%1$s。"
+ "記憶體不足,因此無法完成資料庫作業"
+ "訊息未傳送"
+ "「簡訊」未傳送部分訊息"
+
+ %d 個對話中的 %d 則訊息
+ 1 個對話中的 %d 則訊息
+
+ "訊息未順利下載"
+ "「簡訊」未下載部分訊息"
+
+ %d 個對話中的 %d 則訊息
+ 1 個對話中的 %d 則訊息
+
+ "無法傳送訊息給 %1$s"
+ "目前無法將您的簡訊傳送至 %1$s,請撥打語音電話聯絡緊急服務。"
+
+ %d 則新訊息
+ 新訊息
+
+ "發起"
+ "無法使用相機"
+ "無法使用相機"
+ "無法錄影"
+ "無法儲存媒體"
+ "無法拍照"
+ "返回"
+ "已封存"
+ "刪除"
+ "封存"
+ "取消封存"
+ "關閉通知"
+ "開啟通知"
+ "新增聯絡人"
+ "下載"
+ "傳送"
+ "刪除"
+ "刪除這則訊息?"
+ "這項操作無法復原。"
+ "刪除"
+
+ 要刪除這些對話嗎?
+ 要刪除這個對話嗎?
+
+ "刪除"
+ "取消"
+ "收件者"
+ "選取多張圖片"
+ "確認選取"
+ "超過 %d 個項目"
+ "無法錄製音訊,請再試一次。"
+ "無法播放音訊,請再試一次。"
+ "無法儲存音訊,請再試一次。"
+ "輕觸並按住"
+ "、 "
+ " "
+ ": "
+ " "
+ "圖片"
+ "音訊剪輯"
+ "影片"
+ "聯絡人卡片"
+ "下載"
+ "透過簡訊回覆"
+ "透過多媒體訊息回覆"
+ "回覆"
+
+ %d 位參與者
+ %d 位參與者
+
+ "我"
+ "已封鎖並封存聯絡人"
+ "已解除封鎖及解除封存聯絡人"
+ "已封存 %d 個"
+ "已解除封存 %d 個"
+ "已關閉通知功能"
+ "已開啟通知功能"
+ "設定程序已完成,請再次輕觸 [傳送]。"
+ "已成功將「簡訊」設為預設的簡訊應用程式。"
+
+ 捨棄附件
+ 捨棄附件
+
+ "音訊附件"
+ "播放音訊附件"
+ "暫停"
+ "收到%s傳送的訊息,內容如下:%s。"
+ "%s嘗試傳送訊息但未成功:%s。時間:%s。"
+ "%s傳送了訊息:%s。時間:%s。"
+ "給%s的訊息尚未送出:%s。時間:%s。"
+ "正在傳送訊息給%s:%s。時間:%s。"
+ "無法傳送訊息給%s:%s。時間:%s。"
+ "已傳送訊息給%s:%s。時間:%s。"
+ "%s嘗試傳送訊息但未成功:%s。時間:%s。%s。"
+ "%s傳送了訊息:%s。時間:%s。%s。"
+ "給%s的訊息尚未送出:%s。時間:%s。"
+ "正在傳送訊息給%s:%s。時間:%s。"
+ "無法傳送訊息給%s:%s。時間:%s。"
+ "已傳送訊息給%s:%s。時間:%s。"
+ "訊息傳送失敗,輕觸即可重試。"
+ "與%s的對話"
+ "刪除主旨"
+ "錄影"
+ "拍攝靜態影像"
+ "拍照"
+ "開始錄影"
+ "切換至全螢幕相機"
+ "切換使用前置與後置鏡頭"
+ "停止錄影並附加影片"
+ "停止錄影"
+ "簡訊相片"
+
+ %d 張相片已儲存到「%s」相簿
+ %d 張相片已儲存到「%s」相簿
+
+
+ %d 段影片已儲存到「%s」相簿
+ %d 段影片已儲存到「%s」相簿
+
+
+ %d 份附件已儲存到「%s」相簿
+ %d 份附件已儲存到「%s」相簿
+
+
+ %d 份附件已儲存到「下載內容」
+ %d 份附件已儲存到「下載內容」
+
+
+ 已儲存 %d 個附件
+ 已儲存 %d 個附件
+
+
+ 無法儲存 %d 個附件
+ 無法儲存 %d 個附件
+
+ "已儲存的多媒體訊息附件"
+ "設定"
+ "已封存"
+ "關閉"
+ "多媒體訊息"
+ "進階"
+ "偵錯"
+ "通知"
+ "音效"
+ "靜音"
+ "震動"
+ "已封鎖"
+ "簡訊傳送報告"
+ "傳送簡訊後要求傳送回條"
+ "自動擷取"
+ "自動擷取多媒體訊息"
+ "漫遊時自動擷取"
+ "漫遊時自動擷取多媒體訊息"
+ "群組簡訊"
+ "有多位收件者時,也使用多媒體訊息傳送訊息"
+ "預設簡訊應用程式"
+ "預設簡訊應用程式"
+
+
+ "您的電話號碼"
+ "不明"
+ "訊息傳送音效"
+ "傾印簡訊"
+ "將收到的簡訊原始資料傾印到外部儲存空間檔案"
+ "傾印多媒體訊息"
+ "將收到的多媒體訊息原始資料傾印到外部儲存空間檔案"
+ "無線災害示警"
+ "訊息選項"
+ "複製文字"
+ "查看詳細資料"
+ "刪除"
+ "轉寄"
+ "訊息詳細資料"
+ "類型: "
+ "簡訊"
+ "多媒體訊息"
+ "寄件者: "
+ "收件者: "
+ "傳送時間: "
+ "接收時間: "
+ "主旨: "
+ "大小: "
+ "優先順序: "
+ "SIM 卡: "
+ "高"
+ "一般"
+ "低"
+ "SIM 卡 %s"
+ "隱藏的寄件者地址"
+ "載入附件時無法傳送訊息。"
+ "無法載入附件,請再試一次。"
+ "網路尚未就緒,請再試一次。"
+ "刪除文字"
+ "切換輸入的文字和數字"
+ "新增更多參與者"
+ "確認參與者"
+ "發起新對話"
+ "選取此項目"
+ "播放影片"
+ "參與者和選項"
+ "偵錯"
+ "參與者和選項"
+ "一般"
+ "這個對話的參與者"
+ "進行通話"
+ "傳送簡訊"
+ "<small>透過 %s</small><br> 傳送訊息"
+
+ 傳送相片
+ 傳送相片
+
+
+ 傳送音訊
+ 傳送音訊
+
+
+ 傳送影片
+ 傳送影片
+
+
+ 傳送聯絡人卡片
+ 傳送聯絡人卡片
+
+
+ 傳送附件
+ 傳送附件
+
+
+ 有 %d 個附件可隨郵件傳送
+ 有 1 個附件可隨郵件傳送
+
+ "提供意見"
+ "前往 Google Play 商店查看"
+ "版本資訊"
+ "版本 %1$s"
+ "開放原始碼授權"
+ "通知"
+ "已達附件數量上限"
+ "無法載入附件。"
+ "加到聯絡人?"
+ "新增聯絡人"
+ "主旨"
+ "主旨: "
+ "%s:%s"
+ "正在載入聯絡人卡片"
+ "無法載入聯絡人卡片"
+ "查看聯絡人卡片"
+
+ %d 位聯絡人
+ %d 位聯絡人
+
+ "聯絡人卡片"
+ "生日"
+ "附註"
+ "轉寄郵件"
+ "回覆"
+ "還有 1 位參與者"
+ "還有 %d 位參與者"
+ "簡訊功能已停用"
+ "如要傳送訊息,請將「簡訊」設為預設的簡訊應用程式"
+ "將「簡訊」設為預設的簡訊應用程式"
+ "變更"
+ "如要接收訊息,請將「簡訊」設為預設的簡訊應用程式"
+ "尚未選取傳送簡訊時慣用的 SIM 卡"
+ "裝置擁有者不允許這個應用程式的要求。"
+ "確定"
+ "對話參與者人數過多"
+
+ 聯絡人無效
+ 聯絡人無效
+
+ "無法載入相機圖片"
+ "您: "
+ "%s: "
+ "草稿"
+ "這裡會列出您發起的新對話"
+ "封存的對話會顯示在這裡"
+ "正在載入對話…"
+ "圖片"
+ "音訊剪輯"
+ "影片"
+ "聯絡人卡片"
+ "多媒體訊息"
+ "復原"
+ "重試"
+ "輸入聯絡人名稱或電話號碼,即可開始傳送新訊息"
+ "封鎖"
+ "封鎖 %s"
+ "解除封鎖 %s"
+ "封鎖 %s?"
+ "您將持續接收來自這個號碼的訊息,但不會再收到通知。此對話將由系統封存。"
+ "封鎖的聯絡人"
+ "解除封鎖"
+ "封鎖的聯絡人"
+ "選擇文件庫中的圖片"
+ "正在傳送訊息"
+ "訊息成功送出"
+ "行動數據已關閉。請檢查您的設定。"
+ "飛航模式下無法傳送訊息"
+ "無法傳送訊息"
+ "訊息下載完成"
+ "行動數據已關閉。請檢查您的設定。"
+ "在飛航模式下無法下載訊息"
+ "無法下載訊息"
+ "0"
+ "1"
+ "2"
+ "3"
+ "4"
+ "5"
+ "6"
+ "7"
+ "8"
+ "9"
+ "無法透過%1$s傳送訊息 (錯誤代碼:%2$d)"
+ "無法透過不明行動通訊業者傳送訊息 (錯誤代碼:%1$d)"
+ "轉寄:%s"
+ "訊息未傳送:未在網路上啟用服務"
+ "無法傳送訊息:目的地位址無效"
+ "無法傳送訊息:訊息無效"
+ "無法傳送訊息:不支援的內容"
+ "無法傳送訊息:不支援的訊息"
+ "訊息未傳送:內容過大"
+ "新訊息"
+ "查看"
+ "圖片"
+ "找不到適用的應用程式"
+ "移除收件者"
+ "新訊息"
+ "取消"
+ "編輯存取點"
+ "未設定"
+ "名稱"
+ "APN"
+ "MMSC"
+ "多媒體訊息 Proxy"
+ "多媒體訊息通訊埠"
+ "MCC"
+ "MNC"
+ "APN 類型"
+ "刪除 APN"
+ "新增 APN"
+ "儲存"
+ "捨棄"
+ "名稱欄位不可留空。"
+ "APN 不可留空。"
+ "MCC 欄位的值必須為 3 碼。"
+ "MNC 欄位的值必須為 2 或 3 碼。"
+ "正在還原預設 APN 設定。"
+ "重設為預設值"
+ "預設 APN 設定的重設程序已完成。"
+ "未命名"
+ "存取點名稱"
+ "APN"
+ "新增 APN"
+ "這位使用者無法修改存取點名稱設定"
+ "複製到剪貼簿?"
+ "複製"
+ "傳送至 %s"
+ "一般"
+ "進階"
+ "一般設定"
+ "進階設定"
+ "「%s」SIM 卡"
+ "分別傳送簡訊給所有收件者 (如有任何回覆,只有您會收到)"
+ "傳送一則多媒體訊息給所有收件者"
+ "不明號碼"
+ "新訊息"
+ "新訊息。"
+ "SIM 卡選取器"
+ "已選取「%1$s」,SIM 卡選取器"
+ "編輯主旨"
+ "選取 SIM 卡或編輯主旨"
+ "輕觸並按住即可錄製音訊"
+ "發起新對話"
+ "簡訊"
+ "訊息清單"
+ "簡訊"
+ "新訊息"
+ "會話群組清單"
+ "正在載入對話"
+ "正在載入訊息"
+ "查看更多對話"
+ "查看更多訊息"
+ "對話已刪除"
+ "已刪除對話。輕觸即可顯示其他「簡訊」對話"
+ "已封鎖"
+ "已解除封鎖"
+ "儲存空間即將用盡,部分資料可能會遺失。"
+ "選取附件"
+ "確認選取項目"
+ "選取了 %d 個附件"
+ "請移除一或多個附件,然後再試一次。"
+ "您可以嘗試傳送訊息,但可能必須移除一或多個附件才能順利傳送。"
+ "每則訊息只能傳送一部影片。請移除額外的影片,然後再試一次。"
+ "「簡訊」無法載入附件。"
+ "確定傳送"
+ "無法發起對話"
+ "%1$s (%2$s)"
+ "已選取「%s」"
+
diff --git a/res/values-zu/arrays.xml b/res/values-zu/arrays.xml
new file mode 100644
index 0000000..50eafe1
--- /dev/null
+++ b/res/values-zu/arrays.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ "asikho isihloko"
+ "asikho isihloko"
+
+
+ "Yebo"
+ "Cha"
+ "KULUNGILE"
+ "Hehe"
+ "Siyabonga"
+ "Ngiyavuma"
+ "I-Nice"
+ "Ngisendleleni"
+ "KULUNGILE, mangibuye kuwe emuva kwesikhathi"
+ ":)"
+ ":("
+
+
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
new file mode 100644
index 0000000..02e21dd
--- /dev/null
+++ b/res/values-zu/strings.xml
@@ -0,0 +1,519 @@
+
+
+
+
+ "Imilayezo"
+ "Imilayezo"
+ "Khetha ingxoxo"
+ "Izilungiselelo"
+ "Thumela umlayezo"
+ "Engeza okunamathiselwe kwi-imeyili"
+ "Usizo"
+ "Siyakwamukela"
+ "Yeqa"
+ "Okulandelayo >"
+ "Okulandelayo"
+ "Phuma"
+ "Izilungiselelo >"
+ "Izilungiselelo"
+ "Ukulayeza kudinga imvume ku-SMS, ifoni noxhumana nabo."
+ "Ungaguqula izimvume ku-Izilungiselelo > Izinhlelo zokusebenza > Isilayezi > Izimvume."
+ "Ungaguqula izimvume ku-Izilungiselelo, Izinhlelo zokusebenza, Isilayezi, Izimvume."
+ "Imvamisa"
+ "Bonke oxhumana nabo"
+ "Thumela ku-%s"
+ "Thwebula izithombe noma ividiyo"
+ "Khetha izithombe kusuka kule divayisi"
+ "Rekhoda umsindo"
+ "Khetha isithombe"
+ "Imidiya ikhethiwe."
+ "Imidiya isuswe ukukhetha."
+ "%d okukhethiwe"
+ "isithombe %1$tB %1$te %1$tY %1$tl %1$tM %1$tp"
+ "Isithombe"
+ "Rekhoda umsindo"
+ "Yaba"
+ "Khona manje"
+ "Manje"
+
+ %d amaminithi
+ %d amaminithi
+
+
+ %d amahora
+ %d amahora
+
+
+ %d izinsuku
+ %d izinsuku
+
+
+ %d amaviki
+ %d amaviki
+
+
+ %dizinyanga
+ %dizinyanga
+
+
+ %d iminyaka
+ %d iminyaka
+
+ "Umlayezo wesigaba esingu-0"
+ "Londoloza"
+ "Idivayisi manje inesikhala esincane. Imilayezo izosusa ngokuzenzakalelayo imilayezo emidala ukukhulula isikhala."
+ "Isikhala sesitoreji siyaphela"
+ "Ukulayeza kungenzeka kungathumeli noma kungamukeli imilayezo kuze kube ukuthi isikhala esiningi sitholakala kudivayisi yakho."
+ "Isitoreji se-SMS esiphansi. Kungahle kudingeke ukuba ususe imilayezo."
+ "Qinisekisa inombolo yakho yefoni"
+ "Lesi sinyathelo sesikhathi esisodwa sizoqinisekisa ukuthi Ukulayeza kuzothumela imilayezo yakho yeqembu ngokufanelekile."
+ "Inombolo yefoni"
+ "Susa yonke imilayezo ngemidiya"
+ "Susa imilayezo emidala kuno-%s"
+ "Susa ngokuzenzakalelayo imilayezo emidala kuno-%s"
+ "Ziba"
+ "Susa yonke imilayezo ngemidiya?"
+ "Sula imilayezo emidala kuno-%s?"
+ "Susa imilayezo emidala kuno-%s bese uvule ukususa ngokuzenzakalelayo?"
+ "%s uthe"
+ "Wena uthe"
+ "Umlayezo ovela ku-%s"
+ "Uthumele umlayezo"
+ "Iyathumela..."
+ "Akuthunyelwe. Thinta ukuze uzame futhi."
+ "Akuthunyelwe. Iyazama futhi…"
+ "Thumela kabusha noma susa"
+ "Sicela wenze ikholi yezwi kumasevisi wesimo esiphuthumayo. Umlayezo wakho wombhalo awukwazanga ukulethwa ngalesi sikhathi."
+ "Yehlulekile"
+ "Umlayezo we-MMS omusha ongalandwa"
+ "Umlayezo we-MMS omusha"
+ "Ayikwazanga ukulanda."
+ "Thinta ukuze uzame futhi"
+ "Thinta ukuze ulande"
+ "Landa noma susa"
+ "Iyalanda..."
+ "Umlayezo uphelelwe yisikhathi noma awutholakali"
+ "usayizi: %1$s, ukuphela kwesikhathi: %2$s"
+ "Ayikwazi ukuthumela. Umamukeli awuvumelekile."
+ "Isevisi ayisebenzi kunethiwekhi"
+ "Ayikwazanga ukuthumela ngenxa yenkinga yenethiwekhi"
+ "Umlayezo uphelelwe yisikhathi noma awutholakali"
+ "(Asikho isihloko)"
+ "Umthumeli ongaziwa"
+ "Kuthunyelwe"
+ "Ayikwazanga ukulanda umlayezo we-%1$s kusuka ku-%2$s."
+ "Ayikwazanga ukuqedela umsebenzi wemininingo egciniwe ngenxa yememori ephansi"
+ "Umlayezo awuthunyelwanga"
+ "Eminye imilayezo ayithunyelwe Ekulayezeni"
+
+ %d imilayezo kwizingxoxo ezingu-%d
+ %d imilayezo kwizingxoxo ezingu-%d
+
+ "Umlayezo awuzange ulandwe"
+ "Eminye imilayezo ayilandiwe Ekulayezeni"
+
+ %d imilayezo kwizingxoxo ezingu-%d
+ %d imilayezo kwizingxoxo ezingu-%d
+
+ "Umlayezo oya ku-%1$s awuthunyelwanga"
+ "Sicela uwenze ikholi yezwi kumasevisi wesimo esiphuthumayo. Umlayezo wakho wobhalo ku-%1$s awukwazanga ukulethwa ngalesi sikhathi."
+
+ %d imilayezo emisha
+ %d imilayezo emisha
+
+ "Qala"
+ "Ikhamera ayitholakali"
+ "Ikhamera ayitholakali"
+ "Ukuthwebula kwevidiyo akutholakali"
+ "Ayikwazi ukulondoloza imidiya"
+ "Ayikwazi ukuthatha isithombe"
+ "Phindela emuva"
+ "Okufakwe kungobo yomlando"
+ "Susa"
+ "Faka kungobo yomlando"
+ "Ungafaki kungobo yomlando"
+ "Vala izaziso"
+ "Vula isaziso"
+ "Engeza oxhumana naye"
+ "Landa"
+ "Thumela"
+ "Susa"
+ "Susa lo mlayezo?"
+ "Lesi senzo asikwazi ukuhlehliswa."
+ "Susa"
+
+ Susa lezi zingxoxo?
+ Susa lezi zingxoxo?
+
+ "Susa"
+ "Khansela"
+ "Ku-"
+ "Khetha izithombe eziningi"
+ "Qinisekisa ukukhetha"
+ "+%d"
+ "Ayikwazi ukurekhoda umsindo. Zama futhi."
+ "Ayikwazi ukudlala umsindo. Zama futhi."
+ "Ayikwazanga ukulondoloza umsindo. Zama futhi."
+ "Thinta bese ubambe"
+ ", "
+ " "
+ ": "
+ " "
+ "Isithombe"
+ "Isiqeshana somsindo"
+ "Ividiyo"
+ "Ikhadi loxhumana naye"
+ "Landa"
+ "Phendula nge-SMS"
+ "Phendula nge-MMS"
+ "Phendula"
+
+ %d ababambiqhaza
+ %d ababambiqhaza
+
+ "Mina"
+ "Oxhumana naye uvinjiwe futhi wafakwa kungobo yomlando"
+ "Oxhumana naye uvulelwe futhi wakhishwa kungobo yomlando"
+ "%d kufakwe kungobo yomlando"
+ "%d kukhishwe kungobo yomlando"
+ "Izaziso zivaliwe"
+ "Izaziso zivuliwe"
+ "Konke kusethiwe. Thinta u-Thumela futhi."
+ "Ukulayeza kusethwe ngempumelelo njengohlelo lokusebenza oluzenzakalelayo lwe-SMS."
+
+ Lahla okunamathiselwe
+ Lahla okunamathiselwe
+
+ "Ukunamathiselwa komsindo"
+ "Dala okunamathiselwe komsindo"
+ "Misa isikhashana"
+ "Umlayezo kusukela ku-%s: %s."
+ "Umlayezo ohlulekile ophuma ku-%s: %s. Isikhathi: %s."
+ "Umlayezo ophuma ku-%s: %s. Isikhathi: %s."
+ "Umlayezo ongathunyelwe ku-%s: %s. Isikhathi: %s."
+ "Ithumela umlayezo ku-%s: %s. Isikhathi: %s."
+ "Umlayezo ohlulekile oya ku-%s: %s. Isikhathi: %s."
+ "Umlayezo oya ku-%s: %s. Isikhathi: %s."
+ "Umlayezo ohlulekile kusukela ku-%s: %s. Isikhathi: %s. %s."
+ "Umlayezo ophuma ku-%s: %s. Isikhathi: %s. %s."
+ "Umlayezo ongathunyelwe ku-%s: %s. Isikhathi: %s."
+ "Ithumela umlayezo ku-%s: %s. Isikhathi: %s."
+ "Umlayezo ohlulekile oya ku-%s: %s. Isikhathi: %s."
+ "Umlayezo oya ku-%s: %s. Isikhathi: %s."
+ "Umlayezo ohlulekile. Thinta ukuze uphinde uzame."
+ "Ingxoxo no-%s"
+ "Sula isihloko"
+ "Thwebula ividiyo"
+ "Thwebula isithombe esimile"
+ "Thatha isithombe"
+ "Qala ukuqopha ividiyo"
+ "Shintshela kukhamela yesikrini esigcwele"
+ "Shintsha phakathi kwekhamera yaphambilini neyasemuva"
+ "Misa ukurekhoda uphinde ushumeke ividiyo"
+ "Misa ukurekhoda amavidiyo"
+ "Ilayeza izithombe"
+
+ %d izithombe zilondolozwe ku-albhamu \"%s\"
+ %d izithombe zilondolozwe ku-albhamu \"%s\"
+
+
+ %d amavidiyo alondolozwe ku-albhamu \"%s\"
+ %d amavidiyo alondolozwe ku-albhamu \"%s\"
+
+
+ %d okunamathiselwe kulondolozwe ku-albhamu \"%s\"
+ %d okunamathiselwe kulondolozwe ku-albhamu \"%s\"
+
+
+ %d Okunamathiselwe kulondolozwe kokuthi \"Okulandiwe\"
+ %d Okunamathiselwe kulondolozwe kokuthi \"Okulandiwe\"
+
+
+ %d okunamathiselwe kulondoloziwe
+ %d okunamathiselwe kulondoloziwe
+
+
+ Ayikwazanga ukulondoloza okunamathiselwe okungu-%d
+ Ayikwazanga ukulondoloza okunamathiselwe okungu-%d
+
+ "Ilondoloze okunamathiselwa kwe-MMS"
+ "Izilungiselelo"
+ "Okufakwe kungobo yomlando"
+ "Vala"
+ "I-MMS"
+ "Okuthuthukisiwe"
+ "Lungisa iphutha"
+ "Izaziso"
+ "Umsindo"
+ "Thulile"
+ "Dlidlizela"
+ "Ivinjelwe"
+ "Imibiko yokulethwa kwe-SMS"
+ "Cela umbiko wokuthumela we-SMS ngayinye oyithumelayo"
+ "Thola ngokuzenzakalekayo"
+ "Thola ngokuzenzakalela imilayezo ye-MMS"
+ "Ukuthola okuzenzakalelayo kokuzula"
+ "Thola ngokuzenzakalela i-MMS uma uzula"
+ "Imilayezo yeqembu"
+ "Sebenzisa i-MMS ukuthumela umlayezo owodwa uma kunabamukeli abaningi"
+ "Uhlelo lokusebenza oluzenzakalelayo le-SMS"
+ "Uhlelo lokusebenza oluzenzakalelayo le-SMS"
+
+
+ "Inombolo yakho yefoni"
+ "Akwaziwa"
+ "Imisindo yemilayezo ephumayo"
+ "Lahla i-SMS"
+ "Lahla idatha engahluziwe ye-SMS etholiwe kufayela lesitoreji sangaphandle"
+ "Lahla i-MMS"
+ "Lahla idatha engahluziwe ye-MMS etholiwe kufayela lesitoreji sangaphandle"
+ "Izexwayiso ezingenantambo"
+ "Izinketho zomlayezo"
+ "Kopisha umbhalo"
+ "Buka imininingwane"
+ "Susa"
+ "Dlulisela phambili"
+ "Imininingwane yomlayezo"
+ "Uhlobo: "
+ "Umlayezo wombhalo"
+ "Umlayezo wokuxhumana okuxubile"
+ "Kusuka ku: "
+ "Ku: "
+ "Okuthunyelwe: "
+ "Okutholiwe: "
+ "Isihloko: "
+ "Usayizi: "
+ "Okubalulekile: "
+ "SIM: "
+ "Okuphezulu"
+ "Okuvamile"
+ "Okuphansi"
+ "SIM %s"
+ "Ikheli lomthumeli lifihliwe"
+ "Ayikwazi ukuthumela umlayezo ngenkathi ilayisha izinamathiseli."
+ "Ayikwazi ukulayisha okunamathiselwe. Zama futhi."
+ "Inethiwekhi ayilungile. Zama futhi."
+ "Susa umbhalo"
+ "Shintsha phakathi kokufaka umbhalo nezinombolo"
+ "Engeza ababambiqhaza abaningi"
+ "Qinisekisa ababambiqhazi"
+ "Qala ingxoxo entsha"
+ "Khetha into"
+ "Dlala ividiyo"
+ "Abantu nezinketho"
+ "Lungisa iphutha"
+ "Abantu nezinketho"
+ "Okuvamile"
+ "Abantu kule ngxoxo"
+ "Yenza ikholi"
+ "Thumela umlayezo"
+ "Thumela umlayezo<br/><small>kusukela ku-%s</small>"
+
+ Thumela izithombe
+ Thumela izithombe
+
+
+ Thumela imisindo
+ Thumela imisindo
+
+
+ Thumela amavidiyo
+ Thumela amavidiyo
+
+
+ Thumela amakhadi oxhumana nabo
+ Thumela amakhadi oxhumana nabo
+
+
+ Thumela okunamathiselwe
+ Thumela okunamathiselwe
+
+
+ %d okunamathiselwe kukulungele ukuthunyelwa
+ %d okunamathiselwe kukulungele ukuthunyelwa
+
+ "Thumela impendulo"
+ "Buka ku-Google Play Isitolo"
+ "Ulwazi lwenguqulo"
+ "Inguqulo %1$s"
+ "Amalayisense womthombo ovulekile"
+ "Izaziso"
+ "Kufinyelelwe kumkhawulo wokunamathiselwe kwi-imeyili"
+ "Ihlulekile ukulayisha okunamathiselwe kwi-imeyili."
+ "Engeza oxhumana nabo"
+ "Engeza oxhumana naye"
+ "Isihloko"
+ "Isihloko: "
+ "%s%s"
+ "Ilayisha ikhadi loxhumana naye"
+ "Ayikwazi ukulayisha ikhadi loxhumana naye"
+ "Buka ikhadi lokuxhumana"
+
+ %d oxhumana nabo
+ %d oxhumana nabo
+
+ "Amakhadi wokuxhumana"
+ "Usuku lokuzalwa"
+ "Amanothi"
+ "Dlulisa umlayezo"
+ "Phendula"
+ "+1"
+ "+%d"
+ "I-SMS ikhutshaziwe"
+ "Ukuze uthumele, setha Ukulayeza njengohlelo lwakho lokusebenza oluzenzakalelayo lwe-SMS"
+ "Setha Ukulayeza njengohlelo lokusebenza oluzenzakalelayo lwe-SMS"
+ "Guqula"
+ "Ukuze uthole imilayezo, setha Ukulayeza njengohlelo lokusebenza oluzenzakalelayo lwe-SMS"
+ "Ayikho i-SIM ethandwayo ekhethiwe yokuthumela imilayezo ye-SMS"
+ "Lolu hlelo lokusebenza aluvumelekile umnikazi wedivayisi."
+ "KULUNGILE"
+ "Ababambiqhaza abaningi kakhulu engxoxweni"
+
+ Oxhumana nabo abangavumelekile
+ Oxhumana nabo abangavumelekile
+
+ "Ayikwazanga ukulayisha isithombe sekhamera"
+ "Wena: "
+ "%s: "
+ "Okusalungiswa"
+ "Uma uqala ingxoxo entsha, uzoyibona kuhlu lapha"
+ "Izingxoxo ezifakwe kungobo yomlando zivela lapha"
+ "Ilayisha izingxoxo..."
+ "Isithombe"
+ "Isiqeshana somsindo"
+ "Ividiyo"
+ "Ikhadi loxhumana naye"
+ "i-MMS"
+ "Hlehlisa"
+ "Zama futhi"
+ "Faka igama loxhumana naye noma inombolo eyefoni ukuze uqale umlayezo omusha"
+ "Vimba"
+ "Vimbela u-%s"
+ "Susa ukuvimbela u-%s"
+ "Vumba e-%s?"
+ "Uzoqhubeka nokuthola imilayezo kusuka kule nombolo kodwa ngeke usaziswa. Le ngxoxo izofakwa kungobo yomlando."
+ "Oxhumana nabo abavinjiwe"
+ "VULELA"
+ "Oxhumana nabo abavinjiwe"
+ "Khetha isithombe kusuka kulabhulali yedokhumenti"
+ "Ithumela umlayezo"
+ "Umyalezo uthunyelwe"
+ "Idatha yeselula ivaliwe. Hlola izilungiselelo zakho."
+ "Ayikwazi ukuthumela imilayezo kumodi yendiza"
+ "Umlayezo awukwazanga ukuthunyelwa"
+ "Umlayezo ulandiwe"
+ "Idatha yeselula ivaliwe. Hlola izilungiselelo zakho."
+ "Ayikwazi ukulanda imilayezo kumodi ye-Ndiza"
+ "Umlayezo awukwazanga ukulandwa"
+ "Iqanda"
+ "Kunye"
+ "Kubili"
+ "Kuthathu"
+ "Kune"
+ "Kuhlanu"
+ "Isithupha"
+ "Yisikhombisa"
+ "Isishiyagalombili"
+ "Isishiyagalolunye"
+ "Ayikwazi ukuthumela umlayezo nge-%1$s, iphutha %2$d"
+ "Ayikwazi ukuthumela umlayezo ngenkampani yenethiwekhi engaziwa, iphutha %1$d"
+ "Dlulisa: %s"
+ "Umlayezo awuthunyelwe: isevisi ayisebenzi kunethiwekhi"
+ "Umlayezo awuthunyelwe: ikheli lendawo okuya kulo alivumelekile"
+ "Umlayezo awuthunyelwe: umlayezo ongavumelekile"
+ "Umlayezo awuthunyelwe: okuqukethwe okungasekelwe"
+ "Umlayezo awuthunyelwe: umlayezo ongasekelwe"
+ "Umlayezo awuthunyelwe: mkhulu kakhulu"
+ "Umlayezo omusha"
+ "Buka"
+ "Isithombe"
+ "Ayikwazanga ukuthola uhlelo lokusebenza olufanelekile"
+ "Susa umamukeli"
+ "Umlayezo omusha"
+ "Khansela"
+ "Hlela iphoyinti lokufinyelela"
+ "Ayisethiwe"
+ "Igama"
+ "I-APN"
+ "I-MMSC"
+ "Ummeleli we-MMS"
+ "Imbobo ye-MMS"
+ "I-MCC"
+ "I-MNC"
+ "Uhlobo lwe-APN"
+ "Susa i-APN"
+ "I-APN Entsha"
+ "Londoloza"
+ "Lahla"
+ "Igama lenkambu akumele lingabi nalutho."
+ "I-APN akumele ingabi nalutho."
+ "Inkundla ye-MCC kumele ibe namadijithi angu-3."
+ "Inkambu ye-MNC kumelwe ibe amadijithi angu-2 noma angu-3."
+ "Ibuyisela izilungiselelo ze-APN zokuzenzakalelayo."
+ "Setha kabusha kube ngokuzenzakalelayo"
+ "Izilungiselelo ze-APN zokusethwa kabusha okuzenzakalelayo ziqediwe."
+ "Akunasihloko"
+ "Amagama wephoyinti lokufinyelela"
+ "Ama-APN"
+ "I-APN Entsha"
+ "Izilungiselelo zegama le-Phoyinti Lokufinyelela azitholakali kulo msebenzisi"
+ "Kopisha kubhodi lokunamathisela?"
+ "Kopisha"
+ "ukuya ku-%s"
+ "Okuvamile"
+ "Okuthuthukisiwe"
+ "Izilungiselelo ezijwayelekile"
+ "Izilungiselelo ezithuthukisiwe"
+ "\"%s\" SIM"
+ "Thumela imilayezo ye-SIM ngamunye kubo bonke abamukeli. Uwena kuphela ozothla izimpendulo"
+ "Thumela i-SMS eyodwa kubo bonke abamukeli"
+ "Inombolo engaziwa"
+ "Umlayezo omusha."
+ "Umlayezo omusha."
+ "Iskhethi se-SIM"
+ "%1$s okukhethiwe, isikhethi se-SIM"
+ "Hlela isihloko"
+ "Khetha i-SIM noma hlela isihloko"
+ "Thinta futhi ubambe ukuze urekhode umsindo"
+ "Qala ingxoxo entsha"
+ "Imilayezo"
+ "Uhlu lokulayeza"
+ "Imilayezo"
+ "Umlayezo omusha"
+ "Uhlu lwengxoxo"
+ "Ilayisha izingxoxo"
+ "Ilayisha"
+ "Buka izingxoxo ezengeziwe"
+ "Buka eminye imilayezo"
+ "Ingxoxo isusiwe"
+ "Ingxoxo isusiwe. Thinta ukuze ubonise ingxoxo ehlukile yokulayeza"
+ "Uvinjelwe"
+ "Uvulelwe"
+ "Isikhala sesitoreji siphansi. Enye idatha ingalahleka."
+ "Khetha okunamathiselwe"
+ "Qinisekisa ukukhetha"
+ "%d okukhethiwe"
+ "Sicela ususe okunamathiselwe kwi-imeyili okukodwa noma okuningi uphinde uzame futhi."
+ "Ungazama ukuthumela umlayezo wakho, kodwa kungenzeka ungathunyelwa ngaphandle kokuthi ususe okunamathiselwe kwi-imeyili okukodwa noma okuningi."
+ "Ungathumela ividiyo eyodwa kuphela ngomlayezo. Sicela ususe amavidiyo angeziwe uphinde uzame futhi."
+ "Ukulayeza kuhlulekile ukulayisha okunamathiselwe kwi-imeyili."
+ "Thumela noma kunjalo"
+ "Ayikwazanga ukuqala ingxoxo"
+ "%1$s (%2$s)"
+ "I-%s ikhethiwe"
+
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
new file mode 100644
index 0000000..59e3206
--- /dev/null
+++ b/res/values/arrays.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+ no subject
+ nosubject
+
+
+
+
+ Yes
+ No
+ OK
+ Hehe
+ Thanks
+ I agree
+ Nice
+ On my way
+ OK, let me get back to you later
+ :)
+ :(
+
+
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
new file mode 100644
index 0000000..233cf9c
--- /dev/null
+++ b/res/values/attrs.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values/colors.xml b/res/values/colors.xml
new file mode 100644
index 0000000..f33e105
--- /dev/null
+++ b/res/values/colors.xml
@@ -0,0 +1,174 @@
+
+
+
+ #689F38
+ @color/primary_color
+
+
+ #ffffff
+ @color/primary_color
+ #537F2D
+ #ffffff
+ #9D9D9D
+ #838383
+
+
+ #636363
+ #323232
+ #F05A24
+ #DE000000
+ #8A000000
+
+ #44000000
+
+ #000000
+ #99323232
+ #99ffffff
+ #99ff0000
+ #000000
+
+ #ff323232
+ #000000
+ #99ffffff
+ #6a6a6a
+ #007fce
+ #99ff0000
+ #ffffffff
+ #99ffffff
+ #ffffffff
+
+ @android:color/transparent
+ #670099cc
+ #cc0099cc
+ #6733b5e5
+
+ #ffffffff
+ #ffffffff
+ #6a6a6a
+ #ff323232
+ #eeeeee
+ #9d9d9d
+ @color/primary_color
+ #999999
+ #ffffffff
+ #e2e2e2
+ #ffffffff
+ #8BC34A
+ #80689F38
+ #ff808080
+
+
+ #ff0000
+
+
+ #7f040000
+
+ #d2d2d2
+ #40000000
+ #4d4d4d
+ #999999
+
+ @android:color/white
+ #a0ffffff
+ #44000000
+ #ddffffff
+ @android:color/white
+ @color/primary_color
+ #ffffff
+ #4285f4
+ #ededed
+ #33000000
+ @android:color/white
+
+ #80000000
+
+ #80ffffff
+
+ #eeeeee
+ #6733b5e5
+ #44000000
+
+ #ffffff
+
+ #29000000
+ #30000000
+ #40000000
+ #323232
+ #323232
+ @color/primary_color
+
+ #9A9A9A
+ #FFFFFF
+ #FFFFFF
+ #a2a2a2
+ @color/primary_color
+ #ff0000
+ #99aaaaaa
+
+ #4d4d4d
+ #6d6d6d
+ #6d6d6d
+ #cccccc
+
+ @color/primary_color
+ #3ea4dc
+ #40ffffff
+
+ #555555
+ #8BC34A
+ #6d6d6d
+ #ff000000
+ @color/primary_color
+ #40000000
+ @color/primary_color
+
+ #4d4d4d
+ #999999
+ #cceeeeee
+ #ffeeeeee
+ #ffffff
+ #323232
+
+ #80689F38
+ #b0dddddd
+
+ #03a9f4
+ #4d4d4d
+
+ #4d4d4d
+ #6d6d6d
+ #333333
+ #000000
+
+ @color/primary_color
+
+ #424242
+ @android:color/white
+ #424242
+ #ffffff
+ #40000000
+ #FFFFFF
+
+ #eeeeee
+ #eeeeee
+
+ #1e000000
+ #42000000
+ #ffffff
+
+ #F1F1F1
+
diff --git a/res/values/config.xml b/res/values/config.xml
new file mode 100644
index 0000000..954f5ed
--- /dev/null
+++ b/res/values/config.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+ 0
+
diff --git a/res/values/constants.xml b/res/values/constants.xml
new file mode 100644
index 0000000..8985fd1
--- /dev/null
+++ b/res/values/constants.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+ notifications_category
+ mms_messaging_category
+ advanced_category
+ notifications_enabled
+ true
+ notification_sound
+ notification_vibration
+ true
+ sms_disabled
+ sms_enabled
+ send_sound
+ true
+ advanced_prefs
+
+
+ buglesub_delivery_reports
+ false
+ buglesub_auto_retrieve_mms
+ true
+ buglesub_auto_retrieve_mms_when_roaming
+ false
+ buglesub_group_messaging
+ true
+ buglesub_mms_phone_number
+ buglesub_wireless_alerts_key
+ buglesub_apn_list
+
+
+ debug_category
+ dump_sms
+ false
+ dump_mms
+ false
+
+
+
+
+ sms_apns_key
+ use_local_apn_pref_key
+ false
+
+ 600
+ 300
+ 300
+ 200
+ 70%
+
+ 300
+
+
+ notifications_group_children
+
+
+ "'IMG'_yyyyMMdd_HHmmss"
+
+ "yyyyMMdd_HHmmss"
+
+
+ 300
+ 4000
+
+
+ 300
+
+
+ 300
+
+
+ 300
+
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
new file mode 100644
index 0000000..270ea9e
--- /dev/null
+++ b/res/values/dimens.xml
@@ -0,0 +1,191 @@
+
+
+
+
+ 56dp
+ 8dp
+ 20sp
+ 16sp
+ 12sp
+ 12sp
+ 12sp
+ 16sp
+ 42dp
+ 56dp
+ 12dp
+ 16dp
+ 8dp
+ 3dp
+ 56dp
+ 56dp
+ 42dp
+ 96dp
+ 4dp
+ 30dp
+ 16dp
+
+ 9dp
+ 12dp
+ 10dp
+ 14dp
+ 18dp
+ 2dp
+ 4dp
+ 12dp
+
+ 215dp
+ 4dp
+ 42dp
+ 36dp
+ 3dp
+ 16dp
+ 16sp
+ 20dp
+ 10dp
+ 133dp
+ 52dp
+ 64dp
+ 4dp
+ 6dp
+ -12dp
+ 12dp
+ 2dp
+ 12dp
+ 8dp
+
+
+ 240dp
+ 240dp
+
+
+ 16sp
+ 14sp
+ 42dp
+ 20sp
+ 14sp
+ 2dp
+ 26dp
+
+
+ 150dp
+
+ 1000dp
+ 110dp
+ 50dp
+ 150dp
+ 130dp
+ 260dp
+ 1dp
+ 22sp
+
+ 67%
+ 28%
+ 75%
+
+ 16sp
+ 14sp
+ 6dp
+
+ 320dp
+ 3dp
+ 2dp
+ 12dp
+ 18sp
+ 14sp
+ 16sp
+ 240dp
+ 240dp
+
+ 60dp
+ 4dp
+ 2dp
+ 6dp
+ 12dp
+ 14dp
+ 12sp
+
+ 40dp
+ 12sp
+ 10dp
+ 14sp
+ 20dp
+ 60dp
+ 16sp
+
+ 24dp
+ 18dp
+
+ 24dp
+ 20dp
+ 14dp
+ 20dp
+
+ 6dp
+
+ 14sp
+ 14sp
+ 42dp
+
+ 25dp
+ 10dp
+ 5dp
+
+ 16sp
+ 14sp
+ 60dp
+ 14sp
+
+
+ 40dp
+ 30dp
+ 20dp
+ 8dp
+ 12dp
+ 3dp
+ 2dp
+
+ 20dp
+
+
+ 8dp
+ 0dp
+ 2dp
+ 48dp
+ 48dp
+ 18sp
+ 12dp
+ 16dp
+
+ 110dp
+ 15dp
+
+
+ 120dp
+
+
+ 8dp
+ 8dp
+ 48dp
+ 88dp
+ 88dp
+ 44dp
+ 24dp
+ 8dp
+ 8dp
+ 24sp
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
new file mode 100644
index 0000000..ec675ef
--- /dev/null
+++ b/res/values/strings.xml
@@ -0,0 +1,976 @@
+
+
+
+
+ Messaging
+
+
+ Messaging
+
+ Select conversation
+
+ Settings
+ Send Message
+ Add an attachment
+ Help
+
+ Welcome
+ Skip
+ Next >
+ Next
+ Exit
+ Settings >
+ Settings
+
+ Messaging needs permission to SMS, Phone and Contacts.
+ You can change permissions in Settings > Apps > Messaging > Permissions.
+ You can change permissions in Settings, Apps, Messaging, Permissions.
+
+
+ Frequents
+
+
+ All contacts
+
+
+ Send to %s
+
+ Capture pictures or video
+ Choose images from this device
+ Record audio
+ Choose photo
+ The media is selected.
+ The media is unselected.
+ %d selected
+
+ image %1$tB %1$te %1$tY %1$tl %1$tM %1$tp
+ image
+ Record audio
+
+ Share
+
+ "Just now"
+ "Now"
+
+
+
+ %d min
+ %d mins
+
+
+
+
+ %d hour
+ %d hours
+
+
+
+
+ %d day
+ %d days
+
+
+
+
+
+ a week
+
+ %d weeks
+
+
+
+ a month
+
+ %d months
+
+
+
+ a year
+
+ %d years
+
+
+
+ Class 0 message
+ Save
+
+
+ Device is low on space. Messaging will automatically delete older messages to free up space.
+
+ Storage space running out
+
+ Messaging might not send or receive messages until more space is available on your device.
+
+ Low SMS storage. You may need to delete messages.
+
+
+ Confirm your phone number
+
+ This one-time step will ensure Messaging will deliver your group messages properly.
+
+ Phone number
+
+
+ Delete all messages with media
+ Delete messages older than %s
+ Auto-delete messages older than %s
+ Ignore
+
+
+ Delete all messages with media?
+ Delete messages older than %s?
+ Delete messages older than %s and turn on auto-delete?
+
+
+
+
+ %s said
+ You said
+
+
+ Message from %s
+ You sent a message
+
+
+ Sending…
+
+ Not sent. Touch to try again.
+
+ Not sent. Trying again…
+
+ Resend or delete
+
+
+ Please make a voice call to emergency services. Your text message could not be delivered at this time.
+
+
+ Failed
+
+
+ New MMS message to download
+
+ New MMS message
+
+ Couldn\'t download
+
+ Touch to try again
+
+ Touch to download
+
+ Download or delete
+
+ Downloading…
+
+ Message expired or not available
+
+ size: %1$s, expiration: %2$s
+
+ Can\'t send. Recipient not valid.
+
+ Service not activated on network
+
+ Couldn\'t send due to network problem
+
+ Message expired or not available
+
+
+ (No subject)
+
+ Unknown sender
+ Delivered
+
+ Couldn\'t download message %1$s from %2$s.
+
+ Couldn\'t complete database operation due to low memory
+
+ Message not sent
+
+ Some messages not sent in Messaging
+
+ %d messages in one conversation
+ %d messages in %d conversations
+
+
+ Message not downloaded
+
+ Some messages not downloaded in Messaging
+
+ %d messages in one conversation
+ %d messages in %d conversations
+
+
+ Message to %1$s not sent
+
+
+ Please make a voice call to emergency services. Your text message to
+ %1$s could not be delivered at this time.
+
+
+
+ New message
+ %d new messages
+
+
+
+ Start
+
+ Camera not available
+ Camera not available
+ Video capture not available
+
+ Can\'t save media
+ Can\'t take picture
+
+
+ Back
+
+ Archived
+
+ Delete
+
+ Archive
+
+ Unarchive
+
+ Turn off notifications
+
+ Turn on notifications
+
+ Add contact
+
+ Download
+
+ Send
+
+ Delete
+
+ Delete this message?
+ This action cannot be undone.
+ Delete
+
+
+
+ Delete this conversation?
+ Delete these conversations?
+
+
+
+ Delete
+
+ Cancel
+
+
+ To
+
+ Select multiple images
+
+ Confirm selection
+
+ +%d
+
+ Can\'t record audio. Try again.
+
+ Can\'t play audio. Try again.
+
+ Couldn\'t save audio. Try again.
+
+ Touch & hold
+
+
+ ,\u0020
+
+ \u0020\u0020
+
+ :\u0020
+
+ \u0020\u0020
+
+ Picture
+
+ Audio clip
+
+ Video
+
+ Contact card
+
+ Download
+
+ Reply via SMS
+
+ Reply via MMS
+
+ Reply
+ ...
+
+
+ %d participant
+ %d participants
+
+
+ Me
+
+
+ Contact blocked & archived
+
+ Contact unblocked & unarchived
+
+ %d archived
+
+ %d unarchived
+
+ Notifications turned off
+
+ Notifications turned on
+
+
+ All set. Touch Send again.
+
+ Messaging successfully set as the default SMS app.
+
+
+
+ Discard attachment
+ Discard attachments
+
+ Audio attachment
+ Play audio attachment
+ Pause
+
+
+ Message from %s: %s.
+
+ Failed message from %s: %s. Time: %s.
+ Message from %s: %s. Time: %s.
+ Unsent message to %s: %s. Time: %s.
+ Sending message to %s: %s. Time: %s.
+ Failed message to %s: %s. Time: %s.
+ Message to %s: %s. Time: %s.
+
+ Failed message from %s: %s. Time: %s. %s.
+ Message from %s: %s. Time: %s. %s.
+ Unsent message to %s: %s. Time: %s.
+ Sending message to %s: %s. Time: %s.
+ Failed message to %s: %s. Time: %s.
+ Message to %s: %s. Time: %s.
+
+ Failed message. Touch to retry.
+
+
+ Conversation with %s
+
+
+ Delete subject
+
+ Capture video
+ Capture a still image
+ Take picture
+ Start recording video
+ Switch to full screen camera
+ Switch between front and back camera
+ Stop recording and attach video
+ Stop recording video
+
+ Messaging photos
+
+ %d photo saved to \"%s\" album
+ %d photos saved to \"%s\" album
+
+
+ %d video saved to \"%s\" album
+ %d videos saved to \"%s\" album
+
+
+ %d attachment saved to \"%s\" album
+ %d attachments saved to \"%s\" album
+
+
+ %d attachment saved to \"Downloads\"
+ %d attachments saved to \"Downloads\"
+
+
+ %d attachment saved
+ %d attachments saved
+
+
+ Couldn\'t save %d attachment
+ Couldn\'t save %d attachments
+
+
+ Saved MMS attachment
+
+
+ Settings
+
+ Archived
+
+ Close
+
+ MMS
+
+ Advanced
+
+ Debug
+
+ Notifications
+
+ Sound
+
+ Silent
+
+ Vibrate
+ Blocked
+
+ SMS delivery reports
+ Request a delivery report for each SMS you send
+ Auto-retrieve
+ Automatically retrieve MMS messages
+
+ Roaming auto-retrieve
+ Automatically retrieve MMS when roaming
+ Group messaging
+ Use MMS to send a single message when there are multiple recipients
+
+ Default SMS app
+
+ Default SMS app
+
+ %s
+
+ Your phone number
+
+ Unknown
+
+ Outgoing message sounds
+
+ Dump SMS
+ Dump received SMS raw data into external storage file
+ Dump MMS
+ Dump received MMS raw data into external storage file
+
+ SMS dump file
+ Email SMS dump
+ Load dump file
+ Email dump file
+ Wireless alerts
+
+
+ Message options
+
+ Copy text
+
+ View details
+
+ Delete
+
+ Forward
+
+ Message details
+
+ Type:\u0020
+
+ Text message
+
+ Multimedia message
+
+ From:\u0020
+
+ To:\u0020
+
+ Sent:\u0020
+
+ Received:\u0020
+
+ Subject:\u0020
+
+ Size:\u0020
+
+ Priority:\u0020
+
+ SIM:\u0020
+
+ High
+
+ Normal
+
+ Low
+
+ SIM %s
+
+ Hidden sender address
+
+ Can\'t send message while loading attachments.
+
+ Can\'t load attachment. Try again.
+
+ Network is not ready. Try again.
+
+ Delete text
+ Switch between entering text and numbers
+ Add more participants
+ Confirm participants
+ Start new conversation
+
+ Select this item
+ Play video
+
+ People & options
+
+ Debug
+
+ People & options
+
+ General
+
+ People in this conversation
+
+ Make a call
+
+ Send message
+
+ Send message<br/><small>from %s</small>
+
+
+ Send photo
+ Send photos
+
+
+
+ Send audio
+ Send audios
+
+
+
+ Send video
+ Send videos
+
+
+
+ Send contact card
+ Send contact cards
+
+
+
+ Send attachment
+ Send attachments
+
+
+
+ No attachments selected
+ One attachment ready to send
+ %d attachments ready to send
+
+
+ Send feedback
+
+ View in Google Play Store
+
+ Version info
+
+ Version %1$s
+
+
+ Open source licenses
+
+ Notifications
+
+ Attachment limit reached
+
+ Failed to load attachment.
+
+ Add to Contacts?
+
+ Add Contact
+
+ Subject
+
+ Subject:\u0020
+
+ %s%s
+
+
+ Loading contact card
+
+ Couldn\'t load contact card
+
+ View contact card
+
+
+
+ %d contact
+ %d contacts
+
+
+ Contact cards
+
+ Birthday
+
+ Notes
+
+ Forward message
+
+ Reply
+
+
+ +1
+
+
+ +%d
+
+
+ SMS disabled
+
+
+ To send, set Messaging as the default SMS app
+
+
+ Set Messaging as the default SMS app
+
+
+ Change
+
+
+ To receive messages, set Messaging as the default SMS app
+
+
+ No preferred SIM selected for sending SMS messages
+
+
+ This app isn\'t allowed by the device owner.
+
+ OK
+
+
+ Too many participants in a conversation
+
+
+ Invalid contact
+ Invalid contacts
+
+
+ Couldn\'t load camera image
+
+
+ You:\u0020
+
+
+ %s:\u0020
+
+
+ Draft
+
+
+ Once you start a new conversation, you’ll see it listed here
+
+ Archived conversations appear here
+
+ Loading conversations…
+
+
+ Picture
+
+ Audio clip
+
+ Video
+
+ Contact card
+
+
+ MMS
+
+
+ Undo
+ Retry
+
+
+ Enter a contact name or phone number to start a new message
+
+
+ Block
+
+
+ Block %s
+
+
+ Unblock %s
+
+
+ Block %s?
+
+
+ You\'ll continue to receive messages from this number but won\'t be notified anymore. This conversation will be archived.
+
+
+ Blocked contacts
+
+
+ UNBLOCK
+
+
+ Blocked contacts
+
+
+ Choose image from document library
+
+ Sending message
+
+ Message sent
+
+ Cellular data is turned off. Check your settings.
+
+ Can\'t send messages in Airplane mode
+
+ Message could not be sent
+
+
+ Message downloaded
+
+ Cellular data is turned off. Check your settings.
+
+ Can\'t download messages in Airplane mode
+
+ Message could not be downloaded
+
+
+ Zero
+ One
+ Two
+ Three
+ Four
+ Five
+ Six
+ Seven
+ Eight
+ Nine
+
+
+ Can\'t send message with %1$s, error %2$d
+ Can\'t send message with unknown carrier, error %1$d
+
+
+ Fwd: %s
+
+
+ Message not sent: service not activated on network
+ Message not sent: invalid destination address
+ Message not sent: invalid message
+ Message not sent: unsupported content
+ Message not sent: unsupported message
+ Message not sent: too large
+
+
+ New message
+ View
+
+
+ Image
+
+
+ Could not find an appropriate application
+
+ SUB Id
+
+
+ Remove recipient
+
+
+ New message
+
+
+ Cancel
+
+
+ Edit access point
+
+ Not set
+
+ Name
+
+ APN
+
+ MMSC
+
+ MMS proxy
+
+ MMS port
+
+ MCC
+
+ MNC
+
+ APN type
+
+ Delete APN
+
+ New APN
+
+ Save
+
+ Discard
+
+ The Name field can\'t be empty.
+
+ The APN can\'t be empty.
+
+ MCC field must be 3 digits.
+
+ MNC field must be 2 or 3 digits.
+
+ Restoring default APN settings.
+
+ Reset to default
+
+ Reset default APN settings completed.
+
+ Untitled
+
+ Access Point Names
+
+ APNs
+
+ New APN
+
+ Access Point Name settings are not available for this user
+
+ Copy to clipboard?
+
+ Copy
+
+ to %s
+
+
+ General
+
+
+ Advanced
+
+
+ General settings
+
+
+ Advanced settings
+
+
+ \"%s\" SIM
+
+
+ Send individual SMS messages to all recipients. Only you will get any replies
+ Send a single MMS to all recipients
+
+
+ Unknown number
+
+
+ New message
+
+ New message.
+
+
+ SIM selector
+
+ %1$s selected, SIM selector
+
+
+ Edit subject
+
+
+ Select SIM or edit subject
+
+
+ Touch and hold to record audio
+
+
+ Start new conversation
+
+ Messaging
+
+ Messaging List
+
+ Messaging
+
+ New message
+
+ Conversation list
+
+ Loading conversations
+
+ Loading messages
+
+ View more conversations
+
+ View more messages
+
+ Conversation deleted
+
+ Conversation deleted. Touch to show a different Messaging conversation
+
+
+ Blocked
+
+ Unblocked
+ Storage space is low. Some data may be lost.
+
+
+ Select attachments
+
+
+ Confirm selection
+
+
+ %d selected
+
+
+ Please remove one or more attachments and try again.
+
+
+ You can try sending your message, but it might not be delivered unless you remove one or more attachments.
+
+
+ You can only send one video per message. Please remove additional videos and try again.
+
+
+ Messaging failed to load attachment.
+
+
+ Send anyway
+
+
+ Could not start conversation
+
+
+ %1$s (%2$s)
+
+
+ %s selected
+
diff --git a/res/values/styles.xml b/res/values/styles.xml
new file mode 100644
index 0000000..d45f2e1
--- /dev/null
+++ b/res/values/styles.xml
@@ -0,0 +1,626 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values/versions.xml b/res/values/versions.xml
new file mode 100644
index 0000000..e82b79e
--- /dev/null
+++ b/res/values/versions.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ 1
+
+
+ 1
+
diff --git a/res/xml-mcc204-mnc04/mms_config.xml b/res/xml-mcc204-mnc04/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc204-mnc04/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc208-mnc01/mms_config.xml b/res/xml-mcc208-mnc01/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc208-mnc01/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc208-mnc10/mms_config.xml b/res/xml-mcc208-mnc10/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc208-mnc10/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc208-mnc15/mms_config.xml b/res/xml-mcc208-mnc15/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc208-mnc15/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc208-mnc20/mms_config.xml b/res/xml-mcc208-mnc20/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc208-mnc20/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc208-mnc26/mms_config.xml b/res/xml-mcc208-mnc26/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc208-mnc26/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc214-mnc01/mms_config.xml b/res/xml-mcc214-mnc01/mms_config.xml
new file mode 100644
index 0000000..d6fad05
--- /dev/null
+++ b/res/xml-mcc214-mnc01/mms_config.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+ false
+
diff --git a/res/xml-mcc214-mnc03/mms_config.xml b/res/xml-mcc214-mnc03/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc214-mnc03/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc214-mnc07/mms_config.xml b/res/xml-mcc214-mnc07/mms_config.xml
new file mode 100644
index 0000000..a90a26d
--- /dev/null
+++ b/res/xml-mcc214-mnc07/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 512000
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc218-mnc05/mms_config.xml b/res/xml-mcc218-mnc05/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc218-mnc05/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc222-mnc01/mms_config.xml b/res/xml-mcc222-mnc01/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc222-mnc01/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc222-mnc08/mms_config.xml b/res/xml-mcc222-mnc08/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc222-mnc08/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc234-mnc10/mms_config.xml b/res/xml-mcc234-mnc10/mms_config.xml
new file mode 100755
index 0000000..9f89f96
--- /dev/null
+++ b/res/xml-mcc234-mnc10/mms_config.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+ 10
+
diff --git a/res/xml-mcc234-mnc11 b/res/xml-mcc234-mnc11
new file mode 120000
index 0000000..e29c9d3
--- /dev/null
+++ b/res/xml-mcc234-mnc11
@@ -0,0 +1 @@
+xml-mcc234-mnc10
\ No newline at end of file
diff --git a/res/xml-mcc234-mnc15/mms_config.xml b/res/xml-mcc234-mnc15/mms_config.xml
new file mode 100755
index 0000000..9f89f96
--- /dev/null
+++ b/res/xml-mcc234-mnc15/mms_config.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+ 10
+
diff --git a/res/xml-mcc238-mnc02/mms_config.xml b/res/xml-mcc238-mnc02/mms_config.xml
new file mode 100644
index 0000000..6a27809
--- /dev/null
+++ b/res/xml-mcc238-mnc02/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 2097152
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc240-mnc01/mms_config.xml b/res/xml-mcc240-mnc01/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc240-mnc01/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc240-mnc04/mms_config.xml b/res/xml-mcc240-mnc04/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc240-mnc04/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc240-mnc08/mms_config.xml b/res/xml-mcc240-mnc08/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc240-mnc08/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc240-mnc24/mms_config.xml b/res/xml-mcc240-mnc24/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc240-mnc24/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc242-mnc01/mms_config.xml b/res/xml-mcc242-mnc01/mms_config.xml
new file mode 100644
index 0000000..6a27809
--- /dev/null
+++ b/res/xml-mcc242-mnc01/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 2097152
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc242-mnc02/mms_config.xml b/res/xml-mcc242-mnc02/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc242-mnc02/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc262-mnc07/mms_config.xml b/res/xml-mcc262-mnc07/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc262-mnc07/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc274-mnc02/mms_config.xml b/res/xml-mcc274-mnc02/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc274-mnc02/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc274-mnc03/mms_config.xml b/res/xml-mcc274-mnc03/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc274-mnc03/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc286-mnc01/mms_config.xml b/res/xml-mcc286-mnc01/mms_config.xml
new file mode 100644
index 0000000..a90a26d
--- /dev/null
+++ b/res/xml-mcc286-mnc01/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 512000
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc286-mnc03/mms_config.xml b/res/xml-mcc286-mnc03/mms_config.xml
new file mode 100644
index 0000000..a90a26d
--- /dev/null
+++ b/res/xml-mcc286-mnc03/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 512000
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc294-mnc01/mms_config.xml b/res/xml-mcc294-mnc01/mms_config.xml
new file mode 100644
index 0000000..03ff16c
--- /dev/null
+++ b/res/xml-mcc294-mnc01/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 102400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc294-mnc02/mms_config.xml b/res/xml-mcc294-mnc02/mms_config.xml
new file mode 100644
index 0000000..51af512
--- /dev/null
+++ b/res/xml-mcc294-mnc02/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 131072
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc294-mnc03/mms_config.xml b/res/xml-mcc294-mnc03/mms_config.xml
new file mode 100644
index 0000000..208a5a2
--- /dev/null
+++ b/res/xml-mcc294-mnc03/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 256000
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc302-mnc220/mms_config.xml b/res/xml-mcc302-mnc220/mms_config.xml
new file mode 100644
index 0000000..4267322
--- /dev/null
+++ b/res/xml-mcc302-mnc220/mms_config.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 10
+
+
+ 5
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc221/mms_config.xml b/res/xml-mcc302-mnc221/mms_config.xml
new file mode 100644
index 0000000..4267322
--- /dev/null
+++ b/res/xml-mcc302-mnc221/mms_config.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 10
+
+
+ 5
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc270/mms_config.xml b/res/xml-mcc302-mnc270/mms_config.xml
new file mode 100644
index 0000000..7f92daa
--- /dev/null
+++ b/res/xml-mcc302-mnc270/mms_config.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 20
+
+
+ 6
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc290/mms_config.xml b/res/xml-mcc302-mnc290/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc302-mnc290/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc302-mnc320/mms_config.xml b/res/xml-mcc302-mnc320/mms_config.xml
new file mode 100644
index 0000000..0dc7956
--- /dev/null
+++ b/res/xml-mcc302-mnc320/mms_config.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
+
+ 20
+
+
+ 6
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc370/mms_config.xml b/res/xml-mcc302-mnc370/mms_config.xml
new file mode 100644
index 0000000..7f92daa
--- /dev/null
+++ b/res/xml-mcc302-mnc370/mms_config.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 20
+
+
+ 6
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc490/mms_config.xml b/res/xml-mcc302-mnc490/mms_config.xml
new file mode 100644
index 0000000..7f92daa
--- /dev/null
+++ b/res/xml-mcc302-mnc490/mms_config.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 20
+
+
+ 6
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc500/mms_config.xml b/res/xml-mcc302-mnc500/mms_config.xml
new file mode 100644
index 0000000..0216774
--- /dev/null
+++ b/res/xml-mcc302-mnc500/mms_config.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+ 3072000
+
+
+ 1944
+
+
+ 2592
+
+
+ 20
+
+
+ 6
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc510/mms_config.xml b/res/xml-mcc302-mnc510/mms_config.xml
new file mode 100644
index 0000000..0216774
--- /dev/null
+++ b/res/xml-mcc302-mnc510/mms_config.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+ 3072000
+
+
+ 1944
+
+
+ 2592
+
+
+ 20
+
+
+ 6
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc520/mms_config.xml b/res/xml-mcc302-mnc520/mms_config.xml
new file mode 100644
index 0000000..21b15bb
--- /dev/null
+++ b/res/xml-mcc302-mnc520/mms_config.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+ 3072000
+
+
+ 1944
+
+
+ 2592
+
+
+ 20
+
+
+ 6
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc610/mms_config.xml b/res/xml-mcc302-mnc610/mms_config.xml
new file mode 100644
index 0000000..576b5c1
--- /dev/null
+++ b/res/xml-mcc302-mnc610/mms_config.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
+
+ 20
+
+
+ 8
+
+
+ 80
+
+
+ 6245
+
+
+ false
+
+
+ false
+
diff --git a/res/xml-mcc302-mnc660/mms_config.xml b/res/xml-mcc302-mnc660/mms_config.xml
new file mode 100644
index 0000000..7f92daa
--- /dev/null
+++ b/res/xml-mcc302-mnc660/mms_config.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 20
+
+
+ 6
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc720/mms_config.xml b/res/xml-mcc302-mnc720/mms_config.xml
new file mode 100644
index 0000000..7f92daa
--- /dev/null
+++ b/res/xml-mcc302-mnc720/mms_config.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 20
+
+
+ 6
+
+
+ 80
+
diff --git a/res/xml-mcc302-mnc780/mms_config.xml b/res/xml-mcc302-mnc780/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc302-mnc780/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc310-mnc004/mms_config.xml b/res/xml-mcc310-mnc004/mms_config.xml
new file mode 100644
index 0000000..346218b
--- /dev/null
+++ b/res/xml-mcc310-mnc004/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1258291
+
+
+ Profile
+
+
+ 20
+
+
+ x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+
+ 6245
+
+
+ true
+
+
+ 2
+
+
+ 48
+
+
+ false
+
+
+ false
+
+
+ 80
+
+
+ true
+
+
+ 7
+
+
diff --git a/res/xml-mcc310-mnc005/mms_config.xml b/res/xml-mcc310-mnc005/mms_config.xml
new file mode 100644
index 0000000..346218b
--- /dev/null
+++ b/res/xml-mcc310-mnc005/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1258291
+
+
+ Profile
+
+
+ 20
+
+
+ x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+
+ 6245
+
+
+ true
+
+
+ 2
+
+
+ 48
+
+
+ false
+
+
+ false
+
+
+ 80
+
+
+ true
+
+
+ 7
+
+
diff --git a/res/xml-mcc310-mnc010/mms_config.xml b/res/xml-mcc310-mnc010/mms_config.xml
new file mode 100644
index 0000000..571bc07
--- /dev/null
+++ b/res/xml-mcc310-mnc010/mms_config.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ -1
+
+ false
+
+ false
+
+ false
+
+
+ false
+
+
diff --git a/res/xml-mcc310-mnc026/mms_config.xml b/res/xml-mcc310-mnc026/mms_config.xml
new file mode 100644
index 0000000..91481f9
--- /dev/null
+++ b/res/xml-mcc310-mnc026/mms_config.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc310-mnc040/mms_config.xml b/res/xml-mcc310-mnc040/mms_config.xml
new file mode 100644
index 0000000..9622857
--- /dev/null
+++ b/res/xml-mcc310-mnc040/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc310-mnc070/mms_config.xml b/res/xml-mcc310-mnc070/mms_config.xml
new file mode 100755
index 0000000..e9404e8
--- /dev/null
+++ b/res/xml-mcc310-mnc070/mms_config.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 10
+
diff --git a/res/xml-mcc310-mnc090/mms_config.xml b/res/xml-mcc310-mnc090/mms_config.xml
new file mode 100755
index 0000000..0c8f8de
--- /dev/null
+++ b/res/xml-mcc310-mnc090/mms_config.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc310-mnc120/mms_config.xml b/res/xml-mcc310-mnc120/mms_config.xml
new file mode 100644
index 0000000..8c1ae11
--- /dev/null
+++ b/res/xml-mcc310-mnc120/mms_config.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 40
+
+
+ true
+
+
+ 6
+
+
+ false
+
+
+ -1
+
+
+ 80
+
+
+ 6245
+
+ false
+
+ false
+
+ false
+
+
+ X-MDN: ##LINE1##|Proxy-Authorization: Basic ##NAI##
+
+
+ :pcs
+
+
+ false
+
diff --git a/res/xml-mcc310-mnc130/mms_config.xml b/res/xml-mcc310-mnc130/mms_config.xml
new file mode 100644
index 0000000..9622857
--- /dev/null
+++ b/res/xml-mcc310-mnc130/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc310-mnc150/mms_config.xml b/res/xml-mcc310-mnc150/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc310-mnc150/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc310-mnc170/mms_config.xml b/res/xml-mcc310-mnc170/mms_config.xml
new file mode 100644
index 0000000..6705cbc
--- /dev/null
+++ b/res/xml-mcc310-mnc170/mms_config.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 10
+
diff --git a/res/xml-mcc310-mnc260/mms_config.xml b/res/xml-mcc310-mnc260/mms_config.xml
new file mode 100644
index 0000000..9bf9d70
--- /dev/null
+++ b/res/xml-mcc310-mnc260/mms_config.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc310-mnc360/mms_config.xml b/res/xml-mcc310-mnc360/mms_config.xml
new file mode 100644
index 0000000..eb8da80
--- /dev/null
+++ b/res/xml-mcc310-mnc360/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1228800
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc310-mnc380/mms_config.xml b/res/xml-mcc310-mnc380/mms_config.xml
new file mode 100755
index 0000000..0ea83d1
--- /dev/null
+++ b/res/xml-mcc310-mnc380/mms_config.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 10
+
diff --git a/res/xml-mcc310-mnc410/mms_config.xml b/res/xml-mcc310-mnc410/mms_config.xml
new file mode 100755
index 0000000..4e42f3a
--- /dev/null
+++ b/res/xml-mcc310-mnc410/mms_config.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 10
+
diff --git a/res/xml-mcc310-mnc420/mms_config.xml b/res/xml-mcc310-mnc420/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc310-mnc420/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc310-mnc450/mms_config.xml b/res/xml-mcc310-mnc450/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc310-mnc450/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc310-mnc490/mms_config.xml b/res/xml-mcc310-mnc490/mms_config.xml
new file mode 100644
index 0000000..06da531
--- /dev/null
+++ b/res/xml-mcc310-mnc490/mms_config.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc310-mnc560/mms_config.xml b/res/xml-mcc310-mnc560/mms_config.xml
new file mode 100755
index 0000000..a12d640
--- /dev/null
+++ b/res/xml-mcc310-mnc560/mms_config.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 10
+
diff --git a/res/xml-mcc310-mnc580/mms_config.xml b/res/xml-mcc310-mnc580/mms_config.xml
new file mode 100644
index 0000000..eb8da80
--- /dev/null
+++ b/res/xml-mcc310-mnc580/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1228800
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc310-mnc600/mms_config.xml b/res/xml-mcc310-mnc600/mms_config.xml
new file mode 100644
index 0000000..f76c945
--- /dev/null
+++ b/res/xml-mcc310-mnc600/mms_config.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+ true
+
+
+ 8388608
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ false
+
+
+ false
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc310-mnc680/mms_config.xml b/res/xml-mcc310-mnc680/mms_config.xml
new file mode 100755
index 0000000..b42fa02
--- /dev/null
+++ b/res/xml-mcc310-mnc680/mms_config.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 10
+
diff --git a/res/xml-mcc310-mnc750/mms_config.xml b/res/xml-mcc310-mnc750/mms_config.xml
new file mode 100644
index 0000000..eb8da80
--- /dev/null
+++ b/res/xml-mcc310-mnc750/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1228800
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc310-mnc770/mms_config.xml b/res/xml-mcc310-mnc770/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc310-mnc770/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc310-mnc920/mms_config.xml b/res/xml-mcc310-mnc920/mms_config.xml
new file mode 100644
index 0000000..4319cb0
--- /dev/null
+++ b/res/xml-mcc310-mnc920/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1258291
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc310-mnc980/mms_config.xml b/res/xml-mcc310-mnc980/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc310-mnc980/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc311-mnc012/mms_config.xml b/res/xml-mcc311-mnc012/mms_config.xml
new file mode 100644
index 0000000..346218b
--- /dev/null
+++ b/res/xml-mcc311-mnc012/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1258291
+
+
+ Profile
+
+
+ 20
+
+
+ x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+
+ 6245
+
+
+ true
+
+
+ 2
+
+
+ 48
+
+
+ false
+
+
+ false
+
+
+ 80
+
+
+ true
+
+
+ 7
+
+
diff --git a/res/xml-mcc311-mnc070/mms_config.xml b/res/xml-mcc311-mnc070/mms_config.xml
new file mode 100644
index 0000000..9622857
--- /dev/null
+++ b/res/xml-mcc311-mnc070/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc311-mnc100/mms_config.xml b/res/xml-mcc311-mnc100/mms_config.xml
new file mode 100755
index 0000000..dd671f6
--- /dev/null
+++ b/res/xml-mcc311-mnc100/mms_config.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 10
+
+
+ false
+
+
+ -1
+
+
+ false
+
+
+ -1
+
+
+ 80
+
+
+ 6245
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc311-mnc180/mms_config.xml b/res/xml-mcc311-mnc180/mms_config.xml
new file mode 100644
index 0000000..891618b
--- /dev/null
+++ b/res/xml-mcc311-mnc180/mms_config.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 10
+
diff --git a/res/xml-mcc311-mnc220/mms_config.xml b/res/xml-mcc311-mnc220/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc220/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc221/mms_config.xml b/res/xml-mcc311-mnc221/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc221/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc222/mms_config.xml b/res/xml-mcc311-mnc222/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc222/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc223/mms_config.xml b/res/xml-mcc311-mnc223/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc223/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc224/mms_config.xml b/res/xml-mcc311-mnc224/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc224/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc225/mms_config.xml b/res/xml-mcc311-mnc225/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc225/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc226/mms_config.xml b/res/xml-mcc311-mnc226/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc226/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc227/mms_config.xml b/res/xml-mcc311-mnc227/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc227/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc228/mms_config.xml b/res/xml-mcc311-mnc228/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc228/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc229/mms_config.xml b/res/xml-mcc311-mnc229/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc229/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc230/mms_config.xml b/res/xml-mcc311-mnc230/mms_config.xml
new file mode 100755
index 0000000..b82f1d6
--- /dev/null
+++ b/res/xml-mcc311-mnc230/mms_config.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ false
+
+
+ -1
+
+
+ false
+
+
+ -1
+
+
+ 80
+
+
+ 6245
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ X-CS3G-MDN: 1##LINE1NOCOUNTRYCODE##
+
+
diff --git a/res/xml-mcc311-mnc340/mms_config.xml b/res/xml-mcc311-mnc340/mms_config.xml
new file mode 100644
index 0000000..eb8da80
--- /dev/null
+++ b/res/xml-mcc311-mnc340/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1228800
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc311-mnc370/mms_config.xml b/res/xml-mcc311-mnc370/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc311-mnc370/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc311-mnc410/mms_config.xml b/res/xml-mcc311-mnc410/mms_config.xml
new file mode 100644
index 0000000..9622857
--- /dev/null
+++ b/res/xml-mcc311-mnc410/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc311-mnc430/mms_config.xml b/res/xml-mcc311-mnc430/mms_config.xml
new file mode 100644
index 0000000..9622857
--- /dev/null
+++ b/res/xml-mcc311-mnc430/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc311-mnc440/mms_config.xml b/res/xml-mcc311-mnc440/mms_config.xml
new file mode 100644
index 0000000..0f26fab
--- /dev/null
+++ b/res/xml-mcc311-mnc440/mms_config.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1228800
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ false
+
+
+ false
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc311-mnc480/mms_config.xml b/res/xml-mcc311-mnc480/mms_config.xml
new file mode 100644
index 0000000..1929b6a
--- /dev/null
+++ b/res/xml-mcc311-mnc480/mms_config.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1258291
+
+
+ Profile
+
+
+ 20
+
+
+ x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+
+ 6245
+
+
+ true
+
+
+ 2
+
+
+ 48
+
+
+ false
+
+
+ false
+
+
+ 80
+
+
+ true
+
+
+ 7
+
+
diff --git a/res/xml-mcc311-mnc490/mms_config.xml b/res/xml-mcc311-mnc490/mms_config.xml
new file mode 100644
index 0000000..8c1ae11
--- /dev/null
+++ b/res/xml-mcc311-mnc490/mms_config.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 40
+
+
+ true
+
+
+ 6
+
+
+ false
+
+
+ -1
+
+
+ 80
+
+
+ 6245
+
+ false
+
+ false
+
+ false
+
+
+ X-MDN: ##LINE1##|Proxy-Authorization: Basic ##NAI##
+
+
+ :pcs
+
+
+ false
+
diff --git a/res/xml-mcc311-mnc580/mms_config.xml b/res/xml-mcc311-mnc580/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc580/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc581/mms_config.xml b/res/xml-mcc311-mnc581/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc581/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc582/mms_config.xml b/res/xml-mcc311-mnc582/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc582/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc583/mms_config.xml b/res/xml-mcc311-mnc583/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc583/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc584/mms_config.xml b/res/xml-mcc311-mnc584/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc584/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc585/mms_config.xml b/res/xml-mcc311-mnc585/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc585/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc586/mms_config.xml b/res/xml-mcc311-mnc586/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc586/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc587/mms_config.xml b/res/xml-mcc311-mnc587/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc587/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc588/mms_config.xml b/res/xml-mcc311-mnc588/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc588/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc589/mms_config.xml b/res/xml-mcc311-mnc589/mms_config.xml
new file mode 100644
index 0000000..196d4f7
--- /dev/null
+++ b/res/xml-mcc311-mnc589/mms_config.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ true
+
+
+ true
+
+
+ 1048576
+
+
+ x-wap-profile
+
+
+ 20
+
+
+ x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
+
+
+ 6245
+
+ true
+
+
+ false
+
+
+ 80
+
+
+
diff --git a/res/xml-mcc311-mnc590/mms_config.xml b/res/xml-mcc311-mnc590/mms_config.xml
new file mode 100644
index 0000000..9622857
--- /dev/null
+++ b/res/xml-mcc311-mnc590/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc311-mnc870/mms_config.xml b/res/xml-mcc311-mnc870/mms_config.xml
new file mode 100644
index 0000000..8c1ae11
--- /dev/null
+++ b/res/xml-mcc311-mnc870/mms_config.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 40
+
+
+ true
+
+
+ 6
+
+
+ false
+
+
+ -1
+
+
+ 80
+
+
+ 6245
+
+ false
+
+ false
+
+ false
+
+
+ X-MDN: ##LINE1##|Proxy-Authorization: Basic ##NAI##
+
+
+ :pcs
+
+
+ false
+
diff --git a/res/xml-mcc312-mnc160/mms_config.xml b/res/xml-mcc312-mnc160/mms_config.xml
new file mode 100644
index 0000000..9622857
--- /dev/null
+++ b/res/xml-mcc312-mnc160/mms_config.xml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 2432
+
+
+ 4320
+
+
+ 500
+
+
+ 50
+
+
+ 10
+
+
+ 5000
+
+
+ 20
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+ -1
+
+
+ 80
+
+
+ X-MDN: ##LINE1##
+
diff --git a/res/xml-mcc312-mnc530/mms_config.xml b/res/xml-mcc312-mnc530/mms_config.xml
new file mode 100755
index 0000000..7b1b093
--- /dev/null
+++ b/res/xml-mcc312-mnc530/mms_config.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+ true
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 40
+
+
+ true
+
+
+ 6
+
+
+ false
+
+
+ -1
+
+
+ 80
+
+
+ 6245
+
+ false
+
+ false
+
+ false
+
+
+ X-MDN: ##LINE1##|Proxy-Authorization: Basic ##NAI##
+
+
+ :pcs
+
+
+ false
+
diff --git a/res/xml-mcc334-mnc020/mms_config.xml b/res/xml-mcc334-mnc020/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc334-mnc020/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc418-mnc05/mms_config.xml b/res/xml-mcc418-mnc05/mms_config.xml
new file mode 100644
index 0000000..03ff16c
--- /dev/null
+++ b/res/xml-mcc418-mnc05/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 102400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc418-mnc20/mms_config.xml b/res/xml-mcc418-mnc20/mms_config.xml
new file mode 100644
index 0000000..9ef0dd8
--- /dev/null
+++ b/res/xml-mcc418-mnc20/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 153600
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc418-mnc30/mms_config.xml b/res/xml-mcc418-mnc30/mms_config.xml
new file mode 100644
index 0000000..9ef0dd8
--- /dev/null
+++ b/res/xml-mcc418-mnc30/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 153600
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc420-mnc04/mms_config.xml b/res/xml-mcc420-mnc04/mms_config.xml
new file mode 100644
index 0000000..614ba8e
--- /dev/null
+++ b/res/xml-mcc420-mnc04/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 409600
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc440-mnc10/mms_config.xml b/res/xml-mcc440-mnc10/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc440-mnc10/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc440-mnc20/mms_config.xml b/res/xml-mcc440-mnc20/mms_config.xml
new file mode 100644
index 0000000..7f383c4
--- /dev/null
+++ b/res/xml-mcc440-mnc20/mms_config.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+ true
+
+
+ 307200
+
+
+ 1944
+
+
+ 2592
+
+
+ 10000
+
+
+ 1000
+
+
+ 10
+
+
+ 5000
+
+
+ -1
+
+
+ true
+
+
+ -1
+
+
+ false
+
diff --git a/res/xml-mcc450-mnc00/mms_config.xml b/res/xml-mcc450-mnc00/mms_config.xml
new file mode 100644
index 0000000..96e5b9d
--- /dev/null
+++ b/res/xml-mcc450-mnc00/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc450-mnc02/mms_config.xml b/res/xml-mcc450-mnc02/mms_config.xml
new file mode 100644
index 0000000..2a7231c
--- /dev/null
+++ b/res/xml-mcc450-mnc02/mms_config.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+ false
+
+ false
+
+ false
+
diff --git a/res/xml-mcc450-mnc05/mms_config.xml b/res/xml-mcc450-mnc05/mms_config.xml
new file mode 100644
index 0000000..2a7231c
--- /dev/null
+++ b/res/xml-mcc450-mnc05/mms_config.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+ false
+
+ false
+
+ false
+
diff --git a/res/xml-mcc450-mnc06/mms_config.xml b/res/xml-mcc450-mnc06/mms_config.xml
new file mode 100644
index 0000000..5123984
--- /dev/null
+++ b/res/xml-mcc450-mnc06/mms_config.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+
+ 80
+
+ false
+
+ false
+
+ false
+
diff --git a/res/xml-mcc450-mnc08/mms_config.xml b/res/xml-mcc450-mnc08/mms_config.xml
new file mode 100644
index 0000000..2a7231c
--- /dev/null
+++ b/res/xml-mcc450-mnc08/mms_config.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+ 1048576
+
+
+ 1944
+
+
+ 2592
+
+ false
+
+ false
+
+ false
+
diff --git a/res/xml-mcc505-mnc01/mms_config.xml b/res/xml-mcc505-mnc01/mms_config.xml
new file mode 100644
index 0000000..6a27809
--- /dev/null
+++ b/res/xml-mcc505-mnc01/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 2097152
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc530-mnc05/mms_config.xml b/res/xml-mcc530-mnc05/mms_config.xml
new file mode 100644
index 0000000..fabcf3c
--- /dev/null
+++ b/res/xml-mcc530-mnc05/mms_config.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
+
+ false
+
diff --git a/res/xml-mcc604-mnc00/mms_config.xml b/res/xml-mcc604-mnc00/mms_config.xml
new file mode 100644
index 0000000..03ff16c
--- /dev/null
+++ b/res/xml-mcc604-mnc00/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 102400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc604-mnc02/mms_config.xml b/res/xml-mcc604-mnc02/mms_config.xml
new file mode 100644
index 0000000..03ff16c
--- /dev/null
+++ b/res/xml-mcc604-mnc02/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 102400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-mcc647-mnc10/mms_config.xml b/res/xml-mcc647-mnc10/mms_config.xml
new file mode 100644
index 0000000..486c468
--- /dev/null
+++ b/res/xml-mcc647-mnc10/mms_config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ 614400
+
+
+ 1944
+
+
+ 2592
+
diff --git a/res/xml-v21/preferences_application.xml b/res/xml-v21/preferences_application.xml
new file mode 100644
index 0000000..5d8ee4c
--- /dev/null
+++ b/res/xml-v21/preferences_application.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml-v21/preferences_per_subscription.xml b/res/xml-v21/preferences_per_subscription.xml
new file mode 100644
index 0000000..d0ae3e6
--- /dev/null
+++ b/res/xml-v21/preferences_per_subscription.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml-v23/preferences_application.xml b/res/xml-v23/preferences_application.xml
new file mode 100644
index 0000000..8fbadc4
--- /dev/null
+++ b/res/xml-v23/preferences_application.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/apn_editor.xml b/res/xml/apn_editor.xml
new file mode 100644
index 0000000..5afaeb5
--- /dev/null
+++ b/res/xml/apn_editor.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/apn_settings.xml b/res/xml/apn_settings.xml
new file mode 100644
index 0000000..61a8b5b
--- /dev/null
+++ b/res/xml/apn_settings.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/res/xml/apns.xml b/res/xml/apns.xml
new file mode 100644
index 0000000..57e1163
--- /dev/null
+++ b/res/xml/apns.xml
@@ -0,0 +1,3284 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/mms_config.xml b/res/xml/mms_config.xml
new file mode 100644
index 0000000..e5a9338
--- /dev/null
+++ b/res/xml/mms_config.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+ true
+
+
+ 307200
+
+
+ 480
+
+
+ 640
+
+
+ -1
+
+
+ true
+
+
+ -1
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/preferences_application.xml b/res/xml/preferences_application.xml
new file mode 100644
index 0000000..7a18d09
--- /dev/null
+++ b/res/xml/preferences_application.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/preferences_per_subscription.xml b/res/xml/preferences_per_subscription.xml
new file mode 100644
index 0000000..5e00086
--- /dev/null
+++ b/res/xml/preferences_per_subscription.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/widget_conversation.xml b/res/xml/widget_conversation.xml
new file mode 100644
index 0000000..d1a573b
--- /dev/null
+++ b/res/xml/widget_conversation.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/res/xml/widget_conversation_list.xml b/res/xml/widget_conversation_list.xml
new file mode 100644
index 0000000..b294acb
--- /dev/null
+++ b/res/xml/widget_conversation_list.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
diff --git a/src/android/support/v7/mms/ApnException.java b/src/android/support/v7/mms/ApnException.java
new file mode 100644
index 0000000..075d92d
--- /dev/null
+++ b/src/android/support/v7/mms/ApnException.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+/**
+ * APN exception
+ */
+public class ApnException extends Exception {
+
+ public ApnException() {
+ super();
+ }
+
+ public ApnException(String message) {
+ super(message);
+ }
+
+ public ApnException(Throwable cause) {
+ super(cause);
+ }
+
+ public ApnException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/src/android/support/v7/mms/ApnSettingsLoader.java b/src/android/support/v7/mms/ApnSettingsLoader.java
new file mode 100644
index 0000000..ff8ed12
--- /dev/null
+++ b/src/android/support/v7/mms/ApnSettingsLoader.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import java.util.List;
+
+/**
+ * Interface for loading APNs for default SMS SIM
+ */
+public interface ApnSettingsLoader {
+ /**
+ * Interface to represent the minimal information MMS lib needs from an APN
+ */
+ interface Apn {
+ /**
+ * Get the MMSC URL string
+ *
+ * @return MMSC URL
+ */
+ String getMmsc();
+
+ /**
+ * Get the MMS proxy host address
+ *
+ * @return MMS proxy
+ */
+ String getMmsProxy();
+
+ /**
+ * Get the MMS proxy host port
+ *
+ * @return the port of MMS proxy
+ */
+ int getMmsProxyPort();
+
+ /**
+ * Flag the APN as a successful APN to use
+ */
+ void setSuccess();
+ }
+
+ /**
+ * Get a list possible APN matching the subId and APN name
+ *
+ * @param apnName the APN name
+ * @return a list of possible APNs
+ */
+ List get(String apnName);
+}
diff --git a/src/android/support/v7/mms/ApnsXmlParser.java b/src/android/support/v7/mms/ApnsXmlParser.java
new file mode 100644
index 0000000..eeafcf6
--- /dev/null
+++ b/src/android/support/v7/mms/ApnsXmlParser.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.content.ContentValues;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * Parser for built-in XML resource file for APN list
+ */
+class ApnsXmlParser extends MmsXmlResourceParser {
+ interface ApnProcessor {
+ void process(ContentValues apnValues);
+ }
+
+ private static final String TAG_APNS = "apns";
+ private static final String TAG_APN = "apn";
+
+ private final ApnProcessor mApnProcessor;
+
+ private final ContentValues mValues = new ContentValues();
+
+ ApnsXmlParser(final XmlPullParser parser, final ApnProcessor apnProcessor) {
+ super(parser);
+ mApnProcessor = apnProcessor;
+ }
+
+ // Parse one APN
+ @Override
+ protected void parseRecord() throws IOException, XmlPullParserException {
+ if (TAG_APN.equals(mInputParser.getName())) {
+ mValues.clear();
+ // Collect all the attributes
+ for (int i = 0; i < mInputParser.getAttributeCount(); i++) {
+ final String key = mInputParser.getAttributeName(i);
+ if (key != null) {
+ mValues.put(key, mInputParser.getAttributeValue(i));
+ }
+ }
+ // We are done parsing one APN, call the handler
+ if (mApnProcessor != null) {
+ mApnProcessor.process(mValues);
+ }
+ }
+ // We are at the end tag
+ if (mInputParser.next() != XmlPullParser.END_TAG) {
+ throw new XmlPullParserException("Expecting end tag @" + xmlParserDebugContext());
+ }
+ }
+
+ @Override
+ protected String getRootTag() {
+ return TAG_APNS;
+ }
+}
diff --git a/src/android/support/v7/mms/CarrierConfigValuesLoader.java b/src/android/support/v7/mms/CarrierConfigValuesLoader.java
new file mode 100644
index 0000000..ad94fb2
--- /dev/null
+++ b/src/android/support/v7/mms/CarrierConfigValuesLoader.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.os.Bundle;
+
+/**
+ * Loader for carrier dependent configuration values
+ */
+public interface CarrierConfigValuesLoader {
+ /**
+ * Get the carrier config values in a bundle
+ *
+ * @param subId the associated subscription ID for the carrier configuration
+ * @return a bundle of all the values
+ */
+ Bundle get(int subId);
+
+ // Configuration keys and default values
+
+ /** Boolean value: if MMS is enabled */
+ public static final String CONFIG_ENABLED_MMS = "enabledMMS";
+ public static final boolean CONFIG_ENABLED_MMS_DEFAULT = true;
+ /**
+ * Boolean value: if transaction ID should be appended to
+ * the download URL of a single segment WAP push message
+ */
+ public static final String CONFIG_ENABLED_TRANS_ID = "enabledTransID";
+ public static final boolean CONFIG_ENABLED_TRANS_ID_DEFAULT = false;
+ /**
+ * Boolean value: if acknowledge or notify response to a download
+ * should be sent to the WAP push message's download URL
+ */
+ public static final String CONFIG_ENABLED_NOTIFY_WAP_MMSC = "enabledNotifyWapMMSC";
+ public static final boolean CONFIG_ENABLED_NOTIFY_WAP_MMSC_DEFAULT = false;
+ /**
+ * Boolean value: if phone number alias can be used
+ */
+ public static final String CONFIG_ALIAS_ENABLED = "aliasEnabled";
+ public static final boolean CONFIG_ALIAS_ENABLED_DEFAULT = false;
+ /**
+ * Boolean value: if audio is allowed in attachment
+ */
+ public static final String CONFIG_ALLOW_ATTACH_AUDIO = "allowAttachAudio";
+ public static final boolean CONFIG_ALLOW_ATTACH_AUDIO_DEFAULT = true;
+ /**
+ * Boolean value: if true, long sms messages are always sent as multi-part sms
+ * messages, with no checked limit on the number of segments. If false, then
+ * as soon as the user types a message longer than a single segment (i.e. 140 chars),
+ * the message will turn into and be sent as an mms message or separate,
+ * independent SMS messages (dependent on CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES flag).
+ * This feature exists for carriers that don't support multi-part sms.
+ */
+ public static final String CONFIG_ENABLE_MULTIPART_SMS = "enableMultipartSMS";
+ public static final boolean CONFIG_ENABLE_MULTIPART_SMS_DEFAULT = true;
+ /**
+ * Boolean value: if SMS delivery report is supported
+ */
+ public static final String CONFIG_ENABLE_SMS_DELIVERY_REPORTS = "enableSMSDeliveryReports";
+ public static final boolean CONFIG_ENABLE_SMS_DELIVERY_REPORTS_DEFAULT = true;
+ /**
+ * Boolean value: if group MMS is supported
+ */
+ public static final String CONFIG_ENABLE_GROUP_MMS = "enableGroupMms";
+ public static final boolean CONFIG_ENABLE_GROUP_MMS_DEFAULT = true;
+ /**
+ * Boolean value: if the content_disposition field of an MMS part should be parsed
+ * Check wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21. Most carriers support it except some.
+ */
+ public static final String CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION =
+ "supportMmsContentDisposition";
+ public static final boolean CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION_DEFAULT = true;
+ /**
+ * Boolean value: if the sms app should support a link to the system settings
+ * where amber alerts are configured.
+ */
+ public static final String CONFIG_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks";
+ public static final boolean CONFIG_CELL_BROADCAST_APP_LINKS_DEFAULT = true;
+ /**
+ * Boolean value: if multipart SMS should be sent as separate SMS messages
+ */
+ public static final String CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES =
+ "sendMultipartSmsAsSeparateMessages";
+ public static final boolean CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES_DEFAULT = false;
+ /**
+ * Boolean value: if MMS read report is supported
+ */
+ public static final String CONFIG_ENABLE_MMS_READ_REPORTS = "enableMMSReadReports";
+ public static final boolean CONFIG_ENABLE_MMS_READ_REPORTS_DEFAULT = false;
+ /**
+ * Boolean value: if MMS delivery report is supported
+ */
+ public static final String CONFIG_ENABLE_MMS_DELIVERY_REPORTS = "enableMMSDeliveryReports";
+ public static final boolean CONFIG_ENABLE_MMS_DELIVERY_REPORTS_DEFAULT = false;
+ /**
+ * Boolean value: if "charset" value is supported in the "Content-Type" HTTP header
+ */
+ public static final String CONFIG_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader";
+ public static final boolean CONFIG_SUPPORT_HTTP_CHARSET_HEADER_DEFAULT = false;
+ /**
+ * Integer value: maximal MMS message size in bytes
+ */
+ public static final String CONFIG_MAX_MESSAGE_SIZE = "maxMessageSize";
+ public static final int CONFIG_MAX_MESSAGE_SIZE_DEFAULT = 300 * 1024;
+ /**
+ * Integer value: maximal MMS image height in pixels
+ */
+ public static final String CONFIG_MAX_IMAGE_HEIGHT = "maxImageHeight";
+ public static final int CONFIG_MAX_IMAGE_HEIGHT_DEFAULT = 480;
+ /**
+ * Integer value: maximal MMS image width in pixels
+ */
+ public static final String CONFIG_MAX_IMAGE_WIDTH = "maxImageWidth";
+ public static final int CONFIG_MAX_IMAGE_WIDTH_DEFAULT = 640;
+ /**
+ * Integer value: limit on recipient list of an MMS message
+ */
+ public static final String CONFIG_RECIPIENT_LIMIT = "recipientLimit";
+ public static final int CONFIG_RECIPIENT_LIMIT_DEFAULT = Integer.MAX_VALUE;
+ /**
+ * Integer value: HTTP socket timeout in milliseconds for MMS
+ */
+ public static final String CONFIG_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout";
+ public static final int CONFIG_HTTP_SOCKET_TIMEOUT_DEFAULT = 60 * 1000;
+ /**
+ * Integer value: minimal number of characters of an alias
+ */
+ public static final String CONFIG_ALIAS_MIN_CHARS = "aliasMinChars";
+ public static final int CONFIG_ALIAS_MIN_CHARS_DEFAULT = 2;
+ /**
+ * Integer value: maximal number of characters of an alias
+ */
+ public static final String CONFIG_ALIAS_MAX_CHARS = "aliasMaxChars";
+ public static final int CONFIG_ALIAS_MAX_CHARS_DEFAULT = 48;
+ /**
+ * Integer value: the threshold of number of SMS parts when an multipart SMS will be
+ * converted into an MMS, e.g. if this is "4", when an multipart SMS message has 5
+ * parts, then it will be sent as MMS message instead. "-1" indicates no such conversion
+ * can happen.
+ */
+ public static final String CONFIG_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold";
+ public static final int CONFIG_SMS_TO_MMS_TEXT_THRESHOLD_DEFAULT = -1;
+ /**
+ * Integer value: the threshold of SMS length when it will be converted into an MMS.
+ * "-1" indicates no such conversion can happen.
+ */
+ public static final String CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD =
+ "smsToMmsTextLengthThreshold";
+ public static final int CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_DEFAULT = -1;
+ /**
+ * Integer value: maximal length in bytes of SMS message
+ */
+ public static final String CONFIG_MAX_MESSAGE_TEXT_SIZE = "maxMessageTextSize";
+ public static final int CONFIG_MAX_MESSAGE_TEXT_SIZE_DEFAULT = -1;
+ /**
+ * Integer value: maximum number of characters allowed for mms subject
+ */
+ public static final String CONFIG_MAX_SUBJECT_LENGTH = "maxSubjectLength";
+ public static final int CONFIG_MAX_SUBJECT_LENGTH_DEFAULT = 40;
+ /**
+ * String value: name for the user agent profile HTTP header
+ */
+ public static final String CONFIG_UA_PROF_TAG_NAME = "mUaProfTagName";
+ public static final String CONFIG_UA_PROF_TAG_NAME_DEFAULT = "x-wap-profile";
+ /**
+ * String value: additional HTTP headers for MMS HTTP requests.
+ * The format is
+ * header_1:header_value_1|header_2:header_value_2|...
+ * Each value can contain macros.
+ */
+ public static final String CONFIG_HTTP_PARAMS = "httpParams";
+ public static final String CONFIG_HTTP_PARAMS_DEFAULT = null;
+ /**
+ * String value: number of email gateway
+ */
+ public static final String CONFIG_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber";
+ public static final String CONFIG_EMAIL_GATEWAY_NUMBER_DEFAULT = null;
+ /**
+ * String value: suffix for the NAI HTTP header value, e.g. ":pcs"
+ * (NAI is used as authentication in HTTP headers for some carriers)
+ */
+ public static final String CONFIG_NAI_SUFFIX = "naiSuffix";
+ public static final String CONFIG_NAI_SUFFIX_DEFAULT = null;
+}
diff --git a/src/android/support/v7/mms/CarrierConfigXmlParser.java b/src/android/support/v7/mms/CarrierConfigXmlParser.java
new file mode 100644
index 0000000..42e7c21
--- /dev/null
+++ b/src/android/support/v7/mms/CarrierConfigXmlParser.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * XML parser for carrier config (i.e. mms_config)
+ */
+class CarrierConfigXmlParser extends MmsXmlResourceParser {
+ interface KeyValueProcessor {
+ void process(String type, String key, String value);
+ }
+
+ private static final String TAG_MMS_CONFIG = "mms_config";
+
+ private final KeyValueProcessor mKeyValueProcessor;
+
+ CarrierConfigXmlParser(final XmlPullParser parser, final KeyValueProcessor keyValueProcessor) {
+ super(parser);
+ mKeyValueProcessor = keyValueProcessor;
+ }
+
+ // Parse one key/value
+ @Override
+ protected void parseRecord() throws IOException, XmlPullParserException {
+ final String key = mInputParser.getAttributeValue(null, "name");
+ // We are at the start tag, the name of the tag is the type
+ // e.g. value
+ final String type = mInputParser.getName();
+ int nextEvent = mInputParser.next();
+ String value = null;
+ if (nextEvent == XmlPullParser.TEXT) {
+ value = mInputParser.getText();
+ nextEvent = mInputParser.next();
+ }
+ if (nextEvent != XmlPullParser.END_TAG) {
+ throw new XmlPullParserException("Expecting end tag @" + xmlParserDebugContext());
+ }
+ // We are done parsing one mms_config key/value, call the handler
+ if (mKeyValueProcessor != null) {
+ mKeyValueProcessor.process(type, key, value);
+ }
+ }
+
+ @Override
+ protected String getRootTag() {
+ return TAG_MMS_CONFIG;
+ }
+
+}
diff --git a/src/android/support/v7/mms/DefaultApnSettingsLoader.java b/src/android/support/v7/mms/DefaultApnSettingsLoader.java
new file mode 100644
index 0000000..83f2fd3
--- /dev/null
+++ b/src/android/support/v7/mms/DefaultApnSettingsLoader.java
@@ -0,0 +1,497 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.XmlResourceParser;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteException;
+import android.net.Uri;
+import android.provider.Telephony;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.android.messaging.R;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Default implementation of APN settings loader
+ */
+class DefaultApnSettingsLoader implements ApnSettingsLoader {
+ /**
+ * The base implementation of an APN
+ */
+ private static class BaseApn implements Apn {
+ /**
+ * Create a base APN from parameters
+ *
+ * @param typesIn the APN type field
+ * @param mmscIn the APN mmsc field
+ * @param proxyIn the APN mmsproxy field
+ * @param portIn the APN mmsport field
+ * @return an instance of base APN, or null if any of the parameter is invalid
+ */
+ public static BaseApn from(final String typesIn, final String mmscIn, final String proxyIn,
+ final String portIn) {
+ if (!isValidApnType(trimWithNullCheck(typesIn), APN_TYPE_MMS)) {
+ return null;
+ }
+ String mmsc = trimWithNullCheck(mmscIn);
+ if (TextUtils.isEmpty(mmsc)) {
+ return null;
+ }
+ mmsc = trimV4AddrZeros(mmsc);
+ try {
+ new URI(mmsc);
+ } catch (final URISyntaxException e) {
+ return null;
+ }
+ String mmsProxy = trimWithNullCheck(proxyIn);
+ int mmsProxyPort = 80;
+ if (!TextUtils.isEmpty(mmsProxy)) {
+ mmsProxy = trimV4AddrZeros(mmsProxy);
+ final String portString = trimWithNullCheck(portIn);
+ if (portString != null) {
+ try {
+ mmsProxyPort = Integer.parseInt(portString);
+ } catch (final NumberFormatException e) {
+ // Ignore, just use 80 to try
+ }
+ }
+ }
+ return new BaseApn(mmsc, mmsProxy, mmsProxyPort);
+ }
+
+ private final String mMmsc;
+ private final String mMmsProxy;
+ private final int mMmsProxyPort;
+
+ public BaseApn(final String mmsc, final String proxy, final int port) {
+ mMmsc = mmsc;
+ mMmsProxy = proxy;
+ mMmsProxyPort = port;
+ }
+
+ @Override
+ public String getMmsc() {
+ return mMmsc;
+ }
+
+ @Override
+ public String getMmsProxy() {
+ return mMmsProxy;
+ }
+
+ @Override
+ public int getMmsProxyPort() {
+ return mMmsProxyPort;
+ }
+
+ @Override
+ public void setSuccess() {
+ // Do nothing
+ }
+
+ public boolean equals(final BaseApn other) {
+ return TextUtils.equals(mMmsc, other.getMmsc()) &&
+ TextUtils.equals(mMmsProxy, other.getMmsProxy()) &&
+ mMmsProxyPort == other.getMmsProxyPort();
+ }
+ }
+
+ /**
+ * An in-memory implementation of an APN. These APNs are organized into an in-memory list.
+ * The order of the list can be changed by the setSuccess method.
+ */
+ private static class MemoryApn implements Apn {
+ /**
+ * Create an in-memory APN loaded from resources
+ *
+ * @param apns the in-memory APN list
+ * @param typesIn the APN type field
+ * @param mmscIn the APN mmsc field
+ * @param proxyIn the APN mmsproxy field
+ * @param portIn the APN mmsport field
+ * @return an in-memory APN instance, null if there is invalid parameter
+ */
+ public static MemoryApn from(final List apns, final String typesIn,
+ final String mmscIn, final String proxyIn, final String portIn) {
+ if (apns == null) {
+ return null;
+ }
+ final BaseApn base = BaseApn.from(typesIn, mmscIn, proxyIn, portIn);
+ if (base == null) {
+ return null;
+ }
+ for (final Apn apn : apns) {
+ if (apn instanceof MemoryApn && ((MemoryApn) apn).equals(base)) {
+ return null;
+ }
+ }
+ return new MemoryApn(apns, base);
+ }
+
+ private final List mApns;
+ private final BaseApn mBase;
+
+ public MemoryApn(final List apns, final BaseApn base) {
+ mApns = apns;
+ mBase = base;
+ }
+
+ @Override
+ public String getMmsc() {
+ return mBase.getMmsc();
+ }
+
+ @Override
+ public String getMmsProxy() {
+ return mBase.getMmsProxy();
+ }
+
+ @Override
+ public int getMmsProxyPort() {
+ return mBase.getMmsProxyPort();
+ }
+
+ @Override
+ public void setSuccess() {
+ // If this is being marked as a successful APN, move it to the top of the list so
+ // next time it will be tried first
+ boolean moved = false;
+ synchronized (mApns) {
+ if (mApns.get(0) != this) {
+ mApns.remove(this);
+ mApns.add(0, this);
+ moved = true;
+ }
+ }
+ if (moved) {
+ Log.d(MmsService.TAG, "Set APN ["
+ + "MMSC=" + getMmsc() + ", "
+ + "PROXY=" + getMmsProxy() + ", "
+ + "PORT=" + getMmsProxyPort() + "] to be first");
+ }
+ }
+
+ public boolean equals(final BaseApn other) {
+ if (other == null) {
+ return false;
+ }
+ return mBase.equals(other);
+ }
+ }
+
+ /**
+ * APN_TYPE_ALL is a special type to indicate that this APN entry can
+ * service all data connections.
+ */
+ public static final String APN_TYPE_ALL = "*";
+ /** APN type for MMS traffic */
+ public static final String APN_TYPE_MMS = "mms";
+
+ private static final String[] APN_PROJECTION = {
+ Telephony.Carriers.TYPE,
+ Telephony.Carriers.MMSC,
+ Telephony.Carriers.MMSPROXY,
+ Telephony.Carriers.MMSPORT,
+ };
+ private static final int COLUMN_TYPE = 0;
+ private static final int COLUMN_MMSC = 1;
+ private static final int COLUMN_MMSPROXY = 2;
+ private static final int COLUMN_MMSPORT = 3;
+
+ private static final String APN_MCC = "mcc";
+ private static final String APN_MNC = "mnc";
+ private static final String APN_APN = "apn";
+ private static final String APN_TYPE = "type";
+ private static final String APN_MMSC = "mmsc";
+ private static final String APN_MMSPROXY = "mmsproxy";
+ private static final String APN_MMSPORT = "mmsport";
+
+ private final Context mContext;
+
+ // Cached APNs for subIds
+ private final SparseArray> mApnsCache;
+
+ DefaultApnSettingsLoader(final Context context) {
+ mContext = context;
+ mApnsCache = new SparseArray<>();
+ }
+
+ @Override
+ public List get(final String apnName) {
+ final int subId = Utils.getEffectiveSubscriptionId(MmsManager.DEFAULT_SUB_ID);
+ List apns;
+ boolean didLoad = false;
+ synchronized (this) {
+ apns = mApnsCache.get(subId);
+ if (apns == null) {
+ apns = new ArrayList<>();
+ mApnsCache.put(subId, apns);
+ loadLocked(subId, apnName, apns);
+ didLoad = true;
+ }
+ }
+ if (didLoad) {
+ Log.i(MmsService.TAG, "Loaded " + apns.size() + " APNs");
+ }
+ return apns;
+ }
+
+ private void loadLocked(final int subId, final String apnName, final List apns) {
+ // Try system APN table first
+ loadFromSystem(subId, apnName, apns);
+ if (apns.size() > 0) {
+ return;
+ }
+ // Try loading from apns.xml in resources
+ loadFromResources(subId, apnName, apns);
+ if (apns.size() > 0) {
+ return;
+ }
+ // Try resources but without APN name
+ loadFromResources(subId, null/*apnName*/, apns);
+ }
+
+ /**
+ * Load matching APNs from telephony provider.
+ * We try different combinations of the query to work around some platform quirks.
+ *
+ * @param subId the SIM subId
+ * @param apnName the APN name to match
+ * @param apns the list used to return results
+ */
+ private void loadFromSystem(final int subId, final String apnName, final List apns) {
+ Uri uri;
+ if (Utils.supportMSim() && subId != MmsManager.DEFAULT_SUB_ID) {
+ uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "/subId/" + subId);
+ } else {
+ uri = Telephony.Carriers.CONTENT_URI;
+ }
+ Cursor cursor = null;
+ try {
+ for (; ; ) {
+ // Try different combinations of queries. Some would work on some platforms.
+ // So we query each combination until we find one returns non-empty result.
+ cursor = querySystem(uri, true/*checkCurrent*/, apnName);
+ if (cursor != null) {
+ break;
+ }
+ cursor = querySystem(uri, false/*checkCurrent*/, apnName);
+ if (cursor != null) {
+ break;
+ }
+ cursor = querySystem(uri, true/*checkCurrent*/, null/*apnName*/);
+ if (cursor != null) {
+ break;
+ }
+ cursor = querySystem(uri, false/*checkCurrent*/, null/*apnName*/);
+ break;
+ }
+ } catch (final SecurityException e) {
+ // Can't access platform APN table, return directly
+ return;
+ }
+ if (cursor == null) {
+ return;
+ }
+ try {
+ if (cursor.moveToFirst()) {
+ final Apn apn = BaseApn.from(
+ cursor.getString(COLUMN_TYPE),
+ cursor.getString(COLUMN_MMSC),
+ cursor.getString(COLUMN_MMSPROXY),
+ cursor.getString(COLUMN_MMSPORT));
+ if (apn != null) {
+ apns.add(apn);
+ }
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+
+ /**
+ * Query system APN table
+ *
+ * @param uri The APN query URL to use
+ * @param checkCurrent If add "CURRENT IS NOT NULL" condition
+ * @param apnName The optional APN name for query condition
+ * @return A cursor of the query result. If a cursor is returned as not null, it is
+ * guaranteed to contain at least one row.
+ */
+ private Cursor querySystem(final Uri uri, final boolean checkCurrent, String apnName) {
+ Log.i(MmsService.TAG, "Loading APNs from system, "
+ + "checkCurrent=" + checkCurrent + " apnName=" + apnName);
+ final StringBuilder selectionBuilder = new StringBuilder();
+ String[] selectionArgs = null;
+ if (checkCurrent) {
+ selectionBuilder.append(Telephony.Carriers.CURRENT).append(" IS NOT NULL");
+ }
+ apnName = trimWithNullCheck(apnName);
+ if (!TextUtils.isEmpty(apnName)) {
+ if (selectionBuilder.length() > 0) {
+ selectionBuilder.append(" AND ");
+ }
+ selectionBuilder.append(Telephony.Carriers.APN).append("=?");
+ selectionArgs = new String[] { apnName };
+ }
+ try {
+ final Cursor cursor = mContext.getContentResolver().query(
+ uri,
+ APN_PROJECTION,
+ selectionBuilder.toString(),
+ selectionArgs,
+ null/*sortOrder*/);
+ if (cursor == null || cursor.getCount() < 1) {
+ if (cursor != null) {
+ cursor.close();
+ }
+ Log.w(MmsService.TAG, "Query " + uri + " with apn " + apnName + " and "
+ + (checkCurrent ? "checking CURRENT" : "not checking CURRENT")
+ + " returned empty");
+ return null;
+ }
+ return cursor;
+ } catch (final SQLiteException e) {
+ Log.w(MmsService.TAG, "APN table query exception: " + e);
+ } catch (final SecurityException e) {
+ Log.w(MmsService.TAG, "Platform restricts APN table access: " + e);
+ throw e;
+ }
+ return null;
+ }
+
+ /**
+ * Find matching APNs using builtin APN list resource
+ *
+ * @param subId the SIM subId
+ * @param apnName the APN name to match
+ * @param apns the list for returning results
+ */
+ private void loadFromResources(final int subId, final String apnName, final List apns) {
+ Log.i(MmsService.TAG, "Loading APNs from resources, apnName=" + apnName);
+ final int[] mccMnc = Utils.getMccMnc(mContext, subId);
+ if (mccMnc[0] == 0 && mccMnc[0] == 0) {
+ Log.w(MmsService.TAG, "Can not get valid mcc/mnc from system");
+ return;
+ }
+ // MCC/MNC is good, loading/querying APNs from XML
+ XmlResourceParser xml = null;
+ try {
+ xml = mContext.getResources().getXml(R.xml.apns);
+ new ApnsXmlParser(xml, new ApnsXmlParser.ApnProcessor() {
+ @Override
+ public void process(ContentValues apnValues) {
+ final String mcc = trimWithNullCheck(apnValues.getAsString(APN_MCC));
+ final String mnc = trimWithNullCheck(apnValues.getAsString(APN_MNC));
+ final String apn = trimWithNullCheck(apnValues.getAsString(APN_APN));
+ try {
+ if (mccMnc[0] == Integer.parseInt(mcc) &&
+ mccMnc[1] == Integer.parseInt(mnc) &&
+ (TextUtils.isEmpty(apnName) || apnName.equalsIgnoreCase(apn))) {
+ final String type = apnValues.getAsString(APN_TYPE);
+ final String mmsc = apnValues.getAsString(APN_MMSC);
+ final String mmsproxy = apnValues.getAsString(APN_MMSPROXY);
+ final String mmsport = apnValues.getAsString(APN_MMSPORT);
+ final Apn newApn = MemoryApn.from(apns, type, mmsc, mmsproxy, mmsport);
+ if (newApn != null) {
+ apns.add(newApn);
+ }
+ }
+ } catch (final NumberFormatException e) {
+ // Ignore
+ }
+ }
+ }).parse();
+ } catch (final Resources.NotFoundException e) {
+ Log.w(MmsService.TAG, "Can not get apns.xml " + e);
+ } finally {
+ if (xml != null) {
+ xml.close();
+ }
+ }
+ }
+
+ private static String trimWithNullCheck(final String value) {
+ return value != null ? value.trim() : null;
+ }
+
+ /**
+ * Trim leading zeros from IPv4 address strings
+ * Our base libraries will interpret that as octel..
+ * Must leave non v4 addresses and host names alone.
+ * For example, 192.168.000.010 -> 192.168.0.10
+ *
+ * @param addr a string representing an ip addr
+ * @return a string propertly trimmed
+ */
+ private static String trimV4AddrZeros(final String addr) {
+ if (addr == null) {
+ return null;
+ }
+ final String[] octets = addr.split("\\.");
+ if (octets.length != 4) {
+ return addr;
+ }
+ final StringBuilder builder = new StringBuilder(16);
+ String result = null;
+ for (int i = 0; i < 4; i++) {
+ try {
+ if (octets[i].length() > 3) {
+ return addr;
+ }
+ builder.append(Integer.parseInt(octets[i]));
+ } catch (final NumberFormatException e) {
+ return addr;
+ }
+ if (i < 3) {
+ builder.append('.');
+ }
+ }
+ result = builder.toString();
+ return result;
+ }
+
+ /**
+ * Check if the APN contains the APN type we want
+ *
+ * @param types The string encodes a list of supported types
+ * @param requestType The type we want
+ * @return true if the input types string contains the requestType
+ */
+ public static boolean isValidApnType(final String types, final String requestType) {
+ // If APN type is unspecified, assume APN_TYPE_ALL.
+ if (TextUtils.isEmpty(types)) {
+ return true;
+ }
+ for (final String t : types.split(",")) {
+ if (t.equals(requestType) || t.equals(APN_TYPE_ALL)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/android/support/v7/mms/DefaultCarrierConfigValuesLoader.java b/src/android/support/v7/mms/DefaultCarrierConfigValuesLoader.java
new file mode 100644
index 0000000..1d45f8f
--- /dev/null
+++ b/src/android/support/v7/mms/DefaultCarrierConfigValuesLoader.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.XmlResourceParser;
+import android.os.Bundle;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.android.messaging.R;
+
+/**
+ * The default implementation of loader for carrier config values
+ */
+class DefaultCarrierConfigValuesLoader implements CarrierConfigValuesLoader {
+ /*
+ * Key types
+ */
+ public static final String KEY_TYPE_INT = "int";
+ public static final String KEY_TYPE_BOOL = "bool";
+ public static final String KEY_TYPE_STRING = "string";
+
+ private final Context mContext;
+
+ // Cached values for subIds
+ private final SparseArray mValuesCache;
+
+ DefaultCarrierConfigValuesLoader(final Context context) {
+ mContext = context;
+ mValuesCache = new SparseArray<>();
+ }
+
+ @Override
+ public Bundle get(int subId) {
+ subId = Utils.getEffectiveSubscriptionId(subId);
+ Bundle values;
+ boolean didLoad = false;
+ synchronized (this) {
+ values = mValuesCache.get(subId);
+ if (values == null) {
+ values = new Bundle();
+ mValuesCache.put(subId, values);
+ loadLocked(subId, values);
+ didLoad = true;
+ }
+ }
+ if (didLoad) {
+ Log.i(MmsService.TAG, "Carrier configs loaded: " + values);
+ }
+ return values;
+ }
+
+ private void loadLocked(final int subId, final Bundle values) {
+ // For K and earlier, load from resources
+ loadFromResources(subId, values);
+ if (Utils.hasMmsApi()) {
+ // For L and later, also load from system MMS service
+ loadFromSystem(subId, values);
+ }
+ }
+
+ /**
+ * Load from system, using MMS API
+ *
+ * @param subId which SIM to load for
+ * @param values the result to add to
+ */
+ private static void loadFromSystem(final int subId, final Bundle values) {
+ try {
+ final Bundle systemValues = Utils.getSmsManager(subId).getCarrierConfigValues();
+ if (systemValues != null) {
+ values.putAll(systemValues);
+ }
+ } catch (final Exception e) {
+ Log.w(MmsService.TAG, "Calling system getCarrierConfigValues exception", e);
+ }
+ }
+
+ private void loadFromResources(final int subId, final Bundle values) {
+ // Get a subscription-dependent context for loading the mms_config.xml
+ final Context subContext = Utils.getSubDepContext(mContext, subId);
+ XmlResourceParser xml = null;
+ try {
+ xml = subContext.getResources().getXml(R.xml.mms_config);
+ new CarrierConfigXmlParser(xml, new CarrierConfigXmlParser.KeyValueProcessor() {
+ @Override
+ public void process(String type, String key, String value) {
+ try {
+ if (KEY_TYPE_INT.equals(type)) {
+ values.putInt(key, Integer.parseInt(value));
+ } else if (KEY_TYPE_BOOL.equals(type)) {
+ values.putBoolean(key, Boolean.parseBoolean(value));
+ } else if (KEY_TYPE_STRING.equals(type)) {
+ values.putString(key, value);
+ }
+ } catch (final NumberFormatException e) {
+ Log.w(MmsService.TAG, "Load carrier value from resources: "
+ + "invalid " + key + "," + value + "," + type);
+ }
+ }
+ }).parse();
+ } catch (final Resources.NotFoundException e) {
+ Log.w(MmsService.TAG, "Can not get mms_config.xml");
+ } finally {
+ if (xml != null) {
+ xml.close();
+ }
+ }
+ }
+}
diff --git a/src/android/support/v7/mms/DefaultUserAgentInfoLoader.java b/src/android/support/v7/mms/DefaultUserAgentInfoLoader.java
new file mode 100644
index 0000000..e59a234
--- /dev/null
+++ b/src/android/support/v7/mms/DefaultUserAgentInfoLoader.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+/**
+ * The default implementation of loader of UA and UAProfUrl
+ */
+class DefaultUserAgentInfoLoader implements UserAgentInfoLoader {
+ // Default values to be used as user agent info
+ private static final String DEFAULT_USER_AGENT = "Android MmsLib/1.0";
+ private static final String DEFAULT_UA_PROF_URL =
+ "http://www.gstatic.com/android/sms/mms_ua_profile.xml";
+
+ private Context mContext;
+ private boolean mLoaded;
+
+ private String mUserAgent;
+ private String mUAProfUrl;
+
+ DefaultUserAgentInfoLoader(final Context context) {
+ mContext = context;
+ }
+
+ @Override
+ public String getUserAgent() {
+ load();
+ return mUserAgent;
+ }
+
+ @Override
+ public String getUAProfUrl() {
+ load();
+ return mUAProfUrl;
+ }
+
+ private void load() {
+ if (mLoaded) {
+ return;
+ }
+ boolean didLoad = false;
+ synchronized (this) {
+ if (!mLoaded) {
+ loadLocked();
+ mLoaded = true;
+ didLoad = true;
+ }
+ }
+ if (didLoad) {
+ Log.i(MmsService.TAG, "Loaded user agent info: "
+ + "UA=" + mUserAgent + ", UAProfUrl=" + mUAProfUrl);
+ }
+ }
+
+ private void loadLocked() {
+ if (Utils.hasUserAgentApi()) {
+ // load the MMS User agent and UaProfUrl from TelephonyManager APIs
+ final TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(
+ Context.TELEPHONY_SERVICE);
+ mUserAgent = telephonyManager.getMmsUserAgent();
+ mUAProfUrl = telephonyManager.getMmsUAProfUrl();
+ }
+ if (TextUtils.isEmpty(mUserAgent)) {
+ mUserAgent = DEFAULT_USER_AGENT;
+ }
+ if (TextUtils.isEmpty(mUAProfUrl)) {
+ mUAProfUrl = DEFAULT_UA_PROF_URL;
+ }
+ }
+}
diff --git a/src/android/support/v7/mms/DownloadRequest.java b/src/android/support/v7/mms/DownloadRequest.java
new file mode 100644
index 0000000..254c8ca
--- /dev/null
+++ b/src/android/support/v7/mms/DownloadRequest.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.app.PendingIntent;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.ParcelFileDescriptor;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.io.IOException;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Request to download an MMS
+ */
+class DownloadRequest extends MmsRequest {
+
+ DownloadRequest(final String locationUrl, final Uri pduUri,
+ final PendingIntent sentIntent) {
+ super(locationUrl, pduUri, sentIntent);
+ }
+
+ @Override
+ protected boolean loadRequest(final Context context, final Bundle mmsConfig) {
+ // No need to load PDU from app. Always true.
+ return true;
+ }
+
+ @Override
+ protected boolean transferResponse(Context context, Intent fillIn, byte[] response) {
+ return writePduToContentUri(context, mPduUri, response);
+ }
+
+ @Override
+ protected byte[] doHttp(Context context, MmsNetworkManager netMgr, ApnSettingsLoader.Apn apn,
+ Bundle mmsConfig, String userAgent, String uaProfUrl) throws MmsHttpException {
+ final MmsHttpClient httpClient = netMgr.getHttpClient();
+ return httpClient.execute(getHttpRequestUrl(apn), null/*pdu*/, MmsHttpClient.METHOD_GET,
+ !TextUtils.isEmpty(apn.getMmsProxy()), apn.getMmsProxy(), apn.getMmsProxyPort(),
+ mmsConfig, userAgent, uaProfUrl);
+
+ }
+
+ @Override
+ protected String getHttpRequestUrl(final ApnSettingsLoader.Apn apn) {
+ return mLocationUrl;
+ }
+
+ /**
+ * Write pdu bytes to content provider uri
+ *
+ * @param contentUri content provider uri to which bytes should be written
+ * @param pdu Bytes to write
+ * @return true if all bytes successfully written else false
+ */
+ public boolean writePduToContentUri(final Context context, final Uri contentUri,
+ final byte[] pdu) {
+ if (contentUri == null || pdu == null) {
+ return false;
+ }
+ final Callable copyDownloadedPduToOutput = new Callable() {
+ public Boolean call() {
+ ParcelFileDescriptor.AutoCloseOutputStream outStream = null;
+ try {
+ final ContentResolver cr = context.getContentResolver();
+ final ParcelFileDescriptor pduFd = cr.openFileDescriptor(contentUri, "w");
+ outStream = new ParcelFileDescriptor.AutoCloseOutputStream(pduFd);
+ outStream.write(pdu);
+ return true;
+ } catch (IOException e) {
+ Log.e(MmsService.TAG, "Writing PDU to downloader: IO exception", e);
+ return false;
+ } finally {
+ if (outStream != null) {
+ try {
+ outStream.close();
+ } catch (IOException ex) {
+ // Ignore
+ }
+ }
+ }
+ }
+ };
+ final Future pendingResult =
+ mPduTransferExecutor.submit(copyDownloadedPduToOutput);
+ try {
+ return pendingResult.get(TASK_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+ } catch (Exception e) {
+ // Typically a timeout occurred - cancel task
+ pendingResult.cancel(true);
+ }
+ return false;
+ }
+
+ public static final Parcelable.Creator CREATOR
+ = new Parcelable.Creator() {
+ public DownloadRequest createFromParcel(Parcel in) {
+ return new DownloadRequest(in);
+ }
+
+ public DownloadRequest[] newArray(int size) {
+ return new DownloadRequest[size];
+ }
+ };
+
+ private DownloadRequest(Parcel in) {
+ super(in);
+ }
+}
diff --git a/src/android/support/v7/mms/MmsHttpClient.java b/src/android/support/v7/mms/MmsHttpClient.java
new file mode 100644
index 0000000..8ca34da
--- /dev/null
+++ b/src/android/support/v7/mms/MmsHttpClient.java
@@ -0,0 +1,523 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.telephony.SmsManager;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Base64;
+import android.util.Log;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Method;
+import java.net.HttpURLConnection;
+import java.net.InetSocketAddress;
+import java.net.MalformedURLException;
+import java.net.ProtocolException;
+import java.net.Proxy;
+import java.net.URL;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * MMS HTTP client for sending and downloading MMS messages
+ */
+public class MmsHttpClient {
+ static final String METHOD_POST = "POST";
+ static final String METHOD_GET = "GET";
+
+ private static final String HEADER_CONTENT_TYPE = "Content-Type";
+ private static final String HEADER_ACCEPT = "Accept";
+ private static final String HEADER_ACCEPT_LANGUAGE = "Accept-Language";
+ private static final String HEADER_USER_AGENT = "User-Agent";
+
+ // The "Accept" header value
+ private static final String HEADER_VALUE_ACCEPT =
+ "*/*, application/vnd.wap.mms-message, application/vnd.wap.sic";
+ // The "Content-Type" header value
+ private static final String HEADER_VALUE_CONTENT_TYPE_WITH_CHARSET =
+ "application/vnd.wap.mms-message; charset=utf-8";
+ private static final String HEADER_VALUE_CONTENT_TYPE_WITHOUT_CHARSET =
+ "application/vnd.wap.mms-message";
+
+ /*
+ * Macro names
+ */
+ // The raw phone number
+ private static final String MACRO_LINE1 = "LINE1";
+ // The phone number without country code
+ private static final String MACRO_LINE1NOCOUNTRYCODE = "LINE1NOCOUNTRYCODE";
+ // NAI (Network Access Identifier)
+ private static final String MACRO_NAI = "NAI";
+
+ // The possible NAI system property name
+ private static final String NAI_PROPERTY = "persist.radio.cdma.nai";
+
+ private final Context mContext;
+ private final TelephonyManager mTelephonyManager;
+
+ /**
+ * Constructor
+ *
+ * @param context The Context object
+ */
+ MmsHttpClient(Context context) {
+ mContext = context;
+ mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ }
+
+ /**
+ * Execute an MMS HTTP request, either a POST (sending) or a GET (downloading)
+ *
+ * @param urlString The request URL, for sending it is usually the MMSC, and for downloading
+ * it is the message URL
+ * @param pdu For POST (sending) only, the PDU to send
+ * @param method HTTP method, POST for sending and GET for downloading
+ * @param isProxySet Is there a proxy for the MMSC
+ * @param proxyHost The proxy host
+ * @param proxyPort The proxy port
+ * @param mmsConfig The MMS config to use
+ * @param userAgent The user agent header value
+ * @param uaProfUrl The UA Prof URL header value
+ * @return The HTTP response body
+ * @throws MmsHttpException For any failures
+ */
+ public byte[] execute(String urlString, byte[] pdu, String method, boolean isProxySet,
+ String proxyHost, int proxyPort, Bundle mmsConfig, String userAgent, String uaProfUrl)
+ throws MmsHttpException {
+ Log.d(MmsService.TAG, "HTTP: " + method + " " + Utils.redactUrlForNonVerbose(urlString)
+ + (isProxySet ? (", proxy=" + proxyHost + ":" + proxyPort) : "")
+ + ", PDU size=" + (pdu != null ? pdu.length : 0));
+ checkMethod(method);
+ HttpURLConnection connection = null;
+ try {
+ Proxy proxy = Proxy.NO_PROXY;
+ if (isProxySet) {
+ proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
+ }
+ final URL url = new URL(urlString);
+ // Now get the connection
+ connection = (HttpURLConnection) url.openConnection(proxy);
+ connection.setDoInput(true);
+ connection.setConnectTimeout(
+ mmsConfig.getInt(CarrierConfigValuesLoader.CONFIG_HTTP_SOCKET_TIMEOUT,
+ CarrierConfigValuesLoader.CONFIG_HTTP_SOCKET_TIMEOUT_DEFAULT));
+ // ------- COMMON HEADERS ---------
+ // Header: Accept
+ connection.setRequestProperty(HEADER_ACCEPT, HEADER_VALUE_ACCEPT);
+ // Header: Accept-Language
+ connection.setRequestProperty(
+ HEADER_ACCEPT_LANGUAGE, getCurrentAcceptLanguage(Locale.getDefault()));
+ // Header: User-Agent
+ Log.i(MmsService.TAG, "HTTP: User-Agent=" + userAgent);
+ connection.setRequestProperty(HEADER_USER_AGENT, userAgent);
+ // Header: x-wap-profile
+ final String uaProfUrlTagName = mmsConfig.getString(
+ CarrierConfigValuesLoader.CONFIG_UA_PROF_TAG_NAME,
+ CarrierConfigValuesLoader.CONFIG_UA_PROF_TAG_NAME_DEFAULT);
+ if (uaProfUrl != null) {
+ Log.i(MmsService.TAG, "HTTP: UaProfUrl=" + uaProfUrl);
+ connection.setRequestProperty(uaProfUrlTagName, uaProfUrl);
+ }
+ // Add extra headers specified by mms_config.xml's httpparams
+ addExtraHeaders(connection, mmsConfig);
+ // Different stuff for GET and POST
+ if (METHOD_POST.equals(method)) {
+ if (pdu == null || pdu.length < 1) {
+ Log.e(MmsService.TAG, "HTTP: empty pdu");
+ throw new MmsHttpException(0/*statusCode*/, "Sending empty PDU");
+ }
+ connection.setDoOutput(true);
+ connection.setRequestMethod(METHOD_POST);
+ if (mmsConfig.getBoolean(
+ CarrierConfigValuesLoader.CONFIG_SUPPORT_HTTP_CHARSET_HEADER,
+ CarrierConfigValuesLoader.CONFIG_SUPPORT_HTTP_CHARSET_HEADER_DEFAULT)) {
+ connection.setRequestProperty(HEADER_CONTENT_TYPE,
+ HEADER_VALUE_CONTENT_TYPE_WITH_CHARSET);
+ } else {
+ connection.setRequestProperty(HEADER_CONTENT_TYPE,
+ HEADER_VALUE_CONTENT_TYPE_WITHOUT_CHARSET);
+ }
+ if (Log.isLoggable(MmsService.TAG, Log.VERBOSE)) {
+ logHttpHeaders(connection.getRequestProperties());
+ }
+ connection.setFixedLengthStreamingMode(pdu.length);
+ // Sending request body
+ final OutputStream out =
+ new BufferedOutputStream(connection.getOutputStream());
+ out.write(pdu);
+ out.flush();
+ out.close();
+ } else if (METHOD_GET.equals(method)) {
+ if (Log.isLoggable(MmsService.TAG, Log.VERBOSE)) {
+ logHttpHeaders(connection.getRequestProperties());
+ }
+ connection.setRequestMethod(METHOD_GET);
+ }
+ // Get response
+ final int responseCode = connection.getResponseCode();
+ final String responseMessage = connection.getResponseMessage();
+ Log.d(MmsService.TAG, "HTTP: " + responseCode + " " + responseMessage);
+ if (Log.isLoggable(MmsService.TAG, Log.VERBOSE)) {
+ logHttpHeaders(connection.getHeaderFields());
+ }
+ if (responseCode / 100 != 2) {
+ throw new MmsHttpException(responseCode, responseMessage);
+ }
+ final InputStream in = new BufferedInputStream(connection.getInputStream());
+ final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ final byte[] buf = new byte[4096];
+ int count = 0;
+ while ((count = in.read(buf)) > 0) {
+ byteOut.write(buf, 0, count);
+ }
+ in.close();
+ final byte[] responseBody = byteOut.toByteArray();
+ Log.d(MmsService.TAG, "HTTP: response size="
+ + (responseBody != null ? responseBody.length : 0));
+ return responseBody;
+ } catch (MalformedURLException e) {
+ final String redactedUrl = Utils.redactUrlForNonVerbose(urlString);
+ Log.e(MmsService.TAG, "HTTP: invalid URL " + redactedUrl, e);
+ throw new MmsHttpException(0/*statusCode*/, "Invalid URL " + redactedUrl, e);
+ } catch (ProtocolException e) {
+ final String redactedUrl = Utils.redactUrlForNonVerbose(urlString);
+ Log.e(MmsService.TAG, "HTTP: invalid URL protocol " + redactedUrl, e);
+ throw new MmsHttpException(0/*statusCode*/, "Invalid URL protocol " + redactedUrl, e);
+ } catch (IOException e) {
+ Log.e(MmsService.TAG, "HTTP: IO failure", e);
+ throw new MmsHttpException(0/*statusCode*/, e);
+ } finally {
+ if (connection != null) {
+ connection.disconnect();
+ }
+ }
+ }
+
+ private static void logHttpHeaders(Map> headers) {
+ final StringBuilder sb = new StringBuilder();
+ if (headers != null) {
+ for (Map.Entry> entry : headers.entrySet()) {
+ final String key = entry.getKey();
+ final List values = entry.getValue();
+ if (values != null) {
+ for (String value : values) {
+ sb.append(key).append('=').append(value).append('\n');
+ }
+ }
+ }
+ Log.v(MmsService.TAG, "HTTP: headers\n" + sb.toString());
+ }
+ }
+
+ private static void checkMethod(String method) throws MmsHttpException {
+ if (!METHOD_GET.equals(method) && !METHOD_POST.equals(method)) {
+ throw new MmsHttpException(0/*statusCode*/, "Invalid method " + method);
+ }
+ }
+
+ private static final String ACCEPT_LANG_FOR_US_LOCALE = "en-US";
+
+ /**
+ * Return the Accept-Language header. Use the current locale plus
+ * US if we are in a different locale than US.
+ * This code copied from the browser's WebSettings.java
+ *
+ * @return Current AcceptLanguage String.
+ */
+ public static String getCurrentAcceptLanguage(Locale locale) {
+ final StringBuilder buffer = new StringBuilder();
+ addLocaleToHttpAcceptLanguage(buffer, locale);
+
+ if (!Locale.US.equals(locale)) {
+ if (buffer.length() > 0) {
+ buffer.append(", ");
+ }
+ buffer.append(ACCEPT_LANG_FOR_US_LOCALE);
+ }
+
+ return buffer.toString();
+ }
+
+ /**
+ * Convert obsolete language codes, including Hebrew/Indonesian/Yiddish,
+ * to new standard.
+ */
+ private static String convertObsoleteLanguageCodeToNew(String langCode) {
+ if (langCode == null) {
+ return null;
+ }
+ if ("iw".equals(langCode)) {
+ // Hebrew
+ return "he";
+ } else if ("in".equals(langCode)) {
+ // Indonesian
+ return "id";
+ } else if ("ji".equals(langCode)) {
+ // Yiddish
+ return "yi";
+ }
+ return langCode;
+ }
+
+ private static void addLocaleToHttpAcceptLanguage(StringBuilder builder, Locale locale) {
+ final String language = convertObsoleteLanguageCodeToNew(locale.getLanguage());
+ if (language != null) {
+ builder.append(language);
+ final String country = locale.getCountry();
+ if (country != null) {
+ builder.append("-");
+ builder.append(country);
+ }
+ }
+ }
+
+ private static final Pattern MACRO_P = Pattern.compile("##(\\S+)##");
+ /**
+ * Resolve the macro in HTTP param value text
+ * For example, "something##LINE1##something" is resolved to "something9139531419something"
+ *
+ * @param value The HTTP param value possibly containing macros
+ * @return The HTTP param with macro resolved to real value
+ */
+ private String resolveMacro(String value, Bundle mmsConfig) {
+ if (TextUtils.isEmpty(value)) {
+ return value;
+ }
+ final Matcher matcher = MACRO_P.matcher(value);
+ int nextStart = 0;
+ StringBuilder replaced = null;
+ while (matcher.find()) {
+ if (replaced == null) {
+ replaced = new StringBuilder();
+ }
+ final int matchedStart = matcher.start();
+ if (matchedStart > nextStart) {
+ replaced.append(value.substring(nextStart, matchedStart));
+ }
+ final String macro = matcher.group(1);
+ final String macroValue = getHttpParamMacro(macro, mmsConfig);
+ if (macroValue != null) {
+ replaced.append(macroValue);
+ }
+ nextStart = matcher.end();
+ }
+ if (replaced != null && nextStart < value.length()) {
+ replaced.append(value.substring(nextStart));
+ }
+ return replaced == null ? value : replaced.toString();
+ }
+
+ /**
+ * Add extra HTTP headers from mms_config.xml's httpParams, which is a list of key/value
+ * pairs separated by "|". Each key/value pair is separated by ":". Value may contain
+ * macros like "##LINE1##" or "##NAI##" which is resolved with methods in this class
+ *
+ * @param connection The HttpURLConnection that we add headers to
+ * @param mmsConfig The MmsConfig object
+ */
+ private void addExtraHeaders(HttpURLConnection connection, Bundle mmsConfig) {
+ final String extraHttpParams = mmsConfig.getString(
+ CarrierConfigValuesLoader.CONFIG_HTTP_PARAMS);
+ if (!TextUtils.isEmpty(extraHttpParams)) {
+ // Parse the parameter list
+ String paramList[] = extraHttpParams.split("\\|");
+ for (String paramPair : paramList) {
+ String splitPair[] = paramPair.split(":", 2);
+ if (splitPair.length == 2) {
+ final String name = splitPair[0].trim();
+ final String value = resolveMacro(splitPair[1].trim(), mmsConfig);
+ if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(value)) {
+ // Add the header if the param is valid
+ connection.setRequestProperty(name, value);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Return the HTTP param macro value.
+ * Example: LINE1 returns the phone number, etc.
+ *
+ * @param macro The macro name
+ * @param mmsConfig The carrier configuration values
+ * @return The value of the defined macro
+ */
+ private String getHttpParamMacro(final String macro, final Bundle mmsConfig) {
+ if (MACRO_LINE1.equals(macro)) {
+ return getSelfNumber();
+ } else if (MACRO_LINE1NOCOUNTRYCODE.equals(macro)) {
+ return PhoneNumberHelper.getNumberNoCountryCode(
+ getSelfNumber(), getSimOrLocaleCountry());
+ } else if (MACRO_NAI.equals(macro)) {
+ return getEncodedNai(mmsConfig.getString(
+ CarrierConfigValuesLoader.CONFIG_NAI_SUFFIX,
+ CarrierConfigValuesLoader.CONFIG_NAI_SUFFIX_DEFAULT));
+ }
+ return null;
+ }
+
+ /**
+ * Get the device phone number
+ *
+ * @return the phone number text
+ */
+ private String getSelfNumber() {
+ if (Utils.supportMSim()) {
+ final SubscriptionManager subscriptionManager = SubscriptionManager.from(mContext);
+ final SubscriptionInfo info = subscriptionManager.getActiveSubscriptionInfo(
+ SmsManager.getDefaultSmsSubscriptionId());
+ if (info != null) {
+ return info.getNumber();
+ } else {
+ return null;
+ }
+ } else {
+ return mTelephonyManager.getLine1Number();
+ }
+ }
+
+ /**
+ * Get the country ISO code from SIM or system locale
+ *
+ * @return the country ISO code
+ */
+ private String getSimOrLocaleCountry() {
+ String country = null;
+ if (Utils.supportMSim()) {
+ final SubscriptionManager subscriptionManager = SubscriptionManager.from(mContext);
+ final SubscriptionInfo info = subscriptionManager.getActiveSubscriptionInfo(
+ SmsManager.getDefaultSmsSubscriptionId());
+ if (info != null) {
+ country = info.getCountryIso();
+ }
+ } else {
+ country = mTelephonyManager.getSimCountryIso();
+ }
+ if (!TextUtils.isEmpty(country)) {
+ return country.toUpperCase();
+ } else {
+ return Locale.getDefault().getCountry();
+ }
+ }
+
+ /**
+ * Get encoded NAI string to use as the HTTP header for some carriers.
+ * On L-MR1+, we call the hidden system API to get this
+ * On L-MR1-, we try to find it via system property.
+ *
+ * @param naiSuffix the suffix to append to NAI before encoding
+ * @return the Base64 encoded NAI string to use as HTTP header
+ */
+ private String getEncodedNai(final String naiSuffix) {
+ String nai;
+ if (Utils.supportMSim()) {
+ nai = getNaiBySystemApi(
+ getSlotId(Utils.getEffectiveSubscriptionId(MmsManager.DEFAULT_SUB_ID)));
+ } else {
+ nai = getNaiBySystemProperty();
+ }
+ if (!TextUtils.isEmpty(nai)) {
+ Log.i(MmsService.TAG, "NAI is not empty");
+ if (!TextUtils.isEmpty(naiSuffix)) {
+ nai = nai + naiSuffix;
+ }
+ byte[] encoded = null;
+ try {
+ encoded = Base64.encode(nai.getBytes("UTF-8"), Base64.NO_WRAP);
+ } catch (UnsupportedEncodingException e) {
+ encoded = Base64.encode(nai.getBytes(), Base64.NO_WRAP);
+ }
+ try {
+ return new String(encoded, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ return new String(encoded);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Invoke hidden SubscriptionManager.getSlotId(int)
+ *
+ * @param subId the subId
+ * @return the SIM slot ID
+ */
+ private static int getSlotId(final int subId) {
+ try {
+ final Method method = SubscriptionManager.class.getMethod("getSlotId", Integer.TYPE);
+ if (method != null) {
+ return (Integer) method.invoke(null, subId);
+ }
+ } catch (Exception e) {
+ Log.w(MmsService.TAG, "SubscriptionManager.getSlotId failed " + e);
+ }
+ return -1;
+ }
+
+ /**
+ * Get NAI using hidden TelephonyManager.getNai(int)
+ *
+ * @param slotId the SIM slot ID
+ * @return the NAI string
+ */
+ private String getNaiBySystemApi(final int slotId) {
+ try {
+ final Method method = mTelephonyManager.getClass().getMethod("getNai", Integer.TYPE);
+ if (method != null) {
+ return (String) method.invoke(mTelephonyManager, slotId);
+ }
+ } catch (Exception e) {
+ Log.w(MmsService.TAG, "TelephonyManager.getNai failed " + e);
+ }
+ return null;
+ }
+
+ /**
+ * Get NAI using hidden SystemProperties.get(String)
+ *
+ * @return the NAI string as system property
+ */
+ private static String getNaiBySystemProperty() {
+ try {
+ final Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
+ if (systemPropertiesClass != null) {
+ final Method method = systemPropertiesClass.getMethod("get", String.class);
+ if (method != null) {
+ return (String) method.invoke(null, NAI_PROPERTY);
+ }
+ }
+ } catch (Exception e) {
+ Log.w(MmsService.TAG, "SystemProperties.get failed " + e);
+ }
+ return null;
+ }
+}
diff --git a/src/android/support/v7/mms/MmsHttpException.java b/src/android/support/v7/mms/MmsHttpException.java
new file mode 100644
index 0000000..913ba55
--- /dev/null
+++ b/src/android/support/v7/mms/MmsHttpException.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+/**
+ * HTTP exception
+ */
+public class MmsHttpException extends Exception {
+ // Optional HTTP status code. 0 means ignore. Otherwise this
+ // should be a valid HTTP status code.
+ private final int mStatusCode;
+
+ public MmsHttpException(int statusCode) {
+ super();
+ mStatusCode = statusCode;
+ }
+
+ public MmsHttpException(int statusCode, String message) {
+ super(message);
+ mStatusCode = statusCode;
+ }
+
+ public MmsHttpException(int statusCode, Throwable cause) {
+ super(cause);
+ mStatusCode = statusCode;
+ }
+
+ public MmsHttpException(int statusCode, String message, Throwable cause) {
+ super(message, cause);
+ mStatusCode = statusCode;
+ }
+
+ public int getStatusCode() {
+ return mStatusCode;
+ }
+}
diff --git a/src/android/support/v7/mms/MmsManager.java b/src/android/support/v7/mms/MmsManager.java
new file mode 100644
index 0000000..f9c0a91
--- /dev/null
+++ b/src/android/support/v7/mms/MmsManager.java
@@ -0,0 +1,256 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.app.PendingIntent;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Bundle;
+import android.telephony.SmsManager;
+import android.util.SparseArray;
+
+/**
+ * The public interface of MMS library
+ */
+public class MmsManager {
+ /**
+ * Default subscription ID
+ */
+ public static final int DEFAULT_SUB_ID = -1;
+
+ // Whether to force legacy MMS sending
+ private static volatile boolean sForceLegacyMms = false;
+
+ // Cached computed overrides for carrier configuration values
+ private static SparseArray sConfigOverridesMap = new SparseArray<>();
+
+ /**
+ * Set the flag about whether to force to use legacy system APIs instead of system MMS API
+ *
+ * @param forceLegacyMms value to set
+ */
+ public static void setForceLegacyMms(boolean forceLegacyMms) {
+ sForceLegacyMms = forceLegacyMms;
+ }
+
+ /**
+ * Set the size of thread pool for request execution.
+ *
+ * Default is 4
+ *
+ * Note: if system MMS API is used, this has no effect
+ *
+ * @param size thread pool size
+ */
+ public static void setThreadPoolSize(int size) {
+ MmsService.setThreadPoolSize(size);
+ }
+
+ /**
+ * Set whether to use wake lock while sending or downloading MMS.
+ *
+ * Default value is true
+ *
+ * Note: if system MMS API is used, this has no effect
+ *
+ * @param useWakeLock true to use wake lock, false otherwise
+ */
+ public static void setUseWakeLock(final boolean useWakeLock) {
+ MmsService.setUseWakeLock(useWakeLock);
+ }
+
+ /**
+ * Set the optional carrier config values loader
+ *
+ * Note: if system MMS API is used, this is used to compute the overrides
+ * of carrier configuration values
+ *
+ * @param loader the carrier config values loader
+ */
+ public static void setCarrierConfigValuesLoader(CarrierConfigValuesLoader loader) {
+ if (loader == null) {
+ throw new IllegalArgumentException("Carrier configuration loader can not be empty");
+ }
+ synchronized (sConfigOverridesMap) {
+ MmsService.setCarrierConfigValuesLoader(loader);
+ sConfigOverridesMap.clear();
+ }
+ }
+
+ /**
+ * Set the optional APN settings loader
+ *
+ * Note: if system MMS API is used, this has no effect
+ *
+ * @param loader the APN settings loader
+ */
+ public static void setApnSettingsLoader(ApnSettingsLoader loader) {
+ if (loader == null) {
+ throw new IllegalArgumentException("APN settings loader can not be empty");
+ }
+ MmsService.setApnSettingsLoader(loader);
+ }
+
+ /**
+ * Set user agent info loader
+ *
+ * Note: if system MMS API is used, this is used to compute the overrides
+ * of carrier configuration values
+
+ * @param loader the user agent info loader
+ */
+ public static void setUserAgentInfoLoader(final UserAgentInfoLoader loader) {
+ if (loader == null) {
+ throw new IllegalArgumentException("User agent info loader can not be empty");
+ }
+ synchronized (sConfigOverridesMap) {
+ MmsService.setUserAgentInfoLoader(loader);
+ sConfigOverridesMap.clear();
+ }
+ }
+
+ /**
+ * Send MMS via platform MMS API (if platform supports and not forced to
+ * use legacy APIs) or legacy APIs
+ *
+ * @param subId the subscription ID of the SIM to use
+ * @param context the Context to use
+ * @param contentUri the content URI of the PDU to be sent
+ * @param locationUrl the optional location URL to use for sending
+ * @param sentIntent the pending intent for returning results
+ */
+ public static void sendMultimediaMessage(int subId, Context context, Uri contentUri,
+ String locationUrl, PendingIntent sentIntent) {
+ if (Utils.hasMmsApi() && !sForceLegacyMms) {
+ subId = Utils.getEffectiveSubscriptionId(subId);
+ final SmsManager smsManager = Utils.getSmsManager(subId);
+ smsManager.sendMultimediaMessage(context, contentUri, locationUrl,
+ getConfigOverrides(subId), sentIntent);
+ } else {
+ MmsService.startRequest(context, new SendRequest(locationUrl, contentUri, sentIntent));
+ }
+ }
+
+ /**
+ * Download MMS via platform MMS API (if platform supports and not forced to
+ * use legacy APIs) or legacy APIs
+ *
+ * @param subId the subscription ID of the SIM to use
+ * @param context the Context to use
+ * @param contentUri the content URI of the PDU to be sent
+ * @param locationUrl the optional location URL to use for sending
+ * @param downloadedIntent the pending intent for returning results
+ */
+ public static void downloadMultimediaMessage(int subId, Context context, String locationUrl,
+ Uri contentUri, PendingIntent downloadedIntent) {
+ if (Utils.hasMmsApi() && !sForceLegacyMms) {
+ subId = Utils.getEffectiveSubscriptionId(subId);
+ final SmsManager smsManager = Utils.getSmsManager(subId);
+ smsManager.downloadMultimediaMessage(context, locationUrl, contentUri,
+ getConfigOverrides(subId), downloadedIntent);
+ } else {
+ MmsService.startRequest(context,
+ new DownloadRequest(locationUrl, contentUri, downloadedIntent));
+ }
+ }
+
+ /**
+ * Get carrier configuration values overrides when platform MMS API is called.
+ * We only need to compute this if customized carrier config values loader or
+ * user agent info loader are set
+ *
+ * @param subId the ID of the SIM to use
+ * @return a Bundle containing the overrides
+ */
+ private static Bundle getConfigOverrides(final int subId) {
+ if (!Utils.hasMmsApi()) {
+ // If MMS API is not present, it is not necessary to compute overrides
+ return null;
+ }
+ Bundle overrides = null;
+ synchronized (sConfigOverridesMap) {
+ overrides = sConfigOverridesMap.get(subId);
+ if (overrides == null) {
+ overrides = new Bundle();
+ sConfigOverridesMap.put(subId, overrides);
+ computeOverridesLocked(subId, overrides);
+ }
+ }
+ return overrides;
+ }
+
+ /**
+ * Compute the overrides, incorporating the user agent info
+ *
+ * @param subId the subId of the SIM to use
+ * @param overrides the computed values overrides
+ */
+ private static void computeOverridesLocked(final int subId, final Bundle overrides) {
+ // Overrides not computed yet
+ final CarrierConfigValuesLoader carrierConfigValuesLoader =
+ MmsService.getCarrierConfigValuesLoader();
+ if (carrierConfigValuesLoader != null &&
+ !(carrierConfigValuesLoader instanceof DefaultCarrierConfigValuesLoader)) {
+ // Compute the overrides for carrier config values first if the config loader
+ // is not the default one.
+ final Bundle systemValues = Utils.getSmsManager(subId).getCarrierConfigValues();
+ final Bundle callerValues =
+ MmsService.getCarrierConfigValuesLoader().get(subId);
+ if (systemValues != null && callerValues != null) {
+ computeConfigDelta(systemValues, callerValues, overrides);
+ } else if (systemValues == null && callerValues != null) {
+ overrides.putAll(callerValues);
+ }
+ }
+ final UserAgentInfoLoader userAgentInfoLoader = MmsService.getUserAgentInfoLoader();
+ if (userAgentInfoLoader != null &&
+ !(userAgentInfoLoader instanceof DefaultUserAgentInfoLoader)) {
+ // Also set the user agent and ua prof url via the overrides
+ // if the user agent loader is not the default one.
+ overrides.putString(UserAgentInfoLoader.CONFIG_USER_AGENT,
+ userAgentInfoLoader.getUserAgent());
+ overrides.putString(UserAgentInfoLoader.CONFIG_UA_PROF_URL,
+ userAgentInfoLoader.getUAProfUrl());
+ }
+ }
+
+ /**
+ * Compute the delta between two sets of carrier configuration values: system and caller
+ *
+ * @param systemValues the system config values
+ * @param callerValues the caller's config values
+ * @param delta the delta of values (caller - system), using caller value to override system's
+ */
+ private static void computeConfigDelta(final Bundle systemValues, final Bundle callerValues,
+ final Bundle delta) {
+ for (final String key : callerValues.keySet()) {
+ final Object callerValue = callerValues.get(key);
+ final Object systemValue = systemValues.get(key);
+ if ((callerValue != null && systemValue != null && !callerValue.equals(systemValue)) ||
+ (callerValue != null && systemValue == null) ||
+ (callerValue == null && systemValue != null)) {
+ if (callerValue == null || callerValue instanceof String) {
+ delta.putString(key, (String) callerValue);
+ } else if (callerValue instanceof Integer) {
+ delta.putInt(key, (Integer) callerValue);
+ } else if (callerValue instanceof Boolean) {
+ delta.putBoolean(key, (Boolean) callerValue);
+ }
+ }
+ }
+ }
+}
diff --git a/src/android/support/v7/mms/MmsNetworkException.java b/src/android/support/v7/mms/MmsNetworkException.java
new file mode 100644
index 0000000..776d8ee
--- /dev/null
+++ b/src/android/support/v7/mms/MmsNetworkException.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+/**
+ * MMS network exception
+ */
+class MmsNetworkException extends Exception {
+
+ public MmsNetworkException() {
+ super();
+ }
+
+ public MmsNetworkException(String message) {
+ super(message);
+ }
+
+ public MmsNetworkException(Throwable cause) {
+ super(cause);
+ }
+
+ public MmsNetworkException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/src/android/support/v7/mms/MmsNetworkManager.java b/src/android/support/v7/mms/MmsNetworkManager.java
new file mode 100644
index 0000000..0630293
--- /dev/null
+++ b/src/android/support/v7/mms/MmsNetworkManager.java
@@ -0,0 +1,382 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.Build;
+import android.os.SystemClock;
+import android.util.Log;
+
+import java.lang.reflect.Method;
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * Class manages MMS network connectivity using legacy platform APIs
+ * (deprecated since Android L) on pre-L devices (or when forced to
+ * be used on L and later)
+ */
+class MmsNetworkManager {
+ // Hidden platform constants
+ private static final String FEATURE_ENABLE_MMS = "enableMMS";
+ private static final String REASON_VOICE_CALL_ENDED = "2GVoiceCallEnded";
+ private static final int APN_ALREADY_ACTIVE = 0;
+ private static final int APN_REQUEST_STARTED = 1;
+ private static final int APN_TYPE_NOT_AVAILABLE = 2;
+ private static final int APN_REQUEST_FAILED = 3;
+ private static final int APN_ALREADY_INACTIVE = 4;
+ // A map from platform APN constant to text string
+ private static final String[] APN_RESULT_STRING = new String[]{
+ "already active",
+ "request started",
+ "type not available",
+ "request failed",
+ "already inactive",
+ "unknown",
+ };
+
+ private static final long NETWORK_ACQUIRE_WAIT_INTERVAL_MS = 15000;
+ private static final long DEFAULT_NETWORK_ACQUIRE_TIMEOUT_MS = 180000;
+ private static final String MMS_NETWORK_EXTENSION_TIMER = "mms_network_extension_timer";
+ private static final long MMS_NETWORK_EXTENSION_TIMER_WAIT_MS = 30000;
+
+ private static volatile long sNetworkAcquireTimeoutMs = DEFAULT_NETWORK_ACQUIRE_TIMEOUT_MS;
+
+ /**
+ * Set the network acquire timeout
+ *
+ * @param timeoutMs timeout in millisecond
+ */
+ static void setNetworkAcquireTimeout(final long timeoutMs) {
+ sNetworkAcquireTimeoutMs = timeoutMs;
+ }
+
+ private final Context mContext;
+ private final ConnectivityManager mConnectivityManager;
+
+ // If the connectivity intent receiver is registered
+ private boolean mReceiverRegistered;
+ // Count of requests that are using the MMS network
+ private int mUseCount;
+ // Count of requests that are waiting for connectivity (i.e. in acquireNetwork wait loop)
+ private int mWaitCount;
+ // Timer to extend the network connectivity
+ private Timer mExtensionTimer;
+
+ private final MmsHttpClient mHttpClient;
+
+ private final IntentFilter mConnectivityIntentFilter;
+ private final BroadcastReceiver mConnectivityChangeReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(final Context context, final Intent intent) {
+ if (!ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
+ return;
+ }
+ final int networkType = getConnectivityChangeNetworkType(intent);
+ if (networkType != ConnectivityManager.TYPE_MOBILE_MMS) {
+ return;
+ }
+ onMmsConnectivityChange(context, intent);
+ }
+ };
+
+ MmsNetworkManager(final Context context) {
+ mContext = context;
+ mConnectivityManager = (ConnectivityManager) mContext.getSystemService(
+ Context.CONNECTIVITY_SERVICE);
+ mHttpClient = new MmsHttpClient(mContext);
+ mConnectivityIntentFilter = new IntentFilter();
+ mConnectivityIntentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+ mUseCount = 0;
+ mWaitCount = 0;
+ }
+
+ ConnectivityManager getConnectivityManager() {
+ return mConnectivityManager;
+ }
+
+ MmsHttpClient getHttpClient() {
+ return mHttpClient;
+ }
+
+ /**
+ * Synchronously acquire MMS network connectivity
+ *
+ * @throws MmsNetworkException If failed permanently or timed out
+ */
+ void acquireNetwork() throws MmsNetworkException {
+ Log.i(MmsService.TAG, "Acquire MMS network");
+ synchronized (this) {
+ try {
+ mUseCount++;
+ mWaitCount++;
+ if (mWaitCount == 1) {
+ // Register the receiver for the first waiting request
+ registerConnectivityChangeReceiverLocked();
+ }
+ long waitMs = sNetworkAcquireTimeoutMs;
+ final long beginMs = SystemClock.elapsedRealtime();
+ do {
+ if (!isMobileDataEnabled()) {
+ // Fast fail if mobile data is not enabled
+ throw new MmsNetworkException("Mobile data is disabled");
+ }
+ // Always try to extend and check the MMS network connectivity
+ // before we start waiting to make sure we don't miss the change
+ // of MMS connectivity. As one example, some devices fail to send
+ // connectivity change intent. So this would make sure we catch
+ // the state change.
+ if (extendMmsConnectivityLocked()) {
+ // Connected
+ return;
+ }
+ try {
+ wait(Math.min(waitMs, NETWORK_ACQUIRE_WAIT_INTERVAL_MS));
+ } catch (final InterruptedException e) {
+ Log.w(MmsService.TAG, "Unexpected exception", e);
+ }
+ // Calculate the remaining time to wait
+ waitMs = sNetworkAcquireTimeoutMs - (SystemClock.elapsedRealtime() - beginMs);
+ } while (waitMs > 0);
+ // Last check
+ if (extendMmsConnectivityLocked()) {
+ return;
+ } else {
+ // Reaching here means timed out.
+ throw new MmsNetworkException("Acquiring MMS network timed out");
+ }
+ } finally {
+ mWaitCount--;
+ if (mWaitCount == 0) {
+ // Receiver is used to listen to connectivity change and unblock
+ // the waiting requests. If nobody's waiting on change, there is
+ // no need for the receiver. The auto extension timer will try
+ // to maintain the connectivity periodically.
+ unregisterConnectivityChangeReceiverLocked();
+ }
+ }
+ }
+ }
+
+ /**
+ * Release MMS network connectivity. This is ref counted. So it only disconnect
+ * when the ref count is 0.
+ */
+ void releaseNetwork() {
+ Log.i(MmsService.TAG, "release MMS network");
+ synchronized (this) {
+ mUseCount--;
+ if (mUseCount == 0) {
+ stopNetworkExtensionTimerLocked();
+ endMmsConnectivity();
+ }
+ }
+ }
+
+ String getApnName() {
+ String apnName = null;
+ final NetworkInfo mmsNetworkInfo = mConnectivityManager.getNetworkInfo(
+ ConnectivityManager.TYPE_MOBILE_MMS);
+ if (mmsNetworkInfo != null) {
+ apnName = mmsNetworkInfo.getExtraInfo();
+ }
+ return apnName;
+ }
+
+ // Process mobile MMS connectivity change, waking up the waiting request thread
+ // in certain conditions:
+ // - Successfully connected
+ // - Failed permanently
+ // - Required another kickoff
+ // We don't initiate connection here but just notifyAll so the waiting request
+ // would wake up and retry connection before next wait.
+ private void onMmsConnectivityChange(final Context context, final Intent intent) {
+ if (mUseCount < 1) {
+ return;
+ }
+ final NetworkInfo mmsNetworkInfo =
+ mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS);
+ // Check availability of the mobile network.
+ if (mmsNetworkInfo != null) {
+ if (REASON_VOICE_CALL_ENDED.equals(mmsNetworkInfo.getReason())) {
+ // This is a very specific fix to handle the case where the phone receives an
+ // incoming call during the time we're trying to setup the mms connection.
+ // When the call ends, restart the process of mms connectivity.
+ // Once the waiting request is unblocked, before the next wait, we would start
+ // MMS network again.
+ unblockWait();
+ } else {
+ final NetworkInfo.State state = mmsNetworkInfo.getState();
+ if (state == NetworkInfo.State.CONNECTED ||
+ (state == NetworkInfo.State.DISCONNECTED && !isMobileDataEnabled())) {
+ // Unblock the waiting request when we either connected
+ // OR
+ // disconnected due to mobile data disabled therefore needs to fast fail
+ // (on some devices if mobile data disabled and starting MMS would cause
+ // an immediate state change to disconnected, so causing a tight loop of
+ // trying and failing)
+ // Once the waiting request is unblocked, before the next wait, we would
+ // check mobile data and start MMS network again. So we should catch
+ // both the success and the fast failure.
+ unblockWait();
+ }
+ }
+ }
+ }
+
+ private void unblockWait() {
+ synchronized (this) {
+ notifyAll();
+ }
+ }
+
+ private void startNetworkExtensionTimerLocked() {
+ if (mExtensionTimer == null) {
+ mExtensionTimer = new Timer(MMS_NETWORK_EXTENSION_TIMER, true/*daemon*/);
+ mExtensionTimer.schedule(
+ new TimerTask() {
+ @Override
+ public void run() {
+ synchronized (this) {
+ if (mUseCount > 0) {
+ try {
+ // Try extending the connectivity
+ extendMmsConnectivityLocked();
+ } catch (final MmsNetworkException e) {
+ // Ignore the exception
+ }
+ }
+ }
+ }
+ },
+ MMS_NETWORK_EXTENSION_TIMER_WAIT_MS);
+ }
+ }
+
+ private void stopNetworkExtensionTimerLocked() {
+ if (mExtensionTimer != null) {
+ mExtensionTimer.cancel();
+ mExtensionTimer = null;
+ }
+ }
+
+ private boolean extendMmsConnectivityLocked() throws MmsNetworkException {
+ final int result = startMmsConnectivity();
+ if (result == APN_ALREADY_ACTIVE) {
+ // Already active
+ startNetworkExtensionTimerLocked();
+ return true;
+ } else if (result != APN_REQUEST_STARTED) {
+ stopNetworkExtensionTimerLocked();
+ throw new MmsNetworkException("Cannot acquire MMS network: " +
+ result + " - " + getMmsConnectivityResultString(result));
+ }
+ return false;
+ }
+
+ private int startMmsConnectivity() {
+ Log.i(MmsService.TAG, "Start MMS connectivity");
+ try {
+ final Method method = mConnectivityManager.getClass().getMethod(
+ "startUsingNetworkFeature", Integer.TYPE, String.class);
+ if (method != null) {
+ return (Integer) method.invoke(
+ mConnectivityManager, ConnectivityManager.TYPE_MOBILE, FEATURE_ENABLE_MMS);
+ }
+ } catch (final Exception e) {
+ Log.w(MmsService.TAG, "ConnectivityManager.startUsingNetworkFeature failed " + e);
+ }
+ return APN_REQUEST_FAILED;
+ }
+
+ private void endMmsConnectivity() {
+ Log.i(MmsService.TAG, "End MMS connectivity");
+ try {
+ final Method method = mConnectivityManager.getClass().getMethod(
+ "stopUsingNetworkFeature", Integer.TYPE, String.class);
+ if (method != null) {
+ method.invoke(
+ mConnectivityManager, ConnectivityManager.TYPE_MOBILE, FEATURE_ENABLE_MMS);
+ }
+ } catch (final Exception e) {
+ Log.w(MmsService.TAG, "ConnectivityManager.stopUsingNetworkFeature failed " + e);
+ }
+ }
+
+ private void registerConnectivityChangeReceiverLocked() {
+ if (!mReceiverRegistered) {
+ mContext.registerReceiver(mConnectivityChangeReceiver, mConnectivityIntentFilter);
+ mReceiverRegistered = true;
+ }
+ }
+
+ private void unregisterConnectivityChangeReceiverLocked() {
+ if (mReceiverRegistered) {
+ mContext.unregisterReceiver(mConnectivityChangeReceiver);
+ mReceiverRegistered = false;
+ }
+ }
+
+ /**
+ * The absence of a connection type.
+ */
+ private static final int TYPE_NONE = -1;
+
+ /**
+ * Get the network type of the connectivity change
+ *
+ * @param intent the broadcast intent of connectivity change
+ * @return The change's network type
+ */
+ private static int getConnectivityChangeNetworkType(final Intent intent) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ return intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE, TYPE_NONE);
+ } else {
+ final NetworkInfo info = intent.getParcelableExtra(
+ ConnectivityManager.EXTRA_NETWORK_INFO);
+ if (info != null) {
+ return info.getType();
+ }
+ }
+ return TYPE_NONE;
+ }
+
+ private static String getMmsConnectivityResultString(int result) {
+ if (result < 0 || result >= APN_RESULT_STRING.length) {
+ result = APN_RESULT_STRING.length - 1;
+ }
+ return APN_RESULT_STRING[result];
+ }
+
+ private boolean isMobileDataEnabled() {
+ try {
+ final Class cmClass = mConnectivityManager.getClass();
+ final Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
+ method.setAccessible(true); // Make the method callable
+ // get the setting for "mobile data"
+ return (Boolean) method.invoke(mConnectivityManager);
+ } catch (final Exception e) {
+ Log.w(MmsService.TAG, "TelephonyManager.getMobileDataEnabled failed", e);
+ }
+ return false;
+ }
+}
diff --git a/src/android/support/v7/mms/MmsRequest.java b/src/android/support/v7/mms/MmsRequest.java
new file mode 100644
index 0000000..edf3606
--- /dev/null
+++ b/src/android/support/v7/mms/MmsRequest.java
@@ -0,0 +1,391 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.app.Activity;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.v7.mms.pdu.GenericPdu;
+import android.support.v7.mms.pdu.PduHeaders;
+import android.support.v7.mms.pdu.PduParser;
+import android.support.v7.mms.pdu.SendConf;
+import android.telephony.SmsManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.lang.reflect.Method;
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * MMS request base class. This handles the execution of any MMS request.
+ */
+abstract class MmsRequest implements Parcelable {
+ /**
+ * Prepare to make the HTTP request - will download message for sending
+ *
+ * @param context the Context
+ * @param mmsConfig carrier config values to use
+ * @return true if loading request PDU from calling app succeeds, false otherwise
+ */
+ protected abstract boolean loadRequest(Context context, Bundle mmsConfig);
+
+ /**
+ * Transfer the received response to the caller
+ *
+ * @param context the Context
+ * @param fillIn the content of pending intent to be returned
+ * @param response the pdu to transfer
+ * @return true if transferring response PDU to calling app succeeds, false otherwise
+ */
+ protected abstract boolean transferResponse(Context context, Intent fillIn, byte[] response);
+
+ /**
+ * Making the HTTP request to MMSC
+ *
+ * @param context The context
+ * @param netMgr The current {@link MmsNetworkManager}
+ * @param apn The APN
+ * @param mmsConfig The carrier configuration values to use
+ * @param userAgent The User-Agent header value
+ * @param uaProfUrl The UA Prof URL header value
+ * @return The HTTP response data
+ * @throws MmsHttpException If any network error happens
+ */
+ protected abstract byte[] doHttp(Context context, MmsNetworkManager netMgr,
+ ApnSettingsLoader.Apn apn, Bundle mmsConfig, String userAgent, String uaProfUrl)
+ throws MmsHttpException;
+
+ /**
+ * Get the HTTP request URL for this MMS request
+ *
+ * @param apn The APN to use
+ * @return The HTTP request URL in text
+ */
+ protected abstract String getHttpRequestUrl(ApnSettingsLoader.Apn apn);
+
+ // Maximum time to spend waiting to read data from a content provider before failing with error.
+ protected static final int TASK_TIMEOUT_MS = 30 * 1000;
+
+ protected final String mLocationUrl;
+ protected final Uri mPduUri;
+ protected final PendingIntent mPendingIntent;
+ // Thread pool for transferring PDU with MMS apps
+ protected final ExecutorService mPduTransferExecutor = Executors.newCachedThreadPool();
+
+ // Whether this request should acquire wake lock
+ private boolean mUseWakeLock;
+
+ protected MmsRequest(final String locationUrl, final Uri pduUri,
+ final PendingIntent pendingIntent) {
+ mLocationUrl = locationUrl;
+ mPduUri = pduUri;
+ mPendingIntent = pendingIntent;
+ mUseWakeLock = true;
+ }
+
+ void setUseWakeLock(final boolean useWakeLock) {
+ mUseWakeLock = useWakeLock;
+ }
+
+ boolean getUseWakeLock() {
+ return mUseWakeLock;
+ }
+
+ /**
+ * Run the MMS request.
+ *
+ * @param context the context to use
+ * @param networkManager the MmsNetworkManager to use to setup MMS network
+ * @param apnSettingsLoader the APN loader
+ * @param carrierConfigValuesLoader the carrier config loader
+ * @param userAgentInfoLoader the user agent info loader
+ */
+ void execute(final Context context, final MmsNetworkManager networkManager,
+ final ApnSettingsLoader apnSettingsLoader,
+ final CarrierConfigValuesLoader carrierConfigValuesLoader,
+ final UserAgentInfoLoader userAgentInfoLoader) {
+ Log.i(MmsService.TAG, "Execute " + this.getClass().getSimpleName());
+ int result = SmsManager.MMS_ERROR_UNSPECIFIED;
+ int httpStatusCode = 0;
+ byte[] response = null;
+ final Bundle mmsConfig = carrierConfigValuesLoader.get(MmsManager.DEFAULT_SUB_ID);
+ if (mmsConfig == null) {
+ Log.e(MmsService.TAG, "Failed to load carrier configuration values");
+ result = SmsManager.MMS_ERROR_CONFIGURATION_ERROR;
+ } else if (!loadRequest(context, mmsConfig)) {
+ Log.e(MmsService.TAG, "Failed to load PDU");
+ result = SmsManager.MMS_ERROR_IO_ERROR;
+ } else {
+ // Everything's OK. Now execute the request.
+ try {
+ // Acquire the MMS network
+ networkManager.acquireNetwork();
+ // Load the potential APNs. In most cases there should be only one APN available.
+ // On some devices on which we can't obtain APN from system, we look up our own
+ // APN list. Since we don't have exact information, we may get a list of potential
+ // APNs to try. Whenever we found a successful APN, we signal it and return.
+ final String apnName = networkManager.getApnName();
+ final List apns = apnSettingsLoader.get(apnName);
+ if (apns.size() < 1) {
+ throw new ApnException("No valid APN");
+ } else {
+ Log.d(MmsService.TAG, "Trying " + apns.size() + " APNs");
+ }
+ final String userAgent = userAgentInfoLoader.getUserAgent();
+ final String uaProfUrl = userAgentInfoLoader.getUAProfUrl();
+ MmsHttpException lastException = null;
+ for (ApnSettingsLoader.Apn apn : apns) {
+ Log.i(MmsService.TAG, "Using APN ["
+ + "MMSC=" + apn.getMmsc() + ", "
+ + "PROXY=" + apn.getMmsProxy() + ", "
+ + "PORT=" + apn.getMmsProxyPort() + "]");
+ try {
+ final String url = getHttpRequestUrl(apn);
+ // Request a global route for the host to connect
+ requestRoute(networkManager.getConnectivityManager(), apn, url);
+ // Perform the HTTP request
+ response = doHttp(
+ context, networkManager, apn, mmsConfig, userAgent, uaProfUrl);
+ // Additional check of whether this is a success
+ if (isWrongApnResponse(response, mmsConfig)) {
+ throw new MmsHttpException(0/*statusCode*/, "Invalid sending address");
+ }
+ // Notify APN loader this is a valid APN
+ apn.setSuccess();
+ result = Activity.RESULT_OK;
+ break;
+ } catch (MmsHttpException e) {
+ Log.w(MmsService.TAG, "HTTP or network failure", e);
+ lastException = e;
+ }
+ }
+ if (lastException != null) {
+ throw lastException;
+ }
+ } catch (ApnException e) {
+ Log.e(MmsService.TAG, "MmsRequest: APN failure", e);
+ result = SmsManager.MMS_ERROR_INVALID_APN;
+ } catch (MmsNetworkException e) {
+ Log.e(MmsService.TAG, "MmsRequest: MMS network acquiring failure", e);
+ result = SmsManager.MMS_ERROR_UNABLE_CONNECT_MMS;
+ } catch (MmsHttpException e) {
+ Log.e(MmsService.TAG, "MmsRequest: HTTP or network I/O failure", e);
+ result = SmsManager.MMS_ERROR_HTTP_FAILURE;
+ httpStatusCode = e.getStatusCode();
+ } catch (Exception e) {
+ Log.e(MmsService.TAG, "MmsRequest: unexpected failure", e);
+ result = SmsManager.MMS_ERROR_UNSPECIFIED;
+ } finally {
+ // Release MMS network
+ networkManager.releaseNetwork();
+ }
+ }
+ // Process result and send back via PendingIntent
+ returnResult(context, result, response, httpStatusCode);
+ }
+
+ /**
+ * Check if the response indicates a failure when we send to wrong APN.
+ * Sometimes even if you send to the wrong APN, a response in valid PDU format can still
+ * be sent back but with an error status. Check one specific case here.
+ *
+ * TODO: maybe there are other possibilities.
+ *
+ * @param response the response data
+ * @param mmsConfig the carrier configuration values to use
+ * @return false if we find an invalid response case, otherwise true
+ */
+ static boolean isWrongApnResponse(final byte[] response, final Bundle mmsConfig) {
+ if (response != null && response.length > 0) {
+ try {
+ final GenericPdu pdu = new PduParser(
+ response,
+ mmsConfig.getBoolean(
+ CarrierConfigValuesLoader
+ .CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION,
+ CarrierConfigValuesLoader
+ .CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION_DEFAULT))
+ .parse();
+ if (pdu != null && pdu instanceof SendConf) {
+ final SendConf sendConf = (SendConf) pdu;
+ final int responseStatus = sendConf.getResponseStatus();
+ return responseStatus ==
+ PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_SENDING_ADDRESS_UNRESOLVED ||
+ responseStatus ==
+ PduHeaders.RESPONSE_STATUS_ERROR_SENDING_ADDRESS_UNRESOLVED;
+ }
+ } catch (RuntimeException e) {
+ Log.w(MmsService.TAG, "Parsing response failed", e);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Return the result back via pending intent
+ *
+ * @param context The context
+ * @param result The result code of execution
+ * @param response The response body
+ * @param httpStatusCode The optional http status code in case of http failure
+ */
+ void returnResult(final Context context, int result, final byte[] response,
+ final int httpStatusCode) {
+ if (mPendingIntent == null) {
+ // Result not needed
+ return;
+ }
+ // Extra information to send back with the pending intent
+ final Intent fillIn = new Intent();
+ if (response != null) {
+ if (!transferResponse(context, fillIn, response)) {
+ // Failed to send PDU data back to caller
+ result = SmsManager.MMS_ERROR_IO_ERROR;
+ }
+ }
+ if (result == SmsManager.MMS_ERROR_HTTP_FAILURE && httpStatusCode != 0) {
+ // For HTTP failure, fill in the status code for more information
+ fillIn.putExtra(SmsManager.EXTRA_MMS_HTTP_STATUS, httpStatusCode);
+ }
+ try {
+ mPendingIntent.send(context, result, fillIn);
+ } catch (PendingIntent.CanceledException e) {
+ Log.e(MmsService.TAG, "Sending pending intent canceled", e);
+ }
+ }
+
+ /**
+ * Request the route to the APN (either proxy host or the MMSC host)
+ *
+ * @param connectivityManager the ConnectivityManager to use
+ * @param apn the current APN
+ * @param url the URL to connect to
+ * @throws MmsHttpException for unknown host or route failure
+ */
+ private static void requestRoute(final ConnectivityManager connectivityManager,
+ final ApnSettingsLoader.Apn apn, final String url) throws MmsHttpException {
+ String host = apn.getMmsProxy();
+ if (TextUtils.isEmpty(host)) {
+ final Uri uri = Uri.parse(url);
+ host = uri.getHost();
+ }
+ boolean success = false;
+ // Request route to all resolved host addresses
+ try {
+ for (final InetAddress addr : InetAddress.getAllByName(host)) {
+ final boolean requested = requestRouteToHostAddress(connectivityManager, addr);
+ if (requested) {
+ success = true;
+ Log.i(MmsService.TAG, "Requested route to " + addr);
+ } else {
+ Log.i(MmsService.TAG, "Could not requested route to " + addr);
+ }
+ }
+ if (!success) {
+ throw new MmsHttpException(0/*statusCode*/, "No route requested");
+ }
+ } catch (UnknownHostException e) {
+ Log.w(MmsService.TAG, "Unknown host " + host);
+ throw new MmsHttpException(0/*statusCode*/, "Unknown host");
+ }
+ }
+
+ private static final Integer TYPE_MOBILE_MMS =
+ Integer.valueOf(ConnectivityManager.TYPE_MOBILE_MMS);
+ /**
+ * Wrapper for platform API requestRouteToHostAddress
+ *
+ * We first try the hidden but correct method on ConnectivityManager. If we can't, use
+ * the old but buggy one
+ *
+ * @param connMgr the ConnectivityManager instance
+ * @param inetAddr the InetAddress to request
+ * @return true if route is successfully setup, false otherwise
+ */
+ private static boolean requestRouteToHostAddress(final ConnectivityManager connMgr,
+ final InetAddress inetAddr) {
+ // First try the good method using reflection
+ try {
+ final Method method = connMgr.getClass().getMethod("requestRouteToHostAddress",
+ Integer.TYPE, InetAddress.class);
+ if (method != null) {
+ return (Boolean) method.invoke(connMgr, TYPE_MOBILE_MMS, inetAddr);
+ }
+ } catch (Exception e) {
+ Log.w(MmsService.TAG, "ConnectivityManager.requestRouteToHostAddress failed " + e);
+ }
+ // If we fail, try the old but buggy one
+ if (inetAddr instanceof Inet4Address) {
+ try {
+ final Method method = connMgr.getClass().getMethod("requestRouteToHost",
+ Integer.TYPE, Integer.TYPE);
+ if (method != null) {
+ return (Boolean) method.invoke(connMgr, TYPE_MOBILE_MMS,
+ inetAddressToInt(inetAddr));
+ }
+ } catch (Exception e) {
+ Log.w(MmsService.TAG, "ConnectivityManager.requestRouteToHost failed " + e);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Convert a IPv4 address from an InetAddress to an integer
+ *
+ * @param inetAddr is an InetAddress corresponding to the IPv4 address
+ * @return the IP address as an integer in network byte order
+ */
+ private static int inetAddressToInt(final InetAddress inetAddr)
+ throws IllegalArgumentException {
+ final byte [] addr = inetAddr.getAddress();
+ return ((addr[3] & 0xff) << 24) | ((addr[2] & 0xff) << 16) |
+ ((addr[1] & 0xff) << 8) | (addr[0] & 0xff);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeByte((byte) (mUseWakeLock ? 1 : 0));
+ parcel.writeString(mLocationUrl);
+ parcel.writeParcelable(mPduUri, 0);
+ parcel.writeParcelable(mPendingIntent, 0);
+ }
+
+ protected MmsRequest(final Parcel in) {
+ final ClassLoader classLoader = MmsRequest.class.getClassLoader();
+ mUseWakeLock = in.readByte() != 0;
+ mLocationUrl = in.readString();
+ mPduUri = in.readParcelable(classLoader);
+ mPendingIntent = in.readParcelable(classLoader);
+ }
+}
diff --git a/src/android/support/v7/mms/MmsService.java b/src/android/support/v7/mms/MmsService.java
new file mode 100644
index 0000000..650562f
--- /dev/null
+++ b/src/android/support/v7/mms/MmsService.java
@@ -0,0 +1,465 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.PowerManager;
+import android.os.Process;
+import android.telephony.SmsManager;
+import android.util.Log;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.RejectedExecutionException;
+
+/**
+ * Service to execute MMS requests using deprecated legacy APIs on older platform (prior to L)
+ */
+public class MmsService extends Service {
+ static final String TAG = "MmsLib";
+
+ //The default number of threads allowed to run MMS requests
+ private static final int DEFAULT_THREAD_POOL_SIZE = 4;
+ // Delay before stopping the service
+ private static final int SERVICE_STOP_DELAY_MILLIS = 2000;
+
+ private static final String EXTRA_REQUEST = "request";
+ private static final String EXTRA_MYPID = "mypid";
+
+ private static final String WAKELOCK_ID = "mmslib_wakelock";
+
+ /**
+ * Thread pool size for each request queue
+ */
+ private static volatile int sThreadPoolSize = DEFAULT_THREAD_POOL_SIZE;
+
+ /**
+ * Optional wake lock to use
+ */
+ private static volatile boolean sUseWakeLock = true;
+ private static volatile PowerManager.WakeLock sWakeLock = null;
+ private static final Object sWakeLockLock = new Object();
+
+ /**
+ * Carrier configuration values loader
+ */
+ private static volatile CarrierConfigValuesLoader sCarrierConfigValuesLoader = null;
+
+ /**
+ * APN loader
+ */
+ private static volatile ApnSettingsLoader sApnSettingsLoader = null;
+
+ /**
+ * UserAgent and UA Prof URL loader
+ */
+ private static volatile UserAgentInfoLoader sUserAgentInfoLoader = null;
+
+ /**
+ * Set the size of thread pool for request execution.
+ * Default is DEFAULT_THREAD_POOL_SIZE
+ *
+ * @param size thread pool size
+ */
+ static void setThreadPoolSize(final int size) {
+ sThreadPoolSize = size;
+ }
+
+ /**
+ * Set whether to use wake lock
+ *
+ * @param useWakeLock true to use wake lock, false otherwise
+ */
+ static void setUseWakeLock(final boolean useWakeLock) {
+ sUseWakeLock = useWakeLock;
+ }
+
+ /**
+ * Set the optional carrier config values
+ *
+ * @param loader the carrier config values loader
+ */
+ static void setCarrierConfigValuesLoader(final CarrierConfigValuesLoader loader) {
+ sCarrierConfigValuesLoader = loader;
+ }
+
+ /**
+ * Get the current carrier config values loader
+ *
+ * @return the carrier config values loader currently set
+ */
+ static CarrierConfigValuesLoader getCarrierConfigValuesLoader() {
+ return sCarrierConfigValuesLoader;
+ }
+
+ /**
+ * Set APN settings loader
+ *
+ * @param loader the APN settings loader
+ */
+ static void setApnSettingsLoader(final ApnSettingsLoader loader) {
+ sApnSettingsLoader = loader;
+ }
+
+ /**
+ * Get the current APN settings loader
+ *
+ * @return the APN settings loader currently set
+ */
+ static ApnSettingsLoader getApnSettingsLoader() {
+ return sApnSettingsLoader;
+ }
+
+ /**
+ * Set user agent info loader
+ *
+ * @param loader the user agent info loader
+ */
+ static void setUserAgentInfoLoader(final UserAgentInfoLoader loader) {
+ sUserAgentInfoLoader = loader;
+ }
+
+ /**
+ * Get the current user agent info loader
+ *
+ * @return the user agent info loader currently set
+ */
+ static UserAgentInfoLoader getUserAgentInfoLoader() {
+ return sUserAgentInfoLoader;
+ }
+
+ /**
+ * Make sure loaders are not null. Set to default if that's the case
+ *
+ * @param context the Context to use
+ */
+ private static void ensureLoaders(final Context context) {
+ if (sUserAgentInfoLoader == null) {
+ sUserAgentInfoLoader = new DefaultUserAgentInfoLoader(context);
+ }
+ if (sCarrierConfigValuesLoader == null) {
+ sCarrierConfigValuesLoader = new DefaultCarrierConfigValuesLoader(context);
+ }
+ if (sApnSettingsLoader == null) {
+ sApnSettingsLoader = new DefaultApnSettingsLoader(context);
+ }
+ }
+
+ /**
+ * Acquire the wake lock
+ *
+ * @param context the context to use
+ */
+ private static void acquireWakeLock(final Context context) {
+ synchronized (sWakeLockLock) {
+ if (sWakeLock == null) {
+ final PowerManager pm =
+ (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+ sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_ID);
+ }
+ sWakeLock.acquire();
+ }
+ }
+
+ /**
+ * Release the wake lock
+ */
+ private static void releaseWakeLock() {
+ boolean releasedEmptyWakeLock = false;
+ synchronized (sWakeLockLock) {
+ if (sWakeLock != null) {
+ sWakeLock.release();
+ } else {
+ releasedEmptyWakeLock = true;
+ }
+ }
+ if (releasedEmptyWakeLock) {
+ Log.w(TAG, "Releasing empty wake lock");
+ }
+ }
+
+ /**
+ * Check if wake lock is not held (e.g. when service stops)
+ */
+ private static void verifyWakeLockNotHeld() {
+ boolean wakeLockHeld = false;
+ synchronized (sWakeLockLock) {
+ wakeLockHeld = sWakeLock != null && sWakeLock.isHeld();
+ }
+ if (wakeLockHeld) {
+ Log.e(TAG, "Wake lock still held!");
+ }
+ }
+
+ // Remember my PID to discard restarted intent
+ private static volatile int sMyPid = -1;
+
+ /**
+ * Get the current PID
+ *
+ * @return the current PID
+ */
+ private static int getMyPid() {
+ if (sMyPid < 0) {
+ sMyPid = Process.myPid();
+ }
+ return sMyPid;
+ }
+
+ /**
+ * Check if the intent is coming from this process
+ *
+ * @param intent the incoming intent for the service
+ * @return true if the intent is from the current process
+ */
+ private static boolean fromThisProcess(final Intent intent) {
+ final int pid = intent.getIntExtra(EXTRA_MYPID, -1);
+ return pid == getMyPid();
+ }
+
+ // Request execution thread pools. One thread pool for sending and one for downloading.
+ // The size of the thread pool controls the parallelism of request execution.
+ // See {@link setThreadPoolSize}
+ private ExecutorService[] mExecutors = new ExecutorService[2];
+
+ // Active request count
+ private int mActiveRequestCount;
+ // The latest intent startId, used for safely stopping service
+ private int mLastStartId;
+
+ private MmsNetworkManager mNetworkManager;
+
+ // Handler for scheduling service stop
+ private final Handler mHandler = new Handler();
+ // Service stop task
+ private final Runnable mServiceStopRunnable = new Runnable() {
+ @Override
+ public void run() {
+ tryStopService();
+ }
+ };
+
+ /**
+ * Start the service with a request
+ *
+ * @param context the Context to use
+ * @param request the request to start
+ */
+ public static void startRequest(final Context context, final MmsRequest request) {
+ final boolean useWakeLock = sUseWakeLock;
+ request.setUseWakeLock(useWakeLock);
+ final Intent intent = new Intent(context, MmsService.class);
+ intent.putExtra(EXTRA_REQUEST, request);
+ intent.putExtra(EXTRA_MYPID, getMyPid());
+ if (useWakeLock) {
+ acquireWakeLock(context);
+ }
+ if (context.startService(intent) == null) {
+ if (useWakeLock) {
+ releaseWakeLock();
+ }
+ }
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ ensureLoaders(this);
+
+ for (int i = 0; i < mExecutors.length; i++) {
+ mExecutors[i] = Executors.newFixedThreadPool(sThreadPoolSize);
+ }
+
+ mNetworkManager = new MmsNetworkManager(this);
+
+ synchronized (this) {
+ mActiveRequestCount = 0;
+ mLastStartId = -1;
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ for (ExecutorService executor : mExecutors) {
+ executor.shutdown();
+ }
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ // Always remember the latest startId for use when we try releasing the service
+ synchronized (this) {
+ mLastStartId = startId;
+ }
+ boolean scheduled = false;
+ if (intent != null) {
+ // There is a rare situation that right after a intent is started,
+ // the service gets killed. Then the service will restart with
+ // the old intent which we don't want it to run since it will
+ // break our assumption for wake lock. Check the process ID
+ // embedded in the intent to make sure it is indeed from the
+ // the current life of this service.
+ if (fromThisProcess(intent)) {
+ final MmsRequest request = intent.getParcelableExtra(EXTRA_REQUEST);
+ if (request != null) {
+ try {
+ retainService(request, new Runnable() {
+ @Override
+ public void run() {
+ try {
+ request.execute(
+ MmsService.this,
+ mNetworkManager,
+ getApnSettingsLoader(),
+ getCarrierConfigValuesLoader(),
+ getUserAgentInfoLoader());
+ } catch (Exception e) {
+ Log.w(TAG, "Unexpected execution failure", e);
+ } finally {
+ if (request.getUseWakeLock()) {
+ releaseWakeLock();
+ }
+ releaseService();
+ }
+ }
+ });
+ scheduled = true;
+ } catch (RejectedExecutionException e) {
+ // Rare thing happened. Send back failure using the pending intent
+ // and also release the wake lock.
+ Log.w(TAG, "Executing request failed " + e);
+ request.returnResult(this, SmsManager.MMS_ERROR_UNSPECIFIED,
+ null/*response*/, 0/*httpStatusCode*/);
+ if (request.getUseWakeLock()) {
+ releaseWakeLock();
+ }
+ }
+ } else {
+ Log.w(TAG, "Empty request");
+ }
+ } else {
+ Log.w(TAG, "Got a restarted intent from previous incarnation");
+ }
+ } else {
+ Log.w(TAG, "Empty intent");
+ }
+ if (!scheduled) {
+ // If the request is not started successfully, we need to try shutdown the service
+ // if nobody is using it.
+ tryScheduleStop();
+ }
+ return START_NOT_STICKY;
+ }
+
+ /**
+ * Retain the service for executing the request in service thread pool
+ *
+ * @param request The request to execute
+ * @param runnable The runnable to run the request in thread pool
+ */
+ private void retainService(final MmsRequest request, final Runnable runnable) {
+ final ExecutorService executor = getRequestExecutor(request);
+ synchronized (this) {
+ executor.execute(runnable);
+ mActiveRequestCount++;
+ }
+ }
+
+ /**
+ * Release the service from the request. If nobody is using it, schedule service stop.
+ */
+ private void releaseService() {
+ synchronized (this) {
+ mActiveRequestCount--;
+ if (mActiveRequestCount <= 0) {
+ mActiveRequestCount = 0;
+ rescheduleServiceStop();
+ }
+ }
+ }
+
+ /**
+ * Schedule the service stop if there is no active request
+ */
+ private void tryScheduleStop() {
+ synchronized (this) {
+ if (mActiveRequestCount == 0) {
+ rescheduleServiceStop();
+ }
+ }
+ }
+
+ /**
+ * Reschedule service stop task
+ */
+ private void rescheduleServiceStop() {
+ mHandler.removeCallbacks(mServiceStopRunnable);
+ mHandler.postDelayed(mServiceStopRunnable, SERVICE_STOP_DELAY_MILLIS);
+ }
+
+ /**
+ * Really try to stop the service if there is not active request
+ */
+ private void tryStopService() {
+ Boolean stopped = null;
+ synchronized (this) {
+ if (mActiveRequestCount == 0) {
+ stopped = stopSelfResult(mLastStartId);
+ }
+ }
+ logServiceStop(stopped);
+ }
+
+ /**
+ * Log the result of service stopping. Also check wake lock status when service stops.
+ *
+ * @param stopped Not empty if service stop is performed: true if really stopped, false
+ * if cancelled.
+ */
+ private void logServiceStop(final Boolean stopped) {
+ if (stopped != null) {
+ if (stopped) {
+ Log.i(TAG, "Service successfully stopped");
+ verifyWakeLockNotHeld();
+ } else {
+ Log.i(TAG, "Service stopping cancelled");
+ }
+ }
+ }
+
+ private ExecutorService getRequestExecutor(final MmsRequest request) {
+ if (request instanceof SendRequest) {
+ // Send
+ return mExecutors[0];
+ } else {
+ // Download
+ return mExecutors[1];
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+}
diff --git a/src/android/support/v7/mms/MmsXmlResourceParser.java b/src/android/support/v7/mms/MmsXmlResourceParser.java
new file mode 100644
index 0000000..1ee73e2
--- /dev/null
+++ b/src/android/support/v7/mms/MmsXmlResourceParser.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.util.Log;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * Base class for a parser of XML resources
+ */
+abstract class MmsXmlResourceParser {
+ /**
+ * Parse the content
+ *
+ * @throws IOException
+ * @throws XmlPullParserException
+ */
+ protected abstract void parseRecord() throws IOException, XmlPullParserException;
+
+ /**
+ * Get the root tag of the content
+ *
+ * @return the text of root tag
+ */
+ protected abstract String getRootTag();
+
+ private final StringBuilder mLogStringBuilder = new StringBuilder();
+
+ protected final XmlPullParser mInputParser;
+
+ protected MmsXmlResourceParser(XmlPullParser parser) {
+ mInputParser = parser;
+ }
+
+ void parse() {
+ try {
+ // Find the first element
+ if (advanceToNextEvent(XmlPullParser.START_TAG) != XmlPullParser.START_TAG) {
+ throw new XmlPullParserException("ApnsXmlProcessor: expecting start tag @"
+ + xmlParserDebugContext());
+ }
+ if (!getRootTag().equals(mInputParser.getName())) {
+ Log.w(MmsService.TAG, "Carrier config does not start with " + getRootTag());
+ return;
+ }
+ // We are at the start tag
+ for (;;) {
+ int nextEvent;
+ // Skipping spaces
+ while ((nextEvent = mInputParser.next()) == XmlPullParser.TEXT);
+ if (nextEvent == XmlPullParser.START_TAG) {
+ // Parse one record
+ parseRecord();
+ } else if (nextEvent == XmlPullParser.END_TAG) {
+ break;
+ } else {
+ throw new XmlPullParserException("Expecting start or end tag @"
+ + xmlParserDebugContext());
+ }
+ }
+ } catch (IOException e) {
+ Log.w(MmsService.TAG, "XmlResourceParser: I/O failure", e);
+ } catch (XmlPullParserException e) {
+ Log.w(MmsService.TAG, "XmlResourceParser: parsing failure", e);
+ }
+ }
+
+ /**
+ * Move XML parser forward to next event type or the end of doc
+ *
+ * @param eventType
+ * @return The final event type we meet
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ protected int advanceToNextEvent(int eventType) throws XmlPullParserException, IOException {
+ for (;;) {
+ int nextEvent = mInputParser.next();
+ if (nextEvent == eventType
+ || nextEvent == XmlPullParser.END_DOCUMENT) {
+ return nextEvent;
+ }
+ }
+ }
+
+ /**
+ * @return The debugging information of the parser's current position
+ */
+ protected String xmlParserDebugContext() {
+ mLogStringBuilder.setLength(0);
+ if (mInputParser != null) {
+ try {
+ final int eventType = mInputParser.getEventType();
+ mLogStringBuilder.append(xmlParserEventString(eventType));
+ if (eventType == XmlPullParser.START_TAG
+ || eventType == XmlPullParser.END_TAG
+ || eventType == XmlPullParser.TEXT) {
+ mLogStringBuilder.append('<').append(mInputParser.getName());
+ for (int i = 0; i < mInputParser.getAttributeCount(); i++) {
+ mLogStringBuilder.append(' ')
+ .append(mInputParser.getAttributeName(i))
+ .append('=')
+ .append(mInputParser.getAttributeValue(i));
+ }
+ mLogStringBuilder.append("/>");
+ }
+ return mLogStringBuilder.toString();
+ } catch (XmlPullParserException e) {
+ Log.w(MmsService.TAG, "XmlResourceParser exception", e);
+ }
+ }
+ return "Unknown";
+ }
+
+ private static String xmlParserEventString(int event) {
+ switch (event) {
+ case XmlPullParser.START_DOCUMENT: return "START_DOCUMENT";
+ case XmlPullParser.END_DOCUMENT: return "END_DOCUMENT";
+ case XmlPullParser.START_TAG: return "START_TAG";
+ case XmlPullParser.END_TAG: return "END_TAG";
+ case XmlPullParser.TEXT: return "TEXT";
+ }
+ return Integer.toString(event);
+ }
+}
diff --git a/src/android/support/v7/mms/PhoneNumberHelper.java b/src/android/support/v7/mms/PhoneNumberHelper.java
new file mode 100644
index 0000000..99551c0
--- /dev/null
+++ b/src/android/support/v7/mms/PhoneNumberHelper.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.google.i18n.phonenumbers.NumberParseException;
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.Phonenumber;
+
+/**
+ * Helper methods for phone number formatting
+ * This is isolated into a standalone class since it depends on libphonenumber
+ */
+public class PhoneNumberHelper {
+ /**
+ * Given a phone number, get its national part without country code
+ *
+ * @param number the original number
+ * @param country the country ISO code
+ * @return the national number
+ */
+ static String getNumberNoCountryCode(final String number, final String country) {
+ if (!TextUtils.isEmpty(number)) {
+ final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
+ try {
+ final Phonenumber.PhoneNumber phoneNumber = phoneNumberUtil.parse(number, country);
+ if (phoneNumber != null && phoneNumberUtil.isValidNumber(phoneNumber)) {
+ return phoneNumberUtil
+ .format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.NATIONAL)
+ .replaceAll("\\D", "");
+ }
+ } catch (final NumberParseException e) {
+ Log.w(MmsService.TAG, "getNumberNoCountryCode: invalid number " + e);
+ }
+ }
+ return number;
+ }
+}
diff --git a/src/android/support/v7/mms/SendRequest.java b/src/android/support/v7/mms/SendRequest.java
new file mode 100644
index 0000000..1b7b1db
--- /dev/null
+++ b/src/android/support/v7/mms/SendRequest.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.app.PendingIntent;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.ParcelFileDescriptor;
+import android.os.Parcelable;
+import android.telephony.SmsManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.io.IOException;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Request to send an MMS
+ */
+class SendRequest extends MmsRequest {
+ // Max send response PDU size in bytes (exceeding this may cause problem with
+ // system intent delivery).
+ private static final int MAX_SEND_RESPONSE_SIZE = 1000 * 1024;
+
+ private byte[] mPduData;
+
+ SendRequest(final String locationUrl, final Uri pduUri, final PendingIntent sentIntent) {
+ super(locationUrl, pduUri, sentIntent);
+ }
+
+ @Override
+ protected boolean loadRequest(final Context context, final Bundle mmsConfig) {
+ mPduData = readPduFromContentUri(
+ context,
+ mPduUri,
+ mmsConfig.getInt(
+ CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_SIZE,
+ CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_SIZE_DEFAULT));
+ return (mPduData != null);
+ }
+
+ @Override
+ protected boolean transferResponse(final Context context, final Intent fillIn,
+ final byte[] response) {
+ // SendConf pdus are always small and can be included in the intent
+ if (response != null && fillIn != null) {
+ if (response.length > MAX_SEND_RESPONSE_SIZE) {
+ // If the response PDU is too large, it won't be able to fit in
+ // the PendingIntent to be transferred via system IPC.
+ return false;
+ }
+ fillIn.putExtra(SmsManager.EXTRA_MMS_DATA, response);
+ }
+ return true;
+ }
+
+ @Override
+ protected byte[] doHttp(Context context, MmsNetworkManager netMgr, ApnSettingsLoader.Apn apn,
+ Bundle mmsConfig, String userAgent, String uaProfUrl) throws MmsHttpException {
+ final MmsHttpClient httpClient = netMgr.getHttpClient();
+ return httpClient.execute(getHttpRequestUrl(apn), mPduData, MmsHttpClient.METHOD_POST,
+ !TextUtils.isEmpty(apn.getMmsProxy()), apn.getMmsProxy(), apn.getMmsProxyPort(),
+ mmsConfig, userAgent, uaProfUrl);
+ }
+
+ @Override
+ protected String getHttpRequestUrl(final ApnSettingsLoader.Apn apn) {
+ return !TextUtils.isEmpty(mLocationUrl) ? mLocationUrl : apn.getMmsc();
+ }
+
+ /**
+ * Read pdu from content provider uri
+ *
+ * @param contentUri content provider uri from which to read
+ * @param maxSize maximum number of bytes to read
+ * @return pdu bytes if succeeded else null
+ */
+ public byte[] readPduFromContentUri(final Context context, final Uri contentUri,
+ final int maxSize) {
+ if (contentUri == null) {
+ return null;
+ }
+ final Callable copyPduToArray = new Callable() {
+ public byte[] call() {
+ ParcelFileDescriptor.AutoCloseInputStream inStream = null;
+ try {
+ final ContentResolver cr = context.getContentResolver();
+ final ParcelFileDescriptor pduFd = cr.openFileDescriptor(contentUri, "r");
+ inStream = new ParcelFileDescriptor.AutoCloseInputStream(pduFd);
+ // Request one extra byte to make sure file not bigger than maxSize
+ final byte[] readBuf = new byte[maxSize+1];
+ final int bytesRead = inStream.read(readBuf, 0, maxSize+1);
+ if (bytesRead <= 0) {
+ Log.e(MmsService.TAG, "Reading PDU from sender: empty PDU");
+ return null;
+ }
+ if (bytesRead > maxSize) {
+ Log.e(MmsService.TAG, "Reading PDU from sender: PDU too large");
+ return null;
+ }
+ // Copy and return the exact length of bytes
+ final byte[] result = new byte[bytesRead];
+ System.arraycopy(readBuf, 0, result, 0, bytesRead);
+ return result;
+ } catch (IOException e) {
+ Log.e(MmsService.TAG, "Reading PDU from sender: IO exception", e);
+ return null;
+ } finally {
+ if (inStream != null) {
+ try {
+ inStream.close();
+ } catch (IOException ex) {
+ // Ignore
+ }
+ }
+ }
+ }
+ };
+ final Future pendingResult = mPduTransferExecutor.submit(copyPduToArray);
+ try {
+ return pendingResult.get(TASK_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+ } catch (Exception e) {
+ // Typically a timeout occurred - cancel task
+ pendingResult.cancel(true);
+ }
+ return null;
+ }
+
+ public static final Parcelable.Creator CREATOR
+ = new Parcelable.Creator() {
+ public SendRequest createFromParcel(Parcel in) {
+ return new SendRequest(in);
+ }
+
+ public SendRequest[] newArray(int size) {
+ return new SendRequest[size];
+ }
+ };
+
+ private SendRequest(Parcel in) {
+ super(in);
+ }
+}
diff --git a/src/android/support/v7/mms/UserAgentInfoLoader.java b/src/android/support/v7/mms/UserAgentInfoLoader.java
new file mode 100644
index 0000000..214d58d
--- /dev/null
+++ b/src/android/support/v7/mms/UserAgentInfoLoader.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+/**
+ * Interface to load UserAgent and UA Prof URL
+ */
+public interface UserAgentInfoLoader {
+ // Carrier configuration keys for passing as config overrides into system MMS service
+ public static final String CONFIG_USER_AGENT = "userAgent";
+ public static final String CONFIG_UA_PROF_URL = "uaProfUrl";
+
+ /**
+ * Get UserAgent value
+ *
+ * @return the text of UserAgent
+ */
+ String getUserAgent();
+
+ /**
+ * Get UA Profile URL
+ *
+ * @return the URL of UA profile
+ */
+ String getUAProfUrl();
+}
diff --git a/src/android/support/v7/mms/Utils.java b/src/android/support/v7/mms/Utils.java
new file mode 100644
index 0000000..cb55c2e
--- /dev/null
+++ b/src/android/support/v7/mms/Utils.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.os.Build;
+import android.telephony.SmsManager;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * Utility methods
+ */
+class Utils {
+ /**
+ * Check if MMS API is available
+ *
+ * @return true if MMS API is available, false otherwise
+ */
+ static boolean hasMmsApi() {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
+ }
+
+ /**
+ * Check if support multi-SIM
+ *
+ * @return true if MSIM is supported, false otherwise
+ */
+ static boolean supportMSim() {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1;
+ }
+
+ /**
+ * Check if support APIs for getting UserAgent and UAProfUrl
+ *
+ * @return true if those APIs are supported, false otherwise
+ */
+ static boolean hasUserAgentApi() {
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
+ }
+
+ /**
+ * Get system SmsManager
+ *
+ * @param subId the subscription ID of the SmsManager
+ * @return the SmsManager for the input subId
+ */
+ static SmsManager getSmsManager(final int subId) {
+ if (supportMSim()) {
+ return SmsManager.getSmsManagerForSubscriptionId(subId);
+ } else {
+ return SmsManager.getDefault();
+ }
+ }
+
+ /**
+ * Get the real subscription ID if the input is -1
+ *
+ * @param subId input subscription ID
+ * @return the default SMS subscription ID if the input is -1, otherwise the original
+ */
+ static int getEffectiveSubscriptionId(int subId) {
+ if (supportMSim()) {
+ if (subId == MmsManager.DEFAULT_SUB_ID) {
+ subId = SmsManager.getDefaultSmsSubscriptionId();
+ }
+ }
+ if (subId < 0) {
+ subId = MmsManager.DEFAULT_SUB_ID;
+ }
+ return subId;
+ }
+
+ /**
+ * Get MCC/MNC of an SIM subscription
+ *
+ * @param context the Context to use
+ * @param subId the SIM subId
+ * @return a non-empty array with exactly two elements, first is mcc and last is mnc.
+ */
+ static int[] getMccMnc(final Context context, final int subId) {
+ final int[] mccMnc = new int[] { 0, 0 };
+ if (Utils.supportMSim()) {
+ final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
+ final SubscriptionInfo subInfo = subscriptionManager.getActiveSubscriptionInfo(subId);
+ if (subInfo != null) {
+ mccMnc[0] = subInfo.getMcc();
+ mccMnc[1] = subInfo.getMnc();
+ }
+ } else {
+ final TelephonyManager telephonyManager =
+ (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ final String mccMncString = telephonyManager.getSimOperator();
+ try {
+ mccMnc[0] = Integer.parseInt(mccMncString.substring(0, 3));
+ mccMnc[1] = Integer.parseInt(mccMncString.substring(3));
+ } catch (Exception e) {
+ Log.w(MmsService.TAG, "Invalid mcc/mnc from system " + mccMncString + ": " + e);
+ mccMnc[0] = 0;
+ mccMnc[1] = 0;
+ }
+ }
+ return mccMnc;
+ }
+
+ /**
+ * Get a subscription's Context so we can load resources from it
+ *
+ * @param context the sub-independent Context
+ * @param subId the SIM's subId
+ * @return the sub-dependent Context
+ */
+ static Context getSubDepContext(final Context context, final int subId) {
+ if (!supportMSim()) {
+ return context;
+ }
+ final int[] mccMnc = getMccMnc(context, subId);
+ final int mcc = mccMnc[0];
+ final int mnc = mccMnc[1];
+ if (mcc == 0 && mnc == 0) {
+ return context;
+ }
+ final Configuration subConfig = new Configuration();
+ subConfig.mcc = mcc;
+ subConfig.mnc = mnc;
+ return context.createConfigurationContext(subConfig);
+ }
+
+ /**
+ * Redact the URL for non-VERBOSE logging. Replace url with only the host part and the length
+ * of the input URL string.
+ *
+ * @param urlString
+ * @return
+ */
+ static String redactUrlForNonVerbose(String urlString) {
+ if (Log.isLoggable(MmsService.TAG, Log.VERBOSE)) {
+ // Don't redact for VERBOSE level logging
+ return urlString;
+ }
+ if (TextUtils.isEmpty(urlString)) {
+ return urlString;
+ }
+ String protocol = "http";
+ String host = "";
+ try {
+ final URL url = new URL(urlString);
+ protocol = url.getProtocol();
+ host = url.getHost();
+ } catch (MalformedURLException e) {
+ // Ignore
+ }
+ // Print "http://host[length]"
+ final StringBuilder sb = new StringBuilder();
+ sb.append(protocol).append("://").append(host)
+ .append("[").append(urlString.length()).append("]");
+ return sb.toString();
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/AcknowledgeInd.java b/src/android/support/v7/mms/pdu/AcknowledgeInd.java
new file mode 100644
index 0000000..10f9e35
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/AcknowledgeInd.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+/**
+ * M-Acknowledge.ind PDU.
+ */
+public class AcknowledgeInd extends GenericPdu {
+ /**
+ * Constructor, used when composing a M-Acknowledge.ind pdu.
+ *
+ * @param mmsVersion current viersion of mms
+ * @param transactionId the transaction-id value
+ * @throws InvalidHeaderValueException if parameters are invalid.
+ * NullPointerException if transactionId is null.
+ */
+ public AcknowledgeInd(int mmsVersion, byte[] transactionId)
+ throws InvalidHeaderValueException {
+ super();
+
+ setMessageType(PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND);
+ setMmsVersion(mmsVersion);
+ setTransactionId(transactionId);
+ }
+
+ /**
+ * Constructor with given headers.
+ *
+ * @param headers Headers for this PDU.
+ */
+ AcknowledgeInd(PduHeaders headers) {
+ super(headers);
+ }
+
+ /**
+ * Get X-Mms-Report-Allowed field value.
+ *
+ * @return the X-Mms-Report-Allowed value
+ */
+ public int getReportAllowed() {
+ return mPduHeaders.getOctet(PduHeaders.REPORT_ALLOWED);
+ }
+
+ /**
+ * Set X-Mms-Report-Allowed field value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setReportAllowed(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.REPORT_ALLOWED);
+ }
+
+ /**
+ * Get X-Mms-Transaction-Id field value.
+ *
+ * @return the X-Mms-Report-Allowed value
+ */
+ public byte[] getTransactionId() {
+ return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
+ }
+
+ /**
+ * Set X-Mms-Transaction-Id field value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setTransactionId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/Base64.java b/src/android/support/v7/mms/pdu/Base64.java
new file mode 100644
index 0000000..9f3418f
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/Base64.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+public class Base64 {
+ /**
+ * Used to get the number of Quadruples.
+ */
+ static final int FOURBYTE = 4;
+
+ /**
+ * Byte used to pad output.
+ */
+ static final byte PAD = (byte) '=';
+
+ /**
+ * The base length.
+ */
+ static final int BASELENGTH = 255;
+
+ // Create arrays to hold the base64 characters
+ private static byte[] base64Alphabet = new byte[BASELENGTH];
+
+ // Populating the character arrays
+ static {
+ for (int i = 0; i < BASELENGTH; i++) {
+ base64Alphabet[i] = (byte) -1;
+ }
+ for (int i = 'Z'; i >= 'A'; i--) {
+ base64Alphabet[i] = (byte) (i - 'A');
+ }
+ for (int i = 'z'; i >= 'a'; i--) {
+ base64Alphabet[i] = (byte) (i - 'a' + 26);
+ }
+ for (int i = '9'; i >= '0'; i--) {
+ base64Alphabet[i] = (byte) (i - '0' + 52);
+ }
+
+ base64Alphabet['+'] = 62;
+ base64Alphabet['/'] = 63;
+ }
+
+ /**
+ * Decodes Base64 data into octects
+ *
+ * @param base64Data Byte array containing Base64 data
+ * @return Array containing decoded data.
+ */
+ public static byte[] decodeBase64(byte[] base64Data) {
+ // RFC 2045 requires that we discard ALL non-Base64 characters
+ base64Data = discardNonBase64(base64Data);
+
+ // handle the edge case, so we don't have to worry about it later
+ if (base64Data.length == 0) {
+ return new byte[0];
+ }
+
+ int numberQuadruple = base64Data.length / FOURBYTE;
+ byte decodedData[] = null;
+ byte b1 = 0, b2 = 0, b3 = 0, b4 = 0, marker0 = 0, marker1 = 0;
+
+ // Throw away anything not in base64Data
+
+ int encodedIndex = 0;
+ int dataIndex = 0;
+ {
+ // this sizes the output array properly - rlw
+ int lastData = base64Data.length;
+ // ignore the '=' padding
+ while (base64Data[lastData - 1] == PAD) {
+ if (--lastData == 0) {
+ return new byte[0];
+ }
+ }
+ decodedData = new byte[lastData - numberQuadruple];
+ }
+
+ for (int i = 0; i < numberQuadruple; i++) {
+ dataIndex = i * 4;
+ marker0 = base64Data[dataIndex + 2];
+ marker1 = base64Data[dataIndex + 3];
+
+ b1 = base64Alphabet[base64Data[dataIndex]];
+ b2 = base64Alphabet[base64Data[dataIndex + 1]];
+
+ if (marker0 != PAD && marker1 != PAD) {
+ //No PAD e.g 3cQl
+ b3 = base64Alphabet[marker0];
+ b4 = base64Alphabet[marker1];
+
+ decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
+ decodedData[encodedIndex + 1] =
+ (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
+ decodedData[encodedIndex + 2] = (byte) (b3 << 6 | b4);
+ } else if (marker0 == PAD) {
+ //Two PAD e.g. 3c[Pad][Pad]
+ decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
+ } else if (marker1 == PAD) {
+ //One PAD e.g. 3cQ[Pad]
+ b3 = base64Alphabet[marker0];
+
+ decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
+ decodedData[encodedIndex + 1] =
+ (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
+ }
+ encodedIndex += 3;
+ }
+ return decodedData;
+ }
+
+ /**
+ * Check octect wheter it is a base64 encoding.
+ *
+ * @param octect to be checked byte
+ * @return ture if it is base64 encoding, false otherwise.
+ */
+ private static boolean isBase64(byte octect) {
+ if (octect == PAD) {
+ return true;
+ } else if (base64Alphabet[octect] == -1) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Discards any characters outside of the base64 alphabet, per
+ * the requirements on page 25 of RFC 2045 - "Any characters
+ * outside of the base64 alphabet are to be ignored in base64
+ * encoded data."
+ *
+ * @param data The base-64 encoded data to groom
+ * @return The data, less non-base64 characters (see RFC 2045).
+ */
+ static byte[] discardNonBase64(byte[] data) {
+ byte groomedData[] = new byte[data.length];
+ int bytesCopied = 0;
+
+ for (int i = 0; i < data.length; i++) {
+ if (isBase64(data[i])) {
+ groomedData[bytesCopied++] = data[i];
+ }
+ }
+
+ byte packedData[] = new byte[bytesCopied];
+
+ System.arraycopy(groomedData, 0, packedData, 0, bytesCopied);
+
+ return packedData;
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/CharacterSets.java b/src/android/support/v7/mms/pdu/CharacterSets.java
new file mode 100644
index 0000000..8ce2a02
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/CharacterSets.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+
+public class CharacterSets {
+ /**
+ * IANA assigned MIB enum numbers.
+ *
+ * From wap-230-wsp-20010705-a.pdf
+ * Any-charset =
+ * Equivalent to the special RFC2616 charset value "*"
+ */
+ public static final int ANY_CHARSET = 0x00;
+ public static final int US_ASCII = 0x03;
+ public static final int ISO_8859_1 = 0x04;
+ public static final int ISO_8859_2 = 0x05;
+ public static final int ISO_8859_3 = 0x06;
+ public static final int ISO_8859_4 = 0x07;
+ public static final int ISO_8859_5 = 0x08;
+ public static final int ISO_8859_6 = 0x09;
+ public static final int ISO_8859_7 = 0x0A;
+ public static final int ISO_8859_8 = 0x0B;
+ public static final int ISO_8859_9 = 0x0C;
+ public static final int SHIFT_JIS = 0x11;
+ public static final int UTF_8 = 0x6A;
+ public static final int BIG5 = 0x07EA;
+ public static final int UCS2 = 0x03E8;
+ public static final int UTF_16 = 0x03F7;
+
+ /**
+ * If the encoding of given data is unsupported, use UTF_8 to decode it.
+ */
+ public static final int DEFAULT_CHARSET = UTF_8;
+
+ /**
+ * Array of MIB enum numbers.
+ */
+ private static final int[] MIBENUM_NUMBERS = {
+ ANY_CHARSET,
+ US_ASCII,
+ ISO_8859_1,
+ ISO_8859_2,
+ ISO_8859_3,
+ ISO_8859_4,
+ ISO_8859_5,
+ ISO_8859_6,
+ ISO_8859_7,
+ ISO_8859_8,
+ ISO_8859_9,
+ SHIFT_JIS,
+ UTF_8,
+ BIG5,
+ UCS2,
+ UTF_16,
+ };
+
+ /**
+ * The Well-known-charset Mime name.
+ */
+ public static final String MIMENAME_ANY_CHARSET = "*";
+ public static final String MIMENAME_US_ASCII = "us-ascii";
+ public static final String MIMENAME_ISO_8859_1 = "iso-8859-1";
+ public static final String MIMENAME_ISO_8859_2 = "iso-8859-2";
+ public static final String MIMENAME_ISO_8859_3 = "iso-8859-3";
+ public static final String MIMENAME_ISO_8859_4 = "iso-8859-4";
+ public static final String MIMENAME_ISO_8859_5 = "iso-8859-5";
+ public static final String MIMENAME_ISO_8859_6 = "iso-8859-6";
+ public static final String MIMENAME_ISO_8859_7 = "iso-8859-7";
+ public static final String MIMENAME_ISO_8859_8 = "iso-8859-8";
+ public static final String MIMENAME_ISO_8859_9 = "iso-8859-9";
+ public static final String MIMENAME_SHIFT_JIS = "shift_JIS";
+ public static final String MIMENAME_UTF_8 = "utf-8";
+ public static final String MIMENAME_BIG5 = "big5";
+ public static final String MIMENAME_UCS2 = "iso-10646-ucs-2";
+ public static final String MIMENAME_UTF_16 = "utf-16";
+
+ public static final String DEFAULT_CHARSET_NAME = MIMENAME_UTF_8;
+
+ /**
+ * Array of the names of character sets.
+ */
+ private static final String[] MIME_NAMES = {
+ MIMENAME_ANY_CHARSET,
+ MIMENAME_US_ASCII,
+ MIMENAME_ISO_8859_1,
+ MIMENAME_ISO_8859_2,
+ MIMENAME_ISO_8859_3,
+ MIMENAME_ISO_8859_4,
+ MIMENAME_ISO_8859_5,
+ MIMENAME_ISO_8859_6,
+ MIMENAME_ISO_8859_7,
+ MIMENAME_ISO_8859_8,
+ MIMENAME_ISO_8859_9,
+ MIMENAME_SHIFT_JIS,
+ MIMENAME_UTF_8,
+ MIMENAME_BIG5,
+ MIMENAME_UCS2,
+ MIMENAME_UTF_16,
+ };
+
+ private static final HashMap MIBENUM_TO_NAME_MAP;
+ private static final HashMap NAME_TO_MIBENUM_MAP;
+
+ static {
+ // Create the HashMaps.
+ MIBENUM_TO_NAME_MAP = new HashMap();
+ NAME_TO_MIBENUM_MAP = new HashMap();
+ assert(MIBENUM_NUMBERS.length == MIME_NAMES.length);
+ int count = MIBENUM_NUMBERS.length - 1;
+ for(int i = 0; i <= count; i++) {
+ MIBENUM_TO_NAME_MAP.put(MIBENUM_NUMBERS[i], MIME_NAMES[i]);
+ NAME_TO_MIBENUM_MAP.put(MIME_NAMES[i], MIBENUM_NUMBERS[i]);
+ }
+ }
+
+ private CharacterSets() {} // Non-instantiatable
+
+ /**
+ * Map an MIBEnum number to the name of the charset which this number
+ * is assigned to by IANA.
+ *
+ * @param mibEnumValue An IANA assigned MIBEnum number.
+ * @return The name string of the charset.
+ * @throws UnsupportedEncodingException
+ */
+ public static String getMimeName(int mibEnumValue)
+ throws UnsupportedEncodingException {
+ String name = MIBENUM_TO_NAME_MAP.get(mibEnumValue);
+ if (name == null) {
+ throw new UnsupportedEncodingException();
+ }
+ return name;
+ }
+
+ /**
+ * Map a well-known charset name to its assigned MIBEnum number.
+ *
+ * @param mimeName The charset name.
+ * @return The MIBEnum number assigned by IANA for this charset.
+ * @throws UnsupportedEncodingException
+ */
+ public static int getMibEnumValue(String mimeName)
+ throws UnsupportedEncodingException {
+ if(null == mimeName) {
+ return -1;
+ }
+
+ Integer mibEnumValue = NAME_TO_MIBENUM_MAP.get(mimeName);
+ if (mibEnumValue == null) {
+ throw new UnsupportedEncodingException();
+ }
+ return mibEnumValue;
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/ContentType.java b/src/android/support/v7/mms/pdu/ContentType.java
new file mode 100644
index 0000000..7ba961d
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/ContentType.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2007-2008 Esmertec AG.
+ * Copyright (C) 2007-2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+import java.util.ArrayList;
+
+public class ContentType {
+ public static final String MMS_MESSAGE = "application/vnd.wap.mms-message";
+ // The phony content type for generic PDUs (e.g. ReadOrig.ind,
+ // Notification.ind, Delivery.ind).
+ public static final String MMS_GENERIC = "application/vnd.wap.mms-generic";
+ public static final String MULTIPART_MIXED = "application/vnd.wap.multipart.mixed";
+ public static final String MULTIPART_RELATED = "application/vnd.wap.multipart.related";
+ public static final String MULTIPART_ALTERNATIVE = "application/vnd.wap.multipart.alternative";
+
+ public static final String TEXT_PLAIN = "text/plain";
+ public static final String TEXT_HTML = "text/html";
+ public static final String TEXT_VCALENDAR = "text/x-vCalendar";
+ public static final String TEXT_VCARD = "text/x-vCard";
+
+ public static final String IMAGE_UNSPECIFIED = "image/*";
+ public static final String IMAGE_JPEG = "image/jpeg";
+ public static final String IMAGE_JPG = "image/jpg";
+ public static final String IMAGE_GIF = "image/gif";
+ public static final String IMAGE_WBMP = "image/vnd.wap.wbmp";
+ public static final String IMAGE_PNG = "image/png";
+ public static final String IMAGE_X_MS_BMP = "image/x-ms-bmp";
+
+ public static final String AUDIO_UNSPECIFIED = "audio/*";
+ public static final String AUDIO_AAC = "audio/aac";
+ public static final String AUDIO_AMR = "audio/amr";
+ public static final String AUDIO_IMELODY = "audio/imelody";
+ public static final String AUDIO_MID = "audio/mid";
+ public static final String AUDIO_MIDI = "audio/midi";
+ public static final String AUDIO_MP3 = "audio/mp3";
+ public static final String AUDIO_MPEG3 = "audio/mpeg3";
+ public static final String AUDIO_MPEG = "audio/mpeg";
+ public static final String AUDIO_MPG = "audio/mpg";
+ public static final String AUDIO_MP4 = "audio/mp4";
+ public static final String AUDIO_X_MID = "audio/x-mid";
+ public static final String AUDIO_X_MIDI = "audio/x-midi";
+ public static final String AUDIO_X_MP3 = "audio/x-mp3";
+ public static final String AUDIO_X_MPEG3 = "audio/x-mpeg3";
+ public static final String AUDIO_X_MPEG = "audio/x-mpeg";
+ public static final String AUDIO_X_MPG = "audio/x-mpg";
+ public static final String AUDIO_3GPP = "audio/3gpp";
+ public static final String AUDIO_X_WAV = "audio/x-wav";
+ public static final String AUDIO_OGG = "application/ogg";
+
+ public static final String VIDEO_UNSPECIFIED = "video/*";
+ public static final String VIDEO_3GPP = "video/3gpp";
+ public static final String VIDEO_3G2 = "video/3gpp2";
+ public static final String VIDEO_H263 = "video/h263";
+ public static final String VIDEO_MP4 = "video/mp4";
+
+ public static final String APP_SMIL = "application/smil";
+ public static final String APP_WAP_XHTML = "application/vnd.wap.xhtml+xml";
+ public static final String APP_XHTML = "application/xhtml+xml";
+
+ public static final String APP_DRM_CONTENT = "application/vnd.oma.drm.content";
+ public static final String APP_DRM_MESSAGE = "application/vnd.oma.drm.message";
+
+ private static final ArrayList sSupportedContentTypes = new ArrayList();
+ private static final ArrayList sSupportedImageTypes = new ArrayList();
+ private static final ArrayList sSupportedAudioTypes = new ArrayList();
+ private static final ArrayList sSupportedVideoTypes = new ArrayList();
+
+ static {
+ sSupportedContentTypes.add(TEXT_PLAIN);
+ sSupportedContentTypes.add(TEXT_HTML);
+ sSupportedContentTypes.add(TEXT_VCALENDAR);
+ sSupportedContentTypes.add(TEXT_VCARD);
+
+ sSupportedContentTypes.add(IMAGE_JPEG);
+ sSupportedContentTypes.add(IMAGE_GIF);
+ sSupportedContentTypes.add(IMAGE_WBMP);
+ sSupportedContentTypes.add(IMAGE_PNG);
+ sSupportedContentTypes.add(IMAGE_JPG);
+ sSupportedContentTypes.add(IMAGE_X_MS_BMP);
+ //supportedContentTypes.add(IMAGE_SVG); not yet supported.
+
+ sSupportedContentTypes.add(AUDIO_AAC);
+ sSupportedContentTypes.add(AUDIO_AMR);
+ sSupportedContentTypes.add(AUDIO_IMELODY);
+ sSupportedContentTypes.add(AUDIO_MID);
+ sSupportedContentTypes.add(AUDIO_MIDI);
+ sSupportedContentTypes.add(AUDIO_MP3);
+ sSupportedContentTypes.add(AUDIO_MP4);
+ sSupportedContentTypes.add(AUDIO_MPEG3);
+ sSupportedContentTypes.add(AUDIO_MPEG);
+ sSupportedContentTypes.add(AUDIO_MPG);
+ sSupportedContentTypes.add(AUDIO_X_MID);
+ sSupportedContentTypes.add(AUDIO_X_MIDI);
+ sSupportedContentTypes.add(AUDIO_X_MP3);
+ sSupportedContentTypes.add(AUDIO_X_MPEG3);
+ sSupportedContentTypes.add(AUDIO_X_MPEG);
+ sSupportedContentTypes.add(AUDIO_X_MPG);
+ sSupportedContentTypes.add(AUDIO_X_WAV);
+ sSupportedContentTypes.add(AUDIO_3GPP);
+ sSupportedContentTypes.add(AUDIO_OGG);
+
+ sSupportedContentTypes.add(VIDEO_3GPP);
+ sSupportedContentTypes.add(VIDEO_3G2);
+ sSupportedContentTypes.add(VIDEO_H263);
+ sSupportedContentTypes.add(VIDEO_MP4);
+
+ sSupportedContentTypes.add(APP_SMIL);
+ sSupportedContentTypes.add(APP_WAP_XHTML);
+ sSupportedContentTypes.add(APP_XHTML);
+
+ sSupportedContentTypes.add(APP_DRM_CONTENT);
+ sSupportedContentTypes.add(APP_DRM_MESSAGE);
+
+ // add supported image types
+ sSupportedImageTypes.add(IMAGE_JPEG);
+ sSupportedImageTypes.add(IMAGE_GIF);
+ sSupportedImageTypes.add(IMAGE_WBMP);
+ sSupportedImageTypes.add(IMAGE_PNG);
+ sSupportedImageTypes.add(IMAGE_JPG);
+ sSupportedImageTypes.add(IMAGE_X_MS_BMP);
+
+ // add supported audio types
+ sSupportedAudioTypes.add(AUDIO_AAC);
+ sSupportedAudioTypes.add(AUDIO_AMR);
+ sSupportedAudioTypes.add(AUDIO_IMELODY);
+ sSupportedAudioTypes.add(AUDIO_MID);
+ sSupportedAudioTypes.add(AUDIO_MIDI);
+ sSupportedAudioTypes.add(AUDIO_MP3);
+ sSupportedAudioTypes.add(AUDIO_MPEG3);
+ sSupportedAudioTypes.add(AUDIO_MPEG);
+ sSupportedAudioTypes.add(AUDIO_MPG);
+ sSupportedAudioTypes.add(AUDIO_MP4);
+ sSupportedAudioTypes.add(AUDIO_X_MID);
+ sSupportedAudioTypes.add(AUDIO_X_MIDI);
+ sSupportedAudioTypes.add(AUDIO_X_MP3);
+ sSupportedAudioTypes.add(AUDIO_X_MPEG3);
+ sSupportedAudioTypes.add(AUDIO_X_MPEG);
+ sSupportedAudioTypes.add(AUDIO_X_MPG);
+ sSupportedAudioTypes.add(AUDIO_X_WAV);
+ sSupportedAudioTypes.add(AUDIO_3GPP);
+ sSupportedAudioTypes.add(AUDIO_OGG);
+
+ // add supported video types
+ sSupportedVideoTypes.add(VIDEO_3GPP);
+ sSupportedVideoTypes.add(VIDEO_3G2);
+ sSupportedVideoTypes.add(VIDEO_H263);
+ sSupportedVideoTypes.add(VIDEO_MP4);
+ }
+
+ // This class should never be instantiated.
+ private ContentType() {
+ }
+
+ public static boolean isSupportedType(String contentType) {
+ return (null != contentType) && sSupportedContentTypes.contains(contentType);
+ }
+
+ public static boolean isSupportedImageType(String contentType) {
+ return isImageType(contentType) && isSupportedType(contentType);
+ }
+
+ public static boolean isSupportedAudioType(String contentType) {
+ return isAudioType(contentType) && isSupportedType(contentType);
+ }
+
+ public static boolean isSupportedVideoType(String contentType) {
+ return isVideoType(contentType) && isSupportedType(contentType);
+ }
+
+ public static boolean isTextType(String contentType) {
+ return (null != contentType) && contentType.startsWith("text/");
+ }
+
+ public static boolean isImageType(String contentType) {
+ return (null != contentType) && contentType.startsWith("image/");
+ }
+
+ public static boolean isAudioType(String contentType) {
+ return (null != contentType) && contentType.startsWith("audio/");
+ }
+
+ public static boolean isVideoType(String contentType) {
+ return (null != contentType) && contentType.startsWith("video/");
+ }
+
+ public static boolean isDrmType(String contentType) {
+ return (null != contentType)
+ && (contentType.equals(APP_DRM_CONTENT)
+ || contentType.equals(APP_DRM_MESSAGE));
+ }
+
+ public static boolean isUnspecified(String contentType) {
+ return (null != contentType) && contentType.endsWith("*");
+ }
+
+ @SuppressWarnings("unchecked")
+ public static ArrayList getImageTypes() {
+ return (ArrayList) sSupportedImageTypes.clone();
+ }
+
+ @SuppressWarnings("unchecked")
+ public static ArrayList getAudioTypes() {
+ return (ArrayList) sSupportedAudioTypes.clone();
+ }
+
+ @SuppressWarnings("unchecked")
+ public static ArrayList getVideoTypes() {
+ return (ArrayList) sSupportedVideoTypes.clone();
+ }
+
+ @SuppressWarnings("unchecked")
+ public static ArrayList getSupportedTypes() {
+ return (ArrayList) sSupportedContentTypes.clone();
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/DeliveryInd.java b/src/android/support/v7/mms/pdu/DeliveryInd.java
new file mode 100644
index 0000000..d7d72d9
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/DeliveryInd.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+/**
+ * M-Delivery.Ind Pdu.
+ */
+public class DeliveryInd extends GenericPdu {
+ /**
+ * Empty constructor.
+ * Since the Pdu corresponding to this class is constructed
+ * by the Proxy-Relay server, this class is only instantiated
+ * by the Pdu Parser.
+ *
+ * @throws InvalidHeaderValueException if error occurs.
+ */
+ public DeliveryInd() throws InvalidHeaderValueException {
+ super();
+ setMessageType(PduHeaders.MESSAGE_TYPE_DELIVERY_IND);
+ }
+
+ /**
+ * Constructor with given headers.
+ *
+ * @param headers Headers for this PDU.
+ */
+ DeliveryInd(PduHeaders headers) {
+ super(headers);
+ }
+
+ /**
+ * Get Date value.
+ *
+ * @return the value
+ */
+ public long getDate() {
+ return mPduHeaders.getLongInteger(PduHeaders.DATE);
+ }
+
+ /**
+ * Set Date value.
+ *
+ * @param value the value
+ */
+ public void setDate(long value) {
+ mPduHeaders.setLongInteger(value, PduHeaders.DATE);
+ }
+
+ /**
+ * Get Message-ID value.
+ *
+ * @return the value
+ */
+ public byte[] getMessageId() {
+ return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
+ }
+
+ /**
+ * Set Message-ID value.
+ *
+ * @param value the value, should not be null
+ * @throws NullPointerException if the value is null.
+ */
+ public void setMessageId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
+ }
+
+ /**
+ * Get Status value.
+ *
+ * @return the value
+ */
+ public int getStatus() {
+ return mPduHeaders.getOctet(PduHeaders.STATUS);
+ }
+
+ /**
+ * Set Status value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setStatus(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.STATUS);
+ }
+
+ /**
+ * Get To value.
+ *
+ * @return the value
+ */
+ public EncodedStringValue[] getTo() {
+ return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
+ }
+
+ /**
+ * set To value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setTo(EncodedStringValue[] value) {
+ mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
+ }
+
+ /*
+ * Optional, not supported header fields:
+ *
+ * public byte[] getApplicId() {return null;}
+ * public void setApplicId(byte[] value) {}
+ *
+ * public byte[] getAuxApplicId() {return null;}
+ * public void getAuxApplicId(byte[] value) {}
+ *
+ * public byte[] getReplyApplicId() {return 0x00;}
+ * public void setReplyApplicId(byte[] value) {}
+ *
+ * public EncodedStringValue getStatusText() {return null;}
+ * public void setStatusText(EncodedStringValue value) {}
+ */
+}
diff --git a/src/android/support/v7/mms/pdu/EncodedStringValue.java b/src/android/support/v7/mms/pdu/EncodedStringValue.java
new file mode 100644
index 0000000..d8fcacf
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/EncodedStringValue.java
@@ -0,0 +1,283 @@
+/*
+ * Copyright (C) 2007-2008 Esmertec AG.
+ * Copyright (C) 2007-2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+import android.util.Log;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+
+/**
+ * Encoded-string-value = Text-string | Value-length Char-set Text-string
+ */
+public class EncodedStringValue implements Cloneable {
+ private static final String TAG = "EncodedStringValue";
+ private static final boolean DEBUG = false;
+ private static final boolean LOCAL_LOGV = false;
+
+ /**
+ * The Char-set value.
+ */
+ private int mCharacterSet;
+
+ /**
+ * The Text-string value.
+ */
+ private byte[] mData;
+
+ /**
+ * Constructor.
+ *
+ * @param charset the Char-set value
+ * @param data the Text-string value
+ * @throws NullPointerException if Text-string value is null.
+ */
+ public EncodedStringValue(int charset, byte[] data) {
+ // TODO: CharSet needs to be validated against MIBEnum.
+ if(null == data) {
+ throw new NullPointerException("EncodedStringValue: Text-string is null.");
+ }
+
+ mCharacterSet = charset;
+ mData = new byte[data.length];
+ System.arraycopy(data, 0, mData, 0, data.length);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param data the Text-string value
+ * @throws NullPointerException if Text-string value is null.
+ */
+ public EncodedStringValue(byte[] data) {
+ this(CharacterSets.DEFAULT_CHARSET, data);
+ }
+
+ public EncodedStringValue(String data) {
+ try {
+ mData = data.getBytes(CharacterSets.DEFAULT_CHARSET_NAME);
+ mCharacterSet = CharacterSets.DEFAULT_CHARSET;
+ } catch (UnsupportedEncodingException e) {
+ Log.e(TAG, "Default encoding must be supported.", e);
+ }
+ }
+
+ /**
+ * Get Char-set value.
+ *
+ * @return the value
+ */
+ public int getCharacterSet() {
+ return mCharacterSet;
+ }
+
+ /**
+ * Set Char-set value.
+ *
+ * @param charset the Char-set value
+ */
+ public void setCharacterSet(int charset) {
+ // TODO: CharSet needs to be validated against MIBEnum.
+ mCharacterSet = charset;
+ }
+
+ /**
+ * Get Text-string value.
+ *
+ * @return the value
+ */
+ public byte[] getTextString() {
+ byte[] byteArray = new byte[mData.length];
+
+ System.arraycopy(mData, 0, byteArray, 0, mData.length);
+ return byteArray;
+ }
+
+ /**
+ * Set Text-string value.
+ *
+ * @param textString the Text-string value
+ * @throws NullPointerException if Text-string value is null.
+ */
+ public void setTextString(byte[] textString) {
+ if(null == textString) {
+ throw new NullPointerException("EncodedStringValue: Text-string is null.");
+ }
+
+ mData = new byte[textString.length];
+ System.arraycopy(textString, 0, mData, 0, textString.length);
+ }
+
+ /**
+ * Convert this object to a {@link java.lang.String}. If the encoding of
+ * the EncodedStringValue is null or unsupported, it will be
+ * treated as iso-8859-1 encoding.
+ *
+ * @return The decoded String.
+ */
+ public String getString() {
+ if (CharacterSets.ANY_CHARSET == mCharacterSet) {
+ return new String(mData); // system default encoding.
+ } else {
+ try {
+ String name = CharacterSets.getMimeName(mCharacterSet);
+ return new String(mData, name);
+ } catch (UnsupportedEncodingException e) {
+ if (LOCAL_LOGV) {
+ Log.v(TAG, e.getMessage(), e);
+ }
+ try {
+ return new String(mData, CharacterSets.MIMENAME_ISO_8859_1);
+ } catch (UnsupportedEncodingException _) {
+ return new String(mData); // system default encoding.
+ }
+ }
+ }
+ }
+
+ /**
+ * Append to Text-string.
+ *
+ * @param textString the textString to append
+ * @throws NullPointerException if the text String is null
+ * or an IOException occured.
+ */
+ public void appendTextString(byte[] textString) {
+ if(null == textString) {
+ throw new NullPointerException("Text-string is null.");
+ }
+
+ if(null == mData) {
+ mData = new byte[textString.length];
+ System.arraycopy(textString, 0, mData, 0, textString.length);
+ } else {
+ ByteArrayOutputStream newTextString = new ByteArrayOutputStream();
+ try {
+ newTextString.write(mData);
+ newTextString.write(textString);
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new NullPointerException(
+ "appendTextString: failed when write a new Text-string");
+ }
+
+ mData = newTextString.toByteArray();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see java.lang.Object#clone()
+ */
+ @Override
+ public Object clone() throws CloneNotSupportedException {
+ super.clone();
+ int len = mData.length;
+ byte[] dstBytes = new byte[len];
+ System.arraycopy(mData, 0, dstBytes, 0, len);
+
+ try {
+ return new EncodedStringValue(mCharacterSet, dstBytes);
+ } catch (Exception e) {
+ Log.e(TAG, "failed to clone an EncodedStringValue: " + this);
+ e.printStackTrace();
+ throw new CloneNotSupportedException(e.getMessage());
+ }
+ }
+
+ /**
+ * Split this encoded string around matches of the given pattern.
+ *
+ * @param pattern the delimiting pattern
+ * @return the array of encoded strings computed by splitting this encoded
+ * string around matches of the given pattern
+ */
+ public EncodedStringValue[] split(String pattern) {
+ String[] temp = getString().split(pattern);
+ EncodedStringValue[] ret = new EncodedStringValue[temp.length];
+ for (int i = 0; i < ret.length; ++i) {
+ try {
+ ret[i] = new EncodedStringValue(mCharacterSet,
+ temp[i].getBytes());
+ } catch (NullPointerException _) {
+ // Can't arrive here
+ return null;
+ }
+ }
+ return ret;
+ }
+
+ /**
+ * Extract an EncodedStringValue[] from a given String.
+ */
+ public static EncodedStringValue[] extract(String src) {
+ String[] values = src.split(";");
+
+ ArrayList list = new ArrayList();
+ for (int i = 0; i < values.length; i++) {
+ if (values[i].length() > 0) {
+ list.add(new EncodedStringValue(values[i]));
+ }
+ }
+
+ int len = list.size();
+ if (len > 0) {
+ return list.toArray(new EncodedStringValue[len]);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Concatenate an EncodedStringValue[] into a single String.
+ */
+ public static String concat(EncodedStringValue[] addr) {
+ StringBuilder sb = new StringBuilder();
+ int maxIndex = addr.length - 1;
+ for (int i = 0; i <= maxIndex; i++) {
+ sb.append(addr[i].getString());
+ if (i < maxIndex) {
+ sb.append(";");
+ }
+ }
+
+ return sb.toString();
+ }
+
+ public static EncodedStringValue copy(EncodedStringValue value) {
+ if (value == null) {
+ return null;
+ }
+
+ return new EncodedStringValue(value.mCharacterSet, value.mData);
+ }
+
+ public static EncodedStringValue[] encodeStrings(String[] array) {
+ int count = array.length;
+ if (count > 0) {
+ EncodedStringValue[] encodedArray = new EncodedStringValue[count];
+ for (int i = 0; i < count; i++) {
+ encodedArray[i] = new EncodedStringValue(array[i]);
+ }
+ return encodedArray;
+ }
+ return null;
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/GenericPdu.java b/src/android/support/v7/mms/pdu/GenericPdu.java
new file mode 100644
index 0000000..2f0d167
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/GenericPdu.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+public class GenericPdu {
+ /**
+ * The headers of pdu.
+ */
+ PduHeaders mPduHeaders = null;
+
+ /**
+ * Constructor.
+ */
+ public GenericPdu() {
+ mPduHeaders = new PduHeaders();
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param headers Headers for this PDU.
+ */
+ GenericPdu(PduHeaders headers) {
+ mPduHeaders = headers;
+ }
+
+ /**
+ * Get the headers of this PDU.
+ *
+ * @return A PduHeaders of this PDU.
+ */
+ PduHeaders getPduHeaders() {
+ return mPduHeaders;
+ }
+
+ /**
+ * Get X-Mms-Message-Type field value.
+ *
+ * @return the X-Mms-Report-Allowed value
+ */
+ public int getMessageType() {
+ return mPduHeaders.getOctet(PduHeaders.MESSAGE_TYPE);
+ }
+
+ /**
+ * Set X-Mms-Message-Type field value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ * RuntimeException if field's value is not Octet.
+ */
+ public void setMessageType(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.MESSAGE_TYPE);
+ }
+
+ /**
+ * Get X-Mms-MMS-Version field value.
+ *
+ * @return the X-Mms-MMS-Version value
+ */
+ public int getMmsVersion() {
+ return mPduHeaders.getOctet(PduHeaders.MMS_VERSION);
+ }
+
+ /**
+ * Set X-Mms-MMS-Version field value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ * RuntimeException if field's value is not Octet.
+ */
+ public void setMmsVersion(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.MMS_VERSION);
+ }
+
+ /**
+ * Get From value.
+ * From-value = Value-length
+ * (Address-present-token Encoded-string-value | Insert-address-token)
+ *
+ * @return the value
+ */
+ public EncodedStringValue getFrom() {
+ return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
+ }
+
+ /**
+ * Set From value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setFrom(EncodedStringValue value) {
+ mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/InvalidHeaderValueException.java b/src/android/support/v7/mms/pdu/InvalidHeaderValueException.java
new file mode 100644
index 0000000..4b1de02
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/InvalidHeaderValueException.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+/**
+ * Thrown when an invalid header value was set.
+ */
+public class InvalidHeaderValueException extends MmsException {
+ private static final long serialVersionUID = -2053384496042052262L;
+
+ /**
+ * Constructs an InvalidHeaderValueException with no detailed message.
+ */
+ public InvalidHeaderValueException() {
+ super();
+ }
+
+ /**
+ * Constructs an InvalidHeaderValueException with the specified detailed message.
+ *
+ * @param message the detailed message.
+ */
+ public InvalidHeaderValueException(String message) {
+ super(message);
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/MmsException.java b/src/android/support/v7/mms/pdu/MmsException.java
new file mode 100644
index 0000000..1fd1a02
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/MmsException.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+/**
+ * A generic exception that is thrown by the Mms client.
+ */
+public class MmsException extends Exception {
+ private static final long serialVersionUID = -7323249827281485390L;
+
+ /**
+ * Creates a new MmsException.
+ */
+ public MmsException() {
+ super();
+ }
+
+ /**
+ * Creates a new MmsException with the specified detail message.
+ *
+ * @param message the detail message.
+ */
+ public MmsException(String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new MmsException with the specified cause.
+ *
+ * @param cause the cause.
+ */
+ public MmsException(Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Creates a new MmsException with the specified detail message and cause.
+ *
+ * @param message the detail message.
+ * @param cause the cause.
+ */
+ public MmsException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/MultimediaMessagePdu.java b/src/android/support/v7/mms/pdu/MultimediaMessagePdu.java
new file mode 100644
index 0000000..12f3b6d
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/MultimediaMessagePdu.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+/**
+ * Multimedia message PDU.
+ */
+public class MultimediaMessagePdu extends GenericPdu{
+ /**
+ * The body.
+ */
+ private PduBody mMessageBody;
+
+ /**
+ * Constructor.
+ */
+ public MultimediaMessagePdu() {
+ super();
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param header the header of this PDU
+ * @param body the body of this PDU
+ */
+ public MultimediaMessagePdu(PduHeaders header, PduBody body) {
+ super(header);
+ mMessageBody = body;
+ }
+
+ /**
+ * Constructor with given headers.
+ *
+ * @param headers Headers for this PDU.
+ */
+ MultimediaMessagePdu(PduHeaders headers) {
+ super(headers);
+ }
+
+ /**
+ * Get body of the PDU.
+ *
+ * @return the body
+ */
+ public PduBody getBody() {
+ return mMessageBody;
+ }
+
+ /**
+ * Set body of the PDU.
+ *
+ * @param body the body
+ */
+ public void setBody(PduBody body) {
+ mMessageBody = body;
+ }
+
+ /**
+ * Get subject.
+ *
+ * @return the value
+ */
+ public EncodedStringValue getSubject() {
+ return mPduHeaders.getEncodedStringValue(PduHeaders.SUBJECT);
+ }
+
+ /**
+ * Set subject.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setSubject(EncodedStringValue value) {
+ mPduHeaders.setEncodedStringValue(value, PduHeaders.SUBJECT);
+ }
+
+ /**
+ * Get To value.
+ *
+ * @return the value
+ */
+ public EncodedStringValue[] getTo() {
+ return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
+ }
+
+ /**
+ * Add a "To" value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void addTo(EncodedStringValue value) {
+ mPduHeaders.appendEncodedStringValue(value, PduHeaders.TO);
+ }
+
+ /**
+ * Get X-Mms-Priority value.
+ *
+ * @return the value
+ */
+ public int getPriority() {
+ return mPduHeaders.getOctet(PduHeaders.PRIORITY);
+ }
+
+ /**
+ * Set X-Mms-Priority value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setPriority(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.PRIORITY);
+ }
+
+ /**
+ * Get Date value.
+ *
+ * @return the value
+ */
+ public long getDate() {
+ return mPduHeaders.getLongInteger(PduHeaders.DATE);
+ }
+
+ /**
+ * Set Date value in seconds.
+ *
+ * @param value the value
+ */
+ public void setDate(long value) {
+ mPduHeaders.setLongInteger(value, PduHeaders.DATE);
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/NotificationInd.java b/src/android/support/v7/mms/pdu/NotificationInd.java
new file mode 100644
index 0000000..16aa23d
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/NotificationInd.java
@@ -0,0 +1,283 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+/**
+ * M-Notification.ind PDU.
+ */
+public class NotificationInd extends GenericPdu {
+ /**
+ * Empty constructor.
+ * Since the Pdu corresponding to this class is constructed
+ * by the Proxy-Relay server, this class is only instantiated
+ * by the Pdu Parser.
+ *
+ * @throws InvalidHeaderValueException if error occurs.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public NotificationInd() throws InvalidHeaderValueException {
+ super();
+ setMessageType(PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND);
+ }
+
+ /**
+ * Constructor with given headers.
+ *
+ * @param headers Headers for this PDU.
+ */
+ NotificationInd(PduHeaders headers) {
+ super(headers);
+ }
+
+ /**
+ * Get X-Mms-Content-Class Value.
+ *
+ * @return the value
+ */
+ public int getContentClass() {
+ return mPduHeaders.getOctet(PduHeaders.CONTENT_CLASS);
+ }
+
+ /**
+ * Set X-Mms-Content-Class Value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public void setContentClass(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.CONTENT_CLASS);
+ }
+
+ /**
+ * Get X-Mms-Content-Location value.
+ * When used in a PDU other than M-Mbox-Delete.conf and M-Delete.conf:
+ * Content-location-value = Uri-value
+ *
+ * @return the value
+ */
+ public byte[] getContentLocation() {
+ return mPduHeaders.getTextString(PduHeaders.CONTENT_LOCATION);
+ }
+
+ /**
+ * Set X-Mms-Content-Location value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public void setContentLocation(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.CONTENT_LOCATION);
+ }
+
+ /**
+ * Get X-Mms-Expiry value.
+ *
+ * Expiry-value = Value-length
+ * (Absolute-token Date-value | Relative-token Delta-seconds-value)
+ *
+ * @return the value
+ */
+ public long getExpiry() {
+ return mPduHeaders.getLongInteger(PduHeaders.EXPIRY);
+ }
+
+ /**
+ * Set X-Mms-Expiry value.
+ *
+ * @param value the value
+ * @throws RuntimeException if an undeclared error occurs.
+ */
+ public void setExpiry(long value) {
+ mPduHeaders.setLongInteger(value, PduHeaders.EXPIRY);
+ }
+
+ /**
+ * Get From value.
+ * From-value = Value-length
+ * (Address-present-token Encoded-string-value | Insert-address-token)
+ *
+ * @return the value
+ */
+ public EncodedStringValue getFrom() {
+ return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
+ }
+
+ /**
+ * Set From value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public void setFrom(EncodedStringValue value) {
+ mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
+ }
+
+ /**
+ * Get X-Mms-Message-Class value.
+ * Message-class-value = Class-identifier | Token-text
+ * Class-identifier = Personal | Advertisement | Informational | Auto
+ *
+ * @return the value
+ */
+ public byte[] getMessageClass() {
+ return mPduHeaders.getTextString(PduHeaders.MESSAGE_CLASS);
+ }
+
+ /**
+ * Set X-Mms-Message-Class value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public void setMessageClass(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.MESSAGE_CLASS);
+ }
+
+ /**
+ * Get X-Mms-Message-Size value.
+ * Message-size-value = Long-integer
+ *
+ * @return the value
+ */
+ public long getMessageSize() {
+ return mPduHeaders.getLongInteger(PduHeaders.MESSAGE_SIZE);
+ }
+
+ /**
+ * Set X-Mms-Message-Size value.
+ *
+ * @param value the value
+ * @throws RuntimeException if an undeclared error occurs.
+ */
+ public void setMessageSize(long value) {
+ mPduHeaders.setLongInteger(value, PduHeaders.MESSAGE_SIZE);
+ }
+
+ /**
+ * Get subject.
+ *
+ * @return the value
+ */
+ public EncodedStringValue getSubject() {
+ return mPduHeaders.getEncodedStringValue(PduHeaders.SUBJECT);
+ }
+
+ /**
+ * Set subject.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public void setSubject(EncodedStringValue value) {
+ mPduHeaders.setEncodedStringValue(value, PduHeaders.SUBJECT);
+ }
+
+ /**
+ * Get X-Mms-Transaction-Id.
+ *
+ * @return the value
+ */
+ public byte[] getTransactionId() {
+ return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
+ }
+
+ /**
+ * Set X-Mms-Transaction-Id.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public void setTransactionId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
+ }
+
+ /**
+ * Get X-Mms-Delivery-Report Value.
+ *
+ * @return the value
+ */
+ public int getDeliveryReport() {
+ return mPduHeaders.getOctet(PduHeaders.DELIVERY_REPORT);
+ }
+
+ /**
+ * Set X-Mms-Delivery-Report Value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public void setDeliveryReport(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.DELIVERY_REPORT);
+ }
+
+ /*
+ * Optional, not supported header fields:
+ *
+ * public byte[] getApplicId() {return null;}
+ * public void setApplicId(byte[] value) {}
+ *
+ * public byte[] getAuxApplicId() {return null;}
+ * public void getAuxApplicId(byte[] value) {}
+ *
+ * public byte getDrmContent() {return 0x00;}
+ * public void setDrmContent(byte value) {}
+ *
+ * public byte getDistributionIndicator() {return 0x00;}
+ * public void setDistributionIndicator(byte value) {}
+ *
+ * public ElementDescriptorValue getElementDescriptor() {return null;}
+ * public void getElementDescriptor(ElementDescriptorValue value) {}
+ *
+ * public byte getPriority() {return 0x00;}
+ * public void setPriority(byte value) {}
+ *
+ * public byte getRecommendedRetrievalMode() {return 0x00;}
+ * public void setRecommendedRetrievalMode(byte value) {}
+ *
+ * public byte getRecommendedRetrievalModeText() {return 0x00;}
+ * public void setRecommendedRetrievalModeText(byte value) {}
+ *
+ * public byte[] getReplaceId() {return 0x00;}
+ * public void setReplaceId(byte[] value) {}
+ *
+ * public byte[] getReplyApplicId() {return 0x00;}
+ * public void setReplyApplicId(byte[] value) {}
+ *
+ * public byte getReplyCharging() {return 0x00;}
+ * public void setReplyCharging(byte value) {}
+ *
+ * public byte getReplyChargingDeadline() {return 0x00;}
+ * public void setReplyChargingDeadline(byte value) {}
+ *
+ * public byte[] getReplyChargingId() {return 0x00;}
+ * public void setReplyChargingId(byte[] value) {}
+ *
+ * public long getReplyChargingSize() {return 0;}
+ * public void setReplyChargingSize(long value) {}
+ *
+ * public byte getStored() {return 0x00;}
+ * public void setStored(byte value) {}
+ */
+}
diff --git a/src/android/support/v7/mms/pdu/NotifyRespInd.java b/src/android/support/v7/mms/pdu/NotifyRespInd.java
new file mode 100644
index 0000000..cb8e92b
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/NotifyRespInd.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+/**
+ * M-NofifyResp.ind PDU.
+ */
+public class NotifyRespInd extends GenericPdu {
+ /**
+ * Constructor, used when composing a M-NotifyResp.ind pdu.
+ *
+ * @param mmsVersion current version of mms
+ * @param transactionId the transaction-id value
+ * @param status the status value
+ * @throws InvalidHeaderValueException if parameters are invalid.
+ * NullPointerException if transactionId is null.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public NotifyRespInd(int mmsVersion,
+ byte[] transactionId,
+ int status) throws InvalidHeaderValueException {
+ super();
+ setMessageType(PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND);
+ setMmsVersion(mmsVersion);
+ setTransactionId(transactionId);
+ setStatus(status);
+ }
+
+ /**
+ * Constructor with given headers.
+ *
+ * @param headers Headers for this PDU.
+ */
+ NotifyRespInd(PduHeaders headers) {
+ super(headers);
+ }
+
+ /**
+ * Get X-Mms-Report-Allowed field value.
+ *
+ * @return the X-Mms-Report-Allowed value
+ */
+ public int getReportAllowed() {
+ return mPduHeaders.getOctet(PduHeaders.REPORT_ALLOWED);
+ }
+
+ /**
+ * Set X-Mms-Report-Allowed field value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public void setReportAllowed(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.REPORT_ALLOWED);
+ }
+
+ /**
+ * Set X-Mms-Status field value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public void setStatus(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.STATUS);
+ }
+
+ /**
+ * GetX-Mms-Status field value.
+ *
+ * @return the X-Mms-Status value
+ */
+ public int getStatus() {
+ return mPduHeaders.getOctet(PduHeaders.STATUS);
+ }
+
+ /**
+ * Get X-Mms-Transaction-Id field value.
+ *
+ * @return the X-Mms-Report-Allowed value
+ */
+ public byte[] getTransactionId() {
+ return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
+ }
+
+ /**
+ * Set X-Mms-Transaction-Id field value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ * RuntimeException if an undeclared error occurs.
+ */
+ public void setTransactionId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/PduBody.java b/src/android/support/v7/mms/pdu/PduBody.java
new file mode 100644
index 0000000..9d983fc
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/PduBody.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
+
+public class PduBody {
+ private Vector mParts = null;
+
+ private Map mPartMapByContentId = null;
+ private Map mPartMapByContentLocation = null;
+ private Map mPartMapByName = null;
+ private Map mPartMapByFileName = null;
+
+ /**
+ * Constructor.
+ */
+ public PduBody() {
+ mParts = new Vector();
+
+ mPartMapByContentId = new HashMap();
+ mPartMapByContentLocation = new HashMap();
+ mPartMapByName = new HashMap();
+ mPartMapByFileName = new HashMap();
+ }
+
+ private void putPartToMaps(PduPart part) {
+ // Put part to mPartMapByContentId.
+ byte[] contentId = part.getContentId();
+ if(null != contentId) {
+ mPartMapByContentId.put(new String(contentId), part);
+ }
+
+ // Put part to mPartMapByContentLocation.
+ byte[] contentLocation = part.getContentLocation();
+ if(null != contentLocation) {
+ String clc = new String(contentLocation);
+ mPartMapByContentLocation.put(clc, part);
+ }
+
+ // Put part to mPartMapByName.
+ byte[] name = part.getName();
+ if(null != name) {
+ String clc = new String(name);
+ mPartMapByName.put(clc, part);
+ }
+
+ // Put part to mPartMapByFileName.
+ byte[] fileName = part.getFilename();
+ if(null != fileName) {
+ String clc = new String(fileName);
+ mPartMapByFileName.put(clc, part);
+ }
+ }
+
+ /**
+ * Appends the specified part to the end of this body.
+ *
+ * @param part part to be appended
+ * @return true when success, false when fail
+ * @throws NullPointerException when part is null
+ */
+ public boolean addPart(PduPart part) {
+ if(null == part) {
+ throw new NullPointerException();
+ }
+
+ putPartToMaps(part);
+ return mParts.add(part);
+ }
+
+ /**
+ * Inserts the specified part at the specified position.
+ *
+ * @param index index at which the specified part is to be inserted
+ * @param part part to be inserted
+ * @throws NullPointerException when part is null
+ */
+ public void addPart(int index, PduPart part) {
+ if(null == part) {
+ throw new NullPointerException();
+ }
+
+ putPartToMaps(part);
+ mParts.add(index, part);
+ }
+
+ /**
+ * Removes the part at the specified position.
+ *
+ * @param index index of the part to return
+ * @return part at the specified index
+ */
+ public PduPart removePart(int index) {
+ return mParts.remove(index);
+ }
+
+ /**
+ * Remove all of the parts.
+ */
+ public void removeAll() {
+ mParts.clear();
+ }
+
+ /**
+ * Get the part at the specified position.
+ *
+ * @param index index of the part to return
+ * @return part at the specified index
+ */
+ public PduPart getPart(int index) {
+ return mParts.get(index);
+ }
+
+ /**
+ * Get the index of the specified part.
+ *
+ * @param part the part object
+ * @return index the index of the first occurrence of the part in this body
+ */
+ public int getPartIndex(PduPart part) {
+ return mParts.indexOf(part);
+ }
+
+ /**
+ * Get the number of parts.
+ *
+ * @return the number of parts
+ */
+ public int getPartsNum() {
+ return mParts.size();
+ }
+
+ /**
+ * Get pdu part by content id.
+ *
+ * @param cid the value of content id.
+ * @return the pdu part.
+ */
+ public PduPart getPartByContentId(String cid) {
+ return mPartMapByContentId.get(cid);
+ }
+
+ /**
+ * Get pdu part by Content-Location. Content-Location of part is
+ * the same as filename and name(param of content-type).
+ *
+ * @param contentLocation the content location.
+ * @return the pdu part.
+ */
+ public PduPart getPartByContentLocation(String contentLocation) {
+ return mPartMapByContentLocation.get(contentLocation);
+ }
+
+ /**
+ * Get pdu part by name.
+ *
+ * @param name the value of filename.
+ * @return the pdu part.
+ */
+ public PduPart getPartByName(String name) {
+ return mPartMapByName.get(name);
+ }
+
+ /**
+ * Get pdu part by filename.
+ *
+ * @param filename the value of filename.
+ * @return the pdu part.
+ */
+ public PduPart getPartByFileName(String filename) {
+ return mPartMapByFileName.get(filename);
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/PduContentTypes.java b/src/android/support/v7/mms/pdu/PduContentTypes.java
new file mode 100644
index 0000000..7cd0ecf
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/PduContentTypes.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+public class PduContentTypes {
+ /**
+ * All content types. From:
+ * http://www.openmobilealliance.org/tech/omna/omna-wsp-content-type.htm
+ */
+ static final String[] contentTypes = {
+ "*/*", /* 0x00 */
+ "text/*", /* 0x01 */
+ "text/html", /* 0x02 */
+ "text/plain", /* 0x03 */
+ "text/x-hdml", /* 0x04 */
+ "text/x-ttml", /* 0x05 */
+ "text/x-vCalendar", /* 0x06 */
+ "text/x-vCard", /* 0x07 */
+ "text/vnd.wap.wml", /* 0x08 */
+ "text/vnd.wap.wmlscript", /* 0x09 */
+ "text/vnd.wap.wta-event", /* 0x0A */
+ "multipart/*", /* 0x0B */
+ "multipart/mixed", /* 0x0C */
+ "multipart/form-data", /* 0x0D */
+ "multipart/byterantes", /* 0x0E */
+ "multipart/alternative", /* 0x0F */
+ "application/*", /* 0x10 */
+ "application/java-vm", /* 0x11 */
+ "application/x-www-form-urlencoded", /* 0x12 */
+ "application/x-hdmlc", /* 0x13 */
+ "application/vnd.wap.wmlc", /* 0x14 */
+ "application/vnd.wap.wmlscriptc", /* 0x15 */
+ "application/vnd.wap.wta-eventc", /* 0x16 */
+ "application/vnd.wap.uaprof", /* 0x17 */
+ "application/vnd.wap.wtls-ca-certificate", /* 0x18 */
+ "application/vnd.wap.wtls-user-certificate", /* 0x19 */
+ "application/x-x509-ca-cert", /* 0x1A */
+ "application/x-x509-user-cert", /* 0x1B */
+ "image/*", /* 0x1C */
+ "image/gif", /* 0x1D */
+ "image/jpeg", /* 0x1E */
+ "image/tiff", /* 0x1F */
+ "image/png", /* 0x20 */
+ "image/vnd.wap.wbmp", /* 0x21 */
+ "application/vnd.wap.multipart.*", /* 0x22 */
+ "application/vnd.wap.multipart.mixed", /* 0x23 */
+ "application/vnd.wap.multipart.form-data", /* 0x24 */
+ "application/vnd.wap.multipart.byteranges", /* 0x25 */
+ "application/vnd.wap.multipart.alternative", /* 0x26 */
+ "application/xml", /* 0x27 */
+ "text/xml", /* 0x28 */
+ "application/vnd.wap.wbxml", /* 0x29 */
+ "application/x-x968-cross-cert", /* 0x2A */
+ "application/x-x968-ca-cert", /* 0x2B */
+ "application/x-x968-user-cert", /* 0x2C */
+ "text/vnd.wap.si", /* 0x2D */
+ "application/vnd.wap.sic", /* 0x2E */
+ "text/vnd.wap.sl", /* 0x2F */
+ "application/vnd.wap.slc", /* 0x30 */
+ "text/vnd.wap.co", /* 0x31 */
+ "application/vnd.wap.coc", /* 0x32 */
+ "application/vnd.wap.multipart.related", /* 0x33 */
+ "application/vnd.wap.sia", /* 0x34 */
+ "text/vnd.wap.connectivity-xml", /* 0x35 */
+ "application/vnd.wap.connectivity-wbxml", /* 0x36 */
+ "application/pkcs7-mime", /* 0x37 */
+ "application/vnd.wap.hashed-certificate", /* 0x38 */
+ "application/vnd.wap.signed-certificate", /* 0x39 */
+ "application/vnd.wap.cert-response", /* 0x3A */
+ "application/xhtml+xml", /* 0x3B */
+ "application/wml+xml", /* 0x3C */
+ "text/css", /* 0x3D */
+ "application/vnd.wap.mms-message", /* 0x3E */
+ "application/vnd.wap.rollover-certificate", /* 0x3F */
+ "application/vnd.wap.locc+wbxml", /* 0x40 */
+ "application/vnd.wap.loc+xml", /* 0x41 */
+ "application/vnd.syncml.dm+wbxml", /* 0x42 */
+ "application/vnd.syncml.dm+xml", /* 0x43 */
+ "application/vnd.syncml.notification", /* 0x44 */
+ "application/vnd.wap.xhtml+xml", /* 0x45 */
+ "application/vnd.wv.csp.cir", /* 0x46 */
+ "application/vnd.oma.dd+xml", /* 0x47 */
+ "application/vnd.oma.drm.message", /* 0x48 */
+ "application/vnd.oma.drm.content", /* 0x49 */
+ "application/vnd.oma.drm.rights+xml", /* 0x4A */
+ "application/vnd.oma.drm.rights+wbxml", /* 0x4B */
+ "application/vnd.wv.csp+xml", /* 0x4C */
+ "application/vnd.wv.csp+wbxml", /* 0x4D */
+ "application/vnd.syncml.ds.notification", /* 0x4E */
+ "audio/*", /* 0x4F */
+ "video/*", /* 0x50 */
+ "application/vnd.oma.dd2+xml", /* 0x51 */
+ "application/mikey" /* 0x52 */
+ };
+}
diff --git a/src/android/support/v7/mms/pdu/PduHeaders.java b/src/android/support/v7/mms/pdu/PduHeaders.java
new file mode 100644
index 0000000..0271e58
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/PduHeaders.java
@@ -0,0 +1,719 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class PduHeaders {
+ /**
+ * All pdu header fields.
+ */
+ public static final int BCC = 0x81;
+ public static final int CC = 0x82;
+ public static final int CONTENT_LOCATION = 0x83;
+ public static final int CONTENT_TYPE = 0x84;
+ public static final int DATE = 0x85;
+ public static final int DELIVERY_REPORT = 0x86;
+ public static final int DELIVERY_TIME = 0x87;
+ public static final int EXPIRY = 0x88;
+ public static final int FROM = 0x89;
+ public static final int MESSAGE_CLASS = 0x8A;
+ public static final int MESSAGE_ID = 0x8B;
+ public static final int MESSAGE_TYPE = 0x8C;
+ public static final int MMS_VERSION = 0x8D;
+ public static final int MESSAGE_SIZE = 0x8E;
+ public static final int PRIORITY = 0x8F;
+
+ public static final int READ_REPLY = 0x90;
+ public static final int READ_REPORT = 0x90;
+ public static final int REPORT_ALLOWED = 0x91;
+ public static final int RESPONSE_STATUS = 0x92;
+ public static final int RESPONSE_TEXT = 0x93;
+ public static final int SENDER_VISIBILITY = 0x94;
+ public static final int STATUS = 0x95;
+ public static final int SUBJECT = 0x96;
+ public static final int TO = 0x97;
+ public static final int TRANSACTION_ID = 0x98;
+ public static final int RETRIEVE_STATUS = 0x99;
+ public static final int RETRIEVE_TEXT = 0x9A;
+ public static final int READ_STATUS = 0x9B;
+ public static final int REPLY_CHARGING = 0x9C;
+ public static final int REPLY_CHARGING_DEADLINE = 0x9D;
+ public static final int REPLY_CHARGING_ID = 0x9E;
+ public static final int REPLY_CHARGING_SIZE = 0x9F;
+
+ public static final int PREVIOUSLY_SENT_BY = 0xA0;
+ public static final int PREVIOUSLY_SENT_DATE = 0xA1;
+ public static final int STORE = 0xA2;
+ public static final int MM_STATE = 0xA3;
+ public static final int MM_FLAGS = 0xA4;
+ public static final int STORE_STATUS = 0xA5;
+ public static final int STORE_STATUS_TEXT = 0xA6;
+ public static final int STORED = 0xA7;
+ public static final int ATTRIBUTES = 0xA8;
+ public static final int TOTALS = 0xA9;
+ public static final int MBOX_TOTALS = 0xAA;
+ public static final int QUOTAS = 0xAB;
+ public static final int MBOX_QUOTAS = 0xAC;
+ public static final int MESSAGE_COUNT = 0xAD;
+ public static final int CONTENT = 0xAE;
+ public static final int START = 0xAF;
+
+ public static final int ADDITIONAL_HEADERS = 0xB0;
+ public static final int DISTRIBUTION_INDICATOR = 0xB1;
+ public static final int ELEMENT_DESCRIPTOR = 0xB2;
+ public static final int LIMIT = 0xB3;
+ public static final int RECOMMENDED_RETRIEVAL_MODE = 0xB4;
+ public static final int RECOMMENDED_RETRIEVAL_MODE_TEXT = 0xB5;
+ public static final int STATUS_TEXT = 0xB6;
+ public static final int APPLIC_ID = 0xB7;
+ public static final int REPLY_APPLIC_ID = 0xB8;
+ public static final int AUX_APPLIC_ID = 0xB9;
+ public static final int CONTENT_CLASS = 0xBA;
+ public static final int DRM_CONTENT = 0xBB;
+ public static final int ADAPTATION_ALLOWED = 0xBC;
+ public static final int REPLACE_ID = 0xBD;
+ public static final int CANCEL_ID = 0xBE;
+ public static final int CANCEL_STATUS = 0xBF;
+
+ /**
+ * X-Mms-Message-Type field types.
+ */
+ public static final int MESSAGE_TYPE_SEND_REQ = 0x80;
+ public static final int MESSAGE_TYPE_SEND_CONF = 0x81;
+ public static final int MESSAGE_TYPE_NOTIFICATION_IND = 0x82;
+ public static final int MESSAGE_TYPE_NOTIFYRESP_IND = 0x83;
+ public static final int MESSAGE_TYPE_RETRIEVE_CONF = 0x84;
+ public static final int MESSAGE_TYPE_ACKNOWLEDGE_IND = 0x85;
+ public static final int MESSAGE_TYPE_DELIVERY_IND = 0x86;
+ public static final int MESSAGE_TYPE_READ_REC_IND = 0x87;
+ public static final int MESSAGE_TYPE_READ_ORIG_IND = 0x88;
+ public static final int MESSAGE_TYPE_FORWARD_REQ = 0x89;
+ public static final int MESSAGE_TYPE_FORWARD_CONF = 0x8A;
+ public static final int MESSAGE_TYPE_MBOX_STORE_REQ = 0x8B;
+ public static final int MESSAGE_TYPE_MBOX_STORE_CONF = 0x8C;
+ public static final int MESSAGE_TYPE_MBOX_VIEW_REQ = 0x8D;
+ public static final int MESSAGE_TYPE_MBOX_VIEW_CONF = 0x8E;
+ public static final int MESSAGE_TYPE_MBOX_UPLOAD_REQ = 0x8F;
+ public static final int MESSAGE_TYPE_MBOX_UPLOAD_CONF = 0x90;
+ public static final int MESSAGE_TYPE_MBOX_DELETE_REQ = 0x91;
+ public static final int MESSAGE_TYPE_MBOX_DELETE_CONF = 0x92;
+ public static final int MESSAGE_TYPE_MBOX_DESCR = 0x93;
+ public static final int MESSAGE_TYPE_DELETE_REQ = 0x94;
+ public static final int MESSAGE_TYPE_DELETE_CONF = 0x95;
+ public static final int MESSAGE_TYPE_CANCEL_REQ = 0x96;
+ public static final int MESSAGE_TYPE_CANCEL_CONF = 0x97;
+
+ /**
+ * X-Mms-Delivery-Report |
+ * X-Mms-Read-Report |
+ * X-Mms-Report-Allowed |
+ * X-Mms-Sender-Visibility |
+ * X-Mms-Store |
+ * X-Mms-Stored |
+ * X-Mms-Totals |
+ * X-Mms-Quotas |
+ * X-Mms-Distribution-Indicator |
+ * X-Mms-DRM-Content |
+ * X-Mms-Adaptation-Allowed |
+ * field types.
+ */
+ public static final int VALUE_YES = 0x80;
+ public static final int VALUE_NO = 0x81;
+
+ /**
+ * Delivery-Time |
+ * Expiry and Reply-Charging-Deadline |
+ * field type components.
+ */
+ public static final int VALUE_ABSOLUTE_TOKEN = 0x80;
+ public static final int VALUE_RELATIVE_TOKEN = 0x81;
+
+ /**
+ * X-Mms-MMS-Version field types.
+ */
+ public static final int MMS_VERSION_1_3 = ((1 << 4) | 3);
+ public static final int MMS_VERSION_1_2 = ((1 << 4) | 2);
+ public static final int MMS_VERSION_1_1 = ((1 << 4) | 1);
+ public static final int MMS_VERSION_1_0 = ((1 << 4) | 0);
+
+ // Current version is 1.2.
+ public static final int CURRENT_MMS_VERSION = MMS_VERSION_1_2;
+
+ /**
+ * From field type components.
+ */
+ public static final int FROM_ADDRESS_PRESENT_TOKEN = 0x80;
+ public static final int FROM_INSERT_ADDRESS_TOKEN = 0x81;
+
+ public static final String FROM_ADDRESS_PRESENT_TOKEN_STR = "address-present-token";
+ public static final String FROM_INSERT_ADDRESS_TOKEN_STR = "insert-address-token";
+
+ /**
+ * X-Mms-Status Field.
+ */
+ public static final int STATUS_EXPIRED = 0x80;
+ public static final int STATUS_RETRIEVED = 0x81;
+ public static final int STATUS_REJECTED = 0x82;
+ public static final int STATUS_DEFERRED = 0x83;
+ public static final int STATUS_UNRECOGNIZED = 0x84;
+ public static final int STATUS_INDETERMINATE = 0x85;
+ public static final int STATUS_FORWARDED = 0x86;
+ public static final int STATUS_UNREACHABLE = 0x87;
+
+ /**
+ * MM-Flags field type components.
+ */
+ public static final int MM_FLAGS_ADD_TOKEN = 0x80;
+ public static final int MM_FLAGS_REMOVE_TOKEN = 0x81;
+ public static final int MM_FLAGS_FILTER_TOKEN = 0x82;
+
+ /**
+ * X-Mms-Message-Class field types.
+ */
+ public static final int MESSAGE_CLASS_PERSONAL = 0x80;
+ public static final int MESSAGE_CLASS_ADVERTISEMENT = 0x81;
+ public static final int MESSAGE_CLASS_INFORMATIONAL = 0x82;
+ public static final int MESSAGE_CLASS_AUTO = 0x83;
+
+ public static final String MESSAGE_CLASS_PERSONAL_STR = "personal";
+ public static final String MESSAGE_CLASS_ADVERTISEMENT_STR = "advertisement";
+ public static final String MESSAGE_CLASS_INFORMATIONAL_STR = "informational";
+ public static final String MESSAGE_CLASS_AUTO_STR = "auto";
+
+ /**
+ * X-Mms-Priority field types.
+ */
+ public static final int PRIORITY_LOW = 0x80;
+ public static final int PRIORITY_NORMAL = 0x81;
+ public static final int PRIORITY_HIGH = 0x82;
+
+ /**
+ * X-Mms-Response-Status field types.
+ */
+ public static final int RESPONSE_STATUS_OK = 0x80;
+ public static final int RESPONSE_STATUS_ERROR_UNSPECIFIED = 0x81;
+ public static final int RESPONSE_STATUS_ERROR_SERVICE_DENIED = 0x82;
+
+ public static final int RESPONSE_STATUS_ERROR_MESSAGE_FORMAT_CORRUPT = 0x83;
+ public static final int RESPONSE_STATUS_ERROR_SENDING_ADDRESS_UNRESOLVED = 0x84;
+
+ public static final int RESPONSE_STATUS_ERROR_MESSAGE_NOT_FOUND = 0x85;
+ public static final int RESPONSE_STATUS_ERROR_NETWORK_PROBLEM = 0x86;
+ public static final int RESPONSE_STATUS_ERROR_CONTENT_NOT_ACCEPTED = 0x87;
+ public static final int RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE = 0x88;
+ public static final int RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE = 0xC0;
+
+ public static final int RESPONSE_STATUS_ERROR_TRANSIENT_SENDNG_ADDRESS_UNRESOLVED = 0xC1;
+ public static final int RESPONSE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND = 0xC2;
+ public static final int RESPONSE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM = 0xC3;
+ public static final int RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS = 0xC4;
+
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_FAILURE = 0xE0;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_SERVICE_DENIED = 0xE1;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT = 0xE2;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_SENDING_ADDRESS_UNRESOLVED = 0xE3;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND = 0xE4;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_CONTENT_NOT_ACCEPTED = 0xE5;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_LIMITATIONS_NOT_MET = 0xE6;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_REQUEST_NOT_ACCEPTED = 0xE6;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_FORWARDING_DENIED = 0xE8;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_NOT_SUPPORTED = 0xE9;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_ADDRESS_HIDING_NOT_SUPPORTED = 0xEA;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID = 0xEB;
+ public static final int RESPONSE_STATUS_ERROR_PERMANENT_END = 0xFF;
+
+ /**
+ * X-Mms-Retrieve-Status field types.
+ */
+ public static final int RETRIEVE_STATUS_OK = 0x80;
+ public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE = 0xC0;
+ public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND = 0xC1;
+ public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM = 0xC2;
+ public static final int RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE = 0xE0;
+ public static final int RETRIEVE_STATUS_ERROR_PERMANENT_SERVICE_DENIED = 0xE1;
+ public static final int RETRIEVE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND = 0xE2;
+ public static final int RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED = 0xE3;
+ public static final int RETRIEVE_STATUS_ERROR_END = 0xFF;
+
+ /**
+ * X-Mms-Sender-Visibility field types.
+ */
+ public static final int SENDER_VISIBILITY_HIDE = 0x80;
+ public static final int SENDER_VISIBILITY_SHOW = 0x81;
+
+ /**
+ * X-Mms-Read-Status field types.
+ */
+ public static final int READ_STATUS_READ = 0x80;
+ public static final int READ_STATUS__DELETED_WITHOUT_BEING_READ = 0x81;
+
+ /**
+ * X-Mms-Cancel-Status field types.
+ */
+ public static final int CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED = 0x80;
+ public static final int CANCEL_STATUS_REQUEST_CORRUPTED = 0x81;
+
+ /**
+ * X-Mms-Reply-Charging field types.
+ */
+ public static final int REPLY_CHARGING_REQUESTED = 0x80;
+ public static final int REPLY_CHARGING_REQUESTED_TEXT_ONLY = 0x81;
+ public static final int REPLY_CHARGING_ACCEPTED = 0x82;
+ public static final int REPLY_CHARGING_ACCEPTED_TEXT_ONLY = 0x83;
+
+ /**
+ * X-Mms-MM-State field types.
+ */
+ public static final int MM_STATE_DRAFT = 0x80;
+ public static final int MM_STATE_SENT = 0x81;
+ public static final int MM_STATE_NEW = 0x82;
+ public static final int MM_STATE_RETRIEVED = 0x83;
+ public static final int MM_STATE_FORWARDED = 0x84;
+
+ /**
+ * X-Mms-Recommended-Retrieval-Mode field types.
+ */
+ public static final int RECOMMENDED_RETRIEVAL_MODE_MANUAL = 0x80;
+
+ /**
+ * X-Mms-Content-Class field types.
+ */
+ public static final int CONTENT_CLASS_TEXT = 0x80;
+ public static final int CONTENT_CLASS_IMAGE_BASIC = 0x81;
+ public static final int CONTENT_CLASS_IMAGE_RICH = 0x82;
+ public static final int CONTENT_CLASS_VIDEO_BASIC = 0x83;
+ public static final int CONTENT_CLASS_VIDEO_RICH = 0x84;
+ public static final int CONTENT_CLASS_MEGAPIXEL = 0x85;
+ public static final int CONTENT_CLASS_CONTENT_BASIC = 0x86;
+ public static final int CONTENT_CLASS_CONTENT_RICH = 0x87;
+
+ /**
+ * X-Mms-Store-Status field types.
+ */
+ public static final int STORE_STATUS_SUCCESS = 0x80;
+ public static final int STORE_STATUS_ERROR_TRANSIENT_FAILURE = 0xC0;
+ public static final int STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM = 0xC1;
+ public static final int STORE_STATUS_ERROR_PERMANENT_FAILURE = 0xE0;
+ public static final int STORE_STATUS_ERROR_PERMANENT_SERVICE_DENIED = 0xE1;
+ public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT = 0xE2;
+ public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND = 0xE3;
+ public static final int STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL = 0xE4;
+ public static final int STORE_STATUS_ERROR_END = 0xFF;
+
+ /**
+ * The map contains the value of all headers.
+ */
+ private HashMap mHeaderMap = null;
+
+ /**
+ * Constructor of PduHeaders.
+ */
+ public PduHeaders() {
+ mHeaderMap = new HashMap();
+ }
+
+ /**
+ * Get octet value by header field.
+ *
+ * @param field the field
+ * @return the octet value of the pdu header
+ * with specified header field. Return 0 if
+ * the value is not set.
+ */
+ protected int getOctet(int field) {
+ Integer octet = (Integer) mHeaderMap.get(field);
+ if (null == octet) {
+ return 0;
+ }
+
+ return octet;
+ }
+
+ /**
+ * Set octet value to pdu header by header field.
+ *
+ * @param value the value
+ * @param field the field
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ protected void setOctet(int value, int field)
+ throws InvalidHeaderValueException{
+ /**
+ * Check whether this field can be set for specific
+ * header and check validity of the field.
+ */
+ switch (field) {
+ case REPORT_ALLOWED:
+ case ADAPTATION_ALLOWED:
+ case DELIVERY_REPORT:
+ case DRM_CONTENT:
+ case DISTRIBUTION_INDICATOR:
+ case QUOTAS:
+ case READ_REPORT:
+ case STORE:
+ case STORED:
+ case TOTALS:
+ case SENDER_VISIBILITY:
+ if ((VALUE_YES != value) && (VALUE_NO != value)) {
+ // Invalid value.
+ throw new InvalidHeaderValueException("Invalid Octet value!");
+ }
+ break;
+ case READ_STATUS:
+ if ((READ_STATUS_READ != value) &&
+ (READ_STATUS__DELETED_WITHOUT_BEING_READ != value)) {
+ // Invalid value.
+ throw new InvalidHeaderValueException("Invalid Octet value!");
+ }
+ break;
+ case CANCEL_STATUS:
+ if ((CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED != value) &&
+ (CANCEL_STATUS_REQUEST_CORRUPTED != value)) {
+ // Invalid value.
+ throw new InvalidHeaderValueException("Invalid Octet value!");
+ }
+ break;
+ case PRIORITY:
+ if ((value < PRIORITY_LOW) || (value > PRIORITY_HIGH)) {
+ // Invalid value.
+ throw new InvalidHeaderValueException("Invalid Octet value!");
+ }
+ break;
+ case STATUS:
+ if ((value < STATUS_EXPIRED) || (value > STATUS_UNREACHABLE)) {
+ // Invalid value.
+ throw new InvalidHeaderValueException("Invalid Octet value!");
+ }
+ break;
+ case REPLY_CHARGING:
+ if ((value < REPLY_CHARGING_REQUESTED)
+ || (value > REPLY_CHARGING_ACCEPTED_TEXT_ONLY)) {
+ // Invalid value.
+ throw new InvalidHeaderValueException("Invalid Octet value!");
+ }
+ break;
+ case MM_STATE:
+ if ((value < MM_STATE_DRAFT) || (value > MM_STATE_FORWARDED)) {
+ // Invalid value.
+ throw new InvalidHeaderValueException("Invalid Octet value!");
+ }
+ break;
+ case RECOMMENDED_RETRIEVAL_MODE:
+ if (RECOMMENDED_RETRIEVAL_MODE_MANUAL != value) {
+ // Invalid value.
+ throw new InvalidHeaderValueException("Invalid Octet value!");
+ }
+ break;
+ case CONTENT_CLASS:
+ if ((value < CONTENT_CLASS_TEXT)
+ || (value > CONTENT_CLASS_CONTENT_RICH)) {
+ // Invalid value.
+ throw new InvalidHeaderValueException("Invalid Octet value!");
+ }
+ break;
+ case RETRIEVE_STATUS:
+ // According to oma-ts-mms-enc-v1_3, section 7.3.50, we modify the invalid value.
+ if ((value > RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM) &&
+ (value < RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE)) {
+ value = RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE;
+ } else if ((value > RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED) &&
+ (value <= RETRIEVE_STATUS_ERROR_END)) {
+ value = RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE;
+ } else if ((value < RETRIEVE_STATUS_OK) ||
+ ((value > RETRIEVE_STATUS_OK) &&
+ (value < RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
+ (value > RETRIEVE_STATUS_ERROR_END)) {
+ value = RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE;
+ }
+ break;
+ case STORE_STATUS:
+ // According to oma-ts-mms-enc-v1_3, section 7.3.58, we modify the invalid value.
+ if ((value > STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM) &&
+ (value < STORE_STATUS_ERROR_PERMANENT_FAILURE)) {
+ value = STORE_STATUS_ERROR_TRANSIENT_FAILURE;
+ } else if ((value > STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL) &&
+ (value <= STORE_STATUS_ERROR_END)) {
+ value = STORE_STATUS_ERROR_PERMANENT_FAILURE;
+ } else if ((value < STORE_STATUS_SUCCESS) ||
+ ((value > STORE_STATUS_SUCCESS) &&
+ (value < STORE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
+ (value > STORE_STATUS_ERROR_END)) {
+ value = STORE_STATUS_ERROR_PERMANENT_FAILURE;
+ }
+ break;
+ case RESPONSE_STATUS:
+ // According to oma-ts-mms-enc-v1_3, section 7.3.48, we modify the invalid value.
+ if ((value > RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS) &&
+ (value < RESPONSE_STATUS_ERROR_PERMANENT_FAILURE)) {
+ value = RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE;
+ } else if (((value > RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID) &&
+ (value <= RESPONSE_STATUS_ERROR_PERMANENT_END)) ||
+ (value < RESPONSE_STATUS_OK) ||
+ ((value > RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE) &&
+ (value < RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
+ (value > RESPONSE_STATUS_ERROR_PERMANENT_END)) {
+ value = RESPONSE_STATUS_ERROR_PERMANENT_FAILURE;
+ }
+ break;
+ case MMS_VERSION:
+ if ((value < MMS_VERSION_1_0)|| (value > MMS_VERSION_1_3)) {
+ value = CURRENT_MMS_VERSION; // Current version is the default value.
+ }
+ break;
+ case MESSAGE_TYPE:
+ if ((value < MESSAGE_TYPE_SEND_REQ) || (value > MESSAGE_TYPE_CANCEL_CONF)) {
+ // Invalid value.
+ throw new InvalidHeaderValueException("Invalid Octet value!");
+ }
+ break;
+ default:
+ // This header value should not be Octect.
+ throw new RuntimeException("Invalid header field!");
+ }
+ mHeaderMap.put(field, value);
+ }
+
+ /**
+ * Get TextString value by header field.
+ *
+ * @param field the field
+ * @return the TextString value of the pdu header
+ * with specified header field
+ */
+ protected byte[] getTextString(int field) {
+ return (byte[]) mHeaderMap.get(field);
+ }
+
+ /**
+ * Set TextString value to pdu header by header field.
+ *
+ * @param value the value
+ * @param field the field
+ * @return the TextString value of the pdu header
+ * with specified header field
+ * @throws NullPointerException if the value is null.
+ */
+ protected void setTextString(byte[] value, int field) {
+ /**
+ * Check whether this field can be set for specific
+ * header and check validity of the field.
+ */
+ if (null == value) {
+ throw new NullPointerException();
+ }
+
+ switch (field) {
+ case TRANSACTION_ID:
+ case REPLY_CHARGING_ID:
+ case AUX_APPLIC_ID:
+ case APPLIC_ID:
+ case REPLY_APPLIC_ID:
+ case MESSAGE_ID:
+ case REPLACE_ID:
+ case CANCEL_ID:
+ case CONTENT_LOCATION:
+ case MESSAGE_CLASS:
+ case CONTENT_TYPE:
+ break;
+ default:
+ // This header value should not be Text-String.
+ throw new RuntimeException("Invalid header field!");
+ }
+ mHeaderMap.put(field, value);
+ }
+
+ /**
+ * Get EncodedStringValue value by header field.
+ *
+ * @param field the field
+ * @return the EncodedStringValue value of the pdu header
+ * with specified header field
+ */
+ protected EncodedStringValue getEncodedStringValue(int field) {
+ return (EncodedStringValue) mHeaderMap.get(field);
+ }
+
+ /**
+ * Get TO, CC or BCC header value.
+ *
+ * @param field the field
+ * @return the EncodeStringValue array of the pdu header
+ * with specified header field
+ */
+ protected EncodedStringValue[] getEncodedStringValues(int field) {
+ ArrayList list =
+ (ArrayList) mHeaderMap.get(field);
+ if (null == list) {
+ return null;
+ }
+ EncodedStringValue[] values = new EncodedStringValue[list.size()];
+ return list.toArray(values);
+ }
+
+ /**
+ * Set EncodedStringValue value to pdu header by header field.
+ *
+ * @param value the value
+ * @param field the field
+ * @return the EncodedStringValue value of the pdu header
+ * with specified header field
+ * @throws NullPointerException if the value is null.
+ */
+ protected void setEncodedStringValue(EncodedStringValue value, int field) {
+ /**
+ * Check whether this field can be set for specific
+ * header and check validity of the field.
+ */
+ if (null == value) {
+ throw new NullPointerException();
+ }
+
+ switch (field) {
+ case SUBJECT:
+ case RECOMMENDED_RETRIEVAL_MODE_TEXT:
+ case RETRIEVE_TEXT:
+ case STATUS_TEXT:
+ case STORE_STATUS_TEXT:
+ case RESPONSE_TEXT:
+ case FROM:
+ case PREVIOUSLY_SENT_BY:
+ case MM_FLAGS:
+ break;
+ default:
+ // This header value should not be Encoded-String-Value.
+ throw new RuntimeException("Invalid header field!");
+ }
+
+ mHeaderMap.put(field, value);
+ }
+
+ /**
+ * Set TO, CC or BCC header value.
+ *
+ * @param value the value
+ * @param field the field
+ * @return the EncodedStringValue value array of the pdu header
+ * with specified header field
+ * @throws NullPointerException if the value is null.
+ */
+ protected void setEncodedStringValues(EncodedStringValue[] value, int field) {
+ /**
+ * Check whether this field can be set for specific
+ * header and check validity of the field.
+ */
+ if (null == value) {
+ throw new NullPointerException();
+ }
+
+ switch (field) {
+ case BCC:
+ case CC:
+ case TO:
+ break;
+ default:
+ // This header value should not be Encoded-String-Value.
+ throw new RuntimeException("Invalid header field!");
+ }
+
+ ArrayList list = new ArrayList();
+ for (int i = 0; i < value.length; i++) {
+ list.add(value[i]);
+ }
+ mHeaderMap.put(field, list);
+ }
+
+ /**
+ * Append one EncodedStringValue to another.
+ *
+ * @param value the EncodedStringValue to append
+ * @param field the field
+ * @throws NullPointerException if the value is null.
+ */
+ protected void appendEncodedStringValue(EncodedStringValue value,
+ int field) {
+ if (null == value) {
+ throw new NullPointerException();
+ }
+
+ switch (field) {
+ case BCC:
+ case CC:
+ case TO:
+ break;
+ default:
+ throw new RuntimeException("Invalid header field!");
+ }
+
+ ArrayList list =
+ (ArrayList) mHeaderMap.get(field);
+ if (null == list) {
+ list = new ArrayList();
+ }
+ list.add(value);
+ mHeaderMap.put(field, list);
+ }
+
+ /**
+ * Get LongInteger value by header field.
+ *
+ * @param field the field
+ * @return the LongInteger value of the pdu header
+ * with specified header field. if return -1, the
+ * field is not existed in pdu header.
+ */
+ protected long getLongInteger(int field) {
+ Long longInteger = (Long) mHeaderMap.get(field);
+ if (null == longInteger) {
+ return -1;
+ }
+
+ return longInteger.longValue();
+ }
+
+ /**
+ * Set LongInteger value to pdu header by header field.
+ *
+ * @param value the value
+ * @param field the field
+ */
+ protected void setLongInteger(long value, int field) {
+ /**
+ * Check whether this field can be set for specific
+ * header and check validity of the field.
+ */
+ switch (field) {
+ case DATE:
+ case REPLY_CHARGING_SIZE:
+ case MESSAGE_SIZE:
+ case MESSAGE_COUNT:
+ case START:
+ case LIMIT:
+ case DELIVERY_TIME:
+ case EXPIRY:
+ case REPLY_CHARGING_DEADLINE:
+ case PREVIOUSLY_SENT_DATE:
+ break;
+ default:
+ // This header value should not be LongInteger.
+ throw new RuntimeException("Invalid header field!");
+ }
+ mHeaderMap.put(field, value);
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/PduParser.java b/src/android/support/v7/mms/pdu/PduParser.java
new file mode 100755
index 0000000..7d30df5
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/PduParser.java
@@ -0,0 +1,2008 @@
+/*
+ * Copyright (C) 2007-2008 Esmertec AG.
+ * Copyright (C) 2007-2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+import android.util.Log;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+import java.util.HashMap;
+
+public class PduParser {
+ /**
+ * The next are WAP values defined in WSP specification.
+ */
+ private static final int QUOTE = 127;
+ private static final int LENGTH_QUOTE = 31;
+ private static final int TEXT_MIN = 32;
+ private static final int TEXT_MAX = 127;
+ private static final int SHORT_INTEGER_MAX = 127;
+ private static final int SHORT_LENGTH_MAX = 30;
+ private static final int LONG_INTEGER_LENGTH_MAX = 8;
+ private static final int QUOTED_STRING_FLAG = 34;
+ private static final int END_STRING_FLAG = 0x00;
+ //The next two are used by the interface "parseWapString" to
+ //distinguish Text-String and Quoted-String.
+ private static final int TYPE_TEXT_STRING = 0;
+ private static final int TYPE_QUOTED_STRING = 1;
+ private static final int TYPE_TOKEN_STRING = 2;
+
+ /**
+ * Specify the part position.
+ */
+ private static final int THE_FIRST_PART = 0;
+ private static final int THE_LAST_PART = 1;
+
+ /**
+ * The pdu data.
+ */
+ private ByteArrayInputStream mPduDataStream = null;
+
+ /**
+ * Store pdu headers
+ */
+ private PduHeaders mHeaders = null;
+
+ /**
+ * Store pdu parts.
+ */
+ private PduBody mBody = null;
+
+ /**
+ * Store the "type" parameter in "Content-Type" header field.
+ */
+ private static byte[] mTypeParam = null;
+
+ /**
+ * Store the "start" parameter in "Content-Type" header field.
+ */
+ private static byte[] mStartParam = null;
+
+ /**
+ * The log tag.
+ */
+ private static final String LOG_TAG = "PduParser";
+ private static final boolean DEBUG = false;
+ private static final boolean LOCAL_LOGV = false;
+
+ /**
+ * Whether to parse content-disposition part header
+ */
+ private final boolean mParseContentDisposition;
+
+ /**
+ * Constructor.
+ *
+ * @param pduDataStream pdu data to be parsed
+ * @param parseContentDisposition whether to parse the Content-Disposition part header
+ */
+ public PduParser(byte[] pduDataStream, boolean parseContentDisposition) {
+ mPduDataStream = new ByteArrayInputStream(pduDataStream);
+ mParseContentDisposition = parseContentDisposition;
+ }
+
+ /**
+ * Parse the pdu.
+ *
+ * @return the pdu structure if parsing successfully.
+ * null if parsing error happened or mandatory fields are not set.
+ */
+ public GenericPdu parse(){
+ if (mPduDataStream == null) {
+ return null;
+ }
+
+ /* parse headers */
+ mHeaders = parseHeaders(mPduDataStream);
+ if (null == mHeaders) {
+ // Parse headers failed.
+ return null;
+ }
+
+ /* get the message type */
+ int messageType = mHeaders.getOctet(PduHeaders.MESSAGE_TYPE);
+
+ /* check mandatory header fields */
+ if (false == checkMandatoryHeader(mHeaders)) {
+ log("check mandatory headers failed!");
+ return null;
+ }
+
+ if ((PduHeaders.MESSAGE_TYPE_SEND_REQ == messageType) ||
+ (PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF == messageType)) {
+ /* need to parse the parts */
+ mBody = parseParts(mPduDataStream);
+ if (null == mBody) {
+ // Parse parts failed.
+ return null;
+ }
+ }
+
+ switch (messageType) {
+ case PduHeaders.MESSAGE_TYPE_SEND_REQ:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parse: MESSAGE_TYPE_SEND_REQ");
+ }
+ SendReq sendReq = new SendReq(mHeaders, mBody);
+ return sendReq;
+ case PduHeaders.MESSAGE_TYPE_SEND_CONF:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parse: MESSAGE_TYPE_SEND_CONF");
+ }
+ SendConf sendConf = new SendConf(mHeaders);
+ return sendConf;
+ case PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parse: MESSAGE_TYPE_NOTIFICATION_IND");
+ }
+ NotificationInd notificationInd =
+ new NotificationInd(mHeaders);
+ return notificationInd;
+ case PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parse: MESSAGE_TYPE_NOTIFYRESP_IND");
+ }
+ NotifyRespInd notifyRespInd =
+ new NotifyRespInd(mHeaders);
+ return notifyRespInd;
+ case PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parse: MESSAGE_TYPE_RETRIEVE_CONF");
+ }
+ RetrieveConf retrieveConf =
+ new RetrieveConf(mHeaders, mBody);
+
+ byte[] contentType = retrieveConf.getContentType();
+ if (null == contentType) {
+ return null;
+ }
+ String ctTypeStr = new String(contentType);
+ if (ctTypeStr.equals(ContentType.MULTIPART_MIXED)
+ || ctTypeStr.equals(ContentType.MULTIPART_RELATED)
+ || ctTypeStr.equals(ContentType.MULTIPART_ALTERNATIVE)) {
+ // The MMS content type must be "application/vnd.wap.multipart.mixed"
+ // or "application/vnd.wap.multipart.related"
+ // or "application/vnd.wap.multipart.alternative"
+ return retrieveConf;
+ } else if (ctTypeStr.equals(ContentType.MULTIPART_ALTERNATIVE)) {
+ // "application/vnd.wap.multipart.alternative"
+ // should take only the first part.
+ PduPart firstPart = mBody.getPart(0);
+ mBody.removeAll();
+ mBody.addPart(0, firstPart);
+ return retrieveConf;
+ }
+ return null;
+ case PduHeaders.MESSAGE_TYPE_DELIVERY_IND:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parse: MESSAGE_TYPE_DELIVERY_IND");
+ }
+ DeliveryInd deliveryInd =
+ new DeliveryInd(mHeaders);
+ return deliveryInd;
+ case PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parse: MESSAGE_TYPE_ACKNOWLEDGE_IND");
+ }
+ AcknowledgeInd acknowledgeInd =
+ new AcknowledgeInd(mHeaders);
+ return acknowledgeInd;
+ case PduHeaders.MESSAGE_TYPE_READ_ORIG_IND:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parse: MESSAGE_TYPE_READ_ORIG_IND");
+ }
+ ReadOrigInd readOrigInd =
+ new ReadOrigInd(mHeaders);
+ return readOrigInd;
+ case PduHeaders.MESSAGE_TYPE_READ_REC_IND:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parse: MESSAGE_TYPE_READ_REC_IND");
+ }
+ ReadRecInd readRecInd =
+ new ReadRecInd(mHeaders);
+ return readRecInd;
+ default:
+ log("Parser doesn't support this message type in this version!");
+ return null;
+ }
+ }
+
+ /**
+ * Parse pdu headers.
+ *
+ * @param pduDataStream pdu data input stream
+ * @return headers in PduHeaders structure, null when parse fail
+ */
+ protected PduHeaders parseHeaders(ByteArrayInputStream pduDataStream){
+ if (pduDataStream == null) {
+ return null;
+ }
+ boolean keepParsing = true;
+ PduHeaders headers = new PduHeaders();
+
+ while (keepParsing && (pduDataStream.available() > 0)) {
+ pduDataStream.mark(1);
+ int headerField = extractByteValue(pduDataStream);
+ /* parse custom text header */
+ if ((headerField >= TEXT_MIN) && (headerField <= TEXT_MAX)) {
+ pduDataStream.reset();
+ byte [] bVal = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "TextHeader: " + new String(bVal));
+ }
+ /* we should ignore it at the moment */
+ continue;
+ }
+ switch (headerField) {
+ case PduHeaders.MESSAGE_TYPE:
+ {
+ int messageType = extractByteValue(pduDataStream);
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: messageType: " + messageType);
+ }
+ switch (messageType) {
+ // We don't support these kind of messages now.
+ case PduHeaders.MESSAGE_TYPE_FORWARD_REQ:
+ case PduHeaders.MESSAGE_TYPE_FORWARD_CONF:
+ case PduHeaders.MESSAGE_TYPE_MBOX_STORE_REQ:
+ case PduHeaders.MESSAGE_TYPE_MBOX_STORE_CONF:
+ case PduHeaders.MESSAGE_TYPE_MBOX_VIEW_REQ:
+ case PduHeaders.MESSAGE_TYPE_MBOX_VIEW_CONF:
+ case PduHeaders.MESSAGE_TYPE_MBOX_UPLOAD_REQ:
+ case PduHeaders.MESSAGE_TYPE_MBOX_UPLOAD_CONF:
+ case PduHeaders.MESSAGE_TYPE_MBOX_DELETE_REQ:
+ case PduHeaders.MESSAGE_TYPE_MBOX_DELETE_CONF:
+ case PduHeaders.MESSAGE_TYPE_MBOX_DESCR:
+ case PduHeaders.MESSAGE_TYPE_DELETE_REQ:
+ case PduHeaders.MESSAGE_TYPE_DELETE_CONF:
+ case PduHeaders.MESSAGE_TYPE_CANCEL_REQ:
+ case PduHeaders.MESSAGE_TYPE_CANCEL_CONF:
+ return null;
+ }
+ try {
+ headers.setOctet(messageType, headerField);
+ } catch(InvalidHeaderValueException e) {
+ log("Set invalid Octet value: " + messageType +
+ " into the header filed: " + headerField);
+ return null;
+ } catch(RuntimeException e) {
+ log(headerField + "is not Octet header field!");
+ return null;
+ }
+ break;
+ }
+ /* Octect value */
+ case PduHeaders.REPORT_ALLOWED:
+ case PduHeaders.ADAPTATION_ALLOWED:
+ case PduHeaders.DELIVERY_REPORT:
+ case PduHeaders.DRM_CONTENT:
+ case PduHeaders.DISTRIBUTION_INDICATOR:
+ case PduHeaders.QUOTAS:
+ case PduHeaders.READ_REPORT:
+ case PduHeaders.STORE:
+ case PduHeaders.STORED:
+ case PduHeaders.TOTALS:
+ case PduHeaders.SENDER_VISIBILITY:
+ case PduHeaders.READ_STATUS:
+ case PduHeaders.CANCEL_STATUS:
+ case PduHeaders.PRIORITY:
+ case PduHeaders.STATUS:
+ case PduHeaders.REPLY_CHARGING:
+ case PduHeaders.MM_STATE:
+ case PduHeaders.RECOMMENDED_RETRIEVAL_MODE:
+ case PduHeaders.CONTENT_CLASS:
+ case PduHeaders.RETRIEVE_STATUS:
+ case PduHeaders.STORE_STATUS:
+ /**
+ * The following field has a different value when
+ * used in the M-Mbox-Delete.conf and M-Delete.conf PDU.
+ * For now we ignore this fact, since we do not support these PDUs
+ */
+ case PduHeaders.RESPONSE_STATUS:
+ {
+ int value = extractByteValue(pduDataStream);
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: byte: " + headerField + " value: " +
+ value);
+ }
+
+ try {
+ headers.setOctet(value, headerField);
+ } catch(InvalidHeaderValueException e) {
+ log("Set invalid Octet value: " + value +
+ " into the header filed: " + headerField);
+ return null;
+ } catch(RuntimeException e) {
+ log(headerField + "is not Octet header field!");
+ return null;
+ }
+ break;
+ }
+
+ /* Long-Integer */
+ case PduHeaders.DATE:
+ case PduHeaders.REPLY_CHARGING_SIZE:
+ case PduHeaders.MESSAGE_SIZE:
+ {
+ try {
+ long value = parseLongInteger(pduDataStream);
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: longint: " + headerField + " value: " +
+ value);
+ }
+ headers.setLongInteger(value, headerField);
+ } catch(RuntimeException e) {
+ log(headerField + "is not Long-Integer header field!");
+ return null;
+ }
+ break;
+ }
+
+ /* Integer-Value */
+ case PduHeaders.MESSAGE_COUNT:
+ case PduHeaders.START:
+ case PduHeaders.LIMIT:
+ {
+ try {
+ long value = parseIntegerValue(pduDataStream);
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: int: " + headerField + " value: " +
+ value);
+ }
+ headers.setLongInteger(value, headerField);
+ } catch(RuntimeException e) {
+ log(headerField + "is not Long-Integer header field!");
+ return null;
+ }
+ break;
+ }
+
+ /* Text-String */
+ case PduHeaders.TRANSACTION_ID:
+ case PduHeaders.REPLY_CHARGING_ID:
+ case PduHeaders.AUX_APPLIC_ID:
+ case PduHeaders.APPLIC_ID:
+ case PduHeaders.REPLY_APPLIC_ID:
+ /**
+ * The next three header fields are email addresses
+ * as defined in RFC2822,
+ * not including the characters "<" and ">"
+ */
+ case PduHeaders.MESSAGE_ID:
+ case PduHeaders.REPLACE_ID:
+ case PduHeaders.CANCEL_ID:
+ /**
+ * The following field has a different value when
+ * used in the M-Mbox-Delete.conf and M-Delete.conf PDU.
+ * For now we ignore this fact, since we do not support these PDUs
+ */
+ case PduHeaders.CONTENT_LOCATION:
+ {
+ byte[] value = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ if (null != value) {
+ try {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: string: " + headerField + " value: " +
+ new String(value));
+ }
+ headers.setTextString(value, headerField);
+ } catch(NullPointerException e) {
+ log("null pointer error!");
+ } catch(RuntimeException e) {
+ log(headerField + "is not Text-String header field!");
+ return null;
+ }
+ }
+ break;
+ }
+
+ /* Encoded-string-value */
+ case PduHeaders.SUBJECT:
+ case PduHeaders.RECOMMENDED_RETRIEVAL_MODE_TEXT:
+ case PduHeaders.RETRIEVE_TEXT:
+ case PduHeaders.STATUS_TEXT:
+ case PduHeaders.STORE_STATUS_TEXT:
+ /* the next one is not support
+ * M-Mbox-Delete.conf and M-Delete.conf now */
+ case PduHeaders.RESPONSE_TEXT:
+ {
+ EncodedStringValue value =
+ parseEncodedStringValue(pduDataStream);
+ if (null != value) {
+ try {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: encoded string: " + headerField
+ + " value: " + value.getString());
+ }
+ headers.setEncodedStringValue(value, headerField);
+ } catch(NullPointerException e) {
+ log("null pointer error!");
+ } catch (RuntimeException e) {
+ log(headerField + "is not Encoded-String-Value header field!");
+ return null;
+ }
+ }
+ break;
+ }
+
+ /* Addressing model */
+ case PduHeaders.BCC:
+ case PduHeaders.CC:
+ case PduHeaders.TO:
+ {
+ EncodedStringValue value =
+ parseEncodedStringValue(pduDataStream);
+ if (null != value) {
+ byte[] address = value.getTextString();
+ if (null != address) {
+ String str = new String(address);
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: (to/cc/bcc) address: " + headerField
+ + " value: " + str);
+ }
+ int endIndex = str.indexOf("/");
+ if (endIndex > 0) {
+ str = str.substring(0, endIndex);
+ }
+ try {
+ value.setTextString(str.getBytes());
+ } catch(NullPointerException e) {
+ log("null pointer error!");
+ return null;
+ }
+ }
+
+ try {
+ headers.appendEncodedStringValue(value, headerField);
+ } catch(NullPointerException e) {
+ log("null pointer error!");
+ } catch(RuntimeException e) {
+ log(headerField + "is not Encoded-String-Value header field!");
+ return null;
+ }
+ }
+ break;
+ }
+
+ /* Value-length
+ * (Absolute-token Date-value | Relative-token Delta-seconds-value) */
+ case PduHeaders.DELIVERY_TIME:
+ case PduHeaders.EXPIRY:
+ case PduHeaders.REPLY_CHARGING_DEADLINE:
+ {
+ /* parse Value-length */
+ parseValueLength(pduDataStream);
+
+ /* Absolute-token or Relative-token */
+ int token = extractByteValue(pduDataStream);
+
+ /* Date-value or Delta-seconds-value */
+ long timeValue;
+ try {
+ timeValue = parseLongInteger(pduDataStream);
+ } catch(RuntimeException e) {
+ log(headerField + "is not Long-Integer header field!");
+ return null;
+ }
+ if (PduHeaders.VALUE_RELATIVE_TOKEN == token) {
+ /* need to convert the Delta-seconds-value
+ * into Date-value */
+ timeValue = System.currentTimeMillis()/1000 + timeValue;
+ }
+
+ try {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: time value: " + headerField
+ + " value: " + timeValue);
+ }
+ headers.setLongInteger(timeValue, headerField);
+ } catch(RuntimeException e) {
+ log(headerField + "is not Long-Integer header field!");
+ return null;
+ }
+ break;
+ }
+
+ case PduHeaders.FROM: {
+ /* From-value =
+ * Value-length
+ * (Address-present-token Encoded-string-value | Insert-address-token)
+ */
+ EncodedStringValue from = null;
+ parseValueLength(pduDataStream); /* parse value-length */
+
+ /* Address-present-token or Insert-address-token */
+ int fromToken = extractByteValue(pduDataStream);
+
+ /* Address-present-token or Insert-address-token */
+ if (PduHeaders.FROM_ADDRESS_PRESENT_TOKEN == fromToken) {
+ /* Encoded-string-value */
+ from = parseEncodedStringValue(pduDataStream);
+ if (null != from) {
+ byte[] address = from.getTextString();
+ if (null != address) {
+ String str = new String(address);
+ int endIndex = str.indexOf("/");
+ if (endIndex > 0) {
+ str = str.substring(0, endIndex);
+ }
+ try {
+ from.setTextString(str.getBytes());
+ } catch(NullPointerException e) {
+ log("null pointer error!");
+ return null;
+ }
+ }
+ }
+ } else {
+ try {
+ from = new EncodedStringValue(
+ PduHeaders.FROM_INSERT_ADDRESS_TOKEN_STR.getBytes());
+ } catch(NullPointerException e) {
+ log(headerField + "is not Encoded-String-Value header field!");
+ return null;
+ }
+ }
+
+ try {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: from address: " + headerField
+ + " value: " + from.getString());
+ }
+ headers.setEncodedStringValue(from, PduHeaders.FROM);
+ } catch(NullPointerException e) {
+ log("null pointer error!");
+ } catch(RuntimeException e) {
+ log(headerField + "is not Encoded-String-Value header field!");
+ return null;
+ }
+ break;
+ }
+
+ case PduHeaders.MESSAGE_CLASS: {
+ /* Message-class-value = Class-identifier | Token-text */
+ pduDataStream.mark(1);
+ int messageClass = extractByteValue(pduDataStream);
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: MESSAGE_CLASS: " + headerField
+ + " value: " + messageClass);
+ }
+
+ if (messageClass >= PduHeaders.MESSAGE_CLASS_PERSONAL) {
+ /* Class-identifier */
+ try {
+ if (PduHeaders.MESSAGE_CLASS_PERSONAL == messageClass) {
+ headers.setTextString(
+ PduHeaders.MESSAGE_CLASS_PERSONAL_STR.getBytes(),
+ PduHeaders.MESSAGE_CLASS);
+ } else if (PduHeaders.MESSAGE_CLASS_ADVERTISEMENT == messageClass) {
+ headers.setTextString(
+ PduHeaders.MESSAGE_CLASS_ADVERTISEMENT_STR.getBytes(),
+ PduHeaders.MESSAGE_CLASS);
+ } else if (PduHeaders.MESSAGE_CLASS_INFORMATIONAL == messageClass) {
+ headers.setTextString(
+ PduHeaders.MESSAGE_CLASS_INFORMATIONAL_STR.getBytes(),
+ PduHeaders.MESSAGE_CLASS);
+ } else if (PduHeaders.MESSAGE_CLASS_AUTO == messageClass) {
+ headers.setTextString(
+ PduHeaders.MESSAGE_CLASS_AUTO_STR.getBytes(),
+ PduHeaders.MESSAGE_CLASS);
+ }
+ } catch(NullPointerException e) {
+ log("null pointer error!");
+ } catch(RuntimeException e) {
+ log(headerField + "is not Text-String header field!");
+ return null;
+ }
+ } else {
+ /* Token-text */
+ pduDataStream.reset();
+ byte[] messageClassString = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ if (null != messageClassString) {
+ try {
+ headers.setTextString(messageClassString, PduHeaders.MESSAGE_CLASS);
+ } catch(NullPointerException e) {
+ log("null pointer error!");
+ } catch(RuntimeException e) {
+ log(headerField + "is not Text-String header field!");
+ return null;
+ }
+ }
+ }
+ break;
+ }
+
+ case PduHeaders.MMS_VERSION: {
+ int version = parseShortInteger(pduDataStream);
+
+ try {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: MMS_VERSION: " + headerField
+ + " value: " + version);
+ }
+ headers.setOctet(version, PduHeaders.MMS_VERSION);
+ } catch(InvalidHeaderValueException e) {
+ log("Set invalid Octet value: " + version +
+ " into the header filed: " + headerField);
+ return null;
+ } catch(RuntimeException e) {
+ log(headerField + "is not Octet header field!");
+ return null;
+ }
+ break;
+ }
+
+ case PduHeaders.PREVIOUSLY_SENT_BY: {
+ /* Previously-sent-by-value =
+ * Value-length Forwarded-count-value Encoded-string-value */
+ /* parse value-length */
+ parseValueLength(pduDataStream);
+
+ /* parse Forwarded-count-value */
+ try {
+ parseIntegerValue(pduDataStream);
+ } catch(RuntimeException e) {
+ log(headerField + " is not Integer-Value");
+ return null;
+ }
+
+ /* parse Encoded-string-value */
+ EncodedStringValue previouslySentBy =
+ parseEncodedStringValue(pduDataStream);
+ if (null != previouslySentBy) {
+ try {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: PREVIOUSLY_SENT_BY: " + headerField
+ + " value: " + previouslySentBy.getString());
+ }
+ headers.setEncodedStringValue(previouslySentBy,
+ PduHeaders.PREVIOUSLY_SENT_BY);
+ } catch(NullPointerException e) {
+ log("null pointer error!");
+ } catch(RuntimeException e) {
+ log(headerField + "is not Encoded-String-Value header field!");
+ return null;
+ }
+ }
+ break;
+ }
+
+ case PduHeaders.PREVIOUSLY_SENT_DATE: {
+ /* Previously-sent-date-value =
+ * Value-length Forwarded-count-value Date-value */
+ /* parse value-length */
+ parseValueLength(pduDataStream);
+
+ /* parse Forwarded-count-value */
+ try {
+ parseIntegerValue(pduDataStream);
+ } catch(RuntimeException e) {
+ log(headerField + " is not Integer-Value");
+ return null;
+ }
+
+ /* Date-value */
+ try {
+ long perviouslySentDate = parseLongInteger(pduDataStream);
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: PREVIOUSLY_SENT_DATE: " + headerField
+ + " value: " + perviouslySentDate);
+ }
+ headers.setLongInteger(perviouslySentDate,
+ PduHeaders.PREVIOUSLY_SENT_DATE);
+ } catch(RuntimeException e) {
+ log(headerField + "is not Long-Integer header field!");
+ return null;
+ }
+ break;
+ }
+
+ case PduHeaders.MM_FLAGS: {
+ /* MM-flags-value =
+ * Value-length
+ * ( Add-token | Remove-token | Filter-token )
+ * Encoded-string-value
+ */
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: MM_FLAGS: " + headerField
+ + " NOT REALLY SUPPORTED");
+ }
+
+ /* parse Value-length */
+ parseValueLength(pduDataStream);
+
+ /* Add-token | Remove-token | Filter-token */
+ extractByteValue(pduDataStream);
+
+ /* Encoded-string-value */
+ parseEncodedStringValue(pduDataStream);
+
+ /* not store this header filed in "headers",
+ * because now PduHeaders doesn't support it */
+ break;
+ }
+
+ /* Value-length
+ * (Message-total-token | Size-total-token) Integer-Value */
+ case PduHeaders.MBOX_TOTALS:
+ case PduHeaders.MBOX_QUOTAS:
+ {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: MBOX_TOTALS: " + headerField);
+ }
+ /* Value-length */
+ parseValueLength(pduDataStream);
+
+ /* Message-total-token | Size-total-token */
+ extractByteValue(pduDataStream);
+
+ /*Integer-Value*/
+ try {
+ parseIntegerValue(pduDataStream);
+ } catch(RuntimeException e) {
+ log(headerField + " is not Integer-Value");
+ return null;
+ }
+
+ /* not store these headers filed in "headers",
+ because now PduHeaders doesn't support them */
+ break;
+ }
+
+ case PduHeaders.ELEMENT_DESCRIPTOR: {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: ELEMENT_DESCRIPTOR: " + headerField);
+ }
+ parseContentType(pduDataStream, null);
+
+ /* not store this header filed in "headers",
+ because now PduHeaders doesn't support it */
+ break;
+ }
+
+ case PduHeaders.CONTENT_TYPE: {
+ HashMap map =
+ new HashMap();
+ byte[] contentType =
+ parseContentType(pduDataStream, map);
+
+ if (null != contentType) {
+ try {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: CONTENT_TYPE: " + headerField +
+ Arrays.toString(contentType));
+ }
+ headers.setTextString(contentType, PduHeaders.CONTENT_TYPE);
+ } catch(NullPointerException e) {
+ log("null pointer error!");
+ } catch(RuntimeException e) {
+ log(headerField + "is not Text-String header field!");
+ return null;
+ }
+ }
+
+ /* get start parameter */
+ mStartParam = (byte[]) map.get(PduPart.P_START);
+
+ /* get charset parameter */
+ mTypeParam= (byte[]) map.get(PduPart.P_TYPE);
+
+ keepParsing = false;
+ break;
+ }
+
+ case PduHeaders.CONTENT:
+ case PduHeaders.ADDITIONAL_HEADERS:
+ case PduHeaders.ATTRIBUTES:
+ default: {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "parseHeaders: Unknown header: " + headerField);
+ }
+ log("Unknown header");
+ }
+ }
+ }
+
+ return headers;
+ }
+
+ /**
+ * Parse pdu parts.
+ *
+ * @param pduDataStream pdu data input stream
+ * @return parts in PduBody structure
+ */
+ protected PduBody parseParts(ByteArrayInputStream pduDataStream) {
+ if (pduDataStream == null) {
+ return null;
+ }
+
+ int count = parseUnsignedInt(pduDataStream); // get the number of parts
+ PduBody body = new PduBody();
+
+ for (int i = 0 ; i < count ; i++) {
+ int headerLength = parseUnsignedInt(pduDataStream);
+ int dataLength = parseUnsignedInt(pduDataStream);
+ PduPart part = new PduPart();
+ int startPos = pduDataStream.available();
+ if (startPos <= 0) {
+ // Invalid part.
+ return null;
+ }
+
+ /* parse part's content-type */
+ HashMap map = new HashMap();
+ byte[] contentType = parseContentType(pduDataStream, map);
+ if (null != contentType) {
+ part.setContentType(contentType);
+ } else {
+ part.setContentType((PduContentTypes.contentTypes[0]).getBytes()); //"*/*"
+ }
+
+ /* get name parameter */
+ byte[] name = (byte[]) map.get(PduPart.P_NAME);
+ if (null != name) {
+ part.setName(name);
+ }
+
+ /* get charset parameter */
+ Integer charset = (Integer) map.get(PduPart.P_CHARSET);
+ if (null != charset) {
+ part.setCharset(charset);
+ }
+
+ /* parse part's headers */
+ int endPos = pduDataStream.available();
+ int partHeaderLen = headerLength - (startPos - endPos);
+ if (partHeaderLen > 0) {
+ if (false == parsePartHeaders(pduDataStream, part, partHeaderLen)) {
+ // Parse part header faild.
+ return null;
+ }
+ } else if (partHeaderLen < 0) {
+ // Invalid length of content-type.
+ return null;
+ }
+
+ /* FIXME: check content-id, name, filename and content location,
+ * if not set anyone of them, generate a default content-location
+ */
+ if ((null == part.getContentLocation())
+ && (null == part.getName())
+ && (null == part.getFilename())
+ && (null == part.getContentId())) {
+ part.setContentLocation(Long.toOctalString(
+ System.currentTimeMillis()).getBytes());
+ }
+
+ /* get part's data */
+ if (dataLength > 0) {
+ byte[] partData = new byte[dataLength];
+ String partContentType = new String(part.getContentType());
+ pduDataStream.read(partData, 0, dataLength);
+ if (partContentType.equalsIgnoreCase(ContentType.MULTIPART_ALTERNATIVE)) {
+ // parse "multipart/vnd.wap.multipart.alternative".
+ PduBody childBody = parseParts(new ByteArrayInputStream(partData));
+ // take the first part of children.
+ part = childBody.getPart(0);
+ } else {
+ // Check Content-Transfer-Encoding.
+ byte[] partDataEncoding = part.getContentTransferEncoding();
+ if (null != partDataEncoding) {
+ String encoding = new String(partDataEncoding);
+ if (encoding.equalsIgnoreCase(PduPart.P_BASE64)) {
+ // Decode "base64" into "binary".
+ partData = Base64.decodeBase64(partData);
+ } else if (encoding.equalsIgnoreCase(PduPart.P_QUOTED_PRINTABLE)) {
+ // Decode "quoted-printable" into "binary".
+ partData = QuotedPrintable.decodeQuotedPrintable(partData);
+ } else {
+ // "binary" is the default encoding.
+ }
+ }
+ if (null == partData) {
+ log("Decode part data error!");
+ return null;
+ }
+ part.setData(partData);
+ }
+ }
+
+ /* add this part to body */
+ if (THE_FIRST_PART == checkPartPosition(part)) {
+ /* this is the first part */
+ body.addPart(0, part);
+ } else {
+ /* add the part to the end */
+ body.addPart(part);
+ }
+ }
+
+ return body;
+ }
+
+ /**
+ * Log status.
+ *
+ * @param text log information
+ */
+ private static void log(String text) {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, text);
+ }
+ }
+
+ /**
+ * Parse unsigned integer.
+ *
+ * @param pduDataStream pdu data input stream
+ * @return the integer, -1 when failed
+ */
+ protected static int parseUnsignedInt(ByteArrayInputStream pduDataStream) {
+ /**
+ * From wap-230-wsp-20010705-a.pdf
+ * The maximum size of a uintvar is 32 bits.
+ * So it will be encoded in no more than 5 octets.
+ */
+ assert(null != pduDataStream);
+ int result = 0;
+ int temp = pduDataStream.read();
+ if (temp == -1) {
+ return temp;
+ }
+
+ while((temp & 0x80) != 0) {
+ result = result << 7;
+ result |= temp & 0x7F;
+ temp = pduDataStream.read();
+ if (temp == -1) {
+ return temp;
+ }
+ }
+
+ result = result << 7;
+ result |= temp & 0x7F;
+
+ return result;
+ }
+
+ /**
+ * Parse value length.
+ *
+ * @param pduDataStream pdu data input stream
+ * @return the integer
+ */
+ protected static int parseValueLength(ByteArrayInputStream pduDataStream) {
+ /**
+ * From wap-230-wsp-20010705-a.pdf
+ * Value-length = Short-length | (Length-quote Length)
+ * Short-length =
+ * Length-quote =
+ * Length = Uintvar-integer
+ * Uintvar-integer = 1*5 OCTET
+ */
+ assert(null != pduDataStream);
+ int temp = pduDataStream.read();
+ assert(-1 != temp);
+ int first = temp & 0xFF;
+
+ if (first <= SHORT_LENGTH_MAX) {
+ return first;
+ } else if (first == LENGTH_QUOTE) {
+ return parseUnsignedInt(pduDataStream);
+ }
+
+ throw new RuntimeException("Value length > LENGTH_QUOTE!");
+ }
+
+ /**
+ * Parse encoded string value.
+ *
+ * @param pduDataStream pdu data input stream
+ * @return the EncodedStringValue
+ */
+ protected static EncodedStringValue parseEncodedStringValue(ByteArrayInputStream pduDataStream){
+ /**
+ * From OMA-TS-MMS-ENC-V1_3-20050927-C.pdf
+ * Encoded-string-value = Text-string | Value-length Char-set Text-string
+ */
+ assert(null != pduDataStream);
+ pduDataStream.mark(1);
+ EncodedStringValue returnValue = null;
+ int charset = 0;
+ int temp = pduDataStream.read();
+ assert(-1 != temp);
+ int first = temp & 0xFF;
+ if (first == 0) {
+ return new EncodedStringValue("");
+ }
+
+ pduDataStream.reset();
+ if (first < TEXT_MIN) {
+ parseValueLength(pduDataStream);
+
+ charset = parseShortInteger(pduDataStream); //get the "Charset"
+ }
+
+ byte[] textString = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+
+ try {
+ if (0 != charset) {
+ returnValue = new EncodedStringValue(charset, textString);
+ } else {
+ returnValue = new EncodedStringValue(textString);
+ }
+ } catch(Exception e) {
+ return null;
+ }
+
+ return returnValue;
+ }
+
+ /**
+ * Parse Text-String or Quoted-String.
+ *
+ * @param pduDataStream pdu data input stream
+ * @param stringType TYPE_TEXT_STRING or TYPE_QUOTED_STRING
+ * @return the string without End-of-string in byte array
+ */
+ protected static byte[] parseWapString(ByteArrayInputStream pduDataStream,
+ int stringType) {
+ assert(null != pduDataStream);
+ /**
+ * From wap-230-wsp-20010705-a.pdf
+ * Text-string = [Quote] *TEXT End-of-string
+ * If the first character in the TEXT is in the range of 128-255,
+ * a Quote character must precede it.
+ * Otherwise the Quote character must be omitted.
+ * The Quote is not part of the contents.
+ * Quote =
+ * End-of-string =
+ *
+ * Quoted-string = *TEXT End-of-string
+ *
+ * Token-text = Token End-of-string
+ */
+
+ // Mark supposed beginning of Text-string
+ // We will have to mark again if first char is QUOTE or QUOTED_STRING_FLAG
+ pduDataStream.mark(1);
+
+ // Check first char
+ int temp = pduDataStream.read();
+ assert(-1 != temp);
+ if ((TYPE_QUOTED_STRING == stringType) &&
+ (QUOTED_STRING_FLAG == temp)) {
+ // Mark again if QUOTED_STRING_FLAG and ignore it
+ pduDataStream.mark(1);
+ } else if ((TYPE_TEXT_STRING == stringType) &&
+ (QUOTE == temp)) {
+ // Mark again if QUOTE and ignore it
+ pduDataStream.mark(1);
+ } else {
+ // Otherwise go back to origin
+ pduDataStream.reset();
+ }
+
+ // We are now definitely at the beginning of string
+ /**
+ * Return *TOKEN or *TEXT (Text-String without QUOTE,
+ * Quoted-String without QUOTED_STRING_FLAG and without End-of-string)
+ */
+ return getWapString(pduDataStream, stringType);
+ }
+
+ /**
+ * Check TOKEN data defined in RFC2616.
+ * @param ch checking data
+ * @return true when ch is TOKEN, false when ch is not TOKEN
+ */
+ protected static boolean isTokenCharacter(int ch) {
+ /**
+ * Token = 1*
+ * separators = "("(40) | ")"(41) | "<"(60) | ">"(62) | "@"(64)
+ * | ","(44) | ";"(59) | ":"(58) | "\"(92) | <">(34)
+ * | "/"(47) | "["(91) | "]"(93) | "?"(63) | "="(61)
+ * | "{"(123) | "}"(125) | SP(32) | HT(9)
+ * CHAR =
+ * CTL =
+ * SP =
+ * HT =
+ */
+ if((ch < 33) || (ch > 126)) {
+ return false;
+ }
+
+ switch(ch) {
+ case '"': /* '"' */
+ case '(': /* '(' */
+ case ')': /* ')' */
+ case ',': /* ',' */
+ case '/': /* '/' */
+ case ':': /* ':' */
+ case ';': /* ';' */
+ case '<': /* '<' */
+ case '=': /* '=' */
+ case '>': /* '>' */
+ case '?': /* '?' */
+ case '@': /* '@' */
+ case '[': /* '[' */
+ case '\\': /* '\' */
+ case ']': /* ']' */
+ case '{': /* '{' */
+ case '}': /* '}' */
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Check TEXT data defined in RFC2616.
+ * @param ch checking data
+ * @return true when ch is TEXT, false when ch is not TEXT
+ */
+ protected static boolean isText(int ch) {
+ /**
+ * TEXT =
+ * CTL =
+ * LWS = [CRLF] 1*( SP | HT )
+ * CRLF = CR LF
+ * CR =
+ * LF =
+ */
+ if(((ch >= 32) && (ch <= 126)) || ((ch >= 128) && (ch <= 255))) {
+ return true;
+ }
+
+ switch(ch) {
+ case '\t': /* '\t' */
+ case '\n': /* '\n' */
+ case '\r': /* '\r' */
+ return true;
+ }
+
+ return false;
+ }
+
+ protected static byte[] getWapString(ByteArrayInputStream pduDataStream,
+ int stringType) {
+ assert(null != pduDataStream);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ int temp = pduDataStream.read();
+ assert(-1 != temp);
+ while((-1 != temp) && ('\0' != temp)) {
+ // check each of the character
+ if (stringType == TYPE_TOKEN_STRING) {
+ if (isTokenCharacter(temp)) {
+ out.write(temp);
+ }
+ } else {
+ if (isText(temp)) {
+ out.write(temp);
+ }
+ }
+
+ temp = pduDataStream.read();
+ assert(-1 != temp);
+ }
+
+ if (out.size() > 0) {
+ return out.toByteArray();
+ }
+
+ return null;
+ }
+
+ /**
+ * Extract a byte value from the input stream.
+ *
+ * @param pduDataStream pdu data input stream
+ * @return the byte
+ */
+ protected static int extractByteValue(ByteArrayInputStream pduDataStream) {
+ assert(null != pduDataStream);
+ int temp = pduDataStream.read();
+ assert(-1 != temp);
+ return temp & 0xFF;
+ }
+
+ /**
+ * Parse Short-Integer.
+ *
+ * @param pduDataStream pdu data input stream
+ * @return the byte
+ */
+ protected static int parseShortInteger(ByteArrayInputStream pduDataStream) {
+ /**
+ * From wap-230-wsp-20010705-a.pdf
+ * Short-integer = OCTET
+ * Integers in range 0-127 shall be encoded as a one
+ * octet value with the most significant bit set to one (1xxx xxxx)
+ * and with the value in the remaining least significant bits.
+ */
+ assert(null != pduDataStream);
+ int temp = pduDataStream.read();
+ assert(-1 != temp);
+ return temp & 0x7F;
+ }
+
+ /**
+ * Parse Long-Integer.
+ *
+ * @param pduDataStream pdu data input stream
+ * @return long integer
+ */
+ protected static long parseLongInteger(ByteArrayInputStream pduDataStream) {
+ /**
+ * From wap-230-wsp-20010705-a.pdf
+ * Long-integer = Short-length Multi-octet-integer
+ * The Short-length indicates the length of the Multi-octet-integer
+ * Multi-octet-integer = 1*30 OCTET
+ * The content octets shall be an unsigned integer value
+ * with the most significant octet encoded first (big-endian representation).
+ * The minimum number of octets must be used to encode the value.
+ * Short-length =
+ */
+ assert(null != pduDataStream);
+ int temp = pduDataStream.read();
+ assert(-1 != temp);
+ int count = temp & 0xFF;
+
+ if (count > LONG_INTEGER_LENGTH_MAX) {
+ throw new RuntimeException("Octet count greater than 8 and I can't represent that!");
+ }
+
+ long result = 0;
+
+ for (int i = 0 ; i < count ; i++) {
+ temp = pduDataStream.read();
+ assert(-1 != temp);
+ result <<= 8;
+ result += (temp & 0xFF);
+ }
+
+ return result;
+ }
+
+ /**
+ * Parse Integer-Value.
+ *
+ * @param pduDataStream pdu data input stream
+ * @return long integer
+ */
+ protected static long parseIntegerValue(ByteArrayInputStream pduDataStream) {
+ /**
+ * From wap-230-wsp-20010705-a.pdf
+ * Integer-Value = Short-integer | Long-integer
+ */
+ assert(null != pduDataStream);
+ pduDataStream.mark(1);
+ int temp = pduDataStream.read();
+ assert(-1 != temp);
+ pduDataStream.reset();
+ if (temp > SHORT_INTEGER_MAX) {
+ return parseShortInteger(pduDataStream);
+ } else {
+ return parseLongInteger(pduDataStream);
+ }
+ }
+
+ /**
+ * To skip length of the wap value.
+ *
+ * @param pduDataStream pdu data input stream
+ * @param length area size
+ * @return the values in this area
+ */
+ protected static int skipWapValue(ByteArrayInputStream pduDataStream, int length) {
+ assert(null != pduDataStream);
+ byte[] area = new byte[length];
+ int readLen = pduDataStream.read(area, 0, length);
+ if (readLen < length) { //The actually read length is lower than the length
+ return -1;
+ } else {
+ return readLen;
+ }
+ }
+
+ /**
+ * Parse content type parameters. For now we just support
+ * four parameters used in mms: "type", "start", "name", "charset".
+ *
+ * @param pduDataStream pdu data input stream
+ * @param map to store parameters of Content-Type field
+ * @param length length of all the parameters
+ */
+ protected static void parseContentTypeParams(ByteArrayInputStream pduDataStream,
+ HashMap map, Integer length) {
+ /**
+ * From wap-230-wsp-20010705-a.pdf
+ * Parameter = Typed-parameter | Untyped-parameter
+ * Typed-parameter = Well-known-parameter-token Typed-value
+ * the actual expected type of the value is implied by the well-known parameter
+ * Well-known-parameter-token = Integer-value
+ * the code values used for parameters are specified in the Assigned Numbers appendix
+ * Typed-value = Compact-value | Text-value
+ * In addition to the expected type, there may be no value.
+ * If the value cannot be encoded using the expected type, it shall be encoded as text.
+ * Compact-value = Integer-value |
+ * Date-value | Delta-seconds-value | Q-value | Version-value |
+ * Uri-value
+ * Untyped-parameter = Token-text Untyped-value
+ * the type of the value is unknown, but it shall be encoded as an integer,
+ * if that is possible.
+ * Untyped-value = Integer-value | Text-value
+ */
+ assert(null != pduDataStream);
+ assert(length > 0);
+
+ int startPos = pduDataStream.available();
+ int tempPos = 0;
+ int lastLen = length;
+ while(0 < lastLen) {
+ int param = pduDataStream.read();
+ assert(-1 != param);
+ lastLen--;
+
+ switch (param) {
+ /**
+ * From rfc2387, chapter 3.1
+ * The type parameter must be specified and its value is the MIME media
+ * type of the "root" body part. It permits a MIME user agent to
+ * determine the content-type without reference to the enclosed body
+ * part. If the value of the type parameter and the root body part's
+ * content-type differ then the User Agent's behavior is undefined.
+ *
+ * From wap-230-wsp-20010705-a.pdf
+ * type = Constrained-encoding
+ * Constrained-encoding = Extension-Media | Short-integer
+ * Extension-media = *TEXT End-of-string
+ */
+ case PduPart.P_TYPE:
+ case PduPart.P_CT_MR_TYPE:
+ pduDataStream.mark(1);
+ int first = extractByteValue(pduDataStream);
+ pduDataStream.reset();
+ if (first > TEXT_MAX) {
+ // Short-integer (well-known type)
+ int index = parseShortInteger(pduDataStream);
+
+ if (index < PduContentTypes.contentTypes.length) {
+ byte[] type = (PduContentTypes.contentTypes[index]).getBytes();
+ map.put(PduPart.P_TYPE, type);
+ } else {
+ //not support this type, ignore it.
+ }
+ } else {
+ // Text-String (extension-media)
+ byte[] type = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ if ((null != type) && (null != map)) {
+ map.put(PduPart.P_TYPE, type);
+ }
+ }
+
+ tempPos = pduDataStream.available();
+ lastLen = length - (startPos - tempPos);
+ break;
+
+ /**
+ * From oma-ts-mms-conf-v1_3.pdf, chapter 10.2.3.
+ * Start Parameter Referring to Presentation
+ *
+ * From rfc2387, chapter 3.2
+ * The start parameter, if given, is the content-ID of the compound
+ * object's "root". If not present the "root" is the first body part in
+ * the Multipart/Related entity. The "root" is the element the
+ * applications processes first.
+ *
+ * From wap-230-wsp-20010705-a.pdf
+ * start = Text-String
+ */
+ case PduPart.P_START:
+ case PduPart.P_DEP_START:
+ byte[] start = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ if ((null != start) && (null != map)) {
+ map.put(PduPart.P_START, start);
+ }
+
+ tempPos = pduDataStream.available();
+ lastLen = length - (startPos - tempPos);
+ break;
+
+ /**
+ * From oma-ts-mms-conf-v1_3.pdf
+ * In creation, the character set SHALL be either us-ascii
+ * (IANA MIBenum 3) or utf-8 (IANA MIBenum 106)[Unicode].
+ * In retrieval, both us-ascii and utf-8 SHALL be supported.
+ *
+ * From wap-230-wsp-20010705-a.pdf
+ * charset = Well-known-charset|Text-String
+ * Well-known-charset = Any-charset | Integer-value
+ * Both are encoded using values from Character Set
+ * Assignments table in Assigned Numbers
+ * Any-charset =
+ * Equivalent to the special RFC2616 charset value "*"
+ */
+ case PduPart.P_CHARSET:
+ pduDataStream.mark(1);
+ int firstValue = extractByteValue(pduDataStream);
+ pduDataStream.reset();
+ //Check first char
+ if (((firstValue > TEXT_MIN) && (firstValue < TEXT_MAX)) ||
+ (END_STRING_FLAG == firstValue)) {
+ //Text-String (extension-charset)
+ byte[] charsetStr = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ try {
+ int charsetInt = CharacterSets.getMibEnumValue(
+ new String(charsetStr));
+ map.put(PduPart.P_CHARSET, charsetInt);
+ } catch (UnsupportedEncodingException e) {
+ // Not a well-known charset, use "*".
+ Log.e(LOG_TAG, Arrays.toString(charsetStr), e);
+ map.put(PduPart.P_CHARSET, CharacterSets.ANY_CHARSET);
+ }
+ } else {
+ //Well-known-charset
+ int charset = (int) parseIntegerValue(pduDataStream);
+ if (map != null) {
+ map.put(PduPart.P_CHARSET, charset);
+ }
+ }
+
+ tempPos = pduDataStream.available();
+ lastLen = length - (startPos - tempPos);
+ break;
+
+ /**
+ * From oma-ts-mms-conf-v1_3.pdf
+ * A name for multipart object SHALL be encoded using name-parameter
+ * for Content-Type header in WSP multipart headers.
+ *
+ * From wap-230-wsp-20010705-a.pdf
+ * name = Text-String
+ */
+ case PduPart.P_DEP_NAME:
+ case PduPart.P_NAME:
+ byte[] name = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ if ((null != name) && (null != map)) {
+ map.put(PduPart.P_NAME, name);
+ }
+
+ tempPos = pduDataStream.available();
+ lastLen = length - (startPos - tempPos);
+ break;
+ default:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "Not supported Content-Type parameter");
+ }
+ if (-1 == skipWapValue(pduDataStream, lastLen)) {
+ Log.e(LOG_TAG, "Corrupt Content-Type");
+ } else {
+ lastLen = 0;
+ }
+ break;
+ }
+ }
+
+ if (0 != lastLen) {
+ Log.e(LOG_TAG, "Corrupt Content-Type");
+ }
+ }
+
+ /**
+ * Parse content type.
+ *
+ * @param pduDataStream pdu data input stream
+ * @param map to store parameters in Content-Type header field
+ * @return Content-Type value
+ */
+ protected static byte[] parseContentType(ByteArrayInputStream pduDataStream,
+ HashMap map) {
+ /**
+ * From wap-230-wsp-20010705-a.pdf
+ * Content-type-value = Constrained-media | Content-general-form
+ * Content-general-form = Value-length Media-type
+ * Media-type = (Well-known-media | Extension-Media) *(Parameter)
+ */
+ assert(null != pduDataStream);
+
+ byte[] contentType = null;
+ pduDataStream.mark(1);
+ int temp = pduDataStream.read();
+ assert(-1 != temp);
+ pduDataStream.reset();
+
+ int cur = (temp & 0xFF);
+
+ if (cur < TEXT_MIN) {
+ int length = parseValueLength(pduDataStream);
+ int startPos = pduDataStream.available();
+ pduDataStream.mark(1);
+ temp = pduDataStream.read();
+ assert(-1 != temp);
+ pduDataStream.reset();
+ int first = (temp & 0xFF);
+
+ if ((first >= TEXT_MIN) && (first <= TEXT_MAX)) {
+ contentType = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ } else if (first > TEXT_MAX) {
+ int index = parseShortInteger(pduDataStream);
+
+ if (index < PduContentTypes.contentTypes.length) { //well-known type
+ contentType = (PduContentTypes.contentTypes[index]).getBytes();
+ } else {
+ pduDataStream.reset();
+ contentType = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ }
+ } else {
+ Log.e(LOG_TAG, "Corrupt content-type");
+ return (PduContentTypes.contentTypes[0]).getBytes(); //"*/*"
+ }
+
+ int endPos = pduDataStream.available();
+ int parameterLen = length - (startPos - endPos);
+ if (parameterLen > 0) {//have parameters
+ parseContentTypeParams(pduDataStream, map, parameterLen);
+ }
+
+ if (parameterLen < 0) {
+ Log.e(LOG_TAG, "Corrupt MMS message");
+ return (PduContentTypes.contentTypes[0]).getBytes(); //"*/*"
+ }
+ } else if (cur <= TEXT_MAX) {
+ contentType = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ } else {
+ contentType =
+ (PduContentTypes.contentTypes[parseShortInteger(pduDataStream)]).getBytes();
+ }
+
+ return contentType;
+ }
+
+ /**
+ * Parse part's headers.
+ *
+ * @param pduDataStream pdu data input stream
+ * @param part to store the header informations of the part
+ * @param length length of the headers
+ * @return true if parse successfully, false otherwise
+ */
+ protected boolean parsePartHeaders(ByteArrayInputStream pduDataStream,
+ PduPart part, int length) {
+ assert(null != pduDataStream);
+ assert(null != part);
+ assert(length > 0);
+
+ /**
+ * From oma-ts-mms-conf-v1_3.pdf, chapter 10.2.
+ * A name for multipart object SHALL be encoded using name-parameter
+ * for Content-Type header in WSP multipart headers.
+ * In decoding, name-parameter of Content-Type SHALL be used if available.
+ * If name-parameter of Content-Type is not available,
+ * filename parameter of Content-Disposition header SHALL be used if available.
+ * If neither name-parameter of Content-Type header nor filename parameter
+ * of Content-Disposition header is available,
+ * Content-Location header SHALL be used if available.
+ *
+ * Within SMIL part the reference to the media object parts SHALL use
+ * either Content-ID or Content-Location mechanism [RFC2557]
+ * and the corresponding WSP part headers in media object parts
+ * contain the corresponding definitions.
+ */
+ int startPos = pduDataStream.available();
+ int tempPos = 0;
+ int lastLen = length;
+ while(0 < lastLen) {
+ int header = pduDataStream.read();
+ assert(-1 != header);
+ lastLen--;
+
+ if (header > TEXT_MAX) {
+ // Number assigned headers.
+ switch (header) {
+ case PduPart.P_CONTENT_LOCATION:
+ /**
+ * From wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21
+ * Content-location-value = Uri-value
+ */
+ byte[] contentLocation = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ if (null != contentLocation) {
+ part.setContentLocation(contentLocation);
+ }
+
+ tempPos = pduDataStream.available();
+ lastLen = length - (startPos - tempPos);
+ break;
+ case PduPart.P_CONTENT_ID:
+ /**
+ * From wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21
+ * Content-ID-value = Quoted-string
+ */
+ byte[] contentId = parseWapString(pduDataStream, TYPE_QUOTED_STRING);
+ if (null != contentId) {
+ part.setContentId(contentId);
+ }
+
+ tempPos = pduDataStream.available();
+ lastLen = length - (startPos - tempPos);
+ break;
+ case PduPart.P_DEP_CONTENT_DISPOSITION:
+ case PduPart.P_CONTENT_DISPOSITION:
+ /**
+ * From wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21
+ * Content-disposition-value = Value-length Disposition *(Parameter)
+ * Disposition = Form-data | Attachment | Inline | Token-text
+ * Form-data =
+ * Attachment =
+ * Inline =
+ */
+
+ /*
+ * some carrier mmsc servers do not support content_disposition
+ * field correctly
+ */
+ if (mParseContentDisposition) {
+ int len = parseValueLength(pduDataStream);
+ pduDataStream.mark(1);
+ int thisStartPos = pduDataStream.available();
+ int thisEndPos = 0;
+ int value = pduDataStream.read();
+
+ if (value == PduPart.P_DISPOSITION_FROM_DATA ) {
+ part.setContentDisposition(PduPart.DISPOSITION_FROM_DATA);
+ } else if (value == PduPart.P_DISPOSITION_ATTACHMENT) {
+ part.setContentDisposition(PduPart.DISPOSITION_ATTACHMENT);
+ } else if (value == PduPart.P_DISPOSITION_INLINE) {
+ part.setContentDisposition(PduPart.DISPOSITION_INLINE);
+ } else {
+ pduDataStream.reset();
+ /* Token-text */
+ part.setContentDisposition(parseWapString(pduDataStream
+ , TYPE_TEXT_STRING));
+ }
+
+ /* get filename parameter and skip other parameters */
+ thisEndPos = pduDataStream.available();
+ if (thisStartPos - thisEndPos < len) {
+ value = pduDataStream.read();
+ if (value == PduPart.P_FILENAME) { //filename is text-string
+ part.setFilename(parseWapString(pduDataStream
+ , TYPE_TEXT_STRING));
+ }
+
+ /* skip other parameters */
+ thisEndPos = pduDataStream.available();
+ if (thisStartPos - thisEndPos < len) {
+ int last = len - (thisStartPos - thisEndPos);
+ byte[] temp = new byte[last];
+ pduDataStream.read(temp, 0, last);
+ }
+ }
+
+ tempPos = pduDataStream.available();
+ lastLen = length - (startPos - tempPos);
+ }
+ break;
+ default:
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "Not supported Part headers: " + header);
+ }
+ if (-1 == skipWapValue(pduDataStream, lastLen)) {
+ Log.e(LOG_TAG, "Corrupt Part headers");
+ return false;
+ }
+ lastLen = 0;
+ break;
+ }
+ } else if ((header >= TEXT_MIN) && (header <= TEXT_MAX)) {
+ // Not assigned header.
+ byte[] tempHeader = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+ byte[] tempValue = parseWapString(pduDataStream, TYPE_TEXT_STRING);
+
+ // Check the header whether it is "Content-Transfer-Encoding".
+ if (true ==
+ PduPart.CONTENT_TRANSFER_ENCODING.equalsIgnoreCase(new String(tempHeader))) {
+ part.setContentTransferEncoding(tempValue);
+ }
+
+ tempPos = pduDataStream.available();
+ lastLen = length - (startPos - tempPos);
+ } else {
+ if (LOCAL_LOGV) {
+ Log.v(LOG_TAG, "Not supported Part headers: " + header);
+ }
+ // Skip all headers of this part.
+ if (-1 == skipWapValue(pduDataStream, lastLen)) {
+ Log.e(LOG_TAG, "Corrupt Part headers");
+ return false;
+ }
+ lastLen = 0;
+ }
+ }
+
+ if (0 != lastLen) {
+ Log.e(LOG_TAG, "Corrupt Part headers");
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Check the position of a specified part.
+ *
+ * @param part the part to be checked
+ * @return part position, THE_FIRST_PART when it's the
+ * first one, THE_LAST_PART when it's the last one.
+ */
+ private static int checkPartPosition(PduPart part) {
+ assert(null != part);
+ if ((null == mTypeParam) &&
+ (null == mStartParam)) {
+ return THE_LAST_PART;
+ }
+
+ /* check part's content-id */
+ if (null != mStartParam) {
+ byte[] contentId = part.getContentId();
+ if (null != contentId) {
+ if (true == Arrays.equals(mStartParam, contentId)) {
+ return THE_FIRST_PART;
+ }
+ }
+ // This is not the first part, so append to end (keeping the original order)
+ // Check b/19607294 for details of this change
+ return THE_LAST_PART;
+ }
+
+ /* check part's content-type */
+ if (null != mTypeParam) {
+ byte[] contentType = part.getContentType();
+ if (null != contentType) {
+ if (true == Arrays.equals(mTypeParam, contentType)) {
+ return THE_FIRST_PART;
+ }
+ }
+ }
+
+ return THE_LAST_PART;
+ }
+
+ /**
+ * Check mandatory headers of a pdu.
+ *
+ * @param headers pdu headers
+ * @return true if the pdu has all of the mandatory headers, false otherwise.
+ */
+ protected static boolean checkMandatoryHeader(PduHeaders headers) {
+ if (null == headers) {
+ return false;
+ }
+
+ /* get message type */
+ int messageType = headers.getOctet(PduHeaders.MESSAGE_TYPE);
+
+ /* check Mms-Version field */
+ int mmsVersion = headers.getOctet(PduHeaders.MMS_VERSION);
+ if (0 == mmsVersion) {
+ // Every message should have Mms-Version field.
+ return false;
+ }
+
+ /* check mandatory header fields */
+ switch (messageType) {
+ case PduHeaders.MESSAGE_TYPE_SEND_REQ:
+ // Content-Type field.
+ byte[] srContentType = headers.getTextString(PduHeaders.CONTENT_TYPE);
+ if (null == srContentType) {
+ return false;
+ }
+
+ // From field.
+ EncodedStringValue srFrom = headers.getEncodedStringValue(PduHeaders.FROM);
+ if (null == srFrom) {
+ return false;
+ }
+
+ // Transaction-Id field.
+ byte[] srTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
+ if (null == srTransactionId) {
+ return false;
+ }
+
+ break;
+ case PduHeaders.MESSAGE_TYPE_SEND_CONF:
+ // Response-Status field.
+ int scResponseStatus = headers.getOctet(PduHeaders.RESPONSE_STATUS);
+ if (0 == scResponseStatus) {
+ return false;
+ }
+
+ // Transaction-Id field.
+ byte[] scTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
+ if (null == scTransactionId) {
+ return false;
+ }
+
+ break;
+ case PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND:
+ // Content-Location field.
+ byte[] niContentLocation = headers.getTextString(PduHeaders.CONTENT_LOCATION);
+ if (null == niContentLocation) {
+ return false;
+ }
+
+ // Expiry field.
+ long niExpiry = headers.getLongInteger(PduHeaders.EXPIRY);
+ if (-1 == niExpiry) {
+ return false;
+ }
+
+ // Message-Class field.
+ byte[] niMessageClass = headers.getTextString(PduHeaders.MESSAGE_CLASS);
+ if (null == niMessageClass) {
+ return false;
+ }
+
+ // Message-Size field.
+ long niMessageSize = headers.getLongInteger(PduHeaders.MESSAGE_SIZE);
+ if (-1 == niMessageSize) {
+ return false;
+ }
+
+ // Transaction-Id field.
+ byte[] niTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
+ if (null == niTransactionId) {
+ return false;
+ }
+
+ break;
+ case PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND:
+ // Status field.
+ int nriStatus = headers.getOctet(PduHeaders.STATUS);
+ if (0 == nriStatus) {
+ return false;
+ }
+
+ // Transaction-Id field.
+ byte[] nriTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
+ if (null == nriTransactionId) {
+ return false;
+ }
+
+ break;
+ case PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF:
+ // Content-Type field.
+ byte[] rcContentType = headers.getTextString(PduHeaders.CONTENT_TYPE);
+ if (null == rcContentType) {
+ return false;
+ }
+
+ // Date field.
+ long rcDate = headers.getLongInteger(PduHeaders.DATE);
+ if (-1 == rcDate) {
+ return false;
+ }
+
+ break;
+ case PduHeaders.MESSAGE_TYPE_DELIVERY_IND:
+ // Date field.
+ long diDate = headers.getLongInteger(PduHeaders.DATE);
+ if (-1 == diDate) {
+ return false;
+ }
+
+ // Message-Id field.
+ byte[] diMessageId = headers.getTextString(PduHeaders.MESSAGE_ID);
+ if (null == diMessageId) {
+ return false;
+ }
+
+ // Status field.
+ int diStatus = headers.getOctet(PduHeaders.STATUS);
+ if (0 == diStatus) {
+ return false;
+ }
+
+ // To field.
+ EncodedStringValue[] diTo = headers.getEncodedStringValues(PduHeaders.TO);
+ if (null == diTo) {
+ return false;
+ }
+
+ break;
+ case PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND:
+ // Transaction-Id field.
+ byte[] aiTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
+ if (null == aiTransactionId) {
+ return false;
+ }
+
+ break;
+ case PduHeaders.MESSAGE_TYPE_READ_ORIG_IND:
+ // Date field.
+ long roDate = headers.getLongInteger(PduHeaders.DATE);
+ if (-1 == roDate) {
+ return false;
+ }
+
+ // From field.
+ EncodedStringValue roFrom = headers.getEncodedStringValue(PduHeaders.FROM);
+ if (null == roFrom) {
+ return false;
+ }
+
+ // Message-Id field.
+ byte[] roMessageId = headers.getTextString(PduHeaders.MESSAGE_ID);
+ if (null == roMessageId) {
+ return false;
+ }
+
+ // Read-Status field.
+ int roReadStatus = headers.getOctet(PduHeaders.READ_STATUS);
+ if (0 == roReadStatus) {
+ return false;
+ }
+
+ // To field.
+ EncodedStringValue[] roTo = headers.getEncodedStringValues(PduHeaders.TO);
+ if (null == roTo) {
+ return false;
+ }
+
+ break;
+ case PduHeaders.MESSAGE_TYPE_READ_REC_IND:
+ // From field.
+ EncodedStringValue rrFrom = headers.getEncodedStringValue(PduHeaders.FROM);
+ if (null == rrFrom) {
+ return false;
+ }
+
+ // Message-Id field.
+ byte[] rrMessageId = headers.getTextString(PduHeaders.MESSAGE_ID);
+ if (null == rrMessageId) {
+ return false;
+ }
+
+ // Read-Status field.
+ int rrReadStatus = headers.getOctet(PduHeaders.READ_STATUS);
+ if (0 == rrReadStatus) {
+ return false;
+ }
+
+ // To field.
+ EncodedStringValue[] rrTo = headers.getEncodedStringValues(PduHeaders.TO);
+ if (null == rrTo) {
+ return false;
+ }
+
+ break;
+ default:
+ // Parser doesn't support this message type in this version.
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/PduPart.java b/src/android/support/v7/mms/pdu/PduPart.java
new file mode 100644
index 0000000..ec8e1a2
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/PduPart.java
@@ -0,0 +1,414 @@
+/*
+ * Copyright (C) 2007-2008 Esmertec AG.
+ * Copyright (C) 2007-2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+import android.net.Uri;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * The pdu part.
+ */
+public class PduPart {
+ /**
+ * Well-Known Parameters.
+ */
+ public static final int P_Q = 0x80;
+ public static final int P_CHARSET = 0x81;
+ public static final int P_LEVEL = 0x82;
+ public static final int P_TYPE = 0x83;
+ public static final int P_DEP_NAME = 0x85;
+ public static final int P_DEP_FILENAME = 0x86;
+ public static final int P_DIFFERENCES = 0x87;
+ public static final int P_PADDING = 0x88;
+ // This value of "TYPE" s used with Content-Type: multipart/related
+ public static final int P_CT_MR_TYPE = 0x89;
+ public static final int P_DEP_START = 0x8A;
+ public static final int P_DEP_START_INFO = 0x8B;
+ public static final int P_DEP_COMMENT = 0x8C;
+ public static final int P_DEP_DOMAIN = 0x8D;
+ public static final int P_MAX_AGE = 0x8E;
+ public static final int P_DEP_PATH = 0x8F;
+ public static final int P_SECURE = 0x90;
+ public static final int P_SEC = 0x91;
+ public static final int P_MAC = 0x92;
+ public static final int P_CREATION_DATE = 0x93;
+ public static final int P_MODIFICATION_DATE = 0x94;
+ public static final int P_READ_DATE = 0x95;
+ public static final int P_SIZE = 0x96;
+ public static final int P_NAME = 0x97;
+ public static final int P_FILENAME = 0x98;
+ public static final int P_START = 0x99;
+ public static final int P_START_INFO = 0x9A;
+ public static final int P_COMMENT = 0x9B;
+ public static final int P_DOMAIN = 0x9C;
+ public static final int P_PATH = 0x9D;
+
+ /**
+ * Header field names.
+ */
+ public static final int P_CONTENT_TYPE = 0x91;
+ public static final int P_CONTENT_LOCATION = 0x8E;
+ public static final int P_CONTENT_ID = 0xC0;
+ public static final int P_DEP_CONTENT_DISPOSITION = 0xAE;
+ public static final int P_CONTENT_DISPOSITION = 0xC5;
+ // The next header is unassigned header, use reserved header(0x48) value.
+ public static final int P_CONTENT_TRANSFER_ENCODING = 0xC8;
+
+ /**
+ * Content=Transfer-Encoding string.
+ */
+ public static final String CONTENT_TRANSFER_ENCODING =
+ "Content-Transfer-Encoding";
+
+ /**
+ * Value of Content-Transfer-Encoding.
+ */
+ public static final String P_BINARY = "binary";
+ public static final String P_7BIT = "7bit";
+ public static final String P_8BIT = "8bit";
+ public static final String P_BASE64 = "base64";
+ public static final String P_QUOTED_PRINTABLE = "quoted-printable";
+
+ /**
+ * Value of disposition can be set to PduPart when the value is octet in
+ * the PDU.
+ * "from-data" instead of Form-data.
+ * "attachment" instead of Attachment.
+ * "inline" instead of Inline.
+ */
+ static final byte[] DISPOSITION_FROM_DATA = "from-data".getBytes();
+ static final byte[] DISPOSITION_ATTACHMENT = "attachment".getBytes();
+ static final byte[] DISPOSITION_INLINE = "inline".getBytes();
+
+ /**
+ * Content-Disposition value.
+ */
+ public static final int P_DISPOSITION_FROM_DATA = 0x80;
+ public static final int P_DISPOSITION_ATTACHMENT = 0x81;
+ public static final int P_DISPOSITION_INLINE = 0x82;
+
+ /**
+ * Header of part.
+ */
+ private Map mPartHeader = null;
+
+ /**
+ * Data uri.
+ */
+ private Uri mUri = null;
+
+ /**
+ * Part data.
+ */
+ private byte[] mPartData = null;
+
+ private static final String TAG = "PduPart";
+
+ /**
+ * Empty Constructor.
+ */
+ public PduPart() {
+ mPartHeader = new HashMap();
+ }
+
+ /**
+ * Set part data. The data are stored as byte array.
+ *
+ * @param data the data
+ */
+ public void setData(byte[] data) {
+ if(data == null) {
+ return;
+ }
+
+ mPartData = new byte[data.length];
+ System.arraycopy(data, 0, mPartData, 0, data.length);
+ }
+
+ /**
+ * @return A copy of the part data or null if the data wasn't set or
+ * the data is stored as Uri.
+ * @see #getDataUri
+ */
+ public byte[] getData() {
+ if(mPartData == null) {
+ return null;
+ }
+
+ byte[] byteArray = new byte[mPartData.length];
+ System.arraycopy(mPartData, 0, byteArray, 0, mPartData.length);
+ return byteArray;
+ }
+
+ /**
+ * @return The length of the data, if this object have data, else 0.
+ */
+ public int getDataLength() {
+ if(mPartData != null){
+ return mPartData.length;
+ } else {
+ return 0;
+ }
+ }
+
+
+ /**
+ * Set data uri. The data are stored as Uri.
+ *
+ * @param uri the uri
+ */
+ public void setDataUri(Uri uri) {
+ mUri = uri;
+ }
+
+ /**
+ * @return The Uri of the part data or null if the data wasn't set or
+ * the data is stored as byte array.
+ * @see #getData
+ */
+ public Uri getDataUri() {
+ return mUri;
+ }
+
+ /**
+ * Set Content-id value
+ *
+ * @param contentId the content-id value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setContentId(byte[] contentId) {
+ if((contentId == null) || (contentId.length == 0)) {
+ throw new IllegalArgumentException(
+ "Content-Id may not be null or empty.");
+ }
+
+ if ((contentId.length > 1)
+ && ((char) contentId[0] == '<')
+ && ((char) contentId[contentId.length - 1] == '>')) {
+ mPartHeader.put(P_CONTENT_ID, contentId);
+ return;
+ }
+
+ // Insert beginning '<' and trailing '>' for Content-Id.
+ byte[] buffer = new byte[contentId.length + 2];
+ buffer[0] = (byte) (0xff & '<');
+ buffer[buffer.length - 1] = (byte) (0xff & '>');
+ System.arraycopy(contentId, 0, buffer, 1, contentId.length);
+ mPartHeader.put(P_CONTENT_ID, buffer);
+ }
+
+ /**
+ * Get Content-id value.
+ *
+ * @return the value
+ */
+ public byte[] getContentId() {
+ return (byte[]) mPartHeader.get(P_CONTENT_ID);
+ }
+
+ /**
+ * Set Char-set value.
+ *
+ * @param charset the value
+ */
+ public void setCharset(int charset) {
+ mPartHeader.put(P_CHARSET, charset);
+ }
+
+ /**
+ * Get Char-set value
+ *
+ * @return the charset value. Return 0 if charset was not set.
+ */
+ public int getCharset() {
+ Integer charset = (Integer) mPartHeader.get(P_CHARSET);
+ if(charset == null) {
+ return 0;
+ } else {
+ return charset.intValue();
+ }
+ }
+
+ /**
+ * Set Content-Location value.
+ *
+ * @param contentLocation the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setContentLocation(byte[] contentLocation) {
+ if(contentLocation == null) {
+ throw new NullPointerException("null content-location");
+ }
+
+ mPartHeader.put(P_CONTENT_LOCATION, contentLocation);
+ }
+
+ /**
+ * Get Content-Location value.
+ *
+ * @return the value
+ * return PduPart.disposition[0] instead of (Form-data).
+ * return PduPart.disposition[1] instead of (Attachment).
+ * return PduPart.disposition[2] instead of (Inline).
+ */
+ public byte[] getContentLocation() {
+ return (byte[]) mPartHeader.get(P_CONTENT_LOCATION);
+ }
+
+ /**
+ * Set Content-Disposition value.
+ * Use PduPart.disposition[0] instead of (Form-data).
+ * Use PduPart.disposition[1] instead of (Attachment).
+ * Use PduPart.disposition[2] instead of (Inline).
+ *
+ * @param contentDisposition the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setContentDisposition(byte[] contentDisposition) {
+ if(contentDisposition == null) {
+ throw new NullPointerException("null content-disposition");
+ }
+
+ mPartHeader.put(P_CONTENT_DISPOSITION, contentDisposition);
+ }
+
+ /**
+ * Get Content-Disposition value.
+ *
+ * @return the value
+ */
+ public byte[] getContentDisposition() {
+ return (byte[]) mPartHeader.get(P_CONTENT_DISPOSITION);
+ }
+
+ /**
+ * Set Content-Type value.
+ *
+ * @param contentType the content type
+ * @throws NullPointerException if the value is null.
+ */
+ public void setContentType(byte[] contentType) {
+ if(contentType == null) {
+ throw new NullPointerException("null content-type");
+ }
+
+ mPartHeader.put(P_CONTENT_TYPE, contentType);
+ }
+
+ /**
+ * Get Content-Type value of part.
+ *
+ * @return the value
+ */
+ public byte[] getContentType() {
+ return (byte[]) mPartHeader.get(P_CONTENT_TYPE);
+ }
+
+ /**
+ * Set Content-Transfer-Encoding value
+ *
+ * @param contentTransferEncoding the Content-Transfer-Encoding value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setContentTransferEncoding(byte[] contentTransferEncoding) {
+ if(contentTransferEncoding == null) {
+ throw new NullPointerException("null content-transfer-encoding");
+ }
+
+ mPartHeader.put(P_CONTENT_TRANSFER_ENCODING, contentTransferEncoding);
+ }
+
+ /**
+ * Get Content-Transfer-Encoding value.
+ *
+ * @return the value
+ */
+ public byte[] getContentTransferEncoding() {
+ return (byte[]) mPartHeader.get(P_CONTENT_TRANSFER_ENCODING);
+ }
+
+ /**
+ * Set Content-type parameter: name.
+ *
+ * @param name the name value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setName(byte[] name) {
+ if(null == name) {
+ throw new NullPointerException("null content-id");
+ }
+
+ mPartHeader.put(P_NAME, name);
+ }
+
+ /**
+ * Get content-type parameter: name.
+ *
+ * @return the name
+ */
+ public byte[] getName() {
+ return (byte[]) mPartHeader.get(P_NAME);
+ }
+
+ /**
+ * Get Content-disposition parameter: filename
+ *
+ * @param fileName the filename value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setFilename(byte[] fileName) {
+ if(null == fileName) {
+ throw new NullPointerException("null content-id");
+ }
+
+ mPartHeader.put(P_FILENAME, fileName);
+ }
+
+ /**
+ * Set Content-disposition parameter: filename
+ *
+ * @return the filename
+ */
+ public byte[] getFilename() {
+ return (byte[]) mPartHeader.get(P_FILENAME);
+ }
+
+ public String generateLocation() {
+ // Assumption: At least one of the content-location / name / filename
+ // or content-id should be set. This is guaranteed by the PduParser
+ // for incoming messages and by MM composer for outgoing messages.
+ byte[] location = (byte[]) mPartHeader.get(P_NAME);
+ if(null == location) {
+ location = (byte[]) mPartHeader.get(P_FILENAME);
+
+ if (null == location) {
+ location = (byte[]) mPartHeader.get(P_CONTENT_LOCATION);
+ }
+ }
+
+ if (null == location) {
+ byte[] contentId = (byte[]) mPartHeader.get(P_CONTENT_ID);
+ return "cid:" + new String(contentId);
+ } else {
+ return new String(location);
+ }
+ }
+}
+
diff --git a/src/android/support/v7/mms/pdu/QuotedPrintable.java b/src/android/support/v7/mms/pdu/QuotedPrintable.java
new file mode 100644
index 0000000..ea0abc5
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/QuotedPrintable.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+import java.io.ByteArrayOutputStream;
+
+public class QuotedPrintable {
+ private static byte ESCAPE_CHAR = '=';
+
+ /**
+ * Decodes an array quoted-printable characters into an array of original bytes.
+ * Escaped characters are converted back to their original representation.
+ *
+ *
+ * This function implements a subset of
+ * quoted-printable encoding specification (rule #1 and rule #2)
+ * as defined in RFC 1521.
+ *
+ *
+ * @param bytes array of quoted-printable characters
+ * @return array of original bytes,
+ * null if quoted-printable decoding is unsuccessful.
+ */
+ public static final byte[] decodeQuotedPrintable(byte[] bytes) {
+ if (bytes == null) {
+ return null;
+ }
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+ for (int i = 0; i < bytes.length; i++) {
+ int b = bytes[i];
+ if (b == ESCAPE_CHAR) {
+ try {
+ if('\r' == (char)bytes[i + 1] &&
+ '\n' == (char)bytes[i + 2]) {
+ i += 2;
+ continue;
+ }
+ int u = Character.digit((char) bytes[++i], 16);
+ int l = Character.digit((char) bytes[++i], 16);
+ if (u == -1 || l == -1) {
+ return null;
+ }
+ buffer.write((char) ((u << 4) + l));
+ } catch (ArrayIndexOutOfBoundsException e) {
+ return null;
+ }
+ } else {
+ buffer.write(b);
+ }
+ }
+ return buffer.toByteArray();
+ }
+}
diff --git a/src/android/support/v7/mms/pdu/ReadOrigInd.java b/src/android/support/v7/mms/pdu/ReadOrigInd.java
new file mode 100644
index 0000000..500a59d
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/ReadOrigInd.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+public class ReadOrigInd extends GenericPdu {
+ /**
+ * Empty constructor.
+ * Since the Pdu corresponding to this class is constructed
+ * by the Proxy-Relay server, this class is only instantiated
+ * by the Pdu Parser.
+ *
+ * @throws InvalidHeaderValueException if error occurs.
+ */
+ public ReadOrigInd() throws InvalidHeaderValueException {
+ super();
+ setMessageType(PduHeaders.MESSAGE_TYPE_READ_ORIG_IND);
+ }
+
+ /**
+ * Constructor with given headers.
+ *
+ * @param headers Headers for this PDU.
+ */
+ ReadOrigInd(PduHeaders headers) {
+ super(headers);
+ }
+
+ /**
+ * Get Date value.
+ *
+ * @return the value
+ */
+ public long getDate() {
+ return mPduHeaders.getLongInteger(PduHeaders.DATE);
+ }
+
+ /**
+ * Set Date value.
+ *
+ * @param value the value
+ */
+ public void setDate(long value) {
+ mPduHeaders.setLongInteger(value, PduHeaders.DATE);
+ }
+
+ /**
+ * Get From value.
+ * From-value = Value-length
+ * (Address-present-token Encoded-string-value | Insert-address-token)
+ *
+ * @return the value
+ */
+ public EncodedStringValue getFrom() {
+ return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
+ }
+
+ /**
+ * Set From value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setFrom(EncodedStringValue value) {
+ mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
+ }
+
+ /**
+ * Get Message-ID value.
+ *
+ * @return the value
+ */
+ public byte[] getMessageId() {
+ return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
+ }
+
+ /**
+ * Set Message-ID value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setMessageId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
+ }
+
+ /**
+ * Get X-MMS-Read-status value.
+ *
+ * @return the value
+ */
+ public int getReadStatus() {
+ return mPduHeaders.getOctet(PduHeaders.READ_STATUS);
+ }
+
+ /**
+ * Set X-MMS-Read-status value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setReadStatus(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.READ_STATUS);
+ }
+
+ /**
+ * Get To value.
+ *
+ * @return the value
+ */
+ public EncodedStringValue[] getTo() {
+ return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
+ }
+
+ /**
+ * Set To value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setTo(EncodedStringValue[] value) {
+ mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
+ }
+
+ /*
+ * Optional, not supported header fields:
+ *
+ * public byte[] getApplicId() {return null;}
+ * public void setApplicId(byte[] value) {}
+ *
+ * public byte[] getAuxApplicId() {return null;}
+ * public void getAuxApplicId(byte[] value) {}
+ *
+ * public byte[] getReplyApplicId() {return 0x00;}
+ * public void setReplyApplicId(byte[] value) {}
+ */
+}
diff --git a/src/android/support/v7/mms/pdu/ReadRecInd.java b/src/android/support/v7/mms/pdu/ReadRecInd.java
new file mode 100644
index 0000000..9683d00
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/ReadRecInd.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+public class ReadRecInd extends GenericPdu {
+ /**
+ * Constructor, used when composing a M-ReadRec.ind pdu.
+ *
+ * @param from the from value
+ * @param messageId the message ID value
+ * @param mmsVersion current viersion of mms
+ * @param readStatus the read status value
+ * @param to the to value
+ * @throws InvalidHeaderValueException if parameters are invalid.
+ * NullPointerException if messageId or to is null.
+ */
+ public ReadRecInd(EncodedStringValue from,
+ byte[] messageId,
+ int mmsVersion,
+ int readStatus,
+ EncodedStringValue[] to) throws InvalidHeaderValueException {
+ super();
+ setMessageType(PduHeaders.MESSAGE_TYPE_READ_REC_IND);
+ setFrom(from);
+ setMessageId(messageId);
+ setMmsVersion(mmsVersion);
+ setTo(to);
+ setReadStatus(readStatus);
+ }
+
+ /**
+ * Constructor with given headers.
+ *
+ * @param headers Headers for this PDU.
+ */
+ ReadRecInd(PduHeaders headers) {
+ super(headers);
+ }
+
+ /**
+ * Get Date value.
+ *
+ * @return the value
+ */
+ public long getDate() {
+ return mPduHeaders.getLongInteger(PduHeaders.DATE);
+ }
+
+ /**
+ * Set Date value.
+ *
+ * @param value the value
+ */
+ public void setDate(long value) {
+ mPduHeaders.setLongInteger(value, PduHeaders.DATE);
+ }
+
+ /**
+ * Get Message-ID value.
+ *
+ * @return the value
+ */
+ public byte[] getMessageId() {
+ return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
+ }
+
+ /**
+ * Set Message-ID value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setMessageId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
+ }
+
+ /**
+ * Get To value.
+ *
+ * @return the value
+ */
+ public EncodedStringValue[] getTo() {
+ return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
+ }
+
+ /**
+ * Set To value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setTo(EncodedStringValue[] value) {
+ mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
+ }
+
+ /**
+ * Get X-MMS-Read-status value.
+ *
+ * @return the value
+ */
+ public int getReadStatus() {
+ return mPduHeaders.getOctet(PduHeaders.READ_STATUS);
+ }
+
+ /**
+ * Set X-MMS-Read-status value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setReadStatus(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.READ_STATUS);
+ }
+
+ /*
+ * Optional, not supported header fields:
+ *
+ * public byte[] getApplicId() {return null;}
+ * public void setApplicId(byte[] value) {}
+ *
+ * public byte[] getAuxApplicId() {return null;}
+ * public void getAuxApplicId(byte[] value) {}
+ *
+ * public byte[] getReplyApplicId() {return 0x00;}
+ * public void setReplyApplicId(byte[] value) {}
+ */
+}
diff --git a/src/android/support/v7/mms/pdu/RetrieveConf.java b/src/android/support/v7/mms/pdu/RetrieveConf.java
new file mode 100644
index 0000000..752ca04
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/RetrieveConf.java
@@ -0,0 +1,298 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+/**
+ * M-Retrive.conf Pdu.
+ */
+public class RetrieveConf extends MultimediaMessagePdu {
+ /**
+ * Empty constructor.
+ * Since the Pdu corresponding to this class is constructed
+ * by the Proxy-Relay server, this class is only instantiated
+ * by the Pdu Parser.
+ *
+ * @throws InvalidHeaderValueException if error occurs.
+ */
+ public RetrieveConf() throws InvalidHeaderValueException {
+ super();
+ setMessageType(PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF);
+ }
+
+ /**
+ * Constructor with given headers.
+ *
+ * @param headers Headers for this PDU.
+ */
+ RetrieveConf(PduHeaders headers) {
+ super(headers);
+ }
+
+ /**
+ * Constructor with given headers and body
+ *
+ * @param headers Headers for this PDU.
+ * @param body Body of this PDu.
+ */
+ RetrieveConf(PduHeaders headers, PduBody body) {
+ super(headers, body);
+ }
+
+ /**
+ * Get CC value.
+ *
+ * @return the value
+ */
+ public EncodedStringValue[] getCc() {
+ return mPduHeaders.getEncodedStringValues(PduHeaders.CC);
+ }
+
+ /**
+ * Add a "CC" value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void addCc(EncodedStringValue value) {
+ mPduHeaders.appendEncodedStringValue(value, PduHeaders.CC);
+ }
+
+ /**
+ * Get Content-type value.
+ *
+ * @return the value
+ */
+ public byte[] getContentType() {
+ return mPduHeaders.getTextString(PduHeaders.CONTENT_TYPE);
+ }
+
+ /**
+ * Set Content-type value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setContentType(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.CONTENT_TYPE);
+ }
+
+ /**
+ * Get X-Mms-Delivery-Report value.
+ *
+ * @return the value
+ */
+ public int getDeliveryReport() {
+ return mPduHeaders.getOctet(PduHeaders.DELIVERY_REPORT);
+ }
+
+ /**
+ * Set X-Mms-Delivery-Report value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setDeliveryReport(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.DELIVERY_REPORT);
+ }
+
+ /**
+ * Get From value.
+ * From-value = Value-length
+ * (Address-present-token Encoded-string-value | Insert-address-token)
+ *
+ * @return the value
+ */
+ public EncodedStringValue getFrom() {
+ return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
+ }
+
+ /**
+ * Set From value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setFrom(EncodedStringValue value) {
+ mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
+ }
+
+ /**
+ * Get X-Mms-Message-Class value.
+ * Message-class-value = Class-identifier | Token-text
+ * Class-identifier = Personal | Advertisement | Informational | Auto
+ *
+ * @return the value
+ */
+ public byte[] getMessageClass() {
+ return mPduHeaders.getTextString(PduHeaders.MESSAGE_CLASS);
+ }
+
+ /**
+ * Set X-Mms-Message-Class value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setMessageClass(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.MESSAGE_CLASS);
+ }
+
+ /**
+ * Get Message-ID value.
+ *
+ * @return the value
+ */
+ public byte[] getMessageId() {
+ return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
+ }
+
+ /**
+ * Set Message-ID value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setMessageId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
+ }
+
+ /**
+ * Get X-Mms-Read-Report value.
+ *
+ * @return the value
+ */
+ public int getReadReport() {
+ return mPduHeaders.getOctet(PduHeaders.READ_REPORT);
+ }
+
+ /**
+ * Set X-Mms-Read-Report value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setReadReport(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.READ_REPORT);
+ }
+
+ /**
+ * Get X-Mms-Retrieve-Status value.
+ *
+ * @return the value
+ */
+ public int getRetrieveStatus() {
+ return mPduHeaders.getOctet(PduHeaders.RETRIEVE_STATUS);
+ }
+
+ /**
+ * Set X-Mms-Retrieve-Status value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setRetrieveStatus(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.RETRIEVE_STATUS);
+ }
+
+ /**
+ * Get X-Mms-Retrieve-Text value.
+ *
+ * @return the value
+ */
+ public EncodedStringValue getRetrieveText() {
+ return mPduHeaders.getEncodedStringValue(PduHeaders.RETRIEVE_TEXT);
+ }
+
+ /**
+ * Set X-Mms-Retrieve-Text value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setRetrieveText(EncodedStringValue value) {
+ mPduHeaders.setEncodedStringValue(value, PduHeaders.RETRIEVE_TEXT);
+ }
+
+ /**
+ * Get X-Mms-Transaction-Id.
+ *
+ * @return the value
+ */
+ public byte[] getTransactionId() {
+ return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
+ }
+
+ /**
+ * Set X-Mms-Transaction-Id.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setTransactionId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
+ }
+
+ /*
+ * Optional, not supported header fields:
+ *
+ * public byte[] getApplicId() {return null;}
+ * public void setApplicId(byte[] value) {}
+ *
+ * public byte[] getAuxApplicId() {return null;}
+ * public void getAuxApplicId(byte[] value) {}
+ *
+ * public byte getContentClass() {return 0x00;}
+ * public void setApplicId(byte value) {}
+ *
+ * public byte getDrmContent() {return 0x00;}
+ * public void setDrmContent(byte value) {}
+ *
+ * public byte getDistributionIndicator() {return 0x00;}
+ * public void setDistributionIndicator(byte value) {}
+ *
+ * public PreviouslySentByValue getPreviouslySentBy() {return null;}
+ * public void setPreviouslySentBy(PreviouslySentByValue value) {}
+ *
+ * public PreviouslySentDateValue getPreviouslySentDate() {}
+ * public void setPreviouslySentDate(PreviouslySentDateValue value) {}
+ *
+ * public MmFlagsValue getMmFlags() {return null;}
+ * public void setMmFlags(MmFlagsValue value) {}
+ *
+ * public MmStateValue getMmState() {return null;}
+ * public void getMmState(MmStateValue value) {}
+ *
+ * public byte[] getReplaceId() {return 0x00;}
+ * public void setReplaceId(byte[] value) {}
+ *
+ * public byte[] getReplyApplicId() {return 0x00;}
+ * public void setReplyApplicId(byte[] value) {}
+ *
+ * public byte getReplyCharging() {return 0x00;}
+ * public void setReplyCharging(byte value) {}
+ *
+ * public byte getReplyChargingDeadline() {return 0x00;}
+ * public void setReplyChargingDeadline(byte value) {}
+ *
+ * public byte[] getReplyChargingId() {return 0x00;}
+ * public void setReplyChargingId(byte[] value) {}
+ *
+ * public long getReplyChargingSize() {return 0;}
+ * public void setReplyChargingSize(long value) {}
+ */
+}
diff --git a/src/android/support/v7/mms/pdu/SendConf.java b/src/android/support/v7/mms/pdu/SendConf.java
new file mode 100644
index 0000000..5486398
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/SendConf.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2007 Esmertec AG.
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+public class SendConf extends GenericPdu {
+ /**
+ * Empty constructor.
+ * Since the Pdu corresponding to this class is constructed
+ * by the Proxy-Relay server, this class is only instantiated
+ * by the Pdu Parser.
+ *
+ * @throws InvalidHeaderValueException if error occurs.
+ */
+ public SendConf() throws InvalidHeaderValueException {
+ super();
+ setMessageType(PduHeaders.MESSAGE_TYPE_SEND_CONF);
+ }
+
+ /**
+ * Constructor with given headers.
+ *
+ * @param headers Headers for this PDU.
+ */
+ SendConf(PduHeaders headers) {
+ super(headers);
+ }
+
+ /**
+ * Get Message-ID value.
+ *
+ * @return the value
+ */
+ public byte[] getMessageId() {
+ return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
+ }
+
+ /**
+ * Set Message-ID value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setMessageId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
+ }
+
+ /**
+ * Get X-Mms-Response-Status.
+ *
+ * @return the value
+ */
+ public int getResponseStatus() {
+ return mPduHeaders.getOctet(PduHeaders.RESPONSE_STATUS);
+ }
+
+ /**
+ * Set X-Mms-Response-Status.
+ *
+ * @param value the values
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setResponseStatus(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.RESPONSE_STATUS);
+ }
+
+ /**
+ * Get X-Mms-Transaction-Id field value.
+ *
+ * @return the X-Mms-Report-Allowed value
+ */
+ public byte[] getTransactionId() {
+ return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
+ }
+
+ /**
+ * Set X-Mms-Transaction-Id field value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setTransactionId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
+ }
+
+ /*
+ * Optional, not supported header fields:
+ *
+ * public byte[] getContentLocation() {return null;}
+ * public void setContentLocation(byte[] value) {}
+ *
+ * public EncodedStringValue getResponseText() {return null;}
+ * public void setResponseText(EncodedStringValue value) {}
+ *
+ * public byte getStoreStatus() {return 0x00;}
+ * public void setStoreStatus(byte value) {}
+ *
+ * public byte[] getStoreStatusText() {return null;}
+ * public void setStoreStatusText(byte[] value) {}
+ */
+}
diff --git a/src/android/support/v7/mms/pdu/SendReq.java b/src/android/support/v7/mms/pdu/SendReq.java
new file mode 100644
index 0000000..0b78cc3
--- /dev/null
+++ b/src/android/support/v7/mms/pdu/SendReq.java
@@ -0,0 +1,343 @@
+/*
+ * Copyright (C) 2007-2008 Esmertec AG.
+ * Copyright (C) 2007-2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.v7.mms.pdu;
+
+import android.util.Log;
+
+public class SendReq extends MultimediaMessagePdu {
+ private static final String TAG = "SendReq";
+
+ public SendReq() {
+ super();
+
+ try {
+ setMessageType(PduHeaders.MESSAGE_TYPE_SEND_REQ);
+ setMmsVersion(PduHeaders.CURRENT_MMS_VERSION);
+ // FIXME: Content-type must be decided according to whether
+ // SMIL part present.
+ setContentType("application/vnd.wap.multipart.related".getBytes());
+ setFrom(new EncodedStringValue(PduHeaders.FROM_INSERT_ADDRESS_TOKEN_STR.getBytes()));
+ setTransactionId(generateTransactionId());
+ } catch (InvalidHeaderValueException e) {
+ // Impossible to reach here since all headers we set above are valid.
+ Log.e(TAG, "Unexpected InvalidHeaderValueException.", e);
+ throw new RuntimeException(e);
+ }
+ }
+
+ private byte[] generateTransactionId() {
+ String transactionId = "T" + Long.toHexString(System.currentTimeMillis());
+ return transactionId.getBytes();
+ }
+
+ /**
+ * Constructor, used when composing a M-Send.req pdu.
+ *
+ * @param contentType the content type value
+ * @param from the from value
+ * @param mmsVersion current viersion of mms
+ * @param transactionId the transaction-id value
+ * @throws InvalidHeaderValueException if parameters are invalid.
+ * NullPointerException if contentType, form or transactionId is null.
+ */
+ public SendReq(byte[] contentType,
+ EncodedStringValue from,
+ int mmsVersion,
+ byte[] transactionId) throws InvalidHeaderValueException {
+ super();
+ setMessageType(PduHeaders.MESSAGE_TYPE_SEND_REQ);
+ setContentType(contentType);
+ setFrom(from);
+ setMmsVersion(mmsVersion);
+ setTransactionId(transactionId);
+ }
+
+ /**
+ * Constructor with given headers.
+ *
+ * @param headers Headers for this PDU.
+ */
+ SendReq(PduHeaders headers) {
+ super(headers);
+ }
+
+ /**
+ * Constructor with given headers and body
+ *
+ * @param headers Headers for this PDU.
+ * @param body Body of this PDu.
+ */
+ SendReq(PduHeaders headers, PduBody body) {
+ super(headers, body);
+ }
+
+ /**
+ * Get Bcc value.
+ *
+ * @return the value
+ */
+ public EncodedStringValue[] getBcc() {
+ return mPduHeaders.getEncodedStringValues(PduHeaders.BCC);
+ }
+
+ /**
+ * Add a "BCC" value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void addBcc(EncodedStringValue value) {
+ mPduHeaders.appendEncodedStringValue(value, PduHeaders.BCC);
+ }
+
+ /**
+ * Set "BCC" value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setBcc(EncodedStringValue[] value) {
+ mPduHeaders.setEncodedStringValues(value, PduHeaders.BCC);
+ }
+
+ /**
+ * Get CC value.
+ *
+ * @return the value
+ */
+ public EncodedStringValue[] getCc() {
+ return mPduHeaders.getEncodedStringValues(PduHeaders.CC);
+ }
+
+ /**
+ * Add a "CC" value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void addCc(EncodedStringValue value) {
+ mPduHeaders.appendEncodedStringValue(value, PduHeaders.CC);
+ }
+
+ /**
+ * Set "CC" value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setCc(EncodedStringValue[] value) {
+ mPduHeaders.setEncodedStringValues(value, PduHeaders.CC);
+ }
+
+ /**
+ * Get Content-type value.
+ *
+ * @return the value
+ */
+ public byte[] getContentType() {
+ return mPduHeaders.getTextString(PduHeaders.CONTENT_TYPE);
+ }
+
+ /**
+ * Set Content-type value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setContentType(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.CONTENT_TYPE);
+ }
+
+ /**
+ * Get X-Mms-Delivery-Report value.
+ *
+ * @return the value
+ */
+ public int getDeliveryReport() {
+ return mPduHeaders.getOctet(PduHeaders.DELIVERY_REPORT);
+ }
+
+ /**
+ * Set X-Mms-Delivery-Report value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setDeliveryReport(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.DELIVERY_REPORT);
+ }
+
+ /**
+ * Get X-Mms-Expiry value.
+ *
+ * Expiry-value = Value-length
+ * (Absolute-token Date-value | Relative-token Delta-seconds-value)
+ *
+ * @return the value
+ */
+ public long getExpiry() {
+ return mPduHeaders.getLongInteger(PduHeaders.EXPIRY);
+ }
+
+ /**
+ * Set X-Mms-Expiry value.
+ *
+ * @param value the value
+ */
+ public void setExpiry(long value) {
+ mPduHeaders.setLongInteger(value, PduHeaders.EXPIRY);
+ }
+
+ /**
+ * Get X-Mms-MessageSize value.
+ *
+ * Expiry-value = size of message
+ *
+ * @return the value
+ */
+ public long getMessageSize() {
+ return mPduHeaders.getLongInteger(PduHeaders.MESSAGE_SIZE);
+ }
+
+ /**
+ * Set X-Mms-MessageSize value.
+ *
+ * @param value the value
+ */
+ public void setMessageSize(long value) {
+ mPduHeaders.setLongInteger(value, PduHeaders.MESSAGE_SIZE);
+ }
+
+ /**
+ * Get X-Mms-Message-Class value.
+ * Message-class-value = Class-identifier | Token-text
+ * Class-identifier = Personal | Advertisement | Informational | Auto
+ *
+ * @return the value
+ */
+ public byte[] getMessageClass() {
+ return mPduHeaders.getTextString(PduHeaders.MESSAGE_CLASS);
+ }
+
+ /**
+ * Set X-Mms-Message-Class value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setMessageClass(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.MESSAGE_CLASS);
+ }
+
+ /**
+ * Get X-Mms-Read-Report value.
+ *
+ * @return the value
+ */
+ public int getReadReport() {
+ return mPduHeaders.getOctet(PduHeaders.READ_REPORT);
+ }
+
+ /**
+ * Set X-Mms-Read-Report value.
+ *
+ * @param value the value
+ * @throws InvalidHeaderValueException if the value is invalid.
+ */
+ public void setReadReport(int value) throws InvalidHeaderValueException {
+ mPduHeaders.setOctet(value, PduHeaders.READ_REPORT);
+ }
+
+ /**
+ * Set "To" value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setTo(EncodedStringValue[] value) {
+ mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
+ }
+
+ /**
+ * Get X-Mms-Transaction-Id field value.
+ *
+ * @return the X-Mms-Report-Allowed value
+ */
+ public byte[] getTransactionId() {
+ return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
+ }
+
+ /**
+ * Set X-Mms-Transaction-Id field value.
+ *
+ * @param value the value
+ * @throws NullPointerException if the value is null.
+ */
+ public void setTransactionId(byte[] value) {
+ mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
+ }
+
+ /*
+ * Optional, not supported header fields:
+ *
+ * public byte getAdaptationAllowed() {return 0};
+ * public void setAdaptationAllowed(btye value) {};
+ *
+ * public byte[] getApplicId() {return null;}
+ * public void setApplicId(byte[] value) {}
+ *
+ * public byte[] getAuxApplicId() {return null;}
+ * public void getAuxApplicId(byte[] value) {}
+ *
+ * public byte getContentClass() {return 0x00;}
+ * public void setApplicId(byte value) {}
+ *
+ * public long getDeliveryTime() {return 0};
+ * public void setDeliveryTime(long value) {};
+ *
+ * public byte getDrmContent() {return 0x00;}
+ * public void setDrmContent(byte value) {}
+ *
+ * public MmFlagsValue getMmFlags() {return null;}
+ * public void setMmFlags(MmFlagsValue value) {}
+ *
+ * public MmStateValue getMmState() {return null;}
+ * public void getMmState(MmStateValue value) {}
+ *
+ * public byte[] getReplyApplicId() {return 0x00;}
+ * public void setReplyApplicId(byte[] value) {}
+ *
+ * public byte getReplyCharging() {return 0x00;}
+ * public void setReplyCharging(byte value) {}
+ *
+ * public byte getReplyChargingDeadline() {return 0x00;}
+ * public void setReplyChargingDeadline(byte value) {}
+ *
+ * public byte[] getReplyChargingId() {return 0x00;}
+ * public void setReplyChargingId(byte[] value) {}
+ *
+ * public long getReplyChargingSize() {return 0;}
+ * public void setReplyChargingSize(long value) {}
+ *
+ * public byte[] getReplyApplicId() {return 0x00;}
+ * public void setReplyApplicId(byte[] value) {}
+ *
+ * public byte getStore() {return 0x00;}
+ * public void setStore(byte value) {}
+ */
+}
diff --git a/src/com/android/messaging/BugleApplication.java b/src/com/android/messaging/BugleApplication.java
new file mode 100644
index 0000000..a5aea9f
--- /dev/null
+++ b/src/com/android/messaging/BugleApplication.java
@@ -0,0 +1,262 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging;
+
+import android.app.Application;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Configuration;
+import android.os.Handler;
+import android.os.Looper;
+import android.support.v7.mms.CarrierConfigValuesLoader;
+import android.support.v7.mms.MmsManager;
+import android.telephony.CarrierConfigManager;
+
+import com.android.messaging.datamodel.DataModel;
+import com.android.messaging.receiver.SmsReceiver;
+import com.android.messaging.sms.ApnDatabase;
+import com.android.messaging.sms.BugleApnSettingsLoader;
+import com.android.messaging.sms.BugleUserAgentInfoLoader;
+import com.android.messaging.sms.MmsConfig;
+import com.android.messaging.ui.ConversationDrawables;
+import com.android.messaging.util.BugleGservices;
+import com.android.messaging.util.BugleGservicesKeys;
+import com.android.messaging.util.BuglePrefs;
+import com.android.messaging.util.BuglePrefsKeys;
+import com.android.messaging.util.DebugUtils;
+import com.android.messaging.util.LogUtil;
+import com.android.messaging.util.OsUtil;
+import com.android.messaging.util.PhoneUtils;
+import com.android.messaging.util.Trace;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.io.File;
+import java.lang.Thread.UncaughtExceptionHandler;
+
+/**
+ * The application object
+ */
+public class BugleApplication extends Application implements UncaughtExceptionHandler {
+ private static final String TAG = LogUtil.BUGLE_TAG;
+
+ private UncaughtExceptionHandler sSystemUncaughtExceptionHandler;
+ private static boolean sRunningTests = false;
+
+ @VisibleForTesting
+ protected static void setTestsRunning() {
+ sRunningTests = true;
+ }
+
+ /**
+ * @return true if we're running unit tests.
+ */
+ public static boolean isRunningTests() {
+ return sRunningTests;
+ }
+
+ @Override
+ public void onCreate() {
+ Trace.beginSection("app.onCreate");
+ super.onCreate();
+
+ // Note onCreate is called in both test and real application environments
+ if (!sRunningTests) {
+ // Only create the factory if not running tests
+ FactoryImpl.register(getApplicationContext(), this);
+ } else {
+ LogUtil.e(TAG, "BugleApplication.onCreate: FactoryImpl.register skipped for test run");
+ }
+
+ sSystemUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
+ Thread.setDefaultUncaughtExceptionHandler(this);
+ Trace.endSection();
+ }
+
+ @Override
+ public void onConfigurationChanged(final Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+
+ // Update conversation drawables when changing writing systems
+ // (Right-To-Left / Left-To-Right)
+ ConversationDrawables.get().updateDrawables();
+ }
+
+ // Called by the "real" factory from FactoryImpl.register() (i.e. not run in tests)
+ public void initializeSync(final Factory factory) {
+ Trace.beginSection("app.initializeSync");
+ final Context context = factory.getApplicationContext();
+ final BugleGservices bugleGservices = factory.getBugleGservices();
+ final BuglePrefs buglePrefs = factory.getApplicationPrefs();
+ final DataModel dataModel = factory.getDataModel();
+ final CarrierConfigValuesLoader carrierConfigValuesLoader =
+ factory.getCarrierConfigValuesLoader();
+
+ maybeStartProfiling();
+
+ BugleApplication.updateAppConfig(context);
+
+ // Initialize MMS lib
+ initMmsLib(context, bugleGservices, carrierConfigValuesLoader);
+ // Initialize APN database
+ ApnDatabase.initializeAppContext(context);
+ // Fixup messages in flight if we crashed and send any pending
+ dataModel.onApplicationCreated();
+ // Register carrier config change receiver
+ if (OsUtil.isAtLeastM()) {
+ registerCarrierConfigChangeReceiver(context);
+ }
+
+ Trace.endSection();
+ }
+
+ private static void registerCarrierConfigChangeReceiver(final Context context) {
+ context.registerReceiver(new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ LogUtil.i(TAG, "Carrier config changed. Reloading MMS config.");
+ MmsConfig.loadAsync();
+ }
+ }, new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED));
+ }
+
+ private static void initMmsLib(final Context context, final BugleGservices bugleGservices,
+ final CarrierConfigValuesLoader carrierConfigValuesLoader) {
+ MmsManager.setApnSettingsLoader(new BugleApnSettingsLoader(context));
+ MmsManager.setCarrierConfigValuesLoader(carrierConfigValuesLoader);
+ MmsManager.setUserAgentInfoLoader(new BugleUserAgentInfoLoader(context));
+ MmsManager.setUseWakeLock(true);
+ // If Gservices is configured not to use mms api, force MmsManager to always use
+ // legacy mms sending logic
+ MmsManager.setForceLegacyMms(!bugleGservices.getBoolean(
+ BugleGservicesKeys.USE_MMS_API_IF_PRESENT,
+ BugleGservicesKeys.USE_MMS_API_IF_PRESENT_DEFAULT));
+ bugleGservices.registerForChanges(new Runnable() {
+ @Override
+ public void run() {
+ MmsManager.setForceLegacyMms(!bugleGservices.getBoolean(
+ BugleGservicesKeys.USE_MMS_API_IF_PRESENT,
+ BugleGservicesKeys.USE_MMS_API_IF_PRESENT_DEFAULT));
+ }
+ });
+ }
+
+ public static void updateAppConfig(final Context context) {
+ // Make sure we set the correct state for the SMS/MMS receivers
+ SmsReceiver.updateSmsReceiveHandler(context);
+ }
+
+ // Called from thread started in FactoryImpl.register() (i.e. not run in tests)
+ public void initializeAsync(final Factory factory) {
+ // Handle shared prefs upgrade & Load MMS Configuration
+ Trace.beginSection("app.initializeAsync");
+ maybeHandleSharedPrefsUpgrade(factory);
+ MmsConfig.load();
+ Trace.endSection();
+ }
+
+ @Override
+ public void onLowMemory() {
+ super.onLowMemory();
+
+ if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
+ LogUtil.d(TAG, "BugleApplication.onLowMemory");
+ }
+ Factory.get().reclaimMemory();
+ }
+
+ @Override
+ public void uncaughtException(final Thread thread, final Throwable ex) {
+ final boolean background = getMainLooper().getThread() != thread;
+ if (background) {
+ LogUtil.e(TAG, "Uncaught exception in background thread " + thread, ex);
+
+ final Handler handler = new Handler(getMainLooper());
+ handler.post(new Runnable() {
+
+ @Override
+ public void run() {
+ sSystemUncaughtExceptionHandler.uncaughtException(thread, ex);
+ }
+ });
+ } else {
+ sSystemUncaughtExceptionHandler.uncaughtException(thread, ex);
+ }
+ }
+
+ private void maybeStartProfiling() {
+ // App startup profiling support. To use it:
+ // adb shell setprop log.tag.BugleProfile DEBUG
+ // # Start the app, wait for a 30s, download trace file:
+ // adb pull /data/data/com.android.messaging/cache/startup.trace /tmp
+ // # Open trace file (using adt/tools/traceview)
+ if (android.util.Log.isLoggable(LogUtil.PROFILE_TAG, android.util.Log.DEBUG)) {
+ // Start method tracing with a big enough buffer and let it run for 30s.
+ // Note we use a logging tag as we don't want to wait for gservices to start up.
+ final File file = DebugUtils.getDebugFile("startup.trace", true);
+ if (file != null) {
+ android.os.Debug.startMethodTracing(file.getAbsolutePath(), 160 * 1024 * 1024);
+ new Handler(Looper.getMainLooper()).postDelayed(
+ new Runnable() {
+ @Override
+ public void run() {
+ android.os.Debug.stopMethodTracing();
+ // Allow world to see trace file
+ DebugUtils.ensureReadable(file);
+ LogUtil.d(LogUtil.PROFILE_TAG, "Tracing complete - "
+ + file.getAbsolutePath());
+ }
+ }, 30000);
+ }
+ }
+ }
+
+ private void maybeHandleSharedPrefsUpgrade(final Factory factory) {
+ final int existingVersion = factory.getApplicationPrefs().getInt(
+ BuglePrefsKeys.SHARED_PREFERENCES_VERSION,
+ BuglePrefsKeys.SHARED_PREFERENCES_VERSION_DEFAULT);
+ final int targetVersion = Integer.parseInt(getString(R.string.pref_version));
+ if (targetVersion > existingVersion) {
+ LogUtil.i(LogUtil.BUGLE_TAG, "Upgrading shared prefs from " + existingVersion +
+ " to " + targetVersion);
+ try {
+ // Perform upgrade on application-wide prefs.
+ factory.getApplicationPrefs().onUpgrade(existingVersion, targetVersion);
+ // Perform upgrade on each subscription's prefs.
+ PhoneUtils.forEachActiveSubscription(new PhoneUtils.SubscriptionRunnable() {
+ @Override
+ public void runForSubscription(final int subId) {
+ factory.getSubscriptionPrefs(subId)
+ .onUpgrade(existingVersion, targetVersion);
+ }
+ });
+ factory.getApplicationPrefs().putInt(BuglePrefsKeys.SHARED_PREFERENCES_VERSION,
+ targetVersion);
+ } catch (final Exception ex) {
+ // Upgrade failed. Don't crash the app because we can always fall back to the
+ // default settings.
+ LogUtil.e(LogUtil.BUGLE_TAG, "Failed to upgrade shared prefs", ex);
+ }
+ } else if (targetVersion < existingVersion) {
+ // We don't care about downgrade since real user shouldn't encounter this, so log it
+ // and ignore any prefs migration.
+ LogUtil.e(LogUtil.BUGLE_TAG, "Shared prefs downgrade requested and ignored. " +
+ "oldVersion = " + existingVersion + ", newVersion = " + targetVersion);
+ }
+ }
+}
diff --git a/src/com/android/messaging/Factory.java b/src/com/android/messaging/Factory.java
new file mode 100644
index 0000000..c542a54
--- /dev/null
+++ b/src/com/android/messaging/Factory.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging;
+
+import android.content.Context;
+
+import com.android.messaging.datamodel.DataModel;
+import com.android.messaging.datamodel.MemoryCacheManager;
+import com.android.messaging.datamodel.ParticipantRefresh.ContactContentObserver;
+import com.android.messaging.datamodel.media.MediaCacheManager;
+import com.android.messaging.datamodel.media.MediaResourceManager;
+import com.android.messaging.sms.BugleCarrierConfigValuesLoader;
+import com.android.messaging.ui.UIIntents;
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.BugleGservices;
+import com.android.messaging.util.BuglePrefs;
+import com.android.messaging.util.MediaUtil;
+import com.android.messaging.util.PhoneUtils;
+import com.google.common.annotations.VisibleForTesting;
+
+public abstract class Factory {
+
+ // Making this volatile because on the unit tests, setInstance is called from a unit test
+ // thread, and then it's read on the UI thread.
+ private static volatile Factory sInstance;
+ @VisibleForTesting
+ protected static boolean sRegistered;
+ @VisibleForTesting
+ protected static boolean sInitialized;
+
+ public static Factory get() {
+ return sInstance;
+ }
+
+ protected static void setInstance(final Factory factory) {
+ // Not allowed to call this after real application initialization is complete
+ Assert.isTrue(!sRegistered);
+ Assert.isTrue(!sInitialized);
+ sInstance = factory;
+ }
+ public abstract void onRequiredPermissionsAcquired();
+
+ public abstract Context getApplicationContext();
+ public abstract DataModel getDataModel();
+ public abstract BugleGservices getBugleGservices();
+ public abstract BuglePrefs getApplicationPrefs();
+ public abstract BuglePrefs getSubscriptionPrefs(int subId);
+ public abstract BuglePrefs getWidgetPrefs();
+ public abstract UIIntents getUIIntents();
+ public abstract MemoryCacheManager getMemoryCacheManager();
+ public abstract MediaResourceManager getMediaResourceManager();
+ public abstract MediaCacheManager getMediaCacheManager();
+ public abstract ContactContentObserver getContactContentObserver();
+ public abstract PhoneUtils getPhoneUtils(int subId);
+ public abstract MediaUtil getMediaUtil();
+ public abstract BugleCarrierConfigValuesLoader getCarrierConfigValuesLoader();
+ // Note this needs to run from any thread
+ public abstract void reclaimMemory();
+
+ public abstract void onActivityResume();
+}
diff --git a/src/com/android/messaging/FactoryImpl.java b/src/com/android/messaging/FactoryImpl.java
new file mode 100644
index 0000000..a862308
--- /dev/null
+++ b/src/com/android/messaging/FactoryImpl.java
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging;
+
+import android.content.Context;
+import android.os.Process;
+import android.telephony.SmsManager;
+import android.util.SparseArray;
+
+import com.android.messaging.datamodel.DataModel;
+import com.android.messaging.datamodel.DataModelImpl;
+import com.android.messaging.datamodel.MemoryCacheManager;
+import com.android.messaging.datamodel.ParticipantRefresh.ContactContentObserver;
+import com.android.messaging.datamodel.data.ParticipantData;
+import com.android.messaging.datamodel.media.BugleMediaCacheManager;
+import com.android.messaging.datamodel.media.MediaCacheManager;
+import com.android.messaging.datamodel.media.MediaResourceManager;
+import com.android.messaging.sms.BugleCarrierConfigValuesLoader;
+import com.android.messaging.ui.UIIntents;
+import com.android.messaging.ui.UIIntentsImpl;
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.BugleApplicationPrefs;
+import com.android.messaging.util.BugleGservices;
+import com.android.messaging.util.BugleGservicesImpl;
+import com.android.messaging.util.BuglePrefs;
+import com.android.messaging.util.BugleSubscriptionPrefs;
+import com.android.messaging.util.BugleWidgetPrefs;
+import com.android.messaging.util.LogUtil;
+import com.android.messaging.util.MediaUtil;
+import com.android.messaging.util.MediaUtilImpl;
+import com.android.messaging.util.OsUtil;
+import com.android.messaging.util.PhoneUtils;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+class FactoryImpl extends Factory {
+ private BugleApplication mApplication;
+ private DataModel mDataModel;
+ private BugleGservices mBugleGservices;
+ private BugleApplicationPrefs mBugleApplicationPrefs;
+ private BugleWidgetPrefs mBugleWidgetPrefs;
+ private Context mApplicationContext;
+ private UIIntents mUIIntents;
+ private MemoryCacheManager mMemoryCacheManager;
+ private MediaResourceManager mMediaResourceManager;
+ private MediaCacheManager mMediaCacheManager;
+ private ContactContentObserver mContactContentObserver;
+ private PhoneUtils mPhoneUtils;
+ private MediaUtil mMediaUtil;
+ private SparseArray mSubscriptionPrefs;
+ private BugleCarrierConfigValuesLoader mCarrierConfigValuesLoader;
+
+ // Cached instance for Pre-L_MR1
+ private static final Object PHONEUTILS_INSTANCE_LOCK = new Object();
+ private static PhoneUtils sPhoneUtilsInstancePreLMR1 = null;
+ // Cached subId->instance for L_MR1 and beyond
+ private static final ConcurrentHashMap sPhoneUtilsInstanceCacheLMR1 =
+ new ConcurrentHashMap<>();
+
+ private FactoryImpl() {
+ }
+
+ public static Factory register(final Context applicationContext,
+ final BugleApplication application) {
+ // This only gets called once (from BugleApplication.onCreate), but its not called in tests.
+ Assert.isTrue(!sRegistered);
+ Assert.isNull(Factory.get());
+
+ final FactoryImpl factory = new FactoryImpl();
+ Factory.setInstance(factory);
+ sRegistered = true;
+
+ // At this point Factory is published. Services can now get initialized and depend on
+ // Factory.get().
+ factory.mApplication = application;
+ factory.mApplicationContext = applicationContext;
+ factory.mMemoryCacheManager = new MemoryCacheManager();
+ factory.mMediaCacheManager = new BugleMediaCacheManager();
+ factory.mMediaResourceManager = new MediaResourceManager();
+ factory.mBugleGservices = new BugleGservicesImpl(applicationContext);
+ factory.mBugleApplicationPrefs = new BugleApplicationPrefs(applicationContext);
+ factory.mDataModel = new DataModelImpl(applicationContext);
+ factory.mBugleWidgetPrefs = new BugleWidgetPrefs(applicationContext);
+ factory.mUIIntents = new UIIntentsImpl();
+ factory.mContactContentObserver = new ContactContentObserver();
+ factory.mMediaUtil = new MediaUtilImpl();
+ factory.mSubscriptionPrefs = new SparseArray();
+ factory.mCarrierConfigValuesLoader = new BugleCarrierConfigValuesLoader(applicationContext);
+
+ Assert.initializeGservices(factory.mBugleGservices);
+ LogUtil.initializeGservices(factory.mBugleGservices);
+
+ if (OsUtil.hasRequiredPermissions()) {
+ factory.onRequiredPermissionsAcquired();
+ }
+
+ return factory;
+ }
+
+ @Override
+ public void onRequiredPermissionsAcquired() {
+ if (sInitialized) {
+ return;
+ }
+ sInitialized = true;
+
+ mApplication.initializeSync(this);
+
+ final Thread asyncInitialization = new Thread() {
+ @Override
+ public void run() {
+ Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+ mApplication.initializeAsync(FactoryImpl.this);
+ }
+ };
+ asyncInitialization.start();
+ }
+
+ @Override
+ public Context getApplicationContext() {
+ return mApplicationContext;
+ }
+
+ @Override
+ public DataModel getDataModel() {
+ return mDataModel;
+ }
+
+ @Override
+ public BugleGservices getBugleGservices() {
+ return mBugleGservices;
+ }
+
+ @Override
+ public BuglePrefs getApplicationPrefs() {
+ return mBugleApplicationPrefs;
+ }
+
+ @Override
+ public BuglePrefs getWidgetPrefs() {
+ return mBugleWidgetPrefs;
+ }
+
+ @Override
+ public BuglePrefs getSubscriptionPrefs(int subId) {
+ subId = PhoneUtils.getDefault().getEffectiveSubId(subId);
+ BugleSubscriptionPrefs pref = mSubscriptionPrefs.get(subId);
+ if (pref == null) {
+ synchronized (this) {
+ if ((pref = mSubscriptionPrefs.get(subId)) == null) {
+ pref = new BugleSubscriptionPrefs(getApplicationContext(), subId);
+ mSubscriptionPrefs.put(subId, pref);
+ }
+ }
+ }
+ return pref;
+ }
+
+ @Override
+ public UIIntents getUIIntents() {
+ return mUIIntents;
+ }
+
+ @Override
+ public MemoryCacheManager getMemoryCacheManager() {
+ return mMemoryCacheManager;
+ }
+
+ @Override
+ public MediaResourceManager getMediaResourceManager() {
+ return mMediaResourceManager;
+ }
+
+ @Override
+ public MediaCacheManager getMediaCacheManager() {
+ return mMediaCacheManager;
+ }
+
+ @Override
+ public ContactContentObserver getContactContentObserver() {
+ return mContactContentObserver;
+ }
+
+ @Override
+ public PhoneUtils getPhoneUtils(int subId) {
+ if (OsUtil.isAtLeastL_MR1()) {
+ if (subId == ParticipantData.DEFAULT_SELF_SUB_ID) {
+ subId = SmsManager.getDefaultSmsSubscriptionId();
+ }
+ if (subId < 0) {
+ LogUtil.w(LogUtil.BUGLE_TAG, "PhoneUtils.getForLMR1(): invalid subId = " + subId);
+ subId = ParticipantData.DEFAULT_SELF_SUB_ID;
+ }
+ PhoneUtils instance = sPhoneUtilsInstanceCacheLMR1.get(subId);
+ if (instance == null) {
+ instance = new PhoneUtils.PhoneUtilsLMR1(subId);
+ sPhoneUtilsInstanceCacheLMR1.putIfAbsent(subId, instance);
+ }
+ return instance;
+ } else {
+ Assert.isTrue(subId == ParticipantData.DEFAULT_SELF_SUB_ID);
+ if (sPhoneUtilsInstancePreLMR1 == null) {
+ synchronized (PHONEUTILS_INSTANCE_LOCK) {
+ if (sPhoneUtilsInstancePreLMR1 == null) {
+ sPhoneUtilsInstancePreLMR1 = new PhoneUtils.PhoneUtilsPreLMR1();
+ }
+ }
+ }
+ return sPhoneUtilsInstancePreLMR1;
+ }
+ }
+
+ @Override
+ public void reclaimMemory() {
+ mMemoryCacheManager.reclaimMemory();
+ }
+
+ @Override
+ public void onActivityResume() {
+ }
+
+ @Override
+ public MediaUtil getMediaUtil() {
+ return mMediaUtil;
+ }
+
+ @Override
+ public BugleCarrierConfigValuesLoader getCarrierConfigValuesLoader() {
+ return mCarrierConfigValuesLoader;
+ }
+}
diff --git a/src/com/android/messaging/annotation/VisibleForAnimation.java b/src/com/android/messaging/annotation/VisibleForAnimation.java
new file mode 100644
index 0000000..f97d827
--- /dev/null
+++ b/src/com/android/messaging/annotation/VisibleForAnimation.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.messaging.annotation;
+
+/**
+ * An annotation for class members that are made visible for Android's ObjectAnimator to work
+ * properly through reflection.
+ */
+public @interface VisibleForAnimation {
+}
diff --git a/src/com/android/messaging/datamodel/BitmapPool.java b/src/com/android/messaging/datamodel/BitmapPool.java
new file mode 100644
index 0000000..1ec4f76
--- /dev/null
+++ b/src/com/android/messaging/datamodel/BitmapPool.java
@@ -0,0 +1,364 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.support.annotation.NonNull;
+import android.text.TextUtils;
+import android.util.SparseArray;
+
+import com.android.messaging.datamodel.MemoryCacheManager.MemoryCache;
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.LogUtil;
+
+import java.io.InputStream;
+
+/**
+ * Class for creating / loading / reusing bitmaps. This class allow the user to create a new bitmap,
+ * reuse an bitmap from the pool and to return a bitmap for future reuse. The pool of bitmaps
+ * allows for faster decode and more efficient memory usage.
+ * Note: consumers should not create BitmapPool directly, but instead get the pool they want from
+ * the BitmapPoolManager.
+ */
+public class BitmapPool implements MemoryCache {
+ public static final int MAX_SUPPORTED_IMAGE_DIMENSION = 0xFFFF;
+
+ protected static final boolean VERBOSE = false;
+
+ /**
+ * Number of reuse failures to skip before reporting.
+ */
+ private static final int FAILED_REPORTING_FREQUENCY = 100;
+
+ /**
+ * Count of reuse failures which have occurred.
+ */
+ private static volatile int sFailedBitmapReuseCount = 0;
+
+ /**
+ * Overall pool data structure which currently only supports rectangular bitmaps. The size of
+ * one of the sides is used to index into the SparseArray.
+ */
+ private final SparseArray mPool;
+ private final Object mPoolLock = new Object();
+ private final String mPoolName;
+ private final int mMaxSize;
+
+ /**
+ * Inner structure which holds a pool of bitmaps all the same size (i.e. all have the same
+ * width as each other and height as each other, but not necessarily the same).
+ */
+ private class SingleSizePool {
+ int mNumItems;
+ final Bitmap[] mBitmaps;
+
+ SingleSizePool(final int maxPoolSize) {
+ mNumItems = 0;
+ mBitmaps = new Bitmap[maxPoolSize];
+ }
+ }
+
+ /**
+ * Creates a pool of reused bitmaps with helper decode methods which will attempt to use the
+ * reclaimed bitmaps. This will help speed up the creation of bitmaps by using already allocated
+ * bitmaps.
+ * @param maxSize The overall max size of the pool. When the pool exceeds this size, all calls
+ * to reclaimBitmap(Bitmap) will result in recycling the bitmap.
+ * @param name Name of the bitmap pool and only used for logging. Can not be null.
+ */
+ BitmapPool(final int maxSize, @NonNull final String name) {
+ Assert.isTrue(maxSize > 0);
+ Assert.isTrue(!TextUtils.isEmpty(name));
+ mPoolName = name;
+ mMaxSize = maxSize;
+ mPool = new SparseArray();
+ }
+
+ @Override
+ public void reclaim() {
+ synchronized (mPoolLock) {
+ for (int p = 0; p < mPool.size(); p++) {
+ final SingleSizePool singleSizePool = mPool.valueAt(p);
+ for (int i = 0; i < singleSizePool.mNumItems; i++) {
+ singleSizePool.mBitmaps[i].recycle();
+ singleSizePool.mBitmaps[i] = null;
+ }
+ singleSizePool.mNumItems = 0;
+ }
+ mPool.clear();
+ }
+ }
+
+ /**
+ * Creates a new BitmapFactory.Options.
+ */
+ public static BitmapFactory.Options getBitmapOptionsForPool(final boolean scaled,
+ final int inputDensity, final int targetDensity) {
+ final BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inScaled = scaled;
+ options.inDensity = inputDensity;
+ options.inTargetDensity = targetDensity;
+ options.inSampleSize = 1;
+ options.inJustDecodeBounds = false;
+ options.inMutable = true;
+ return options;
+ }
+
+ /**
+ * @return The pool key for the provided image dimensions or 0 if either width or height is
+ * greater than the max supported image dimension.
+ */
+ private int getPoolKey(final int width, final int height) {
+ if (width > MAX_SUPPORTED_IMAGE_DIMENSION || height > MAX_SUPPORTED_IMAGE_DIMENSION) {
+ return 0;
+ }
+ return (width << 16) | height;
+ }
+
+ /**
+ *
+ * @return A bitmap in the pool with the specified dimensions or null if no bitmap with the
+ * specified dimension is available.
+ */
+ private Bitmap findPoolBitmap(final int width, final int height) {
+ final int poolKey = getPoolKey(width, height);
+ if (poolKey != 0) {
+ synchronized (mPoolLock) {
+ // Take a bitmap from the pool if one is available
+ final SingleSizePool singlePool = mPool.get(poolKey);
+ if (singlePool != null && singlePool.mNumItems > 0) {
+ singlePool.mNumItems--;
+ final Bitmap foundBitmap = singlePool.mBitmaps[singlePool.mNumItems];
+ singlePool.mBitmaps[singlePool.mNumItems] = null;
+ return foundBitmap;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Internal function to try and find a bitmap in the pool which matches the desired width and
+ * height and then set that in the bitmap options properly.
+ *
+ * TODO: Why do we take a width/height? Shouldn't this already be in the
+ * BitmapFactory.Options instance? Can we assert that they match?
+ * @param optionsTmp The BitmapFactory.Options to update with the bitmap for the system to try
+ * to reuse.
+ * @param width The width of the reusable bitmap.
+ * @param height The height of the reusable bitmap.
+ */
+ private void assignPoolBitmap(final BitmapFactory.Options optionsTmp, final int width,
+ final int height) {
+ if (optionsTmp.inJustDecodeBounds) {
+ return;
+ }
+ optionsTmp.inBitmap = findPoolBitmap(width, height);
+ }
+
+ /**
+ * Load a resource into a bitmap. Uses a bitmap from the pool if possible to reduce memory
+ * turnover.
+ * @param resourceId Resource id to load.
+ * @param resources Application resources. Cannot be null.
+ * @param optionsTmp Should be the same options returned from getBitmapOptionsForPool(). Cannot
+ * be null.
+ * @param width The width of the bitmap.
+ * @param height The height of the bitmap.
+ * @return The decoded Bitmap with the resource drawn in it.
+ */
+ public Bitmap decodeSampledBitmapFromResource(final int resourceId,
+ @NonNull final Resources resources, @NonNull final BitmapFactory.Options optionsTmp,
+ final int width, final int height) {
+ Assert.notNull(resources);
+ Assert.notNull(optionsTmp);
+ Assert.isTrue(width > 0);
+ Assert.isTrue(height > 0);
+ assignPoolBitmap(optionsTmp, width, height);
+ Bitmap b = null;
+ try {
+ b = BitmapFactory.decodeResource(resources, resourceId, optionsTmp);
+ } catch (final IllegalArgumentException e) {
+ // BitmapFactory couldn't decode the file, try again without an inputBufferBitmap.
+ if (optionsTmp.inBitmap != null) {
+ optionsTmp.inBitmap = null;
+ b = BitmapFactory.decodeResource(resources, resourceId, optionsTmp);
+ sFailedBitmapReuseCount++;
+ if (sFailedBitmapReuseCount % FAILED_REPORTING_FREQUENCY == 0) {
+ LogUtil.w(LogUtil.BUGLE_TAG,
+ "Pooled bitmap consistently not being reused count = " +
+ sFailedBitmapReuseCount);
+ }
+ }
+ } catch (final OutOfMemoryError e) {
+ LogUtil.w(LogUtil.BUGLE_TAG, "Oom decoding resource " + resourceId);
+ reclaim();
+ }
+ return b;
+ }
+
+ /**
+ * Load an input stream into a bitmap. Uses a bitmap from the pool if possible to reduce memory
+ * turnover.
+ * @param inputStream InputStream load. Cannot be null.
+ * @param optionsTmp Should be the same options returned from getBitmapOptionsForPool(). Cannot
+ * be null.
+ * @param width The width of the bitmap.
+ * @param height The height of the bitmap.
+ * @return The decoded Bitmap with the resource drawn in it.
+ */
+ public Bitmap decodeSampledBitmapFromInputStream(@NonNull final InputStream inputStream,
+ @NonNull final BitmapFactory.Options optionsTmp,
+ final int width, final int height) {
+ Assert.notNull(inputStream);
+ Assert.isTrue(width > 0);
+ Assert.isTrue(height > 0);
+ assignPoolBitmap(optionsTmp, width, height);
+ Bitmap b = null;
+ try {
+ b = BitmapFactory.decodeStream(inputStream, null, optionsTmp);
+ } catch (final IllegalArgumentException e) {
+ // BitmapFactory couldn't decode the file, try again without an inputBufferBitmap.
+ if (optionsTmp.inBitmap != null) {
+ optionsTmp.inBitmap = null;
+ b = BitmapFactory.decodeStream(inputStream, null, optionsTmp);
+ sFailedBitmapReuseCount++;
+ if (sFailedBitmapReuseCount % FAILED_REPORTING_FREQUENCY == 0) {
+ LogUtil.w(LogUtil.BUGLE_TAG,
+ "Pooled bitmap consistently not being reused count = " +
+ sFailedBitmapReuseCount);
+ }
+ }
+ } catch (final OutOfMemoryError e) {
+ LogUtil.w(LogUtil.BUGLE_TAG, "Oom decoding inputStream");
+ reclaim();
+ }
+ return b;
+ }
+
+ /**
+ * Turn encoded bytes into a bitmap. Uses a bitmap from the pool if possible to reduce memory
+ * turnover.
+ * @param bytes Encoded bytes to draw on the bitmap. Cannot be null.
+ * @param optionsTmp The bitmap will set here and the input should be generated from
+ * getBitmapOptionsForPool(). Cannot be null.
+ * @param width The width of the bitmap.
+ * @param height The height of the bitmap.
+ * @return A Bitmap with the encoded bytes drawn in it.
+ */
+ public Bitmap decodeByteArray(@NonNull final byte[] bytes,
+ @NonNull final BitmapFactory.Options optionsTmp, final int width,
+ final int height) throws OutOfMemoryError {
+ Assert.notNull(bytes);
+ Assert.notNull(optionsTmp);
+ Assert.isTrue(width > 0);
+ Assert.isTrue(height > 0);
+ assignPoolBitmap(optionsTmp, width, height);
+ Bitmap b = null;
+ try {
+ b = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, optionsTmp);
+ } catch (final IllegalArgumentException e) {
+ if (VERBOSE) {
+ LogUtil.v(LogUtil.BUGLE_TAG, "BitmapPool(" + mPoolName +
+ ") Unable to use pool bitmap");
+ }
+ // BitmapFactory couldn't decode the file, try again without an inputBufferBitmap.
+ // (i.e. without the bitmap from the pool)
+ if (optionsTmp.inBitmap != null) {
+ optionsTmp.inBitmap = null;
+ b = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, optionsTmp);
+ sFailedBitmapReuseCount++;
+ if (sFailedBitmapReuseCount % FAILED_REPORTING_FREQUENCY == 0) {
+ LogUtil.w(LogUtil.BUGLE_TAG,
+ "Pooled bitmap consistently not being reused count = " +
+ sFailedBitmapReuseCount);
+ }
+ }
+ }
+ return b;
+ }
+
+ /**
+ * Creates a bitmap with the given size, this will reuse a bitmap in the pool, if one is
+ * available, otherwise this will create a new one.
+ * @param width The desired width of the bitmap.
+ * @param height The desired height of the bitmap.
+ * @return A bitmap with the desired width and height, this maybe a reused bitmap from the pool.
+ */
+ public Bitmap createOrReuseBitmap(final int width, final int height) {
+ Bitmap b = findPoolBitmap(width, height);
+ if (b == null) {
+ b = createBitmap(width, height);
+ }
+ return b;
+ }
+
+ /**
+ * This will create a new bitmap regardless of pool state.
+ * @param width The desired width of the bitmap.
+ * @param height The desired height of the bitmap.
+ * @return A bitmap with the desired width and height.
+ */
+ private Bitmap createBitmap(final int width, final int height) {
+ return Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ }
+
+ /**
+ * Called when a bitmap is finished being used so that it can be used for another bitmap in the
+ * future or recycled. Any bitmaps returned should not be used by the caller again.
+ * @param b The bitmap to return to the pool for future usage or recycled. This cannot be null.
+ */
+ public void reclaimBitmap(@NonNull final Bitmap b) {
+ Assert.notNull(b);
+ final int poolKey = getPoolKey(b.getWidth(), b.getHeight());
+ if (poolKey == 0 || !b.isMutable()) {
+ // Unsupported image dimensions or a immutable bitmap.
+ b.recycle();
+ return;
+ }
+ synchronized (mPoolLock) {
+ SingleSizePool singleSizePool = mPool.get(poolKey);
+ if (singleSizePool == null) {
+ singleSizePool = new SingleSizePool(mMaxSize);
+ mPool.append(poolKey, singleSizePool);
+ }
+ if (singleSizePool.mNumItems < singleSizePool.mBitmaps.length) {
+ singleSizePool.mBitmaps[singleSizePool.mNumItems] = b;
+ singleSizePool.mNumItems++;
+ } else {
+ b.recycle();
+ }
+ }
+ }
+
+ /**
+ * @return whether the pool is full for a given width and height.
+ */
+ public boolean isFull(final int width, final int height) {
+ final int poolKey = getPoolKey(width, height);
+ synchronized (mPoolLock) {
+ final SingleSizePool singleSizePool = mPool.get(poolKey);
+ if (singleSizePool != null &&
+ singleSizePool.mNumItems >= singleSizePool.mBitmaps.length) {
+ return true;
+ }
+ return false;
+ }
+ }
+}
diff --git a/src/com/android/messaging/datamodel/BoundCursorLoader.java b/src/com/android/messaging/datamodel/BoundCursorLoader.java
new file mode 100644
index 0000000..84d38e6
--- /dev/null
+++ b/src/com/android/messaging/datamodel/BoundCursorLoader.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.net.Uri;
+
+/**
+ * Extension to basic cursor loader that has an attached binding id
+ */
+public class BoundCursorLoader extends CursorLoader {
+ private final String mBindingId;
+
+ /**
+ * Create cursor loader for associated binding id
+ */
+ public BoundCursorLoader(final String bindingId, final Context context, final Uri uri,
+ final String[] projection, final String selection, final String[] selectionArgs,
+ final String sortOrder) {
+ super(context, uri, projection, selection, selectionArgs, sortOrder);
+ mBindingId = bindingId;
+ }
+
+ /**
+ * Binding id associated with this loader - consume can check to verify data still valid
+ * @return
+ */
+ public String getBindingId() {
+ return mBindingId;
+ }
+}
diff --git a/src/com/android/messaging/datamodel/BugleDatabaseOperations.java b/src/com/android/messaging/datamodel/BugleDatabaseOperations.java
new file mode 100644
index 0000000..8c40177
--- /dev/null
+++ b/src/com/android/messaging/datamodel/BugleDatabaseOperations.java
@@ -0,0 +1,1919 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDoneException;
+import android.database.sqlite.SQLiteStatement;
+import android.net.Uri;
+import android.os.ParcelFileDescriptor;
+import android.support.v4.util.ArrayMap;
+import android.support.v4.util.SimpleArrayMap;
+import android.text.TextUtils;
+
+import com.android.messaging.Factory;
+import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns;
+import com.android.messaging.datamodel.DatabaseHelper.ConversationParticipantsColumns;
+import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
+import com.android.messaging.datamodel.DatabaseHelper.PartColumns;
+import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
+import com.android.messaging.datamodel.ParticipantRefresh.ConversationParticipantsQuery;
+import com.android.messaging.datamodel.data.ConversationListItemData;
+import com.android.messaging.datamodel.data.MessageData;
+import com.android.messaging.datamodel.data.MessagePartData;
+import com.android.messaging.datamodel.data.ParticipantData;
+import com.android.messaging.sms.MmsUtils;
+import com.android.messaging.ui.UIIntents;
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
+import com.android.messaging.util.AvatarUriUtil;
+import com.android.messaging.util.ContentType;
+import com.android.messaging.util.LogUtil;
+import com.android.messaging.util.OsUtil;
+import com.android.messaging.util.PhoneUtils;
+import com.android.messaging.util.UriUtil;
+import com.android.messaging.widget.WidgetConversationProvider;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import javax.annotation.Nullable;
+
+
+/**
+ * This class manages updating our local database
+ */
+public class BugleDatabaseOperations {
+
+ private static final String TAG = LogUtil.BUGLE_DATABASE_TAG;
+
+ // Global cache of phone numbers -> participant id mapping since this call is expensive.
+ private static final ArrayMap sNormalizedPhoneNumberToParticipantIdCache =
+ new ArrayMap();
+
+ /**
+ * Convert list of recipient strings (email/phone number) into list of ConversationParticipants
+ *
+ * @param recipients The recipient list
+ * @param refSubId The subId used to normalize phone numbers in the recipients
+ */
+ static ArrayList getConversationParticipantsFromRecipients(
+ final List recipients, final int refSubId) {
+ // Generate a list of partially formed participants
+ final ArrayList participants = new
+ ArrayList();
+
+ if (recipients != null) {
+ for (final String recipient : recipients) {
+ participants.add(ParticipantData.getFromRawPhoneBySimLocale(recipient, refSubId));
+ }
+ }
+ return participants;
+ }
+
+ /**
+ * Sanitize a given list of conversation participants by de-duping and stripping out self
+ * phone number in group conversation.
+ */
+ @DoesNotRunOnMainThread
+ public static void sanitizeConversationParticipants(final List participants) {
+ Assert.isNotMainThread();
+ if (participants.size() > 0) {
+ // First remove redundant phone numbers
+ final HashSet recipients = new HashSet();
+ for (int i = participants.size() - 1; i >= 0; i--) {
+ final String recipient = participants.get(i).getNormalizedDestination();
+ if (!recipients.contains(recipient)) {
+ recipients.add(recipient);
+ } else {
+ participants.remove(i);
+ }
+ }
+ if (participants.size() > 1) {
+ // Remove self phone number from group conversation.
+ final HashSet selfNumbers =
+ PhoneUtils.getDefault().getNormalizedSelfNumbers();
+ int removed = 0;
+ // Do this two-pass scan to avoid unnecessary memory allocation.
+ // Prescan to count the self numbers in the list
+ for (final ParticipantData p : participants) {
+ if (selfNumbers.contains(p.getNormalizedDestination())) {
+ removed++;
+ }
+ }
+ // If all are self numbers, maybe that's what the user wants, just leave
+ // the participants as is. Otherwise, do another scan to remove self numbers.
+ if (removed < participants.size()) {
+ for (int i = participants.size() - 1; i >= 0; i--) {
+ final String recipient = participants.get(i).getNormalizedDestination();
+ if (selfNumbers.contains(recipient)) {
+ participants.remove(i);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Convert list of ConversationParticipants into recipient strings (email/phone number)
+ */
+ @DoesNotRunOnMainThread
+ public static ArrayList getRecipientsFromConversationParticipants(
+ final List participants) {
+ Assert.isNotMainThread();
+ // First find the thread id for this list of participants.
+ final ArrayList recipients = new ArrayList();
+
+ for (final ParticipantData participant : participants) {
+ recipients.add(participant.getSendDestination());
+ }
+ return recipients;
+ }
+
+ /**
+ * Get or create a conversation based on the message's thread id
+ *
+ * NOTE: There are phones on which you can't get the recipients from the thread id for SMS
+ * until you have a message, so use getOrCreateConversationFromRecipient instead.
+ *
+ * TODO: Should this be in MMS/SMS code?
+ *
+ * @param db the database
+ * @param threadId The message's thread
+ * @param senderBlocked Flag whether sender of message is in blocked people list
+ * @param refSubId The reference subId for canonicalize phone numbers
+ * @return conversationId
+ */
+ @DoesNotRunOnMainThread
+ public static String getOrCreateConversationFromThreadId(final DatabaseWrapper db,
+ final long threadId, final boolean senderBlocked, final int refSubId) {
+ Assert.isNotMainThread();
+ final List recipients = MmsUtils.getRecipientsByThread(threadId);
+ final ArrayList participants =
+ getConversationParticipantsFromRecipients(recipients, refSubId);
+
+ return getOrCreateConversation(db, threadId, senderBlocked, participants, false, false,
+ null);
+ }
+
+ /**
+ * Get or create a conversation based on provided recipient
+ *
+ * @param db the database
+ * @param threadId The message's thread
+ * @param senderBlocked Flag whether sender of message is in blocked people list
+ * @param recipient recipient for thread
+ * @return conversationId
+ */
+ @DoesNotRunOnMainThread
+ public static String getOrCreateConversationFromRecipient(final DatabaseWrapper db,
+ final long threadId, final boolean senderBlocked, final ParticipantData recipient) {
+ Assert.isNotMainThread();
+ final ArrayList recipients = new ArrayList<>(1);
+ recipients.add(recipient);
+ return getOrCreateConversation(db, threadId, senderBlocked, recipients, false, false, null);
+ }
+
+ /**
+ * Get or create a conversation based on provided participants
+ *
+ * @param db the database
+ * @param threadId The message's thread
+ * @param archived Flag whether the conversation should be created archived
+ * @param participants list of conversation participants
+ * @param noNotification If notification should be disabled
+ * @param noVibrate If vibrate on notification should be disabled
+ * @param soundUri If there is custom sound URI
+ * @return a conversation id
+ */
+ @DoesNotRunOnMainThread
+ public static String getOrCreateConversation(final DatabaseWrapper db, final long threadId,
+ final boolean archived, final ArrayList participants,
+ boolean noNotification, boolean noVibrate, String soundUri) {
+ Assert.isNotMainThread();
+
+ // Check to see if this conversation is already in out local db cache
+ String conversationId = BugleDatabaseOperations.getExistingConversation(db, threadId,
+ false);
+
+ if (conversationId == null) {
+ final String conversationName = ConversationListItemData.generateConversationName(
+ participants);
+
+ // Create the conversation with the default self participant which always maps to
+ // the system default subscription.
+ final ParticipantData self = ParticipantData.getSelfParticipant(
+ ParticipantData.DEFAULT_SELF_SUB_ID);
+
+ db.beginTransaction();
+ try {
+ // Look up the "self" participantId (creating if necessary)
+ final String selfId =
+ BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, self);
+ // Create a new conversation
+ conversationId = BugleDatabaseOperations.createConversationInTransaction(
+ db, threadId, conversationName, selfId, participants, archived,
+ noNotification, noVibrate, soundUri);
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+ }
+
+ return conversationId;
+ }
+
+ /**
+ * Get a conversation from the local DB based on the message's thread id.
+ *
+ * @param dbWrapper The database
+ * @param threadId The message's thread in the SMS database
+ * @param senderBlocked Flag whether sender of message is in blocked people list
+ * @return The existing conversation id or null
+ */
+ @VisibleForTesting
+ @DoesNotRunOnMainThread
+ public static String getExistingConversation(final DatabaseWrapper dbWrapper,
+ final long threadId, final boolean senderBlocked) {
+ Assert.isNotMainThread();
+ String conversationId = null;
+
+ Cursor cursor = null;
+ try {
+ // Look for an existing conversation in the db with this thread id
+ cursor = dbWrapper.rawQuery("SELECT " + ConversationColumns._ID
+ + " FROM " + DatabaseHelper.CONVERSATIONS_TABLE
+ + " WHERE " + ConversationColumns.SMS_THREAD_ID + "=" + threadId,
+ null);
+
+ if (cursor.moveToFirst()) {
+ Assert.isTrue(cursor.getCount() == 1);
+ conversationId = cursor.getString(0);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return conversationId;
+ }
+
+ /**
+ * Get the thread id for an existing conversation from the local DB.
+ *
+ * @param dbWrapper The database
+ * @param conversationId The conversation to look up thread for
+ * @return The thread id. Returns -1 if the conversation was not found or if it was found
+ * but the thread column was NULL.
+ */
+ @DoesNotRunOnMainThread
+ public static long getThreadId(final DatabaseWrapper dbWrapper, final String conversationId) {
+ Assert.isNotMainThread();
+ long threadId = -1;
+
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.CONVERSATIONS_TABLE,
+ new String[] { ConversationColumns.SMS_THREAD_ID },
+ ConversationColumns._ID + " =?",
+ new String[] { conversationId },
+ null, null, null);
+
+ if (cursor.moveToFirst()) {
+ Assert.isTrue(cursor.getCount() == 1);
+ if (!cursor.isNull(0)) {
+ threadId = cursor.getLong(0);
+ }
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return threadId;
+ }
+
+ @DoesNotRunOnMainThread
+ public static boolean isBlockedDestination(final DatabaseWrapper db, final String destination) {
+ Assert.isNotMainThread();
+ return isBlockedParticipant(db, destination, ParticipantColumns.NORMALIZED_DESTINATION);
+ }
+
+ static boolean isBlockedParticipant(final DatabaseWrapper db, final String participantId) {
+ return isBlockedParticipant(db, participantId, ParticipantColumns._ID);
+ }
+
+ static boolean isBlockedParticipant(final DatabaseWrapper db, final String value,
+ final String column) {
+ Cursor cursor = null;
+ try {
+ cursor = db.query(DatabaseHelper.PARTICIPANTS_TABLE,
+ new String[] { ParticipantColumns.BLOCKED },
+ column + "=? AND " + ParticipantColumns.SUB_ID + "=?",
+ new String[] { value,
+ Integer.toString(ParticipantData.OTHER_THAN_SELF_SUB_ID) },
+ null, null, null);
+
+ Assert.inRange(cursor.getCount(), 0, 1);
+ if (cursor.moveToFirst()) {
+ return cursor.getInt(0) == 1;
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return false; // if there's no row, it's not blocked :-)
+ }
+
+ /**
+ * Create a conversation in the local DB based on the message's thread id.
+ *
+ * It's up to the caller to make sure that this is all inside a transaction. It will return
+ * null if it's not in the local DB.
+ *
+ * @param dbWrapper The database
+ * @param threadId The message's thread
+ * @param selfId The selfId to make default for this conversation
+ * @param archived Flag whether the conversation should be created archived
+ * @param noNotification If notification should be disabled
+ * @param noVibrate If vibrate on notification should be disabled
+ * @param soundUri The customized sound
+ * @return The existing conversation id or new conversation id
+ */
+ static String createConversationInTransaction(final DatabaseWrapper dbWrapper,
+ final long threadId, final String conversationName, final String selfId,
+ final List participants, final boolean archived,
+ boolean noNotification, boolean noVibrate, String soundUri) {
+ // We want conversation and participant creation to be atomic
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+ boolean hasEmailAddress = false;
+ for (final ParticipantData participant : participants) {
+ Assert.isTrue(!participant.isSelf());
+ if (participant.isEmail()) {
+ hasEmailAddress = true;
+ }
+ }
+
+ // TODO : Conversations state - normal vs. archived
+
+ // Insert a new local conversation for this thread id
+ final ContentValues values = new ContentValues();
+ values.put(ConversationColumns.SMS_THREAD_ID, threadId);
+ // Start with conversation hidden - sending a message or saving a draft will change that
+ values.put(ConversationColumns.SORT_TIMESTAMP, 0L);
+ values.put(ConversationColumns.CURRENT_SELF_ID, selfId);
+ values.put(ConversationColumns.PARTICIPANT_COUNT, participants.size());
+ values.put(ConversationColumns.INCLUDE_EMAIL_ADDRESS, (hasEmailAddress ? 1 : 0));
+ if (archived) {
+ values.put(ConversationColumns.ARCHIVE_STATUS, 1);
+ }
+ if (noNotification) {
+ values.put(ConversationColumns.NOTIFICATION_ENABLED, 0);
+ }
+ if (noVibrate) {
+ values.put(ConversationColumns.NOTIFICATION_VIBRATION, 0);
+ }
+ if (!TextUtils.isEmpty(soundUri)) {
+ values.put(ConversationColumns.NOTIFICATION_SOUND_URI, soundUri);
+ }
+
+ fillParticipantData(values, participants);
+
+ final long conversationRowId = dbWrapper.insert(DatabaseHelper.CONVERSATIONS_TABLE, null,
+ values);
+
+ Assert.isTrue(conversationRowId != -1);
+ if (conversationRowId == -1) {
+ LogUtil.e(TAG, "BugleDatabaseOperations : failed to insert conversation into table");
+ return null;
+ }
+
+ final String conversationId = Long.toString(conversationRowId);
+
+ // Make sure that participants are added for this conversation
+ for (final ParticipantData participant : participants) {
+ // TODO: Use blocking information
+ addParticipantToConversation(dbWrapper, participant, conversationId);
+ }
+
+ // Now fully resolved participants available can update conversation name / avatar.
+ // b/16437575: We cannot use the participants directly, but instead have to call
+ // getParticipantsForConversation() to retrieve the actual participants. This is needed
+ // because the call to addParticipantToConversation() won't fill up the ParticipantData
+ // if the participant already exists in the participant table. For example, say you have
+ // an existing conversation with John. Now if you create a new group conversation with
+ // Jeff & John with only their phone numbers, then when we try to add John's number to the
+ // group conversation, we see that he's already in the participant table, therefore we
+ // short-circuit any steps to actually fill out the ParticipantData for John other than
+ // just returning his participant id. Eventually, the ParticipantData we have is still the
+ // raw data with just the phone number. getParticipantsForConversation(), on the other
+ // hand, will fill out all the info for each participant from the participants table.
+ updateConversationNameAndAvatarInTransaction(dbWrapper, conversationId,
+ getParticipantsForConversation(dbWrapper, conversationId));
+
+ return conversationId;
+ }
+
+ private static void fillParticipantData(final ContentValues values,
+ final List participants) {
+ if (participants != null && !participants.isEmpty()) {
+ final Uri avatarUri = AvatarUriUtil.createAvatarUri(participants);
+ values.put(ConversationColumns.ICON, avatarUri.toString());
+
+ long contactId;
+ String lookupKey;
+ String destination;
+ if (participants.size() == 1) {
+ final ParticipantData firstParticipant = participants.get(0);
+ contactId = firstParticipant.getContactId();
+ lookupKey = firstParticipant.getLookupKey();
+ destination = firstParticipant.getNormalizedDestination();
+ } else {
+ contactId = 0;
+ lookupKey = null;
+ destination = null;
+ }
+
+ values.put(ConversationColumns.PARTICIPANT_CONTACT_ID, contactId);
+ values.put(ConversationColumns.PARTICIPANT_LOOKUP_KEY, lookupKey);
+ values.put(ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION, destination);
+ }
+ }
+
+ /**
+ * Delete conversation and associated messages/parts
+ */
+ @DoesNotRunOnMainThread
+ public static boolean deleteConversation(final DatabaseWrapper dbWrapper,
+ final String conversationId, final long cutoffTimestamp) {
+ Assert.isNotMainThread();
+ dbWrapper.beginTransaction();
+ boolean conversationDeleted = false;
+ boolean conversationMessagesDeleted = false;
+ try {
+ // Delete existing messages
+ if (cutoffTimestamp == Long.MAX_VALUE) {
+ // Delete parts and messages
+ dbWrapper.delete(DatabaseHelper.MESSAGES_TABLE,
+ MessageColumns.CONVERSATION_ID + "=?", new String[] { conversationId });
+ conversationMessagesDeleted = true;
+ } else {
+ // Delete all messages prior to the cutoff
+ dbWrapper.delete(DatabaseHelper.MESSAGES_TABLE,
+ MessageColumns.CONVERSATION_ID + "=? AND "
+ + MessageColumns.RECEIVED_TIMESTAMP + "<=?",
+ new String[] { conversationId, Long.toString(cutoffTimestamp) });
+
+ // Delete any draft message. The delete above may not always include the draft,
+ // because under certain scenarios (e.g. sending messages in progress), the draft
+ // timestamp can be larger than the cutoff time, which is generally the conversation
+ // sort timestamp. Because of how the sms/mms provider works on some newer
+ // devices, it's important that we never delete all the messages in a conversation
+ // without also deleting the conversation itself (see b/20262204 for details).
+ dbWrapper.delete(DatabaseHelper.MESSAGES_TABLE,
+ MessageColumns.STATUS + "=? AND " + MessageColumns.CONVERSATION_ID + "=?",
+ new String[] {
+ Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_DRAFT),
+ conversationId
+ });
+
+ // Check to see if there are any messages left in the conversation
+ final long count = dbWrapper.queryNumEntries(DatabaseHelper.MESSAGES_TABLE,
+ MessageColumns.CONVERSATION_ID + "=?", new String[] { conversationId });
+ conversationMessagesDeleted = (count == 0);
+
+ // Log detail information if there are still messages left in the conversation
+ if (!conversationMessagesDeleted) {
+ final long maxTimestamp =
+ getConversationMaxTimestamp(dbWrapper, conversationId);
+ LogUtil.w(TAG, "BugleDatabaseOperations:"
+ + " cannot delete all messages in a conversation"
+ + ", after deletion: count=" + count
+ + ", max timestamp=" + maxTimestamp
+ + ", cutoff timestamp=" + cutoffTimestamp);
+ }
+ }
+
+ if (conversationMessagesDeleted) {
+ // Delete conversation row
+ final int count = dbWrapper.delete(DatabaseHelper.CONVERSATIONS_TABLE,
+ ConversationColumns._ID + "=?", new String[] { conversationId });
+ conversationDeleted = (count > 0);
+ }
+ dbWrapper.setTransactionSuccessful();
+ } finally {
+ dbWrapper.endTransaction();
+ }
+ return conversationDeleted;
+ }
+
+ private static final String MAX_RECEIVED_TIMESTAMP =
+ "MAX(" + MessageColumns.RECEIVED_TIMESTAMP + ")";
+ /**
+ * Get the max received timestamp of a conversation's messages
+ */
+ private static long getConversationMaxTimestamp(final DatabaseWrapper dbWrapper,
+ final String conversationId) {
+ final Cursor cursor = dbWrapper.query(
+ DatabaseHelper.MESSAGES_TABLE,
+ new String[]{ MAX_RECEIVED_TIMESTAMP },
+ MessageColumns.CONVERSATION_ID + "=?",
+ new String[]{ conversationId },
+ null, null, null);
+ if (cursor != null) {
+ try {
+ if (cursor.moveToFirst()) {
+ return cursor.getLong(0);
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+ return 0;
+ }
+
+ @DoesNotRunOnMainThread
+ public static void updateConversationMetadataInTransaction(final DatabaseWrapper dbWrapper,
+ final String conversationId, final String messageId, final long latestTimestamp,
+ final boolean keepArchived, final String smsServiceCenter,
+ final boolean shouldAutoSwitchSelfId) {
+ Assert.isNotMainThread();
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+
+ final ContentValues values = new ContentValues();
+ values.put(ConversationColumns.LATEST_MESSAGE_ID, messageId);
+ values.put(ConversationColumns.SORT_TIMESTAMP, latestTimestamp);
+ if (!TextUtils.isEmpty(smsServiceCenter)) {
+ values.put(ConversationColumns.SMS_SERVICE_CENTER, smsServiceCenter);
+ }
+
+ // When the conversation gets updated with new messages, unarchive the conversation unless
+ // the sender is blocked, or we have been told to keep it archived.
+ if (!keepArchived) {
+ values.put(ConversationColumns.ARCHIVE_STATUS, 0);
+ }
+
+ final MessageData message = readMessage(dbWrapper, messageId);
+ addSnippetTextAndPreviewToContentValues(message, false /* showDraft */, values);
+
+ if (shouldAutoSwitchSelfId) {
+ addSelfIdAutoSwitchInfoToContentValues(dbWrapper, message, conversationId, values);
+ }
+
+ // Conversation always exists as this method is called from ActionService only after
+ // reading and if necessary creating the conversation.
+ updateConversationRow(dbWrapper, conversationId, values);
+
+ if (shouldAutoSwitchSelfId && OsUtil.isAtLeastL_MR1()) {
+ // Normally, the draft message compose UI trusts its UI state for providing up-to-date
+ // conversation self id. Therefore, notify UI through local broadcast receiver about
+ // this external change so the change can be properly reflected.
+ UIIntents.get().broadcastConversationSelfIdChange(dbWrapper.getContext(),
+ conversationId, getConversationSelfId(dbWrapper, conversationId));
+ }
+ }
+
+ @DoesNotRunOnMainThread
+ public static void updateConversationMetadataInTransaction(final DatabaseWrapper db,
+ final String conversationId, final String messageId, final long latestTimestamp,
+ final boolean keepArchived, final boolean shouldAutoSwitchSelfId) {
+ Assert.isNotMainThread();
+ updateConversationMetadataInTransaction(
+ db, conversationId, messageId, latestTimestamp, keepArchived, null,
+ shouldAutoSwitchSelfId);
+ }
+
+ @DoesNotRunOnMainThread
+ public static void updateConversationArchiveStatusInTransaction(final DatabaseWrapper dbWrapper,
+ final String conversationId, final boolean isArchived) {
+ Assert.isNotMainThread();
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+ final ContentValues values = new ContentValues();
+ values.put(ConversationColumns.ARCHIVE_STATUS, isArchived ? 1 : 0);
+ updateConversationRowIfExists(dbWrapper, conversationId, values);
+ }
+
+ static void addSnippetTextAndPreviewToContentValues(final MessageData message,
+ final boolean showDraft, final ContentValues values) {
+ values.put(ConversationColumns.SHOW_DRAFT, showDraft ? 1 : 0);
+ values.put(ConversationColumns.SNIPPET_TEXT, message.getMessageText());
+ values.put(ConversationColumns.SUBJECT_TEXT, message.getMmsSubject());
+
+ String type = null;
+ String uriString = null;
+ for (final MessagePartData part : message.getParts()) {
+ if (part.isAttachment() &&
+ ContentType.isConversationListPreviewableType(part.getContentType())) {
+ uriString = part.getContentUri().toString();
+ type = part.getContentType();
+ break;
+ }
+ }
+ values.put(ConversationColumns.PREVIEW_CONTENT_TYPE, type);
+ values.put(ConversationColumns.PREVIEW_URI, uriString);
+ }
+
+ /**
+ * Adds self-id auto switch info for a conversation if the last message has a different
+ * subscription than the conversation's.
+ * @return true if self id will need to be changed, false otherwise.
+ */
+ static boolean addSelfIdAutoSwitchInfoToContentValues(final DatabaseWrapper dbWrapper,
+ final MessageData message, final String conversationId, final ContentValues values) {
+ // Only auto switch conversation self for incoming messages.
+ if (!OsUtil.isAtLeastL_MR1() || !message.getIsIncoming()) {
+ return false;
+ }
+
+ final String conversationSelfId = getConversationSelfId(dbWrapper, conversationId);
+ final String messageSelfId = message.getSelfId();
+
+ if (conversationSelfId == null || messageSelfId == null) {
+ return false;
+ }
+
+ // Get the sub IDs in effect for both the message and the conversation and compare them:
+ // 1. If message is unbound (using default sub id), then the message was sent with
+ // pre-MSIM support. Don't auto-switch because we don't know the subscription for the
+ // message.
+ // 2. If message is bound,
+ // i. If conversation is unbound, use the system default sub id as its effective sub.
+ // ii. If conversation is bound, use its subscription directly.
+ // Compare the message sub id with the conversation's effective sub id. If they are
+ // different, auto-switch the conversation to the message's sub.
+ final ParticipantData conversationSelf = getExistingParticipant(dbWrapper,
+ conversationSelfId);
+ final ParticipantData messageSelf = getExistingParticipant(dbWrapper, messageSelfId);
+ if (!messageSelf.isActiveSubscription()) {
+ // Don't switch if the message subscription is no longer active.
+ return false;
+ }
+ final int messageSubId = messageSelf.getSubId();
+ if (messageSubId == ParticipantData.DEFAULT_SELF_SUB_ID) {
+ return false;
+ }
+
+ final int conversationEffectiveSubId =
+ PhoneUtils.getDefault().getEffectiveSubId(conversationSelf.getSubId());
+
+ if (conversationEffectiveSubId != messageSubId) {
+ return addConversationSelfIdToContentValues(dbWrapper, messageSelf.getId(), values);
+ }
+ return false;
+ }
+
+ /**
+ * Adds conversation self id updates to ContentValues given. This performs check on the selfId
+ * to ensure it's valid and active.
+ * @return true if self id will need to be changed, false otherwise.
+ */
+ static boolean addConversationSelfIdToContentValues(final DatabaseWrapper dbWrapper,
+ final String selfId, final ContentValues values) {
+ // Make sure the selfId passed in is valid and active.
+ final String selection = ParticipantColumns._ID + "=? AND " +
+ ParticipantColumns.SIM_SLOT_ID + "<>?";
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
+ new String[] { ParticipantColumns._ID }, selection,
+ new String[] { selfId, String.valueOf(ParticipantData.INVALID_SLOT_ID) },
+ null, null, null);
+
+ if (cursor != null && cursor.getCount() > 0) {
+ values.put(ConversationColumns.CURRENT_SELF_ID, selfId);
+ return true;
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return false;
+ }
+
+ private static void updateConversationDraftSnippetAndPreviewInTransaction(
+ final DatabaseWrapper dbWrapper, final String conversationId,
+ final MessageData draftMessage) {
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+
+ long sortTimestamp = 0L;
+ Cursor cursor = null;
+ try {
+ // Check to find the latest message in the conversation
+ cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
+ REFRESH_CONVERSATION_MESSAGE_PROJECTION,
+ MessageColumns.CONVERSATION_ID + "=?",
+ new String[]{conversationId}, null, null,
+ MessageColumns.RECEIVED_TIMESTAMP + " DESC", "1" /* limit */);
+
+ if (cursor.moveToFirst()) {
+ sortTimestamp = cursor.getLong(1);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+
+ final ContentValues values = new ContentValues();
+ if (draftMessage == null || !draftMessage.hasContent()) {
+ values.put(ConversationColumns.SHOW_DRAFT, 0);
+ values.put(ConversationColumns.DRAFT_SNIPPET_TEXT, "");
+ values.put(ConversationColumns.DRAFT_SUBJECT_TEXT, "");
+ values.put(ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE, "");
+ values.put(ConversationColumns.DRAFT_PREVIEW_URI, "");
+ } else {
+ sortTimestamp = Math.max(sortTimestamp, draftMessage.getReceivedTimeStamp());
+ values.put(ConversationColumns.SHOW_DRAFT, 1);
+ values.put(ConversationColumns.DRAFT_SNIPPET_TEXT, draftMessage.getMessageText());
+ values.put(ConversationColumns.DRAFT_SUBJECT_TEXT, draftMessage.getMmsSubject());
+ String type = null;
+ String uriString = null;
+ for (final MessagePartData part : draftMessage.getParts()) {
+ if (part.isAttachment() &&
+ ContentType.isConversationListPreviewableType(part.getContentType())) {
+ uriString = part.getContentUri().toString();
+ type = part.getContentType();
+ break;
+ }
+ }
+ values.put(ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE, type);
+ values.put(ConversationColumns.DRAFT_PREVIEW_URI, uriString);
+ }
+ values.put(ConversationColumns.SORT_TIMESTAMP, sortTimestamp);
+ // Called in transaction after reading conversation row
+ updateConversationRow(dbWrapper, conversationId, values);
+ }
+
+ @DoesNotRunOnMainThread
+ public static boolean updateConversationRowIfExists(final DatabaseWrapper dbWrapper,
+ final String conversationId, final ContentValues values) {
+ Assert.isNotMainThread();
+ return updateRowIfExists(dbWrapper, DatabaseHelper.CONVERSATIONS_TABLE,
+ ConversationColumns._ID, conversationId, values);
+ }
+
+ @DoesNotRunOnMainThread
+ public static void updateConversationRow(final DatabaseWrapper dbWrapper,
+ final String conversationId, final ContentValues values) {
+ Assert.isNotMainThread();
+ final boolean exists = updateConversationRowIfExists(dbWrapper, conversationId, values);
+ Assert.isTrue(exists);
+ }
+
+ @DoesNotRunOnMainThread
+ public static boolean updateMessageRowIfExists(final DatabaseWrapper dbWrapper,
+ final String messageId, final ContentValues values) {
+ Assert.isNotMainThread();
+ return updateRowIfExists(dbWrapper, DatabaseHelper.MESSAGES_TABLE, MessageColumns._ID,
+ messageId, values);
+ }
+
+ @DoesNotRunOnMainThread
+ public static void updateMessageRow(final DatabaseWrapper dbWrapper,
+ final String messageId, final ContentValues values) {
+ Assert.isNotMainThread();
+ final boolean exists = updateMessageRowIfExists(dbWrapper, messageId, values);
+ Assert.isTrue(exists);
+ }
+
+ @DoesNotRunOnMainThread
+ public static boolean updatePartRowIfExists(final DatabaseWrapper dbWrapper,
+ final String partId, final ContentValues values) {
+ Assert.isNotMainThread();
+ return updateRowIfExists(dbWrapper, DatabaseHelper.PARTS_TABLE, PartColumns._ID,
+ partId, values);
+ }
+
+ /**
+ * Returns the default conversation name based on its participants.
+ */
+ private static String getDefaultConversationName(final List participants) {
+ return ConversationListItemData.generateConversationName(participants);
+ }
+
+ /**
+ * Updates a given conversation's name based on its participants.
+ */
+ @DoesNotRunOnMainThread
+ public static void updateConversationNameAndAvatarInTransaction(
+ final DatabaseWrapper dbWrapper, final String conversationId) {
+ Assert.isNotMainThread();
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+
+ final ArrayList participants =
+ getParticipantsForConversation(dbWrapper, conversationId);
+ updateConversationNameAndAvatarInTransaction(dbWrapper, conversationId, participants);
+ }
+
+ /**
+ * Updates a given conversation's name based on its participants.
+ */
+ private static void updateConversationNameAndAvatarInTransaction(
+ final DatabaseWrapper dbWrapper, final String conversationId,
+ final List participants) {
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+
+ final ContentValues values = new ContentValues();
+ values.put(ConversationColumns.NAME,
+ getDefaultConversationName(participants));
+
+ fillParticipantData(values, participants);
+
+ // Used by background thread when refreshing conversation so conversation could be deleted.
+ updateConversationRowIfExists(dbWrapper, conversationId, values);
+
+ WidgetConversationProvider.notifyConversationRenamed(Factory.get().getApplicationContext(),
+ conversationId);
+ }
+
+ /**
+ * Updates a given conversation's self id.
+ */
+ @DoesNotRunOnMainThread
+ public static void updateConversationSelfIdInTransaction(
+ final DatabaseWrapper dbWrapper, final String conversationId, final String selfId) {
+ Assert.isNotMainThread();
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+ final ContentValues values = new ContentValues();
+ if (addConversationSelfIdToContentValues(dbWrapper, selfId, values)) {
+ updateConversationRowIfExists(dbWrapper, conversationId, values);
+ }
+ }
+
+ @DoesNotRunOnMainThread
+ public static String getConversationSelfId(final DatabaseWrapper dbWrapper,
+ final String conversationId) {
+ Assert.isNotMainThread();
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.CONVERSATIONS_TABLE,
+ new String[] { ConversationColumns.CURRENT_SELF_ID },
+ ConversationColumns._ID + "=?",
+ new String[] { conversationId },
+ null, null, null);
+ Assert.inRange(cursor.getCount(), 0, 1);
+ if (cursor.moveToFirst()) {
+ return cursor.getString(0);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Frees up memory associated with phone number to participant id matching.
+ */
+ @DoesNotRunOnMainThread
+ public static void clearParticipantIdCache() {
+ Assert.isNotMainThread();
+ synchronized (sNormalizedPhoneNumberToParticipantIdCache) {
+ sNormalizedPhoneNumberToParticipantIdCache.clear();
+ }
+ }
+
+ @DoesNotRunOnMainThread
+ public static ArrayList getRecipientsForConversation(final DatabaseWrapper dbWrapper,
+ final String conversationId) {
+ Assert.isNotMainThread();
+ final ArrayList participants =
+ getParticipantsForConversation(dbWrapper, conversationId);
+
+ final ArrayList recipients = new ArrayList();
+ for (final ParticipantData participant : participants) {
+ recipients.add(participant.getSendDestination());
+ }
+
+ return recipients;
+ }
+
+ @DoesNotRunOnMainThread
+ public static String getSmsServiceCenterForConversation(final DatabaseWrapper dbWrapper,
+ final String conversationId) {
+ Assert.isNotMainThread();
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.CONVERSATIONS_TABLE,
+ new String[] { ConversationColumns.SMS_SERVICE_CENTER },
+ ConversationColumns._ID + "=?",
+ new String[] { conversationId },
+ null, null, null);
+ Assert.inRange(cursor.getCount(), 0, 1);
+ if (cursor.moveToFirst()) {
+ return cursor.getString(0);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return null;
+ }
+
+ @DoesNotRunOnMainThread
+ public static ParticipantData getExistingParticipant(final DatabaseWrapper dbWrapper,
+ final String participantId) {
+ Assert.isNotMainThread();
+ ParticipantData participant = null;
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
+ ParticipantData.ParticipantsQuery.PROJECTION,
+ ParticipantColumns._ID + " =?",
+ new String[] { participantId }, null, null, null);
+ Assert.inRange(cursor.getCount(), 0, 1);
+ if (cursor.moveToFirst()) {
+ participant = ParticipantData.getFromCursor(cursor);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return participant;
+ }
+
+ static int getSelfSubscriptionId(final DatabaseWrapper dbWrapper,
+ final String selfParticipantId) {
+ final ParticipantData selfParticipant = BugleDatabaseOperations.getExistingParticipant(
+ dbWrapper, selfParticipantId);
+ if (selfParticipant != null) {
+ Assert.isTrue(selfParticipant.isSelf());
+ return selfParticipant.getSubId();
+ }
+ return ParticipantData.DEFAULT_SELF_SUB_ID;
+ }
+
+ @VisibleForTesting
+ @DoesNotRunOnMainThread
+ public static ArrayList getParticipantsForConversation(
+ final DatabaseWrapper dbWrapper, final String conversationId) {
+ Assert.isNotMainThread();
+ final ArrayList participants =
+ new ArrayList();
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
+ ParticipantData.ParticipantsQuery.PROJECTION,
+ ParticipantColumns._ID + " IN ( " + "SELECT "
+ + ConversationParticipantsColumns.PARTICIPANT_ID + " AS "
+ + ParticipantColumns._ID
+ + " FROM " + DatabaseHelper.CONVERSATION_PARTICIPANTS_TABLE
+ + " WHERE " + ConversationParticipantsColumns.CONVERSATION_ID + " =? )",
+ new String[] { conversationId }, null, null, null);
+
+ while (cursor.moveToNext()) {
+ participants.add(ParticipantData.getFromCursor(cursor));
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return participants;
+ }
+
+ @DoesNotRunOnMainThread
+ public static MessageData readMessage(final DatabaseWrapper dbWrapper, final String messageId) {
+ Assert.isNotMainThread();
+ final MessageData message = readMessageData(dbWrapper, messageId);
+ if (message != null) {
+ readMessagePartsData(dbWrapper, message, false);
+ }
+ return message;
+ }
+
+ @VisibleForTesting
+ static MessagePartData readMessagePartData(final DatabaseWrapper dbWrapper,
+ final String partId) {
+ MessagePartData messagePartData = null;
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.PARTS_TABLE,
+ MessagePartData.getProjection(), PartColumns._ID + "=?",
+ new String[] { partId }, null, null, null);
+ Assert.inRange(cursor.getCount(), 0, 1);
+ if (cursor.moveToFirst()) {
+ messagePartData = MessagePartData.createFromCursor(cursor);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return messagePartData;
+ }
+
+ @DoesNotRunOnMainThread
+ public static MessageData readMessageData(final DatabaseWrapper dbWrapper,
+ final Uri smsMessageUri) {
+ Assert.isNotMainThread();
+ MessageData message = null;
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
+ MessageData.getProjection(), MessageColumns.SMS_MESSAGE_URI + "=?",
+ new String[] { smsMessageUri.toString() }, null, null, null);
+ Assert.inRange(cursor.getCount(), 0, 1);
+ if (cursor.moveToFirst()) {
+ message = new MessageData();
+ message.bind(cursor);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return message;
+ }
+
+ @DoesNotRunOnMainThread
+ public static MessageData readMessageData(final DatabaseWrapper dbWrapper,
+ final String messageId) {
+ Assert.isNotMainThread();
+ MessageData message = null;
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
+ MessageData.getProjection(), MessageColumns._ID + "=?",
+ new String[] { messageId }, null, null, null);
+ Assert.inRange(cursor.getCount(), 0, 1);
+ if (cursor.moveToFirst()) {
+ message = new MessageData();
+ message.bind(cursor);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return message;
+ }
+
+ /**
+ * Read all the parts for a message
+ * @param dbWrapper database
+ * @param message read parts for this message
+ * @param checkAttachmentFilesExist check each attachment file and only include if file exists
+ */
+ private static void readMessagePartsData(final DatabaseWrapper dbWrapper,
+ final MessageData message, final boolean checkAttachmentFilesExist) {
+ final ContentResolver contentResolver =
+ Factory.get().getApplicationContext().getContentResolver();
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.PARTS_TABLE,
+ MessagePartData.getProjection(), PartColumns.MESSAGE_ID + "=?",
+ new String[] { message.getMessageId() }, null, null, null);
+ while (cursor.moveToNext()) {
+ final MessagePartData messagePartData = MessagePartData.createFromCursor(cursor);
+ if (checkAttachmentFilesExist && messagePartData.isAttachment() &&
+ !UriUtil.isBugleAppResource(messagePartData.getContentUri())) {
+ try {
+ // Test that the file exists before adding the attachment to the draft
+ final ParcelFileDescriptor fileDescriptor =
+ contentResolver.openFileDescriptor(
+ messagePartData.getContentUri(), "r");
+ if (fileDescriptor != null) {
+ fileDescriptor.close();
+ message.addPart(messagePartData);
+ }
+ } catch (final IOException e) {
+ // The attachment's temp storage no longer exists, just ignore the file
+ } catch (final SecurityException e) {
+ // Likely thrown by openFileDescriptor due to an expired access grant.
+ if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
+ LogUtil.d(LogUtil.BUGLE_TAG, "uri: " + messagePartData.getContentUri());
+ }
+ }
+ } else {
+ message.addPart(messagePartData);
+ }
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ /**
+ * Write a message part to our local database
+ *
+ * @param dbWrapper The database
+ * @param messagePart The message part to insert
+ * @return The row id of the newly inserted part
+ */
+ static String insertNewMessagePartInTransaction(final DatabaseWrapper dbWrapper,
+ final MessagePartData messagePart, final String conversationId) {
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+ Assert.isTrue(!TextUtils.isEmpty(messagePart.getMessageId()));
+
+ // Insert a new part row
+ final SQLiteStatement insert = messagePart.getInsertStatement(dbWrapper, conversationId);
+ final long rowNumber = insert.executeInsert();
+
+ Assert.inRange(rowNumber, 0, Long.MAX_VALUE);
+ final String partId = Long.toString(rowNumber);
+
+ // Update the part id
+ messagePart.updatePartId(partId);
+
+ return partId;
+ }
+
+ /**
+ * Insert a message and its parts into the table
+ */
+ @DoesNotRunOnMainThread
+ public static void insertNewMessageInTransaction(final DatabaseWrapper dbWrapper,
+ final MessageData message) {
+ Assert.isNotMainThread();
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+
+ // Insert message row
+ final SQLiteStatement insert = message.getInsertStatement(dbWrapper);
+ final long rowNumber = insert.executeInsert();
+
+ Assert.inRange(rowNumber, 0, Long.MAX_VALUE);
+ final String messageId = Long.toString(rowNumber);
+ message.updateMessageId(messageId);
+ // Insert new parts
+ for (final MessagePartData messagePart : message.getParts()) {
+ messagePart.updateMessageId(messageId);
+ insertNewMessagePartInTransaction(dbWrapper, messagePart, message.getConversationId());
+ }
+ }
+
+ /**
+ * Update a message and add its parts into the table
+ */
+ @DoesNotRunOnMainThread
+ public static void updateMessageInTransaction(final DatabaseWrapper dbWrapper,
+ final MessageData message) {
+ Assert.isNotMainThread();
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+ final String messageId = message.getMessageId();
+ // Check message still exists (sms sync or delete might have purged it)
+ final MessageData current = BugleDatabaseOperations.readMessage(dbWrapper, messageId);
+ if (current != null) {
+ // Delete existing message parts)
+ deletePartsForMessage(dbWrapper, message.getMessageId());
+ // Insert new parts
+ for (final MessagePartData messagePart : message.getParts()) {
+ messagePart.updatePartId(null);
+ messagePart.updateMessageId(message.getMessageId());
+ insertNewMessagePartInTransaction(dbWrapper, messagePart,
+ message.getConversationId());
+ }
+ // Update message row
+ final ContentValues values = new ContentValues();
+ message.populate(values);
+ updateMessageRowIfExists(dbWrapper, message.getMessageId(), values);
+ }
+ }
+
+ @DoesNotRunOnMainThread
+ public static void updateMessageAndPartsInTransaction(final DatabaseWrapper dbWrapper,
+ final MessageData message, final List partsToUpdate) {
+ Assert.isNotMainThread();
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+ final ContentValues values = new ContentValues();
+ for (final MessagePartData messagePart : partsToUpdate) {
+ values.clear();
+ messagePart.populate(values);
+ updatePartRowIfExists(dbWrapper, messagePart.getPartId(), values);
+ }
+ values.clear();
+ message.populate(values);
+ updateMessageRowIfExists(dbWrapper, message.getMessageId(), values);
+ }
+
+ /**
+ * Delete all parts for a message
+ */
+ static void deletePartsForMessage(final DatabaseWrapper dbWrapper,
+ final String messageId) {
+ final int cnt = dbWrapper.delete(DatabaseHelper.PARTS_TABLE,
+ PartColumns.MESSAGE_ID + " =?",
+ new String[] { messageId });
+ Assert.inRange(cnt, 0, Integer.MAX_VALUE);
+ }
+
+ /**
+ * Delete one message and update the conversation (if necessary).
+ *
+ * @return number of rows deleted (should be 1 or 0).
+ */
+ @DoesNotRunOnMainThread
+ public static int deleteMessage(final DatabaseWrapper dbWrapper, final String messageId) {
+ Assert.isNotMainThread();
+ dbWrapper.beginTransaction();
+ try {
+ // Read message to find out which conversation it is in
+ final MessageData message = BugleDatabaseOperations.readMessage(dbWrapper, messageId);
+
+ int count = 0;
+ if (message != null) {
+ final String conversationId = message.getConversationId();
+ // Delete message
+ count = dbWrapper.delete(DatabaseHelper.MESSAGES_TABLE,
+ MessageColumns._ID + "=?", new String[] { messageId });
+
+ if (!deleteConversationIfEmptyInTransaction(dbWrapper, conversationId)) {
+ // TODO: Should we leave the conversation sort timestamp alone?
+ refreshConversationMetadataInTransaction(dbWrapper, conversationId,
+ false/* shouldAutoSwitchSelfId */, false/*archived*/);
+ }
+ }
+ dbWrapper.setTransactionSuccessful();
+ return count;
+ } finally {
+ dbWrapper.endTransaction();
+ }
+ }
+
+ /**
+ * Deletes the conversation if there are zero non-draft messages left.
+ *
+ * This is necessary because the telephony database has a trigger that deletes threads after
+ * their last message is deleted. We need to ensure that if a thread goes away, we also delete
+ * the conversation in Bugle. We don't store draft messages in telephony, so we ignore those
+ * when querying for the # of messages in the conversation.
+ *
+ * @return true if the conversation was deleted
+ */
+ @DoesNotRunOnMainThread
+ public static boolean deleteConversationIfEmptyInTransaction(final DatabaseWrapper dbWrapper,
+ final String conversationId) {
+ Assert.isNotMainThread();
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+ Cursor cursor = null;
+ try {
+ // TODO: The refreshConversationMetadataInTransaction method below uses this
+ // same query; maybe they should share this logic?
+
+ // Check to see if there are any (non-draft) messages in the conversation
+ cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
+ REFRESH_CONVERSATION_MESSAGE_PROJECTION,
+ MessageColumns.CONVERSATION_ID + "=? AND " +
+ MessageColumns.STATUS + "!=" + MessageData.BUGLE_STATUS_OUTGOING_DRAFT,
+ new String[] { conversationId }, null, null,
+ MessageColumns.RECEIVED_TIMESTAMP + " DESC", "1" /* limit */);
+ if (cursor.getCount() == 0) {
+ dbWrapper.delete(DatabaseHelper.CONVERSATIONS_TABLE,
+ ConversationColumns._ID + "=?", new String[] { conversationId });
+ LogUtil.i(TAG,
+ "BugleDatabaseOperations: Deleted empty conversation " + conversationId);
+ return true;
+ } else {
+ return false;
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ private static final String[] REFRESH_CONVERSATION_MESSAGE_PROJECTION = new String[] {
+ MessageColumns._ID,
+ MessageColumns.RECEIVED_TIMESTAMP,
+ MessageColumns.SENDER_PARTICIPANT_ID
+ };
+
+ /**
+ * Update conversation snippet, timestamp and optionally self id to match latest message in
+ * conversation.
+ */
+ @DoesNotRunOnMainThread
+ public static void refreshConversationMetadataInTransaction(final DatabaseWrapper dbWrapper,
+ final String conversationId, final boolean shouldAutoSwitchSelfId,
+ boolean keepArchived) {
+ Assert.isNotMainThread();
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+ Cursor cursor = null;
+ try {
+ // Check to see if there are any (non-draft) messages in the conversation
+ cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
+ REFRESH_CONVERSATION_MESSAGE_PROJECTION,
+ MessageColumns.CONVERSATION_ID + "=? AND " +
+ MessageColumns.STATUS + "!=" + MessageData.BUGLE_STATUS_OUTGOING_DRAFT,
+ new String[] { conversationId }, null, null,
+ MessageColumns.RECEIVED_TIMESTAMP + " DESC", "1" /* limit */);
+
+ if (cursor.moveToFirst()) {
+ // Refresh latest message in conversation
+ final String latestMessageId = cursor.getString(0);
+ final long latestMessageTimestamp = cursor.getLong(1);
+ final String senderParticipantId = cursor.getString(2);
+ final boolean senderBlocked = isBlockedParticipant(dbWrapper, senderParticipantId);
+ updateConversationMetadataInTransaction(dbWrapper, conversationId,
+ latestMessageId, latestMessageTimestamp, senderBlocked || keepArchived,
+ shouldAutoSwitchSelfId);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ /**
+ * When moving/removing an existing message update conversation metadata if necessary
+ * @param dbWrapper db wrapper
+ * @param conversationId conversation to modify
+ * @param messageId message that is leaving the conversation
+ * @param shouldAutoSwitchSelfId should we try to auto-switch the conversation's self-id as a
+ * result of this call when we see a new latest message?
+ * @param keepArchived should we keep the conversation archived despite refresh
+ */
+ @DoesNotRunOnMainThread
+ public static void maybeRefreshConversationMetadataInTransaction(
+ final DatabaseWrapper dbWrapper, final String conversationId, final String messageId,
+ final boolean shouldAutoSwitchSelfId, final boolean keepArchived) {
+ Assert.isNotMainThread();
+ boolean refresh = true;
+ if (!TextUtils.isEmpty(messageId)) {
+ refresh = false;
+ // Look for an existing conversation in the db with this conversation id
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.CONVERSATIONS_TABLE,
+ new String[] { ConversationColumns.LATEST_MESSAGE_ID },
+ ConversationColumns._ID + "=?",
+ new String[] { conversationId },
+ null, null, null);
+ Assert.inRange(cursor.getCount(), 0, 1);
+ if (cursor.moveToFirst()) {
+ refresh = TextUtils.equals(cursor.getString(0), messageId);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+ if (refresh) {
+ // TODO: I think it is okay to delete the conversation if it is empty...
+ refreshConversationMetadataInTransaction(dbWrapper, conversationId,
+ shouldAutoSwitchSelfId, keepArchived);
+ }
+ }
+
+
+
+ // SQL statement to query latest message if for particular conversation
+ private static final String QUERY_CONVERSATIONS_LATEST_MESSAGE_SQL = "SELECT "
+ + ConversationColumns.LATEST_MESSAGE_ID + " FROM " + DatabaseHelper.CONVERSATIONS_TABLE
+ + " WHERE " + ConversationColumns._ID + "=? LIMIT 1";
+
+ /**
+ * Note this is not thread safe so callers need to make sure they own the wrapper + statements
+ * while they call this and use the returned value.
+ */
+ @DoesNotRunOnMainThread
+ public static SQLiteStatement getQueryConversationsLatestMessageStatement(
+ final DatabaseWrapper db, final String conversationId) {
+ Assert.isNotMainThread();
+ final SQLiteStatement query = db.getStatementInTransaction(
+ DatabaseWrapper.INDEX_QUERY_CONVERSATIONS_LATEST_MESSAGE,
+ QUERY_CONVERSATIONS_LATEST_MESSAGE_SQL);
+ query.clearBindings();
+ query.bindString(1, conversationId);
+ return query;
+ }
+
+ // SQL statement to query latest message if for particular conversation
+ private static final String QUERY_MESSAGES_LATEST_MESSAGE_SQL = "SELECT "
+ + MessageColumns._ID + " FROM " + DatabaseHelper.MESSAGES_TABLE
+ + " WHERE " + MessageColumns.CONVERSATION_ID + "=? ORDER BY "
+ + MessageColumns.RECEIVED_TIMESTAMP + " DESC LIMIT 1";
+
+ /**
+ * Note this is not thread safe so callers need to make sure they own the wrapper + statements
+ * while they call this and use the returned value.
+ */
+ @DoesNotRunOnMainThread
+ public static SQLiteStatement getQueryMessagesLatestMessageStatement(
+ final DatabaseWrapper db, final String conversationId) {
+ Assert.isNotMainThread();
+ final SQLiteStatement query = db.getStatementInTransaction(
+ DatabaseWrapper.INDEX_QUERY_MESSAGES_LATEST_MESSAGE,
+ QUERY_MESSAGES_LATEST_MESSAGE_SQL);
+ query.clearBindings();
+ query.bindString(1, conversationId);
+ return query;
+ }
+
+ /**
+ * Update conversation metadata if necessary
+ * @param dbWrapper db wrapper
+ * @param conversationId conversation to modify
+ * @param shouldAutoSwitchSelfId should we try to auto-switch the conversation's self-id as a
+ * result of this call when we see a new latest message?
+ * @param keepArchived if the conversation should be kept archived
+ */
+ @DoesNotRunOnMainThread
+ public static void maybeRefreshConversationMetadataInTransaction(
+ final DatabaseWrapper dbWrapper, final String conversationId,
+ final boolean shouldAutoSwitchSelfId, boolean keepArchived) {
+ Assert.isNotMainThread();
+ String currentLatestMessageId = null;
+ String latestMessageId = null;
+ try {
+ final SQLiteStatement currentLatestMessageIdSql =
+ getQueryConversationsLatestMessageStatement(dbWrapper, conversationId);
+ currentLatestMessageId = currentLatestMessageIdSql.simpleQueryForString();
+
+ final SQLiteStatement latestMessageIdSql =
+ getQueryMessagesLatestMessageStatement(dbWrapper, conversationId);
+ latestMessageId = latestMessageIdSql.simpleQueryForString();
+ } catch (final SQLiteDoneException e) {
+ LogUtil.e(TAG, "BugleDatabaseOperations: Query for latest message failed", e);
+ }
+
+ if (TextUtils.isEmpty(currentLatestMessageId) ||
+ !TextUtils.equals(currentLatestMessageId, latestMessageId)) {
+ refreshConversationMetadataInTransaction(dbWrapper, conversationId,
+ shouldAutoSwitchSelfId, keepArchived);
+ }
+ }
+
+ static boolean getConversationExists(final DatabaseWrapper dbWrapper,
+ final String conversationId) {
+ // Look for an existing conversation in the db with this conversation id
+ Cursor cursor = null;
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.CONVERSATIONS_TABLE,
+ new String[] { /* No projection */},
+ ConversationColumns._ID + "=?",
+ new String[] { conversationId },
+ null, null, null);
+ return cursor.getCount() == 1;
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ /** Preserve parts in message but clear the stored draft */
+ public static final int UPDATE_MODE_CLEAR_DRAFT = 1;
+ /** Add the message as a draft */
+ public static final int UPDATE_MODE_ADD_DRAFT = 2;
+
+ /**
+ * Update draft message for specified conversation
+ * @param dbWrapper local database (wrapped)
+ * @param conversationId conversation to update
+ * @param message Optional message to preserve attachments for (either as draft or for
+ * sending)
+ * @param updateMode either {@link #UPDATE_MODE_CLEAR_DRAFT} or
+ * {@link #UPDATE_MODE_ADD_DRAFT}
+ * @return message id of newly written draft (else null)
+ */
+ @DoesNotRunOnMainThread
+ public static String updateDraftMessageData(final DatabaseWrapper dbWrapper,
+ final String conversationId, @Nullable final MessageData message,
+ final int updateMode) {
+ Assert.isNotMainThread();
+ Assert.notNull(conversationId);
+ Assert.inRange(updateMode, UPDATE_MODE_CLEAR_DRAFT, UPDATE_MODE_ADD_DRAFT);
+ String messageId = null;
+ Cursor cursor = null;
+ dbWrapper.beginTransaction();
+ try {
+ // Find all draft parts for the current conversation
+ final SimpleArrayMap currentDraftParts = new SimpleArrayMap<>();
+ cursor = dbWrapper.query(DatabaseHelper.DRAFT_PARTS_VIEW,
+ MessagePartData.getProjection(),
+ MessageColumns.CONVERSATION_ID + " =?",
+ new String[] { conversationId }, null, null, null);
+ while (cursor.moveToNext()) {
+ final MessagePartData part = MessagePartData.createFromCursor(cursor);
+ if (part.isAttachment()) {
+ currentDraftParts.put(part.getContentUri(), part);
+ }
+ }
+ // Optionally, preserve attachments for "message"
+ final boolean conversationExists = getConversationExists(dbWrapper, conversationId);
+ if (message != null && conversationExists) {
+ for (final MessagePartData part : message.getParts()) {
+ if (part.isAttachment()) {
+ currentDraftParts.remove(part.getContentUri());
+ }
+ }
+ }
+
+ // Delete orphan content
+ for (int index = 0; index < currentDraftParts.size(); index++) {
+ final MessagePartData part = currentDraftParts.valueAt(index);
+ part.destroySync();
+ }
+
+ // Delete existing draft (cascade deletes parts)
+ dbWrapper.delete(DatabaseHelper.MESSAGES_TABLE,
+ MessageColumns.STATUS + "=? AND " + MessageColumns.CONVERSATION_ID + "=?",
+ new String[] {
+ Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_DRAFT),
+ conversationId
+ });
+
+ // Write new draft
+ if (updateMode == UPDATE_MODE_ADD_DRAFT && message != null
+ && message.hasContent() && conversationExists) {
+ Assert.equals(MessageData.BUGLE_STATUS_OUTGOING_DRAFT,
+ message.getStatus());
+
+ // Now add draft to message table
+ insertNewMessageInTransaction(dbWrapper, message);
+ messageId = message.getMessageId();
+ }
+
+ if (conversationExists) {
+ updateConversationDraftSnippetAndPreviewInTransaction(
+ dbWrapper, conversationId, message);
+
+ if (message != null && message.getSelfId() != null) {
+ updateConversationSelfIdInTransaction(dbWrapper, conversationId,
+ message.getSelfId());
+ }
+ }
+
+ dbWrapper.setTransactionSuccessful();
+ } finally {
+ dbWrapper.endTransaction();
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
+ LogUtil.v(TAG,
+ "Updated draft message " + messageId + " for conversation " + conversationId);
+ }
+ return messageId;
+ }
+
+ /**
+ * Read the first draft message associated with this conversation.
+ * If none present create an empty (sms) draft message.
+ */
+ @DoesNotRunOnMainThread
+ public static MessageData readDraftMessageData(final DatabaseWrapper dbWrapper,
+ final String conversationId, final String conversationSelfId) {
+ Assert.isNotMainThread();
+ MessageData message = null;
+ Cursor cursor = null;
+ dbWrapper.beginTransaction();
+ try {
+ cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
+ MessageData.getProjection(),
+ MessageColumns.STATUS + "=? AND " + MessageColumns.CONVERSATION_ID + "=?",
+ new String[] {
+ Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_DRAFT),
+ conversationId
+ }, null, null, null);
+ Assert.inRange(cursor.getCount(), 0, 1);
+ if (cursor.moveToFirst()) {
+ message = new MessageData();
+ message.bindDraft(cursor, conversationSelfId);
+ readMessagePartsData(dbWrapper, message, true);
+ // Disconnect draft parts from DB
+ for (final MessagePartData part : message.getParts()) {
+ part.updatePartId(null);
+ part.updateMessageId(null);
+ }
+ message.updateMessageId(null);
+ }
+ dbWrapper.setTransactionSuccessful();
+ } finally {
+ dbWrapper.endTransaction();
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return message;
+ }
+
+ // Internal
+ private static void addParticipantToConversation(final DatabaseWrapper dbWrapper,
+ final ParticipantData participant, final String conversationId) {
+ final String participantId = getOrCreateParticipantInTransaction(dbWrapper, participant);
+ Assert.notNull(participantId);
+
+ // Add the participant to the conversation participants table
+ final ContentValues values = new ContentValues();
+ values.put(ConversationParticipantsColumns.CONVERSATION_ID, conversationId);
+ values.put(ConversationParticipantsColumns.PARTICIPANT_ID, participantId);
+ dbWrapper.insert(DatabaseHelper.CONVERSATION_PARTICIPANTS_TABLE, null, values);
+ }
+
+ /**
+ * Get string used as canonical recipient for participant cache for sub id
+ */
+ private static String getCanonicalRecipientFromSubId(final int subId) {
+ return "SELF(" + subId + ")";
+ }
+
+ /**
+ * Maps from a sub id or phone number to a participant id if there is one.
+ *
+ * @return If the participant is available in our cache, or the DB, this returns the
+ * participant id for the given subid/phone number. Otherwise it returns null.
+ */
+ @VisibleForTesting
+ private static String getParticipantId(final DatabaseWrapper dbWrapper,
+ final int subId, final String canonicalRecipient) {
+ // First check our memory cache for the participant Id
+ String participantId;
+ synchronized (sNormalizedPhoneNumberToParticipantIdCache) {
+ participantId = sNormalizedPhoneNumberToParticipantIdCache.get(canonicalRecipient);
+ }
+
+ if (participantId != null) {
+ return participantId;
+ }
+
+ // This code will only be executed for incremental additions.
+ Cursor cursor = null;
+ try {
+ if (subId != ParticipantData.OTHER_THAN_SELF_SUB_ID) {
+ // Now look for an existing participant in the db with this sub id.
+ cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
+ new String[] {ParticipantColumns._ID},
+ ParticipantColumns.SUB_ID + "=?",
+ new String[] { Integer.toString(subId) }, null, null, null);
+ } else {
+ // Look for existing participant with this normalized phone number and no subId.
+ cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
+ new String[] {ParticipantColumns._ID},
+ ParticipantColumns.NORMALIZED_DESTINATION + "=? AND "
+ + ParticipantColumns.SUB_ID + "=?",
+ new String[] {canonicalRecipient, Integer.toString(subId)},
+ null, null, null);
+ }
+
+ if (cursor.moveToFirst()) {
+ // TODO Is this assert correct for multi-sim where a new sim was put in?
+ Assert.isTrue(cursor.getCount() == 1);
+
+ // We found an existing participant in the database
+ participantId = cursor.getString(0);
+
+ synchronized (sNormalizedPhoneNumberToParticipantIdCache) {
+ // Add it to the cache for next time
+ sNormalizedPhoneNumberToParticipantIdCache.put(canonicalRecipient,
+ participantId);
+ }
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return participantId;
+ }
+
+ @DoesNotRunOnMainThread
+ public static ParticipantData getOrCreateSelf(final DatabaseWrapper dbWrapper,
+ final int subId) {
+ Assert.isNotMainThread();
+ ParticipantData participant = null;
+ dbWrapper.beginTransaction();
+ try {
+ final ParticipantData shell = ParticipantData.getSelfParticipant(subId);
+ final String participantId = getOrCreateParticipantInTransaction(dbWrapper, shell);
+ participant = getExistingParticipant(dbWrapper, participantId);
+ dbWrapper.setTransactionSuccessful();
+ } finally {
+ dbWrapper.endTransaction();
+ }
+ return participant;
+ }
+
+ /**
+ * Lookup and if necessary create a new participant
+ * @param dbWrapper Database wrapper
+ * @param participant Participant to find/create
+ * @return participantId ParticipantId for existing or newly created participant
+ */
+ @DoesNotRunOnMainThread
+ public static String getOrCreateParticipantInTransaction(final DatabaseWrapper dbWrapper,
+ final ParticipantData participant) {
+ Assert.isNotMainThread();
+ Assert.isTrue(dbWrapper.getDatabase().inTransaction());
+ int subId = ParticipantData.OTHER_THAN_SELF_SUB_ID;
+ String participantId = null;
+ String canonicalRecipient = null;
+ if (participant.isSelf()) {
+ subId = participant.getSubId();
+ canonicalRecipient = getCanonicalRecipientFromSubId(subId);
+ } else {
+ canonicalRecipient = participant.getNormalizedDestination();
+ }
+ Assert.notNull(canonicalRecipient);
+ participantId = getParticipantId(dbWrapper, subId, canonicalRecipient);
+
+ if (participantId != null) {
+ return participantId;
+ }
+
+ if (!participant.isContactIdResolved()) {
+ // Refresh participant's name and avatar with matching contact in CP2.
+ ParticipantRefresh.refreshParticipant(dbWrapper, participant);
+ }
+
+ // Insert the participant into the participants table
+ final ContentValues values = participant.toContentValues();
+ final long participantRow = dbWrapper.insert(DatabaseHelper.PARTICIPANTS_TABLE, null,
+ values);
+ participantId = Long.toString(participantRow);
+ Assert.notNull(canonicalRecipient);
+
+ synchronized (sNormalizedPhoneNumberToParticipantIdCache) {
+ // Now that we've inserted it, add it to our cache
+ sNormalizedPhoneNumberToParticipantIdCache.put(canonicalRecipient, participantId);
+ }
+
+ return participantId;
+ }
+
+ @DoesNotRunOnMainThread
+ public static void updateDestination(final DatabaseWrapper dbWrapper,
+ final String destination, final boolean blocked) {
+ Assert.isNotMainThread();
+ final ContentValues values = new ContentValues();
+ values.put(ParticipantColumns.BLOCKED, blocked ? 1 : 0);
+ dbWrapper.update(DatabaseHelper.PARTICIPANTS_TABLE, values,
+ ParticipantColumns.NORMALIZED_DESTINATION + "=? AND " +
+ ParticipantColumns.SUB_ID + "=?",
+ new String[] { destination, Integer.toString(
+ ParticipantData.OTHER_THAN_SELF_SUB_ID) });
+ }
+
+ @DoesNotRunOnMainThread
+ public static String getConversationFromOtherParticipantDestination(
+ final DatabaseWrapper db, final String otherDestination) {
+ Assert.isNotMainThread();
+ Cursor cursor = null;
+ try {
+ cursor = db.query(DatabaseHelper.CONVERSATIONS_TABLE,
+ new String[] { ConversationColumns._ID },
+ ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION + "=?",
+ new String[] { otherDestination }, null, null, null);
+ Assert.inRange(cursor.getCount(), 0, 1);
+ if (cursor.moveToFirst()) {
+ return cursor.getString(0);
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return null;
+ }
+
+
+ /**
+ * Get a list of conversations that contain any of participants specified.
+ */
+ private static HashSet getConversationsForParticipants(
+ final ArrayList participantIds) {
+ final DatabaseWrapper db = DataModel.get().getDatabase();
+ final HashSet conversationIds = new HashSet();
+
+ final String selection = ConversationParticipantsColumns.PARTICIPANT_ID + "=?";
+ for (final String participantId : participantIds) {
+ final String[] selectionArgs = new String[] { participantId };
+ final Cursor cursor = db.query(DatabaseHelper.CONVERSATION_PARTICIPANTS_TABLE,
+ ConversationParticipantsQuery.PROJECTION,
+ selection, selectionArgs, null, null, null);
+
+ if (cursor != null) {
+ try {
+ while (cursor.moveToNext()) {
+ final String conversationId = cursor.getString(
+ ConversationParticipantsQuery.INDEX_CONVERSATION_ID);
+ conversationIds.add(conversationId);
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+ }
+
+ return conversationIds;
+ }
+
+ /**
+ * Refresh conversation names/avatars based on a list of participants that are changed.
+ */
+ @DoesNotRunOnMainThread
+ public static void refreshConversationsForParticipants(final ArrayList participants) {
+ Assert.isNotMainThread();
+ final HashSet conversationIds = getConversationsForParticipants(participants);
+ if (conversationIds.size() > 0) {
+ for (final String conversationId : conversationIds) {
+ refreshConversation(conversationId);
+ }
+
+ MessagingContentProvider.notifyConversationListChanged();
+ if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
+ LogUtil.v(TAG, "Number of conversations refreshed:" + conversationIds.size());
+ }
+ }
+ }
+
+ /**
+ * Refresh conversation names/avatars based on a changed participant.
+ */
+ @DoesNotRunOnMainThread
+ public static void refreshConversationsForParticipant(final String participantId) {
+ Assert.isNotMainThread();
+ final ArrayList participantList = new ArrayList(1);
+ participantList.add(participantId);
+ refreshConversationsForParticipants(participantList);
+ }
+
+ /**
+ * Refresh one conversation.
+ */
+ private static void refreshConversation(final String conversationId) {
+ final DatabaseWrapper db = DataModel.get().getDatabase();
+
+ db.beginTransaction();
+ try {
+ BugleDatabaseOperations.updateConversationNameAndAvatarInTransaction(db,
+ conversationId);
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+
+ MessagingContentProvider.notifyParticipantsChanged(conversationId);
+ MessagingContentProvider.notifyMessagesChanged(conversationId);
+ MessagingContentProvider.notifyConversationMetadataChanged(conversationId);
+ }
+
+ @DoesNotRunOnMainThread
+ public static boolean updateRowIfExists(final DatabaseWrapper db, final String table,
+ final String rowKey, final String rowId, final ContentValues values) {
+ Assert.isNotMainThread();
+ final StringBuilder sb = new StringBuilder();
+ final ArrayList whereValues = new ArrayList(values.size() + 1);
+ whereValues.add(rowId);
+
+ for (final String key : values.keySet()) {
+ if (sb.length() > 0) {
+ sb.append(" OR ");
+ }
+ final Object value = values.get(key);
+ sb.append(key);
+ if (value != null) {
+ sb.append(" IS NOT ?");
+ whereValues.add(value.toString());
+ } else {
+ sb.append(" IS NOT NULL");
+ }
+ }
+
+ final String whereClause = rowKey + "=?" + " AND (" + sb.toString() + ")";
+ final String [] whereValuesArray = whereValues.toArray(new String[whereValues.size()]);
+ final int count = db.update(table, values, whereClause, whereValuesArray);
+ if (count > 1) {
+ LogUtil.w(LogUtil.BUGLE_TAG, "Updated more than 1 row " + count + "; " + table +
+ " for " + rowKey + " = " + rowId + " (deleted?)");
+ }
+ Assert.inRange(count, 0, 1);
+ return (count >= 0);
+ }
+}
diff --git a/src/com/android/messaging/datamodel/BugleNotifications.java b/src/com/android/messaging/datamodel/BugleNotifications.java
new file mode 100644
index 0000000..b796e73
--- /dev/null
+++ b/src/com/android/messaging/datamodel/BugleNotifications.java
@@ -0,0 +1,1221 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
+import android.graphics.BitmapFactory;
+import android.graphics.Typeface;
+import android.media.AudioManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.SystemClock;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.support.v4.app.NotificationCompat;
+import android.support.v4.app.NotificationCompat.WearableExtender;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.RemoteInput;
+import android.support.v4.util.SimpleArrayMap;
+import android.text.Spannable;
+import android.text.SpannableStringBuilder;
+import android.text.TextUtils;
+import android.text.style.StyleSpan;
+import android.text.style.TextAppearanceSpan;
+
+import com.android.messaging.Factory;
+import com.android.messaging.R;
+import com.android.messaging.datamodel.MessageNotificationState.BundledMessageNotificationState;
+import com.android.messaging.datamodel.MessageNotificationState.ConversationLineInfo;
+import com.android.messaging.datamodel.MessageNotificationState.MultiConversationNotificationState;
+import com.android.messaging.datamodel.MessageNotificationState.MultiMessageNotificationState;
+import com.android.messaging.datamodel.action.MarkAsReadAction;
+import com.android.messaging.datamodel.action.MarkAsSeenAction;
+import com.android.messaging.datamodel.action.RedownloadMmsAction;
+import com.android.messaging.datamodel.data.ConversationListItemData;
+import com.android.messaging.datamodel.media.AvatarRequestDescriptor;
+import com.android.messaging.datamodel.media.ImageResource;
+import com.android.messaging.datamodel.media.MediaRequest;
+import com.android.messaging.datamodel.media.MediaResourceManager;
+import com.android.messaging.datamodel.media.MessagePartVideoThumbnailRequestDescriptor;
+import com.android.messaging.datamodel.media.UriImageRequestDescriptor;
+import com.android.messaging.datamodel.media.VideoThumbnailRequest;
+import com.android.messaging.sms.MmsSmsUtils;
+import com.android.messaging.sms.MmsUtils;
+import com.android.messaging.ui.UIIntents;
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.AvatarUriUtil;
+import com.android.messaging.util.BugleGservices;
+import com.android.messaging.util.BugleGservicesKeys;
+import com.android.messaging.util.BuglePrefs;
+import com.android.messaging.util.BuglePrefsKeys;
+import com.android.messaging.util.ContentType;
+import com.android.messaging.util.ConversationIdSet;
+import com.android.messaging.util.ImageUtils;
+import com.android.messaging.util.LogUtil;
+import com.android.messaging.util.NotificationPlayer;
+import com.android.messaging.util.OsUtil;
+import com.android.messaging.util.PendingIntentConstants;
+import com.android.messaging.util.PhoneUtils;
+import com.android.messaging.util.RingtoneUtil;
+import com.android.messaging.util.ThreadUtil;
+import com.android.messaging.util.UriUtil;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * Handle posting, updating and removing all conversation notifications.
+ *
+ * There are currently two main classes of notification and their rules:
+ * 1) Messages - {@link MessageNotificationState}. Only one message notification.
+ * Unread messages across senders and conversations are coalesced.
+ * 2) Failed Messages - {@link MessageNotificationState#checkFailedMesages } Only one failed
+ * message. Multiple failures are coalesced.
+ *
+ * To add a new class of notifications, subclass the NotificationState and add commands which
+ * create one and pass into general creation function.
+ *
+ */
+public class BugleNotifications {
+ // Logging
+ public static final String TAG = LogUtil.BUGLE_NOTIFICATIONS_TAG;
+
+ // Constants to use for update.
+ public static final int UPDATE_NONE = 0;
+ public static final int UPDATE_MESSAGES = 1;
+ public static final int UPDATE_ERRORS = 2;
+ public static final int UPDATE_ALL = UPDATE_MESSAGES + UPDATE_ERRORS;
+
+ // Constants for notification type used for audio and vibration settings.
+ public static final int LOCAL_SMS_NOTIFICATION = 0;
+
+ private static final String SMS_NOTIFICATION_TAG = ":sms:";
+ private static final String SMS_ERROR_NOTIFICATION_TAG = ":error:";
+
+ private static final String WEARABLE_COMPANION_APP_PACKAGE = "com.google.android.wearable.app";
+
+ private static final Set sPendingNotifications =
+ new HashSet();
+
+ private static int sWearableImageWidth;
+ private static int sWearableImageHeight;
+ private static int sIconWidth;
+ private static int sIconHeight;
+
+ private static boolean sInitialized = false;
+
+ private static final Object mLock = new Object();
+
+ // sLastMessageDingTime is a map between a conversation id and a time. It's used to keep track
+ // of the time we last dinged a message for this conversation. When messages are coming in
+ // at flurry, we don't want to over-ding the user.
+ private static final SimpleArrayMap sLastMessageDingTime =
+ new SimpleArrayMap();
+ private static int sTimeBetweenDingsMs;
+
+ /**
+ * This is the volume at which to play the observable-conversation notification sound,
+ * expressed as a fraction of the system notification volume.
+ */
+ private static final float OBSERVABLE_CONVERSATION_NOTIFICATION_VOLUME = 0.25f;
+
+ /**
+ * Entry point for posting notifications.
+ * Don't call this on the UI thread.
+ * @param silent If true, no ring will be played. If false, checks global settings before
+ * playing a ringtone
+ * @param coverage Indicates which notification types should be checked. Valid values are
+ * UPDATE_NONE, UPDATE_MESSAGES, UPDATE_ERRORS, or UPDATE_ALL
+ */
+ public static void update(final boolean silent, final int coverage) {
+ update(silent, null /* conversationId */, coverage);
+ }
+
+ /**
+ * Entry point for posting notifications.
+ * Don't call this on the UI thread.
+ * @param silent If true, no ring will be played. If false, checks global settings before
+ * playing a ringtone
+ * @param conversationId Conversation ID where a new message was received
+ * @param coverage Indicates which notification types should be checked. Valid values are
+ * UPDATE_NONE, UPDATE_MESSAGES, UPDATE_ERRORS, or UPDATE_ALL
+ */
+ public static void update(final boolean silent, final String conversationId,
+ final int coverage) {
+ if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
+ LogUtil.v(TAG, "Update: silent = " + silent
+ + " conversationId = " + conversationId
+ + " coverage = " + coverage);
+ }
+ Assert.isNotMainThread();
+ checkInitialized();
+
+ if (!shouldNotify()) {
+ if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
+ LogUtil.v(TAG, "Notifications disabled");
+ }
+ cancel(PendingIntentConstants.SMS_NOTIFICATION_ID);
+ return;
+ } else {
+ if ((coverage & UPDATE_MESSAGES) != 0) {
+ createMessageNotification(silent, conversationId);
+ }
+ }
+ if ((coverage & UPDATE_ERRORS) != 0) {
+ MessageNotificationState.checkFailedMessages();
+ }
+ }
+
+ /**
+ * Cancel all notifications of a certain type.
+ *
+ * @param type Message or error notifications from Constants.
+ */
+ private static synchronized void cancel(final int type) {
+ cancel(type, null, false);
+ }
+
+ /**
+ * Cancel all notifications of a certain type.
+ *
+ * @param type Message or error notifications from Constants.
+ * @param conversationId If set, cancel the notification for this
+ * conversation only. For message notifications, this only works
+ * if the notifications are bundled (group children).
+ * @param isBundledNotification True if this notification is part of a
+ * notification bundle. This only applies to message notifications,
+ * which are bundled together with other message notifications.
+ */
+ private static synchronized void cancel(final int type, final String conversationId,
+ final boolean isBundledNotification) {
+ final String notificationTag = buildNotificationTag(type, conversationId,
+ isBundledNotification);
+ final NotificationManagerCompat notificationManager =
+ NotificationManagerCompat.from(Factory.get().getApplicationContext());
+
+ // Find all pending notifications and cancel them.
+ synchronized (sPendingNotifications) {
+ final Iterator iter = sPendingNotifications.iterator();
+ while (iter.hasNext()) {
+ final NotificationState notifState = iter.next();
+ if (notifState.mType == type) {
+ notifState.mCanceled = true;
+ if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
+ LogUtil.v(TAG, "Canceling pending notification");
+ }
+ iter.remove();
+ }
+ }
+ }
+ notificationManager.cancel(notificationTag, type);
+ if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
+ LogUtil.d(TAG, "Canceled notifications of type " + type);
+ }
+
+ // Message notifications for multiple conversations can be grouped together (see comment in
+ // createMessageNotification). We need to do bookkeeping to track the current set of
+ // notification group children, including removing them when we cancel notifications).
+ if (type == PendingIntentConstants.SMS_NOTIFICATION_ID) {
+ final Context context = Factory.get().getApplicationContext();
+ final ConversationIdSet groupChildIds = getGroupChildIds(context);
+
+ if (groupChildIds != null && groupChildIds.size() > 0) {
+ // If a conversation is specified, remove just that notification. Otherwise,
+ // we're removing the group summary so clear all children.
+ if (conversationId != null) {
+ groupChildIds.remove(conversationId);
+ writeGroupChildIds(context, groupChildIds);
+ } else {
+ cancelStaleGroupChildren(groupChildIds, null);
+ // We'll update the group children preference as we cancel each child,
+ // so we don't need to do it here.
+ }
+ }
+ }
+ }
+
+ /**
+ * Cancels stale notifications from the currently active group of
+ * notifications. If the {@code state} parameter is an instance of
+ * {@link MultiConversationNotificationState} it represents a new
+ * notification group. This method will cancel any notifications that were
+ * in the old group, but not the new one. If the new notification is not a
+ * group, then all existing grouped notifications are cancelled.
+ *
+ * @param previousGroupChildren Conversation ids for the active notification
+ * group
+ * @param state New notification state
+ */
+ private static void cancelStaleGroupChildren(final ConversationIdSet previousGroupChildren,
+ final NotificationState state) {
+ final ConversationIdSet newChildren = new ConversationIdSet();
+ if (state instanceof MultiConversationNotificationState) {
+ for (final NotificationState child :
+ ((MultiConversationNotificationState) state).mChildren) {
+ if (child.mConversationIds != null) {
+ newChildren.add(child.mConversationIds.first());
+ }
+ }
+ }
+ for (final String childConversationId : previousGroupChildren) {
+ if (!newChildren.contains(childConversationId)) {
+ cancel(PendingIntentConstants.SMS_NOTIFICATION_ID, childConversationId, true);
+ }
+ }
+ }
+
+ /**
+ * Returns {@code true} if incoming notifications should display a
+ * notification, {@code false} otherwise.
+ *
+ * @return true if the notification should occur
+ */
+ private static boolean shouldNotify() {
+ // If we're not the default sms app, don't put up any notifications.
+ if (!PhoneUtils.getDefault().isDefaultSmsApp()) {
+ return false;
+ }
+
+ // Now check prefs (i.e. settings) to see if the user turned off notifications.
+ final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
+ final Context context = Factory.get().getApplicationContext();
+ final String prefKey = context.getString(R.string.notifications_enabled_pref_key);
+ final boolean defaultValue = context.getResources().getBoolean(
+ R.bool.notifications_enabled_pref_default);
+ return prefs.getBoolean(prefKey, defaultValue);
+ }
+
+ /**
+ * Returns {@code true} if incoming notifications for the given {@link NotificationState}
+ * should vibrate the device, {@code false} otherwise.
+ *
+ * @return true if vibration should be used
+ */
+ public static boolean shouldVibrate(final NotificationState state) {
+ // The notification should vibrate if the global setting is turned on AND
+ // the per-conversation setting is turned on (default).
+ if (!state.getNotificationVibrate()) {
+ return false;
+ } else {
+ final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
+ final Context context = Factory.get().getApplicationContext();
+ final String prefKey = context.getString(R.string.notification_vibration_pref_key);
+ final boolean defaultValue = context.getResources().getBoolean(
+ R.bool.notification_vibration_pref_default);
+ return prefs.getBoolean(prefKey, defaultValue);
+ }
+ }
+
+ private static Uri getNotificationRingtoneUriForConversationId(final String conversationId) {
+ final DatabaseWrapper db = DataModel.get().getDatabase();
+ final ConversationListItemData convData =
+ ConversationListItemData.getExistingConversation(db, conversationId);
+ return RingtoneUtil.getNotificationRingtoneUri(
+ convData != null ? convData.getNotificationSoundUri() : null);
+ }
+
+ /**
+ * Returns a unique tag to identify a notification.
+ *
+ * @param name The tag name (in practice, the type)
+ * @param conversationId The conversation id (optional)
+ */
+ private static String buildNotificationTag(final String name,
+ final String conversationId) {
+ final Context context = Factory.get().getApplicationContext();
+ if (conversationId != null) {
+ return context.getPackageName() + name + ":" + conversationId;
+ } else {
+ return context.getPackageName() + name;
+ }
+ }
+
+ /**
+ * Returns a unique tag to identify a notification.
+ *
+ * This delegates to
+ * {@link #buildNotificationTag(int, String, boolean)} and can be
+ * used when the notification is never bundled (e.g. error notifications).
+ */
+ static String buildNotificationTag(final int type, final String conversationId) {
+ return buildNotificationTag(type, conversationId, false /* bundledNotification */);
+ }
+
+ /**
+ * Returns a unique tag to identify a notification.
+ *
+ * @param type One of the constants in {@link PendingIntentConstants}
+ * @param conversationId The conversation id (where applicable)
+ * @param bundledNotification Set to true if this notification will be
+ * bundled together with other notifications (e.g. on a wearable
+ * device).
+ */
+ static String buildNotificationTag(final int type, final String conversationId,
+ final boolean bundledNotification) {
+ String tag = null;
+ switch(type) {
+ case PendingIntentConstants.SMS_NOTIFICATION_ID:
+ if (bundledNotification) {
+ tag = buildNotificationTag(SMS_NOTIFICATION_TAG, conversationId);
+ } else {
+ tag = buildNotificationTag(SMS_NOTIFICATION_TAG, null);
+ }
+ break;
+ case PendingIntentConstants.MSG_SEND_ERROR:
+ tag = buildNotificationTag(SMS_ERROR_NOTIFICATION_TAG, null);
+ break;
+ }
+ return tag;
+ }
+
+ private static void checkInitialized() {
+ if (!sInitialized) {
+ final Resources resources = Factory.get().getApplicationContext().getResources();
+ sWearableImageWidth = resources.getDimensionPixelSize(
+ R.dimen.notification_wearable_image_width);
+ sWearableImageHeight = resources.getDimensionPixelSize(
+ R.dimen.notification_wearable_image_height);
+ sIconHeight = (int) resources.getDimension(
+ android.R.dimen.notification_large_icon_height);
+ sIconWidth =
+ (int) resources.getDimension(android.R.dimen.notification_large_icon_width);
+
+ sInitialized = true;
+ }
+ }
+
+ private static void processAndSend(final NotificationState state, final boolean silent,
+ final boolean softSound) {
+ final Context context = Factory.get().getApplicationContext();
+ final NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(context);
+ notifBuilder.setCategory(Notification.CATEGORY_MESSAGE);
+ // TODO: Need to fix this for multi conversation notifications to rate limit dings.
+ final String conversationId = state.mConversationIds.first();
+
+
+ final Uri ringtoneUri = RingtoneUtil.getNotificationRingtoneUri(state.getRingtoneUri());
+ // If the notification's conversation is currently observable (focused or in the
+ // conversation list), then play a notification beep at a low volume and don't display an
+ // actual notification.
+ if (softSound) {
+ if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
+ LogUtil.v(TAG, "processAndSend: fromConversationId == " +
+ "sCurrentlyDisplayedConversationId so NOT showing notification," +
+ " but playing soft sound. conversationId: " + conversationId);
+ }
+ playObservableConversationNotificationSound(ringtoneUri);
+ return;
+ }
+ state.mBaseRequestCode = state.mType;
+
+ // Set the delete intent (except for bundled wearable notifications, which are dismissed
+ // as a group, either from the wearable or when the summary notification is dismissed from
+ // the host device).
+ if (!(state instanceof BundledMessageNotificationState)) {
+ final PendingIntent clearIntent = state.getClearIntent();
+ notifBuilder.setDeleteIntent(clearIntent);
+ }
+
+ updateBuilderAudioVibrate(state, notifBuilder, silent, ringtoneUri, conversationId);
+
+ // Set the content intent
+ PendingIntent destinationIntent;
+ if (state.mConversationIds.size() > 1) {
+ // We have notifications for multiple conversation, go to the conversation list.
+ destinationIntent = UIIntents.get()
+ .getPendingIntentForConversationListActivity(context);
+ } else {
+ // We have a single conversation, go directly to that conversation.
+ destinationIntent = UIIntents.get()
+ .getPendingIntentForConversationActivity(context,
+ state.mConversationIds.first(),
+ null /*draft*/);
+ }
+ notifBuilder.setContentIntent(destinationIntent);
+
+ // TODO: set based on contact coming from a favorite.
+ notifBuilder.setPriority(state.getPriority());
+
+ // Save the state of the notification in-progress so when the avatar is loaded,
+ // we can continue building the notification.
+ final NotificationCompat.Style notifStyle = state.build(notifBuilder);
+ state.mNotificationBuilder = notifBuilder;
+ state.mNotificationStyle = notifStyle;
+ if (!state.mPeople.isEmpty()) {
+ final Bundle people = new Bundle();
+ people.putStringArray(NotificationCompat.EXTRA_PEOPLE,
+ state.mPeople.toArray(new String[state.mPeople.size()]));
+ notifBuilder.addExtras(people);
+ }
+
+ if (state.mParticipantAvatarsUris != null) {
+ final Uri avatarUri = state.mParticipantAvatarsUris.get(0);
+ final AvatarRequestDescriptor descriptor = new AvatarRequestDescriptor(avatarUri,
+ sIconWidth, sIconHeight, OsUtil.isAtLeastL());
+ final MediaRequest imageRequest = descriptor.buildSyncMediaRequest(
+ context);
+
+ synchronized (sPendingNotifications) {
+ sPendingNotifications.add(state);
+ }
+
+ // Synchronously load the avatar.
+ final ImageResource avatarImage =
+ MediaResourceManager.get().requestMediaResourceSync(imageRequest);
+ if (avatarImage != null) {
+ ImageResource avatarHiRes = null;
+ try {
+ if (isWearCompanionAppInstalled()) {
+ // For Wear users, we need to request a high-res avatar image to use as the
+ // notification card background. If the sender has a contact photo, we'll
+ // request the display photo from the Contacts provider. Otherwise, we ask
+ // the local content provider for a hi-res version of the generic avatar
+ // (e.g. letter with colored background).
+ avatarHiRes = requestContactDisplayPhoto(context,
+ getDisplayPhotoUri(avatarUri));
+ if (avatarHiRes == null) {
+ final AvatarRequestDescriptor hiResDesc =
+ new AvatarRequestDescriptor(avatarUri,
+ sWearableImageWidth,
+ sWearableImageHeight,
+ false /* cropToCircle */,
+ true /* isWearBackground */);
+ avatarHiRes = MediaResourceManager.get().requestMediaResourceSync(
+ hiResDesc.buildSyncMediaRequest(context));
+ }
+ }
+
+ // We have to make copies of the bitmaps to hand to the NotificationManager
+ // because the bitmap in the ImageResource is managed and will automatically
+ // get released.
+ Bitmap avatarBitmap = Bitmap.createBitmap(avatarImage.getBitmap());
+ Bitmap avatarHiResBitmap = (avatarHiRes != null) ?
+ Bitmap.createBitmap(avatarHiRes.getBitmap()) : null;
+ sendNotification(state, avatarBitmap, avatarHiResBitmap);
+ return;
+ } finally {
+ avatarImage.release();
+ if (avatarHiRes != null) {
+ avatarHiRes.release();
+ }
+ }
+ }
+ }
+ // We have no avatar. Post the notification anyway.
+ sendNotification(state, null, null);
+ }
+
+ /**
+ * Returns the thumbnailUri from the avatar URI, or null if avatar URI does not have thumbnail.
+ */
+ private static Uri getThumbnailUri(final Uri avatarUri) {
+ Uri localUri = null;
+ final String avatarType = AvatarUriUtil.getAvatarType(avatarUri);
+ if (TextUtils.equals(avatarType, AvatarUriUtil.TYPE_LOCAL_RESOURCE_URI)) {
+ localUri = AvatarUriUtil.getPrimaryUri(avatarUri);
+ } else if (UriUtil.isLocalResourceUri(avatarUri)) {
+ localUri = avatarUri;
+ }
+ if (localUri != null && localUri.getAuthority().equals(ContactsContract.AUTHORITY)) {
+ // Contact photos are of the form: content://com.android.contacts/contacts/123/photo
+ final List pathParts = localUri.getPathSegments();
+ if (pathParts.size() == 3 &&
+ pathParts.get(2).equals(Contacts.Photo.CONTENT_DIRECTORY)) {
+ return localUri;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the displayPhotoUri from the avatar URI, or null if avatar URI
+ * does not have a displayPhotoUri.
+ */
+ private static Uri getDisplayPhotoUri(final Uri avatarUri) {
+ final Uri thumbnailUri = getThumbnailUri(avatarUri);
+ if (thumbnailUri == null) {
+ return null;
+ }
+ final List originalPaths = thumbnailUri.getPathSegments();
+ final int originalPathsSize = originalPaths.size();
+ final StringBuilder newPathBuilder = new StringBuilder();
+ // Change content://com.android.contacts/contacts("_corp")/123/photo to
+ // content://com.android.contacts/contacts("_corp")/123/display_photo
+ for (int i = 0; i < originalPathsSize; i++) {
+ newPathBuilder.append('/');
+ if (i == 2) {
+ newPathBuilder.append(ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
+ } else {
+ newPathBuilder.append(originalPaths.get(i));
+ }
+ }
+ return thumbnailUri.buildUpon().path(newPathBuilder.toString()).build();
+ }
+
+ private static ImageResource requestContactDisplayPhoto(final Context context,
+ final Uri displayPhotoUri) {
+ final UriImageRequestDescriptor bgDescriptor =
+ new UriImageRequestDescriptor(displayPhotoUri,
+ sWearableImageWidth,
+ sWearableImageHeight,
+ false, /* allowCompression */
+ true, /* isStatic */
+ false /* cropToCircle */,
+ ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
+ ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
+ return MediaResourceManager.get().requestMediaResourceSync(
+ bgDescriptor.buildSyncMediaRequest(context));
+ }
+
+ private static void createMessageNotification(final boolean silent,
+ final String conversationId) {
+ final NotificationState state = MessageNotificationState.getNotificationState();
+ final boolean softSound = DataModel.get().isNewMessageObservable(conversationId);
+ if (state == null) {
+ cancel(PendingIntentConstants.SMS_NOTIFICATION_ID);
+ if (softSound && !TextUtils.isEmpty(conversationId)) {
+ final Uri ringtoneUri = getNotificationRingtoneUriForConversationId(conversationId);
+ playObservableConversationNotificationSound(ringtoneUri);
+ }
+ return;
+ }
+ processAndSend(state, silent, softSound);
+
+ // The rest of the logic here is for supporting Android Wear devices, specifically for when
+ // we are notifying about multiple conversations. In that case, the Inbox-style summary
+ // notification (which we already processed above) appears on the phone (as it always has),
+ // but wearables show per-conversation notifications, bundled together in a group.
+
+ // It is valid to replace a notification group with another group with fewer conversations,
+ // or even with one notification for a single conversation. In either case, we need to
+ // explicitly cancel any children from the old group which are not being notified about now.
+ final Context context = Factory.get().getApplicationContext();
+ final ConversationIdSet oldGroupChildIds = getGroupChildIds(context);
+ if (oldGroupChildIds != null && oldGroupChildIds.size() > 0) {
+ cancelStaleGroupChildren(oldGroupChildIds, state);
+ }
+
+ // Send per-conversation notifications (if there are multiple conversations).
+ final ConversationIdSet groupChildIds = new ConversationIdSet();
+ if (state instanceof MultiConversationNotificationState) {
+ for (final NotificationState child :
+ ((MultiConversationNotificationState) state).mChildren) {
+ processAndSend(child, true /* silent */, softSound);
+ if (child.mConversationIds != null) {
+ groupChildIds.add(child.mConversationIds.first());
+ }
+ }
+ }
+
+ // Record the new set of group children.
+ writeGroupChildIds(context, groupChildIds);
+ }
+
+ private static void updateBuilderAudioVibrate(final NotificationState state,
+ final NotificationCompat.Builder notifBuilder, final boolean silent,
+ final Uri ringtoneUri, final String conversationId) {
+ int defaults = Notification.DEFAULT_LIGHTS;
+ if (!silent) {
+ final BuglePrefs prefs = Factory.get().getApplicationPrefs();
+ final long latestNotificationTimestamp = prefs.getLong(
+ BuglePrefsKeys.LATEST_NOTIFICATION_MESSAGE_TIMESTAMP, Long.MIN_VALUE);
+ final long latestReceivedTimestamp = state.getLatestReceivedTimestamp();
+ prefs.putLong(
+ BuglePrefsKeys.LATEST_NOTIFICATION_MESSAGE_TIMESTAMP,
+ Math.max(latestNotificationTimestamp, latestReceivedTimestamp));
+ if (latestReceivedTimestamp > latestNotificationTimestamp) {
+ synchronized (mLock) {
+ // Find out the last time we dinged for this conversation
+ Long lastTime = sLastMessageDingTime.get(conversationId);
+ if (sTimeBetweenDingsMs == 0) {
+ sTimeBetweenDingsMs = BugleGservices.get().getInt(
+ BugleGservicesKeys.NOTIFICATION_TIME_BETWEEN_RINGS_SECONDS,
+ BugleGservicesKeys.NOTIFICATION_TIME_BETWEEN_RINGS_SECONDS_DEFAULT) *
+ 1000;
+ }
+ if (lastTime == null
+ || SystemClock.elapsedRealtime() - lastTime > sTimeBetweenDingsMs) {
+ sLastMessageDingTime.put(conversationId, SystemClock.elapsedRealtime());
+ notifBuilder.setSound(ringtoneUri);
+ if (shouldVibrate(state)) {
+ defaults |= Notification.DEFAULT_VIBRATE;
+ }
+ }
+ }
+ }
+ }
+ notifBuilder.setDefaults(defaults);
+ }
+
+ // TODO: this doesn't seem to be defined in NotificationCompat yet. Temporarily
+ // define it here until it makes its way from Notification -> NotificationCompat.
+ /**
+ * Notification category: incoming direct message (SMS, instant message, etc.).
+ */
+ private static final String CATEGORY_MESSAGE = "msg";
+
+ private static void sendNotification(final NotificationState notificationState,
+ final Bitmap avatarIcon, final Bitmap avatarHiRes) {
+ final Context context = Factory.get().getApplicationContext();
+ if (notificationState.mCanceled) {
+ if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
+ LogUtil.d(TAG, "sendNotification: Notification already cancelled; dropping it");
+ }
+ return;
+ }
+
+ synchronized (sPendingNotifications) {
+ if (sPendingNotifications.contains(notificationState)) {
+ sPendingNotifications.remove(notificationState);
+ }
+ }
+
+ notificationState.mNotificationBuilder
+ .setSmallIcon(notificationState.getIcon())
+ .setVisibility(NotificationCompat.VISIBILITY_PRIVATE)
+ .setColor(context.getResources().getColor(R.color.notification_accent_color))
+// .setPublicVersion(null) // TODO: when/if we ever support different
+ // text on the lockscreen, instead of "contents hidden"
+ .setCategory(CATEGORY_MESSAGE);
+
+ if (avatarIcon != null) {
+ notificationState.mNotificationBuilder.setLargeIcon(avatarIcon);
+ }
+
+ if (notificationState.mParticipantContactUris != null &&
+ notificationState.mParticipantContactUris.size() > 0) {
+ for (final Uri contactUri : notificationState.mParticipantContactUris) {
+ notificationState.mNotificationBuilder.addPerson(contactUri.toString());
+ }
+ }
+
+ final Uri attachmentUri = notificationState.getAttachmentUri();
+ final String attachmentType = notificationState.getAttachmentType();
+ Bitmap attachmentBitmap = null;
+
+ // For messages with photo/video attachment, request an image to show in the notification.
+ if (attachmentUri != null && notificationState.mNotificationStyle != null &&
+ (notificationState.mNotificationStyle instanceof
+ NotificationCompat.BigPictureStyle) &&
+ (ContentType.isImageType(attachmentType) ||
+ ContentType.isVideoType(attachmentType))) {
+ final boolean isVideo = ContentType.isVideoType(attachmentType);
+
+ MediaRequest imageRequest;
+ if (isVideo) {
+ Assert.isTrue(VideoThumbnailRequest.shouldShowIncomingVideoThumbnails());
+ final MessagePartVideoThumbnailRequestDescriptor videoDescriptor =
+ new MessagePartVideoThumbnailRequestDescriptor(attachmentUri);
+ imageRequest = videoDescriptor.buildSyncMediaRequest(context);
+ } else {
+ final UriImageRequestDescriptor imageDescriptor =
+ new UriImageRequestDescriptor(attachmentUri,
+ sWearableImageWidth,
+ sWearableImageHeight,
+ false /* allowCompression */,
+ true /* isStatic */,
+ false /* cropToCircle */,
+ ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
+ ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
+ imageRequest = imageDescriptor.buildSyncMediaRequest(context);
+ }
+ final ImageResource imageResource =
+ MediaResourceManager.get().requestMediaResourceSync(imageRequest);
+ if (imageResource != null) {
+ try {
+ // Copy the bitmap, because the one in the ImageResource is managed by
+ // MediaResourceManager.
+ Bitmap imageResourceBitmap = imageResource.getBitmap();
+ Config config = imageResourceBitmap.getConfig();
+
+ // Make sure our bitmap has a valid format.
+ if (config == null) {
+ config = Bitmap.Config.ARGB_8888;
+ }
+ attachmentBitmap = imageResourceBitmap.copy(config, true);
+ } finally {
+ imageResource.release();
+ }
+ }
+ }
+
+ fireOffNotification(notificationState, attachmentBitmap, avatarIcon, avatarHiRes);
+ }
+
+ private static void fireOffNotification(final NotificationState notificationState,
+ final Bitmap attachmentBitmap, final Bitmap avatarBitmap, Bitmap avatarHiResBitmap) {
+ if (notificationState.mCanceled) {
+ if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
+ LogUtil.v(TAG, "Firing off notification, but notification already canceled");
+ }
+ return;
+ }
+
+ final Context context = Factory.get().getApplicationContext();
+
+ if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
+ LogUtil.v(TAG, "MMS picture loaded, bitmap: " + attachmentBitmap);
+ }
+
+ final NotificationCompat.Builder notifBuilder = notificationState.mNotificationBuilder;
+ notifBuilder.setStyle(notificationState.mNotificationStyle);
+ notifBuilder.setColor(context.getResources().getColor(R.color.notification_accent_color));
+
+ final WearableExtender wearableExtender = new WearableExtender();
+ setWearableGroupOptions(notifBuilder, notificationState);
+
+ if (avatarHiResBitmap != null) {
+ wearableExtender.setBackground(avatarHiResBitmap);
+ } else if (avatarBitmap != null) {
+ // Nothing to do here; we already set avatarBitmap as the notification icon
+ } else {
+ final Bitmap defaultBackground = BitmapFactory.decodeResource(
+ context.getResources(), R.drawable.bg_sms);
+ wearableExtender.setBackground(defaultBackground);
+ }
+
+ if (notificationState instanceof MultiMessageNotificationState) {
+ if (attachmentBitmap != null) {
+ // When we've got a picture attachment, we do some switcheroo trickery. When
+ // the notification is expanded, we show the picture as a bigPicture. The small
+ // icon shows the sender's avatar. When that same notification is collapsed, the
+ // picture is shown in the location where the avatar is normally shown. The lines
+ // below make all that happen.
+
+ // Here we're taking the picture attachment and making a small, scaled, center
+ // cropped version of the picture we can stuff into the place where the avatar
+ // goes when the notification is collapsed.
+ final Bitmap smallBitmap = ImageUtils.scaleCenterCrop(attachmentBitmap, sIconWidth,
+ sIconHeight);
+ ((NotificationCompat.BigPictureStyle) notificationState.mNotificationStyle)
+ .bigPicture(attachmentBitmap)
+ .bigLargeIcon(avatarBitmap);
+ notificationState.mNotificationBuilder.setLargeIcon(smallBitmap);
+
+ // Add a wearable page with no visible card so you can more easily see the photo.
+ final NotificationCompat.Builder photoPageNotifBuilder =
+ new NotificationCompat.Builder(Factory.get().getApplicationContext());
+ final WearableExtender photoPageWearableExtender = new WearableExtender();
+ photoPageWearableExtender.setHintShowBackgroundOnly(true);
+ if (attachmentBitmap != null) {
+ final Bitmap wearBitmap = ImageUtils.scaleCenterCrop(attachmentBitmap,
+ sWearableImageWidth, sWearableImageHeight);
+ photoPageWearableExtender.setBackground(wearBitmap);
+ }
+ photoPageNotifBuilder.extend(photoPageWearableExtender);
+ wearableExtender.addPage(photoPageNotifBuilder.build());
+ }
+
+ maybeAddWearableConversationLog(wearableExtender,
+ (MultiMessageNotificationState) notificationState);
+ addDownloadMmsAction(notifBuilder, wearableExtender, notificationState);
+ addWearableVoiceReplyAction(wearableExtender, notificationState);
+ }
+
+ // Apply the wearable options and build & post the notification
+ notifBuilder.extend(wearableExtender);
+ doNotify(notifBuilder.build(), notificationState);
+ }
+
+ private static void setWearableGroupOptions(final NotificationCompat.Builder notifBuilder,
+ final NotificationState notificationState) {
+ final String groupKey = "groupkey";
+ if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
+ LogUtil.v(TAG, "Group key (for wearables)=" + groupKey);
+ }
+ if (notificationState instanceof MultiConversationNotificationState) {
+ notifBuilder.setGroup(groupKey).setGroupSummary(true);
+ } else if (notificationState instanceof BundledMessageNotificationState) {
+ final int order = ((BundledMessageNotificationState) notificationState).mGroupOrder;
+ // Convert the order to a zero-padded string ("00", "01", "02", etc).
+ // The Wear library orders notifications within a bundle lexicographically
+ // by the sort key, hence the need for zeroes to preserve the ordering.
+ final String sortKey = String.format(Locale.US, "%02d", order);
+ notifBuilder.setGroup(groupKey).setSortKey(sortKey);
+ }
+ }
+
+ private static void maybeAddWearableConversationLog(
+ final WearableExtender wearableExtender,
+ final MultiMessageNotificationState notificationState) {
+ if (!isWearCompanionAppInstalled()) {
+ return;
+ }
+ final String convId = notificationState.mConversationIds.first();
+ ConversationLineInfo convInfo = notificationState.mConvList.mConvInfos.get(0);
+ final Notification page = MessageNotificationState.buildConversationPageForWearable(
+ convId,
+ convInfo.mParticipantCount);
+ if (page != null) {
+ wearableExtender.addPage(page);
+ }
+ }
+
+ private static void addWearableVoiceReplyAction(
+ final WearableExtender wearableExtender, final NotificationState notificationState) {
+ if (!(notificationState instanceof MultiMessageNotificationState)) {
+ return;
+ }
+ final MultiMessageNotificationState multiMessageNotificationState =
+ (MultiMessageNotificationState) notificationState;
+ final Context context = Factory.get().getApplicationContext();
+
+ final String conversationId = notificationState.mConversationIds.first();
+ final ConversationLineInfo convInfo =
+ multiMessageNotificationState.mConvList.mConvInfos.get(0);
+ final String selfId = convInfo.mSelfParticipantId;
+
+ final boolean requiresMms =
+ MmsSmsUtils.getRequireMmsForEmailAddress(
+ convInfo.mIncludeEmailAddress, convInfo.mSubId) ||
+ (convInfo.mIsGroup && MmsUtils.groupMmsEnabled(convInfo.mSubId));
+
+ final int requestCode = multiMessageNotificationState.getReplyIntentRequestCode();
+ final PendingIntent replyPendingIntent = UIIntents.get()
+ .getPendingIntentForSendingMessageToConversation(context,
+ conversationId, selfId, requiresMms, requestCode);
+
+ final int replyLabelRes = requiresMms ? R.string.notification_reply_via_mms :
+ R.string.notification_reply_via_sms;
+
+ final NotificationCompat.Action.Builder actionBuilder =
+ new NotificationCompat.Action.Builder(R.drawable.ic_wear_reply,
+ context.getString(replyLabelRes), replyPendingIntent);
+ final String[] choices = context.getResources().getStringArray(
+ R.array.notification_reply_choices);
+ final RemoteInput remoteInput = new RemoteInput.Builder(Intent.EXTRA_TEXT).setLabel(
+ context.getString(R.string.notification_reply_prompt)).
+ setChoices(choices)
+ .build();
+ actionBuilder.addRemoteInput(remoteInput);
+ wearableExtender.addAction(actionBuilder.build());
+ }
+
+ private static void addDownloadMmsAction(final NotificationCompat.Builder notifBuilder,
+ final WearableExtender wearableExtender, final NotificationState notificationState) {
+ if (!(notificationState instanceof MultiMessageNotificationState)) {
+ return;
+ }
+ final MultiMessageNotificationState multiMessageNotificationState =
+ (MultiMessageNotificationState) notificationState;
+ final ConversationLineInfo convInfo =
+ multiMessageNotificationState.mConvList.mConvInfos.get(0);
+ if (!convInfo.getDoesLatestMessageNeedDownload()) {
+ return;
+ }
+ final String messageId = convInfo.getLatestMessageId();
+ if (messageId == null) {
+ // No message Id, no download for you
+ return;
+ }
+ final Context context = Factory.get().getApplicationContext();
+ final PendingIntent downloadPendingIntent =
+ RedownloadMmsAction.getPendingIntentForRedownloadMms(context, messageId);
+
+ final NotificationCompat.Action.Builder actionBuilder =
+ new NotificationCompat.Action.Builder(R.drawable.ic_file_download_light,
+ context.getString(R.string.notification_download_mms),
+ downloadPendingIntent);
+ final NotificationCompat.Action downloadAction = actionBuilder.build();
+ notifBuilder.addAction(downloadAction);
+
+ // Support the action on a wearable device as well
+ wearableExtender.addAction(downloadAction);
+ }
+
+ private static synchronized void doNotify(final Notification notification,
+ final NotificationState notificationState) {
+ if (notification == null) {
+ return;
+ }
+ final int type = notificationState.mType;
+ final ConversationIdSet conversationIds = notificationState.mConversationIds;
+ final boolean isBundledNotification =
+ (notificationState instanceof BundledMessageNotificationState);
+
+ // Mark the notification as finished
+ notificationState.mCanceled = true;
+
+ final NotificationManagerCompat notificationManager =
+ NotificationManagerCompat.from(Factory.get().getApplicationContext());
+ // Only need conversationId for tags with a single conversation.
+ String conversationId = null;
+ if (conversationIds != null && conversationIds.size() == 1) {
+ conversationId = conversationIds.first();
+ }
+ final String notificationTag = buildNotificationTag(type,
+ conversationId, isBundledNotification);
+
+ notification.flags |= Notification.FLAG_AUTO_CANCEL;
+ notification.defaults |= Notification.DEFAULT_LIGHTS;
+
+ notificationManager.notify(notificationTag, type, notification);
+
+ LogUtil.i(TAG, "Notifying for conversation " + conversationId + "; "
+ + "tag = " + notificationTag + ", type = " + type);
+ }
+
+ // This is the message string used in each line of an inboxStyle notification.
+ // TODO: add attachment type
+ static CharSequence formatInboxMessage(final String sender,
+ final CharSequence message, final Uri attachmentUri, final String attachmentType) {
+ final Context context = Factory.get().getApplicationContext();
+ final TextAppearanceSpan notificationSenderSpan = new TextAppearanceSpan(
+ context, R.style.NotificationSenderText);
+
+ final TextAppearanceSpan notificationTertiaryText = new TextAppearanceSpan(
+ context, R.style.NotificationTertiaryText);
+
+ final SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
+ if (!TextUtils.isEmpty(sender)) {
+ spannableStringBuilder.append(sender);
+ spannableStringBuilder.setSpan(notificationSenderSpan, 0, sender.length(), 0);
+ }
+ final String separator = context.getString(R.string.notification_separator);
+
+ if (!TextUtils.isEmpty(message)) {
+ if (spannableStringBuilder.length() > 0) {
+ spannableStringBuilder.append(separator);
+ }
+ final int start = spannableStringBuilder.length();
+ spannableStringBuilder.append(message);
+ spannableStringBuilder.setSpan(notificationTertiaryText, start,
+ start + message.length(), 0);
+ }
+ if (attachmentUri != null) {
+ if (spannableStringBuilder.length() > 0) {
+ spannableStringBuilder.append(separator);
+ }
+ spannableStringBuilder.append(formatAttachmentTag(null, attachmentType));
+ }
+ return spannableStringBuilder;
+ }
+
+ protected static CharSequence buildColonSeparatedMessage(
+ final String title, final CharSequence content, final Uri attachmentUri,
+ final String attachmentType) {
+ return buildBoldedMessage(title, content, attachmentUri, attachmentType,
+ R.string.notification_ticker_separator);
+ }
+
+ protected static CharSequence buildSpaceSeparatedMessage(
+ final String title, final CharSequence content, final Uri attachmentUri,
+ final String attachmentType) {
+ return buildBoldedMessage(title, content, attachmentUri, attachmentType,
+ R.string.notification_space_separator);
+ }
+
+ /**
+ * buildBoldedMessage - build a formatted message where the title is bold, there's a
+ * separator, then the message.
+ */
+ private static CharSequence buildBoldedMessage(
+ final String title, final CharSequence message, final Uri attachmentUri,
+ final String attachmentType,
+ final int separatorId) {
+ final Context context = Factory.get().getApplicationContext();
+ final SpannableStringBuilder spanBuilder = new SpannableStringBuilder();
+
+ // Boldify the title (which is the sender's name)
+ if (!TextUtils.isEmpty(title)) {
+ spanBuilder.append(title);
+ spanBuilder.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length(),
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ }
+ if (!TextUtils.isEmpty(message)) {
+ if (spanBuilder.length() > 0) {
+ spanBuilder.append(context.getString(separatorId));
+ }
+ spanBuilder.append(message);
+ }
+ if (attachmentUri != null) {
+ if (spanBuilder.length() > 0) {
+ final String separator = context.getString(R.string.notification_separator);
+ spanBuilder.append(separator);
+ }
+ spanBuilder.append(formatAttachmentTag(null, attachmentType));
+ }
+ return spanBuilder;
+ }
+
+ static CharSequence formatAttachmentTag(final String author, final String attachmentType) {
+ final Context context = Factory.get().getApplicationContext();
+ final TextAppearanceSpan notificationSecondaryText = new TextAppearanceSpan(
+ context, R.style.NotificationSecondaryText);
+ final SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
+ if (!TextUtils.isEmpty(author)) {
+ final TextAppearanceSpan notificationSenderSpan = new TextAppearanceSpan(
+ context, R.style.NotificationSenderText);
+ spannableStringBuilder.append(author);
+ spannableStringBuilder.setSpan(notificationSenderSpan, 0, author.length(), 0);
+ final String separator = context.getString(R.string.notification_separator);
+ spannableStringBuilder.append(separator);
+ }
+ final int start = spannableStringBuilder.length();
+ // The default attachment type is an image, since that's what was originally
+ // supported. When there's no content type, assume it's an image.
+ int message = R.string.notification_picture;
+ if (ContentType.isAudioType(attachmentType)) {
+ message = R.string.notification_audio;
+ } else if (ContentType.isVideoType(attachmentType)) {
+ message = R.string.notification_video;
+ } else if (ContentType.isVCardType(attachmentType)) {
+ message = R.string.notification_vcard;
+ }
+ spannableStringBuilder.append(context.getText(message));
+ spannableStringBuilder.setSpan(notificationSecondaryText, start,
+ spannableStringBuilder.length(), 0);
+ return spannableStringBuilder;
+ }
+
+ /**
+ * Play the observable conversation notification sound (it's the regular notification sound, but
+ * played at half-volume)
+ */
+ private static void playObservableConversationNotificationSound(final Uri ringtoneUri) {
+ final Context context = Factory.get().getApplicationContext();
+ final AudioManager audioManager = (AudioManager) context
+ .getSystemService(Context.AUDIO_SERVICE);
+ final boolean silenced =
+ audioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
+ if (silenced) {
+ return;
+ }
+
+ final NotificationPlayer player = new NotificationPlayer(LogUtil.BUGLE_TAG);
+ player.play(ringtoneUri, false,
+ AudioManager.STREAM_NOTIFICATION,
+ OBSERVABLE_CONVERSATION_NOTIFICATION_VOLUME);
+
+ // Stop the sound after five seconds to handle continuous ringtones
+ ThreadUtil.getMainThreadHandler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ player.stop();
+ }
+ }, 5000);
+ }
+
+ public static boolean isWearCompanionAppInstalled() {
+ boolean found = false;
+ try {
+ Factory.get().getApplicationContext().getPackageManager()
+ .getPackageInfo(WEARABLE_COMPANION_APP_PACKAGE, 0);
+ found = true;
+ } catch (final NameNotFoundException e) {
+ // Ignore; found is already false
+ }
+ return found;
+ }
+
+ /**
+ * When we go to the conversation list, call this to mark all messages as seen. That means
+ * we won't show a notification again for the same message.
+ */
+ public static void markAllMessagesAsSeen() {
+ MarkAsSeenAction.markAllAsSeen();
+ resetLastMessageDing(null); // reset the ding timeout for all conversations
+ }
+
+ /**
+ * When we open a particular conversation, call this to mark all messages as read.
+ */
+ public static void markMessagesAsRead(final String conversationId) {
+ MarkAsReadAction.markAsRead(conversationId);
+ resetLastMessageDing(conversationId);
+ }
+
+ /**
+ * Returns the conversation ids of all active, grouped notifications, or
+ * {code null} if no notifications are currently active and grouped.
+ */
+ private static ConversationIdSet getGroupChildIds(final Context context) {
+ final String prefKey = context.getString(R.string.notifications_group_children_key);
+ final String groupChildIdsText = BuglePrefs.getApplicationPrefs().getString(prefKey, "");
+ if (!TextUtils.isEmpty(groupChildIdsText)) {
+ return ConversationIdSet.createSet(groupChildIdsText);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Records the conversation ids of the currently active grouped notifications.
+ */
+ private static void writeGroupChildIds(final Context context,
+ final ConversationIdSet childIds) {
+ final ConversationIdSet oldChildIds = getGroupChildIds(context);
+ if (childIds.equals(oldChildIds)) {
+ return;
+ }
+ final String prefKey = context.getString(R.string.notifications_group_children_key);
+ BuglePrefs.getApplicationPrefs().putString(prefKey, childIds.getDelimitedString());
+ }
+
+ /**
+ * Reset the timer for a notification ding on a particular conversation or all conversations.
+ */
+ public static void resetLastMessageDing(final String conversationId) {
+ synchronized (mLock) {
+ if (TextUtils.isEmpty(conversationId)) {
+ // reset all conversation dings
+ sLastMessageDingTime.clear();
+ } else {
+ sLastMessageDingTime.remove(conversationId);
+ }
+ }
+ }
+
+ public static void notifyEmergencySmsFailed(final String emergencyNumber,
+ final String conversationId) {
+ final Context context = Factory.get().getApplicationContext();
+
+ final CharSequence line1 = MessageNotificationState.applyWarningTextColor(context,
+ context.getString(R.string.notification_emergency_send_failure_line1,
+ emergencyNumber));
+ final String line2 = context.getString(R.string.notification_emergency_send_failure_line2,
+ emergencyNumber);
+ final PendingIntent destinationIntent = UIIntents.get()
+ .getPendingIntentForConversationActivity(context, conversationId, null /* draft */);
+
+ final NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
+ builder.setTicker(line1)
+ .setContentTitle(line1)
+ .setContentText(line2)
+ .setStyle(new NotificationCompat.BigTextStyle(builder).bigText(line2))
+ .setSmallIcon(R.drawable.ic_failed_light)
+ .setContentIntent(destinationIntent)
+ .setSound(UriUtil.getUriForResourceId(context, R.raw.message_failure));
+
+ final String tag = context.getPackageName() + ":emergency_sms_error";
+ NotificationManagerCompat.from(context).notify(
+ tag,
+ PendingIntentConstants.MSG_SEND_ERROR,
+ builder.build());
+ }
+}
+
diff --git a/src/com/android/messaging/datamodel/BugleRecipientEntry.java b/src/com/android/messaging/datamodel/BugleRecipientEntry.java
new file mode 100644
index 0000000..2a9e5ff
--- /dev/null
+++ b/src/com/android/messaging/datamodel/BugleRecipientEntry.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.messaging.datamodel;
+
+import android.net.Uri;
+import android.text.TextUtils;
+
+import com.android.ex.chips.RecipientEntry;
+
+/**
+ * An extension of RecipientEntry for Bugle's use since Bugle uses phone numbers to identify
+ * participants / recipients instead of contact ids. This allows the user to send to multiple
+ * phone numbers of the same contact.
+ */
+public class BugleRecipientEntry extends RecipientEntry {
+
+ protected BugleRecipientEntry(final int entryType, final String displayName,
+ final String destination, final int destinationType, final String destinationLabel,
+ final long contactId, final Long directoryId, final long dataId,
+ final Uri photoThumbnailUri, final boolean isFirstLevel, final boolean isValid,
+ final String lookupKey) {
+ super(entryType, displayName, destination, destinationType, destinationLabel, contactId,
+ directoryId, dataId, photoThumbnailUri, isFirstLevel, isValid, lookupKey);
+ }
+
+ public static BugleRecipientEntry constructTopLevelEntry(final String displayName,
+ final int displayNameSource, final String destination, final int destinationType,
+ final String destinationLabel, final long contactId, final Long directoryId,
+ final long dataId, final String thumbnailUriAsString, final boolean isValid,
+ final String lookupKey) {
+ return new BugleRecipientEntry(ENTRY_TYPE_PERSON, displayName, destination, destinationType,
+ destinationLabel, contactId, directoryId, dataId, (thumbnailUriAsString != null
+ ? Uri.parse(thumbnailUriAsString) : null), true, isValid, lookupKey);
+ }
+
+ public static BugleRecipientEntry constructSecondLevelEntry(final String displayName,
+ final int displayNameSource, final String destination, final int destinationType,
+ final String destinationLabel, final long contactId, final Long directoryId,
+ final long dataId, final String thumbnailUriAsString, final boolean isValid,
+ final String lookupKey) {
+ return new BugleRecipientEntry(ENTRY_TYPE_PERSON, displayName, destination, destinationType,
+ destinationLabel, contactId, directoryId, dataId, (thumbnailUriAsString != null
+ ? Uri.parse(thumbnailUriAsString) : null), false, isValid, lookupKey);
+ }
+
+ @Override
+ public boolean isSamePerson(final RecipientEntry entry) {
+ return getDestination() != null && entry.getDestination() != null &&
+ TextUtils.equals(getDestination(), entry.getDestination());
+ }
+}
diff --git a/src/com/android/messaging/datamodel/ConversationImagePartsView.java b/src/com/android/messaging/datamodel/ConversationImagePartsView.java
new file mode 100644
index 0000000..70ba381
--- /dev/null
+++ b/src/com/android/messaging/datamodel/ConversationImagePartsView.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.provider.BaseColumns;
+
+import com.android.ex.photo.provider.PhotoContract.PhotoViewColumns;
+
+import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
+import com.android.messaging.datamodel.DatabaseHelper.PartColumns;
+import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
+import com.android.messaging.util.ContentType;
+
+/**
+ * View for the image parts for the conversation. It is used to provide the photoviewer with a
+ * a data source for all the photos in a conversation, so that the photoviewer can support paging
+ * through all the photos of the conversation. The columns of the view are a superset of
+ * {@link com.android.ex.photo.provider.PhotoContract.PhotoViewColumns}.
+ */
+public class ConversationImagePartsView {
+ private static final String VIEW_NAME = "conversation_image_parts_view";
+
+ private static final String CREATE_SQL = "CREATE VIEW " +
+ VIEW_NAME + " AS SELECT "
+ + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.CONVERSATION_ID
+ + " as " + Columns.CONVERSATION_ID + ", "
+ + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.CONTENT_URI
+ + " as " + Columns.URI + ", "
+ + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.FULL_NAME
+ + " as " + Columns.SENDER_FULL_NAME + ", "
+ + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.CONTENT_URI
+ + " as " + Columns.CONTENT_URI + ", "
+ // Use NULL as the thumbnail uri
+ + " NULL as " + Columns.THUMBNAIL_URI + ", "
+ + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.CONTENT_TYPE
+ + " as " + Columns.CONTENT_TYPE + ", "
+ //
+ // Columns in addition to those specified by PhotoContract
+ //
+ + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.DISPLAY_DESTINATION
+ + " as " + Columns.DISPLAY_DESTINATION + ", "
+ + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RECEIVED_TIMESTAMP
+ + " as " + Columns.RECEIVED_TIMESTAMP + ", "
+ + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.STATUS
+ + " as " + Columns.STATUS + " "
+
+ + " FROM " + DatabaseHelper.MESSAGES_TABLE + " LEFT JOIN " + DatabaseHelper.PARTS_TABLE
+ + " ON (" + DatabaseHelper.MESSAGES_TABLE + "." + MessageColumns._ID
+ + "=" + DatabaseHelper.PARTS_TABLE + "." + PartColumns.MESSAGE_ID + ") "
+ + " LEFT JOIN " + DatabaseHelper.PARTICIPANTS_TABLE + " ON ("
+ + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SENDER_PARTICIPANT_ID
+ + '=' + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns._ID + ")"
+
+ // "content_type like 'image/%'"
+ + " WHERE " + DatabaseHelper.PARTS_TABLE + "." + PartColumns.CONTENT_TYPE
+ + " like '" + ContentType.IMAGE_PREFIX + "%'"
+
+ + " ORDER BY "
+ + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RECEIVED_TIMESTAMP + " ASC, "
+ + DatabaseHelper.PARTS_TABLE + '.' + PartColumns._ID + " ASC";
+
+ static class Columns implements BaseColumns {
+ static final String CONVERSATION_ID = MessageColumns.CONVERSATION_ID;
+ static final String URI = PhotoViewColumns.URI;
+ static final String SENDER_FULL_NAME = PhotoViewColumns.NAME;
+ static final String CONTENT_URI = PhotoViewColumns.CONTENT_URI;
+ static final String THUMBNAIL_URI = PhotoViewColumns.THUMBNAIL_URI;
+ static final String CONTENT_TYPE = PhotoViewColumns.CONTENT_TYPE;
+ // Columns in addition to those specified by PhotoContract
+ static final String DISPLAY_DESTINATION = ParticipantColumns.DISPLAY_DESTINATION;
+ static final String RECEIVED_TIMESTAMP = MessageColumns.RECEIVED_TIMESTAMP;
+ static final String STATUS = MessageColumns.STATUS;
+ }
+
+ public interface PhotoViewQuery {
+ public final String[] PROJECTION = {
+ PhotoViewColumns.URI,
+ PhotoViewColumns.NAME,
+ PhotoViewColumns.CONTENT_URI,
+ PhotoViewColumns.THUMBNAIL_URI,
+ PhotoViewColumns.CONTENT_TYPE,
+ // Columns in addition to those specified by PhotoContract
+ Columns.DISPLAY_DESTINATION,
+ Columns.RECEIVED_TIMESTAMP,
+ Columns.STATUS,
+ };
+
+ public final int INDEX_URI = 0;
+ public final int INDEX_SENDER_FULL_NAME = 1;
+ public final int INDEX_CONTENT_URI = 2;
+ public final int INDEX_THUMBNAIL_URI = 3;
+ public final int INDEX_CONTENT_TYPE = 4;
+ // Columns in addition to those specified by PhotoContract
+ public final int INDEX_DISPLAY_DESTINATION = 5;
+ public final int INDEX_RECEIVED_TIMESTAMP = 6;
+ public final int INDEX_STATUS = 7;
+ }
+
+ static final String getViewName() {
+ return VIEW_NAME;
+ }
+
+ static final String getCreateSql() {
+ return CREATE_SQL;
+ }
+}
diff --git a/src/com/android/messaging/datamodel/CursorQueryData.java b/src/com/android/messaging/datamodel/CursorQueryData.java
new file mode 100644
index 0000000..3e6a656
--- /dev/null
+++ b/src/com/android/messaging/datamodel/CursorQueryData.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.messaging.datamodel;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+
+import com.android.messaging.util.Assert;
+import com.google.common.annotations.VisibleForTesting;
+
+/**
+ * Holds parameters and data (such as content URI) for performing queries on the content provider.
+ * This class could then be used to perform a query using either a BoundCursorLoader or querying
+ * on the content resolver directly.
+ *
+ * This class is used for cases where the way to load a cursor is not fixed. For example,
+ * when using ContactUtil to query for phone numbers, the ContactPickerFragment wants to use
+ * a CursorLoader to asynchronously load the data and tie in nicely with its data binding
+ * paradigm, whereas ContactRecipientAdapter wants to synchronously perform the query on the
+ * worker thread.
+ */
+public class CursorQueryData {
+ protected final Uri mUri;
+ protected final String[] mProjection;
+ protected final String mSelection;
+ protected final String[] mSelectionArgs;
+ protected final String mSortOrder;
+ protected final Context mContext;
+
+ public CursorQueryData(final Context context, final Uri uri, final String[] projection,
+ final String selection, final String[] selectionArgs, final String sortOrder) {
+ mContext = context;
+ mUri = uri;
+ mProjection = projection;
+ mSelection = selection;
+ mSelectionArgs = selectionArgs;
+ mSortOrder = sortOrder;
+ }
+
+ public BoundCursorLoader createBoundCursorLoader(final String bindingId) {
+ return new BoundCursorLoader(bindingId, mContext, mUri, mProjection, mSelection,
+ mSelectionArgs, mSortOrder);
+ }
+
+ public Cursor performSynchronousQuery() {
+ Assert.isNotMainThread();
+ if (mUri == null) {
+ // See {@link #getEmptyQueryData}
+ return null;
+ } else {
+ return mContext.getContentResolver().query(mUri, mProjection, mSelection,
+ mSelectionArgs, mSortOrder);
+ }
+ }
+
+ @VisibleForTesting
+ public Uri getUri() {
+ return mUri;
+ }
+
+ /**
+ * Representation of an invalid query. {@link #performSynchronousQuery} will return
+ * a null Cursor.
+ */
+ public static CursorQueryData getEmptyQueryData() {
+ return new CursorQueryData(null, null, null, null, null, null);
+ }
+}
diff --git a/src/com/android/messaging/datamodel/DataModel.java b/src/com/android/messaging/datamodel/DataModel.java
new file mode 100644
index 0000000..936b51c
--- /dev/null
+++ b/src/com/android/messaging/datamodel/DataModel.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.net.Uri;
+import android.text.TextUtils;
+
+import com.android.messaging.Factory;
+import com.android.messaging.datamodel.action.Action;
+import com.android.messaging.datamodel.action.ActionService;
+import com.android.messaging.datamodel.action.BackgroundWorker;
+import com.android.messaging.datamodel.data.BlockedParticipantsData;
+import com.android.messaging.datamodel.data.BlockedParticipantsData.BlockedParticipantsDataListener;
+import com.android.messaging.datamodel.data.ContactListItemData;
+import com.android.messaging.datamodel.data.ContactPickerData;
+import com.android.messaging.datamodel.data.ContactPickerData.ContactPickerDataListener;
+import com.android.messaging.datamodel.data.ConversationData;
+import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
+import com.android.messaging.datamodel.data.ConversationListData;
+import com.android.messaging.datamodel.data.ConversationListData.ConversationListDataListener;
+import com.android.messaging.datamodel.data.DraftMessageData;
+import com.android.messaging.datamodel.data.GalleryGridItemData;
+import com.android.messaging.datamodel.data.LaunchConversationData;
+import com.android.messaging.datamodel.data.LaunchConversationData.LaunchConversationDataListener;
+import com.android.messaging.datamodel.data.MediaPickerData;
+import com.android.messaging.datamodel.data.MessagePartData;
+import com.android.messaging.datamodel.data.ParticipantData;
+import com.android.messaging.datamodel.data.ParticipantListItemData;
+import com.android.messaging.datamodel.data.PeopleAndOptionsData;
+import com.android.messaging.datamodel.data.PeopleAndOptionsData.PeopleAndOptionsDataListener;
+import com.android.messaging.datamodel.data.PeopleOptionsItemData;
+import com.android.messaging.datamodel.data.SettingsData;
+import com.android.messaging.datamodel.data.SettingsData.SettingsDataListener;
+import com.android.messaging.datamodel.data.SubscriptionListData;
+import com.android.messaging.datamodel.data.VCardContactItemData;
+import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
+import com.android.messaging.util.ConnectivityUtil;
+
+public abstract class DataModel {
+ private String mFocusedConversation;
+ private boolean mConversationListScrolledToNewestConversation;
+
+ public static DataModel get() {
+ return Factory.get().getDataModel();
+ }
+
+ public static final void startActionService(final Action action) {
+ get().getActionService().startAction(action);
+ }
+
+ public static final void scheduleAction(final Action action,
+ final int code, final long delayMs) {
+ get().getActionService().scheduleAction(action, code, delayMs);
+ }
+
+ public abstract ConversationListData createConversationListData(final Context context,
+ final ConversationListDataListener listener, final boolean archivedMode);
+
+ public abstract ConversationData createConversationData(final Context context,
+ final ConversationDataListener listener, final String conversationId);
+
+ public abstract ContactListItemData createContactListItemData();
+
+ public abstract ContactPickerData createContactPickerData(final Context context,
+ final ContactPickerDataListener listener);
+
+ public abstract MediaPickerData createMediaPickerData(final Context context);
+
+ public abstract GalleryGridItemData createGalleryGridItemData();
+
+ public abstract LaunchConversationData createLaunchConversationData(
+ LaunchConversationDataListener listener);
+
+ public abstract PeopleOptionsItemData createPeopleOptionsItemData(final Context context);
+
+ public abstract PeopleAndOptionsData createPeopleAndOptionsData(final String conversationId,
+ final Context context, final PeopleAndOptionsDataListener listener);
+
+ public abstract VCardContactItemData createVCardContactItemData(final Context context,
+ final MessagePartData data);
+
+ public abstract VCardContactItemData createVCardContactItemData(final Context context,
+ final Uri vCardUri);
+
+ public abstract ParticipantListItemData createParticipantListItemData(
+ final ParticipantData participant);
+
+ public abstract BlockedParticipantsData createBlockedParticipantsData(Context context,
+ BlockedParticipantsDataListener listener);
+
+ public abstract SubscriptionListData createSubscriptonListData(Context context);
+
+ public abstract SettingsData createSettingsData(Context context, SettingsDataListener listener);
+
+ public abstract DraftMessageData createDraftMessageData(String conversationId);
+
+ public abstract ActionService getActionService();
+
+ public abstract BackgroundWorker getBackgroundWorkerForActionService();
+
+ @DoesNotRunOnMainThread
+ public abstract DatabaseWrapper getDatabase();
+
+ // Allow DataModel to coordinate with activity lifetime events.
+ public abstract void onActivityResume();
+
+ abstract void onCreateTables(final SQLiteDatabase db);
+
+ public void setFocusedConversation(final String conversationId) {
+ mFocusedConversation = conversationId;
+ }
+
+ public boolean isFocusedConversation(final String conversationId) {
+ return !TextUtils.isEmpty(mFocusedConversation)
+ && TextUtils.equals(mFocusedConversation, conversationId);
+ }
+
+ public void setConversationListScrolledToNewestConversation(
+ final boolean scrolledToNewestConversation) {
+ mConversationListScrolledToNewestConversation = scrolledToNewestConversation;
+ }
+
+ public boolean isConversationListScrolledToNewestConversation() {
+ return mConversationListScrolledToNewestConversation;
+ }
+
+ /**
+ * If a new message is received in the specified conversation, will the user be able to
+ * observe it in some UI within the app?
+ * @param conversationId conversation with the new incoming message
+ */
+ public boolean isNewMessageObservable(final String conversationId) {
+ return isConversationListScrolledToNewestConversation()
+ || isFocusedConversation(conversationId);
+ }
+
+ public abstract void onApplicationCreated();
+
+ public abstract ConnectivityUtil getConnectivityUtil();
+
+ public abstract SyncManager getSyncManager();
+}
diff --git a/src/com/android/messaging/datamodel/DataModelException.java b/src/com/android/messaging/datamodel/DataModelException.java
new file mode 100644
index 0000000..7084438
--- /dev/null
+++ b/src/com/android/messaging/datamodel/DataModelException.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+public class DataModelException extends Exception {
+ private static final long serialVersionUID = 1L;
+
+ private static final int FIRST = 100;
+
+ // ERRORS GENERATED INTERNALLY BY DATA MODEL.
+
+ // ERRORS RELATED WITH SMS.
+ public static final int ERROR_SMS_TEMPORARY_FAILURE = 116;
+ public static final int ERROR_SMS_PERMANENT_FAILURE = 117;
+ public static final int ERROR_MMS_TEMPORARY_FAILURE = 118;
+ public static final int ERROR_MMS_PERMANENT_UNKNOWN_FAILURE = 119;
+
+ // Request expired.
+ public static final int ERROR_EXPIRED = 120;
+ // Request canceled by user.
+ public static final int ERROR_CANCELED = 121;
+
+ public static final int ERROR_MOBILE_DATA_DISABLED = 123;
+ public static final int ERROR_MMS_SERVICE_BLOCKED = 124;
+ public static final int ERROR_MMS_INVALID_ADDRESS = 125;
+ public static final int ERROR_MMS_NETWORK_PROBLEM = 126;
+ public static final int ERROR_MMS_MESSAGE_NOT_FOUND = 127;
+ public static final int ERROR_MMS_MESSAGE_FORMAT_CORRUPT = 128;
+ public static final int ERROR_MMS_CONTENT_NOT_ACCEPTED = 129;
+ public static final int ERROR_MMS_MESSAGE_NOT_SUPPORTED = 130;
+ public static final int ERROR_MMS_REPLY_CHARGING_ERROR = 131;
+ public static final int ERROR_MMS_ADDRESS_HIDING_NOT_SUPPORTED = 132;
+ public static final int ERROR_MMS_LACK_OF_PREPAID = 133;
+ public static final int ERROR_MMS_CAN_NOT_PERSIST = 134;
+ public static final int ERROR_MMS_NO_AVAILABLE_APN = 135;
+ public static final int ERROR_MMS_INVALID_MESSAGE_TO_SEND = 136;
+ public static final int ERROR_MMS_INVALID_MESSAGE_RECEIVED = 137;
+ public static final int ERROR_MMS_NO_CONFIGURATION = 138;
+
+ private static final int LAST = 138;
+
+ private final boolean mIsInjection;
+ private final int mErrorCode;
+ private final String mMessage;
+ private final long mBackoff;
+
+ public DataModelException(final int errorCode, final Exception innerException,
+ final long backoff, final boolean injection, final String message) {
+ // Since some of the exceptions passed in may not be serializable, only record message
+ // instead of setting inner exception for Exception class. Otherwise, we will get
+ // serialization issues when we pass ServerRequestException as intent extra later.
+ if (errorCode < FIRST || errorCode > LAST) {
+ throw new IllegalArgumentException("error code out of range: " + errorCode);
+ }
+ mIsInjection = injection;
+ mErrorCode = errorCode;
+ if (innerException != null) {
+ mMessage = innerException.getMessage() + " -- " +
+ (mIsInjection ? "[INJECTED] -- " : "") + message;
+ } else {
+ mMessage = (mIsInjection ? "[INJECTED] -- " : "") + message;
+ }
+
+ mBackoff = backoff;
+ }
+
+ public DataModelException(final int errorCode) {
+ this(errorCode, null, 0, false, null);
+ }
+
+ public DataModelException(final int errorCode, final Exception innerException) {
+ this(errorCode, innerException, 0, false, null);
+ }
+
+ public DataModelException(final int errorCode, final String message) {
+ this(errorCode, null, 0, false, message);
+ }
+
+ @Override
+ public String getMessage() {
+ return mMessage;
+ }
+
+ public int getErrorCode() {
+ return mErrorCode;
+ }
+}
diff --git a/src/com/android/messaging/datamodel/DataModelImpl.java b/src/com/android/messaging/datamodel/DataModelImpl.java
new file mode 100644
index 0000000..6ab3f00
--- /dev/null
+++ b/src/com/android/messaging/datamodel/DataModelImpl.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.net.Uri;
+import android.telephony.SubscriptionManager;
+
+import com.android.messaging.datamodel.action.ActionService;
+import com.android.messaging.datamodel.action.BackgroundWorker;
+import com.android.messaging.datamodel.action.FixupMessageStatusOnStartupAction;
+import com.android.messaging.datamodel.action.ProcessPendingMessagesAction;
+import com.android.messaging.datamodel.data.BlockedParticipantsData;
+import com.android.messaging.datamodel.data.BlockedParticipantsData.BlockedParticipantsDataListener;
+import com.android.messaging.datamodel.data.ContactListItemData;
+import com.android.messaging.datamodel.data.ContactPickerData;
+import com.android.messaging.datamodel.data.ContactPickerData.ContactPickerDataListener;
+import com.android.messaging.datamodel.data.ConversationData;
+import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
+import com.android.messaging.datamodel.data.ConversationListData;
+import com.android.messaging.datamodel.data.ConversationListData.ConversationListDataListener;
+import com.android.messaging.datamodel.data.DraftMessageData;
+import com.android.messaging.datamodel.data.GalleryGridItemData;
+import com.android.messaging.datamodel.data.LaunchConversationData;
+import com.android.messaging.datamodel.data.LaunchConversationData.LaunchConversationDataListener;
+import com.android.messaging.datamodel.data.MediaPickerData;
+import com.android.messaging.datamodel.data.MessagePartData;
+import com.android.messaging.datamodel.data.ParticipantData;
+import com.android.messaging.datamodel.data.ParticipantListItemData;
+import com.android.messaging.datamodel.data.PeopleAndOptionsData;
+import com.android.messaging.datamodel.data.PeopleAndOptionsData.PeopleAndOptionsDataListener;
+import com.android.messaging.datamodel.data.PeopleOptionsItemData;
+import com.android.messaging.datamodel.data.SettingsData;
+import com.android.messaging.datamodel.data.SettingsData.SettingsDataListener;
+import com.android.messaging.datamodel.data.SubscriptionListData;
+import com.android.messaging.datamodel.data.VCardContactItemData;
+import com.android.messaging.sms.MmsConfig;
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
+import com.android.messaging.util.ConnectivityUtil;
+import com.android.messaging.util.LogUtil;
+import com.android.messaging.util.OsUtil;
+import com.android.messaging.util.PhoneUtils;
+
+public class DataModelImpl extends DataModel {
+ private final Context mContext;
+ private final ActionService mActionService;
+ private final BackgroundWorker mDataModelWorker;
+ private final DatabaseHelper mDatabaseHelper;
+ private final ConnectivityUtil mConnectivityUtil;
+ private final SyncManager mSyncManager;
+
+ public DataModelImpl(final Context context) {
+ super();
+ mContext = context;
+ mActionService = new ActionService();
+ mDataModelWorker = new BackgroundWorker();
+ mDatabaseHelper = DatabaseHelper.getInstance(context);
+ mConnectivityUtil = new ConnectivityUtil(context);
+ mSyncManager = new SyncManager();
+ }
+
+ @Override
+ public ConversationListData createConversationListData(final Context context,
+ final ConversationListDataListener listener, final boolean archivedMode) {
+ return new ConversationListData(context, listener, archivedMode);
+ }
+
+ @Override
+ public ConversationData createConversationData(final Context context,
+ final ConversationDataListener listener, final String conversationId) {
+ return new ConversationData(context, listener, conversationId);
+ }
+
+ @Override
+ public ContactListItemData createContactListItemData() {
+ return new ContactListItemData();
+ }
+
+ @Override
+ public ContactPickerData createContactPickerData(final Context context,
+ final ContactPickerDataListener listener) {
+ return new ContactPickerData(context, listener);
+ }
+
+ @Override
+ public BlockedParticipantsData createBlockedParticipantsData(
+ final Context context, final BlockedParticipantsDataListener listener) {
+ return new BlockedParticipantsData(context, listener);
+ }
+
+ @Override
+ public MediaPickerData createMediaPickerData(final Context context) {
+ return new MediaPickerData(context);
+ }
+
+ @Override
+ public GalleryGridItemData createGalleryGridItemData() {
+ return new GalleryGridItemData();
+ }
+
+ @Override
+ public LaunchConversationData createLaunchConversationData(
+ final LaunchConversationDataListener listener) {
+ return new LaunchConversationData(listener);
+ }
+
+ @Override
+ public PeopleOptionsItemData createPeopleOptionsItemData(final Context context) {
+ return new PeopleOptionsItemData(context);
+ }
+
+ @Override
+ public PeopleAndOptionsData createPeopleAndOptionsData(final String conversationId,
+ final Context context, final PeopleAndOptionsDataListener listener) {
+ return new PeopleAndOptionsData(conversationId, context, listener);
+ }
+
+ @Override
+ public VCardContactItemData createVCardContactItemData(final Context context,
+ final MessagePartData data) {
+ return new VCardContactItemData(context, data);
+ }
+
+ @Override
+ public VCardContactItemData createVCardContactItemData(final Context context,
+ final Uri vCardUri) {
+ return new VCardContactItemData(context, vCardUri);
+ }
+
+ @Override
+ public ParticipantListItemData createParticipantListItemData(
+ final ParticipantData participant) {
+ return new ParticipantListItemData(participant);
+ }
+
+ @Override
+ public SubscriptionListData createSubscriptonListData(Context context) {
+ return new SubscriptionListData(context);
+ }
+
+ @Override
+ public SettingsData createSettingsData(Context context, SettingsDataListener listener) {
+ return new SettingsData(context, listener);
+ }
+
+ @Override
+ public DraftMessageData createDraftMessageData(String conversationId) {
+ return new DraftMessageData(conversationId);
+ }
+
+ @Override
+ public ActionService getActionService() {
+ // We need to allow access to this on the UI thread since it's used to start actions.
+ return mActionService;
+ }
+
+ @Override
+ public BackgroundWorker getBackgroundWorkerForActionService() {
+ return mDataModelWorker;
+ }
+
+ @Override
+ @DoesNotRunOnMainThread
+ public DatabaseWrapper getDatabase() {
+ // We prevent the main UI thread from accessing the database since we have to allow
+ // public access to this class to enable sub-packages to access data.
+ Assert.isNotMainThread();
+ return mDatabaseHelper.getDatabase();
+ }
+
+ @Override
+ public ConnectivityUtil getConnectivityUtil() {
+ return mConnectivityUtil;
+ }
+
+ @Override
+ public SyncManager getSyncManager() {
+ return mSyncManager;
+ }
+
+ @Override
+ void onCreateTables(final SQLiteDatabase db) {
+ LogUtil.w(LogUtil.BUGLE_TAG, "Rebuilt databases: reseting related state");
+ // Clear other things that implicitly reference the DB
+ SyncManager.resetLastSyncTimestamps();
+ }
+
+ @Override
+ public void onActivityResume() {
+ // Perform an incremental sync and register for changes if necessary
+ mSyncManager.updateSyncObserver(mContext);
+
+ // Trigger a participant refresh if needed, we should only need to refresh if there is
+ // contact change while the activity was paused.
+ ParticipantRefresh.refreshParticipantsIfNeeded();
+ }
+
+ @Override
+ public void onApplicationCreated() {
+ FixupMessageStatusOnStartupAction.fixupMessageStatus();
+ ProcessPendingMessagesAction.processFirstPendingMessage();
+ SyncManager.immediateSync();
+
+ if (OsUtil.isAtLeastL_MR1()) {
+ // Start listening for subscription change events for refreshing self participants.
+ PhoneUtils.getDefault().toLMr1().registerOnSubscriptionsChangedListener(
+ new SubscriptionManager.OnSubscriptionsChangedListener() {
+ @Override
+ public void onSubscriptionsChanged() {
+ // TODO: This dynamically changes the mms config that app is
+ // currently using. It may cause inconsistency in some cases. We need
+ // to check the usage of mms config and handle the dynamic change
+ // gracefully
+ MmsConfig.loadAsync();
+ ParticipantRefresh.refreshSelfParticipants();
+ }
+ });
+ }
+ }
+}
diff --git a/src/com/android/messaging/datamodel/DatabaseHelper.java b/src/com/android/messaging/datamodel/DatabaseHelper.java
new file mode 100644
index 0000000..f16bb3c
--- /dev/null
+++ b/src/com/android/messaging/datamodel/DatabaseHelper.java
@@ -0,0 +1,813 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.SQLException;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.provider.BaseColumns;
+
+import com.android.messaging.BugleApplication;
+import com.android.messaging.R;
+import com.android.messaging.datamodel.data.ConversationListItemData;
+import com.android.messaging.datamodel.data.MessageData;
+import com.android.messaging.datamodel.data.ParticipantData;
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
+import com.android.messaging.util.LogUtil;
+import com.google.common.annotations.VisibleForTesting;
+
+/**
+ * TODO: Open Issues:
+ * - Should we be storing the draft messages in the regular messages table or should we have a
+ * separate table for drafts to keep the normal messages query as simple as possible?
+ */
+
+/**
+ * Allows access to the SQL database. This is package private.
+ */
+public class DatabaseHelper extends SQLiteOpenHelper {
+ public static final String DATABASE_NAME = "bugle_db";
+
+ private static final int getDatabaseVersion(final Context context) {
+ return Integer.parseInt(context.getResources().getString(R.string.database_version));
+ }
+
+ /** Table containing names of all other tables and views */
+ private static final String MASTER_TABLE = "sqlite_master";
+ /** Column containing the name of the tables and views */
+ private static final String[] MASTER_COLUMNS = new String[] { "name", };
+
+ // Table names
+ public static final String CONVERSATIONS_TABLE = "conversations";
+ public static final String MESSAGES_TABLE = "messages";
+ public static final String PARTS_TABLE = "parts";
+ public static final String PARTICIPANTS_TABLE = "participants";
+ public static final String CONVERSATION_PARTICIPANTS_TABLE = "conversation_participants";
+
+ // Views
+ static final String DRAFT_PARTS_VIEW = "draft_parts_view";
+
+ // Conversations table schema
+ public static class ConversationColumns implements BaseColumns {
+ /* SMS/MMS Thread ID from the system provider */
+ public static final String SMS_THREAD_ID = "sms_thread_id";
+
+ /* Display name for the conversation */
+ public static final String NAME = "name";
+
+ /* Latest Message ID for the read status to display in conversation list */
+ public static final String LATEST_MESSAGE_ID = "latest_message_id";
+
+ /* Latest text snippet for display in conversation list */
+ public static final String SNIPPET_TEXT = "snippet_text";
+
+ /* Latest text subject for display in conversation list, empty string if none exists */
+ public static final String SUBJECT_TEXT = "subject_text";
+
+ /* Preview Uri */
+ public static final String PREVIEW_URI = "preview_uri";
+
+ /* The preview uri's content type */
+ public static final String PREVIEW_CONTENT_TYPE = "preview_content_type";
+
+ /* If we should display the current draft snippet/preview pair or snippet/preview pair */
+ public static final String SHOW_DRAFT = "show_draft";
+
+ /* Latest draft text subject for display in conversation list, empty string if none exists*/
+ public static final String DRAFT_SUBJECT_TEXT = "draft_subject_text";
+
+ /* Latest draft text snippet for display, empty string if none exists */
+ public static final String DRAFT_SNIPPET_TEXT = "draft_snippet_text";
+
+ /* Draft Preview Uri, empty string if none exists */
+ public static final String DRAFT_PREVIEW_URI = "draft_preview_uri";
+
+ /* The preview uri's content type */
+ public static final String DRAFT_PREVIEW_CONTENT_TYPE = "draft_preview_content_type";
+
+ /* If this conversation is archived */
+ public static final String ARCHIVE_STATUS = "archive_status";
+
+ /* Timestamp for sorting purposes */
+ public static final String SORT_TIMESTAMP = "sort_timestamp";
+
+ /* Last read message timestamp */
+ public static final String LAST_READ_TIMESTAMP = "last_read_timestamp";
+
+ /* Avatar for the conversation. Could be for group of individual */
+ public static final String ICON = "icon";
+
+ /* Participant contact ID if this conversation has a single participant. -1 otherwise */
+ public static final String PARTICIPANT_CONTACT_ID = "participant_contact_id";
+
+ /* Participant lookup key if this conversation has a single participant. null otherwise */
+ public static final String PARTICIPANT_LOOKUP_KEY = "participant_lookup_key";
+
+ /*
+ * Participant's normalized destination if this conversation has a single participant.
+ * null otherwise.
+ */
+ public static final String OTHER_PARTICIPANT_NORMALIZED_DESTINATION =
+ "participant_normalized_destination";
+
+ /* Default self participant for the conversation */
+ public static final String CURRENT_SELF_ID = "current_self_id";
+
+ /* Participant count not including self (so will be 1 for 1:1 or bigger for group) */
+ public static final String PARTICIPANT_COUNT = "participant_count";
+
+ /* Should notifications be enabled for this conversation? */
+ public static final String NOTIFICATION_ENABLED = "notification_enabled";
+
+ /* Notification sound used for the conversation */
+ public static final String NOTIFICATION_SOUND_URI = "notification_sound_uri";
+
+ /* Should vibrations be enabled for the conversation's notification? */
+ public static final String NOTIFICATION_VIBRATION = "notification_vibration";
+
+ /* Conversation recipients include email address */
+ public static final String INCLUDE_EMAIL_ADDRESS = "include_email_addr";
+
+ // Record the last received sms's service center info if it indicates that the reply path
+ // is present (TP-Reply-Path), so that we could use it for the subsequent message to send.
+ // Refer to TS 23.040 D.6 and SmsMessageSender.java in Android Messaging app.
+ public static final String SMS_SERVICE_CENTER = "sms_service_center";
+ }
+
+ // Conversation table SQL
+ private static final String CREATE_CONVERSATIONS_TABLE_SQL =
+ "CREATE TABLE " + CONVERSATIONS_TABLE + "("
+ + ConversationColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ // TODO : Int? Required not default?
+ + ConversationColumns.SMS_THREAD_ID + " INT DEFAULT(0), "
+ + ConversationColumns.NAME + " TEXT, "
+ + ConversationColumns.LATEST_MESSAGE_ID + " INT, "
+ + ConversationColumns.SNIPPET_TEXT + " TEXT, "
+ + ConversationColumns.SUBJECT_TEXT + " TEXT, "
+ + ConversationColumns.PREVIEW_URI + " TEXT, "
+ + ConversationColumns.PREVIEW_CONTENT_TYPE + " TEXT, "
+ + ConversationColumns.SHOW_DRAFT + " INT DEFAULT(0), "
+ + ConversationColumns.DRAFT_SNIPPET_TEXT + " TEXT, "
+ + ConversationColumns.DRAFT_SUBJECT_TEXT + " TEXT, "
+ + ConversationColumns.DRAFT_PREVIEW_URI + " TEXT, "
+ + ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE + " TEXT, "
+ + ConversationColumns.ARCHIVE_STATUS + " INT DEFAULT(0), "
+ + ConversationColumns.SORT_TIMESTAMP + " INT DEFAULT(0), "
+ + ConversationColumns.LAST_READ_TIMESTAMP + " INT DEFAULT(0), "
+ + ConversationColumns.ICON + " TEXT, "
+ + ConversationColumns.PARTICIPANT_CONTACT_ID + " INT DEFAULT ( "
+ + ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED + "), "
+ + ConversationColumns.PARTICIPANT_LOOKUP_KEY + " TEXT, "
+ + ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION + " TEXT, "
+ + ConversationColumns.CURRENT_SELF_ID + " TEXT, "
+ + ConversationColumns.PARTICIPANT_COUNT + " INT DEFAULT(0), "
+ + ConversationColumns.NOTIFICATION_ENABLED + " INT DEFAULT(1), "
+ + ConversationColumns.NOTIFICATION_SOUND_URI + " TEXT, "
+ + ConversationColumns.NOTIFICATION_VIBRATION + " INT DEFAULT(1), "
+ + ConversationColumns.INCLUDE_EMAIL_ADDRESS + " INT DEFAULT(0), "
+ + ConversationColumns.SMS_SERVICE_CENTER + " TEXT "
+ + ");";
+
+ private static final String CONVERSATIONS_TABLE_SMS_THREAD_ID_INDEX_SQL =
+ "CREATE INDEX index_" + CONVERSATIONS_TABLE + "_" + ConversationColumns.SMS_THREAD_ID
+ + " ON " + CONVERSATIONS_TABLE
+ + "(" + ConversationColumns.SMS_THREAD_ID + ")";
+
+ private static final String CONVERSATIONS_TABLE_ARCHIVE_STATUS_INDEX_SQL =
+ "CREATE INDEX index_" + CONVERSATIONS_TABLE + "_" + ConversationColumns.ARCHIVE_STATUS
+ + " ON " + CONVERSATIONS_TABLE
+ + "(" + ConversationColumns.ARCHIVE_STATUS + ")";
+
+ private static final String CONVERSATIONS_TABLE_SORT_TIMESTAMP_INDEX_SQL =
+ "CREATE INDEX index_" + CONVERSATIONS_TABLE + "_" + ConversationColumns.SORT_TIMESTAMP
+ + " ON " + CONVERSATIONS_TABLE
+ + "(" + ConversationColumns.SORT_TIMESTAMP + ")";
+
+ // Messages table schema
+ public static class MessageColumns implements BaseColumns {
+ /* conversation id that this message belongs to */
+ public static final String CONVERSATION_ID = "conversation_id";
+
+ /* participant which send this message */
+ public static final String SENDER_PARTICIPANT_ID = "sender_id";
+
+ /* This is bugle's internal status for the message */
+ public static final String STATUS = "message_status";
+
+ /* Type of message: SMS, MMS or MMS notification */
+ public static final String PROTOCOL = "message_protocol";
+
+ /* This is the time that the sender sent the message */
+ public static final String SENT_TIMESTAMP = "sent_timestamp";
+
+ /* Time that we received the message on this device */
+ public static final String RECEIVED_TIMESTAMP = "received_timestamp";
+
+ /* When the message has been seen by a user in a notification */
+ public static final String SEEN = "seen";
+
+ /* When the message has been read by a user */
+ public static final String READ = "read";
+
+ /* participant representing the sim which processed this message */
+ public static final String SELF_PARTICIPANT_ID = "self_id";
+
+ /*
+ * Time when a retry is initiated. This is used to compute the retry window
+ * when we retry sending/downloading a message.
+ */
+ public static final String RETRY_START_TIMESTAMP = "retry_start_timestamp";
+
+ // Columns which map to the SMS provider
+
+ /* Message ID from the platform provider */
+ public static final String SMS_MESSAGE_URI = "sms_message_uri";
+
+ /* The message priority for MMS message */
+ public static final String SMS_PRIORITY = "sms_priority";
+
+ /* The message size for MMS message */
+ public static final String SMS_MESSAGE_SIZE = "sms_message_size";
+
+ /* The subject for MMS message */
+ public static final String MMS_SUBJECT = "mms_subject";
+
+ /* Transaction id for MMS notificaiton */
+ public static final String MMS_TRANSACTION_ID = "mms_transaction_id";
+
+ /* Content location for MMS notificaiton */
+ public static final String MMS_CONTENT_LOCATION = "mms_content_location";
+
+ /* The expiry time (ms) for MMS message */
+ public static final String MMS_EXPIRY = "mms_expiry";
+
+ /* The detailed status (RESPONSE_STATUS or RETRIEVE_STATUS) for MMS message */
+ public static final String RAW_TELEPHONY_STATUS = "raw_status";
+ }
+
+ // Messages table SQL
+ private static final String CREATE_MESSAGES_TABLE_SQL =
+ "CREATE TABLE " + MESSAGES_TABLE + " ("
+ + MessageColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ + MessageColumns.CONVERSATION_ID + " INT, "
+ + MessageColumns.SENDER_PARTICIPANT_ID + " INT, "
+ + MessageColumns.SENT_TIMESTAMP + " INT DEFAULT(0), "
+ + MessageColumns.RECEIVED_TIMESTAMP + " INT DEFAULT(0), "
+ + MessageColumns.PROTOCOL + " INT DEFAULT(0), "
+ + MessageColumns.STATUS + " INT DEFAULT(0), "
+ + MessageColumns.SEEN + " INT DEFAULT(0), "
+ + MessageColumns.READ + " INT DEFAULT(0), "
+ + MessageColumns.SMS_MESSAGE_URI + " TEXT, "
+ + MessageColumns.SMS_PRIORITY + " INT DEFAULT(0), "
+ + MessageColumns.SMS_MESSAGE_SIZE + " INT DEFAULT(0), "
+ + MessageColumns.MMS_SUBJECT + " TEXT, "
+ + MessageColumns.MMS_TRANSACTION_ID + " TEXT, "
+ + MessageColumns.MMS_CONTENT_LOCATION + " TEXT, "
+ + MessageColumns.MMS_EXPIRY + " INT DEFAULT(0), "
+ + MessageColumns.RAW_TELEPHONY_STATUS + " INT DEFAULT(0), "
+ + MessageColumns.SELF_PARTICIPANT_ID + " INT, "
+ + MessageColumns.RETRY_START_TIMESTAMP + " INT DEFAULT(0), "
+ + "FOREIGN KEY (" + MessageColumns.CONVERSATION_ID + ") REFERENCES "
+ + CONVERSATIONS_TABLE + "(" + ConversationColumns._ID + ") ON DELETE CASCADE "
+ + "FOREIGN KEY (" + MessageColumns.SENDER_PARTICIPANT_ID + ") REFERENCES "
+ + PARTICIPANTS_TABLE + "(" + ParticipantColumns._ID + ") ON DELETE SET NULL "
+ + "FOREIGN KEY (" + MessageColumns.SELF_PARTICIPANT_ID + ") REFERENCES "
+ + PARTICIPANTS_TABLE + "(" + ParticipantColumns._ID + ") ON DELETE SET NULL "
+ + ");";
+
+ // Primary sort index for messages table : by conversation id, status, received timestamp.
+ private static final String MESSAGES_TABLE_SORT_INDEX_SQL =
+ "CREATE INDEX index_" + MESSAGES_TABLE + "_sort ON " + MESSAGES_TABLE + "("
+ + MessageColumns.CONVERSATION_ID + ", "
+ + MessageColumns.STATUS + ", "
+ + MessageColumns.RECEIVED_TIMESTAMP + ")";
+
+ private static final String MESSAGES_TABLE_STATUS_SEEN_INDEX_SQL =
+ "CREATE INDEX index_" + MESSAGES_TABLE + "_status_seen ON " + MESSAGES_TABLE + "("
+ + MessageColumns.STATUS + ", "
+ + MessageColumns.SEEN + ")";
+
+ // Parts table schema
+ // A part may contain text or a media url, but not both.
+ public static class PartColumns implements BaseColumns {
+ /* message id that this part belongs to */
+ public static final String MESSAGE_ID = "message_id";
+
+ /* conversation id that this part belongs to */
+ public static final String CONVERSATION_ID = "conversation_id";
+
+ /* text for this part */
+ public static final String TEXT = "text";
+
+ /* content uri for this part */
+ public static final String CONTENT_URI = "uri";
+
+ /* content type for this part */
+ public static final String CONTENT_TYPE = "content_type";
+
+ /* cached width for this part (for layout while loading) */
+ public static final String WIDTH = "width";
+
+ /* cached height for this part (for layout while loading) */
+ public static final String HEIGHT = "height";
+
+ /* de-normalized copy of timestamp from the messages table. This is populated
+ * via an insert trigger on the parts table.
+ */
+ public static final String TIMESTAMP = "timestamp";
+ }
+
+ // Message part table SQL
+ private static final String CREATE_PARTS_TABLE_SQL =
+ "CREATE TABLE " + PARTS_TABLE + "("
+ + PartColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ + PartColumns.MESSAGE_ID + " INT,"
+ + PartColumns.TEXT + " TEXT,"
+ + PartColumns.CONTENT_URI + " TEXT,"
+ + PartColumns.CONTENT_TYPE + " TEXT,"
+ + PartColumns.WIDTH + " INT DEFAULT("
+ + MessagingContentProvider.UNSPECIFIED_SIZE + "),"
+ + PartColumns.HEIGHT + " INT DEFAULT("
+ + MessagingContentProvider.UNSPECIFIED_SIZE + "),"
+ + PartColumns.TIMESTAMP + " INT, "
+ + PartColumns.CONVERSATION_ID + " INT NOT NULL,"
+ + "FOREIGN KEY (" + PartColumns.MESSAGE_ID + ") REFERENCES "
+ + MESSAGES_TABLE + "(" + MessageColumns._ID + ") ON DELETE CASCADE "
+ + "FOREIGN KEY (" + PartColumns.CONVERSATION_ID + ") REFERENCES "
+ + CONVERSATIONS_TABLE + "(" + ConversationColumns._ID + ") ON DELETE CASCADE "
+ + ");";
+
+ public static final String CREATE_PARTS_TRIGGER_SQL =
+ "CREATE TRIGGER " + PARTS_TABLE + "_TRIGGER" + " AFTER INSERT ON " + PARTS_TABLE
+ + " FOR EACH ROW "
+ + " BEGIN UPDATE " + PARTS_TABLE
+ + " SET " + PartColumns.TIMESTAMP + "="
+ + " (SELECT received_timestamp FROM " + MESSAGES_TABLE + " WHERE " + MESSAGES_TABLE
+ + "." + MessageColumns._ID + "=" + "NEW." + PartColumns.MESSAGE_ID + ")"
+ + " WHERE " + PARTS_TABLE + "." + PartColumns._ID + "=" + "NEW." + PartColumns._ID
+ + "; END";
+
+ public static final String CREATE_MESSAGES_TRIGGER_SQL =
+ "CREATE TRIGGER " + MESSAGES_TABLE + "_TRIGGER" + " AFTER UPDATE OF "
+ + MessageColumns.RECEIVED_TIMESTAMP + " ON " + MESSAGES_TABLE
+ + " FOR EACH ROW BEGIN UPDATE " + PARTS_TABLE + " SET " + PartColumns.TIMESTAMP
+ + " = NEW." + MessageColumns.RECEIVED_TIMESTAMP + " WHERE " + PARTS_TABLE + "."
+ + PartColumns.MESSAGE_ID + " = NEW." + MessageColumns._ID
+ + "; END;";
+
+ // Primary sort index for parts table : by message_id
+ private static final String PARTS_TABLE_MESSAGE_INDEX_SQL =
+ "CREATE INDEX index_" + PARTS_TABLE + "_message_id ON " + PARTS_TABLE + "("
+ + PartColumns.MESSAGE_ID + ")";
+
+ // Participants table schema
+ public static class ParticipantColumns implements BaseColumns {
+ /* The subscription id for the sim associated with this self participant.
+ * Introduced in L. For earlier versions will always be default_sub_id (-1).
+ * For multi sim devices (or cases where the sim was changed) single device
+ * may have several different sub_id values */
+ public static final String SUB_ID = "sub_id";
+
+ /* The slot of the active SIM (inserted in the device) for this self-participant. If the
+ * self-participant doesn't correspond to any active SIM, this will be
+ * {@link android.telephony.SubscriptionManager#INVALID_SLOT_ID}.
+ * The column is ignored for all non-self participants.
+ */
+ public static final String SIM_SLOT_ID = "sim_slot_id";
+
+ /* The phone number stored in a standard E164 format if possible. This is unique for a
+ * given participant. We can't handle multiple participants with the same phone number
+ * since we don't know which of them a message comes from. This can also be an email
+ * address, in which case this is the same as the displayed address */
+ public static final String NORMALIZED_DESTINATION = "normalized_destination";
+
+ /* The phone number as originally supplied and used for dialing. Not necessarily in E164
+ * format or unique */
+ public static final String SEND_DESTINATION = "send_destination";
+
+ /* The user-friendly formatting of the phone number according to the region setting of
+ * the device when the row was added. */
+ public static final String DISPLAY_DESTINATION = "display_destination";
+
+ /* A string with this participant's full name or a pretty printed phone number */
+ public static final String FULL_NAME = "full_name";
+
+ /* A string with just this participant's first name */
+ public static final String FIRST_NAME = "first_name";
+
+ /* A local URI to an asset for the icon for this participant */
+ public static final String PROFILE_PHOTO_URI = "profile_photo_uri";
+
+ /* Contact id for matching local contact for this participant */
+ public static final String CONTACT_ID = "contact_id";
+
+ /* String that contains hints on how to find contact information in a contact lookup */
+ public static final String LOOKUP_KEY = "lookup_key";
+
+ /* If this participant is blocked */
+ public static final String BLOCKED = "blocked";
+
+ /* The color of the subscription (FOR SELF PARTICIPANTS ONLY) */
+ public static final String SUBSCRIPTION_COLOR = "subscription_color";
+
+ /* The name of the subscription (FOR SELF PARTICIPANTS ONLY) */
+ public static final String SUBSCRIPTION_NAME = "subscription_name";
+
+ /* The exact destination stored in Contacts for this participant */
+ public static final String CONTACT_DESTINATION = "contact_destination";
+ }
+
+ // Participants table SQL
+ private static final String CREATE_PARTICIPANTS_TABLE_SQL =
+ "CREATE TABLE " + PARTICIPANTS_TABLE + "("
+ + ParticipantColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ + ParticipantColumns.SUB_ID + " INT DEFAULT("
+ + ParticipantData.OTHER_THAN_SELF_SUB_ID + "),"
+ + ParticipantColumns.SIM_SLOT_ID + " INT DEFAULT("
+ + ParticipantData.INVALID_SLOT_ID + "),"
+ + ParticipantColumns.NORMALIZED_DESTINATION + " TEXT,"
+ + ParticipantColumns.SEND_DESTINATION + " TEXT,"
+ + ParticipantColumns.DISPLAY_DESTINATION + " TEXT,"
+ + ParticipantColumns.FULL_NAME + " TEXT,"
+ + ParticipantColumns.FIRST_NAME + " TEXT,"
+ + ParticipantColumns.PROFILE_PHOTO_URI + " TEXT, "
+ + ParticipantColumns.CONTACT_ID + " INT DEFAULT( "
+ + ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED + "), "
+ + ParticipantColumns.LOOKUP_KEY + " STRING, "
+ + ParticipantColumns.BLOCKED + " INT DEFAULT(0), "
+ + ParticipantColumns.SUBSCRIPTION_NAME + " TEXT, "
+ + ParticipantColumns.SUBSCRIPTION_COLOR + " INT DEFAULT(0), "
+ + ParticipantColumns.CONTACT_DESTINATION + " TEXT, "
+ + "UNIQUE (" + ParticipantColumns.NORMALIZED_DESTINATION + ", "
+ + ParticipantColumns.SUB_ID + ") ON CONFLICT FAIL" + ");";
+
+ private static final String CREATE_SELF_PARTICIPANT_SQL =
+ "INSERT INTO " + PARTICIPANTS_TABLE
+ + " ( " + ParticipantColumns.SUB_ID + " ) VALUES ( %s )";
+
+ static String getCreateSelfParticipantSql(int subId) {
+ return String.format(CREATE_SELF_PARTICIPANT_SQL, subId);
+ }
+
+ // Conversation Participants table schema - contains a list of participants excluding the user
+ // in a given conversation.
+ public static class ConversationParticipantsColumns implements BaseColumns {
+ /* participant id of someone in this conversation */
+ public static final String PARTICIPANT_ID = "participant_id";
+
+ /* conversation id that this participant belongs to */
+ public static final String CONVERSATION_ID = "conversation_id";
+ }
+
+ // Conversation Participants table SQL
+ private static final String CREATE_CONVERSATION_PARTICIPANTS_TABLE_SQL =
+ "CREATE TABLE " + CONVERSATION_PARTICIPANTS_TABLE + "("
+ + ConversationParticipantsColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ + ConversationParticipantsColumns.CONVERSATION_ID + " INT,"
+ + ConversationParticipantsColumns.PARTICIPANT_ID + " INT,"
+ + "UNIQUE (" + ConversationParticipantsColumns.CONVERSATION_ID + ","
+ + ConversationParticipantsColumns.PARTICIPANT_ID + ") ON CONFLICT FAIL, "
+ + "FOREIGN KEY (" + ConversationParticipantsColumns.CONVERSATION_ID + ") "
+ + "REFERENCES " + CONVERSATIONS_TABLE + "(" + ConversationColumns._ID + ")"
+ + " ON DELETE CASCADE "
+ + "FOREIGN KEY (" + ConversationParticipantsColumns.PARTICIPANT_ID + ")"
+ + " REFERENCES " + PARTICIPANTS_TABLE + "(" + ParticipantColumns._ID + "));";
+
+ // Primary access pattern for conversation participants is to look them up for a specific
+ // conversation.
+ private static final String CONVERSATION_PARTICIPANTS_TABLE_CONVERSATION_ID_INDEX_SQL =
+ "CREATE INDEX index_" + CONVERSATION_PARTICIPANTS_TABLE + "_"
+ + ConversationParticipantsColumns.CONVERSATION_ID
+ + " ON " + CONVERSATION_PARTICIPANTS_TABLE
+ + "(" + ConversationParticipantsColumns.CONVERSATION_ID + ")";
+
+ // View for getting parts which are for draft messages.
+ static final String DRAFT_PARTS_VIEW_SQL = "CREATE VIEW " +
+ DRAFT_PARTS_VIEW + " AS SELECT "
+ + PARTS_TABLE + '.' + PartColumns._ID
+ + " as " + PartColumns._ID + ", "
+ + PARTS_TABLE + '.' + PartColumns.MESSAGE_ID
+ + " as " + PartColumns.MESSAGE_ID + ", "
+ + PARTS_TABLE + '.' + PartColumns.TEXT
+ + " as " + PartColumns.TEXT + ", "
+ + PARTS_TABLE + '.' + PartColumns.CONTENT_URI
+ + " as " + PartColumns.CONTENT_URI + ", "
+ + PARTS_TABLE + '.' + PartColumns.CONTENT_TYPE
+ + " as " + PartColumns.CONTENT_TYPE + ", "
+ + PARTS_TABLE + '.' + PartColumns.WIDTH
+ + " as " + PartColumns.WIDTH + ", "
+ + PARTS_TABLE + '.' + PartColumns.HEIGHT
+ + " as " + PartColumns.HEIGHT + ", "
+ + MESSAGES_TABLE + '.' + MessageColumns.CONVERSATION_ID
+ + " as " + MessageColumns.CONVERSATION_ID + " "
+ + " FROM " + MESSAGES_TABLE + " LEFT JOIN " + PARTS_TABLE + " ON ("
+ + MESSAGES_TABLE + "." + MessageColumns._ID
+ + "=" + PARTS_TABLE + "." + PartColumns.MESSAGE_ID + ")"
+ // Exclude draft messages from main view
+ + " WHERE " + MESSAGES_TABLE + "." + MessageColumns.STATUS
+ + " = " + MessageData.BUGLE_STATUS_OUTGOING_DRAFT;
+
+ // List of all our SQL tables
+ private static final String[] CREATE_TABLE_SQLS = new String[] {
+ CREATE_CONVERSATIONS_TABLE_SQL,
+ CREATE_MESSAGES_TABLE_SQL,
+ CREATE_PARTS_TABLE_SQL,
+ CREATE_PARTICIPANTS_TABLE_SQL,
+ CREATE_CONVERSATION_PARTICIPANTS_TABLE_SQL,
+ };
+
+ // List of all our indices
+ private static final String[] CREATE_INDEX_SQLS = new String[] {
+ CONVERSATIONS_TABLE_SMS_THREAD_ID_INDEX_SQL,
+ CONVERSATIONS_TABLE_ARCHIVE_STATUS_INDEX_SQL,
+ CONVERSATIONS_TABLE_SORT_TIMESTAMP_INDEX_SQL,
+ MESSAGES_TABLE_SORT_INDEX_SQL,
+ MESSAGES_TABLE_STATUS_SEEN_INDEX_SQL,
+ PARTS_TABLE_MESSAGE_INDEX_SQL,
+ CONVERSATION_PARTICIPANTS_TABLE_CONVERSATION_ID_INDEX_SQL,
+ };
+
+ // List of all our SQL triggers
+ private static final String[] CREATE_TRIGGER_SQLS = new String[] {
+ CREATE_PARTS_TRIGGER_SQL,
+ CREATE_MESSAGES_TRIGGER_SQL,
+ };
+
+ // List of all our views
+ private static final String[] CREATE_VIEW_SQLS = new String[] {
+ ConversationListItemData.getConversationListViewSql(),
+ ConversationImagePartsView.getCreateSql(),
+ DRAFT_PARTS_VIEW_SQL,
+ };
+
+ private static final Object sLock = new Object();
+ private final Context mApplicationContext;
+ private static DatabaseHelper sHelperInstance; // Protected by sLock.
+
+ private final Object mDatabaseWrapperLock = new Object();
+ private DatabaseWrapper mDatabaseWrapper; // Protected by mDatabaseWrapperLock.
+ private final DatabaseUpgradeHelper mUpgradeHelper = new DatabaseUpgradeHelper();
+
+ /**
+ * Get a (singleton) instance of {@link DatabaseHelper}, creating one if there isn't one yet.
+ * This is the only public method for getting a new instance of the class.
+ * @param context Should be the application context (or something that will live for the
+ * lifetime of the application).
+ * @return The current (or a new) DatabaseHelper instance.
+ */
+ public static DatabaseHelper getInstance(final Context context) {
+ synchronized (sLock) {
+ if (sHelperInstance == null) {
+ sHelperInstance = new DatabaseHelper(context);
+ }
+ return sHelperInstance;
+ }
+ }
+
+ /**
+ * Private constructor, used from {@link #getInstance()}.
+ * @param context Should be the application context (or something that will live for the
+ * lifetime of the application).
+ */
+ private DatabaseHelper(final Context context) {
+ super(context, DATABASE_NAME, null, getDatabaseVersion(context), null);
+ mApplicationContext = context;
+ }
+
+ /**
+ * Test method that always instantiates a new DatabaseHelper instance. This should
+ * be used ONLY by the tests and never by the real application.
+ * @param context Test context.
+ * @return Brand new DatabaseHelper instance.
+ */
+ @VisibleForTesting
+ static DatabaseHelper getNewInstanceForTest(final Context context) {
+ Assert.isEngBuild();
+ Assert.isTrue(BugleApplication.isRunningTests());
+ return new DatabaseHelper(context);
+ }
+
+ /**
+ * Get the (singleton) instance of @{link DatabaseWrapper}.
+ *
The database is always opened as a writeable database.
+ * @return The current (or a new) DatabaseWrapper instance.
+ */
+ @DoesNotRunOnMainThread
+ DatabaseWrapper getDatabase() {
+ // We prevent the main UI thread from accessing the database here since we have to allow
+ // public access to this class to enable sub-packages to access data.
+ Assert.isNotMainThread();
+
+ synchronized (mDatabaseWrapperLock) {
+ if (mDatabaseWrapper == null) {
+ mDatabaseWrapper = new DatabaseWrapper(mApplicationContext, getWritableDatabase());
+ }
+ return mDatabaseWrapper;
+ }
+ }
+
+ @Override
+ public void onDowngrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
+ mUpgradeHelper.onDowngrade(db, oldVersion, newVersion);
+ }
+
+ /**
+ * Drops and recreates all tables.
+ */
+ public static void rebuildTables(final SQLiteDatabase db) {
+ // Drop tables first, then views, and indices.
+ dropAllTables(db);
+ dropAllViews(db);
+ dropAllIndexes(db);
+ dropAllTriggers(db);
+
+ // Recreate the whole database.
+ createDatabase(db);
+ }
+
+ /**
+ * Drop and rebuild a given view.
+ */
+ static void rebuildView(final SQLiteDatabase db, final String viewName,
+ final String createViewSql) {
+ dropView(db, viewName, true /* throwOnFailure */);
+ db.execSQL(createViewSql);
+ }
+
+ private static void dropView(final SQLiteDatabase db, final String viewName,
+ final boolean throwOnFailure) {
+ final String dropPrefix = "DROP VIEW IF EXISTS ";
+ try {
+ db.execSQL(dropPrefix + viewName);
+ } catch (final SQLException ex) {
+ if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
+ LogUtil.d(LogUtil.BUGLE_TAG, "unable to drop view " + viewName + " "
+ + ex);
+ }
+
+ if (throwOnFailure) {
+ throw ex;
+ }
+ }
+ }
+
+ /**
+ * Drops all user-defined tables from the given database.
+ */
+ private static void dropAllTables(final SQLiteDatabase db) {
+ final Cursor tableCursor =
+ db.query(MASTER_TABLE, MASTER_COLUMNS, "type='table'", null, null, null, null);
+ if (tableCursor != null) {
+ try {
+ final String dropPrefix = "DROP TABLE IF EXISTS ";
+ while (tableCursor.moveToNext()) {
+ final String tableName = tableCursor.getString(0);
+
+ // Skip special tables
+ if (tableName.startsWith("android_") || tableName.startsWith("sqlite_")) {
+ continue;
+ }
+ try {
+ db.execSQL(dropPrefix + tableName);
+ } catch (final SQLException ex) {
+ if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
+ LogUtil.d(LogUtil.BUGLE_TAG, "unable to drop table " + tableName + " "
+ + ex);
+ }
+ }
+ }
+ } finally {
+ tableCursor.close();
+ }
+ }
+ }
+
+ /**
+ * Drops all user-defined triggers from the given database.
+ */
+ private static void dropAllTriggers(final SQLiteDatabase db) {
+ final Cursor triggerCursor =
+ db.query(MASTER_TABLE, MASTER_COLUMNS, "type='trigger'", null, null, null, null);
+ if (triggerCursor != null) {
+ try {
+ final String dropPrefix = "DROP TRIGGER IF EXISTS ";
+ while (triggerCursor.moveToNext()) {
+ final String triggerName = triggerCursor.getString(0);
+
+ // Skip special tables
+ if (triggerName.startsWith("android_") || triggerName.startsWith("sqlite_")) {
+ continue;
+ }
+ try {
+ db.execSQL(dropPrefix + triggerName);
+ } catch (final SQLException ex) {
+ if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
+ LogUtil.d(LogUtil.BUGLE_TAG, "unable to drop trigger " + triggerName +
+ " " + ex);
+ }
+ }
+ }
+ } finally {
+ triggerCursor.close();
+ }
+ }
+ }
+
+ /**
+ * Drops all user-defined views from the given database.
+ */
+ private static void dropAllViews(final SQLiteDatabase db) {
+ final Cursor viewCursor =
+ db.query(MASTER_TABLE, MASTER_COLUMNS, "type='view'", null, null, null, null);
+ if (viewCursor != null) {
+ try {
+ while (viewCursor.moveToNext()) {
+ final String viewName = viewCursor.getString(0);
+ dropView(db, viewName, false /* throwOnFailure */);
+ }
+ } finally {
+ viewCursor.close();
+ }
+ }
+ }
+
+ /**
+ * Drops all user-defined views from the given database.
+ */
+ private static void dropAllIndexes(final SQLiteDatabase db) {
+ final Cursor indexCursor =
+ db.query(MASTER_TABLE, MASTER_COLUMNS, "type='index'", null, null, null, null);
+ if (indexCursor != null) {
+ try {
+ final String dropPrefix = "DROP INDEX IF EXISTS ";
+ while (indexCursor.moveToNext()) {
+ final String indexName = indexCursor.getString(0);
+ try {
+ db.execSQL(dropPrefix + indexName);
+ } catch (final SQLException ex) {
+ if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
+ LogUtil.d(LogUtil.BUGLE_TAG, "unable to drop index " + indexName + " "
+ + ex);
+ }
+ }
+ }
+ } finally {
+ indexCursor.close();
+ }
+ }
+ }
+
+ private static void createDatabase(final SQLiteDatabase db) {
+ for (final String sql : CREATE_TABLE_SQLS) {
+ db.execSQL(sql);
+ }
+
+ for (final String sql : CREATE_INDEX_SQLS) {
+ db.execSQL(sql);
+ }
+
+ for (final String sql : CREATE_VIEW_SQLS) {
+ db.execSQL(sql);
+ }
+
+ for (final String sql : CREATE_TRIGGER_SQLS) {
+ db.execSQL(sql);
+ }
+
+ // Enable foreign key constraints
+ db.execSQL("PRAGMA foreign_keys=ON;");
+
+ // Add the default self participant. The default self will be assigned a proper slot id
+ // during participant refresh.
+ db.execSQL(getCreateSelfParticipantSql(ParticipantData.DEFAULT_SELF_SUB_ID));
+
+ DataModel.get().onCreateTables(db);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ createDatabase(db);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ mUpgradeHelper.doOnUpgrade(db, oldVersion, newVersion);
+ }
+}
diff --git a/src/com/android/messaging/datamodel/DatabaseUpgradeHelper.java b/src/com/android/messaging/datamodel/DatabaseUpgradeHelper.java
new file mode 100644
index 0000000..d112533
--- /dev/null
+++ b/src/com/android/messaging/datamodel/DatabaseUpgradeHelper.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.messaging.datamodel;
+
+import android.database.sqlite.SQLiteDatabase;
+
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.LogUtil;
+
+public class DatabaseUpgradeHelper {
+ private static final String TAG = LogUtil.BUGLE_DATABASE_TAG;
+
+ public void doOnUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
+ Assert.isTrue(newVersion >= oldVersion);
+ if (oldVersion == newVersion) {
+ return;
+ }
+
+ LogUtil.i(TAG, "Database upgrade started from version " + oldVersion + " to " + newVersion);
+
+ // Add future upgrade code here
+ }
+
+ public void onDowngrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
+ DatabaseHelper.rebuildTables(db);
+ LogUtil.e(TAG, "Database downgrade requested for version " +
+ oldVersion + " version " + newVersion + ", forcing db rebuild!");
+ }
+}
diff --git a/src/com/android/messaging/datamodel/DatabaseWrapper.java b/src/com/android/messaging/datamodel/DatabaseWrapper.java
new file mode 100644
index 0000000..ca7a331
--- /dev/null
+++ b/src/com/android/messaging/datamodel/DatabaseWrapper.java
@@ -0,0 +1,482 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.DatabaseUtils;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteFullException;
+import android.database.sqlite.SQLiteQueryBuilder;
+import android.database.sqlite.SQLiteStatement;
+import android.util.SparseArray;
+
+import com.android.messaging.Factory;
+import com.android.messaging.R;
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.BugleGservicesKeys;
+import com.android.messaging.util.DebugUtils;
+import com.android.messaging.util.LogUtil;
+import com.android.messaging.util.UiUtils;
+
+import java.util.Locale;
+import java.util.Stack;
+import java.util.regex.Pattern;
+
+public class DatabaseWrapper {
+ private static final String TAG = LogUtil.BUGLE_DATABASE_TAG;
+
+ private final SQLiteDatabase mDatabase;
+ private final Context mContext;
+ private final boolean mLog;
+ /**
+ * Set mExplainQueryPlanRegexp (via {@link BugleGservicesKeys#EXPLAIN_QUERY_PLAN_REGEXP}
+ * to regex matching queries to see query plans. For example, ".*" to show all query plans.
+ */
+ // See
+ private final String mExplainQueryPlanRegexp;
+ private static final int sTimingThreshold = 50; // in milliseconds
+
+ public static final int INDEX_INSERT_MESSAGE_PART = 0;
+ public static final int INDEX_INSERT_MESSAGE = 1;
+ public static final int INDEX_QUERY_CONVERSATIONS_LATEST_MESSAGE = 2;
+ public static final int INDEX_QUERY_MESSAGES_LATEST_MESSAGE = 3;
+
+ private final SparseArray mCompiledStatements;
+
+ static class TransactionData {
+ long time;
+ boolean transactionSuccessful;
+ }
+
+ // track transaction on a per thread basis
+ private static ThreadLocal> sTransactionDepth =
+ new ThreadLocal>() {
+ @Override
+ public Stack initialValue() {
+ return new Stack();
+ }
+ };
+
+ private static String[] sFormatStrings = new String[] {
+ "took %d ms to %s",
+ " took %d ms to %s",
+ " took %d ms to %s",
+ };
+
+ DatabaseWrapper(final Context context, final SQLiteDatabase db) {
+ mLog = LogUtil.isLoggable(LogUtil.BUGLE_DATABASE_PERF_TAG, LogUtil.VERBOSE);
+ mExplainQueryPlanRegexp = Factory.get().getBugleGservices().getString(
+ BugleGservicesKeys.EXPLAIN_QUERY_PLAN_REGEXP, null);
+ mDatabase = db;
+ mContext = context;
+ mCompiledStatements = new SparseArray();
+ }
+
+ public SQLiteStatement getStatementInTransaction(final int index, final String statement) {
+ // Use transaction to serialize access to statements
+ Assert.isTrue(mDatabase.inTransaction());
+ SQLiteStatement compiled = mCompiledStatements.get(index);
+ if (compiled == null) {
+ compiled = mDatabase.compileStatement(statement);
+ Assert.isTrue(compiled.toString().contains(statement.trim()));
+ mCompiledStatements.put(index, compiled);
+ }
+ return compiled;
+ }
+
+ private void maybePlayDebugNoise() {
+ DebugUtils.maybePlayDebugNoise(mContext, DebugUtils.DEBUG_SOUND_DB_OP);
+ }
+
+ private static void printTiming(final long t1, final String msg) {
+ final int transactionDepth = sTransactionDepth.get().size();
+ final long t2 = System.currentTimeMillis();
+ final long delta = t2 - t1;
+ if (delta > sTimingThreshold) {
+ LogUtil.v(LogUtil.BUGLE_DATABASE_PERF_TAG, String.format(Locale.US,
+ sFormatStrings[Math.min(sFormatStrings.length - 1, transactionDepth)],
+ delta,
+ msg));
+ }
+ }
+
+ public Context getContext() {
+ return mContext;
+ }
+
+ public void beginTransaction() {
+ final long t1 = System.currentTimeMillis();
+
+ // push the current time onto the transaction stack
+ final TransactionData f = new TransactionData();
+ f.time = t1;
+ sTransactionDepth.get().push(f);
+
+ mDatabase.beginTransaction();
+ }
+
+ public void setTransactionSuccessful() {
+ final TransactionData f = sTransactionDepth.get().peek();
+ f.transactionSuccessful = true;
+ mDatabase.setTransactionSuccessful();
+ }
+
+ public void endTransaction() {
+ long t1 = 0;
+ long transactionStartTime = 0;
+ final TransactionData f = sTransactionDepth.get().pop();
+ if (f.transactionSuccessful == false) {
+ LogUtil.w(TAG, "endTransaction without setting successful");
+ for (final StackTraceElement st : (new Exception()).getStackTrace()) {
+ LogUtil.w(TAG, " " + st.toString());
+ }
+ }
+ if (mLog) {
+ transactionStartTime = f.time;
+ t1 = System.currentTimeMillis();
+ }
+ try {
+ mDatabase.endTransaction();
+ } catch (SQLiteFullException ex) {
+ LogUtil.e(TAG, "Database full, unable to endTransaction", ex);
+ UiUtils.showToastAtBottom(R.string.db_full);
+ }
+ if (mLog) {
+ printTiming(t1, String.format(Locale.US,
+ ">>> endTransaction (total for this transaction: %d)",
+ (System.currentTimeMillis() - transactionStartTime)));
+ }
+ }
+
+ public void yieldTransaction() {
+ long yieldStartTime = 0;
+ if (mLog) {
+ yieldStartTime = System.currentTimeMillis();
+ }
+ final boolean wasYielded = mDatabase.yieldIfContendedSafely();
+ if (wasYielded && mLog) {
+ printTiming(yieldStartTime, "yieldTransaction");
+ }
+ }
+
+ public void insertWithOnConflict(final String searchTable, final String nullColumnHack,
+ final ContentValues initialValues, final int conflictAlgorithm) {
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ try {
+ mDatabase.insertWithOnConflict(searchTable, nullColumnHack, initialValues,
+ conflictAlgorithm);
+ } catch (SQLiteFullException ex) {
+ LogUtil.e(TAG, "Database full, unable to insertWithOnConflict", ex);
+ UiUtils.showToastAtBottom(R.string.db_full);
+ }
+ if (mLog) {
+ printTiming(t1, String.format(Locale.US,
+ "insertWithOnConflict with ", searchTable));
+ }
+ }
+
+ private void explainQueryPlan(final SQLiteQueryBuilder qb, final SQLiteDatabase db,
+ final String[] projection, final String selection,
+ @SuppressWarnings("unused")
+ final String[] queryArgs,
+ final String groupBy,
+ @SuppressWarnings("unused")
+ final String having,
+ final String sortOrder, final String limit) {
+ final String queryString = qb.buildQuery(
+ projection,
+ selection,
+ groupBy,
+ null/*having*/,
+ sortOrder,
+ limit);
+ explainQueryPlan(db, queryString, queryArgs);
+ }
+
+ private void explainQueryPlan(final SQLiteDatabase db, final String sql,
+ final String[] queryArgs) {
+ if (!Pattern.matches(mExplainQueryPlanRegexp, sql)) {
+ return;
+ }
+ final Cursor planCursor = db.rawQuery("explain query plan " + sql, queryArgs);
+ try {
+ if (planCursor != null && planCursor.moveToFirst()) {
+ final int detailColumn = planCursor.getColumnIndex("detail");
+ final StringBuilder sb = new StringBuilder();
+ do {
+ sb.append(planCursor.getString(detailColumn));
+ sb.append("\n");
+ } while (planCursor.moveToNext());
+ if (sb.length() > 0) {
+ sb.setLength(sb.length() - 1);
+ }
+ LogUtil.v(TAG, "for query " + sql + "\nplan is: "
+ + sb.toString());
+ }
+ } catch (final Exception e) {
+ LogUtil.w(TAG, "Query plan failed ", e);
+ } finally {
+ if (planCursor != null) {
+ planCursor.close();
+ }
+ }
+ }
+
+ public Cursor query(final String searchTable, final String[] projection,
+ final String selection, final String[] selectionArgs, final String groupBy,
+ final String having, final String orderBy, final String limit) {
+ if (mExplainQueryPlanRegexp != null) {
+ final SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
+ qb.setTables(searchTable);
+ explainQueryPlan(qb, mDatabase, projection, selection, selectionArgs,
+ groupBy, having, orderBy, limit);
+ }
+
+ maybePlayDebugNoise();
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ final Cursor cursor = mDatabase.query(searchTable, projection, selection, selectionArgs,
+ groupBy, having, orderBy, limit);
+ if (mLog) {
+ printTiming(
+ t1,
+ String.format(Locale.US, "query %s with %s ==> %d",
+ searchTable, selection, cursor.getCount()));
+ }
+ return cursor;
+ }
+
+ public Cursor query(final String searchTable, final String[] columns,
+ final String selection, final String[] selectionArgs, final String groupBy,
+ final String having, final String orderBy) {
+ return query(
+ searchTable, columns, selection, selectionArgs,
+ groupBy, having, orderBy, null);
+ }
+
+ public Cursor query(final SQLiteQueryBuilder qb,
+ final String[] projection, final String selection, final String[] queryArgs,
+ final String groupBy, final String having, final String sortOrder, final String limit) {
+ if (mExplainQueryPlanRegexp != null) {
+ explainQueryPlan(qb, mDatabase, projection, selection, queryArgs,
+ groupBy, having, sortOrder, limit);
+ }
+ maybePlayDebugNoise();
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ final Cursor cursor = qb.query(mDatabase, projection, selection, queryArgs, groupBy,
+ having, sortOrder, limit);
+ if (mLog) {
+ printTiming(
+ t1,
+ String.format(Locale.US, "query %s with %s ==> %d",
+ qb.getTables(), selection, cursor.getCount()));
+ }
+ return cursor;
+ }
+
+ public long queryNumEntries(final String table, final String selection,
+ final String[] selectionArgs) {
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ maybePlayDebugNoise();
+ final long retval =
+ DatabaseUtils.queryNumEntries(mDatabase, table, selection, selectionArgs);
+ if (mLog){
+ printTiming(
+ t1,
+ String.format(Locale.US, "queryNumEntries %s with %s ==> %d", table,
+ selection, retval));
+ }
+ return retval;
+ }
+
+ public Cursor rawQuery(final String sql, final String[] args) {
+ if (mExplainQueryPlanRegexp != null) {
+ explainQueryPlan(mDatabase, sql, args);
+ }
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ maybePlayDebugNoise();
+ final Cursor cursor = mDatabase.rawQuery(sql, args);
+ if (mLog) {
+ printTiming(
+ t1,
+ String.format(Locale.US, "rawQuery %s ==> %d", sql, cursor.getCount()));
+ }
+ return cursor;
+ }
+
+ public int update(final String table, final ContentValues values,
+ final String selection, final String[] selectionArgs) {
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ maybePlayDebugNoise();
+ int count = 0;
+ try {
+ count = mDatabase.update(table, values, selection, selectionArgs);
+ } catch (SQLiteFullException ex) {
+ LogUtil.e(TAG, "Database full, unable to update", ex);
+ UiUtils.showToastAtBottom(R.string.db_full);
+ }
+ if (mLog) {
+ printTiming(t1, String.format(Locale.US, "update %s with %s ==> %d",
+ table, selection, count));
+ }
+ return count;
+ }
+
+ public int delete(final String table, final String whereClause, final String[] whereArgs) {
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ maybePlayDebugNoise();
+ int count = 0;
+ try {
+ count = mDatabase.delete(table, whereClause, whereArgs);
+ } catch (SQLiteFullException ex) {
+ LogUtil.e(TAG, "Database full, unable to delete", ex);
+ UiUtils.showToastAtBottom(R.string.db_full);
+ }
+ if (mLog) {
+ printTiming(t1,
+ String.format(Locale.US, "delete from %s with %s ==> %d", table,
+ whereClause, count));
+ }
+ return count;
+ }
+
+ public long insert(final String table, final String nullColumnHack,
+ final ContentValues values) {
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ maybePlayDebugNoise();
+ long rowId = -1;
+ try {
+ rowId = mDatabase.insert(table, nullColumnHack, values);
+ } catch (SQLiteFullException ex) {
+ LogUtil.e(TAG, "Database full, unable to insert", ex);
+ UiUtils.showToastAtBottom(R.string.db_full);
+ }
+ if (mLog) {
+ printTiming(t1, String.format(Locale.US, "insert to %s", table));
+ }
+ return rowId;
+ }
+
+ public long replace(final String table, final String nullColumnHack,
+ final ContentValues values) {
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ maybePlayDebugNoise();
+ long rowId = -1;
+ try {
+ rowId = mDatabase.replace(table, nullColumnHack, values);
+ } catch (SQLiteFullException ex) {
+ LogUtil.e(TAG, "Database full, unable to replace", ex);
+ UiUtils.showToastAtBottom(R.string.db_full);
+ }
+ if (mLog) {
+ printTiming(t1, String.format(Locale.US, "replace to %s", table));
+ }
+ return rowId;
+ }
+
+ public void setLocale(final Locale locale) {
+ mDatabase.setLocale(locale);
+ }
+
+ public void execSQL(final String sql, final String[] bindArgs) {
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ maybePlayDebugNoise();
+ try {
+ mDatabase.execSQL(sql, bindArgs);
+ } catch (SQLiteFullException ex) {
+ LogUtil.e(TAG, "Database full, unable to execSQL", ex);
+ UiUtils.showToastAtBottom(R.string.db_full);
+ }
+
+ if (mLog) {
+ printTiming(t1, String.format(Locale.US, "execSQL %s", sql));
+ }
+ }
+
+ public void execSQL(final String sql) {
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ maybePlayDebugNoise();
+ try {
+ mDatabase.execSQL(sql);
+ } catch (SQLiteFullException ex) {
+ LogUtil.e(TAG, "Database full, unable to execSQL", ex);
+ UiUtils.showToastAtBottom(R.string.db_full);
+ }
+
+ if (mLog) {
+ printTiming(t1, String.format(Locale.US, "execSQL %s", sql));
+ }
+ }
+
+ public int execSQLUpdateDelete(final String sql) {
+ long t1 = 0;
+ if (mLog) {
+ t1 = System.currentTimeMillis();
+ }
+ maybePlayDebugNoise();
+ final SQLiteStatement statement = mDatabase.compileStatement(sql);
+ int rowsUpdated = 0;
+ try {
+ rowsUpdated = statement.executeUpdateDelete();
+ } catch (SQLiteFullException ex) {
+ LogUtil.e(TAG, "Database full, unable to execSQLUpdateDelete", ex);
+ UiUtils.showToastAtBottom(R.string.db_full);
+ }
+ if (mLog) {
+ printTiming(t1, String.format(Locale.US, "execSQLUpdateDelete %s", sql));
+ }
+ return rowsUpdated;
+ }
+
+ public SQLiteDatabase getDatabase() {
+ return mDatabase;
+ }
+}
diff --git a/src/com/android/messaging/datamodel/FileProvider.java b/src/com/android/messaging/datamodel/FileProvider.java
new file mode 100644
index 0000000..ee332cd
--- /dev/null
+++ b/src/com/android/messaging/datamodel/FileProvider.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.messaging.datamodel;
+
+import android.content.ContentProvider;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.ParcelFileDescriptor;
+import android.text.TextUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Random;
+
+/**
+ * A very simple content provider that can serve files.
+ */
+public abstract class FileProvider extends ContentProvider {
+ // Object to generate random id for temp images.
+ private static final Random RANDOM_ID = new Random();
+
+ abstract File getFile(final String path, final String extension);
+
+ private static final String FILE_EXTENSION_PARAM_KEY = "ext";
+
+ /**
+ * Check if filename conforms to requirement for our provider
+ * @param fileId filename (optionally starting with path character
+ * @return true if filename consists only of digits
+ */
+ protected static boolean isValidFileId(final String fileId) {
+ // Ignore initial "/"
+ for (int index = (fileId.startsWith("/") ? 1 : 0); index < fileId.length(); index++) {
+ final Character c = fileId.charAt(index);
+ if (!Character.isDigit(c)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Create a temp file (to allow writing to that one particular file)
+ * @param file the file to create
+ * @return true if file successfully created
+ */
+ protected static boolean ensureFileExists(final File file) {
+ try {
+ final File parentDir = file.getParentFile();
+ if (parentDir.exists() || parentDir.mkdirs()) {
+ return file.createNewFile();
+ }
+ } catch (final IOException e) {
+ // fail on exceptions creating the file
+ }
+ return false;
+ }
+
+ /**
+ * Build uri for a new temporary file (creating file)
+ * @param authority authority with which to populate uri
+ * @param extension optional file extension
+ * @return unique uri that can be used to write temporary files
+ */
+ protected static Uri buildFileUri(final String authority, final String extension) {
+ final long fileId = Math.abs(RANDOM_ID.nextLong());
+ final Uri.Builder builder = (new Uri.Builder()).authority(authority).scheme(
+ ContentResolver.SCHEME_CONTENT);
+ builder.appendPath(String.valueOf(fileId));
+ if (!TextUtils.isEmpty(extension)) {
+ builder.appendQueryParameter(FILE_EXTENSION_PARAM_KEY, extension);
+ }
+ return builder.build();
+ }
+
+ @Override
+ public boolean onCreate() {
+ return true;
+ }
+
+ @Override
+ public int delete(final Uri uri, final String selection, final String[] selectionArgs) {
+ final String fileId = uri.getPath();
+ if (isValidFileId(fileId)) {
+ final File file = getFile(fileId, getExtensionFromUri(uri));
+ return file.delete() ? 1 : 0;
+ }
+ return 0;
+ }
+
+ @Override
+ public ParcelFileDescriptor openFile(final Uri uri, final String fileMode)
+ throws FileNotFoundException {
+ final String fileId = uri.getPath();
+ if (isValidFileId(fileId)) {
+ final File file = getFile(fileId, getExtensionFromUri(uri));
+ final int mode =
+ (TextUtils.equals(fileMode, "r") ? ParcelFileDescriptor.MODE_READ_ONLY :
+ ParcelFileDescriptor.MODE_WRITE_ONLY | ParcelFileDescriptor.MODE_TRUNCATE);
+ return ParcelFileDescriptor.open(file, mode);
+ }
+ return null;
+ }
+
+ protected static String getExtensionFromUri(final Uri uri) {
+ return uri.getQueryParameter(FILE_EXTENSION_PARAM_KEY);
+ }
+
+ @Override
+ public Cursor query(final Uri uri, final String[] projection, final String selection,
+ final String[] selectionArgs, final String sortOrder) {
+ // Don't support queries.
+ return null;
+ }
+
+ @Override
+ public Uri insert(final Uri uri, final ContentValues values) {
+ // Don't support inserts.
+ return null;
+ }
+
+ @Override
+ public int update(final Uri uri, final ContentValues values, final String selection,
+ final String[] selectionArgs) {
+ // Don't support updates.
+ return 0;
+ }
+
+ @Override
+ public String getType(final Uri uri) {
+ // No need for mime types.
+ return null;
+ }
+}
diff --git a/src/com/android/messaging/datamodel/FrequentContactsCursorBuilder.java b/src/com/android/messaging/datamodel/FrequentContactsCursorBuilder.java
new file mode 100644
index 0000000..62483a0
--- /dev/null
+++ b/src/com/android/messaging/datamodel/FrequentContactsCursorBuilder.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.messaging.datamodel;
+
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.support.v4.util.SimpleArrayMap;
+
+import com.android.messaging.util.Assert;
+import com.android.messaging.util.ContactUtil;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+/**
+ * A cursor builder that takes the frequent contacts cursor and aggregate it with the all contacts
+ * cursor to fill in contact details such as phone numbers and strip away invalid contacts.
+ *
+ * Because the frequent contact list depends on the loading of two cursors, it needs to temporarily
+ * store the cursor that it receives with setFrequents() and setAllContacts() calls. Because it
+ * doesn't know which one will be finished first, it always checks whether both cursors are ready
+ * to pull data from and construct the aggregate cursor when it's ready to do so. Note that
+ * this cursor builder doesn't assume ownership of the cursors passed in - it merely references
+ * them and always does a isClosed() check before consuming them. The ownership still belongs to
+ * the loader framework and the cursor may be closed when the UI is torn down.
+ */
+public class FrequentContactsCursorBuilder {
+ private Cursor mAllContactsCursor;
+ private Cursor mFrequentContactsCursor;
+
+ /**
+ * Sets the frequent contacts cursor as soon as it is loaded, or null if it's reset.
+ * @return this builder instance for chained operations
+ */
+ public FrequentContactsCursorBuilder setFrequents(final Cursor frequentContactsCursor) {
+ mFrequentContactsCursor = frequentContactsCursor;
+ return this;
+ }
+
+ /**
+ * Sets the all contacts cursor as soon as it is loaded, or null if it's reset.
+ * @return this builder instance for chained operations
+ */
+ public FrequentContactsCursorBuilder setAllContacts(final Cursor allContactsCursor) {
+ mAllContactsCursor = allContactsCursor;
+ return this;
+ }
+
+ /**
+ * Reset this builder. Must be called when the consumer resets its data.
+ */
+ public void resetBuilder() {
+ mAllContactsCursor = null;
+ mFrequentContactsCursor = null;
+ }
+
+ /**
+ * Attempt to build the cursor records from the frequent and all contacts cursor if they
+ * are both ready to be consumed.
+ * @return the frequent contact cursor if built successfully, or null if it can't be built yet.
+ */
+ public Cursor build() {
+ if (mFrequentContactsCursor != null && mAllContactsCursor != null) {
+ Assert.isTrue(!mFrequentContactsCursor.isClosed());
+ Assert.isTrue(!mAllContactsCursor.isClosed());
+
+ // Frequent contacts cursor has one record per contact, plus it doesn't contain info
+ // such as phone number and type. In order for the records to be usable by Bugle, we
+ // would like to populate it with information from the all contacts cursor.
+ final MatrixCursor retCursor = new MatrixCursor(ContactUtil.PhoneQuery.PROJECTION);
+
+ // First, go through the frequents cursor and take note of all lookup keys and their
+ // corresponding rank in the frequents list.
+ final SimpleArrayMap lookupKeyToRankMap =
+ new SimpleArrayMap();
+ int oldPosition = mFrequentContactsCursor.getPosition();
+ int rank = 0;
+ mFrequentContactsCursor.moveToPosition(-1);
+ while (mFrequentContactsCursor.moveToNext()) {
+ final String lookupKey = mFrequentContactsCursor.getString(
+ ContactUtil.INDEX_LOOKUP_KEY_FREQUENT);
+ lookupKeyToRankMap.put(lookupKey, rank++);
+ }
+ mFrequentContactsCursor.moveToPosition(oldPosition);
+
+ // Second, go through the all contacts cursor once and retrieve all information
+ // (multiple phone numbers etc.) and store that in an array list. Since the all
+ // contacts list only contains phone contacts, this step will ensure that we filter
+ // out any invalid/email contacts in the frequents list.
+ final ArrayList