Compare commits

...

48 Commits

Author SHA1 Message Date
Moxie Marlinspike
b0a91ce9e3 Bump version to 2.32.2
// FREEBIE
2015-07-22 14:24:12 -07:00
Jake McGinty
6c5daf5ed6 👀 the 💥😐
fixes #3753
closes #3758
// FREEBIE
2015-07-22 12:39:48 -07:00
Moxie Marlinspike
3bac3c6263 Don't leak activity context to shortcut badger.
// FREEBIE
2015-07-22 12:24:41 -07:00
Moxie Marlinspike
74ce839bc1 Bump version to 2.23.1
// FREEBIE
2015-07-21 16:04:29 -07:00
Moxie Marlinspike
d2a728fc08 Display notification after upgrade migration w/ password.
// FREEBIE
2015-07-21 16:03:56 -07:00
Moxie Marlinspike
3e15a5e2db Updated translations.
// FREEBIE
2015-07-21 14:46:22 -07:00
Jake McGinty
4840cdd293 fix layout ellipsis errors
fixes #3718
closes #3743
// FREEBIE
2015-07-21 14:38:23 -07:00
Moxie Marlinspike
f04281ac4a Resolve names off Recipient objects in contact selection.
Fixes #3715
// FREEBIE
2015-07-21 13:30:29 -07:00
Jake McGinty
4f75ea0fd0 fix emoji resizing in EditTexts
fixes #3720
closes #3741
// FREEBIE
2015-07-21 13:09:21 -07:00
Jake McGinty
12b8eee86f fix enter send behaviour
fixes #3725
closes #3735
// FREEBIE
2015-07-21 12:07:21 -07:00
Moxie Marlinspike
90d5e9dccd Fix for double notification when locked.
Fixes #3702
// FREEBIE
2015-07-20 18:00:48 -07:00
Moxie Marlinspike
1daea51cfb Switch to "home as up" button on new contact selection activity.
Fixes #3687
// FREEBIE
2015-07-20 17:29:41 -07:00
Moxie Marlinspike
905b4f0a6b Close open prekey FD during migration.
Fixes #3696
// FREEBIE
2015-07-20 17:01:35 -07:00
Moxie Marlinspike
dcc7ba20e6 Update disable passphrase strings.
Fixes #3705
// FREEBIE
2015-07-20 16:58:08 -07:00
Moxie Marlinspike
39dec1059b Show soft keyboard on toggle when hidden.
Closes #3706
// FREEBIE
2015-07-20 16:49:58 -07:00
Moxie Marlinspike
f4104f696e Search TextSecure contacts by name or number.
Fixes #3710
// FREEBIE
2015-07-20 16:41:05 -07:00
Max Muth
f22c9af136 Enable transition for "home" in RecipientPreferencesActivity.
Fixes #3523
Closes #3701
//FREEBIE
2015-07-20 16:17:04 -07:00
Jake McGinty
13578bb8c0 fix missing EmojiTextViews
fixes #3676
Closes #3688
// FREEBIE
2015-07-20 16:13:14 -07:00
Jake McGinty
39c0fc0e5a add sane default emoji panel size
fixes #3661
Closes #3691
// FREEBIE
2015-07-20 16:12:29 -07:00
agrajaghh
cfc9514f89 make "Enter name or number" translateable
Fixes #3703
Closes #3708

// FREEBIE
2015-07-20 16:09:10 -07:00
Jake McGinty
580a3182ab avoid excessive attribute resolution
Closes #3729
// FREEBIE
2015-07-20 16:08:11 -07:00
Jake McGinty
83919c087d update controls properly on orientation change
fixes #3697
closes #3732
// FREEBIE
2015-07-20 16:05:38 -07:00
Moxie Marlinspike
e8712b3a29 Bump version to 2.23.0
// FREEBIE
2015-07-17 18:02:56 -07:00
Moxie Marlinspike
fda900e95d Fix for receiving message after upgrade with no MS set.
// FREEBIE
2015-07-17 18:02:17 -07:00
Moxie Marlinspike
beb3558d01 Fix missing strings.
// FREEBIE
2015-07-17 17:46:02 -07:00
Moxie Marlinspike
97dbe648f9 Updated language translations.
// FREEBIE
2015-07-17 10:28:12 -07:00
Jake McGinty
7ff484c0c7 fix incoming progress indicator
Closes #3685
// FREEBIE
2015-07-17 10:23:51 -07:00
Moxie Marlinspike
f7e34a707d Don't blow away entire recipient cache on clear event.
Switch to marking recipients as "dirty" instead.

// FREEBIE
2015-07-17 10:16:14 -07:00
Moxie Marlinspike
73bc7220db Force explicit raw contact aggregation when possible.
1) Don't add registered numbers that aren't already contacts.

2) When adding raw contacts, force aggregation to an existing
   raw contact.

// FREEBIE
2015-07-16 22:40:04 -07:00
Moxie Marlinspike
f2a323ef7f Disable pull to refresh for GB devices.
Doesn't work well on GB. Google wrote it so that's no surprise.

// FREEBIE
2015-07-16 22:36:40 -07:00
Moxie Marlinspike
15345f874f Fix identity key migration code.
// FREEBIE
2015-07-16 12:56:23 -07:00
Jake McGinty
534ac22fd2 fix hint not ellipsizing
Closes #3672
// FREEBIE
2015-07-16 11:58:58 -07:00
Moxie Marlinspike
b0f7df93a4 Update migration versions.
// FREEBIE
2015-07-16 11:17:04 -07:00
Moxie Marlinspike
1b0cba3919 Updated language translations.
// FREEBIE
2015-07-16 11:15:56 -07:00
zipperle
ff4929fcce URL decode numbers in quick response.
Fixes #3518
Closes #3522
2015-07-16 11:15:56 -07:00
Jake McGinty
1a7ab6346f re-enable direct capture
Closes #3664
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
47b21707be Use InputType class mask constants.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
8b986ae094 Consistent 'this'ing.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
32cb489d1d Make directory refresh async task more careful.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
0e7fcc6893 Extract string resource.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
89f2429283 Remove unused menus.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
1fc3a82d9e Add account permission.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
fe552ba53f Add contacts to contact provider on upgrade.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
410ec57f80 Don't create a canonical id for every character typed.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
2ef0054840 Update look of contact selection activities.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
704f2b91e2 Clean up contact queries.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
d1940fe0f9 Support for populating contacts DB with TS account type.
// FREEBIE
2015-07-16 11:15:56 -07:00
Moxie Marlinspike
8d9ae731ef Only use MasterSecret for local message encryption.
Not for the axolotl store.

// FREEBIE
2015-07-16 11:15:56 -07:00
157 changed files with 2734 additions and 2168 deletions

View File

@@ -2,8 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.thoughtcrime.securesms"
android:versionCode="135"
android:versionName="2.22.2">
android:versionCode="138"
android:versionName="2.23.2">
<uses-sdk tools:overrideLibrary="com.amulyakhare.textdrawable,com.astuetz.pagerslidingtabstrip,pl.tajchert.waitingdots"/>
@@ -11,7 +11,7 @@
android:label="Access to TextSecure Secrets"
android:protectionLevel="signature" />
<!--<uses-feature android:name="android.hardware.camera" android:required="false" />-->
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-permission android:name="org.thoughtcrime.securesms.ACCESS_SECRETS"/>
<uses-permission android:name="android.permission.READ_PROFILE"/>
<uses-permission android:name="android.permission.WRITE_PROFILE"/>
@@ -34,47 +34,47 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!--<uses-permission android:name="android.permission.CAMERA" />-->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!--&lt;!&ndash; For sending location tiles in the future &ndash;&gt;-->
<!--<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>-->
<!--<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>-->
<!-- For sending location tiles in the future -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--&lt;!&ndash; So we can add a TextSecure 'Account' &ndash;&gt;-->
<!--<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />-->
<!--<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />-->
<!--<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />-->
<!--<uses-permission android:name="android.permission.USE_CREDENTIALS"/>-->
<!-- So we can add a TextSecure 'Account' -->
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<!--&lt;!&ndash; For conversation 'shortcuts' on the desktop &ndash;&gt;-->
<!--<uses-permission android:name="android.permission.INSTALL_SHORTCUT"/>-->
<!-- For conversation 'shortcuts' on the desktop -->
<uses-permission android:name="android.permission.INSTALL_SHORTCUT"/>
<!--&lt;!&ndash; For sending/receiving events &ndash;&gt;-->
<!--<uses-permission android:name="android.permission.WRITE_CALENDAR"/>-->
<!--<uses-permission android:name="android.permission.READ_CALENDAR"/>-->
<!-- For sending/receiving events -->
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
<uses-permission android:name="android.permission.READ_CALENDAR"/>
<!--&lt;!&ndash; For fixing MMS &ndash;&gt;-->
<!--<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>-->
<!--<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>-->
<!-- For fixing MMS -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--&lt;!&ndash; Set image as wallpaper &ndash;&gt;-->
<!--<uses-permission android:name="android.permission.SET_WALLPAPER"/>-->
<!-- -->
<!--&lt;!&ndash; Permissions from RedPhone &ndash;&gt;-->
<!--<uses-permission android:name="android.permission.RECORD_AUDIO" />-->
<!--<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />-->
<!--<uses-permission android:name="android.permission.BLUETOOTH" />-->
<!--<uses-permission android:name="android.permission.BROADCAST_STICKY" />-->
<!--<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />-->
<!--<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />-->
<!--<uses-permission android:name="android.permission.CALL_PHONE" />-->
<!--<uses-permission android:name="android.permission.CALL_PRIVILEGED" />-->
<!--<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />-->
<!--<uses-permission android:name="android.permission.RAISED_THREAD_PRIORITY" />-->
<!--<uses-permission android:name="android.permission.READ_CALL_STATE"/>-->
<!--<uses-permission android:name="android.permission.READ_LOGS"/>-->
<!--<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>-->
<!-- Set image as wallpaper -->
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<!-- Permissions from RedPhone -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.RAISED_THREAD_PRIORITY" />
<uses-permission android:name="android.permission.READ_CALL_STATE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<permission android:name="org.thoughtcrime.securesms.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
@@ -148,6 +148,8 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity android:name=".ConversationActivity"
@@ -199,8 +201,7 @@
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
<activity android:name=".NewConversationActivity"
android:label="@string/AndroidManifest__select_contacts"
android:windowSoftInputMode="stateVisible"
android:theme="@style/TextSecure.LightNoActionBar"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
<activity android:name=".PushContactSelectionActivity"
@@ -278,6 +279,11 @@
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.contact" />
</intent-filter>
</activity>
<activity android:name=".RecipientPreferenceActivity"
@@ -308,6 +314,20 @@
</intent-filter>
</service>
<service android:name=".service.AccountAuthenticatorService" android:exported="true">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator" />
</service>
<service android:name=".service.ContactsSyncAdapterService" android:exported="true">
<intent-filter>
<action android:name="android.content.SyncAdapter"/>
</intent-filter>
<meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" />
<meta-data android:name="android.provider.CONTACTS_STRUCTURE" android:resource="@xml/contactsformat" />
</service>
<receiver android:name=".gcm.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 429 B

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 340 B

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 440 B

After

Width:  |  Height:  |  Size: 333 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 B

View File

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_gravity="center"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/TextSecure.LightActionBar">
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView android:id="@+id/action_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:clickable="true"
android:background="@drawable/circle_touch_highlight_background"
android:src="@drawable/ic_search_white_24dp" />
<EditText android:id="@+id/search_view"
android:layout_height="wrap_content"
android:layout_width="0px"
android:layout_weight="1"
android:layout_marginLeft="5dp"
android:hint="@string/contact_selection_activity__enter_name_or_number"
android:inputType="textPersonName"
style="@style/TextSecure.TitleTextStyle"
android:background="@android:color/transparent"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"/>
<org.thoughtcrime.securesms.components.AnimatingToggle
android:id="@+id/button_toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center">
<ImageView android:id="@+id/search_dialpad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:clickable="true"
android:background="@drawable/circle_touch_highlight_background"
android:src="@drawable/ic_dialpad_white_24dp" />
<ImageView android:id="@+id/search_keyboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:clickable="true"
android:visibility="gone"
android:background="@drawable/circle_touch_highlight_background"
android:src="@drawable/ic_keyboard_white_24dp" />
<ImageView android:id="@+id/search_clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:clickable="true"
android:visibility="gone"
android:background="@drawable/circle_touch_highlight_background"
android:src="@drawable/ic_clear_white_24dp" />
</org.thoughtcrime.securesms.components.AnimatingToggle>
</LinearLayout>
</android.support.v7.widget.Toolbar>
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/contact_selection_list_fragment"
android:name="org.thoughtcrime.securesms.ContactSelectionListFragment">
</fragment>
</LinearLayout>

View File

@@ -0,0 +1,26 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<se.emilsjolander.stickylistheaders.StickyListHeadersListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|center_vertical"
android:layout_marginTop="15dp"
android:text="@string/contact_selection_group_activity__finding_contacts"
android:textSize="20sp" />
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>

View File

@@ -14,12 +14,7 @@
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:textSize="15sp"
android:textColor="?conversation_selection_header_text"
android:textColor="?contact_selection_header_text"
android:textStyle="bold" />
<View android:layout_width="match_parent"
android:layout_height="3dp"
android:layout_alignParentBottom="true"
android:layout_marginTop="2dp"
android:background="?conversation_selection_header_text" />
</RelativeLayout>

View File

@@ -48,7 +48,8 @@
</LinearLayout>
<TextView android:id="@+id/name"
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/number_container"

View File

@@ -109,7 +109,6 @@
android:src="?quick_camera_icon"
android:background="@drawable/touch_highlight_background"
android:contentDescription="@string/conversation_activity__quick_attachment_drawer_toggle_description"
android:visibility="gone"
android:padding="10dp" />
</LinearLayout>

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_gravity="center"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/contact_selection_list_fragment"
android:name="org.thoughtcrime.securesms.PushContactSelectionListFragment">
</fragment>
</LinearLayout>

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_gravity="center"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/contact_selection_list_fragment"
android:name="org.thoughtcrime.securesms.PushContactSelectionListFragment">
</fragment>
</LinearLayout>

View File

@@ -1,27 +0,0 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText android:id="@+id/filter"
android:inputType="textPersonName"
android:layout_width="match_parent"
android:layout_height="45sp"
android:hint="@string/recipients_panel__to"
android:textColor="?conversation_editor_text_color" />
<se.emilsjolander.stickylistheaders.StickyListHeadersListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|center_vertical"
android:layout_marginTop="15dp"
android:text="@string/contact_selection_group_activity__finding_contacts"
android:textSize="20sp" />
</LinearLayout>

View File

@@ -5,6 +5,6 @@
android:id="@+id/quick_camera"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
android:visibility="invisible" />
</merge>

View File

@@ -30,7 +30,8 @@
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView android:id="@+id/name"
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
android:id="@+id/name"
style="?android:attr/dropDownItemStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -32,7 +32,8 @@
android:orientation="vertical"
android:paddingLeft="10dp">
<TextView android:id="@+id/name"
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"

View File

@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:title="@string/push_directory__menu_refresh"
android:id="@+id/menu_refresh_directory"
android:icon="?menu_refresh_directory"
app:showAsAction="ifRoom"
/>
</menu>

View File

@@ -12,9 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">احذف جميع الرسائل القديمة الآن؟</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">هل انت متأكد من حذف جميع الرسائل بالمحادثات وابقاء أحدث %s رسالة فقط؟</string>
<string name="ApplicationPreferencesActivity_delete">حذف</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">إلغاء تشفير مساحة التخزين؟</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
تحذير: سيتم إلغاء تشفير مساحة تخزين الرسائل والمفاتيح. سوف تستمر محادثاتك المشفرة في العمل، ولكن سيكون أي شخص قادر على النفاذ إليهم إذا تمكن من الوصول إلى الهاتف.</string>
<string name="ApplicationPreferencesActivity_disable">تعطيل</string>
<string name="ApplicationPreferencesActivity_unregistering">جارٍ إلغاء التسجيل</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">جارٍ إلغاء التسجيل من رسائل تيكست سيكيور...</string>
@@ -51,6 +48,7 @@
<string name="ConfirmIdentityDialog_the_signature_on_this_key_exchange_is_different">لقد تغير المفتاح التعريفي الخاص بـ%1$s. وهذا يعني أن شخص ما يحاول اعتراض المحادثة أو %2$s قام بإعادة تثبيت تيكست سيكيور وأصبح لديه مفتاح تعريفي جديد.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">ربما تود التحقق من جهة الاتصال.</string>
<string name="ConfirmIdentityDialog_accept">موافقة</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">حجم الرسالة: %d كيلوبايت</string>
<string name="ConversationItem_expires_s">تاريخ الانتهاء: %s</string>
@@ -377,7 +375,6 @@
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d رسالة في %2$d محادثات</string>
<string name="MessageNotifier_most_recent_from_s">الأحدث من: %1$s</string>
<string name="MessageNotifier_encrypted_message">رسالة مشفرة...</string>
<string name="MessageNotifier_media_message_with_text">رسالة وسائط متعددة: %s</string>
<string name="MessageNotifier_no_subject">(بلا عنوان)</string>
<string name="MessageNotifier_message_delivery_failed">فشل توصيل الرسالة.</string>
@@ -393,14 +390,11 @@
<string name="change_passphrase_activity__old_passphrase">العبارة السرية القديمة:</string>
<string name="change_passphrase_activity__new_passphrase">العبارة السرية الجديدة:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">تكرار العبارة السرية الجديدة:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">لا توجد جهات اتصال.</string>
<string name="contact_selection_group_activity__finding_contacts">تحميل جهات الاتصال...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">أنت غير مسجل في خدمة دفع الوصول إلى الرسائل...</string>
<string name="SingleContactSelectionActivity_updating_directory">تحديث القائمة</string>
<string name="SingleContactSelectionActivity_updating_push_directory">تحديث قائمة دفع وصول الرسائل</string>
<string name="SingleContactSelectionActivity_contact_photo">صورة جهة الاتصال</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">اختيار من أجل</string>
@@ -616,7 +610,6 @@
<string name="preferences__change_my_passphrase">غير عبارتي السرية</string>
<string name="preferences__enable_passphrase">تفعيل العبارة السرية</string>
<string name="preferences__passphrase_summary">عبارة سرية %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">تفعيل تشفير تخزين الرسائل والمفاتيح</string>
<string name="preferences__screen_security">تأمين الشاشة</string>
<string name="preferences__screen_security_summary">تأمين الشاشة %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">منع لقطات الشاشة داخل التطبيق</string>

View File

@@ -12,10 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Выдаліць усе старыя паведамленні зараз?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Вы ўпэўненыя, што хочаце адразу абрэзаць усе гутаркі у %s самых апошніх паведамленняў?</string>
<string name="ApplicationPreferencesActivity_delete">Выдаліць</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Адключыць шыфраванне захаванай інфармацыі?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Увага, гэта адключыць шыфраванне захаванай інфармацыі для ўсіх паведамленняў ды ключоў. Шыфраванне вашых дадзеных пры перадачы будзе працягвацца, але любы хто атрымае фізічны доступ да вашага смартфона, будзе мець доступ і да перапіскі.
</string>
<string name="ApplicationPreferencesActivity_disable">Выключыць</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">Памылка падлучэння да сервера!</string>
<string name="ApplicationPreferencesActivity_sms_enabled">SMS уключаны</string>
@@ -45,6 +41,7 @@
<string name="ConfirmIdentityDialog_the_signature_on_this_key_exchange_is_different">Ідэнтыфікацыйны ключ для %1$s быў зменены. Гэта можа вызначаць, што нехта спрабуе перахапіць вашыя паведамленні, альбо проста %2$s пераўсталяваў па-новай TextSecure і зараз мае новы ідэнтыфікацыйны ключ.
</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Магчыма Вы жадаеце верыфікаваць гэты кантакт?</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Аб\'ём паведамлення: %d KB</string>
<string name="ConversationItem_expires_s">Заканчваецца: %s</string>
@@ -337,7 +334,6 @@
<string name="KeyCachingService_passphrase_cached">TextSecure разблакіравана</string>
<string name="KeyCachingService_lock">Замкнуць гэты пароль</string>
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">Разшыфраванае паведамленне...</string>
<string name="MessageNotifier_media_message_with_text">Мультымедыя паведамленне: %s</string>
<string name="MessageNotifier_no_subject">(Няма тэмы)</string>
<string name="MessageNotifier_message_delivery_failed">Памылка дастаўкі паведамлення.</string>
@@ -350,14 +346,11 @@
<string name="change_passphrase_activity__old_passphrase">СТАРЫ ПАРОЛЬ:</string>
<string name="change_passphrase_activity__new_passphrase">НОВЫ ПАРОЛЬ:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">ПАЎТАРЫЦЕ НОВЫ ПАРОЛЬ:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Няма кантактаў.</string>
<string name="contact_selection_group_activity__finding_contacts">Загрузка кантактаў...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Вы не зарэгістраваны у push сервісе...</string>
<string name="SingleContactSelectionActivity_updating_directory">Абнаўленне тэчкі</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Абнаўленне push тэчкі...</string>
<string name="SingleContactSelectionActivity_contact_photo">Фота кантакта</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Абраць для</string>
@@ -552,7 +545,6 @@ TextSecure не дачакаўся параверачная SMS.</string>
<string name="preferences__change_my_passphrase">Змяніць мой пароль</string>
<string name="preferences__enable_passphrase">Уключыць пароль</string>
<string name="preferences__passphrase_summary">Пароль %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Уключыць лакальнае шыфраванне паведамленняў і ключоў</string>
<string name="preferences__screen_security">Бяспека экрана</string>
<string name="preferences__screen_security_summary">Бяспека экрана %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Блакіраваць магчымасць рабіць скрыншоты ўнутры праграмы</string>

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Изтрий всички стари съобщения сега?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Сигурен ли си, че искаш скъсиш всички разговори до %s съобщения във всяка?</string>
<string name="ApplicationPreferencesActivity_delete">Изтрий</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Изключи шифроването на паметта?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Внимание, това ще спре шифроването за всички съобщения и ключове. Твоите шифровани
сесии ще продължат да функционират, но всеки, който има физически достъп до твоето устройство ще
има достъп до тях. </string>
<string name="ApplicationPreferencesActivity_disable">Изключи</string>
<string name="ApplicationPreferencesActivity_unregistering">Отписване</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Отписване от TextSecure съобщения...</string>
@@ -55,6 +50,8 @@
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Може би е добре да се провери ⏎
този контакт. ⏎</string>
<string name="ConfirmIdentityDialog_accept">Приемам</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Съобщение %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Размер на съобщението: %d KB</string>
<string name="ConversationItem_expires_s">Изтича: %s</string>
@@ -394,7 +391,7 @@ SMS съобщенията от системната базата данни в
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d съобщения в %2$d чата</string>
<string name="MessageNotifier_most_recent_from_s">Най-скорошно от: %1$s</string>
<string name="MessageNotifier_encrypted_message">Шифровано съобщение...</string>
<string name="MessageNotifier_locked_message">Заключено съобщение...</string>
<string name="MessageNotifier_media_message_with_text">Медийно съобщение: %s</string>
<string name="MessageNotifier_no_subject">(Няма зададена тема)</string>
<string name="MessageNotifier_message_delivery_failed">Изпращането на съобщението неуспешно.</string>
@@ -411,14 +408,11 @@ SMS съобщенията от системната базата данни в
<string name="change_passphrase_activity__old_passphrase">СТАРА ПАРОЛА: </string>
<string name="change_passphrase_activity__new_passphrase">НОВА ПАРОЛА: </string>
<string name="change_passphrase_activity__repeat_new_passphrase">ПОВТОРИ НОВАТА ПАРОЛА: </string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Няма контакти.</string>
<string name="contact_selection_group_activity__finding_contacts">Зареждане на контакти...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Не си регистриран за интернет съобщения...</string>
<string name="SingleContactSelectionActivity_updating_directory">Обновяване на списъка с контакти</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Обновяване на списъка с контакти за интернет съобщения...</string>
<string name="SingleContactSelectionActivity_contact_photo">Снимка на Контактът</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Избери за</string>
@@ -652,7 +646,7 @@ TextSecure чака твърде дълго за SMS потвърждение.
<string name="preferences__change_my_passphrase">Смени паролата ми</string>
<string name="preferences__enable_passphrase">Включи парола</string>
<string name="preferences__passphrase_summary">Парола %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Включи локално криптиране на съобщения и ключове</string>
<string name="preferences__enable_lock_screen_for_messages">Включи заключен екран за съобщения</string>
<string name="preferences__screen_security">Сигурност на екрана</string>
<string name="preferences__screen_security_summary">Защита на екрана %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Забрани автоматично копиране на екрана в списка с често използвани програми и в самата програма.</string>

View File

@@ -19,6 +19,7 @@
<string name="AttachmentTypeSelectorAdapter_audio">སྒྲ་ཟློས། </string>
<!--BlockedContactsActivity-->
<!--ConfirmIdentityDialog-->
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">འཕྲིན་ཐུང་ཆེ་ཆུང་།%d KB</string>
<string name="ConversationItem_expires_s">དུས་ཚོད་རྫོགས།%s</string>
@@ -123,7 +124,6 @@
<string name="ApplicationMigrationService_import_in_progress">ནང་འདྲེན་བྱེད་བཞིན་ཡོད། </string>
<!--KeyCachingService-->
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">གསང་སྡོམ་འཕྲིན་ཐུང་། </string>
<string name="MessageNotifier_message_delivery_failed">འཕྲིན་ཐུང་བཏང་བ་དེ་འགྲོ་མི་འདུག </string>
<string name="MessageNotifier_failed_to_deliver_message">འཕྲིན་ཐུང་གཏོང་ཐུབ་མ་སོང་། </string>
<string name="MessageNotifier_error_delivering_message">འཕྲིན་ཐུང་གཏོང་བར་སྐྱོན་ཤོར་འདུག </string>
@@ -132,8 +132,8 @@
<string name="change_passphrase_activity__old_passphrase">གསང་ཚིག་རྙིང་པ།</string>
<string name="change_passphrase_activity__new_passphrase">གསང་ཚིག་གསར་པ།</string>
<string name="change_passphrase_activity__repeat_new_passphrase">གསང་ཚིག་གསར་པ་བསྐྱར་དུ་ཕྲིས། </string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">འབྲེལ་མིང་མི་འདུག</string>
<!--single_contact_selection_activity-->
<!--ContactSelectionListFragment-->

View File

