Merge pull request #200 from loki-project/translation

Prepare for Localization
This commit is contained in:
Niels Andriesse 2020-05-27 13:42:06 +10:00 committed by GitHub
commit a2a63e0ab4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
47 changed files with 355 additions and 200 deletions

View File

@ -19,7 +19,7 @@
android:textSize="@dimen/very_large_font_size" android:textSize="@dimen/very_large_font_size"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Pick your display name" /> android:text="@string/activity_display_name_title_2" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -29,7 +29,7 @@
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="This will be your name when you use Session." /> android:text="@string/activity_display_name_explanation" />
<EditText <EditText
style="@style/SessionEditText" style="@style/SessionEditText"
@ -39,7 +39,7 @@
android:layout_marginLeft="@dimen/very_large_spacing" android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:hint="Enter a display name" /> android:hint="@string/activity_display_name_edit_text_hint" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -54,6 +54,6 @@
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:layout_marginBottom="@dimen/medium_spacing" android:layout_marginBottom="@dimen/medium_spacing"
android:text="Continue" /> android:text="@string/continue_2" />
</LinearLayout> </LinearLayout>

View File

@ -19,7 +19,7 @@
android:textSize="@dimen/very_large_font_size" android:textSize="@dimen/very_large_font_size"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Your Session begins here..." /> android:text="@string/activity_landing_title_2" />
<org.thoughtcrime.securesms.loki.views.FakeChatView <org.thoughtcrime.securesms.loki.views.FakeChatView
android:id="@+id/fakeChatView" android:id="@+id/fakeChatView"
@ -39,7 +39,7 @@
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:text="Create Session ID" /> android:text="@string/activity_landing_register_button_title" />
<Button <Button
style="@style/MediumProminentOutlineButton" style="@style/MediumProminentOutlineButton"
@ -49,7 +49,7 @@
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:text="Continue Your Session" /> android:text="@string/activity_landing_restore_button_title" />
<Button <Button
android:id="@+id/linkButton" android:id="@+id/linkButton"
@ -62,6 +62,6 @@
android:textAllCaps="false" android:textAllCaps="false"
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Link to an existing account" /> android:text="@string/activity_landing_link_button_title" />
</LinearLayout> </LinearLayout>

View File

@ -19,7 +19,7 @@
android:textSize="@dimen/very_large_font_size" android:textSize="@dimen/very_large_font_size"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Say hello to your Session ID" /> android:text="@string/activity_register_title" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -29,7 +29,7 @@
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Your Session ID is the unique address people can use to contact you on Session. With no connection to your real identity, your Session ID is totally anonymous and private by design." /> android:text="@string/activity_register_explanation" />
<TextView <TextView
style="@style/SessionIDTextView" style="@style/SessionIDTextView"
@ -53,7 +53,7 @@
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:text="Continue" /> android:text="@string/continue_2" />
<Button <Button
style="@style/MediumProminentOutlineButton" style="@style/MediumProminentOutlineButton"
@ -63,7 +63,7 @@
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:text="Copy" /> android:text="@string/copy" />
<TextView <TextView
android:id="@+id/termsTextView" android:id="@+id/termsTextView"
@ -75,6 +75,6 @@
android:textColorLink="@color/text" android:textColorLink="@color/text"
android:textSize="@dimen/very_small_font_size" android:textSize="@dimen/very_small_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="By using this service, you agree to our Terms of Service and Privacy Policy" /> android:text="By using this service, you agree to our Terms of Service and Privacy Policy" /> <!-- Intentionally not yet translated -->
</LinearLayout> </LinearLayout>

View File

@ -19,7 +19,7 @@
android:textSize="@dimen/very_large_font_size" android:textSize="@dimen/very_large_font_size"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Restore your account" /> android:text="@string/activity_restore_title" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -29,7 +29,7 @@
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Enter the recovery phrase that was given to you when you signed up to restore your account." /> android:text="@string/activity_restore_explanation" />
<EditText <EditText
style="@style/SessionEditText" style="@style/SessionEditText"
@ -39,7 +39,7 @@
android:layout_marginLeft="@dimen/very_large_spacing" android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:hint="Enter your recovery phrase" /> android:hint="@string/activity_restore_seed_edit_text_hint" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -53,7 +53,7 @@
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:text="Continue" /> android:text="@string/continue_2" />
<TextView <TextView
android:id="@+id/termsTextView" android:id="@+id/termsTextView"
@ -65,6 +65,6 @@
android:textColorLink="@color/text" android:textColorLink="@color/text"
android:textSize="@dimen/very_small_font_size" android:textSize="@dimen/very_small_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="By using this service, you agree to our Terms of Service and Privacy Policy" /> android:text="By using this service, you agree to our Terms of Service and Privacy Policy" /> <!-- Intentionally not yet translated -->
</LinearLayout> </LinearLayout>

View File

@ -25,7 +25,7 @@
android:textSize="@dimen/very_large_font_size" android:textSize="@dimen/very_large_font_size"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Meet your recovery phrase" /> android:text="@string/activity_seed_title_2" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -35,7 +35,7 @@
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Your recovery phrase is the master key to your Session ID — you can use it to restore your Session ID if you lose access to your device. Store your recovery phrase in a safe place, and dont give it to anyone. To restore your Session ID, launch Session and tap Continue your Session." /> android:text="@string/activity_seed_explanation" />
<TextView <TextView
style="@style/SessionIDTextView" style="@style/SessionIDTextView"
@ -59,7 +59,7 @@
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:alpha="0.6" android:alpha="0.6"
android:text="Hold to reveal" /> android:text="@string/activity_seed_reveal_button_title" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -72,6 +72,6 @@
android:layout_width="196dp" android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginBottom="@dimen/medium_spacing" android:layout_marginBottom="@dimen/medium_spacing"
android:text="Copy" /> android:text="@string/copy" />
</LinearLayout> </LinearLayout>

View File

@ -16,7 +16,7 @@
android:layout_marginLeft="@dimen/large_spacing" android:layout_marginLeft="@dimen/large_spacing"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/large_spacing"
android:layout_marginRight="@dimen/large_spacing" android:layout_marginRight="@dimen/large_spacing"
android:hint="Enter Session ID of recipient" /> android:hint="@string/fragment_enter_public_key_edit_text_hint" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -28,7 +28,7 @@
android:textColor="@color/text" android:textColor="@color/text"
android:alpha="0.6" android:alpha="0.6"
android:textAlignment="center" android:textAlignment="center"
android:text="Users can share their Session ID by going into their account settings and tapping &quot;Share Session ID&quot;, or by sharing their QR code." /> android:text="@string/fragment_enter_public_key_explanation" />
<org.thoughtcrime.securesms.loki.views.LabeledSeparatorView <org.thoughtcrime.securesms.loki.views.LabeledSeparatorView
android:id="@+id/separatorView" android:id="@+id/separatorView"
@ -65,7 +65,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_weight="1" android:layout_weight="1"
android:text="Copy" /> android:text="@string/copy" />
<Button <Button
style="@style/MediumUnimportantFilledButton" style="@style/MediumUnimportantFilledButton"
@ -74,7 +74,7 @@
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginLeft="@dimen/medium_spacing" android:layout_marginLeft="@dimen/medium_spacing"
android:text="Share" /> android:text="@string/share" />
</LinearLayout> </LinearLayout>
@ -89,6 +89,6 @@
android:layout_width="196dp" android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginBottom="@dimen/medium_spacing" android:layout_marginBottom="@dimen/medium_spacing"
android:text="Next" /> android:text="@string/next" />
</LinearLayout> </LinearLayout>

View File

@ -19,7 +19,7 @@
android:layout_marginLeft="@dimen/large_spacing" android:layout_marginLeft="@dimen/large_spacing"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:layout_marginRight="@dimen/large_spacing" android:layout_marginRight="@dimen/large_spacing"
android:hint="Enter a group name" /> android:hint="@string/activity_create_closed_group_edit_text_hint" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -32,7 +32,7 @@
android:textColor="@color/text" android:textColor="@color/text"
android:alpha="0.6" android:alpha="0.6"
android:textAlignment="center" android:textAlignment="center"
android:text="Closed groups support up to 10 members and provide the same privacy protections as one-on-one sessions." /> android:text="@string/activity_create_closed_group_explanation" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -59,7 +59,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="You don't have any contacts yet" /> android:text="@string/activity_create_closed_group_empty_state_message" />
<Button <Button
style="@style/MediumProminentOutlineButton" style="@style/MediumProminentOutlineButton"
@ -67,7 +67,7 @@
android:layout_width="196dp" android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:text="Start a Session" /> android:text="@string/activity_create_closed_group_empty_state_button_title" />
</LinearLayout> </LinearLayout>

View File

@ -19,7 +19,7 @@
android:textSize="@dimen/large_font_size" android:textSize="@dimen/large_font_size"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Pick your display name" /> android:text="@string/activity_display_name_title_2" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -29,7 +29,7 @@
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/small_font_size" android:textSize="@dimen/small_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="This will be your name when you use Session." /> android:text="@string/activity_display_name_explanation" />
<EditText <EditText
style="@style/SmallSessionEditText" style="@style/SmallSessionEditText"
@ -39,7 +39,7 @@
android:layout_marginLeft="@dimen/very_large_spacing" android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:hint="Enter a display name" /> android:hint="@string/activity_display_name_edit_text_hint" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -54,6 +54,6 @@
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:layout_marginBottom="@dimen/small_spacing" android:layout_marginBottom="@dimen/small_spacing"
android:text="Continue" /> android:text="@string/continue_2" />
</LinearLayout> </LinearLayout>

View File

@ -87,7 +87,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="You don't have any contacts yet" /> android:text="@string/activity_home_empty_state_message" />
<Button <Button
style="@style/MediumProminentOutlineButton" style="@style/MediumProminentOutlineButton"
@ -95,7 +95,7 @@
android:layout_width="196dp" android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:text="Start a Session" /> android:text="@string/activity_home_empty_state_button_title" />
</LinearLayout> </LinearLayout>

View File

@ -19,7 +19,7 @@
android:textSize="@dimen/large_font_size" android:textSize="@dimen/large_font_size"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Your Session begins here..." /> android:text="@string/activity_landing_title_2" />
<org.thoughtcrime.securesms.loki.views.FakeChatView <org.thoughtcrime.securesms.loki.views.FakeChatView
android:id="@+id/fakeChatView" android:id="@+id/fakeChatView"
@ -39,7 +39,7 @@
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:text="Create Session ID" /> android:text="@string/activity_landing_register_button_title" />
<Button <Button
style="@style/MediumProminentOutlineButton" style="@style/MediumProminentOutlineButton"
@ -49,7 +49,7 @@
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginTop="@dimen/small_spacing" android:layout_marginTop="@dimen/small_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:text="Continue Your Session" /> android:text="@string/activity_landing_restore_button_title" />
<Button <Button
android:id="@+id/linkButton" android:id="@+id/linkButton"
@ -62,6 +62,6 @@
android:textAllCaps="false" android:textAllCaps="false"
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Link to an existing account" /> android:text="@string/activity_landing_link_button_title" />
</LinearLayout> </LinearLayout>

View File

@ -111,6 +111,6 @@
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:layout_marginBottom="@dimen/medium_spacing" android:layout_marginBottom="@dimen/medium_spacing"
android:text="Continue" /> android:text="@string/continue_2" />
</LinearLayout> </LinearLayout>

View File