@@ -10,8 +10,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Esborrar ara els missatges antics?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Estàs segur que vols retallar immediatament tots els fils de conversa deixant només els %s missatges més recents?</string>
<string name="ApplicationPreferencesActivity_delete">Esborra</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Desactivar l\'encriptació del magatzem de dades?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">Alerta, això desactivarà l\'emmagatzematge encriptat per a tots els missatges i claus. Les teves sessions continuaran funcionant, però qualsevol persona amb accés físic al teu dispositiu podrà accedir-hi.</string>
<string name="ApplicationPreferencesActivity_disable">Desactiva</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">Error connectant amb el servidor!</string>
<string name="ApplicationPreferencesActivity_sms_enabled">SMS Habilitats</string>
@@ -28,6 +26,7 @@
<!--BlockedContactsActivity-->
<!--ConfirmIdentityDialog-->
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Pot ser que vulguis verificar aquest contacte.</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Mida del missatge: %d KB</string>
<string name="ConversationItem_expires_s">Expira: %s</string>
@@ -199,7 +198,6 @@
<string name="KeyCachingService_passphrase_cached">TextSecure està desbloquejat</string>
<string name="KeyCachingService_lock">Bloqueja amb una frase contrasenya</string>
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">Missatge encriptat...</string>
<string name="MessageNotifier_message_delivery_failed">Entrega del missatge fallida.</string>
<string name="MessageNotifier_failed_to_deliver_message">No s\'ha pogut entregar el missatge.</string>
<string name="MessageNotifier_error_delivering_message">Error entregant el missatge.</string>
@@ -209,11 +207,10 @@
<string name="change_passphrase_activity__old_passphrase">FRASE CONTRASENYA ANTIGA:</string>
<string name="change_passphrase_activity__new_passphrase">NOVA FRASE CONTRASENYA:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">REPETEIX LA NOVA FRASE CONTRASENYA:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Sense contactes.</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_updating_directory">Actualitzant directori</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Selecciona per</string>
<!--blocked_contacts_fragment-->

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Smazat všechny staré zprávy?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Opravdu chcete všechny konverzace zkrátit na posledních %s zpráv?</string>
<string name="ApplicationPreferencesActivity_delete">Smazat</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Deaktivovat šifrování lokálně uložených zpráv?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Varování: Tímto znemožníte šifrování všech uložených zpráv a klíčů. Vaše komunikace
bude i nadále šifrována, ale bude si ji moci přečíst kdokoliv s fyzickým přístupem
k vašemu zařízení.</string>
<string name="ApplicationPreferencesActivity_disable">Deaktivovat</string>
<string name="ApplicationPreferencesActivity_unregistering">Rušení registrace</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Odregistrace TextSecure zpráv</string>
@@ -58,6 +53,8 @@ identifikační klíč.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Možná budete chtít ověřit tento
kontakt</string>
<string name="ConfirmIdentityDialog_accept">Akceptovat</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Zpráva %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Délka zprávy: %d KB</string>
<string name="ConversationItem_expires_s">Vyprší: %s</string>
@@ -386,7 +383,7 @@ Obdržena zpráva s neznámým identifikačním klíčem. Klepněte pro její zp
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d zpráv v %2$d konverzacích</string>
<string name="MessageNotifier_most_recent_from_s">Poslední od: %1$s</string>
<string name="MessageNotifier_encrypted_message">Šifrovaná zpráva...</string>
<string name="MessageNotifier_locked_message">Zamčená zpráva</string>
<string name="MessageNotifier_media_message_with_text">Multimediální zpráva: %s</string>
<string name="MessageNotifier_no_subject">(Předmět neuveden)</string>
<string name="MessageNotifier_message_delivery_failed">Selhalo doručení zprávy.</string>
@@ -403,14 +400,11 @@ Obdržena zpráva s neznámým identifikačním klíčem. Klepněte pro její zp
<string name="change_passphrase_activity__old_passphrase">STARÉ HESLO</string>
<string name="change_passphrase_activity__new_passphrase">NOVÉ HESLO</string>
<string name="change_passphrase_activity__repeat_new_passphrase">ZNOVU NOVÉ HESLO</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Žádný kontakt</string>
<string name="contact_selection_group_activity__finding_contacts">Načítám kontakty...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Nejste zaregistrován na službě TextSecure</string>
<string name="SingleContactSelectionActivity_updating_directory">Aktualizuji adresář</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Aktualizuji TextSecure adresář</string>
<string name="SingleContactSelectionActivity_contact_photo">Fotografie kotaktu</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Vybrat</string>
@@ -643,7 +637,7 @@ TextSecure nyní automaticky ověří vaše telefonní číslo pomocí potvrzova
<string name="preferences__change_my_passphrase">Změnit své heslo</string>
<string name="preferences__enable_passphrase">Povolit přístupové heslo</string>
<string name="preferences__passphrase_summary">Heslo %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Povolit lokální šifrování zpráv a klíčů</string>
<string name="preferences__enable_lock_screen_for_messages">Povolit uzamčení obrazovky zpráv</string>
<string name="preferences__screen_security">Zabezpečení obrazovky</string>
<string name="preferences__screen_security_summary">Zabezpečení obrazovky %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Zablokovat náhled v seznamu aplikací</string>
@@ -720,7 +714,7 @@ Svobodná šifrovaná komunikace s uživateli TextSecure a Signal</string>
<string name="preferences__submit_debug_log">Odeslat ladící log</string>
<string name="preferences__support_wifi_calling">\'Wifi volání\' kompatibilní mód</string>
<string name="preferences__enable_if_your_device_supports_sms_mms_delivery_over_wifi">Povolit pokud vaše zařízení používá doručování SMS/MMS přes Wifi (povoleno pouze když je na zařízení povoleno \'Wifi volání\')</string>
<string name="preferences_app_protection__blocked_contacts">Blokované kontakt</string>
<string name="preferences_app_protection__blocked_contacts">Blokované kontakty</string>
<!--****************************************-->
<!--menus-->
<!--****************************************-->

View File

@@ -12,12 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Slet alle gamle beskeder?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Er du sikker på at du vil trimme ALLE samtaletråde til de sidste %s beskeder?</string>
<string name="ApplicationPreferencesActivity_delete">Slet</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Deaktiverer kryptering af lager?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Advarsel! Dette vil deaktiverer kryptering af lager for alle beskeder og nøgler.
Dine krypterede sessioner vil fortsætte med at fungere,
men alle med fysisk adgang til din enhed kan få adgang til dem.
</string>
<string name="ApplicationPreferencesActivity_disable">Deaktivere</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">Kunne ikke oprette forbindelse til serveren!</string>
<string name="ApplicationPreferencesActivity_sms_enabled">SMS slået til</string>
@@ -41,6 +35,7 @@ men alle med fysisk adgang til din enhed kan få adgang til dem.
<!--ConfirmIdentityDialog-->
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Du bør verificere
denne kontakt.</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Besked størrelse: %d KB</string>
<string name="ConversationItem_expires_s">Udløber: %s</string>
@@ -293,7 +288,6 @@ Modtog en besked med en ukendt identitetsnøgle. Klik for at se og behandle den.
<string name="KeyCachingService_passphrase_cached">TextSecure er låst op</string>
<string name="KeyCachingService_lock">Lås med et kodeord</string>
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">Krypteret besked...</string>
<string name="MessageNotifier_no_subject">(Intet emne)</string>
<string name="MessageNotifier_message_delivery_failed">Levering af besked mislykkedes.</string>
<string name="MessageNotifier_failed_to_deliver_message">Kunne ikke sende besked.</string>
@@ -305,14 +299,11 @@ Modtog en besked med en ukendt identitetsnøgle. Klik for at se og behandle den.
<string name="change_passphrase_activity__old_passphrase">GAMMELT KODEORD:</string>
<string name="change_passphrase_activity__new_passphrase">NYT KODEORD:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">GENTAG NYT KODEORD:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Ingen kontakter.</string>
<string name="contact_selection_group_activity__finding_contacts">Indlæser kontaktpersoner...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Du er ikke registreret som bruger af \"push\" tjenesten...</string>
<string name="SingleContactSelectionActivity_updating_directory">Opdaterer bibliotek</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Opdaterer \"push\" bibliotek</string>
<string name="SingleContactSelectionActivity_contact_photo">Kontaktbillede</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Vælg</string>

View File

@@ -10,12 +10,11 @@
<string name="ApplicationPreferenceActivity_you_havent_set_a_passphrase_yet">Sie haben noch kein Passwort festgelegt!</string>
<string name="ApplicationPreferencesActivity_messages_per_conversation">%s Nachrichten pro Unterhaltung</string>
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Alle alten Nachrichten löschen?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Sind Sie sicher, dass Sie alle Unterhaltungen bis auf die letzten %s Nachrichten löschen wollen?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Wollen Sie alle Unterhaltungen bis auf die letzten %s Nachrichten wirklich löschen?</string>
<string name="ApplicationPreferencesActivity_delete">Löschen</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Speicherverschlüsselung deaktivieren?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Warnung: Dies wird die verschlüsselte Speicherung für alle Nachrichten und Schlüssel deaktivieren.
Ihre verschlüsselten Unterhaltungen werden weiterhin funktionieren, aber jemand mit physischem Zugriff auf Ihr Gerät kann dann auf sie zugreifen.</string>
<string name="ApplicationPreferencesActivity_disable_passphrase">Passwort deaktivieren?</string>
<string name="ApplicationPreferencesActivity_disable_lock_screen">
Nachrichtenvorschau in Benachrichtigungen anzeigen, obwohl Textsecure gesperrt ist</string>
<string name="ApplicationPreferencesActivity_disable">Deaktivieren</string>
<string name="ApplicationPreferencesActivity_unregistering">Registrierung löschen</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">TextSecure-Registrierung wird gelöscht …</string>
@@ -42,7 +41,7 @@ Sie werden Ihre Rufnummer erneut registrieren müssen, um TextSecure-Nachrichten
<!--AttchmentManager-->
<string name="AttachmentManager_cant_open_media_selection">Keine App zur Dateiauswahl auffindbar.</string>
<!--AttachmentTypeSelectorAdapter-->
<string name="AttachmentTypeSelectorAdapter_take_photo">Fotografieren</string>
<string name="AttachmentTypeSelectorAdapter_take_photo">Kamera</string>
<string name="AttachmentTypeSelectorAdapter_picture">Bild</string>
<string name="AttachmentTypeSelectorAdapter_video">Video</string>
<string name="AttachmentTypeSelectorAdapter_audio">Audio</string>
@@ -54,6 +53,8 @@ Sie werden Ihre Rufnummer erneut registrieren müssen, um TextSecure-Nachrichten
Dies könnte bedeuten, dass jemand versucht, Ihr Gespräch abzuhören. Vielleicht hat %2$s TextSecure aber auch nur neu installiert und benutzt nun einen neuen Schlüssel.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Sie sollten diesen Kontakt ggf. überprüfen.</string>
<string name="ConfirmIdentityDialog_accept">OK</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Nachricht %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Nachrichtengröße: %d kB</string>
<string name="ConversationItem_expires_s">Läuft ab in: %s</string>
@@ -72,17 +73,17 @@ Dies könnte bedeuten, dass jemand versucht, Ihr Gespräch abzuhören. Vielleich
<!--ConversationActivity-->
<string name="ConversationActivity_initiate_secure_session_question">Sichere Unterhaltung starten?</string>
<string name="ConversationActivity_initiate_secure_session_with_s_question">Sichere Unterhaltung mit %s starten?</string>
<string name="ConversationActivity_abort_secure_session_confirmation">Beenden der sicheren Unterhaltung bestätigen </string>
<string name="ConversationActivity_are_you_sure_that_you_want_to_abort_this_secure_session_question">Wollen Sie die sichere Unterhaltung wirklich beenden?</string>
<string name="ConversationActivity_delete_thread_confirmation">Löschen der Unterhaltung bestätigen</string>
<string name="ConversationActivity_are_you_sure_that_you_want_to_permanently_delete_this_conversation_question">Soll diese Unterhaltung unwiderruflich gelöscht werden?</string>
<string name="ConversationActivity_abort_secure_session_confirmation">Sichere Unterhaltung beenden?</string>
<string name="ConversationActivity_are_you_sure_that_you_want_to_abort_this_secure_session_question">Diese sichere Unterhaltung beenden.</string>
<string name="ConversationActivity_delete_thread_confirmation">Unterhaltung löschen?</string>
<string name="ConversationActivity_are_you_sure_that_you_want_to_permanently_delete_this_conversation_question">Diese Unterhaltung unwiderruflich löschen.</string>
<string name="ConversationActivity_add_attachment">Anhang hinzufügen</string>
<string name="ConversationActivity_select_contact_info">Kontaktinfo wählen</string>
<string name="ConversationActivity_compose_message">Nachricht verfassen</string>
<string name="ConversationActivity_sorry_there_was_an_error_setting_your_attachment">Leider ist ein Fehler beim Hinzufügen des Anhangs aufgetreten.</string>
<string name="ConversationActivity_sorry_the_selected_video_exceeds_message_size_restrictions">Die ausgewählte Videodatei überschreitet leider die maximal mögliche Nachrichtengröße (%1$skB).</string>
<string name="ConversationActivity_sorry_the_selected_audio_exceeds_message_size_restrictions">Die ausgewählte Audiodatei überschreitet leider die maximal mögliche Nachrichtengröße (%1$skB).</string>
<string name="ConversationActivity_recipient_is_not_a_valid_sms_or_email_address_exclamation">Mobilrufnummer oder E-Mail-Adresse des Kontakts ist ungültig!</string>
<string name="ConversationActivity_recipient_is_not_a_valid_sms_or_email_address_exclamation">Mobilrufnummer oder E-Mail-Adresse des Kontakts ungültig!</string>
<string name="ConversationActivity_message_is_empty_exclamation">Die Nachricht ist leer!</string>
<string name="ConversationActivity_group_members">Gruppenmitglieder</string>
<string name="ConversationActivity_group_conversation">Gruppenunterhaltung</string>
@@ -94,7 +95,7 @@ Dies könnte bedeuten, dass jemand versucht, Ihr Gespräch abzuhören. Vielleich
<string name="ConversationActivity_calls_not_supported">Anrufe nicht unterstützt</string>
<string name="ConversationActivity_this_device_does_not_appear_to_support_dial_actions">Dieses Gerät scheint keine Wahlvorgänge zu unterstützen.</string>
<string name="ConversationActivity_leave_group">Gruppe verlassen?</string>
<string name="ConversationActivity_are_you_sure_you_want_to_leave_this_group">Sind Sie sicher, dass Sie die Gruppe verlassen wollen?</string>
<string name="ConversationActivity_are_you_sure_you_want_to_leave_this_group">Wollen Sie diese Gruppe wirklich verlassen?</string>
<string name="ConversationActivity_transport_insecure_sms">Unsichere SMS</string>
<string name="ConversationActivity_transport_insecure_mms">Unsichere MMS</string>
<string name="ConversationActivity_transport_textsecure">TextSecure</string>
@@ -105,14 +106,14 @@ Dies könnte bedeuten, dass jemand versucht, Ihr Gespräch abzuhören. Vielleich
<string name="ConversationActivity_mms_not_supported_message">Diese Nachricht kann nicht gesendet werden, da Ihr Mobilfunkanbieter MMS nicht unterstützt.</string>
<string name="ConversationActivity_specify_recipient">Bitte einen Kontakt auswählen</string>
<string name="ConversationActivity_unblock_question">Nicht mehr blockieren?</string>
<string name="ConversationActivity_are_you_sure_you_want_to_unblock_this_contact">Sind Sie sicher, dass Sie die Blockierung dieses Kontakts aufheben möchten?</string>
<string name="ConversationActivity_unblock">Blockierung aufheben</string>
<string name="ConversationActivity_are_you_sure_you_want_to_unblock_this_contact">Diesen Kontakt nicht mehr blockieren.</string>
<string name="ConversationActivity_unblock">Nicht mehr blockieren</string>
<!--ConversationFragment-->
<string name="ConversationFragment_message_details">Nachrichtendetails</string>
<string name="ConversationFragment_transport_s_sent_received_s">Übertragung: %1$s\nGesendet/Empfangen: %2$s</string>
<string name="ConversationFragment_sender_s_transport_s_sent_s_received_s">Absender: %1$s\nÜbertragung: %2$s\nGesendet: %3$s\nEmpfangen: %4$s</string>
<string name="ConversationFragment_confirm_message_delete">Löschen der Nachricht bestätigen</string>
<string name="ConversationFragment_are_you_sure_you_want_to_permanently_delete_all_selected_messages">Sind Sie sicher, dass Sie alle ausgewählten Nachrichten unwiderruflich löschen möchten?</string>
<string name="ConversationFragment_confirm_message_delete">Nachrichten löschen?</string>
<string name="ConversationFragment_are_you_sure_you_want_to_permanently_delete_all_selected_messages">Alle ausgewählten Nachrichten unwiderruflich löschen.</string>
<string name="ConversationFragment_save_to_sd_card">Im Gerätespeicher speichern?</string>
<string name="ConversationFragment_this_media_has_been_stored_in_an_encrypted_database_warning">Das Speichern der Datei im Gerätespeicher ermöglicht allen anderen installierten Apps darauf Zugriff.\n\nMöchten Sie trotzdem fortfahren?</string>
<string name="ConversationFragment_error_while_saving_attachment_to_sd_card">Fehler beim Speichern des Anhangs im Gerätespeicher!</string>
@@ -130,7 +131,7 @@ Dies könnte bedeuten, dass jemand versucht, Ihr Gespräch abzuhören. Vielleich
<string name="ConversationListActivity_search">Suchen …</string>
<!--ConversationListFragment-->
<string name="ConversationListFragment_delete_threads_question">Unterhaltungen löschen?</string>
<string name="ConversationListFragment_are_you_sure_you_wish_to_delete_all_selected_conversation_threads">Möchten Sie wirklich ALLE ausgewählten Unterhaltungen löschen?</string>
<string name="ConversationListFragment_are_you_sure_you_wish_to_delete_all_selected_conversation_threads">ALLE ausgewählten Unterhaltungen unwiderruflich löschen.</string>
<string name="ConversationListFragment_deleting">Löschen</string>
<string name="ConversationListFragment_deleting_selected_threads">Ausgewählte Unterhaltungen werden gelöscht …</string>
<!--ConversationListItem-->
@@ -158,7 +159,7 @@ Dies könnte bedeuten, dass jemand versucht, Ihr Gespräch abzuhören. Vielleich
<string name="ShareActivity_share_with">Teilen mit</string>
<!--ExportFragment-->
<string name="ExportFragment_export">Exportieren</string>
<string name="ExportFragment_export_plaintext_to_sd_card">Klartext auf SD-Karte exportieren?</string>
<string name="ExportFragment_export_plaintext_to_sd_card">Klartextsicherung exportieren?</string>
<string name="ExportFragment_warning_this_will_export_the_plaintext_contents">Achtung, dies wird Ihre TextSecure-Nachrichten im Klartext auf die SD-Karte exportieren.</string>
<string name="ExportFragment_cancel">Abbruch</string>
<string name="ExportFragment_exporting">Exportieren</string>
@@ -188,12 +189,11 @@ Dies könnte bedeuten, dass jemand versucht, Ihr Gespräch abzuhören. Vielleich
<!--GroupMembersDialog-->
<string name="GroupMembersDialog_me">Ich</string>
<!--ImportExportActivity-->
<string name="ImportExportActivity_import">Import</string>
<string name="ImportExportActivity_export">Export</string>
<string name="ImportExportActivity_import">Importieren</string>
<string name="ImportExportActivity_export">Exportieren</string>
<!--ImportFragment-->
<string name="ImportFragment_import_system_sms_database">SMS-Systemdatenbank importieren?</string>
<string name="ImportFragment_this_will_import_messages_from_the_system">Dies wird die SMS aus der Systemdatenbank in TextSecure importieren.
Wenn Sie dies schon einmal gemacht haben, kommt es zu doppelten Nachrichten.</string>
<string name="ImportFragment_import_system_sms_database">System-SMS importieren?</string>
<string name="ImportFragment_this_will_import_messages_from_the_system">Dies wird die Nachrichten aus der Standard-SMS-App in TextSecure importieren. Falls Sie dies schon einmal gemacht haben, wird es zu doppelten Nachrichten kommen.</string>
<string name="ImportFragment_import">Importieren</string>
<string name="ImportFragment_cancel">Abbruch</string>
<string name="ImportFragment_restore_encrypted_backup">Verschlüsselte Sicherung wiederherstellen?</string>
@@ -268,8 +268,8 @@ Bitten Sie den Absender, TextSecure zu aktualisieren und die Nachricht erneut zu
<string name="RecipientPreferenceActivity_block_this_contact_question">Diesen Kontakt blockieren?</string>
<string name="RecipientPreferenceActivity_you_will_no_longer_see_messages_from_this_user">Nachrichten dieses Kontakts werden nicht mehr angezeigt werden.</string>
<string name="RecipientPreferenceActivity_block">Blockieren</string>
<string name="RecipientPreferenceActivity_unblock_this_contact_question">Diesen Kontakt nicht mehr blockieren?</string>
<string name="RecipientPreferenceActivity_are_you_sure_you_want_to_unblock_this_contact">Sind Sie sicher, dass Sie die Blockierung dieses Kontakts aufheben möchten?</string>
<string name="RecipientPreferenceActivity_unblock_this_contact_question">NIcht mehr blockieren?</string>
<string name="RecipientPreferenceActivity_are_you_sure_you_want_to_unblock_this_contact">Diesen Kontakt nicht mehr blockieren.</string>
<string name="RecipientPreferenceActivity_unblock">Nicht mehr blockieren</string>
<string name="RecipientPreferenceActivity_enabled">Aktiviert</string>
<string name="RecipientPreferenceActivity_disabled">Deaktiviert</string>
@@ -329,8 +329,8 @@ Nachricht mit unbekanntem Schlüssel empfangen. Zum Anzeigen antippen.</string>
<string name="ThreadRecord_draft">Entwurf:</string>
<!--VerifyIdentityActivity-->
<string name="VerifyIdentityActivity_you_do_not_have_an_identity_key">Sie haben keinen eigenen Schlüssel.</string>
<string name="VerifyIdentityActivity_recipient_has_no_identity_key">Der Kontakt hat keinen Schlüssel.</string>
<string name="VerifyIdentityActivity_recipient_has_no_identity_key_exclamation">Der Kontakt hat keinen Schlüssel!</string>
<string name="VerifyIdentityActivity_recipient_has_no_identity_key">Kontakt hat keinen Schlüssel.</string>
<string name="VerifyIdentityActivity_recipient_has_no_identity_key_exclamation">Kontakt hat keinen Schlüssel!</string>
<string name="VerifyIdentityActivity_scan_their_key_to_compare">QR-Code einscannen</string>
<string name="VerifyIdentityActivity_get_my_key_scanned">Eigenen QR-Code anzeigen</string>
<string name="VerifyIdentityActivity_warning_the_scanned_key_does_not_match_please_check_the_fingerprint_text_carefully">ACHTUNG: Der eingescannte Schlüssel stimmt NICHT überein! Bitte überprüfen Sie den Text des Schlüssels sorgfältig.</string>
@@ -349,7 +349,7 @@ Nachricht mit unbekanntem Schlüssel empfangen. Zum Anzeigen antippen.</string>
<string name="ViewIdentityActivity_my_identity_fingerprint">Mein Schlüssel</string>
<!--KeyExchangeInitiator-->
<string name="KeyExchangeInitiator_initiate_despite_existing_request_question">Trotz bestehender Anfrage starten?</string>
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Sie haben bereits eine Unterhaltungsanfrage an den Kontakt gesendet. Sind Sie sicher, dass Sie eine weitere senden wollen? Dies wird die erste Anfrage ungültig machen.</string>
<string name="KeyExchangeInitiator_youve_already_sent_a_session_initiation_request_to_this_recipient_are_you_sure">Sie haben bereits eine Unterhaltungsanfrage an den Kontakt gesendet. Wollen Sie wirklich eine weitere senden? Dies wird die erste Anfrage ungültig machen.</string>
<string name="KeyExchangeInitiator_send">Senden</string>
<!--MessageDisplayHelper-->
<string name="MessageDisplayHelper_bad_encrypted_message">Fehlerhaft verschlüsselte Nachricht …</string>
@@ -383,7 +383,7 @@ Nachricht mit unbekanntem Schlüssel empfangen. Zum Anzeigen antippen.</string>
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d Nachrichten in %2$d Unterhaltungen</string>
<string name="MessageNotifier_most_recent_from_s">Neueste von: %1$s</string>
<string name="MessageNotifier_encrypted_message">Verschlüsselte Nachricht …</string>
<string name="MessageNotifier_locked_message">Gesperrte Nachricht …</string>
<string name="MessageNotifier_media_message_with_text">Mediennachricht: %s</string>
<string name="MessageNotifier_no_subject">(Kein Betreff)</string>
<string name="MessageNotifier_message_delivery_failed">Nachrichtenübermittlung fehlgeschlagen.</string>
@@ -394,20 +394,18 @@ Nachricht mit unbekanntem Schlüssel empfangen. Zum Anzeigen antippen.</string>
<string name="MessageNotifier_media_message">Mediennachricht</string>
<string name="MessageNotifier_reply">Antworten</string>
<!--QuickResponseService-->
<string name="QuickResponseService_quick_response_unavailable_when_TextSecure_is_locked">Schnellantwort nicht verfügbar während TextSecure gesperrt ist!</string>
<string name="QuickResponseService_quick_response_unavailable_when_TextSecure_is_locked">Schnellantwort nicht verfügbar, solange TextSecure gesperrt ist!</string>
<string name="QuickResponseService_problem_sending_message">Problem beim Senden der Nachricht!</string>
<!--change_passphrase_activity-->
<string name="change_passphrase_activity__old_passphrase">ALTES PASSWORT:</string>
<string name="change_passphrase_activity__new_passphrase">NEUES PASSWORT:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">NEUES PASSWORT WIEDERHOLEN:</string>
<!--contact_selection_activity-->
<string name="contact_selection_activity__enter_name_or_number">Name oder Nummer eingeben</string>
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Keine Kontakte.</string>
<string name="contact_selection_group_activity__finding_contacts">Kontakte werden geladen …</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Sie sind nicht für den TextSecure-Dienst registriert …</string>
<string name="SingleContactSelectionActivity_updating_directory">Aktualisieren</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Kontaktliste wird aktualisiert …</string>
<string name="SingleContactSelectionActivity_contact_photo">Kontaktbild</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Auswählen für</string>
@@ -467,9 +465,9 @@ Nachricht mit unbekanntem Schlüssel empfangen. Zum Anzeigen antippen.</string>
<string name="export_fragment__export_plaintext_backup">Klartextsicherung exportieren</string>
<string name="export_fragment__export_a_plaintext_backup_compatible_with">
Eine mit \"SMS Backup + Restore\" kompatible Klartextsicherung exportieren</string>
<string name="import_fragment__import_system_sms_database">SMS-Systemdatenbank importieren</string>
<string name="import_fragment__import_system_sms_database">System-SMS importieren</string>
<string name="import_fragment__import_the_database_from_the_default_system">Datenbank aus der Standard-SMS-App importieren</string>
<string name="import_fragment__import_encrypted_backup">Verschlüsselte Sicherung importieren</string>
<string name="import_fragment__import_encrypted_backup">Verschlüsselte Sicherung wiederherstellen</string>
<string name="import_fragment__restore_a_previously_exported_encrypted_textsecure_backup">
Eine zuvor exportierte, verschlüsselte TextSecure-Datensicherung wiederherstellen</string>
<string name="import_fragment__import_plaintext_backup">Klartextsicherung importieren</string>
@@ -503,7 +501,7 @@ Eine mit \"SMS Backup + Restore\" kompatible Klartextsicherung importieren</stri
<string name="recipient_preferences__disable_notifications_for_this_conversation">Benachrichtigungen für diese Unterhaltung deaktivieren</string>
<string name="recipient_preferences__ringtone">Benachrichtigungston</string>
<string name="recipient_preferences__vibrate">Vibration</string>
<string name="recipient_preferences__block">Blockieren</string>
<string name="recipient_preferences__block">Kontakt blockieren</string>
<string name="recipient_preferences__color">Farbe</string>
<string name="recipient_preferences__color_for_this_contact">Farbe dieses Kontakts</string>
<!--registration_activity-->
@@ -557,7 +555,7 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.</string>
<string name="registration_progress_activity__check">Haken</string>
<!--recipients_panel-->
<string name="recipients_panel__to"><small>Name oder Rufnummer eingeben</small></string>
<string name="recipients_panel__add_member">Mitglied hinzufügen</string>
<string name="recipients_panel__add_member">Mitglieder hinzufügen</string>
<!--verify_identity_activity-->
<string name="verify_identity_activity__their_identity_they_read">Kontaktschlüssel:</string>
<string name="verify_identity_activity__your_identity_you_read">Eigener Schlüssel:</string>
@@ -592,7 +590,7 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.</string>
<string name="arrays__mute_for_two_hours">Für 2 Stunden</string>
<string name="arrays__mute_for_one_day">Für 1 Tag</string>
<string name="arrays__mute_for_seven_days">Für 7 Tage</string>
<string name="arrays__settings_default">Standardeinstellung</string>
<string name="arrays__settings_default">Standard</string>
<string name="arrays__enabled">Aktiviert</string>
<string name="arrays__disabled">Deaktiviert</string>
<!--plurals.xml-->
@@ -619,7 +617,7 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.</string>
<string name="preferences__change_my_passphrase">Mein Passwort ändern</string>
<string name="preferences__enable_passphrase">Passwort aktivieren</string>
<string name="preferences__passphrase_summary">Passwort %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Lokale Verschlüsselung von Nachrichten und Schlüsseln aktivieren</string>
<string name="preferences__enable_lock_screen_for_messages">Nachrichtenvorschau in Benachrichtigungen sperren, solange TextSecure gesperrt ist</string>
<string name="preferences__screen_security">Bildschirmschutz</string>
<string name="preferences__screen_security_summary">Bildschirmschutz %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Bildschirmfotos in der Anwendung und der Liste der letzten Anwendungen blockieren</string>
@@ -715,7 +713,7 @@ Kostenlos verschlüsselte Nachrichten mit TextSecure- und Signal-Nutzern austaus
<!--conversation_context-->
<string name="conversation_context__menu_message_details">Nachrichtendetails</string>
<string name="conversation_context__menu_copy_text">Text kopieren</string>
<string name="conversation_context__menu_delete_message">Nachricht löschen</string>
<string name="conversation_context__menu_delete_message">Nachrichten löschen</string>
<string name="conversation_context__menu_forward_message">Nachricht weiterleiten</string>
<string name="conversation_context__menu_resend_message">Nachricht erneut senden</string>
<!--conversation_context_image-->
@@ -755,7 +753,7 @@ Kostenlos verschlüsselte Nachrichten mit TextSecure- und Signal-Nutzern austaus
<!--conversation_callable-->
<string name="conversation_add_to_contacts__menu_add_to_contacts">Zu Kontakten hinzufügen</string>
<!--conversation_group_options-->
<string name="convesation_group_options__recipients_list">Teilnahmeliste</string>
<string name="convesation_group_options__recipients_list">Mitgliederliste</string>
<string name="conversation_group_options__delivery">Zustellung</string>
<string name="conversation_group_options__conversation">Unterhaltung</string>
<string name="conversation_group_options__broadcast">Übertragen</string>

View File

@@ -12,13 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Διαγραφή όλων των παλιών μηνυμάτων τώρα;</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Είστε σίγουροι πως θέλετε να μειωθούν όλες οι συζητήσεις στα %s πιο πρόσφατα μηνύματα;</string>
<string name="ApplicationPreferencesActivity_delete">Διαγραφή</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Απενεργοποίηση κρυπτογράφησης αποθηκευμένων δεδομένων;</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Προσοχή, αυτό θα απενεργοποιήσει τη κρυπτογράφηση των
αποθηκευμένων δεδομένων για όλα ταμηνύματα και τα κλειδιά σας.
Οι κρυπτογραφημένες συζητήσεις σας θα συνεχίσουν να λειτουργούν,
αλλά οποιοσδήποτε με φυσική πρόσβαση στη συσκευή σας θα μπορεί να τα διαβάσει.
</string>
<string name="ApplicationPreferencesActivity_disable">Απενεργοποίηση</string>
<string name="ApplicationPreferencesActivity_disable_textsecure_messages">Απενεργοποίηση μηνυμάτων του TextSecure;</string>
<string name="ApplicationPreferencesActivity_this_will_disable_textsecure_messages">
@@ -59,6 +52,7 @@
αυτήν την επαφή.
</string>
<string name="ConfirmIdentityDialog_accept">Αποδοχή</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Μέγεθος μηνύματος: %d KB</string>
<string name="ConversationItem_expires_s">Λήγει: %s</string>
@@ -379,7 +373,6 @@ SMS της συσκευής σας στο TextSecure. Αν έχετε ήδη ε
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d μηνύματα σe %2$d συζητήσεις</string>
<string name="MessageNotifier_most_recent_from_s">Τελευταίο μήνυμα από: %1$s</string>
<string name="MessageNotifier_encrypted_message">Κρυπτογραφημένο μήνυμα...</string>
<string name="MessageNotifier_media_message_with_text">Μήνυμα Πολυμέσων: %s</string>
<string name="MessageNotifier_no_subject">(Χωρίς Θέμα)</string>
<string name="MessageNotifier_message_delivery_failed">Η παράδοση μηνύματος απέτυχε.</string>
@@ -392,14 +385,11 @@ SMS της συσκευής σας στο TextSecure. Αν έχετε ήδη ε
<string name="change_passphrase_activity__old_passphrase">ΠΑΛΙΟ ΣΥΝΘΗΜΑΤΙΚΟ</string>
<string name="change_passphrase_activity__new_passphrase">ΝΕΟ ΣΥΝΘΗΜΑΤΙΚΟ:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">ΕΠΑΝΑΛΗΨΗ ΝΕΟΥ ΣΥΝΘΗΜΑΤΙΚΟΥ:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Δεν υπάρχουν επαφές.</string>
<string name="contact_selection_group_activity__finding_contacts">Φόρτωση των επαφών...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Δεν είστε εγγεγραμμένοι για ειδοποιήσεις push...</string>
<string name="SingleContactSelectionActivity_updating_directory">Ενημέρωση καταλόγου</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Ενημέρωση καταλόγου push...</string>
<string name="SingleContactSelectionActivity_contact_photo">Φωτογραφία επαφής</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Επιλογή για</string>
@@ -610,7 +600,6 @@ SMS της συσκευής σας στο TextSecure. Αν έχετε ήδη ε
<string name="preferences__change_my_passphrase">Άλλαξε το συνθηματικό μου</string>
<string name="preferences__enable_passphrase">Ενεργοποίηση συνθηματικού</string>
<string name="preferences__passphrase_summary">Συνθηματικό %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Ενεργοποίηση τοπικής κρυπτογράφησης όλων των μηνυμάτων και κλειδιών</string>
<string name="preferences__screen_security">Ασφάλεια οθόνης</string>
<string name="preferences__screen_security_summary">Ασφάλεια οθόνης %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Να επιτρέπεται η καταγραφή της οθόνης (screenshots)</string>

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">¿Eliminar todos los mensajes antiguos?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">¿Está seguro de que quiere recortar inmediatamente todos los hilos de conversación a los %s últimos mensajes?</string>
<string name="ApplicationPreferencesActivity_delete">Eliminar</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">¿Deshabilitar cifrado del almacenamiento?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Atención, esto deshabilitará el cifrado del almacenamiento para todos los mensajes y claves. Sus sesiones cifradas
funcionarán pero cualquiera con acceso físico a su dispositivo podrá acceder a ellas.
</string>
<string name="ApplicationPreferencesActivity_disable">Desactivar</string>
<string name="ApplicationPreferencesActivity_unregistering">Desregistrándose</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Desregistrándose de los mensajes de Textsecure...</string>
@@ -59,6 +54,8 @@ nueva clave de identidad.</string>
este contacto.
</string>
<string name="ConfirmIdentityDialog_accept">Aceptar</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Mensaje %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Tamaño del mensaje: %d KB</string>
<string name="ConversationItem_expires_s">Expira: %s</string>
@@ -417,7 +414,7 @@ Se recibió un mensaje con una clave de identidad desconocida. Haga clic para pr
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d mensajes en %2$d conversaciones</string>
<string name="MessageNotifier_most_recent_from_s">Más recientes desde: %1$s</string>
<string name="MessageNotifier_encrypted_message">Mensaje cifrado...</string>
<string name="MessageNotifier_locked_message">Mensaje bloqueado...</string>
<string name="MessageNotifier_media_message_with_text">Mensaje multimedia: %s</string>
<string name="MessageNotifier_no_subject">(Sin asunto)</string>
<string name="MessageNotifier_message_delivery_failed">Entrega de mensaje fallida.</string>
@@ -434,14 +431,11 @@ Se recibió un mensaje con una clave de identidad desconocida. Haga clic para pr
<string name="change_passphrase_activity__old_passphrase">CLAVE DE ACCESO ANTERIOR:</string>
<string name="change_passphrase_activity__new_passphrase">CLAVE DE ACCESO NUEVA:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">REPITA LA NUEVA CLAVE DE ACCESO:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">No hay contactos.</string>
<string name="contact_selection_group_activity__finding_contacts">Cargando contactos...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">No está registrado en el servicio push...</string>
<string name="SingleContactSelectionActivity_updating_directory">Actualizando directorio</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Actualizando directorio push...</string>
<string name="SingleContactSelectionActivity_contact_photo">Foto del contacto</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Seleccionar para</string>
@@ -693,7 +687,7 @@ por SMS.
<string name="preferences__change_my_passphrase">Cambiar mi clave de acceso</string>
<string name="preferences__enable_passphrase">Habilitar clave de acceso</string>
<string name="preferences__passphrase_summary">Clave de acceso %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Habilitar cifrado local de mensajes y claves</string>
<string name="preferences__enable_lock_screen_for_messages">Habilitar pantalla de bloqueo para mensajes</string>
<string name="preferences__screen_security">Seguridad de la pantalla</string>
<string name="preferences__screen_security_summary">Seguridad de la pantalla %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Bloquear capturas de pantalla en la lista de aplicaciones recientes y dentro de la aplicación</string>

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Mezu zahar guztiak ezabatu orain?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Ziur zaude solasaldi hari guztiak berehala azkenengo %s mezuetara murriztu nahi izateaz?</string>
<string name="ApplicationPreferencesActivity_delete">Ezabatu</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Desgaitu biltegiaren enkriptaketa?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Kontuz, honek desgaituko du biltegiaren enkriptaketa mezu eta gako guztietarako.
Zure enkriptatutako saioek funtzionatzen jarraituko dute, baina zure gailua fisikoki uki dezakeen edonor
gai izango da saiootan sartzeko.</string>
<string name="ApplicationPreferencesActivity_disable">Desgaitu</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">Errorea zerbitzariarekin konektatzerakoan!</string>
<string name="ApplicationPreferencesActivity_touch_to_change_your_default_sms_app">Ukitu zure SMS aplikazio lehenetsia aldatzeko</string>
@@ -41,6 +36,7 @@ gai izango da saiootan sartzeko.</string>
<!--BlockedContactsActivity-->
<!--ConfirmIdentityDialog-->
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Agian kontaktu hau egiaztatu beharko zenuke.</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Mezuaren tamaina: %d KB</string>
<string name="ConversationItem_expires_s">Iraingutuko da: %s</string>
@@ -320,7 +316,6 @@ Nortasun gako ezezagun batekin jaso da mezua. Klik egin prozesatzeko eta erakust
<string name="KeyCachingService_passphrase_cached">TextSecure desblokeatuta dago</string>
<string name="KeyCachingService_lock">Blokeatu pasahitz bat erabiliz</string>
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">Enkriptatuko mezua...</string>
<string name="MessageNotifier_no_subject">(Ez dago gairik)</string>
<string name="MessageNotifier_message_delivery_failed">Mezuaren banaketak huts egin du.</string>
<string name="MessageNotifier_failed_to_deliver_message">Mezuaren banaketak huts egin du.</string>
@@ -332,14 +327,11 @@ Nortasun gako ezezagun batekin jaso da mezua. Klik egin prozesatzeko eta erakust
<string name="change_passphrase_activity__old_passphrase">PASAHITZ ZAHARRA:</string>
<string name="change_passphrase_activity__new_passphrase">PASAHITZ BERRIA:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">PASAHITZ BERRIA ERREPIKATU:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Kontakturik ez.</string>
<string name="contact_selection_group_activity__finding_contacts">Kontaktuak kargatzen...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Ez zaude push zerbitzuarekin erregistratuta...</string>
<string name="SingleContactSelectionActivity_updating_directory">Direktorioa eguneratzen</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Push direktorioa eguneratzen...</string>
<string name="SingleContactSelectionActivity_contact_photo">Kontaktuaren Argazkia</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Hautatu egiteko...</string>
@@ -517,7 +509,6 @@ huts egin du.
<string name="preferences__change_passphrase">Pasahitza aldatu</string>
<string name="preferences__change_my_passphrase">Nire pasahitza aldatu</string>
<string name="preferences__enable_passphrase">Pasahitza gaitu</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Mezuen eta gakoen enkriptatze lokala gaitu</string>
<string name="preferences__screen_security">Pantailaren segurtasuna</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Blokeatu pantailazoak arestikoen zerrendan eta aplikazioaren barruan</string>
<string name="preferences__forget_passphrase_from_memory_after_some_interval">Ahaztu pasahitza memoriatik denbora tarte bat pasa ondoren</string>

View File

@@ -12,7 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">پیام‌های قدیمی حذف شوند؟</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">مطمئنید که می‌خواهید از هر گفتگو %s پیام جدیدتر را نگه داشته و بقیه را حذف کنید؟</string>
<string name="ApplicationPreferencesActivity_delete">حذف</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">غیر فعال کردن رمزگذاری ذخیره سازی؟</string>
<string name="ApplicationPreferencesActivity_disable">غیرفعال کردن</string>
<string name="ApplicationPreferencesActivity_disable_textsecure_messages">غیر فعال کردن پیام های TextSecure ؟</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">خطا در اتصال به سرور!</string>
@@ -45,6 +44,8 @@
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">شما ممکن است مایل به منظور بررسی
تماس با ما</string>
<string name="ConfirmIdentityDialog_accept">پذیرفتن</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">ارسال پیام به %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">حجم پیام: %d کیلوبایت</string>
<string name="ConversationItem_expires_s">انقضا: %s</string>
@@ -55,6 +56,7 @@
<string name="ConversationItem_group_action_left">%1$s گروه را ترک کرده است.</string>
<string name="ConversationItem_click_for_details">برای جزئیات بیشتر ضربه بزنید</string>
<string name="ConversationItem_click_to_approve_unencrypted_mms_dialog_title">مجدد به تکه تکه کردن MMS؟</string>
<string name="ConversationItem_unable_to_open_media">برنامه ای برای بازکردن این رسانه وجود ندارد.</string>
<!--ConversationActivity-->
<string name="ConversationActivity_initiate_secure_session_question">گفتگوی امن آغاز شود؟</string>
<string name="ConversationActivity_initiate_secure_session_with_s_question">گفتگوی امن با %s آغاز شود؟</string>
@@ -92,6 +94,7 @@
<string name="ConversationFragment_message_details">جزییات پیام</string>
<string name="ConversationFragment_sender_s_transport_s_sent_s_received_s">فرستنده: %1$s\nنوع انتقال: %2$s\nزمان ارسال: %3$s\nزمان دریافت: %4$s</string>
<string name="ConversationFragment_confirm_message_delete">تایید حذف پیام</string>
<string name="ConversationFragment_are_you_sure_you_want_to_permanently_delete_all_selected_messages">آیا از حذف دایم تمام پیام های انتخاب شده اطمینان دارید؟</string>
<string name="ConversationFragment_save_to_sd_card">ذخیره در ذخیره سازی؟</string>
<string name="ConversationFragment_success_exclamation">موفقیت!</string>
<string name="ConversationFragment_unable_to_write_to_sd_card_exclamation">قادر نیست به ارسال به ذخیره سازی!</string>
@@ -314,7 +317,6 @@
<string name="KeyCachingService_passphrase_cached">TextSecure باز است</string>
<string name="KeyCachingService_lock">قفل با عبارت عبور</string>
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">پیام رمزنگاری شده ...</string>
<string name="MessageNotifier_media_message_with_text">پیام رسانه ها: %s</string>
<string name="MessageNotifier_no_subject">(بدون موضوع)</string>
<string name="MessageNotifier_message_delivery_failed">تحویل پیام شکست خورده است.</string>
@@ -325,17 +327,16 @@
<string name="MessageNotifier_media_message">پیام رسانه</string>
<string name="MessageNotifier_reply">پاسخ</string>
<!--QuickResponseService-->
<string name="QuickResponseService_problem_sending_message">بروز خطا در ارسال پیام!</string>
<!--change_passphrase_activity-->
<string name="change_passphrase_activity__old_passphrase">رمز قبلی:</string>
<string name="change_passphrase_activity__new_passphrase">رمز جدید:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">تکرار رمز جدید:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">مخاطبی یافت نشد.</string>
<string name="contact_selection_group_activity__finding_contacts">بارگیری لیست مخاطب‌ها</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_updating_directory">به روز رسانی دایرکتوری</string>
<string name="SingleContactSelectionActivity_updating_push_directory">به روز رسانی دایرکتوری فشار ...</string>
<string name="SingleContactSelectionActivity_contact_photo">تصویر مخاطب</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">انتخاب برای</string>
@@ -506,7 +507,6 @@
<string name="preferences__change_my_passphrase">تغییر رمز من</string>
<string name="preferences__enable_passphrase">فعال‌سازی رمز</string>
<string name="preferences__passphrase_summary">رمز %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">فعال کردن رمزگذاری محلی از پیام ها و کلیدها</string>
<string name="preferences__screen_security">امنیت صفحه نمایش</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">بلوک کردن عکس گرفتن از صفحه در لیست تازه و در داخل برنامه</string>
<string name="preferences__forget_passphrase_from_memory_after_some_interval">برنامه پس از مدتی به طور خودکار قفل شود</string>

View File

@@ -12,10 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Poistetaanko kaikki vanhat viestit nyt?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Haluatko varmasti rajata kaikki keskustelut %s viimeisimpään viestiin?</string>
<string name="ApplicationPreferencesActivity_delete">Poista</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Poistetaanko tallennustilan salaus käytöstä?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Varoitus: Viestiesi ja avaimiesi tallennustilan salaus poistetaan käytöstä. Salatut istuntosi
jatkavat toimintaansa, mutta kuka tahansa, jolla on fyysinen pääsy laitteeseesi, voi lukea ne.</string>
<string name="ApplicationPreferencesActivity_disable">Poista käytöstä</string>
<string name="ApplicationPreferencesActivity_unregistering">Puretaan rekisteröintiä</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Puretaan rekisteröintiä TextSecure-viestipalvelusta</string>
@@ -57,6 +53,8 @@ uutta identiteettiavainta.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Saatat haluta varmentaa
tämän yhteystiedon.</string>
<string name="ConfirmIdentityDialog_accept">Hyväksy</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Viesti %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Viestin koko: %d kt</string>
<string name="ConversationItem_expires_s">Umpeutuu: %s</string>
@@ -400,7 +398,7 @@ Vastaanotettiin viesti tuntemattomalla identiteettiavaimella. Aloita käsittely
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d viestiä %2$d keskustelussa</string>
<string name="MessageNotifier_most_recent_from_s">Uusin lähettäjältä: %1$s</string>
<string name="MessageNotifier_encrypted_message">Salattu viesti...</string>
<string name="MessageNotifier_locked_message">Lukittu viesti...</string>
<string name="MessageNotifier_media_message_with_text">Mediaviesti: %s</string>
<string name="MessageNotifier_no_subject">(Ei otsikkoa)</string>
<string name="MessageNotifier_message_delivery_failed">Viestin toimitus epäonnistui.</string>
@@ -417,14 +415,12 @@ Vastaanotettiin viesti tuntemattomalla identiteettiavaimella. Aloita käsittely
<string name="change_passphrase_activity__old_passphrase">VANHA SALALAUSE:</string>
<string name="change_passphrase_activity__new_passphrase">UUSI SALALAUSE:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">TOISTA UUSI SALALAUSE:</string>
<!--contact_selection_activity-->
<string name="contact_selection_activity__enter_name_or_number">Syötä nimi tai numero</string>
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Ei yhteystietoja.</string>
<string name="contact_selection_group_activity__finding_contacts">Ladataan yhteystietoja…</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Et ole rekisteröitynyt pikaviestipalveluun…</string>
<string name="SingleContactSelectionActivity_updating_directory">Päivitetään hakemistoa</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Päivitetään pikaviestihakemistoa…</string>
<string name="SingleContactSelectionActivity_contact_photo">Yhteystiedon kuva</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Valitse</string>
@@ -444,7 +440,7 @@ Vastaanotettiin viesti tuntemattomalla identiteettiavaimella. Aloita käsittely
<string name="conversation_activity__compose_description">Viestin kirjoitus</string>
<string name="conversation_activity__emoji_toggle_description">Näytä tai piilota emoji-näppäimistö</string>
<string name="conversation_activity__attachment_thumbnail">Liitteen esikatselu</string>
<string name="conversation_activity__quick_attachment_drawer_toggle_description">Näytä tai piilota liitetiedostopaneeli</string>
<string name="conversation_activity__quick_attachment_drawer_toggle_description">Ota pikakuva</string>
<!--conversation_item-->
<string name="conversation_item__mms_downloading_description">Ladataan mediaviestiä</string>
<string name="conversation_item__mms_image_description">Mediaviesti</string>
@@ -644,9 +640,9 @@ epäonnistui.</string>
<string name="preferences__choose_your_contact_entry_from_the_contacts_list">Valitse yhteystieto osoitekirjasta.</string>
<string name="preferences__change_passphrase">Salalauseen vaihto</string>
<string name="preferences__change_my_passphrase">Vaihda salalauseeni</string>
<string name="preferences__enable_passphrase">Aseta salalause</string>
<string name="preferences__enable_passphrase">Käytä salalausetta</string>
<string name="preferences__passphrase_summary">Salalause %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Ota käyttöön laitteesi viestien ja avainten salaus</string>
<string name="preferences__enable_lock_screen_for_messages">Lukitse sovellus ja viestit salalauseella</string>
<string name="preferences__screen_security">Näytön suojaus</string>
<string name="preferences__screen_security_summary">Näytön suojaus %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Estä kuvakaappaukset \"viimeksi käytetyt sovellukset\" -näkymästä sekä sovelluksen sisältä</string>

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Supprimer tous les anciens messages maintenant ?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Êtes-vous sûr de vouloir réduire toutes les conversations aux %s messages les plus récents ?</string>
<string name="ApplicationPreferencesActivity_delete">Supprimer</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Désactiver le chiffrement du stockage ?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Attention, ceci désactivera le chiffrement de stockage pour tous les messages et toutes les clés. Vos sessions chiffrées
continueront de fonctionner mais une personne ayant un accès physique à votre appareil sera
en mesure dy accéder.</string>
<string name="ApplicationPreferencesActivity_disable">Désactiver</string>
<string name="ApplicationPreferencesActivity_unregistering">Annulation de l\'enregistrement</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Annulation de l\'enregistrement aux messages TextSecure</string>
@@ -59,6 +54,8 @@ clé didentité.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Vous devriez
vérifier ce contact.</string>
<string name="ConfirmIdentityDialog_accept">Accepter</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Message %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Taille du message : %d Ko</string>
<string name="ConversationItem_expires_s">Expire : %s</string>
@@ -400,7 +397,7 @@ Un message avec une clé de chiffrement inconnue a été reçu. Cliquer pour l\'
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d messages dans %2$d conversations</string>
<string name="MessageNotifier_most_recent_from_s">Plus récent de : %1$s</string>
<string name="MessageNotifier_encrypted_message">Message chiffré…</string>
<string name="MessageNotifier_locked_message">Message bloqué...</string>
<string name="MessageNotifier_media_message_with_text">Message média : %s</string>
<string name="MessageNotifier_no_subject">(Aucun sujet)</string>
<string name="MessageNotifier_message_delivery_failed">La distribution du message a échoué.</string>
@@ -417,14 +414,11 @@ Un message avec une clé de chiffrement inconnue a été reçu. Cliquer pour l\'
<string name="change_passphrase_activity__old_passphrase">Ancienne phrase de passe :</string>
<string name="change_passphrase_activity__new_passphrase">Nouvelle phrase de passe :</string>
<string name="change_passphrase_activity__repeat_new_passphrase">Répéter la nouvelle phrase de passe :</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Aucun contact.</string>
<string name="contact_selection_group_activity__finding_contacts">Chargement des contacts...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Vous n\'êtes pas enregistré avec le service push...</string>
<string name="SingleContactSelectionActivity_updating_directory">Mise à jour du répertoire</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Mise à jour du dossier push...</string>
<string name="SingleContactSelectionActivity_contact_photo">Photo de contact</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Sélectionner pour</string>
@@ -444,6 +438,7 @@ Un message avec une clé de chiffrement inconnue a été reçu. Cliquer pour l\'
<string name="conversation_activity__compose_description">Composition du message</string>
<string name="conversation_activity__emoji_toggle_description">Activer le clavier emoji</string>
<string name="conversation_activity__attachment_thumbnail">Vignette de pièce jointe</string>
<string name="conversation_activity__quick_attachment_drawer_toggle_description">Capture instantanée</string>
<!--conversation_item-->
<string name="conversation_item__mms_downloading_description">Téléchargement du message média</string>
<string name="conversation_item__mms_image_description">Message média</string>
@@ -649,7 +644,7 @@ par SMS.</string>
<string name="preferences__change_my_passphrase">Modifier ma phrase de passe</string>
<string name="preferences__enable_passphrase">Activer la phrase de passe</string>
<string name="preferences__passphrase_summary">Phrase de passe %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Activer le chiffrement local des messages et des clés</string>
<string name="preferences__enable_lock_screen_for_messages">Activer l\'écran de blocage pour les messages</string>
<string name="preferences__screen_security">Sécurité décran</string>
<string name="preferences__screen_security_summary">Sécurité d\'écran %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Désactiver les prises d\'écrans dans la liste des applications récentes et à l\'intérieur de l\'application</string>

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Obriši sve stare poruke?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Jeste li sigurni da želite skratiti sve razgovore na %s najnovijih poruka?</string>
<string name="ApplicationPreferencesActivity_delete">Obriši</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Onemogući kriptiranje memorije?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Ovo će onemogućiti kriptiranje memorije za sve poruke i ključeve. Vaše kriptirane
sesije će nastaviti raditi, ali svi sa fizičkim pristupom vašem uređaju će
im moći pristupiti.</string>
<string name="ApplicationPreferencesActivity_disable">Onemogući</string>
<string name="ApplicationPreferencesActivity_unregistering">Uklanjanje registracije</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Uklanjanje registracije na TextSecure poruke...</string>
@@ -56,6 +51,7 @@ ili da je %2$s jednostavno ponovno instalirao TextSecure i sada ima novi identif
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Možda bi trebali provjeriti
ovaj kontakt.</string>
<string name="ConfirmIdentityDialog_accept">Prihvati</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Veličina poruke: %d KB</string>
<string name="ConversationItem_expires_s">Ističe: %s</string>
@@ -393,7 +389,6 @@ Primljena poruka sa nepoznatim ključem identiteta. Pritisnite za obradu i prika
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d poruka u %2$d razgovora</string>
<string name="MessageNotifier_most_recent_from_s">Najnovije od: %1$s</string>
<string name="MessageNotifier_encrypted_message">Kriptirana poruka...</string>
<string name="MessageNotifier_media_message_with_text">Media poruka: %s</string>
<string name="MessageNotifier_no_subject">(Bez naslova)</string>
<string name="MessageNotifier_message_delivery_failed">Neuspješna isporuka poruke.</string>
@@ -409,14 +404,11 @@ Primljena poruka sa nepoznatim ključem identiteta. Pritisnite za obradu i prika
<string name="change_passphrase_activity__old_passphrase">STARA LOZINKA:</string>
<string name="change_passphrase_activity__new_passphrase">NOVA LOZINKA:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">PONOVITE NOVU LOZINKU:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Nema kontakata.</string>
<string name="contact_selection_group_activity__finding_contacts">Učitavanje kontakata...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Niste registrirani na instant uslugu...</string>
<string name="SingleContactSelectionActivity_updating_directory">Ažuriranje direktorija</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Ažuriranje instant direktorija...</string>
<string name="SingleContactSelectionActivity_contact_photo">Slika kontakta</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Odaberi za</string>
@@ -639,7 +631,6 @@ neuspješno.</string>
<string name="preferences__change_my_passphrase">Izmjeni moju lozinku</string>
<string name="preferences__enable_passphrase">Omogući lozinku</string>
<string name="preferences__passphrase_summary">Lozinka %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Omogući lokalno kriptiranje poruka i ključeva</string>
<string name="preferences__screen_security">Sigurnost ekrana</string>
<string name="preferences__screen_security_summary">Sigurnost ekrana %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Onemogući snimanje ekrana na popisu nedavnih i unutar aplikacije</string>

View File

@@ -12,12 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Minden régebbi üzenetet szeretnél törölni most?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Biztosan szeretnéd azonnal csonkolni az összes beszélgetésfolyamot a legutóbbi %s üzenetre?</string>
<string name="ApplicationPreferencesActivity_delete">Törlés</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Letiltod a tároló titkosítását?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Figyelmeztetés, ez letiltja a titkosított tárolást minden üzenethez és kulcshoz. A titkosított
üzenetváltásod működni fog ugyan, de bárki aki fizikailag hozzáférhet az eszközödhöz
hozzáférhet az üzenetekhez és a kulcsokhoz!
</string>
<string name="ApplicationPreferencesActivity_disable">Tiltás</string>
<string name="ApplicationPreferencesActivity_unregistering">Leregisztrálás</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Leregisztrálás TextSecure üzenetekről...</string>
@@ -60,6 +54,8 @@ azonosító kulcs %1$s vonatkozásában megváltozott. Ez jelentheti, hogy valak
ezt a névjegyet.
</string>
<string name="ConfirmIdentityDialog_accept">Elfogad</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Üzenet %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Üzenet mérete: %d kB</string>
<string name="ConversationItem_expires_s">Lejár: %s</string>
@@ -412,7 +408,7 @@ Ismeretlen azonosító kulcsú üzenet érkezett. Kattints rá a feldolgozáshoz
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d üzenet %2$d beszélgetésben</string>
<string name="MessageNotifier_most_recent_from_s">Legutóbbi tőle: %1$s</string>
<string name="MessageNotifier_encrypted_message">Biztonságos üzenet...</string>
<string name="MessageNotifier_locked_message">Zárolt üzenet...</string>
<string name="MessageNotifier_media_message_with_text">Média üzenet: %s</string>
<string name="MessageNotifier_no_subject">(Nincs tárgy)</string>
<string name="MessageNotifier_message_delivery_failed">Üzenet kézbesítése sikertelen!</string>
@@ -429,14 +425,11 @@ Ismeretlen azonosító kulcsú üzenet érkezett. Kattints rá a feldolgozáshoz
<string name="change_passphrase_activity__old_passphrase">RÉGI JELSZÓ:</string>
<string name="change_passphrase_activity__new_passphrase">ÚJ JELSZÓ:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">ISMÉTELD MEG AZ ÚJ JELSZÓT:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Nincsenek névjegyek.</string>
<string name="contact_selection_group_activity__finding_contacts">Névjegyek betöltése...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Nem vagy regisztrálva az azonnali üzenetküldési szolgáltatás használatához...</string>
<string name="SingleContactSelectionActivity_updating_directory">Könyvtár frissítése</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Azonnali üzenetváltás könyvtár frissítése...</string>
<string name="SingleContactSelectionActivity_contact_photo">Névjegy fotó</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Kiválasztás...</string>
@@ -456,6 +449,7 @@ Ismeretlen azonosító kulcsú üzenet érkezett. Kattints rá a feldolgozáshoz
<string name="conversation_activity__compose_description">Üzenet létrehozása</string>
<string name="conversation_activity__emoji_toggle_description">Váltás a hangulatjelek beviteléhez</string>
<string name="conversation_activity__attachment_thumbnail">Melléklet előnézet</string>
<string name="conversation_activity__quick_attachment_drawer_toggle_description">Közvetlen csatolmányfelvétel</string>
<!--conversation_item-->
<string name="conversation_item__mms_downloading_description">Média üzenet letöltése</string>
<string name="conversation_item__mms_image_description">Média üzenet</string>
@@ -681,7 +675,7 @@ sikertelen.
<string name="preferences__change_my_passphrase">A saját jelszó megváltoztatása</string>
<string name="preferences__enable_passphrase">Kódszó engedélyezése</string>
<string name="preferences__passphrase_summary">Jelszó %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Helyi üzenetkódolás és kulcsok engedélyezése</string>
<string name="preferences__enable_lock_screen_for_messages">Zárolt képernyő engedélyezése az üzeneteknek</string>
<string name="preferences__screen_security">Képernyő biztonság</string>
<string name="preferences__screen_security_summary">Képernyő biztonság %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">A képernyőkép mentés tiltása a korábbi listákban és az alkalmazáson belül</string>
@@ -811,6 +805,7 @@ Ingyenes biztonságos üzenet küldés TextSecure és Signal felhasználóknak</
<string name="conversation__menu_leave_group">Csoport elhagyása</string>
<string name="conversation__menu_delete_thread">Beszélgetésfolyam törlése</string>
<string name="conversation__menu_view_media">Minden fénykép</string>
<string name="conversation__menu_conversation_settings">Beszélgetés beállítások</string>
<!--conversation_popup-->
<string name="conversation_popup__menu_expand_popup">Felugró kiterjesztése</string>
<!--conversation_callable-->
@@ -854,5 +849,6 @@ Ingyenes biztonságos üzenet küldés TextSecure és Signal felhasználóknak</
<!--transport_selection_list_item-->
<string name="transport_selection_list_item__transport_icon">Átvitel ikon</string>
<!--quick_attachment_drawer-->
<string name="quick_camera_unavailable">Kamera nem elérhető</string>
<!--EOF-->
</resources>

View File

@@ -12,9 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Eliminare tutti i messaggi vecchi ora?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Vuoi davvero ridurre tutte conversazioni ai soli %s messaggi più recenti?</string>
<string name="ApplicationPreferencesActivity_delete">Elimina</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Disabilitare la cifratura dei dati salvati?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Attenzione, così facendo interromperai la cifratura di tutti i messaggi e le chiavi che hai salvato. Le tue sessioni cifrate continueranno a funzionare, ma chiunque avrà accesso fisico al tuo dispositivo sarà in grado di accedere ad esse.</string>
<string name="ApplicationPreferencesActivity_disable">Disabilita</string>
<string name="ApplicationPreferencesActivity_unregistering">Disiscriviti</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Disicriviti dai messaggi di TextSecure</string>
@@ -53,6 +50,8 @@ Dovrai registrare nuovamente il tuo numero di telefono per poter utilizzare di n
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Dovresti verificare
questo contatto.</string>
<string name="ConfirmIdentityDialog_accept">Accetta</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Messaggio %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Dimensione Messaggio: %d KB</string>
<string name="ConversationItem_expires_s">Scadenza: %s</string>
@@ -395,7 +394,7 @@ Ricevuto un messaggio con una chiave identificativa sconosciuta. Clicca per elab
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d messaggi in %2$d conversazioni</string>
<string name="MessageNotifier_most_recent_from_s">Il più recente da: %1$s</string>
<string name="MessageNotifier_encrypted_message">Messaggio cifrato...</string>
<string name="MessageNotifier_locked_message">Messaggio bloccato...</string>
<string name="MessageNotifier_media_message_with_text">Messaggio multimediale: %s</string>
<string name="MessageNotifier_no_subject">(Nessun oggetto)</string>
<string name="MessageNotifier_message_delivery_failed">Non è riuscito l\'invio del messaggio</string>
@@ -412,14 +411,11 @@ Ricevuto un messaggio con una chiave identificativa sconosciuta. Clicca per elab
<string name="change_passphrase_activity__old_passphrase">Vecchia password:</string>
<string name="change_passphrase_activity__new_passphrase">Nuova password:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">Ripeti nuova password:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Nessun contatto.</string>
<string name="contact_selection_group_activity__finding_contacts">Caricamento contatti...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Non sei registrato al servizio push...</string>
<string name="SingleContactSelectionActivity_updating_directory">Aggiornamento directory</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Aggiornamento directory push...</string>
<string name="SingleContactSelectionActivity_contact_photo">Foto del contatto</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Seleziona per</string>
@@ -658,7 +654,7 @@ non riuscita.
<string name="preferences__change_my_passphrase">Cambia la mia password</string>
<string name="preferences__enable_passphrase">Usa password</string>
<string name="preferences__passphrase_summary">Password %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Abilità la cifratura in locale di messaggi e chiavi</string>
<string name="preferences__enable_lock_screen_for_messages">Attiva schermata di blocco per i messaggi</string>
<string name="preferences__screen_security">Sicurezza schermo</string>
<string name="preferences__screen_security_summary">Sicurezza schermo %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Blocca il fotografare dello schermo nella lista recenti e all\'interno dell\'app</string>
@@ -788,6 +784,7 @@ Chatta gratis con gli utenti TextSecure e Signal</string>
<string name="conversation__menu_leave_group">Abbandona il gruppo</string>
<string name="conversation__menu_delete_thread">Cancella conversazione</string>
<string name="conversation__menu_view_media">Tutte le immagini</string>
<string name="conversation__menu_conversation_settings">Impostazioni conversazione</string>
<!--conversation_popup-->
<string name="conversation_popup__menu_expand_popup">Espandi popup</string>
<!--conversation_callable-->
@@ -831,5 +828,6 @@ Chatta gratis con gli utenti TextSecure e Signal</string>
<!--transport_selection_list_item-->
<string name="transport_selection_list_item__transport_icon">Icona trasporto</string>
<!--quick_attachment_drawer-->
<string name="quick_camera_unavailable">Fotocamera non disponibile</string>
<!--EOF-->
</resources>

View File

@@ -11,12 +11,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">למחוק את כל ההודעות הישנות עכשיו?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">אתה בטוח שברצונך לקצץ מיד את כל שרשורי השיחות עד להודעות ה-%s הכי חדשות?</string>
<string name="ApplicationPreferencesActivity_delete">מחק</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">לבטל הצפנת אחסון?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
אזהרה, פעולה זו תבטל הצפנה מקומית לכל ההודעות והמפתחות. החיבורים
המאובטחים שלך ימשיכו לתפקד, אבל כל אחד עם גישה פיזית למכשירך יוכל
לגשת אליהם.
</string>
<string name="ApplicationPreferencesActivity_disable">בטל</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">אירעה שגיאה בחיבור לשרת!</string>
<!--AppProtectionPreferenceFragment-->
@@ -31,6 +25,7 @@
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">ייתכן שתרצה לאמת
את איש הקשר הזה.
</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">גודל ההודעה: %d KB</string>
<string name="ConversationItem_expires_s">פג: %s</string>
@@ -162,7 +157,6 @@
<string name="ApplicationMigrationService_import_in_progress">בתהליך ייבוא</string>
<!--KeyCachingService-->
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">הודעה מוצפנת...</string>
<string name="MessageNotifier_message_delivery_failed">מסירת ההודעה נכשלה.</string>
<string name="MessageNotifier_failed_to_deliver_message">כישלון במסירת ההודעה.</string>
<string name="MessageNotifier_error_delivering_message">שגיאה במסירת ההודעה.</string>
@@ -172,8 +166,8 @@
<string name="change_passphrase_activity__old_passphrase">סיסמה ישנה:</string>
<string name="change_passphrase_activity__new_passphrase">סיסמה חדשה:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">חזור על הסיסמה החדשה:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">אין אנשי קשר.</string>
<!--single_contact_selection_activity-->
<!--ContactSelectionListFragment-->

View File

@@ -12,10 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">全ての古いメッセージを今、削除しますか?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">今すぐ全ての会話スレッドを最新メッセージ%s通にまで縮小トリムしますか</string>
<string name="ApplicationPreferencesActivity_delete">削除</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">端末内保存データの暗号化を無効にしますか?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
警告、この作業によって、携帯端末に保存されるすべてのメッセージと鍵の暗号化が無効になります!
通信上(セッション)の暗号化は引き続き行われますが、お使いの携帯端末それ自体に、誰かが物理的な接触を試みた場合、メッセージや鍵などの情報が入手されてしまう可能性があります。</string>
<string name="ApplicationPreferencesActivity_disable">無効</string>
<string name="ApplicationPreferencesActivity_unregistering">未登録</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">TextSecureメッセージが未登録...</string>
@@ -57,6 +53,8 @@
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">この連絡先を
照合することが推奨されています。</string>
<string name="ConfirmIdentityDialog_accept">受け取り</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">メッセージ %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">メッセージのサイズ: %d KB</string>
<string name="ConversationItem_expires_s">有効期限: %s</string>
@@ -146,7 +144,17 @@
<string name="DateUtils_now"></string>
<string name="DateUtils_minutes_ago">%d 分</string>
<!--DeviceListActivity-->
<string name="DeviceListActivity_disconnect_s">\'%s\' を切断しますか?</string>
<string name="DeviceListActivity_by_disconnecting_this_device_it_will_no_longer_be_able_to_send_or_receive">このデバイスを切断すると、メッセージを送信/受信することはできなくなります。</string>
<string name="DeviceListActivity_network_connection_failed">ネットワーク接続が失敗...</string>
<string name="DeviceListActivity_try_again">再試行</string>
<string name="DeviceListActivity_disconnecting_device">デバイスの切断...</string>
<string name="DeviceListActivity_disconnecting_device_no_ellipse">デバイスの切断</string>
<string name="DeviceListActivity_network_failed">ネットワークが失敗!</string>
<!--DeviceListItem-->
<string name="DeviceListItem_unnamed_device">無名のデバイス</string>
<string name="DeviceListItem_created_s">%s を生成</string>
<string name="DeviceListItem_last_active_s">最後にアクティブ %s</string>
<!--ShareActivity-->
<string name="ShareActivity_share_with">共有</string>
<!--ExportFragment-->
@@ -240,6 +248,7 @@
<string name="DeviceProvisioningActivity_content_progress_no_device">デバイスがありません。</string>
<string name="DeviceProvisioningActivity_content_progress_network_error">ネットワークエラー。</string>
<string name="DeviceProvisioningActivity_content_progress_key_error">QRコードが無効。</string>
<string name="DeviceProvisioningActivity_sorry_you_have_too_many_devices_registered_already">すみません、あなたはすでにとても多数のデバイスを登録しています、なんらかを削除してみてください...</string>
<!--PassphrasePromptActivity-->
<string name="PassphrasePromptActivity_enter_passphrase">パスワード入力</string>
<string name="PassphrasePromptActivity_watermark_content_description">TextSecureアイコン</string>
@@ -373,27 +382,28 @@
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%2$d 会話の中の %1$d メッセージ </string>
<string name="MessageNotifier_most_recent_from_s">最新の受信は次から: %1$s</string>
<string name="MessageNotifier_encrypted_message">暗号化されたメッセージ…</string>
<string name="MessageNotifier_locked_message">メッセージをロック...</string>
<string name="MessageNotifier_media_message_with_text">メディアメッセージ: %s</string>
<string name="MessageNotifier_no_subject">(無題)</string>
<string name="MessageNotifier_message_delivery_failed">メッセージの配信に失敗しました。</string>
<string name="MessageNotifier_failed_to_deliver_message">メッセージの配信に失敗しました。</string>
<string name="MessageNotifier_error_delivering_message">メッセージ配信中にエラーがありました。</string>
<string name="MessageNotifier_mark_all_as_read">すべて既読にする</string>
<string name="MessageNotifier_mark_read">既読にする</string>
<string name="MessageNotifier_media_message">メディアーメッセージ</string>
<string name="MessageNotifier_reply">返信</string>
<!--QuickResponseService-->
<string name="QuickResponseService_quick_response_unavailable_when_TextSecure_is_locked">TextSecureがロックされていますので、クイック返信は利用できません!</string>
<string name="QuickResponseService_problem_sending_message">送信メッセージでの問題!</string>
<!--change_passphrase_activity-->
<string name="change_passphrase_activity__old_passphrase">既存のパスワード:</string>
<string name="change_passphrase_activity__new_passphrase">新規のパスワード:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">新規のパスワードを再入力:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">連絡先はありません。</string>
<string name="contact_selection_group_activity__finding_contacts">連絡先を読み込み中…</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">あなたはプッシュサービスに登録していません。</string>
<string name="SingleContactSelectionActivity_updating_directory">ディレクトリを更新しています</string>
<string name="SingleContactSelectionActivity_updating_push_directory">プッシュディレクトリを更新中…</string>
<string name="SingleContactSelectionActivity_contact_photo">連絡先の写真</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">選択</string>
@@ -413,6 +423,7 @@
<string name="conversation_activity__compose_description">メッセージ新規作成</string>
<string name="conversation_activity__emoji_toggle_description">絵文字キーボードを切り替え</string>
<string name="conversation_activity__attachment_thumbnail">添付のサムネイル</string>
<string name="conversation_activity__quick_attachment_drawer_toggle_description">添付ドロワーのトグル</string>
<!--conversation_item-->
<string name="conversation_item__mms_downloading_description">メディアメッセージダウンロード</string>
<string name="conversation_item__mms_image_description">メディアーメッセージ</string>
@@ -434,6 +445,7 @@
<string name="country_selection_fragment__loading_countries">国名を読み込み中...</string>
<string name="country_selection_fragment__search">検索</string>
<!--device_list_fragment-->
<string name="device_list_fragment__no_devices_paired">ペアリングしたデバイスはありません...</string>
<!--log_submit_activity-->
<string name="log_submit_activity__log_fetch_failed">デバッグログの入手に失敗しました。ADBを使ってログの入手は、可能です。</string>
<string name="log_submit_activity__thanks">提出どうもありがとうございます!</string>
@@ -489,6 +501,8 @@
<string name="recipient_preferences__ringtone">着信音</string>
<string name="recipient_preferences__vibrate">振動</string>
<string name="recipient_preferences__block">ブロック</string>
<string name="recipient_preferences__color"></string>
<string name="recipient_preferences__color_for_this_contact">この連絡先の色</string>
<!--registration_activity-->
<string name="registration_activity__textsecure_can_use_instant_messages_to_avoid_sms_charges_when_communicating_with_other_textsecure_users">
あなたの電話番号をTextSecureに接続するための検証。
@@ -498,6 +512,7 @@
<string name="registration_activity__phone_number">電話番号</string>
<string name="registration_activity__register">登録</string>
<string name="registration_activity__registration_will_transmit_some_contact_information_to_the_server_temporariliy">登録にはサーバーへのコンタクト情報の送信が必要です。その情報は保存されません。</string>
<string name="registration_activity__powered_by_twilio">Powered by twilio</string>
<!--registration_problems-->
<string name="registration_problems__some_possible_problems_include">いくつかの問題の可能性があります
原因:</string>
@@ -568,6 +583,7 @@ Wi-Fiに接続している場合、ファイアウォールがTextSecureサー
<string name="AndroidManifest__media_overview">すべての画像</string>
<string name="AndroidManifest__media_overview_named">%1$s とすべての画像</string>
<string name="AndroidManifest__message_details">メッセージの詳細</string>
<string name="AndroidManifest_manage_paired_devices">ペアリングデバイスの管理</string>
<!--arrays.xml-->
<string name="arrays__import_export">インポート/エクスポート</string>
<string name="arrays__my_identity_key">自分の認証キー</string>
@@ -603,7 +619,7 @@ Wi-Fiに接続している場合、ファイアウォールがTextSecureサー
<string name="preferences__change_my_passphrase">パスワードの変更</string>
<string name="preferences__enable_passphrase">パスフレーズが有効</string>
<string name="preferences__passphrase_summary">パスフレーズ %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">メッセージと鍵のローカル暗号化を有効にする</string>
<string name="preferences__enable_lock_screen_for_messages">ロックスクリーンでのメッセージを有効化</string>
<string name="preferences__screen_security">スクリーンセキュリティ</string>
<string name="preferences__screen_security_summary">スクリーンセキュリティ %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">スクリーンショットをアプリ表示の場合防ぐ</string>
@@ -735,7 +751,9 @@ Wi-Fiに接続している場合、ファイアウォールがTextSecureサー
<string name="conversation__menu_leave_group">グループを抜ける</string>
<string name="conversation__menu_delete_thread">スレッドを削除</string>
<string name="conversation__menu_view_media">すべての画像</string>
<string name="conversation__menu_conversation_settings">会話設定</string>
<!--conversation_popup-->
<string name="conversation_popup__menu_expand_popup">ポップアップを拡大</string>
<!--conversation_callable-->
<string name="conversation_add_to_contacts__menu_add_to_contacts">連絡帳に追加</string>
<!--conversation_group_options-->
@@ -777,5 +795,6 @@ Wi-Fiに接続している場合、ファイアウォールがTextSecureサー
<!--transport_selection_list_item-->
<string name="transport_selection_list_item__transport_icon">転送アイコン</string>
<!--quick_attachment_drawer-->
<string name="quick_camera_unavailable">カメラが利用できません</string>
<!--EOF-->
</resources>

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">ಈಗ ಎಲ್ಲಾ ಹಳೆಯ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಿ?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">ನೀವು ಈ ಕ್ಷಣ ಎಲ್ಲಾ ಸಂಭಾಷಣೆಯ ಇತ್ತೀಚಿನ %s ಸಂದೇಶಗಳಿಗೆ ಮಿತಗೊಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</string>
<string name="ApplicationPreferencesActivity_delete">ಅಳಿಸಿಹಾಕು</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">ಶೇಖರಣಾ ಗೂಢಲಿಪೀಕರಣವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
ಎಚ್ಚರಿಕೆ, ಇದು ಎಲ್ಲಾ ಸಂದೇಶಗಳ ಮತ್ತು ಕೀಲಿಗಳ ಶೇಖರಣಾ ಗೂಢಲಿಪೀಕರಣವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.
ಸೆಷನ್ಸ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ, ಆದರೆ ನಿಮ್ಮ ಸಾಧನದ ಭೌತಿಕ ಪ್ರವೇಶದೊಂದಿಗೆ ಯಾರಿಗಾದರೂ ಅವುಗಳನ್ನು ನಿಲುಕಿಸಿಕೊಳ್ಳಲು
ಸಾಧ್ಯವಾಗುತ್ತದೆ.</string>
<string name="ApplicationPreferencesActivity_disable">ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">ಸರ್ವರ್ಗೆ ಸಂಪರ್ಕಿಸುವಾಗ ದೋಷ!</string>
<string name="ApplicationPreferencesActivity_sms_enabled">ಎಸ್.ಎಮ್.ಎಸನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</string>
@@ -46,6 +41,7 @@
<string name="ConfirmIdentityDialog_the_signature_on_this_key_exchange_is_different"> %1$sನ ಗುರುತಿಸುವ ಕೀಲಿಗಳು ಬದಲಾಗಿವೆ. ಇದರ ಆರ್ಥ ನಿಮ್ಮ ಸಂಭಾಷಣೆಯನ್ನು ಯಾರೊ ಕದ್ದು ಕೇಳಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದಾರೆ ಅಥವ %2$s ಟೆಕ್ಸ್ಟ್ ಸೆಕ್ಯೂರನ್ನು ಮರು ಸ್ಥಾಪಿಸಿದ ಕಾರಣ ಹೋಗುರುತಿಸುವ ಕೀಲಿಗಳನ್ನು ಹೊಂದಿದ್ದಾರೆ.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">ನೀವು ಪರಿಶೀಲಿಸಲು ಇಚ್ಛಿಸಬಹುದಾದ ⏎
ಸಂಪರ್ಕ. ⏎</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">ಸಂದೇಶದ ಗಾತ್ರ: %d ಕೆ.ಬಿ</string>
<string name="ConversationItem_expires_s">ಮುಕ್ತಾಯದ ಅವಧಿ: %s</string>
@@ -113,8 +109,10 @@
<string name="ConversationFragment_push">ದತ್ತಾಂಶ (ಟೆಕ್ಸ್ಟ್ ಸೆಕ್ಯೂರ್)</string>
<string name="ConversationFragment_mms">ಎಮ್ ಎಮ್ ಎಸ್</string>
<string name="ConversationFragment_sms">ಎಸ್ ಎಮ್ ಎಸ್</string>
<string name="ConversationFragment_deleting">ಅಳಿಸಲಾಗುತ್ತಿದೆ</string>
<string name="ConversationFragment_deleting_messages">ಸಂದೇಶವನ್ನು ಅಳಿಸಲಾಗುತ್ತಿದೆ...</string>
<!--ConversationListActivity-->
<string name="ConversationListActivity_search">ಹುಡುಕಿ...</string>
<!--ConversationListFragment-->
<string name="ConversationListFragment_delete_threads_question">ಸಂವಾದದ ಎಳೆಗಳನ್ನು ಅಳಿಸು?</string>
<string name="ConversationListFragment_are_you_sure_you_wish_to_delete_all_selected_conversation_threads">ನೀವು ಆಯ್ಕೆ ಮಾಡಲಾದ ಎಲ್ಲಾ ಸಂವಾದವನ್ನು ಎಳೆಗಳನ್ನು ಅಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</string>
@@ -129,6 +127,7 @@
<!--DateUtils-->
<string name="DateUtils_now">ಈಗ</string>
<!--DeviceListActivity-->
<string name="DeviceListActivity_try_again">ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ</string>
<!--DeviceListItem-->
<!--ShareActivity-->
<string name="ShareActivity_share_with">ಜೊತೆ ಹಂಚಿಕೊಳ್ಳಿ </string>
@@ -353,7 +352,6 @@
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d ಸಂದೇಶಗಳನ್ನು %2$d ಸಂಭಾಷಣೆಗಳಲ್ಲಿ.</string>
<string name="MessageNotifier_most_recent_from_s">%1$s ನಿಂದ ಇತ್ತೀಚಿನ</string>
<string name="MessageNotifier_encrypted_message">ಗೂಢಲಿಪೀಕರಣಗೊಂಡ ಸಂದೇಶ...</string>
<string name="MessageNotifier_media_message_with_text">ಬಹುಮಾಧ್ಯಮ ಸಂದೇಶ: %s</string>
<string name="MessageNotifier_no_subject">(ವಿಷಯವಸ್ತು ಇಲ್ಲ)</string>
<string name="MessageNotifier_message_delivery_failed">ಸಂದೇಶ ತಲುಪಿಸಲು ವಿಫಲವಾಗಿದೆ.</string>
@@ -366,14 +364,11 @@
<string name="change_passphrase_activity__old_passphrase">ಹಳೆಯ ಗುಪ್ತಪದ:</string>
<string name="change_passphrase_activity__new_passphrase">ಹೊಸ ಗುಪ್ತಪದ:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">ಹೊಸ ಗುಪ್ತಪದವನ್ನು ಪುನರಾವರ್ತಿಸಿ:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">ಸಂಪರ್ಕಗಳಿಲ್ಲ.</string>
<string name="contact_selection_group_activity__finding_contacts">ಸಂಪರ್ಕಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ ...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">ನೀವು ಪುಶ್ ಸೇವೆಯೊಂದಿಗೆ ನೋಂದಾಯಿಸಿಕೊಂಡಿಲ್ಲ...</string>
<string name="SingleContactSelectionActivity_updating_directory">ಡೈರೆಕ್ಟರಿಯನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ</string>
<string name="SingleContactSelectionActivity_updating_push_directory">ಪುಶ್ ಕೋಶವನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ ...</string>
<string name="SingleContactSelectionActivity_contact_photo">ಸಂಪರ್ಕದ ಛಾಯಾಚಿತ್ರ</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">ಗೆ ಆಯ್ಕೆಮಾಡಿ</string>
@@ -568,7 +563,6 @@
<string name="preferences__change_passphrase">ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸಿ</string>
<string name="preferences__change_my_passphrase">ನನ್ನ ಗುಪ್ತಪದವನ್ನು ಬದಲಿಸು</string>
<string name="preferences__enable_passphrase">ಗುಪ್ತಪದವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">ಸಂದೇಶಗಳ ಮತ್ತು ಕೀಗಳ ಸ್ಥಳೀಯ ಗೂಢಲಿಪೀಕರಣವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಸಕ್ರಿಯಗೊಳಿಸಿ</string>
<string name="preferences__screen_security">ತೆರೆಯ ಸುರಕ್ಷತೆ</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">ಇತ್ತೀಚಿನ ಪಟ್ಟಿಯಲ್ಲಿ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ ಒಳಗೆ ಸ್ಕ್ರೀನ್ ಶಾಟ್ ಬ್ಲಾಕ್ ಮಾಡಿ</string>
<string name="preferences__forget_passphrase_from_memory_after_some_interval">ವಿರಾಮದ ನಂತರ ಸ್ಮರಣೆಯಿಂದ ಗುಪ್ತಪದವನ್ನು ಮರೆತುಬಿಡಿ</string>
@@ -721,6 +715,7 @@
<!--media_preview_activity-->
<string name="media_preview_activity__image_content_description">ಚಿತ್ರ ಮುನ್ನೋಟ</string>
<!--Trimmer-->
<string name="trimmer__deleting">ಅಳಿಸಲಾಗುತ್ತಿದೆ</string>
<string name="trimmer__deleting_old_messages">ಹಳೆಯ ಸಂದೇಶವನ್ನು ಅಳಿಸಲಾಗುತ್ತಿದೆ...</string>
<string name="trimmer__old_messages_successfully_deleted">ಹಳೆಯ ಸಂದೇಶಗಳನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅಳಿಸಲಾಗಿದೆ</string>
<!--transport_selection_list_item-->

View File

@@ -12,8 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">지금 모든 이전 메시지를 삭제하시겠습니까?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">지금 모든 대화를 최근 메시지 %s개로 줄이시겠습니까?</string>
<string name="ApplicationPreferencesActivity_delete">삭제</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">저장소 암호화를 사용 중지하시겠습니까?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">경고: 이렇게 하면 모든 메시지와 키의 저장소 암호화가 사용 중지됩니다. 암호화된 세션들은 계속 기능하지만, 기기를 통해 누구나 그 세션들에 접근할 수도 있습니다.</string>
<string name="ApplicationPreferencesActivity_disable">사용 중지</string>
<string name="ApplicationPreferencesActivity_unregistering">TextSecure 메시지 서비스 탈퇴</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">TextSecure 메시지 서비스를 탈퇴 중…</string>
@@ -49,6 +47,8 @@
<string name="ConfirmIdentityDialog_the_signature_on_this_key_exchange_is_different">%1$s님의 인증 키가 변경되었습니다. 이 경우 누군가 통신을 가로채려고 하거나 %2$s님께서 TextSecure를 다시 설치하여 새 인증 키가 되었습니다.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">인증 키를 확인할 것을 권장합니다.</string>
<string name="ConfirmIdentityDialog_accept">수락</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">%s에 보내기</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">메시지 크기: %dKB</string>
<string name="ConversationItem_expires_s">만료일: %s</string>
@@ -358,7 +358,7 @@
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">대화 %2$d개에 있는 메시지 %1$d개</string>
<string name="MessageNotifier_most_recent_from_s">%1$s님에게서 최근 메시지</string>
<string name="MessageNotifier_encrypted_message">암호화된 메시지</string>
<string name="MessageNotifier_locked_message">잠겨 있는 메시지</string>
<string name="MessageNotifier_media_message_with_text">미디어 메시지: %s</string>
<string name="MessageNotifier_no_subject">(제목 없음)</string>
<string name="MessageNotifier_message_delivery_failed">메시지 전송 실패</string>
@@ -375,14 +375,11 @@
<string name="change_passphrase_activity__old_passphrase">기존 암호:</string>
<string name="change_passphrase_activity__new_passphrase">새 암호:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">새 암호 다시 입력:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">연락처 없음</string>
<string name="contact_selection_group_activity__finding_contacts">주소록 로드 중…</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">푸시 서비스에 가입되지 않음</string>
<string name="SingleContactSelectionActivity_updating_directory">연락처 목록 업데이트</string>
<string name="SingleContactSelectionActivity_updating_push_directory">푸시 메시지를 사용하는 연락처 목록 업데이트 중…</string>
<string name="SingleContactSelectionActivity_contact_photo">연락처 사진</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">선택:</string>
@@ -402,6 +399,7 @@
<string name="conversation_activity__compose_description">메시지 작성</string>
<string name="conversation_activity__emoji_toggle_description">이모티콘 키보드 전환</string>
<string name="conversation_activity__attachment_thumbnail">첨부파일 미리보기 이미지</string>
<string name="conversation_activity__quick_attachment_drawer_toggle_description">첨부 창 전환</string>
<!--conversation_item-->
<string name="conversation_item__mms_downloading_description">미디어 메시지 다운로드 중</string>
<string name="conversation_item__mms_image_description">미디어 메시지</string>
@@ -577,7 +575,6 @@
<string name="preferences__change_my_passphrase">암호 변경</string>
<string name="preferences__enable_passphrase">암호 사용</string>
<string name="preferences__passphrase_summary">암호 %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">저장된 메시지 및 키 암호화 사용</string>
<string name="preferences__screen_security">화면 보안</string>
<string name="preferences__screen_security_summary">화면 보안 %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">최근 사용 목록/개요 및 앱 안에서 스크린샷 차단</string>
@@ -706,6 +703,7 @@
<string name="conversation__menu_leave_group">그룹 나가기</string>
<string name="conversation__menu_delete_thread">대화 삭제</string>
<string name="conversation__menu_view_media">전체 이미지</string>
<string name="conversation__menu_conversation_settings">대화 설정</string>
<!--conversation_popup-->
<string name="conversation_popup__menu_expand_popup">팝업 펼치기</string>
<!--conversation_callable-->
@@ -749,5 +747,6 @@
<!--transport_selection_list_item-->
<string name="transport_selection_list_item__transport_icon">전송 아이콘</string>
<!--quick_attachment_drawer-->
<string name="quick_camera_unavailable">카메라 사용할 수 없음</string>
<!--EOF-->
</resources>

View File

@@ -12,12 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Избришете ги сите стари пораки?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Дали сте сигурни дека сакате да се скратат сите теми на разговор на %s од најновите пораки?</string>
<string name="ApplicationPreferencesActivity_delete">Избриши</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Оневозможи енкрипција на локацијата за трајно снимање?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Внимание, ова ќе го оневозможи шифрирањето на локацијата за трајно снимање за сите пораки и клучеви. Вашите шифрирани
сесии ќе продолжат да функционираат, но секој со физички пристап до вашиот уред ќе може да
пристапи до нив.
</string>
<string name="ApplicationPreferencesActivity_disable">Оневозможи</string>
<string name="ApplicationPreferencesActivity_unregistering">Одјавување</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Одвјавување од TextSecure пораки...</string>
@@ -57,6 +51,7 @@
Ова може или да значи дека некој сака да ја пресретне вашата комуникација, или пак %2$s ја преинсталирал TextSecure и сега има нов клуч.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Овој контакт би требало да го верфивикувате.</string>
<string name="ConfirmIdentityDialog_accept">Прифати</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Големина на порака: %d KB</string>
<string name="ConversationItem_expires_s">Истекува: %s</string>
@@ -388,7 +383,6 @@
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d пораки во %2$d теми</string>
<string name="MessageNotifier_most_recent_from_s">Најнови од: %1$s</string>
<string name="MessageNotifier_encrypted_message">Шифрирана порака...</string>
<string name="MessageNotifier_media_message_with_text">Медиа порака: %s</string>
<string name="MessageNotifier_no_subject">(Без наслов)</string>
<string name="MessageNotifier_message_delivery_failed">Доставувањето на пораката е неуспешно.</string>
@@ -401,14 +395,11 @@
<string name="change_passphrase_activity__old_passphrase">СТАРА ЛОЗИНКА:</string>
<string name="change_passphrase_activity__new_passphrase">НОВА ЛОЗИНКА:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">ПОВТОРЕТЕ ЈА НОВАТА ЛОЗИНКА:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Нема контакти.</string>
<string name="contact_selection_group_activity__finding_contacts">Контактите се вчитуваат...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Не сте регистрирани за TextSecure услугата.</string>
<string name="SingleContactSelectionActivity_updating_directory">Ажурирање</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Ажурирање на контакт листата...</string>
<string name="SingleContactSelectionActivity_contact_photo">Слика на контакт</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Изберете за</string>
@@ -631,7 +622,6 @@ TextSecure автоматски ќе го провери вашиот број
<string name="preferences__change_my_passphrase">Променете ја вашата лозинка</string>
<string name="preferences__enable_passphrase">Овозможете лозинка</string>
<string name="preferences__passphrase_summary">Лозинка %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Овозможете локално шифрирање на пораките и клучевите</string>
<string name="preferences__screen_security">Сигурност на екранот</string>
<string name="preferences__screen_security_summary">Сигурност на екранот %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Оневозможете screenshots во листата на последни апликации и во самата апликација</string>

View File

@@ -19,6 +19,7 @@
<string name="AttachmentTypeSelectorAdapter_audio">အသံ</string>
<!--BlockedContactsActivity-->
<!--ConfirmIdentityDialog-->
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">စာတိုအရွယ်အစား: %d KB</string>
<string name="ConversationItem_expires_s">သက်တမ်းကုန်: %s</string>
@@ -121,7 +122,6 @@
<string name="ApplicationMigrationService_import_in_progress">သွင်းယူနေ</string>
<!--KeyCachingService-->
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">စာဝှက်စနစ်ဖြင့် အကြောင်းကြားချက်...</string>
<string name="MessageNotifier_message_delivery_failed">အကြောင်းကြားချက်ပို့လွတ်ခြင်းမအောင်မြင်</string>
<string name="MessageNotifier_failed_to_deliver_message">အကြောင်းကြားချက်ပို့လွတ်ရန်မအောင်မြင်</string>
<string name="MessageNotifier_error_delivering_message">အကြောင်းကြားချက်ပို့လွတ်စဉ်အမှား</string>
@@ -130,8 +130,8 @@
<string name="change_passphrase_activity__old_passphrase">စကားဝှက်အဟောင်း:</string>
<string name="change_passphrase_activity__new_passphrase">စကားဝှက်အသစ်:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">စကားဝှက်အသစ်အားနောက်တစ်ကြိမ်:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">အဆက်အသွယ်မရှိ</string>
<!--single_contact_selection_activity-->
<!--ContactSelectionListFragment-->

View File

@@ -12,9 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Nu alle oude berichten verwijderen?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Weet je zeker dat je alle gesprekken wil inkorten tot de laatste %s berichten?</string>
<string name="ApplicationPreferencesActivity_delete">Verwijderen</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Opslagversleuteling uitschakelen?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Let op, dit schakelt opslagversleuteling uit voor alle berichten en sleutels. Je versleutelde sessies zullen blijven werken, maar iedereen met fysieke toegang tot je apparaat zal er toegang toe hebben.</string>
<string name="ApplicationPreferencesActivity_disable">Uitschakelen</string>
<string name="ApplicationPreferencesActivity_unregistering">Af aan het melden</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Aan het afmelden voor TextSecure berichten...</string>
@@ -52,6 +49,8 @@ Indien je in de toekomst weer TextSecure berichten wilt gebruiken zul je je tele
<string name="ConfirmIdentityDialog_the_signature_on_this_key_exchange_is_different">De identificerende sleutel van %1$s is veranderd. Dit kan betekenen dat iemand probeert je communicatie te onderscheppen óf %2$s heeft simpelweg TextSecure opnieuw geïnstalleerd en heeft nu een nieuwe identiteitssleutel.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Je wilt wellicht dit contact verifiëren.</string>
<string name="ConfirmIdentityDialog_accept">Accepteren</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Bericht sturen naar %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Berichtgrootte: %d KB</string>
<string name="ConversationItem_expires_s">Verloopt: %s</string>
@@ -383,7 +382,7 @@ Bericht ontvangen met een onbekende identiteitssleutel. Klik om te verwerken en
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d berichten in %2$d gesprekken</string>
<string name="MessageNotifier_most_recent_from_s">Meest recente van: %1$s</string>
<string name="MessageNotifier_encrypted_message">Versleuteld bericht...</string>
<string name="MessageNotifier_locked_message">Vergrendeld bericht...</string>
<string name="MessageNotifier_media_message_with_text">Mediabericht: %s</string>
<string name="MessageNotifier_no_subject">(Geen onderwerp)</string>
<string name="MessageNotifier_message_delivery_failed">Berichtaflevering mislukt.</string>
@@ -400,14 +399,11 @@ Bericht ontvangen met een onbekende identiteitssleutel. Klik om te verwerken en
<string name="change_passphrase_activity__old_passphrase">Oud wachtwoord:</string>
<string name="change_passphrase_activity__new_passphrase">Nieuw wachtwoord:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">Herhaal nieuw wachtwoord:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Geen contacten.</string>
<string name="contact_selection_group_activity__finding_contacts">Contacten laden...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Je bent niet geregistreerd bij de push service...</string>
<string name="SingleContactSelectionActivity_updating_directory">Contactpersonen updaten</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Pushcontacten aan het updaten...</string>
<string name="SingleContactSelectionActivity_contact_photo">Contactfoto</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Selecteer voor</string>
@@ -630,7 +626,7 @@ TextSecure heeft te lang moeten wachten op het binnenkomen van de verificatie-SM
<string name="preferences__change_my_passphrase">Mijn wachtwoord veranderen</string>
<string name="preferences__enable_passphrase">Wachtwoord inschakelen</string>
<string name="preferences__passphrase_summary">Wachtwoord %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Lokale versleuteling van berichten en sleutels inschakelen</string>
<string name="preferences__enable_lock_screen_for_messages">Vergrendeling inschakelen voor berichten</string>
<string name="preferences__screen_security">Schermbeveiliging</string>
<string name="preferences__screen_security_summary">Schermbeveiliging %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Screenshots onmogelijk maken in deze app en de recente lijst</string>

View File

@@ -12,9 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Slette alle gamle meldinger nå?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Er du sikker på at du ønsker å umiddelbart trimme alle samtaletrådene til de siste %s meldinger?</string>
<string name="ApplicationPreferencesActivity_delete">Slett</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Deaktivere kryptert lagring?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Advarsel! Dette vil deaktivere kryptert lagring av alle meldinger og nøkler. Dine krypterte sesjoner vil fortsette å fungere, men alle med fysisk tilgang til enheten din vil kunne få tilgang til dem.</string>
<string name="ApplicationPreferencesActivity_disable">Deaktiver</string>
<string name="ApplicationPreferencesActivity_unregistering">Avregistrerer</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Avregistrerer fra TextSecure meldinger...</string>
@@ -53,6 +50,8 @@ Om du vil benytte TextSecure meldinger igjen i fremtiden må du registrere telef
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Du bør verifisere
denne kontakten.</string>
<string name="ConfirmIdentityDialog_accept">Godta</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Melding %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Meldingsstørrelse: %d KB</string>
<string name="ConversationItem_expires_s">Utløper: %s</string>
@@ -63,8 +62,8 @@ denne kontakten.</string>
<string name="ConversationItem_received_key_exchange_message_click_to_process">Nøkkelutveksling melding mottatt, klikk for å behandle.</string>
<string name="ConversationItem_group_action_left">%1$s har forlatt gruppen.</string>
<string name="ConversationItem_click_for_details">Klikk for detaljer</string>
<string name="ConversationItem_click_to_approve_unencrypted">Tast for usikret \"fallback\"</string>
<string name="ConversationItem_click_to_approve_unencrypted_sms_dialog_title">\"Fallback\" til ukryptert SMS?</string>
<string name="ConversationItem_click_to_approve_unencrypted">Klikk for usikret «fallback»</string>
<string name="ConversationItem_click_to_approve_unencrypted_sms_dialog_title">«Fallback» til ukryptert SMS?</string>
<string name="ConversationItem_click_to_approve_unencrypted_mms_dialog_title">Benytte ukryptert MMS som alternativ?</string>
<string name="ConversationItem_click_to_approve_unencrypted_dialog_message">Denne meldingen vil <b>ikke</b> bli kryptert fordi mottageren ikke lenger er en TextSecure bruker.\n\nSend ukryptert melding?</string>
<string name="ConversationItem_unable_to_open_media">Finner ikke en applikasjon som kan åpne dette mediet.</string>
@@ -142,7 +141,7 @@ denne kontakten.</string>
<string name="DateUtils_now"></string>
<string name="DateUtils_minutes_ago">%d min</string>
<!--DeviceListActivity-->
<string name="DeviceListActivity_disconnect_s">Frakoble \'%s\'?</string>
<string name="DeviceListActivity_disconnect_s">Frakoble «%s»?</string>
<string name="DeviceListActivity_by_disconnecting_this_device_it_will_no_longer_be_able_to_send_or_receive">Ved å frakoble denne enheten vil den ikke lenger være i stand til å sende eller motta meldinger.</string>
<string name="DeviceListActivity_network_connection_failed">Nettverksforbindelse feilet...</string>
<string name="DeviceListActivity_try_again">Prøv igjen</string>
@@ -383,7 +382,7 @@ Mottatt melding med ukjent ID nøkkel. Klikk for å prosessere og vise.</string>
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d meldinger i %2$d samtaler</string>
<string name="MessageNotifier_most_recent_from_s">Nyeste fra: %1$s</string>
<string name="MessageNotifier_encrypted_message">Kryptert melding...</string>
<string name="MessageNotifier_locked_message">Låst melding...</string>
<string name="MessageNotifier_media_message_with_text">Media melding: %s</string>
<string name="MessageNotifier_no_subject">(Mangler emne)</string>
<string name="MessageNotifier_message_delivery_failed">Levering av meldingen mislyktes.</string>
@@ -400,14 +399,11 @@ Mottatt melding med ukjent ID nøkkel. Klikk for å prosessere og vise.</string>
<string name="change_passphrase_activity__old_passphrase">Gammelt passord:</string>
<string name="change_passphrase_activity__new_passphrase">Nytt passord:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">Gjenta nytt passord:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Ingen kontakter.</string>
<string name="contact_selection_group_activity__finding_contacts">Laster kontakter...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Du er ikke registrert hos \"push\" tjenesten...</string>
<string name="SingleContactSelectionActivity_updating_directory">Oppdaterer katalog</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Oppdaterer \"push\" katalogen...</string>
<string name="SingleContactSelectionActivity_contact_photo">Kontaktbilde</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Velg for</string>
@@ -489,7 +485,7 @@ Importer en klartekst backup kompatibel med \'SMSBackup And Restore\'.</string>
<!--GroupUtil-->
<string name="GroupUtil_joined_the_group">%1$s sluttet seg til gruppen.</string>
<string name="GroupUtil_group_updated">Gruppen er oppdatert.</string>
<string name="GroupUtil_title_is_now">Tittelen er nå \'%1$s\'.</string>
<string name="GroupUtil_title_is_now">Tittelen er nå «%1$s».</string>
<!--prompt_passphrase_activity-->
<string name="prompt_passphrase_activity__unlock">Lås opp</string>
<!--prompt_mms_activity-->
@@ -625,10 +621,10 @@ feilet.</string>
<string name="preferences__change_my_passphrase">Velg et nytt passord</string>
<string name="preferences__enable_passphrase">Aktiver passord</string>
<string name="preferences__passphrase_summary">Passord %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Aktiver lokal kryptering av meldinger og nøkler</string>
<string name="preferences__enable_lock_screen_for_messages">Aktiver skjermlås for meldinger</string>
<string name="preferences__screen_security">Skjermsikkerhet</string>
<string name="preferences__screen_security_summary">Skjermsikkerhet %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Blokker skjermbilde i \"siste applikasjoner\" listen og i appliksjonen</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Blokker skjermbilde i listen over siste applikasjoner og inni applikasjonen</string>
<string name="preferences__forget_passphrase_from_memory_after_some_interval">Fjern passord fra minnet etter et gitt intervall</string>
<string name="preferences__timeout_passphrase">Passordtimeout</string>
<string name="preferences__pref_timeout_interval_dialogtitle">Velg passord timeout</string>
@@ -672,7 +668,7 @@ feilet.</string>
<string name="preferences__custom">Tilpasset</string>
<string name="preferences__advanced">Avansert</string>
<string name="preferences__privacy">Personvern</string>
<string name="preferences__mms_user_agent">MMS \"User Agent\"</string>
<string name="preferences__mms_user_agent">MMS «User Agent»</string>
<string name="preferences__advanced_mms_access_point_names">Manuelle MMS instillinger</string>
<string name="preferences__enable_manual_mms">Bruk manuelle MMS innstillinger</string>
<string name="preferences__override_system_mms_settings">Overstyr systeminnstillingene for MMS med informasjonen under.</string>
@@ -698,7 +694,7 @@ feilet.</string>
<string name="preferences__language_summary">Språk %s</string>
<string name="preferences__textsecure_messages">TextSecure meldinger</string>
<string name="preferences__use_the_data_channel_for_communication_with_other_textsecure_users">
Gratis og private meldinger til TextSecure og Signal brukere
Gratis og private meldinger til TextSecure- og Signal-brukere
</string>
<string name="preferences__submit_debug_log">Send debug logg</string>
<string name="preferences__support_wifi_calling">\'WiFi anrop\' kompatibilititetsmodus</string>

View File

@@ -12,9 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Usunąć wszystkie stare wiadomości?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Czy na pewno chcesz przyciąć wszystkie wątki rozmów do %s najnowszych wiadomości?</string>
<string name="ApplicationPreferencesActivity_delete">Usuń</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Wyłączyć lokalne szyfrowanie?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Uwaga, szyfrowanie wszystkich Twoich wiadomości i kluczy zostanie wyłączone. Twoje szyfrowane sesje będą dalej funkcjonować, jednak każdy z fizycznym dostępem do Twojego telefonu będzie mógł uzyskać dostęp do Twoich wiadomości.</string>
<string name="ApplicationPreferencesActivity_disable">Wyłącz</string>
<string name="ApplicationPreferencesActivity_unregistering">Wyrejestrowanie </string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Trwa wyrejestrowanie od używania wiadomości TextSecure</string>
@@ -54,6 +51,7 @@ Aby ponownie zacząć używać wiadomości TextSecure, będziesz musiał/a ponow
ten kontakt.
</string>
<string name="ConfirmIdentityDialog_accept">Akceptuj</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Rozmiar wiadomości: %d KB </string>
<string name="ConversationItem_expires_s">Wygasa: %s</string>
@@ -384,7 +382,6 @@ Otrzymano wiadomość z nieznanym kluczem tożsamości. Kliknij aby przetworzyć
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d wiadomości w %2$d wątkach</string>
<string name="MessageNotifier_most_recent_from_s">Najnowsza z: %1$s</string>
<string name="MessageNotifier_encrypted_message">Szyfrowana wiadomość...</string>
<string name="MessageNotifier_media_message_with_text">Wiadomość multimedialna: %s</string>
<string name="MessageNotifier_no_subject">(Brak tematu)</string>
<string name="MessageNotifier_message_delivery_failed">Nie udało się dostarczyć wiadomości.</string>
@@ -400,14 +397,11 @@ Otrzymano wiadomość z nieznanym kluczem tożsamości. Kliknij aby przetworzyć
<string name="change_passphrase_activity__old_passphrase">STARE HASŁO:</string>
<string name="change_passphrase_activity__new_passphrase">NOWE HASŁO:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">POWTÓRZ NOWE HASŁO:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Brak kontaktów.</string>
<string name="contact_selection_group_activity__finding_contacts">Ładowanie listy kontaktów...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Nie jesteś zarejestrowany w usłudze push...</string>
<string name="SingleContactSelectionActivity_updating_directory">Aktualizowanie katalogu</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Aktualizowanie katalogu push</string>
<string name="SingleContactSelectionActivity_contact_photo">Obrazek kontaktu</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Wybierz dla</string>
@@ -618,7 +612,6 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.</string>
<string name="preferences__change_my_passphrase">Zmień moje hasło</string>
<string name="preferences__enable_passphrase">Włącz hasło</string>
<string name="preferences__passphrase_summary">Hasło %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Włącz lokalne szyfrowanie wiadomości i kluczy</string>
<string name="preferences__screen_security">Ochrona ekranu</string>
<string name="preferences__screen_security_summary">Ochrona ekranu %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Blokuj rzuty ekranu w obecnej liście oraz w aplikacji</string>

View File

@@ -12,12 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Excluir todas as mensagens antigas agora?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Tem certeza que deseja manter apenas as %s mensagens mais recentes?</string>
<string name="ApplicationPreferencesActivity_delete">Excluir</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Desabilitar criptografia de armazenamento?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Atenção, isto irá desabilitar a criptografia de armazenamento para todas as mensagens e chaves. Suas sessões
criptografadas continuarão funcionando, mas qualquer um com acesso físico ao seu aparelho
conseguirá acessá-las.
</string>
<string name="ApplicationPreferencesActivity_disable">Desabilitar</string>
<string name="ApplicationPreferencesActivity_unregistering">Descadastrar</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Descadastrando de mensagens TextSecure...</string>
@@ -62,6 +56,8 @@
este contato.
</string>
<string name="ConfirmIdentityDialog_accept">Aceitar</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Mensagem %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Tamanho da mensagem: %d KB</string>
<string name="ConversationItem_expires_s">Expira: %s</string>
@@ -415,7 +411,7 @@ Tem certeza que deseja fazer isto?</string>
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d mensagens em %2$d conversas</string>
<string name="MessageNotifier_most_recent_from_s">Mais recente de: %1$s</string>
<string name="MessageNotifier_encrypted_message">Mensagem criptografada...</string>
<string name="MessageNotifier_locked_message">Mensagem trancada...</string>
<string name="MessageNotifier_media_message_with_text">Mensagem multimídia: %s</string>
<string name="MessageNotifier_no_subject">(Sem assunto)</string>
<string name="MessageNotifier_message_delivery_failed">Envio de mensagem falhou.</string>
@@ -432,14 +428,11 @@ Tem certeza que deseja fazer isto?</string>
<string name="change_passphrase_activity__old_passphrase">Frase-chave anterior:</string>
<string name="change_passphrase_activity__new_passphrase">Frase-chave nova:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">Repetir a frase-chave nova:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Sem contactos.</string>
<string name="contact_selection_group_activity__finding_contacts">Carregando contatos...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Você não está cadastrado no serviço push...</string>
<string name="SingleContactSelectionActivity_updating_directory">Atualizando diretório</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Atualizando diretório push...</string>
<string name="SingleContactSelectionActivity_contact_photo">Foto do contato</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Selecionar para</string>
@@ -527,7 +520,7 @@ Tem certeza que deseja fazer isto?</string>
<string name="GroupUtil_group_updated">Grupo atualizado.</string>
<string name="GroupUtil_title_is_now">O título agora é \'%1$s\'.</string>
<!--prompt_passphrase_activity-->
<string name="prompt_passphrase_activity__unlock">Desbloquear</string>
<string name="prompt_passphrase_activity__unlock">Destrancar</string>
<!--prompt_mms_activity-->
<string name="prompt_mms_activity__textsecure_requires_mms_settings_to_deliver_media_and_group_messages">TextSecure precisa de configurações MMS para transmitir mídia e mensagens de grupo através da sua operadora. Seu aparelho não disponibiliza essa informação, o que pode ocorrer em aparelhos bloqueados ou com configurações restritivas.</string>
<string name="prompt_mms_activity__to_send_media_and_group_messages_click_ok">Para enviar mídia e mensagens de grupo, clique \'OK\' e complete as configurações pedidas. As configurações MMS da sua operadora geralmente podem ser encontradas procurando por \'operadora APN\'. Você só precisará fazer isto uma vez.</string>
@@ -680,7 +673,7 @@ falhou.</string>
<string name="preferences__change_my_passphrase">Mudar a minha frase-chave</string>
<string name="preferences__enable_passphrase">Habilitar frase-chave</string>
<string name="preferences__passphrase_summary">Frase-chave %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Habilitar criptografia local de mensagens e chaves</string>
<string name="preferences__enable_lock_screen_for_messages">Habilitar tela de bloqueio para mensagens</string>
<string name="preferences__screen_security">Segurança da tela</string>
<string name="preferences__screen_security_summary">Segurança de tela %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Bloquear capturas de tela na lista de recentes e dentro do app</string>

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Apagar todas as mensagens antigas?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Tem certeza que deseja manter apenas as %s mensagens mais recentes?</string>
<string name="ApplicationPreferencesActivity_delete">Apagar</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Desactivar cifra de armazenamento?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Atenção, isto desativa a cifra de armazenamento para todas as mensagens e chaves.
As suas sessões continuam cifradas, mas qualquer pessoa com acesso físico ao dispositivo
terá acesso ás mensagens e chaves.</string>
<string name="ApplicationPreferencesActivity_disable">Desactivar</string>
<string name="ApplicationPreferencesActivity_unregistering">A eliminar o registo...</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">A eliminar o registo de mensagens TextSexure...</string>
@@ -59,6 +54,8 @@ que %2$s reinstalou TextSecure e tem agora uma nova chave de identidade.
</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Pode ser desejável verificar este contracto.</string>
<string name="ConfirmIdentityDialog_accept">Aceitar</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Mensagem %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Tamanho da mensagem: %d KB</string>
<string name="ConversationItem_expires_s">Expira: %s</string>
@@ -403,7 +400,7 @@ Recebida mensagem com chave de identidade desconhecida. Clique para processar e
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d mensagens em %2$d conversas</string>
<string name="MessageNotifier_most_recent_from_s">Mais recente de: %1$s</string>
<string name="MessageNotifier_encrypted_message">Mensagem cifrada...</string>
<string name="MessageNotifier_locked_message">Mensagem bloqueada...</string>
<string name="MessageNotifier_media_message_with_text">Mensagem media: %s</string>
<string name="MessageNotifier_no_subject">(Sem Assunto)</string>
<string name="MessageNotifier_message_delivery_failed">A remessa de mensagem falhou.</string>
@@ -420,14 +417,11 @@ Recebida mensagem com chave de identidade desconhecida. Clique para processar e
<string name="change_passphrase_activity__old_passphrase">Frase-chave anterior:</string>
<string name="change_passphrase_activity__new_passphrase">Frase-chave nova:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">Repetir a frase-chave nova:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Sem contactos.</string>
<string name="contact_selection_group_activity__finding_contacts">A carregar contactos…</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Não está registado com o serviço push...</string>
<string name="SingleContactSelectionActivity_updating_directory">Actualizando directório</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Actualizando o directório push...</string>
<string name="SingleContactSelectionActivity_contact_photo">Foto de Contacto</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Seleccionar para</string>
@@ -659,7 +653,7 @@ falhou.
<string name="preferences__change_my_passphrase">Mudar a minha frase-chave</string>
<string name="preferences__enable_passphrase">Activar frase-chave</string>
<string name="preferences__passphrase_summary">Frase-chave %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Activar cifra local para as mensagens e chaves</string>
<string name="preferences__enable_lock_screen_for_messages">Habilitar ecrã de bloqueio para mensagens</string>
<string name="preferences__screen_security">Segurança de ecrã</string>
<string name="preferences__screen_security_summary">Segurança de ecrã %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Bloquear captura de ecrã na lista de recentes e dentro da aplicação</string>

View File

@@ -12,10 +12,8 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Şterge toate mesajele vechi acum?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Eşti sigur că doreşti să scurtezi toate conversaţiile la %s cele mai recente mesaje?</string>
<string name="ApplicationPreferencesActivity_delete">Şterge</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Dezactivează stocarea criptată?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Atenție, acestă acțiune va dezactiva stocarea criptată a tuturor mesajelor și cheilor. Sesiunile actuale criptate vor continua să funcționeze, dar oricine care are acces la dispozitiv va putea să le acceseze.</string>
<string name="ApplicationPreferencesActivity_disable">Dezactivează</string>
<string name="ApplicationPreferencesActivity_disable_textsecure_messages">Dezactivez mesajele TextSecure?</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">Eroare de conectare cu serverul!</string>
<string name="ApplicationPreferencesActivity_sms_enabled">SMS activat</string>
<string name="ApplicationPreferencesActivity_touch_to_change_your_default_sms_app">Atingeţi pentru a schimba aplicaţia SMS implicită</string>
@@ -35,13 +33,18 @@ Atenție, acestă acțiune va dezactiva stocarea criptată a tuturor mesajelor
<!--AttchmentManager-->
<string name="AttachmentManager_cant_open_media_selection">Nu pot găsi o aplicație pentru selecție media.</string>
<!--AttachmentTypeSelectorAdapter-->
<string name="AttachmentTypeSelectorAdapter_take_photo">Fă o poză</string>
<string name="AttachmentTypeSelectorAdapter_picture">Imagine</string>
<string name="AttachmentTypeSelectorAdapter_video">Video</string>
<string name="AttachmentTypeSelectorAdapter_audio">Audio</string>
<string name="AttachmentTypeSelectorAdapter_contact">Informații contact</string>
<!--BlockedContactsActivity-->
<string name="BlockedContactsActivity_blocked_contacts">Contacte blocate</string>
<!--ConfirmIdentityDialog-->
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Probabil ca doresti sa verifici aceasta persoana.</string>
<string name="ConfirmIdentityDialog_accept">Acceptă</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Mesaj %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Marimea mesajului: %d KB</string>
<string name="ConversationItem_expires_s">Expira in: %s</string>
@@ -91,6 +94,9 @@ Atenție, acestă acțiune va dezactiva stocarea criptată a tuturor mesajelor
<string name="ConversationActivity_mms_not_supported_title">MMS-ul nu este suportat</string>
<string name="ConversationActivity_mms_not_supported_message">Acest mesaj nu poate fi trimis deoarece operatorul de telefonie mobilă nu suportă MMS.</string>
<string name="ConversationActivity_specify_recipient">Te rog alege un contact</string>
<string name="ConversationActivity_unblock_question">Deblochez ?</string>
<string name="ConversationActivity_are_you_sure_you_want_to_unblock_this_contact">Sunteți sigur că doriți deblocarea acestui contact?</string>
<string name="ConversationActivity_unblock">Deblochează</string>
<!--ConversationFragment-->
<string name="ConversationFragment_message_details">Detalii mesaj</string>
<string name="ConversationFragment_transport_s_sent_received_s">Transport: %1$s\nTrimis/Primit: %2$s</string>
@@ -107,8 +113,10 @@ Atenție, acestă acțiune va dezactiva stocarea criptată a tuturor mesajelor
<string name="ConversationFragment_push">Date (TextSecure)</string>
<string name="ConversationFragment_mms">MMS</string>
<string name="ConversationFragment_sms">SMS</string>
<string name="ConversationFragment_deleting">Se șterge</string>
<string name="ConversationFragment_deleting_messages">Se șterg mesajele...</string>
<!--ConversationListActivity-->
<string name="ConversationListActivity_search">Caută...</string>
<!--ConversationListFragment-->
<string name="ConversationListFragment_delete_threads_question">Şterg conversaţiile?</string>
<string name="ConversationListFragment_are_you_sure_you_wish_to_delete_all_selected_conversation_threads">Eşti sigur că doreşti ştergerea TUTUROR conversaţiilor selectate?</string>
@@ -122,8 +130,14 @@ Atenție, acestă acțiune va dezactiva stocarea criptată a tuturor mesajelor
<string name="CustomDefaultPreference_none">Niciuna</string>
<!--DateUtils-->
<string name="DateUtils_now">Acum</string>
<string name="DateUtils_minutes_ago">%d min</string>
<!--DeviceListActivity-->
<string name="DeviceListActivity_disconnect_s">Deconectez \'%s\'?</string>
<string name="DeviceListActivity_try_again">Încearcă din nou</string>
<!--DeviceListItem-->
<string name="DeviceListItem_unnamed_device">Dispozitiv fără nume</string>
<string name="DeviceListItem_created_s">S-a creat %s</string>
<string name="DeviceListItem_last_active_s">Ultima oară activ %s</string>
<!--ShareActivity-->
<string name="ShareActivity_share_with">Partajează cu</string>
<!--ExportFragment-->
@@ -170,6 +184,7 @@ Restaurarea unui backup criptat va înlocui complet cheile existente, setările
<string name="ImportFragment_import_plaintext_backup">Importă backup necriptat?</string>
<string name="ImportFragment_this_will_import_messages_from_a_plaintext_backup">Această acțiune va importa mesajele din backup-ul necriptat. Dacă ați mai importat acest backup atunci importarea curentă va crea mesaje duplicate. </string>
<string name="ImportFragment_importing">Se importă</string>
<string name="ImportFragment_import_plaintext_backup_elipse">Se importă un backup necriptat...</string>
<string name="ImportFragment_no_plaintext_backup_found">Nu a fost găsit nici un backup text!</string>
<string name="ImportFragment_error_importing_backup">Eroare la importul backup-ului!</string>
<string name="ImportFragment_import_complete">Import complet!</string>
@@ -205,6 +220,7 @@ Restaurarea unui backup criptat va înlocui complet cheile existente, setările
- Citirea tuturor mesajelor
\n- Trimiterea mesajelor în numele tău
</string>
<string name="DeviceProvisioningActivity_content_progress_title">Se adaugă dispozitivul</string>
<string name="DeviceProvisioningActivity_content_progress_content">Se adaugă un dispozitiv nou...</string>
<string name="DeviceProvisioningActivity_content_progress_success">Dispozitiv adăugat!</string>
<string name="DeviceProvisioningActivity_content_progress_no_device">Nu a fost gasit niciun dispozitiv.</string>
@@ -223,6 +239,13 @@ Restaurarea unui backup criptat va înlocui complet cheile existente, setările
<string name="RatingManager_no_thanks">Nu mulţumesc</string>
<string name="RatingManager_later">Mai târziu</string>
<!--RecipientPreferencesActivity-->
<string name="RecipientPreferenceActivity_block_this_contact_question">Blochez acest contact?</string>
<string name="RecipientPreferenceActivity_block">Blochează</string>
<string name="RecipientPreferenceActivity_unblock_this_contact_question">Deblochez acest contact?</string>
<string name="RecipientPreferenceActivity_are_you_sure_you_want_to_unblock_this_contact">Sunteți sigur că doriți deblocarea acestui contact?</string>
<string name="RecipientPreferenceActivity_unblock">Deblochează</string>
<string name="RecipientPreferenceActivity_enabled">Activat</string>
<string name="RecipientPreferenceActivity_disabled">Dezactivat</string>
<!--RegistrationActivity-->
<string name="RegistrationActivity_connect_with_textsecure">Conectare prin TextSecure</string>
<string name="RegistrationActivity_select_your_country">Alegeţi ţara dumneavostră</string>
@@ -336,31 +359,32 @@ Primit mesaj trimis cu o cheie de identitate necunoscută. Faceți click pentru
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d mesaje în %2$d conversaţii</string>
<string name="MessageNotifier_most_recent_from_s">Cel mai recent de la: %1$s</string>
<string name="MessageNotifier_encrypted_message">Mesaj criptat...</string>
<string name="MessageNotifier_locked_message">Mesaj blocat...</string>
<string name="MessageNotifier_media_message_with_text">Mesaje media: %s</string>
<string name="MessageNotifier_no_subject">(Fără subiect)</string>
<string name="MessageNotifier_message_delivery_failed">Trimiterea mesajului a esuat.</string>
<string name="MessageNotifier_failed_to_deliver_message">Mesajul nu a putut fi trimis.</string>
<string name="MessageNotifier_error_delivering_message">A aparut o eroare la trimiterea mesajului.</string>
<string name="MessageNotifier_mark_all_as_read">Marchează tot ca citit</string>
<string name="MessageNotifier_mark_read">Marchează ca citit</string>
<string name="MessageNotifier_media_message">Mesaj media</string>
<string name="MessageNotifier_reply">Răspunde</string>
<!--QuickResponseService-->
<string name="QuickResponseService_problem_sending_message">Problemă la trimiterea mesajului!</string>
<!--change_passphrase_activity-->
<string name="change_passphrase_activity__old_passphrase">PAROLA VECHE:</string>
<string name="change_passphrase_activity__new_passphrase">NOUA PAROLĂ:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">REPETĂ NOUA PAROLĂ:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Nu exista contacte.</string>
<string name="contact_selection_group_activity__finding_contacts">Se încarcă contactele...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Nu sunteţi înregistrat cu serviciul \"push\"...</string>
<string name="SingleContactSelectionActivity_updating_directory">Actualizare director</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Se actualizează directorul push...</string>
<string name="SingleContactSelectionActivity_contact_photo">Poză contact</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Selectează pentru</string>
<!--blocked_contacts_fragment-->
<string name="blocked_contacts_fragment__no_blocked_contacts">Nu există contacte blocate...</string>
<!--contact_selection_recent_activity-->
<string name="contact_selection_recent_activity__no_recent_calls">Nu exista apeluri recente.</string>
<!--conversation_title_view-->
@@ -443,7 +467,13 @@ Importă un fișier de backup text. Compatibil cu \'SMSBackup And Restore.\'</st
<string name="prompt_mms_activity__textsecure_requires_mms_settings_to_deliver_media_and_group_messages">TextSecure are nevoie de setările APN pentru a trimite mesaje multimedia prin operatorul wireless. Acest aparat nu oferă informațiile necesare, lucru care se poate întâmpla uneori pentru dispozitive blocate sau alte configurații restrictive.</string>
<string name="prompt_mms_activity__to_send_media_and_group_messages_click_ok">Pentru a putea trimite mesaje multimedia cât și mesaje într-un grup, apăsați \'OK\' și completați setările solicitate. Setările MMS pentru operatorul dvs. pot fi găsite cautând după \'APN operatorul tău\'. Această operațiune este necesară o singură dată.</string>
<!--recipient_preferences_activity-->
<string name="recipient_preference_activity__blocked">BLOCAT</string>
<!--recipient_preferences-->
<string name="recipient_preferences__ringtone">Sunet de apel</string>
<string name="recipient_preferences__vibrate">Vibrează</string>
<string name="recipient_preferences__block">Blochează</string>
<string name="recipient_preferences__color">Culoare</string>
<string name="recipient_preferences__color_for_this_contact">Culoare pentru acest contact</string>
<!--registration_activity-->
<string name="registration_activity__textsecure_can_use_instant_messages_to_avoid_sms_charges_when_communicating_with_other_textsecure_users">
Verifică numărul tău de telefon pentru a te conecta la TextSecure.
@@ -454,6 +484,7 @@ NUMĂRUL DE TELEFON</string>
<string name="registration_activity__phone_number">NUMĂRUL DE TELEFON</string>
<string name="registration_activity__register">Inregistrare</string>
<string name="registration_activity__registration_will_transmit_some_contact_information_to_the_server_temporariliy">Înregistrarea transmite unele informații despre contact către server. Acestea nu sunt stocate.</string>
<string name="registration_activity__powered_by_twilio">Cu sprijinul twilio</string>
<!--registration_problems-->
<string name="registration_problems__some_possible_problems_include">Unele probleme posibile
sunt:</string>
@@ -532,6 +563,12 @@ Operaţiunea iniţiată de TextSecure a expirat în timpul aşteptării primirii
<string name="arrays__my_identity_key">Cheia mea de identitate</string>
<string name="arrays__use_default">Implicit</string>
<string name="arrays__use_custom">Specific</string>
<string name="arrays__mute_for_one_hour">Silenţios pentru o oră</string>
<string name="arrays__mute_for_two_hours">Silenţios pentru 2 ore</string>
<string name="arrays__mute_for_one_day">Silenţios pentru o zi</string>
<string name="arrays__mute_for_seven_days">Silenţios pentru 7 zile</string>
<string name="arrays__enabled">Activat</string>
<string name="arrays__disabled">Dezactivat</string>
<!--plurals.xml-->
<plurals name="hours_ago">
<item quantity="one">%d oră</item>
@@ -543,6 +580,7 @@ Operaţiunea iniţiată de TextSecure a expirat în timpul aşteptării primirii
<string name="preferences__sms_mms">SMS și MMS</string>
<string name="preferences__pref_all_sms_title">Recepționează toate SMS-urile</string>
<string name="preferences__pref_all_mms_title">Recepționează toate MMS-urile</string>
<string name="preferences__use_textsecure_for_viewing_and_storing_all_incoming_text_messages">Foloseşte TextSecure pentru toate mesajele text</string>
<string name="preferences__input_settings">Setări de introducere</string>
<string name="preferences__enable_enter_key_title">Activează tasta Enter</string>
<string name="preferences__replace_smiley_with_enter_key">Inlocuiți tasta smiley cu tasta Enter</string>
@@ -555,7 +593,6 @@ Operaţiunea iniţiată de TextSecure a expirat în timpul aşteptării primirii
<string name="preferences__change_my_passphrase">Schimbă parola</string>
<string name="preferences__enable_passphrase">Activează parola</string>
<string name="preferences__passphrase_summary">Parola %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Activează criptarea locală a mesajelor și a cheilor</string>
<string name="preferences__screen_security">Securitate ecran</string>
<string name="preferences__screen_security_summary">Securitate ecran %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Blochează screenshot-urile în lista cu aplicaţii recente şi în interiorul applicaţiei</string>
@@ -600,6 +637,7 @@ Operaţiunea iniţiată de TextSecure a expirat în timpul aşteptării primirii
<string name="preferences__slow">Încet</string>
<string name="preferences__custom">Specific</string>
<string name="preferences__advanced">Avansat</string>
<string name="preferences__privacy">Confidenţialitate</string>
<string name="preferences__mms_user_agent">MMS User Agent</string>
<string name="preferences__advanced_mms_access_point_names">Setări MMS manuale</string>
<string name="preferences__enable_manual_mms">Utilizează setări MMS manuale</string>
@@ -627,6 +665,7 @@ Operaţiunea iniţiată de TextSecure a expirat în timpul aşteptării primirii
<string name="preferences__textsecure_messages">Mesaje TextSecure</string>
<string name="preferences__submit_debug_log">Trimite log-urile de depanare</string>
<string name="preferences__support_wifi_calling">Mod compatibilitate \"Apelare WiFi\"</string>
<string name="preferences_app_protection__blocked_contacts">Contacte blocate</string>
<!--****************************************-->
<!--menus-->
<!--****************************************-->
@@ -676,6 +715,7 @@ Operaţiunea iniţiată de TextSecure a expirat în timpul aşteptării primirii
<string name="conversation__menu_leave_group">Părăseşte grupul</string>
<string name="conversation__menu_delete_thread">Șterge conversația</string>
<string name="conversation__menu_view_media">Toate imaginile</string>
<string name="conversation__menu_conversation_settings">Setări conversaţie</string>
<!--conversation_popup-->
<!--conversation_callable-->
<string name="conversation_add_to_contacts__menu_add_to_contacts">Adaugă la contacte</string>
@@ -711,10 +751,12 @@ Operaţiunea iniţiată de TextSecure a expirat în timpul aşteptării primirii
<!--media_preview_activity-->
<string name="media_preview_activity__image_content_description">Previzualizare imagine</string>
<!--Trimmer-->
<string name="trimmer__deleting">Se șterge</string>
<string name="trimmer__deleting_old_messages">Se șterg mesajele vechi...</string>
<string name="trimmer__old_messages_successfully_deleted">Mesajele vechi au fost șterse cu succes</string>
<!--transport_selection_list_item-->
<string name="transport_selection_list_item__transport_icon">Icoană transport</string>
<!--quick_attachment_drawer-->
<string name="quick_camera_unavailable">Cameră indisponibilă</string>
<!--EOF-->
</resources>

View File

@@ -12,9 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Удалить все старые сообщения?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Вы уверены, что хотите обрезать все разговоры до %s последних сообщений, удалив более старые?</string>
<string name="ApplicationPreferencesActivity_delete">Удалить</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Отключить шифрование базы?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Внимание, вы собираетесь отключить шифрование базы данных, в которой хранятся все ваши сообщения и ключи. При переписке шифрование продолжит работать, однако любой, кто имеет физический доступ к вашему устройству, сможет прочитать ваши сообщения.</string>
<string name="ApplicationPreferencesActivity_disable">Отключить</string>
<string name="ApplicationPreferencesActivity_unregistering">Отмена регистрации</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Отменяем регистрацию в TextSecure...</string>
@@ -53,6 +50,7 @@
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Возможно, этого собеседника
стоит перепроверить.</string>
<string name="ConfirmIdentityDialog_accept">Принять</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Размер сообщения: %d Kб</string>
<string name="ConversationItem_expires_s">Истекает: %s</string>
@@ -382,7 +380,6 @@
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d сообщений %2$d разговорах</string>
<string name="MessageNotifier_most_recent_from_s">Последнее от %1$s</string>
<string name="MessageNotifier_encrypted_message">Зашифрованное сообщение...</string>
<string name="MessageNotifier_media_message_with_text">MMS-сообщение: %s</string>
<string name="MessageNotifier_no_subject">(Нет темы)</string>
<string name="MessageNotifier_message_delivery_failed">Сбой доставки сообщения.</string>
@@ -399,14 +396,11 @@
<string name="change_passphrase_activity__old_passphrase">СТАРАЯ ПАРОЛЬНАЯ ФРАЗА:</string>
<string name="change_passphrase_activity__new_passphrase">НОВАЯ ПАРОЛЬНАЯ ФРАЗА:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">ПОВТОРИТЕ НОВУЮ ПАРОЛЬНУЮ ФРАЗУ:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Нет контактов.</string>
<string name="contact_selection_group_activity__finding_contacts">Загружаем контакты...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Вы не зарегистрированы в push-службе...</string>
<string name="SingleContactSelectionActivity_updating_directory">Обновление каталога</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Обновляем push-каталог...</string>
<string name="SingleContactSelectionActivity_contact_photo">Фото контактов</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Выбрать для</string>
@@ -634,7 +628,6 @@ SMS-подтверждения...
<string name="preferences__change_my_passphrase">Изменить мою парольную фразу</string>
<string name="preferences__enable_passphrase">Включить парольную фразу</string>
<string name="preferences__passphrase_summary">Парольная фраза %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Включить шифрование при хранении сообщений и ключей</string>
<string name="preferences__screen_security">Защита экрана</string>
<string name="preferences__screen_security_summary">Безопасность экрана %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Блокировать снимки экрана внутри приложения</string>

View File

@@ -12,13 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Zmazať všetky staré správy?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Ste naozaj si istí, že chcete skrátiť všetky rozhovory na %s najnovších správ?</string>
<string name="ApplicationPreferencesActivity_delete">Zmazať</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Vypnúť šifrovanie úložiska?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Varovanie: týmto vypnete šifrovanie úložiska správ a šifrovacích kľúčov.
Zabezpečenie Vášich propojení bude naďalej fungovať,
ale hocikto s fyzickým prístupom k Vášmu zariadeniu
získa aj prístup k týmto odosieaným informáciám.
</string>
<string name="ApplicationPreferencesActivity_disable">Vypnúť</string>
<string name="ApplicationPreferencesActivity_disable_textsecure_messages">Zakázať TextSecure správy?</string>
<string name="ApplicationPreferencesActivity_this_will_disable_textsecure_messages">
@@ -58,6 +51,7 @@ nové identifikačné údaje.</string>
identitu tohto kontaktu.
</string>
<string name="ConfirmIdentityDialog_accept">Potvrdiť</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Veľkosť správy: %d KB</string>
<string name="ConversationItem_expires_s">Expirácia: %s</string>
@@ -375,7 +369,6 @@ Bola prijatá správa s neznámou identou. Kliknite pre spracovanie a zobrazenie
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d správ v %2$d konverzáciách</string>
<string name="MessageNotifier_most_recent_from_s">Najnovšie od: %1$s</string>
<string name="MessageNotifier_encrypted_message">Kryptovaná správa...</string>
<string name="MessageNotifier_media_message_with_text">Multimediálna správa: %s</string>
<string name="MessageNotifier_no_subject">(bez predmetu)</string>
<string name="MessageNotifier_message_delivery_failed">Doručenie správy zlyhalo.</string>
@@ -388,14 +381,11 @@ Bola prijatá správa s neznámou identou. Kliknite pre spracovanie a zobrazenie
<string name="change_passphrase_activity__old_passphrase">Staré heslo:</string>
<string name="change_passphrase_activity__new_passphrase">Nové heslo:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">Zopakujte nové heslo:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Žiadne kontakty.</string>
<string name="contact_selection_group_activity__finding_contacts">Načítavanie kontaktov...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Nie ste registrovaný so službou push...</string>
<string name="SingleContactSelectionActivity_updating_directory">Aktualizácia zoznamu</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Aktualizuje sa zoznam push...</string>
<string name="SingleContactSelectionActivity_contact_photo">Fotka kontaktu</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Vyber pre</string>
@@ -616,7 +606,6 @@ zlyhalo.
<string name="preferences__change_my_passphrase">Zmeniť moje heslo</string>
<string name="preferences__enable_passphrase">Použiť heslo</string>
<string name="preferences__passphrase_summary">Heslo %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Zapnúť lokálne šifrovanie správ a šifrovacích kľúčov</string>
<string name="preferences__screen_security">Zabezpečenie obrazovky</string>
<string name="preferences__screen_security_summary">Zabezpečenie obrazovky %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Zakázať vytváranie snímkov obrazovky vnútri aplikácie a v zozname bežiacích aplikácií</string>

View File

@@ -12,9 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Izbrišem stara sporočila?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Ste prepričani, da želite izbrisati vse stare pogovore, razen najnovejših?</string>
<string name="ApplicationPreferencesActivity_delete">Izbriši</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Onemogočim šifriranje pomnilnika?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Pozor, s tem boste onemogočili šifriranje sporočil in ključev v pomnilniku naprave. Vaše šifrirane komunikacije bodo še vedno varne, toda vsakdo s fizičnim dostopom do vaše naprave bo lahko dostopal do njih.</string>
<string name="ApplicationPreferencesActivity_disable">Onemogoči</string>
<string name="ApplicationPreferencesActivity_unregistering">Odjava poteka</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Odjava od sporočil TextSecure...</string>
@@ -53,6 +50,8 @@ Za ponovno uporabo sporočil TextSecure se boste morali zopet prijaviti s svojo
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Morda bi želeli
preveriti ta stik.</string>
<string name="ConfirmIdentityDialog_accept">Sprejmi</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Sporočilo %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Velikost sporočila: %d KB</string>
<string name="ConversationItem_expires_s">Poteče: %s</string>
@@ -378,7 +377,7 @@ Prejeto sporočilo z neznanim identifikacijskim ključem. Kliknite za obdelavo i
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">Sporočil: %1$d, pogovorov: %2$d</string>
<string name="MessageNotifier_most_recent_from_s">Zadnje sporočilo od: %1$s</string>
<string name="MessageNotifier_encrypted_message">Šifrirano sporočilo...</string>
<string name="MessageNotifier_locked_message">Zaklenjeno sporočilo...</string>
<string name="MessageNotifier_media_message_with_text">Multimedijsko sporočilo: %s</string>
<string name="MessageNotifier_no_subject">(brez naslova)</string>
<string name="MessageNotifier_message_delivery_failed">Dostava sporočila ni uspela.</string>
@@ -395,14 +394,11 @@ Prejeto sporočilo z neznanim identifikacijskim ključem. Kliknite za obdelavo i
<string name="change_passphrase_activity__old_passphrase">Staro geslo:</string>
<string name="change_passphrase_activity__new_passphrase">Novo geslo:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">Ponovi novo geslo:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Ni stikov.</string>
<string name="contact_selection_group_activity__finding_contacts">Nalagam stike...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Niste prijavljeni v potisno storitev...</string>
<string name="SingleContactSelectionActivity_updating_directory">Posodabljam seznam</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Posodabljam potisni seznam...</string>
<string name="SingleContactSelectionActivity_contact_photo">Fotografija stika</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Izberi za</string>
@@ -422,6 +418,7 @@ Prejeto sporočilo z neznanim identifikacijskim ključem. Kliknite za obdelavo i
<string name="conversation_activity__compose_description">Sestavljanje sporočila</string>
<string name="conversation_activity__emoji_toggle_description">Vklop tipkovnice emoji</string>
<string name="conversation_activity__attachment_thumbnail">Predogledna sličica priponke</string>
<string name="conversation_activity__quick_attachment_drawer_toggle_description">Vklopi poteznik za priponke</string>
<!--conversation_item-->
<string name="conversation_item__mms_downloading_description">Nalagam multimedijsko sporočilo</string>
<string name="conversation_item__mms_image_description">Multiedijsko sporočilo</string>
@@ -623,7 +620,7 @@ bila uspešna.</string>
<string name="preferences__change_my_passphrase">Nastavi novo geslo</string>
<string name="preferences__enable_passphrase">Vklop gesla</string>
<string name="preferences__passphrase_summary">Geslo: %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Omogoči lokalno šifriranje sporočil na napravi</string>
<string name="preferences__enable_lock_screen_for_messages">Omogoči zaklepanje sporočil</string>
<string name="preferences__screen_security">Zaščita zaslona</string>
<string name="preferences__screen_security_summary">Zaščita zaslona: %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Prepreči zajem slike zaslona</string>
@@ -752,7 +749,7 @@ Brezplačno zasebno sporočanje za TextSecure in Signal</string>
<string name="conversation__menu_update_group">Posodobi skupino</string>
<string name="conversation__menu_leave_group">Zapusti skupino</string>
<string name="conversation__menu_delete_thread">Izbriši pogovor</string>
<string name="conversation__menu_view_media">Vse slike</string>
<string name="conversation__menu_view_media">Slike iz pogovora</string>
<string name="conversation__menu_conversation_settings">Nastavitve pogovora</string>
<!--conversation_popup-->
<string name="conversation_popup__menu_expand_popup">Odpri pojavno okno</string>

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Обрисати старе поруке сада?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Желите ли заиста одмах да скратите све нити преписки на %s најскоријих порука?</string>
<string name="ApplicationPreferencesActivity_delete">Обриши</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Онемогућити шифровање складишта?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Пазите, ово ће да онемогући шифровање складишта за све поруке и кључеве. Ваше шифроване сесије
ће и даље функционисати, али ко год има физички приступ вашем уређају моћи ће да им приступи.
</string>
<string name="ApplicationPreferencesActivity_disable">Онемогући</string>
<string name="ApplicationPreferencesActivity_unregistering">Одјављујем</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Одјављујем подршку за сигурне поруке...</string>
@@ -58,6 +53,8 @@
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Можда желите да оверите
овај контакт.</string>
<string name="ConfirmIdentityDialog_accept">Прихвати</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Порука %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Величина поруке: %d KB</string>
<string name="ConversationItem_expires_s">Истиче: %s</string>
@@ -398,7 +395,7 @@
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d порука у %2$d преписки</string>
<string name="MessageNotifier_most_recent_from_s">Најскорија од: %1$s</string>
<string name="MessageNotifier_encrypted_message">Шифрована порука...</string>
<string name="MessageNotifier_locked_message">Закључана порука...</string>
<string name="MessageNotifier_media_message_with_text">Мултимедијална порука: %s</string>
<string name="MessageNotifier_no_subject">(Без предмета)</string>
<string name="MessageNotifier_message_delivery_failed">Испорука поруке није успела.</string>
@@ -415,14 +412,11 @@
<string name="change_passphrase_activity__old_passphrase">СТАРА ЛОЗИНКА:</string>
<string name="change_passphrase_activity__new_passphrase">НОВА ЛОЗИНКА:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">ПОНОВИТЕ НОВУ ЛОЗИНКУ:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Нема контаката.</string>
<string name="contact_selection_group_activity__finding_contacts">Учитавам контакте…</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Нисте пријављени на сервис сигурних порука…</string>
<string name="SingleContactSelectionActivity_updating_directory">Ажурирање регистра</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Ажурирам регистар сигурних порука…</string>
<string name="SingleContactSelectionActivity_contact_photo">Фотографија контакта</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Изаберите за</string>
@@ -650,7 +644,7 @@
<string name="preferences__change_my_passphrase">Измени моју лозинку</string>
<string name="preferences__enable_passphrase">Омогући лозинку</string>
<string name="preferences__passphrase_summary">Лозинка %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Омогући локално шифровање порука и кључева</string>
<string name="preferences__enable_lock_screen_for_messages">Укључи екран закључавања за поруке</string>
<string name="preferences__screen_security">Безбедност екрана</string>
<string name="preferences__screen_security_summary">обезбеђења екрана %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Блокирај снимке екрана у списку недавних апликација и унутар апликације</string>

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Radera alla gamla meddelanden nu?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Är du säker på att du omedelbart vill trimma alla konversationstrådar till de %s senaste meddelandena?</string>
<string name="ApplicationPreferencesActivity_delete">Radera</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Inaktivera lagringskryptering?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Varning, detta inaktiverar lagringskryptering för alla meddelanden och nycklar. Dina krypterade
sessioner kommer fortsätta att fungera, men vem som helst med fysisk tillgång till din enhet
kommer kunna komma åt dem.</string>
<string name="ApplicationPreferencesActivity_disable">Inaktivera</string>
<string name="ApplicationPreferencesActivity_unregistering">Avregistrering</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">Avregistrerar från TextSecure-meddelanden...</string>
@@ -58,6 +53,8 @@ identitetsnyckel.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Det kan vara en bra idé att
verifiera denna kontakt.</string>
<string name="ConfirmIdentityDialog_accept">Acceptera</string>
<!--ContactsDatabase-->
<string name="ContactsDatabase_message_s">Meddelande %s</string>
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Meddelandestorlek: %d kB</string>
<string name="ConversationItem_expires_s">Går ut: %s</string>
@@ -389,7 +386,7 @@ Tog emot meddelande med okänd identitetsnyckel. Tryck för att bearbeta och vis
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d meddelanden i %2$d konversationer</string>
<string name="MessageNotifier_most_recent_from_s">Senaste från %1$s</string>
<string name="MessageNotifier_encrypted_message">Krypterat meddelande...</string>
<string name="MessageNotifier_locked_message">Låst meddelande...</string>
<string name="MessageNotifier_media_message_with_text">Mediameddelande: %s</string>
<string name="MessageNotifier_no_subject">(Inget ämne)</string>
<string name="MessageNotifier_message_delivery_failed">Meddelandeleverans misslyckades.</string>
@@ -406,14 +403,11 @@ Tog emot meddelande med okänd identitetsnyckel. Tryck för att bearbeta och vis
<string name="change_passphrase_activity__old_passphrase">GAMMALT LÖSENORD:</string>
<string name="change_passphrase_activity__new_passphrase">NYTT LÖSENORD:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">UPPREPA NYTT LÖSENORD:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Inga kontakter.</string>
<string name="contact_selection_group_activity__finding_contacts">Laddar kontakter…</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Du är inte registrerad med push-tjänsten...</string>
<string name="SingleContactSelectionActivity_updating_directory">Uppdaterar katalogen</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Uppdaterar push-katalogen...</string>
<string name="SingleContactSelectionActivity_contact_photo">Kontaktfoto</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Välj för</string>
@@ -433,6 +427,7 @@ Tog emot meddelande med okänd identitetsnyckel. Tryck för att bearbeta och vis
<string name="conversation_activity__compose_description">Skapa meddelande</string>
<string name="conversation_activity__emoji_toggle_description">Växla till emoji-tangentbord</string>
<string name="conversation_activity__attachment_thumbnail">Bifogad miniatyrbild</string>
<string name="conversation_activity__quick_attachment_drawer_toggle_description">Dölj/visa bilagor</string>
<!--conversation_item-->
<string name="conversation_item__mms_downloading_description">Laddar ner mediameddelande</string>
<string name="conversation_item__mms_image_description">Mediameddelande</string>
@@ -518,6 +513,7 @@ TELEFONNUMMER</string>
<string name="registration_activity__phone_number">TELEFONNUMMER</string>
<string name="registration_activity__register">Registrera</string>
<string name="registration_activity__registration_will_transmit_some_contact_information_to_the_server_temporariliy">Registrering kommer att temporärt överföra viss kontaktinformation till servern.</string>
<string name="registration_activity__powered_by_twilio">Powered by twilio</string>
<!--registration_problems-->
<string name="registration_problems__some_possible_problems_include">Några möjliga orsaker:</string>
<string name="registration_problems__sms_interceptors">SMS-interceptorer</string>
@@ -601,7 +597,7 @@ TextSecure uppnådde tidsgränsen för SMS-verifiering.</string>
<string name="arrays__mute_for_two_hours">Tysta i 2 timmar</string>
<string name="arrays__mute_for_one_day">Tysta i 1 dag</string>
<string name="arrays__mute_for_seven_days">Tysta i 7 dagar</string>
<string name="arrays__settings_default">Inställningars standardvärden</string>
<string name="arrays__settings_default">Inställningars standardvärde</string>
<string name="arrays__enabled">Aktiverad</string>
<string name="arrays__disabled">Inaktiverad</string>
<!--plurals.xml-->
@@ -628,7 +624,7 @@ TextSecure uppnådde tidsgränsen för SMS-verifiering.</string>
<string name="preferences__change_my_passphrase">Ändra mitt lösenord</string>
<string name="preferences__enable_passphrase">Aktivera lösenordsfras</string>
<string name="preferences__passphrase_summary">Lösenordsfras %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Aktivera lokal kryptering av meddelanden och nycklar</string>
<string name="preferences__enable_lock_screen_for_messages">Slå på låsskärm för meddelanden</string>
<string name="preferences__screen_security">Skärmsäkerhet</string>
<string name="preferences__screen_security_summary">Skärmsäkerhet %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Blockera skärmdumpar i Senaste-listen samt inuti appen</string>
@@ -741,7 +737,7 @@ Fria privata meddelanden till användare av TextSecure och Signal</string>
<string name="conversation_list__menu_search">Sök</string>
<!--conversation_list_item_view-->
<string name="conversation_list_item_view__contact_photo_image">Kontaktfoto</string>
<string name="conversation_list_item_view__error_alert">Felnotifiering</string>
<string name="conversation_list_item_view__error_alert">Felmeddelande</string>
<!--conversation_list_fragment-->
<string name="conversation_list_fragment__fab_content_description">Ny konversation</string>
<!--conversation_secure_verified-->

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">அனைத்து பழைய செய்திகளையும் நீக்கலாமா?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">நீங்கள் உடனடியாக உரையாடல் நூல்களிலுள்ள மிக சமீபத்திய %s செய்திகளுக்கு முன் உள்ள செய்திகளை நீக்குவதற்கு உறுதி செய்கிறீர்களா?</string>
<string name="ApplicationPreferencesActivity_delete">நீக்கு</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">சேமிப்பின் மறையாகத்தை முடக்கலாமா?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
எச்சரிக்கை, இது அனைத்து செய்திகள் மற்றும் சாவிகளின் சேமிப்பு மறையாக்கத்தை முடக்கும். உங்களின்
மறையாக்கப்பட்ட அமர்வுகள் செயல்பட தொடரும், ஆனால் உங்கள் தொலைபேசியை
கையாளகக்கூடிபவர் எவரும் அவற்றை அணுகலாம்.</string>
<string name="ApplicationPreferencesActivity_disable">முடக்கு</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">சர்வருடன் இணைவதில் பிழை!</string>
<string name="ApplicationPreferencesActivity_touch_to_change_your_default_sms_app">இதை உங்கள் இயல்புநிலை SMS மென்பொருளாக்க தொடவும் </string>
@@ -47,6 +42,7 @@
அடையாளச் சாவி பெற்றார்.</string>
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">நீங்கள் இந்த தொடர்புபை
உறுதி செய்ய விரும்பலாம்</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">செய்தி அளவு : %d KB</string>
<string name="ConversationItem_expires_s">காலாவதி நேரம்: %s</string>
@@ -346,7 +342,6 @@ SMS-களை இறக்குமதி செய்திருந்தா
<string name="KeyCachingService_passphrase_cached">TextSecure திறக்கப்பட்டுள்ளது </string>
<string name="KeyCachingService_lock">கடவுச்சொல்லை வைத்து பூட்டவும் </string>
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">மறையாக்கப்பட செய்தி...</string>
<string name="MessageNotifier_media_message_with_text">மீடியா செய்தி: %s</string>
<string name="MessageNotifier_no_subject">(தலைப்பு இல்லை)</string>
<string name="MessageNotifier_message_delivery_failed">செய்தி விநியோகிப்பது தோல்வியடைந்தது.</string>
@@ -359,14 +354,11 @@ SMS-களை இறக்குமதி செய்திருந்தா
<string name="change_passphrase_activity__old_passphrase">பழைய கடவுச்சொல்:</string>
<string name="change_passphrase_activity__new_passphrase">புதிய கடவுச்சொல்:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">மீண்டும் புதிய கடவுச்சொல்:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">தொடர்புகள் இல்லை.</string>
<string name="contact_selection_group_activity__finding_contacts">தொடர்புகள் ஏற்றுப்படுகிறது...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">நீங்கள் Push சேவையில் பதிவுசெய்யவில்லை...</string>
<string name="SingleContactSelectionActivity_updating_directory">அடைவு புதுப்பிக்கப்படுகிறது</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Push அடைவு புதுப்பிக்கப்படுகிறது...</string>
<string name="SingleContactSelectionActivity_contact_photo">தொடர்பின் புகைப்படம்</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">இவருக்காக தேர்வு</string>
@@ -575,7 +567,6 @@ TextSecure சரிபார்ப்பு SMS-செய்திக்கா
<string name="preferences__change_my_passphrase">என் கடவுச்சொல்லை மாற்று</string>
<string name="preferences__enable_passphrase">கடவுச்சொல்லை செயல்படுத்து</string>
<string name="preferences__passphrase_summary">கடவுச்சொல் %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">சாவிகள் மற்றும் செய்திகளின் கோப்பை மறையாக்கம் செய்வதை செயல்படுத்து</string>
<string name="preferences__screen_security">திரை பாதுகாப்பு</string>
<string name="preferences__screen_security_summary">திரை பாதுகாப்பு %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">அண்மை பட்டியல் மற்றும் மென்பொருளுக்கு உள்ளே திரையை படம் எடுப்பதை தடுக்கவும்</string>

View File

@@ -12,11 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Tüm eski mesajlar silinsin mi?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Tüm konuşma başlıklarını hemen %s en son konuşmaya kırpmak istediğinizden emin misiniz?</string>
<string name="ApplicationPreferencesActivity_delete">Sil</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Saklama alanı şifrelemesi etkisizleştirilsin mi?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Uyarı, bu tüm mesaj ve anahtarlar için depolama alanı şifrelemesini etkisizleştirir. Şifrelenmiş
oturumlarınız işlevlerini sürdürür, fakat cihazınıza fiziksel erişimi olan herhangi biri onlara
erişebilir.</string>
<string name="ApplicationPreferencesActivity_disable">Etkisizleştir</string>
<string name="ApplicationPreferencesActivity_unregistering">Kayıt siliniyor</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">TextSecure mesajlarından kaydınız siliniyor</string>
@@ -53,6 +48,7 @@ Gelecekte TextSecure mesajlarını tekrar kullanmak isterseniz telefon numaranı
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Bu kişiyi doğrulamak
isteyebilirsiniz.</string>
<string name="ConfirmIdentityDialog_accept">Kabul et</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Mesaj boyutu: %d KB</string>
<string name="ConversationItem_expires_s">Ömrü: %s</string>
@@ -366,7 +362,6 @@ Bilinmeyen kimlik anahtarı içeren bir mesaj alındı. İşlemek ve görüntül
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%2$d sohbette %1$d mesaj</string>
<string name="MessageNotifier_most_recent_from_s">En yeni mesaj: %1$s</string>
<string name="MessageNotifier_encrypted_message">Şifrelenmiş mesaj...</string>
<string name="MessageNotifier_media_message_with_text">Medya mesajı: %s</string>
<string name="MessageNotifier_no_subject">(Konusuz)</string>
<string name="MessageNotifier_message_delivery_failed">Mesaj iletimi başarısız.</string>
@@ -379,14 +374,11 @@ Bilinmeyen kimlik anahtarı içeren bir mesaj alındı. İşlemek ve görüntül
<string name="change_passphrase_activity__old_passphrase">ESKİ PAROLA:</string>
<string name="change_passphrase_activity__new_passphrase">YENİ PAROLA:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">YENİ PAROLA TEKRAR:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Kişi yok.</string>
<string name="contact_selection_group_activity__finding_contacts">Kişiler yükleniyor...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">İtilen servisine kayıtlı değilsiniz...</string>
<string name="SingleContactSelectionActivity_updating_directory">Dizin güncelleniyor</string>
<string name="SingleContactSelectionActivity_updating_push_directory">İtilen dizini güncelleniyor...</string>
<string name="SingleContactSelectionActivity_contact_photo">Kişi Fotosu</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Seç</string>
@@ -593,7 +585,6 @@ başarısız.</string>
<string name="preferences__change_my_passphrase">Parolamı değiştir</string>
<string name="preferences__enable_passphrase">Parola etkinleştir</string>
<string name="preferences__passphrase_summary">Parola %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Mesaj ve anahtarların lokal şifrelenmesini etkinleştirr</string>
<string name="preferences__screen_security">Ekran güvenliği</string>
<string name="preferences__screen_security_summary">Ekran güvenliği %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">En son listelerde ve uygulama içinde ekran görüntüsü alınmasını engelle</string>

View File

@@ -10,8 +10,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Вилучити всі старі повідомлення зараз?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Ви впевнені що хочете негайно обрізати всі розмови до %s останніх повідомлень?</string>
<string name="ApplicationPreferencesActivity_delete">Видалити</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Вимкнути шифрування сховища?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">Увага, це відключить шифрування для всіх повідомлень і ключів. Ваші шифровані сесії продовжать працювати, але будь-яка особа з фізичним доступом до вашого пристрою може переглянути їх.</string>
<string name="ApplicationPreferencesActivity_disable">Вимкнути</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">Помилка підключення до сервера!</string>
<string name="ApplicationPreferencesActivity_sms_enabled">SMS Вимкнено</string>
@@ -28,6 +26,7 @@
<!--BlockedContactsActivity-->
<!--ConfirmIdentityDialog-->
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Можливо, вам потрібно перевірити цей контакт.</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Розмір повідомленя: %d KБ</string>
<string name="ConversationItem_expires_s">Минає: %s</string>
@@ -189,7 +188,6 @@
<string name="KeyCachingService_textsecure_passphrase_cached">Фраза-ключ TextSecure кешована</string>
<string name="KeyCachingService_passphrase_cached">Фраза-ключ кешована</string>
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">Зашифроване повідомлення\u2026</string>
<string name="MessageNotifier_message_delivery_failed">Збій доставки повідомлення.</string>
<string name="MessageNotifier_failed_to_deliver_message">Не вдалось доставити повідомлення.</string>
<string name="MessageNotifier_error_delivering_message">Помилка доставки повідомлення.</string>
@@ -199,11 +197,10 @@
<string name="change_passphrase_activity__old_passphrase">СТАРА ФРАЗА-КЛЮЧ:</string>
<string name="change_passphrase_activity__new_passphrase">НОВА ФРАЗА-КЛЮЧ:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">ПОВТОРІТЬ НОВУ ФРАЗУ:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Контактів не знайдено.</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_updating_directory">Оновлення теки</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Вибрати для</string>
<!--blocked_contacts_fragment-->

View File

@@ -10,9 +10,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Xóa tất cả tin nhắn cũ bây giờ?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Bạn có chắc là muốn thu ngắn tức thì các mạch chuyện trò xuống còn %s tin nhắn mới nhất?</string>
<string name="ApplicationPreferencesActivity_delete">Xóa</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Tắt mã hóa lưu trữ?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Cảnh báo, điều này tắt mã hóa lưu trữ cho tất cả tin nhắn và chìa khóa. Phiên mã hóa vẫn tiếp tục hoạt động, nhưng bất cứ ai vào được máy bạn sẽ truy cập được nội dung.</string>
<string name="ApplicationPreferencesActivity_disable">Tắt</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">Có lỗi kết nối vào máy chủ!</string>
<string name="ApplicationPreferencesActivity_touch_to_change_your_default_sms_app">Chạm vào để đổi ứng dụng SMS mặc định</string>
@@ -29,6 +26,7 @@ Cảnh báo, điều này tắt mã hóa lưu trữ cho tất cả tin nhắn v
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">Bạn có thể muốn kiểm chứng
địa chỉ liên lạc này.
</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">Kích thước tin nhắn: %d KB</string>
<string name="ConversationItem_expires_s">Hết hạn: %s</string>
@@ -238,7 +236,6 @@ Nhận thông tin về chìa khóa nhận diện không rõ. Bấm để xử l
<string name="KeyCachingService_passphrase_cached">TextSecure được mở khóa</string>
<string name="KeyCachingService_lock">Khóa bằng mật khẩu</string>
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">Mã hóa tin nhắn...</string>
<string name="MessageNotifier_message_delivery_failed">Phân phối tin nhắn bị thất bại.</string>
<string name="MessageNotifier_failed_to_deliver_message">Thất bại trong việc phân phối tin.</string>
<string name="MessageNotifier_error_delivering_message">Có lỗi khi phân phối tin.</string>
@@ -248,14 +245,11 @@ Nhận thông tin về chìa khóa nhận diện không rõ. Bấm để xử l
<string name="change_passphrase_activity__old_passphrase">MẬT KHẨU CŨ:</string>
<string name="change_passphrase_activity__new_passphrase">MẬT KHẨU MỚI:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">LẬP LẠI MẬT KHẨU MỚI:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">Không có địa chỉ liên lạc.</string>
<string name="contact_selection_group_activity__finding_contacts">Nạp danh sách liên hệ...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">Bạn chưa đăng ký với dịch vụ đẩy...</string>
<string name="SingleContactSelectionActivity_updating_directory">Cập nhật thư mục</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Cập nhật thư mục đẩy...</string>
<string name="SingleContactSelectionActivity_contact_photo">Hình Liên Hệ</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">Chọn cho</string>

View File

@@ -12,9 +12,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">删除所有旧信息?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">你确定处理与%s的最近的对话消息</string>
<string name="ApplicationPreferencesActivity_delete">删除</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">禁用存储加密?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
警告:这将会禁用所有信息和密钥的存储加密。您的加密会话继续有效,但是任何能物理接触到此设备的人都能够访问这些数据。</string>
<string name="ApplicationPreferencesActivity_disable">禁用</string>
<string name="ApplicationPreferencesActivity_unregistering">反注册</string>
<string name="ApplicationPreferencesActivity_unregistering_from_textsecure_messages">正在反注册来自 TextSecure 的信息...</string>
@@ -53,6 +50,7 @@
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">您可能希望验证
这个联系人。</string>
<string name="ConfirmIdentityDialog_accept">接受</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">信息大小: %d KB</string>
<string name="ConversationItem_expires_s">到期: %s</string>
@@ -385,7 +383,6 @@
<!--MessageNotifier-->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d 信息是在 %2$d 中的会话</string>
<string name="MessageNotifier_most_recent_from_s">最新的邮件来自:%1$s</string>
<string name="MessageNotifier_encrypted_message">加密信息...</string>
<string name="MessageNotifier_media_message_with_text">媒体信息:%s</string>
<string name="MessageNotifier_no_subject">(无主题)</string>
<string name="MessageNotifier_message_delivery_failed">信息发送失败。</string>
@@ -402,14 +399,11 @@
<string name="change_passphrase_activity__old_passphrase">旧密码:</string>
<string name="change_passphrase_activity__new_passphrase">新密码:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">重复新密码:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">没有联系人。</string>
<string name="contact_selection_group_activity__finding_contacts">读取联系人…</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">您尚未注册推送服务…</string>
<string name="SingleContactSelectionActivity_updating_directory">正在更新目录</string>
<string name="SingleContactSelectionActivity_updating_push_directory">正在更新推送目录…</string>
<string name="SingleContactSelectionActivity_contact_photo">联系人照片</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">选择</string>
@@ -635,7 +629,6 @@ TextSecure 在等待短信验证时超时。</string>
<string name="preferences__change_my_passphrase">更改我的密码</string>
<string name="preferences__enable_passphrase">启用密码</string>
<string name="preferences__passphrase_summary">密码 %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">启用本地加密的信息和密钥</string>
<string name="preferences__screen_security">屏幕安全性</string>
<string name="preferences__screen_security_summary">屏幕安全性 %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">屏蔽下列应用和内置应用的截屏功能</string>

View File

@@ -10,12 +10,6 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">刪除\"全部\"的舊訊息?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">您確定要將所有對話群組精簡為只剩最近 %s 則的對話?</string>
<string name="ApplicationPreferencesActivity_delete">刪除</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">不要對儲存內容加密</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
警告! 這麼做將會把您原先所有已加密的訊息紀錄和金鑰全部解密。
您還在進行中的加密對話仍可持續收送,但任何能夠存取您裝置的人將可以任意地
讀取未加密的訊息紀錄和金鑰。
</string>
<string name="ApplicationPreferencesActivity_disable">解除</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">與伺服器的連線發生錯誤!</string>
<string name="ApplicationPreferencesActivity_touch_to_change_your_default_sms_app">按這裡來變更您預設的手機簡訊APP</string>
@@ -32,6 +26,7 @@
<!--ConfirmIdentityDialog-->
<string name="ConfirmIdentityDialog_you_may_wish_to_verify_this_contact">您想要對這名連絡人
進行認證嗎?</string>
<!--ContactsDatabase-->
<!--ConversationItem-->
<string name="ConversationItem_message_size_d_kb">訊息大小: %d KB</string>
<string name="ConversationItem_expires_s">於: %s 後過期</string>
@@ -289,7 +284,6 @@
<string name="KeyCachingService_passphrase_cached">TextSecure 已解除鎖定</string>
<string name="KeyCachingService_lock">以『自訂密碼』進行鎖定</string>
<!--MessageNotifier-->
<string name="MessageNotifier_encrypted_message">加密的訊息...</string>
<string name="MessageNotifier_no_subject">(在此輸入主題)</string>
<string name="MessageNotifier_message_delivery_failed">訊息傳送失敗。</string>
<string name="MessageNotifier_failed_to_deliver_message">無法傳送訊息。</string>
@@ -301,14 +295,11 @@
<string name="change_passphrase_activity__old_passphrase">舊的『自訂密碼』:</string>
<string name="change_passphrase_activity__new_passphrase">新的『自訂密碼』:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">再輸入一次新的『自訂密碼』:</string>
<!--contact_selection_activity-->
<!--contact_selection_group_activity-->
<!--contact_selection_list_activity-->
<string name="contact_selection_group_activity__no_contacts">沒有連絡人。</string>
<string name="contact_selection_group_activity__finding_contacts">載入連絡人中...</string>
<!--single_contact_selection_activity-->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">您尚未註冊 TextSecure 的加密即時訊息功能...</string>
<string name="SingleContactSelectionActivity_updating_directory">正在更新連絡人目錄</string>
<string name="SingleContactSelectionActivity_updating_push_directory">更新即時訊息目錄...</string>
<string name="SingleContactSelectionActivity_contact_photo">連絡人的相片</string>
<!--ContactSelectionListFragment-->
<string name="ContactSelectionlistFragment_select_for">相片</string>

View File

@@ -72,7 +72,7 @@
<attr name="contact_selection_push_user" format="reference|color" />
<attr name="contact_selection_lay_user" format="reference|color" />
<attr name="contact_selection_label_text" format="reference|color" />
<attr name="conversation_selection_header_text" format="reference|color" />
<attr name="contact_selection_header_text" format="reference|color" />
<attr name="import_export_item_background_color" format="reference|color" />
<attr name="import_export_item_background_shadow_color" format="reference|color" />

View File

@@ -2,8 +2,9 @@
<resources>
<dimen name="emoji_drawer_size">32sp</dimen>
<dimen name="min_keyboard_size">50dp</dimen>
<dimen name="min_emoji_drawer_height">200dp</dimen>
<dimen name="min_emoji_drawer_top_margin">170dp</dimen>
<dimen name="default_custom_keyboard_size">220dp</dimen>
<dimen name="min_custom_keyboard_size">110dp</dimen>
<dimen name="min_custom_keyboard_top_margin">170dp</dimen>
<dimen name="emoji_drawer_item_padding">5dp</dimen>
<dimen name="emoji_drawer_indicator_height">1.5dp</dimen>
<dimen name="emoji_drawer_left_right_padding">5dp</dimen>

View File

@@ -13,11 +13,9 @@
<string name="ApplicationPreferencesActivity_delete_all_old_messages_now">Delete all old messages now?</string>
<string name="ApplicationPreferencesActivity_are_you_sure_you_would_like_to_immediately_trim_all_conversation_threads_to_the_s_most_recent_messages">Are you sure you would like to immediately trim all conversation threads to the %s most recent messages?</string>
<string name="ApplicationPreferencesActivity_delete">Delete</string>
<string name="ApplicationPreferencesActivity_disable_storage_encryption">Disable storage encryption?</string>
<string name="ApplicationPreferencesActivity_warning_this_will_disable_storage_encryption_for_all_messages">
Warning, this will disable storage encryption for all messages and keys. Your encrypted
sessions will continue to function, but anyone with physical access to your device will be
able to access them.
<string name="ApplicationPreferencesActivity_disable_passphrase">Disable passphrase?</string>
<string name="ApplicationPreferencesActivity_disable_lock_screen">
Disable lock screen for messages?
</string>
<string name="ApplicationPreferencesActivity_disable">Disable</string>
<string name="ApplicationPreferencesActivity_unregistering">Unregistering</string>
@@ -70,6 +68,9 @@
</string>
<string name="ConfirmIdentityDialog_accept">Accept</string>
<!-- ContactsDatabase -->
<string name="ContactsDatabase_message_s">Message %s</string>
<!-- ConversationItem -->
<string name="ConversationItem_message_size_d_kb">Message size: %d KB</string>
<string name="ConversationItem_expires_s">Expires: %s</string>
@@ -467,7 +468,7 @@
<!-- MessageNotifier -->
<string name="MessageNotifier_d_messages_in_d_conversations">%1$d messages in %2$d conversations</string>
<string name="MessageNotifier_most_recent_from_s">Most recent from: %1$s</string>
<string name="MessageNotifier_encrypted_message">Encrypted message...</string>
<string name="MessageNotifier_locked_message">Locked message...</string>
<string name="MessageNotifier_media_message_with_text">Media message: %s</string>
<string name="MessageNotifier_no_subject">(No subject)</string>
<string name="MessageNotifier_message_delivery_failed">Message delivery failed.</string>
@@ -482,21 +483,19 @@
<string name="QuickResponseService_quick_response_unavailable_when_TextSecure_is_locked">Quick response unavailable when TextSecure is locked!</string>
<string name="QuickResponseService_problem_sending_message">Problem sending message!</string>
<!-- change_passphrase_activity -->
<string name="change_passphrase_activity__old_passphrase">OLD PASSPHRASE:</string>
<string name="change_passphrase_activity__new_passphrase">NEW PASSPHRASE:</string>
<string name="change_passphrase_activity__repeat_new_passphrase">REPEAT NEW PASSPHRASE:</string>
<!-- contact_selection_activity -->
<string name="contact_selection_activity__enter_name_or_number">Enter name or number</string>
<!-- contact_selection_group_activity -->
<!-- contact_selection_list_activity -->
<string name="contact_selection_group_activity__no_contacts">No contacts.</string>
<string name="contact_selection_group_activity__finding_contacts">Loading contacts&#8230;</string>
<!-- single_contact_selection_activity -->
<string name="SingleContactSelectionActivity_you_are_not_registered_with_the_push_service">You are not registered with the push service&#8230;</string>
<string name="SingleContactSelectionActivity_updating_directory">Updating directory</string>
<string name="SingleContactSelectionActivity_updating_push_directory">Updating push directory&#8230;</string>
<string name="SingleContactSelectionActivity_contact_photo">Contact Photo</string>
<!-- ContactSelectionListFragment-->
@@ -779,7 +778,7 @@
<string name="preferences__change_my_passphrase">Change my passphrase</string>
<string name="preferences__enable_passphrase">Enable passphrase</string>
<string name="preferences__passphrase_summary">Passphrase %s</string>
<string name="preferences__enable_local_encryption_of_messages_and_keys">Enable local encryption of messages and keys</string>
<string name="preferences__enable_lock_screen_for_messages">Enable lock screen for messages</string>
<string name="preferences__screen_security">Screen security</string>
<string name="preferences__screen_security_summary">Screen security %s</string>
<string name="preferences__disable_screen_security_to_allow_screen_shots">Block screenshots in the recents list and inside the app</string>

View File

@@ -58,6 +58,7 @@
<style name="TextSecure.TitleTextStyle" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/white</item>
<item name="android:textColorHint">#BFffffff</item>
</style>
<style name="TextSecure.SubtitleTextStyle" parent="TextAppearance.AppCompat.Widget.ActionBar.Subtitle">

View File

@@ -9,7 +9,12 @@
<item name="colorPrimary">@color/textsecure_primary</item>
<item name="colorPrimaryDark">@color/textsecure_primary_dark</item>
<item name="colorAccent">@color/textsecure_primary_dark</item>
<item name="recipient_preference_blocked">#8e0000</item>
<item name="contact_selection_label_text">#66000000</item>
<item name="contact_selection_push_user">#ff000000</item>
<item name="contact_selection_lay_user">#a0000000</item>
<item name="contact_selection_header_text">@color/textsecure_primary_dark</item>
</style>
<style name="TextSecure.DarkNoActionBar" parent="@style/Theme.AppCompat.NoActionBar">
@@ -17,7 +22,12 @@
<item name="actionBarStyle">@style/TextSecure.DarkActionBar</item>
<item name="actionBarTabBarStyle">@style/TextSecure.DarkActionBar.TabBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
<item name="recipient_preference_blocked">#d00000</item>
<item name="contact_selection_label_text">#66eeeeee</item>
<item name="contact_selection_push_user">#ffeeeeee</item>
<item name="contact_selection_lay_user">#afeeeeee</item>
<item name="contact_selection_header_text">#66eeeeee</item>
</style>
<style name="TextSecure.LightIntroTheme" parent="@style/Theme.AppCompat.Light">
@@ -82,11 +92,6 @@
<item name="conversation_group_member_name">#99000000</item>
<item name="contact_selection_push_user">#ff000000</item>
<item name="contact_selection_lay_user">#a0000000</item>
<item name="contact_selection_label_text">#66000000</item>
<item name="conversation_selection_header_text">#44000000</item>
<item name="conversation_background">#eeeeee</item>
<item name="conversation_editor_background">#22000000</item>
<item name="conversation_editor_text_color">#ff111111</item>
@@ -196,11 +201,6 @@
<item name="conversation_group_member_name">#99ffffff</item>
<item name="contact_selection_push_user">#ffeeeeee</item>
<item name="contact_selection_lay_user">#afeeeeee</item>
<item name="contact_selection_label_text">#66eeeeee</item>
<item name="conversation_selection_header_text">#66eeeeee</item>
<item name="conversation_item_background">@drawable/conversation_item_background_dark</item>
<item name="conversation_item_bubble_background">#ff333333</item>
<item name="conversation_item_sent_text_primary_color">#ffffffff</item>

View File

@@ -0,0 +1,6 @@
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="org.thoughtcrime.securesms"
android:icon="@drawable/icon"
android:smallIcon="@drawable/icon"
android:label="@string/app_name"/>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<ContactsSource xmlns:android="http://schemas.android.com/apk/res/android">
<ContactsDataKind
android:icon="@drawable/icon"
android:mimeType="vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.contact"
android:summaryColumn="data2"
android:detailColumn="data3"
android:detailSocialSummary="true"/>
</ContactsSource>

View File

@@ -5,7 +5,7 @@
android:key="pref_enable_passphrase_temporary"
android:defaultValue="true"
android:title="@string/preferences__enable_passphrase"
android:summary="@string/preferences__enable_local_encryption_of_messages_and_keys"/>
android:summary="@string/preferences__enable_lock_screen_for_messages"/>
<Preference android:key="pref_change_passphrase"
android:title="@string/preferences__change_passphrase"

8
res/xml/syncadapter.xml Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="com.android.contacts"
android:accountType="org.thoughtcrime.securesms"
android:userVisible="true"
android:supportsUploading="false"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true"/>

View File

@@ -95,8 +95,7 @@ public class ConfirmIdentityDialog extends AlertDialog {
protected Void doInBackground(Void... params) {
IdentityDatabase identityDatabase = DatabaseFactory.getIdentityDatabase(getContext());
identityDatabase.saveIdentity(masterSecret,
mismatch.getRecipientId(),
identityDatabase.saveIdentity(mismatch.getRecipientId(),
mismatch.getIdentityKey());
processMessageRecord(messageRecord);

View File

@@ -0,0 +1,217 @@
/**
* Copyright (C) 2015 Open Whisper Systems
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.thoughtcrime.securesms;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import org.thoughtcrime.securesms.components.AnimatingToggle;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.util.DirectoryHelper;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.ServiceUtil;
import java.io.IOException;
import java.lang.ref.WeakReference;
/**
* Base activity container for selecting a list of contacts.
*
* @author Moxie Marlinspike
*
*/
public abstract class ContactSelectionActivity extends PassphraseRequiredActionBarActivity
implements SwipeRefreshLayout.OnRefreshListener,
ContactSelectionListFragment.OnContactSelectedListener
{
private static final String TAG = ContactSelectionActivity.class.getSimpleName();
public final static String PUSH_ONLY_EXTRA = "push_only";
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
protected ContactSelectionListFragment contactsFragment;
private Toolbar toolbar;
private EditText searchText;
private AnimatingToggle toggle;
protected ImageView action;
private ImageView keyboardToggle;
private ImageView dialpadToggle;
private ImageView clearToggle;
@Override
protected void onPreCreate() {
dynamicTheme.onCreate(this);
dynamicLanguage.onCreate(this);
}
@Override
protected void onCreate(Bundle icicle, @NonNull MasterSecret masterSecret) {
setContentView(R.layout.contact_selection_activity);
initializeToolbar();
initializeResources();
initializeSearch();
}
@Override
public void onResume() {
super.onResume();
dynamicTheme.onResume(this);
dynamicLanguage.onResume(this);
}
private void initializeToolbar() {
this.toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
private void initializeResources() {
this.action = (ImageView) findViewById(R.id.action_icon);
this.searchText = (EditText) findViewById(R.id.search_view);
this.toggle = (AnimatingToggle) findViewById(R.id.button_toggle);
this.keyboardToggle = (ImageView) findViewById(R.id.search_keyboard);
this.dialpadToggle = (ImageView) findViewById(R.id.search_dialpad);
this.clearToggle = (ImageView) findViewById(R.id.search_clear);
contactsFragment = (ContactSelectionListFragment) getSupportFragmentManager().findFragmentById(R.id.contact_selection_list_fragment);
contactsFragment.setOnContactSelectedListener(this);
contactsFragment.setOnRefreshListener(this);
this.keyboardToggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME);
ServiceUtil.getInputMethodManager(ContactSelectionActivity.this).showSoftInput(searchText, 0);
toggle.display(dialpadToggle);
}
});
this.dialpadToggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchText.setInputType(InputType.TYPE_CLASS_PHONE);
ServiceUtil.getInputMethodManager(ContactSelectionActivity.this).showSoftInput(searchText, 0);
toggle.display(keyboardToggle);
}
});
this.clearToggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchText.setText("");
if (SearchUtil.isTextInput(searchText)) toggle.display(dialpadToggle);
else toggle.display(keyboardToggle);
}
});
}
private void initializeSearch() {
this.searchText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!SearchUtil.isEmpty(searchText)) toggle.display(clearToggle);
else if (SearchUtil.isTextInput(searchText)) toggle.display(dialpadToggle);
else if (SearchUtil.isPhoneInput(searchText)) toggle.display(keyboardToggle);
contactsFragment.setQueryFilter(searchText.getText().toString());
}
});
}
@Override
public void onRefresh() {
new RefreshDirectoryTask(this).execute(getApplicationContext());
}
@Override
public void onContactSelected(String number) {}
private static class SearchUtil {
public static boolean isTextInput(EditText editText) {
return (editText.getInputType() & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_TEXT;
}
public static boolean isPhoneInput(EditText editText) {
return (editText.getInputType() & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_PHONE;
}
public static boolean isEmpty(EditText editText) {
return editText.getText().length() <= 0;
}
}
private static class RefreshDirectoryTask extends AsyncTask<Context, Void, Void> {
private final WeakReference<ContactSelectionActivity> activity;
private RefreshDirectoryTask(ContactSelectionActivity activity) {
this.activity = new WeakReference<>(activity);
}
@Override
protected Void doInBackground(Context... params) {
try {
DirectoryHelper.refreshDirectory(params[0]);
} catch (IOException e) {
Log.w(TAG, e);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
ContactSelectionActivity activity = this.activity.get();
if (activity != null && !activity.isFinishing()) {
activity.searchText.setText("");
activity.contactsFragment.resetQueryFilter();
}
}
}
}

View File

@@ -1,5 +1,5 @@
/**
* Copyright (C) 2011 Whisper Systems
* Copyright (C) 2015 Open Whisper Systems
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,23 +18,23 @@ package org.thoughtcrime.securesms;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.text.Editable;
import android.text.TextWatcher;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.TextView;
import org.thoughtcrime.securesms.contacts.ContactAccessor;
import org.thoughtcrime.securesms.contacts.ContactSelectionListAdapter;
import org.thoughtcrime.securesms.contacts.ContactSelectionListItem;
import org.thoughtcrime.securesms.contacts.ContactsCursorLoader;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import java.util.LinkedList;
import java.util.List;
@@ -48,17 +48,17 @@ import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
* @author Moxie Marlinspike
*
*/
public class PushContactSelectionListFragment extends Fragment
implements LoaderManager.LoaderCallbacks<Cursor>
public class ContactSelectionListFragment extends Fragment
implements LoaderManager.LoaderCallbacks<Cursor>
{
private static final String TAG = "ContactSelectFragment";
private static final String TAG = ContactSelectionListFragment.class.getSimpleName();
private TextView emptyText;
private Map<Long, String> selectedContacts;
private OnContactSelectedListener onContactSelectedListener;
private StickyListHeadersListView listView;
private SwipeRefreshLayout swipeRefresh;
private String cursorFilter;
private boolean multi = false;
@@ -66,7 +66,6 @@ public class PushContactSelectionListFragment extends Fragment
@Override
public void onActivityCreated(Bundle icicle) {
super.onCreate(icicle);
initializeResources();
initializeCursor();
}
@@ -82,7 +81,19 @@ public class PushContactSelectionListFragment extends Fragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.push_contact_selection_list_activity, container, false);
View view = inflater.inflate(R.layout.contact_selection_list_fragment, container, false);
emptyText = (TextView) view.findViewById(android.R.id.empty);
swipeRefresh = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh);
listView = (StickyListHeadersListView) view.findViewById(android.R.id.list);
listView.setFocusable(true);
listView.setFastScrollEnabled(true);
listView.setDrawingListUnderStickyHeader(false);
listView.setOnItemClickListener(new ListClickListener());
swipeRefresh.setEnabled(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT);
return view;
}
public List<String> getSelectedContacts() {
@@ -105,46 +116,22 @@ public class PushContactSelectionListFragment extends Fragment
this.getLoaderManager().initLoader(0, null, this);
}
private void initializeResources() {
emptyText = (TextView) getView().findViewById(android.R.id.empty);
listView = (StickyListHeadersListView) getView().findViewById(android.R.id.list);
listView.setFocusable(true);
listView.setFastScrollEnabled(true);
listView.setDrawingListUnderStickyHeader(false);
listView.setOnItemClickListener(new ListClickListener());
EditText filterEditText = (EditText) getView().findViewById(R.id.filter);
filterEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
cursorFilter = charSequence.toString();
update();
}
@Override
public void afterTextChanged(Editable editable) {
}
});
cursorFilter = null;
public void setQueryFilter(String filter) {
this.cursorFilter = filter;
this.getLoaderManager().restartLoader(0, null, this);
}
public void update() {
this.getLoaderManager().restartLoader(0, null, this);
public void resetQueryFilter() {
setQueryFilter(null);
swipeRefresh.setRefreshing(false);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
if (getActivity().getIntent().getBooleanExtra(PushContactSelectionActivity.PUSH_ONLY_EXTRA, false)) {
return ContactAccessor.getInstance().getCursorLoaderForPushContacts(getActivity(), cursorFilter);
} else {
return ContactAccessor.getInstance().getCursorLoaderForContacts(getActivity(), cursorFilter);
}
boolean pushOnly = getActivity().getIntent().getBooleanExtra(ContactSelectionActivity.PUSH_ONLY_EXTRA, false);
boolean supportsSms = TextSecurePreferences.isSmsEnabled(getActivity());
return new ContactsCursorLoader(getActivity(), !pushOnly && supportsSms, cursorFilter);
}
@Override
@@ -178,6 +165,10 @@ public class PushContactSelectionListFragment extends Fragment
this.onContactSelectedListener = onContactSelectedListener;
}
public void setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener onRefreshListener) {
this.swipeRefresh.setOnRefreshListener(onRefreshListener);
}
public interface OnContactSelectedListener {
public void onContactSelected(String number);
}