@ -19,7 +19,7 @@
android:textSize="@dimen/large_font_size" android:textSize="@dimen/large_font_size"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Say hello to your Session ID" /> android:text="@string/activity_register_title" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -29,7 +29,7 @@
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/small_font_size" android:textSize="@dimen/small_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Your Session ID is the unique address people can use to contact you on Session. With no connection to your real identity, your Session ID is totally anonymous and private by design." /> android:text="@string/activity_register_explanation" />
<TextView <TextView
style="@style/SessionIDTextView" style="@style/SessionIDTextView"
@ -54,7 +54,7 @@
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:text="Continue" /> android:text="@string/continue_2" />
<Button <Button
style="@style/MediumProminentOutlineButton" style="@style/MediumProminentOutlineButton"
@ -64,7 +64,7 @@
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginTop="@dimen/small_spacing" android:layout_marginTop="@dimen/small_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:text="Copy" /> android:text="@string/copy" />
<TextView <TextView
android:id="@+id/termsTextView" android:id="@+id/termsTextView"
@ -76,6 +76,6 @@
android:textColorLink="@color/text" android:textColorLink="@color/text"
android:textSize="@dimen/very_small_font_size" android:textSize="@dimen/very_small_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="By using this service, you agree to our Terms of Service and Privacy Policy" /> android:text="By using this service, you agree to our Terms of Service and Privacy Policy" /> <!-- Intentionally not yet translated -->
</LinearLayout> </LinearLayout>

View File

@ -19,7 +19,7 @@
android:textSize="@dimen/large_font_size" android:textSize="@dimen/large_font_size"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Restore your account" /> android:text="@string/activity_restore_title" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -29,7 +29,7 @@
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="@dimen/small_font_size" android:textSize="@dimen/small_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Enter the recovery phrase that was given to you when you signed up to restore your account." /> android:text="@string/activity_restore_explanation" />
<EditText <EditText
style="@style/SmallSessionEditText" style="@style/SmallSessionEditText"
@ -39,7 +39,7 @@
android:layout_marginLeft="@dimen/very_large_spacing" android:layout_marginLeft="@dimen/very_large_spacing"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:hint="Enter your recovery phrase" /> android:hint="@string/activity_restore_seed_edit_text_hint" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -53,7 +53,7 @@
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginLeft="@dimen/massive_spacing" android:layout_marginLeft="@dimen/massive_spacing"
android:layout_marginRight="@dimen/massive_spacing" android:layout_marginRight="@dimen/massive_spacing"
android:text="Continue" /> android:text="@string/continue_2" />
<TextView <TextView
android:id="@+id/termsTextView" android:id="@+id/termsTextView"
@ -65,6 +65,6 @@
android:textColorLink="@color/text" android:textColorLink="@color/text"
android:textSize="@dimen/very_small_font_size" android:textSize="@dimen/very_small_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="By using this service, you agree to our Terms of Service and Privacy Policy" /> android:text="By using this service, you agree to our Terms of Service and Privacy Policy" /> <!-- Intentionally not yet translated -->
</LinearLayout> </LinearLayout>

View File

@ -25,7 +25,7 @@
android:textSize="19sp" android:textSize="19sp"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Meet your recovery phrase" /> android:text="@string/activity_seed_title_2" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -35,7 +35,7 @@
android:layout_marginRight="@dimen/very_large_spacing" android:layout_marginRight="@dimen/very_large_spacing"
android:textSize="14sp" android:textSize="14sp"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Your recovery phrase is the master key to your Session ID — you can use it to restore your Session ID if you lose access to your device. Store your recovery phrase in a safe place, and dont give it to anyone. To restore your Session ID, launch Session and tap Continue your Session." /> android:text="@string/activity_seed_explanation" />
<TextView <TextView
style="@style/SessionIDTextView" style="@style/SessionIDTextView"
@ -59,7 +59,7 @@
android:textSize="14sp" android:textSize="14sp"
android:textColor="@color/text" android:textColor="@color/text"
android:alpha="0.6" android:alpha="0.6"
android:text="Hold to reveal" /> android:text="@string/activity_seed_reveal_button_title" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -72,6 +72,6 @@
android:layout_width="196dp" android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginBottom="@dimen/medium_spacing" android:layout_marginBottom="@dimen/medium_spacing"
android:text="Copy" /> android:text="@string/copy" />
</LinearLayout> </LinearLayout>

View File

@ -43,7 +43,7 @@
android:id="@+id/titleTextView" android:id="@+id/titleTextView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Settings" android:text="@string/activity_settings_title"
android:textColor="@color/text" android:textColor="@color/text"
android:textSize="@dimen/very_large_font_size" android:textSize="@dimen/very_large_font_size"
android:fontFamily="sans-serif-medium" /> android:fontFamily="sans-serif-medium" />
@ -94,7 +94,7 @@
android:paddingTop="12dp" android:paddingTop="12dp"
android:paddingBottom="12dp" android:paddingBottom="12dp"
android:visibility="invisible" android:visibility="invisible"
android:hint="Enter a display name" /> android:hint="@string/activity_settings_display_name_edit_text_hint" />
<TextView <TextView
android:id="@+id/displayNameTextView" android:id="@+id/displayNameTextView"
@ -142,7 +142,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_weight="1" android:layout_weight="1"
android:text="Copy" /> android:text="@string/copy" />
<Button <Button
style="@style/MediumUnimportantOutlineButton" style="@style/MediumUnimportantOutlineButton"
@ -151,7 +151,7 @@
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginLeft="@dimen/medium_spacing" android:layout_marginLeft="@dimen/medium_spacing"
android:text="Share" /> android:text="@string/share" />
</LinearLayout> </LinearLayout>
@ -170,7 +170,7 @@
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textStyle="bold" android:textStyle="bold"
android:gravity="center" android:gravity="center"
android:text="Privacy" /> android:text="@string/activity_settings_privacy_button_title" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -186,7 +186,7 @@
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textStyle="bold" android:textStyle="bold"
android:gravity="center" android:gravity="center"
android:text="Notifications" /> android:text="@string/activity_settings_notifications_button_title" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -202,7 +202,7 @@
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textStyle="bold" android:textStyle="bold"
android:gravity="center" android:gravity="center"
android:text="Chats" /> android:text="@string/activity_settings_chats_button_title" />
<View <View
android:id="@+id/linkedDevicesButtonTopSeparator" android:id="@+id/linkedDevicesButtonTopSeparator"
@ -219,7 +219,7 @@
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textStyle="bold" android:textStyle="bold"
android:gravity="center" android:gravity="center"
android:text="Devices" /> android:text="@string/activity_settings_devices_button_title" />
<View <View
android:id="@+id/seedButtonTopSeparator" android:id="@+id/seedButtonTopSeparator"
@ -236,7 +236,7 @@
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textStyle="bold" android:textStyle="bold"
android:gravity="center" android:gravity="center"
android:text="Recovery Phrase" /> android:text="@string/activity_settings_recovery_phrase_button_title" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -252,7 +252,7 @@
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textStyle="bold" android:textStyle="bold"
android:gravity="center" android:gravity="center"
android:text="Clear All Data" /> android:text="@string/activity_settings_clear_all_data_button_title" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -14,7 +14,7 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Clear All Data" android:text="@string/dialog_clear_all_data_title"
android:textColor="@color/text" android:textColor="@color/text"
android:textStyle="bold" android:textStyle="bold"
android:textSize="@dimen/medium_font_size" /> android:textSize="@dimen/medium_font_size" />
@ -24,7 +24,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/large_spacing"
android:text="This will permanently delete your Session ID, including all messages, sessions, and contacts." android:text="@string/dialog_clear_all_data_explanation"
android:textColor="@color/text" android:textColor="@color/text"
android:textSize="@dimen/small_font_size" android:textSize="@dimen/small_font_size"
android:textAlignment="center" /> android:textAlignment="center" />
@ -41,7 +41,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_weight="1" android:layout_weight="1"
android:text="Cancel" /> android:text="@string/cancel" />
<Button <Button
style="@style/DestructiveDialogButton" style="@style/DestructiveDialogButton"
@ -50,7 +50,7 @@
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginLeft="@dimen/medium_spacing" android:layout_marginLeft="@dimen/medium_spacing"
android:text="Delete" /> android:text="@string/delete" />
</LinearLayout> </LinearLayout>

View File

@ -30,7 +30,7 @@
android:textAlignment="center" android:textAlignment="center"
android:paddingTop="12dp" android:paddingTop="12dp"
android:paddingBottom="12dp" android:paddingBottom="12dp"
android:hint="Enter a name" /> android:hint="@string/dialog_edit_device_name_edit_text_hint" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -44,7 +44,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_weight="1" android:layout_weight="1"
android:text="Cancel" /> android:text="@string/cancel" />
<Button <Button
style="@style/UnimportantDialogButton" style="@style/UnimportantDialogButton"
@ -53,7 +53,7 @@
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginLeft="@dimen/medium_spacing" android:layout_marginLeft="@dimen/medium_spacing"
android:text="OK" /> android:text="@string/ok" />
</LinearLayout> </LinearLayout>

View File

@ -40,7 +40,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/large_spacing"
android:text="Waiting for Device" android:text="@string/dialog_link_device_master_mode_title_1"
android:textColor="@color/text" android:textColor="@color/text"
android:textStyle="bold" android:textStyle="bold"
android:textSize="@dimen/medium_font_size" /> android:textSize="@dimen/medium_font_size" />
@ -50,7 +50,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/large_spacing"
android:text="Download Session on your other device and tap &quot;Link to an existing account&quot; at the bottom of the landing screen. If you have an existing account on your other device already you will have to delete that account first." android:text="@string/dialog_link_device_master_mode_explanation_1"
android:textColor="@color/text" android:textColor="@color/text"
android:textSize="@dimen/small_font_size" android:textSize="@dimen/small_font_size"
android:textAlignment="center" /> android:textAlignment="center" />
@ -79,7 +79,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_weight="1" android:layout_weight="1"
android:text="Cancel" /> android:text="@string/cancel" />
<Button <Button
style="@style/ProminentDialogButton" style="@style/ProminentDialogButton"
@ -88,7 +88,7 @@
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginLeft="@dimen/medium_spacing" android:layout_marginLeft="@dimen/medium_spacing"
android:text="Authorize" android:text="@string/dialog_link_device_master_mode_authorize_button_title"
android:visibility="gone" /> android:visibility="gone" />
</LinearLayout> </LinearLayout>

View File

@ -25,7 +25,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/large_spacing"
android:text="Waiting for Authorization" android:text="@string/dialog_link_device_slave_mode_title_1"
android:textColor="@color/text" android:textColor="@color/text"
android:textStyle="bold" android:textStyle="bold"
android:textSize="@dimen/medium_font_size" /> android:textSize="@dimen/medium_font_size" />
@ -35,7 +35,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/large_spacing"
android:text="Please check that the words below match those shown on your other device." android:text="@string/dialog_link_device_slave_mode_explanation_1"
android:textColor="@color/text" android:textColor="@color/text"
android:textSize="@dimen/small_font_size" android:textSize="@dimen/small_font_size"
android:textAlignment="center" /> android:textAlignment="center" />
@ -56,6 +56,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/large_spacing"
android:text="Cancel" /> android:text="@string/cancel" />
</LinearLayout> </LinearLayout>

View File