View File

@@ -29,7 +29,6 @@ import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.ColorDrawable;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
@@ -55,10 +54,10 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import com.commonsware.cwac.camera.CameraHost.FailureReason;
import com.google.protobuf.ByteString;
import org.thoughtcrime.securesms.TransportOptions.OnTransportChangedListener;
@@ -96,6 +95,7 @@ import org.thoughtcrime.securesms.mms.OutgoingSecureMediaMessage;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck;
import org.thoughtcrime.securesms.notifications.MessageNotifier;
import org.thoughtcrime.securesms.providers.CaptureProvider;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
@@ -245,7 +245,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
initializeSecurity();
initializeEnabledCheck();
initializeMmsEnabledCheck();
initializeIme();
composeText.setTransport(sendButton.getSelectedTransport());
titleView.setTitle(recipients);
setActionBarColor(recipients.getColor());
@@ -266,6 +266,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
@Override public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
composeText.setTransport(sendButton.getSelectedTransport());
quickAttachmentDrawer.onConfigurationChanged();
hideEmojiDrawer(false);
}
@@ -756,25 +757,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
}.execute();
}
private void initializeIme() {
if (TextSecurePreferences.isEnterSendsEnabled(this)) {
composeText.setInputType (composeText.getInputType() & ~InputType.TYPE_TEXT_FLAG_MULTI_LINE);
composeText.setImeOptions(composeText.getImeOptions() & ~EditorInfo.IME_FLAG_NO_ENTER_ACTION);
} else {
composeText.setInputType (composeText.getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
composeText.setImeOptions(composeText.getImeOptions() | EditorInfo.IME_FLAG_NO_ENTER_ACTION);
}
composeText.setOnEditorActionListener(new OnEditorActionListener() {
@Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEND) {
sendMessage();
return true;
}
return false;
}
});
}
private void initializeViews() {
titleView = (ConversationTitleView) getSupportActionBar().getCustomView();
buttonToggle = (AnimatingToggle) findViewById(R.id.button_toggle);
@@ -814,17 +796,15 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
SendButtonListener sendButtonListener = new SendButtonListener();
ComposeKeyPressedListener composeKeyPressedListener = new ComposeKeyPressedListener();
composeText.setOnEditorActionListener(sendButtonListener);
attachButton.setOnClickListener(new AttachButtonListener());
quickAttachmentToggle.setEnabled(false);
sendButton.setOnClickListener(sendButtonListener);
sendButton.setEnabled(true);
sendButton.addOnTransportChangedListener(new OnTransportChangedListener() {
@Override
public void onChange(TransportOption newTransport) {
calculateCharactersRemaining();
composeText.setHint(newTransport.getComposeHint());
composeText.setImeActionLabel(newTransport.getComposeHint(), EditorInfo.IME_ACTION_SEND);
composeText.setInputType(composeText.getInputType());
composeText.setTransport(newTransport);
buttonToggle.getBackground().setColorFilter(newTransport.getBackgroundColor(), Mode.MULTIPLY);
}
});
@@ -978,7 +958,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
case AttachmentTypeSelectorAdapter.ADD_CONTACT_INFO:
AttachmentManager.selectContactInfo(this, PICK_CONTACT_INFO); break;
case AttachmentTypeSelectorAdapter.TAKE_PHOTO:
attachmentManager.capturePhoto(this, TAKE_PHOTO); break;
attachmentManager.capturePhoto(this, recipients, TAKE_PHOTO); break;
}
}
@@ -1332,11 +1312,19 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
}
@Override
public void onImageCapture(@NonNull final Bitmap bitmap) {
attachmentManager.setCaptureImage(masterSecret, bitmap);
public void onImageCapture(@NonNull final byte[] imageBytes) {
attachmentManager.setCaptureUri(CaptureProvider.getInstance(this).create(masterSecret, recipients, imageBytes));
addAttachmentImage(masterSecret, attachmentManager.getCaptureUri());
quickAttachmentDrawer.close();
}
@Override
public void onCameraFail(FailureReason reason) {
Toast.makeText(this, R.string.quick_camera_unavailable, Toast.LENGTH_SHORT).show();
quickAttachmentDrawer.close();
quickAttachmentToggle.disable();
}
// Listeners
private class AttachmentTypeListener implements DialogInterface.OnClickListener {

View File

@@ -23,6 +23,7 @@ import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.NonNull;
import android.text.TextUtils;
@@ -100,6 +101,10 @@ public class ConversationItem extends LinearLayout {
private Button mmsDownloadButton;
private TextView mmsDownloadingLabel;
private int defaultBubbleColor;
private Drawable selectedBackground;
private Drawable normalBackground;
private final MmsDownloadClickListener mmsDownloadClickListener = new MmsDownloadClickListener();
private final MmsPreferencesClickListener mmsPreferencesClickListener = new MmsPreferencesClickListener();
private final ClickListener clickListener = new ClickListener();
@@ -119,6 +124,7 @@ public class ConversationItem extends LinearLayout {
protected void onFinishInflate() {
super.onFinishInflate();
initializeAttributes();
ViewGroup pendingIndicatorStub = (ViewGroup) findViewById(R.id.pending_indicator_stub);
if (pendingIndicatorStub != null) {
@@ -181,6 +187,18 @@ public class ConversationItem extends LinearLayout {
}
}
private void initializeAttributes() {
final int[] attributes = new int[] {R.attr.conversation_item_bubble_background,
R.attr.conversation_list_item_background_selected,
R.attr.conversation_item_background};
final TypedArray attrs = context.obtainStyledAttributes(attributes);
defaultBubbleColor = attrs.getColor(0, Color.WHITE);
selectedBackground = attrs.getDrawable(1);
normalBackground = attrs.getDrawable(2);
attrs.recycle();
}
public void unbind() {
}
@@ -191,12 +209,8 @@ public class ConversationItem extends LinearLayout {
/// MessageRecord Attribute Parsers
private void setBubbleState(MessageRecord messageRecord) {
int[] attributes = new int[]{R.attr.conversation_item_bubble_background};
TypedArray colors = context.obtainStyledAttributes(attributes);
int defaultColor = colors.getColor(0, Color.WHITE);
if (messageRecord.isOutgoing()) {
bodyBubble.getBackground().setColorFilter(defaultColor, PorterDuff.Mode.MULTIPLY);
bodyBubble.getBackground().setColorFilter(defaultBubbleColor, PorterDuff.Mode.MULTIPLY);
} else {
bodyBubble.getBackground().setColorFilter(messageRecord.getIndividualRecipient()
.getColor()
@@ -204,22 +218,14 @@ public class ConversationItem extends LinearLayout {
PorterDuff.Mode.MULTIPLY);
}
colors.recycle();
}
private void setSelectionBackgroundDrawables(MessageRecord messageRecord) {
int[] attributes = new int[]{R.attr.conversation_list_item_background_selected,
R.attr.conversation_item_background};
TypedArray drawables = context.obtainStyledAttributes(attributes);
if (batchSelected.contains(messageRecord)) {
setBackgroundDrawable(drawables.getDrawable(0));
setBackgroundDrawable(selectedBackground);
} else {
setBackgroundDrawable(drawables.getDrawable(1));
setBackgroundDrawable(normalBackground);
}
drawables.recycle();
}
private boolean hasConversationBubble(MessageRecord messageRecord) {
@@ -263,7 +269,7 @@ public class ConversationItem extends LinearLayout {
mediaThumbnail.setImageResource(masterSecret, messageRecord.getId(),
messageRecord.getDateReceived(),
((MediaMmsMessageRecord)messageRecord).getSlideDeckFuture());
mediaThumbnail.setShowProgress(!messageRecord.isFailed() && messageRecord.isPending());
mediaThumbnail.setShowProgress(!messageRecord.isFailed() && (!messageRecord.isOutgoing() || messageRecord.isPending()));
bodyText.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
} else {
mediaThumbnail.setVisibility(View.GONE);

View File

@@ -212,8 +212,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.w(TAG, "detected android contact data changed, refreshing cache");
// TODO only clear updated recipients from cache
Log.w(TAG, "Detected android contact data changed, refreshing cache");
RecipientFactory.clearCache();
ConversationListActivity.this.runOnUiThread(new Runnable() {
@Override

View File

@@ -29,21 +29,16 @@ import android.widget.ProgressBar;
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.crypto.storage.TextSecurePreKeyStore;
import org.thoughtcrime.securesms.crypto.storage.TextSecureSessionStore;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.EncryptingSmsDatabase;
import org.thoughtcrime.securesms.database.PushDatabase;
import org.thoughtcrime.securesms.database.SmsDatabase;
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
import org.thoughtcrime.securesms.jobs.CreateSignedPreKeyJob;
import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob;
import org.thoughtcrime.securesms.jobs.PushDecryptJob;
import org.thoughtcrime.securesms.jobs.SmsDecryptJob;
import org.thoughtcrime.securesms.notifications.MessageNotifier;
import org.thoughtcrime.securesms.util.ParcelUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.VersionTracker;
import org.whispersystems.jobqueue.EncryptionKeys;
import org.whispersystems.textsecure.api.messages.TextSecureEnvelope;
import java.io.File;
import java.util.SortedSet;
@@ -60,6 +55,8 @@ public class DatabaseUpgradeActivity extends BaseActivity {
public static final int SIGNED_PREKEY_VERSION = 83;
public static final int NO_DECRYPT_QUEUE_VERSION = 113;
public static final int PUSH_DECRYPT_SERIAL_ID_VERSION = 131;
public static final int MIGRATE_SESSION_PLAINTEXT = 136;
public static final int CONTACTS_ACCOUNT_VERSION = 136;
private static final SortedSet<Integer> UPGRADE_VERSIONS = new TreeSet<Integer>() {{
add(NO_MORE_KEY_EXCHANGE_PREFIX_VERSION);
@@ -70,6 +67,7 @@ public class DatabaseUpgradeActivity extends BaseActivity {
add(SIGNED_PREKEY_VERSION);
add(NO_DECRYPT_QUEUE_VERSION);
add(PUSH_DECRYPT_SERIAL_ID_VERSION);
add(MIGRATE_SESSION_PLAINTEXT);
}};
private MasterSecret masterSecret;
@@ -90,10 +88,6 @@ public class DatabaseUpgradeActivity extends BaseActivity {
.execute(VersionTracker.getLastSeenVersion(this));
} else {
VersionTracker.updateLastSeenVersion(this);
ApplicationContext.getInstance(this)
.getJobManager()
.setEncryptionKeys(new EncryptionKeys(ParcelUtil.serialize(masterSecret)));
// DecryptingQueue.schedulePendingDecrypts(DatabaseUpgradeActivity.this, masterSecret);
MessageNotifier.updateNotification(DatabaseUpgradeActivity.this, masterSecret);
startActivity((Intent)getIntent().getParcelableExtra("next_intent"));
finish();
@@ -154,9 +148,7 @@ public class DatabaseUpgradeActivity extends BaseActivity {
.onApplicationLevelUpgrade(context, masterSecret, params[0], this);
if (params[0] < CURVE25519_VERSION) {
if (!IdentityKeyUtil.hasCurve25519IdentityKeys(context)) {
IdentityKeyUtil.generateCurve25519IdentityKeys(context, masterSecret);
}
IdentityKeyUtil.migrateIdentityKeys(context, masterSecret);
}
if (params[0] < NO_V1_VERSION) {
@@ -178,70 +170,54 @@ public class DatabaseUpgradeActivity extends BaseActivity {
if (params[0] < SIGNED_PREKEY_VERSION) {
ApplicationContext.getInstance(getApplicationContext())
.getJobManager()
.add(new CreateSignedPreKeyJob(context, masterSecret));
.add(new CreateSignedPreKeyJob(context));
}
if (params[0] < NO_DECRYPT_QUEUE_VERSION) {
EncryptingSmsDatabase smsDatabase = DatabaseFactory.getEncryptingSmsDatabase(getApplicationContext());
PushDatabase pushDatabase = DatabaseFactory.getPushDatabase(getApplicationContext());
SmsDatabase.Reader smsReader = null;
Cursor pushReader = null;
SmsMessageRecord record;
try {
smsReader = smsDatabase.getDecryptInProgressMessages(masterSecret);
while ((record = smsReader.getNext()) != null) {
ApplicationContext.getInstance(getApplicationContext())
.getJobManager()
.add(new SmsDecryptJob(getApplicationContext(), record.getId()));
}
} finally {
if (smsReader != null)
smsReader.close();
}
try {
pushReader = pushDatabase.getPending();
while ((pushReader != null && pushReader.moveToNext())) {
ApplicationContext.getInstance(getApplicationContext())
.getJobManager()
.add(new PushDecryptJob(getApplicationContext(),
pushReader.getLong(pushReader.getColumnIndexOrThrow(PushDatabase.ID)),
pushReader.getString(pushReader.getColumnIndexOrThrow(PushDatabase.SOURCE))));
}
} finally {
if (pushReader != null)
pushReader.close();
}
scheduleMessagesInPushDatabase(context);
}
if (params[0] < PUSH_DECRYPT_SERIAL_ID_VERSION) {
PushDatabase pushDatabase = DatabaseFactory.getPushDatabase(context);
Cursor pushReader = null;
scheduleMessagesInPushDatabase(context);
}
try {
pushReader = pushDatabase.getPending();
if (params[0] < MIGRATE_SESSION_PLAINTEXT) {
new TextSecureSessionStore(context, masterSecret).migrateSessions();
new TextSecurePreKeyStore(context, masterSecret).migrateRecords();
while (pushReader != null && pushReader.moveToNext()) {
ApplicationContext.getInstance(getApplicationContext())
.getJobManager()
.add(new PushDecryptJob(getApplicationContext(),
pushReader.getLong(pushReader.getColumnIndexOrThrow(PushDatabase.ID)),
pushReader.getString(pushReader.getColumnIndexOrThrow(PushDatabase.SOURCE))));
}
} finally {
if (pushReader != null)
pushReader.close();
}
IdentityKeyUtil.migrateIdentityKeys(context, masterSecret);
scheduleMessagesInPushDatabase(context);;
}
if (params[0] < CONTACTS_ACCOUNT_VERSION) {
ApplicationContext.getInstance(getApplicationContext())
.getJobManager()
.add(new DirectoryRefreshJob(getApplicationContext()));
}
return null;
}
private void scheduleMessagesInPushDatabase(Context context) {
PushDatabase pushDatabase = DatabaseFactory.getPushDatabase(context);
Cursor pushReader = null;
try {
pushReader = pushDatabase.getPending();
while (pushReader != null && pushReader.moveToNext()) {
ApplicationContext.getInstance(getApplicationContext())
.getJobManager()
.add(new PushDecryptJob(getApplicationContext(),
pushReader.getLong(pushReader.getColumnIndexOrThrow(PushDatabase.ID)),
pushReader.getString(pushReader.getColumnIndexOrThrow(PushDatabase.SOURCE))));
}
} finally {
if (pushReader != null)
pushReader.close();
}
}
@Override
protected void onProgressUpdate(Double... update) {
indeterminateProgress.setVisibility(View.GONE);
@@ -254,11 +230,6 @@ public class DatabaseUpgradeActivity extends BaseActivity {
@Override
protected void onPostExecute(Void result) {
VersionTracker.updateLastSeenVersion(DatabaseUpgradeActivity.this);
// DecryptingQueue.schedulePendingDecrypts(DatabaseUpgradeActivity.this, masterSecret);
ApplicationContext.getInstance(DatabaseUpgradeActivity.this)
.getJobManager()
.setEncryptionKeys(new EncryptionKeys(ParcelUtil.serialize(masterSecret)));
MessageNotifier.updateNotification(DatabaseUpgradeActivity.this, masterSecret);
startActivity((Intent)getIntent().getParcelableExtra("next_intent"));

View File

@@ -108,7 +108,7 @@ public class DeviceProvisioningActivity extends PassphraseRequiredActionBarActiv
String ephemeralId = uri.getQueryParameter("uuid");
String publicKeyEncoded = uri.getQueryParameter("pub_key");
ECPublicKey publicKey = Curve.decodePoint(Base64.decode(publicKeyEncoded), 0);
IdentityKeyPair identityKeyPair = IdentityKeyUtil.getIdentityKeyPair(context, masterSecret);
IdentityKeyPair identityKeyPair = IdentityKeyUtil.getIdentityKeyPair(context);
accountManager.addDevice(ephemeralId, publicKey, identityKeyPair, verificationCode);
return SUCCESS;

View File

@@ -1,5 +1,5 @@
/**
* Copyright (C) 2011 Whisper Systems
* Copyright (C) 2015 Open Whisper Systems
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,98 +18,37 @@ package org.thoughtcrime.securesms;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.DirectoryHelper;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
/**
* Activity container for selecting a list of contacts.
* Activity container for starting a new conversation.
*
* @author Moxie Marlinspike
*
*/
public class NewConversationActivity extends PassphraseRequiredActionBarActivity {
public class NewConversationActivity extends ContactSelectionActivity {
private static final String TAG = NewConversationActivity.class.getSimpleName();
private final DynamicTheme dynamicTheme = new DynamicTheme ();
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
private PushContactSelectionListFragment contactsFragment;
@Override
protected void onPreCreate() {
dynamicTheme.onCreate(this);
dynamicLanguage.onCreate(this);
}
public void onCreate(Bundle bundle, MasterSecret masterSecret) {
super.onCreate(bundle, masterSecret);
@Override
protected void onCreate(Bundle icicle, @NonNull MasterSecret masterSecret) {
action.setVisibility(View.GONE);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.new_conversation_activity);
initializeResources();
}
@Override
public void onResume() {
super.onResume();
dynamicTheme.onResume(this);
dynamicLanguage.onResume(this);
getSupportActionBar().setTitle(R.string.AndroidManifest__select_contacts);
}
public void onContactSelected(String number) {
Recipients recipients = RecipientFactory.getRecipientsFromString(this, number, true);
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = this.getMenuInflater();
menu.clear();
if (TextSecurePreferences.isPushRegistered(this)) inflater.inflate(R.menu.push_directory, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case R.id.menu_refresh_directory: handleDirectoryRefresh(); return true;
case android.R.id.home: finish(); return true;
}
return false;
}
private void initializeResources() {
contactsFragment = (PushContactSelectionListFragment) getSupportFragmentManager().findFragmentById(R.id.contact_selection_list_fragment);
contactsFragment.setOnContactSelectedListener(new PushContactSelectionListFragment.OnContactSelectedListener() {
@Override
public void onContactSelected(String number) {
Log.i(TAG, "Choosing contact from list.");
Recipients recipients = RecipientFactory.getRecipientsFromString(NewConversationActivity.this, number, true);
openNewConversation(recipients);
}
});
}
private void handleDirectoryRefresh() {
DirectoryHelper.refreshDirectoryWithProgressDialog(this, new DirectoryHelper.DirectoryUpdateFinishedListener() {
@Override
public void onUpdateFinished() {
contactsFragment.update();
}
});
}
private void openNewConversation(Recipients recipients) {
if (recipients != null) {
Intent intent = new Intent(this, ConversationActivity.class);
intent.putExtra(ConversationActivity.RECIPIENTS_EXTRA, recipients.getIds());
@@ -117,11 +56,25 @@ public class NewConversationActivity extends PassphraseRequiredActionBarActivity
intent.putExtra(ConversationActivity.DRAFT_AUDIO_EXTRA, getIntent().getParcelableExtra(ConversationActivity.DRAFT_AUDIO_EXTRA));
intent.putExtra(ConversationActivity.DRAFT_VIDEO_EXTRA, getIntent().getParcelableExtra(ConversationActivity.DRAFT_VIDEO_EXTRA));
intent.putExtra(ConversationActivity.DRAFT_IMAGE_EXTRA, getIntent().getParcelableExtra(ConversationActivity.DRAFT_IMAGE_EXTRA));
long existingThread = DatabaseFactory.getThreadDatabase(this).getThreadIdIfExistsFor(recipients);
intent.putExtra(ConversationActivity.THREAD_ID_EXTRA, existingThread);
intent.putExtra(ConversationActivity.DISTRIBUTION_TYPE_EXTRA, ThreadDatabase.DistributionTypes.DEFAULT);
startActivity(intent);
finish();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case android.R.id.home: super.onBackPressed(); return true;
}
return false;
}
}

View File

@@ -66,7 +66,7 @@ public class PassphraseCreateActivity extends PassphraseActivity {
passphrase);
MasterSecretUtil.generateAsymmetricMasterSecret(PassphraseCreateActivity.this, masterSecret);
IdentityKeyUtil.generateIdentityKeys(PassphraseCreateActivity.this, masterSecret);
IdentityKeyUtil.generateIdentityKeys(PassphraseCreateActivity.this);
VersionTracker.updateLastSeenVersion(PassphraseCreateActivity.this);
TextSecurePreferences.setPasswordDisabled(PassphraseCreateActivity.this, true);

View File

@@ -22,10 +22,12 @@ import android.support.annotation.NonNull;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.util.DirectoryHelper;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
@@ -38,81 +40,28 @@ import java.util.List;
* @author Moxie Marlinspike
*
*/
public class PushContactSelectionActivity extends PassphraseRequiredActionBarActivity {
private final static String TAG = "ContactSelectActivity";
public final static String PUSH_ONLY_EXTRA = "push_only";
public class PushContactSelectionActivity extends ContactSelectionActivity {
private final DynamicTheme dynamicTheme = new DynamicTheme ();
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
private PushContactSelectionListFragment contactsFragment;
@Override
protected void onPreCreate() {
dynamicTheme.onCreate(this);
dynamicLanguage.onCreate(this);
}
private final static String TAG = PushContactSelectionActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle icicle, @NonNull MasterSecret masterSecret) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.push_contact_selection_activity);
initializeResources();
}
@Override
public void onResume() {
super.onResume();
dynamicTheme.onResume(this);
dynamicLanguage.onResume(this);
getSupportActionBar().setTitle(R.string.AndroidManifest__select_contacts);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = this.getMenuInflater();
menu.clear();
if (TextSecurePreferences.isPushRegistered(this)) inflater.inflate(R.menu.push_directory, menu);
inflater.inflate(R.menu.contact_selection, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case R.id.menu_refresh_directory: handleDirectoryRefresh(); return true;
case R.id.menu_selection_finished: handleSelectionFinished(); return true;
case android.R.id.home: finish(); return true;
}
return false;
}
private void initializeResources() {
contactsFragment = (PushContactSelectionListFragment) getSupportFragmentManager().findFragmentById(R.id.contact_selection_list_fragment);
super.onCreate(icicle, masterSecret);
contactsFragment.setMultiSelect(true);
}
private void handleSelectionFinished() {
Intent resultIntent = getIntent();
List<String> selectedContacts = contactsFragment.getSelectedContacts();
if (selectedContacts != null) {
resultIntent.putStringArrayListExtra("contacts", new ArrayList<>(selectedContacts));
}
setResult(RESULT_OK, resultIntent);
finish();
}
private void handleDirectoryRefresh() {
DirectoryHelper.refreshDirectoryWithProgressDialog(this, new DirectoryHelper.DirectoryUpdateFinishedListener() {
action.setImageDrawable(getResources().getDrawable(R.drawable.ic_check_white_24dp));
action.setOnClickListener(new View.OnClickListener() {
@Override
public void onUpdateFinished() {
contactsFragment.update();
public void onClick(View v) {
Intent resultIntent = getIntent();
List<String> selectedContacts = contactsFragment.getSelectedContacts();
if (selectedContacts != null) {
resultIntent.putStringArrayListExtra("contacts", new ArrayList<>(selectedContacts));
}
setResult(RESULT_OK, resultIntent);
finish();
}
});
}

View File

@@ -98,7 +98,9 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case android.R.id.home: finish(); return true;
case android.R.id.home:
super.onBackPressed();
return true;
}
return false;

View File

@@ -2,7 +2,10 @@ package org.thoughtcrime.securesms;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.util.Log;
import android.widget.Toast;
@@ -25,36 +28,79 @@ public class SmsSendtoActivity extends Activity {
}
private Intent getNextIntent(Intent original) {
String body = "";
String data = "";
DestinationAndBody destination;
if (original.getAction().equals(Intent.ACTION_SENDTO)) {
body = original.getStringExtra("sms_body");
data = original.getData().getSchemeSpecificPart();
destination = getDestinationForSendTo(original);
} else if (original.getData() != null && "content".equals(original.getData().getScheme())) {
destination = getDestinationForSyncAdapter(original);
} else {
try {
Rfc5724Uri smsUri = new Rfc5724Uri(original.getData().toString());
body = smsUri.getQueryParams().get("body");
data = smsUri.getPath();
} catch (URISyntaxException e) {
Log.w(TAG, "unable to parse RFC5724 URI from intent", e);
}
destination = getDestinationForView(original);
}
Recipients recipients = RecipientFactory.getRecipientsFromString(this, data, false);
Recipients recipients = RecipientFactory.getRecipientsFromString(this, destination.getDestination(), false);
long threadId = DatabaseFactory.getThreadDatabase(this).getThreadIdIfExistsFor(recipients);
final Intent nextIntent;
if (recipients == null || recipients.isEmpty()) {
nextIntent = new Intent(this, NewConversationActivity.class);
nextIntent.putExtra(ConversationActivity.DRAFT_TEXT_EXTRA, body);
nextIntent.putExtra(ConversationActivity.DRAFT_TEXT_EXTRA, destination.getBody());
Toast.makeText(this, R.string.ConversationActivity_specify_recipient, Toast.LENGTH_LONG).show();
} else {
nextIntent = new Intent(this, ConversationActivity.class);
nextIntent.putExtra(ConversationActivity.DRAFT_TEXT_EXTRA, body);
nextIntent.putExtra(ConversationActivity.DRAFT_TEXT_EXTRA, destination.getBody());
nextIntent.putExtra(ConversationActivity.THREAD_ID_EXTRA, threadId);
nextIntent.putExtra(ConversationActivity.RECIPIENTS_EXTRA, recipients.getIds());
}
return nextIntent;
}
private @NonNull DestinationAndBody getDestinationForSendTo(Intent intent) {
return new DestinationAndBody(intent.getData().getSchemeSpecificPart(),
intent.getStringExtra("sms_body"));
}
private @NonNull DestinationAndBody getDestinationForView(Intent intent) {
try {
Rfc5724Uri smsUri = new Rfc5724Uri(intent.getData().toString());
return new DestinationAndBody(smsUri.getPath(), smsUri.getQueryParams().get("body"));
} catch (URISyntaxException e) {
Log.w(TAG, "unable to parse RFC5724 URI from intent", e);
return new DestinationAndBody("", "");
}
}
private @NonNull DestinationAndBody getDestinationForSyncAdapter(Intent intent) {
Cursor cursor = null;
try {
cursor = getContentResolver().query(intent.getData(), null, null, null, null);
if (cursor != null && cursor.moveToNext()) {
return new DestinationAndBody(cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.RawContacts.Data.DATA1)), "");
}
return new DestinationAndBody("", "");
} finally {
if (cursor != null) cursor.close();
}
}
private static class DestinationAndBody {
private final String destination;
private final String body;
private DestinationAndBody(String destination, String body) {
this.destination = destination;
this.body = body;
}
public String getDestination() {
return destination;
}
public String getBody() {
return body;
}
}
}

View File

@@ -1,17 +1,24 @@
package org.thoughtcrime.securesms.components;
import android.content.Context;
import android.content.res.Configuration;
import android.support.annotation.NonNull;
import android.support.v7.widget.AppCompatEditText;
import android.text.InputType;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.TextUtils.TruncateAt;
import android.text.style.RelativeSizeSpan;
import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
import org.thoughtcrime.securesms.TransportOption;
import org.thoughtcrime.securesms.components.emoji.EmojiEditText;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
public class ComposeText extends EmojiEditText {
private SpannableString hint;
public ComposeText(Context context) {
super(context);
}
@@ -24,10 +31,24 @@ public class ComposeText extends EmojiEditText {
super(context, attrs, defStyleAttr);
}
@Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (!TextUtils.isEmpty(hint)) {
setHint(ellipsizeToWidth(hint));
}
}
private CharSequence ellipsizeToWidth(CharSequence text) {
return TextUtils.ellipsize(text,
getPaint(),
getWidth() - getPaddingLeft() - getPaddingRight(),
TruncateAt.END);
}
public void setHint(@NonNull String hint) {
SpannableString span = new SpannableString(hint);
span.setSpan(new RelativeSizeSpan(0.8f), 0, hint.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
super.setHint(span);
this.hint = new SpannableString(hint);
this.hint.setSpan(new RelativeSizeSpan(0.8f), 0, hint.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
super.setHint(ellipsizeToWidth(this.hint));
}
public void appendInvite(String invite) {
@@ -37,4 +58,30 @@ public class ComposeText extends EmojiEditText {
append(invite);
}
private boolean isLandscape() {
return getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
}
public void setTransport(TransportOption transport) {
final boolean enterSends = TextSecurePreferences.isEnterSendsEnabled(getContext());
int imeOptions = (getImeOptions() & ~EditorInfo.IME_MASK_ACTION) | EditorInfo.IME_ACTION_SEND;
int inputType = getInputType();
if (isLandscape()) setImeActionLabel(transport.getComposeHint(), EditorInfo.IME_ACTION_SEND);
else setImeActionLabel(null, 0);
inputType = !isLandscape() && enterSends
? inputType & ~InputType.TYPE_TEXT_FLAG_MULTI_LINE
: inputType | InputType.TYPE_TEXT_FLAG_MULTI_LINE;
imeOptions = enterSends
? imeOptions & ~EditorInfo.IME_FLAG_NO_ENTER_ACTION
: imeOptions | EditorInfo.IME_FLAG_NO_ENTER_ACTION;
setInputType(inputType);
setImeOptions(imeOptions);
setHint(transport.getComposeHint());
}
}

View File

@@ -29,6 +29,7 @@ import android.view.View;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.Util;
import java.lang.reflect.Field;
import java.util.HashSet;
@@ -46,6 +47,9 @@ public class KeyboardAwareLinearLayout extends LinearLayoutCompat {
private final Set<OnKeyboardHiddenListener> hiddenListeners = new HashSet<>();
private final Set<OnKeyboardShownListener> shownListeners = new HashSet<>();
private final int minKeyboardSize;
private final int minCustomKeyboardSize;
private final int defaultCustomKeyboardSize;
private final int minCustomKeyboardTopMargin;
private boolean keyboardOpen = false;
private int rotation = -1;
@@ -60,7 +64,10 @@ public class KeyboardAwareLinearLayout extends LinearLayoutCompat {
public KeyboardAwareLinearLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
minKeyboardSize = getResources().getDimensionPixelSize(R.dimen.min_keyboard_size);
minKeyboardSize = getResources().getDimensionPixelSize(R.dimen.min_keyboard_size);
minCustomKeyboardSize = getResources().getDimensionPixelSize(R.dimen.min_custom_keyboard_size);
defaultCustomKeyboardSize = getResources().getDimensionPixelSize(R.dimen.default_custom_keyboard_size);
minCustomKeyboardTopMargin = getResources().getDimensionPixelSize(R.dimen.min_custom_keyboard_top_margin);
}
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
@@ -134,10 +141,6 @@ public class KeyboardAwareLinearLayout extends LinearLayoutCompat {
notifyHiddenListeners();
}
public boolean isKeyboardOpen() {
return keyboardOpen;
}
public int getKeyboardHeight() {
return isLandscape() ? getKeyboardLandscapeHeight() : getKeyboardPortraitHeight();
}
@@ -156,9 +159,8 @@ public class KeyboardAwareLinearLayout extends LinearLayoutCompat {
private int getKeyboardPortraitHeight() {
int keyboardHeight = PreferenceManager.getDefaultSharedPreferences(getContext())
.getInt("keyboard_height_portrait",
getResources().getDimensionPixelSize(R.dimen.min_emoji_drawer_height));
return Math.min(keyboardHeight, getRootView().getHeight() - getResources().getDimensionPixelSize(R.dimen.min_emoji_drawer_top_margin));
.getInt("keyboard_height_portrait", defaultCustomKeyboardSize);
return Util.clamp(keyboardHeight, minCustomKeyboardSize, getRootView().getHeight() - minCustomKeyboardTopMargin);
}
private void setKeyboardPortraitHeight(int height) {

View File

@@ -19,7 +19,6 @@ import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.os.Build;
@@ -30,7 +29,6 @@ import android.util.Log;
import android.view.OrientationEventListener;
import android.view.Surface;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import java.io.IOException;
@@ -91,7 +89,7 @@ public class CameraView extends FrameLayout {
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void onResume() {
Log.w(TAG, "onResume()");
Log.w(TAG, "onResume() queued");
final CameraHost host = getHost();
submitTask(new SerializedAsyncTask<FailureReason>() {
@Override protected FailureReason onRunBackground() {
@@ -110,11 +108,11 @@ public class CameraView extends FrameLayout {
}
@Override protected void onPostMain(FailureReason result) {
cameraReady = true;
if (result != null) {
host.onCameraFail(result);
return;
}
cameraReady = true;
if (getActivity().getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {
onOrientationChange.enable();
}
@@ -126,12 +124,13 @@ public class CameraView extends FrameLayout {
initPreview();
requestLayout();
invalidate();
Log.w(TAG, "onResume() completed");
}
});
}
public void onPause() {
Log.w(TAG, "onPause()");
Log.w(TAG, "onPause() queued");
submitTask(new SerializedAsyncTask<Void>() {
@Override protected void onPreMain() {
cameraReady = false;
@@ -151,6 +150,7 @@ public class CameraView extends FrameLayout {
outputOrientation = -1;
cameraId = -1;
lastPictureOrientation = -1;
Log.w(TAG, "onPause() completed");
}
});
}
@@ -255,6 +255,7 @@ public class CameraView extends FrameLayout {
}
void previewCreated() {
Log.w(TAG, "previewCreated() queued");
final CameraHost host = getHost();
submitTask(new PostInitializationTask<Void>() {
@Override protected void onPostMain(Void avoid) {
@@ -265,6 +266,7 @@ public class CameraView extends FrameLayout {
} catch (IOException e) {
host.handleException(e);
}
Log.w(TAG, "previewCreated() completed");
}
});
}
@@ -277,11 +279,6 @@ public class CameraView extends FrameLayout {
}
}
void previewReset() {
previewStopped();
initPreview();
}
private void previewStopped() {
if (inPreview) {
stopPreview();
@@ -290,6 +287,7 @@ public class CameraView extends FrameLayout {
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void initPreview() {
Log.w(TAG, "initPreview() queued");
submitTask(new PostInitializationTask<Void>() {
@Override protected void onPostMain(Void avoid) {
if (camera != null && cameraReady) {
@@ -305,20 +303,19 @@ public class CameraView extends FrameLayout {
startPreview();
requestLayout();
invalidate();
Log.w(TAG, "initPreview() completed");
}
}
});
}
private void startPreview() {
Log.w(TAG, "startPreview()");
camera.startPreview();
inPreview = true;
getHost().autoFocusAvailable();
}
private void stopPreview() {
Log.w(TAG, "stopPreview()");
camera.startPreview();
inPreview = false;
getHost().autoFocusUnavailable();
@@ -453,20 +450,24 @@ public class CameraView extends FrameLayout {
@Override public void onAdded() {}
@Override public final void onRun() {
onWait();
runOnMainSync(new Runnable() {
@Override public void run() {
onPreMain();
}
});
try {
onWait();
runOnMainSync(new Runnable() {
@Override public void run() {
onPreMain();
}
});
final Result result = onRunBackground();
final Result result = onRunBackground();
runOnMainSync(new Runnable() {
@Override public void run() {
onPostMain(result);
}
});
runOnMainSync(new Runnable() {
@Override public void run() {
onPostMain(result);
}
});
} catch (PreconditionsNotMetException e) {
Log.w(TAG, "skipping task, preconditions not met in onWait()");
}
}
@Override public boolean onShouldRetry(Exception e) {
@@ -493,19 +494,26 @@ public class CameraView extends FrameLayout {
}
}
protected void onWait() {}
protected void onWait() throws PreconditionsNotMetException {}
protected void onPreMain() {}
protected Result onRunBackground() { return null; }
protected void onPostMain(Result result) {}
}
private abstract class PostInitializationTask<Result> extends SerializedAsyncTask<Result> {
@Override protected void onWait() {
@Override protected void onWait() throws PreconditionsNotMetException {
synchronized (CameraView.this) {
if (!cameraReady) {
throw new PreconditionsNotMetException();
}
while (camera == null || previewSize == null || !previewStrategy.isReady()) {
Log.w(TAG, String.format("waiting. camera? %s previewSize? %s prevewStrategy? %s",
camera != null, previewSize != null, previewStrategy.isReady()));
Util.wait(CameraView.this, 0);
}
}
}
}
private static class PreconditionsNotMetException extends Exception {}
}

View File

@@ -18,13 +18,12 @@ import android.view.MotionEvent;
import android.view.Surface;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.WindowManager;
import android.widget.ImageButton;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.KeyboardAwareLinearLayout;
import org.thoughtcrime.securesms.components.camera.QuickCamera.QuickCameraListener;
import org.thoughtcrime.securesms.util.SoftKeyboardUtil;
import org.thoughtcrime.securesms.util.ServiceUtil;
public class QuickAttachmentDrawer extends ViewGroup {
private static final String TAG = QuickAttachmentDrawer.class.getSimpleName();
@@ -33,25 +32,26 @@ public class QuickAttachmentDrawer extends ViewGroup {
private final ViewDragHelper dragHelper;
private QuickCamera quickCamera;
private int coverViewPosition;
private View coverView;
private View controls;
private ImageButton fullScreenButton;
private ImageButton swapCameraButton;
private ImageButton shutterButton;
private float slideOffset;
private float initialMotionX;
private float initialMotionY;
private int rotation;
private int slideRange;
private int baseHalfHeight;
private AttachmentDrawerListener listener;
private QuickCamera quickCamera;
private int coverViewPosition;
private KeyboardAwareLinearLayout coverView;
private View controls;
private ImageButton fullScreenButton;
private ImageButton swapCameraButton;
private ImageButton shutterButton;
private float slideOffset;
private float initialMotionX;
private float initialMotionY;
private int rotation;
private int slideRange;
private AttachmentDrawerListener listener;
private int halfExpandedHeight;
private float halfExpandedAnchorPoint;
private DrawerState drawerState = DrawerState.COLLAPSED;
private float halfExpandedAnchorPoint = COLLAPSED_ANCHOR_POINT;
private boolean halfModeUnsupported = VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH;
private Rect drawChildrenRect = new Rect();
private boolean paused = false;
public QuickAttachmentDrawer(Context context) {
this(context, null);
@@ -63,8 +63,7 @@ public class QuickAttachmentDrawer extends ViewGroup {
public QuickAttachmentDrawer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
baseHalfHeight = SoftKeyboardUtil.getKeyboardHeight(getContext());
dragHelper = ViewDragHelper.create(this, 1.f, new ViewDragHelperCallback());
dragHelper = ViewDragHelper.create(this, 1.f, new ViewDragHelperCallback());
initializeView();
updateHalfExpandedAnchorPoint();
onConfigurationChanged();
@@ -78,10 +77,6 @@ public class QuickAttachmentDrawer extends ViewGroup {
coverViewPosition = getChildCount();
}
private WindowManager getWindowManager() {
return (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
}
public static boolean isDeviceSupported(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA) &&
Camera.getNumberOfCameras() > 0;
@@ -100,16 +95,15 @@ public class QuickAttachmentDrawer extends ViewGroup {
}
public void onConfigurationChanged() {
int rotation = getWindowManager().getDefaultDisplay().getRotation();
int rotation = ServiceUtil.getWindowManager(getContext()).getDefaultDisplay().getRotation();
final boolean rotationChanged = this.rotation != rotation;
this.rotation = rotation;
if (rotationChanged) {
Log.w(TAG, String.format("onNewOrientation(old %d, new %d)", this.rotation, rotation));
if (isOpen()) {
quickCamera.onPause();
setDrawerStateAndAnimate(drawerState);
}
updateControlsView();
setDrawerStateAndAnimate(drawerState);
}
}
@@ -128,7 +122,7 @@ public class QuickAttachmentDrawer extends ViewGroup {
}
shutterButton.setOnClickListener(new ShutterClickListener());
fullScreenButton.setOnClickListener(new FullscreenClickListener());
controls.setVisibility(GONE);
controls.setVisibility(INVISIBLE);
addView(controls, controlsIndex > -1 ? controlsIndex : indexOfChild(quickCamera) + 1);
}
@@ -140,24 +134,24 @@ public class QuickAttachmentDrawer extends ViewGroup {
return isLandscape() || halfModeUnsupported;
}
private void updateHalfExpandedAnchorPoint() {
Log.w(TAG, "updateHalfExpandedAnchorPoint()");
getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressWarnings("deprecation") @Override public void onGlobalLayout() {
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
private KeyboardAwareLinearLayout getCoverView() {
if (coverView != null) return coverView;
coverView = getChildAt(coverViewPosition);
slideRange = getMeasuredHeight();
halfExpandedAnchorPoint = computeSlideOffsetFromCoverBottom(slideRange - baseHalfHeight);
requestLayout();
invalidate();
Log.w(TAG, "updated halfExpandedAnchorPoint!");
}
});
final View coverViewChild = getChildAt(coverViewPosition);
if (coverViewChild != null && !(coverViewChild instanceof KeyboardAwareLinearLayout)) {
throw new IllegalStateException("cover view must be a KeyboardAwareLinearLayout");
}
coverView = (KeyboardAwareLinearLayout) coverViewChild;
return coverView;
}
private void updateHalfExpandedAnchorPoint() {
if (getCoverView() != null) {
slideRange = getMeasuredHeight();
halfExpandedHeight = coverView.getKeyboardHeight();
halfExpandedAnchorPoint = computeSlideOffsetFromCoverBottom(slideRange - halfExpandedHeight);
}
}
@Override
@@ -165,6 +159,8 @@ public class QuickAttachmentDrawer extends ViewGroup {
final int paddingLeft = getPaddingLeft();
final int paddingTop = getPaddingTop();
updateHalfExpandedAnchorPoint();
for (int i = 0; i < getChildCount(); i++) {
final View child = getChildAt(i);
final int childHeight = child.getMeasuredHeight();
@@ -192,8 +188,8 @@ public class QuickAttachmentDrawer extends ViewGroup {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
@@ -274,10 +270,10 @@ public class QuickAttachmentDrawer extends ViewGroup {
}
if (slideOffset == COLLAPSED_ANCHOR_POINT && quickCamera.isStarted()) {
controls.setVisibility(GONE);
quickCamera.setVisibility(GONE);
quickCamera.onPause();
} else if (slideOffset != COLLAPSED_ANCHOR_POINT && !quickCamera.isStarted()) {
controls.setVisibility(INVISIBLE);
quickCamera.setVisibility(INVISIBLE);
} else if (slideOffset != COLLAPSED_ANCHOR_POINT && !quickCamera.isStarted() & !paused) {
controls.setVisibility(VISIBLE);
quickCamera.setVisibility(VISIBLE);
quickCamera.onResume();
@@ -477,7 +473,7 @@ public class QuickAttachmentDrawer extends ViewGroup {
clampedOffset = clampedOffset / (FULL_EXPANDED_ANCHOR_POINT - halfExpandedAnchorPoint);
}
float slidePixelOffset = slideOffset * slideRange +
(quickCamera.getMeasuredHeight() - baseHalfHeight) / 2 *
(quickCamera.getMeasuredHeight() - coverView.getKeyboardHeight()) / 2 *
(FULL_EXPANDED_ANCHOR_POINT - clampedOffset);
float marginPixelOffset = (getMeasuredHeight() - quickCamera.getMeasuredHeight()) / 2 * clampedOffset;
return (int) (getMeasuredHeight() - slidePixelOffset + marginPixelOffset);
@@ -507,10 +503,12 @@ public class QuickAttachmentDrawer extends ViewGroup {
}
public void onPause() {
paused = true;
quickCamera.onPause();
}
public void onResume() {
paused = false;
if (drawerState.isVisible()) quickCamera.onResume();
}
@@ -526,7 +524,7 @@ public class QuickAttachmentDrawer extends ViewGroup {
@Override
public void onClick(View v) {
boolean crop = drawerState != DrawerState.FULL_EXPANDED;
int imageHeight = crop ? baseHalfHeight : quickCamera.getMeasuredHeight();
int imageHeight = crop ? coverView.getKeyboardHeight() : quickCamera.getMeasuredHeight();
Rect previewRect = new Rect(0, 0, quickCamera.getMeasuredWidth(), imageHeight);
quickCamera.takePicture(previewRect);
}

View File

@@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.components.camera;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
@@ -13,11 +12,10 @@ import android.os.Build.VERSION_CODES;
import android.support.annotation.NonNull;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.Toast;
import com.commonsware.cwac.camera.CameraHost.FailureReason;
import com.commonsware.cwac.camera.SimpleCameraHost;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.BitmapUtil;
import java.io.IOException;
@@ -78,29 +76,33 @@ import java.util.List;
setOneShotPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, final Camera camera) {
final int rotation = getCameraPictureOrientation();
final int rotation = getCameraPictureOrientation();
final Size previewSize = cameraParameters.getPreviewSize();
final Rect croppingRect = getCroppedRect(previewSize, previewRect, rotation);
new AsyncTask<byte[], Void, Bitmap>() {
Log.w(TAG, "previewSize: " + previewSize.width + "x" + previewSize.height);
Log.w(TAG, "croppingRect: " + croppingRect.toString());
Log.w(TAG, "rotation: " + rotation);
new AsyncTask<byte[], Void, byte[]>() {
@Override
protected Bitmap doInBackground(byte[]... params) {
protected byte[] doInBackground(byte[]... params) {
byte[] data = params[0];
try {
Size previewSize = cameraParameters.getPreviewSize();
return BitmapUtil.createFromNV21(data,
previewSize.width,
previewSize.height,
rotation,
getCroppedRect(previewSize, previewRect, rotation));
croppingRect);
} catch (IOException e) {
return null;
}
}
@Override
protected void onPostExecute(Bitmap bitmap) {
protected void onPostExecute(byte[] imageBytes) {
capturing = false;
if (bitmap != null && listener != null) listener.onImageCapture(bitmap);
if (imageBytes != null && listener != null) listener.onImageCapture(imageBytes);
}
}.execute(data);
}
@@ -111,10 +113,7 @@ import java.util.List;
final int previewWidth = cameraPreviewSize.width;
final int previewHeight = cameraPreviewSize.height;
if (rotation % 180 > 0) {
//noinspection SuspiciousNameCombination
visibleRect.set(visibleRect.top, visibleRect.left, visibleRect.bottom, visibleRect.right);
}
if (rotation % 180 > 0) rotateRect(visibleRect);
float scale = (float) previewWidth / visibleRect.width();
if (visibleRect.height() * scale > previewHeight) {
@@ -128,9 +127,16 @@ import java.util.List;
(int) (centerY - newHeight / 2),
(int) (centerX + newWidth / 2),
(int) (centerY + newHeight / 2));
if (rotation % 180 > 0) rotateRect(visibleRect);
return visibleRect;
}
@SuppressWarnings("SuspiciousNameCombination")
private void rotateRect(Rect rect) {
rect.set(rect.top, rect.left, rect.bottom, rect.right);
}
public void setQuickCameraListener(QuickCameraListener listener) {
this.listener = listener;
}
@@ -150,7 +156,8 @@ import java.util.List;
}
public interface QuickCameraListener {
void onImageCapture(@NonNull final Bitmap bitmap);
void onImageCapture(@NonNull final byte[] imageBytes);
void onCameraFail(FailureReason reason);
}
private class QuickCameraHost extends SimpleCameraHost {
@@ -186,7 +193,7 @@ import java.util.List;
@Override
public void onCameraFail(FailureReason reason) {
super.onCameraFail(reason);
Toast.makeText(getContext(), R.string.quick_camera_unavailable, Toast.LENGTH_SHORT).show();
if (listener != null) listener.onCameraFail(reason);
}
}
}

View File

@@ -73,6 +73,7 @@ public class EmojiDrawer extends LinearLayout {
public void show(KeyboardAwareLinearLayout container) {
ViewGroup.LayoutParams params = getLayoutParams();
params.height = container.getKeyboardHeight();
Log.w("EmojiDrawer", "showing emoji drawer with height " + params.height);
setLayoutParams(params);
setVisibility(VISIBLE);
}

View File

@@ -14,6 +14,7 @@ public class EmojiFilter implements InputFilter, OnGlobalLayoutListener {
public EmojiFilter(TextView view) {
this.view = view;
view.getViewTreeObserver().addOnGlobalLayoutListener(this);
}
@Override public CharSequence filter(CharSequence source, int start, int end,
@@ -25,7 +26,6 @@ public class EmojiFilter implements InputFilter, OnGlobalLayoutListener {
if (source instanceof Spanned) {
TextUtils.copySpansFrom((Spanned) source, start, end, null, emojified, 0);
}
view.getViewTreeObserver().addOnGlobalLayoutListener(this);
if (view.getWidth() == 0 || view.getEllipsize() != TruncateAt.END) {
return emojified;
} else {
@@ -38,13 +38,6 @@ public class EmojiFilter implements InputFilter, OnGlobalLayoutListener {
@SuppressWarnings("deprecation")
@Override public void onGlobalLayout() {
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
else {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
view.invalidate();
}
}

View File

@@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.components.emoji;
import android.graphics.Paint;
import android.graphics.Paint.FontMetricsInt;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
@@ -8,11 +9,28 @@ import android.widget.TextView;
import org.thoughtcrime.securesms.R;
public class EmojiSpan extends AnimatingImageSpan {
private final int size;
private final FontMetricsInt fm;
public EmojiSpan(@NonNull Drawable drawable, @NonNull TextView tv) {
super(drawable, tv);
FontMetricsInt fm = tv.getPaint().getFontMetricsInt();
final int size = fm != null ? Math.abs(fm.descent) + Math.abs(fm.ascent)
: tv.getResources().getDimensionPixelSize(R.dimen.conversation_item_body_text_size);
fm = tv.getPaint().getFontMetricsInt();
size = fm != null ? Math.abs(fm.descent) + Math.abs(fm.ascent)
: tv.getResources().getDimensionPixelSize(R.dimen.conversation_item_body_text_size);
getDrawable().setBounds(0, 0, size, size);
}
@Override public int getSize(Paint paint, CharSequence text, int start, int end,
FontMetricsInt fm)
{
if (fm != null && this.fm != null) {
fm.ascent = this.fm.ascent;
fm.descent = this.fm.descent;
fm.top = this.fm.top;
fm.bottom = this.fm.bottom;
return size;
} else {
return super.getSize(paint, text, start, end, fm);
}
}
}

View File

@@ -23,13 +23,9 @@ import android.database.MergeCursor;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.PhoneLookup;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.telephony.PhoneNumberUtils;
import org.thoughtcrime.securesms.database.DatabaseFactory;
@@ -65,35 +61,6 @@ public class ContactAccessor {
return instance;
}
public CursorLoader getCursorLoaderForContactsWithNumbers(Context context) {
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1";
return new CursorLoader(context, uri, null, selection, null,
ContactsContract.Contacts.DISPLAY_NAME + " ASC");
}
public CursorLoader getCursorLoaderForContactGroups(Context context) {
return new CursorLoader(context, ContactsContract.Groups.CONTENT_URI,
null, null, null, ContactsContract.Groups.TITLE + " ASC");
}
public Loader<Cursor> getCursorLoaderForContacts(Context context, String filter) {
return new ContactsCursorLoader(context, filter, false);
}
public Loader<Cursor> getCursorLoaderForPushContacts(Context context, String filter) {
return new ContactsCursorLoader(context, filter, true);
}
public Cursor getCursorForContactsWithNumbers(Context context) {
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1";
return context.getContentResolver().query(uri, null, selection, null,
ContactsContract.Contacts.DISPLAY_NAME + " ASC");
}
public Collection<ContactData> getContactsWithPush(Context context) {
final ContentResolver resolver = context.getContentResolver();
final String[] inProjection = new String[]{PhoneLookup._ID, PhoneLookup.DISPLAY_NAME};
@@ -136,34 +103,6 @@ public class ContactAccessor {
return null;
}
public String getNameForNumber(Context context, String number) {
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst())
return cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
public GroupData getGroupData(Context context, Cursor cursor) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Groups._ID));
String title = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Groups.TITLE));
return new GroupData(id, title);
}
public ContactData getContactData(Context context, Cursor cursor) {
return getContactData(context,
cursor.getString(cursor.getColumnIndexOrThrow(Contacts.DISPLAY_NAME)),
cursor.getLong(cursor.getColumnIndexOrThrow(Contacts._ID)));
}
public ContactData getContactData(Context context, Uri uri) {
return getContactData(context, getNameFromContact(context, uri), Long.parseLong(uri.getLastPathSegment()));
}
@@ -193,32 +132,6 @@ public class ContactAccessor {
return contactData;
}
public List<ContactData> getGroupMembership(Context context, long groupId) {
LinkedList<ContactData> contacts = new LinkedList<ContactData>();
Cursor groupMembership = null;
try {
String selection = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + " = ? AND " +
ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + " = ?";
String[] args = new String[] {groupId+"",
ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE};
groupMembership = context.getContentResolver().query(Data.CONTENT_URI, null, selection, args, null);
while (groupMembership != null && groupMembership.moveToNext()) {
String displayName = groupMembership.getString(groupMembership.getColumnIndexOrThrow(Data.DISPLAY_NAME));
long contactId = groupMembership.getLong(groupMembership.getColumnIndexOrThrow(Data.CONTACT_ID));
contacts.add(getContactData(context, displayName, contactId));
}
} finally {
if (groupMembership != null)
groupMembership.close();
}
return contacts;
}
public List<String> getNumbersForThreadSearchFilter(Context context, String constraint) {
LinkedList<String> numberList = new LinkedList<>();
Cursor cursor = null;
@@ -258,26 +171,6 @@ public class ContactAccessor {
return Phone.getTypeLabel(mContext.getResources(), type, label);
}
private long getContactIdFromLookupUri(Context context, Uri uri) {
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri,
new String[] {ContactsContract.Contacts._ID},
null, null, null);
if (cursor != null && cursor.moveToFirst()) {
return cursor.getLong(0);
} else {
return -1;
}
} finally {
if (cursor != null)
cursor.close();
}
}
public static class NumberData implements Parcelable {
public static final Parcelable.Creator<NumberData> CREATOR = new Parcelable.Creator<NumberData>() {
@@ -313,16 +206,6 @@ public class ContactAccessor {
}
}
public static class GroupData {
public final long id;
public final String name;
public GroupData(long id, String name) {
this.id = id;
this.name = name;
}
}
public static class ContactData implements Parcelable {
public static final Parcelable.Creator<ContactData> CREATOR = new Parcelable.Creator<ContactData>() {
@@ -345,13 +228,6 @@ public class ContactAccessor {
this.numbers = new LinkedList<NumberData>();
}
public ContactData(long id, String name, List<NumberData> numbers) {
this.id = id;
this.name = name;
this.numbers = numbers;
}
public ContactData(Parcel in) {
id = in.readLong();
name = in.readString();

View File

@@ -65,26 +65,26 @@ public class ContactSelectionListAdapter extends CursorAdapter
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return li.inflate(R.layout.push_contact_selection_list_item, parent, false);
return li.inflate(R.layout.contact_selection_list_item, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsDatabase.ID_COLUMN));
int type = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsDatabase.TYPE_COLUMN));
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsDatabase.NAME_COLUMN));
String number = cursor.getString(cursor.getColumnIndexOrThrow(ContactsDatabase.NUMBER_COLUMN));
int numberType = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsDatabase.NUMBER_TYPE_COLUMN));
String label = cursor.getString(cursor.getColumnIndexOrThrow(ContactsDatabase.LABEL_COLUMN));
String labelText = ContactsContract.CommonDataKinds.Phone.getTypeLabel(context.getResources(),
numberType, label).toString();
long id = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsDatabase.ID_COLUMN));
int contactType = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsDatabase.CONTACT_TYPE_COLUMN));
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsDatabase.NAME_COLUMN));
String number = cursor.getString(cursor.getColumnIndexOrThrow(ContactsDatabase.NUMBER_COLUMN));
int numberType = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsDatabase.NUMBER_TYPE_COLUMN));
String label = cursor.getString(cursor.getColumnIndexOrThrow(ContactsDatabase.LABEL_COLUMN));
String labelText = ContactsContract.CommonDataKinds.Phone.getTypeLabel(context.getResources(),
numberType, label).toString();
int color = (type == ContactsDatabase.PUSH_TYPE) ? drawables.getColor(0, 0xa0000000) :
drawables.getColor(1, 0xff000000);
int color = (contactType == ContactsDatabase.PUSH_TYPE) ? drawables.getColor(0, 0xa0000000) :
drawables.getColor(1, 0xff000000);
((ContactSelectionListItem)view).unbind();
((ContactSelectionListItem)view).set(id, type, name, number, labelText, color, multiSelect);
((ContactSelectionListItem)view).set(id, contactType, name, number, labelText, color, multiSelect);
((ContactSelectionListItem)view).setChecked(selectedContacts.containsKey(id));
}
@@ -96,7 +96,7 @@ public class ContactSelectionListAdapter extends CursorAdapter
if (convertView == null) {
holder = new HeaderViewHolder();
convertView = li.inflate(R.layout.push_contact_selection_list_header, viewGroup, false);
convertView = li.inflate(R.layout.contact_selection_list_header, viewGroup, false);
holder.text = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else {
@@ -105,10 +105,10 @@ public class ContactSelectionListAdapter extends CursorAdapter
cursor.moveToPosition(i);
int type = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsDatabase.TYPE_COLUMN));
int contactType = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsDatabase.CONTACT_TYPE_COLUMN));
if (type == ContactsDatabase.PUSH_TYPE) holder.text.setText(R.string.contact_selection_list__header_textsecure_users);
else holder.text.setText(R.string.contact_selection_list__header_other);
if (contactType == ContactsDatabase.PUSH_TYPE) holder.text.setText(R.string.contact_selection_list__header_textsecure_users);
else holder.text.setText(R.string.contact_selection_list__header_other);
return convertView;
}
@@ -118,7 +118,7 @@ public class ContactSelectionListAdapter extends CursorAdapter
Cursor cursor = getCursor();
cursor.moveToPosition(i);
return cursor.getInt(cursor.getColumnIndexOrThrow(ContactsDatabase.TYPE_COLUMN));
return cursor.getInt(cursor.getColumnIndexOrThrow(ContactsDatabase.CONTACT_TYPE_COLUMN));
}
public Map<Long, String> getSelectedContacts() {

View File

@@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.contacts;
import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
@@ -9,6 +10,7 @@ import android.widget.TextView;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.AvatarImageView;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.Recipients;
@@ -50,8 +52,16 @@ public class ContactSelectionListItem extends RelativeLayout implements Recipien
this.id = id;
this.number = number;
if (number != null) {
if (type == ContactsDatabase.NEW_TYPE) {
this.recipients = null;
this.contactPhotoImage.setAvatar(Recipient.getUnknownRecipient(), false);
} else if (!TextUtils.isEmpty(number)) {
this.recipients = RecipientFactory.getRecipientsFromString(getContext(), number, true);
if (this.recipients.getPrimaryRecipient().getName() != null) {
name = this.recipients.getPrimaryRecipient().getName();
}
this.recipients.addListener(this);
}
@@ -110,6 +120,7 @@ public class ContactSelectionListItem extends RelativeLayout implements Recipien
@Override
public void run() {
contactPhotoImage.setAvatar(recipients, false);
nameView.setText(recipients.toShortString());
}
});
}

View File

@@ -18,12 +18,15 @@ package org.thoughtcrime.securesms.contacts;
import android.content.Context;
import android.database.Cursor;
import android.database.MergeCursor;
import android.support.v4.content.CursorLoader;
import android.text.TextUtils;
import android.util.Log;
import junit.framework.Assert;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.util.NumberUtil;
import java.util.concurrent.Semaphore;
import java.util.ArrayList;
/**
* CursorLoader that initializes a ContactsDatabase instance
@@ -31,47 +34,34 @@ import java.util.concurrent.Semaphore;
* @author Jake McGinty
*/
public class ContactsCursorLoader extends CursorLoader {
private static final String TAG = ContactsCursorLoader.class.getSimpleName();
private static final int DB_PERMITS = 100;
private final Context context;
private final String filter;
private final boolean pushOnly;
private final Semaphore dbSemaphore = new Semaphore(DB_PERMITS);
private ContactsDatabase db;
private static final String TAG = ContactsCursorLoader.class.getSimpleName();
public ContactsCursorLoader(Context context, String filter, boolean pushOnly) {
private final String filter;
private boolean includeSmsContacts;
public ContactsCursorLoader(Context context, boolean includeSmsContacts, String filter) {
super(context);
this.context = context;
this.filter = filter;
this.pushOnly = pushOnly;
this.db = new ContactsDatabase(context);
this.includeSmsContacts = includeSmsContacts;
}
@Override
public Cursor loadInBackground() {
try {
dbSemaphore.acquire();
return db.query(filter, pushOnly);
} catch (InterruptedException ie) {
throw new AssertionError(ie);
} finally {
dbSemaphore.release();
}
}
ContactsDatabase contactsDatabase = DatabaseFactory.getContactsDatabase(getContext());
ArrayList<Cursor> cursorList = new ArrayList<>(3);
@Override
public void onReset() {
Log.w(TAG, "onReset()");
try {
dbSemaphore.acquire(DB_PERMITS);
db.close();
db = new ContactsDatabase(context);
} catch (InterruptedException ie) {
throw new AssertionError(ie);
} finally {
dbSemaphore.release(DB_PERMITS);
cursorList.add(contactsDatabase.queryTextSecureContacts(filter));
if (includeSmsContacts) {
cursorList.add(contactsDatabase.querySystemContacts(filter));
}
super.onReset();
if (!TextUtils.isEmpty(filter) && NumberUtil.isValidSmsOrEmail(filter)) {
cursorList.add(contactsDatabase.getNewNumberCursor(filter));
}
return new MergeCursor(cursorList.toArray(new Cursor[0]));
}
}

View File

@@ -16,27 +16,33 @@
*/
package org.thoughtcrime.securesms.contacts;
import android.content.ContentValues;
import android.accounts.Account;
import android.content.ContentProviderOperation;
import android.content.Context;
import android.content.OperationApplicationException;
import android.database.Cursor;
import android.database.CursorWrapper;
import android.database.MatrixCursor;
import android.database.MergeCursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.os.Build;
import android.os.RemoteException;
import android.provider.BaseColumns;
import android.provider.ContactsContract;
import android.provider.ContactsContract.RawContacts;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.NumberUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.whispersystems.libaxolotl.util.guava.Optional;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Database to supply all types of contacts that TextSecure needs to know about
@@ -44,222 +50,327 @@ import java.util.List;
* @author Jake McGinty
*/
public class ContactsDatabase {
private static final String TAG = ContactsDatabase.class.getSimpleName();
private final DatabaseOpenHelper dbHelper;
private final Context context;
public static final String TABLE_NAME = "CONTACTS";
public static final String ID_COLUMN = ContactsContract.CommonDataKinds.Phone._ID;
public static final String NAME_COLUMN = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME;
public static final String NUMBER_TYPE_COLUMN = ContactsContract.CommonDataKinds.Phone.TYPE;
public static final String NUMBER_COLUMN = ContactsContract.CommonDataKinds.Phone.NUMBER;
public static final String LABEL_COLUMN = ContactsContract.CommonDataKinds.Phone.LABEL;
public static final String TYPE_COLUMN = "type";
private static final String FILTER_SELECTION = NAME_COLUMN + " LIKE ? OR " + NUMBER_COLUMN + " LIKE ?";
private static final String CONTACT_LIST_SORT = NAME_COLUMN + " COLLATE NOCASE ASC";
private static final String[] ANDROID_PROJECTION = new String[]{ID_COLUMN,
NAME_COLUMN,
NUMBER_TYPE_COLUMN,
LABEL_COLUMN,
NUMBER_COLUMN};
private static final String[] CONTACTS_PROJECTION = new String[]{ID_COLUMN,
NAME_COLUMN,
NUMBER_TYPE_COLUMN,
LABEL_COLUMN,
NUMBER_COLUMN,
TYPE_COLUMN};
public static final String ID_COLUMN = "_id";
public static final String NAME_COLUMN = "name";
public static final String NUMBER_COLUMN = "number";
public static final String NUMBER_TYPE_COLUMN = "number_type";
public static final String LABEL_COLUMN = "label";
public static final String CONTACT_TYPE_COLUMN = "contact_type";
public static final int NORMAL_TYPE = 0;
public static final int PUSH_TYPE = 1;
public static final int GROUP_TYPE = 2;
public static final int NEW_TYPE = 2;
private final Context context;
public ContactsDatabase(Context context) {
this.dbHelper = new DatabaseOpenHelper(context);
this.context = context;
}
public void close() {
dbHelper.close();
}
public synchronized void setRegisteredUsers(Account account, List<String> e164numbers)
throws RemoteException, OperationApplicationException
{
Map<String, Long> currentContacts = new HashMap<>();
Set<String> registeredNumbers = new HashSet<>(e164numbers);
ArrayList<ContentProviderOperation> operations = new ArrayList<>();
Uri currentContactsUri = RawContacts.CONTENT_URI.buildUpon()
.appendQueryParameter(RawContacts.ACCOUNT_NAME, account.name)
.appendQueryParameter(RawContacts.ACCOUNT_TYPE, account.type).build();
public Cursor query(String filter, boolean pushOnly) {
// FIXME: This doesn't make sense to me. You pass in pushOnly, but then
// conditionally check to see whether other contacts should be included
// in the query method itself? I don't think this method should have any
// understanding of that stuff.
final boolean includeAndroidContacts = !pushOnly && TextSecurePreferences.isSmsEnabled(context);
final Cursor localCursor = queryLocalDb(filter);
final Cursor androidCursor;
final MatrixCursor newNumberCursor;
Cursor cursor = null;
if (includeAndroidContacts) {
androidCursor = queryAndroidDb(filter);
} else {
androidCursor = null;
try {
cursor = context.getContentResolver().query(currentContactsUri, new String[] {BaseColumns._ID, RawContacts.SYNC1}, null, null, null);
while (cursor != null && cursor.moveToNext()) {
currentContacts.put(cursor.getString(1), cursor.getLong(0));
}
} finally {
if (cursor != null)
cursor.close();
}
if (!TextUtils.isEmpty(filter) && NumberUtil.isValidSmsOrEmail(filter)) {
newNumberCursor = new MatrixCursor(CONTACTS_PROJECTION, 1);
newNumberCursor.addRow(new Object[]{-1L, context.getString(R.string.contact_selection_list__unknown_contact),
ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM, "\u21e2", filter, NORMAL_TYPE});
} else {
newNumberCursor = null;
}
for (String number : e164numbers) {
if (!currentContacts.containsKey(number)) {
Optional<Pair<String, Long>> systemContactInfo = getSystemContactInfo(number);
List<Cursor> cursors = new ArrayList<Cursor>();
if (localCursor != null) cursors.add(localCursor);
if (androidCursor != null) cursors.add(androidCursor);
if (newNumberCursor != null) cursors.add(newNumberCursor);
switch (cursors.size()) {
case 0: return null;
case 1: return cursors.get(0);
default: return new MergeCursor(cursors.toArray(new Cursor[]{}));
}
}
private Cursor queryAndroidDb(String filter) {
final Uri baseUri;
if (!TextUtils.isEmpty(filter)) {
baseUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI,
Uri.encode(filter));
} else {
baseUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
}
Cursor cursor = context.getContentResolver().query(baseUri, ANDROID_PROJECTION, null, null, CONTACT_LIST_SORT);
return cursor == null ? null : new TypedCursorWrapper(cursor);
}
private Cursor queryLocalDb(String filter) {
final String selection;
final String[] selectionArgs;
final String fuzzyFilter = "%" + filter + "%";
if (!TextUtils.isEmpty(filter)) {
selection = FILTER_SELECTION;
selectionArgs = new String[]{fuzzyFilter, fuzzyFilter};
} else {
selection = null;
selectionArgs = null;
}
return queryLocalDb(selection, selectionArgs, null);
}
private Cursor queryLocalDb(String selection, String[] selectionArgs, String[] columns) {
SQLiteDatabase localDb = dbHelper.getReadableDatabase();
final Cursor localCursor;
if (localDb != null) localCursor = localDb.query(TABLE_NAME, columns, selection, selectionArgs, null, null, CONTACT_LIST_SORT);
else localCursor = null;
if (localCursor != null && !localCursor.moveToFirst()) {
localCursor.close();
return null;
}
return localCursor;
}
private static class DatabaseOpenHelper extends SQLiteOpenHelper {
private final Context context;
private SQLiteDatabase mDatabase;
private static final String TABLE_CREATE =
"CREATE TABLE " + TABLE_NAME + " (" +
ID_COLUMN + " INTEGER PRIMARY KEY, " +
NAME_COLUMN + " TEXT, " +
NUMBER_TYPE_COLUMN + " INTEGER, " +
LABEL_COLUMN + " TEXT, " +
NUMBER_COLUMN + " TEXT, " +
TYPE_COLUMN + " INTEGER);";
DatabaseOpenHelper(Context context) {
super(context, null, null, 1);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate called for contacts database.");
mDatabase = db;
mDatabase.execSQL(TABLE_CREATE);
if (TextSecurePreferences.isPushRegistered(context)) {
try {
loadPushUsers();
} catch (IOException ioe) {
Log.e(TAG, "Issue when trying to load push users into memory db.", ioe);
if (systemContactInfo.isPresent()) {
addTextSecureRawContact(operations, account, systemContactInfo.get().first, systemContactInfo.get().second);
}
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
for (Map.Entry<String, Long> currentContactEntry : currentContacts.entrySet()) {
if (!registeredNumbers.contains(currentContactEntry.getKey())) {
removeTextSecureRawContact(operations, account, currentContactEntry.getValue());
}
}
private void loadPushUsers() throws IOException {
Log.d(TAG, "populating push users into virtual db.");
Collection<ContactAccessor.ContactData> pushUsers = ContactAccessor.getInstance().getContactsWithPush(context);
for (ContactAccessor.ContactData user : pushUsers) {
ContentValues values = new ContentValues();
values.put(ID_COLUMN, user.id);
values.put(NAME_COLUMN, user.name);
values.put(NUMBER_TYPE_COLUMN, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM);
values.put(LABEL_COLUMN, (String)null);
values.put(NUMBER_COLUMN, user.numbers.get(0).number);
values.put(TYPE_COLUMN, PUSH_TYPE);
mDatabase.insertWithOnConflict(TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_IGNORE);
}
Log.d(TAG, "finished populating push users.");
if (!operations.isEmpty()) {
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
}
}
private static class TypedCursorWrapper extends CursorWrapper {
private void addTextSecureRawContact(List<ContentProviderOperation> operations,
Account account, String e164number, long aggregateId)
{
int index = operations.size();
Uri dataUri = ContactsContract.Data.CONTENT_URI.buildUpon()
.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true")
.build();
private final int pushColumnIndex;
operations.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_NAME, account.name)
.withValue(RawContacts.ACCOUNT_TYPE, account.type)
.withValue(RawContacts.SYNC1, e164number)
.build());
public TypedCursorWrapper(Cursor cursor) {
operations.add(ContentProviderOperation.newInsert(dataUri)
.withValueBackReference(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID, index)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, e164number)
.withValue(ContactsContract.Data.SYNC2, "__TS")
.build());
operations.add(ContentProviderOperation.newInsert(dataUri)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, index)
.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.contact")
.withValue(ContactsContract.Data.DATA1, e164number)
.withValue(ContactsContract.Data.DATA2, context.getString(R.string.app_name))
.withValue(ContactsContract.Data.DATA3, context.getString(R.string.ContactsDatabase_message_s, e164number))
.withYieldAllowed(true)
.build());
if (Build.VERSION.SDK_INT >= 11) {
operations.add(ContentProviderOperation.newUpdate(ContactsContract.AggregationExceptions.CONTENT_URI)
.withValue(ContactsContract.AggregationExceptions.RAW_CONTACT_ID1, aggregateId)
.withValueBackReference(ContactsContract.AggregationExceptions.RAW_CONTACT_ID2, index)
.withValue(ContactsContract.AggregationExceptions.TYPE, ContactsContract.AggregationExceptions.TYPE_KEEP_TOGETHER)
.build());
}
}
private void removeTextSecureRawContact(List<ContentProviderOperation> operations,
Account account, long rowId)
{
operations.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI.buildUpon()
.appendQueryParameter(RawContacts.ACCOUNT_NAME, account.name)
.appendQueryParameter(RawContacts.ACCOUNT_TYPE, account.type)
.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build())
.withYieldAllowed(true)
.withSelection(BaseColumns._ID + " = ?", new String[] {String.valueOf(rowId)})
.build());
}
public @NonNull Cursor querySystemContacts(String filter) {
Uri uri;
if (!TextUtils.isEmpty(filter)) {
uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(filter));
} else {
uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
}
String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.LABEL};
String sort = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE NOCASE ASC";
Map<String, String> projectionMap = new HashMap<String, String>() {{
put(ID_COLUMN, ContactsContract.CommonDataKinds.Phone._ID);
put(NAME_COLUMN, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
put(NUMBER_COLUMN, ContactsContract.CommonDataKinds.Phone.NUMBER);
put(NUMBER_TYPE_COLUMN, ContactsContract.CommonDataKinds.Phone.TYPE);
put(LABEL_COLUMN, ContactsContract.CommonDataKinds.Phone.LABEL);
}};
Cursor cursor = context.getContentResolver().query(uri, projection,
ContactsContract.Data.SYNC2 + " IS NULL OR " +
ContactsContract.Data.SYNC2 + " != ?",
new String[] {"__TS"},
sort);
return new ProjectionMappingCursor(cursor, projectionMap,
new Pair<String, Object>(CONTACT_TYPE_COLUMN, NORMAL_TYPE));
}
public @NonNull Cursor queryTextSecureContacts(String filter) {
String[] projection = new String[] {ContactsContract.Data._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Data.DATA1};
String sort = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE NOCASE ASC";
Map<String, String> projectionMap = new HashMap<String, String>(){{
put(ID_COLUMN, ContactsContract.Data._ID);
put(NAME_COLUMN, ContactsContract.Contacts.DISPLAY_NAME);
put(NUMBER_COLUMN, ContactsContract.Data.DATA1);
}};
Cursor cursor;
if (TextUtils.isEmpty(filter)) {
cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI,
projection,
ContactsContract.Data.MIMETYPE + " = ?",
new String[] {"vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.contact"},
sort);
} else {
cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI,
projection,
ContactsContract.Data.MIMETYPE + " = ? AND (" + ContactsContract.Contacts.DISPLAY_NAME + " LIKE ? OR " + ContactsContract.Data.DATA1 + " LIKE ?)",
new String[] {"vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.contact",
"%" + filter + "%", "%" + filter + "%"},
sort);
}
return new ProjectionMappingCursor(cursor, projectionMap,
new Pair<String, Object>(LABEL_COLUMN, "TextSecure"),
new Pair<String, Object>(NUMBER_TYPE_COLUMN, 0),
new Pair<String, Object>(CONTACT_TYPE_COLUMN, PUSH_TYPE));
}
public Cursor getNewNumberCursor(String filter) {
MatrixCursor newNumberCursor = new MatrixCursor(new String[] {ID_COLUMN, NAME_COLUMN, NUMBER_COLUMN, NUMBER_TYPE_COLUMN, LABEL_COLUMN, CONTACT_TYPE_COLUMN}, 1);
newNumberCursor.addRow(new Object[]{-1L, context.getString(R.string.contact_selection_list__unknown_contact),
filter, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM,
"\u21e2", NEW_TYPE});
return newNumberCursor;
}
private Optional<Pair<String, Long>> getSystemContactInfo(String e164number) {
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(e164number));
String[] projection = {ContactsContract.PhoneLookup.NUMBER,
ContactsContract.PhoneLookup._ID};
Cursor numberCursor = null;
Cursor idCursor = null;
try {
numberCursor = context.getContentResolver().query(uri, projection, null, null, null);
if (numberCursor != null && numberCursor.moveToNext()) {
idCursor = context.getContentResolver().query(RawContacts.CONTENT_URI,
new String[] {RawContacts._ID},
RawContacts.CONTACT_ID + " = ? ",
new String[] {String.valueOf(numberCursor.getLong(1))},
null);
if (idCursor != null && idCursor.moveToNext()) {
return Optional.of(new Pair<>(numberCursor.getString(0), idCursor.getLong(0)));
}
}
} finally {
if (numberCursor != null) numberCursor.close();
if (idCursor != null) idCursor.close();
}
return Optional.absent();
}
private static class ProjectionMappingCursor extends CursorWrapper {
private final Map<String, String> projectionMap;
private final Pair<String, Object>[] extras;
@SafeVarargs
public ProjectionMappingCursor(Cursor cursor,
Map<String, String> projectionMap,
Pair<String, Object>... extras)
{
super(cursor);
pushColumnIndex = cursor.getColumnCount();
this.projectionMap = projectionMap;
this.extras = extras;
}
@Override
public int getColumnCount() {
return super.getColumnCount() + 1;
return super.getColumnCount() + extras.length;
}
@Override
public int getColumnIndex(String columnName) {
if (TYPE_COLUMN.equals(columnName)) return super.getColumnCount();
else return super.getColumnIndex(columnName);
for (int i=0;i<extras.length;i++) {
if (extras[i].first.equals(columnName)) {
return super.getColumnCount() + i;
}
}
return super.getColumnIndex(projectionMap.get(columnName));
}
@Override
public int getColumnIndexOrThrow(String columnName) throws IllegalArgumentException {
if (TYPE_COLUMN.equals(columnName)) return super.getColumnCount();
else return super.getColumnIndexOrThrow(columnName);
int index = getColumnIndex(columnName);
if (index == -1) throw new IllegalArgumentException("Bad column name!");
else return index;
}
@Override
public String getColumnName(int columnIndex) {
if (columnIndex == pushColumnIndex) return TYPE_COLUMN;
else return super.getColumnName(columnIndex);
int baseColumnCount = super.getColumnCount();
if (columnIndex >= baseColumnCount) {
int offset = columnIndex - baseColumnCount;
return extras[offset].first;
}
return getReverseProjection(super.getColumnName(columnIndex));
}
@Override
public String[] getColumnNames() {
final String[] columns = new String[super.getColumnCount() + 1];
System.arraycopy(super.getColumnNames(), 0, columns, 0, super.getColumnCount());
columns[pushColumnIndex] = TYPE_COLUMN;
return columns;
String[] names = super.getColumnNames();
String[] allNames = new String[names.length + extras.length];
for (int i=0;i<names.length;i++) {
allNames[i] = getReverseProjection(names[i]);
}
for (int i=0;i<extras.length;i++) {
allNames[names.length + i] = extras[i].first;
}
return allNames;
}
@Override
public int getInt(int columnIndex) {
if (columnIndex == pushColumnIndex) return NORMAL_TYPE;
else return super.getInt(columnIndex);
if (columnIndex >= super.getColumnCount()) {
int offset = columnIndex - super.getColumnCount();
return (Integer)extras[offset].second;
}
return super.getInt(columnIndex);
}
@Override
public String getString(int columnIndex) {
if (columnIndex >= super.getColumnCount()) {
int offset = columnIndex - super.getColumnCount();
return (String)extras[offset].second;
}
return super.getString(columnIndex);
}
private @Nullable String getReverseProjection(String columnName) {
for (Map.Entry<String, String> entry : projectionMap.entrySet()) {
if (entry.getValue().equals(columnName)) {
return entry.getKey();
}
}
return null;
}
}
}

View File

@@ -0,0 +1,34 @@
package org.thoughtcrime.securesms.contacts;
import android.accounts.Account;
import android.content.AbstractThreadedSyncAdapter;
import android.content.ContentProviderClient;
import android.content.Context;
import android.content.SyncResult;
import android.os.Bundle;
import android.util.Log;
import org.thoughtcrime.securesms.util.DirectoryHelper;
import java.io.IOException;
public class ContactsSyncAdapter extends AbstractThreadedSyncAdapter {
private static final String TAG = ContactsSyncAdapter.class.getSimpleName();
public ContactsSyncAdapter(Context context, boolean autoInitialize) {
super(context, autoInitialize);
}
@Override
public void onPerformSync(Account account, Bundle extras, String authority,
ContentProviderClient provider, SyncResult syncResult)
{
try {
DirectoryHelper.refreshDirectory(getContext());
} catch (IOException e) {
Log.w(TAG, e);
}
}
}

View File

@@ -61,39 +61,45 @@ public class AsymmetricMasterCipher {
this.asymmetricMasterSecret = asymmetricMasterSecret;
}
public String decryptBody(String body) throws IOException, InvalidMessageException {
public byte[] encryptBytes(byte[] body) {
try {
ECPublicKey theirPublic = asymmetricMasterSecret.getDjbPublicKey();
ECKeyPair ourKeyPair = Curve.generateKeyPair();
byte[] secret = Curve.calculateAgreement(theirPublic, ourKeyPair.getPrivateKey());
MasterCipher masterCipher = getMasterCipherForSecret(secret);
byte[] encryptedBodyBytes = masterCipher.encryptBytes(body);
PublicKey ourPublicKey = new PublicKey(31337, ourKeyPair.getPublicKey());
byte[] publicKeyBytes = ourPublicKey.serialize();
return Util.combine(publicKeyBytes, encryptedBodyBytes);
} catch (InvalidKeyException e) {
throw new AssertionError(e);
}
}
public byte[] decryptBytes(byte[] combined) throws IOException, InvalidMessageException {
try {
byte[] combined = Base64.decode(body);
byte[][] parts = Util.split(combined, PublicKey.KEY_SIZE, combined.length - PublicKey.KEY_SIZE);
PublicKey theirPublicKey = new PublicKey(parts[0], 0);
ECPrivateKey ourPrivateKey = asymmetricMasterSecret.getPrivateKey();
byte[] secret = Curve.calculateAgreement(theirPublicKey.getKey(), ourPrivateKey);
MasterCipher masterCipher = getMasterCipherForSecret(secret);
byte[] decryptedBody = masterCipher.decryptBytes(parts[1]);
return new String(decryptedBody);
} catch (InvalidKeyException | InvalidMessageException ike) {
throw new InvalidMessageException(ike);
return masterCipher.decryptBytes(parts[1]);
} catch (InvalidKeyException e) {
throw new InvalidMessageException(e);
}
}
public String decryptBody(String body) throws IOException, InvalidMessageException {
byte[] combined = Base64.decode(body);
return new String(decryptBytes(combined));
}
public String encryptBody(String body) {
try {
ECPublicKey theirPublic = asymmetricMasterSecret.getDjbPublicKey();
ECKeyPair ourKeyPair = Curve.generateKeyPair();
byte[] secret = Curve.calculateAgreement(theirPublic, ourKeyPair.getPrivateKey());
MasterCipher masterCipher = getMasterCipherForSecret(secret);
byte[] encryptedBodyBytes = masterCipher.encryptBytes(body.getBytes());
PublicKey ourPublicKey = new PublicKey(31337, ourKeyPair.getPublicKey());
byte[] publicKeyBytes = ourPublicKey.serialize();
byte[] combined = Util.combine(publicKeyBytes, encryptedBodyBytes);
return Base64.encodeBytes(combined);
} catch (InvalidKeyException e) {
throw new AssertionError(e);
}
return Base64.encodeBytes(encryptBytes(body.getBytes()));
}
private MasterCipher getMasterCipherForSecret(byte[] secretBytes) {

View File

@@ -20,7 +20,7 @@ package org.thoughtcrime.securesms.crypto;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;
import android.support.annotation.NonNull;
import org.thoughtcrime.securesms.util.Base64;
import org.whispersystems.libaxolotl.IdentityKey;
@@ -40,86 +40,109 @@ import java.io.IOException;
public class IdentityKeyUtil {
private static final String IDENTITY_PUBLIC_KEY_DJB_PREF = "pref_identity_public_curve25519";
private static final String IDENTITY_PRIVATE_KEY_DJB_PREF = "pref_identity_private_curve25519";
private static final String TAG = IdentityKeyUtil.class.getSimpleName();
private static final String IDENTITY_PUBLIC_KEY_CIPHERTEXT_LEGACY_PREF = "pref_identity_public_curve25519";
private static final String IDENTITY_PRIVATE_KEY_CIPHERTEXT_LEGACY_PREF = "pref_identity_private_curve25519";
private static final String IDENTITY_PUBLIC_KEY_PREF = "pref_identity_public_v3";
private static final String IDENTITY_PRIVATE_KEY_PREF = "pref_identity_private_v3";
public static boolean hasIdentityKey(Context context) {
SharedPreferences preferences = context.getSharedPreferences(MasterSecretUtil.PREFERENCES_NAME, 0);
return
preferences.contains(IDENTITY_PUBLIC_KEY_DJB_PREF) &&
preferences.contains(IDENTITY_PRIVATE_KEY_DJB_PREF);
preferences.contains(IDENTITY_PUBLIC_KEY_PREF) &&
preferences.contains(IDENTITY_PRIVATE_KEY_PREF);
}
public static IdentityKey getIdentityKey(Context context) {
if (!hasIdentityKey(context)) return null;
public static @NonNull IdentityKey getIdentityKey(@NonNull Context context) {
if (!hasIdentityKey(context)) throw new AssertionError("There isn't one!");
try {
byte[] publicKeyBytes = Base64.decode(retrieve(context, IDENTITY_PUBLIC_KEY_DJB_PREF));
byte[] publicKeyBytes = Base64.decode(retrieve(context, IDENTITY_PUBLIC_KEY_PREF));
return new IdentityKey(publicKeyBytes, 0);
} catch (IOException ioe) {
Log.w("IdentityKeyUtil", ioe);
return null;
} catch (InvalidKeyException e) {
Log.w("IdentityKeyUtil", e);
return null;
}
}
public static IdentityKeyPair getIdentityKeyPair(Context context,
MasterSecret masterSecret)
{
if (!hasIdentityKey(context))
return null;
try {
MasterCipher masterCipher = new MasterCipher(masterSecret);
IdentityKey publicKey = getIdentityKey(context);
ECPrivateKey privateKey = masterCipher.decryptKey(Base64.decode(retrieve(context, IDENTITY_PRIVATE_KEY_DJB_PREF)));
return new IdentityKeyPair(publicKey, privateKey);
} catch (IOException | InvalidKeyException e) {
throw new AssertionError(e);
}
}
public static void generateIdentityKeys(Context context, MasterSecret masterSecret) {
public static @NonNull IdentityKeyPair getIdentityKeyPair(@NonNull Context context) {
if (!hasIdentityKey(context)) throw new AssertionError("There isn't one!");
try {
IdentityKey publicKey = getIdentityKey(context);
ECPrivateKey privateKey = Curve.decodePrivatePoint(Base64.decode(retrieve(context, IDENTITY_PRIVATE_KEY_PREF)));
return new IdentityKeyPair(publicKey, privateKey);
} catch (IOException e) {
throw new AssertionError(e);
}
}
public static void generateIdentityKeys(Context context) {
ECKeyPair djbKeyPair = Curve.generateKeyPair();
MasterCipher masterCipher = new MasterCipher(masterSecret);
IdentityKey djbIdentityKey = new IdentityKey(djbKeyPair.getPublicKey());
byte[] djbPrivateKey = masterCipher.encryptKey(djbKeyPair.getPrivateKey());
ECPrivateKey djbPrivateKey = djbKeyPair.getPrivateKey();
save(context, IDENTITY_PUBLIC_KEY_DJB_PREF, Base64.encodeBytes(djbIdentityKey.serialize()));
save(context, IDENTITY_PRIVATE_KEY_DJB_PREF, Base64.encodeBytes(djbPrivateKey));
save(context, IDENTITY_PUBLIC_KEY_PREF, Base64.encodeBytes(djbIdentityKey.serialize()));
save(context, IDENTITY_PRIVATE_KEY_PREF, Base64.encodeBytes(djbPrivateKey.serialize()));
}
public static boolean hasCurve25519IdentityKeys(Context context) {
public static void migrateIdentityKeys(@NonNull Context context,
@NonNull MasterSecret masterSecret)
{
if (!hasIdentityKey(context)) {
if (hasLegacyIdentityKeys(context)) {
IdentityKeyPair legacyPair = getLegacyIdentityKeyPair(context, masterSecret);
save(context, IDENTITY_PUBLIC_KEY_PREF, Base64.encodeBytes(legacyPair.getPublicKey().serialize()));
save(context, IDENTITY_PRIVATE_KEY_PREF, Base64.encodeBytes(legacyPair.getPrivateKey().serialize()));
delete(context, IDENTITY_PUBLIC_KEY_CIPHERTEXT_LEGACY_PREF);
delete(context, IDENTITY_PRIVATE_KEY_CIPHERTEXT_LEGACY_PREF);
} else {
generateIdentityKeys(context);
}
}
}
private static boolean hasLegacyIdentityKeys(Context context) {
return
retrieve(context, IDENTITY_PUBLIC_KEY_DJB_PREF) != null &&
retrieve(context, IDENTITY_PRIVATE_KEY_DJB_PREF) != null;
retrieve(context, IDENTITY_PUBLIC_KEY_CIPHERTEXT_LEGACY_PREF) != null &&
retrieve(context, IDENTITY_PRIVATE_KEY_CIPHERTEXT_LEGACY_PREF) != null;
}
public static void generateCurve25519IdentityKeys(Context context, MasterSecret masterSecret) {
MasterCipher masterCipher = new MasterCipher(masterSecret);
ECKeyPair djbKeyPair = Curve.generateKeyPair();
IdentityKey djbIdentityKey = new IdentityKey(djbKeyPair.getPublicKey());
byte[] djbPrivateKey = masterCipher.encryptKey(djbKeyPair.getPrivateKey());
private static IdentityKeyPair getLegacyIdentityKeyPair(@NonNull Context context,
@NonNull MasterSecret masterSecret)
{
try {
MasterCipher masterCipher = new MasterCipher(masterSecret);
byte[] publicKeyBytes = Base64.decode(retrieve(context, IDENTITY_PUBLIC_KEY_CIPHERTEXT_LEGACY_PREF));
IdentityKey identityKey = new IdentityKey(publicKeyBytes, 0);
ECPrivateKey privateKey = masterCipher.decryptKey(Base64.decode(retrieve(context, IDENTITY_PRIVATE_KEY_CIPHERTEXT_LEGACY_PREF)));
save(context, IDENTITY_PUBLIC_KEY_DJB_PREF, Base64.encodeBytes(djbIdentityKey.serialize()));
save(context, IDENTITY_PRIVATE_KEY_DJB_PREF, Base64.encodeBytes(djbPrivateKey));
return new IdentityKeyPair(identityKey, privateKey);
} catch (IOException | InvalidKeyException e) {
throw new AssertionError(e);
}
}
public static String retrieve(Context context, String key) {
private static String retrieve(Context context, String key) {
SharedPreferences preferences = context.getSharedPreferences(MasterSecretUtil.PREFERENCES_NAME, 0);
return preferences.getString(key, null);
}
public static void save(Context context, String key, String value) {
private static void save(Context context, String key, String value) {
SharedPreferences preferences = context.getSharedPreferences(MasterSecretUtil.PREFERENCES_NAME, 0);
Editor preferencesEditor = preferences.edit();
preferencesEditor.putString(key, value);
if (!preferencesEditor.commit()) throw new AssertionError("failed to save identity key/value to shared preferences");
}
private static void delete(Context context, String key) {
context.getSharedPreferences(MasterSecretUtil.PREFERENCES_NAME, 0).edit().remove(key).commit();
}
}

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