@ -14,7 +14,7 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Your Recovery Phrase" android:text="@string/dialog_seed_title"
android:textColor="@color/text" android:textColor="@color/text"
android:textStyle="bold" android:textStyle="bold"
android:textSize="@dimen/medium_font_size" /> android:textSize="@dimen/medium_font_size" />
@ -33,7 +33,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/large_spacing"
android:text="This is your recovery phrase. With it, you can restore or migrate your Session ID to a new device." android:text="@string/dialog_seed_explanation"
android:textColor="@color/text" android:textColor="@color/text"
android:textSize="@dimen/small_font_size" android:textSize="@dimen/small_font_size"
android:textAlignment="center" android:textAlignment="center"
@ -51,7 +51,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_weight="1" android:layout_weight="1"
android:text="Cancel" /> android:text="@string/cancel" />
<Button <Button
style="@style/UnimportantDialogButton" style="@style/UnimportantDialogButton"
@ -60,7 +60,7 @@
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginLeft="@dimen/medium_spacing" android:layout_marginLeft="@dimen/medium_spacing"
android:text="Copy" /> android:text="@string/copy" />
</LinearLayout> </LinearLayout>

View File

@ -15,7 +15,7 @@
android:drawableStart="@drawable/ic_edit_white_24dp" android:drawableStart="@drawable/ic_edit_white_24dp"
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Change name"/> android:text="@string/fragment_device_list_bottom_sheet_change_name_button_title"/>
<TextView <TextView
android:id="@+id/unlinkDeviceText" android:id="@+id/unlinkDeviceText"
@ -23,6 +23,6 @@
android:drawableStart="@drawable/ic_phonelink_erase_white_24dp" android:drawableStart="@drawable/ic_phonelink_erase_white_24dp"
android:textSize="@dimen/medium_font_size" android:textSize="@dimen/medium_font_size"
android:textColor="@color/text" android:textColor="@color/text"
android:text="@string/fragment_device_list_unlink_device_title" /> android:text="@string/fragment_device_list_bottom_sheet_unlink_device_button_title" />
</LinearLayout> </LinearLayout>

View File

@ -16,7 +16,7 @@
android:layout_marginLeft="@dimen/large_spacing" android:layout_marginLeft="@dimen/large_spacing"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/large_spacing"
android:layout_marginRight="@dimen/large_spacing" android:layout_marginRight="@dimen/large_spacing"
android:hint="Enter an open group URL" /> android:hint="@string/fragment_enter_chat_url_edit_text_hint" />
<View <View
android:layout_width="0dp" android:layout_width="0dp"
@ -28,7 +28,7 @@
android:id="@+id/joinPublicChatButton" android:id="@+id/joinPublicChatButton"
android:layout_width="196dp" android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:text="Next" /> android:text="@string/next" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -41,6 +41,6 @@
android:textColor="@color/text" android:textColor="@color/text"
android:alpha="0.6" android:alpha="0.6"
android:textAlignment="center" android:textAlignment="center"
android:text="Open groups can be joined by anyone and do not provide full privacy protection" /> android:text="@string/fragment_enter_chat_url_privacy_warning" />
</LinearLayout> </LinearLayout>

View File

@ -16,7 +16,7 @@
android:layout_marginLeft="@dimen/large_spacing" android:layout_marginLeft="@dimen/large_spacing"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/large_spacing"
android:layout_marginRight="@dimen/large_spacing" android:layout_marginRight="@dimen/large_spacing"
android:hint="Enter Session ID of recipient" /> android:hint="@string/fragment_enter_public_key_edit_text_hint" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -28,7 +28,7 @@
android:textColor="@color/text" android:textColor="@color/text"
android:alpha="0.6" android:alpha="0.6"
android:textAlignment="center" android:textAlignment="center"
android:text="Users can share their Session ID by going into their account settings and tapping &quot;Share Session ID&quot;, or by sharing their QR code." /> android:text="@string/fragment_enter_public_key_explanation" />
<org.thoughtcrime.securesms.loki.views.LabeledSeparatorView <org.thoughtcrime.securesms.loki.views.LabeledSeparatorView
android:id="@+id/separatorView" android:id="@+id/separatorView"
@ -65,7 +65,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_weight="1" android:layout_weight="1"
android:text="Copy" /> android:text="@string/copy" />
<Button <Button
style="@style/MediumUnimportantFilledButton" style="@style/MediumUnimportantFilledButton"
@ -74,7 +74,7 @@
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginLeft="@dimen/medium_spacing" android:layout_marginLeft="@dimen/medium_spacing"
android:text="Share" /> android:text="@string/share" />
</LinearLayout> </LinearLayout>
@ -89,6 +89,6 @@
android:layout_width="196dp" android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginBottom="@dimen/medium_spacing" android:layout_marginBottom="@dimen/medium_spacing"
android:text="Next" /> android:text="@string/next" />
</LinearLayout> </LinearLayout>

View File

@ -20,7 +20,7 @@
android:textSize="19sp" android:textSize="19sp"
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Link your device" /> android:text="@string/fragment_enter_session_id_title" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -30,7 +30,7 @@
android:layout_marginRight="@dimen/large_spacing" android:layout_marginRight="@dimen/large_spacing"
android:textSize="14sp" android:textSize="14sp"
android:textColor="@color/text" android:textColor="@color/text"
android:text="Navigate to &quot;Settings&quot; > &quot;Devices&quot; > &quot;Link a Device&quot; on your other device and then enter your Session ID here to start the linking process." /> android:text="@string/fragment_enter_session_id_explanation" />
<EditText <EditText
style="@style/SmallSessionEditText" style="@style/SmallSessionEditText"
@ -40,7 +40,7 @@
android:layout_marginLeft="@dimen/large_spacing" android:layout_marginLeft="@dimen/large_spacing"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_marginRight="@dimen/large_spacing" android:layout_marginRight="@dimen/large_spacing"
android:hint="Enter your session ID" /> android:hint="@string/fragment_enter_session_id_edit_text_hint" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
@ -53,6 +53,6 @@
android:layout_width="196dp" android:layout_width="196dp"
android:layout_height="@dimen/medium_button_height" android:layout_height="@dimen/medium_button_height"
android:layout_marginBottom="@dimen/small_spacing" android:layout_marginBottom="@dimen/small_spacing"
android:text="Next" /> android:text="@string/next" />
</LinearLayout> </LinearLayout>

View File

@ -33,7 +33,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/small_spacing" android:layout_marginTop="@dimen/small_spacing"
android:text="@string/session_restore_banner_message" android:text="@string/session_reset_banner_message"
android:textColor="@color/text" android:textColor="@color/text"
android:textSize="@dimen/small_font_size" android:textSize="@dimen/small_font_size"
android:textAlignment="center" /> android:textAlignment="center" />
@ -50,7 +50,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/session_restore_banner_dismiss_button_title" /> android:text="@string/session_reset_banner_dismiss_button_title" />
<Button <Button
style="@style/ProminentDialogButton" style="@style/ProminentDialogButton"
@ -59,7 +59,7 @@
android:layout_height="@dimen/small_button_height" android:layout_height="@dimen/small_button_height"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginLeft="@dimen/medium_spacing" android:layout_marginLeft="@dimen/medium_spacing"
android:text="@string/session_restore_banner_restore_button_title" /> android:text="@string/session_reset_banner_restore_button_title" />
</LinearLayout> </LinearLayout>

View File

@ -13,7 +13,7 @@
android:layout_width="@dimen/fake_chat_view_bubble_width" android:layout_width="@dimen/fake_chat_view_bubble_width"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:text="What's Session?" android:text="@string/view_fake_chat_bubble_1"
android:layout_gravity="right" /> android:layout_gravity="right" />
<TextView <TextView
@ -22,7 +22,7 @@
android:layout_width="@dimen/fake_chat_view_bubble_width" android:layout_width="@dimen/fake_chat_view_bubble_width"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:text="It's a decentralized, encrypted messaging app" android:text="@string/view_fake_chat_bubble_2"
android:layout_gravity="left" /> android:layout_gravity="left" />
<TextView <TextView
@ -31,7 +31,7 @@
android:layout_width="@dimen/fake_chat_view_bubble_width" android:layout_width="@dimen/fake_chat_view_bubble_width"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:text="So it doesn't collect my personal information or my conversation metadata? How does it work?" android:text="@string/view_fake_chat_bubble_3"
android:layout_gravity="right" /> android:layout_gravity="right" />
<TextView <TextView
@ -40,7 +40,7 @@
android:layout_width="@dimen/fake_chat_view_bubble_width" android:layout_width="@dimen/fake_chat_view_bubble_width"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:text="Using a combination of advanced anonymous routing and end-to-end encryption technologies." android:text="@string/view_fake_chat_bubble_4"
android:layout_gravity="left" /> android:layout_gravity="left" />
<TextView <TextView
@ -49,7 +49,7 @@
android:layout_width="@dimen/fake_chat_view_bubble_width" android:layout_width="@dimen/fake_chat_view_bubble_width"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_spacing" android:layout_marginTop="@dimen/medium_spacing"
android:text="Friends don't let friends use compromised messengers. You're welcome." android:text="@string/view_fake_chat_bubble_5"
android:layout_gravity="left" /> android:layout_gravity="left" />
</LinearLayout> </LinearLayout>

View File

@ -1549,9 +1549,12 @@
<string name="prompt_passphrase_activity__tap_to_unlock">TAP TO UNLOCK</string> <string name="prompt_passphrase_activity__tap_to_unlock">TAP TO UNLOCK</string>
<string name="RegistrationLockDialog_reminder">Reminder:</string> <string name="RegistrationLockDialog_reminder">Reminder:</string>
<string name="recipient_preferences__about">About</string> <string name="recipient_preferences__about">About</string>
<!-- EOF -->
<!-- Loki -->
<!-- Old Loki Messenger Copy -->
<!-- Landing activity --> <!-- Landing activity -->
<string name="activity_landing_title">Session</string> <string name="activity_landing_title">Session</string>
@ -1616,16 +1619,6 @@
<string name="fragment_add_public_chat_add_button_title_2">Adding Server...</string> <string name="fragment_add_public_chat_add_button_title_2">Adding Server...</string>
<string name="fragment_add_public_chat_invalid_url_message">Invalid URL</string> <string name="fragment_add_public_chat_invalid_url_message">Invalid URL</string>
<string name="fragment_add_public_chat_connection_failed_message">Couldn\'t Connect</string> <string name="fragment_add_public_chat_connection_failed_message">Couldn\'t Connect</string>
<!-- Friend request view -->
<string name="view_friend_request_accept_button_title">Accept</string>
<string name="view_friend_request_reject_button_title">Decline</string>
<string name="view_friend_request_incoming_pending_message">%1$s sent you a session request</string>
<string name="view_friend_request_incoming_accepted_message">You\'ve accepted %1$s\'s session request</string>
<string name="view_friend_request_incoming_declined_message">You\'ve declined %1$s\'s session request</string>
<string name="view_friend_request_incoming_expired_message">%1$s\'s session request has expired</string>
<string name="view_friend_request_outgoing_pending_message">You\'ve sent %1$s a session request</string>
<string name="view_friend_request_outgoing_accepted_message">%1$s accepted your session request</string>
<string name="view_friend_request_outgoing_expired_message">Your session request to %1$s has expired</string>
<!-- Conversation activity --> <!-- Conversation activity -->
<string name="activity_conversation_pending_friend_request_hint">Pending Friend Request…</string> <string name="activity_conversation_pending_friend_request_hint">Pending Friend Request…</string>
<string name="activity_conversation_default_hint">New Message</string> <string name="activity_conversation_default_hint">New Message</string>
@ -1659,38 +1652,200 @@
<string name="dialog_device_unlink_title">Device unlinked</string> <string name="dialog_device_unlink_title">Device unlinked</string>
<string name="dialog_device_unlink_message">This device has been successfully unlinked</string> <string name="dialog_device_unlink_message">This device has been successfully unlinked</string>
<!-- Session restore banner --> <!-- Session restore banner -->
<string name="session_restore_banner_message">Would you like to restore your session with %s?</string>
<string name="session_restore_banner_dismiss_button_title">Dismiss</string>
<string name="session_restore_banner_restore_button_title">Restore</string>
<!-- Session --> <!-- Session -->
<string name="continue_2">Continue</string>
<string name="copy">Copy</string>
<string name="invalid_url">Invalid URL</string>
<string name="copied_to_clipboard">Copied to clipboard</string>
<string name="device_linking_failed">Couldn\'t link device.</string>
<string name="next">Next</string>
<string name="share">Share</string>
<string name="invalid_session_id">Invalid Session ID</string>
<string name="cancel">Cancel</string>
<string name="activity_landing_title_2">Your Session begins here...</string>
<string name="activity_landing_register_button_title">Create Session ID</string>
<string name="activity_landing_restore_button_title">Continue Your Session</string>
<string name="activity_landing_link_button_title">Link to an existing account</string>
<string name="activity_landing_device_unlinked_dialog_title">Your device was unlinked successfully</string>
<string name="view_fake_chat_bubble_1">What\'s Session?</string>
<string name="view_fake_chat_bubble_2">It\'s a decentralized, encrypted messaging app</string>
<string name="view_fake_chat_bubble_3">So it doesn\'t collect my personal information or my conversation metadata? How does it work?</string>
<string name="view_fake_chat_bubble_4">Using a combination of advanced anonymous routing and end-to-end encryption technologies.</string>
<string name="view_fake_chat_bubble_5">Friends don\'t let friends use compromised messengers. You\'re welcome.</string>
<string name="activity_register_title">Say hello to your Session ID</string>
<string name="activity_register_explanation">Your Session ID is the unique address people can use to contact you on Session. With no connection to your real identity, your Session ID is totally anonymous and private by design.</string>
<string name="activity_register_public_key_copied_message">Copied to clipboard</string> <string name="activity_register_public_key_copied_message">Copied to clipboard</string>
<string name="activity_home_leave_group_dialog_message">Are you sure you want to leave this group?</string>
<string name="activity_home_delete_conversation_dialog_message">Are you sure you want to delete this conversation?</string> <string name="activity_restore_title">Restore your account</string>
<string name="activity_home_conversation_deleted_message">Conversation deleted</string> <string name="activity_restore_explanation">Enter the recovery phrase that was given to you when you signed up to restore your account.</string>
<string name="fragment_contact_selection_contacts_title">Contacts</string> <string name="activity_restore_seed_edit_text_hint">Enter your recovery phrase</string>
<string name="fragment_contact_selection_closed_groups_title">Closed Groups</string>
<string name="fragment_contact_selection_open_groups_title">Open Groups</string> <string name="activity_link_device_title">Link Device</string>
<string name="activity_link_device_enter_session_id_tab_title">Enter Session ID</string>
<string name="activity_link_device_scan_qr_code_tab_title">Scan QR Code</string>
<string name="activity_link_device_scan_qr_code_explanation">Navigate to "Settings" > "Devices" > "Link a Device" on your other device and then scan the QR code that comes up to start the linking process.</string>
<string name="fragment_enter_session_id_title">Link your device</string>
<string name="fragment_enter_session_id_explanation">Navigate to "Settings" > "Devices" > "Link a Device" on your other device and then enter your Session ID here to start the linking process.</string>
<string name="fragment_enter_session_id_edit_text_hint">Enter your Session ID</string>
<string name="activity_display_name_title_2">Pick your display name</string>
<string name="activity_display_name_explanation">This will be your name when you use Session.</string>
<string name="activity_display_name_edit_text_hint">Enter a display name</string>
<string name="activity_display_name_display_name_missing_error">Please pick a display name</string>
<string name="activity_display_name_display_name_invalid_error">Please pick a display name that consists of only a-z, A-Z, 0-9 and _ characters</string>
<string name="activity_display_name_display_name_too_long_error">Please pick a shorter display name</string>
<string name="activity_pn_mode_title">Push Notifications</string> <string name="activity_pn_mode_title">Push Notifications</string>
<string name="activity_pn_mode_explanation">There are two ways Session can handle push notifications. Make sure to read the descriptions carefully before you choose.</string> <string name="activity_pn_mode_explanation">There are two ways Session can handle push notifications. Make sure to read the descriptions carefully before you choose.</string>
<string name="activity_pn_mode_fcm_option_title">Firebase Cloud Messaging</string> <string name="activity_pn_mode_fcm_option_title">Firebase Cloud Messaging</string>
<string name="activity_pn_mode_fcm_option_explanation">Session will use the Firebase Cloud Messaging service to receive push notifications. Youll be notified of new messages reliably and immediately. Using FCM means that this device will communicate directly with Googles servers to retrieve push notifications, which will expose your IP address to Google. Your messages will still be onion-routed and end-to-end encrypted, so the contents of your messages will remain completely private.</string> <string name="activity_pn_mode_fcm_option_explanation">Session will use the Firebase Cloud Messaging service to receive push notifications. You\ll be notified of new messages reliably and immediately. Using FCM means that this device will communicate directly with Google\s servers to retrieve push notifications, which will expose your IP address to Google. Your messages will still be onion-routed and end-to-end encrypted, so the contents of your messages will remain completely private.</string>
<string name="activity_pn_mode_background_polling_option_title">Background Polling</string> <string name="activity_pn_mode_background_polling_option_title">Background Polling</string>
<string name="activity_pn_mode_background_polling_option_explanation">Session will occasionally check for new messages in the background. This guarantees full privacy protection, but message notifications may be significantly delayed.</string> <string name="activity_pn_mode_background_polling_option_explanation">Session will occasionally check for new messages in the background. This guarantees full privacy protection, but message notifications may be significantly delayed.</string>
<string name="activity_pn_mode_recommended_option_tag">Recommended</string> <string name="activity_pn_mode_recommended_option_tag">Recommended</string>
<string name="activity_pn_mode_no_option_picked_dialog_title">Please Pick an Option</string> <string name="activity_pn_mode_no_option_picked_dialog_title">Please Pick an Option</string>
<string name="activity_home_empty_state_message">You don\'t have any contacts yet</string>
<string name="activity_home_empty_state_button_title">Start a Session</string>
<string name="activity_home_leave_group_dialog_message">Are you sure you want to leave this group?</string>
<string name="activity_home_leaving_group_failed_message">"Couldn\'t leave group"</string>
<string name="activity_home_delete_conversation_dialog_message">Are you sure you want to delete this conversation?</string>
<string name="activity_home_conversation_deleted_message">Conversation deleted</string>
<string name="sheet_pn_mode_title">Push Notifications</string> <string name="sheet_pn_mode_title">Push Notifications</string>
<string name="sheet_pn_mode_explanation">Session now features two ways to handle push notifications. Make sure to read the descriptions carefully before you choose.</string> <string name="sheet_pn_mode_explanation">Session now features two ways to handle push notifications. Make sure to read the descriptions carefully before you choose.</string>
<string name="sheet_pn_mode_fcm_option_title">Firebase Cloud Messaging</string> <string name="sheet_pn_mode_fcm_option_title">Firebase Cloud Messaging</string>
<string name="sheet_pn_mode_fcm_option_explanation">Session will use the Firebase Cloud Messaging service to receive push notifications. Youll be notified of new messages reliably and immediately. Using FCM means that this device will communicate directly with Googles servers to retrieve push notifications, which will expose your IP address to Google. Your messages will still be onion-routed and end-to-end encrypted, so the contents of your messages will remain completely private.</string> <string name="sheet_pn_mode_fcm_option_explanation">Session will use the Firebase Cloud Messaging service to receive push notifications. You\ll be notified of new messages reliably and immediately. Using FCM means that this device will communicate directly with Google\s servers to retrieve push notifications, which will expose your IP address to Google. Your messages will still be onion-routed and end-to-end encrypted, so the contents of your messages will remain completely private.</string>
<string name="sheet_pn_mode_background_polling_option_title">Background Polling</string> <string name="sheet_pn_mode_background_polling_option_title">Background Polling</string>
<string name="sheet_pn_mode_background_polling_option_explanation">Session will occasionally check for new messages in the background. This guarantees full privacy protection, but message notifications may be significantly delayed.</string> <string name="sheet_pn_mode_background_polling_option_explanation">Session will occasionally check for new messages in the background. This guarantees full privacy protection, but message notifications may be significantly delayed.</string>
<string name="sheet_pn_mode_recommended_option_tag">Recommended</string> <string name="sheet_pn_mode_recommended_option_tag">Recommended</string>
<string name="sheet_pn_mode_no_option_picked_dialog_title">Please Pick an Option</string> <string name="sheet_pn_mode_no_option_picked_dialog_title">Please Pick an Option</string>
<string name="sheet_pn_mode_confirm_button_title">Confirm</string> <string name="sheet_pn_mode_confirm_button_title">Confirm</string>
<string name="sheet_pn_mode_skip_button_title">Skip</string> <string name="sheet_pn_mode_skip_button_title">Skip</string>
<string name="activity_seed_title">Your Recovery Phrase</string>
<string name="activity_seed_title_2">Meet your recovery phrase</string>
<string name="activity_seed_explanation">Your recovery phrase is the master key to your Session ID — you can use it to restore your Session ID if you lose access to your device. Store your recovery phrase in a safe place, and don\t give it to anyone. To restore your Session ID, launch Session and tap Continue your Session.</string>
<string name="activity_seed_reveal_button_title">Hold to reveal</string>
<string name="view_seed_reminder_subtitle_1">Secure your account by saving your recovery phrase</string>
<string name="view_seed_reminder_subtitle_2">Tap and hold the redacted words to reveal your recovery phrase, then store it safely to secure your Session ID.</string>
<string name="view_seed_reminder_subtitle_3">Make sure to store your recovery phrase in a safe place</string>
<string name="activity_create_private_chat_title">New Session</string>
<string name="activity_create_private_chat_enter_session_id_tab_title">Enter Session ID</string>
<string name="activity_create_private_chat_scan_qr_code_tab_title">Scan QR Code</string>
<string name="activity_create_private_chat_scan_qr_code_explanation">Scan a user\s QR code to start a session. QR codes can be found by tapping the QR code icon in account settings.</string>
<string name="fragment_enter_public_key_edit_text_hint">Enter Session ID of recipient</string>
<string name="fragment_enter_public_key_explanation">Users can share their Session ID by going into their account settings and tapping "Share Session ID", or by sharing their QR code.</string>
<string name="activity_create_closed_group_title">New Closed Group</string>
<string name="activity_create_closed_group_edit_text_hint">Enter a group name</string>
<string name="activity_create_closed_group_explanation">Closed groups support up to 10 members and provide the same privacy protections as one-on-one sessions.</string>
<string name="activity_create_closed_group_empty_state_message">You don\'t have any contacts yet</string>
<string name="activity_create_closed_group_empty_state_button_title">Start a Session</string>
<string name="activity_create_closed_group_group_name_missing_error">Please enter a group name</string>
<string name="activity_create_closed_group_group_name_too_long_error">Please enter a shorter group name</string>
<string name="activity_create_closed_group_not_enough_group_members_error">Please pick at least 2 group members</string>
<string name="activity_create_closed_group_too_many_group_members_error">A closed group cannot have more than 10 members</string>
<string name="activity_create_closed_group_invalid_session_id_error">One of the members of your group has an invalid Session ID</string>
<string name="activity_join_public_chat_title">Join Open Group</string>
<string name="activity_join_public_chat_error">Couldn\'t join group</string>
<string name="activity_join_public_chat_enter_group_url_tab_title">Open Group URL</string>
<string name="activity_join_public_chat_scan_qr_code_tab_title">Scan QR Code</string>
<string name="activity_join_public_chat_scan_qr_code_explanation">Scan the QR code of the open group you\'d like to join</string>
<string name="fragment_enter_chat_url_edit_text_hint">Enter an open group URL</string>
<string name="fragment_enter_chat_url_privacy_warning">Open groups can be joined by anyone and do not provide full privacy protection</string>
<string name="activity_settings_title">Settings</string>
<string name="activity_settings_display_name_edit_text_hint">Enter a display name</string>
<string name="activity_settings_display_name_missing_error">Please pick a display name</string>
<string name="activity_settings_invalid_display_name_error">Please pick a display name that consists of only a-z, A-Z, 0-9 and _ characters</string>
<string name="activity_settings_display_name_too_long_error">Please pick a shorter display name</string>
<string name="activity_settings_privacy_button_title">Privacy</string>
<string name="activity_settings_notifications_button_title">Notifications</string>
<string name="activity_settings_chats_button_title">Chats</string>
<string name="activity_settings_devices_button_title">Devices</string>
<string name="activity_settings_recovery_phrase_button_title">Recovery Phrase</string>
<string name="activity_settings_clear_all_data_button_title">Clear Data</string>
<string name="activity_notification_settings_title">Notifications</string>
<string name="activity_privacy_settings_title">Privacy</string>
<string name="activity_chat_settings_title">Chats</string>
<string name="activity_linked_devices_title">Devices</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_title">Device Limit Reached</string>
<string name="activity_linked_devices_multi_device_limit_reached_dialog_explanation">It\'s currently not allowed to link more than one device.</string>
<string name="activity_linked_devices_unlinking_failed_message">Couldn\'t unlink device.</string>
<string name="activity_linked_devices_unlinking_successful_message">Your device was unlinked successfully</string>
<string name="activity_linked_devices_linking_failed_message">Couldn\'t link device.</string>
<string name="preferences_notifications_strategy_category_title">Notification Strategy</string> <string name="preferences_notifications_strategy_category_title">Notification Strategy</string>
<string name="preferences_notifications_use_fcm_option_title">Use FCM</string> <string name="preferences_notifications_use_fcm_option_title">Use FCM</string>
<string name="preferences_notifications_use_fcm_option_explanation">Using Firebase Cloud Messaging allows for more reliable push notifications, but exposes your IP to Google.</string> <string name="preferences_notifications_use_fcm_option_explanation">Using Firebase Cloud Messaging allows for more reliable push notifications, but exposes your IP to Google.</string>
<string name="dialog_link_device_slave_mode_title_1">Waiting for Authorization</string>
<string name="dialog_link_device_slave_mode_title_2">Device Link Authorized</string>
<string name="dialog_link_device_slave_mode_explanation_1">Please check that the words below match those shown on your other device.</string>
<string name="dialog_link_device_slave_mode_explanation_2">Your device has been linked successfully</string>
<string name="dialog_link_device_master_mode_title_1">Waiting for Device</string>
<string name="dialog_link_device_master_mode_title_2">Linking Request Received</string>
<string name="dialog_link_device_master_mode_title_3">Authorizing Device Link</string>
<string name="dialog_link_device_master_mode_explanation_1">Download Session on your other device and tap "Link to an existing account" at the bottom of the landing screen. If you have an existing account on your other device already you will have to delete that account first.</string>
<string name="dialog_link_device_master_mode_explanation_2">Please check that the words below match those shown on your other device.</string>
<string name="dialog_link_device_master_mode_explanation_3">Please wait while the device link is created. This can take up to a minute.</string>
<string name="dialog_link_device_master_mode_authorize_button_title">Authorize</string>
<string name="fragment_device_list_bottom_sheet_change_name_button_title">Change name</string>
<string name="fragment_device_list_bottom_sheet_unlink_device_button_title">Unlink device</string>
<string name="dialog_edit_device_name_edit_text_hint">Enter a name</string>
<string name="dialog_seed_title">Your Recovery Phrase</string>
<string name="dialog_seed_explanation">This is your recovery phrase. With it, you can restore or migrate your Session ID to a new device.</string>
<string name="dialog_clear_all_data_title">Clear All Data</string>
<string name="dialog_clear_all_data_explanation">This will permanently delete your Session ID, including all messages, sessions, and contacts.</string>
<string name="activity_qr_code_title">QR Code</string>
<string name="activity_qr_code_view_my_qr_code_tab_title">View My QR Code</string>
<string name="activity_qr_code_view_scan_qr_code_tab_title">Scan QR Code</string>
<string name="activity_qr_code_view_scan_qr_code_explanation">Scan someone\'s QR code to start a conversation with them</string>
<string name="fragment_view_my_qr_code_explanation">This is your QR code. Other users can scan it to start a session with you.</string>
<string name="fragment_view_my_qr_code_share_title">Share QR Code</string>
<string name="view_friend_request_accept_button_title">Accept</string>
<string name="view_friend_request_reject_button_title">Decline</string>
<string name="view_friend_request_incoming_pending_message">%1$s sent you a session request</string>
<string name="view_friend_request_incoming_accepted_message">You\'ve accepted %1$s\'s session request</string>
<string name="view_friend_request_incoming_declined_message">You\'ve declined %1$s\'s session request</string>
<string name="view_friend_request_incoming_expired_message">%1$s\'s session request has expired</string>
<string name="view_friend_request_outgoing_pending_message">You\'ve sent %1$s a session request</string>
<string name="view_friend_request_outgoing_accepted_message">%1$s accepted your session request</string>
<string name="view_friend_request_outgoing_expired_message">Your session request to %1$s has expired</string>
<string name="session_reset_banner_message">Would you like to restore your session with %s?</string>
<string name="session_reset_banner_dismiss_button_title">Dismiss</string>
<string name="session_reset_banner_restore_button_title">Restore</string>
<string name="fragment_contact_selection_contacts_title">Contacts</string>
<string name="fragment_contact_selection_closed_groups_title">Closed Groups</string>
<string name="fragment_contact_selection_open_groups_title">Open Groups</string>
</resources> </resources>

View File

@ -10,7 +10,7 @@ class ChatSettingsActivity : PassphraseRequiredActionBarActivity() {
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) { override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
super.onCreate(savedInstanceState, isReady) super.onCreate(savedInstanceState, isReady)
setContentView(R.layout.activity_fragment_wrapper) setContentView(R.layout.activity_fragment_wrapper)
supportActionBar!!.title = "Chats" supportActionBar!!.title = resources.getString(R.string.activity_chat_settings_title)
val fragment = ChatsPreferenceFragment() val fragment = ChatsPreferenceFragment()
val transaction = supportFragmentManager.beginTransaction() val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fragmentContainer, fragment) transaction.replace(R.id.fragmentContainer, fragment)

View File

@ -47,7 +47,7 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), MemberC
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) { override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
super.onCreate(savedInstanceState, isReady) super.onCreate(savedInstanceState, isReady)
setContentView(R.layout.activity_create_closed_group) setContentView(R.layout.activity_create_closed_group)
supportActionBar!!.title = "New Closed Group" supportActionBar!!.title = resources.getString(R.string.activity_create_closed_group_title)
recyclerView.adapter = createClosedGroupAdapter recyclerView.adapter = createClosedGroupAdapter
recyclerView.layoutManager = LinearLayoutManager(this) recyclerView.layoutManager = LinearLayoutManager(this)
createNewPrivateChatButton.setOnClickListener { createNewPrivateChat() } createNewPrivateChatButton.setOnClickListener { createNewPrivateChat() }
@ -103,17 +103,17 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), MemberC
private fun createClosedGroup() { private fun createClosedGroup() {
val name = nameEditText.text.trim() val name = nameEditText.text.trim()
if (name.isEmpty()) { if (name.isEmpty()) {
return Toast.makeText(this, "Please enter a group name", Toast.LENGTH_LONG).show() return Toast.makeText(this, R.string.activity_create_closed_group_group_name_missing_error, Toast.LENGTH_LONG).show()
} }
if (name.length >= 64) { if (name.length >= 64) {
return Toast.makeText(this, "Please enter a shorter group name", Toast.LENGTH_LONG).show() return Toast.makeText(this, R.string.activity_create_closed_group_group_name_too_long_error, Toast.LENGTH_LONG).show()
} }
val selectedMembers = this.selectedMembers val selectedMembers = this.selectedMembers
if (selectedMembers.count() < 2) { if (selectedMembers.count() < 2) {
return Toast.makeText(this, "Please pick at least 2 group members", Toast.LENGTH_LONG).show() return Toast.makeText(this, R.string.activity_create_closed_group_not_enough_group_members_error, Toast.LENGTH_LONG).show()
} }
if (selectedMembers.count() > 10) { if (selectedMembers.count() > 10) {
return Toast.makeText(this, "A closed group cannot have more than 10 members", Toast.LENGTH_LONG).show() return Toast.makeText(this, R.string.activity_create_closed_group_too_many_group_members_error, Toast.LENGTH_LONG).show()
} }
val recipients = selectedMembers.map { val recipients = selectedMembers.map {
Recipient.from(this, Address.fromSerialized(it), false) Recipient.from(this, Address.fromSerialized(it), false)
@ -155,7 +155,7 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), MemberC
} }
} else { } else {
super.onPostExecute(result) super.onPostExecute(result)
Toast.makeText(activity.applicationContext, "One of the members of your group has an invalid Session ID.", Toast.LENGTH_LONG).show() Toast.makeText(activity.applicationContext, R.string.activity_create_closed_group_invalid_session_id_error, Toast.LENGTH_LONG).show()
} }
} }
} }

View File

@ -34,7 +34,7 @@ class CreatePrivateChatActivity : PassphraseRequiredActionBarActivity(), ScanQRC
// Set content view // Set content view
setContentView(R.layout.activity_create_private_chat) setContentView(R.layout.activity_create_private_chat)
// Set title // Set title
supportActionBar!!.title = "New Session" supportActionBar!!.title = resources.getString(R.string.activity_create_private_chat_title)
// Set up view pager // Set up view pager
viewPager.adapter = adapter viewPager.adapter = adapter
tabLayout.setupWithViewPager(viewPager) tabLayout.setupWithViewPager(viewPager)
@ -47,7 +47,7 @@ class CreatePrivateChatActivity : PassphraseRequiredActionBarActivity(), ScanQRC
} }
fun createPrivateChatIfPossible(hexEncodedPublicKey: String) { fun createPrivateChatIfPossible(hexEncodedPublicKey: String) {
if (!PublicKeyValidation.isValid(hexEncodedPublicKey)) { return Toast.makeText(this, "Invalid Session ID", Toast.LENGTH_SHORT).show() } if (!PublicKeyValidation.isValid(hexEncodedPublicKey)) { return Toast.makeText(this, R.string.invalid_session_id, Toast.LENGTH_SHORT).show() }
val masterHexEncodedPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(this) val masterHexEncodedPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(this)
val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(this) val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(this)
val targetHexEncodedPublicKey = if (hexEncodedPublicKey == masterHexEncodedPublicKey) userHexEncodedPublicKey else hexEncodedPublicKey val targetHexEncodedPublicKey = if (hexEncodedPublicKey == masterHexEncodedPublicKey) userHexEncodedPublicKey else hexEncodedPublicKey
@ -78,7 +78,7 @@ private class CreatePrivateChatActivityAdapter(val activity: CreatePrivateChatAc
1 -> { 1 -> {
val result = ScanQRCodeWrapperFragment() val result = ScanQRCodeWrapperFragment()
result.delegate = activity result.delegate = activity
result.message = "Scan a users QR code to start a session. QR codes can be found by tapping the QR code icon in account settings." result.message = activity.resources.getString(R.string.activity_create_private_chat_scan_qr_code_explanation)
result result
} }
else -> throw IllegalStateException() else -> throw IllegalStateException()
@ -87,8 +87,8 @@ private class CreatePrivateChatActivityAdapter(val activity: CreatePrivateChatAc
override fun getPageTitle(index: Int): CharSequence? { override fun getPageTitle(index: Int): CharSequence? {
return when (index) { return when (index) {
0 -> "Enter Session ID" 0 -> activity.resources.getString(R.string.activity_create_private_chat_enter_session_id_tab_title)
1 -> "Scan QR Code" 1 -> activity.resources.getString(R.string.activity_create_private_chat_scan_qr_code_tab_title)
else -> throw IllegalStateException() else -> throw IllegalStateException()
} }
} }
@ -122,7 +122,7 @@ class EnterPublicKeyFragment : Fragment() {
val clipboard = activity!!.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clipboard = activity!!.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Session ID", hexEncodedPublicKey) val clip = ClipData.newPlainText("Session ID", hexEncodedPublicKey)
clipboard.primaryClip = clip clipboard.primaryClip = clip
Toast.makeText(context!!, R.string.activity_register_public_key_copied_message, Toast.LENGTH_SHORT).show() Toast.makeText(context!!, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
} }
private fun sharePublicKey() { private fun sharePublicKey() {

View File

@ -39,13 +39,13 @@ class DisplayNameActivity : BaseActionBarActivity() {
private fun register() { private fun register() {
val displayName = displayNameEditText.text.toString().trim() val displayName = displayNameEditText.text.toString().trim()
if (displayName.isEmpty()) { if (displayName.isEmpty()) {
return Toast.makeText(this, "Please pick a display name", Toast.LENGTH_SHORT).show() return Toast.makeText(this, R.string.activity_display_name_display_name_missing_error, Toast.LENGTH_SHORT).show()
} }
if (!displayName.matches(Regex("[a-zA-Z0-9_]+"))) { if (!displayName.matches(Regex("[a-zA-Z0-9_]+"))) {
return Toast.makeText(this, "Please pick a display name that consists of only a-z, A-Z, 0-9 and _ characters", Toast.LENGTH_SHORT).show() return Toast.makeText(this, R.string.activity_display_name_display_name_invalid_error, Toast.LENGTH_SHORT).show()
} }
if (displayName.toByteArray().size > ProfileCipher.NAME_PADDED_LENGTH) { if (displayName.toByteArray().size > ProfileCipher.NAME_PADDED_LENGTH) {
return Toast.makeText(this, "Please pick a shorter display name", Toast.LENGTH_SHORT).show() return Toast.makeText(this, R.string.activity_display_name_display_name_too_long_error, Toast.LENGTH_SHORT).show()
} }
val inputMethodManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager val inputMethodManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(displayNameEditText.windowToken, 0) inputMethodManager.hideSoftInputFromWindow(displayNameEditText.windowToken, 0)

View File

@ -105,10 +105,10 @@ class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListe
val isMasterDevice = (TextSecurePreferences.getMasterHexEncodedPublicKey(this) == null) val isMasterDevice = (TextSecurePreferences.getMasterHexEncodedPublicKey(this) == null)
val hasViewedSeed = TextSecurePreferences.getHasViewedSeed(this) val hasViewedSeed = TextSecurePreferences.getHasViewedSeed(this)
if (!hasViewedSeed && isMasterDevice) { if (!hasViewedSeed && isMasterDevice) {
val seedReminderViewTitle = SpannableString("You're almost finished! 80%") val seedReminderViewTitle = SpannableString("You're almost finished! 80%") // Intentionally not yet translated
seedReminderViewTitle.setSpan(ForegroundColorSpan(resources.getColorWithID(R.color.accent, theme)), 24, 27, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) seedReminderViewTitle.setSpan(ForegroundColorSpan(resources.getColorWithID(R.color.accent, theme)), 24, 27, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
seedReminderView.title = seedReminderViewTitle seedReminderView.title = seedReminderViewTitle
seedReminderView.subtitle = "Secure your account by saving your recovery phrase" seedReminderView.subtitle = resources.getString(R.string.view_seed_reminder_subtitle_1)
seedReminderView.setProgress(80, false) seedReminderView.setProgress(80, false)
seedReminderView.delegate = this seedReminderView.delegate = this
} else { } else {
@ -313,7 +313,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListe
// Send a leave group message if this is an active closed group // Send a leave group message if this is an active closed group
if (isClosedGroup && DatabaseFactory.getGroupDatabase(activity).isActive(recipient.address.toGroupString())) { if (isClosedGroup && DatabaseFactory.getGroupDatabase(activity).isActive(recipient.address.toGroupString())) {
if (!ClosedGroupsProtocol.leaveGroup(activity, recipient)) { if (!ClosedGroupsProtocol.leaveGroup(activity, recipient)) {
Toast.makeText(activity, "Couldn't leave group", Toast.LENGTH_LONG).show() Toast.makeText(activity, R.string.activity_home_leaving_group_failed_message, Toast.LENGTH_LONG).show()
clearView(activity.recyclerView, viewHolder) clearView(activity.recyclerView, viewHolder)
return@setPositiveButton return@setPositiveButton
} }

View File

@ -32,7 +32,7 @@ class JoinPublicChatActivity : PassphraseRequiredActionBarActivity(), ScanQRCode
// Set content view // Set content view
setContentView(R.layout.activity_join_public_chat) setContentView(R.layout.activity_join_public_chat)
// Set title // Set title
supportActionBar!!.title = "Join Open Group" supportActionBar!!.title = resources.getString(R.string.activity_join_public_chat_title)
// Set up view pager // Set up view pager
viewPager.adapter = adapter viewPager.adapter = adapter
tabLayout.setupWithViewPager(viewPager) tabLayout.setupWithViewPager(viewPager)
@ -63,7 +63,7 @@ class JoinPublicChatActivity : PassphraseRequiredActionBarActivity(), ScanQRCode
fun joinPublicChatIfPossible(url: String) { fun joinPublicChatIfPossible(url: String) {
if (!Patterns.WEB_URL.matcher(url).matches() || !url.startsWith("https://")) { if (!Patterns.WEB_URL.matcher(url).matches() || !url.startsWith("https://")) {
return Toast.makeText(this, "Invalid URL", Toast.LENGTH_SHORT).show() return Toast.makeText(this, R.string.invalid_url, Toast.LENGTH_SHORT).show()
} }
showLoader() showLoader()
val channel: Long = 1 val channel: Long = 1
@ -73,7 +73,7 @@ class JoinPublicChatActivity : PassphraseRequiredActionBarActivity(), ScanQRCode
finish() finish()
}.failUi { }.failUi {
hideLoader() hideLoader()
Toast.makeText(this, "Couldn't join channel", Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.activity_join_public_chat_error, Toast.LENGTH_SHORT).show()
} }
} }
// endregion // endregion
@ -92,7 +92,7 @@ private class JoinPublicChatActivityAdapter(val activity: JoinPublicChatActivity
1 -> { 1 -> {
val result = ScanQRCodeWrapperFragment() val result = ScanQRCodeWrapperFragment()
result.delegate = activity result.delegate = activity
result.message = "Scan the QR code of the open group you'd like to join" result.message = activity.resources.getString(R.string.activity_join_public_chat_scan_qr_code_explanation)
result result
} }
else -> throw IllegalStateException() else -> throw IllegalStateException()
@ -101,8 +101,8 @@ private class JoinPublicChatActivityAdapter(val activity: JoinPublicChatActivity
override fun getPageTitle(index: Int): CharSequence? { override fun getPageTitle(index: Int): CharSequence? {
return when (index) { return when (index) {
0 -> "Open Group URL" 0 -> activity.resources.getString(R.string.activity_join_public_chat_enter_group_url_tab_title)
1 -> "Scan QR Code" 1 -> activity.resources.getString(R.string.activity_join_public_chat_scan_qr_code_tab_title)
else -> throw IllegalStateException() else -> throw IllegalStateException()
} }
} }

View File

@ -47,7 +47,7 @@ class LandingActivity : BaseActionBarActivity(), LinkDeviceSlaveModeDialogDelega
restoreButton.setOnClickListener { restore() } restoreButton.setOnClickListener { restore() }
linkButton.setOnClickListener { linkDevice() } linkButton.setOnClickListener { linkDevice() }
if (TextSecurePreferences.getWasUnlinked(this)) { if (TextSecurePreferences.getWasUnlinked(this)) {
Toast.makeText(this, "Your device was unlinked successfully", Toast.LENGTH_LONG).show() Toast.makeText(this, R.string.activity_landing_device_unlinked_dialog_title, Toast.LENGTH_LONG).show()
} }
} }
@ -102,7 +102,7 @@ class LandingActivity : BaseActionBarActivity(), LinkDeviceSlaveModeDialogDelega
if (deviceLink == null) { if (deviceLink == null) {
Log.d("Loki", "Failed to sign device link request.") Log.d("Loki", "Failed to sign device link request.")
reset() reset()
return Toast.makeText(application, "Couldn't link device.", Toast.LENGTH_LONG).show() return Toast.makeText(application, R.string.device_linking_failed, Toast.LENGTH_LONG).show()
} }
val application = ApplicationContext.getInstance(this) val application = ApplicationContext.getInstance(this)
application.startPollingIfNeeded() application.startPollingIfNeeded()

View File

@ -26,7 +26,7 @@ class LinkDeviceActivity : BaseActionBarActivity(), ScanQRCodeWrapperFragmentDel
// Set content view // Set content view
setContentView(R.layout.activity_link_device) setContentView(R.layout.activity_link_device)
// Set title // Set title
supportActionBar!!.title = "Link Device" supportActionBar!!.title = resources.getString(R.string.activity_link_device_title)
// Set up view pager // Set up view pager
viewPager.adapter = adapter viewPager.adapter = adapter
tabLayout.setupWithViewPager(viewPager) tabLayout.setupWithViewPager(viewPager)
@ -40,7 +40,7 @@ class LinkDeviceActivity : BaseActionBarActivity(), ScanQRCodeWrapperFragmentDel
fun requestDeviceLinkIfPossible(hexEncodedPublicKey: String) { fun requestDeviceLinkIfPossible(hexEncodedPublicKey: String) {
if (!PublicKeyValidation.isValid(hexEncodedPublicKey)) { if (!PublicKeyValidation.isValid(hexEncodedPublicKey)) {
Toast.makeText(this, "Invalid Session ID", Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.invalid_session_id, Toast.LENGTH_SHORT).show()
} else { } else {
val intent = Intent() val intent = Intent()
intent.putExtra("hexEncodedPublicKey", hexEncodedPublicKey) intent.putExtra("hexEncodedPublicKey", hexEncodedPublicKey)
@ -64,7 +64,7 @@ private class LinkDeviceActivityAdapter(val activity: LinkDeviceActivity) : Frag
1 -> { 1 -> {
val result = ScanQRCodeWrapperFragment() val result = ScanQRCodeWrapperFragment()
result.delegate = activity result.delegate = activity
result.message = "Navigate to \"Settings\" > \"Devices\" > \"Link a Device\" on your other device and then scan the QR code that comes up to start the linking process." result.message = activity.resources.getString(R.string.activity_link_device_scan_qr_code_explanation)
result result
} }
else -> throw IllegalStateException() else -> throw IllegalStateException()
@ -73,8 +73,8 @@ private class LinkDeviceActivityAdapter(val activity: LinkDeviceActivity) : Frag
override fun getPageTitle(index: Int): CharSequence? { override fun getPageTitle(index: Int): CharSequence? {
return when (index) { return when (index) {
0 -> "Enter Session ID" 0 -> activity.getString(R.string.activity_link_device_enter_session_id_tab_title)
1 -> "Scan QR Code" 1 -> activity.getString(R.string.activity_link_device_scan_qr_code_tab_title)
else -> throw IllegalStateException() else -> throw IllegalStateException()
} }
} }

View File

@ -46,7 +46,7 @@ class LinkedDevicesActivity : PassphraseRequiredActionBarActivity, LoaderManager
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) { override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
super.onCreate(savedInstanceState, isReady) super.onCreate(savedInstanceState, isReady)
setContentView(R.layout.activity_linked_devices) setContentView(R.layout.activity_linked_devices)
supportActionBar!!.title = "Devices" supportActionBar!!.title = resources.getString(R.string.activity_linked_devices_title)
recyclerView.adapter = linkedDevicesAdapter recyclerView.adapter = linkedDevicesAdapter
recyclerView.layoutManager = LinearLayoutManager(this) recyclerView.layoutManager = LinearLayoutManager(this)
linkDeviceButton.setOnClickListener { linkDevice() } linkDeviceButton.setOnClickListener { linkDevice() }
@ -99,9 +99,9 @@ class LinkedDevicesActivity : PassphraseRequiredActionBarActivity, LoaderManager
linkDeviceDialog.show(supportFragmentManager, "Link Device Dialog") linkDeviceDialog.show(supportFragmentManager, "Link Device Dialog")
} else { } else {
val builder = AlertDialog.Builder(this) val builder = AlertDialog.Builder(this)
builder.setTitle("Multi Device Limit Reached") builder.setTitle(resources.getString(R.string.activity_linked_devices_multi_device_limit_reached_dialog_title))
builder.setMessage("It's currently not allowed to link more than one device.") builder.setMessage(resources.getString(R.string.activity_linked_devices_multi_device_limit_reached_dialog_explanation))
builder.setPositiveButton("OK", { dialog, _ -> dialog.dismiss() }) builder.setPositiveButton(resources.getString(R.string.ok), { dialog, _ -> dialog.dismiss() })
builder.create().show() builder.create().show()
} }
} }
@ -128,7 +128,7 @@ class LinkedDevicesActivity : PassphraseRequiredActionBarActivity, LoaderManager
val deviceLinks = apiDB.getDeviceLinks(userPublicKey) val deviceLinks = apiDB.getDeviceLinks(userPublicKey)
val deviceLink = deviceLinks.find { it.masterHexEncodedPublicKey == userPublicKey && it.slaveHexEncodedPublicKey == slaveDevicePublicKey } val deviceLink = deviceLinks.find { it.masterHexEncodedPublicKey == userPublicKey && it.slaveHexEncodedPublicKey == slaveDevicePublicKey }
if (deviceLink == null) { if (deviceLink == null) {
return Toast.makeText(this, "Couldn't unlink device.", Toast.LENGTH_LONG).show() return Toast.makeText(this, R.string.activity_linked_devices_unlinking_failed_message, Toast.LENGTH_LONG).show()
} }
LokiFileServerAPI.shared.setDeviceLinks(setOf()).successUi { LokiFileServerAPI.shared.setDeviceLinks(setOf()).successUi {
DatabaseFactory.getLokiAPIDatabase(this).clearDeviceLinks(userPublicKey) DatabaseFactory.getLokiAPIDatabase(this).clearDeviceLinks(userPublicKey)
@ -152,9 +152,9 @@ class LinkedDevicesActivity : PassphraseRequiredActionBarActivity, LoaderManager
sessionStore.deleteAllSessions(deviceLink.slaveHexEncodedPublicKey) sessionStore.deleteAllSessions(deviceLink.slaveHexEncodedPublicKey)
} }
LoaderManager.getInstance(this).restartLoader(0, null, this) LoaderManager.getInstance(this).restartLoader(0, null, this)
Toast.makeText(this, "Your device was unlinked successfully", Toast.LENGTH_LONG).show() Toast.makeText(this, R.string.activity_linked_devices_unlinking_successful_message, Toast.LENGTH_LONG).show()
}.failUi { }.failUi {
Toast.makeText(this, "Couldn't unlink device.", Toast.LENGTH_LONG).show() Toast.makeText(this, R.string.activity_linked_devices_unlinking_failed_message, Toast.LENGTH_LONG).show()
} }
} }
@ -168,7 +168,7 @@ class LinkedDevicesActivity : PassphraseRequiredActionBarActivity, LoaderManager
} }
override fun onDeviceLinkAuthorizationFailed() { override fun onDeviceLinkAuthorizationFailed() {
Toast.makeText(this, "Couldn't link device", Toast.LENGTH_LONG).show() Toast.makeText(this, R.string.activity_linked_devices_linking_failed_message, Toast.LENGTH_LONG).show()
} }
override fun onDeviceLinkCanceled() { override fun onDeviceLinkCanceled() {

View File

@ -10,7 +10,7 @@ class NotificationSettingsActivity : PassphraseRequiredActionBarActivity() {
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) { override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
super.onCreate(savedInstanceState, isReady) super.onCreate(savedInstanceState, isReady)
setContentView(R.layout.activity_fragment_wrapper) setContentView(R.layout.activity_fragment_wrapper)
supportActionBar!!.title = "Notifications" supportActionBar!!.title = resources.getString(R.string.activity_notification_settings_title)
val fragment = NotificationsPreferenceFragment() val fragment = NotificationsPreferenceFragment()
val transaction = supportFragmentManager.beginTransaction() val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fragmentContainer, fragment) transaction.replace(R.id.fragmentContainer, fragment)

View File

@ -10,7 +10,7 @@ class PrivacySettingsActivity : PassphraseRequiredActionBarActivity() {
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) { override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
super.onCreate(savedInstanceState, isReady) super.onCreate(savedInstanceState, isReady)
setContentView(R.layout.activity_fragment_wrapper) setContentView(R.layout.activity_fragment_wrapper)
supportActionBar!!.title = "Privacy" supportActionBar!!.title = resources.getString(R.string.activity_privacy_settings_title)
val fragment = AppProtectionPreferenceFragment() val fragment = AppProtectionPreferenceFragment()
val transaction = supportFragmentManager.beginTransaction() val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fragmentContainer, fragment) transaction.replace(R.id.fragmentContainer, fragment)

View File

@ -40,7 +40,7 @@ class QRCodeActivity : PassphraseRequiredActionBarActivity(), ScanQRCodeWrapperF
// Set content view // Set content view
setContentView(R.layout.activity_qr_code) setContentView(R.layout.activity_qr_code)
// Set title // Set title
supportActionBar!!.title = "QR Code" supportActionBar!!.title = resources.getString(R.string.activity_qr_code_title)
// Set up view pager // Set up view pager
viewPager.adapter = adapter viewPager.adapter = adapter
tabLayout.setupWithViewPager(viewPager) tabLayout.setupWithViewPager(viewPager)
@ -53,7 +53,7 @@ class QRCodeActivity : PassphraseRequiredActionBarActivity(), ScanQRCodeWrapperF
} }
fun createPrivateChatIfPossible(hexEncodedPublicKey: String) { fun createPrivateChatIfPossible(hexEncodedPublicKey: String) {
if (!PublicKeyValidation.isValid(hexEncodedPublicKey)) { return Toast.makeText(this, "Invalid Session ID", Toast.LENGTH_SHORT).show() } if (!PublicKeyValidation.isValid(hexEncodedPublicKey)) { return Toast.makeText(this, R.string.invalid_session_id, Toast.LENGTH_SHORT).show() }
val masterHexEncodedPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(this) val masterHexEncodedPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(this)
val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(this) val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(this)
val targetHexEncodedPublicKey = if (hexEncodedPublicKey == masterHexEncodedPublicKey) userHexEncodedPublicKey else hexEncodedPublicKey val targetHexEncodedPublicKey = if (hexEncodedPublicKey == masterHexEncodedPublicKey) userHexEncodedPublicKey else hexEncodedPublicKey
@ -84,7 +84,7 @@ private class QRCodeActivityAdapter(val activity: QRCodeActivity) : FragmentPage
1 -> { 1 -> {
val result = ScanQRCodeWrapperFragment() val result = ScanQRCodeWrapperFragment()
result.delegate = activity result.delegate = activity
result.message = "Scan someone\'s QR code to start a conversation with them" result.message = activity.resources.getString(R.string.activity_qr_code_view_scan_qr_code_explanation)
result result
} }
else -> throw IllegalStateException() else -> throw IllegalStateException()
@ -93,8 +93,8 @@ private class QRCodeActivityAdapter(val activity: QRCodeActivity) : FragmentPage
override fun getPageTitle(index: Int): CharSequence? { override fun getPageTitle(index: Int): CharSequence? {
return when (index) { return when (index) {
0 -> "View My QR Code" 0 -> activity.resources.getString(R.string.activity_qr_code_view_my_qr_code_tab_title)
1 -> "Scan QR Code" 1 -> activity.resources.getString(R.string.activity_qr_code_view_scan_qr_code_tab_title)
else -> throw IllegalStateException() else -> throw IllegalStateException()
} }
} }
@ -122,7 +122,7 @@ class ViewMyQRCodeFragment : Fragment() {
qrCodeImageView.setImageBitmap(qrCode) qrCodeImageView.setImageBitmap(qrCode)
// val explanation = SpannableStringBuilder("This is your unique public QR code. Other users can scan this to start a conversation with you.") // val explanation = SpannableStringBuilder("This is your unique public QR code. Other users can scan this to start a conversation with you.")
// explanation.setSpan(StyleSpan(Typeface.BOLD), 8, 34, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) // explanation.setSpan(StyleSpan(Typeface.BOLD), 8, 34, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
explanationTextView.text = "This is your QR code. Other users can scan it to start a session with you." explanationTextView.text = resources.getString(R.string.fragment_view_my_qr_code_explanation)
shareButton.setOnClickListener { shareQRCode() } shareButton.setOnClickListener { shareQRCode() }
} }
@ -142,7 +142,7 @@ class ViewMyQRCodeFragment : Fragment() {
intent.putExtra(Intent.EXTRA_STREAM, FileProviderUtil.getUriFor(activity!!, file)) intent.putExtra(Intent.EXTRA_STREAM, FileProviderUtil.getUriFor(activity!!, file))
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.type = "image/png" intent.type = "image/png"
startActivity(Intent.createChooser(intent, "Share QR Code")) startActivity(Intent.createChooser(intent, resources.getString(R.string.fragment_view_my_qr_code_share_title)))
} }
if (RxPermissions(this).isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { if (RxPermissions(this).isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
proceed() proceed()

View File

@ -154,7 +154,7 @@ class RegisterActivity : BaseActionBarActivity() {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Session ID", keyPair!!.hexEncodedPublicKey) val clip = ClipData.newPlainText("Session ID", keyPair!!.hexEncodedPublicKey)
clipboard.primaryClip = clip clipboard.primaryClip = clip
Toast.makeText(this, R.string.activity_register_public_key_copied_message, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
} }
private fun openURL(url: String) { private fun openURL(url: String) {
@ -162,7 +162,7 @@ class RegisterActivity : BaseActionBarActivity() {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(intent) startActivity(intent)
} catch (e: Exception) { } catch (e: Exception) {
Toast.makeText(this, "Couldn't open link", Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.invalid_url, Toast.LENGTH_SHORT).show()
} }
} }
// endregion // endregion

View File

@ -117,7 +117,7 @@ class RestoreActivity : BaseActionBarActivity() {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(intent) startActivity(intent)
} catch (e: Exception) { } catch (e: Exception) {
Toast.makeText(this, "Couldn't open link", Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.invalid_url, Toast.LENGTH_SHORT).show()
} }
} }
// endregion // endregion

View File

@ -34,11 +34,11 @@ class SeedActivity : BaseActionBarActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_seed) setContentView(R.layout.activity_seed)
supportActionBar!!.title = "Your Recovery Phrase" supportActionBar!!.title = resources.getString(R.string.activity_seed_title)
val seedReminderViewTitle = SpannableString("You're almost finished! 90%") val seedReminderViewTitle = SpannableString("You're almost finished! 90%") // Intentionally not yet translated
seedReminderViewTitle.setSpan(ForegroundColorSpan(resources.getColorWithID(R.color.accent, theme)), 24, 27, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) seedReminderViewTitle.setSpan(ForegroundColorSpan(resources.getColorWithID(R.color.accent, theme)), 24, 27, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
seedReminderView.title = seedReminderViewTitle seedReminderView.title = seedReminderViewTitle
seedReminderView.subtitle = "Tap and hold the redacted words to reveal your recovery phrase, then store it safely to secure your Session ID." seedReminderView.subtitle = resources.getString(R.string.view_seed_reminder_subtitle_2)
seedReminderView.setProgress(90, false) seedReminderView.setProgress(90, false)
seedReminderView.hideContinueButton() seedReminderView.hideContinueButton()
var redactedSeed = seed var redactedSeed = seed
@ -59,10 +59,10 @@ class SeedActivity : BaseActionBarActivity() {
// region Updating // region Updating
private fun revealSeed() { private fun revealSeed() {
val seedReminderViewTitle = SpannableString("Account secured! 100%") val seedReminderViewTitle = SpannableString("Account secured! 100%") // Intentionally not yet translated
seedReminderViewTitle.setSpan(ForegroundColorSpan(resources.getColorWithID(R.color.accent, theme)), 17, 21, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) seedReminderViewTitle.setSpan(ForegroundColorSpan(resources.getColorWithID(R.color.accent, theme)), 17, 21, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
seedReminderView.title = seedReminderViewTitle seedReminderView.title = seedReminderViewTitle
seedReminderView.subtitle = "Make sure to store your recovery phrase in a safe place" seedReminderView.subtitle = resources.getString(R.string.view_seed_reminder_subtitle_3)
seedReminderView.setProgress(100, true) seedReminderView.setProgress(100, true)
val seedTextViewLayoutParams = seedTextView.layoutParams as LinearLayout.LayoutParams val seedTextViewLayoutParams = seedTextView.layoutParams as LinearLayout.LayoutParams
seedTextViewLayoutParams.height = seedTextView.height seedTextViewLayoutParams.height = seedTextView.height
@ -79,7 +79,7 @@ class SeedActivity : BaseActionBarActivity() {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Seed", seed) val clip = ClipData.newPlainText("Seed", seed)
clipboard.primaryClip = clip clipboard.primaryClip = clip
Toast.makeText(this, R.string.activity_register_public_key_copied_message, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
} }
// endregion // endregion
} }

View File

@ -215,13 +215,13 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
private fun saveDisplayName() { private fun saveDisplayName() {
val displayName = displayNameEditText.text.toString().trim() val displayName = displayNameEditText.text.toString().trim()
if (displayName.isEmpty()) { if (displayName.isEmpty()) {
return Toast.makeText(this, "Please pick a display name", Toast.LENGTH_SHORT).show() return Toast.makeText(this, R.string.activity_settings_display_name_missing_error, Toast.LENGTH_SHORT).show()
} }
if (!displayName.matches(Regex("[a-zA-Z0-9_]+"))) { if (!displayName.matches(Regex("[a-zA-Z0-9_]+"))) {
return Toast.makeText(this, "Please pick a display name that consists of only a-z, A-Z, 0-9 and _ characters", Toast.LENGTH_SHORT).show() return Toast.makeText(this, R.string.activity_settings_invalid_display_name_error, Toast.LENGTH_SHORT).show()
} }
if (displayName.toByteArray().size > ProfileCipher.NAME_PADDED_LENGTH) { if (displayName.toByteArray().size > ProfileCipher.NAME_PADDED_LENGTH) {
return Toast.makeText(this, "Please pick a shorter display name", Toast.LENGTH_SHORT).show() return Toast.makeText(this, R.string.activity_settings_display_name_too_long_error, Toast.LENGTH_SHORT).show()
} }
isEditingDisplayName = false isEditingDisplayName = false
displayNameToBeUploaded = displayName displayNameToBeUploaded = displayName
@ -245,7 +245,7 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Session ID", hexEncodedPublicKey) val clip = ClipData.newPlainText("Session ID", hexEncodedPublicKey)
clipboard.primaryClip = clip clipboard.primaryClip = clip
Toast.makeText(this, R.string.activity_register_public_key_copied_message, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
} }
private fun sharePublicKey() { private fun sharePublicKey() {

View File

@ -59,8 +59,8 @@ class LinkDeviceMasterModeDialog : DialogFragment(), DeviceLinkingSessionListene
val titleTextViewLayoutParams = contentView.titleTextView.layoutParams as LinearLayout.LayoutParams val titleTextViewLayoutParams = contentView.titleTextView.layoutParams as LinearLayout.LayoutParams
titleTextViewLayoutParams.topMargin = toPx(8, resources) titleTextViewLayoutParams.topMargin = toPx(8, resources)
contentView.titleTextView.layoutParams = titleTextViewLayoutParams contentView.titleTextView.layoutParams = titleTextViewLayoutParams
contentView.titleTextView.text = "Linking Request Received" contentView.titleTextView.text = resources.getString(R.string.dialog_link_device_master_mode_title_2)
contentView.explanationTextView.text = "Please check that the words below match those shown on your other device" contentView.explanationTextView.text = resources.getString(R.string.dialog_link_device_master_mode_explanation_2)
contentView.mnemonicTextView.visibility = View.VISIBLE contentView.mnemonicTextView.visibility = View.VISIBLE
contentView.mnemonicTextView.text = MnemonicUtilities.getFirst3Words(MnemonicCodec(languageFileDirectory), deviceLink.slaveHexEncodedPublicKey) contentView.mnemonicTextView.text = MnemonicUtilities.getFirst3Words(MnemonicCodec(languageFileDirectory), deviceLink.slaveHexEncodedPublicKey)
contentView.authorizeButton.visibility = View.VISIBLE contentView.authorizeButton.visibility = View.VISIBLE
@ -77,8 +77,8 @@ class LinkDeviceMasterModeDialog : DialogFragment(), DeviceLinkingSessionListene
val titleTextViewLayoutParams = contentView.titleTextView.layoutParams as LinearLayout.LayoutParams val titleTextViewLayoutParams = contentView.titleTextView.layoutParams as LinearLayout.LayoutParams
titleTextViewLayoutParams.topMargin = toPx(24, resources) titleTextViewLayoutParams.topMargin = toPx(24, resources)
contentView.titleTextView.layoutParams = titleTextViewLayoutParams contentView.titleTextView.layoutParams = titleTextViewLayoutParams
contentView.titleTextView.text = "Authorizing Device Link" contentView.titleTextView.text = resources.getString(R.string.dialog_link_device_master_mode_title_3)
contentView.explanationTextView.text = "Please wait while the device link is created. This can take up to a minute." contentView.explanationTextView.text = resources.getString(R.string.dialog_link_device_master_mode_explanation_3)
contentView.mnemonicTextView.visibility = View.GONE contentView.mnemonicTextView.visibility = View.GONE
contentView.buttonContainer.visibility = View.GONE contentView.buttonContainer.visibility = View.GONE
contentView.cancelButton.visibility = View.GONE contentView.cancelButton.visibility = View.GONE

View File

@ -15,10 +15,10 @@ import network.loki.messenger.R
import org.thoughtcrime.securesms.loki.utilities.MnemonicUtilities import org.thoughtcrime.securesms.loki.utilities.MnemonicUtilities
import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.util.Util
import org.whispersystems.signalservice.loki.crypto.MnemonicCodec
import org.whispersystems.signalservice.loki.protocol.multidevice.DeviceLink import org.whispersystems.signalservice.loki.protocol.multidevice.DeviceLink
import org.whispersystems.signalservice.loki.protocol.multidevice.DeviceLinkingSession import org.whispersystems.signalservice.loki.protocol.multidevice.DeviceLinkingSession
import org.whispersystems.signalservice.loki.protocol.multidevice.DeviceLinkingSessionListener import org.whispersystems.signalservice.loki.protocol.multidevice.DeviceLinkingSessionListener
import org.whispersystems.signalservice.loki.crypto.MnemonicCodec
class LinkDeviceSlaveModeDialog : DialogFragment(), DeviceLinkingSessionListener { class LinkDeviceSlaveModeDialog : DialogFragment(), DeviceLinkingSessionListener {
private val languageFileDirectory by lazy { MnemonicUtilities.getLanguageFileDirectory(context!!) } private val languageFileDirectory by lazy { MnemonicUtilities.getLanguageFileDirectory(context!!) }
@ -50,8 +50,8 @@ class LinkDeviceSlaveModeDialog : DialogFragment(), DeviceLinkingSessionListener
val titleTextViewLayoutParams = contentView.titleTextView.layoutParams as LinearLayout.LayoutParams val titleTextViewLayoutParams = contentView.titleTextView.layoutParams as LinearLayout.LayoutParams
titleTextViewLayoutParams.topMargin = 0 titleTextViewLayoutParams.topMargin = 0
contentView.titleTextView.layoutParams = titleTextViewLayoutParams contentView.titleTextView.layoutParams = titleTextViewLayoutParams
contentView.titleTextView.text = "Device Link Authorized" contentView.titleTextView.text = resources.getString(R.string.dialog_link_device_slave_mode_title_2)
contentView.explanationTextView.text = "Your device has been linked successfully" contentView.explanationTextView.text = resources.getString(R.string.dialog_link_device_slave_mode_explanation_2)
contentView.mnemonicTextView.visibility = View.GONE contentView.mnemonicTextView.visibility = View.GONE
contentView.cancelButton.visibility = View.GONE contentView.cancelButton.visibility = View.GONE
Handler().postDelayed({ Handler().postDelayed({

View File

@ -45,7 +45,7 @@ class SeedDialog : DialogFragment() {
val clipboard = activity!!.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clipboard = activity!!.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Seed", seed) val clip = ClipData.newPlainText("Seed", seed)
clipboard.primaryClip = clip clipboard.primaryClip = clip
Toast.makeText(context!!, R.string.activity_register_public_key_copied_message, Toast.LENGTH_SHORT).show() Toast.makeText(context!!, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show()
dismiss() dismiss()
} }
} }

View File

@ -27,7 +27,7 @@ class SessionRestoreBannerView : LinearLayout {
fun update(recipient: Recipient) { fun update(recipient: Recipient) {
this.recipient = recipient this.recipient = recipient
messageTextView.text = context.getString(R.string.session_restore_banner_message, recipient.toShortString()) messageTextView.text = context.getString(R.string.session_reset_banner_message, recipient.toShortString())
} }
fun show() { fun show() {